blob: 29dc167d20476e19d18456ba2c27db204267d674 [file] [log] [blame]
Jiyoung Shinc15a6b02012-06-05 01:08:14 -07001/*
2**
3** Copyright 2008, The Android Open Source Project
4** Copyright 2012, Samsung Electronics Co. LTD
5**
6** Licensed under the Apache License, Version 2.0 (the "License");
7** you may not use this file except in compliance with the License.
8** You may obtain a copy of the License at
9**
10** http://www.apache.org/licenses/LICENSE-2.0
11**
12** Unless required by applicable law or agreed to in writing, software
13** distributed under the License is distributed on an "AS IS" BASIS,
14** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15** See the License for the specific language governing permissions and
16** limitations under the License.
17*/
18
19/*!
20 * \file MetadataConverter.cpp
21 * \brief source file for Metadata converter ( for camera hal2 implementation )
22 * \author Sungjoong Kang(sj3.kang@samsung.com)
23 * \date 2012/05/31
24 *
25 * <b>Revision History: </b>
26 * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n
27 * Initial Release
28 */
29
Sungjoong Kangad378612012-08-17 12:34:33 -070030//#define LOG_NDEBUG 0
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070031#define LOG_TAG "MetadataConverter"
32#include <utils/Log.h>
33
34#include "MetadataConverter.h"
Sungjoong Kange4657e32012-08-28 15:02:19 -070035#include "exynos_format.h"
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070036
37namespace android {
38
39
40MetadataConverter::MetadataConverter()
41{
42 return;
43}
44
45
46MetadataConverter::~MetadataConverter()
47{
Sungjoong Kanged4ad5f2012-09-14 13:50:31 -070048 ALOGV("DEBUG(%s)destroy!!:", __FUNCTION__);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070049 return;
50}
51
52status_t MetadataConverter::CheckEntryTypeMismatch(camera_metadata_entry_t * entry,
53 uint8_t type)
54{
55 if (!(entry->type==type))
56 {
57 ALOGV("DEBUG(%s):Metadata Missmatch tag(%s) type (%d) count(%d)",
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090058 __FUNCTION__, get_camera_metadata_tag_name(entry->tag), entry->type, entry->count);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070059 return BAD_VALUE;
60 }
61 return NO_ERROR;
62}
63
64status_t MetadataConverter::CheckEntryTypeMismatch(camera_metadata_entry_t * entry,
65 uint8_t type, size_t count)
66{
67 if (!((entry->type==type)&&(entry->count==count)))
68 {
69 ALOGV("DEBUG(%s):Metadata Missmatch tag(%s) type (%d) count(%d)",
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090070 __FUNCTION__, get_camera_metadata_tag_name(entry->tag), entry->type, entry->count);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070071 return BAD_VALUE;
72 }
73 return NO_ERROR;
74}
75
Sungjoong Kangbe494d12012-08-04 15:36:56 -070076status_t MetadataConverter::ToInternalShot(camera_metadata_t * request, struct camera2_shot_ext * dst_ext)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070077{
78 uint32_t num_entry = 0;
79 uint32_t index = 0;
80 uint32_t i = 0;
81 camera_metadata_entry_t curr_entry;
Sungjoong Kangbe494d12012-08-04 15:36:56 -070082 struct camera2_shot * dst = NULL;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070083
Sungjoong Kangbe494d12012-08-04 15:36:56 -070084 if (request == NULL || dst_ext == NULL)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070085 return BAD_VALUE;
86
Sungjoong Kangb56dcc02012-08-08 13:38:09 -070087 memset((void*)dst_ext, 0, sizeof(struct camera2_shot_ext));
88 dst = &dst_ext->shot;
Sungjoong Kangbe494d12012-08-04 15:36:56 -070089
Sungjoong Kangb56dcc02012-08-08 13:38:09 -070090 dst->magicNumber = 0x23456789;
Sungjoong Kang2bdec062012-08-17 15:47:56 -070091 dst->ctl.aa.aeTargetFpsRange[0] = 15;
92 dst->ctl.aa.aeTargetFpsRange[1] = 30;
93 dst->ctl.aa.aeExpCompensation = 5;
94
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070095 num_entry = (uint32_t)get_camera_metadata_data_count(request);
96 for (index = 0 ; index < num_entry ; index++) {
97
98 if (get_camera_metadata_entry(request, index, &curr_entry)==0) {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070099 switch (curr_entry.tag) {
100
101 case ANDROID_LENS_FOCUS_DISTANCE:
102 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
103 break;
104 dst->ctl.lens.focusDistance = curr_entry.data.f[0];
105 break;
106
107 case ANDROID_LENS_APERTURE:
108 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
109 break;
110 dst->ctl.lens.aperture = curr_entry.data.f[0];
111 break;
112
113 case ANDROID_LENS_FOCAL_LENGTH:
114 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
115 break;
116 dst->ctl.lens.focalLength = curr_entry.data.f[0];
117 break;
118
119 case ANDROID_LENS_FILTER_DENSITY:
120 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
121 break;
122 dst->ctl.lens.filterDensity = curr_entry.data.f[0];
123 break;
124
125 case ANDROID_LENS_OPTICAL_STABILIZATION_MODE:
126 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
127 break;
128 dst->ctl.lens.opticalStabilizationMode =
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700129 (enum optical_stabilization_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700130 break;
131
132
Sungjoong Kanga8be0012012-09-19 00:13:43 -0700133 case ANDROID_SENSOR_TIMESTAMP:
134 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
135 break;
136 dst->dm.sensor.timeStamp = curr_entry.data.i64[0];
Sungjoong Kanga8be0012012-09-19 00:13:43 -0700137 break;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700138
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700139
140 case ANDROID_FLASH_MODE:
141 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
142 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700143 dst->ctl.flash.flashMode = (enum flash_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700144 break;
145
146 case ANDROID_FLASH_FIRING_POWER:
147 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
148 break;
149 dst->ctl.flash.firingPower = curr_entry.data.u8[0];
150 break;
151
152 case ANDROID_FLASH_FIRING_TIME:
153 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
154 break;
155 dst->ctl.flash.firingTime = curr_entry.data.i64[0];
156 break;
157
158
159
Sungjoong Kange4657e32012-08-28 15:02:19 -0700160 case ANDROID_SCALER_CROP_REGION:
161 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 3))
162 break;
163 for (i=0 ; i<curr_entry.count ; i++)
164 dst->ctl.scaler.cropRegion[i] = ALIGN(curr_entry.data.i32[i], 2);
165 break;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700166
167
168 case ANDROID_JPEG_QUALITY:
169 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
170 break;
171 dst->ctl.jpeg.quality= curr_entry.data.i32[0];
172 break;
173
174 case ANDROID_JPEG_THUMBNAIL_SIZE:
175 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 2))
176 break;
177 for (i=0 ; i<curr_entry.count ; i++)
178 dst->ctl.jpeg.thumbnailSize[i] = curr_entry.data.i32[i];
179 break;
180
181 case ANDROID_JPEG_THUMBNAIL_QUALITY:
182 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
183 break;
184 dst->ctl.jpeg.thumbnailQuality= curr_entry.data.i32[0];
185 break;
186
187 case ANDROID_JPEG_GPS_COORDINATES:
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700188 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_DOUBLE, 3))
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700189 break;
190 for (i=0 ; i<curr_entry.count ; i++)
191 dst->ctl.jpeg.gpsCoordinates[i] = curr_entry.data.d[i];
192 break;
193
194 case ANDROID_JPEG_GPS_PROCESSING_METHOD:
195 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 32))
196 break;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700197 for (i=0 ; i<curr_entry.count ; i++)
198 dst_ext->gpsProcessingMethod[i] = curr_entry.data.u8[i];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700199 break;
200
201 case ANDROID_JPEG_GPS_TIMESTAMP:
202 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
203 break;
204 dst->ctl.jpeg.gpsTimestamp = curr_entry.data.i64[0];
205 break;
206
207 case ANDROID_JPEG_ORIENTATION:
208 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
209 break;
210 dst->ctl.jpeg.orientation = curr_entry.data.i32[0];
211 break;
212
213
214
215 case ANDROID_STATS_FACE_DETECT_MODE:
216 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
217 break;
Sungjoong Kang15fd8232012-08-23 16:16:44 -0700218 dst->ctl.stats.faceDetectMode = (enum facedetect_mode)(curr_entry.data.u8[0] + 1);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700219 break;
220
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700221 case ANDROID_CONTROL_CAPTURE_INTENT:
222 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
223 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700224 dst->ctl.aa.captureIntent = (enum aa_capture_intent)curr_entry.data.u8[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900225 break;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700226
227 case ANDROID_CONTROL_MODE:
228 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
229 break;
Sungjoong Kang48728d42012-09-26 13:48:48 -0700230 dst->ctl.aa.mode = (enum aa_mode)(curr_entry.data.u8[0] + 1);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700231 break;
232
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700233
234 case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE:
235 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
236 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700237 dst->ctl.aa.videoStabilizationMode = curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700238 break;
239
240 case ANDROID_CONTROL_AE_MODE:
241 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
242 break;
Younghwan Joo53f62ad2012-09-12 11:50:04 -0700243 dst->ctl.aa.aeMode = (enum aa_aemode)(curr_entry.data.u8[0] + 2);
244 // skip locked mode
245 if (dst->ctl.aa.aeMode == AA_AEMODE_LOCKED)
246 dst->ctl.aa.aeMode = AA_AEMODE_OFF;
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700247 ALOGV("DEBUG(%s): ANDROID_CONTROL_AE_MODE (%d)", __FUNCTION__, dst->ctl.aa.aeMode);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700248 break;
249
Younghwan Joo53f62ad2012-09-12 11:50:04 -0700250 case ANDROID_CONTROL_AE_LOCK:
251 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
252 break;
253 dst_ext->ae_lock = (enum ae_lockmode)(curr_entry.data.u8[0]);
254 break;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700255
256 case ANDROID_CONTROL_AE_EXP_COMPENSATION:
257 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
258 break;
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700259 dst->ctl.aa.aeExpCompensation = curr_entry.data.i32[0] + 5;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700260 break;
261
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700262 case ANDROID_CONTROL_AWB_MODE:
263 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
264 break;
Younghwan Joo53f62ad2012-09-12 11:50:04 -0700265 dst->ctl.aa.awbMode = (enum aa_awbmode)(curr_entry.data.u8[0] + 2);
266 // skip locked mode
267 if (dst->ctl.aa.awbMode == AA_AWBMODE_LOCKED)
268 dst->ctl.aa.awbMode = AA_AWBMODE_OFF;
Sungjoong Kang48728d42012-09-26 13:48:48 -0700269 dst_ext->awb_mode_dm = (enum aa_awbmode)(curr_entry.data.u8[0] + 2);
Younghwan Joo53f62ad2012-09-12 11:50:04 -0700270 break;
271
272 case ANDROID_CONTROL_AWB_LOCK:
273 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
274 break;
275 dst_ext->awb_lock = (enum awb_lockmode)(curr_entry.data.u8[0]);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700276 break;
277
278 case ANDROID_CONTROL_AWB_REGIONS:
279 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 5))
280 break;
281 for (i=0 ; i<curr_entry.count ; i++)
282 dst->ctl.aa.awbRegions[i] = curr_entry.data.i32[i];
283 break;
284
285 case ANDROID_CONTROL_AF_MODE:
286 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
287 break;
Sungjoong Kang0f26b202012-08-17 15:43:12 -0700288 dst->ctl.aa.afMode = (enum aa_afmode)(curr_entry.data.u8[0] + 1);
Younghwan Joofdbaf5d2012-09-15 01:22:10 -0700289 if (dst->ctl.aa.afMode == AA_AFMODE_OFF)
290 dst->ctl.aa.afMode = AA_AFMODE_MANUAL;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700291 break;
292
293 case ANDROID_CONTROL_AF_REGIONS:
294 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 5))
295 break;
296 for (i=0 ; i<curr_entry.count ; i++)
297 dst->ctl.aa.afRegions[i] = curr_entry.data.i32[i];
298 break;
299
300
301
302 case ANDROID_REQUEST_ID:
303 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
304 break;
305 dst->ctl.request.id = curr_entry.data.i32[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900306 ALOGV("DEBUG(%s): ANDROID_REQUEST_ID (%d)", __FUNCTION__, dst->ctl.request.id);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700307 break;
308
309 case ANDROID_REQUEST_METADATA_MODE:
310 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
311 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700312 dst->ctl.request.metadataMode = (enum metadata_mode)curr_entry.data.u8[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900313 ALOGV("DEBUG(%s): ANDROID_REQUEST_METADATA_MODE (%d)", __FUNCTION__, (int)( dst->ctl.request.metadataMode));
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700314 break;
315
316 case ANDROID_REQUEST_OUTPUT_STREAMS:
317 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE))
318 break;
Sungjoong Kangad378612012-08-17 12:34:33 -0700319
Sungjoong Kang5506ceb2012-09-11 20:41:10 -0700320 dst->ctl.request.outputStreams[0] = 0;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900321 for (i=0 ; i<curr_entry.count ; i++) {
Sungjoong Kang5506ceb2012-09-11 20:41:10 -0700322 ALOGV("DEBUG(%s): OUTPUT_STREAM[%d] = %d ", __FUNCTION__, i, curr_entry.data.u8[i]);
323 dst->ctl.request.outputStreams[0] |= (1 << curr_entry.data.u8[i]);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900324 }
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700325 break;
326
Sungjoong Kang5506ceb2012-09-11 20:41:10 -0700327 case ANDROID_REQUEST_INPUT_STREAMS:
328 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE))
329 break;
330
331 for (i=0 ; i<curr_entry.count ; i++) {
332 dst_ext->reprocessInput = curr_entry.data.u8[0];
333 ALOGV("DEBUG(%s): ANDROID_REQUEST_INPUT_STREAMS[%d] = %d ", __FUNCTION__, i, dst_ext->reprocessInput);
334 }
335 break;
336
337 case ANDROID_REQUEST_TYPE:
338 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
339 break;
340 dst_ext->isReprocessing = curr_entry.data.u8[0];
341 ALOGV("DEBUG(%s): ANDROID_REQUEST_TYPE (%d)", __FUNCTION__, dst_ext->isReprocessing);
342 break;
343
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700344 case ANDROID_REQUEST_FRAME_COUNT:
345 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
346 break;
347 dst->ctl.request.frameCount = curr_entry.data.i32[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900348 ALOGV("DEBUG(%s): ANDROID_REQUEST_FRAME_COUNT (%d)", __FUNCTION__, dst->ctl.request.frameCount);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700349 break;
350
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700351 case ANDROID_CONTROL_SCENE_MODE:
352 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
353 break;
354 dst->ctl.aa.sceneMode = (enum aa_scene_mode)(curr_entry.data.u8[0] + 1);
Sungjoong Kang83bc2902012-09-29 00:21:47 -0700355 break;
356
357 case ANDROID_CONTROL_AE_TARGET_FPS_RANGE:
358 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 2))
359 break;
360 for (i=0 ; i<curr_entry.count ; i++)
361 dst->ctl.aa.aeTargetFpsRange[i] = curr_entry.data.i32[i];
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700362 break;
363
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700364 default:
Sungjoong Kangad378612012-08-17 12:34:33 -0700365 ALOGV("DEBUG(%s):Bad Metadata tag (%d)", __FUNCTION__, curr_entry.tag);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700366 break;
367 }
368 }
369 }
Sungjoong Kang48728d42012-09-26 13:48:48 -0700370 if (dst->ctl.aa.mode != AA_CONTROL_USE_SCENE_MODE)
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700371 dst->ctl.aa.sceneMode = AA_SCENE_MODE_UNSUPPORTED;
372 ApplySceneModeParameters(request, dst_ext);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700373 return NO_ERROR;
374}
375
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700376status_t MetadataConverter::ApplySceneModeParameters(camera_metadata_t * request, struct camera2_shot_ext * dst_ext)
377{
378 camera_metadata_entry_t curr_entry;
379 struct camera2_shot * dst = NULL;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700380
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700381 ALOGV("DEBUG(%s):", __FUNCTION__);
382
383 dst = &(dst_ext->shot);
384
385 switch (dst->ctl.aa.sceneMode) {
386
387 case AA_SCENE_MODE_ACTION:
388 dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
389 if (dst->ctl.aa.aeMode != AA_AEMODE_LOCKED)
390 dst->ctl.aa.aeMode = AA_AEMODE_ON;
391 dst->ctl.aa.awbMode = AA_AWBMODE_WB_AUTO;
Sungjoong Kang48728d42012-09-26 13:48:48 -0700392 dst_ext->awb_mode_dm = AA_AWBMODE_WB_AUTO;
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700393 dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
394 dst->ctl.aa.isoValue = 0;
395 dst->ctl.aa.aeTargetFpsRange[0] = 30;
396 dst->ctl.aa.aeTargetFpsRange[1] = 30;
397
398 dst->ctl.noise.mode = PROCESSING_MODE_FAST;
399 dst->ctl.noise.strength = 0;
400 dst->ctl.edge.mode = PROCESSING_MODE_FAST;
401 dst->ctl.edge.strength = 0;
402
403 dst->ctl.color.saturation = 3; // means '0'
404 // FLASH
405 // METERING
406 break;
407
408 case AA_SCENE_MODE_PARTY:
409 dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
410 if (dst->ctl.aa.aeMode != AA_AEMODE_LOCKED)
411 dst->ctl.aa.aeMode = AA_AEMODE_ON;
412 dst->ctl.aa.awbMode = AA_AWBMODE_WB_AUTO;
Sungjoong Kang48728d42012-09-26 13:48:48 -0700413 dst_ext->awb_mode_dm = AA_AWBMODE_WB_AUTO;
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700414 dst->ctl.aa.isoMode = AA_ISOMODE_MANUAL;
415 dst->ctl.aa.isoValue = 200;
416 dst->ctl.aa.aeTargetFpsRange[0] = 15;
417 dst->ctl.aa.aeTargetFpsRange[1] = 30;
418
419 dst->ctl.noise.mode = PROCESSING_MODE_FAST;
420 dst->ctl.noise.strength = 0;
421 dst->ctl.edge.mode = PROCESSING_MODE_FAST;
422 dst->ctl.edge.strength = 0;
423
424 dst->ctl.color.saturation = 4; // means '+1'
425 // FLASH
426 // METERING
427 break;
428
429 case AA_SCENE_MODE_SUNSET:
430 dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
431 if (dst->ctl.aa.aeMode != AA_AEMODE_LOCKED)
432 dst->ctl.aa.aeMode = AA_AEMODE_ON;
433 dst->ctl.aa.awbMode = AA_AWBMODE_WB_DAYLIGHT;
Sungjoong Kang48728d42012-09-26 13:48:48 -0700434 dst_ext->awb_mode_dm = AA_AWBMODE_WB_DAYLIGHT;
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700435 dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
436 dst->ctl.aa.isoValue = 0;
437 dst->ctl.aa.aeTargetFpsRange[0] = 15;
438 dst->ctl.aa.aeTargetFpsRange[1] = 30;
439
440 dst->ctl.noise.mode = PROCESSING_MODE_FAST;
441 dst->ctl.noise.strength = 0;
442 dst->ctl.edge.mode = PROCESSING_MODE_FAST;
443 dst->ctl.edge.strength = 0;
444
445 dst->ctl.color.saturation = 3; // means '0'
446 // FLASH
447 // METERING
448 break;
449
450 case AA_SCENE_MODE_NIGHT:
451 dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
Sungjoong Kanga15b4e32012-08-28 12:55:39 -0700452 dst->ctl.aa.aeMode = AA_AEMODE_ON; // AE_LOCK is prohibited
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700453 dst->ctl.aa.awbMode = AA_AWBMODE_WB_AUTO;
Sungjoong Kang48728d42012-09-26 13:48:48 -0700454 dst_ext->awb_mode_dm = AA_AWBMODE_WB_AUTO;
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700455 dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
456 dst->ctl.aa.isoValue = 0;
Sungjoong Kanga15b4e32012-08-28 12:55:39 -0700457 dst->ctl.aa.aeTargetFpsRange[0] = 8;
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700458 dst->ctl.aa.aeTargetFpsRange[1] = 30;
459
460 dst->ctl.noise.mode = PROCESSING_MODE_FAST;
461 dst->ctl.noise.strength = 0;
462 dst->ctl.edge.mode = PROCESSING_MODE_FAST;
463 dst->ctl.edge.strength = 0;
464
465 dst->ctl.color.saturation = 3; // means '0'
466 // FLASH
467 // METERING
468 break;
469
Younghwan Joo275c9742012-09-25 21:12:30 +0900470 case AA_SCENE_MODE_FACE_PRIORITY:
471 dst->ctl.aa.mode = AA_CONTROL_AUTO;
472 if ((dst->ctl.aa.aeMode != AA_AEMODE_LOCKED) && (dst->ctl.aa.aeMode < AA_AEMODE_ON_AUTO_FLASH))
473 dst->ctl.aa.aeMode = AA_AEMODE_ON;
474 dst->ctl.aa.sceneMode = AA_SCENE_MODE_FACE_PRIORITY;
475 dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
476 dst->ctl.aa.isoValue = 0;
477 dst->ctl.noise.mode = PROCESSING_MODE_OFF;
478 dst->ctl.noise.strength = 0;
479 dst->ctl.edge.mode = PROCESSING_MODE_OFF;
480 dst->ctl.edge.strength = 0;
481 dst->ctl.color.saturation = 3; // means '0'
482 break;
483
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700484 default:
485 dst->ctl.aa.mode = AA_CONTROL_AUTO;
Younghwan Joo9a710a42012-09-05 17:52:08 -0700486 if ((dst->ctl.aa.aeMode != AA_AEMODE_LOCKED) && (dst->ctl.aa.aeMode < AA_AEMODE_ON_AUTO_FLASH))
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700487 dst->ctl.aa.aeMode = AA_AEMODE_ON;
488 dst->ctl.aa.sceneMode = AA_SCENE_MODE_UNSUPPORTED;
489 dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
490 dst->ctl.aa.isoValue = 0;
491 dst->ctl.noise.mode = PROCESSING_MODE_OFF;
492 dst->ctl.noise.strength = 0;
493 dst->ctl.edge.mode = PROCESSING_MODE_OFF;
494 dst->ctl.edge.strength = 0;
495 dst->ctl.color.saturation = 3; // means '0'
496 break;
497 }
498
499 return NO_ERROR;
500}
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700501
502
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700503status_t MetadataConverter::ToDynamicMetadata(struct camera2_shot_ext * metadata_ext, camera_metadata_t * dst)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700504{
505 status_t res;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700506 struct camera2_shot * metadata = &metadata_ext->shot;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700507 uint8_t byteData;
508 uint32_t intData;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700509
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700510 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_ID,
511 &(metadata->ctl.request.id), 1))
512 return NO_MEMORY;
513
514 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_METADATA_MODE,
515 &(metadata->ctl.request.metadataMode), 1))
516 return NO_MEMORY;
517
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700518 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_FRAME_COUNT,
519 &(metadata->ctl.request.frameCount), 1))
520 return NO_MEMORY;
521
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700522 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_TIMESTAMP,
523 &metadata->dm.sensor.timeStamp, 1))
524 return NO_MEMORY;
525
526 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_EXPOSURE_TIME,
527 &metadata->dm.sensor.exposureTime, 1))
528 return NO_MEMORY;
529
530 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_APERTURE,
531 &metadata->dm.lens.aperture, 1))
532 return NO_MEMORY;
533
Sungjoong Kangb8146872012-10-01 13:01:11 -0700534 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
535 &(metadata->ctl.aa.aeTargetFpsRange), 2))
536 return NO_MEMORY;
537
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700538 ALOGV("(%s): ID(%d) METAMODE(%d) FrameCnt(%d) Timestamp(%lld) exposure(%lld) aper(%f)", __FUNCTION__,
539 metadata->ctl.request.id, metadata->ctl.request.metadataMode, metadata->ctl.request.frameCount,
540 metadata->dm.sensor.timeStamp, metadata->dm.sensor.exposureTime, metadata->dm.lens.aperture);
541
542
Sungjoong Kang48728d42012-09-26 13:48:48 -0700543 byteData = metadata_ext->awb_mode_dm- 2;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700544 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_MODE,
545 &byteData, 1))
546 return NO_MEMORY;
547
548 byteData = metadata->dm.aa.aeMode - 1;
549 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_MODE,
550 &byteData, 1))
551 return NO_MEMORY;
552
Sungjoong Kang48728d42012-09-26 13:48:48 -0700553 byteData = metadata->dm.aa.afMode - 1;
554 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_MODE,
555 &byteData, 1))
556 return NO_MEMORY;
557
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700558 byteData = metadata->ctl.aa.sceneMode - 1;
559 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_SCENE_MODE,
560 &byteData, 1))
561 return NO_MEMORY;
562
Hyeonmyeong Choi8b5b8072012-09-29 17:38:37 +0900563 intData = metadata->ctl.aa.aeExpCompensation - 5;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700564 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_EXP_COMPENSATION,
565 &intData, 1))
566 return NO_MEMORY;
567
Sungjoong Kangfd2d78a2012-08-26 17:44:25 -0700568 byteData = metadata->dm.stats.faceDetectMode - 1;
Sungjoong Kang15fd8232012-08-23 16:16:44 -0700569 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_DETECT_MODE,
570 &byteData, 1))
571 return NO_MEMORY;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700572
Younghwan Joof3312f82012-09-20 13:56:59 -0700573 int maxFacecount = CAMERA2_MAX_FACES;
Sungjoong Kangfd2d78a2012-08-26 17:44:25 -0700574 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_MAX_FACE_COUNT,
575 &maxFacecount, 1))
576 return NO_MEMORY;
577
Younghwan Joof3312f82012-09-20 13:56:59 -0700578 int tempFaceCount = 0;
579 for (int i = 0; i < CAMERA2_MAX_FACES; i++) {
580 if (metadata->dm.stats.faceScores[i] >= CAMERA2_FACE_DETECTION_THRESHOLD) {
581 mataFaceIds[tempFaceCount] = metadata->dm.stats.faceIds[i];
582 metaFaceScores[tempFaceCount] = metadata->dm.stats.faceScores[i];
Sungjoong Kangfd2d78a2012-08-26 17:44:25 -0700583
Younghwan Joof3312f82012-09-20 13:56:59 -0700584 memcpy(&mataFaceLandmarks[tempFaceCount][0], &metadata->dm.stats.faceLandmarks[i][0], 6*sizeof(uint32_t));
585 memcpy(&metaFaceRectangles[tempFaceCount][0], &metadata->dm.stats.faceRectangles[i][0], 4*sizeof(uint32_t));
586 tempFaceCount++;
587 }
588 }
Sungjoong Kangfd2d78a2012-08-26 17:44:25 -0700589
Younghwan Joof3312f82012-09-20 13:56:59 -0700590 if (tempFaceCount > 0) {
591 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_RECTANGLES,
592 &metaFaceRectangles, 4 * tempFaceCount))
593 return NO_MEMORY;
Sungjoong Kangfd2d78a2012-08-26 17:44:25 -0700594
Younghwan Joof3312f82012-09-20 13:56:59 -0700595 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_LANDMARKS,
596 &mataFaceLandmarks, 6 * tempFaceCount))
597 return NO_MEMORY;
598
599 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_IDS,
600 &mataFaceIds, tempFaceCount))
601 return NO_MEMORY;
602
603 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_SCORES,
604 &metaFaceScores, tempFaceCount))
605 return NO_MEMORY;
606 }
Sungjoong Kang48728d42012-09-26 13:48:48 -0700607 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_SENSITIVITY,
608 &metadata->dm.aa.isoValue, 1))
609 return NO_MEMORY;
610
Sungjoong Kangfd2d78a2012-08-26 17:44:25 -0700611
Sungjoong Kangb8d41ae2012-09-13 20:49:27 -0700612 if (0 != add_camera_metadata_entry(dst, ANDROID_SCALER_CROP_REGION,
613 &metadata->ctl.scaler.cropRegion, 3))
614 return NO_MEMORY;
615
Sungjoong Kang14dce022012-09-29 03:32:04 -0700616 byteData = metadata->dm.aa.aeState - 1;
Younghwan Joo6e33cc82012-09-14 10:36:19 -0700617 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_STATE,
Sungjoong Kang14dce022012-09-29 03:32:04 -0700618 &byteData, 1))
Younghwan Joo6e33cc82012-09-14 10:36:19 -0700619 return NO_MEMORY;
620
621 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_STATE,
622 &(metadata->dm.aa.awbState), 1))
623 return NO_MEMORY;
Sungjoong Kangfd2d78a2012-08-26 17:44:25 -0700624
Sungjoong Kang48728d42012-09-26 13:48:48 -0700625 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_COORDINATES,
626 &(metadata->ctl.jpeg.gpsCoordinates), 3))
627 return NO_MEMORY;
628
629 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_PROCESSING_METHOD,
630 &(metadata_ext->gpsProcessingMethod), 32))
631 return NO_MEMORY;
632
633 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_TIMESTAMP,
634 &(metadata->ctl.jpeg.gpsTimestamp), 1))
635 return NO_MEMORY;
636 ALOGV("(%s): AWB(%d) AE(%d) SCENE(%d) AEComp(%d) AF(%d)", __FUNCTION__,
637 metadata_ext->awb_mode_dm- 2, metadata->dm.aa.aeMode - 1, metadata->ctl.aa.sceneMode - 1,
638 metadata->ctl.aa.aeExpCompensation, metadata->dm.aa.afMode - 1);
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700639
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700640
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700641 if (metadata->ctl.request.metadataMode == METADATA_MODE_NONE) {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900642 ALOGV("DEBUG(%s): METADATA_MODE_NONE", __FUNCTION__);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700643 return NO_ERROR;
644 }
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700645 return NO_ERROR;
646
647
648}
649
650#if 0 // blocked for alpha version
651
652status_t MetadataConverter::ToDynamicMetadata(camera2_ctl_metadata_t * metadata, camera_metadata_t * dst)
653{
654 status_t res;
655
656 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_ID,
657 &(metadata->dm.request.id), 1))
658 return NO_MEMORY;
659
660 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_METADATA_MODE,
661 &(metadata->dm.request.metadataMode), 1))
662 return NO_MEMORY;
663
664 // needs check!
665 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_FRAME_COUNT,
666 &(metadata->dm.request.frameCount), 1))
667 return NO_MEMORY;
668
669
670 if (metadata->dm.request.metadataMode == METADATA_MODE_NONE) {
671 ALOGD("DEBUG(%s): METADATA_MODE_NONE", __func__);
672 return NO_ERROR;
673 }
674
675 ALOGD("DEBUG(%s): METADATA_MODE_FULL", __func__);
676
677 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FOCUS_DISTANCE,
678 &(metadata->dm.lens.focusDistance), 1))
679 return NO_MEMORY;
680
681 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_APERTURE,
682 &(metadata->dm.lens.aperture), 1))
683 return NO_MEMORY;
684
685 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FOCAL_LENGTH,
686 &(metadata->dm.lens.focalLength), 1))
687 return NO_MEMORY;
688
689 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FILTER_DENSITY,
690 &(metadata->dm.lens.filterDensity), 1))
691 return NO_MEMORY;
692
693 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
694 &(metadata->dm.lens.opticalStabilizationMode), 1))
695 return NO_MEMORY;
696
697 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_APERTURE,
698 &(metadata->dm.lens.aperture), 1))
699 return NO_MEMORY;
700
701 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FOCUS_RANGE,
702 &(metadata->dm.lens.focusRange[0]), 2))
703 return NO_MEMORY;
704
705
706
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700707
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700708
709 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_FRAME_DURATION,
710 &(metadata->dm.sensor.frameDuration), 1))
711 return NO_MEMORY;
712
713 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_SENSITIVITY,
Sungjoong Kang2bdec062012-08-17 15:47:56 -0700714 &(metadata->dm.aa.isoValue), 1))
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700715 return NO_MEMORY;
716
717 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_TIMESTAMP,
718 &(metadata->dm.sensor.timeStamp), 1))
719 return NO_MEMORY;
720
721
722
723 if (0 != add_camera_metadata_entry(dst, ANDROID_FLASH_MODE,
724 &(metadata->dm.flash.flashMode), 1))
725 return NO_MEMORY;
726
727 if (0 != add_camera_metadata_entry(dst, ANDROID_FLASH_FIRING_POWER,
728 &(metadata->dm.flash.firingPower), 1))
729 return NO_MEMORY;
730
731 if (0 != add_camera_metadata_entry(dst, ANDROID_FLASH_FIRING_TIME,
732 &(metadata->dm.flash.firingPower), 1))
733 return NO_MEMORY;
734
735
736
737 if (0 != add_camera_metadata_entry(dst, ANDROID_HOT_PIXEL_MODE,
738 &(metadata->dm.hotpixel.mode), 1))
739 return NO_MEMORY;
740
741
742
743 if (0 != add_camera_metadata_entry(dst, ANDROID_DEMOSAIC_MODE,
744 &(metadata->dm.demosaic.mode), 1))
745 return NO_MEMORY;
746
747
748
749 if (0 != add_camera_metadata_entry(dst, ANDROID_NOISE_MODE,
750 &(metadata->dm.noise.mode), 1))
751 return NO_MEMORY;
752
753 if (0 != add_camera_metadata_entry(dst, ANDROID_NOISE_STRENGTH,
754 &(metadata->dm.noise.strength), 1))
755 return NO_MEMORY;
756
757
758 if (0 != add_camera_metadata_entry(dst, ANDROID_SHADING_MODE,
759 &(metadata->dm.shading.mode), 1))
760 return NO_MEMORY;
761
762
763
764 if (0 != add_camera_metadata_entry(dst, ANDROID_GEOMETRIC_MODE,
765 &(metadata->dm.geometric.mode), 1))
766 return NO_MEMORY;
767
768
769
770 if (0 != add_camera_metadata_entry(dst, ANDROID_COLOR_MODE,
771 &(metadata->dm.color.mode), 1))
772 return NO_MEMORY;
773
774 if (0 != add_camera_metadata_entry(dst, ANDROID_COLOR_TRANSFORM,
775 &(metadata->dm.color.transform), 9))
776 return NO_MEMORY;
777
778
779
780 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_MODE,
781 &(metadata->dm.tonemap.mode), 1))
782 return NO_MEMORY;
783
784 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_CURVE_RED,
785 &(metadata->dm.tonemap.curveRed), 32))
786 return NO_MEMORY;
787
788 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_CURVE_GREEN,
789 &(metadata->dm.tonemap.curveGreen), 32))
790 return NO_MEMORY;
791
792 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_CURVE_BLUE,
793 &(metadata->dm.tonemap.curveBlue), 32))
794 return NO_MEMORY;
795
796
797
798 if (0 != add_camera_metadata_entry(dst, ANDROID_EDGE_MODE,
799 &(metadata->dm.edge.mode), 1))
800 return NO_MEMORY;
801
802 if (0 != add_camera_metadata_entry(dst, ANDROID_EDGE_STRENGTH,
803 &(metadata->dm.edge.strength), 1))
804 return NO_MEMORY;
805
806
807
808 if (0 != add_camera_metadata_entry(dst, ANDROID_SCALER_CROP_REGION,
809 &(metadata->dm.scaler.cropRegion), 3))
810 return NO_MEMORY;
811
812
813
814 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_QUALITY,
815 &(metadata->dm.jpeg.quality), 1))
816 return NO_MEMORY;
817
818 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_THUMBNAIL_SIZE,
819 &(metadata->dm.jpeg.thumbnailSize), 2))
820 return NO_MEMORY;
821
822 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_THUMBNAIL_QUALITY,
823 &(metadata->dm.jpeg.thumbnailQuality), 1))
824 return NO_MEMORY;
825
826 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_COORDINATES,
827 &(metadata->dm.jpeg.gpsCoordinates), 2)) // needs check
828 return NO_MEMORY;
829
830 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_PROCESSING_METHOD,
831 &(metadata->dm.jpeg.gpsProcessingMethod), 32))
832 return NO_MEMORY;
833
834 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_TIMESTAMP,
835 &(metadata->dm.jpeg.gpsTimestamp), 1))
836 return NO_MEMORY;
837
838 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_ORIENTATION,
839 &(metadata->dm.jpeg.orientation), 1))
840 return NO_MEMORY;
841
842
843
844 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_DETECT_MODE,
845 &(metadata->dm.stats.faceDetectMode), 1))
846 return NO_MEMORY;
847
848 // TODO : more stat entries
849
850
851
852 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_MODE,
853 &(metadata->dm.aa.mode), 1))
854 return NO_MEMORY;
855
856 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_CAPTURE_INTENT,
857 &(metadata->dm.aa.captureIntent), 1))
858 return NO_MEMORY;
859
860 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_EFFECT_MODE,
861 &(metadata->dm.aa.effect_mode), 1))
862 return NO_MEMORY;
863
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700864
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700865
866 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_REGIONS,
867 &(metadata->dm.aa.aeRegions), 5))
868 return NO_MEMORY;
869
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700870
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700871
872 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_STATE,
873 &(metadata->dm.aa.aeState), 1))
874 return NO_MEMORY;
875
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700876
877 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_REGIONS,
878 &(metadata->dm.aa.awbRegions), 5))
879 return NO_MEMORY;
880
881 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_STATE,
882 &(metadata->dm.aa.awbState), 1))
883 return NO_MEMORY;
884
885 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_MODE,
886 &(metadata->dm.aa.afMode), 1))
887 return NO_MEMORY;
888
889 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_REGIONS,
890 &(metadata->dm.aa.afRegions), 5))
891 return NO_MEMORY;
892
893 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_STATE,
894 &(metadata->dm.aa.afState), 1))
895 return NO_MEMORY;
896
897 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
898 &(metadata->dm.aa.videoStabilizationMode), 1))
899 return NO_MEMORY;
900
901
902 return NO_ERROR;
903
904/*
905typedef struct camera2_dm {
906 camera2_request_dm_t request;
907 camera2_lens_dm_t lens;
908 camera2_sensor_dm_t sensor;
909 camera2_flash_dm_t flash;
910 camera2_hotpixel_dm_t hotpixel;
911 camera2_demosaic_dm_t demosaic;
912 camera2_noisereduction_dm_t noise;
913 camera2_shading_dm_t shading;
914 camera2_geometric_dm_t geometric;
915 camera2_colorcorrection_dm_t color;
916 camera2_tonemap_dm_t tonemap;
917 camera2_edge_dm_t edge;
918 camera2_scaler_dm_t scaler;
919 camera2_jpeg_dm_t jpeg;
920 camera2_stats_dm_t stats;
921 camera2_aa_dm_t aa;
922} camera2_dm_t;
923*/
924
925}
926#endif
927
928
929}; // namespace android