diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 02b6571b0802d..e449fd249e10d 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -351,7 +351,6 @@ public class Tuner implements AutoCloseable { mUserId = ActivityManager.getCurrentUser(); setFrontendInfoList(); - setLnbIds(); } private void setFrontendInfoList() { @@ -405,14 +404,6 @@ public class Tuner implements AutoCloseable { return nativeGetFrontendIds(); } - private void setLnbIds() { - int[] ids = nativeGetLnbIds(); - if (ids == null) { - return; - } - mTunerResourceManager.setLnbInfoList(ids); - } - /** * Sets the listener for resource lost. * @@ -574,7 +565,6 @@ public class Tuner implements AutoCloseable { private native Filter nativeOpenFilter(int type, int subType, long bufferSize); private native TimeFilter nativeOpenTimeFilter(); - private native int[] nativeGetLnbIds(); private native Lnb nativeOpenLnbByHandle(int handle); private native Lnb nativeOpenLnbByName(String name); diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 602364e9e01af..f9a84f740035a 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -1470,28 +1470,6 @@ jobject JTuner::getFrontendInfo(int id) { maxSymbolRate, acquireRange, exclusiveGroupId, statusCaps, jcaps); } -jintArray JTuner::getLnbIds() { - ALOGD("JTuner::getLnbIds()"); - Result res; - hidl_vec lnbIds; - mTuner->getLnbIds([&](Result r, const hidl_vec& ids) { - lnbIds = ids; - res = r; - }); - if (res != Result::SUCCESS || lnbIds.size() == 0) { - ALOGW("Lnb isn't available"); - return NULL; - } - - mLnbIds = lnbIds; - JNIEnv *env = AndroidRuntime::getJNIEnv(); - - jintArray ids = env->NewIntArray(mLnbIds.size()); - env->SetIntArrayRegion(ids, 0, mLnbIds.size(), reinterpret_cast(&mLnbIds[0])); - - return ids; -} - jobject JTuner::openLnbById(int id) { sp iLnbSp; Result r; @@ -3430,11 +3408,6 @@ static jobject android_media_tv_Tuner_get_frontend_info(JNIEnv *env, jobject thi return tuner->getFrontendInfo(id); } -static jintArray android_media_tv_Tuner_get_lnb_ids(JNIEnv *env, jobject thiz) { - sp tuner = getTuner(env, thiz); - return tuner->getLnbIds(); -} - static jobject android_media_tv_Tuner_open_lnb_by_handle(JNIEnv *env, jobject thiz, jint handle) { sp tuner = getTuner(env, thiz); uint32_t id = getResourceIdFromHandle(handle); @@ -4480,7 +4453,6 @@ static const JNINativeMethod gTunerMethods[] = { (void *)android_media_tv_Tuner_open_filter }, { "nativeOpenTimeFilter", "()Landroid/media/tv/tuner/filter/TimeFilter;", (void *)android_media_tv_Tuner_open_time_filter }, - { "nativeGetLnbIds", "()[I", (void *)android_media_tv_Tuner_get_lnb_ids }, { "nativeOpenLnbByHandle", "(I)Landroid/media/tv/tuner/Lnb;", (void *)android_media_tv_Tuner_open_lnb_by_handle }, { "nativeOpenLnbByName", "(Ljava/lang/String;)Landroid/media/tv/tuner/Lnb;", diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h index 9dc4ddfa1b617..8fffb2a22a304 100644 --- a/media/jni/android_media_tv_Tuner.h +++ b/media/jni/android_media_tv_Tuner.h @@ -217,7 +217,6 @@ struct JTuner : public RefBase { int stopScan(); int setLnb(int id); int setLna(bool enable); - jintArray getLnbIds(); jobject openLnbById(int id); jobject openLnbByName(jstring name); jobject openFilter(DemuxFilterType type, int bufferSize); @@ -247,7 +246,6 @@ private: sp<::android::hardware::tv::tuner::V1_1::IFrontend> mFe_1_1; sp mFeClient; int mFeId; - hidl_vec mLnbIds; // TODO: remove after migrate to client lib sp mLnb; // TODO: remove after migrate to client lib diff --git a/media/jni/tuner/FrontendClient.cpp b/media/jni/tuner/FrontendClient.cpp index 44b46f0a0b479..b6225cf5033a1 100644 --- a/media/jni/tuner/FrontendClient.cpp +++ b/media/jni/tuner/FrontendClient.cpp @@ -27,11 +27,11 @@ namespace android { /////////////// FrontendClient /////////////////////// -FrontendClient::FrontendClient(shared_ptr tunerFrontend, int frontendHandle) { +FrontendClient::FrontendClient(shared_ptr tunerFrontend, int id) { mTunerFrontend = tunerFrontend; mAidlCallback = NULL; mHidlCallback = NULL; - mFrontendHandle = frontendHandle; + mId = id; } FrontendClient::~FrontendClient() { @@ -40,7 +40,7 @@ FrontendClient::~FrontendClient() { mFrontend_1_1 = NULL; mAidlCallback = NULL; mHidlCallback = NULL; - mFrontendHandle = -1; + mId = -1; } Result FrontendClient::setCallback(sp frontendClientCallback) { @@ -123,7 +123,7 @@ shared_ptr FrontendClient::getAidlFrontend() { } int FrontendClient::getId() { - return getResourceIdFromHandle(mFrontendHandle); + return mId; } /////////////// TunerFrontendCallback /////////////////////// diff --git a/media/jni/tuner/FrontendClient.h b/media/jni/tuner/FrontendClient.h index 7db572ba09879..265e14f5ddd07 100644 --- a/media/jni/tuner/FrontendClient.h +++ b/media/jni/tuner/FrontendClient.h @@ -105,7 +105,7 @@ private: struct FrontendClient : public RefBase { public: - FrontendClient(shared_ptr tunerFrontend, int frontendHandle); + FrontendClient(shared_ptr tunerFrontend, int id); ~FrontendClient(); /** @@ -135,10 +135,6 @@ public: int getId(); - static int getResourceIdFromHandle(int handle) { - return (handle & 0x00ff0000) >> 16; - } - private: /** * An AIDL Tuner Frontend Singleton assigned at the first time when the Tuner Client @@ -163,7 +159,7 @@ private: shared_ptr mAidlCallback; sp mHidlCallback; - int mFrontendHandle; + int mId; }; } // namespace android diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp index bd18c707f18be..649828f50fd4c 100644 --- a/media/jni/tuner/TunerClient.cpp +++ b/media/jni/tuner/TunerClient.cpp @@ -99,9 +99,10 @@ sp TunerClient::openFrontend(int frontendHandle) { } if (mTuner != NULL) { - sp hidlFrontend = openHidlFrontendByHandle(frontendHandle); + int id = getResourceIdFromHandle(frontendHandle, FRONTEND); + sp hidlFrontend = openHidlFrontendById(id); if (hidlFrontend != NULL) { - sp frontendClient = new FrontendClient(NULL, frontendHandle); + sp frontendClient = new FrontendClient(NULL, id); frontendClient->setHidlFrontend(hidlFrontend); return frontendClient; } @@ -193,10 +194,9 @@ sp TunerClient::getHidlTuner() { return mTuner; } -sp TunerClient::openHidlFrontendByHandle(int frontendHandle) { +sp TunerClient::openHidlFrontendById(int id) { sp fe; Result res; - uint32_t id = getResourceIdFromHandle(frontendHandle); mTuner->openFrontendById(id, [&](Result r, const sp& frontend) { fe = frontend; res = r; @@ -246,4 +246,15 @@ FrontendInfo TunerClient::FrontendInfoAidlToHidl(TunerServiceFrontendInfo aidlFr return hidlFrontendInfo; } + +int TunerClient::getResourceIdFromHandle(int handle, int /*resourceType*/) { + return (handle & 0x00ff0000) >> 16; +} + +int TunerClient::getResourceHandleFromId(int id, int resourceType) { + // TODO: build up randomly generated id to handle mapping + return (resourceType & 0x000000ff) << 24 + | (id << 16) + | (mResourceRequestCount++ & 0xffff); +} } // namespace android diff --git a/media/jni/tuner/TunerClient.h b/media/jni/tuner/TunerClient.h index 197b1100acd69..108293bfd6014 100644 --- a/media/jni/tuner/TunerClient.h +++ b/media/jni/tuner/TunerClient.h @@ -37,6 +37,13 @@ using namespace std; namespace android { +typedef enum { + FRONTEND, + LNB, + DEMUX, + DESCRAMBLER, +} TunerResourceType; + struct TunerClient : public RefBase { public: @@ -95,9 +102,16 @@ public: */ int getHalTunerVersion() { return mTunerVersion; } - static int getResourceIdFromHandle(int handle) { - return (handle & 0x00ff0000) >> 16; - } +private: + sp getHidlTuner(); + sp openHidlFrontendById(int id); + sp openHidlDemux(); + Result getHidlFrontendInfo(int id, FrontendInfo& info); + FrontendInfo FrontendInfoAidlToHidl(TunerServiceFrontendInfo aidlFrontendInfo); + + int getResourceIdFromHandle(int handle, int resourceType); + + int getResourceHandleFromId(int id, int resourceType); private: /** @@ -124,11 +138,7 @@ private: // while the low 16 bits are the minor version. Default value is unknown version 0. static int mTunerVersion; - sp getHidlTuner(); - sp openHidlFrontendByHandle(int frontendHandle); - sp openHidlDemux(); - Result getHidlFrontendInfo(int id, FrontendInfo& info); - FrontendInfo FrontendInfoAidlToHidl(TunerServiceFrontendInfo aidlFrontendInfo); + int mResourceRequestCount = 0; }; } // namespace android