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

Commit 674649bc authored by Wei Jia's avatar Wei Jia Committed by android-build-merger
Browse files

Merge "NuPlayerDecoder: add synchronous call pause() to ensure decoder will...

Merge "NuPlayerDecoder: add synchronous call pause() to ensure decoder will not request or send out data."
am: f5ac18d2

* commit 'f5ac18d2':
  NuPlayerDecoder: add synchronous call pause() to ensure decoder will not request or send out data.
parents 310706d1 f5ac18d2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1099,6 +1099,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
                int32_t reason;
                CHECK(msg->findInt32("reason", &reason));
                ALOGV("Tear down audio with reason %d.", reason);
                mAudioDecoder->pause();
                mAudioDecoder.clear();
                ++mAudioDecoderGeneration;
                bool needsToCreateAudioDecoder = true;
+0 −1
Original line number Diff line number Diff line
@@ -69,7 +69,6 @@ NuPlayer::Decoder::Decoder(
      mIsSecure(false),
      mFormatChangePending(false),
      mTimeChangePending(false),
      mPaused(true),
      mResumePending(false),
      mComponentName("decoder") {
    mCodecLooper = new ALooper;
+0 −1
Original line number Diff line number Diff line
@@ -91,7 +91,6 @@ private:
    bool mFormatChangePending;
    bool mTimeChangePending;

    bool mPaused;
    bool mResumePending;
    AString mComponentName;

+19 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ namespace android {
NuPlayer::DecoderBase::DecoderBase(const sp<AMessage> &notify)
    :  mNotify(notify),
       mBufferGeneration(0),
       mPaused(false),
       mStats(new AMessage),
       mRequestInputBuffersPending(false) {
    // Every decoder has its own looper because MediaCodec operations
@@ -83,6 +84,13 @@ void NuPlayer::DecoderBase::setRenderer(const sp<Renderer> &renderer) {
    msg->post();
}

void NuPlayer::DecoderBase::pause() {
    sp<AMessage> msg = new AMessage(kWhatPause, this);

    sp<AMessage> response;
    PostAndAwaitResponse(msg, &response);
}

status_t NuPlayer::DecoderBase::getInputBuffers(Vector<sp<ABuffer> > *buffers) const {
    sp<AMessage> msg = new AMessage(kWhatGetInputBuffers, this);
    msg->setPointer("buffers", buffers);
@@ -146,6 +154,17 @@ void NuPlayer::DecoderBase::onMessageReceived(const sp<AMessage> &msg) {
            break;
        }

        case kWhatPause:
        {
            sp<AReplyToken> replyID;
            CHECK(msg->senderAwaitsResponse(&replyID));

            mPaused = true;

            (new AMessage)->postReply(replyID);
            break;
        }

        case kWhatGetInputBuffers:
        {
            sp<AReplyToken> replyID;
+5 −0
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@ struct NuPlayer::DecoderBase : public AHandler {
    void init();
    void setParameters(const sp<AMessage> &params);

    // Synchronous call to ensure decoder will not request or send out data.
    void pause();

    void setRenderer(const sp<Renderer> &renderer);
    virtual status_t setVideoSurface(const sp<Surface> &) { return INVALID_OPERATION; }

@@ -78,6 +81,7 @@ protected:

    sp<AMessage> mNotify;
    int32_t mBufferGeneration;
    bool mPaused;
    sp<AMessage> mStats;

private:
@@ -85,6 +89,7 @@ private:
        kWhatConfigure           = 'conf',
        kWhatSetParameters       = 'setP',
        kWhatSetRenderer         = 'setR',
        kWhatPause               = 'paus',
        kWhatGetInputBuffers     = 'gInB',
        kWhatRequestInputBuffers = 'reqB',
        kWhatFlush               = 'flus',
Loading