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

Commit d88c3caf authored by Eric Laurent's avatar Eric Laurent
Browse files

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
parent 701b9647
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+7 −6
Original line number Diff line number Diff line
@@ -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();
    }