From: Inki Dae Date: Thu, 18 Apr 2024 06:32:42 +0000 (+0900) Subject: input/camera_api: drop unnecessary thread X-Git-Tag: accepted/tizen/unified/20240903.110722~66 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F09%2F309909%2F1;p=platform%2Fcore%2Fapi%2Fsingleo.git input/camera_api: drop unnecessary thread 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 --- diff --git a/input/backends/camera_api/include/CameraApiBackend.h b/input/backends/camera_api/include/CameraApiBackend.h index 20982ca..24e4dd3 100644 --- a/input/backends/camera_api/include/CameraApiBackend.h +++ b/input/backends/camera_api/include/CameraApiBackend.h @@ -39,11 +39,7 @@ private: camera_h _camera; InputServiceCallbackType _userCb; void *_userData; - std::unique_ptr _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 }; diff --git a/input/backends/camera_api/src/CameraApiBackend.cpp b/input/backends/camera_api/src/CameraApiBackend.cpp index 8b7caaf..b45ee78 100644 --- a/input/backends/camera_api/src/CameraApiBackend.cpp +++ b/input/backends/camera_api/src/CameraApiBackend.cpp @@ -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 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(&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(); } }