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
diff --git a/media/jni/android_media_MediaCodecLinearBlock.h b/media/jni/android_media_MediaCodecLinearBlock.h
index ae2d3a2..ed34517 100644
--- a/media/jni/android_media_MediaCodecLinearBlock.h
+++ b/media/jni/android_media_MediaCodecLinearBlock.h
@@ -42,12 +42,19 @@
 
     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 =