setDequeueTimeout(-1) on the output surface
This ensures that allocation blocks in ACodec.
Test: make cts -j123 && cts-tradefed run cts-dev -m \
CtsMediaTestCases --compatibility:module-arg \
CtsMediaTestCases:include-annotation:\
android.platform.test.annotations.RequiresDevice
Bug: 120466624
Change-Id: I2fd0cbdf37324c9fc774fb9adf3e39a486cb2129
(cherry picked from commit 7b70a3122f024d73befe6bbfb923cc8a0834562a)
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 7f39d10..251420f 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -783,6 +783,9 @@
// need to enable allocation when attaching
surface->getIGraphicBufferProducer()->allowAllocation(true);
+ // dequeueBuffer cannot time out
+ surface->setDequeueTimeout(-1);
+
// for meta data mode, we move dequeud buffers to the new surface.
// for non-meta mode, we must move all registered buffers
for (size_t i = 0; i < buffers.size(); ++i) {
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index 353e407..c4f0410 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -2198,6 +2198,7 @@
}
if (mime.startsWithIgnoreCase("video/")) {
+ mSurface->setDequeueTimeout(-1);
mSoftRenderer = new SoftwareRenderer(mSurface, mRotationDegrees);
}
}
@@ -2485,6 +2486,7 @@
&& (mFlags & kFlagPushBlankBuffersOnShutdown)) {
pushBlankBuffersToNativeWindow(mSurface.get());
}
+ surface->setDequeueTimeout(-1);
mSoftRenderer = new SoftwareRenderer(surface);
// TODO: check if this was successful
} else {