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

Commit 85e48142 authored by Andy Hung's avatar Andy Hung
Browse files

NuPlayer: Allow audio callback to fill buffer when paused

If a pause lasts more than a few seconds, the audio device
enters standby.  When the audio device comes out of standby,
it typically requests a large amount of data to fill its buffers
(especially severe for deep buffer PCM mode).

To avoid a glitch, continue to service the audio callback
when paused.

Also, we do not start the audio sink if we are paused to avoid
audio playback in video preview mode.

Bug: 19062223
Bug: 21198655
Change-Id: I987337a87e6c875aeb381df8ad37c7139c42dc72
parent 288da02b
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -692,7 +692,7 @@ size_t NuPlayer::Renderer::AudioSinkCallback(
size_t NuPlayer::Renderer::fillAudioBuffer(void *buffer, size_t size) {
    Mutex::Autolock autoLock(mLock);

    if (!mUseAudioCallback || mPaused) {
    if (!mUseAudioCallback) {
        return 0;
    }

@@ -1291,7 +1291,9 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) {
        if (offloadingAudio()) {
            mAudioSink->pause();
            mAudioSink->flush();
            if (!mPaused) {
                mAudioSink->start();
            }
        } else {
            mAudioSink->pause();
            mAudioSink->flush();
@@ -1665,7 +1667,9 @@ status_t NuPlayer::Renderer::onOpenAudioSink(
                // before reaching the hardware.
                // TODO
                mCurrentOffloadInfo = offloadInfo;
                if (!mPaused) { // for preview mode, don't start if paused
                    err = mAudioSink->start();
                }
                ALOGV_IF(err == OK, "openAudioSink: offload succeeded");
            }
            if (err != OK) {