Revert "CCodec: hold locks only for needed part"

This reverts commit 372c10d2a5f7e1c47b306e21fbf35569779c8fb4.

Reason for revert: b/185812800

Change-Id: Idb855929c2c5aea76308b3005c0ff58aee124e1a
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 0619b9c..5c387b3 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -1796,19 +1796,17 @@
 }
 
 status_t CCodec::setSurface(const sp<Surface> &surface) {
-    {
-        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
-        const std::unique_ptr<Config> &config = *configLocked;
-        if (config->mTunneled && config->mSidebandHandle != nullptr) {
-            sp<ANativeWindow> nativeWindow = static_cast<ANativeWindow *>(surface.get());
-            status_t err = native_window_set_sideband_stream(
-                    nativeWindow.get(),
-                    const_cast<native_handle_t *>(config->mSidebandHandle->handle()));
-            if (err != OK) {
-                ALOGE("NativeWindow(%p) native_window_set_sideband_stream(%p) failed! (err %d).",
-                        nativeWindow.get(), config->mSidebandHandle->handle(), err);
-                return err;
-            }
+    Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
+    const std::unique_ptr<Config> &config = *configLocked;
+    if (config->mTunneled && config->mSidebandHandle != nullptr) {
+        sp<ANativeWindow> nativeWindow = static_cast<ANativeWindow *>(surface.get());
+        status_t err = native_window_set_sideband_stream(
+                nativeWindow.get(),
+                const_cast<native_handle_t *>(config->mSidebandHandle->handle()));
+        if (err != OK) {
+            ALOGE("NativeWindow(%p) native_window_set_sideband_stream(%p) failed! (err %d).",
+                    nativeWindow.get(), config->mSidebandHandle->handle(), err);
+            return err;
         }
     }
     return mChannel->setSurface(surface);
@@ -2149,88 +2147,80 @@
             }
 
             // handle configuration changes in work done
-            const C2StreamInitDataInfo::output *initData = nullptr;
-            sp<AMessage> outputFormat = nullptr;
-            {
-                Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
-                const std::unique_ptr<Config> &config = *configLocked;
-                Config::Watcher<C2StreamInitDataInfo::output> initDataWatcher =
-                    config->watch<C2StreamInitDataInfo::output>();
-                if (!work->worklets.empty()
-                        && (work->worklets.front()->output.flags
-                                & C2FrameData::FLAG_DISCARD_FRAME) == 0) {
+            Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
+            const std::unique_ptr<Config> &config = *configLocked;
+            Config::Watcher<C2StreamInitDataInfo::output> initData =
+                config->watch<C2StreamInitDataInfo::output>();
+            if (!work->worklets.empty()
+                    && (work->worklets.front()->output.flags
+                            & C2FrameData::FLAG_DISCARD_FRAME) == 0) {
 
-                    // copy buffer info to config
-                    std::vector<std::unique_ptr<C2Param>> updates;
-                    for (const std::unique_ptr<C2Param> &param
-                            : work->worklets.front()->output.configUpdate) {
-                        updates.push_back(C2Param::Copy(*param));
-                    }
-                    unsigned stream = 0;
-                    std::vector<std::shared_ptr<C2Buffer>> &outputBuffers =
-                        work->worklets.front()->output.buffers;
-                    for (const std::shared_ptr<C2Buffer> &buf : outputBuffers) {
-                        for (const std::shared_ptr<const C2Info> &info : buf->info()) {
-                            // move all info into output-stream #0 domain
-                            updates.emplace_back(
-                                    C2Param::CopyAsStream(*info, true /* output */, stream));
-                        }
-
-                        const std::vector<C2ConstGraphicBlock> blocks = buf->data().graphicBlocks();
-                        // for now only do the first block
-                        if (!blocks.empty()) {
-                            // ALOGV("got output buffer with crop %u,%u+%u,%u and size %u,%u",
-                            //      block.crop().left, block.crop().top,
-                            //      block.crop().width, block.crop().height,
-                            //      block.width(), block.height());
-                            const C2ConstGraphicBlock &block = blocks[0];
-                            updates.emplace_back(new C2StreamCropRectInfo::output(
-                                    stream, block.crop()));
-                            updates.emplace_back(new C2StreamPictureSizeInfo::output(
-                                    stream, block.crop().width, block.crop().height));
-                        }
-                        ++stream;
+                // copy buffer info to config
+                std::vector<std::unique_ptr<C2Param>> updates;
+                for (const std::unique_ptr<C2Param> &param
+                        : work->worklets.front()->output.configUpdate) {
+                    updates.push_back(C2Param::Copy(*param));
+                }
+                unsigned stream = 0;
+                for (const std::shared_ptr<C2Buffer> &buf : work->worklets.front()->output.buffers) {
+                    for (const std::shared_ptr<const C2Info> &info : buf->info()) {
+                        // move all info into output-stream #0 domain
+                        updates.emplace_back(C2Param::CopyAsStream(*info, true /* output */, stream));
                     }
 
-                    sp<AMessage> oldFormat = config->mOutputFormat;
-                    config->updateConfiguration(updates, config->mOutputDomain);
-                    RevertOutputFormatIfNeeded(oldFormat, config->mOutputFormat);
+                    const std::vector<C2ConstGraphicBlock> blocks = buf->data().graphicBlocks();
+                    // for now only do the first block
+                    if (!blocks.empty()) {
+                        // ALOGV("got output buffer with crop %u,%u+%u,%u and size %u,%u",
+                        //      block.crop().left, block.crop().top,
+                        //      block.crop().width, block.crop().height,
+                        //      block.width(), block.height());
+                        const C2ConstGraphicBlock &block = blocks[0];
+                        updates.emplace_back(new C2StreamCropRectInfo::output(stream, block.crop()));
+                        updates.emplace_back(new C2StreamPictureSizeInfo::output(
+                                stream, block.crop().width, block.crop().height));
+                    }
+                    ++stream;
+                }
 
-                    // copy standard infos to graphic buffers if not already present (otherwise, we
-                    // may overwrite the actual intermediate value with a final value)
-                    stream = 0;
-                    const static C2Param::Index stdGfxInfos[] = {
-                        C2StreamRotationInfo::output::PARAM_TYPE,
-                        C2StreamColorAspectsInfo::output::PARAM_TYPE,
-                        C2StreamDataSpaceInfo::output::PARAM_TYPE,
-                        C2StreamHdrStaticInfo::output::PARAM_TYPE,
-                        C2StreamHdr10PlusInfo::output::PARAM_TYPE,
-                        C2StreamPixelAspectRatioInfo::output::PARAM_TYPE,
-                        C2StreamSurfaceScalingInfo::output::PARAM_TYPE
-                    };
-                    for (const std::shared_ptr<C2Buffer> &buf : outputBuffers) {
-                        if (buf->data().graphicBlocks().size()) {
-                            for (C2Param::Index ix : stdGfxInfos) {
-                                if (!buf->hasInfo(ix)) {
-                                    const C2Param *param =
-                                        config->getConfigParameterValue(ix.withStream(stream));
-                                    if (param) {
-                                        std::shared_ptr<C2Param> info(C2Param::Copy(*param));
-                                        buf->setInfo(std::static_pointer_cast<C2Info>(info));
-                                    }
+                sp<AMessage> outputFormat = config->mOutputFormat;
+                config->updateConfiguration(updates, config->mOutputDomain);
+                RevertOutputFormatIfNeeded(outputFormat, config->mOutputFormat);
+
+                // copy standard infos to graphic buffers if not already present (otherwise, we
+                // may overwrite the actual intermediate value with a final value)
+                stream = 0;
+                const static C2Param::Index stdGfxInfos[] = {
+                    C2StreamRotationInfo::output::PARAM_TYPE,
+                    C2StreamColorAspectsInfo::output::PARAM_TYPE,
+                    C2StreamDataSpaceInfo::output::PARAM_TYPE,
+                    C2StreamHdrStaticInfo::output::PARAM_TYPE,
+                    C2StreamHdr10PlusInfo::output::PARAM_TYPE,
+                    C2StreamPixelAspectRatioInfo::output::PARAM_TYPE,
+                    C2StreamSurfaceScalingInfo::output::PARAM_TYPE
+                };
+                for (const std::shared_ptr<C2Buffer> &buf : work->worklets.front()->output.buffers) {
+                    if (buf->data().graphicBlocks().size()) {
+                        for (C2Param::Index ix : stdGfxInfos) {
+                            if (!buf->hasInfo(ix)) {
+                                const C2Param *param =
+                                    config->getConfigParameterValue(ix.withStream(stream));
+                                if (param) {
+                                    std::shared_ptr<C2Param> info(C2Param::Copy(*param));
+                                    buf->setInfo(std::static_pointer_cast<C2Info>(info));
                                 }
                             }
                         }
-                        ++stream;
                     }
+                    ++stream;
                 }
-                if (config->mInputSurface) {
-                    config->mInputSurface->onInputBufferDone(work->input.ordinal.frameIndex);
-                }
-                initData = initDataWatcher.hasChanged() ? initDataWatcher.update().get() : nullptr;
-                outputFormat = config->mOutputFormat;
             }
-            mChannel->onWorkDone(std::move(work), outputFormat, initData);
+            if (config->mInputSurface) {
+                config->mInputSurface->onInputBufferDone(work->input.ordinal.frameIndex);
+            }
+            mChannel->onWorkDone(
+                    std::move(work), config->mOutputFormat,
+                    initData.hasChanged() ? initData.update().get() : nullptr);
             break;
         }
         case kWhatWatch: {
@@ -2315,13 +2305,9 @@
             pendingDeadline = true;
         }
     }
-    bool tunneled = false;
-    {
-        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
-        const std::unique_ptr<Config> &config = *configLocked;
-        tunneled = config->mTunneled;
-    }
-    if (!tunneled && name.empty()) {
+    Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
+    const std::unique_ptr<Config> &config = *configLocked;
+    if (config->mTunneled == false && name.empty()) {
         constexpr std::chrono::steady_clock::duration kWorkDurationThreshold = 3s;
         std::chrono::steady_clock::duration elapsed = mChannel->elapsed();
         if (elapsed >= kWorkDurationThreshold) {