Codec2: Make surface change work
Enable attaching output buffer from old surface to new surface.
Bug: 121453508
Change-Id: Ie9a08b77f43ad787b0b6df347bd43c12493dd0de
diff --git a/media/codec2/hidl/client/client.cpp b/media/codec2/hidl/client/client.cpp
index f5cc9ff..cd374b0 100644
--- a/media/codec2/hidl/client/client.cpp
+++ b/media/codec2/hidl/client/client.cpp
@@ -1186,7 +1186,7 @@
uint32_t outputGeneration = mOutputGeneration;
mOutputBufferQueueMutex.unlock();
- status_t status = !attachToBufferQueue(block,
+ status_t status = attachToBufferQueue(block,
outputIgbp,
outputGeneration,
&bqSlot);
@@ -1218,14 +1218,15 @@
return NO_INIT;
}
- if (bqId != outputBqId) {
- ALOGV("queueToOutputSurface -- bufferqueue ids mismatch.");
- return DEAD_OBJECT;
- }
-
- if (generation != outputGeneration) {
- ALOGV("queueToOutputSurface -- generation numbers mismatch.");
- return DEAD_OBJECT;
+ if (bqId != outputBqId || generation != outputGeneration) {
+ if (!holdBufferQueueBlock(block, mOutputIgbp, mOutputBqId, mOutputGeneration)) {
+ ALOGE("queueToOutputSurface -- migration fialed");
+ return DEAD_OBJECT;
+ }
+ if (!getBufferQueueAssignment(block, &generation, &bqId, &bqSlot)) {
+ ALOGE("queueToOutputSurface -- corrupted bq assignment");
+ return UNKNOWN_ERROR;
+ }
}
status_t status = outputIgbp->queueBuffer(static_cast<int>(bqSlot),