From f9b32129d4f40c62b664427df073c4e73bf66399 Mon Sep 17 00:00:00 2001 From: Wonsik Kim Date: Thu, 2 Apr 2020 11:30:17 -0700 Subject: [PATCH] codec2: change of asC2Buffer behavior Bug: 152617675 Test: atest CtsMediaTestCases:MediaCodecBlockModelTest Change-Id: Ie5893313840c6f1c349affca15f105520d7965cb --- media/codec2/sfplugin/CCodecBuffers.cpp | 2 ++ media/codec2/sfplugin/Codec2Buffer.cpp | 18 +++++++++++++++--- media/codec2/sfplugin/Codec2Buffer.h | 5 +++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/media/codec2/sfplugin/CCodecBuffers.cpp b/media/codec2/sfplugin/CCodecBuffers.cpp index 668f892017..d7cc175aea 100644 --- a/media/codec2/sfplugin/CCodecBuffers.cpp +++ b/media/codec2/sfplugin/CCodecBuffers.cpp @@ -261,6 +261,7 @@ bool FlexBuffersImpl::releaseSlot( std::shared_ptr result = mBuffers[index].compBuffer.lock(); if (!result) { result = clientBuffer->asC2Buffer(); + clientBuffer->clearC2BufferRefs(); mBuffers[index].compBuffer = result; } if (c2buffer) { @@ -379,6 +380,7 @@ bool BuffersArrayImpl::returnBuffer( std::shared_ptr result = mBuffers[index].compBuffer.lock(); if (!result) { result = clientBuffer->asC2Buffer(); + clientBuffer->clearC2BufferRefs(); mBuffers[index].compBuffer = result; } if (c2buffer) { diff --git a/media/codec2/sfplugin/Codec2Buffer.cpp b/media/codec2/sfplugin/Codec2Buffer.cpp index b6d18e212d..5b3a62f37a 100644 --- a/media/codec2/sfplugin/Codec2Buffer.cpp +++ b/media/codec2/sfplugin/Codec2Buffer.cpp @@ -111,7 +111,11 @@ DummyContainerBuffer::DummyContainerBuffer( } std::shared_ptr DummyContainerBuffer::asC2Buffer() { - return std::move(mBufferRef); + return mBufferRef; +} + +void DummyContainerBuffer::clearC2BufferRefs() { + mBufferRef.reset(); } bool DummyContainerBuffer::canCopy(const std::shared_ptr &) const { @@ -187,7 +191,11 @@ ConstLinearBlockBuffer::ConstLinearBlockBuffer( } std::shared_ptr ConstLinearBlockBuffer::asC2Buffer() { - return std::move(mBufferRef); + return mBufferRef; +} + +void ConstLinearBlockBuffer::clearC2BufferRefs() { + mBufferRef.reset(); } // GraphicView2MediaImageConverter @@ -689,8 +697,12 @@ ConstGraphicBlockBuffer::ConstGraphicBlockBuffer( } std::shared_ptr ConstGraphicBlockBuffer::asC2Buffer() { + return mBufferRef; +} + +void ConstGraphicBlockBuffer::clearC2BufferRefs() { mView.reset(); - return std::move(mBufferRef); + mBufferRef.reset(); } bool ConstGraphicBlockBuffer::canCopy(const std::shared_ptr &buffer) const { diff --git a/media/codec2/sfplugin/Codec2Buffer.h b/media/codec2/sfplugin/Codec2Buffer.h index 09475efec2..ff79946524 100644 --- a/media/codec2/sfplugin/Codec2Buffer.h +++ b/media/codec2/sfplugin/Codec2Buffer.h @@ -59,6 +59,8 @@ public: sp getImageData() const { return mImageData; } + virtual void clearC2BufferRefs() {} + protected: /** * canCopy() implementation for linear buffers. @@ -102,6 +104,7 @@ public: const std::shared_ptr &buffer = nullptr); std::shared_ptr asC2Buffer() override; + void clearC2BufferRefs() override; bool canCopy(const std::shared_ptr &buffer) const override; bool copy(const std::shared_ptr &buffer) override; @@ -161,6 +164,7 @@ public: virtual ~ConstLinearBlockBuffer() = default; std::shared_ptr asC2Buffer() override; + void clearC2BufferRefs() override; private: ConstLinearBlockBuffer( @@ -280,6 +284,7 @@ public: virtual ~ConstGraphicBlockBuffer() = default; std::shared_ptr asC2Buffer() override; + void clearC2BufferRefs() override; bool canCopy(const std::shared_ptr &buffer) const override; bool copy(const std::shared_ptr &buffer) override;