From b0caa0e24e56c9350bd1f0720ff9157db5577387 Mon Sep 17 00:00:00 2001 From: "ted.sun" Date: Tue, 5 Oct 2021 11:57:25 +0800 Subject: 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 --- media/jni/android_media_MediaCodecLinearBlock.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/media/jni/android_media_MediaCodecLinearBlock.h b/media/jni/android_media_MediaCodecLinearBlock.h index ae2d3a264abc..ed3451764b60 100644 --- a/media/jni/android_media_MediaCodecLinearBlock.h +++ b/media/jni/android_media_MediaCodecLinearBlock.h @@ -42,12 +42,19 @@ struct JMediaCodecLinearBlock { std::shared_ptr 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(*mBuffer); } std::shared_ptr buffer = -- cgit v1.2.3-59-g8ed1b