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

Commit ffaee8a4 authored by Andreas Huber's avatar Andreas Huber Committed by Android Git Automerger
Browse files

am c4f82e33: Merge "Implement missing pause/resume support for NuPlayer." into honeycomb

* commit 'c4f82e3387429ae94e4874b7dc1649b3c643b505':
  Implement missing pause/resume support for NuPlayer.
parents 1c3913cf b408222b
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -92,11 +92,11 @@ void NuPlayer::start() {
}

void NuPlayer::pause() {
    // XXX to be implemented
    (new AMessage(kWhatPause, id()))->post();
}

void NuPlayer::resume() {
    // XXX to be implemented
    (new AMessage(kWhatResume, id()))->post();
}

void NuPlayer::resetAsync() {
@@ -430,6 +430,20 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
            break;
        }

        case kWhatPause:
        {
            CHECK(mRenderer != NULL);
            mRenderer->pause();
            break;
        }

        case kWhatResume:
        {
            CHECK(mRenderer != NULL);
            mRenderer->resume();
            break;
        }

        default:
            TRESPASS();
            break;
+2 −0
Original line number Diff line number Diff line
@@ -75,6 +75,8 @@ private:
        kWhatRendererNotify,
        kWhatReset,
        kWhatSeek,
        kWhatPause,
        kWhatResume,
    };

    wp<NuPlayerDriver> mDriver;
+58 −3
Original line number Diff line number Diff line
@@ -42,7 +42,8 @@ NuPlayer::Renderer::Renderer(
      mFlushingVideo(false),
      mHasAudio(mAudioSink != NULL),
      mHasVideo(true),
      mSyncQueues(mHasAudio && mHasVideo) {
      mSyncQueues(mHasAudio && mHasVideo),
      mPaused(false) {
}

NuPlayer::Renderer::~Renderer() {
@@ -93,6 +94,14 @@ void NuPlayer::Renderer::signalTimeDiscontinuity() {
    mSyncQueues = mHasAudio && mHasVideo;
}

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

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

void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
    switch (msg->what()) {
        case kWhatDrainAudioQueue:
@@ -151,6 +160,18 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
            break;
        }

        case kWhatPause:
        {
            onPause();
            break;
        }

        case kWhatResume:
        {
            onResume();
            break;
        }

        default:
            TRESPASS();
            break;
@@ -158,7 +179,7 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
}

void NuPlayer::Renderer::postDrainAudioQueue() {
    if (mDrainAudioQueuePending || mSyncQueues) {
    if (mDrainAudioQueuePending || mSyncQueues || mPaused) {
        return;
    }

@@ -254,7 +275,7 @@ void NuPlayer::Renderer::onDrainAudioQueue() {
}

void NuPlayer::Renderer::postDrainVideoQueue() {
    if (mDrainVideoQueuePending || mSyncQueues) {
    if (mDrainVideoQueuePending || mSyncQueues || mPaused) {
        return;
    }

@@ -528,5 +549,39 @@ void NuPlayer::Renderer::notifyPosition() {
    notify->post();
}

void NuPlayer::Renderer::onPause() {
    CHECK(!mPaused);

    mDrainAudioQueuePending = false;
    ++mAudioQueueGeneration;

    mDrainVideoQueuePending = false;
    ++mVideoQueueGeneration;

    if (mHasAudio) {
        mAudioSink->pause();
    }

    mPaused = true;
}

void NuPlayer::Renderer::onResume() {
    CHECK(mPaused);

    if (mHasAudio) {
        mAudioSink->start();
    }

    mPaused = false;

    if (!mAudioQueue.empty()) {
        postDrainAudioQueue();
    }

    if (!mVideoQueue.empty()) {
        postDrainVideoQueue();
    }
}

}  // namespace android
+9 −0
Original line number Diff line number Diff line
@@ -41,6 +41,9 @@ struct NuPlayer::Renderer : public AHandler {

    void signalAudioSinkChanged();

    void pause();
    void resume();

    enum {
        kWhatEOS,
        kWhatFlushComplete,
@@ -60,6 +63,8 @@ private:
        kWhatQueueEOS,
        kWhatFlush,
        kWhatAudioSinkChanged,
        kWhatPause,
        kWhatResume,
    };

    struct QueueEntry {
@@ -91,6 +96,8 @@ private:
    bool mHasVideo;
    bool mSyncQueues;

    bool mPaused;

    void onDrainAudioQueue();
    void postDrainAudioQueue();

@@ -101,6 +108,8 @@ private:
    void onQueueEOS(const sp<AMessage> &msg);
    void onFlush(const sp<AMessage> &msg);
    void onAudioSinkChanged();
    void onPause();
    void onResume();

    void notifyEOS(bool audio);
    void notifyFlushComplete(bool audio);