summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/tv/tuner/Tuner.java33
-rw-r--r--media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java4
-rw-r--r--media/jni/android_media_tv_Tuner.cpp30
-rw-r--r--media/jni/android_media_tv_Tuner.h2
4 files changed, 48 insertions, 21 deletions
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index dbba4eb320ba..48aed349c39a 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -45,6 +45,7 @@ import android.media.tv.tuner.frontend.ScanCallback;
import android.media.tv.tunerresourcemanager.ResourceClientProfile;
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
+import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
import android.media.tv.tunerresourcemanager.TunerResourceManager;
@@ -256,6 +257,36 @@ public class Tuner implements AutoCloseable {
mTunerResourceManager.registerClientProfile(
profile, new HandlerExecutor(mHandler), mResourceListener, clientId);
mClientId = clientId[0];
+
+ setFrontendInfoList();
+ setLnbIds();
+ }
+
+ private void setFrontendInfoList() {
+ List<Integer> ids = nativeGetFrontendIds();
+ if (ids == null) {
+ return;
+ }
+ TunerFrontendInfo[] infos = new TunerFrontendInfo[ids.size()];
+ for (int i = 0; i < ids.size(); i++) {
+ int id = ids.get(i);
+ FrontendInfo frontendInfo = nativeGetFrontendInfo(id);
+ if (frontendInfo == null) {
+ continue;
+ }
+ TunerFrontendInfo tunerFrontendInfo = new TunerFrontendInfo(
+ id, frontendInfo.getType(), frontendInfo.getExclusiveGroupId());
+ infos[i] = tunerFrontendInfo;
+ }
+ mTunerResourceManager.setFrontendInfoList(infos);
+ }
+
+ private void setLnbIds() {
+ int[] ids = nativeGetLnbIds();
+ if (ids == null) {
+ return;
+ }
+ mTunerResourceManager.setLnbInfoList(ids);
}
/**
@@ -358,7 +389,7 @@ public class Tuner implements AutoCloseable {
private native Filter nativeOpenFilter(int type, int subType, long bufferSize);
private native TimeFilter nativeOpenTimeFilter();
- private native List<Integer> nativeGetLnbIds();
+ private native int[] nativeGetLnbIds();
private native Lnb nativeOpenLnbByHandle(int handle);
private native Lnb nativeOpenLnbByName(String name);
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
index 63a71e272e53..2c8899cfca78 100644
--- a/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
@@ -390,7 +390,7 @@ public class TunerResourceManager {
* <li>If no Lnb system can be granted, the API would return false.
* <ul>
*
- * <p><strong>Note:</strong> {@link #setLnbInfos(int[])} must be called before this request.
+ * <p><strong>Note:</strong> {@link #setLnbInfoList(int[])} must be called before this request.
*
* @param request {@link TunerLnbRequest} information of the current request.
* @param lnbId a one-element array to return the granted Lnb id.
@@ -479,7 +479,7 @@ public class TunerResourceManager {
*
* <p>Client must call this whenever it releases an Lnb.
*
- * <p><strong>Note:</strong> {@link #setLnbInfos(int[])} must be called before this release.
+ * <p><strong>Note:</strong> {@link #setLnbInfoList(int[])} must be called before this release.
*
* @param lnbId the id of the released Tuner Lnb.
*/
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 5820be6db8ea..ac7fe5d0403d 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -1079,29 +1079,26 @@ jobject JTuner::getFrontendInfo(int id) {
maxSymbolRate, acquireRange, exclusiveGroupId, statusCaps, jcaps);
}
-jobject JTuner::getLnbIds() {
+jintArray JTuner::getLnbIds() {
ALOGD("JTuner::getLnbIds()");
- mTuner->getLnbIds([&](Result, const hidl_vec<FrontendId>& lnbIds) {
- mLnbIds = lnbIds;
+ Result res;
+ hidl_vec<LnbId> lnbIds;
+ mTuner->getLnbIds([&](Result r, const hidl_vec<LnbId>& ids) {
+ lnbIds = ids;
+ res = r;
});
- if (mLnbIds.size() == 0) {
+ if (res != Result::SUCCESS || mLnbIds.size() == 0) {
ALOGW("Lnb isn't available");
return NULL;
}
+ mLnbIds = lnbIds;
JNIEnv *env = AndroidRuntime::getJNIEnv();
- jclass arrayListClazz = env->FindClass("java/util/ArrayList");
- jmethodID arrayListAdd = env->GetMethodID(arrayListClazz, "add", "(Ljava/lang/Object;)Z");
- jobject obj = env->NewObject(arrayListClazz, env->GetMethodID(arrayListClazz, "<init>", "()V"));
- jclass integerClazz = env->FindClass("java/lang/Integer");
- jmethodID intInit = env->GetMethodID(integerClazz, "<init>", "(I)V");
+ jintArray ids = env->NewIntArray(mLnbIds.size());
+ env->SetIntArrayRegion(ids, 0, mLnbIds.size(), reinterpret_cast<jint*>(&mLnbIds[0]));
- for (int i=0; i < mLnbIds.size(); i++) {
- jobject idObj = env->NewObject(integerClazz, intInit, mLnbIds[i]);
- env->CallBooleanMethod(obj, arrayListAdd, idObj);
- }
- return obj;
+ return ids;
}
jobject JTuner::openLnbById(int id) {
@@ -2405,7 +2402,7 @@ static jobject android_media_tv_Tuner_get_frontend_info(JNIEnv *env, jobject thi
return tuner->getFrontendInfo(id);
}
-static jobject android_media_tv_Tuner_get_lnb_ids(JNIEnv *env, jobject thiz) {
+static jintArray android_media_tv_Tuner_get_lnb_ids(JNIEnv *env, jobject thiz) {
sp<JTuner> tuner = getTuner(env, thiz);
return tuner->getLnbIds();
}
@@ -3415,8 +3412,7 @@ 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", "()Ljava/util/List;",
- (void *)android_media_tv_Tuner_get_lnb_ids },
+ { "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 40fd644c62a0..73fc38dbdec8 100644
--- a/media/jni/android_media_tv_Tuner.h
+++ b/media/jni/android_media_tv_Tuner.h
@@ -179,7 +179,7 @@ struct JTuner : public RefBase {
int stopScan();
int setLnb(int id);
int setLna(bool enable);
- jobject getLnbIds();
+ jintArray getLnbIds();
jobject openLnbById(int id);
jobject openLnbByName(jstring name);
jobject openFilter(DemuxFilterType type, int bufferSize);