input/camera_api: drop unnecessary thread 09/309909/1
authorInki Dae <inki.dae@samsung.com>
Thu, 18 Apr 2024 06:32:42 +0000 (15:32 +0900)
committerInki Dae <inki.dae@samsung.com>
Thu, 18 Apr 2024 06:32:42 +0000 (15:32 +0900)
Drop unnecessary thread from CameraApiBackend. previewCb callback
will be called by different thread created by Camera API internally
so we don't need to create a new thread for preview.

Change-Id: Iba8cbba1ae59253e123787797ea21ca0e05ce9d8
Signed-off-by: Inki Dae <inki.dae@samsung.com>
input/backends/camera_api/include/CameraApiBackend.h
input/backends/camera_api/src/CameraApiBackend.cpp

index 20982cae618c9343578d19a0e9e7acbd41d5f849..24e4dd3def3473b903e82cae1cbc961b4bbda2c6 100644 (file)
@@ -39,11 +39,7 @@ private:
        camera_h _camera;
        InputServiceCallbackType _userCb;
        void *_userData;
-       std::unique_ptr<std::thread> _thread_handle;
-       bool _exit_thread { false };
-       std::mutex _preview_mutex;
        std::mutex _capture_mutex;
-       std::condition_variable _preview_event;
        std::condition_variable _capture_event;
        cv::Mat _cvCaptureImage;
        camera_pixel_format_e _defaultPreviewPixelFormat { CAMERA_PIXEL_FORMAT_I420 };
index 8b7caaf2eb00e84608adf873dc4845ff7607465b..b45ee781569be720fae57b2e1040e9bb350d16d8 100644 (file)
@@ -110,7 +110,6 @@ void CameraApiBackend::previewCb(camera_preview_data_s *data, void *user_data)
        data_type.ptr = cv_dst.data;
 
        context->_userCb(data_type, context->_userData);
-       context->_preview_event.notify_one();
 }
 
 bool CameraApiBackend::previewFormatCb(camera_pixel_format_e format, void *user_data)
@@ -322,18 +321,6 @@ void CameraApiBackend::capture(BaseDataType &out_data)
        }
 }
 
-void CameraApiBackend::threadLoop()
-{
-       int ret = camera_start_preview(_camera);
-       if (ret != CAMERA_ERROR_NONE) {
-               SINGLEO_LOGE("CameraApiBackend: camera_start_preview failed. ret: %d", ret);
-               throw InvalidOperation("CameraApiBackend: camera_start_preview failed.");
-       }
-
-       unique_lock<mutex> lock(_preview_mutex);
-       _preview_event.wait(lock, [this] { return _exit_thread; });
-}
-
 void CameraApiBackend::streamOn()
 {
        SINGLEO_LOGD("CameraApiBackend: stream on.");
@@ -344,8 +331,11 @@ void CameraApiBackend::streamOn()
                throw InvalidOperation("CameraApiBackend: camera_set_preview_cb failed.");
        }
 
-       if (!_thread_handle)
-               _thread_handle = std::make_unique<std::thread>(&CameraApiBackend::threadLoop, this);
+       ret = camera_start_preview(_camera);
+       if (ret != CAMERA_ERROR_NONE) {
+               SINGLEO_LOGE("CameraApiBackend: camera_start_preview failed. ret: %d", ret);
+               throw InvalidOperation("CameraApiBackend: camera_start_preview failed.");
+       }
 }
 
 void CameraApiBackend::streamOff()
@@ -363,10 +353,6 @@ void CameraApiBackend::streamOff()
                SINGLEO_LOGE("CameraApiBackend: camera_unset_preview_cb failed. ret: %d", ret);
                throw InvalidOperation("camera_start_preview: camera_unset_preview_cb failed.");
        }
-
-       _exit_thread = true;
-       _preview_event.notify_one();
-       _thread_handle->join();
 }
 
 }