diff --git a/media/jni/tuner/DemuxClient.cpp b/media/jni/tuner/DemuxClient.cpp index 1a2f8c065bd38..748d458089329 100644 --- a/media/jni/tuner/DemuxClient.cpp +++ b/media/jni/tuner/DemuxClient.cpp @@ -88,12 +88,19 @@ sp DemuxClient::openFilter(DemuxFilterType type, int bufferSize, } sp DemuxClient::openTimeFilter() { - // TODO: pending aidl interface + if (mTunerDemux != NULL) { + shared_ptr tunerTimeFilter; + Status s = mTunerDemux->openTimeFilter(&tunerTimeFilter); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return NULL; + } + return new TimeFilterClient(tunerTimeFilter); + } if (mDemux != NULL) { sp hidlTimeFilter = openHidlTimeFilter(); if (hidlTimeFilter != NULL) { - sp timeFilterClient = new TimeFilterClient(); + sp timeFilterClient = new TimeFilterClient(NULL); timeFilterClient->setHidlTimeFilter(hidlTimeFilter); return timeFilterClient; } @@ -103,7 +110,14 @@ sp DemuxClient::openTimeFilter() { } int DemuxClient::getAvSyncHwId(sp filterClient) { - // pending aidl interface + if (mTunerDemux != NULL) { + int hwId; + Status s = mTunerDemux->getAvSyncHwId(filterClient->getAidlFilter(), &hwId); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return INVALID_AV_SYNC_HW_ID; + } + return hwId; + } if (mDemux != NULL) { uint32_t avSyncHwId; @@ -119,11 +133,18 @@ int DemuxClient::getAvSyncHwId(sp filterClient) { } } - return -1; + return INVALID_AV_SYNC_HW_ID; } long DemuxClient::getAvSyncTime(int avSyncHwId) { - // pending aidl interface + if (mTunerDemux != NULL) { + int64_t time; + Status s = mTunerDemux->getAvSyncTime(avSyncHwId, &time); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return INVALID_AV_SYNC_TIME; + } + return time; + } if (mDemux != NULL) { uint64_t time; @@ -138,7 +159,7 @@ long DemuxClient::getAvSyncTime(int avSyncHwId) { } } - return -1; + return INVALID_AV_SYNC_TIME; } sp DemuxClient::openDvr(DvrType dvbType, int bufferSize, sp cb) { @@ -167,7 +188,10 @@ sp DemuxClient::openDvr(DvrType dvbType, int bufferSize, spconnectCiCam(ciCamId); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mDemux != NULL) { return mDemux->connectCiCam(static_cast(ciCamId)); @@ -177,7 +201,10 @@ Result DemuxClient::connectCiCam(int ciCamId) { } Result DemuxClient::disconnectCiCam() { - // pending aidl interface + if (mTunerDemux != NULL) { + Status s = mTunerDemux->disconnectCiCam(); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mDemux != NULL) { return mDemux->disconnectCiCam(); diff --git a/media/jni/tuner/DemuxClient.h b/media/jni/tuner/DemuxClient.h index 463944a7dc003..31eb35a1a56dc 100644 --- a/media/jni/tuner/DemuxClient.h +++ b/media/jni/tuner/DemuxClient.h @@ -31,7 +31,9 @@ using Status = ::ndk::ScopedAStatus; using ::aidl::android::media::tv::tuner::ITunerDemux; +using ::aidl::android::media::tv::tuner::ITunerTimeFilter; +using ::android::hardware::tv::tuner::V1_0::IDemux; using ::android::hardware::tv::tuner::V1_0::DemuxFilterType; using ::android::hardware::tv::tuner::V1_0::DvrType; using ::android::hardware::tv::tuner::V1_0::IDemux; @@ -39,6 +41,9 @@ using ::android::hardware::tv::tuner::V1_0::ITimeFilter; using namespace std; +const int64_t INVALID_AV_SYNC_TIME = -1; +const int INVALID_AV_SYNC_HW_ID = -1; + namespace android { struct DemuxClient : public RefBase { diff --git a/media/jni/tuner/TimeFilterClient.cpp b/media/jni/tuner/TimeFilterClient.cpp index 27ea6e596204c..432238d261e51 100644 --- a/media/jni/tuner/TimeFilterClient.cpp +++ b/media/jni/tuner/TimeFilterClient.cpp @@ -19,6 +19,7 @@ #include #include +#include "ClientHelper.h" #include "TimeFilterClient.h" using ::android::hardware::tv::tuner::V1_0::Result; @@ -28,13 +29,12 @@ namespace android { /////////////// TimeFilterClient /////////////////////// -// TODO: pending aidl interface -TimeFilterClient::TimeFilterClient() { - //mTunerTimeFilter = tunerTimeFilter; +TimeFilterClient::TimeFilterClient(shared_ptr tunerTimeFilter) { + mTunerTimeFilter = tunerTimeFilter; } TimeFilterClient::~TimeFilterClient() { - //mTunerTimeFilter = NULL; + mTunerTimeFilter = NULL; mTimeFilter = NULL; } @@ -44,7 +44,10 @@ void TimeFilterClient::setHidlTimeFilter(sp timeFilter) { } Result TimeFilterClient::setTimeStamp(long timeStamp) { - // TODO: pending aidl interface + if (mTunerTimeFilter != NULL) { + Status s = mTunerTimeFilter->setTimeStamp(timeStamp); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mTimeFilter != NULL) { return mTimeFilter->setTimeStamp(timeStamp); @@ -54,7 +57,10 @@ Result TimeFilterClient::setTimeStamp(long timeStamp) { } Result TimeFilterClient::clearTimeStamp() { - // TODO: pending aidl interface + if (mTunerTimeFilter != NULL) { + Status s = mTunerTimeFilter->clearTimeStamp(); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mTimeFilter != NULL) { return mTimeFilter->clearTimeStamp(); @@ -64,7 +70,14 @@ Result TimeFilterClient::clearTimeStamp() { } long TimeFilterClient::getTimeStamp() { - // TODO: pending aidl interface + if (mTunerTimeFilter != NULL) { + int64_t timeStamp; + Status s = mTunerTimeFilter->getTimeStamp(&timeStamp); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP; + } + return timeStamp; + } if (mTimeFilter != NULL) { Result res; @@ -84,27 +97,37 @@ long TimeFilterClient::getTimeStamp() { } long TimeFilterClient::getSourceTime() { - // TODO: pending aidl interface + if (mTunerTimeFilter != NULL) { + int64_t sourceTime; + Status s = mTunerTimeFilter->getTimeStamp(&sourceTime); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP; + } + return sourceTime; + } if (mTimeFilter != NULL) { Result res; - long timestamp; + long sourceTime; mTimeFilter->getSourceTime( [&](Result r, uint64_t t) { res = r; - timestamp = t; + sourceTime = t; }); if (res != Result::SUCCESS) { return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP; } - return timestamp; + return sourceTime; } return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP; } Result TimeFilterClient::close() { - // TODO: pending aidl interface + if (mTunerTimeFilter != NULL) { + Status s = mTunerTimeFilter->close(); + return ClientHelper::getServiceSpecificErrorCode(s); + } if (mTimeFilter != NULL) { return mTimeFilter->close(); diff --git a/media/jni/tuner/TimeFilterClient.h b/media/jni/tuner/TimeFilterClient.h index 9a9d172665ec1..56ddd68d363ea 100644 --- a/media/jni/tuner/TimeFilterClient.h +++ b/media/jni/tuner/TimeFilterClient.h @@ -17,12 +17,13 @@ #ifndef _ANDROID_MEDIA_TV_TIME_FILTER_CLIENT_H_ #define _ANDROID_MEDIA_TV_TIME_FILTER_CLIENT_H_ -//#include +#include #include #include -//using ::aidl::android::media::tv::tuner::ITunerTimeFilter; +using ::aidl::android::media::tv::tuner::ITunerTimeFilter; +using Status = ::ndk::ScopedAStatus; using ::android::hardware::Return; using ::android::hardware::Void; using ::android::hardware::hidl_vec; @@ -36,8 +37,7 @@ namespace android { struct TimeFilterClient : public RefBase { public: - // TODO: add TunerTimeFilter as parameter. - TimeFilterClient(); + TimeFilterClient(shared_ptr tunerTimeFilter); ~TimeFilterClient(); // TODO: remove after migration to Tuner Service is done. @@ -73,8 +73,7 @@ private: * An AIDL Tuner TimeFilter Singleton assigned at the first time the Tuner Client * opens an TimeFilter. Default null when time filter is not opened. */ - // TODO: pending on aidl interface - //shared_ptr mTunerTimeFilter; + shared_ptr mTunerTimeFilter; /** * A TimeFilter HAL interface that is ready before migrating to the TunerTimeFilter. diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp index 14393a1081c6f..a604490daf58c 100644 --- a/media/jni/tuner/TunerClient.cpp +++ b/media/jni/tuner/TunerClient.cpp @@ -200,7 +200,14 @@ sp TunerClient::openDemux(int demuxHandle) { } shared_ptr TunerClient::getDemuxCaps() { - // pending aidl interface + if (mTunerService != NULL) { + TunerDemuxCapabilities aidlCaps; + Status s = mTunerService->getDemuxCaps(&aidlCaps); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return NULL; + } + return make_shared(getHidlDemuxCaps(aidlCaps)); + } if (mTuner != NULL) { Result res; @@ -459,6 +466,26 @@ sp TunerClient::openHidlDescrambler() { return descrambler; } +DemuxCapabilities TunerClient::getHidlDemuxCaps(TunerDemuxCapabilities& aidlCaps) { + DemuxCapabilities caps{ + .numDemux = (uint32_t)aidlCaps.numDemux, + .numRecord = (uint32_t)aidlCaps.numRecord, + .numPlayback = (uint32_t)aidlCaps.numPlayback, + .numTsFilter = (uint32_t)aidlCaps.numTsFilter, + .numSectionFilter = (uint32_t)aidlCaps.numSectionFilter, + .numAudioFilter = (uint32_t)aidlCaps.numAudioFilter, + .numVideoFilter = (uint32_t)aidlCaps.numVideoFilter, + .numPesFilter = (uint32_t)aidlCaps.numPesFilter, + .numPcrFilter = (uint32_t)aidlCaps.numPcrFilter, + .numBytesInSectionFilter = (uint32_t)aidlCaps.numBytesInSectionFilter, + .filterCaps = (uint32_t)aidlCaps.filterCaps, + .bTimeFilter = aidlCaps.bTimeFilter, + }; + caps.linkCaps.resize(aidlCaps.linkCaps.size()); + copy(aidlCaps.linkCaps.begin(), aidlCaps.linkCaps.end(), caps.linkCaps.begin()); + return caps; +} + FrontendInfo TunerClient::FrontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo) { FrontendInfo hidlFrontendInfo { .type = static_cast(aidlFrontendInfo.type), diff --git a/media/jni/tuner/TunerClient.h b/media/jni/tuner/TunerClient.h index 6ce666196be8c..acd018eb1e448 100644 --- a/media/jni/tuner/TunerClient.h +++ b/media/jni/tuner/TunerClient.h @@ -32,6 +32,7 @@ using Status = ::ndk::ScopedAStatus; +using ::aidl::android::media::tv::tuner::TunerDemuxCapabilities; using ::aidl::android::media::tv::tuner::ITunerService; using ::aidl::android::media::tv::tuner::TunerFrontendInfo; using ::aidl::android::media::tv::tunerresourcemanager::ITunerResourceManager; @@ -145,6 +146,7 @@ private: sp openHidlLnbByName(string name, LnbId& lnbId); sp openHidlDescrambler(); vector getLnbHandles(); + DemuxCapabilities getHidlDemuxCaps(TunerDemuxCapabilities& aidlCaps); FrontendInfo FrontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo); void updateTunerResources(); void updateFrontendResources();