summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2009-10-21 14:01:30 -0700
committerAndreas Huber <andih@google.com>2009-10-21 14:01:30 -0700
commitc6323f9d72e0f08dd1e813550a56c8d2f0fd76a2 (patch)
treee655f9a2780ffab04697fb98b3d4d1fbb2477896 /media/libmediaplayerservice
parent12658b720b176b7d934444256d07ba3c595d9b44 (diff)
downloadframeworks_av-c6323f9d72e0f08dd1e813550a56c8d2f0fd76a2.zip
frameworks_av-c6323f9d72e0f08dd1e813550a56c8d2f0fd76a2.tar.gz
frameworks_av-c6323f9d72e0f08dd1e813550a56c8d2f0fd76a2.tar.bz2
Some cleanup of OMXCodec code, make sure to ignore 0-length output buffers in the metadata retriever.
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/StagefrightMetadataRetriever.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp b/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp
index 0e92162..c069128 100644
--- a/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp
+++ b/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp
@@ -129,11 +129,19 @@ VideoFrame *StagefrightMetadataRetriever::captureFrame() {
decoder->start();
- MediaBuffer *buffer;
+ // Read one output buffer, ignore format change notifications
+ // and spurious empty buffers.
+
+ MediaBuffer *buffer = NULL;
status_t err;
do {
+ if (buffer != NULL) {
+ buffer->release();
+ buffer = NULL;
+ }
err = decoder->read(&buffer);
- } while (err == INFO_FORMAT_CHANGED);
+ } while (err == INFO_FORMAT_CHANGED
+ || (buffer != NULL && buffer->range_length() == 0));
if (err != OK) {
CHECK_EQ(buffer, NULL);