summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorJamie Gennis <jgennis@google.com>2013-05-21 11:43:44 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-05-21 11:43:44 -0700
commit6077b51013d935f626d430281c826d4ad5b8ba64 (patch)
treeae76e94dd21bd554b04478ed4ed2970bc2d2d5e6 /media
parent475173cd4c9108e6cd141ae74ea62ef9bbdc2aed (diff)
parent9545b6707e8c2213806c71fa9b0cae608b8bc032 (diff)
downloadframeworks_av-6077b51013d935f626d430281c826d4ad5b8ba64.zip
frameworks_av-6077b51013d935f626d430281c826d4ad5b8ba64.tar.gz
frameworks_av-6077b51013d935f626d430281c826d4ad5b8ba64.tar.bz2
am 9545b670: am f21daf47: Merge "Avoid a deadlock during EmptyBufferDone" into jb-mr2-dev
* commit '9545b6707e8c2213806c71fa9b0cae608b8bc032': Avoid a deadlock during EmptyBufferDone
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/omx/OMXNodeInstance.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp
index e7d5e74..a9eb94f 100644
--- a/media/libstagefright/omx/OMXNodeInstance.cpp
+++ b/media/libstagefright/omx/OMXNodeInstance.cpp
@@ -779,6 +779,23 @@ void OMXNodeInstance::onMessage(const omx_message &msg) {
static_cast<BufferMeta *>(buffer->pAppPrivate);
buffer_meta->CopyFromOMX(buffer);
+ } else if (msg.type == omx_message::EMPTY_BUFFER_DONE) {
+ const sp<GraphicBufferSource>& bufferSource(getGraphicBufferSource());
+
+ if (bufferSource != NULL) {
+ // This is one of the buffers used exclusively by
+ // GraphicBufferSource.
+ // Don't dispatch a message back to ACodec, since it doesn't
+ // know that anyone asked to have the buffer emptied and will
+ // be very confused.
+
+ OMX_BUFFERHEADERTYPE *buffer =
+ static_cast<OMX_BUFFERHEADERTYPE *>(
+ msg.u.buffer_data.buffer);
+
+ bufferSource->codecBufferEmptied(buffer);
+ return;
+ }
}
mObserver->onMessage(msg);
@@ -839,17 +856,6 @@ OMX_ERRORTYPE OMXNodeInstance::OnEmptyBufferDone(
if (instance->mDying) {
return OMX_ErrorNone;
}
- const sp<GraphicBufferSource>& bufferSource(
- instance->getGraphicBufferSource());
- if (bufferSource != NULL) {
- bufferSource->codecBufferEmptied(pBuffer);
-
- // This is one of the buffers used exclusively by GraphicBufferSource.
- // Don't dispatch a message back to ACodec, since it doesn't
- // know that anyone asked to have the buffer emptied and will
- // be very confused.
- return OMX_ErrorNone;
- }
return instance->owner()->OnEmptyBufferDone(instance->nodeID(), pBuffer);
}