| /* |
| * Copyright 2020 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef CAMERA_TOOLS_CONNECTOR_CLIENT_CROS_CAMERA_CONNECTOR_CLIENT_H_ |
| #define CAMERA_TOOLS_CONNECTOR_CLIENT_CROS_CAMERA_CONNECTOR_CLIENT_H_ |
| |
| #include <list> |
| #include <map> |
| #include <queue> |
| #include <vector> |
| |
| #include <base/threading/thread.h> |
| #include <brillo/daemons/daemon.h> |
| |
| #include "cros-camera/camera_service_connector.h" |
| |
| namespace cros { |
| |
| int OnGotCameraInfo(void* context, const cros_cam_info_t* info, int is_removed); |
| |
| class CrosCameraConnectorClient : public brillo::Daemon { |
| public: |
| CrosCameraConnectorClient(); |
| |
| int OnInit() override; |
| |
| void OnShutdown(int* exit_code) override; |
| |
| void SetCamInfo(const cros_cam_info_t* info); |
| |
| void RemoveCamera(int32_t id); |
| |
| void ProcessFrame(const cros_cam_frame_t* frame); |
| |
| void StartCapture(); |
| |
| void RestartCapture(); |
| |
| private: |
| void StartCaptureOnThread(); |
| |
| void StopCaptureOnThread(); |
| |
| void RestartCaptureOnThread(); |
| |
| scoped_refptr<base::SequencedTaskRunner> client_runner_; |
| |
| std::list<int32_t> camera_device_list_; |
| std::map<int32_t, std::vector<cros_cam_format_info_t>> format_info_map_; |
| base::Lock camera_info_lock_; // Lock that protects |camera_device_list_| |
| // and |format_info_map_|. |
| bool init_done_; |
| |
| std::map<int32_t, std::queue<cros_cam_format_info_t>> pending_captures_map_; |
| int32_t current_id_; |
| cros_cam_format_info_t current_format_info_; |
| base::Lock capture_lock_; // Lock that protects |pending_captures_map_|, |
| // |current_id_| and |current_format_info_|. |
| |
| base::Thread capture_thread_; |
| int num_restarts_; |
| }; |
| |
| } // namespace cros |
| |
| #endif // CAMERA_TOOLS_CONNECTOR_CLIENT_CROS_CAMERA_CONNECTOR_CLIENT_H_ |