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;