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

Commit b0caa0e2 authored by ted.sun's avatar ted.sun Committed by Daren Liao
Browse files

MediaCodecLinearBlock: Let input slot available for onWorkDone buffer.

Currently, we should let queueLinearBlock to queue new C2Buffer to
MediaCodec. So, this C2Buffer could be released while onWorkDone
from C2 Component is earlier than onInputBuffersReleased.

Test: Digital TV test pass

Bug: 202306353

Change-Id: I7cc5eb938f127bd816ea7115d7f9995dbaefcf0b
parent 2823967c
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -42,12 +42,19 @@ struct JMediaCodecLinearBlock {

    std::shared_ptr<C2Buffer> toC2Buffer(size_t offset, size_t size) {
        if (mBuffer) {
            // TODO: if returned C2Buffer is different from mBuffer, we should
            // find a way to connect the life cycle between this C2Buffer and
            // mBuffer.
            if (mBuffer->data().type() != C2BufferData::LINEAR) {
                return nullptr;
            }
            C2ConstLinearBlock block = mBuffer->data().linearBlocks().front();
            if (offset == 0 && size == block.capacity()) {
                return mBuffer;
                // Let C2Buffer be new one to queue to MediaCodec. It will allow
                // the related input slot to be released by onWorkDone from C2
                // Component. Currently, the life cycle of mBuffer should be
                // protected by different flows.
                return std::make_shared<C2Buffer>(*mBuffer);
            }

            std::shared_ptr<C2Buffer> buffer =