diff options
| -rw-r--r-- | core/api/system-current.txt | 1 | ||||
| -rw-r--r-- | media/java/android/media/tv/tuner/Tuner.java | 24 | ||||
| -rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 13 | ||||
| -rw-r--r-- | media/jni/android_media_tv_Tuner.h | 1 | ||||
| -rw-r--r-- | media/jni/tuner/TunerClient.cpp | 13 | ||||
| -rw-r--r-- | media/jni/tuner/TunerClient.h | 5 | 
6 files changed, 56 insertions, 1 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index d93c62dd757d..af188274a3eb 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -7269,6 +7269,7 @@ package android.media.tv.tuner {      method @NonNull public java.util.List<android.media.tv.tuner.frontend.FrontendStatusReadiness> getFrontendStatusReadiness(@NonNull int[]);      method @IntRange(from=0xffffffff) public int getMaxNumberOfFrontends(int);      method @RequiresPermission("android.permission.TUNER_RESOURCE_ACCESS") public boolean hasUnusedFrontend(int); +    method public boolean isLnaSupported();      method public boolean isLowestPriority(int);      method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler();      method @Nullable public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener); diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index fab63aa18097..7039a3e01ac6 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -998,6 +998,7 @@ public class Tuner implements AutoCloseable  {      private native int nativeScan(int settingsType, FrontendSettings settings, int scanType);      private native int nativeStopScan();      private native int nativeSetLnb(Lnb lnb); +    private native boolean nativeIsLnaSupported();      private native int nativeSetLna(boolean enable);      private native FrontendStatus nativeGetFrontendStatus(int[] statusTypes);      private native Integer nativeGetAvSyncHwId(Filter filter); @@ -1382,11 +1383,32 @@ public class Tuner implements AutoCloseable  {      }      /** +     * Is Low Noise Amplifier (LNA) supported by the Tuner. +     * +     * <p>This API is only supported by Tuner HAL 3.0 or higher. +     * Unsupported version would throw UnsupportedOperationException. Use +     * {@link TunerVersionChecker#getTunerVersion()} to check the version. +     * +     * @return {@code true} if supported, otherwise {@code false}. +     * @throws UnsupportedOperationException if the Tuner HAL version is lower than 3.0 +     * @see android.media.tv.tuner.TunerVersionChecker#TUNER_VERSION_3_0 +     */ +    public boolean isLnaSupported() { +        if (!TunerVersionChecker.checkHigherOrEqualVersionTo( +                TunerVersionChecker.TUNER_VERSION_3_0, "isLnaSupported")) { +            throw new UnsupportedOperationException("Tuner HAL version " +                    + TunerVersionChecker.getTunerVersion() + " doesn't support this method."); +        } +        return nativeIsLnaSupported(); +    } + +    /**       * Enable or Disable Low Noise Amplifier (LNA).       *       * @param enable {@code true} to activate LNA module; {@code false} to deactivate LNA.       * -     * @return result status of the operation. +     * @return result status of the operation. {@link #RESULT_UNAVAILABLE} if the device doesn't +     *         support LNA.       */      @Result      public int setLnaEnabled(boolean enable) { diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index a028c040891b..2afa4d1fdefe 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -1819,6 +1819,13 @@ int JTuner::setLnb(sp<LnbClient> lnbClient) {      return (int)result;  } +bool JTuner::isLnaSupported() { +    if (sTunerClient == nullptr) { +        return (int)Result::NOT_INITIALIZED; +    } +    return sTunerClient->isLnaSupported(); +} +  int JTuner::setLna(bool enable) {      if (sTunerClient == nullptr) {          return (int)Result::NOT_INITIALIZED; @@ -3562,6 +3569,11 @@ static int android_media_tv_Tuner_set_lnb(JNIEnv *env, jobject thiz, jobject lnb      return tuner->setLnb(lnbClient);  } +static bool android_media_tv_Tuner_is_lna_supported(JNIEnv *env, jobject thiz) { +    sp<JTuner> tuner = getTuner(env, thiz); +    return tuner->isLnaSupported(); +} +  static int android_media_tv_Tuner_set_lna(JNIEnv *env, jobject thiz, jboolean enable) {      sp<JTuner> tuner = getTuner(env, thiz);      return tuner->setLna(enable); @@ -4810,6 +4822,7 @@ static const JNINativeMethod gTunerMethods[] = {              (void *)android_media_tv_Tuner_scan },      { "nativeStopScan", "()I", (void *)android_media_tv_Tuner_stop_scan },      { "nativeSetLnb", "(Landroid/media/tv/tuner/Lnb;)I", (void *)android_media_tv_Tuner_set_lnb }, +    { "nativeIsLnaSupported", "()Z", (void *)android_media_tv_Tuner_is_lna_supported },      { "nativeSetLna", "(Z)I", (void *)android_media_tv_Tuner_set_lna },      { "nativeGetFrontendStatus", "([I)Landroid/media/tv/tuner/frontend/FrontendStatus;",              (void *)android_media_tv_Tuner_get_frontend_status }, diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h index c74b2df6c178..2b69e89a0a2f 100644 --- a/media/jni/android_media_tv_Tuner.h +++ b/media/jni/android_media_tv_Tuner.h @@ -189,6 +189,7 @@ struct JTuner : public RefBase {      int scan(const FrontendSettings& settings, FrontendScanType scanType);      int stopScan();      int setLnb(sp<LnbClient> lnbClient); +    bool isLnaSupported();      int setLna(bool enable);      jobject openLnbByHandle(int handle);      jobject openLnbByName(jstring name); diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp index 8515874c022f..ab28fb4eca9a 100644 --- a/media/jni/tuner/TunerClient.cpp +++ b/media/jni/tuner/TunerClient.cpp @@ -210,4 +210,17 @@ int TunerClient::getMaxNumberOfFrontends(FrontendType frontendType) {      return -1;  } +bool TunerClient::isLnaSupported() { +    if (mTunerService != nullptr) { +        bool lnaSupported; +        Status s = mTunerService->isLnaSupported(&lnaSupported); +        if (!s.isOk()) { +            return false; +        } +        return lnaSupported; +    } + +    return false; +} +  }  // namespace android diff --git a/media/jni/tuner/TunerClient.h b/media/jni/tuner/TunerClient.h index 5410c1b185f5..3f8b21cb8899 100644 --- a/media/jni/tuner/TunerClient.h +++ b/media/jni/tuner/TunerClient.h @@ -148,6 +148,11 @@ public:       */      int getMaxNumberOfFrontends(FrontendType frontendType); +    /** +     * Is Low Noise Amplifier (LNA) supported. +     */ +    bool isLnaSupported(); +  private:      /**       * An AIDL Tuner Service assigned at the first time the Tuner Client connects with  |