diff options
author | Ronghua Wu <ronghuawu@google.com> | 2014-11-19 19:55:19 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-11-19 19:55:19 +0000 |
commit | 18899808001ddaea13fa4c5277502c96351f69a5 (patch) | |
tree | 328090b2f4f2a159d8c0015fc99808ef79d15afb /media/libmediaplayerservice/nuplayer/NuPlayer.cpp | |
parent | 03181012beab17e145ca8b9bedbcc08d117df1cb (diff) | |
parent | a10fd23bb9fcf16e778c639ea5638e2917dacd89 (diff) | |
download | frameworks_av-18899808001ddaea13fa4c5277502c96351f69a5.zip frameworks_av-18899808001ddaea13fa4c5277502c96351f69a5.tar.gz frameworks_av-18899808001ddaea13fa4c5277502c96351f69a5.tar.bz2 |
Merge "NuPlayer: open audio sink in offload mode when resuming from timeout teardown." into lmp-mr1-dev
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayer.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 5800757..59b070c 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -606,8 +606,17 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { instantiateDecoder(false, &mVideoDecoder); } - if (mAudioSink != NULL) { - if (mOffloadAudio) { + // Don't try to re-open audio sink if there's an existing decoder. + if (mAudioSink != NULL && mAudioDecoder == NULL) { + sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */); + sp<AMessage> videoFormat = mSource->getFormat(false /* audio */); + audio_stream_type_t streamType = mAudioSink->getAudioStreamType(); + bool canOffload = canOffloadStream(audioMeta, (videoFormat != NULL), + true /* is_streaming */, streamType); + if (canOffload) { + if (!mOffloadAudio) { + mRenderer->signalEnableOffloadAudio(); + } // open audio sink early under offload mode. sp<AMessage> format = mSource->getFormat(true /*audio*/); openAudioSink(format, true /*offloadOnly*/); @@ -841,7 +850,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { ALOGV("media rendering started"); notifyListener(MEDIA_STARTED, 0, 0); } else if (what == Renderer::kWhatAudioOffloadTearDown) { - ALOGV("Tear down audio offload, fall back to s/w path"); + ALOGV("Tear down audio offload, fall back to s/w path if due to error."); int64_t positionUs; CHECK(msg->findInt64("positionUs", &positionUs)); int32_t reason; @@ -853,11 +862,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { if (mVideoDecoder != NULL) { mRenderer->flush(false /* audio */); } - mRenderer->signalDisableOffloadAudio(); - mOffloadAudio = false; performSeek(positionUs, false /* needNotify */); if (reason == Renderer::kDueToError) { + mRenderer->signalDisableOffloadAudio(); + mOffloadAudio = false; instantiateDecoder(true /* audio */, &mAudioDecoder); } } |