blob: 7ef2a1acfa08610032fa1b5c5b7ed5b662bf9e90 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module arc;
struct MojoDeviceInfo {
string device_path@0;
string usb_vid@1;
string usb_pid@2;
// Direction the camera faces relative to device screen.
// The value is ANDROID_LENS_FACING_* in camera_metadata_tags.h
[MinVersion=1] uint32 lens_facing@3;
// Clockwise angle through which the output image needs to be rotated to be
// upright on the device screen in its native orientation.
// Only [0, 90, 180, 270] values are valid.
[MinVersion=1] int32 sensor_orientation@4;
// The number of frames will be skipped after stream on.
[MinVersion=1] uint32 frames_to_skip_after_streamon@5;
// The horizontal field of view for 16:9 aspect ratio.
[MinVersion=1] float horizontal_view_angle_16_9@6;
// The horizontal field of view for 4:3 aspect ratio.
[MinVersion=1] float horizontal_view_angle_4_3@7;
// List of focal lengths that are supported by this camera device.
[MinVersion=1] array<float>? lens_info_available_focal_lengths@8;
// Shortest distance from frontmost surface of the lens that can be brought
// into sharp focus.
[MinVersion=1] float lens_info_minimum_focus_distance@9;
// The distance from frontmost surface of the lens that the image is
// sharpest.
[MinVersion=1] float lens_info_optimal_focus_distance@10;
// The vertical field of view for 16:9 aspect ratio.
[MinVersion=1] float vertical_view_angle_16_9@11;
// The vertical field of view for 4:3 aspect ratio.
[MinVersion=1] float vertical_view_angle_4_3@12;
};
struct MojoSupportedFormat {
uint32 width;
uint32 height;
uint32 fourcc;
array<float> frameRates;
};
interface ArcCameraService {
// Connect camera device with |device_path|. Return 0 in |result| if device is
// opened successfully; -errno otherwise.
Connect@0(string device_path) => (int32 result);
// Disconnect camera device. This function is a no-op if the camera device
// is not connected. If the stream is on, this function will also stop the
// stream.
Disconnect@1() => ();
// Enable camera device stream. Set up captured frame with |width|x|height|
// resolution, |pixel_format|, and |frame_rate|. |pixel_format| is
// V4L2_PIX_FORMAT_* in videodev2.h. Return frame buffer file descriptors
// |fds| and |buffer_size|. |buffer_size| is the size allocated for each
// buffer. The ownership of |fds| are transferred to the caller and |fds|
// should be closed when done. Caller can memory map |fds| and should unmap
// when done. Return 0 in |result| if device supports the format; -errno
// otherwise. This function should be called after Connect().
StreamOn@2(uint32 width, uint32 height, uint32 pixel_format, float frame_rate)
=> (array<handle> fds, uint32 buffer_size, int32 result);
// Disable camera device stream. Return 0 in |result| if device disables
// stream successfully; -errno otherwise. This function is a no-op if the
// stream is already stopped.
StreamOff@3() => (int32 result);
// Get next frame buffer from device. Device returns the corresponding
// buffer with |buffer_id| and |data_size| bytes. |buffer_id| is the index
// into the array of handles |fds| returned from StreamOn. |data_size| is the
// number of bytes used in the buffer for this frame. Return 0 in |result| if
// device gets the buffer successfully; -errno otherwise. Return -EAGAIN
// immediately if next frame buffer is not ready. This function should be
// called after StreamOn().
GetNextFrameBuffer@4() => (uint32 buffer_id, uint32 data_size, int32 result);
// Return |buffer_id| buffer to device. Return 0 in |result| if the buffer is
// returned successfully; -errno otherwise. This function should be called
// after StreamOn().
ReuseFrameBuffer@5(uint32 buffer_id) => (int32 result);
// Get all supported formats of device by |device_path|. This function can be
// called without calling Connect().
GetDeviceSupportedFormats@6(string device_path)
=> (array<MojoSupportedFormat> supported_formats);
// Get all camera devices information. This function can be called without
// calling Connect().
GetCameraDeviceInfos@7() => (array<MojoDeviceInfo> device_infos);
};
interface ArcCameraInstance {
};