diff options
author | Lajos Molnar <lajos@google.com> | 2013-08-14 18:30:38 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2013-08-15 16:04:58 -0700 |
commit | cbaffcffee6418d678806e63097c19fe26d48fe0 (patch) | |
tree | 21af7d5eab33df7c6487290014f29a83b525734c /media/libstagefright/AwesomePlayer.cpp | |
parent | b8689b31813f55cbc1bf8e9ca0d46a9ee113e38a (diff) | |
download | frameworks_av-cbaffcffee6418d678806e63097c19fe26d48fe0.zip frameworks_av-cbaffcffee6418d678806e63097c19fe26d48fe0.tar.gz frameworks_av-cbaffcffee6418d678806e63097c19fe26d48fe0.tar.bz2 |
Add MEDIA_STARTED/PAUSED/STOPPED events to media players
This is needed for the MediaTimeProvider java interface, so it does not
continually poll for current media time.
Note: NuPlayer and AwesomePlayer do not correctly handle stop (pause
instead), so for those we will signal PAUSED.
Signed-off-by: Lajos Molnar <lajos@google.com>
Change-Id: I3c61e1bda475f131323f475c18a42e3ec66c9ae1
Bug: 10326117
Diffstat (limited to 'media/libstagefright/AwesomePlayer.cpp')
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 79f2c91..52e178e 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -191,6 +191,8 @@ AwesomePlayer::AwesomePlayer() mTimeSource(NULL), mVideoRenderingStarted(false), mVideoRendererIsPreview(false), + mMediaRenderingStartGeneration(0), + mStartGeneration(0), mAudioPlayer(NULL), mDisplayWidth(0), mDisplayHeight(0), @@ -491,6 +493,8 @@ void AwesomePlayer::reset_l() { mDisplayWidth = 0; mDisplayHeight = 0; + notifyListener_l(MEDIA_STOPPED); + if (mDecryptHandle != NULL) { mDrmManagerClient->setPlaybackStatus(mDecryptHandle, Playback::STOP, 0); @@ -1025,6 +1029,13 @@ void AwesomePlayer::createAudioPlayer_l() seekAudioIfNecessary_l(); } +void AwesomePlayer::notifyIfMediaStarted_l() { + if (mMediaRenderingStartGeneration == mStartGeneration) { + mMediaRenderingStartGeneration = -1; + notifyListener_l(MEDIA_STARTED); + } +} + status_t AwesomePlayer::startAudioPlayer_l(bool sendErrorNotification) { CHECK(!(mFlags & AUDIO_RUNNING)); status_t err = OK; @@ -1061,6 +1072,8 @@ status_t AwesomePlayer::startAudioPlayer_l(bool sendErrorNotification) { // We will have finished the seek while starting the audio player. postAudioSeekComplete(); + } else { + notifyIfMediaStarted_l(); } } else { err = mAudioPlayer->resume(); @@ -1201,6 +1214,9 @@ status_t AwesomePlayer::pause_l(bool at_eos) { return OK; } + notifyListener_l(MEDIA_PAUSED); + mMediaRenderingStartGeneration = ++mStartGeneration; + cancelPlayerEvents(true /* keepNotifications */); if (mAudioPlayer != NULL && (mFlags & AUDIO_RUNNING)) { @@ -1389,6 +1405,9 @@ status_t AwesomePlayer::seekTo_l(int64_t timeUs) { mSeekTimeUs = timeUs; modifyFlags((AT_EOS | AUDIO_AT_EOS | VIDEO_AT_EOS), CLEAR); + notifyListener_l(MEDIA_PAUSED); + mMediaRenderingStartGeneration = ++mStartGeneration; + seekAudioIfNecessary_l(); if (mFlags & TEXTPLAYER_INITIALIZED) { @@ -1903,6 +1922,7 @@ void AwesomePlayer::onVideoEvent() { notifyListener_l(MEDIA_INFO, MEDIA_INFO_RENDERING_START); } + notifyIfMediaStarted_l(); } mVideoBuffer->release(); @@ -1998,6 +2018,8 @@ void AwesomePlayer::onCheckAudioStatus() { } mSeeking = NO_SEEK; + + notifyIfMediaStarted_l(); } status_t finalStatus; |