summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/jni/android_media_tv_Tuner.cpp2
-rw-r--r--media/jni/tuner/FilterClient.cpp20
-rw-r--r--media/jni/tuner/FilterClient.h4
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;