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

Commit 3a7eaced authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Tuner JNI: setLnb and close()" into rvc-dev am: 42199418

Change-Id: Ib8fe3add4f469962481e4626d5e5558e0a52be83
parents 17cbbe9d 42199418
Loading
Loading
Loading
Loading
+64 −23
Original line number Diff line number Diff line
@@ -353,13 +353,16 @@ public class Tuner implements AutoCloseable {
    @Override
    public void close() {
        if (mFrontendHandle != null) {
            nativeCloseFrontendByHandle(mFrontendHandle);
            int res = nativeCloseFrontend(mFrontendHandle);
            if (res != Tuner.RESULT_SUCCESS) {
                TunerUtils.throwExceptionForResult(res, "failed to close frontend");
            }
            mTunerResourceManager.releaseFrontend(mFrontendHandle, mClientId);
            mFrontendHandle = null;
            mFrontend = null;
        }
        if (mLnb != null) {
            releaseLnb();
            mLnb.close();
        }
        if (!mDescramblers.isEmpty()) {
            for (Map.Entry<Integer, Descrambler> d : mDescramblers.entrySet()) {
@@ -374,6 +377,14 @@ public class Tuner implements AutoCloseable {
            }
            mFilters.clear();
        }
        if (mDemuxHandle != null) {
            int res = nativeCloseDemux(mDemuxHandle);
            if (res != Tuner.RESULT_SUCCESS) {
                TunerUtils.throwExceptionForResult(res, "failed to close demux");
            }
            mTunerResourceManager.releaseDemux(mDemuxHandle, mClientId);
            mFrontendHandle = null;
        }
        TunerUtils.throwExceptionForResult(nativeClose(), "failed to close tuner");
    }

@@ -425,6 +436,8 @@ public class Tuner implements AutoCloseable {

    private static native DemuxCapabilities nativeGetDemuxCapabilities();

    private native int nativeCloseDemux(int handle);
    private native int nativeCloseFrontend(int handle);
    private native int nativeClose();


@@ -545,11 +558,12 @@ public class Tuner implements AutoCloseable {
    @Result
    public int tune(@NonNull FrontendSettings settings) {
        mFrontendType = settings.getType();
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND);

        if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
            mFrontendInfo = null;
            return nativeTune(settings.getType(), settings);
        }
        return RESULT_UNAVAILABLE;
    }

    /**
     * Stops a previous tuning.
@@ -584,12 +598,14 @@ public class Tuner implements AutoCloseable {
                            + "started.");
        }
        mFrontendType = settings.getType();
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND);
        if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
            mScanCallback = scanCallback;
            mScanCallbackExecutor = executor;
            mFrontendInfo = null;
            return nativeScan(settings.getType(), settings, scanType);
        }
        return RESULT_UNAVAILABLE;
    }

    /**
     * Stops a previous scanning.
@@ -671,7 +687,9 @@ public class Tuner implements AutoCloseable {
     * @return the id of hardware A/V sync.
     */
    public int getAvSyncHwId(@NonNull Filter filter) {
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return INVALID_AV_SYNC_ID;
        }
        Integer id = nativeGetAvSyncHwId(filter);
        return id == null ? INVALID_AV_SYNC_ID : id;
    }
@@ -686,7 +704,9 @@ public class Tuner implements AutoCloseable {
     * @return the current timestamp of hardware A/V sync.
     */
    public long getAvSyncTime(int avSyncHwId) {
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return INVALID_TIMESTAMP;
        }
        Long time = nativeGetAvSyncTime(avSyncHwId);
        return time == null ? INVALID_TIMESTAMP : time;
    }
@@ -702,9 +722,11 @@ public class Tuner implements AutoCloseable {
     */
    @Result
    public int connectCiCam(int ciCamId) {
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return nativeConnectCiCam(ciCamId);
        }
        return RESULT_UNAVAILABLE;
    }

    /**
     * Disconnects Conditional Access Modules (CAM)
@@ -715,9 +737,11 @@ public class Tuner implements AutoCloseable {
     */
    @Result
    public int disconnectCiCam() {
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return nativeDisconnectCiCam();
        }
        return RESULT_UNAVAILABLE;
    }

    /**
     * Gets the frontend information.
@@ -726,7 +750,9 @@ public class Tuner implements AutoCloseable {
     */
    @Nullable
    public FrontendInfo getFrontendInfo() {
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND);
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
            return null;
        }
        if (mFrontend == null) {
            throw new IllegalStateException("frontend is not initialized");
        }
@@ -861,7 +887,9 @@ public class Tuner implements AutoCloseable {
    public Filter openFilter(@Type int mainType, @Subtype int subType,
            @BytesLong long bufferSize, @CallbackExecutor @Nullable Executor executor,
            @Nullable FilterCallback cb) {
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return null;
        }
        Filter filter = nativeOpenFilter(
                mainType, TunerUtils.getFilterSubtype(mainType, subType), bufferSize);
        if (filter != null) {
@@ -891,13 +919,16 @@ public class Tuner implements AutoCloseable {
        Objects.requireNonNull(executor, "executor must not be null");
        Objects.requireNonNull(cb, "LnbCallback must not be null");
        if (mLnb != null) {
            mLnb.setCallback(executor, cb, this);
            return mLnb;
        }
        if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_LNB) && mLnb != null) {
            mLnb.setCallback(executor, cb, this);
        }
            setLnb(mLnb);
            return mLnb;
        }
        return null;
    }

    /**
     * Opens an LNB (low-noise block downconverter) object specified by the give name.
@@ -922,6 +953,7 @@ public class Tuner implements AutoCloseable {
            }
            mLnb = newLnb;
            mLnb.setCallback(executor, cb, this);
            setLnb(mLnb);
        }
        return mLnb;
    }
@@ -944,7 +976,9 @@ public class Tuner implements AutoCloseable {
     */
    @Nullable
    public TimeFilter openTimeFilter() {
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return null;
        }
        return nativeOpenTimeFilter();
    }

@@ -956,6 +990,9 @@ public class Tuner implements AutoCloseable {
    @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER)
    @Nullable
    public Descrambler openDescrambler() {
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return null;
        }
        return requestDescrambler();
    }

@@ -976,7 +1013,9 @@ public class Tuner implements AutoCloseable {
            @NonNull OnRecordStatusChangedListener l) {
        Objects.requireNonNull(executor, "executor must not be null");
        Objects.requireNonNull(l, "OnRecordStatusChangedListener must not be null");
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return null;
        }
        DvrRecorder dvr = nativeOpenDvrRecorder(bufferSize);
        dvr.setListener(executor, l);
        return dvr;
@@ -999,7 +1038,9 @@ public class Tuner implements AutoCloseable {
            @NonNull OnPlaybackStatusChangedListener l) {
        Objects.requireNonNull(executor, "executor must not be null");
        Objects.requireNonNull(l, "OnPlaybackStatusChangedListener must not be null");
        checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX);
        if (!checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
            return null;
        }
        DvrPlayback dvr = nativeOpenDvrPlayback(bufferSize);
        dvr.setListener(executor, l);
        return dvr;
+30 −2
Original line number Diff line number Diff line
@@ -1130,7 +1130,7 @@ jintArray JTuner::getLnbIds() {
        lnbIds = ids;
        res = r;
    });
    if (res != Result::SUCCESS || mLnbIds.size() == 0) {
    if (res != Result::SUCCESS || lnbIds.size() == 0) {
        ALOGW("Lnb isn't available");
        return NULL;
    }
@@ -1797,6 +1797,22 @@ jobject JTuner::getFrontendStatus(jintArray types) {
    return statusObj;
}

jint JTuner::closeFrontend() {
    Result r = Result::SUCCESS;
    if (mFe != NULL) {
        r = mFe->close();
    }
    return (jint) r;
}

jint JTuner::closeDemux() {
    Result r = Result::SUCCESS;
    if (mDemux != NULL) {
        r = mDemux->close();
    }
    return (jint) r;
}

}  // namespace android

////////////////////////////////////////////////////////////////////////////////
@@ -3199,6 +3215,16 @@ static jint android_media_tv_Tuner_close_tuner(JNIEnv* env, jobject thiz) {
    return (jint) tuner->close();
}

static jint android_media_tv_Tuner_close_demux(JNIEnv* env, jobject thiz, jint /* handle */) {
    sp<JTuner> tuner = getTuner(env, thiz);
    return tuner->closeDemux();
}

static jint android_media_tv_Tuner_close_frontend(JNIEnv* env, jobject thiz, jint /* handle */) {
    sp<JTuner> tuner = getTuner(env, thiz);
    return tuner->closeFrontend();
}

static jint android_media_tv_Tuner_attach_filter(JNIEnv *env, jobject dvr, jobject filter) {
    sp<Dvr> dvrSp = getDvr(env, dvr);
    if (dvrSp == NULL) {
@@ -3527,6 +3553,8 @@ static const JNINativeMethod gTunerMethods[] = {
            (void *)android_media_tv_Tuner_get_demux_caps },
    { "nativeOpenDemuxByhandle", "(I)I", (void *)android_media_tv_Tuner_open_demux },
    { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_tuner },
    { "nativeCloseFrontend", "(I)I", (void *)android_media_tv_Tuner_close_frontend },
    { "nativeCloseDemux", "(I)I", (void *)android_media_tv_Tuner_close_demux },
};

static const JNINativeMethod gFilterMethods[] = {
+2 −0
Original line number Diff line number Diff line
@@ -191,6 +191,8 @@ struct JTuner : public RefBase {
    jobject getFrontendStatus(jintArray types);
    Result openDemux();
    jint close();
    jint closeFrontend();
    jint closeDemux();

protected:
    virtual ~JTuner();