diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index a458b16c551a7..8bf688dba10b4 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -447,7 +447,7 @@ public class Tuner implements AutoCloseable { private native DvrRecorder nativeOpenDvrRecorder(long bufferSize); private native DvrPlayback nativeOpenDvrPlayback(long bufferSize); - private static native DemuxCapabilities nativeGetDemuxCapabilities(); + private native DemuxCapabilities nativeGetDemuxCapabilities(); private native int nativeCloseDemux(int handle); private native int nativeCloseFrontend(int handle); @@ -939,8 +939,7 @@ public class Tuner implements AutoCloseable { Filter filter = nativeOpenFilter( mainType, TunerUtils.getFilterSubtype(mainType, subType), bufferSize); if (filter != null) { - filter.setMainType(mainType); - filter.setSubtype(subType); + filter.setType(mainType, subType); filter.setCallback(cb, executor); if (mHandler == null) { mHandler = createEventHandler(); @@ -1147,8 +1146,11 @@ public class Tuner implements AutoCloseable { } /* package */ void releaseLnb() { - mTunerResourceManager.releaseLnb(mLnbHandle, mClientId); - mLnbHandle = null; + if (mLnbHandle != null) { + // LNB handle can be null if it's opened by name. + mTunerResourceManager.releaseLnb(mLnbHandle, mClientId); + mLnbHandle = null; + } mLnb = null; } } diff --git a/media/java/android/media/tv/tuner/filter/Filter.java b/media/java/android/media/tv/tuner/filter/Filter.java index cc932da4a9f6a..f0015b723edbb 100644 --- a/media/java/android/media/tv/tuner/filter/Filter.java +++ b/media/java/android/media/tv/tuner/filter/Filter.java @@ -221,12 +221,9 @@ public class Filter implements AutoCloseable { } /** @hide */ - public void setMainType(@Type int mainType) { + public void setType(@Type int mainType, @Subtype int subtype) { mMainType = mainType; - } - /** @hide */ - public void setSubtype(@Subtype int subtype) { - mSubtype = subtype; + mSubtype = TunerUtils.getFilterSubtype(mainType, subtype); } /** @hide */ diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index fb8c276ecc8d1..7e721406a3001 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -2975,7 +2975,7 @@ static jint copyData(JNIEnv *env, std::unique_ptr& mq, EventFlag* flag, jbyt jbyte *dst = env->GetByteArrayElements(buffer, &isCopy); ALOGD("copyData, isCopy=%d", isCopy); if (dst == nullptr) { - ALOGD("Failed to GetByteArrayElements"); + jniThrowRuntimeException(env, "Failed to GetByteArrayElements"); return 0; } @@ -2983,7 +2983,7 @@ static jint copyData(JNIEnv *env, std::unique_ptr& mq, EventFlag* flag, jbyt env->ReleaseByteArrayElements(buffer, dst, 0); flag->wake(static_cast(DemuxQueueNotifyBits::DATA_CONSUMED)); } else { - ALOGD("Failed to read FMQ"); + jniThrowRuntimeException(env, "Failed to read FMQ"); env->ReleaseByteArrayElements(buffer, dst, 0); return 0; }