diff options
author | Andreas Huber <andih@google.com> | 2010-02-03 16:02:02 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-02-03 16:02:02 -0800 |
commit | 7085b684c6e1dcd87686fd32d72498ffabd22677 (patch) | |
tree | 2f12d4c9ea5565a3541d71e72e80130c3f050458 /media/libstagefright/AwesomePlayer.cpp | |
parent | 70d10c0156f5d2d1c639d0ebe62de8ec950d4306 (diff) | |
download | frameworks_base-7085b684c6e1dcd87686fd32d72498ffabd22677.zip frameworks_base-7085b684c6e1dcd87686fd32d72498ffabd22677.tar.gz frameworks_base-7085b684c6e1dcd87686fd32d72498ffabd22677.tar.bz2 |
Defer creating the video renderer until we see the first video frame.
This avoids having to instantiate the renderer twice in case the video decoder sends a format change before the first frame.
related-to-bug: 2375037
Diffstat (limited to 'media/libstagefright/AwesomePlayer.cpp')
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 935b0e1..2b403f8 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -304,7 +304,7 @@ void AwesomePlayer::onBufferingUpdate() { if (mDurationUs >= 0) { int64_t cachedDurationUs = mPrefetcher->getCachedDurationUs(); int64_t positionUs = 0; - if (mVideoRenderer != NULL) { + if (mVideoSource != NULL) { positionUs = mVideoTimeUs; } else if (mAudioPlayer != NULL) { positionUs = mAudioPlayer->getMediaTimeUs(); @@ -328,7 +328,7 @@ void AwesomePlayer::onStreamDone() { if (mFlags & LOOPING) { seekTo_l(0); - if (mVideoRenderer != NULL) { + if (mVideoSource != NULL) { postVideoEvent_l(); } } else { @@ -386,14 +386,8 @@ status_t AwesomePlayer::play() { } if (mVideoSource != NULL) { - if (mVideoRenderer == NULL) { - initRenderer_l(); - } - - if (mVideoRenderer != NULL) { - // Kick off video playback - postVideoEvent_l(); - } + // Kick off video playback + postVideoEvent_l(); } if (deferredAudioSeek) { @@ -514,7 +508,7 @@ status_t AwesomePlayer::getDuration(int64_t *durationUs) { status_t AwesomePlayer::getPosition(int64_t *positionUs) { Mutex::Autolock autoLock(mLock); - if (mVideoRenderer != NULL) { + if (mVideoSource != NULL) { *positionUs = mVideoTimeUs; } else if (mAudioPlayer != NULL) { *positionUs = mAudioPlayer->getMediaTimeUs(); @@ -540,7 +534,7 @@ status_t AwesomePlayer::seekTo_l(int64_t timeUs) { } void AwesomePlayer::seekAudioIfNecessary_l() { - if (mSeeking && mVideoRenderer == NULL && mAudioPlayer != NULL) { + if (mSeeking && mVideoSource == NULL && mAudioPlayer != NULL) { mAudioPlayer->seekTo(mSeekTimeUs); mWatchForAudioSeekComplete = true; @@ -674,7 +668,9 @@ void AwesomePlayer::onEvent(int32_t code) { if (err == INFO_FORMAT_CHANGED) { LOGV("VideoSource signalled format change."); - initRenderer_l(); + if (mVideoRenderer != NULL) { + initRenderer_l(); + } continue; } @@ -751,7 +747,13 @@ void AwesomePlayer::onEvent(int32_t code) { return; } - mVideoRenderer->render(mVideoBuffer); + if (mVideoRenderer == NULL) { + initRenderer_l(); + } + + if (mVideoRenderer != NULL) { + mVideoRenderer->render(mVideoBuffer); + } if (mLastVideoBuffer) { mLastVideoBuffer->release(); |