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