Fix CodecLooper queue block issue
The message from C2 HAL should queued itself, but not in CodecLooper
queue. Then it will not block other command such as stop from
APP(MediaCodec).
Test:
HDMI stress test pass
Bug: 294965253, 234324371
Change-Id: I55c5c8e53d71084f1c46b508012f3b9ef12cbc93
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 86fd8ab..e737006 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -2311,9 +2311,12 @@
void CCodec::onWorkDone(std::list<std::unique_ptr<C2Work>> &workItems) {
if (!workItems.empty()) {
Mutexed<std::list<std::unique_ptr<C2Work>>>::Locked queue(mWorkDoneQueue);
+ bool shouldPost = queue->empty();
queue->splice(queue->end(), workItems);
+ if (shouldPost) {
+ (new AMessage(kWhatWorkDone, this))->post();
+ }
}
- (new AMessage(kWhatWorkDone, this))->post();
}
void CCodec::onInputBufferDone(uint64_t frameIndex, size_t arrayIndex) {