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

Commit 50d95687 authored by The Android Automerger's avatar The Android Automerger
Browse files

Merge branch 'gingerbread' into gingerbread-release

parents 8a04d469 0bcae473
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -49,11 +49,9 @@ public:

    status_t start(bool sourceAlreadyStarted = false);

    void pause();
    void pause(bool playPendingSamples = false);
    void resume();

    void stop();

    // Returns the timestamp of the last buffer played (in us).
    int64_t getMediaTimeUs();

@@ -107,6 +105,8 @@ private:

    int64_t getRealTimeUsLocked() const;

    void reset();

    AudioPlayer(const AudioPlayer &);
    AudioPlayer &operator=(const AudioPlayer &);
};
+14 −6
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ AudioPlayer::AudioPlayer(

AudioPlayer::~AudioPlayer() {
    if (mStarted) {
        stop();
        reset();
    }
}

@@ -165,14 +165,22 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) {
    return OK;
}

void AudioPlayer::pause() {
void AudioPlayer::pause(bool playPendingSamples) {
    CHECK(mStarted);

    if (playPendingSamples) {
        if (mAudioSink.get() != NULL) {
        mAudioSink->pause();
            mAudioSink->stop();
        } else {
            mAudioTrack->stop();
        }
    } else {
        if (mAudioSink.get() != NULL) {
            mAudioSink->pause();
        } else {
            mAudioTrack->pause();
        }
    }
}

void AudioPlayer::resume() {
@@ -185,7 +193,7 @@ void AudioPlayer::resume() {
    }
}

void AudioPlayer::stop() {
void AudioPlayer::reset() {
    CHECK(mStarted);

    if (mAudioSink.get() != NULL) {
+11 −4
Original line number Diff line number Diff line
@@ -576,7 +576,7 @@ void AwesomePlayer::onStreamDone() {
        notifyListener_l(
                MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, mStreamDoneStatus);

        pause_l();
        pause_l(true /* at eos */);

        mFlags |= AT_EOS;
        return;
@@ -600,7 +600,7 @@ void AwesomePlayer::onStreamDone() {
        LOGV("MEDIA_PLAYBACK_COMPLETE");
        notifyListener_l(MEDIA_PLAYBACK_COMPLETE);

        pause_l();
        pause_l(true /* at eos */);

        mFlags |= AT_EOS;
    }
@@ -738,7 +738,7 @@ status_t AwesomePlayer::pause() {
    return pause_l();
}

status_t AwesomePlayer::pause_l() {
status_t AwesomePlayer::pause_l(bool at_eos) {
    if (!(mFlags & PLAYING)) {
        return OK;
    }
@@ -746,8 +746,15 @@ status_t AwesomePlayer::pause_l() {
    cancelPlayerEvents(true /* keepBufferingGoing */);

    if (mAudioPlayer != NULL) {
        if (at_eos) {
            // If we played the audio stream to completion we
            // want to make sure that all samples remaining in the audio
            // track's queue are played out.
            mAudioPlayer->pause(true /* playPendingSamples */);
        } else {
            mAudioPlayer->pause();
        }
    }

    mFlags &= ~PLAYING;

+1 −1
Original line number Diff line number Diff line
@@ -221,7 +221,7 @@ private:
    status_t setDataSource_l(const sp<MediaExtractor> &extractor);
    void reset_l();
    status_t seekTo_l(int64_t timeUs);
    status_t pause_l();
    status_t pause_l(bool at_eos = false);
    void initRenderer_l();
    void seekAudioIfNecessary_l();

+3 −3
Original line number Diff line number Diff line
@@ -1715,7 +1715,7 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track
        // The first time a track is added we wait
        // for all its buffers to be filled before processing it
        mAudioMixer->setActiveTrack(track->name());
        if (cblk->framesReady() && (track->isReady() || track->isStopped()) &&
        if (cblk->framesReady() && track->isReady() &&
                !track->isPaused() && !track->isTerminated())
        {
            //LOGV("track %d u=%08x, s=%08x [OK] on thread %p", track->name(), cblk->user, cblk->server, this);
@@ -2231,7 +2231,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop()

                // The first time a track is added we wait
                // for all its buffers to be filled before processing it
                if (cblk->framesReady() && (track->isReady() || track->isStopped()) &&
                if (cblk->framesReady() && track->isReady() &&
                        !track->isPaused() && !track->isTerminated())
                {
                    //LOGV("track %d u=%08x, s=%08x [OK]", track->name(), cblk->user, cblk->server);
@@ -3039,7 +3039,7 @@ getNextBuffer_exit:
}

bool AudioFlinger::PlaybackThread::Track::isReady() const {
    if (mFillingUpStatus != FS_FILLING) return true;
    if (mFillingUpStatus != FS_FILLING || isStopped() || isPausing()) return true;

    if (mCblk->framesReady() >= mCblk->frameCount ||
            (mCblk->flags & CBLK_FORCEREADY_MSK)) {