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

Commit ee9f714a authored by Sungtak Lee's avatar Sungtak Lee
Browse files

ACodec: Block setSurface during OutputPortSettingsChangedState

Block setSurface during OutputPortSettingsChangedState. calling
setSurface will be blocked until the status not being
OutputPortSettingsChangesState and setSurface being completed.

Bug: 245264658
Test: atest android.media.codec.cts.MediaCodecTest
Test: atest android.media.decoder.cts.AdaptivePlaybackTest
Change-Id: Iae1301c0cc88b49f87702edf89a6e4f1258b1096
parent e1fc4f5c
Loading
Loading
Loading
Loading
+8 −16
Original line number Diff line number Diff line
@@ -5928,19 +5928,17 @@ bool ACodec::BaseState::onMessageReceived(const sp<AMessage> &msg) {

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

            sp<RefBase> obj;
            CHECK(msg->findObject("surface", &obj));

            status_t err = mCodec->handleSetSurface(static_cast<Surface *>(obj.get()));

            sp<AReplyToken> replyID;
            if (msg->senderAwaitsResponse(&replyID)) {
            sp<AMessage> response = new AMessage;
            response->setInt32("err", err);
            response->postReply(replyID);
            } else if (err != OK) {
                mCodec->signalError(OMX_ErrorUndefined, err);
            }
            break;
        }

@@ -8529,17 +8527,11 @@ bool ACodec::OutputPortSettingsChangedState::onMessageReceived(

        case kWhatSetSurface:
        {
            ALOGV("[%s] Deferring setSurface", mCodec->mComponentName.c_str());

            sp<AReplyToken> replyID;
            CHECK(msg->senderAwaitsResponse(&replyID));
            ALOGD("[%s] Deferring setSurface from OutputPortSettingsChangedState",
                  mCodec->mComponentName.c_str());

            mCodec->deferMessage(msg);

            sp<AMessage> response = new AMessage;
            response->setInt32("err", OK);
            response->postReply(replyID);

            handled = true;
            break;
        }