CCodecBuffers: add support for reallocating graphic buffers
Bug: 135261503
Test: modified AdaptivePlaybackTest
Change-Id: I64de657175c671672ab67d8941e35f0ba35c8dbd
diff --git a/media/codec2/sfplugin/CCodecBuffers.cpp b/media/codec2/sfplugin/CCodecBuffers.cpp
index 5ebd5bd..26c702d 100644
--- a/media/codec2/sfplugin/CCodecBuffers.cpp
+++ b/media/codec2/sfplugin/CCodecBuffers.cpp
@@ -439,6 +439,10 @@
});
}
+size_t BuffersArrayImpl::arraySize() const {
+ return mBuffers.size();
+}
+
// InputBuffersArray
void InputBuffersArray::initialize(
@@ -883,11 +887,24 @@
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 e4f2809..2cb6b81 100644
--- a/media/codec2/sfplugin/CCodecBuffers.h
+++ b/media/codec2/sfplugin/CCodecBuffers.h
@@ -478,6 +478,11 @@
*/
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