From 38261c3406ba471195ff79be6bb28dde0a753ec6 Mon Sep 17 00:00:00 2001 From: Amy Zhang Date: Wed, 3 Feb 2021 20:38:52 -0800 Subject: [PATCH] Connect TunerDescrambler and DescramblerClient Test: make Bug: 174095851 Change-Id: I039f92cf6135ae7b0f67d6cd97fe0d95edef26be --- media/jni/tuner/DemuxClient.h | 5 +++ media/jni/tuner/DescramblerClient.cpp | 55 ++++++++++++++++++++------- media/jni/tuner/DescramblerClient.h | 13 ++++--- media/jni/tuner/TunerClient.cpp | 15 ++++---- 4 files changed, 62 insertions(+), 26 deletions(-) diff --git a/media/jni/tuner/DemuxClient.h b/media/jni/tuner/DemuxClient.h index 31eb35a1a56dc..c38a8fa346905 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 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 979beeac6b3a3..c9bacda0fa70d 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 tunerDescrambler) { + mTunerDescrambler = tunerDescrambler; } DescramblerClient::~DescramblerClient() { - //mTunerDescrambler = NULL; + mTunerDescrambler = NULL; mDescrambler = NULL; } @@ -47,7 +46,10 @@ Result DescramblerClient::setDemuxSource(sp 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) { } Result DescramblerClient::setKeyToken(vector 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 keyToken) { } Result DescramblerClient::addPid(DemuxPid pid, sp 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 optionalSourceFi return Result::INVALID_STATE;} Result DescramblerClient::removePid(DemuxPid pid, sp optionalSourceFilter) { - // TODO: pending aidl interface - - if (mDescrambler != NULL) { - return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter()); + if (mTunerDescrambler != NULL) { + Status s = mTunerDescrambler->removePid( + getAidlDemuxPid(pid), optionalSourceFilter->getAidlFilter()); + return ClientHelper::getServiceSpecificErrorCode(s); } - return Result::INVALID_STATE;} + if (mDescrambler != NULL) { + return mDescrambler->removePid(pid, optionalSourceFilter->getHalFilter()); + } + + 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((int)pid.tPid()); + break; + case DemuxPid::hidl_discriminator::mmtpPid: + aidlPid.set((int)pid.mmtpPid()); + break; + } + return aidlPid; +} } // namespace android diff --git a/media/jni/tuner/DescramblerClient.h b/media/jni/tuner/DescramblerClient.h index 8af688314db18..a8fa1e2e04970 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 +#include #include #include #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 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 mTunerDescrambler; + shared_ptr 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 a604490daf58c..240b144047478 100644 --- a/media/jni/tuner/TunerClient.cpp +++ b/media/jni/tuner/TunerClient.cpp @@ -224,17 +224,18 @@ shared_ptr TunerClient::getDemuxCaps() { return NULL; } -sp TunerClient::openDescrambler(int /*descramblerHandle*/) { +sp TunerClient::openDescrambler(int descramblerHandle) { if (mTunerService != NULL) { - // TODO: handle error code - /*shared_ptr tunerDescrambler; - mTunerService->openDescrambler(demuxHandle, &tunerDescrambler); - return new DescramblerClient(tunerDescrambler);*/ + shared_ptr 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 = new DescramblerClient(); + sp descramblerClient = new DescramblerClient(NULL); sp hidlDescrambler = openHidlDescrambler(); if (hidlDescrambler != NULL) { descramblerClient->setHidlDescrambler(hidlDescrambler);