Loading media/codec2/hal/common/MultiAccessUnitHelper.cpp +16 −18 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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(); Loading Loading @@ -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; Loading media/codec2/sfplugin/CCodecBuffers.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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(); } } Loading Loading @@ -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); } Loading Loading
media/codec2/hal/common/MultiAccessUnitHelper.cpp +16 −18 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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(); Loading Loading @@ -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; Loading
media/codec2/sfplugin/CCodecBuffers.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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(); } } Loading Loading @@ -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); } Loading