blob: 3fddbb7cb2f44f5fce0a891e75c9596bfd1de829 [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.
// This file is being deprecated - please do not rely on any of the structs or
// protocols here moving forward.
library fuchsia.camera;
using fuchsia.sysmem;
using zx;
const uint32 MAX_FORMATS_PER_RESPONSE = 16;
// A coarse set of capabilities. This struct is used in the camera description
// to help filter out cameras which will not have the needed capabilities.
// This set of declarations would be the bitfield: CameraOutputCapabilities.
const uint32 CAMERA_OUTPUT_UNKNOWN = 0;
const uint32 CAMERA_OUTPUT_STILL_IMAGE = 0x01;
const uint32 CAMERA_OUTPUT_BURST = 0x02;
const uint32 CAMERA_OUTPUT_STREAM = 0x04;
const uint32 CAMERA_OUTPUT_HDR = 0x08;
const uint32 CAMERA_OUTPUT_DEPTH = 0x10;
const uint32 CAMERA_OUTPUT_STEREO = 0x20;
// Identifying information about the device.
struct DeviceInfo {
uint64 camera_id; // Currently populated by the camera manager
uint16 vendor_id;
string vendor_name;
uint16 product_id;
string product_name;
string serial_number;
// The maximum number of stream interfaces that the device can support
// simultaneously.
uint16 max_stream_count;
uint32 output_capabilities; // CameraOutputCapabilities
// TODO(CAM-12): Add CameraPose, when we can actually use it.
};
// Status to be set when a frame is signalled available.
enum FrameStatus {
OK = 0;
// An error occurred during the production of a frame.
// No data will be available in the data buffer corresponding to this
// notification.
ERROR_FRAME = 1;
// No space was available in the data buffer, resulting in a dropped frame.
ERROR_BUFFER_FULL = 2;
};
struct Metadata {
int64 timestamp;
};
// Sent by the driver to the client when a frame is available for processing,
// or an error occurred.
struct FrameAvailableEvent {
// Non zero if an error occurred.
FrameStatus frame_status;
// The index of the buffer in the buffer collection.
uint32 buffer_id;
Metadata metadata;
};
struct FrameRate {
// The frame rate is frames_per_sec_numerator / frames_per_sec_denominator.
uint32 frames_per_sec_numerator;
uint32 frames_per_sec_denominator;
};
struct VideoFormat {
fuchsia.sysmem.ImageFormat format;
FrameRate rate;
};
// These are the original interfaces, which are being used for compatibility.
// The names are preserved from the ones in camera.h for porting ease.
[Discoverable]
protocol Control {
// Get the available format types for this device
// NOTE: The formats are paginated to MAX_FORMATS_PER_RESPONSE, multiple
// GetFormats need to be issued until total_format_count are received
GetFormats(uint32 index)
-> (vector<VideoFormat> formats, uint32 total_format_count,
zx.status status);
// Sent by the client to indicate desired stream characteristics.
// If setting the format is successful, the stream request will be honored.
// The stream token is used to provide additional control over the interface from the
// Camera Manager. The driver provides the guarantee that:
// 1) If the stream token receives the PEER_CLOSED event, the driver will close
// the stream.
// 2) If the Stream interface is closed, the driver will close the eventpair.
CreateStream(fuchsia.sysmem.BufferCollectionInfo buffer_collection,
FrameRate rate, request<Stream> stream, handle<eventpair> stream_token);
GetDeviceInfo() -> (DeviceInfo device_info);
};
protocol Stream {
// Starts the streaming of frames.
Start();
// Stops the streaming of frames.
Stop();
// Unlocks the specified frame, allowing the driver to reuse the memory.
ReleaseFrame(uint32 buffer_id);
// Sent by the driver to the client when a frame is available for processing,
// or an error occurred.
-> OnFrameAvailable(FrameAvailableEvent frame);
};