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
This commit is contained in:
ted.sun
2021-10-05 11:57:25 +08:00
committed by Daren Liao
parent 2823967c2d
commit b0caa0e24e

View File

@@ -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 =