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

Commit a82eca78 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Complete descrambler APIs"

parents dcfe4650 99c8992a
Loading
Loading
Loading
Loading
+62 −7
Original line number Diff line number Diff line
@@ -443,26 +443,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
@@ -785,7 +785,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) {
@@ -793,10 +793,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) {
@@ -804,7 +804,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) {
@@ -905,10 +913,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[] = {