Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5de94647 authored by Hongguang Chen's avatar Hongguang Chen Committed by Android (Google) Code Review
Browse files

Merge "Support enable/disable Frontends."

parents 1caabb6f 4d9772d8
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -6473,6 +6473,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();
@@ -6485,6 +6486,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);
+52 −0
Original line number Diff line number Diff line
@@ -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.
     *
     * <p>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.
     *
     * <p>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();
+33 −0
Original line number Diff line number Diff line
@@ -1577,6 +1577,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<FrontendType>(type), maxNumber);
}

int32_t JTuner::getMaxNumberOfFrontends(int32_t type) {
    if (mTunerClient == nullptr) {
        ALOGE("tuner is not initialized");
        return -1;
    }

    return mTunerClient->getMaxNumberOfFrontends(static_cast<FrontendType>(type));
}

jobject JTuner::openLnbByHandle(int handle) {
    if (mTunerClient == nullptr) {
        return nullptr;
@@ -4281,6 +4299,17 @@ static jstring android_media_tv_Tuner_get_frontend_hardware_info(JNIEnv *env, jo
    return env->NewStringUTF(info.data());
}

static jint android_media_tv_Tuner_set_maximum_frontends(JNIEnv *env, jobject thiz, jint type,
                                                         jint maxNumber) {
    sp<JTuner> tuner = getTuner(env, thiz);
    return tuner->setMaxNumberOfFrontends(type, maxNumber);
}

static jint android_media_tv_Tuner_get_maximum_frontends(JNIEnv *env, jobject thiz, jint type) {
    sp<JTuner> tuner = getTuner(env, thiz);
    return tuner->getMaxNumberOfFrontends(type);
}

static jint android_media_tv_Tuner_close_frontend(JNIEnv* env, jobject thiz, jint /* handle */) {
    sp<JTuner> tuner = getTuner(env, thiz);
    return tuner->closeFrontend();
@@ -4592,6 +4621,10 @@ static const JNINativeMethod gTunerMethods[] = {
            (void *)android_media_tv_Tuner_open_shared_filter},
    { "nativeGetFrontendHardwareInfo","()Ljava/lang/String;",
            (void *)android_media_tv_Tuner_get_frontend_hardware_info },
    { "nativeSetMaxNumberOfFrontends", "(II)I",
             (void *)android_media_tv_Tuner_set_maximum_frontends },
    { "nativeGetMaxNumberOfFrontends", "(I)I",
            (void *)android_media_tv_Tuner_get_maximum_frontends },
};

static const JNINativeMethod gFilterMethods[] = {
+2 −0
Original line number Diff line number Diff line
@@ -201,6 +201,8 @@ struct JTuner : public RefBase {
    jint closeFrontend();
    jint closeDemux();
    Result getFrontendHardwareInfo(string& info);
    jint setMaxNumberOfFrontends(int32_t frontendType, int32_t maxNumber);
    int32_t getMaxNumberOfFrontends(int32_t frontendType);

    jweak getObject();

+19 −0
Original line number Diff line number Diff line
@@ -194,4 +194,23 @@ Result TunerClient::setLna(bool bEnable) {
    return Result::INVALID_STATE;
}

Result TunerClient::setMaxNumberOfFrontends(FrontendType frontendType, int32_t maxNumber) {
    if (mTunerService != nullptr) {
        Status s = mTunerService->setMaxNumberOfFrontends(frontendType, maxNumber);
        return ClientHelper::getServiceSpecificErrorCode(s);
    }

    return Result::INVALID_STATE;
}

int TunerClient::getMaxNumberOfFrontends(FrontendType frontendType) {
    if (mTunerService != nullptr) {
        int32_t maxNumber;
        mTunerService->getMaxNumberOfFrontends(frontendType, &maxNumber);
        return maxNumber;
    }

    return -1;
}

}  // namespace android
Loading