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

Commit 6021c9a5 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "MediaCodec: keep callback message for reclaim" am: c7baadb9 am: 50cd8496 am: f1a4d7a8

Original change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1549551

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I0317ea011c2c2e87ca0e5ee6ad7dcf174477743a
parents 3f643324 f1a4d7a8
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -1348,6 +1348,8 @@ status_t MediaCodec::configure(
    // save msg for reset
    mConfigureMsg = msg;

    sp<AMessage> callback = mCallback;

    status_t err;
    std::vector<MediaResourceParcel> resources;
    resources.push_back(MediaResource::CodecResource(mFlags & kFlagIsSecure, mIsVideo));
@@ -1372,7 +1374,18 @@ status_t MediaCodec::configure(
            // the configure failure is due to wrong state.

            ALOGE("configure failed with err 0x%08x, resetting...", err);
            reset();
            status_t err2 = reset();
            if (err2 != OK) {
                ALOGE("retrying configure: failed to reset codec (%08x)", err2);
                break;
            }
            if (callback != nullptr) {
                err2 = setCallback(callback);
                if (err2 != OK) {
                    ALOGE("retrying configure: failed to set callback (%08x)", err2);
                    break;
                }
            }
        }
        if (!isResourceError(err)) {
            break;
@@ -1481,6 +1494,8 @@ uint64_t MediaCodec::getGraphicBufferSize() {
status_t MediaCodec::start() {
    sp<AMessage> msg = new AMessage(kWhatStart, this);

    sp<AMessage> callback;

    status_t err;
    std::vector<MediaResourceParcel> resources;
    resources.push_back(MediaResource::CodecResource(mFlags & kFlagIsSecure, mIsVideo));
@@ -1505,6 +1520,20 @@ status_t MediaCodec::start() {
                ALOGE("retrying start: failed to configure codec");
                break;
            }
            if (callback != nullptr) {
                err = setCallback(callback);
                if (err != OK) {
                    ALOGE("retrying start: failed to set callback");
                    break;
                }
                ALOGD("succeed to set callback for reclaim");
            }
        }

        // Keep callback message after the first iteration if necessary.
        if (i == 0 && mCallback != nullptr && mFlags & kFlagIsAsync) {
            callback = mCallback;
            ALOGD("keep callback message for reclaim");
        }

        sp<AMessage> response;