| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Next min version: 15 |
| |
| module cros.mojom; |
| |
| import "camera/mojo/camera_common.mojom"; |
| import "camera/mojo/effects/effects_pipeline.mojom"; |
| import "camera/mojo/gpu/jpeg_encode_accelerator.mojom"; |
| import "camera/mojo/gpu/mjpeg_decode_accelerator.mojom"; |
| import "camera/mojo/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, |
| }; |
| |
| // CameraAutoZoomState indicates the state of the camera autozoom feature. |
| enum CameraAutoFramingState{ |
| // Auto framing is disabled. |
| OFF = 0, |
| |
| // Auto framing is enabled and set to single person mode. |
| ON_SINGLE = 1, |
| |
| // Auto framing is enabled and set to multi people mode. |
| ON_MULTI = 2, |
| }; |
| |
| // Indicates the state of requesting a switch effect. |
| [Extensible] |
| enum SetEffectResult { |
| [Default] kOk = 0, |
| kError = 1, |
| kFeatureDisabled = 2, |
| kDlcUnavailable = 3 |
| }; |
| |
| // 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: 8 |
| // Deprecated method IDs: 0, 1, 2, 3, 4, 6, 7 |
| interface CameraHalDispatcher { |
| // 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); |
| }; |
| |
| // The CrOS camera HAL v3 Mojo client. |
| // |
| // Next method ID: 1 |
| interface CameraHalClient { |
| // A caller calls SetUpChannel to dispatch the established Mojo channel |
| // |camera_module| to the client. The CameraHalClient can create a Mojo |
| // channel to the camera HAL v3 adapter process with |camera_module|. |
| // SetUpChannel may be called multiple times. In cases such as the |
| // CameraHalServer which holds the original Mojo channel crashes, |
| // CameraHalDispatcher will call SetUpChannel again once a new CameraHalServer |
| // reconnects. |
| SetUpChannel@0(pending_remote<CameraModule> camera_module); |
| }; |
| |
| // CrosCameraServiceObserver is an interface for CrosCameraService to notify |
| // observers for any changes on the server side, for example when a |
| // CameraHalClient opens or closes a camera device. |
| // |
| // Next method ID: 4 |
| interface CrosCameraServiceObserver { |
| // 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 observer will get the notification. |
| CameraPrivacySwitchStateChange@1(CameraPrivacySwitchState state, |
| int32 camera_id); |
| |
| // Fired when the camera software privacy switch status is changed. |
| CameraSWPrivacySwitchStateChange@2(CameraPrivacySwitchState state); |
| |
| // Fired when the camera effect is changed. |
| [MinVersion=14] CameraEffectChange@3(EffectsConfig config); |
| }; |
| |
| // A client can request the CrosCameraService service from Mojo Service Manager |
| // and get the camera module or set/get the camera states. |
| // |
| // Next method ID: 8 |
| interface CrosCameraService { |
| // A caller calls GetCameraModule to create a new Mojo channel to the camera |
| // HAL v3 adapter. |
| GetCameraModule@0(CameraClientType type) |
| => (pending_remote<CameraModule> camera_module_receiver); |
| |
| // Enable or disable tracing. |
| SetTracingEnabled@1(bool enabled); |
| |
| // Enable or disable auto framing. |
| SetAutoFramingState@2(CameraAutoFramingState state); |
| |
| // Get the current camera software privacy switch state. |
| GetCameraSWPrivacySwitchState@3() => (CameraPrivacySwitchState state); |
| |
| // Enable or disable the camera software privacy switch. |
| SetCameraSWPrivacySwitchState@4(CameraPrivacySwitchState state); |
| |
| // Get if the HAL supports auto framing. |
| GetAutoFramingSupported@5() => (bool supported); |
| |
| // Turn ON/OFF and configure specified effect. |
| SetCameraEffect@6(EffectsConfig config) => (SetEffectResult result); |
| |
| // Add a obersever which observes the event of the camera service. |
| AddCrosCameraServiceObserver@7( |
| pending_remote<CrosCameraServiceObserver> observer); |
| }; |