Codec2: Re-enable blocking allocator
Handle initial output surface configuration with destruction of old
blockpool.
Bug: 157111613
Test: atest CtsMediaTestCases:android.media.cts.AdaptivePlaybackTest
Change-Id: Ibf16cece0d7191fad24e7c8b64628fdc591e8a59
diff --git a/media/codec2/vndk/include/C2SurfaceSyncObj.h b/media/codec2/vndk/include/C2SurfaceSyncObj.h
index 16e9a9d..ac87fe4 100644
--- a/media/codec2/vndk/include/C2SurfaceSyncObj.h
+++ b/media/codec2/vndk/include/C2SurfaceSyncObj.h
@@ -53,7 +53,7 @@
* \param maxDequeueCount Initial value of # of max dequeued buffer count
* \param curDequeueCount Initial value of # of current dequeued buffer count
*/
- void setInitialDequeueCount(int32_t maxDequeueCount, int32_t curDequeueCount);
+ void setInitialDequeueCountLocked(int32_t maxDequeueCount, int32_t curDequeueCount);
/**
* Get a waitId which will be used to implement fence.
diff --git a/media/codec2/vndk/platform/C2BqBuffer.cpp b/media/codec2/vndk/platform/C2BqBuffer.cpp
index 2944925..169de0c 100644
--- a/media/codec2/vndk/platform/C2BqBuffer.cpp
+++ b/media/codec2/vndk/platform/C2BqBuffer.cpp
@@ -316,12 +316,15 @@
}
return C2_BLOCKING;
}
+ syncVar->notifyDequeuedLocked();
+ syncVar->unlock();
c2Status = dequeueBuffer(width, height, format, androidUsage,
&slot, &bufferNeedsReallocation, &fence);
- if (c2Status == C2_OK) {
- syncVar->notifyDequeuedLocked();
+ if (c2Status != C2_OK) {
+ syncVar->lock();
+ syncVar->notifyQueuedLocked();
+ syncVar->unlock();
}
- syncVar->unlock();
} else {
c2Status = dequeueBuffer(width, height, format, usage,
&slot, &bufferNeedsReallocation, &fence);
@@ -789,7 +792,7 @@
sp<GraphicBuffer> newBuffer = new GraphicBuffer(
graphicBuffer->handle, GraphicBuffer::CLONE_HANDLE,
graphicBuffer->width, graphicBuffer->height, graphicBuffer->format,
- graphicBuffer->layerCount, toUsage, graphicBuffer->stride);
+ graphicBuffer->layerCount, toUsage | graphicBuffer->getUsage(), graphicBuffer->stride);
if (newBuffer->initCheck() == android::NO_ERROR) {
graphicBuffer = std::move(newBuffer);
} else {
diff --git a/media/codec2/vndk/platform/C2SurfaceSyncObj.cpp b/media/codec2/vndk/platform/C2SurfaceSyncObj.cpp
index 587992e..e55bdc0 100644
--- a/media/codec2/vndk/platform/C2SurfaceSyncObj.cpp
+++ b/media/codec2/vndk/platform/C2SurfaceSyncObj.cpp
@@ -157,12 +157,10 @@
return 0;
}
-void C2SyncVariables::setInitialDequeueCount(
+void C2SyncVariables::setInitialDequeueCountLocked(
int32_t maxDequeueCount, int32_t curDequeueCount) {
- lock();
mMaxDequeueCount = maxDequeueCount;
mCurDequeueCount = curDequeueCount;
- unlock();
}
uint32_t C2SyncVariables::getWaitIdLocked() {