summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
index 8112e9f..79b7a3c 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
@@ -47,6 +47,7 @@ NuPlayer::DecoderPassThrough::DecoderPassThrough(
mSource(source),
mRenderer(renderer),
mSkipRenderingUntilMediaTimeUs(-1ll),
+ mPaused(false),
mBufferGeneration(0),
mReachedEOS(true),
mPendingAudioErr(OK),
@@ -105,16 +106,16 @@ bool NuPlayer::DecoderPassThrough::isStaleReply(const sp<AMessage> &msg) {
return generation != mBufferGeneration;
}
-bool NuPlayer::DecoderPassThrough::isCacheFullOrEOS() const {
- ALOGV("[%s] mCachedBytes = %zu, mReachedEOS = %d",
- mComponentName.c_str(), mCachedBytes, mReachedEOS);
+bool NuPlayer::DecoderPassThrough::isDoneFetching() const {
+ ALOGV("[%s] mCachedBytes = %zu, mReachedEOS = %d mPaused = %d",
+ mComponentName.c_str(), mCachedBytes, mReachedEOS, mPaused);
- return mCachedBytes >= kMaxCachedBytes || mReachedEOS;
+ return mCachedBytes >= kMaxCachedBytes || mReachedEOS || mPaused;
}
void NuPlayer::DecoderPassThrough::doRequestBuffers() {
status_t err = OK;
- while (!isCacheFullOrEOS()) {
+ while (!isDoneFetching()) {
sp<AMessage> msg = new AMessage();
err = fetchInputData(msg);
@@ -355,6 +356,8 @@ void NuPlayer::DecoderPassThrough::onBufferConsumed(int32_t size) {
}
void NuPlayer::DecoderPassThrough::onResume(bool notifyComplete) {
+ mPaused = false;
+
onRequestInputBuffers();
if (notifyComplete) {
@@ -367,6 +370,9 @@ void NuPlayer::DecoderPassThrough::onResume(bool notifyComplete) {
void NuPlayer::DecoderPassThrough::onFlush(bool notifyComplete) {
++mBufferGeneration;
mSkipRenderingUntilMediaTimeUs = -1;
+ mPendingAudioAccessUnit.clear();
+ mPendingAudioErr = OK;
+ mAggregateBuffer.clear();
if (mRenderer != NULL) {
mRenderer->flush(true /* audio */, notifyComplete);
@@ -374,6 +380,7 @@ void NuPlayer::DecoderPassThrough::onFlush(bool notifyComplete) {
}
if (notifyComplete) {
+ mPaused = true;
sp<AMessage> notify = mNotify->dup();
notify->setInt32("what", kWhatFlushCompleted);
notify->post();