90d05fde762f268bc1aa088893c947eeaa96583a
[framework/multimedia/libmm-camcorder.git] / src / mm_camcorder_platform.c
1 /*
2  * libmm-camcorder
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jeongmo Yang <jm80.yang@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 /*===========================================================================================
23 |                                                                                                                                                                                       |
24 |  INCLUDE FILES                                                                                                                                                        |
25 |                                                                                                                                                                                       |
26 ========================================================================================== */
27 #include "mm_camcorder_internal.h"
28 #include "mm_camcorder_platform.h"
29 #include "mm_camcorder_configure.h"
30
31 /*---------------------------------------------------------------------------
32 |    GLOBAL VARIABLE DEFINITIONS for internal                                                           |
33 ---------------------------------------------------------------------------*/
34
35 /*---------------------------------------------------------------------------
36 |    LOCAL VARIABLE DEFINITIONS for internal                                                            |
37 ---------------------------------------------------------------------------*/
38 #define         MM_CAMCORDER_ATTR_NONE  -1
39
40
41 // Rule 1. 1:1 match except NONE.
42 // Rule 2. MSL should be Superset.
43 // Rule 3. sensor value should not be same as _MMCAMCORDER_SENSOR_ENUM_NONE.
44
45 static int __enum_conv_whitebalance[MM_CAMCORDER_WHITE_BALANCE_NUM] ;
46
47 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_whitebalance =
48 {
49         MM_CAMCORDER_WHITE_BALANCE_NUM,
50         __enum_conv_whitebalance,
51         CONFIGURE_CATEGORY_CTRL_EFFECT,
52         "WhiteBalance"
53 };
54
55
56 static int __enum_conv_colortone[MM_CAMCORDER_COLOR_TONE_NUM];
57
58 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_colortone =
59 {
60         MM_CAMCORDER_COLOR_TONE_NUM,
61         __enum_conv_colortone,
62         CONFIGURE_CATEGORY_CTRL_EFFECT,
63         "ColorTone"
64 };
65
66
67 static int __enum_conv_iso[MM_CAMCORDER_ISO_NUM];
68
69 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_iso =
70 {
71         MM_CAMCORDER_ISO_NUM,
72         __enum_conv_iso,
73         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
74         "ISO"
75 };
76
77
78 static int __enum_conv_prgrm[MM_CAMCORDER_SCENE_MODE_NUM];
79
80 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_prgrm =
81 {
82         MM_CAMCORDER_SCENE_MODE_NUM,
83         __enum_conv_prgrm,
84         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
85         "ProgramMode"
86 };
87
88
89 static int __enum_conv_focus_mode[MM_CAMCORDER_FOCUS_MODE_NUM];
90
91 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_mode =
92 {
93         MM_CAMCORDER_FOCUS_MODE_NUM,
94         __enum_conv_focus_mode,
95         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
96         "FocusMode"
97 };
98
99
100 static int __enum_conv_focus_type[MM_CAMCORDER_AUTO_FOCUS_NUM];
101
102 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_type =
103 {
104         MM_CAMCORDER_AUTO_FOCUS_NUM,
105         __enum_conv_focus_type,
106         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
107         "AFType"
108 };
109
110
111 static int __enum_conv_ae_type[MM_CAMCORDER_AUTO_EXPOSURE_NUM];
112
113 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ae_type =
114 {
115         MM_CAMCORDER_AUTO_EXPOSURE_NUM,
116         __enum_conv_ae_type,
117         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
118         "AEType"
119 };
120
121
122 static int __enum_conv_strobe_ctrl[MM_CAMCORDER_STROBE_CONTROL_NUM];
123
124 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_ctrl =
125 {
126         MM_CAMCORDER_STROBE_CONTROL_NUM,
127         __enum_conv_strobe_ctrl,
128         CONFIGURE_CATEGORY_CTRL_STROBE,
129         "StrobeControl"
130 };
131
132
133 static int __enum_conv_strobe_mode[MM_CAMCORDER_STROBE_MODE_NUM];
134
135 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_mode =
136 {
137         MM_CAMCORDER_STROBE_MODE_NUM,
138         __enum_conv_strobe_mode,
139         CONFIGURE_CATEGORY_CTRL_STROBE,
140         "StrobeMode"
141 };
142
143
144 static int __enum_conv_wdr_ctrl[MM_CAMCORDER_WDR_NUM];
145
146 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_wdr_ctrl =
147 {
148         MM_CAMCORDER_WDR_NUM,
149         __enum_conv_wdr_ctrl,
150         CONFIGURE_CATEGORY_CTRL_EFFECT,
151         "WDR"
152 };
153
154 static int __enum_conv_flip_ctrl[MM_CAMCORDER_FLIP_NUM];
155
156 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_flip_ctrl =
157 {
158         MM_CAMCORDER_FLIP_NUM,
159         __enum_conv_flip_ctrl,
160         CONFIGURE_CATEGORY_CTRL_EFFECT,
161         "Flip"
162 };
163
164 static int __enum_conv_rotation_ctrl[MM_CAMCORDER_ROTATION_NUM];
165
166 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_rotation_ctrl =
167 {
168         MM_CAMCORDER_ROTATION_NUM,
169         __enum_conv_rotation_ctrl,
170         CONFIGURE_CATEGORY_CTRL_EFFECT,
171         "Rotation"
172 };
173
174
175 static int __enum_conv_ahs[MM_CAMCORDER_AHS_NUM];
176
177 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ahs =
178 {
179         MM_CAMCORDER_AHS_NUM,
180         __enum_conv_ahs,
181         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
182         "AntiHandshake"
183 };
184
185
186 static int __enum_conv_video_stabilization[MM_CAMCORDER_VIDEO_STABILIZATION_NUM];
187
188 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_video_stabilization =
189 {
190         MM_CAMCORDER_VIDEO_STABILIZATION_NUM,
191         __enum_conv_video_stabilization,
192         CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
193         "VideoStabilization"
194 };
195
196
197 static int __enum_conv_hdr_capture[MM_CAMCORDER_HDR_CAPTURE_NUM];
198
199 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_hdr_capture =
200 {
201         MM_CAMCORDER_HDR_CAPTURE_NUM,
202         __enum_conv_hdr_capture,
203         CONFIGURE_CATEGORY_CTRL_CAPTURE,
204         "SupportHDR"
205 };
206
207 static int __enum_conv_detect_mode[MM_CAMCORDER_DETECT_MODE_NUM];
208
209 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_detect_mode =
210 {
211         MM_CAMCORDER_DETECT_MODE_NUM,
212         __enum_conv_detect_mode,
213         CONFIGURE_CATEGORY_CTRL_DETECT,
214         "DetectMode"
215 };
216
217
218 /**
219  * Matching table of caminfo index with category enum of attribute.
220  * If predefined item is changed, this static variables should be changed.
221  * For detail information, refer below documents.
222  *
223  */
224 static _MMCamcorderInfoConverting       g_display_info[] = {
225         {
226                 CONFIGURE_TYPE_MAIN,
227                 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
228                 MM_CAM_DISPLAY_DEVICE,
229                 MM_CAMCORDER_ATTR_NONE,
230                 "DisplayDevice",
231                 MM_CAMCONVERT_TYPE_INT_ARRAY,
232                 NULL,
233         },
234         {
235                 CONFIGURE_TYPE_MAIN,
236                 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
237                 MM_CAM_DISPLAY_MODE,
238                 MM_CAMCORDER_ATTR_NONE,
239                 "DisplayMode",
240                 MM_CAMCONVERT_TYPE_INT_ARRAY,
241                 NULL,
242         },
243         {
244                 CONFIGURE_TYPE_MAIN,
245                 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
246                 MM_CAM_DISPLAY_SURFACE,
247                 MM_CAMCORDER_ATTR_NONE,
248                 "Videosink",
249                 MM_CAMCONVERT_TYPE_INT_ARRAY,
250                 NULL,
251         },
252 };
253
254 static _MMCamcorderInfoConverting       g_caminfo_convert[CAMINFO_CONVERT_NUM] = {
255         {
256                 CONFIGURE_TYPE_CTRL,
257                 CONFIGURE_CATEGORY_CTRL_CAMERA,
258                 MM_CAM_CAMERA_DEVICE_NAME,
259                 MM_CAMCORDER_ATTR_NONE,
260                 "DeviceName",
261                 MM_CAMCONVERT_TYPE_STRING,
262                 NULL,
263         },
264         {
265                 CONFIGURE_TYPE_CTRL,
266                 CONFIGURE_CATEGORY_CTRL_CAMERA,
267                 MM_CAM_CAMERA_WIDTH,
268                 MM_CAM_CAMERA_HEIGHT,
269                 "PreviewResolution",
270                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
271                 NULL,
272         },
273         {
274                 CONFIGURE_TYPE_CTRL,
275                 CONFIGURE_CATEGORY_CTRL_CAMERA,
276                 MM_CAM_CAPTURE_WIDTH,
277                 MM_CAM_CAPTURE_HEIGHT,
278                 "CaptureResolution",
279                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
280                 NULL,
281         },
282         {
283                 CONFIGURE_TYPE_CTRL,
284                 CONFIGURE_CATEGORY_CTRL_CAMERA,
285                 MM_CAM_CAMERA_FPS,
286                 MM_CAMCORDER_ATTR_NONE,
287                 "FPS",
288                 MM_CAMCONVERT_TYPE_INT_ARRAY,
289                 NULL,
290         },
291         { /* 5 */
292                 CONFIGURE_TYPE_CTRL,
293                 CONFIGURE_CATEGORY_CTRL_CAMERA,
294                 MM_CAM_CAMERA_FORMAT,
295                 MM_CAMCORDER_ATTR_NONE,
296                 "PictureFormat",
297                 MM_CAMCONVERT_TYPE_INT_ARRAY,
298                 NULL,
299         },
300         {
301                 CONFIGURE_TYPE_CTRL,
302                 CONFIGURE_CATEGORY_CTRL_STROBE,
303                 MM_CAM_STROBE_CONTROL,
304                 MM_CAMCORDER_ATTR_NONE,
305                 "StrobeControl",
306                 MM_CAMCONVERT_TYPE_INT_ARRAY,
307                 &_mmcamcorder_enum_conv_strobe_ctrl,
308         },
309         {
310                 CONFIGURE_TYPE_CTRL,
311                 CONFIGURE_CATEGORY_CTRL_STROBE,
312                 MM_CAM_STROBE_CAPABILITIES,
313                 MM_CAMCORDER_ATTR_NONE,
314                 "StrobeCapabilities",
315                 MM_CAMCONVERT_TYPE_INT_ARRAY,
316                 NULL,
317         },
318         {
319                 CONFIGURE_TYPE_CTRL,
320                 CONFIGURE_CATEGORY_CTRL_STROBE,
321                 MM_CAM_STROBE_MODE,
322                 MM_CAMCORDER_ATTR_NONE,
323                 "StrobeMode",
324                 MM_CAMCONVERT_TYPE_INT_ARRAY,
325                 &_mmcamcorder_enum_conv_strobe_mode,
326         },
327         {
328                 CONFIGURE_TYPE_CTRL,
329                 CONFIGURE_CATEGORY_CTRL_EFFECT,
330                 MM_CAM_FILTER_BRIGHTNESS,
331                 MM_CAMCORDER_ATTR_NONE,
332                 "Brightness",
333                 MM_CAMCONVERT_TYPE_INT_RANGE,
334                 NULL,
335         },
336         { /* 10 */
337                 CONFIGURE_TYPE_CTRL,
338                 CONFIGURE_CATEGORY_CTRL_EFFECT,
339                 MM_CAM_FILTER_CONTRAST,
340                 MM_CAMCORDER_ATTR_NONE,
341                 "Contrast",
342                 MM_CAMCONVERT_TYPE_INT_RANGE,
343                 NULL,
344         },
345         {
346                 CONFIGURE_TYPE_CTRL,
347                 CONFIGURE_CATEGORY_CTRL_EFFECT,
348                 MM_CAM_FILTER_SATURATION,
349                 MM_CAMCORDER_ATTR_NONE,
350                 "Saturation",
351                 MM_CAMCONVERT_TYPE_INT_RANGE,
352                 NULL,
353         },
354         {
355                 CONFIGURE_TYPE_CTRL,
356                 CONFIGURE_CATEGORY_CTRL_EFFECT,
357                 MM_CAM_FILTER_HUE,
358                 MM_CAMCORDER_ATTR_NONE,
359                 "Hue",
360                 MM_CAMCONVERT_TYPE_INT_RANGE,
361                 NULL,
362         },
363         {
364                 CONFIGURE_TYPE_CTRL,
365                 CONFIGURE_CATEGORY_CTRL_EFFECT,
366                 MM_CAM_FILTER_SHARPNESS,
367                 MM_CAMCORDER_ATTR_NONE,
368                 "Sharpness",
369                 MM_CAMCONVERT_TYPE_INT_RANGE,
370                 NULL,
371         },
372         {
373                 CONFIGURE_TYPE_CTRL,
374                 CONFIGURE_CATEGORY_CTRL_EFFECT,
375                 MM_CAM_FILTER_WB,
376                 MM_CAMCORDER_ATTR_NONE,
377                 "WhiteBalance",
378                 MM_CAMCONVERT_TYPE_INT_ARRAY,
379                 &_mmcamcorder_enum_conv_whitebalance,
380         },
381         { /* 15 */
382                 CONFIGURE_TYPE_CTRL,
383                 CONFIGURE_CATEGORY_CTRL_EFFECT,
384                 MM_CAM_FILTER_COLOR_TONE,
385                 MM_CAMCORDER_ATTR_NONE,
386                 "ColorTone",
387                 MM_CAMCONVERT_TYPE_INT_ARRAY,
388                 &_mmcamcorder_enum_conv_colortone,
389         },
390         {
391                 CONFIGURE_TYPE_CTRL,
392                 CONFIGURE_CATEGORY_CTRL_EFFECT,
393                 MM_CAM_CAMERA_WDR,
394                 MM_CAMCORDER_ATTR_NONE,
395                 "WDR",
396                 MM_CAMCONVERT_TYPE_INT_ARRAY,
397                 &_mmcamcorder_enum_conv_wdr_ctrl,
398         },
399         {
400                 CONFIGURE_TYPE_CTRL,
401                 CONFIGURE_CATEGORY_CTRL_EFFECT,
402                 MM_CAM_CAMERA_FLIP,
403                 MM_CAMCORDER_ATTR_NONE,
404                 "Flip",
405                 MM_CAMCONVERT_TYPE_INT_ARRAY,
406                 &_mmcamcorder_enum_conv_flip_ctrl,
407         },
408         {
409                 CONFIGURE_TYPE_CTRL,
410                 CONFIGURE_CATEGORY_CTRL_EFFECT,
411                 MM_CAM_CAMERA_ROTATION,
412                 MM_CAMCORDER_ATTR_NONE,
413                 "Rotation",
414                 MM_CAMCONVERT_TYPE_INT_ARRAY,
415                 &_mmcamcorder_enum_conv_rotation_ctrl,
416         },
417         {
418                 CONFIGURE_TYPE_CTRL,
419                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
420                 MM_CAM_CAMERA_DIGITAL_ZOOM,
421                 MM_CAMCORDER_ATTR_NONE,
422                 "DigitalZoom",
423                 MM_CAMCONVERT_TYPE_INT_RANGE,
424                 NULL,
425         },
426         { /* 20 */
427                 CONFIGURE_TYPE_CTRL,
428                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
429                 MM_CAM_CAMERA_OPTICAL_ZOOM,
430                 MM_CAMCORDER_ATTR_NONE,
431                 "OpticalZoom",
432                 MM_CAMCONVERT_TYPE_INT_RANGE,
433                 NULL,
434         },
435         {
436                 CONFIGURE_TYPE_CTRL,
437                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
438                 MM_CAM_CAMERA_FOCUS_MODE,
439                 MM_CAMCORDER_ATTR_NONE,
440                 "FocusMode",
441                 MM_CAMCONVERT_TYPE_INT_ARRAY,
442                 &_mmcamcorder_enum_conv_focus_mode,
443         },
444         {
445                 CONFIGURE_TYPE_CTRL,
446                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
447                 MM_CAM_CAMERA_AF_SCAN_RANGE,
448                 MM_CAMCORDER_ATTR_NONE,
449                 "AFType",
450                 MM_CAMCONVERT_TYPE_INT_ARRAY,
451                 &_mmcamcorder_enum_conv_focus_type,
452         },
453         {
454                 CONFIGURE_TYPE_CTRL,
455                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
456                 MM_CAM_CAMERA_EXPOSURE_MODE,
457                 MM_CAMCORDER_ATTR_NONE,
458                 "AEType",
459                 MM_CAMCONVERT_TYPE_INT_ARRAY,
460                 &_mmcamcorder_enum_conv_ae_type,
461         },
462         {
463                 CONFIGURE_TYPE_CTRL,
464                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
465                 MM_CAM_CAMERA_EXPOSURE_VALUE,
466                 MM_CAMCORDER_ATTR_NONE,
467                 "ExposureValue",
468                 MM_CAMCONVERT_TYPE_INT_RANGE,
469                 NULL,
470         },
471         {
472                 CONFIGURE_TYPE_CTRL,
473                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
474                 MM_CAM_CAMERA_F_NUMBER,
475                 MM_CAMCORDER_ATTR_NONE,
476                 "FNumber",
477                 MM_CAMCONVERT_TYPE_INT_ARRAY,
478                 NULL,
479         },
480         {
481                 CONFIGURE_TYPE_CTRL,
482                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
483                 MM_CAM_CAMERA_SHUTTER_SPEED,
484                 MM_CAMCORDER_ATTR_NONE,
485                 "ShutterSpeed",
486                 MM_CAMCONVERT_TYPE_INT_ARRAY,
487                 NULL,
488         },
489         {
490                 CONFIGURE_TYPE_CTRL,
491                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
492                 MM_CAM_CAMERA_ISO,
493                 MM_CAMCORDER_ATTR_NONE,
494                 "ISO",
495                 MM_CAMCONVERT_TYPE_INT_ARRAY,
496                 &_mmcamcorder_enum_conv_iso,
497         },
498         {
499                 CONFIGURE_TYPE_CTRL,
500                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
501                 MM_CAM_FILTER_SCENE_MODE,
502                 MM_CAMCORDER_ATTR_NONE,
503                 "ProgramMode",
504                 MM_CAMCONVERT_TYPE_INT_ARRAY,
505                 &_mmcamcorder_enum_conv_prgrm,
506         },
507         {
508                 CONFIGURE_TYPE_CTRL,
509                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
510                 MM_CAM_CAMERA_ANTI_HANDSHAKE,
511                 MM_CAMCORDER_ATTR_NONE,
512                 "AntiHandshake",
513                 MM_CAMCONVERT_TYPE_INT_ARRAY,
514                 &_mmcamcorder_enum_conv_ahs,
515         },
516         { /* 30 */
517                 CONFIGURE_TYPE_CTRL,
518                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
519                 MM_CAM_CAPTURE_FORMAT,
520                 MM_CAMCORDER_ATTR_NONE,
521                 "OutputMode",
522                 MM_CAMCONVERT_TYPE_INT_ARRAY,
523                 NULL,
524         },
525         {
526                 CONFIGURE_TYPE_CTRL,
527                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
528                 MM_CAM_IMAGE_ENCODER_QUALITY,
529                 MM_CAMCORDER_ATTR_NONE,
530                 "JpegQuality",
531                 MM_CAMCONVERT_TYPE_INT_RANGE,
532                 NULL,
533         },
534         {
535                 CONFIGURE_TYPE_CTRL,
536                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
537                 MM_CAM_CAPTURE_COUNT,
538                 MM_CAMCORDER_ATTR_NONE,
539                 "MultishotNumber",
540                 MM_CAMCONVERT_TYPE_INT_RANGE,
541                 NULL,
542         },
543         {
544                 CONFIGURE_TYPE_CTRL,
545                 CONFIGURE_CATEGORY_CTRL_CAPTURE,
546                 MM_CAM_CAMERA_HDR_CAPTURE,
547                 MM_CAMCORDER_ATTR_NONE,
548                 "SupportHDR",
549                 MM_CAMCONVERT_TYPE_INT_ARRAY,
550                 &_mmcamcorder_enum_conv_hdr_capture,
551         },
552         {
553                 CONFIGURE_TYPE_CTRL,
554                 CONFIGURE_CATEGORY_CTRL_DETECT,
555                 MM_CAM_DETECT_MODE,
556                 MM_CAMCORDER_ATTR_NONE,
557                 "DetectMode",
558                 MM_CAMCONVERT_TYPE_INT_ARRAY,
559                 &_mmcamcorder_enum_conv_detect_mode,
560         },
561         {
562                 CONFIGURE_TYPE_CTRL,
563                 CONFIGURE_CATEGORY_CTRL_DETECT,
564                 MM_CAM_DETECT_NUMBER,
565                 MM_CAMCORDER_ATTR_NONE,
566                 "DetectNumber",
567                 MM_CAMCONVERT_TYPE_INT_RANGE,
568                 NULL,
569         },
570         {
571                 CONFIGURE_TYPE_CTRL,
572                 CONFIGURE_CATEGORY_CTRL_DETECT,
573                 MM_CAM_DETECT_FOCUS_SELECT,
574                 MM_CAMCORDER_ATTR_NONE,
575                 "DetectFocusSelect",
576                 MM_CAMCONVERT_TYPE_INT_RANGE,
577                 NULL,
578         },
579         {
580                 CONFIGURE_TYPE_CTRL,
581                 CONFIGURE_CATEGORY_CTRL_DETECT,
582                 MM_CAM_DETECT_SELECT_NUMBER,
583                 MM_CAMCORDER_ATTR_NONE,
584                 "DetectSelectNumber",
585                 MM_CAMCONVERT_TYPE_INT_RANGE,
586                 NULL,
587         },
588         {
589                 CONFIGURE_TYPE_CTRL,
590                 CONFIGURE_CATEGORY_CTRL_DETECT,
591                 MM_CAM_DETECT_STATUS,
592                 MM_CAMCORDER_ATTR_NONE,
593                 "DetectStatus",
594                 MM_CAMCONVERT_TYPE_INT_ARRAY,
595                 NULL,
596         },
597         {
598                 CONFIGURE_TYPE_CTRL,
599                 CONFIGURE_CATEGORY_CTRL_CAMERA,
600                 MM_CAM_RECOMMEND_CAMERA_WIDTH,
601                 MM_CAM_RECOMMEND_CAMERA_HEIGHT,
602                 "RecommendPreviewResolution",
603                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
604                 NULL,
605         },
606         { /* 40 */
607                 CONFIGURE_TYPE_CTRL,
608                 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
609                 MM_CAM_CAMERA_VIDEO_STABILIZATION,
610                 MM_CAMCORDER_ATTR_NONE,
611                 "VideoStabilization",
612                 MM_CAMCONVERT_TYPE_INT_ARRAY,
613                 &_mmcamcorder_enum_conv_video_stabilization,
614         },
615         {
616                 CONFIGURE_TYPE_CTRL,
617                 CONFIGURE_CATEGORY_CTRL_CAMERA,
618                 MM_CAM_VIDEO_WIDTH,
619                 MM_CAM_VIDEO_HEIGHT,
620                 "VideoResolution",
621                 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
622                 NULL,
623         }
624 };
625
626 /*---------------------------------------------------------------------------
627 |    LOCAL FUNCTION PROTOTYPES:                                                                                         |
628 ---------------------------------------------------------------------------*/
629 /* STATIC INTERNAL FUNCTION */
630 static int  __mmcamcorder_set_info_to_attr( MMHandleType handle, _MMCamcorderInfoConverting *info, int table_size );
631 static int  __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** valid_array, int * valid_default );
632
633 /*===========================================================================================
634 |                                                                                                                                                                                       |
635 |  FUNCTION DEFINITIONS                                                                                                                                         |
636 |                                                                                                                                                                                       |
637 ========================================================================================== */
638 /*---------------------------------------------------------------------------
639 |    GLOBAL FUNCTION DEFINITIONS:                                                                                       |
640 ---------------------------------------------------------------------------*/
641 //convert MSL value to sensor value
642 int _mmcamcorder_convert_msl_to_sensor(MMHandleType handle, int attr_idx, int mslval)
643 {
644         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
645         _MMCamcorderInfoConverting *info = NULL;
646         int i =0;
647         int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
648
649         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
650
651         //_mmcam_dbg_log("attr_idx(%d), mslval(%d)", attr_idx, mslval);
652
653         info = hcamcorder->caminfo_convert;
654
655         for (i = 0; i < size; i++)
656         {
657                 if (info[i].attr_idx == attr_idx)
658                 {
659                         _MMCamcorderEnumConvert * enum_convert = NULL;
660                         enum_convert = info[i].enum_convert;
661
662                         if (enum_convert == NULL)
663                         {
664                                 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
665                                 return mslval;
666                         }
667
668                         if (enum_convert->enum_arr == NULL)
669                         {
670                                 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
671                                 return mslval;
672                         }
673
674                         if( enum_convert->total_enum_num > mslval && mslval >= 0 )
675                         {
676                                 //_mmcam_dbg_log("original value(%d) -> converted value(%d)", mslval, enum_convert->enum_arr[mslval]);
677                                 return enum_convert->enum_arr[mslval];
678                         }
679                         else
680                         {
681                                 _mmcam_dbg_warn( "Input mslval[%d] is invalid(out of array[idx:%d,size:%d]), so can not convert. Just return the original value.", mslval, attr_idx, enum_convert->total_enum_num );
682                                 return mslval;
683                         }
684                 }
685         }
686
687         _mmcam_dbg_warn("There is no category to match. Just return the original value.");
688
689         return mslval;
690 }
691
692 //convert sensor value to MSL value
693 int _mmcamcorder_convert_sensor_to_msl(MMHandleType handle, int attr_idx, int sensval)
694 {
695         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
696         _MMCamcorderInfoConverting *info = NULL;
697         int i = 0, j = 0;
698         int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
699
700         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
701
702         info = hcamcorder->caminfo_convert;
703         
704         for( i = 0 ; i < size ; i++ )
705         {
706                 if( info[i].attr_idx == attr_idx )
707                 {
708                         _MMCamcorderEnumConvert * enum_convert = NULL;
709                         enum_convert = info[i].enum_convert;
710
711                         if( enum_convert == NULL )
712                         {
713                                 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
714                                 return sensval;
715                         }
716
717                         if( enum_convert->enum_arr == NULL )
718                         {
719                                 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
720                                 return sensval;
721                         }
722
723                         for( j = 0 ; j < enum_convert->total_enum_num ; j++ )
724                         {
725                                 if( sensval == enum_convert->enum_arr[j] )
726                                 {
727                                         //_mmcam_dbg_log("original value(%d) -> converted value(%d)", sensval, j);
728                                         return j;
729                                 }
730                         }
731
732                         _mmcam_dbg_warn("There is no sensor value matched with input param. Just return the original value.");
733                         return sensval;
734
735                 }
736         }
737
738         _mmcam_dbg_log("There is no category to match. Just return the original value.");
739         return sensval;
740 }
741
742 static int
743 __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** valid_array, int * valid_default )
744 {
745         int i = 0;
746         int valid_count = 0;
747         int new_default = _MMCAMCORDER_SENSOR_ENUM_NONE;
748         
749         for (i = 0; i < original_count; i++) {
750                 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE) {
751                         valid_count++;
752                 }
753         }
754
755         if (valid_count > 0) {
756                 *valid_array = (int*)malloc(sizeof(int) * valid_count);
757
758                 if (*valid_array) {
759                         valid_count = 0;
760                         for (i = 0; i < original_count; i++) {
761                                 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE) {
762                                         (*valid_array)[valid_count++] = i;
763                                         /*_mmcam_dbg_log( "valid_array[%d] = %d", valid_count-1, (*valid_array)[valid_count-1] );*/
764
765                                         if (original_array[i] == *valid_default &&
766                                             new_default == _MMCAMCORDER_SENSOR_ENUM_NONE) {
767                                                 new_default = i;
768                                                 /*_mmcam_dbg_log( "converted MSL default[%d]", new_default );*/
769                                         }
770                                 }
771                         }
772                 }
773                 else {
774                         valid_count = 0;
775                 }
776         }
777
778         if (new_default != _MMCAMCORDER_SENSOR_ENUM_NONE) {
779                 *valid_default = new_default;
780         }
781
782         return valid_count;
783 }
784
785
786 int _mmcamcorder_init_attr_from_configure(MMHandleType handle)
787 {
788         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
789         _MMCamcorderInfoConverting *info = NULL;
790
791         int table_size = 0;
792         int ret = MM_ERROR_NONE;
793
794         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
795
796         _mmcam_dbg_log("");
797
798         /* Initialize attribute related to camera control */
799         info = hcamcorder->caminfo_convert;
800         table_size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
801         ret = __mmcamcorder_set_info_to_attr( handle, info, table_size );
802         if( ret != MM_ERROR_NONE )
803         {
804                 _mmcam_dbg_err( "ret : %x", ret );
805                 return ret;
806         }
807
808         /* Initialize attribute related to display */
809         info = g_display_info;
810         table_size = sizeof(g_display_info) / sizeof(_MMCamcorderInfoConverting);
811         ret = __mmcamcorder_set_info_to_attr( handle, info, table_size );
812         _mmcam_dbg_log( "result: %x", ret );
813
814         return ret;
815 }
816
817 static int
818 __mmcamcorder_set_info_to_attr( MMHandleType handle, _MMCamcorderInfoConverting *info, int table_size )
819 {
820         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
821         MMHandleType     attrs      = 0;
822
823         int i = 0;
824         int ret = MM_ERROR_NONE;
825
826         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
827
828         attrs = MMF_CAMCORDER_ATTRS (handle);
829         mmf_return_val_if_fail(attrs, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
830
831         camera_conf *conf_info = NULL;
832
833         for (i = 0; i < table_size ; i++ )
834         {
835                 /*
836                 _mmcam_dbg_log( "%d,%d,%d,%d,%s,%d",
837                                 info[i].type,
838                                 info[i].category,
839                                 info[i].attr_idx,
840                                 info[i].attr_idx_sub,
841                                 info[i].keyword,
842                                 info[i].conv_type );
843                 */
844
845                 if( info[i].type == CONFIGURE_TYPE_MAIN )
846                 {
847                         conf_info = hcamcorder->conf_main;
848                         /*
849                         _mmcam_dbg_log( "MAIN configure [%s]", info[i].keyword );
850                         */
851                 }
852                 else
853                 {
854                         conf_info = hcamcorder->conf_ctrl;
855                         /*
856                         _mmcam_dbg_log( "CTRL configure [%s]", info[i].keyword );
857                         */
858                 }
859
860                 switch(info[i].conv_type)
861                 {
862                         case MM_CAMCONVERT_TYPE_INT:
863                         {
864                                 int iarray = (int)NULL;
865
866                                 if (!_mmcamcorder_conf_get_value_int( conf_info, info[i].category, info[i].keyword, &iarray ))
867                                 {
868                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
869                                         break;          //skip to set
870                                 }
871
872                                 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, iarray);
873
874                                 //_mmcam_dbg_log("INT . m:%d, s:%d, arr=%d", info[i].main_key, info[i].sub_key1, iarray);
875                                 break;
876                         }
877                         case MM_CAMCONVERT_TYPE_INT_ARRAY:
878                         {
879                                 int *iarray = NULL;
880                                 int iarray_size = 0;
881                                 int idefault = 0;
882                                 type_int_array *tarray = NULL;
883
884                                 if (!_mmcamcorder_conf_get_value_int_array( conf_info, info[i].category, info[i].keyword, &tarray ))
885                                 {
886                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
887                                         break;          //skip to set
888                                 }
889
890                                 if( tarray )
891                                 {
892                                         idefault = tarray->default_value;
893                                         
894                                         if( info[i].enum_convert )
895                                         {
896                                                 iarray_size = __mmcamcorder_get_valid_array(tarray->value, tarray->count, &iarray, &idefault);
897                                         }
898                                         else
899                                         {
900                                                 iarray = tarray->value;
901                                                 iarray_size = tarray->count;
902                                         }
903
904                                         if( iarray_size > 0 )
905                                         {
906                                                 /*
907                                                 _mmcam_dbg_log("INT Array. attr idx=%d array=%p, size=%d, default=%d",
908                                                                info[i].attr_idx, iarray, iarray_size, idefault);
909                                                 */
910
911                                                 /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
912                                                 //mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
913                                                 mmf_attrs_set_valid_array(attrs, info[i].attr_idx, iarray, iarray_size, idefault);
914
915                                                 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, idefault);
916                                         }
917                                 }
918
919                                 if (iarray && iarray != tarray->value )
920                                         free(iarray);
921
922                                 break;
923                         }
924                         case MM_CAMCONVERT_TYPE_INT_RANGE:
925                         {
926                                 type_int_range *irange = NULL;
927
928                                 if (!_mmcamcorder_conf_get_value_int_range(conf_info, info[i].category, info[i].keyword, &irange))
929                                 {
930                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
931                                         break;          //skip to set
932                                 }
933
934                                 if( irange )
935                                 {
936                                         //_mmcam_dbg_log("INT Range. m:%d, s:%d, min=%d, max=%d", info[i].main_key, info[i].sub_key1, irange->min, irange->max);
937                                         /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
938                                         //mmf_attrs_set_valid_type (attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_RANGE);
939                                         mmf_attrs_set_valid_range(attrs, info[i].attr_idx, irange->min, irange->max, irange->default_value);
940
941                                         ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, irange->default_value);
942                                 }
943
944                                 break;
945                         }
946                         case MM_CAMCONVERT_TYPE_STRING:
947                         {
948                                 const char *cString = NULL;
949                                 unsigned int iString_len = 0;
950
951                                 if (!_mmcamcorder_conf_get_value_string(conf_info, info[i].category, info[i].keyword, &cString ))
952                                 {
953                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
954                                         break;          //skip to set
955                                 }
956
957                                 //_mmcam_dbg_log("String. m:%d, s:%d, cString=%s", info[i].main_key, info[i].sub_key1, cString);
958                                 //strlen makes a crash when null pointer is passed.
959                                 if (cString)
960                                         iString_len = strlen(cString);
961                                 else
962                                         iString_len = 0;
963
964                                 ret = mm_attrs_set_string(attrs, info[i].attr_idx, cString, iString_len);
965                                 break;
966                         }
967                         case MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY:
968                         {
969                                 type_int_pair_array *pair_array = NULL;
970
971                                 //_mmcam_dbg_log("INT PAIR Array. type:%d, attr_idx:%d, attr_idx_pair:%d", info[i].type, info[i].attr_idx, info[i].attr_idx_pair);
972
973                                 if (!_mmcamcorder_conf_get_value_int_pair_array(conf_info, info[i].category, info[i].keyword, &pair_array))
974                                 {
975                                         ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
976                                         break;          //skip to set
977                                 }
978
979                                 if( pair_array && pair_array->count > 0 )
980                                 {
981                                         /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
982                                         //mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
983                                         mmf_attrs_set_valid_array(attrs, info[i].attr_idx,
984                                                                   pair_array->value[0],
985                                                                   pair_array->count,
986                                                                   pair_array->default_value[0]);
987                                         /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
988                                         //mmf_attrs_set_valid_type(attrs, info[i].attr_idx_pair, MM_ATTRS_VALID_TYPE_INT_ARRAY);
989                                         mmf_attrs_set_valid_array(attrs, info[i].attr_idx_pair,
990                                                                   pair_array->value[1],
991                                                                   pair_array->count,
992                                                                   pair_array->default_value[1]);
993
994                                         mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, pair_array->default_value[0]);
995                                         mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx_pair, pair_array->default_value[1]);
996                                 }
997                                 break;
998                         }
999
1000                         case MM_CAMCONVERT_TYPE_USER:
1001                         default:
1002                                 _mmcam_dbg_log("default : s:%d", info[i].attr_idx);
1003                                 break;
1004                 }
1005         }
1006
1007         if (ret != MM_ERROR_NONE || mmf_attrs_commit(attrs) == -1)
1008                 return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
1009         else    
1010                 return MM_ERROR_NONE;
1011 }
1012
1013
1014 int _mmcamcorder_set_converted_value(MMHandleType handle, _MMCamcorderEnumConvert * convert)
1015 {
1016         mmf_camcorder_t* hcamcorder = MMF_CAMCORDER(handle);
1017         type_int_array *array = NULL;
1018
1019         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
1020
1021         _mmcamcorder_conf_get_value_int_array( hcamcorder->conf_ctrl, convert->category, convert->keyword, &array );
1022
1023         if( array )
1024         {
1025                 convert->enum_arr = array->value;
1026         }
1027
1028         return MM_ERROR_NONE;
1029 }
1030
1031
1032 int _mmcamcorder_init_convert_table(MMHandleType handle)
1033 {
1034         mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
1035         int enum_conv_size = sizeof(_MMCamcorderEnumConvert);
1036         int caminfo_conv_size = sizeof(g_caminfo_convert);
1037         int caminfo_conv_length = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
1038         int i = 0;
1039
1040         mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
1041
1042         /* copy default conv data into memory of handle */
1043         memcpy(&(hcamcorder->caminfo_convert), &g_caminfo_convert, caminfo_conv_size);
1044         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]), &_mmcamcorder_enum_conv_whitebalance, enum_conv_size);
1045         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]), &_mmcamcorder_enum_conv_colortone, enum_conv_size);
1046         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ISO]), &_mmcamcorder_enum_conv_iso, enum_conv_size);
1047         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]), &_mmcamcorder_enum_conv_prgrm, enum_conv_size);
1048         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]), &_mmcamcorder_enum_conv_focus_mode, enum_conv_size);
1049         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]), &_mmcamcorder_enum_conv_focus_type, enum_conv_size);
1050         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]), &_mmcamcorder_enum_conv_ae_type, enum_conv_size);
1051         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]), &_mmcamcorder_enum_conv_strobe_mode, enum_conv_size);
1052         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WDR]), &_mmcamcorder_enum_conv_wdr_ctrl, enum_conv_size);
1053         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]), &_mmcamcorder_enum_conv_flip_ctrl, enum_conv_size);
1054         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]), &_mmcamcorder_enum_conv_rotation_ctrl, enum_conv_size);
1055         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]), &_mmcamcorder_enum_conv_ahs, enum_conv_size);
1056         memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]), &_mmcamcorder_enum_conv_video_stabilization, enum_conv_size);
1057
1058         /* set ini info to conv data */
1059         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]));
1060         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]));
1061         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]));
1062         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]));
1063         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]));
1064         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]));
1065         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]));
1066         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]));
1067         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]));
1068         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]));
1069         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]));
1070         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]));
1071         _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]));
1072
1073         /* set modified conv data to handle */
1074         for (i = 0 ; i < caminfo_conv_length ; i++) {
1075                 if (hcamcorder->caminfo_convert[i].type == CONFIGURE_TYPE_CTRL) {
1076                         switch (hcamcorder->caminfo_convert[i].category) {
1077                         case CONFIGURE_CATEGORY_CTRL_STROBE:
1078                                 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "StrobeMode")) {
1079                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]);
1080                                 }
1081                                 break;
1082                         case CONFIGURE_CATEGORY_CTRL_EFFECT:
1083                                 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WhiteBalance")) {
1084                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]);
1085                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ColorTone")) {
1086                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]);
1087                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WDR")) {
1088                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]);
1089                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "Flip")) {
1090                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]);
1091                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "Rotation")) {
1092                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]);
1093                                 }
1094                                 break;
1095                         case CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH:
1096                                 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "FocusMode")) {
1097                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]);
1098                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AFType")) {
1099                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]);
1100                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AEType")) {
1101                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]);
1102                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ISO")) {
1103                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]);
1104                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ProgramMode")) {
1105                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]);
1106                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AntiHandshake")) {
1107                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]);
1108                                 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "VideoStabilization")) {
1109                                         hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]);
1110                                 }
1111                                 break;
1112                         default:
1113                                 break;
1114                         }
1115                 }
1116         }
1117
1118         return MM_ERROR_NONE;
1119 }
1120
1121
1122 double _mmcamcorder_convert_volume(int mslVal)
1123 {
1124         double newVal = -1;
1125         switch (mslVal)
1126         {
1127                 case 0:
1128                         newVal = 0;
1129                         break;
1130                 case 1:
1131                         newVal = 1;
1132                         break;
1133                 default:
1134                         _mmcam_dbg_warn("out of range");
1135                         break;
1136         }
1137
1138         return newVal;
1139 }
1140
1141
1142