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

Commit ec2e1a03 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 am: c8e99e09

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

Change-Id: Ibe1c9071601fe070939309e837f07e689c37f5b1
parents aeaaaca7 c8e99e09
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