From 26a48f304a8754d655e554178ffb6d7ba4c5aac3 Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Thu, 4 Jun 2015 10:30:02 -0700 Subject: stagefright: add support for batching OMX events Bug: 20503131 Change-Id: I762c419ed1245f8b83fb1f6bf61e5557213ca07b --- media/libstagefright/omx/OMXNodeInstance.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'media/libstagefright/omx/OMXNodeInstance.cpp') diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index 9e399f9..7e92da8 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp @@ -1357,7 +1357,7 @@ status_t OMXNodeInstance::setInternalOption( } } -void OMXNodeInstance::onMessage(const omx_message &msg) { +bool OMXNodeInstance::handleMessage(omx_message &msg) { const sp& bufferSource(getGraphicBufferSource()); if (msg.type == omx_message::FILL_BUFFER_DONE) { @@ -1384,10 +1384,7 @@ void OMXNodeInstance::onMessage(const omx_message &msg) { // fix up the buffer info (especially timestamp) if needed bufferSource->codecBufferFilled(buffer); - omx_message newMsg = msg; - newMsg.u.extended_buffer_data.timestamp = buffer->nTimeStamp; - mObserver->onMessage(newMsg); - return; + msg.u.extended_buffer_data.timestamp = buffer->nTimeStamp; } } else if (msg.type == omx_message::EMPTY_BUFFER_DONE) { OMX_BUFFERHEADERTYPE *buffer = @@ -1408,11 +1405,23 @@ void OMXNodeInstance::onMessage(const omx_message &msg) { // know that anyone asked to have the buffer emptied and will // be very confused. bufferSource->codecBufferEmptied(buffer, msg.fenceFd); - return; + return true; + } + } + + return false; +} + +void OMXNodeInstance::onMessages(std::list &messages) { + for (std::list::iterator it = messages.begin(); it != messages.end(); ) { + if (handleMessage(*it)) { + messages.erase(it++); + } else { + ++it; } } - mObserver->onMessage(msg); + mObserver->onMessages(messages); } void OMXNodeInstance::onObserverDied(OMXMaster *master) { -- cgit v1.1