1*e01b6f76SAndroid Build Coastguard Worker /*
2*e01b6f76SAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project
3*e01b6f76SAndroid Build Coastguard Worker *
4*e01b6f76SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*e01b6f76SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*e01b6f76SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*e01b6f76SAndroid Build Coastguard Worker *
8*e01b6f76SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*e01b6f76SAndroid Build Coastguard Worker *
10*e01b6f76SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*e01b6f76SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*e01b6f76SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e01b6f76SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*e01b6f76SAndroid Build Coastguard Worker * limitations under the License.
15*e01b6f76SAndroid Build Coastguard Worker */
16*e01b6f76SAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
17*e01b6f76SAndroid Build Coastguard Worker #define LOG_TAG "ExampleCamera"
18*e01b6f76SAndroid Build Coastguard Worker
19*e01b6f76SAndroid Build Coastguard Worker #include <stdint.h>
20*e01b6f76SAndroid Build Coastguard Worker
21*e01b6f76SAndroid Build Coastguard Worker #include <log/log.h>
22*e01b6f76SAndroid Build Coastguard Worker
23*e01b6f76SAndroid Build Coastguard Worker #define ATRACE_TAG (ATRACE_TAG_CAMERA | ATRACE_TAG_HAL)
24*e01b6f76SAndroid Build Coastguard Worker #include <utils/Trace.h>
25*e01b6f76SAndroid Build Coastguard Worker
26*e01b6f76SAndroid Build Coastguard Worker #include <system/camera_metadata.h>
27*e01b6f76SAndroid Build Coastguard Worker #include "Camera.h"
28*e01b6f76SAndroid Build Coastguard Worker #include "ExampleCamera.h"
29*e01b6f76SAndroid Build Coastguard Worker
30*e01b6f76SAndroid Build Coastguard Worker #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
31*e01b6f76SAndroid Build Coastguard Worker
32*e01b6f76SAndroid Build Coastguard Worker namespace default_camera_hal {
33*e01b6f76SAndroid Build Coastguard Worker
ExampleCamera(int id)34*e01b6f76SAndroid Build Coastguard Worker ExampleCamera::ExampleCamera(int id) : Camera(id)
35*e01b6f76SAndroid Build Coastguard Worker {
36*e01b6f76SAndroid Build Coastguard Worker }
37*e01b6f76SAndroid Build Coastguard Worker
~ExampleCamera()38*e01b6f76SAndroid Build Coastguard Worker ExampleCamera::~ExampleCamera()
39*e01b6f76SAndroid Build Coastguard Worker {
40*e01b6f76SAndroid Build Coastguard Worker }
41*e01b6f76SAndroid Build Coastguard Worker
initStaticInfo()42*e01b6f76SAndroid Build Coastguard Worker camera_metadata_t *ExampleCamera::initStaticInfo()
43*e01b6f76SAndroid Build Coastguard Worker {
44*e01b6f76SAndroid Build Coastguard Worker /*
45*e01b6f76SAndroid Build Coastguard Worker * Setup static camera info. This will have to customized per camera
46*e01b6f76SAndroid Build Coastguard Worker * device.
47*e01b6f76SAndroid Build Coastguard Worker */
48*e01b6f76SAndroid Build Coastguard Worker Metadata m;
49*e01b6f76SAndroid Build Coastguard Worker
50*e01b6f76SAndroid Build Coastguard Worker /* android.control */
51*e01b6f76SAndroid Build Coastguard Worker int32_t android_control_ae_available_target_fps_ranges[] = {30, 30};
52*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
53*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_control_ae_available_target_fps_ranges),
54*e01b6f76SAndroid Build Coastguard Worker android_control_ae_available_target_fps_ranges);
55*e01b6f76SAndroid Build Coastguard Worker
56*e01b6f76SAndroid Build Coastguard Worker int32_t android_control_ae_compensation_range[] = {-4, 4};
57*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_CONTROL_AE_COMPENSATION_RANGE,
58*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_control_ae_compensation_range),
59*e01b6f76SAndroid Build Coastguard Worker android_control_ae_compensation_range);
60*e01b6f76SAndroid Build Coastguard Worker
61*e01b6f76SAndroid Build Coastguard Worker camera_metadata_rational_t android_control_ae_compensation_step[] = {{2,1}};
62*e01b6f76SAndroid Build Coastguard Worker m.addRational(ANDROID_CONTROL_AE_COMPENSATION_STEP,
63*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_control_ae_compensation_step),
64*e01b6f76SAndroid Build Coastguard Worker android_control_ae_compensation_step);
65*e01b6f76SAndroid Build Coastguard Worker
66*e01b6f76SAndroid Build Coastguard Worker int32_t android_control_max_regions[] = {/*AE*/ 1,/*AWB*/ 1,/*AF*/ 1};
67*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_CONTROL_MAX_REGIONS,
68*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_control_max_regions),
69*e01b6f76SAndroid Build Coastguard Worker android_control_max_regions);
70*e01b6f76SAndroid Build Coastguard Worker
71*e01b6f76SAndroid Build Coastguard Worker /* android.jpeg */
72*e01b6f76SAndroid Build Coastguard Worker int32_t android_jpeg_available_thumbnail_sizes[] = {0, 0, 128, 96};
73*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
74*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_jpeg_available_thumbnail_sizes),
75*e01b6f76SAndroid Build Coastguard Worker android_jpeg_available_thumbnail_sizes);
76*e01b6f76SAndroid Build Coastguard Worker
77*e01b6f76SAndroid Build Coastguard Worker int32_t android_jpeg_max_size[] = {13 * 1024 * 1024}; // 13MB
78*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_JPEG_MAX_SIZE,
79*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_jpeg_max_size),
80*e01b6f76SAndroid Build Coastguard Worker android_jpeg_max_size);
81*e01b6f76SAndroid Build Coastguard Worker
82*e01b6f76SAndroid Build Coastguard Worker /* android.lens */
83*e01b6f76SAndroid Build Coastguard Worker float android_lens_info_available_focal_lengths[] = {1.0};
84*e01b6f76SAndroid Build Coastguard Worker m.addFloat(ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS,
85*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_lens_info_available_focal_lengths),
86*e01b6f76SAndroid Build Coastguard Worker android_lens_info_available_focal_lengths);
87*e01b6f76SAndroid Build Coastguard Worker
88*e01b6f76SAndroid Build Coastguard Worker /* android.request */
89*e01b6f76SAndroid Build Coastguard Worker int32_t android_request_max_num_output_streams[] = {0, 3, 1};
90*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
91*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_request_max_num_output_streams),
92*e01b6f76SAndroid Build Coastguard Worker android_request_max_num_output_streams);
93*e01b6f76SAndroid Build Coastguard Worker
94*e01b6f76SAndroid Build Coastguard Worker /* android.scaler */
95*e01b6f76SAndroid Build Coastguard Worker int32_t android_scaler_available_formats[] = {
96*e01b6f76SAndroid Build Coastguard Worker HAL_PIXEL_FORMAT_RAW16,
97*e01b6f76SAndroid Build Coastguard Worker HAL_PIXEL_FORMAT_BLOB,
98*e01b6f76SAndroid Build Coastguard Worker HAL_PIXEL_FORMAT_RGBA_8888,
99*e01b6f76SAndroid Build Coastguard Worker HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
100*e01b6f76SAndroid Build Coastguard Worker // These are handled by YCbCr_420_888
101*e01b6f76SAndroid Build Coastguard Worker // HAL_PIXEL_FORMAT_YV12,
102*e01b6f76SAndroid Build Coastguard Worker // HAL_PIXEL_FORMAT_YCrCb_420_SP,
103*e01b6f76SAndroid Build Coastguard Worker HAL_PIXEL_FORMAT_YCbCr_420_888};
104*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SCALER_AVAILABLE_FORMATS,
105*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_formats),
106*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_formats);
107*e01b6f76SAndroid Build Coastguard Worker
108*e01b6f76SAndroid Build Coastguard Worker int64_t android_scaler_available_jpeg_min_durations[] = {1};
109*e01b6f76SAndroid Build Coastguard Worker m.addInt64(ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS,
110*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_jpeg_min_durations),
111*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_jpeg_min_durations);
112*e01b6f76SAndroid Build Coastguard Worker
113*e01b6f76SAndroid Build Coastguard Worker int32_t android_scaler_available_jpeg_sizes[] = {640, 480};
114*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SCALER_AVAILABLE_JPEG_SIZES,
115*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_jpeg_sizes),
116*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_jpeg_sizes);
117*e01b6f76SAndroid Build Coastguard Worker
118*e01b6f76SAndroid Build Coastguard Worker float android_scaler_available_max_digital_zoom[] = {1};
119*e01b6f76SAndroid Build Coastguard Worker m.addFloat(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
120*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_max_digital_zoom),
121*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_max_digital_zoom);
122*e01b6f76SAndroid Build Coastguard Worker
123*e01b6f76SAndroid Build Coastguard Worker int64_t android_scaler_available_processed_min_durations[] = {1};
124*e01b6f76SAndroid Build Coastguard Worker m.addInt64(ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS,
125*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_processed_min_durations),
126*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_processed_min_durations);
127*e01b6f76SAndroid Build Coastguard Worker
128*e01b6f76SAndroid Build Coastguard Worker int32_t android_scaler_available_processed_sizes[] = {640, 480};
129*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES,
130*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_processed_sizes),
131*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_processed_sizes);
132*e01b6f76SAndroid Build Coastguard Worker
133*e01b6f76SAndroid Build Coastguard Worker int64_t android_scaler_available_raw_min_durations[] = {1};
134*e01b6f76SAndroid Build Coastguard Worker m.addInt64(ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS,
135*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_raw_min_durations),
136*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_raw_min_durations);
137*e01b6f76SAndroid Build Coastguard Worker
138*e01b6f76SAndroid Build Coastguard Worker int32_t android_scaler_available_raw_sizes[] = {640, 480};
139*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SCALER_AVAILABLE_RAW_SIZES,
140*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_scaler_available_raw_sizes),
141*e01b6f76SAndroid Build Coastguard Worker android_scaler_available_raw_sizes);
142*e01b6f76SAndroid Build Coastguard Worker
143*e01b6f76SAndroid Build Coastguard Worker /* android.sensor */
144*e01b6f76SAndroid Build Coastguard Worker
145*e01b6f76SAndroid Build Coastguard Worker int32_t android_sensor_info_active_array_size[] = {0, 0, 640, 480};
146*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
147*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_sensor_info_active_array_size),
148*e01b6f76SAndroid Build Coastguard Worker android_sensor_info_active_array_size);
149*e01b6f76SAndroid Build Coastguard Worker
150*e01b6f76SAndroid Build Coastguard Worker int32_t android_sensor_info_sensitivity_range[] =
151*e01b6f76SAndroid Build Coastguard Worker {100, 1600};
152*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SENSOR_INFO_SENSITIVITY_RANGE,
153*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_sensor_info_sensitivity_range),
154*e01b6f76SAndroid Build Coastguard Worker android_sensor_info_sensitivity_range);
155*e01b6f76SAndroid Build Coastguard Worker
156*e01b6f76SAndroid Build Coastguard Worker int64_t android_sensor_info_max_frame_duration[] = {30000000000};
157*e01b6f76SAndroid Build Coastguard Worker m.addInt64(ANDROID_SENSOR_INFO_MAX_FRAME_DURATION,
158*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_sensor_info_max_frame_duration),
159*e01b6f76SAndroid Build Coastguard Worker android_sensor_info_max_frame_duration);
160*e01b6f76SAndroid Build Coastguard Worker
161*e01b6f76SAndroid Build Coastguard Worker float android_sensor_info_physical_size[] = {3.2, 2.4};
162*e01b6f76SAndroid Build Coastguard Worker m.addFloat(ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
163*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_sensor_info_physical_size),
164*e01b6f76SAndroid Build Coastguard Worker android_sensor_info_physical_size);
165*e01b6f76SAndroid Build Coastguard Worker
166*e01b6f76SAndroid Build Coastguard Worker int32_t android_sensor_info_pixel_array_size[] = {640, 480};
167*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
168*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_sensor_info_pixel_array_size),
169*e01b6f76SAndroid Build Coastguard Worker android_sensor_info_pixel_array_size);
170*e01b6f76SAndroid Build Coastguard Worker
171*e01b6f76SAndroid Build Coastguard Worker int32_t android_sensor_orientation[] = {0};
172*e01b6f76SAndroid Build Coastguard Worker m.addInt32(ANDROID_SENSOR_ORIENTATION,
173*e01b6f76SAndroid Build Coastguard Worker ARRAY_SIZE(android_sensor_orientation),
174*e01b6f76SAndroid Build Coastguard Worker android_sensor_orientation);
175*e01b6f76SAndroid Build Coastguard Worker
176*e01b6f76SAndroid Build Coastguard Worker /* End of static camera characteristics */
177*e01b6f76SAndroid Build Coastguard Worker
178*e01b6f76SAndroid Build Coastguard Worker return clone_camera_metadata(m.get());
179*e01b6f76SAndroid Build Coastguard Worker }
180*e01b6f76SAndroid Build Coastguard Worker
initDevice()181*e01b6f76SAndroid Build Coastguard Worker int ExampleCamera::initDevice()
182*e01b6f76SAndroid Build Coastguard Worker {
183*e01b6f76SAndroid Build Coastguard Worker int res;
184*e01b6f76SAndroid Build Coastguard Worker Metadata base;
185*e01b6f76SAndroid Build Coastguard Worker
186*e01b6f76SAndroid Build Coastguard Worker // Create standard settings templates from copies of base metadata
187*e01b6f76SAndroid Build Coastguard Worker // TODO: use vendor tags in base metadata
188*e01b6f76SAndroid Build Coastguard Worker res = base.add1UInt8(ANDROID_CONTROL_MODE, ANDROID_CONTROL_MODE_OFF);
189*e01b6f76SAndroid Build Coastguard Worker if (res)
190*e01b6f76SAndroid Build Coastguard Worker return res;
191*e01b6f76SAndroid Build Coastguard Worker
192*e01b6f76SAndroid Build Coastguard Worker // Use base settings to create all other templates and set them
193*e01b6f76SAndroid Build Coastguard Worker res = setPreviewTemplate(base);
194*e01b6f76SAndroid Build Coastguard Worker if (res)
195*e01b6f76SAndroid Build Coastguard Worker return res;
196*e01b6f76SAndroid Build Coastguard Worker res = setStillTemplate(base);
197*e01b6f76SAndroid Build Coastguard Worker if (res)
198*e01b6f76SAndroid Build Coastguard Worker return res;
199*e01b6f76SAndroid Build Coastguard Worker res = setRecordTemplate(base);
200*e01b6f76SAndroid Build Coastguard Worker if (res)
201*e01b6f76SAndroid Build Coastguard Worker return res;
202*e01b6f76SAndroid Build Coastguard Worker res = setSnapshotTemplate(base);
203*e01b6f76SAndroid Build Coastguard Worker if (res)
204*e01b6f76SAndroid Build Coastguard Worker return res;
205*e01b6f76SAndroid Build Coastguard Worker res = setZslTemplate(base);
206*e01b6f76SAndroid Build Coastguard Worker if (res)
207*e01b6f76SAndroid Build Coastguard Worker return res;
208*e01b6f76SAndroid Build Coastguard Worker
209*e01b6f76SAndroid Build Coastguard Worker return 0;
210*e01b6f76SAndroid Build Coastguard Worker }
211*e01b6f76SAndroid Build Coastguard Worker
setPreviewTemplate(Metadata m)212*e01b6f76SAndroid Build Coastguard Worker int ExampleCamera::setPreviewTemplate(Metadata m)
213*e01b6f76SAndroid Build Coastguard Worker {
214*e01b6f76SAndroid Build Coastguard Worker // Setup default preview controls
215*e01b6f76SAndroid Build Coastguard Worker int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
216*e01b6f76SAndroid Build Coastguard Worker ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW);
217*e01b6f76SAndroid Build Coastguard Worker
218*e01b6f76SAndroid Build Coastguard Worker if (res)
219*e01b6f76SAndroid Build Coastguard Worker return res;
220*e01b6f76SAndroid Build Coastguard Worker // TODO: set fast auto-focus, auto-whitebalance, auto-exposure, auto flash
221*e01b6f76SAndroid Build Coastguard Worker return setTemplate(CAMERA3_TEMPLATE_PREVIEW, m.get());
222*e01b6f76SAndroid Build Coastguard Worker }
223*e01b6f76SAndroid Build Coastguard Worker
setStillTemplate(Metadata m)224*e01b6f76SAndroid Build Coastguard Worker int ExampleCamera::setStillTemplate(Metadata m)
225*e01b6f76SAndroid Build Coastguard Worker {
226*e01b6f76SAndroid Build Coastguard Worker int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
227*e01b6f76SAndroid Build Coastguard Worker ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
228*e01b6f76SAndroid Build Coastguard Worker // Setup default still capture controls
229*e01b6f76SAndroid Build Coastguard Worker if (res)
230*e01b6f76SAndroid Build Coastguard Worker return res;
231*e01b6f76SAndroid Build Coastguard Worker // TODO: set fast auto-focus, auto-whitebalance, auto-exposure, auto flash
232*e01b6f76SAndroid Build Coastguard Worker return setTemplate(CAMERA3_TEMPLATE_STILL_CAPTURE, m.get());
233*e01b6f76SAndroid Build Coastguard Worker }
234*e01b6f76SAndroid Build Coastguard Worker
setRecordTemplate(Metadata m)235*e01b6f76SAndroid Build Coastguard Worker int ExampleCamera::setRecordTemplate(Metadata m)
236*e01b6f76SAndroid Build Coastguard Worker {
237*e01b6f76SAndroid Build Coastguard Worker int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
238*e01b6f76SAndroid Build Coastguard Worker ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
239*e01b6f76SAndroid Build Coastguard Worker // Setup default video record controls
240*e01b6f76SAndroid Build Coastguard Worker if (res)
241*e01b6f76SAndroid Build Coastguard Worker return res;
242*e01b6f76SAndroid Build Coastguard Worker // TODO: set slow auto-focus, auto-whitebalance, auto-exposure, flash off
243*e01b6f76SAndroid Build Coastguard Worker return setTemplate(CAMERA3_TEMPLATE_VIDEO_RECORD, m.get());
244*e01b6f76SAndroid Build Coastguard Worker }
245*e01b6f76SAndroid Build Coastguard Worker
setSnapshotTemplate(Metadata m)246*e01b6f76SAndroid Build Coastguard Worker int ExampleCamera::setSnapshotTemplate(Metadata m)
247*e01b6f76SAndroid Build Coastguard Worker {
248*e01b6f76SAndroid Build Coastguard Worker int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
249*e01b6f76SAndroid Build Coastguard Worker ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT);
250*e01b6f76SAndroid Build Coastguard Worker // Setup default video snapshot controls
251*e01b6f76SAndroid Build Coastguard Worker if (res)
252*e01b6f76SAndroid Build Coastguard Worker return res;
253*e01b6f76SAndroid Build Coastguard Worker // TODO: set slow auto-focus, auto-whitebalance, auto-exposure, flash off
254*e01b6f76SAndroid Build Coastguard Worker return setTemplate(CAMERA3_TEMPLATE_VIDEO_SNAPSHOT, m.get());
255*e01b6f76SAndroid Build Coastguard Worker }
256*e01b6f76SAndroid Build Coastguard Worker
setZslTemplate(Metadata m)257*e01b6f76SAndroid Build Coastguard Worker int ExampleCamera::setZslTemplate(Metadata m)
258*e01b6f76SAndroid Build Coastguard Worker {
259*e01b6f76SAndroid Build Coastguard Worker int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
260*e01b6f76SAndroid Build Coastguard Worker ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG);
261*e01b6f76SAndroid Build Coastguard Worker // Setup default zero shutter lag controls
262*e01b6f76SAndroid Build Coastguard Worker if (res)
263*e01b6f76SAndroid Build Coastguard Worker return res;
264*e01b6f76SAndroid Build Coastguard Worker // TODO: set reprocessing parameters for zsl input queue
265*e01b6f76SAndroid Build Coastguard Worker return setTemplate(CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG, m.get());
266*e01b6f76SAndroid Build Coastguard Worker }
267*e01b6f76SAndroid Build Coastguard Worker
isValidCaptureSettings(const camera_metadata_t *)268*e01b6f76SAndroid Build Coastguard Worker bool ExampleCamera::isValidCaptureSettings(
269*e01b6f76SAndroid Build Coastguard Worker const camera_metadata_t* /*settings*/)
270*e01b6f76SAndroid Build Coastguard Worker {
271*e01b6f76SAndroid Build Coastguard Worker // TODO: reject settings that cannot be captured
272*e01b6f76SAndroid Build Coastguard Worker return true;
273*e01b6f76SAndroid Build Coastguard Worker }
274*e01b6f76SAndroid Build Coastguard Worker
275*e01b6f76SAndroid Build Coastguard Worker } // namespace default_camera_hal
276