Merge "Add Mpeg4H263DecoderTest to mts test_suite"
diff --git a/media/codec2/components/base/SimpleC2Component.cpp b/media/codec2/components/base/SimpleC2Component.cpp
index fb3fbd0..dfad226 100644
--- a/media/codec2/components/base/SimpleC2Component.cpp
+++ b/media/codec2/components/base/SimpleC2Component.cpp
@@ -110,17 +110,20 @@
         }
         case kWhatStop: {
             int32_t err = thiz->onStop();
+            thiz->mOutputBlockPool.reset();
             Reply(msg, &err);
             break;
         }
         case kWhatReset: {
             thiz->onReset();
+            thiz->mOutputBlockPool.reset();
             mRunning = false;
             Reply(msg);
             break;
         }
         case kWhatRelease: {
             thiz->onRelease();
+            thiz->mOutputBlockPool.reset();
             mRunning = false;
             Reply(msg);
             break;
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 0619b9c..8def53d 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -2149,7 +2149,7 @@
             }
 
             // handle configuration changes in work done
-            const C2StreamInitDataInfo::output *initData = nullptr;
+            std::unique_ptr<C2Param> initData;
             sp<AMessage> outputFormat = nullptr;
             {
                 Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
@@ -2227,10 +2227,14 @@
                 if (config->mInputSurface) {
                     config->mInputSurface->onInputBufferDone(work->input.ordinal.frameIndex);
                 }
-                initData = initDataWatcher.hasChanged() ? initDataWatcher.update().get() : nullptr;
+                if (initDataWatcher.hasChanged()) {
+                    initData = C2Param::Copy(*initDataWatcher.update().get());
+                }
                 outputFormat = config->mOutputFormat;
             }
-            mChannel->onWorkDone(std::move(work), outputFormat, initData);
+            mChannel->onWorkDone(
+                    std::move(work), outputFormat,
+                    initData ? (C2StreamInitDataInfo::output *)initData.get() : nullptr);
             break;
         }
         case kWhatWatch: {