| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.camera3; |
| |
| const uint32 MAX_IDENTIFIER_LENGTH = 256; |
| const uint32 MAX_CONFIGURATIONS_PER_CAMERA = 256; |
| const uint32 MAX_STREAMS_PER_CONFIGURATION = 256; |
| const uint32 MAX_RESOLUTIONS_PER_STREAM = 1024; |
| |
| /// A Device represents a unique physical camera present in the system. Only one client may connect |
| /// to an unbound physical camera, however the "Rebind" method can be used to create multiple |
| /// connections to it to be used by a coordinated set of clients. |
| protocol Device { |
| /// Returns an identifier for the camera. If present, identical devices on different systems |
| /// will have the same identifier. Clients may use this to determine if additional semantics |
| /// known a priori for a given device apply to the current camera. |
| // TODO(fxb/43247): unify device identification |
| // go/unified-device-discovery will eliminate the need for this protocol |
| GetIdentifier() -> (string:MAX_IDENTIFIER_LENGTH? identifier); |
| |
| /// Returns a list of configurations supported by the camera. All cameras will have at least |
| /// one configuration. The values returned are immutable - they will not change for the |
| /// lifetime of the client's connection to the Camera. |
| GetConfigurations() -> (vector<Configuration>:MAX_CONFIGURATIONS_PER_CAMERA configurations); |
| |
| /// Returns the index of the current configuration when it has changed from a previously |
| /// returned configuration, or is called by a client for the first time. |
| WatchCurrentConfiguration() -> (uint32 index); |
| |
| /// Sets the configuration using the provided index. Calling this method disconnects any |
| /// existing Stream clients associated with this camera. |
| SetCurrentConfiguration(uint32 index); |
| |
| /// Returns the camera's current mute state when it has changed from a previously returned |
| /// state, or is called by a client for the first time. A camera may be muted using |
| /// SetSoftwareMuteState or by a physical switch. If either muted mode is active, stream |
| /// clients associated with this physical camera will stop receiving new frames. |
| WatchMuteState() -> (bool software_muted, bool hardware_muted); |
| |
| /// Sets the current camera's software mute state. When transitioning to the muted state, this |
| /// method returns when the camera has successfully ceased sending new frames to stream |
| /// clients. When transitioning to the unmuted state, this method returns immediately. |
| SetSoftwareMuteState(bool muted) -> (); |
| |
| /// Connects to the Stream at the provided index. If any clients already exist for this stream, |
| /// the request is closed with the ZX_ERR_ALREADY_BOUND epitaph. |
| ConnectToStream(uint32 index, request<Stream> request); |
| |
| /// Request another connection to this Device. This allows a client to delegate different |
| /// operations to different coordinated clients. |
| Rebind(request<Device> request); |
| }; |
| |
| /// Describes a distinct configuration for the camera. |
| struct Configuration { |
| /// Descriptions of streams that are concurrently available in the configuration. |
| vector<StreamProperties>:MAX_STREAMS_PER_CONFIGURATION streams; |
| }; |