Loading media/java/android/media/tv/tuner/dvr/DvrRecorder.java +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ public class DvrRecorder implements AutoCloseable { private static int sInstantId = 0; private int mSegmentId = 0; private int mOverflow; private Boolean mIsStopped = null; private Boolean mIsStopped = true; private native int nativeAttachFilter(Filter filter); private native int nativeDetachFilter(Filter filter); Loading media/jni/android_media_tv_Tuner.cpp +24 −30 Original line number Diff line number Diff line Loading @@ -1750,21 +1750,17 @@ int JTuner::unlinkCiCam(int id) { jobject JTuner::openDescrambler() { ALOGD("JTuner::openDescrambler"); if (mTuner == nullptr || mDemux == nullptr) { if (mTunerClient == nullptr || mDemuxClient == nullptr) { return NULL; } sp<IDescrambler> descramblerSp; Result res; mTuner->openDescrambler([&](Result r, const sp<IDescrambler>& descrambler) { res = r; descramblerSp = descrambler; }); sp<DescramblerClient> descramblerClient = mTunerClient->openDescrambler(0/*unused*/); if (res != Result::SUCCESS || descramblerSp == NULL) { if (descramblerClient == NULL) { ALOGD("Failed to open descrambler"); return NULL; } descramblerSp->setDemuxSource(mDemuxId); descramblerClient->setDemuxSource(mDemuxClient); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject descramblerObj = Loading @@ -1772,8 +1768,8 @@ jobject JTuner::openDescrambler() { env->FindClass("android/media/tv/tuner/Descrambler"), gFields.descramblerInitID); descramblerSp->incStrong(descramblerObj); env->SetLongField(descramblerObj, gFields.descramblerContext, (jlong)descramblerSp.get()); descramblerClient->incStrong(descramblerObj); env->SetLongField(descramblerObj, gFields.descramblerContext, (jlong)descramblerClient.get()); return descramblerObj; } Loading Loading @@ -2573,8 +2569,8 @@ static sp<JTuner> getTuner(JNIEnv *env, jobject thiz) { return (JTuner *)env->GetLongField(thiz, gFields.tunerContext); } static sp<IDescrambler> getDescrambler(JNIEnv *env, jobject descrambler) { return (IDescrambler *)env->GetLongField(descrambler, gFields.descramblerContext); static sp<DescramblerClient> getDescramblerClient(JNIEnv *env, jobject descrambler) { return (DescramblerClient *)env->GetLongField(descrambler, gFields.descramblerContext); } static uint32_t getResourceIdFromHandle(jint handle) { Loading Loading @@ -4100,49 +4096,47 @@ static jobject android_media_tv_Tuner_open_descrambler(JNIEnv *env, jobject thiz static jint android_media_tv_Tuner_descrambler_add_pid( JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } // TODO: use filter client once descramblerClient is ready sp<IFilter> iFilterSp = getFilterClient(env, filter)->getHalFilter(); Result result = descramblerSp->addPid(getDemuxPid((int)pidType, (int)pid), iFilterSp); sp<FilterClient> filterClient = getFilterClient(env, filter); Result result = descramblerClient->addPid(getDemuxPid((int)pidType, (int)pid), filterClient); return (jint) result; } static jint android_media_tv_Tuner_descrambler_remove_pid( JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } // TODO: use filter client once descramblerClient is ready sp<IFilter> iFilterSp = getFilterClient(env, filter)->getHalFilter(); Result result = descramblerSp->removePid(getDemuxPid((int)pidType, (int)pid), iFilterSp); sp<FilterClient> filterClient = getFilterClient(env, filter); Result result = descramblerClient->removePid(getDemuxPid((int)pidType, (int)pid), filterClient); return (jint) result; } static jint android_media_tv_Tuner_descrambler_set_key_token( JNIEnv* env, jobject descrambler, jbyteArray keyToken) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } int size = env->GetArrayLength(keyToken); std::vector<uint8_t> v(size); env->GetByteArrayRegion(keyToken, 0, size, reinterpret_cast<jbyte*>(&v[0])); Result result = descramblerSp->setKeyToken(v); Result result = descramblerClient->setKeyToken(v); return (jint) result; } static jint android_media_tv_Tuner_close_descrambler(JNIEnv* env, jobject descrambler) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } Result r = descramblerSp->close(); Result r = descramblerClient->close(); if (r == Result::SUCCESS) { descramblerSp->decStrong(descrambler); descramblerClient->decStrong(descrambler); } return (jint) r; } Loading media/jni/tuner/DemuxClient.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -32,11 +32,13 @@ namespace android { // TODO: pending aidl interface DemuxClient::DemuxClient() { //mTunerDemux = tunerDemux; mId = -1; } DemuxClient::~DemuxClient() { //mTunerDemux = NULL; mDemux = NULL; mId = -1; } // TODO: remove after migration to Tuner Service is done. Loading media/jni/tuner/DemuxClient.h +5 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,9 @@ public: */ Result close(); void setId(int id) { mId = id; } int getId() { return mId; } private: sp<IFilter> openHidlFilter(DemuxFilterType type, int bufferSize, sp<HidlFilterCallback> cb); sp<IDvr> openHidlDvr(DvrType type, int bufferSize, sp<HidlDvrCallback> cb); Loading @@ -105,6 +108,8 @@ private: * Default null when the HAL service does not exist. */ sp<IDemux> mDemux; int mId; }; } // namespace android Loading media/jni/tuner/DescramblerClient.cpp +43 −12 Original line number Diff line number Diff line Loading @@ -42,26 +42,57 @@ void DescramblerClient::setHidlDescrambler(sp<IDescrambler> descrambler) { mDescrambler = descrambler; } Result DescramblerClient::setDemuxSource(sp<DemuxClient> /*demuxClient*/) { return Result::SUCCESS; Result DescramblerClient::setDemuxSource(sp<DemuxClient> demuxClient) { if (demuxClient == NULL) { return Result::INVALID_ARGUMENT; } Result DescramblerClient::setKeyToken(vector<uint8_t> /*keyToken*/) { return Result::SUCCESS; // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->setDemuxSource(demuxClient->getId()); } return Result::INVALID_STATE; } Result DescramblerClient::setKeyToken(vector<uint8_t> keyToken) { // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->setKeyToken(keyToken); } Result DescramblerClient::addPid(DemuxPid /*pid*/, sp<FilterClient> /*optionalSourceFilter*/) { return Result::SUCCESS; return Result::INVALID_STATE; } Result DescramblerClient::removePid(DemuxPid /*pid*/, sp<FilterClient> /*optionalSourceFilter*/) { return Result::SUCCESS; Result DescramblerClient::addPid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) { // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter()); } return Result::INVALID_STATE;} Result DescramblerClient::removePid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) { // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter()); } return Result::INVALID_STATE;} Result DescramblerClient::close() { return Result::SUCCESS; // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->close(); } return Result::INVALID_STATE;} /////////////// DescramblerClient Helper Methods /////////////////////// } // namespace android Loading
media/java/android/media/tv/tuner/dvr/DvrRecorder.java +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ public class DvrRecorder implements AutoCloseable { private static int sInstantId = 0; private int mSegmentId = 0; private int mOverflow; private Boolean mIsStopped = null; private Boolean mIsStopped = true; private native int nativeAttachFilter(Filter filter); private native int nativeDetachFilter(Filter filter); Loading
media/jni/android_media_tv_Tuner.cpp +24 −30 Original line number Diff line number Diff line Loading @@ -1750,21 +1750,17 @@ int JTuner::unlinkCiCam(int id) { jobject JTuner::openDescrambler() { ALOGD("JTuner::openDescrambler"); if (mTuner == nullptr || mDemux == nullptr) { if (mTunerClient == nullptr || mDemuxClient == nullptr) { return NULL; } sp<IDescrambler> descramblerSp; Result res; mTuner->openDescrambler([&](Result r, const sp<IDescrambler>& descrambler) { res = r; descramblerSp = descrambler; }); sp<DescramblerClient> descramblerClient = mTunerClient->openDescrambler(0/*unused*/); if (res != Result::SUCCESS || descramblerSp == NULL) { if (descramblerClient == NULL) { ALOGD("Failed to open descrambler"); return NULL; } descramblerSp->setDemuxSource(mDemuxId); descramblerClient->setDemuxSource(mDemuxClient); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject descramblerObj = Loading @@ -1772,8 +1768,8 @@ jobject JTuner::openDescrambler() { env->FindClass("android/media/tv/tuner/Descrambler"), gFields.descramblerInitID); descramblerSp->incStrong(descramblerObj); env->SetLongField(descramblerObj, gFields.descramblerContext, (jlong)descramblerSp.get()); descramblerClient->incStrong(descramblerObj); env->SetLongField(descramblerObj, gFields.descramblerContext, (jlong)descramblerClient.get()); return descramblerObj; } Loading Loading @@ -2573,8 +2569,8 @@ static sp<JTuner> getTuner(JNIEnv *env, jobject thiz) { return (JTuner *)env->GetLongField(thiz, gFields.tunerContext); } static sp<IDescrambler> getDescrambler(JNIEnv *env, jobject descrambler) { return (IDescrambler *)env->GetLongField(descrambler, gFields.descramblerContext); static sp<DescramblerClient> getDescramblerClient(JNIEnv *env, jobject descrambler) { return (DescramblerClient *)env->GetLongField(descrambler, gFields.descramblerContext); } static uint32_t getResourceIdFromHandle(jint handle) { Loading Loading @@ -4100,49 +4096,47 @@ static jobject android_media_tv_Tuner_open_descrambler(JNIEnv *env, jobject thiz static jint android_media_tv_Tuner_descrambler_add_pid( JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } // TODO: use filter client once descramblerClient is ready sp<IFilter> iFilterSp = getFilterClient(env, filter)->getHalFilter(); Result result = descramblerSp->addPid(getDemuxPid((int)pidType, (int)pid), iFilterSp); sp<FilterClient> filterClient = getFilterClient(env, filter); Result result = descramblerClient->addPid(getDemuxPid((int)pidType, (int)pid), filterClient); return (jint) result; } static jint android_media_tv_Tuner_descrambler_remove_pid( JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } // TODO: use filter client once descramblerClient is ready sp<IFilter> iFilterSp = getFilterClient(env, filter)->getHalFilter(); Result result = descramblerSp->removePid(getDemuxPid((int)pidType, (int)pid), iFilterSp); sp<FilterClient> filterClient = getFilterClient(env, filter); Result result = descramblerClient->removePid(getDemuxPid((int)pidType, (int)pid), filterClient); return (jint) result; } static jint android_media_tv_Tuner_descrambler_set_key_token( JNIEnv* env, jobject descrambler, jbyteArray keyToken) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } int size = env->GetArrayLength(keyToken); std::vector<uint8_t> v(size); env->GetByteArrayRegion(keyToken, 0, size, reinterpret_cast<jbyte*>(&v[0])); Result result = descramblerSp->setKeyToken(v); Result result = descramblerClient->setKeyToken(v); return (jint) result; } static jint android_media_tv_Tuner_close_descrambler(JNIEnv* env, jobject descrambler) { sp<IDescrambler> descramblerSp = getDescrambler(env, descrambler); if (descramblerSp == NULL) { sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler); if (descramblerClient == NULL) { return (jint) Result::NOT_INITIALIZED; } Result r = descramblerSp->close(); Result r = descramblerClient->close(); if (r == Result::SUCCESS) { descramblerSp->decStrong(descrambler); descramblerClient->decStrong(descrambler); } return (jint) r; } Loading
media/jni/tuner/DemuxClient.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -32,11 +32,13 @@ namespace android { // TODO: pending aidl interface DemuxClient::DemuxClient() { //mTunerDemux = tunerDemux; mId = -1; } DemuxClient::~DemuxClient() { //mTunerDemux = NULL; mDemux = NULL; mId = -1; } // TODO: remove after migration to Tuner Service is done. Loading
media/jni/tuner/DemuxClient.h +5 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,9 @@ public: */ Result close(); void setId(int id) { mId = id; } int getId() { return mId; } private: sp<IFilter> openHidlFilter(DemuxFilterType type, int bufferSize, sp<HidlFilterCallback> cb); sp<IDvr> openHidlDvr(DvrType type, int bufferSize, sp<HidlDvrCallback> cb); Loading @@ -105,6 +108,8 @@ private: * Default null when the HAL service does not exist. */ sp<IDemux> mDemux; int mId; }; } // namespace android Loading
media/jni/tuner/DescramblerClient.cpp +43 −12 Original line number Diff line number Diff line Loading @@ -42,26 +42,57 @@ void DescramblerClient::setHidlDescrambler(sp<IDescrambler> descrambler) { mDescrambler = descrambler; } Result DescramblerClient::setDemuxSource(sp<DemuxClient> /*demuxClient*/) { return Result::SUCCESS; Result DescramblerClient::setDemuxSource(sp<DemuxClient> demuxClient) { if (demuxClient == NULL) { return Result::INVALID_ARGUMENT; } Result DescramblerClient::setKeyToken(vector<uint8_t> /*keyToken*/) { return Result::SUCCESS; // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->setDemuxSource(demuxClient->getId()); } return Result::INVALID_STATE; } Result DescramblerClient::setKeyToken(vector<uint8_t> keyToken) { // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->setKeyToken(keyToken); } Result DescramblerClient::addPid(DemuxPid /*pid*/, sp<FilterClient> /*optionalSourceFilter*/) { return Result::SUCCESS; return Result::INVALID_STATE; } Result DescramblerClient::removePid(DemuxPid /*pid*/, sp<FilterClient> /*optionalSourceFilter*/) { return Result::SUCCESS; Result DescramblerClient::addPid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) { // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter()); } return Result::INVALID_STATE;} Result DescramblerClient::removePid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) { // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter()); } return Result::INVALID_STATE;} Result DescramblerClient::close() { return Result::SUCCESS; // TODO: pending aidl interface if (mDescrambler != NULL) { return mDescrambler->close(); } return Result::INVALID_STATE;} /////////////// DescramblerClient Helper Methods /////////////////////// } // namespace android