CCodecBufferChannel: skip output slot check if the block pool can throttle
Bug: 274736629
Test: atest CtsMediaDecoderTestCases CtsMediaPerformanceTestCases
Change-Id: I476c3340728c87dfbb3be7b37a436d8fe5c59f81
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.cpp b/media/codec2/sfplugin/CCodecBufferChannel.cpp
index 1c86ba9..f8d529e 100644
--- a/media/codec2/sfplugin/CCodecBufferChannel.cpp
+++ b/media/codec2/sfplugin/CCodecBufferChannel.cpp
@@ -167,6 +167,7 @@
Mutexed<Output>::Locked output(mOutput);
output->outputDelay = 0u;
output->numSlots = kSmoothnessFactor;
+ output->bounded = false;
}
{
Mutexed<BlockPools>::Locked pools(mBlockPools);
@@ -727,7 +728,7 @@
Mutexed<Output>::Locked output(mOutput);
if (!output->buffers ||
output->buffers->hasPending() ||
- output->buffers->numActiveSlots() >= output->numSlots) {
+ (!output->bounded && output->buffers->numActiveSlots() >= output->numSlots)) {
return;
}
}
@@ -1509,6 +1510,7 @@
Mutexed<Output>::Locked output(mOutput);
output->outputDelay = outputDelayValue;
output->numSlots = numOutputSlots;
+ output->bounded = bool(outputSurface);
if (graphic) {
if (outputSurface || !buffersBoundToCodec) {
output->buffers.reset(new GraphicOutputBuffers(mName));
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.h b/media/codec2/sfplugin/CCodecBufferChannel.h
index 0d25d6d..33cc5a8 100644
--- a/media/codec2/sfplugin/CCodecBufferChannel.h
+++ b/media/codec2/sfplugin/CCodecBufferChannel.h
@@ -321,6 +321,9 @@
std::unique_ptr<OutputBuffers> buffers;
size_t numSlots;
uint32_t outputDelay;
+ // true iff the underlying block pool is bounded --- for example,
+ // a BufferQueue-based block pool would be bounded by the BufferQueue.
+ bool bounded;
};
Mutexed<Output> mOutput;
Mutexed<std::list<std::unique_ptr<C2Work>>> mFlushedConfigs;