blob: 8ee28da2ce0b9994c00785df2de2d9d5a0cd2487 [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 zircon.camera;
using zx;
// This structure represents image resolution.
struct ImageResolution {
uint32 width;
uint32 height;
};
// A sensor can support several different predefined modes.
struct SensorMode {
// Frames per milliseconds. NOTE: (Reference code has fps * 256)
uint32 fpms;
// Resolution of the mode.
ImageResolution resolution;
// How many exposures this mode supports.
uint8 exposures;
// The wdr mode.
uint8 wdr_mode;
// Bit depth of data from sensor.
uint8 bits;
// Lane count.
uint8 lanes;
// MBps per lane.
uint32 mbps;
// The setting idx in seq.
uint8 idx;
// The setting bayer pattern
uint8 bayer;
};
struct SensorInfo {
// Total resolution of the image with blanking.
ImageResolution total;
// Active resolution without blanking.
ImageResolution active;
// Actual pixels per line after scaling/binning.
uint32 pixels_per_line;
// Maximum analog gain value in log2 format.
int32 again_log2_max;
// Maximum digital gain value in log2 format.
int32 dgain_log2_max;
// Precision of the gain - If required gain step
// is less then this do not try to allocate it.
int32 again_accuracy;
// Minimum integration time for the sensor in lines.
uint32 integration_time_min;
// Maximum integration time for the sensor in lines
// without dropping fps.
uint32 integration_time_max;
// Maximum integration time for long in lines.
uint32 integration_time_long_max;
// Maximum possible integration time for the sensor in lines.
uint32 integration_time_limit;
// Limit of integration time for non-flickering light source.
uint16 day_light_integration_time_max;
// Delay to apply integration time in frames.
uint8 integration_time_apply_delay;
// Select which WDR exposure channel gain
// is delayed 0-none, 1-long, 2-medium, 3-short
// (only 0 and 1 implemented)
uint8 isp_exposure_channel_delay;
// Used for image stabilization.
int32 xoffset;
// Used for image stabilization.
int32 yoffset;
// Number of lines per second used for antiflicker.
uint32 lines_per_second;
// Number of different exposures supported by the sensor.
int32 sensor_exp_number;
// Current mode. This value is from the range [ 0 : countof(supported_modes) - 1 ].
uint8 mode;
// sensor setting bayer pattern.
uint8 bayer;
};
[Layout = "Simple"]
interface CameraSensor {
// Initializes the Camera Sensor.
1: Init() -> (zx.status s);
// De-Initializes the Camera Sensor.
2: DeInit();
// Sets the Camera Sensor Mode to one of the supported modes.
3: SetMode(uint8 mode) -> (zx.status s);
// Stop sensor data output.
// This function is called from system to enable video stream from sensor.
4: StartStreaming();
// Stop sensor data output.
// This function is called from system to disable video stream from sensor.
5: StopStreaming();
// Set analog gain.
// This function sets the sensor digital gain.
// Gain should be just saved here for the future.
// The real sensor digital gain update must be implemented in
// Update() routine.
// @param gain - analog gain value in log2 format precision is defined by LOG2_GAIN_SHIFT
// @return the real digital gain which will be applied
6: SetAnalogGain(int32 gain) -> (int32 actual_gain);
// Set digital gain.
// This function sets the sensor digital gain.
// Gain should be just saved here for the future.
// The real sensor digital gain update must be implemented in
// Update() routine.
// @param gain - analog gain value in log2 format precision is defined by LOG2_GAIN_SHIFT
// @return the real digital gain which will be applied
7: SetDigitalGain(int32 gain) -> (int32 actual_gain);
// Set integration time
// This function sets the sensor integration time.
// Integration time should be just saved here for the future.
// The real time update must be implemented in
// sensor_update routine.
// @param int_time - integration time if one exposure is used or short exposure for multi-expsoure sensors.
// int_time_M - medium integration time if several exposures are supported.
// int_time_L - long integration time if several exposures are supported.
8: SetIntegrationTime(int32 int_time, int32 int_time_M, int32 int_time_L);
// Update all sensor parameters
// The function is called from IRQ thread in vertical blanking.
// All sensor parameters must be updated here.
9: Update();
// Get supported sensor modes.
// 10: GetSupportedModes() -> (vector<SensorMode> supported_modes, uint32 num);
// Gets the Sensor Parameters.
// Note: This is not supported in Zircon yet under "Simple" layout.
// 11: GetInfo() -> (zx.status s, SensorInfo info);
};