Merge cherrypicks of ['googleplex-android-review.googlesource.com/39880477'] into 26Q2-release. Change-Id: Id880f984e90867f132fd5ebce7b3e5ddfa8e55e7
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.cpp b/media/codec2/sfplugin/CCodecBufferChannel.cpp index fa36266..4270f5e 100644 --- a/media/codec2/sfplugin/CCodecBufferChannel.cpp +++ b/media/codec2/sfplugin/CCodecBufferChannel.cpp
@@ -2483,7 +2483,6 @@ // newly initialized pipeline capacity. if (inputFormat || outputFormat) { - mFlush.lock()->delayAfter.clear(); Mutexed<PipelineWatcher>::Locked watcher(mPipelineWatcher); watcher->inputDelay(inputDelayValue) .pipelineDelay(pipelineDelayValue) @@ -2491,19 +2490,6 @@ .smoothnessFactor(kSmoothnessFactor) .tunneled(mTunneled); watcher->flush(); - } else { - Mutexed<Flush>::Locked flush(mFlush); - flush->delayAfter.clear(); - auto pushIfValid = [&flush](const C2Param &p) { - if (p) { - flush->delayAfter.push_back(C2Param::Copy(p)); - } - }; - pushIfValid(reorderDepth); - pushIfValid(reorderKey); - pushIfValid(inputDelay); - pushIfValid(pipelineDelay); - pushIfValid(outputDelay); } mInputMetEos = false; @@ -2571,20 +2557,20 @@ return UNKNOWN_ERROR; } - std::list<std::unique_ptr<C2Work>> flushedCodecInitData; - mFlush.lock()->codecInitData.swap(flushedCodecInitData); - if (!flushedCodecInitData.empty()) { + std::list<std::unique_ptr<C2Work>> flushedConfigs; + mFlushedConfigs.lock()->swap(flushedConfigs); + if (!flushedConfigs.empty()) { { Mutexed<PipelineWatcher>::Locked watcher(mPipelineWatcher); PipelineWatcher::Clock::time_point now = PipelineWatcher::Clock::now(); - for (const std::unique_ptr<C2Work> &work : flushedCodecInitData) { + for (const std::unique_ptr<C2Work> &work : flushedConfigs) { watcher->onWorkQueued( work->input.ordinal.frameIndex.peeku(), std::vector(work->input.buffers), now); } } - err = std::atomic_load(&mComponent)->queue(&flushedCodecInitData); + err = std::atomic_load(&mComponent)->queue(&flushedConfigs); if (err != C2_OK) { ALOGW("[%s] Error while queueing a flushed config", mName); return UNKNOWN_ERROR; @@ -2687,7 +2673,7 @@ void CCodecBufferChannel::flush(const std::list<std::unique_ptr<C2Work>> &flushedWork) { ALOGV("[%s] flush", mName); - std::list<std::unique_ptr<C2Work>> codecInitData; + std::list<std::unique_ptr<C2Work>> configs; mInput.lock()->lastFlushIndex = mFrameIndex.load(std::memory_order_relaxed); { Mutexed<PipelineWatcher>::Locked watcher(mPipelineWatcher); @@ -2700,7 +2686,7 @@ if (work->input.buffers.empty() || work->input.buffers.front() == nullptr || work->input.buffers.front()->data().linearBlocks().empty()) { - ALOGD("[%s] no linear codec init data found", mName); + ALOGD("[%s] no linear codec config data found", mName); watcher->onWorkDone(frameIndex); continue; } @@ -2720,12 +2706,12 @@ work->input.infoBuffers.begin(), work->input.infoBuffers.end()); copy->worklets.emplace_back(new C2Worklet); - codecInitData.push_back(std::move(copy)); + configs.push_back(std::move(copy)); watcher->onWorkDone(frameIndex); - ALOGV("[%s] stashed flushed codec init data", mName); + ALOGV("[%s] stashed flushed codec config data", mName); } } - mFlush.lock()->codecInitData.swap(codecInitData); + mFlushedConfigs.lock()->swap(configs); { Mutexed<Input>::Locked input(mInput); input->buffers->flush(); @@ -2857,16 +2843,6 @@ } } - { - Mutexed<Flush>::Locked flush(mFlush); - if (!flush->delayAfter.empty()) { - worklet->output.configUpdate.insert( - worklet->output.configUpdate.end(), - std::make_move_iterator(flush->delayAfter.begin()), - std::make_move_iterator(flush->delayAfter.end())); - flush->delayAfter.clear(); - } - } std::optional<uint32_t> newInputDelay, newPipelineDelay, newOutputDelay, newReorderDepth; std::optional<C2Config::ordinal_key_t> newReorderKey; bool needMaxDequeueBufferCountUpdate = false;
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.h b/media/codec2/sfplugin/CCodecBufferChannel.h index 52f6a2b..c662e25 100644 --- a/media/codec2/sfplugin/CCodecBufferChannel.h +++ b/media/codec2/sfplugin/CCodecBufferChannel.h
@@ -386,11 +386,7 @@ bool bounded; }; Mutexed<Output> mOutput; - struct Flush { - std::list<std::unique_ptr<C2Work>> codecInitData; - std::vector<std::unique_ptr<C2Param>> delayAfter; - }; - Mutexed<Flush> mFlush; + Mutexed<std::list<std::unique_ptr<C2Work>>> mFlushedConfigs; std::atomic_uint64_t mFrameIndex; std::atomic_uint64_t mFirstValidFrameIndex;