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

Commit 22441854 authored by Brian Lindahl's avatar Brian Lindahl
Browse files

Allow the default mode for video peek to be undefined

Forcing the default mode for video peek to be defined to on has broken
use cases for Broadcom devices.

See go/video-peek-legacy-mode for more details.

Bug: 220266078
Test: atest android.media.decoder.cts.DecoderTest
Change-Id: Idddbc21e169018362e6a5d7eeffef19e759e6f03
parent e6f46638
Loading
Loading
Loading
Loading
+35 −13
Original line number Diff line number Diff line
@@ -817,7 +817,7 @@ MediaCodec::MediaCodec(
      mTunneledInputWidth(0),
      mTunneledInputHeight(0),
      mTunneled(false),
      mTunnelPeekState(TunnelPeekState::kEnabledNoBuffer),
      mTunnelPeekState(TunnelPeekState::kLegacyMode),
      mHaveInputSurface(false),
      mHavePendingInputBuffers(false),
      mCpuBoostRequested(false),
@@ -1087,6 +1087,8 @@ void MediaCodec::updateLowLatency(const sp<AMessage> &msg) {

constexpr const char *MediaCodec::asString(TunnelPeekState state, const char *default_string){
    switch(state) {
        case TunnelPeekState::kLegacyMode:
            return "LegacyMode";
        case TunnelPeekState::kEnabledNoBuffer:
            return "EnabledNoBuffer";
        case TunnelPeekState::kDisabledNoBuffer:
@@ -1113,6 +1115,9 @@ void MediaCodec::updateTunnelPeek(const sp<AMessage> &msg) {
    TunnelPeekState previousState = mTunnelPeekState;
    if(tunnelPeek == 0){
        switch (mTunnelPeekState) {
            case TunnelPeekState::kLegacyMode:
                msg->setInt32("android._tunnel-peek-set-legacy", 0);
                [[fallthrough]];
            case TunnelPeekState::kEnabledNoBuffer:
                mTunnelPeekState = TunnelPeekState::kDisabledNoBuffer;
                break;
@@ -1125,6 +1130,9 @@ void MediaCodec::updateTunnelPeek(const sp<AMessage> &msg) {
        }
    } else {
        switch (mTunnelPeekState) {
            case TunnelPeekState::kLegacyMode:
                msg->setInt32("android._tunnel-peek-set-legacy", 0);
                [[fallthrough]];
            case TunnelPeekState::kDisabledNoBuffer:
                mTunnelPeekState = TunnelPeekState::kEnabledNoBuffer;
                break;
@@ -3539,10 +3547,12 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
                        break;
                    }
                    TunnelPeekState previousState = mTunnelPeekState;
                    if (mTunnelPeekState != TunnelPeekState::kLegacyMode) {
                        mTunnelPeekState = TunnelPeekState::kBufferRendered;
                        ALOGV("TunnelPeekState: %s -> %s",
                                asString(previousState),
                                asString(TunnelPeekState::kBufferRendered));
                    }
                    updatePlaybackDuration(msg);
                    // check that we have a notification set
                    if (mOnFrameRenderedNotification != NULL) {
@@ -3959,6 +3969,14 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
                mTunneled = false;
            }

            // If mTunnelPeekState is still in kLegacyMode at this point,
            // configure the codec in legacy mode
            if (mTunneled && (mTunnelPeekState == TunnelPeekState::kLegacyMode)) {
                sp<AMessage> params = new AMessage;
                params->setInt32("android._tunnel-peek-set-legacy", 1);
                setParameters(params);
            }

            int32_t background = 0;
            if (format->findInt32("android._background-mode", &background) && background) {
                androidSetThreadPriority(gettid(), ANDROID_PRIORITY_BACKGROUND);
@@ -4077,10 +4095,12 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
            sp<AReplyToken> replyID;
            CHECK(msg->senderAwaitsResponse(&replyID));
            TunnelPeekState previousState = mTunnelPeekState;
            if (previousState != TunnelPeekState::kLegacyMode) {
                mTunnelPeekState = TunnelPeekState::kEnabledNoBuffer;
                ALOGV("TunnelPeekState: %s -> %s",
                        asString(previousState),
                        asString(TunnelPeekState::kEnabledNoBuffer));
            }

            mReplyID = replyID;
            setState(STARTING);
@@ -4521,10 +4541,12 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
            mCodec->signalFlush();
            returnBuffersToCodec();
            TunnelPeekState previousState = mTunnelPeekState;
            if (previousState != TunnelPeekState::kLegacyMode) {
                mTunnelPeekState = TunnelPeekState::kEnabledNoBuffer;
                ALOGV("TunnelPeekState: %s -> %s",
                        asString(previousState),
                        asString(TunnelPeekState::kEnabledNoBuffer));
            }
            break;
        }

+1 −0
Original line number Diff line number Diff line
@@ -398,6 +398,7 @@ private:
    // <all states>     -> EnabledNoBuffer  when flush
    // <all states>     -> EnabledNoBuffer  when stop then configure then start
    enum struct TunnelPeekState {
        kLegacyMode,
        kDisabledNoBuffer,
        kEnabledNoBuffer,
        kDisabledQueued,