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

Commit 6f944922 authored by Arun Johnson's avatar Arun Johnson Committed by Gerrit Code Review
Browse files

Merge "Clear MultiAccessUnit SkipCutBuffer" into main

parents 45aaf270 d43dc8cf
Loading
Loading
Loading
Loading
+16 −18
Original line number Diff line number Diff line
@@ -177,33 +177,29 @@ c2_status_t MultiAccessUnitHelper::flush(
        std::list<std::unique_ptr<C2Work>>* const c2flushedWorks) {
    c2_status_t c2res = C2_OK;
    std::lock_guard<std::mutex> l(mLock);
    for (std::unique_ptr<C2Work>& w : *c2flushedWorks) {
    for (auto iterWork = c2flushedWorks->begin() ; iterWork != c2flushedWorks->end(); ) {
        bool foundFlushedFrame = false;
        std::list<MultiAccessUnitInfo>::iterator frame =
                mFrameHolder.begin();
        while (frame != mFrameHolder.end() && !foundFlushedFrame) {
            auto it = frame->mComponentFrameIds.find(
                    w->input.ordinal.frameIndex.peekull());
                    (*iterWork)->input.ordinal.frameIndex.peekull());
            if (it != frame->mComponentFrameIds.end()) {
                LOG(DEBUG) << "Multi access-unit flush "
                        << w->input.ordinal.frameIndex.peekull()
                        << (*iterWork)->input.ordinal.frameIndex.peekull()
                        << " with " << frame->inOrdinal.frameIndex.peekull();
                w->input.ordinal.frameIndex = frame->inOrdinal.frameIndex;
                bool removeEntry = w->worklets.empty()
                        || !w->worklets.front()
                        || (w->worklets.front()->output.flags
                        & C2FrameData::FLAG_INCOMPLETE) == 0;
                if (removeEntry) {
                    frame->mComponentFrameIds.erase(it);
                }
                foundFlushedFrame = true;
            }
            if (frame->mComponentFrameIds.empty()) {
                (*iterWork)->input.ordinal.frameIndex = frame->inOrdinal.frameIndex;
                frame = mFrameHolder.erase(frame);
                foundFlushedFrame = true;
            } else {
                ++frame;
            }
        }
        if (!foundFlushedFrame) {
            iterWork = c2flushedWorks->erase(iterWork);
        } else {
            ++iterWork;
        }
    }
    return c2res;
}
@@ -297,13 +293,15 @@ c2_status_t MultiAccessUnitHelper::scatter(
                        std::shared_ptr<C2Buffer>(new C2MultiAccessUnitBuffer(au)));
                LOG(DEBUG) << "Frame scatter queuing frames WITH info in ordinal "
                        << inputOrdinal.frameIndex.peekull()
                        << " total offset " << offset << " info.size " << info.size
                        << " : TS " << newWork->input.ordinal.timestamp.peekull();
                        << " info.size " << info.size
                        << " : TS " << newWork->input.ordinal.timestamp.peekull()
                        << " with index " << newFrameIdx - 1;
                // add to worklist
                sliceWork.push_back(std::move(newWork));
                processedWork->push_back(std::move(sliceWork));
                offset += info.size;
            }
            mFrameIndex--;
            if (!sendEos && (w->input.flags & C2FrameData::FLAG_END_OF_STREAM)) {
                if (!processedWork->empty()) {
                    std::list<std::unique_ptr<C2Work>> &sliceWork = processedWork->back();
@@ -498,7 +496,7 @@ c2_status_t MultiAccessUnitHelper::processWorklets(MultiAccessUnitInfo &frame,
            }
            frame.mLargeWork = std::move(work);
            frame.mLargeWork->input.ordinal.frameIndex = frame.inOrdinal.frameIndex;
            finalizeWork(frame);
            finalizeWork(frame, (*worklet)->output.flags, true);
            addWork(frame.mLargeWork);
            frame.reset();
            return C2_OK;
+8 −2
Original line number Diff line number Diff line
@@ -160,6 +160,12 @@ public:
        SkipCutBuffer(skip, cut, num16BitChannels),
        mFrontPaddingDelay(0), mSize(0) {
    }
    void clearAll() {
        mInfos.clear();
        mFrontPaddingDelay = 0;
        mSize = 0;
        SkipCutBuffer::clear();
    }

    virtual ~MultiAccessUnitSkipCutBuffer() {

@@ -1378,7 +1384,7 @@ void OutputBuffersArray::flush(const std::list<std::unique_ptr<C2Work>> &flushed
    (void)flushedWork;
    mImpl.flush();
    if (mSkipCutBuffer != nullptr) {
        mSkipCutBuffer->clear();
        mSkipCutBuffer->clearAll();
    }
}

@@ -1536,7 +1542,7 @@ uint32_t FlexOutputBuffers::getPixelFormatIfApplicable() { return mPixelFormat;
void LinearOutputBuffers::flush(
        const std::list<std::unique_ptr<C2Work>> &flushedWork) {
    if (mSkipCutBuffer != nullptr) {
        mSkipCutBuffer->clear();
        mSkipCutBuffer->clearAll();
    }
    FlexOutputBuffers::flush(flushedWork);
}