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;
     }