Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ab25457 authored by Wei Jia's avatar Wei Jia
Browse files

NuPlayerRenderer: discard pending kWhatDrainAudioQueue message when AudioSink...

NuPlayerRenderer: discard pending kWhatDrainAudioQueue message when AudioSink is opened in callback mode.

Bug: 21723010
Change-Id: Iddab8c1cbdf87714aa53315feba064fe101d8f98
parent 356f0847
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -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.
            }
        }
    }
    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.