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

Commit 18899808 authored by Ronghua Wu's avatar Ronghua Wu Committed by Android (Google) Code Review
Browse files

Merge "NuPlayer: open audio sink in offload mode when resuming from timeout...

Merge "NuPlayer: open audio sink in offload mode when resuming from timeout teardown." into lmp-mr1-dev
parents 03181012 a10fd23b
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -606,8 +606,17 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
                instantiateDecoder(false, &mVideoDecoder);
            }

            if (mAudioSink != NULL) {
                if (mOffloadAudio) {
            // Don't try to re-open audio sink if there's an existing decoder.
            if (mAudioSink != NULL && mAudioDecoder == NULL) {
                sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */);
                sp<AMessage> videoFormat = mSource->getFormat(false /* audio */);
                audio_stream_type_t streamType = mAudioSink->getAudioStreamType();
                bool canOffload = canOffloadStream(audioMeta, (videoFormat != NULL),
                         true /* is_streaming */, streamType);
                if (canOffload) {
                    if (!mOffloadAudio) {
                        mRenderer->signalEnableOffloadAudio();
                    }
                    // open audio sink early under offload mode.
                    sp<AMessage> format = mSource->getFormat(true /*audio*/);
                    openAudioSink(format, true /*offloadOnly*/);
@@ -841,7 +850,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
                ALOGV("media rendering started");
                notifyListener(MEDIA_STARTED, 0, 0);
            } else if (what == Renderer::kWhatAudioOffloadTearDown) {
                ALOGV("Tear down audio offload, fall back to s/w path");
                ALOGV("Tear down audio offload, fall back to s/w path if due to error.");
                int64_t positionUs;
                CHECK(msg->findInt64("positionUs", &positionUs));
                int32_t reason;
@@ -853,11 +862,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
                if (mVideoDecoder != NULL) {
                    mRenderer->flush(false /* audio */);
                }
                mRenderer->signalDisableOffloadAudio();
                mOffloadAudio = false;

                performSeek(positionUs, false /* needNotify */);
                if (reason == Renderer::kDueToError) {
                    mRenderer->signalDisableOffloadAudio();
                    mOffloadAudio = false;
                    instantiateDecoder(true /* audio */, &mAudioDecoder);
                }
            }
+19 −0
Original line number Diff line number Diff line
@@ -144,6 +144,10 @@ void NuPlayer::Renderer::signalDisableOffloadAudio() {
    (new AMessage(kWhatDisableOffloadAudio, id()))->post();
}

void NuPlayer::Renderer::signalEnableOffloadAudio() {
    (new AMessage(kWhatEnableOffloadAudio, id()))->post();
}

void NuPlayer::Renderer::pause() {
    (new AMessage(kWhatPause, id()))->post();
}
@@ -407,6 +411,12 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
            break;
        }

        case kWhatEnableOffloadAudio:
        {
            onEnableOffloadAudio();
            break;
        }

        case kWhatPause:
        {
            onPause();
@@ -1133,6 +1143,12 @@ void NuPlayer::Renderer::onDisableOffloadAudio() {
    ++mAudioQueueGeneration;
}

void NuPlayer::Renderer::onEnableOffloadAudio() {
    Mutex::Autolock autoLock(mLock);
    mFlags |= FLAG_OFFLOAD_AUDIO;
    ++mAudioQueueGeneration;
}

void NuPlayer::Renderer::onPause() {
    if (mPaused) {
        ALOGW("Renderer::onPause() called while already paused!");
@@ -1416,6 +1432,9 @@ bool NuPlayer::Renderer::onOpenAudioSink(
    if (audioSinkChanged) {
        onAudioSinkChanged();
    }
    if (offloadingAudio()) {
        mAudioOffloadTornDown = false;
    }

    return offloadingAudio();
}
+3 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ struct NuPlayer::Renderer : public AHandler {
    void signalAudioSinkChanged();

    void signalDisableOffloadAudio();
    void signalEnableOffloadAudio();

    void pause();
    void resume();
@@ -114,6 +115,7 @@ private:
        kWhatCloseAudioSink      = 'clsA',
        kWhatStopAudioSink       = 'stpA',
        kWhatDisableOffloadAudio = 'noOA',
        kWhatEnableOffloadAudio  = 'enOA',
        kWhatSetVideoFrameRate   = 'sVFR',
    };

@@ -200,6 +202,7 @@ private:
    void onFlush(const sp<AMessage> &msg);
    void onAudioSinkChanged();
    void onDisableOffloadAudio();
    void onEnableOffloadAudio();
    void onPause();
    void onResume();
    void onSetVideoFrameRate(float fps);