diff --git a/core/api/system-current.txt b/core/api/system-current.txt index fc35905875c22..9de0b31191736 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -6471,6 +6471,7 @@ package android.media.tv.tuner { method @Nullable public android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities(); method @Nullable public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo(); method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]); + method @IntRange(from=0xffffffff) public int getMaxNumberOfFrontends(int); method @RequiresPermission("android.permission.TUNER_RESOURCE_ACCESS") public boolean hasUnusedFrontend(int); method public boolean isLowestPriority(int); method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler(); @@ -6483,6 +6484,7 @@ package android.media.tv.tuner { method @Nullable public android.media.tv.tuner.filter.TimeFilter openTimeFilter(); method public int scan(@NonNull android.media.tv.tuner.frontend.FrontendSettings, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.ScanCallback); method public int setLnaEnabled(boolean); + method public int setMaxNumberOfFrontends(int, @IntRange(from=0) int); method public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener); method public void setResourceLostListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.Tuner.OnResourceLostListener); method public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner); diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 7c08913c82cdd..300aa15a3afda 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -19,6 +19,7 @@ package android.media.tv.tuner; import android.annotation.BytesLong; import android.annotation.CallbackExecutor; import android.annotation.IntDef; +import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; @@ -688,6 +689,8 @@ public class Tuner implements AutoCloseable { private native Filter nativeOpenFilter(int type, int subType, long bufferSize); private native TimeFilter nativeOpenTimeFilter(); private native String nativeGetFrontendHardwareInfo(); + private native int nativeSetMaxNumberOfFrontends(int frontendType, int maxNumber); + private native int nativeGetMaxNumberOfFrontends(int frontendType); private native Lnb nativeOpenLnbByHandle(int handle); private native Lnb nativeOpenLnbByName(String name); @@ -1307,6 +1310,55 @@ public class Tuner implements AutoCloseable { } } + /** + * Sets the maximum usable frontends number of a given frontend type. It is used to enable or + * disable frontends when cable connection status is changed by user. + * + *
This API is only supported by Tuner HAL 2.0 or higher. Unsupported version would return + * {@link RESULT_UNAVAILABLE}. Use {@link TunerVersionChecker#getTunerVersion()} to check the + * version. + * + * @param frontendType the {@link android.media.tv.tuner.frontend.FrontendSettings.Type} which + * the maximum usable number will be set. + * @param maxNumber the new maximum usable number. + * @return result status of the operation. + */ + @Result + public int setMaxNumberOfFrontends( + @FrontendSettings.Type int frontendType, @IntRange(from = 0) int maxNumber) { + if (!TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_2_0, "Set maximum Frontends")) { + return RESULT_UNAVAILABLE; + } + if (maxNumber < 0) { + return RESULT_INVALID_ARGUMENT; + } + int res = nativeSetMaxNumberOfFrontends(frontendType, maxNumber); + if (res == RESULT_SUCCESS) { + // TODO: b/211778848 Update Tuner Resource Manager. + } + return res; + } + + /** + * Get the maximum usable frontends number of a given frontend type. + * + *
This API is only supported by Tuner HAL 2.0 or higher. Unsupported version would return
+ * {@code -1}. Use {@link TunerVersionChecker#getTunerVersion()} to check the version.
+ *
+ * @param frontendType the {@link android.media.tv.tuner.frontend.FrontendSettings.Type} which
+ * the maximum usable number will be queried.
+ * @return the maximum usable number of the queried frontend type.
+ */
+ @IntRange(from = -1)
+ public int getMaxNumberOfFrontends(@FrontendSettings.Type int frontendType) {
+ if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_2_0, "Set maximum Frontends")) {
+ return -1;
+ }
+ return nativeGetMaxNumberOfFrontends(frontendType);
+ }
+
/** @hide */
public FrontendInfo getFrontendInfoById(int id) {
mFrontendLock.lock();
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 64eede5ef88fd..384ddf558c227 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -1573,6 +1573,24 @@ Result JTuner::getFrontendHardwareInfo(string &info) {
return mFeClient->getHardwareInfo(info);
}
+jint JTuner::setMaxNumberOfFrontends(int32_t type, int32_t maxNumber) {
+ if (mTunerClient == nullptr) {
+ ALOGE("tuner is not initialized");
+ return (jint)Result::INVALID_STATE;
+ }
+
+ return (jint)mTunerClient->setMaxNumberOfFrontends(static_cast