Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 64425453 authored by Amy Zhang's avatar Amy Zhang
Browse files

Init shared memory handle when opening Filter in the Tuner JNI

This CL also cleans up some local pointers

Test: atest android.media.tv.tuner.cts
Test: manual sampletis
Bug: 184782012
Change-Id: Ia30b82f9b5e1e984bedbe9abb8bf79d0cf4f5c24
parent cc260245
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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(
+16 −4
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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;