diff options
author | Andreas Huber <andih@google.com> | 2013-11-07 11:13:27 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2013-11-07 13:50:18 -0800 |
commit | ad3b7e8d40bf1c97347f1538d30bba78ca371f67 (patch) | |
tree | 4f3b8ec0d04db8a0c8ab26bb8c0ee7addaf3930f /media/libstagefright/omx/OMXNodeInstance.cpp | |
parent | f8a1169d98a09d1473f289c363353d08301576f6 (diff) | |
download | frameworks_av-ad3b7e8d40bf1c97347f1538d30bba78ca371f67.zip frameworks_av-ad3b7e8d40bf1c97347f1538d30bba78ca371f67.tar.gz frameworks_av-ad3b7e8d40bf1c97347f1538d30bba78ca371f67.tar.bz2 |
Properly handle executing->idle in GraphicBufferSource
ACodec has initiated the transition from exectuing->idle and is waiting
for the component to return all buffers so they can be freed.
It's counter productive and with some vendors harmful to submit additional
buffers to the component from this point on.
Change-Id: I332be254a1faf94902c77b5792a373ab447e44d3
related-to-bug: 11573543
Diffstat (limited to 'media/libstagefright/omx/OMXNodeInstance.cpp')
-rw-r--r-- | media/libstagefright/omx/OMXNodeInstance.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index 46e5d71..5f104fc 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp @@ -243,13 +243,18 @@ status_t OMXNodeInstance::freeNode(OMXMaster *master) { status_t OMXNodeInstance::sendCommand( OMX_COMMANDTYPE cmd, OMX_S32 param) { const sp<GraphicBufferSource>& bufferSource(getGraphicBufferSource()); - if (bufferSource != NULL - && cmd == OMX_CommandStateSet - && param == OMX_StateLoaded) { - // Initiating transition from Executing -> Loaded - // Buffers are about to be freed. - bufferSource->omxLoaded(); - setGraphicBufferSource(NULL); + if (bufferSource != NULL && cmd == OMX_CommandStateSet) { + if (param == OMX_StateIdle) { + // Initiating transition from Executing -> Idle + // ACodec is waiting for all buffers to be returned, do NOT + // submit any more buffers to the codec. + bufferSource->omxIdle(); + } else if (param == OMX_StateLoaded) { + // Initiating transition from Idle/Executing -> Loaded + // Buffers are about to be freed. + bufferSource->omxLoaded(); + setGraphicBufferSource(NULL); + } // fall through } |