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

Commit 64389ec2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer2: fix setPlaybackParams"

parents 9e99a1bf 700a7c2b
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -34,8 +34,7 @@ enum media2_event_type {
    MEDIA2_SET_VIDEO_SIZE    = 5,
    MEDIA2_STARTED           = 6,
    MEDIA2_PAUSED            = 7,
    MEDIA2_STOPPED           = 8,
    MEDIA2_SKIPPED           = 9,
    MEDIA2_SKIPPED           = 8,
    MEDIA2_NOTIFY_TIME       = 98,
    MEDIA2_TIMED_TEXT        = 99,
    MEDIA2_ERROR             = 100,
+7 −32
Original line number Diff line number Diff line
@@ -487,7 +487,7 @@ void NuPlayer2::start() {
status_t NuPlayer2::setPlaybackSettings(const AudioPlaybackRate &rate) {
    // do some cursory validation of the settings here. audio modes are
    // only validated when set on the audiosink.
     if ((rate.mSpeed != 0.f && rate.mSpeed < AUDIO_TIMESTRETCH_SPEED_MIN)
     if (rate.mSpeed < AUDIO_TIMESTRETCH_SPEED_MIN
            || rate.mSpeed > AUDIO_TIMESTRETCH_SPEED_MAX
            || rate.mPitch < AUDIO_TIMESTRETCH_SPEED_MIN
            || rate.mPitch > AUDIO_TIMESTRETCH_SPEED_MAX) {
@@ -986,8 +986,7 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {
            if (mRenderer != NULL) {
                // AudioSink allows only 1.f and 0.f for offload mode.
                // For other speed, switch to non-offload mode.
                if (mOffloadAudio && ((rate.mSpeed != 0.f && rate.mSpeed != 1.f)
                        || rate.mPitch != 1.f)) {
                if (mOffloadAudio && (rate.mSpeed != 1.f || rate.mPitch != 1.f)) {
                    int64_t currentPositionUs;
                    if (getCurrentPosition(&currentPositionUs) != OK) {
                        currentPositionUs = mPreviousSeekTimeUs;
@@ -1010,35 +1009,14 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {
                err = mRenderer->setPlaybackSettings(rate);
            }
            if (err == OK) {
                if (rate.mSpeed == 0.f) {
                    onPause();
                    notifyListener(mSrcId, MEDIA2_PAUSED, 0, 0);
                    mPausedByClient = true;
                    // save all other settings (using non-paused speed)
                    // so we can restore them on start
                    AudioPlaybackRate newRate = rate;
                    newRate.mSpeed = mPlaybackSettings.mSpeed;
                    mPlaybackSettings = newRate;
                } else { /* rate.mSpeed != 0.f */
                mPlaybackSettings = rate;
                    if (mStarted) {
                        // do not resume yet if the source is still buffering
                        if (!mPausedForBuffering) {
                            onResume();
                        }
                    } else if (mPrepared) {
                        onStart();
                    }

                    mPausedByClient = false;
                }
            }

                if (mVideoDecoder != NULL) {
                    sp<AMessage> params = new AMessage();
                    params->setFloat("playback-speed", mPlaybackSettings.mSpeed);
                    mVideoDecoder->setParameters(params);
                }
            }

            sp<AMessage> response = new AMessage;
            response->setInt32("err", err);
@@ -1059,9 +1037,6 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {
                // get playback settings used by renderer, as it may be
                // slightly off due to audiosink not taking small changes.
                mPlaybackSettings = rate;
                if (mPaused) {
                    rate.mSpeed = 0.f;
                }
            }
            sp<AMessage> response = new AMessage;
            if (err == OK) {
+0 −8
Original line number Diff line number Diff line
@@ -352,14 +352,6 @@ status_t NuPlayer2Driver::setPlaybackSettings(const AudioPlaybackRate &rate) {
        // try to update position
        int64_t unused;
        getCurrentPosition(&unused);
        Mutex::Autolock autoLock(mLock);
        if (rate.mSpeed == 0.f && mState == STATE_RUNNING) {
            mState = STATE_PAUSED;
        } else if (rate.mSpeed != 0.f
                && (mState == STATE_PAUSED
                    || mState == STATE_PREPARED)) {
            err = start_l();
        }
    }
    return err;
}
+9 −19
Original line number Diff line number Diff line
@@ -133,8 +133,7 @@ NuPlayer2::Renderer::Renderer(
      mUseAudioCallback(false),
      mWakeLock(new JWakeLock()) {
    CHECK(mediaClock != NULL);
    mPlaybackRate = mPlaybackSettings.mSpeed;
    mMediaClock->setPlaybackRate(mPlaybackRate);
    mMediaClock->setPlaybackRate(mPlaybackSettings.mSpeed);
}

NuPlayer2::Renderer::~Renderer() {
@@ -190,26 +189,20 @@ status_t NuPlayer2::Renderer::setPlaybackSettings(const AudioPlaybackRate &rate)
}

status_t NuPlayer2::Renderer::onConfigPlayback(const AudioPlaybackRate &rate /* sanitized */) {
    if (rate.mSpeed == 0.f) {
        onPause();
        // don't call audiosink's setPlaybackRate if pausing, as pitch does not
        // have to correspond to the any non-0 speed (e.g old speed). Keep
        // settings nonetheless, using the old speed, in case audiosink changes.
        AudioPlaybackRate newRate = rate;
        newRate.mSpeed = mPlaybackSettings.mSpeed;
        mPlaybackSettings = newRate;
        return OK;
    if (rate.mSpeed <= 0.f) {
        ALOGW("playback rate cannot be %f", rate.mSpeed);
        return BAD_VALUE;
    }

    if (mAudioSink != NULL && mAudioSink->ready()) {
        status_t err = mAudioSink->setPlaybackRate(rate);
        if (err != OK) {
            ALOGW("failed to get playback rate from audio sink, err(%d)", err);
            return err;
        }
    }
    mPlaybackSettings = rate;
    mPlaybackRate = rate.mSpeed;
    mMediaClock->setPlaybackRate(mPlaybackRate);
    mMediaClock->setPlaybackRate(mPlaybackSettings.mSpeed);
    return OK;
}

@@ -236,9 +229,6 @@ status_t NuPlayer2::Renderer::onGetPlaybackSettings(AudioPlaybackRate *rate /* n
            // get playback settings used by audiosink, as it may be
            // slightly off due to audiosink not taking small changes.
            mPlaybackSettings = *rate;
            if (mPaused) {
                rate->mSpeed = 0.f;
            }
        }
        return err;
    }
@@ -560,8 +550,8 @@ void NuPlayer2::Renderer::onMessageReceived(const sp<AMessage> &msg) {
                int64_t delayUs =
                    mAudioSink->msecsPerFrame()
                        * numFramesPendingPlayout * 1000ll;
                if (mPlaybackRate > 1.0f) {
                    delayUs /= mPlaybackRate;
                if (mPlaybackSettings.mSpeed > 1.0f) {
                    delayUs /= mPlaybackSettings.mSpeed;
                }

                // Let's give it more data after about half that time
@@ -1773,7 +1763,7 @@ void NuPlayer2::Renderer::onResume() {
            mAudioSink->setPlaybackRate(mPlaybackSettings);
        }

        mMediaClock->setPlaybackRate(mPlaybackRate);
        mMediaClock->setPlaybackRate(mPlaybackSettings.mSpeed);

        if (!mAudioQueue.empty()) {
            postDrainAudioQueue_l();
+0 −1
Original line number Diff line number Diff line
@@ -167,7 +167,6 @@ private:
    int32_t mAudioEOSGeneration;

    const sp<MediaClock> mMediaClock;
    float mPlaybackRate; // audio track rate

    AudioPlaybackRate mPlaybackSettings;
    AVSyncSettings mSyncSettings;