diff options
author | Eric Laurent <elaurent@google.com> | 2014-10-28 10:52:11 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2014-10-28 11:46:20 -0700 |
commit | d88c3cafb439367f2a245b625e0a74bcd785f099 (patch) | |
tree | 84f82b2d3b9914d1741aa8199202d1962a82a9ef /media | |
parent | 701b96474dc8afd16046e440975e00be57cc4874 (diff) | |
download | frameworks_av-d88c3cafb439367f2a245b625e0a74bcd785f099.zip frameworks_av-d88c3cafb439367f2a245b625e0a74bcd785f099.tar.gz frameworks_av-d88c3cafb439367f2a245b625e0a74bcd785f099.tar.bz2 |
fix deep buffer logic in NuPlayer.
Deep buffer output should be requested when there is
no video track, not when there is one.
Also make sure that the deep buffer flag is restored after
a failure to offload audio decoding.
Bug: 18114624.
Change-Id: If3c04c784bc20d77926993ee475fbf961aeba7ae
Diffstat (limited to 'media')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 2 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 13 |
2 files changed, 8 insertions, 7 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index a63a940..4a9d790 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -1119,7 +1119,7 @@ void NuPlayer::openAudioSink(const sp<AMessage> &format, bool offloadOnly) { // Current code will just make that we select deep buffer // with video which should not be a problem as it should // not prevent from keeping A/V sync. - if (hasVideo && + if (!hasVideo && mSource->getDuration(&durationUs) == OK && durationUs > AUDIO_SINK_MIN_DEEP_BUFFER_DURATION_US) { diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 86ce385..e0c5e18 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -1374,8 +1374,9 @@ bool NuPlayer::Renderer::onOpenAudioSink( return offloadingAudio(); } ALOGV("openAudioSink: try to open AudioSink in offload mode"); - flags |= AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; - flags &= ~AUDIO_OUTPUT_FLAG_DEEP_BUFFER; + uint32_t offloadFlags = flags; + offloadFlags |= AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; + offloadFlags &= ~AUDIO_OUTPUT_FLAG_DEEP_BUFFER; audioSinkChanged = true; mAudioSink->close(); err = mAudioSink->open( @@ -1386,7 +1387,7 @@ bool NuPlayer::Renderer::onOpenAudioSink( 8 /* bufferCount */, &NuPlayer::Renderer::AudioSinkCallback, this, - (audio_output_flags_t)flags, + (audio_output_flags_t)offloadFlags, &offloadInfo); if (err == OK) { @@ -1410,9 +1411,9 @@ bool NuPlayer::Renderer::onOpenAudioSink( } } if (!offloadOnly && !offloadingAudio()) { - flags &= ~AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; ALOGV("openAudioSink: open AudioSink in NON-offload mode"); - + uint32_t pcmFlags = flags; + pcmFlags &= ~AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; audioSinkChanged = true; mAudioSink->close(); mCurrentOffloadInfo = AUDIO_INFO_INITIALIZER; @@ -1424,7 +1425,7 @@ bool NuPlayer::Renderer::onOpenAudioSink( 8 /* bufferCount */, NULL, NULL, - (audio_output_flags_t)flags), + (audio_output_flags_t)pcmFlags), (status_t)OK); mAudioSink->start(); } |