NuPlayerRenderer: stop feeding AudioSink when paused.
NuPlayerDriver: current position is updated only in running state.
Bug: 17141882
Change-Id: Ia88551cc29ef8f0e7ef0600a214feb5633389b6e
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index c4bbcdf..2423f5f 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -560,8 +560,10 @@
void NuPlayerDriver::notifyPosition(int64_t positionUs) {
Mutex::Autolock autoLock(mLock);
- mPositionUs = positionUs;
- mNotifyTimeRealUs = ALooper::GetNowUs();
+ if (isPlaying()) {
+ mPositionUs = positionUs;
+ mNotifyTimeRealUs = ALooper::GetNowUs();
+ }
}
void NuPlayerDriver::notifySeekComplete() {
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index bf6b3df..49941f8 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -315,7 +315,7 @@
size_t NuPlayer::Renderer::fillAudioBuffer(void *buffer, size_t size) {
Mutex::Autolock autoLock(mLock);
- if (!offloadingAudio()) {
+ if (!offloadingAudio() || mPaused) {
return 0;
}
@@ -887,6 +887,7 @@
++mAudioQueueGeneration;
++mVideoQueueGeneration;
prepareForMediaRenderingStart();
+ mPaused = true;
}
mDrainAudioQueuePending = false;
@@ -898,8 +899,6 @@
ALOGV("now paused audio queue has %d entries, video has %d entries",
mAudioQueue.size(), mVideoQueue.size());
-
- mPaused = true;
}
void NuPlayer::Renderer::onResume() {
@@ -911,9 +910,9 @@
mAudioSink->start();
}
+ Mutex::Autolock autoLock(mLock);
mPaused = false;
- Mutex::Autolock autoLock(mLock);
if (!mAudioQueue.empty()) {
postDrainAudioQueue_l();
}