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;