summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
diff options
context:
space:
mode:
authorWei Jia <wjia@google.com>2015-06-10 09:37:47 -0700
committerWei Jia <wjia@google.com>2015-06-10 12:02:01 -0700
commit3ab25457385dceb07205fc8ead86d7fb9e307588 (patch)
tree1fc1a7eca36e1c1e2d98f53442bfc8c8c4c0026e /media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
parent356f08476db6191cdcbad20caf69d7bd642a09b2 (diff)
downloadframeworks_av-3ab25457385dceb07205fc8ead86d7fb9e307588.zip
frameworks_av-3ab25457385dceb07205fc8ead86d7fb9e307588.tar.gz
frameworks_av-3ab25457385dceb07205fc8ead86d7fb9e307588.tar.bz2
NuPlayerRenderer: discard pending kWhatDrainAudioQueue message when AudioSink is opened in callback mode.
Bug: 21723010 Change-Id: Iddab8c1cbdf87714aa53315feba064fe101d8f98
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp11
1 files changed, 8 insertions, 3 deletions
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<AMessage> &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.