codec2: add parameter C2PortSurfaceAllocatorTuning
Use C2PortSurfaceAllocatorTuning parameter to suggest BufferQueue-backed
allocator ID if outputting to a surface.
Bug: 79239042
Bug: 80124477
Test: run CtsMediaTestCases of Codec2.0 with plugin available.
Test: android.media.cts.MediaPlayerTest#testLocalVideo_MP4_H264_480x360_1000kbps_25fps_AAC_Stereo_128kbps_44110Hz (use buffer queue)
Test: android.media.cts.EncodeDecodeTest#testEncodeDecodeVideoFromBufferToBuffer720p (no buffer queue)
Change-Id: I171e966c2ea708c7db840ea67fd23762d42365f0
diff --git a/C2VDAComponent.cpp b/C2VDAComponent.cpp
index 65656e3..1f30f7d 100644
--- a/C2VDAComponent.cpp
+++ b/C2VDAComponent.cpp
@@ -147,10 +147,11 @@
bool secureMode = name.find(".secure") != std::string::npos;
C2Allocator::id_t inputAllocators[] = {secureMode ? C2VDAAllocatorStore::SECURE_LINEAR
: C2PlatformAllocatorStore::ION};
- C2Allocator::id_t outputAllocators[] = {secureMode ? C2VDAAllocatorStore::SECURE_GRAPHIC
- : C2VDAAllocatorStore::V4L2_BUFFERQUEUE};
- // TODO: change as below after ag/4660016 is landed.
- // C2Allocator::id_t outputAllocators[] = {C2VDAAllocatorStore::V4L2_BUFFERPOOL};
+
+ C2Allocator::id_t outputAllocators[] = {C2VDAAllocatorStore::V4L2_BUFFERPOOL};
+
+ C2Allocator::id_t surfaceAllocator = secureMode ? C2VDAAllocatorStore::SECURE_GRAPHIC
+ : C2VDAAllocatorStore::V4L2_BUFFERQUEUE;
addParameter(
DefineParam(mInputAllocatorIds, C2_PARAMKEY_INPUT_ALLOCATORS)
@@ -162,6 +163,10 @@
.withConstValue(C2PortAllocatorsTuning::output::AllocShared(outputAllocators))
.build());
+ addParameter(DefineParam(mOutputSurfaceAllocatorId, C2_PARAMKEY_OUTPUT_SURFACE_ALLOCATOR)
+ .withConstValue(new C2PortSurfaceAllocatorTuning::output(surfaceAllocator))
+ .build());
+
C2BlockPool::local_id_t outputBlockPools[] = {kDefaultOutputBlockPool};
addParameter(