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

Commit 08529172 authored by Ronghua Wu's avatar Ronghua Wu
Browse files

NuPlayer: don't restart AudioSink when torn down due to pause timeout.

Bug: 17752358
Change-Id: I232d105480139bfc0b991bcd8e001930e577cf30
parent c06cf18e
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -941,6 +941,8 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
                ALOGV("Tear down audio offload, fall back to s/w path");
                int64_t positionUs;
                CHECK(msg->findInt64("positionUs", &positionUs));
                int32_t reason;
                CHECK(msg->findInt32("reason", &reason));
                closeAudioSink();
                mAudioDecoder.clear();
                ++mAudioDecoderGeneration;
@@ -952,8 +954,10 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
                mOffloadAudio = false;

                performSeek(positionUs, false /* needNotify */);
                if (reason == Renderer::kDueToError) {
                    instantiateDecoder(true /* audio */, &mAudioDecoder);
                }
            }
            break;
        }

@@ -1019,6 +1023,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
            } else {
                ALOGW("resume called when source is gone or not set");
            }
            // |mAudioDecoder| may have been released due to the pause timeout, so try to re-create
            // it if needed.
            if (mFlushingAudio != SHUT_DOWN) {
                instantiateDecoder(true /* audio */, &mAudioDecoder);
            }
            if (mRenderer != NULL) {
                mRenderer->resume();
            } else {
+5 −3
Original line number Diff line number Diff line
@@ -274,7 +274,7 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {

        case kWhatAudioOffloadTearDown:
        {
            onAudioOffloadTearDown();
            onAudioOffloadTearDown(kDueToError);
            break;
        }

@@ -285,7 +285,8 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
            if (generation != mAudioOffloadPauseTimeoutGeneration) {
                break;
            }
            onAudioOffloadTearDown();
            ALOGV("Audio Offload tear down due to pause timeout.");
            onAudioOffloadTearDown(kDueToTimeout);
            break;
        }

@@ -1089,7 +1090,7 @@ int64_t NuPlayer::Renderer::getPlayedOutAudioDurationUs(int64_t nowUs) {
    return durationUs;
}

void NuPlayer::Renderer::onAudioOffloadTearDown() {
void NuPlayer::Renderer::onAudioOffloadTearDown(AudioOffloadTearDownReason reason) {
    if (mAudioOffloadTornDown) {
        return;
    }
@@ -1110,6 +1111,7 @@ void NuPlayer::Renderer::onAudioOffloadTearDown() {
    sp<AMessage> notify = mNotify->dup();
    notify->setInt32("what", kWhatAudioOffloadTearDown);
    notify->setInt64("positionUs", currentPositionUs);
    notify->setInt32("reason", reason);
    notify->post();
}

+6 −1
Original line number Diff line number Diff line
@@ -69,6 +69,11 @@ struct NuPlayer::Renderer : public AHandler {
        kWhatAudioOffloadPauseTimeout = 'aOPT',
    };

    enum AudioOffloadTearDownReason {
        kDueToError = 0,
        kDueToTimeout,
    };

protected:
    virtual ~Renderer();

@@ -157,7 +162,7 @@ private:
    void onPause();
    void onResume();
    void onSetVideoFrameRate(float fps);
    void onAudioOffloadTearDown();
    void onAudioOffloadTearDown(AudioOffloadTearDownReason reason);

    void notifyEOS(bool audio, status_t finalResult, int64_t delayUs = 0);
    void notifyFlushComplete(bool audio);