summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author ted.sun <ted.sun@mediatek.com> 2021-10-05 11:57:25 +0800
committer Daren Liao <daren.liao@mediatek.com> 2021-10-07 03:20:19 +0000
commitb0caa0e24e56c9350bd1f0720ff9157db5577387 (patch)
tree2cb09326a0c2c8ff0390bb26fe9f9a53fce5b014
parent2823967c2dba4eb200c30b7b07dcb5af452737de (diff)
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
-rw-r--r--media/jni/android_media_MediaCodecLinearBlock.h9
1 files changed, 8 insertions, 1 deletions
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<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 =