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

Commit e8e62016 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: Ib9291efb08d6a2a1f4dbf807d0051defca1f449b
parents 27b4f92f 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