blob: 000ec1b633e84c0e377321c7cdf3fa0854930549 [file] [log] [blame] [edit]
// 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);
};