1db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/*
2db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann * Samsung Exynos5 SoC series Camera API 2.0 HAL
3db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann *
4db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann * Internal Metadata (controls/dynamic metadata and static metadata)
5db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann *
6db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann * Copyright (c) 2012 Samsung Electronics Co., Ltd
7db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann * Contact: Sungjoong Kang, <sj3.kang@samsung.com>
8db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann *
9db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann * This program is free software; you can redistribute it and/or modify
10db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann * it under the terms of the GNU General Public License version 2 as
11db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann * published by the Free Software Foundation.
12db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann */
13db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
14db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/*2012.04.18 Version 0.1 Initial Release*/
15db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/*2012.04.23 Version 0.2 Added static metadata (draft)*/
16db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/*2012.07.04 Version 0.3 Applied google's undocumented changes (draft)*/
17db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/*2012.07.11 Version 0.4 Added FD parameters */
18db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/*2012.07.27 Version 0.5 Modified HSB control and DM */
19db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
20db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
21db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#ifndef FIMC_IS_METADATA_H_
22db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#define FIMC_IS_METADATA_H_
23db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
24db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct rational {
25db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t num;
26db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t den;
27db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
28db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
29db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#define CAMERA2_MAX_AVAILABLE_MODE	21
30db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#define CAMERA2_MAX_FACES		16
31db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
32db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#define CAMERA2_FACE_DETECTION_THRESHOLD    35
33db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
34db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/*
35db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann *controls/dynamic metadata
36db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann*/
37db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
38db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.request */
39db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
40db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum metadata_mode {
41db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	METADATA_MODE_NONE,
42db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	METADATA_MODE_FULL
43db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
44db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
45db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_request_ctl {
46db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		id;
47db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum metadata_mode	metadataMode;
48db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t			outputStreams[16];
49db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		frameCount;
50db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
51db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
52db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_request_dm {
53db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		id;
54db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum metadata_mode	metadataMode;
55db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		frameCount;
56db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
57db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
58db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
59db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
60db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.lens */
61db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
62db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum optical_stabilization_mode {
63db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	OPTICAL_STABILIZATION_MODE_OFF,
64db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	OPTICAL_STABILIZATION_MODE_ON
65db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
66db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
67db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum lens_facing {
68db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	LENS_FACING_BACK,
69db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	LENS_FACING_FRONT
70db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
71db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
72db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_lens_ctl {
73db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t				focusDistance;
74db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float					aperture;
75db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float					focalLength;
76db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float					filterDensity;
77db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum optical_stabilization_mode		opticalStabilizationMode;
78db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
79db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
80db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
81db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_lens_dm {
82db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t				focusDistance;
83db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float					aperture;
84db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float					focalLength;
85db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float					filterDensity;
86db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum optical_stabilization_mode		opticalStabilizationMode;
87db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float					focusRange[2];
88db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
89db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
90db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_lens_sm {
91db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				minimumFocusDistance;
92db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				hyperfocalDistance;
93db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				availableFocalLength[2];
94db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				availableApertures;
95db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming 1 aperture*/
96db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				availableFilterDensities;
97db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming 1 ND filter value*/
98db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum optical_stabilization_mode	availableOpticalStabilization;
99db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming 1*/
100db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			shadingMapSize;
101db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				shadingMap[3][40][30];
102db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			geometricCorrectionMapSize;
103db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				geometricCorrectionMap[2][3][40][30];
104db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum lens_facing		facing;
105db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				position[2];
106db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
107db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
108db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.sensor */
109db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
110db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum sensor_colorfilterarrangement {
111db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_COLORFILTERARRANGEMENT_RGGB,
112db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_COLORFILTERARRANGEMENT_GRBG,
113db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_COLORFILTERARRANGEMENT_GBRG,
114db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_COLORFILTERARRANGEMENT_BGGR,
115db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_COLORFILTERARRANGEMENT_RGB
116db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
117db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
118db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum sensor_ref_illuminant {
119db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_DAYLIGHT = 1,
120db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_FLUORESCENT = 2,
121db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_TUNGSTEN = 3,
122db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_FLASH = 4,
123db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_FINE_WEATHER = 9,
124db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_CLOUDY_WEATHER = 10,
125db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_SHADE = 11,
126db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_DAYLIGHT_FLUORESCENT = 12,
127db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_DAY_WHITE_FLUORESCENT = 13,
128db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_COOL_WHITE_FLUORESCENT = 14,
129db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_WHITE_FLUORESCENT = 15,
130db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_STANDARD_A = 17,
131db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_STANDARD_B = 18,
132db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_STANDARD_C = 19,
133db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_D55 = 20,
134db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_D65 = 21,
135db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_D75 = 22,
136db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_D50 = 23,
137db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SENSOR_ILLUMINANT_ISO_STUDIO_TUNGSTEN = 24
138db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
139db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
140db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_sensor_ctl {
141db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* unit : nano */
142db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	exposureTime;
143db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* unit : nano(It's min frame duration */
144db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	frameDuration;
145db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* unit : percent(need to change ISO value?) */
146db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	sensitivity;
147db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
148db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
149db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_sensor_dm {
150db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	exposureTime;
151db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	frameDuration;
152db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	sensitivity;
153db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	timeStamp;
154db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
155db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
156db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_sensor_sm {
157db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	exposureTimeRange[2];
158db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxFrameDuration;
159db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* list of available sensitivities. */
160db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	availableSensitivities[10];
161db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum sensor_colorfilterarrangement colorFilterArrangement;
162db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float		physicalSize[2];
163db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	pixelArraySize[2];
164db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	activeArraySize[4];
165db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	whiteLevel;
166db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	blackLevelPattern[4];
167db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	colorTransform1[9];
168db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	colorTransform2[9];
169db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum sensor_ref_illuminant	referenceIlluminant1;
170db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum sensor_ref_illuminant	referenceIlluminant2;
171db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	forwardMatrix1[9];
172db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	forwardMatrix2[9];
173db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	calibrationTransform1[9];
174db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	calibrationTransform2[9];
175db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	baseGainFactor;
176db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxAnalogSensitivity;
177db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float		noiseModelCoefficients[2];
178db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	orientation;
179db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
180db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
181db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
182db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
183db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.flash */
184db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
185db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum flash_mode {
186db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    CAM2_FLASH_MODE_NOP = 0,
187db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    CAM2_FLASH_MODE_OFF = 1,
188db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    CAM2_FLASH_MODE_SINGLE,
189db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    CAM2_FLASH_MODE_TORCH,
190db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    CAM2_FLASH_MODE_BEST
191db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
192db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
193db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_flash_ctl {
194db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum flash_mode		flashMode;
195db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		firingPower;
196db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t		firingTime;
197db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
198db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
199db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_flash_dm {
200db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum flash_mode		flashMode;
201db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*10 is max power*/
202db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		firingPower;
203db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*unit : microseconds*/
204db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t		firingTime;
205db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*1 : stable, 0 : unstable*/
206db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		firingStable;
207db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*1 : flash required, 2 : flash not required */
208db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		decision;
209db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
210db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
211db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_flash_sm {
212db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	available;
213db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	chargeDuration;
214db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
215db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
216db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
217db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.hotpixel */
218db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
219db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum processing_mode {
220db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	PROCESSING_MODE_OFF = 1,
221db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	PROCESSING_MODE_FAST,
222db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	PROCESSING_MODE_HIGH_QUALITY
223db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
224db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
225db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
226db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_hotpixel_ctl {
227db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
228db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
229db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
230db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_hotpixel_dm {
231db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
232db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
233db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
234db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
235db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
236db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.demosaic */
237db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
238db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_demosaic_ctl {
239db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
240db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
241db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
242db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_demosaic_dm {
243db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
244db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
245db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
246db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
247db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
248db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.noiseReduction */
249db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
250db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_noisereduction_ctl {
251db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
252db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		strength;
253db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
254db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
255db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_noisereduction_dm {
256db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
257db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		strength;
258db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
259db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
260db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
261db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
262db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.shading */
263db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
264db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_shading_ctl {
265db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
266db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
267db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
268db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_shading_dm {
269db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
270db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
271db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
272db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
273db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
274db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.geometric */
275db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
276db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_geometric_ctl {
277db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
278db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
279db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
280db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_geometric_dm {
281db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
282db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
283db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
284db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
285db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
286db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.colorCorrection */
287db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
288db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum colorcorrection_mode {
289db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_FAST = 1,
290db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_HIGH_QUALITY,
291db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_TRANSFORM_MATRIX,
292db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_MONO,
293db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_NEGATIVE,
294db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_SOLARIZE,
295db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_SEPIA,
296db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_POSTERIZE,
297db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_WHITEBOARD,
298db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_BLACKBOARD,
299db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	COLORCORRECTION_MODE_EFFECT_AQUA
300db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
301db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
302db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
303db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_colorcorrection_ctl {
304db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum colorcorrection_mode	mode;
305db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				transform[9];
306db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			hue;
307db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			saturation;
308db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			brightness;
309db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
310db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
311db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_colorcorrection_dm {
312db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum colorcorrection_mode	mode;
313db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				transform[9];
314db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			hue;
315db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			saturation;
316db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			brightness;
317db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
318db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
319db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_colorcorrection_sm {
320db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming 10 supported modes*/
321db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t			availableModes[CAMERA2_MAX_AVAILABLE_MODE];
322db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		hueRange[2];
323db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		saturationRange[2];
324db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		brightnessRange[2];
325db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
326db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
327db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
328db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.tonemap */
329db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
330db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum tonemap_mode {
331db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	TONEMAP_MODE_FAST = 1,
332db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	TONEMAP_MODE_HIGH_QUALITY,
333db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	TONEMAP_MODE_CONTRAST_CURVE
334db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
335db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
336db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_tonemap_ctl {
337db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum tonemap_mode		mode;
338db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* assuming maxCurvePoints = 64 */
339db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				curveRed[64];
340db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				curveGreen[64];
341db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				curveBlue[64];
342db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
343db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
344db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_tonemap_dm {
345db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum tonemap_mode		mode;
346db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* assuming maxCurvePoints = 64 */
347db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				curveRed[64];
348db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				curveGreen[64];
349db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	float				curveBlue[64];
350db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
351db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
352db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_tonemap_sm {
353db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxCurvePoints;
354db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
355db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
356db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.edge */
357db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
358db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_edge_ctl {
359db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
360db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		strength;
361db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
362db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
363db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_edge_dm {
364db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum processing_mode	mode;
365db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		strength;
366db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
367db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
368db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
369db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
370db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.scaler */
371db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
372db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum scaler_availableformats {
373db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SCALER_FORMAT_BAYER_RAW,
374db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SCALER_FORMAT_YV12,
375db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SCALER_FORMAT_NV21,
376db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SCALER_FORMAT_JPEG,
377db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	SCALER_FORMAT_UNKNOWN
378db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
379db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
380db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_scaler_ctl {
381db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	cropRegion[3];
382db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
383db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
384db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_scaler_dm {
385db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	cropRegion[3];
386db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
387db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
388db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_scaler_sm {
389db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum scaler_availableformats availableFormats[4];
390db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming # of availableFormats = 4*/
391db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	availableRawSizes;
392db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	availableRawMinDurations;
393db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* needs check */
394db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	availableProcessedSizes[8];
395db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	availableProcessedMinDurations[8];
396db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	availableJpegSizes[8][2];
397db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	availableJpegMinDurations[8];
398db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	availableMaxDigitalZoom[8];
399db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
400db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
401db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.jpeg */
402db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_jpeg_ctl {
403db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	quality;
404db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	thumbnailSize[2];
405db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	thumbnailQuality;
406db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	double		gpsCoordinates[3];
407db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	gpsProcessingMethod;
408db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	gpsTimestamp;
409db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	orientation;
410db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
411db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
412db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_jpeg_dm {
413db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	quality;
414db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	thumbnailSize[2];
415db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	thumbnailQuality;
416db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	double		gpsCoordinates[3];
417db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	gpsProcessingMethod;
418db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	gpsTimestamp;
419db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	orientation;
420db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
421db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
422db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_jpeg_sm {
423db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	availableThumbnailSizes[8][2];
424db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxSize;
425db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming supported size=8*/
426db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
427db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
428db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
429db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
430db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.statistics */
431db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
432db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum facedetect_mode {
433db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	FACEDETECT_MODE_OFF = 1,
434db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	FACEDETECT_MODE_SIMPLE,
435db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	FACEDETECT_MODE_FULL
436db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
437db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
438db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum stats_mode {
439db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	STATS_MODE_OFF = 1,
440db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	STATS_MODE_ON
441db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
442db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
443db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_stats_ctl {
444db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum facedetect_mode	faceDetectMode;
445db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum stats_mode		histogramMode;
446db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum stats_mode		sharpnessMapMode;
447db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
448db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
449db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
450db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_stats_dm {
451db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum facedetect_mode	faceDetectMode;
452db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		faceRectangles[CAMERA2_MAX_FACES][4];
453db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t			faceScores[CAMERA2_MAX_FACES];
454db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		faceLandmarks[CAMERA2_MAX_FACES][6];
455db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		faceIds[CAMERA2_MAX_FACES];
456db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* PAYTON_CHECK_20120712 : histogram_mode -> stats_mode */
457db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum stats_mode		histogramMode;
458db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* [hj529.kim, 2012/07/19] androd.statistics.histogram */
459db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		histogram[3 * 256];
460db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* PAYTON_CHECK_20120712 : sharpnessmap_mode -> stats_mode */
461db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum stats_mode		sharpnessMapMode;
462db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*sharpnessMap*/
463db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
464db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
465db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
466db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_stats_sm {
467db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t		availableFaceDetectModes[CAMERA2_MAX_AVAILABLE_MODE];
468db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming supported modes = 3;*/
469db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxFaceCount;
470db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	histogramBucketCount;
471db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxHistogramCount;
472db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	sharpnessMapSize[2];
473db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxSharpnessMapValue;
474db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
475db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
476db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/* android.control */
477db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
478db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_capture_intent {
479db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CAPTURE_INTENT_CUSTOM = 0,
480db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CAPTURE_INTENT_PREVIEW,
481db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CAPTURE_INTENT_STILL_CAPTURE,
482db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CAPTURE_INTENT_VIDEO_RECORD,
483db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CAPTURE_INTENT_VIDEO_SNAPSHOT,
484db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CAPTURE_INTENT_ZERO_SHUTTER_LAG
485db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
486db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
487db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_mode {
488db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CONTROL_NONE = 0,
489db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CONTROL_OFF,
490db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CONTROL_AUTO,
491db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_CONTROL_USE_SCENE_MODE
492db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
493db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
494db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_scene_mode {
495db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_UNSUPPORTED = 1,
496db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_FACE_PRIORITY,
497db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_ACTION,
498db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_PORTRAIT,
499db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_LANDSCAPE,
500db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_NIGHT,
501db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_NIGHT_PORTRAIT,
502db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_THEATRE,
503db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_BEACH,
504db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_SNOW,
505db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_SUNSET,
506db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_STEADYPHOTO,
507db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_FIREWORKS,
508db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_SPORTS,
509db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_PARTY,
510db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_CANDLELIGHT,
511db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_BARCODE,
512db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_NIGHT_CAPTURE, /* part of night mode */
513db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_SCENE_MODE_MAX
514db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
515db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
516db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_effect_mode {
517db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_OFF = 1,
518db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_MONO,
519db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_NEGATIVE,
520db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_SOLARIZE,
521db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_SEPIA,
522db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_POSTERIZE,
523db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_WHITEBOARD,
524db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_BLACKBOARD,
525db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_EFFECT_AQUA
526db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
527db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
528db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_aemode {
529db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AEMODE_OFF = 1,
530db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AEMODE_LOCKED,
531db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AEMODE_ON,
532db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AEMODE_ON_AUTO_FLASH,
533db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AEMODE_ON_ALWAYS_FLASH,
534db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AEMODE_ON_AUTO_FLASH_REDEYE
535db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
536db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
537db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_ae_flashmode {
538db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_FLASHMODE_NOP = 0,
539db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*all flash control stop*/
540db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_FLASHMODE_OFF = 1,
541db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*internal 3A can control flash*/
542db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_FLASHMODE_ON,
543db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*internal 3A can do auto flash algorithm*/
544db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_FLASHMODE_AUTO,
545db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*internal 3A can fire flash by auto result*/
546db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_FLASHMODE_CAPTURE,
547db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*internal 3A can control flash*/
548db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_FLASHMODE_ON_ALWAYS
549db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
550db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
551db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_ae_antibanding_mode {
552db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AE_ANTIBANDING_OFF = 1,
553db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AE_ANTIBANDING_50HZ,
554db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AE_ANTIBANDING_60HZ,
555db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AE_ANTIBANDING_AUTO
556db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
557db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
558db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_awbmode {
559db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_OFF = 1,
560db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_LOCKED,
561db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_AUTO,
562db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_INCANDESCENT,
563db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_FLUORESCENT,
564db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_WARM_FLUORESCENT,
565db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_DAYLIGHT,
566db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_CLOUDY_DAYLIGHT,
567db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_TWILIGHT,
568db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AWBMODE_WB_SHADE
569db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
570db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
571db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_afmode {
572db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	NO_CHANGE = 0,
573db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_OFF = 1,
574db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_AUTO,
575db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_MACRO,
576db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_CONTINUOUS_VIDEO,
577db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_CONTINUOUS_PICTURE,
578db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_INFINITY,
579db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_AUTO_FACE,
580db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_CONTINUOUS_VIDEO_FACE,
581db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_CONTINUOUS_PICTURE_FACE,
582db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_MANUAL,
583db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFMODE_EDOF
584db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
585db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
586db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_afstate {
587db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFSTATE_INACTIVE = 1,
588db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFSTATE_PASSIVE_SCAN,
589db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFSTATE_ACTIVE_SCAN,
590db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFSTATE_AF_ACQUIRED_FOCUS,
591db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_AFSTATE_AF_FAILED_FOCUS
592db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
593db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
594db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum ae_state {
595db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AE_STATE_INACTIVE = 1,
596db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AE_STATE_SEARCHING,
597db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AE_STATE_CONVERGED,
598db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AE_STATE_LOCKED,
599db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AE_STATE_FLASH_REQUIRED,
600db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AE_STATE_PRECAPTURE
601db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
602db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
603db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum awb_state {
604db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AWB_STATE_INACTIVE = 1,
605db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AWB_STATE_SEARCHING,
606db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AWB_STATE_CONVERGED,
607db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AWB_STATE_LOCKED
608db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
609db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
610db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum aa_isomode {
611db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_ISOMODE_AUTO = 1,
612db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	AA_ISOMODE_MANUAL,
613db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
614db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
615db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum ae_lockmode {
616db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    AEMODE_LOCK_OFF = 0,
617db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    AEMODE_LOCK_ON,
618db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
619db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
620db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannenum awb_lockmode {
621db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    AWBMODE_LOCK_OFF = 0,
622db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    AWBMODE_LOCK_ON,
623db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
624db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
625db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_aa_ctl {
626db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_capture_intent		captureIntent;
627db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_mode			mode;
628db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_scene_mode		sceneMode;
629db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			videoStabilizationMode;
630db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_aemode			aeMode;
631db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			aeRegions[5];
632db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
633db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	int32_t				aeExpCompensation;
634db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			aeTargetFpsRange[2];
635db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_ae_antibanding_mode	aeAntibandingMode;
636db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_ae_flashmode		aeflashMode;
637db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_awbmode			awbMode;
638db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			awbRegions[5];
639db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
640db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_afmode			afMode;
641db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			afRegions[5];
642db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
643db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			afTrigger;
644db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_isomode			isoMode;
645db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t			isoValue;
646db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
647db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
648db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
649db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_aa_dm {
650db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_mode				mode;
651db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_effect_mode			effectMode;
652db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_scene_mode			sceneMode;
653db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t				videoStabilizationMode;
654db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_aemode				aeMode;
655db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*needs check*/
656db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t				aeRegions[5];
657db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
658db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum ae_state				aeState;
659db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_ae_flashmode			aeflashMode;
660db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*needs check*/
661db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_awbmode				awbMode;
662db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t				awbRegions[5];
663db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum awb_state				awbState;
664db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
665db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_afmode				afMode;
666db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t				afRegions[5];
667db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region*/
668db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_afstate				afState;
669db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	enum aa_isomode				isoMode;
670db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t				isoValue;
671db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
672db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
673db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_aa_sm {
674db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t		availableSceneModes[CAMERA2_MAX_AVAILABLE_MODE];
675db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t		availableEffects[CAMERA2_MAX_AVAILABLE_MODE];
676db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming # of available scene modes = 10*/
677db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	maxRegions;
678db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t		aeAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
679db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming # of available ae modes = 8*/
680db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct rational	aeCompensationStep;
681db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	int32_t		aeCompensationRange[2];
682db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t aeAvailableTargetFpsRanges[CAMERA2_MAX_AVAILABLE_MODE][2];
683db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t		aeAvailableAntibandingModes[CAMERA2_MAX_AVAILABLE_MODE];
684db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t		awbAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
685db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming # of awbAvailableModes = 10*/
686db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t		afAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
687db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming # of afAvailableModes = 4*/
688db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint8_t availableVideoStabilizationModes[4];
689db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*assuming # of availableVideoStabilizationModes = 4*/
690db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	isoRange[2];
691db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
692db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
693db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_lens_usm {
694db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** Frame delay between sending command and applying frame data */
695db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	focusDistanceFrameDelay;
696db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
697db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
698db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_sensor_usm {
699db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** Frame delay between sending command and applying frame data */
700db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	exposureTimeFrameDelay;
701db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	frameDurationFrameDelay;
702db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	sensitivityFrameDelay;
703db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
704db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
705db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_flash_usm {
706db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** Frame delay between sending command and applying frame data */
707db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	flashModeFrameDelay;
708db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t	firingPowerFrameDelay;
709db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t	firingTimeFrameDelay;
710db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
711db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
712db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_ctl {
713db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_request_ctl		request;
714db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_lens_ctl			lens;
715db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_sensor_ctl		sensor;
716db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_flash_ctl		flash;
717db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_hotpixel_ctl		hotpixel;
718db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_demosaic_ctl		demosaic;
719db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_noisereduction_ctl	noise;
720db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_shading_ctl		shading;
721db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_geometric_ctl		geometric;
722db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_colorcorrection_ctl	color;
723db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_tonemap_ctl		tonemap;
724db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_edge_ctl			edge;
725db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_scaler_ctl		scaler;
726db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_jpeg_ctl			jpeg;
727db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_stats_ctl		stats;
728db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_aa_ctl			aa;
729db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
730db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
731db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_dm {
732db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_request_dm		request;
733db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_lens_dm			lens;
734db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_sensor_dm		sensor;
735db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_flash_dm			flash;
736db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_hotpixel_dm		hotpixel;
737db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_demosaic_dm		demosaic;
738db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_noisereduction_dm	noise;
739db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_shading_dm		shading;
740db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_geometric_dm		geometric;
741db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_colorcorrection_dm	color;
742db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_tonemap_dm		tonemap;
743db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_edge_dm			edge;
744db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_scaler_dm		scaler;
745db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_jpeg_dm			jpeg;
746db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_stats_dm			stats;
747db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_aa_dm			aa;
748db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
749db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
750db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_sm {
751db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_lens_sm			lens;
752db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_sensor_sm		sensor;
753db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_flash_sm			flash;
754db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_colorcorrection_sm	color;
755db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_tonemap_sm		tonemap;
756db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_scaler_sm		scaler;
757db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_jpeg_sm			jpeg;
758db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_stats_sm			stats;
759db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_aa_sm			aa;
760db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
761db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** User-defined(ispfw specific) static metadata. */
762db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_lens_usm			lensUd;
763db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_sensor_usm		sensorUd;
764db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_flash_usm		flashUd;
765db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
766db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
767db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/** \brief
768db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	User-defined control for lens.
769db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann*/
770db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_lens_uctl {
771db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_lens_ctl ctl;
772db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
773db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** It depends by af algorithm(normally 255 or 1023) */
774db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t        maxPos;
775db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** Some actuator support slew rate control. */
776db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t        slewRate;
777db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
778db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
779db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/** \brief
780db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	User-defined metadata for lens.
781db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann*/
782db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_lens_udm {
783db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** It depends by af algorithm(normally 255 or 1023) */
784db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t        maxPos;
785db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** Some actuator support slew rate control. */
786db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t        slewRate;
787db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
788db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
789db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/** \brief
790db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	User-defined control for sensor.
791db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann*/
792db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_sensor_uctl {
793db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_sensor_ctl ctl;
794db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** Dynamic frame duration.
795db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	This feature is decided to max. value between
796db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	'sensor.exposureTime'+alpha and 'sensor.frameDuration'.
797db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
798db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint64_t        dynamicFrameDuration;
799db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
800db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
801db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_scaler_uctl {
802db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** \brief
803db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	target address for next frame.
804db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	\remarks
805db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	[0] invalid address, stop
806db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	[others] valid address
807db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
808db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t sccTargetAddress[4];
809db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t scpTargetAddress[4];
810db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
811db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
812db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_flash_uctl {
813db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_flash_ctl ctl;
814db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
815db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
816db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/** \brief
817db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	User-defined control area.
818db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    \remarks
819db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	sensor, lens, flash category is empty value.
820db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	It should be filled by a5 for SET_CAM_CONTROL command.
821db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	Other category is filled already from host.
822db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann*/
823db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_uctl {
824db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** \brief
825db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	Set sensor, lens, flash control for next frame.
826db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	\remarks
827db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	This flag can be combined.
828db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	[0 bit] lens
829db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	[1 bit] sensor
830db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	[2 bit] flash
831db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
832db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t uUpdateBitMap;
833db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
834db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** For debugging */
835db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t uFrameNumber;
836db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
837db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** ispfw specific control(user-defined) of lens. */
838db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_lens_uctl	lensUd;
839db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** ispfw specific control(user-defined) of sensor. */
840db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_sensor_uctl	sensorUd;
841db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/** ispfw specific control(user-defined) of flash. */
842db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_flash_uctl	flashUd;
843db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
844db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_scaler_uctl	scalerUd;
845db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
846db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
847db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_udm {
848db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_lens_udm		lens;
849db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
850db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
851db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_shot {
852db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*google standard area*/
853db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_ctl	ctl;
854db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_dm	dm;
855db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*user defined area*/
856db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_uctl	uctl;
857db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_udm	udm;
858db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/*magic : 23456789*/
859db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		magicNumber;
860db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
861db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
862db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/** \brief
863db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	Structure for interfacing between HAL and driver.
864db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann*/
865db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_shot_ext {
866db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
867db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		setfile change
868db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
869db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[x] mode for setfile
870db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
871db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		setfile;
872db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
873db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
874db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		stream control
875db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
876db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[0] disable stream out
877db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[1] enable stream out
878db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
879db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		request_sensor;
880db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		request_scc;
881db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		request_scp;
882db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
883db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
884db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		post processing control(DRC)
885db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
886db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[0] bypass off
887db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[1] bypass on
888db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
889db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		drc_bypass;
890db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
891db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
892db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		post processing control(DIS)
893db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
894db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[0] bypass off
895db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[1] bypass on
896db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
897db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		dis_bypass;
898db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
899db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
900db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		post processing control(3DNR)
901db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
902db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[0] bypass off
903db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[1] bypass on
904db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
905db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		dnr_bypass;
906db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
907db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
908db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		post processing control(FD)
909db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
910db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[0] bypass off
911db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[1] bypass on
912db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
913db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		fd_bypass;
914db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
915db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/* reserved for future */
916db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		reserved[20];
917db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
918db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
919db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		processing time debugging
920db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
921db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		taken time(unit : struct timeval)
922db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[0][x] flite start
923db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[1][x] flite end
924db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[2][x] DRV Shot
925db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[3][x] DRV Shot done
926db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[4][x] DRV Meta done
927db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
928db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		timeZone[10][2];
929db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
930db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	struct camera2_shot	shot;
931db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    uint8_t		gpsProcessingMethod[32];
932db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    uint8_t     isReprocessing;
933db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    uint8_t     reprocessInput;
934db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann    enum ae_lockmode        ae_lock; // this field is used in cameraHAL only
93548728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    enum awb_lockmode       awb_lock; // this field is used in cameraHAL only
93648728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    enum aa_awbmode         awb_mode_dm;
937db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
938db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
939db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann/** \brief
940db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	stream structure for scaler.
941db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann*/
942db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmannstruct camera2_stream {
943db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
944db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		this address for verifying conincidence of index and address
945db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
946db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[X] kernel virtual address for this buffer
947db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
948db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		address;
949db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
950db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
951db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		this frame count is from FLITE through dm.request.fcount,
952db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		this count increases every frame end. initial value is 1.
953db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
954db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[X] frame count
955db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
956db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		fcount;
957db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
958db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
959db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		this request count is from HAL through ctl.request.fcount,
960db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		this count is the unique.
961db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
962db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[X] request count
963db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
964db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		rcount;
965db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
966db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	/**	\brief
967db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		frame index of isp framemgr.
968db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		this value is for driver internal debugging
969db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		\remarks
970db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann		[X] frame index
971db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	*/
972db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann	uint32_t		findex;
973db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann};
974db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
975db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#define CAM_LENS_CMD		(0x1 << 0x0)
976db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#define CAM_SENSOR_CMD		(0x1 << 0x1)
977db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#define CAM_FLASH_CMD		(0x1 << 0x2)
978db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
979db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
980db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann#endif
981db7d80d7a4d9ef6c8fbca602a78531f82f72f0a2Greg Hackmann
982