diff options
author | Ronghua Wu <ronghuawu@google.com> | 2015-05-22 18:41:38 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-22 18:41:38 +0000 |
commit | 0a7989f5691f161fff97dd550eb602e44a6e6185 (patch) | |
tree | 79fd65829976dd4efa997ca8e65aa7cc3c2fb968 /media/libmediaplayerservice/nuplayer/NuPlayer.cpp | |
parent | c5648e09bdacc0882aa55525cc1aad6d09794e11 (diff) | |
parent | faeb0f291330134dc4468359a36e099aae508449 (diff) | |
download | frameworks_av-0a7989f5691f161fff97dd550eb602e44a6e6185.zip frameworks_av-0a7989f5691f161fff97dd550eb602e44a6e6185.tar.gz frameworks_av-0a7989f5691f161fff97dd550eb602e44a6e6185.tar.bz2 |
Merge "libmediaplayerservice: try to open audio sink in offload mode in error." into mnc-dev
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayer.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index c8f289c..a79858c 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -1083,12 +1083,12 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } else if (what == Renderer::kWhatMediaRenderingStart) { 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 if due to error."); + } else if (what == Renderer::kWhatAudioTearDown) { int64_t positionUs; CHECK(msg->findInt64("positionUs", &positionUs)); int32_t reason; CHECK(msg->findInt32("reason", &reason)); + ALOGV("Tear down audio with reason %d.", reason); closeAudioSink(); mAudioDecoder.clear(); ++mAudioDecoderGeneration; @@ -1100,9 +1100,22 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } performSeek(positionUs); + if (reason == Renderer::kDueToError) { - mRenderer->signalDisableOffloadAudio(); - mOffloadAudio = false; + sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */); + sp<AMessage> videoFormat = mSource->getFormat(false /* audio */); + audio_stream_type_t streamType = mAudioSink->getAudioStreamType(); + const bool hasVideo = (videoFormat != NULL); + const bool canOffload = canOffloadStream( + audioMeta, hasVideo, true /* is_streaming */, streamType); + if (canOffload) { + mRenderer->signalEnableOffloadAudio(); + sp<AMessage> format = mSource->getFormat(true /*audio*/); + tryOpenAudioSinkForOffload(format, hasVideo); + } else { + mRenderer->signalDisableOffloadAudio(); + mOffloadAudio = false; + } instantiateDecoder(true /* audio */, &mAudioDecoder); } } |