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

Commit 71c75e00 authored by Wei Jia's avatar Wei Jia
Browse files

NuPlayer: do not send BUFFERING_START to client when paused by client.

Bug: 25727912
Change-Id: I5f82090352a3d6806f1f8fafbdb2a3bf0be48be7
parent 19bd5498
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -191,7 +191,8 @@ NuPlayer::NuPlayer(pid_t pid)
      mResetting(false),
      mSourceStarted(false),
      mPaused(false),
      mPausedByClient(false),
      mPausedByClient(true),
      mPendingBufferingFlag(PENDING_BUFFERING_FLAG_NONE),
      mPausedForBuffering(false) {
    clearFlushComplete();
}
@@ -715,6 +716,10 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
                onStart();
            }
            mPausedByClient = false;
            if (mPendingBufferingFlag != PENDING_BUFFERING_FLAG_NONE) {
                notifyListener(MEDIA_INFO, mPendingBufferingFlag, 0);
                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
            }
            break;
        }

@@ -2147,7 +2152,12 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) {

        case Source::kWhatBufferingStart:
        {
            if (mPausedByClient) {
                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_START;
            } else {
                notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_START, 0);
                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
            }
            break;
        }

@@ -2169,7 +2179,12 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) {

        case Source::kWhatBufferingEnd:
        {
            if (mPausedByClient) {
                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_END;
            } else {
                notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_END, 0);
                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
            }
            break;
        }

+9 −0
Original line number Diff line number Diff line
@@ -182,6 +182,12 @@ private:
        FLUSH_CMD_SHUTDOWN,
    };

    enum PendingBufferingFlag {
        PENDING_BUFFERING_FLAG_NONE = MEDIA_INFO_UNKNOWN,
        PENDING_BUFFERING_FLAG_START = MEDIA_INFO_BUFFERING_START,
        PENDING_BUFFERING_FLAG_END = MEDIA_INFO_BUFFERING_END,
    };

    // Status of flush responses from the decoder and renderer.
    bool mFlushComplete[2][2];

@@ -208,6 +214,9 @@ private:
    // still become true, when we pause internally due to buffering.
    bool mPausedByClient;

    // Pending buffering flag which is not sent to client due to being paused.
    PendingBufferingFlag mPendingBufferingFlag;

    // Pause state as requested by source (internally) due to buffering
    bool mPausedForBuffering;