Merge "Init shared memory handle when opening Filter in the Tuner JNI" into sc-dev

This commit is contained in:
Amy Zhang
2021-04-13 17:10:14 +00:00
committed by Android (Google) Code Review
3 changed files with 20 additions and 6 deletions

View File

@@ -1737,6 +1737,8 @@ jobject JTuner::openFilter(DemuxFilterType type, int bufferSize) {
fId = static_cast<uint64_t>(id); fId = static_cast<uint64_t>(id);
} }
filterClient->getAvSharedHandleInfo();
JNIEnv *env = AndroidRuntime::getJNIEnv(); JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject filterObj = jobject filterObj =
env->NewObject( env->NewObject(

View File

@@ -62,6 +62,9 @@ FilterClient::~FilterClient() {
mFilter_1_1 = NULL; mFilter_1_1 = NULL;
mAvSharedHandle = NULL; mAvSharedHandle = NULL;
mAvSharedMemSize = 0; mAvSharedMemSize = 0;
mIsMediaFilter = false;
mFilterMQ = NULL;
mFilterMQEventFlag = NULL;
} }
// TODO: remove after migration to Tuner Service is done. // TODO: remove after migration to Tuner Service is done.
@@ -81,7 +84,7 @@ int FilterClient::read(int8_t* buffer, int size) {
SharedHandleInfo FilterClient::getAvSharedHandleInfo() { SharedHandleInfo FilterClient::getAvSharedHandleInfo() {
handleAvShareMemory(); handleAvShareMemory();
SharedHandleInfo info{ SharedHandleInfo info{
.sharedHandle = mAvSharedHandle, .sharedHandle = mIsMediaFilter ? mAvSharedHandle : NULL,
.size = mAvSharedMemSize, .size = mAvSharedMemSize,
}; };
@@ -259,9 +262,10 @@ Result FilterClient::setDataSource(sp<FilterClient> filterClient){
} }
Result FilterClient::close() { Result FilterClient::close() {
if (mFilterMQEventFlag != NULL) { if (mFilterMQEventFlag) {
EventFlag::deleteEventFlag(&mFilterMQEventFlag); EventFlag::deleteEventFlag(&mFilterMQEventFlag);
} }
mFilterMQEventFlag = NULL;
mFilterMQ = NULL; mFilterMQ = NULL;
if (mTunerFilter != NULL) { if (mTunerFilter != NULL) {
@@ -943,7 +947,7 @@ Result FilterClient::getFilterMq() {
} }
int FilterClient::copyData(int8_t* buffer, int size) { int FilterClient::copyData(int8_t* buffer, int size) {
if (mFilter == NULL || mFilterMQ == NULL || mFilterMQEventFlag == NULL) { if (mFilterMQ == NULL || mFilterMQEventFlag == NULL) {
return -1; return -1;
} }
@@ -964,6 +968,7 @@ void FilterClient::checkIsMediaFilter(DemuxFilterType type) {
if (type.subType.mmtpFilterType() == DemuxMmtpFilterType::AUDIO || if (type.subType.mmtpFilterType() == DemuxMmtpFilterType::AUDIO ||
type.subType.mmtpFilterType() == DemuxMmtpFilterType::VIDEO) { type.subType.mmtpFilterType() == DemuxMmtpFilterType::VIDEO) {
mIsMediaFilter = true; mIsMediaFilter = true;
return;
} }
} }
@@ -971,15 +976,17 @@ void FilterClient::checkIsMediaFilter(DemuxFilterType type) {
if (type.subType.tsFilterType() == DemuxTsFilterType::AUDIO || if (type.subType.tsFilterType() == DemuxTsFilterType::AUDIO ||
type.subType.tsFilterType() == DemuxTsFilterType::VIDEO) { type.subType.tsFilterType() == DemuxTsFilterType::VIDEO) {
mIsMediaFilter = true; mIsMediaFilter = true;
return;
} }
} }
mIsMediaFilter = false;
} }
void FilterClient::handleAvShareMemory() { void FilterClient::handleAvShareMemory() {
if (mAvSharedHandle != NULL) { if (mAvSharedHandle != NULL) {
return; return;
} }
if (mTunerFilter != NULL && mIsMediaFilter) { if (mTunerFilter != NULL && mIsMediaFilter) {
TunerFilterSharedHandleInfo aidlHandleInfo; TunerFilterSharedHandleInfo aidlHandleInfo;
Status s = mTunerFilter->getAvSharedHandleInfo(&aidlHandleInfo); Status s = mTunerFilter->getAvSharedHandleInfo(&aidlHandleInfo);
@@ -1001,8 +1008,13 @@ void FilterClient::handleAvShareMemory() {
} }
void FilterClient::closeAvSharedMemory() { void FilterClient::closeAvSharedMemory() {
if (mAvSharedHandle == NULL) {
mAvSharedMemSize = 0;
return;
}
native_handle_close(mAvSharedHandle); native_handle_close(mAvSharedHandle);
native_handle_delete(mAvSharedHandle); native_handle_delete(mAvSharedHandle);
mAvSharedMemSize = 0; mAvSharedMemSize = 0;
mAvSharedHandle = NULL;
} }
} // namespace android } // namespace android

View File

@@ -264,8 +264,8 @@ private:
*/ */
sp<::android::hardware::tv::tuner::V1_1::IFilter> mFilter_1_1; sp<::android::hardware::tv::tuner::V1_1::IFilter> mFilter_1_1;
AidlMQ* mFilterMQ; AidlMQ* mFilterMQ = NULL;
EventFlag* mFilterMQEventFlag; EventFlag* mFilterMQEventFlag = NULL;
native_handle_t* mAvSharedHandle; native_handle_t* mAvSharedHandle;
uint64_t mAvSharedMemSize; uint64_t mAvSharedMemSize;