From 924d68600e957681ae7a7af3b19d051aa32500f1 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Fri, 8 Jun 2012 14:30:47 +1200 Subject: [PATCH] Bug 762366 - Refactor omx plugin's ReadVideo method - r=edwin --- media/omx-plugin/OmxPlugin.cpp | 119 +++++++++++++++------------------ 1 file changed, 53 insertions(+), 66 deletions(-) diff --git a/media/omx-plugin/OmxPlugin.cpp b/media/omx-plugin/OmxPlugin.cpp index 3d84829789a..03644181d99 100644 --- a/media/omx-plugin/OmxPlugin.cpp +++ b/media/omx-plugin/OmxPlugin.cpp @@ -488,76 +488,63 @@ bool OmxDecoder::ReadVideo(VideoFrame *aFrame, int64_t aSeekTimeUs) if (!mVideoSource.get()) return false; - for (;;) { - ReleaseVideoBuffer(); + ReleaseVideoBuffer(); - status_t err; + status_t err; - if (aSeekTimeUs != -1) { - MediaSource::ReadOptions options; - options.setSeekTo(aSeekTimeUs); - err = mVideoSource->read(&mVideoBuffer, &options); - } else { - err = mVideoSource->read(&mVideoBuffer); - } - - if (err == OK) { - if (mVideoBuffer->range_length() == 0) // If we get a spurious empty buffer, keep going - continue; - - int64_t timeUs; - int32_t unreadable; - int32_t keyFrame; - - if (!mVideoBuffer->meta_data()->findInt64(kKeyTime, &timeUs) ) { - LOG("no key time"); - return false; - } - - if (!mVideoBuffer->meta_data()->findInt32(kKeyIsSyncFrame, &keyFrame)) { - keyFrame = 0; - } - - if (!mVideoBuffer->meta_data()->findInt32(kKeyIsUnreadable, &unreadable)) { - unreadable = 0; - } - - LOG("data: %p size: %u offset: %u length: %u unreadable: %d", - mVideoBuffer->data(), - mVideoBuffer->size(), - mVideoBuffer->range_offset(), - mVideoBuffer->range_length(), - unreadable); - - char *data = reinterpret_cast(mVideoBuffer->data()) + mVideoBuffer->range_offset(); - size_t length = mVideoBuffer->range_length(); - - if (unreadable) { - LOG("video frame is unreadable"); - } - - if (!ToVideoFrame(aFrame, timeUs, data, length, keyFrame)) { - return false; - } - - return true; - } - - if (err == INFO_FORMAT_CHANGED) { - // If the format changed, update our cached info. - if (!SetVideoFormat()) { - return false; - } - - // Ok, try to read a buffer again. - continue; - } - - /* err == ERROR_END_OF_STREAM */ - break; + if (aSeekTimeUs != -1) { + MediaSource::ReadOptions options; + options.setSeekTo(aSeekTimeUs); + err = mVideoSource->read(&mVideoBuffer, &options); + } else { + err = mVideoSource->read(&mVideoBuffer); } - return false; + if (err == OK && mVideoBuffer->range_length() > 0) { + int64_t timeUs; + int32_t unreadable; + int32_t keyFrame; + + if (!mVideoBuffer->meta_data()->findInt64(kKeyTime, &timeUs) ) { + LOG("no key time"); + return false; + } + + if (!mVideoBuffer->meta_data()->findInt32(kKeyIsSyncFrame, &keyFrame)) { + keyFrame = 0; + } + + if (!mVideoBuffer->meta_data()->findInt32(kKeyIsUnreadable, &unreadable)) { + unreadable = 0; + } + + LOG("data: %p size: %u offset: %u length: %u unreadable: %d", + mVideoBuffer->data(), + mVideoBuffer->size(), + mVideoBuffer->range_offset(), + mVideoBuffer->range_length(), + unreadable); + + char *data = reinterpret_cast(mVideoBuffer->data()) + mVideoBuffer->range_offset(); + size_t length = mVideoBuffer->range_length(); + + if (unreadable) { + LOG("video frame is unreadable"); + } + + if (!ToVideoFrame(aFrame, timeUs, data, length, keyFrame)) { + return false; + } + } + else if (err == INFO_FORMAT_CHANGED) { + // If the format changed, update our cached info. + return SetVideoFormat(); + } + else if (err == ERROR_END_OF_STREAM) { + return false; + } + + return true; } bool OmxDecoder::ReadAudio(AudioFrame *aFrame, int64_t aSeekTimeUs)