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

Commit c8e99e09 authored by Amy Zhang's avatar Amy Zhang Committed by Automerger Merge Worker
Browse files

Merge "Get media share memory handle only when the filter is not a passthrough...

Merge "Get media share memory handle only when the filter is not a passthrough media filter" into sc-dev am: 75d890a7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14355588

Change-Id: Icc6fd3704555c74646c2439edbf4eed9f20118cd
parents 6d28b796 75d890a7
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -1737,8 +1737,6 @@ jobject JTuner::openFilter(DemuxFilterType type, int bufferSize) {
        fId = static_cast<uint64_t>(id);
    }

    filterClient->getAvSharedHandleInfo();

    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jobject filterObj =
            env->NewObject(
+40 −5
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ FilterClient::~FilterClient() {
    mAvSharedHandle = NULL;
    mAvSharedMemSize = 0;
    mIsMediaFilter = false;
    mIsPassthroughFilter = false;
    mFilterMQ = NULL;
    mFilterMQEventFlag = NULL;
}
@@ -84,7 +85,7 @@ int FilterClient::read(int8_t* buffer, int size) {
SharedHandleInfo FilterClient::getAvSharedHandleInfo() {
    handleAvShareMemory();
    SharedHandleInfo info{
        .sharedHandle = mIsMediaFilter ? mAvSharedHandle : NULL,
        .sharedHandle = (mIsMediaFilter && !mIsPassthroughFilter) ? mAvSharedHandle : NULL,
        .size = mAvSharedMemSize,
    };

@@ -92,13 +93,24 @@ SharedHandleInfo FilterClient::getAvSharedHandleInfo() {
}

Result FilterClient::configure(DemuxFilterSettings configure) {
    Result res;
    checkIsPassthroughFilter(configure);

    if (mTunerFilter != NULL) {
        Status s = mTunerFilter->configure(getAidlFilterSettings(configure));
        return ClientHelper::getServiceSpecificErrorCode(s);
        res = ClientHelper::getServiceSpecificErrorCode(s);
        if (res == Result::SUCCESS) {
            getAvSharedHandleInfo();
        }
        return res;
    }

    if (mFilter != NULL) {
        return mFilter->configure(configure);
        res = mFilter->configure(configure);
        if (res == Result::SUCCESS) {
            getAvSharedHandleInfo();
        }
        return res;
    }

    return Result::INVALID_STATE;
@@ -983,11 +995,34 @@ void FilterClient::checkIsMediaFilter(DemuxFilterType type) {
    mIsMediaFilter = false;
}

void FilterClient::checkIsPassthroughFilter(DemuxFilterSettings configure) {
    if (!mIsMediaFilter) {
        mIsPassthroughFilter = false;
        return;
    }

    if (configure.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::ts) {
        if (configure.ts().filterSettings.av().isPassthrough) {
            mIsPassthroughFilter = true;
            return;
        }
    }

    if (configure.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::mmtp) {
        if (configure.mmtp().filterSettings.av().isPassthrough) {
            mIsPassthroughFilter = true;
            return;
        }
    }

    mIsPassthroughFilter = false;
}

void FilterClient::handleAvShareMemory() {
    if (mAvSharedHandle != NULL) {
        return;
    }
    if (mTunerFilter != NULL && mIsMediaFilter) {
    if (mTunerFilter != NULL && mIsMediaFilter && !mIsPassthroughFilter) {
        TunerFilterSharedHandleInfo aidlHandleInfo;
        Status s = mTunerFilter->getAvSharedHandleInfo(&aidlHandleInfo);
        if (ClientHelper::getServiceSpecificErrorCode(s) == Result::SUCCESS) {
@@ -997,7 +1032,7 @@ void FilterClient::handleAvShareMemory() {
        return;
    }

    if (mFilter_1_1 != NULL && mIsMediaFilter) {
    if (mFilter_1_1 != NULL && mIsMediaFilter && !mIsPassthroughFilter) {
        mFilter_1_1->getAvSharedHandle([&](Result r, hidl_handle avMemory, uint64_t avMemSize) {
            if (r == Result::SUCCESS) {
                mAvSharedHandle = native_handle_clone(avMemory.getNativeHandle());
+2 −0
Original line number Diff line number Diff line
@@ -241,6 +241,7 @@ private:
    Result getFilterMq();
    int copyData(int8_t* buffer, int size);
    void checkIsMediaFilter(DemuxFilterType type);
    void checkIsPassthroughFilter(DemuxFilterSettings configure);
    void handleAvShareMemory();
    void closeAvSharedMemory();

@@ -270,6 +271,7 @@ private:
    native_handle_t* mAvSharedHandle;
    uint64_t mAvSharedMemSize;
    bool mIsMediaFilter;
    bool mIsPassthroughFilter;
};
}  // namespace android