Loading media/jni/android_media_tv_Tuner.cpp +23 −121 Original line number Diff line number Diff line Loading @@ -859,8 +859,7 @@ sp<ITimeFilter> TimeFilter::getITimeFilter() { /////////////// FrontendClientCallbackImpl /////////////////////// FrontendClientCallbackImpl::FrontendClientCallbackImpl( jweak tunerObj, FrontendId id) : mObject(tunerObj), mId(id) {} FrontendClientCallbackImpl::FrontendClientCallbackImpl(jweak tunerObj) : mObject(tunerObj) {} void FrontendClientCallbackImpl::onEvent(FrontendEventType frontendEventType) { ALOGD("FrontendClientCallbackImpl::onEvent, type=%d", frontendEventType); Loading Loading @@ -1123,8 +1122,8 @@ JTuner::JTuner(JNIEnv *env, jobject thiz) } JTuner::~JTuner() { if (mFe != NULL) { mFe->close(); if (mFeClient != NULL) { mFeClient->close(); } if (mDemux != NULL) { mDemux->close(); Loading @@ -1134,7 +1133,6 @@ JTuner::~JTuner() { env->DeleteWeakGlobalRef(mObject); env->DeleteGlobalRef(mClass); mTuner = NULL; mFe = NULL; mDemux = NULL; mTunerClient = NULL; mFeClient = NULL; Loading Loading @@ -1189,27 +1187,6 @@ jobject JTuner::getFrontendIds() { } jobject JTuner::openFrontendByHandle(int feHandle) { sp<IFrontend> fe; Result res; uint32_t id = getResourceIdFromHandle(feHandle); mTuner->openFrontendById(id, [&](Result r, const sp<IFrontend>& frontend) { fe = frontend; res = r; }); if (res != Result::SUCCESS || fe == nullptr) { ALOGE("Failed to open frontend"); return NULL; } mFe = fe; mFe_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe); mFeId = id; if (mDemux != NULL) { mDemux->setFrontendDataSource(mFeId); } jint jId = (jint) id; // TODO: Handle reopening frontend with different handle sp<FrontendClient> feClient = mTunerClient->openFrontend(feHandle); if (feClient == NULL) { Loading @@ -1219,11 +1196,10 @@ jobject JTuner::openFrontendByHandle(int feHandle) { mFeClient = feClient; mFeId = mFeClient->getId(); jId = (jint) id; if (mDemuxClient != NULL) { mDemuxClient->setFrontendDataSource(mFeClient); } sp<FrontendClientCallbackImpl> feClientCb = new FrontendClientCallbackImpl(mObject, id); sp<FrontendClientCallbackImpl> feClientCb = new FrontendClientCallbackImpl(mObject); mFeClient->setCallback(feClientCb); JNIEnv *env = AndroidRuntime::getJNIEnv(); Loading @@ -1232,7 +1208,7 @@ jobject JTuner::openFrontendByHandle(int feHandle) { env->FindClass("android/media/tv/tuner/Tuner$Frontend"), gFields.frontendInitID, mObject, (jint) jId); (jint) mFeId); } jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) { Loading Loading @@ -1536,29 +1512,20 @@ int JTuner::stopTune() { int JTuner::scan(const FrontendSettings& settings, FrontendScanType scanType, const FrontendSettingsExt1_1& settingsExt1_1) { if (mFe == NULL) { ALOGE("frontend is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result result; sp<::android::hardware::tv::tuner::V1_1::IFrontend> fe_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe); if (fe_1_1 == NULL) { ALOGD("1.1 frontend is not found. Using 1.0 instead."); result = mFe->scan(settings, scanType); return (int)result; } result = fe_1_1->scan_1_1(settings, scanType, settingsExt1_1); Result result = mFeClient->scan(settings, scanType, settingsExt1_1); return (int)result; } int JTuner::stopScan() { if (mFe == NULL) { ALOGE("frontend is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result result = mFe->stopScan(); Result result = mFeClient->stopScan(); return (int)result; } Loading @@ -1576,11 +1543,11 @@ int JTuner::setLnb(sp<LnbClient> lnbClient) { } int JTuner::setLna(bool enable) { if (mFe == NULL) { ALOGE("frontend is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result result = mFe->setLna(enable); Result result = mFeClient->setLna(enable); return (int)result; } Loading @@ -1603,9 +1570,6 @@ Result JTuner::openDemux() { if (res == Result::SUCCESS) { mDemux = demuxSp; mDemuxId = id; if (mFe != NULL) { mDemux->setFrontendDataSource(mFeId); } } else { return res; } Loading @@ -1631,12 +1595,6 @@ Result JTuner::openDemux() { jint JTuner::close() { Result res = Result::SUCCESS; if (mFe != NULL) { res = mFe->close(); if (res != Result::SUCCESS) { return (jint) res; } } if (mDemux != NULL) { res = mDemux->close(); if (res != Result::SUCCESS) { Loading Loading @@ -1702,24 +1660,11 @@ int JTuner::connectCiCam(jint id) { } int JTuner::linkCiCam(int id) { if (mFe_1_1 == NULL) { ALOGE("frontend 1.1 is not initialized"); return (int)Constant::INVALID_LTS_ID; } Result res; uint32_t ltsId; mFe_1_1->linkCiCam(static_cast<uint32_t>(id), [&](Result r, uint32_t id) { res = r; ltsId = id; }); if (res != Result::SUCCESS) { if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Constant::INVALID_LTS_ID; } return (int) ltsId; return mFeClient->linkCiCamToFrontend(id); } int JTuner::disconnectCiCam() { Loading @@ -1735,12 +1680,12 @@ int JTuner::disconnectCiCam() { int JTuner::unlinkCiCam(int id) { if (mFe_1_1 == NULL) { ALOGE("frontend 1.1 is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result r = mFe_1_1->unlinkCiCam(static_cast<uint32_t>(id)); Result r = mFeClient->unlinkCiCamToFrontend(id); return (int) r; } Loading Loading @@ -1910,7 +1855,7 @@ jobject JTuner::getDemuxCaps() { } jobject JTuner::getFrontendStatus(jintArray types) { if (mFe == NULL) { if (mFeClient == NULL) { return NULL; } JNIEnv *env = AndroidRuntime::getJNIEnv(); Loading @@ -1927,38 +1872,8 @@ jobject JTuner::getFrontendStatus(jintArray types) { } } Result res; hidl_vec<FrontendStatus> status; hidl_vec<FrontendStatusExt1_1> status_1_1; if (v.size() > 0) { mFe->getStatus(v, [&](Result r, const hidl_vec<FrontendStatus>& s) { res = r; status = s; }); if (res != Result::SUCCESS) { return NULL; } } if (v_1_1.size() > 0) { sp<::android::hardware::tv::tuner::V1_1::IFrontend> iFeSp_1_1; iFeSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe); if (iFeSp_1_1 != NULL) { iFeSp_1_1->getStatusExt1_1(v_1_1, [&](Result r, const hidl_vec<FrontendStatusExt1_1>& s) { res = r; status_1_1 = s; }); if (res != Result::SUCCESS) { return NULL; } } else { ALOGW("getStatusExt1_1 is not supported with the current HAL implementation."); } } hidl_vec<FrontendStatus> status = mFeClient->getStatus(v); hidl_vec<FrontendStatusExt1_1> status_1_1 = mFeClient->getStatusExtended_1_1(v_1_1); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendStatus"); jmethodID init = env->GetMethodID(clazz, "<init>", "()V"); Loading Loading @@ -2504,15 +2419,6 @@ bool JTuner::isV1_1ExtendedStatusType(int type) { jint JTuner::closeFrontend() { Result r = Result::SUCCESS; if (mFe != NULL) { r = mFe->close(); } if (r == Result::SUCCESS) { mFe = NULL; mFe_1_1 = NULL; } else { return (jint) r; } if (mFeClient != NULL) { r = mFeClient->close(); Loading Loading @@ -2570,10 +2476,6 @@ static sp<DescramblerClient> getDescramblerClient(JNIEnv *env, jobject descrambl return (DescramblerClient *)env->GetLongField(descrambler, gFields.descramblerContext); } static uint32_t getResourceIdFromHandle(jint handle) { return (handle & 0x00ff0000) >> 16; } static DemuxPid getDemuxPid(int pidType, int pid) { DemuxPid demuxPid; if ((int)pidType == 1) { Loading media/jni/android_media_tv_Tuner.h +1 −9 Original line number Diff line number Diff line Loading @@ -178,7 +178,7 @@ private: }; struct FrontendClientCallbackImpl : public FrontendClientCallback { FrontendClientCallbackImpl(jweak tunerObj, FrontendId id); FrontendClientCallbackImpl(jweak tunerObj); virtual void onEvent(FrontendEventType frontendEventType); virtual void onScanMessage( Loading @@ -187,7 +187,6 @@ struct FrontendClientCallbackImpl : public FrontendClientCallback { FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& messageExt); jweak mObject; FrontendId mId; }; struct TimeFilter : public RefBase { Loading Loading @@ -244,10 +243,6 @@ private: static sp<ITuner> mTuner; static sp<::android::hardware::tv::tuner::V1_1::ITuner> mTuner_1_1; static sp<TunerClient> mTunerClient; // TODO: remove after migrate to client lib sp<IFrontend> mFe; // TODO: remove after migrate to client lib sp<::android::hardware::tv::tuner::V1_1::IFrontend> mFe_1_1; sp<FrontendClient> mFeClient; int mFeId; sp<LnbClient> mLnbClient; Loading @@ -267,9 +262,6 @@ private: static jobject getDtmbFrontendCaps(JNIEnv *env, int id); bool isV1_1ExtendedStatusType(jint type); static uint32_t getResourceIdFromHandle(jint handle) { return (handle & 0x00ff0000) >> 16; } }; class C2DataIdInfo : public C2Param { Loading media/jni/tuner/FrontendClient.cpp +144 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "FrontendClient.h" using ::aidl::android::media::tv::tuner::TunerFrontendSettings; using ::android::hardware::tv::tuner::V1_1::Constant; namespace android { Loading Loading @@ -99,6 +100,96 @@ Result FrontendClient::stopTune() { return Result::INVALID_STATE; } Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type, const FrontendSettingsExt1_1& settingsExt1_1) { if (mTunerFrontend != NULL) { // TODO: parse hidl settings to aidl settings // TODO: aidl frontend settings to include Tuner HAL 1.1 settings TunerFrontendSettings settings; // TODO: handle error message. mTunerFrontend->scan(settings, (int)type); return Result::SUCCESS; } Result result; if (mFrontend_1_1 != NULL) { result = mFrontend_1_1->scan_1_1(settings, type, settingsExt1_1); return result; } if (mFrontend != NULL) { result = mFrontend->scan(settings, type); return result; } return Result::INVALID_STATE; } Result FrontendClient::stopScan() { if (mTunerFrontend != NULL) { // TODO: handle error message. mTunerFrontend->stopScan(); return Result::SUCCESS; } if (mFrontend != NULL) { Result result = mFrontend->stopScan(); return result; } return Result::INVALID_STATE; } vector<FrontendStatus> FrontendClient::getStatus(vector<FrontendStatusType> statusTypes) { vector<FrontendStatus> status; if (mTunerFrontend != NULL) { // TODO: handle error message. /*status = mTunerFrontend->getStatus(statusTypes); return status;*/ } if (mFrontend != NULL && statusTypes.size() > 0) { Result res; mFrontend->getStatus(statusTypes, [&](Result r, const hidl_vec<FrontendStatus>& s) { res = r; status = s; }); if (res != Result::SUCCESS) { status.clear(); return status; } } return status; } vector<FrontendStatusExt1_1> FrontendClient::getStatusExtended_1_1( vector<FrontendStatusTypeExt1_1> statusTypes) { vector<FrontendStatusExt1_1> status; if (mTunerFrontend != NULL) { // TODO: handle error message. /*status = mTunerFrontend->getStatusExtended_1_1(statusTypes); return status;*/ } if (mFrontend_1_1 != NULL && statusTypes.size() > 0) { Result res; mFrontend_1_1->getStatusExt1_1(statusTypes, [&](Result r, const hidl_vec<FrontendStatusExt1_1>& s) { res = r; status = s; }); if (res != Result::SUCCESS) { status.clear(); return status; } } return status; } Result FrontendClient::setLnb(sp<LnbClient> lnbClient) { if (mTunerFrontend != NULL) { // TODO: handle error message. Loading @@ -114,6 +205,59 @@ Result FrontendClient::setLnb(sp<LnbClient> lnbClient) { return Result::INVALID_STATE; } Result FrontendClient::setLna(bool bEnable) { if (mTunerFrontend != NULL) { // TODO: handle error message. /*mTunerFrontend->setLna(bEnable); return Result::SUCCESS;*/ } if (mFrontend != NULL) { Result result = mFrontend->setLna(bEnable); return result; } return Result::INVALID_STATE; } int FrontendClient::linkCiCamToFrontend(int ciCamId) { int ltsId = (int)Constant::INVALID_LTS_ID; if (mTunerFrontend != NULL) { // TODO: handle error message. /*mTunerFrontend->linkCiCamToFrontend(ciCamId, ltsId); return ltsId;*/ } if (mFrontend_1_1 != NULL) { Result res; mFrontend_1_1->linkCiCam(static_cast<uint32_t>(ciCamId), [&](Result r, uint32_t id) { res = r; ltsId = id; }); if (res != Result::SUCCESS) { return (int)Constant::INVALID_LTS_ID; } } return ltsId; } Result FrontendClient::unlinkCiCamToFrontend(int ciCamId) { if (mTunerFrontend != NULL) { // TODO: handle error message. /*mTunerFrontend->unlinkCiCamToFrontend(ciCamId); return Result::SUCCESS;*/ } if (mFrontend_1_1 != NULL) { return mFrontend_1_1->unlinkCiCam(static_cast<uint32_t>(ciCamId)); } return Result::INVALID_STATE; } Result FrontendClient::close() { if (mTunerFrontend != NULL) { // TODO: handle error message. Loading media/jni/tuner/FrontendClient.h +44 −0 Original line number Diff line number Diff line Loading @@ -38,13 +38,18 @@ using ::android::hardware::tv::tuner::V1_0::FrontendInfo; using ::android::hardware::tv::tuner::V1_0::FrontendEventType; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType; using ::android::hardware::tv::tuner::V1_0::FrontendScanType; using ::android::hardware::tv::tuner::V1_0::FrontendSettings; using ::android::hardware::tv::tuner::V1_0::FrontendStatus; using ::android::hardware::tv::tuner::V1_0::FrontendStatusType; using ::android::hardware::tv::tuner::V1_0::IFrontend; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1; using ::android::hardware::tv::tuner::V1_1::IFrontendCallback; using namespace std; Loading Loading @@ -127,11 +132,50 @@ public: */ Result stopTune(); /** * Scan the frontend to use the settings given. */ Result scan(const FrontendSettings& settings, FrontendScanType frontendScanType, const FrontendSettingsExt1_1& settingsExt1_1); /** * Stop the previous scanning. */ Result stopScan(); /** * Gets the statuses of the frontend. */ vector<FrontendStatus> getStatus(vector<FrontendStatusType> statusTypes); /** * Gets the 1.1 extended statuses of the frontend. */ vector<FrontendStatusExt1_1> getStatusExtended_1_1( vector<FrontendStatusTypeExt1_1> statusTypes); /** * Sets Low-Noise Block downconverter (LNB) for satellite frontend. */ Result setLnb(sp<LnbClient> lnbClient); /** * Enable or Disable Low Noise Amplifier (LNA). */ Result setLna(bool bEnable); /** * Link Frontend to the cicam with given id. * * @return lts id */ int linkCiCamToFrontend(int ciCamId); /** * Unink Frontend to the cicam with given id. */ Result unlinkCiCamToFrontend(int ciCamId); /** * Close Frontend. */ Loading Loading
media/jni/android_media_tv_Tuner.cpp +23 −121 Original line number Diff line number Diff line Loading @@ -859,8 +859,7 @@ sp<ITimeFilter> TimeFilter::getITimeFilter() { /////////////// FrontendClientCallbackImpl /////////////////////// FrontendClientCallbackImpl::FrontendClientCallbackImpl( jweak tunerObj, FrontendId id) : mObject(tunerObj), mId(id) {} FrontendClientCallbackImpl::FrontendClientCallbackImpl(jweak tunerObj) : mObject(tunerObj) {} void FrontendClientCallbackImpl::onEvent(FrontendEventType frontendEventType) { ALOGD("FrontendClientCallbackImpl::onEvent, type=%d", frontendEventType); Loading Loading @@ -1123,8 +1122,8 @@ JTuner::JTuner(JNIEnv *env, jobject thiz) } JTuner::~JTuner() { if (mFe != NULL) { mFe->close(); if (mFeClient != NULL) { mFeClient->close(); } if (mDemux != NULL) { mDemux->close(); Loading @@ -1134,7 +1133,6 @@ JTuner::~JTuner() { env->DeleteWeakGlobalRef(mObject); env->DeleteGlobalRef(mClass); mTuner = NULL; mFe = NULL; mDemux = NULL; mTunerClient = NULL; mFeClient = NULL; Loading Loading @@ -1189,27 +1187,6 @@ jobject JTuner::getFrontendIds() { } jobject JTuner::openFrontendByHandle(int feHandle) { sp<IFrontend> fe; Result res; uint32_t id = getResourceIdFromHandle(feHandle); mTuner->openFrontendById(id, [&](Result r, const sp<IFrontend>& frontend) { fe = frontend; res = r; }); if (res != Result::SUCCESS || fe == nullptr) { ALOGE("Failed to open frontend"); return NULL; } mFe = fe; mFe_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe); mFeId = id; if (mDemux != NULL) { mDemux->setFrontendDataSource(mFeId); } jint jId = (jint) id; // TODO: Handle reopening frontend with different handle sp<FrontendClient> feClient = mTunerClient->openFrontend(feHandle); if (feClient == NULL) { Loading @@ -1219,11 +1196,10 @@ jobject JTuner::openFrontendByHandle(int feHandle) { mFeClient = feClient; mFeId = mFeClient->getId(); jId = (jint) id; if (mDemuxClient != NULL) { mDemuxClient->setFrontendDataSource(mFeClient); } sp<FrontendClientCallbackImpl> feClientCb = new FrontendClientCallbackImpl(mObject, id); sp<FrontendClientCallbackImpl> feClientCb = new FrontendClientCallbackImpl(mObject); mFeClient->setCallback(feClientCb); JNIEnv *env = AndroidRuntime::getJNIEnv(); Loading @@ -1232,7 +1208,7 @@ jobject JTuner::openFrontendByHandle(int feHandle) { env->FindClass("android/media/tv/tuner/Tuner$Frontend"), gFields.frontendInitID, mObject, (jint) jId); (jint) mFeId); } jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) { Loading Loading @@ -1536,29 +1512,20 @@ int JTuner::stopTune() { int JTuner::scan(const FrontendSettings& settings, FrontendScanType scanType, const FrontendSettingsExt1_1& settingsExt1_1) { if (mFe == NULL) { ALOGE("frontend is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result result; sp<::android::hardware::tv::tuner::V1_1::IFrontend> fe_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe); if (fe_1_1 == NULL) { ALOGD("1.1 frontend is not found. Using 1.0 instead."); result = mFe->scan(settings, scanType); return (int)result; } result = fe_1_1->scan_1_1(settings, scanType, settingsExt1_1); Result result = mFeClient->scan(settings, scanType, settingsExt1_1); return (int)result; } int JTuner::stopScan() { if (mFe == NULL) { ALOGE("frontend is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result result = mFe->stopScan(); Result result = mFeClient->stopScan(); return (int)result; } Loading @@ -1576,11 +1543,11 @@ int JTuner::setLnb(sp<LnbClient> lnbClient) { } int JTuner::setLna(bool enable) { if (mFe == NULL) { ALOGE("frontend is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result result = mFe->setLna(enable); Result result = mFeClient->setLna(enable); return (int)result; } Loading @@ -1603,9 +1570,6 @@ Result JTuner::openDemux() { if (res == Result::SUCCESS) { mDemux = demuxSp; mDemuxId = id; if (mFe != NULL) { mDemux->setFrontendDataSource(mFeId); } } else { return res; } Loading @@ -1631,12 +1595,6 @@ Result JTuner::openDemux() { jint JTuner::close() { Result res = Result::SUCCESS; if (mFe != NULL) { res = mFe->close(); if (res != Result::SUCCESS) { return (jint) res; } } if (mDemux != NULL) { res = mDemux->close(); if (res != Result::SUCCESS) { Loading Loading @@ -1702,24 +1660,11 @@ int JTuner::connectCiCam(jint id) { } int JTuner::linkCiCam(int id) { if (mFe_1_1 == NULL) { ALOGE("frontend 1.1 is not initialized"); return (int)Constant::INVALID_LTS_ID; } Result res; uint32_t ltsId; mFe_1_1->linkCiCam(static_cast<uint32_t>(id), [&](Result r, uint32_t id) { res = r; ltsId = id; }); if (res != Result::SUCCESS) { if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Constant::INVALID_LTS_ID; } return (int) ltsId; return mFeClient->linkCiCamToFrontend(id); } int JTuner::disconnectCiCam() { Loading @@ -1735,12 +1680,12 @@ int JTuner::disconnectCiCam() { int JTuner::unlinkCiCam(int id) { if (mFe_1_1 == NULL) { ALOGE("frontend 1.1 is not initialized"); if (mFeClient == NULL) { ALOGE("frontend client is not initialized"); return (int)Result::INVALID_STATE; } Result r = mFe_1_1->unlinkCiCam(static_cast<uint32_t>(id)); Result r = mFeClient->unlinkCiCamToFrontend(id); return (int) r; } Loading Loading @@ -1910,7 +1855,7 @@ jobject JTuner::getDemuxCaps() { } jobject JTuner::getFrontendStatus(jintArray types) { if (mFe == NULL) { if (mFeClient == NULL) { return NULL; } JNIEnv *env = AndroidRuntime::getJNIEnv(); Loading @@ -1927,38 +1872,8 @@ jobject JTuner::getFrontendStatus(jintArray types) { } } Result res; hidl_vec<FrontendStatus> status; hidl_vec<FrontendStatusExt1_1> status_1_1; if (v.size() > 0) { mFe->getStatus(v, [&](Result r, const hidl_vec<FrontendStatus>& s) { res = r; status = s; }); if (res != Result::SUCCESS) { return NULL; } } if (v_1_1.size() > 0) { sp<::android::hardware::tv::tuner::V1_1::IFrontend> iFeSp_1_1; iFeSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe); if (iFeSp_1_1 != NULL) { iFeSp_1_1->getStatusExt1_1(v_1_1, [&](Result r, const hidl_vec<FrontendStatusExt1_1>& s) { res = r; status_1_1 = s; }); if (res != Result::SUCCESS) { return NULL; } } else { ALOGW("getStatusExt1_1 is not supported with the current HAL implementation."); } } hidl_vec<FrontendStatus> status = mFeClient->getStatus(v); hidl_vec<FrontendStatusExt1_1> status_1_1 = mFeClient->getStatusExtended_1_1(v_1_1); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendStatus"); jmethodID init = env->GetMethodID(clazz, "<init>", "()V"); Loading Loading @@ -2504,15 +2419,6 @@ bool JTuner::isV1_1ExtendedStatusType(int type) { jint JTuner::closeFrontend() { Result r = Result::SUCCESS; if (mFe != NULL) { r = mFe->close(); } if (r == Result::SUCCESS) { mFe = NULL; mFe_1_1 = NULL; } else { return (jint) r; } if (mFeClient != NULL) { r = mFeClient->close(); Loading Loading @@ -2570,10 +2476,6 @@ static sp<DescramblerClient> getDescramblerClient(JNIEnv *env, jobject descrambl return (DescramblerClient *)env->GetLongField(descrambler, gFields.descramblerContext); } static uint32_t getResourceIdFromHandle(jint handle) { return (handle & 0x00ff0000) >> 16; } static DemuxPid getDemuxPid(int pidType, int pid) { DemuxPid demuxPid; if ((int)pidType == 1) { Loading
media/jni/android_media_tv_Tuner.h +1 −9 Original line number Diff line number Diff line Loading @@ -178,7 +178,7 @@ private: }; struct FrontendClientCallbackImpl : public FrontendClientCallback { FrontendClientCallbackImpl(jweak tunerObj, FrontendId id); FrontendClientCallbackImpl(jweak tunerObj); virtual void onEvent(FrontendEventType frontendEventType); virtual void onScanMessage( Loading @@ -187,7 +187,6 @@ struct FrontendClientCallbackImpl : public FrontendClientCallback { FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& messageExt); jweak mObject; FrontendId mId; }; struct TimeFilter : public RefBase { Loading Loading @@ -244,10 +243,6 @@ private: static sp<ITuner> mTuner; static sp<::android::hardware::tv::tuner::V1_1::ITuner> mTuner_1_1; static sp<TunerClient> mTunerClient; // TODO: remove after migrate to client lib sp<IFrontend> mFe; // TODO: remove after migrate to client lib sp<::android::hardware::tv::tuner::V1_1::IFrontend> mFe_1_1; sp<FrontendClient> mFeClient; int mFeId; sp<LnbClient> mLnbClient; Loading @@ -267,9 +262,6 @@ private: static jobject getDtmbFrontendCaps(JNIEnv *env, int id); bool isV1_1ExtendedStatusType(jint type); static uint32_t getResourceIdFromHandle(jint handle) { return (handle & 0x00ff0000) >> 16; } }; class C2DataIdInfo : public C2Param { Loading
media/jni/tuner/FrontendClient.cpp +144 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "FrontendClient.h" using ::aidl::android::media::tv::tuner::TunerFrontendSettings; using ::android::hardware::tv::tuner::V1_1::Constant; namespace android { Loading Loading @@ -99,6 +100,96 @@ Result FrontendClient::stopTune() { return Result::INVALID_STATE; } Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type, const FrontendSettingsExt1_1& settingsExt1_1) { if (mTunerFrontend != NULL) { // TODO: parse hidl settings to aidl settings // TODO: aidl frontend settings to include Tuner HAL 1.1 settings TunerFrontendSettings settings; // TODO: handle error message. mTunerFrontend->scan(settings, (int)type); return Result::SUCCESS; } Result result; if (mFrontend_1_1 != NULL) { result = mFrontend_1_1->scan_1_1(settings, type, settingsExt1_1); return result; } if (mFrontend != NULL) { result = mFrontend->scan(settings, type); return result; } return Result::INVALID_STATE; } Result FrontendClient::stopScan() { if (mTunerFrontend != NULL) { // TODO: handle error message. mTunerFrontend->stopScan(); return Result::SUCCESS; } if (mFrontend != NULL) { Result result = mFrontend->stopScan(); return result; } return Result::INVALID_STATE; } vector<FrontendStatus> FrontendClient::getStatus(vector<FrontendStatusType> statusTypes) { vector<FrontendStatus> status; if (mTunerFrontend != NULL) { // TODO: handle error message. /*status = mTunerFrontend->getStatus(statusTypes); return status;*/ } if (mFrontend != NULL && statusTypes.size() > 0) { Result res; mFrontend->getStatus(statusTypes, [&](Result r, const hidl_vec<FrontendStatus>& s) { res = r; status = s; }); if (res != Result::SUCCESS) { status.clear(); return status; } } return status; } vector<FrontendStatusExt1_1> FrontendClient::getStatusExtended_1_1( vector<FrontendStatusTypeExt1_1> statusTypes) { vector<FrontendStatusExt1_1> status; if (mTunerFrontend != NULL) { // TODO: handle error message. /*status = mTunerFrontend->getStatusExtended_1_1(statusTypes); return status;*/ } if (mFrontend_1_1 != NULL && statusTypes.size() > 0) { Result res; mFrontend_1_1->getStatusExt1_1(statusTypes, [&](Result r, const hidl_vec<FrontendStatusExt1_1>& s) { res = r; status = s; }); if (res != Result::SUCCESS) { status.clear(); return status; } } return status; } Result FrontendClient::setLnb(sp<LnbClient> lnbClient) { if (mTunerFrontend != NULL) { // TODO: handle error message. Loading @@ -114,6 +205,59 @@ Result FrontendClient::setLnb(sp<LnbClient> lnbClient) { return Result::INVALID_STATE; } Result FrontendClient::setLna(bool bEnable) { if (mTunerFrontend != NULL) { // TODO: handle error message. /*mTunerFrontend->setLna(bEnable); return Result::SUCCESS;*/ } if (mFrontend != NULL) { Result result = mFrontend->setLna(bEnable); return result; } return Result::INVALID_STATE; } int FrontendClient::linkCiCamToFrontend(int ciCamId) { int ltsId = (int)Constant::INVALID_LTS_ID; if (mTunerFrontend != NULL) { // TODO: handle error message. /*mTunerFrontend->linkCiCamToFrontend(ciCamId, ltsId); return ltsId;*/ } if (mFrontend_1_1 != NULL) { Result res; mFrontend_1_1->linkCiCam(static_cast<uint32_t>(ciCamId), [&](Result r, uint32_t id) { res = r; ltsId = id; }); if (res != Result::SUCCESS) { return (int)Constant::INVALID_LTS_ID; } } return ltsId; } Result FrontendClient::unlinkCiCamToFrontend(int ciCamId) { if (mTunerFrontend != NULL) { // TODO: handle error message. /*mTunerFrontend->unlinkCiCamToFrontend(ciCamId); return Result::SUCCESS;*/ } if (mFrontend_1_1 != NULL) { return mFrontend_1_1->unlinkCiCam(static_cast<uint32_t>(ciCamId)); } return Result::INVALID_STATE; } Result FrontendClient::close() { if (mTunerFrontend != NULL) { // TODO: handle error message. Loading
media/jni/tuner/FrontendClient.h +44 −0 Original line number Diff line number Diff line Loading @@ -38,13 +38,18 @@ using ::android::hardware::tv::tuner::V1_0::FrontendInfo; using ::android::hardware::tv::tuner::V1_0::FrontendEventType; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType; using ::android::hardware::tv::tuner::V1_0::FrontendScanType; using ::android::hardware::tv::tuner::V1_0::FrontendSettings; using ::android::hardware::tv::tuner::V1_0::FrontendStatus; using ::android::hardware::tv::tuner::V1_0::FrontendStatusType; using ::android::hardware::tv::tuner::V1_0::IFrontend; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1; using ::android::hardware::tv::tuner::V1_1::IFrontendCallback; using namespace std; Loading Loading @@ -127,11 +132,50 @@ public: */ Result stopTune(); /** * Scan the frontend to use the settings given. */ Result scan(const FrontendSettings& settings, FrontendScanType frontendScanType, const FrontendSettingsExt1_1& settingsExt1_1); /** * Stop the previous scanning. */ Result stopScan(); /** * Gets the statuses of the frontend. */ vector<FrontendStatus> getStatus(vector<FrontendStatusType> statusTypes); /** * Gets the 1.1 extended statuses of the frontend. */ vector<FrontendStatusExt1_1> getStatusExtended_1_1( vector<FrontendStatusTypeExt1_1> statusTypes); /** * Sets Low-Noise Block downconverter (LNB) for satellite frontend. */ Result setLnb(sp<LnbClient> lnbClient); /** * Enable or Disable Low Noise Amplifier (LNA). */ Result setLna(bool bEnable); /** * Link Frontend to the cicam with given id. * * @return lts id */ int linkCiCamToFrontend(int ciCamId); /** * Unink Frontend to the cicam with given id. */ Result unlinkCiCamToFrontend(int ciCamId); /** * Close Frontend. */ Loading