4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jeongmo Yang <jm80.yang@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 /*===========================================================================================
26 ========================================================================================== */
27 #include "mm_camcorder_internal.h"
28 #include "mm_camcorder_platform.h"
29 #include "mm_camcorder_configure.h"
31 /*---------------------------------------------------------------------------
32 | GLOBAL VARIABLE DEFINITIONS for internal |
33 ---------------------------------------------------------------------------*/
35 /*---------------------------------------------------------------------------
36 | LOCAL VARIABLE DEFINITIONS for internal |
37 ---------------------------------------------------------------------------*/
38 #define MM_CAMCORDER_ATTR_NONE -1
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.
45 static int __enum_conv_whitebalance[MM_CAMCORDER_WHITE_BALANCE_NUM] ;
47 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_whitebalance =
49 MM_CAMCORDER_WHITE_BALANCE_NUM,
50 __enum_conv_whitebalance,
51 CONFIGURE_CATEGORY_CTRL_EFFECT,
56 static int __enum_conv_colortone[MM_CAMCORDER_COLOR_TONE_NUM];
58 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_colortone =
60 MM_CAMCORDER_COLOR_TONE_NUM,
61 __enum_conv_colortone,
62 CONFIGURE_CATEGORY_CTRL_EFFECT,
67 static int __enum_conv_iso[MM_CAMCORDER_ISO_NUM];
69 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_iso =
73 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
78 static int __enum_conv_prgrm[MM_CAMCORDER_SCENE_MODE_NUM];
80 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_prgrm =
82 MM_CAMCORDER_SCENE_MODE_NUM,
84 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
89 static int __enum_conv_focus_mode[MM_CAMCORDER_FOCUS_MODE_NUM];
91 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_mode =
93 MM_CAMCORDER_FOCUS_MODE_NUM,
94 __enum_conv_focus_mode,
95 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
100 static int __enum_conv_focus_type[MM_CAMCORDER_AUTO_FOCUS_NUM];
102 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_focus_type =
104 MM_CAMCORDER_AUTO_FOCUS_NUM,
105 __enum_conv_focus_type,
106 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
111 static int __enum_conv_ae_type[MM_CAMCORDER_AUTO_EXPOSURE_NUM];
113 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ae_type =
115 MM_CAMCORDER_AUTO_EXPOSURE_NUM,
117 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
122 static int __enum_conv_strobe_ctrl[MM_CAMCORDER_STROBE_CONTROL_NUM];
124 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_ctrl =
126 MM_CAMCORDER_STROBE_CONTROL_NUM,
127 __enum_conv_strobe_ctrl,
128 CONFIGURE_CATEGORY_CTRL_STROBE,
133 static int __enum_conv_strobe_mode[MM_CAMCORDER_STROBE_MODE_NUM];
135 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_strobe_mode =
137 MM_CAMCORDER_STROBE_MODE_NUM,
138 __enum_conv_strobe_mode,
139 CONFIGURE_CATEGORY_CTRL_STROBE,
144 static int __enum_conv_wdr_ctrl[MM_CAMCORDER_WDR_NUM];
146 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_wdr_ctrl =
148 MM_CAMCORDER_WDR_NUM,
149 __enum_conv_wdr_ctrl,
150 CONFIGURE_CATEGORY_CTRL_EFFECT,
154 static int __enum_conv_flip_ctrl[MM_CAMCORDER_FLIP_NUM];
156 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_flip_ctrl =
158 MM_CAMCORDER_FLIP_NUM,
159 __enum_conv_flip_ctrl,
160 CONFIGURE_CATEGORY_CTRL_EFFECT,
164 static int __enum_conv_rotation_ctrl[MM_CAMCORDER_ROTATION_NUM];
166 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_rotation_ctrl =
168 MM_CAMCORDER_ROTATION_NUM,
169 __enum_conv_rotation_ctrl,
170 CONFIGURE_CATEGORY_CTRL_EFFECT,
175 static int __enum_conv_ahs[MM_CAMCORDER_AHS_NUM];
177 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_ahs =
179 MM_CAMCORDER_AHS_NUM,
181 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
186 static int __enum_conv_video_stabilization[MM_CAMCORDER_VIDEO_STABILIZATION_NUM];
188 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_video_stabilization =
190 MM_CAMCORDER_VIDEO_STABILIZATION_NUM,
191 __enum_conv_video_stabilization,
192 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
197 static int __enum_conv_hdr_capture[MM_CAMCORDER_HDR_CAPTURE_NUM];
199 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_hdr_capture =
201 MM_CAMCORDER_HDR_CAPTURE_NUM,
202 __enum_conv_hdr_capture,
203 CONFIGURE_CATEGORY_CTRL_CAPTURE,
207 static int __enum_conv_detect_mode[MM_CAMCORDER_DETECT_MODE_NUM];
209 _MMCamcorderEnumConvert _mmcamcorder_enum_conv_detect_mode =
211 MM_CAMCORDER_DETECT_MODE_NUM,
212 __enum_conv_detect_mode,
213 CONFIGURE_CATEGORY_CTRL_DETECT,
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.
224 static _MMCamcorderInfoConverting g_display_info[] = {
227 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
228 MM_CAM_DISPLAY_DEVICE,
229 MM_CAMCORDER_ATTR_NONE,
231 MM_CAMCONVERT_TYPE_INT_ARRAY,
236 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
238 MM_CAMCORDER_ATTR_NONE,
240 MM_CAMCONVERT_TYPE_INT_ARRAY,
245 CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT,
246 MM_CAM_DISPLAY_SURFACE,
247 MM_CAMCORDER_ATTR_NONE,
249 MM_CAMCONVERT_TYPE_INT_ARRAY,
254 static _MMCamcorderInfoConverting g_caminfo_convert[CAMINFO_CONVERT_NUM] = {
257 CONFIGURE_CATEGORY_CTRL_CAMERA,
258 MM_CAM_CAMERA_DEVICE_NAME,
259 MM_CAMCORDER_ATTR_NONE,
261 MM_CAMCONVERT_TYPE_STRING,
266 CONFIGURE_CATEGORY_CTRL_CAMERA,
268 MM_CAM_CAMERA_HEIGHT,
270 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
275 CONFIGURE_CATEGORY_CTRL_CAMERA,
276 MM_CAM_CAPTURE_WIDTH,
277 MM_CAM_CAPTURE_HEIGHT,
279 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
284 CONFIGURE_CATEGORY_CTRL_CAMERA,
286 MM_CAMCORDER_ATTR_NONE,
288 MM_CAMCONVERT_TYPE_INT_ARRAY,
293 CONFIGURE_CATEGORY_CTRL_CAMERA,
294 MM_CAM_CAMERA_FORMAT,
295 MM_CAMCORDER_ATTR_NONE,
297 MM_CAMCONVERT_TYPE_INT_ARRAY,
302 CONFIGURE_CATEGORY_CTRL_STROBE,
303 MM_CAM_STROBE_CONTROL,
304 MM_CAMCORDER_ATTR_NONE,
306 MM_CAMCONVERT_TYPE_INT_ARRAY,
307 &_mmcamcorder_enum_conv_strobe_ctrl,
311 CONFIGURE_CATEGORY_CTRL_STROBE,
312 MM_CAM_STROBE_CAPABILITIES,
313 MM_CAMCORDER_ATTR_NONE,
314 "StrobeCapabilities",
315 MM_CAMCONVERT_TYPE_INT_ARRAY,
320 CONFIGURE_CATEGORY_CTRL_STROBE,
322 MM_CAMCORDER_ATTR_NONE,
324 MM_CAMCONVERT_TYPE_INT_ARRAY,
325 &_mmcamcorder_enum_conv_strobe_mode,
329 CONFIGURE_CATEGORY_CTRL_EFFECT,
330 MM_CAM_FILTER_BRIGHTNESS,
331 MM_CAMCORDER_ATTR_NONE,
333 MM_CAMCONVERT_TYPE_INT_RANGE,
338 CONFIGURE_CATEGORY_CTRL_EFFECT,
339 MM_CAM_FILTER_CONTRAST,
340 MM_CAMCORDER_ATTR_NONE,
342 MM_CAMCONVERT_TYPE_INT_RANGE,
347 CONFIGURE_CATEGORY_CTRL_EFFECT,
348 MM_CAM_FILTER_SATURATION,
349 MM_CAMCORDER_ATTR_NONE,
351 MM_CAMCONVERT_TYPE_INT_RANGE,
356 CONFIGURE_CATEGORY_CTRL_EFFECT,
358 MM_CAMCORDER_ATTR_NONE,
360 MM_CAMCONVERT_TYPE_INT_RANGE,
365 CONFIGURE_CATEGORY_CTRL_EFFECT,
366 MM_CAM_FILTER_SHARPNESS,
367 MM_CAMCORDER_ATTR_NONE,
369 MM_CAMCONVERT_TYPE_INT_RANGE,
374 CONFIGURE_CATEGORY_CTRL_EFFECT,
376 MM_CAMCORDER_ATTR_NONE,
378 MM_CAMCONVERT_TYPE_INT_ARRAY,
379 &_mmcamcorder_enum_conv_whitebalance,
383 CONFIGURE_CATEGORY_CTRL_EFFECT,
384 MM_CAM_FILTER_COLOR_TONE,
385 MM_CAMCORDER_ATTR_NONE,
387 MM_CAMCONVERT_TYPE_INT_ARRAY,
388 &_mmcamcorder_enum_conv_colortone,
392 CONFIGURE_CATEGORY_CTRL_EFFECT,
394 MM_CAMCORDER_ATTR_NONE,
396 MM_CAMCONVERT_TYPE_INT_ARRAY,
397 &_mmcamcorder_enum_conv_wdr_ctrl,
401 CONFIGURE_CATEGORY_CTRL_EFFECT,
403 MM_CAMCORDER_ATTR_NONE,
405 MM_CAMCONVERT_TYPE_INT_ARRAY,
406 &_mmcamcorder_enum_conv_flip_ctrl,
410 CONFIGURE_CATEGORY_CTRL_EFFECT,
411 MM_CAM_CAMERA_ROTATION,
412 MM_CAMCORDER_ATTR_NONE,
414 MM_CAMCONVERT_TYPE_INT_ARRAY,
415 &_mmcamcorder_enum_conv_rotation_ctrl,
419 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
420 MM_CAM_CAMERA_DIGITAL_ZOOM,
421 MM_CAMCORDER_ATTR_NONE,
423 MM_CAMCONVERT_TYPE_INT_RANGE,
428 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
429 MM_CAM_CAMERA_OPTICAL_ZOOM,
430 MM_CAMCORDER_ATTR_NONE,
432 MM_CAMCONVERT_TYPE_INT_RANGE,
437 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
438 MM_CAM_CAMERA_FOCUS_MODE,
439 MM_CAMCORDER_ATTR_NONE,
441 MM_CAMCONVERT_TYPE_INT_ARRAY,
442 &_mmcamcorder_enum_conv_focus_mode,
446 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
447 MM_CAM_CAMERA_AF_SCAN_RANGE,
448 MM_CAMCORDER_ATTR_NONE,
450 MM_CAMCONVERT_TYPE_INT_ARRAY,
451 &_mmcamcorder_enum_conv_focus_type,
455 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
456 MM_CAM_CAMERA_EXPOSURE_MODE,
457 MM_CAMCORDER_ATTR_NONE,
459 MM_CAMCONVERT_TYPE_INT_ARRAY,
460 &_mmcamcorder_enum_conv_ae_type,
464 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
465 MM_CAM_CAMERA_EXPOSURE_VALUE,
466 MM_CAMCORDER_ATTR_NONE,
468 MM_CAMCONVERT_TYPE_INT_RANGE,
473 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
474 MM_CAM_CAMERA_F_NUMBER,
475 MM_CAMCORDER_ATTR_NONE,
477 MM_CAMCONVERT_TYPE_INT_ARRAY,
482 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
483 MM_CAM_CAMERA_SHUTTER_SPEED,
484 MM_CAMCORDER_ATTR_NONE,
486 MM_CAMCONVERT_TYPE_INT_ARRAY,
491 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
493 MM_CAMCORDER_ATTR_NONE,
495 MM_CAMCONVERT_TYPE_INT_ARRAY,
496 &_mmcamcorder_enum_conv_iso,
500 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
501 MM_CAM_FILTER_SCENE_MODE,
502 MM_CAMCORDER_ATTR_NONE,
504 MM_CAMCONVERT_TYPE_INT_ARRAY,
505 &_mmcamcorder_enum_conv_prgrm,
509 CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
510 MM_CAM_CAMERA_ANTI_HANDSHAKE,
511 MM_CAMCORDER_ATTR_NONE,
513 MM_CAMCONVERT_TYPE_INT_ARRAY,
514 &_mmcamcorder_enum_conv_ahs,
518 CONFIGURE_CATEGORY_CTRL_CAPTURE,
519 MM_CAM_CAPTURE_FORMAT,
520 MM_CAMCORDER_ATTR_NONE,
522 MM_CAMCONVERT_TYPE_INT_ARRAY,
527 CONFIGURE_CATEGORY_CTRL_CAPTURE,
528 MM_CAM_IMAGE_ENCODER_QUALITY,
529 MM_CAMCORDER_ATTR_NONE,
531 MM_CAMCONVERT_TYPE_INT_RANGE,
536 CONFIGURE_CATEGORY_CTRL_CAPTURE,
537 MM_CAM_CAPTURE_COUNT,
538 MM_CAMCORDER_ATTR_NONE,
540 MM_CAMCONVERT_TYPE_INT_RANGE,
545 CONFIGURE_CATEGORY_CTRL_CAPTURE,
546 MM_CAM_CAMERA_HDR_CAPTURE,
547 MM_CAMCORDER_ATTR_NONE,
549 MM_CAMCONVERT_TYPE_INT_ARRAY,
550 &_mmcamcorder_enum_conv_hdr_capture,
554 CONFIGURE_CATEGORY_CTRL_DETECT,
556 MM_CAMCORDER_ATTR_NONE,
558 MM_CAMCONVERT_TYPE_INT_ARRAY,
559 &_mmcamcorder_enum_conv_detect_mode,
563 CONFIGURE_CATEGORY_CTRL_DETECT,
564 MM_CAM_DETECT_NUMBER,
565 MM_CAMCORDER_ATTR_NONE,
567 MM_CAMCONVERT_TYPE_INT_RANGE,
572 CONFIGURE_CATEGORY_CTRL_DETECT,
573 MM_CAM_DETECT_FOCUS_SELECT,
574 MM_CAMCORDER_ATTR_NONE,
576 MM_CAMCONVERT_TYPE_INT_RANGE,
581 CONFIGURE_CATEGORY_CTRL_DETECT,
582 MM_CAM_DETECT_SELECT_NUMBER,
583 MM_CAMCORDER_ATTR_NONE,
584 "DetectSelectNumber",
585 MM_CAMCONVERT_TYPE_INT_RANGE,
590 CONFIGURE_CATEGORY_CTRL_DETECT,
591 MM_CAM_DETECT_STATUS,
592 MM_CAMCORDER_ATTR_NONE,
594 MM_CAMCONVERT_TYPE_INT_ARRAY,
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,
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,
617 CONFIGURE_CATEGORY_CTRL_CAMERA,
621 MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY,
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 );
633 /*===========================================================================================
635 | FUNCTION DEFINITIONS |
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)
644 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
645 _MMCamcorderInfoConverting *info = NULL;
647 int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
649 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
651 //_mmcam_dbg_log("attr_idx(%d), mslval(%d)", attr_idx, mslval);
653 info = hcamcorder->caminfo_convert;
655 for (i = 0; i < size; i++)
657 if (info[i].attr_idx == attr_idx)
659 _MMCamcorderEnumConvert * enum_convert = NULL;
660 enum_convert = info[i].enum_convert;
662 if (enum_convert == NULL)
664 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
668 if (enum_convert->enum_arr == NULL)
670 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
674 if( enum_convert->total_enum_num > mslval && mslval >= 0 )
676 //_mmcam_dbg_log("original value(%d) -> converted value(%d)", mslval, enum_convert->enum_arr[mslval]);
677 return enum_convert->enum_arr[mslval];
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 );
687 _mmcam_dbg_warn("There is no category to match. Just return the original value.");
692 //convert sensor value to MSL value
693 int _mmcamcorder_convert_sensor_to_msl(MMHandleType handle, int attr_idx, int sensval)
695 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
696 _MMCamcorderInfoConverting *info = NULL;
698 int size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
700 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
702 info = hcamcorder->caminfo_convert;
704 for( i = 0 ; i < size ; i++ )
706 if( info[i].attr_idx == attr_idx )
708 _MMCamcorderEnumConvert * enum_convert = NULL;
709 enum_convert = info[i].enum_convert;
711 if( enum_convert == NULL )
713 //_mmcam_dbg_log("enum_convert is NULL. Just return the original value.");
717 if( enum_convert->enum_arr == NULL )
719 _mmcam_dbg_warn("Unexpected error. Array pointer of enum_convert is NULL. Just return the original value.");
723 for( j = 0 ; j < enum_convert->total_enum_num ; j++ )
725 if( sensval == enum_convert->enum_arr[j] )
727 //_mmcam_dbg_log("original value(%d) -> converted value(%d)", sensval, j);
732 _mmcam_dbg_warn("There is no sensor value matched with input param. Just return the original value.");
738 _mmcam_dbg_log("There is no category to match. Just return the original value.");
743 __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** valid_array, int * valid_default )
747 int new_default = _MMCAMCORDER_SENSOR_ENUM_NONE;
749 for (i = 0; i < original_count; i++) {
750 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE) {
755 if (valid_count > 0) {
756 *valid_array = (int*)malloc(sizeof(int) * valid_count);
759 for (i = 0; i < original_count; i++) {
760 if (original_array[i] != _MMCAMCORDER_SENSOR_ENUM_NONE) {
761 (*valid_array)[valid_count++] = i;
762 //_mmcam_dbg_log( "valid_array[%d] = %d", valid_count-1, (*valid_array)[valid_count-1] );
764 if (original_array[i] == *valid_default &&
765 new_default == _MMCAMCORDER_SENSOR_ENUM_NONE) {
767 //_mmcam_dbg_log( "converted MSL default[%d]", new_default );
773 if (new_default != _MMCAMCORDER_SENSOR_ENUM_NONE) {
774 *valid_default = new_default;
781 int _mmcamcorder_init_attr_from_configure(MMHandleType handle)
783 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
784 _MMCamcorderInfoConverting *info = NULL;
787 int ret = MM_ERROR_NONE;
789 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
793 /* Initialize attribute related to camera control */
794 info = hcamcorder->caminfo_convert;
795 table_size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
796 ret = __mmcamcorder_set_info_to_attr( handle, info, table_size );
797 if( ret != MM_ERROR_NONE )
799 _mmcam_dbg_err( "ret : %x", ret );
803 /* Initialize attribute related to display */
804 info = g_display_info;
805 table_size = sizeof(g_display_info) / sizeof(_MMCamcorderInfoConverting);
806 ret = __mmcamcorder_set_info_to_attr( handle, info, table_size );
808 _mmcam_dbg_log( "result: %x", ret );
814 __mmcamcorder_set_info_to_attr( MMHandleType handle, _MMCamcorderInfoConverting *info, int table_size )
816 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
817 MMHandleType attrs = 0;
820 int ret = MM_ERROR_NONE;
822 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
824 attrs = MMF_CAMCORDER_ATTRS (handle);
825 mmf_return_val_if_fail(attrs, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
827 camera_conf *conf_info = NULL;
829 for (i = 0; i < table_size ; i++ )
832 _mmcam_dbg_log( "%d,%d,%d,%d,%s,%d",
836 info[i].attr_idx_sub,
841 if( info[i].type == CONFIGURE_TYPE_MAIN )
843 conf_info = hcamcorder->conf_main;
844 /*_mmcam_dbg_log( "MAIN configure [%s]", info[i].keyword );*/
848 conf_info = hcamcorder->conf_ctrl;
849 /*_mmcam_dbg_log( "CTRL configure [%s]", info[i].keyword );*/
852 switch(info[i].conv_type)
854 case MM_CAMCONVERT_TYPE_INT:
858 if (!_mmcamcorder_conf_get_value_int(handle, conf_info, info[i].category, info[i].keyword, &ivalue))
860 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
864 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, ivalue);
867 case MM_CAMCONVERT_TYPE_INT_ARRAY:
872 type_int_array *tarray = NULL;
874 if (!_mmcamcorder_conf_get_value_int_array( conf_info, info[i].category, info[i].keyword, &tarray ))
876 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
882 idefault = tarray->default_value;
884 if( info[i].enum_convert )
886 iarray_size = __mmcamcorder_get_valid_array(tarray->value, tarray->count, &iarray, &idefault);
890 iarray = tarray->value;
891 iarray_size = tarray->count;
894 if( iarray_size > 0 )
897 _mmcam_dbg_log("INT Array. attr idx=%d array=%p, size=%d, default=%d",
898 info[i].attr_idx, iarray, iarray_size, idefault);
901 /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
902 //mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
903 mmf_attrs_set_valid_array(attrs, info[i].attr_idx, iarray, iarray_size, idefault);
906 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, idefault);
909 if (iarray && iarray != tarray->value )
914 case MM_CAMCONVERT_TYPE_INT_RANGE:
916 type_int_range *irange = NULL;
918 if (!_mmcamcorder_conf_get_value_int_range(conf_info, info[i].category, info[i].keyword, &irange))
920 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
926 //_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);
927 /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
928 //mmf_attrs_set_valid_type (attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_RANGE);
929 mmf_attrs_set_valid_range(attrs, info[i].attr_idx, irange->min, irange->max, irange->default_value);
931 ret = mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, irange->default_value);
936 case MM_CAMCONVERT_TYPE_STRING:
938 const char *cString = NULL;
939 unsigned int iString_len = 0;
941 if (!_mmcamcorder_conf_get_value_string(handle, conf_info, info[i].category, info[i].keyword, &cString ))
943 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
947 //_mmcam_dbg_log("String. m:%d, s:%d, cString=%s", info[i].main_key, info[i].sub_key1, cString);
948 //strlen makes a crash when null pointer is passed.
950 iString_len = strlen(cString);
954 ret = mm_attrs_set_string(attrs, info[i].attr_idx, cString, iString_len);
957 case MM_CAMCONVERT_TYPE_INT_PAIR_ARRAY:
959 type_int_pair_array *pair_array = NULL;
961 /*_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);*/
963 if (!_mmcamcorder_conf_get_value_int_pair_array(conf_info, info[i].category, info[i].keyword, &pair_array))
965 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
969 if( pair_array && pair_array->count > 0 )
971 /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
972 //mmf_attrs_set_valid_type(attrs, info[i].attr_idx, MM_ATTRS_VALID_TYPE_INT_ARRAY);
973 mmf_attrs_set_valid_array(attrs, info[i].attr_idx,
974 pair_array->value[0],
976 pair_array->default_value[0]);
977 /* "mmf_attrs_set_valid_type" initializes spec value in attribute, so allocated memory could be missed */
978 //mmf_attrs_set_valid_type(attrs, info[i].attr_idx_pair, MM_ATTRS_VALID_TYPE_INT_ARRAY);
979 mmf_attrs_set_valid_array(attrs, info[i].attr_idx_pair,
980 pair_array->value[1],
982 pair_array->default_value[1]);
984 mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx, pair_array->default_value[0]);
985 mm_attrs_set_int(MMF_CAMCORDER_ATTRS(hcamcorder), info[i].attr_idx_pair, pair_array->default_value[1]);
990 case MM_CAMCONVERT_TYPE_USER:
992 _mmcam_dbg_log("default : s:%d", info[i].attr_idx);
997 if (ret != MM_ERROR_NONE || mmf_attrs_commit(attrs) == -1)
998 return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
1000 return MM_ERROR_NONE;
1004 int _mmcamcorder_set_converted_value(MMHandleType handle, _MMCamcorderEnumConvert * convert)
1006 mmf_camcorder_t* hcamcorder = MMF_CAMCORDER(handle);
1007 type_int_array *array = NULL;
1009 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
1011 _mmcamcorder_conf_get_value_int_array( hcamcorder->conf_ctrl, convert->category, convert->keyword, &array );
1015 convert->enum_arr = array->value;
1018 return MM_ERROR_NONE;
1022 int _mmcamcorder_init_convert_table(MMHandleType handle)
1024 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
1025 int enum_conv_size = sizeof(_MMCamcorderEnumConvert);
1026 int caminfo_conv_size = sizeof(g_caminfo_convert);
1027 int caminfo_conv_length = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting);
1030 mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
1032 /* copy default conv data into memory of handle */
1033 memcpy(&(hcamcorder->caminfo_convert), &g_caminfo_convert, caminfo_conv_size);
1034 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]), &_mmcamcorder_enum_conv_whitebalance, enum_conv_size);
1035 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]), &_mmcamcorder_enum_conv_colortone, enum_conv_size);
1036 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ISO]), &_mmcamcorder_enum_conv_iso, enum_conv_size);
1037 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]), &_mmcamcorder_enum_conv_prgrm, enum_conv_size);
1038 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]), &_mmcamcorder_enum_conv_focus_mode, enum_conv_size);
1039 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]), &_mmcamcorder_enum_conv_focus_type, enum_conv_size);
1040 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]), &_mmcamcorder_enum_conv_ae_type, enum_conv_size);
1041 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]), &_mmcamcorder_enum_conv_strobe_mode, enum_conv_size);
1042 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_WDR]), &_mmcamcorder_enum_conv_wdr_ctrl, enum_conv_size);
1043 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]), &_mmcamcorder_enum_conv_flip_ctrl, enum_conv_size);
1044 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]), &_mmcamcorder_enum_conv_rotation_ctrl, enum_conv_size);
1045 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]), &_mmcamcorder_enum_conv_ahs, enum_conv_size);
1046 memcpy(&(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]), &_mmcamcorder_enum_conv_video_stabilization, enum_conv_size);
1048 /* set ini info to conv data */
1049 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]));
1050 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]));
1051 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]));
1052 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]));
1053 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]));
1054 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]));
1055 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]));
1056 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]));
1057 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]));
1058 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]));
1059 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]));
1060 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]));
1061 _mmcamcorder_set_converted_value(handle, &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]));
1063 /* set modified conv data to handle */
1064 for (i = 0 ; i < caminfo_conv_length ; i++) {
1065 if (hcamcorder->caminfo_convert[i].type == CONFIGURE_TYPE_CTRL) {
1066 switch (hcamcorder->caminfo_convert[i].category) {
1067 case CONFIGURE_CATEGORY_CTRL_STROBE:
1068 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "StrobeMode")) {
1069 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_STROBE_MODE]);
1072 case CONFIGURE_CATEGORY_CTRL_EFFECT:
1073 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WhiteBalance")) {
1074 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WHITE_BALANCE]);
1075 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ColorTone")) {
1076 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_COLOR_TONE]);
1077 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "WDR")) {
1078 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_WDR]);
1079 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "Flip")) {
1080 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_FLIP]);
1081 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "Rotation")) {
1082 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ROTATION]);
1085 case CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH:
1086 if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "FocusMode")) {
1087 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_FOCUS_MODE]);
1088 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AFType")) {
1089 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_AF_RANGE]);
1090 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AEType")) {
1091 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_EXPOSURE_MODE]);
1092 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ISO")) {
1093 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ISO]);
1094 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "ProgramMode")) {
1095 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_PROGRAM_MODE]);
1096 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "AntiHandshake")) {
1097 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_ANTI_HAND_SHAKE]);
1098 } else if (!strcmp(hcamcorder->caminfo_convert[i].keyword, "VideoStabilization")) {
1099 hcamcorder->caminfo_convert[i].enum_convert = &(hcamcorder->enum_conv[ENUM_CONVERT_VIDEO_STABILIZATION]);
1108 return MM_ERROR_NONE;
1112 double _mmcamcorder_convert_volume(int mslVal)
1124 _mmcam_dbg_warn("out of range");