GraphicsTracker: handle dequeueBuffer error while switching Surfaces
dequeueBuffer() can be called just after the output surface has
been switched. Ignore the error in the case.
Bug: 351820377
Test: atest android.mediav2.cts.CodecDecoderDetachedSurfaceTest#testDetachOutputSurface
FLAG: EXEMPT bugfix
Merged-In: I66058eab90d14418830fdbbbf3b6319bf585072f
Change-Id: I66058eab90d14418830fdbbbf3b6319bf585072f
diff --git a/media/codec2/hal/client/GraphicsTracker.cpp b/media/codec2/hal/client/GraphicsTracker.cpp
index f80809a..95f5a6e 100644
--- a/media/codec2/hal/client/GraphicsTracker.cpp
+++ b/media/codec2/hal/client/GraphicsTracker.cpp
@@ -673,6 +673,15 @@
ALOGW("BQ might not be ready for dequeueBuffer()");
return C2_BLOCKING;
}
+ bool cacheExpired = false;
+ {
+ std::unique_lock<std::mutex> l(mLock);
+ cacheExpired = (mBufferCache.get() != cache.get());
+ }
+ if (cacheExpired) {
+ ALOGW("a new BQ is configured. dequeueBuffer() error %d", (int)status);
+ return C2_BLOCKING;
+ }
ALOGE("BQ in inconsistent status. dequeueBuffer() error %d", (int)status);
return C2_CORRUPTED;
}