codec2 hal: use bufferpool2 when necessary
Bug: 251850069
Test: atest VtsHalMediaC2V1_0TargetAudioDecTest
Change-Id: I967313b57b9187735feebfab0b430203b5c48016
diff --git a/media/codec2/hal/common/include/codec2/common/BufferTypes.h b/media/codec2/hal/common/include/codec2/common/BufferTypes.h
index afd2db0..af71122 100644
--- a/media/codec2/hal/common/include/codec2/common/BufferTypes.h
+++ b/media/codec2/hal/common/include/codec2/common/BufferTypes.h
@@ -183,7 +183,8 @@
baseBlocks, baseBlockIndices);
}
switch (blockPoolData->getType()) {
- case _C2BlockPoolData::TYPE_BUFFERPOOL: {
+ case _C2BlockPoolData::TYPE_BUFFERPOOL:
+ case _C2BlockPoolData::TYPE_BUFFERPOOL2: {
// BufferPoolData
std::shared_ptr<typename BufferPoolTypes::BufferPoolData> bpData;
if (!GetBufferPoolData<BufferPoolTypes>(blockPoolData, &bpData) || !bpData) {
@@ -194,28 +195,30 @@
index, bpData,
bufferPoolSender, baseBlocks, baseBlockIndices);
}
- case _C2BlockPoolData::TYPE_BUFFERQUEUE:
- uint32_t gen;
- uint64_t bqId;
- int32_t bqSlot;
- // Update handle if migration happened.
- if (_C2BlockFactory::GetBufferQueueData(
- blockPoolData, &gen, &bqId, &bqSlot)) {
- android::MigrateNativeCodec2GrallocHandle(
- const_cast<native_handle_t*>(handle), gen, bqId, bqSlot);
+ case _C2BlockPoolData::TYPE_BUFFERQUEUE: {
+ uint32_t gen;
+ uint64_t bqId;
+ int32_t bqSlot;
+ // Update handle if migration happened.
+ if (_C2BlockFactory::GetBufferQueueData(
+ blockPoolData, &gen, &bqId, &bqSlot)) {
+ android::MigrateNativeCodec2GrallocHandle(
+ const_cast<native_handle_t*>(handle), gen, bqId, bqSlot);
+ }
+ return _addBaseBlock(
+ index, handle,
+ baseBlocks, baseBlockIndices);
}
- return _addBaseBlock(
- index, handle,
- baseBlocks, baseBlockIndices);
- case _C2BlockPoolData::TYPE_AHWBUFFER:
- AHardwareBuffer *pBuf;
- if (!_C2BlockFactory::GetAHardwareBuffer(blockPoolData, &pBuf)) {
- LOG(ERROR) << "AHardwareBuffer unavailable in a block.";
- return false;
+ case _C2BlockPoolData::TYPE_AHWBUFFER: {
+ AHardwareBuffer *pBuf;
+ if (!_C2BlockFactory::GetAHardwareBuffer(blockPoolData, &pBuf)) {
+ LOG(ERROR) << "AHardwareBuffer unavailable in a block.";
+ return false;
+ }
+ return _addBaseBlock(
+ index, pBuf,
+ baseBlocks, baseBlockIndices);
}
- return _addBaseBlock(
- index, pBuf,
- baseBlocks, baseBlockIndices);
default:
LOG(ERROR) << "Unknown C2BlockPoolData type.";
return false;
diff --git a/media/codec2/vndk/Android.bp b/media/codec2/vndk/Android.bp
index bbe228c..a393dc1 100644
--- a/media/codec2/vndk/Android.bp
+++ b/media/codec2/vndk/Android.bp
@@ -52,6 +52,9 @@
"com.android.media.swcodec",
],
+ defaults: [
+ "libcodec2_hal_selection",
+ ],
srcs: [
"C2AllocatorBlob.cpp",
@@ -129,6 +132,10 @@
cc_defaults {
name: "libcodec2-static-defaults",
+ defaults: [
+ "libcodec2_hal_selection",
+ ],
+
static_libs: [
"liblog",
"libion",
@@ -172,6 +179,10 @@
cc_defaults {
name: "libcodec2-impl-defaults",
+ defaults: [
+ "libcodec2_hal_selection",
+ ],
+
shared_libs: [
"libbase", // for C2_LOG
"liblog", // for ALOG
diff --git a/media/codec2/vndk/C2Store.cpp b/media/codec2/vndk/C2Store.cpp
index 61aafa7..76c378d 100644
--- a/media/codec2/vndk/C2Store.cpp
+++ b/media/codec2/vndk/C2Store.cpp
@@ -28,6 +28,7 @@
#include <C2Config.h>
#include <C2PlatformStorePluginLoader.h>
#include <C2PlatformSupport.h>
+#include <codec2/common/HalSelection.h>
#include <cutils/properties.h>
#include <util/C2InterfaceHelper.h>
@@ -447,6 +448,12 @@
namespace {
+static C2PooledBlockPool::BufferPoolVer GetBufferPoolVer() {
+ static C2PooledBlockPool::BufferPoolVer sVer =
+ IsCodec2AidlHalSelected() ? C2PooledBlockPool::VER_AIDL2 : C2PooledBlockPool::VER_HIDL;
+ return sVer;
+}
+
class _C2BlockPoolCache {
public:
_C2BlockPoolCache() : mBlockPoolSeqId(C2BlockPool::PLATFORM_START + 1) {}
@@ -477,7 +484,7 @@
C2PlatformAllocatorStore::ION, &allocator);
if (res == C2_OK) {
std::shared_ptr<C2BlockPool> ptr(
- new C2PooledBlockPool(allocator, poolId), deleter);
+ new C2PooledBlockPool(allocator, poolId, GetBufferPoolVer()), deleter);
*pool = ptr;
mBlockPools[poolId] = ptr;
mComponents[poolId].insert(
@@ -490,7 +497,7 @@
C2PlatformAllocatorStore::BLOB, &allocator);
if (res == C2_OK) {
std::shared_ptr<C2BlockPool> ptr(
- new C2PooledBlockPool(allocator, poolId), deleter);
+ new C2PooledBlockPool(allocator, poolId, GetBufferPoolVer()), deleter);
*pool = ptr;
mBlockPools[poolId] = ptr;
mComponents[poolId].insert(
@@ -504,7 +511,7 @@
C2AllocatorStore::DEFAULT_GRAPHIC, &allocator);
if (res == C2_OK) {
std::shared_ptr<C2BlockPool> ptr(
- new C2PooledBlockPool(allocator, poolId), deleter);
+ new C2PooledBlockPool(allocator, poolId, GetBufferPoolVer()), deleter);
*pool = ptr;
mBlockPools[poolId] = ptr;
mComponents[poolId].insert(