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

Commit fbd2e643 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Android (Google) Code Review
Browse files

Merge "Playback rate on MediaPlayer"

parents a17032ee e901a5c2
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -96,6 +96,8 @@ public:
        virtual void        flush() = 0;
        virtual void        pause() = 0;
        virtual void        close() = 0;

        virtual status_t    setPlaybackRatePermille(int32_t rate) { return INVALID_OPERATION; }
    };

                        MediaPlayerBase() : mCookie(0), mNotify(0) {}
+3 −0
Original line number Diff line number Diff line
@@ -145,6 +145,9 @@ enum media_parameter_keys {
    // audio track, or zero for error (e.g. no audio track) or unknown.
    KEY_PARAMETER_AUDIO_CHANNEL_COUNT = 1200,                   // get only

    // Playback rate expressed in permille (1000 is normal speed), saved as int32_t, with negative
    // values used for rewinding or reverse playback.
    KEY_PARAMETER_PLAYBACK_RATE_PERMILLE = 1300,                // set only
};

// ----------------------------------------------------------------------------
+2 −0
Original line number Diff line number Diff line
@@ -64,6 +64,8 @@ public:
    bool isSeeking();
    bool reachedEOS(status_t *finalStatus);

    status_t setPlaybackRatePermille(int32_t ratePermille);

private:
    friend class VideoEditorAudioPlayer;
    sp<MediaSource> mSource;
+24 −1
Original line number Diff line number Diff line
@@ -1265,6 +1265,8 @@ MediaPlayerService::AudioOutput::AudioOutput(int sessionId)
    mStreamType = AUDIO_STREAM_MUSIC;
    mLeftVolume = 1.0;
    mRightVolume = 1.0;
    mPlaybackRatePermille = 1000;
    mSampleRateHz = 0;
    mLatency = 0;
    mMsecsPerFrame = 0;
    mAuxEffectId = 0;
@@ -1402,10 +1404,15 @@ status_t MediaPlayerService::AudioOutput::open(
    ALOGV("setVolume");
    t->setVolume(mLeftVolume, mRightVolume);

    mMsecsPerFrame = 1.e3 / (float) sampleRate;
    mSampleRateHz = sampleRate;
    mMsecsPerFrame = mPlaybackRatePermille / (float) sampleRate;
    mLatency = t->latency();
    mTrack = t;

    status_t res = t->setSampleRate(mPlaybackRatePermille * mSampleRateHz / 1000);
    if (res != NO_ERROR) {
        return res;
    }
    t->setAuxEffectSendLevel(mSendLevel);
    return t->attachAuxEffect(mAuxEffectId);;
}
@@ -1469,6 +1476,22 @@ void MediaPlayerService::AudioOutput::setVolume(float left, float right)
    }
}

status_t MediaPlayerService::AudioOutput::setPlaybackRatePermille(int32_t ratePermille)
{
    ALOGV("setPlaybackRatePermille(%d)", ratePermille);
    status_t res = NO_ERROR;
    if (mTrack) {
        res = mTrack->setSampleRate(ratePermille * mSampleRateHz / 1000);
    } else {
        res = NO_INIT;
    }
    mPlaybackRatePermille = ratePermille;
    if (mSampleRateHz != 0) {
        mMsecsPerFrame = mPlaybackRatePermille / (float) mSampleRateHz;
    }
    return res;
}

status_t MediaPlayerService::AudioOutput::setAuxEffectSendLevel(float level)
{
    ALOGV("setAuxEffectSendLevel(%f)", level);
+4 −0
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ class MediaPlayerService : public BnMediaPlayerService
        virtual void            close();
                void            setAudioStreamType(audio_stream_type_t streamType) { mStreamType = streamType; }
                void            setVolume(float left, float right);
        virtual status_t        setPlaybackRatePermille(int32_t ratePermille);
                status_t        setAuxEffectSendLevel(float level);
                status_t        attachAuxEffect(int effectId);
        virtual status_t        dump(int fd, const Vector<String16>& args) const;
@@ -112,6 +113,8 @@ class MediaPlayerService : public BnMediaPlayerService
        audio_stream_type_t     mStreamType;
        float                   mLeftVolume;
        float                   mRightVolume;
        int32_t                 mPlaybackRatePermille;
        uint32_t                mSampleRateHz; // sample rate of the content, as set in open()
        float                   mMsecsPerFrame;
        uint32_t                mLatency;
        int                     mSessionId;
@@ -152,6 +155,7 @@ class MediaPlayerService : public BnMediaPlayerService
        virtual void            close() {}
                void            setAudioStreamType(audio_stream_type_t streamType) {}
                void            setVolume(float left, float right) {}
        virtual status_t        setPlaybackRatePermille(int32_t ratePermille) { return INVALID_OPERATION; }
                uint32_t        sampleRate() const { return mSampleRate; }
                audio_format_t  format() const { return mFormat; }
                size_t          size() const { return mSize; }
Loading