blob: 2110bbbc9c3ec493298fe2831997619b717e3f35 [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"
35
36namespace android {
37
38
39MetadataConverter::MetadataConverter()
40{
41 return;
42}
43
44
45MetadataConverter::~MetadataConverter()
46{
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090047 ALOGV("DEBUG(%s):", __FUNCTION__);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070048 return;
49}
50
51status_t MetadataConverter::CheckEntryTypeMismatch(camera_metadata_entry_t * entry,
52 uint8_t type)
53{
54 if (!(entry->type==type))
55 {
56 ALOGV("DEBUG(%s):Metadata Missmatch tag(%s) type (%d) count(%d)",
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090057 __FUNCTION__, get_camera_metadata_tag_name(entry->tag), entry->type, entry->count);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070058 return BAD_VALUE;
59 }
60 return NO_ERROR;
61}
62
63status_t MetadataConverter::CheckEntryTypeMismatch(camera_metadata_entry_t * entry,
64 uint8_t type, size_t count)
65{
66 if (!((entry->type==type)&&(entry->count==count)))
67 {
68 ALOGV("DEBUG(%s):Metadata Missmatch tag(%s) type (%d) count(%d)",
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090069 __FUNCTION__, get_camera_metadata_tag_name(entry->tag), entry->type, entry->count);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070070 return BAD_VALUE;
71 }
72 return NO_ERROR;
73}
74
Sungjoong Kangbe494d12012-08-04 15:36:56 -070075status_t MetadataConverter::ToInternalShot(camera_metadata_t * request, struct camera2_shot_ext * dst_ext)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070076{
77 uint32_t num_entry = 0;
78 uint32_t index = 0;
79 uint32_t i = 0;
80 camera_metadata_entry_t curr_entry;
Sungjoong Kangbe494d12012-08-04 15:36:56 -070081 struct camera2_shot * dst = NULL;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070082
Sungjoong Kangbe494d12012-08-04 15:36:56 -070083 if (request == NULL || dst_ext == NULL)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070084 return BAD_VALUE;
85
Sungjoong Kangb56dcc02012-08-08 13:38:09 -070086 memset((void*)dst_ext, 0, sizeof(struct camera2_shot_ext));
87 dst = &dst_ext->shot;
Sungjoong Kangbe494d12012-08-04 15:36:56 -070088
Sungjoong Kangb56dcc02012-08-08 13:38:09 -070089 dst->magicNumber = 0x23456789;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070090 num_entry = (uint32_t)get_camera_metadata_data_count(request);
91 for (index = 0 ; index < num_entry ; index++) {
92
93 if (get_camera_metadata_entry(request, index, &curr_entry)==0) {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070094 switch (curr_entry.tag) {
95
96 case ANDROID_LENS_FOCUS_DISTANCE:
97 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
98 break;
99 dst->ctl.lens.focusDistance = curr_entry.data.f[0];
100 break;
101
102 case ANDROID_LENS_APERTURE:
103 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
104 break;
105 dst->ctl.lens.aperture = curr_entry.data.f[0];
106 break;
107
108 case ANDROID_LENS_FOCAL_LENGTH:
109 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
110 break;
111 dst->ctl.lens.focalLength = curr_entry.data.f[0];
112 break;
113
114 case ANDROID_LENS_FILTER_DENSITY:
115 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
116 break;
117 dst->ctl.lens.filterDensity = curr_entry.data.f[0];
118 break;
119
120 case ANDROID_LENS_OPTICAL_STABILIZATION_MODE:
121 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
122 break;
123 dst->ctl.lens.opticalStabilizationMode =
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700124 (enum optical_stabilization_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700125 break;
126
127
128
129 case ANDROID_SENSOR_EXPOSURE_TIME:
130 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
131 break;
132 dst->ctl.sensor.exposureTime = curr_entry.data.i64[0];
133 break;
134
135 case ANDROID_SENSOR_FRAME_DURATION:
136 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
137 break;
138 dst->ctl.sensor.frameDuration = curr_entry.data.i64[0];
139 break;
140
141 case ANDROID_SENSOR_SENSITIVITY:
142 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
143 break;
144 dst->ctl.sensor.sensitivity = curr_entry.data.i32[0];
145 break;
146
147
148
149 case ANDROID_FLASH_MODE:
150 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
151 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700152 dst->ctl.flash.flashMode = (enum flash_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700153 break;
154
155 case ANDROID_FLASH_FIRING_POWER:
156 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
157 break;
158 dst->ctl.flash.firingPower = curr_entry.data.u8[0];
159 break;
160
161 case ANDROID_FLASH_FIRING_TIME:
162 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
163 break;
164 dst->ctl.flash.firingTime = curr_entry.data.i64[0];
165 break;
166
167
168
169 case ANDROID_HOT_PIXEL_MODE:
170 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
171 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700172 dst->ctl.hotpixel.mode = (enum processing_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700173 break;
174
175
176
177 case ANDROID_DEMOSAIC_MODE:
178 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
179 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700180 dst->ctl.demosaic.mode = (enum processing_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700181 break;
182
183
184
185 case ANDROID_NOISE_MODE:
186 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
187 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700188 dst->ctl.noise.mode = (enum processing_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700189 break;
190
191 case ANDROID_NOISE_STRENGTH:
192 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
193 break;
194 dst->ctl.noise.strength= curr_entry.data.u8[0];
195 break;
196
197
198
199 case ANDROID_SHADING_MODE:
200 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
201 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700202 dst->ctl.shading.mode = (enum processing_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700203 break;
204
205
206
207 case ANDROID_GEOMETRIC_MODE:
208 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
209 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700210 dst->ctl.geometric.mode = (enum processing_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700211 break;
212
213
214
215 case ANDROID_COLOR_MODE:
216 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
217 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700218 dst->ctl.color.mode = (enum colorcorrection_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700219 break;
220
221 case ANDROID_COLOR_TRANSFORM:
222 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 9))
223 break;
224 for (i=0 ; i<curr_entry.count ; i++)
225 dst->ctl.color.transform[i] = curr_entry.data.f[i];
226 break;
227
228
229
230 case ANDROID_TONEMAP_MODE:
231 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
232 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700233 dst->ctl.tonemap.mode = (enum tonemap_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700234 break;
235
236 case ANDROID_TONEMAP_CURVE_RED:
237 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 32))
238 break;
239 for (i=0 ; i<curr_entry.count ; i++)
240 dst->ctl.tonemap.curveRed[i] = curr_entry.data.f[i];
241 break;
242
243 case ANDROID_TONEMAP_CURVE_GREEN:
244 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 32))
245 break;
246 for (i=0 ; i<curr_entry.count ; i++)
247 dst->ctl.tonemap.curveGreen[i] = curr_entry.data.f[i];
248 break;
249
250 case ANDROID_TONEMAP_CURVE_BLUE:
251 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 32))
252 break;
253 for (i=0 ; i<curr_entry.count ; i++)
254 dst->ctl.tonemap.curveBlue[i] = curr_entry.data.f[i];
255 break;
256
257
258
259 case ANDROID_EDGE_MODE:
260 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
261 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700262 dst->ctl.edge.mode = (enum processing_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700263 break;
264
265 case ANDROID_EDGE_STRENGTH:
266 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
267 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700268 dst->ctl.edge.strength = curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700269 break;
270
271
272
273 case ANDROID_SCALER_CROP_REGION:
274 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 3))
275 break;
276 for (i=0 ; i<curr_entry.count ; i++)
277 dst->ctl.scaler.cropRegion[i] = curr_entry.data.i32[i];
278 break;
279
280
281
282 case ANDROID_JPEG_QUALITY:
283 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
284 break;
285 dst->ctl.jpeg.quality= curr_entry.data.i32[0];
286 break;
287
288 case ANDROID_JPEG_THUMBNAIL_SIZE:
289 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 2))
290 break;
291 for (i=0 ; i<curr_entry.count ; i++)
292 dst->ctl.jpeg.thumbnailSize[i] = curr_entry.data.i32[i];
293 break;
294
295 case ANDROID_JPEG_THUMBNAIL_QUALITY:
296 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
297 break;
298 dst->ctl.jpeg.thumbnailQuality= curr_entry.data.i32[0];
299 break;
300
301 case ANDROID_JPEG_GPS_COORDINATES:
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700302 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_DOUBLE, 3))
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700303 break;
304 for (i=0 ; i<curr_entry.count ; i++)
305 dst->ctl.jpeg.gpsCoordinates[i] = curr_entry.data.d[i];
306 break;
307
308 case ANDROID_JPEG_GPS_PROCESSING_METHOD:
309 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 32))
310 break;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700311 for (i=0 ; i<curr_entry.count ; i++)
312 dst_ext->gpsProcessingMethod[i] = curr_entry.data.u8[i];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700313 break;
314
315 case ANDROID_JPEG_GPS_TIMESTAMP:
316 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
317 break;
318 dst->ctl.jpeg.gpsTimestamp = curr_entry.data.i64[0];
319 break;
320
321 case ANDROID_JPEG_ORIENTATION:
322 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
323 break;
324 dst->ctl.jpeg.orientation = curr_entry.data.i32[0];
325 break;
326
327
328
329 case ANDROID_STATS_FACE_DETECT_MODE:
330 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
331 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700332 dst->ctl.stats.faceDetectMode = (enum facedetect_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700333 break;
334
335 case ANDROID_STATS_HISTOGRAM_MODE:
336 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
337 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700338 dst->ctl.stats.histogramMode = (enum stats_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700339 break;
340
341 case ANDROID_STATS_SHARPNESS_MAP_MODE:
342 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
343 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700344 dst->ctl.stats.sharpnessMapMode = (enum stats_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700345 break;
346
347
348
349 case ANDROID_CONTROL_CAPTURE_INTENT:
350 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
351 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700352 dst->ctl.aa.captureIntent = (enum aa_capture_intent)curr_entry.data.u8[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900353 break;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700354
355 case ANDROID_CONTROL_MODE:
356 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
357 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700358 dst->ctl.aa.mode = (enum aa_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700359 break;
360
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700361
362 case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE:
363 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
364 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700365 dst->ctl.aa.videoStabilizationMode = curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700366 break;
367
368 case ANDROID_CONTROL_AE_MODE:
369 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
370 break;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700371 dst->ctl.aa.aeMode = (enum aa_aemode)(curr_entry.data.u8[0] + 1);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700372 break;
373
374 case ANDROID_CONTROL_AE_REGIONS:
375 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 5))
376 break;
377 for (i=0 ; i<curr_entry.count ; i++)
378 dst->ctl.aa.aeRegions[i] = curr_entry.data.i32[i];
379 break;
380
381 case ANDROID_CONTROL_AE_EXP_COMPENSATION:
382 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
383 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700384 dst->ctl.aa.aeExpCompensation = curr_entry.data.i32[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700385 break;
386
387 case ANDROID_CONTROL_AE_TARGET_FPS_RANGE:
388 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 2))
389 break;
390 for (i=0 ; i<curr_entry.count ; i++)
391 dst->ctl.aa.aeTargetFpsRange[i] = curr_entry.data.i32[i];
392 break;
393
394 case ANDROID_CONTROL_AE_ANTIBANDING_MODE:
395 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
396 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700397 dst->ctl.aa.aeAntibandingMode = (enum aa_ae_antibanding_mode)curr_entry.data.u8[0];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700398 break;
399
400 case ANDROID_CONTROL_AWB_MODE:
401 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
402 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700403 dst->ctl.aa.awbMode = (enum aa_awbmode)(curr_entry.data.u8[0] + 1);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700404 break;
405
406 case ANDROID_CONTROL_AWB_REGIONS:
407 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 5))
408 break;
409 for (i=0 ; i<curr_entry.count ; i++)
410 dst->ctl.aa.awbRegions[i] = curr_entry.data.i32[i];
411 break;
412
413 case ANDROID_CONTROL_AF_MODE:
414 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
415 break;
Sungjoong Kang0f26b202012-08-17 15:43:12 -0700416 dst->ctl.aa.afMode = (enum aa_afmode)(curr_entry.data.u8[0] + 1);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700417 break;
418
419 case ANDROID_CONTROL_AF_REGIONS:
420 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 5))
421 break;
422 for (i=0 ; i<curr_entry.count ; i++)
423 dst->ctl.aa.afRegions[i] = curr_entry.data.i32[i];
424 break;
425
426
427
428 case ANDROID_REQUEST_ID:
429 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
430 break;
431 dst->ctl.request.id = curr_entry.data.i32[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900432 ALOGV("DEBUG(%s): ANDROID_REQUEST_ID (%d)", __FUNCTION__, dst->ctl.request.id);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700433 break;
434
435 case ANDROID_REQUEST_METADATA_MODE:
436 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
437 break;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700438 dst->ctl.request.metadataMode = (enum metadata_mode)curr_entry.data.u8[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900439 ALOGV("DEBUG(%s): ANDROID_REQUEST_METADATA_MODE (%d)", __FUNCTION__, (int)( dst->ctl.request.metadataMode));
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700440 break;
441
442 case ANDROID_REQUEST_OUTPUT_STREAMS:
443 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE))
444 break;
Sungjoong Kangad378612012-08-17 12:34:33 -0700445
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900446 for (i=0 ; i<curr_entry.count ; i++) {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700447 dst->ctl.request.outputStreams[i] = curr_entry.data.u8[i];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900448 ALOGV("DEBUG(%s): OUTPUT_STREAM[%d] = %d ", __FUNCTION__, i, (int)(dst->ctl.request.outputStreams[i]));
449 }
Sungjoong Kangad378612012-08-17 12:34:33 -0700450
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700451 dst->ctl.request.outputStreams[15] = curr_entry.count;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700452 break;
453
454 case ANDROID_REQUEST_FRAME_COUNT:
455 if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
456 break;
457 dst->ctl.request.frameCount = curr_entry.data.i32[0];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900458 ALOGV("DEBUG(%s): ANDROID_REQUEST_FRAME_COUNT (%d)", __FUNCTION__, dst->ctl.request.frameCount);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700459 break;
460
461 default:
Sungjoong Kangad378612012-08-17 12:34:33 -0700462 ALOGV("DEBUG(%s):Bad Metadata tag (%d)", __FUNCTION__, curr_entry.tag);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700463 break;
464 }
465 }
466 }
467
468 return NO_ERROR;
469}
470
471
472
473
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700474status_t MetadataConverter::ToDynamicMetadata(struct camera2_shot_ext * metadata_ext, camera_metadata_t * dst)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700475{
476 status_t res;
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700477 struct camera2_shot * metadata = &metadata_ext->shot;
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700478 uint8_t byteData;
479 uint32_t intData;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700480
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700481 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_ID,
482 &(metadata->ctl.request.id), 1))
483 return NO_MEMORY;
484
485 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_METADATA_MODE,
486 &(metadata->ctl.request.metadataMode), 1))
487 return NO_MEMORY;
488
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700489 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_FRAME_COUNT,
490 &(metadata->ctl.request.frameCount), 1))
491 return NO_MEMORY;
492
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700493 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_TIMESTAMP,
494 &metadata->dm.sensor.timeStamp, 1))
495 return NO_MEMORY;
496
497 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_EXPOSURE_TIME,
498 &metadata->dm.sensor.exposureTime, 1))
499 return NO_MEMORY;
500
501 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_APERTURE,
502 &metadata->dm.lens.aperture, 1))
503 return NO_MEMORY;
504
505 ALOGV("(%s): ID(%d) METAMODE(%d) FrameCnt(%d) Timestamp(%lld) exposure(%lld) aper(%f)", __FUNCTION__,
506 metadata->ctl.request.id, metadata->ctl.request.metadataMode, metadata->ctl.request.frameCount,
507 metadata->dm.sensor.timeStamp, metadata->dm.sensor.exposureTime, metadata->dm.lens.aperture);
508
509
510 byteData = metadata->dm.aa.awbMode - 1;
511 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_MODE,
512 &byteData, 1))
513 return NO_MEMORY;
514
515 byteData = metadata->dm.aa.aeMode - 1;
516 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_MODE,
517 &byteData, 1))
518 return NO_MEMORY;
519
520 byteData = metadata->ctl.aa.sceneMode - 1;
521 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_SCENE_MODE,
522 &byteData, 1))
523 return NO_MEMORY;
524
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700525 intData = metadata->ctl.aa.aeExpCompensation;
526 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_EXP_COMPENSATION,
527 &intData, 1))
528 return NO_MEMORY;
529
530
Sungjoong Kangad378612012-08-17 12:34:33 -0700531 ALOGV("(%s): AWB(%d) AE(%d) SCENE(%d) AEComp(%d)", __FUNCTION__,
532 metadata->dm.aa.awbMode - 1, metadata->dm.aa.aeMode - 1, metadata->ctl.aa.sceneMode - 1,
533 metadata->ctl.aa.aeExpCompensation );
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700534
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700535
Sungjoong Kangbe494d12012-08-04 15:36:56 -0700536 if (metadata->ctl.request.metadataMode == METADATA_MODE_NONE) {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900537 ALOGV("DEBUG(%s): METADATA_MODE_NONE", __FUNCTION__);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700538 return NO_ERROR;
539 }
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700540 return NO_ERROR;
541
542
543}
544
545#if 0 // blocked for alpha version
546
547status_t MetadataConverter::ToDynamicMetadata(camera2_ctl_metadata_t * metadata, camera_metadata_t * dst)
548{
549 status_t res;
550
551 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_ID,
552 &(metadata->dm.request.id), 1))
553 return NO_MEMORY;
554
555 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_METADATA_MODE,
556 &(metadata->dm.request.metadataMode), 1))
557 return NO_MEMORY;
558
559 // needs check!
560 if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_FRAME_COUNT,
561 &(metadata->dm.request.frameCount), 1))
562 return NO_MEMORY;
563
564
565 if (metadata->dm.request.metadataMode == METADATA_MODE_NONE) {
566 ALOGD("DEBUG(%s): METADATA_MODE_NONE", __func__);
567 return NO_ERROR;
568 }
569
570 ALOGD("DEBUG(%s): METADATA_MODE_FULL", __func__);
571
572 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FOCUS_DISTANCE,
573 &(metadata->dm.lens.focusDistance), 1))
574 return NO_MEMORY;
575
576 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_APERTURE,
577 &(metadata->dm.lens.aperture), 1))
578 return NO_MEMORY;
579
580 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FOCAL_LENGTH,
581 &(metadata->dm.lens.focalLength), 1))
582 return NO_MEMORY;
583
584 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FILTER_DENSITY,
585 &(metadata->dm.lens.filterDensity), 1))
586 return NO_MEMORY;
587
588 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
589 &(metadata->dm.lens.opticalStabilizationMode), 1))
590 return NO_MEMORY;
591
592 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_APERTURE,
593 &(metadata->dm.lens.aperture), 1))
594 return NO_MEMORY;
595
596 if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_FOCUS_RANGE,
597 &(metadata->dm.lens.focusRange[0]), 2))
598 return NO_MEMORY;
599
600
601
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700602
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700603
604 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_FRAME_DURATION,
605 &(metadata->dm.sensor.frameDuration), 1))
606 return NO_MEMORY;
607
608 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_SENSITIVITY,
609 &(metadata->dm.sensor.sensitivity), 1))
610 return NO_MEMORY;
611
612 if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_TIMESTAMP,
613 &(metadata->dm.sensor.timeStamp), 1))
614 return NO_MEMORY;
615
616
617
618 if (0 != add_camera_metadata_entry(dst, ANDROID_FLASH_MODE,
619 &(metadata->dm.flash.flashMode), 1))
620 return NO_MEMORY;
621
622 if (0 != add_camera_metadata_entry(dst, ANDROID_FLASH_FIRING_POWER,
623 &(metadata->dm.flash.firingPower), 1))
624 return NO_MEMORY;
625
626 if (0 != add_camera_metadata_entry(dst, ANDROID_FLASH_FIRING_TIME,
627 &(metadata->dm.flash.firingPower), 1))
628 return NO_MEMORY;
629
630
631
632 if (0 != add_camera_metadata_entry(dst, ANDROID_HOT_PIXEL_MODE,
633 &(metadata->dm.hotpixel.mode), 1))
634 return NO_MEMORY;
635
636
637
638 if (0 != add_camera_metadata_entry(dst, ANDROID_DEMOSAIC_MODE,
639 &(metadata->dm.demosaic.mode), 1))
640 return NO_MEMORY;
641
642
643
644 if (0 != add_camera_metadata_entry(dst, ANDROID_NOISE_MODE,
645 &(metadata->dm.noise.mode), 1))
646 return NO_MEMORY;
647
648 if (0 != add_camera_metadata_entry(dst, ANDROID_NOISE_STRENGTH,
649 &(metadata->dm.noise.strength), 1))
650 return NO_MEMORY;
651
652
653 if (0 != add_camera_metadata_entry(dst, ANDROID_SHADING_MODE,
654 &(metadata->dm.shading.mode), 1))
655 return NO_MEMORY;
656
657
658
659 if (0 != add_camera_metadata_entry(dst, ANDROID_GEOMETRIC_MODE,
660 &(metadata->dm.geometric.mode), 1))
661 return NO_MEMORY;
662
663
664
665 if (0 != add_camera_metadata_entry(dst, ANDROID_COLOR_MODE,
666 &(metadata->dm.color.mode), 1))
667 return NO_MEMORY;
668
669 if (0 != add_camera_metadata_entry(dst, ANDROID_COLOR_TRANSFORM,
670 &(metadata->dm.color.transform), 9))
671 return NO_MEMORY;
672
673
674
675 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_MODE,
676 &(metadata->dm.tonemap.mode), 1))
677 return NO_MEMORY;
678
679 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_CURVE_RED,
680 &(metadata->dm.tonemap.curveRed), 32))
681 return NO_MEMORY;
682
683 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_CURVE_GREEN,
684 &(metadata->dm.tonemap.curveGreen), 32))
685 return NO_MEMORY;
686
687 if (0 != add_camera_metadata_entry(dst, ANDROID_TONEMAP_CURVE_BLUE,
688 &(metadata->dm.tonemap.curveBlue), 32))
689 return NO_MEMORY;
690
691
692
693 if (0 != add_camera_metadata_entry(dst, ANDROID_EDGE_MODE,
694 &(metadata->dm.edge.mode), 1))
695 return NO_MEMORY;
696
697 if (0 != add_camera_metadata_entry(dst, ANDROID_EDGE_STRENGTH,
698 &(metadata->dm.edge.strength), 1))
699 return NO_MEMORY;
700
701
702
703 if (0 != add_camera_metadata_entry(dst, ANDROID_SCALER_CROP_REGION,
704 &(metadata->dm.scaler.cropRegion), 3))
705 return NO_MEMORY;
706
707
708
709 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_QUALITY,
710 &(metadata->dm.jpeg.quality), 1))
711 return NO_MEMORY;
712
713 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_THUMBNAIL_SIZE,
714 &(metadata->dm.jpeg.thumbnailSize), 2))
715 return NO_MEMORY;
716
717 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_THUMBNAIL_QUALITY,
718 &(metadata->dm.jpeg.thumbnailQuality), 1))
719 return NO_MEMORY;
720
721 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_COORDINATES,
722 &(metadata->dm.jpeg.gpsCoordinates), 2)) // needs check
723 return NO_MEMORY;
724
725 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_PROCESSING_METHOD,
726 &(metadata->dm.jpeg.gpsProcessingMethod), 32))
727 return NO_MEMORY;
728
729 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_TIMESTAMP,
730 &(metadata->dm.jpeg.gpsTimestamp), 1))
731 return NO_MEMORY;
732
733 if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_ORIENTATION,
734 &(metadata->dm.jpeg.orientation), 1))
735 return NO_MEMORY;
736
737
738
739 if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_DETECT_MODE,
740 &(metadata->dm.stats.faceDetectMode), 1))
741 return NO_MEMORY;
742
743 // TODO : more stat entries
744
745
746
747 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_MODE,
748 &(metadata->dm.aa.mode), 1))
749 return NO_MEMORY;
750
751 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_CAPTURE_INTENT,
752 &(metadata->dm.aa.captureIntent), 1))
753 return NO_MEMORY;
754
755 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_EFFECT_MODE,
756 &(metadata->dm.aa.effect_mode), 1))
757 return NO_MEMORY;
758
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700759
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700760
761 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_REGIONS,
762 &(metadata->dm.aa.aeRegions), 5))
763 return NO_MEMORY;
764
Sungjoong Kangb56dcc02012-08-08 13:38:09 -0700765
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700766
767 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_STATE,
768 &(metadata->dm.aa.aeState), 1))
769 return NO_MEMORY;
770
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700771
772 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_REGIONS,
773 &(metadata->dm.aa.awbRegions), 5))
774 return NO_MEMORY;
775
776 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_STATE,
777 &(metadata->dm.aa.awbState), 1))
778 return NO_MEMORY;
779
780 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_MODE,
781 &(metadata->dm.aa.afMode), 1))
782 return NO_MEMORY;
783
784 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_REGIONS,
785 &(metadata->dm.aa.afRegions), 5))
786 return NO_MEMORY;
787
788 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_STATE,
789 &(metadata->dm.aa.afState), 1))
790 return NO_MEMORY;
791
792 if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
793 &(metadata->dm.aa.videoStabilizationMode), 1))
794 return NO_MEMORY;
795
796
797 return NO_ERROR;
798
799/*
800typedef struct camera2_dm {
801 camera2_request_dm_t request;
802 camera2_lens_dm_t lens;
803 camera2_sensor_dm_t sensor;
804 camera2_flash_dm_t flash;
805 camera2_hotpixel_dm_t hotpixel;
806 camera2_demosaic_dm_t demosaic;
807 camera2_noisereduction_dm_t noise;
808 camera2_shading_dm_t shading;
809 camera2_geometric_dm_t geometric;
810 camera2_colorcorrection_dm_t color;
811 camera2_tonemap_dm_t tonemap;
812 camera2_edge_dm_t edge;
813 camera2_scaler_dm_t scaler;
814 camera2_jpeg_dm_t jpeg;
815 camera2_stats_dm_t stats;
816 camera2_aa_dm_t aa;
817} camera2_dm_t;
818*/
819
820}
821#endif
822
823
824}; // namespace android