blob: 43f3dfab053bda311f8d1943785822463ddcbdc7 [file] [log] [blame]
// Copyright 2019 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.camera2;
using fuchsia.sysmem;
using zx;
[Discoverable]
protocol Manager {
/// Notifies the client when a camera becomes available. A number of these events will
/// be sent when a client first connects to this protocol.
/// `device_id` is used to identify the camera. The device_id should not change throughout
/// the lifetime of the camera.
/// `last_known_camera` is set to true when the Camera Manager has notified the client
/// of all the devices it currently knows about.
/// `description` describes the properties of the camera.
-> OnDeviceAvailable(int32 device_id, DeviceInfo description, bool last_known_camera);
/// Notifies the client when a camera becomes unavailable.
-> OnDeviceUnavailable(int32 device_id);
/// Notifies the client when a camera becomes muted or unmuted.
/// `device_id` refers to the device_id from the description of a previous OnDeviceAvailable
/// call.
-> OnDeviceMuteChanged(int32 device_id, bool currently_muted);
/// AcknowledgeDeviceEvent must be called after any of the above events before more
/// events will be sent.
AcknowledgeDeviceEvent();
/// Connect to a camera stream:
/// `device_id` Refers to a specific device_id that has been advertised by OnDeviceAvailable.
/// `constraints` contains a set of constraints on the requested stream. The Camera
/// Manager will attempt to find a stream that meets the constraints. If multiple
/// streams match, one of the matching streams will be connected.
/// `token` refers to a Sysmem buffer allocation that will be used to pass images using
/// the Stream protocol. The Camera Manager will apply a BufferCollectionContraints
/// related to the image format(s), so the client does not need to apply any
/// ImageFormatConstraints.
/// Sync is assumed to have been called on `token` before it is passed to
/// ConnectToStream.
/// Since `constraints` may not dictate a specific format, the initial format of images
/// on the stream is indicated on the response.
/// The connection is considered to be successful once a response has been given, unless
/// `stream` is closed.
ConnectToStream(int32 device_id, StreamConstraints constraints,
fuchsia.sysmem.BufferCollectionToken token,
request<Stream> stream) -> (fuchsia.sysmem.ImageFormat_2 format);
};
[Discoverable]
protocol MuteControl {
/// Mutes a camera. This is independent from stopping or closing a stream. A muted
/// camera will not produce any more images until
/// unmute is called. You can still connect to streams from a muted camera, but they
/// will not produce frames until the camera is unmuted.
/// `device_id` refers to the device_id from a previous OnDeviceAvailable call.
Mute(int32 device_id) -> (zx.status status);
Unmute(int32 device_id) -> (zx.status status);
};
/// These constraints are given to the Camera Manager when requesting a stream. The
/// Camera Manager will use these constraints to match an appropriate stream.
table StreamConstraints {
/// A table that describes the properties of the stream. Any properties specified will
/// be considered requirements for matching streams.
1: StreamProperties properties;
/// If specified, the stream will be created using this index for the initial format index.
/// If unspecified, the first stream format will be used.
2: uint32 format_index;
};
enum DeviceType {
BUILTIN = 1;
VIRTUAL = 2;
};
/// Identifying information about the device.
table DeviceInfo {
/// Information from physical device enumeration:
1: uint16 vendor_id;
2: string:255 vendor_name;
3: uint16 product_id;
4: string:255 product_name;
/// Information about the type of device:
5: DeviceType type;
};