From 3ab25457385dceb07205fc8ead86d7fb9e307588 Mon Sep 17 00:00:00 2001 From: Wei Jia Date: Wed, 10 Jun 2015 09:37:47 -0700 Subject: NuPlayerRenderer: discard pending kWhatDrainAudioQueue message when AudioSink is opened in callback mode. Bug: 21723010 Change-Id: Iddab8c1cbdf87714aa53315feba064fe101d8f98 --- media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp') diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index eb4e67d..fb2e767 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -425,14 +425,14 @@ void NuPlayer::Renderer::onMessageReceived(const sp &msg) { case kWhatDrainAudioQueue: { + mDrainAudioQueuePending = false; + int32_t generation; CHECK(msg->findInt32("drainGeneration", &generation)); if (generation != getDrainGeneration(true /* audio */)) { break; } - mDrainAudioQueuePending = false; - if (onDrainAudioQueue()) { uint32_t numFramesPlayed; CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), @@ -1684,8 +1684,10 @@ status_t NuPlayer::Renderer::onOpenAudioSink( onDisableOffloadAudio(); mCurrentOffloadInfo = AUDIO_INFO_INITIALIZER; ALOGV("openAudioSink: offload failed"); + } else { + mUseAudioCallback = true; // offload mode transfers data through callback + ++mAudioDrainGeneration; // discard pending kWhatDrainAudioQueue message. } - mUseAudioCallback = true; // offload mode transfers data through callback } } if (!offloadOnly && !offloadingAudio()) { @@ -1712,6 +1714,9 @@ status_t NuPlayer::Renderer::onOpenAudioSink( // Note: It is possible to set up the callback, but not use it to send audio data. // This requires a fix in AudioSink to explicitly specify the transfer mode. mUseAudioCallback = getUseAudioCallbackSetting(); + if (mUseAudioCallback) { + ++mAudioDrainGeneration; // discard pending kWhatDrainAudioQueue message. + } // Compute the desired buffer size. // For callback mode, the amount of time before wakeup is about half the buffer size. -- cgit v1.1