blob: a1203e9f9d6ac61981ba96b55d2bdf61547ab669 [file] [log] [blame] [edit]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CAMERA_DIAGNOSTICS_CAMERA_SERVICE_CONTROLLER_H_
#define CAMERA_DIAGNOSTICS_CAMERA_SERVICE_CONTROLLER_H_
#include <base/memory/scoped_refptr.h>
#include <base/task/sequenced_task_runner.h>
#include <mojo/public/cpp/bindings/remote.h>
#include <mojo_service_manager/lib/mojom/service_manager.mojom.h>
#include "camera/mojo/camera_diagnostics.mojom.h"
#include "diagnostics/camera_diagnostics_helpers.h"
#include "diagnostics/camera_diagnostics_mojo_manager.h"
namespace cros {
// Provides safe access to |camera_diag::mojom::CrosCameraController|.
// Thread-safe.
class CameraServiceController {
public:
explicit CameraServiceController(CameraDiagnosticsMojoManager* mojo_manager);
CameraServiceController(const CameraServiceController&) = delete;
CameraServiceController& operator=(const CameraServiceController&) = delete;
~CameraServiceController();
void StartStreaming(camera_diag::mojom::StreamingConfigPtr config,
CameraStartStreamingCallback callback);
void StopStreaming();
void RequestFrame(camera_diag::mojom::CameraFramePtr frame);
private:
//
// All the following functions need to be run on |ipc_task_runner_|.
//
void InitiateStartStreaming(camera_diag::mojom::StreamingConfigPtr config,
CameraStartStreamingCallback callback);
void StartStreamingInternal(
camera_diag::mojom::StreamingConfigPtr config,
CameraStartStreamingCallback callback,
chromeos::mojo_service_manager::mojom::ErrorOrServiceStatePtr
err_or_state);
void StopStreamingInternal();
void RequestFrameInternal(camera_diag::mojom::CameraFramePtr frame);
void ResetRemote(base::OnceClosure callback);
CameraDiagnosticsMojoManager* mojo_manager_;
scoped_refptr<base::SequencedTaskRunner> ipc_task_runner_;
mojo::Remote<camera_diag::mojom::CrosCameraController> remote_;
};
} // namespace cros
#endif // CAMERA_DIAGNOSTICS_CAMERA_SERVICE_CONTROLLER_H_