NuPlayer: do not send BUFFERING_START to client when paused by client.
Bug: 25727912
Change-Id: I5f82090352a3d6806f1f8fafbdb2a3bf0be48be7
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 5c13633..765ceff 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -191,7 +191,8 @@
mResetting(false),
mSourceStarted(false),
mPaused(false),
- mPausedByClient(false),
+ mPausedByClient(true),
+ mPendingBufferingFlag(PENDING_BUFFERING_FLAG_NONE),
mPausedForBuffering(false) {
clearFlushComplete();
}
@@ -715,6 +716,10 @@
onStart();
}
mPausedByClient = false;
+ if (mPendingBufferingFlag != PENDING_BUFFERING_FLAG_NONE) {
+ notifyListener(MEDIA_INFO, mPendingBufferingFlag, 0);
+ mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
+ }
break;
}
@@ -2147,7 +2152,12 @@
case Source::kWhatBufferingStart:
{
- notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_START, 0);
+ if (mPausedByClient) {
+ mPendingBufferingFlag = PENDING_BUFFERING_FLAG_START;
+ } else {
+ notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_START, 0);
+ mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
+ }
break;
}
@@ -2169,7 +2179,12 @@
case Source::kWhatBufferingEnd:
{
- notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_END, 0);
+ if (mPausedByClient) {
+ mPendingBufferingFlag = PENDING_BUFFERING_FLAG_END;
+ } else {
+ notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_END, 0);
+ mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
+ }
break;
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h
index 4cec1a1..cefbb19 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h
@@ -182,6 +182,12 @@
FLUSH_CMD_SHUTDOWN,
};
+ enum PendingBufferingFlag {
+ PENDING_BUFFERING_FLAG_NONE = MEDIA_INFO_UNKNOWN,
+ PENDING_BUFFERING_FLAG_START = MEDIA_INFO_BUFFERING_START,
+ PENDING_BUFFERING_FLAG_END = MEDIA_INFO_BUFFERING_END,
+ };
+
// Status of flush responses from the decoder and renderer.
bool mFlushComplete[2][2];
@@ -208,6 +214,9 @@
// still become true, when we pause internally due to buffering.
bool mPausedByClient;
+ // Pending buffering flag which is not sent to client due to being paused.
+ PendingBufferingFlag mPendingBufferingFlag;
+
// Pause state as requested by source (internally) due to buffering
bool mPausedForBuffering;