summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2015-05-06 15:16:28 -0700
committerChong Zhang <chz@google.com>2015-05-06 18:28:40 -0700
commit8a048338d9291b2db1b3a325fff58cb1aa69f04d (patch)
tree02bb0051275a15fb99377bfa9e06b9b3d0071599 /media/libmediaplayerservice
parent32fa6d0e65dbf956e253a1006e9419dce2fe75c9 (diff)
downloadframeworks_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.cpp20
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.h3
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;
}