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

Commit 99c8992a authored by shubang's avatar shubang
Browse files

Complete descrambler APIs

Test: make;
Change-Id: I41a660aaf0213b4966274cd512537b581ffc95d5
parent 348606fb
Loading
Loading
Loading
Loading
+62 −7
Original line number Diff line number Diff line
@@ -429,26 +429,81 @@ public final class Tuner implements AutoCloseable {
     * <p> Descrambler is a hardware component used to descramble data.
     *
     * <p> This class controls the TIS interaction with Tuner HAL.
     *
     * TODO: make it static and extends Closable.
     */
    public class Descrambler {
        private long mNativeContext;

        private native boolean nativeAddPid(int pidType, int pid, Filter filter);
        private native boolean nativeRemovePid(int pidType, int pid, Filter filter);
        private native int nativeAddPid(int pidType, int pid, Filter filter);
        private native int nativeRemovePid(int pidType, int pid, Filter filter);
        private native int nativeSetKeyToken(byte[] keyToken);
        private native int nativeClose();

        private Descrambler() {}

        /** @hide */
        public boolean addPid(@DemuxPidType int pidType, int pid, Filter filter) {
        /**
         * Add packets' PID to the descrambler for descrambling.
         *
         * The descrambler will start descrambling packets with this PID. Multiple PIDs can be added
         * into one descrambler instance because descambling can happen simultaneously on packets
         * from different PIDs.
         *
         * If the Descrambler previously contained a filter for the PID, the old filter is replaced
         * by the specified filter.
         *
         * @param pidType the type of the PID.
         * @param pid the PID of packets to start to be descrambled.
         * @param filter an optional filter instance to identify upper stream.
         * @return result status of the operation.
         *
         * @hide
         */
        public int addPid(@DemuxPidType int pidType, int pid, @Nullable Filter filter) {
            return nativeAddPid(pidType, pid, filter);
        }

        /** @hide */
        public boolean removePid(@DemuxPidType int pidType, int pid, Filter filter) {
        /**
         * Remove packets' PID from the descrambler
         *
         * The descrambler will stop descrambling packets with this PID.
         *
         * @param pidType the type of the PID.
         * @param pid the PID of packets to stop to be descrambled.
         * @param filter an optional filter instance to identify upper stream.
         * @return result status of the operation.
         *
         * @hide
         */
        public int removePid(@DemuxPidType int pidType, int pid, @Nullable Filter filter) {
            return nativeRemovePid(pidType, pid, filter);
        }

        /**
         * Set a key token to link descrambler to a key slot
         *
         * A descrambler instance can have only one key slot to link, but a key slot can hold a few
         * keys for different purposes.
         *
         * @param keyToken the token to be used to link the key slot.
         * @return result status of the operation.
         *
         * @hide
         */
        public int setKeyToken(byte[] keyToken) {
            return nativeSetKeyToken(keyToken);
        }

        /**
         * Release the descrambler instance.
         *
         * @return result status of the operation.
         *
         * @hide
         */
        public int close() {
            return nativeClose();
        }

    }

    /**
+16 −6
Original line number Diff line number Diff line
@@ -769,7 +769,7 @@ static jobject android_media_tv_Tuner_open_descrambler(JNIEnv *env, jobject thiz
    return tuner->openDescrambler();
}

static bool android_media_tv_Tuner_add_pid(
static int android_media_tv_Tuner_add_pid(
        JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) {
    sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler);
    if (descramblerSp == NULL) {
@@ -777,10 +777,10 @@ static bool android_media_tv_Tuner_add_pid(
    }
    sp<IFilter> filterSp = getFilter(env, filter)->getIFilter();
    Result result = descramblerSp->addPid(getDemuxPid((int)pidType, (int)pid), filterSp);
    return result == Result::SUCCESS;
    return (int)result;
}

static bool android_media_tv_Tuner_remove_pid(
static int android_media_tv_Tuner_remove_pid(
        JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) {
    sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler);
    if (descramblerSp == NULL) {
@@ -788,7 +788,15 @@ static bool android_media_tv_Tuner_remove_pid(
    }
    sp<IFilter> filterSp = getFilter(env, filter)->getIFilter();
    Result result = descramblerSp->removePid(getDemuxPid((int)pidType, (int)pid), filterSp);
    return result == Result::SUCCESS;
    return (int)result;
}

static int android_media_tv_Tuner_set_key_token(JNIEnv, jobject, jbyteArray) {
    return 0;
}

static int android_media_tv_Tuner_close_descrambler(JNIEnv, jobject) {
    return 0;
}

static jobject android_media_tv_Tuner_open_dvr(JNIEnv *env, jobject thiz, jint type, jint bufferSize) {
@@ -887,10 +895,12 @@ static const JNINativeMethod gFilterMethods[] = {
};

static const JNINativeMethod gDescramblerMethods[] = {
    { "nativeAddPid", "(IILandroid/media/tv/tuner/Tuner$Filter;)Z",
    { "nativeAddPid", "(IILandroid/media/tv/tuner/Tuner$Filter;)I",
            (void *)android_media_tv_Tuner_add_pid },
    { "nativeRemovePid", "(IILandroid/media/tv/tuner/Tuner$Filter;)Z",
    { "nativeRemovePid", "(IILandroid/media/tv/tuner/Tuner$Filter;)I",
            (void *)android_media_tv_Tuner_remove_pid },
    { "nativeSetKeyToken", "([B)I", (void *)android_media_tv_Tuner_set_key_token },
    { "nativeClose", "()V", (void *)android_media_tv_Tuner_close_descrambler },
};

static const JNINativeMethod gDvrMethods[] = {