diff options
| -rw-r--r-- | media/java/android/media/tv/tuner/Tuner.java | 69 | ||||
| -rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 22 |
2 files changed, 78 insertions, 13 deletions
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 7db410cb7090..1c386a728c07 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -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(); + } + } /** diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 0cac2af9adc3..51048bfc49ca 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -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[] = { |