blob: 9e72137624d84a23759f85f1f1df20197869030e [file] [log] [blame]
// Copyright 2018 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.camera;
using fuchsia.sysmem;
/// A stream that the camera manager can provide. Video streams reference a
/// a camera, but may have additional hardware and bandwidth restrictions
/// from and ISP or other processing units.
/// This is being deprecated - please use VideoStreamV2 (below).
struct VideoStream {
/// The camera_id corresponds to the camera_id that is given in the DeviceInfo
/// received from GetDevices.
uint64 camera_id;
/// The requested video format. Note that this is field is necessary to
/// set The frame rate, even when calling CreateStream.
/// When calling CreateStream, format.format should match buffer_info.format.
VideoFormat format;
};
/// Preferred version of stream.
/// A version of stream that relies on definition of VideoFormat coming out of
/// fuchsia.hardware.camera. Streams reference a camera, but may have additional
/// hardware and bandwidth restrictions from an ISP or other processing units.
/// New code should depend on this as the other version will be deprecated when
/// dependencies are removed.
struct VideoStreamV2 {
/// The camera_id corresponds to the camera_id that is given in DeviceInfo
/// received from GetDevices.
uint64 camera_id;
/// The requested video format. Note that this field is necessary to set the
/// frame rate, even when calling CreateStream. When calling CreateStream
/// format.format should match buffer_info.format.
VideoFormat format;
};
/// The Camera Manager grants access to individual or sets of cameras
/// 1) You request the list of cameras, which gives you camera descriptions
/// 2) You request the list of formats available for the camera to which you
/// wish to connect.
/// 3) You request a Stream interface using CreateStream.
[Discoverable]
protocol Manager {
/// Returns a list of all the video devices that are currently plugged in
/// and enumerated. The camera_id field of the DeviceInfo is used to specify
/// a device in GetFormats, GetStream and GetStreamAndBufferCollection.
GetDevices() -> (vector<DeviceInfo> descriptions);
/// Get all the available formats for a camera.
/// `camera_id` is obtained from a DeviceInfo returned by GetDevices.
GetFormats(uint64 camera_id, uint32 index)
-> (vector<VideoFormat> formats, uint32 total_format_count);
/// Create a Stream with the specified access rights. This may not succeed.
/// If it does succeed, the Stream will have the rights indicated.
/// `buffer_info` contains a set of buffers to be used with the Stream.
/// This is being deprecated - please use CreateStreamV2.
CreateStream(VideoStream request,
fuchsia.sysmem.BufferCollectionInfo buffer_info,
request<Stream> stream, handle<eventpair> client_token);
/// Create a Stream with the specified access rights. This may not succeed.
/// If it does succeed, the Stream will have the rights indicated.
/// `buffer_info` contains a set of buffers to be used with the Stream.
[Transitional="This is meant to replace CreateStream"]
CreateStreamV2(VideoStreamV2 request,
fuchsia.sysmem.BufferCollectionInfo buffer_info,
request<Stream> stream,
handle<eventpair> client_token);
};