diff options
| -rw-r--r-- | media/jni/tuner/DemuxClient.h | 5 | ||||
| -rw-r--r-- | media/jni/tuner/DescramblerClient.cpp | 51 | ||||
| -rw-r--r-- | media/jni/tuner/DescramblerClient.h | 13 | ||||
| -rw-r--r-- | media/jni/tuner/TunerClient.cpp | 15 |
4 files changed, 60 insertions, 24 deletions
diff --git a/media/jni/tuner/DemuxClient.h b/media/jni/tuner/DemuxClient.h index 31eb35a1a56d..c38a8fa34690 100644 --- a/media/jni/tuner/DemuxClient.h +++ b/media/jni/tuner/DemuxClient.h @@ -100,6 +100,11 @@ public: */ Result close(); + /** + * Get the Aidl demux to set as source. + */ + shared_ptr<ITunerDemux> getAidlDemux() { return mTunerDemux; } + void setId(int id) { mId = id; } int getId() { return mId; } diff --git a/media/jni/tuner/DescramblerClient.cpp b/media/jni/tuner/DescramblerClient.cpp index 979beeac6b3a..c9bacda0fa70 100644 --- a/media/jni/tuner/DescramblerClient.cpp +++ b/media/jni/tuner/DescramblerClient.cpp @@ -27,13 +27,12 @@ namespace android { /////////////// DescramblerClient /////////////////////// -// TODO: pending aidl interface -DescramblerClient::DescramblerClient() { - //mTunerDescrambler = tunerDescrambler; +DescramblerClient::DescramblerClient(shared_ptr<ITunerDescrambler> tunerDescrambler) { + mTunerDescrambler = tunerDescrambler; } DescramblerClient::~DescramblerClient() { - //mTunerDescrambler = NULL; + mTunerDescrambler = NULL; mDescrambler = NULL; } @@ -47,7 +46,10 @@ Result DescramblerClient::setDemuxSource(sp<DemuxClient> demuxClient) { return Result::INVALID_ARGUMENT; } - // TODO: pending aidl interface + if (mTunerDescrambler != NULL) { + Status s = mTunerDescrambler->setDemuxSource(demuxClient->getAidlDemux()); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mDescrambler != NULL) { return mDescrambler->setDemuxSource(demuxClient->getId()); @@ -57,7 +59,10 @@ Result DescramblerClient::setDemuxSource(sp<DemuxClient> demuxClient) { } Result DescramblerClient::setKeyToken(vector<uint8_t> keyToken) { - // TODO: pending aidl interface + if (mTunerDescrambler != NULL) { + Status s = mTunerDescrambler->setKeyToken(keyToken); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mDescrambler != NULL) { return mDescrambler->setKeyToken(keyToken); @@ -67,7 +72,11 @@ Result DescramblerClient::setKeyToken(vector<uint8_t> keyToken) { } Result DescramblerClient::addPid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) { - // TODO: pending aidl interface + if (mTunerDescrambler != NULL) { + Status s = mTunerDescrambler->addPid( + getAidlDemuxPid(pid), optionalSourceFilter->getAidlFilter()); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mDescrambler != NULL) { return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter()); @@ -76,16 +85,24 @@ Result DescramblerClient::addPid(DemuxPid pid, sp<FilterClient> optionalSourceFi return Result::INVALID_STATE;} Result DescramblerClient::removePid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) { - // TODO: pending aidl interface + if (mTunerDescrambler != NULL) { + Status s = mTunerDescrambler->removePid( + getAidlDemuxPid(pid), optionalSourceFilter->getAidlFilter()); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mDescrambler != NULL) { - return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter()); + return mDescrambler->removePid(pid, optionalSourceFilter->getHalFilter()); } - return Result::INVALID_STATE;} + return Result::INVALID_STATE; +} Result DescramblerClient::close() { - // TODO: pending aidl interface + if (mTunerDescrambler != NULL) { + Status s = mTunerDescrambler->close(); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mDescrambler != NULL) { return mDescrambler->close(); @@ -95,4 +112,16 @@ Result DescramblerClient::close() { /////////////// DescramblerClient Helper Methods /////////////////////// +TunerDemuxPid DescramblerClient::getAidlDemuxPid(DemuxPid& pid) { + TunerDemuxPid aidlPid; + switch (pid.getDiscriminator()) { + case DemuxPid::hidl_discriminator::tPid: + aidlPid.set<TunerDemuxPid::tPid>((int)pid.tPid()); + break; + case DemuxPid::hidl_discriminator::mmtpPid: + aidlPid.set<TunerDemuxPid::mmtpPid>((int)pid.mmtpPid()); + break; + } + return aidlPid; +} } // namespace android diff --git a/media/jni/tuner/DescramblerClient.h b/media/jni/tuner/DescramblerClient.h index 8af688314db1..a8fa1e2e0497 100644 --- a/media/jni/tuner/DescramblerClient.h +++ b/media/jni/tuner/DescramblerClient.h @@ -17,14 +17,15 @@ #ifndef _ANDROID_MEDIA_TV_DESCRAMBLER_CLIENT_H_ #define _ANDROID_MEDIA_TV_DESCRAMBLER_CLIENT_H_ -//#include <aidl/android/media/tv/tuner/ITunerDescrambler.h> +#include <aidl/android/media/tv/tuner/ITunerDescrambler.h> #include <android/hardware/tv/tuner/1.0/IDescrambler.h> #include <android/hardware/tv/tuner/1.1/types.h> #include "DemuxClient.h" #include "FilterClient.h" -//using ::aidl::android::media::tv::tuner::ITunerDescrambler; +using ::aidl::android::media::tv::tuner::ITunerDescrambler; +using ::aidl::android::media::tv::tuner::TunerDemuxPid; using ::android::hardware::tv::tuner::V1_0::IDescrambler; using ::android::hardware::tv::tuner::V1_0::Result; @@ -37,8 +38,7 @@ namespace android { struct DescramblerClient : public RefBase { public: - // TODO: pending hidl interface - DescramblerClient(); + DescramblerClient(shared_ptr<ITunerDescrambler> tunerDescrambler); ~DescramblerClient(); // TODO: remove after migration to Tuner Service is done. @@ -70,12 +70,13 @@ public: Result close(); private: + TunerDemuxPid getAidlDemuxPid(DemuxPid& pid); + /** * An AIDL Tuner Descrambler Singleton assigned at the first time the Tuner Client * opens a descrambler. Default null when descrambler is not opened. */ - // TODO: pending on aidl interface - //shared_ptr<ITunerDescrambler> mTunerDescrambler; + shared_ptr<ITunerDescrambler> mTunerDescrambler; /** * A Descrambler HAL interface that is ready before migrating to the TunerDescrambler. diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp index a604490daf58..240b14404747 100644 --- a/media/jni/tuner/TunerClient.cpp +++ b/media/jni/tuner/TunerClient.cpp @@ -224,17 +224,18 @@ shared_ptr<DemuxCapabilities> TunerClient::getDemuxCaps() { return NULL; } -sp<DescramblerClient> TunerClient::openDescrambler(int /*descramblerHandle*/) { +sp<DescramblerClient> TunerClient::openDescrambler(int descramblerHandle) { if (mTunerService != NULL) { - // TODO: handle error code - /*shared_ptr<ITunerDescrambler> tunerDescrambler; - mTunerService->openDescrambler(demuxHandle, &tunerDescrambler); - return new DescramblerClient(tunerDescrambler);*/ + shared_ptr<ITunerDescrambler> tunerDescrambler; + Status s = mTunerService->openDescrambler(descramblerHandle, &tunerDescrambler); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return NULL; + } + return new DescramblerClient(tunerDescrambler); } if (mTuner != NULL) { - // TODO: pending aidl interface - sp<DescramblerClient> descramblerClient = new DescramblerClient(); + sp<DescramblerClient> descramblerClient = new DescramblerClient(NULL); sp<IDescrambler> hidlDescrambler = openHidlDescrambler(); if (hidlDescrambler != NULL) { descramblerClient->setHidlDescrambler(hidlDescrambler); |