blob: 45c00de1e8e0bb040f890c8bd05fbee584d68fd3 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Next min version: 7
module cros.mojom;
import "chromeos/components/sensors/mojom/cros_sensor_service.mojom";
import "components/chromeos_camera/common/jpeg_encode_accelerator.mojom";
import "components/chromeos_camera/common/mjpeg_decode_accelerator.mojom";
import "media/capture/video/chromeos/mojom/camera_common.mojom";
import "media/capture/video/chromeos/mojom/cros_camera_client.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";
// CameraClientType indicates the type of a CameraHalClient.
// It should be kept in sync with the ChromeOSCameraClientType enum in
// tools/metrics/histograms/enums.xml in chromium.
[Extensible]
enum CameraClientType{
UNKNOWN = 0,
TESTING = 1,
CHROME = 2,
ANDROID = 3,
PLUGINVM = 4,
ASH_CHROME = 5,
LACROS_CHROME = 6,
};
// CameraPrivacySwitchState indicates the state of the camera privacy switch.
enum CameraPrivacySwitchState{
// For devices which can only read the privacy switch status while the camera
// is streaming, it is possible that the state of privacy switch is currently
// unknown.
UNKNOWN = 0,
// State when the privacy switch is on, which means the black frames will be
// delivered when streaming.
ON = 1,
// State when the privacy switch is off, which means camera should stream
// normally.
OFF = 2,
};
// The CrOS camera HAL v3 Mojo dispatcher. The dispatcher acts as a proxy and
// waits for the server and the clients to register. There can only be one
// server registered, with multiple clients requesting connections to the
// server. For each client, the dispatcher is responsible for creating a Mojo
// channel to the server and pass the established Mojo channel to the client in
// order to set up a Mojo channel between the client and the server.
//
// Next method ID: 7
interface CameraHalDispatcher {
// [Deprecated in version 4]
// A CameraHalServer calls RegisterServer to register itself with the
// dispatcher.
RegisterServer@0(pending_remote<CameraHalServer> server);
// [Deprecated in version 4]
// A CameraHalClient calls RegisterClient to register itself with the
// dispatcher.
RegisterClient@1(pending_remote<CameraHalClient> client);
// Get MjpegDecodeAccelerator from dispatcher.
[MinVersion=1] GetMjpegDecodeAccelerator@2(
pending_receiver<chromeos_camera.mojom.MjpegDecodeAccelerator>
jda_receiver);
// Get JpegEncodeAccelerator from dispatcher.
[MinVersion=2] GetJpegEncodeAccelerator@3(
pending_receiver<chromeos_camera.mojom.JpegEncodeAccelerator>
jea_receiver);
// A CameraHalServer calls RegisterServerWithToken to register itself with the
// dispatcher. CameraHalDispatcher would authenticate the server with the
// supplied |auth_token|. |callbacks| is fired by CameraHalServer to notify
// CameraHalDispatcher about CameraHalClient updates, for example when a
// CameraHalClient opens or closes a camera device.
[MinVersion=4] RegisterServerWithToken@4(
pending_remote<CameraHalServer> server,
mojo_base.mojom.UnguessableToken auth_token) =>
(int32 result, pending_remote<CameraHalServerCallbacks> callbacks);
// A CameraHalClient calls RegisterClient to register itself with the
// dispatcher. CameraHalDispatcher would authenticate the client with the
// given |type| and |auth_token|.
[MinVersion=4] RegisterClientWithToken@5(
pending_remote<CameraHalClient> client,
CameraClientType type,
mojo_base.mojom.UnguessableToken auth_token) => (int32 result);
// A SensorHalClient calls RegisterSensorClient to register itself with
// SensorHalDispatcher through CameraHalDispatcher. |auth_token| is used to
// prove the caller has been granted permission to access SensorHalClient.
// CameraHalDispatcher will send back |result| as the errno.
[MinVersion=6] RegisterSensorClientWithToken@6(
pending_remote<chromeos.sensors.mojom.SensorHalClient> client,
mojo_base.mojom.UnguessableToken auth_token) => (int32 result);
};
// The CrOS camera HAL v3 Mojo server.
//
// Next method ID: 2
interface CameraHalServer {
// A caller calls CreateChannel to create a new Mojo channel to the camera
// HAL v3 adapter. Upon successfully binding of |camera_module_receiver|, the
// caller will have a established Mojo channel to the camera HAL v3 adapter
// process.
CreateChannel@0(pending_receiver<CameraModule> camera_module_receiver,
[MinVersion=4] CameraClientType type);
// Enable or disable tracing.
[MinVersion=3]
SetTracingEnabled@1(bool enabled);
};
// CameraHalServerCallbacks is an interface for CameraHalServer to notify
// CameraHalDispatcher for any changes on the server side, for example when a
// CameraHalClient opens or closes a camera device.
//
// Next method ID: 2
interface CameraHalServerCallbacks {
// Fired when a CameraHalClient opens or closes a camera device. When a
// CameraHalClient loses mojo connection to CameraHalServer, CameraHalServer
// would also use this to notify that cameras are closed (not being used).
CameraDeviceActivityChange@0(int32 camera_id,
bool opened,
CameraClientType type);
// Fired when the camera privacy switch status is changed. If the device has
// such switch, this callback will be fired immediately for once to notify its
// current status when the callbacks are registered.
[MinVersion=5]
CameraPrivacySwitchStateChange@1(CameraPrivacySwitchState state);
};