Merge "codec2: clean up old block pools" into sc-dev
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.cpp b/media/codec2/sfplugin/CCodecBufferChannel.cpp
index c697b80..96af7cb 100644
--- a/media/codec2/sfplugin/CCodecBufferChannel.cpp
+++ b/media/codec2/sfplugin/CCodecBufferChannel.cpp
@@ -159,6 +159,10 @@
output->outputDelay = 0u;
output->numSlots = kSmoothnessFactor;
}
+ {
+ Mutexed<BlockPools>::Locked pools(mBlockPools);
+ pools->outputPoolId = C2BlockPool::BASIC_LINEAR;
+ }
}
CCodecBufferChannel::~CCodecBufferChannel() {
@@ -1092,10 +1096,13 @@
bool graphic = (oStreamFormat.value == C2BufferData::GRAPHIC);
C2BlockPool::local_id_t outputPoolId_;
+ C2BlockPool::local_id_t prevOutputPoolId;
{
Mutexed<BlockPools>::Locked pools(mBlockPools);
+ prevOutputPoolId = pools->outputPoolId;
+
// set default allocator ID.
pools->outputAllocatorId = (graphic) ? C2PlatformAllocatorStore::GRALLOC
: preferredLinearId;
@@ -1189,6 +1196,15 @@
outputPoolId_ = pools->outputPoolId;
}
+ if (prevOutputPoolId != C2BlockPool::BASIC_LINEAR
+ && prevOutputPoolId != C2BlockPool::BASIC_GRAPHIC) {
+ c2_status_t err = mComponent->destroyBlockPool(prevOutputPoolId);
+ if (err != C2_OK) {
+ ALOGW("Failed to clean up previous block pool %llu - %s (%d)\n",
+ (unsigned long long) prevOutputPoolId, asString(err), err);
+ }
+ }
+
Mutexed<Output>::Locked output(mOutput);
output->outputDelay = outputDelayValue;
output->numSlots = numOutputSlots;