diff options
author | Chong Zhang <chz@google.com> | 2015-05-06 15:16:28 -0700 |
---|---|---|
committer | Chong Zhang <chz@google.com> | 2015-05-06 18:28:40 -0700 |
commit | 8a048338d9291b2db1b3a325fff58cb1aa69f04d (patch) | |
tree | 02bb0051275a15fb99377bfa9e06b9b3d0071599 /media/libmediaplayerservice | |
parent | 32fa6d0e65dbf956e253a1006e9419dce2fe75c9 (diff) | |
download | frameworks_av-8a048338d9291b2db1b3a325fff58cb1aa69f04d.zip frameworks_av-8a048338d9291b2db1b3a325fff58cb1aa69f04d.tar.gz frameworks_av-8a048338d9291b2db1b3a325fff58cb1aa69f04d.tar.bz2 |
nuplayer: fixes for subtitle pause/resume
- pause after the current block when select track
- ignore metadata timestamps as they're too sparse
- use smaller range when searching for next segment to prevent
resumeUntil from downloading too much data
bug: 20500732
Change-Id: Ibda57a39ec86efd96a8dd0db95adeb92d076697a
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 20 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.h | 3 |
2 files changed, 18 insertions, 5 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 9963353..63b12a9 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -189,7 +189,8 @@ NuPlayer::NuPlayer() mVideoFpsHint(-1.f), mStarted(false), mPaused(false), - mPausedByClient(false) { + mPausedByClient(false), + mPausedForBuffering(false) { clearFlushComplete(); } @@ -671,7 +672,10 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { { ALOGV("kWhatStart"); if (mStarted) { - onResume(); + // do not resume yet if the source is still buffering + if (!mPausedForBuffering) { + onResume(); + } } else { onStart(); } @@ -1977,9 +1981,10 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) { case Source::kWhatPauseOnBufferingStart: { // ignore if not playing - if (mStarted && !mPausedByClient) { + if (mStarted) { ALOGI("buffer low, pausing..."); + mPausedForBuffering = true; onPause(); } // fall-thru @@ -1994,10 +1999,15 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) { case Source::kWhatResumeOnBufferingEnd: { // ignore if not playing - if (mStarted && !mPausedByClient) { + if (mStarted) { ALOGI("buffer ready, resuming..."); - onResume(); + mPausedForBuffering = false; + + // do not resume yet if client didn't unpause + if (!mPausedByClient) { + onResume(); + } } // fall-thru } diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h index fcf6841..cc7e137 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h @@ -202,6 +202,9 @@ private: // still become true, when we pause internally due to buffering. bool mPausedByClient; + // Pause state as requested by source (internally) due to buffering + bool mPausedForBuffering; + inline const sp<DecoderBase> &getDecoder(bool audio) { return audio ? mAudioDecoder : mVideoDecoder; } |