From a39882b5d85353a2d308ed7c7d3bd3cec1301391 Mon Sep 17 00:00:00 2001 From: Wonsik Kim Date: Thu, 20 Jun 2019 16:13:56 -0700 Subject: [PATCH] CCodecBuffers: add support for reallocating graphic buffers Bug: 135261503 Test: modified AdaptivePlaybackTest Change-Id: I64de657175c671672ab67d8941e35f0ba35c8dbd --- media/codec2/sfplugin/CCodecBuffers.cpp | 21 +++++++++++++++++++-- media/codec2/sfplugin/CCodecBuffers.h | 5 +++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/media/codec2/sfplugin/CCodecBuffers.cpp b/media/codec2/sfplugin/CCodecBuffers.cpp index 5ebd5bd317..26c702ddc0 100644 --- a/media/codec2/sfplugin/CCodecBuffers.cpp +++ b/media/codec2/sfplugin/CCodecBuffers.cpp @@ -439,6 +439,10 @@ size_t BuffersArrayImpl::numClientBuffers() const { }); } +size_t BuffersArrayImpl::arraySize() const { + return mBuffers.size(); +} + // InputBuffersArray void InputBuffersArray::initialize( @@ -883,11 +887,24 @@ void OutputBuffersArray::realloc(const std::shared_ptr &c2buffer) { mAlloc = [format = mFormat, size] { return new LocalLinearBuffer(format, new ABuffer(size)); }; + ALOGD("[%s] reallocating with linear buffer of size %u", mName, size); break; } - // TODO: add support - case C2BufferData::GRAPHIC: [[fallthrough]]; + case C2BufferData::GRAPHIC: { + // This is only called for RawGraphicOutputBuffers. + mAlloc = [format = mFormat, + lbp = LocalBufferPool::Create(kMaxLinearBufferSize * mImpl.arraySize())] { + return ConstGraphicBlockBuffer::AllocateEmpty( + format, + [lbp](size_t capacity) { + return lbp->newBuffer(capacity); + }); + }; + ALOGD("[%s] reallocating with graphic buffer: format = %s", + mName, mFormat->debugString().c_str()); + break; + } case C2BufferData::INVALID: [[fallthrough]]; case C2BufferData::LINEAR_CHUNKS: [[fallthrough]]; diff --git a/media/codec2/sfplugin/CCodecBuffers.h b/media/codec2/sfplugin/CCodecBuffers.h index e4f2809456..2cb6b813c1 100644 --- a/media/codec2/sfplugin/CCodecBuffers.h +++ b/media/codec2/sfplugin/CCodecBuffers.h @@ -478,6 +478,11 @@ public: */ size_t numClientBuffers() const; + /** + * Return the size of the array. + */ + size_t arraySize() const; + private: std::string mImplName; ///< name for debugging const char *mName; ///< C-string version of name