summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorRonghua Wu <ronghuawu@google.com>2015-09-02 10:15:30 -0700
committerRonghua Wu <ronghuawu@google.com>2015-09-02 11:01:56 -0700
commit7665f5886093e1aee07a5266b8c384e5d1186f34 (patch)
treea21f3b139d6a802e6ad660d07994e5a97c84c364 /media/libmediaplayerservice
parent5dc3d9928f85580a2351925b5f11ff0189524c39 (diff)
downloadframeworks_av-7665f5886093e1aee07a5266b8c384e5d1186f34.zip
frameworks_av-7665f5886093e1aee07a5266b8c384e5d1186f34.tar.gz
frameworks_av-7665f5886093e1aee07a5266b8c384e5d1186f34.tar.bz2
nuplayer: let non-offload AudioSink to handle the reconnect when there's video.
Bug: 23707144 Change-Id: Ie0e2db8dc91a78f82fb935d165aa11abe73697a3
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 04a46f4..4de08ff 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -877,6 +877,8 @@ bool NuPlayer::Renderer::onDrainAudioQueue() {
ALOGV("AudioSink write would block when writing %zu bytes", copy);
} else {
ALOGE("AudioSink write error(%zd) when writing %zu bytes", written, copy);
+ // This can only happen when AudioSink was opened with doNotReconnect flag set to
+ // true, in which case the NuPlayer will handle the reconnect.
notifyAudioTearDown();
}
break;
@@ -1764,6 +1766,12 @@ status_t NuPlayer::Renderer::onOpenAudioSink(
const uint32_t frameCount =
(unsigned long long)sampleRate * getAudioSinkPcmMsSetting() / 1000;
+ // The doNotReconnect means AudioSink will signal back and let NuPlayer to re-construct
+ // AudioSink. We don't want this when there's video because it will cause a video seek to
+ // the previous I frame. But we do want this when there's only audio because it will give
+ // NuPlayer a chance to switch from non-offload mode to offload mode.
+ // So we only set doNotReconnect when there's no video.
+ const bool doNotReconnect = !hasVideo;
status_t err = mAudioSink->open(
sampleRate,
numChannels,
@@ -1774,7 +1782,7 @@ status_t NuPlayer::Renderer::onOpenAudioSink(
mUseAudioCallback ? this : NULL,
(audio_output_flags_t)pcmFlags,
NULL,
- true /* doNotReconnect */,
+ doNotReconnect,
frameCount);
if (err == OK) {
err = mAudioSink->setPlaybackRate(mPlaybackSettings);