GraphicBufferSource: remove free codec buffers only when submitted to codec
Bug: 37556535
Change-Id: I516c0a2fc6c78e937360a2a5c2a3dcdea1d07370
diff --git a/media/libstagefright/omx/GraphicBufferSource.cpp b/media/libstagefright/omx/GraphicBufferSource.cpp
index f8ad2f6..103a3e9 100644
--- a/media/libstagefright/omx/GraphicBufferSource.cpp
+++ b/media/libstagefright/omx/GraphicBufferSource.cpp
@@ -766,7 +766,6 @@
status_t GraphicBufferSource::submitBuffer_l(const VideoBuffer &item) {
CHECK(!mFreeCodecBuffers.empty());
IOMX::buffer_id codecBufferId = *mFreeCodecBuffers.begin();
- mFreeCodecBuffers.erase(mFreeCodecBuffers.begin());
ALOGV("submitBuffer_l [slot=%d, bufferId=%d]", item.mBuffer->getSlot(), codecBufferId);
@@ -797,6 +796,8 @@
return err;
}
+ mFreeCodecBuffers.erase(mFreeCodecBuffers.begin());
+
ssize_t cbix = mSubmittedCodecBuffers.add(codecBufferId, buffer);
ALOGV("emptyGraphicBuffer succeeded, bufferId=%u@%zd bufhandle=%p",
codecBufferId, cbix, graphicBuffer->handle);
@@ -815,7 +816,6 @@
return;
}
IOMX::buffer_id codecBufferId = *mFreeCodecBuffers.begin();
- mFreeCodecBuffers.erase(mFreeCodecBuffers.begin());
// We reject any additional incoming graphic buffers. There is no acquired buffer used for EOS
status_t err = mOMXNode->emptyBuffer(
@@ -823,6 +823,7 @@
if (err != OK) {
ALOGW("emptyDirectBuffer EOS failed: 0x%x", err);
} else {
+ mFreeCodecBuffers.erase(mFreeCodecBuffers.begin());
ssize_t cbix = mSubmittedCodecBuffers.add(codecBufferId, nullptr);
ALOGV("submitEndOfInputStream_l: buffer submitted, bufferId=%u@%zd", codecBufferId, cbix);
mEndOfStreamSent = true;