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

Commit 3857c532 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "C2SoftDav1dDec: Drain and signal resolution change based on seq header" into main

parents d85f7841 d74f2f06
Loading
Loading
Loading
Loading
+18 −20
Original line number Diff line number Diff line
@@ -648,6 +648,24 @@ void C2SoftDav1dDec::process(const std::unique_ptr<C2Work>& work,
            if (res == 0) {
                ALOGV("dav1d found a sequenceHeader (%dx%d) for in_frameIndex=%ld.", seq.max_width,
                      seq.max_height, (long)in_frameIndex);
                if (seq.max_width != mWidth || seq.max_height != mHeight) {
                    drainInternal(DRAIN_COMPONENT_NO_EOS, pool, work);
                    mWidth = seq.max_width;
                    mHeight = seq.max_height;

                    C2StreamPictureSizeInfo::output size(0u, mWidth, mHeight);
                    std::vector<std::unique_ptr<C2SettingResult>> failures;
                    c2_status_t err = mIntf->config({&size}, C2_MAY_BLOCK, &failures);
                    if (err == C2_OK) {
                        work->worklets.front()->output.configUpdate.push_back(C2Param::Copy(size));
                    } else {
                        ALOGE("Config update size failed");
                        mSignalledError = true;
                        work->result = C2_CORRUPTED;
                        work->workletsProcessed = 1u;
                        return;
                    }
                }
            }

            // insert OBU TD if it is not present.
@@ -921,26 +939,6 @@ bool C2SoftDav1dDec::outputBuffer(const std::shared_ptr<C2BlockPool>& pool,
        return false;
    }

    const int width = img.p.w;
    const int height = img.p.h;
    if (width != mWidth || height != mHeight) {
        mWidth = width;
        mHeight = height;

        C2StreamPictureSizeInfo::output size(0u, mWidth, mHeight);
        std::vector<std::unique_ptr<C2SettingResult>> failures;
        c2_status_t err = mIntf->config({&size}, C2_MAY_BLOCK, &failures);
        if (err == C2_OK) {
            work->worklets.front()->output.configUpdate.push_back(C2Param::Copy(size));
        } else {
            ALOGE("Config update size failed");
            mSignalledError = true;
            work->result = C2_CORRUPTED;
            work->workletsProcessed = 1u;
            return false;
        }
    }

    getVuiParams(&img);

    // out_frameIndex that the decoded picture returns from dav1d.