diff options
| -rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 2 | ||||
| -rw-r--r-- | media/jni/tuner/FilterClient.cpp | 20 | ||||
| -rw-r--r-- | media/jni/tuner/FilterClient.h | 4 |
3 files changed, 20 insertions, 6 deletions
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index cb1c126c056f..0aae940ca40e 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -1737,6 +1737,8 @@ jobject JTuner::openFilter(DemuxFilterType type, int bufferSize) { fId = static_cast<uint64_t>(id); } + filterClient->getAvSharedHandleInfo(); + JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject filterObj = env->NewObject( diff --git a/media/jni/tuner/FilterClient.cpp b/media/jni/tuner/FilterClient.cpp index 8846e4d62522..29955723dac8 100644 --- a/media/jni/tuner/FilterClient.cpp +++ b/media/jni/tuner/FilterClient.cpp @@ -62,6 +62,9 @@ FilterClient::~FilterClient() { mFilter_1_1 = NULL; mAvSharedHandle = NULL; mAvSharedMemSize = 0; + mIsMediaFilter = false; + mFilterMQ = NULL; + mFilterMQEventFlag = NULL; } // TODO: remove after migration to Tuner Service is done. @@ -81,7 +84,7 @@ int FilterClient::read(int8_t* buffer, int size) { SharedHandleInfo FilterClient::getAvSharedHandleInfo() { handleAvShareMemory(); SharedHandleInfo info{ - .sharedHandle = mAvSharedHandle, + .sharedHandle = mIsMediaFilter ? mAvSharedHandle : NULL, .size = mAvSharedMemSize, }; @@ -259,9 +262,10 @@ Result FilterClient::setDataSource(sp<FilterClient> filterClient){ } Result FilterClient::close() { - if (mFilterMQEventFlag != NULL) { + if (mFilterMQEventFlag) { EventFlag::deleteEventFlag(&mFilterMQEventFlag); } + mFilterMQEventFlag = NULL; mFilterMQ = NULL; if (mTunerFilter != NULL) { @@ -943,7 +947,7 @@ Result FilterClient::getFilterMq() { } int FilterClient::copyData(int8_t* buffer, int size) { - if (mFilter == NULL || mFilterMQ == NULL || mFilterMQEventFlag == NULL) { + if (mFilterMQ == NULL || mFilterMQEventFlag == NULL) { return -1; } @@ -964,6 +968,7 @@ void FilterClient::checkIsMediaFilter(DemuxFilterType type) { if (type.subType.mmtpFilterType() == DemuxMmtpFilterType::AUDIO || type.subType.mmtpFilterType() == DemuxMmtpFilterType::VIDEO) { mIsMediaFilter = true; + return; } } @@ -971,15 +976,17 @@ void FilterClient::checkIsMediaFilter(DemuxFilterType type) { if (type.subType.tsFilterType() == DemuxTsFilterType::AUDIO || type.subType.tsFilterType() == DemuxTsFilterType::VIDEO) { mIsMediaFilter = true; + return; } } + + mIsMediaFilter = false; } void FilterClient::handleAvShareMemory() { if (mAvSharedHandle != NULL) { return; } - if (mTunerFilter != NULL && mIsMediaFilter) { TunerFilterSharedHandleInfo aidlHandleInfo; Status s = mTunerFilter->getAvSharedHandleInfo(&aidlHandleInfo); @@ -1001,8 +1008,13 @@ void FilterClient::handleAvShareMemory() { } void FilterClient::closeAvSharedMemory() { + if (mAvSharedHandle == NULL) { + mAvSharedMemSize = 0; + return; + } native_handle_close(mAvSharedHandle); native_handle_delete(mAvSharedHandle); mAvSharedMemSize = 0; + mAvSharedHandle = NULL; } } // namespace android diff --git a/media/jni/tuner/FilterClient.h b/media/jni/tuner/FilterClient.h index 736b8f9cd4b4..d03274941690 100644 --- a/media/jni/tuner/FilterClient.h +++ b/media/jni/tuner/FilterClient.h @@ -264,8 +264,8 @@ private: */ sp<::android::hardware::tv::tuner::V1_1::IFilter> mFilter_1_1; - AidlMQ* mFilterMQ; - EventFlag* mFilterMQEventFlag; + AidlMQ* mFilterMQ = NULL; + EventFlag* mFilterMQEventFlag = NULL; native_handle_t* mAvSharedHandle; uint64_t mAvSharedMemSize; |