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 /*=======================================================================================
24 =======================================================================================*/
30 #include "mm_camcorder_internal.h"
31 #include "mm_camcorder_configure.h"
33 /*-----------------------------------------------------------------------
34 | MACRO DEFINITIONS: |
35 -----------------------------------------------------------------------*/
36 #define CONFIGURE_PATH "/usr/etc"
37 #define CONFIGURE_PATH_RETRY "/opt/etc"
39 /*-----------------------------------------------------------------------
40 | GLOBAL VARIABLE DEFINITIONS |
41 -----------------------------------------------------------------------*/
43 /*-----------------------------------------------------------------------
44 | LOCAL VARIABLE DEFINITIONS |
45 -----------------------------------------------------------------------*/
46 static int conf_main_category_size[CONFIGURE_CATEGORY_MAIN_NUM] = { 0, };
47 static int conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_NUM] = { 0, };
49 static conf_info_table* conf_main_info_table[CONFIGURE_CATEGORY_MAIN_NUM] = { NULL, };
50 static conf_info_table* conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_NUM] = { NULL, };
53 * Videosrc element default value
55 static type_element _videosrc_element_default = {
65 * Audiosrc element default value
67 static type_int ___audiosrc_default_channel = { "Channel", 1 };
68 static type_int ___audiosrc_default_bitrate = { "BitRate", 8000 };
69 static type_int ___audiosrc_default_depth = { "Depth", 16 };
70 static type_int ___audiosrc_default_blocksize = { "BlockSize", 1280 };
71 static type_int* __audiosrc_default_int_array[] = {
72 &___audiosrc_default_channel,
73 &___audiosrc_default_bitrate,
74 &___audiosrc_default_depth,
75 &___audiosrc_default_blocksize,
77 static type_string ___audiosrc_default_device = { "Device", "default" };
78 static type_string* __audiosrc_default_string_array[] = {
79 &___audiosrc_default_device,
81 static type_element _audiosrc_element_default = {
84 __audiosrc_default_int_array,
85 sizeof( __audiosrc_default_int_array ) / sizeof( type_int* ),
86 __audiosrc_default_string_array,
87 sizeof( __audiosrc_default_string_array ) / sizeof( type_string* ),
90 static type_element _audiomodemsrc_element_default = {
91 "AudiomodemsrcElement",
93 __audiosrc_default_int_array,
94 sizeof( __audiosrc_default_int_array ) / sizeof( type_int* ),
95 __audiosrc_default_string_array,
96 sizeof( __audiosrc_default_string_array ) / sizeof( type_string* ),
101 * Videosink element default value
103 static type_int ___videosink_default_display_id = { "display-id", 3 };
104 static type_int ___videosink_default_x = { "x", 0 };
105 static type_int ___videosink_default_y = { "y", 0 };
106 static type_int ___videosink_default_width = { "width", 800 };
107 static type_int ___videosink_default_height = { "height", 480 };
108 static type_int ___videosink_default_rotation = { "rotation", 1 };
109 static type_int* __videosink_default_int_array[] = {
110 &___videosink_default_display_id,
111 &___videosink_default_x,
112 &___videosink_default_y,
113 &___videosink_default_width,
114 &___videosink_default_height,
115 &___videosink_default_rotation,
117 static type_string* __videosink_default_string_array[] = { NULL };
118 static type_element _videosink_element_x_default = {
121 __videosink_default_int_array,
122 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
123 __videosink_default_string_array,
124 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
126 static type_element _videosink_element_evas_default = {
127 "VideosinkElementEvas",
129 __videosink_default_int_array,
130 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
131 __videosink_default_string_array,
132 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
134 static type_element _videosink_element_gl_default = {
135 "VideosinkElementGL",
137 __videosink_default_int_array,
138 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
139 __videosink_default_string_array,
140 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
142 static type_element _videosink_element_null_default = {
143 "VideosinkElementNull",
145 __videosink_default_int_array,
146 sizeof( __videosink_default_int_array ) / sizeof( type_int* ),
147 __videosink_default_string_array,
148 sizeof( __videosink_default_string_array ) / sizeof( type_string* ),
152 * Videoscale element default value
154 static type_element _videoscale_element_default = {
164 * Videoconvert element default value
166 static type_element _videoconvert_element_default = {
167 "VideoconvertElement",
176 * Record sink element default value
178 static type_element _recordsink_element_default = {
188 * H263 element default value
190 static type_element _h263_element_default = {
200 * H264 element default value
202 static type_element _h264_element_default = {
212 * H26L element default value
214 static type_element _h26l_element_default = {
224 * MPEG4 element default value
226 static type_element _mpeg4_element_default = {
236 * MPEG1 element default value
238 static type_element _mpeg1_element_default = {
248 * THEORA element default value
250 static type_element _theora_element_default = {
260 * AMR element default value
262 static type_element _amr_element_default = {
272 * G723_1 element default value
274 static type_element _g723_1_element_default = {
284 * MP3 element default value
286 static type_element _mp3_element_default = {
296 * AAC element default value
298 static type_element _aac_element_default = {
308 * MMF element default value
310 static type_element _mmf_element_default = {
320 * ADPCM element default value
322 static type_element _adpcm_element_default = {
324 "ffenc_adpcm_ima_qt",
332 * WAVE element default value
334 static type_element _wave_element_default = {
343 static type_element _vorbis_element_default = {
353 * MIDI element default value
355 static type_element _midi_element_default = {
365 * IMELODY element default value
367 static type_element _imelody_element_default = {
377 * JPEG element default value
379 static type_element _jpeg_element_default = {
389 * PNG element default value
391 static type_element _png_element_default = {
401 * BMP element default value
403 static type_element _bmp_element_default = {
413 * WBMP element default value
415 static type_element _wbmp_element_default = {
425 * TIFF element default value
427 static type_element _tiff_element_default = {
437 * PCX element default value
439 static type_element _pcx_element_default = {
449 * GIF element default value
451 static type_element _gif_element_default = {
461 * ICO element default value
463 static type_element _ico_element_default = {
473 * RAS element default value
475 static type_element _ras_element_default = {
485 * TGA element default value
487 static type_element _tga_element_default = {
497 * XBM element default value
499 static type_element _xbm_element_default = {
509 * XPM element default value
511 static type_element _xpm_element_default = {
521 * 3GP element default value
523 static type_element _3gp_element_default = {
533 * AMR mux element default value
535 static type_element _amrmux_element_default = {
545 * MP4 element default value
547 static type_element _mp4_element_default = {
557 * AAC mux element default value
559 static type_element _aacmux_element_default = {
569 * MP3 mux element default value
571 static type_element _mp3mux_element_default = {
581 * OGG element default value
583 static type_element _ogg_element_default = {
593 * WAV element default value
595 static type_element _wav_element_default = {
605 * AVI element default value
607 static type_element _avi_element_default = {
617 * WMA element default value
619 static type_element _wma_element_default = {
629 * WMV element default value
631 static type_element _wmv_element_default = {
641 * MID element default value
643 static type_element _mid_element_default = {
653 * MMF mux element default value
655 static type_element _mmfmux_element_default = {
665 * MATROSKA element default value
667 static type_element _matroska_element_default = {
677 * M2TS element default value
679 static type_element _m2ts_element_default = {
689 * [General] matching table
691 static conf_info_table conf_main_general_table[] = {
692 { "SyncStateChange", CONFIGURE_VALUE_INT, {1} },
693 { "GSTInitOption", CONFIGURE_VALUE_STRING_ARRAY, {(int)NULL} },
694 { "ModelName", CONFIGURE_VALUE_STRING, {(int)"Samsung Camera"} },
695 { "DisabledAttributes", CONFIGURE_VALUE_STRING_ARRAY, {(int)NULL} },
699 * [VideoInput] matching table
701 static conf_info_table conf_main_video_input_table[] = {
702 { "UseConfCtrl", CONFIGURE_VALUE_INT, {1} },
703 { "ConfCtrlFile0", CONFIGURE_VALUE_STRING, {(int)"mmfw_camcorder_dev_video_pri.ini"} },
704 { "ConfCtrlFile1", CONFIGURE_VALUE_STRING, {(int)"mmfw_camcorder_dev_video_sec.ini"} },
705 { "VideosrcElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videosrc_element_default} },
706 { "UseVideoscale", CONFIGURE_VALUE_INT, {0} },
707 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoscale_element_default} },
708 { "UseZeroCopyFormat", CONFIGURE_VALUE_INT, {0} },
709 { "DeviceCount", CONFIGURE_VALUE_INT, {MM_VIDEO_DEVICE_NUM} },
710 { "SupportMediaPacketPreviewCb", CONFIGURE_VALUE_INT, {0} },
714 * [AudioInput] matching table
716 static conf_info_table conf_main_audio_input_table[] = {
717 { "AudioDevice", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
718 { "AudiosrcElement", CONFIGURE_VALUE_ELEMENT, {(int)&_audiosrc_element_default} },
719 { "AudiomodemsrcElement", CONFIGURE_VALUE_ELEMENT, {(int)&_audiomodemsrc_element_default} },
723 * [VideoOutput] matching table
725 static conf_info_table conf_main_video_output_table[] = {
726 { "DisplayDevice", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
727 { "DisplayMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
728 { "Videosink", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
729 { "VideosinkElementX", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_x_default} },
730 { "VideosinkElementEvas", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_evas_default} },
731 { "VideosinkElementGL", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_gl_default} },
732 { "VideosinkElementNull", CONFIGURE_VALUE_ELEMENT, {(int)&_videosink_element_null_default} },
733 { "UseVideoscale", CONFIGURE_VALUE_INT, {0} },
734 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoscale_element_default} },
735 { "VideoconvertElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoconvert_element_default} },
739 * [Capture] matching table
741 static conf_info_table conf_main_capture_table[] = {
742 { "UseEncodebin", CONFIGURE_VALUE_INT, {0} },
743 { "UseCaptureMode", CONFIGURE_VALUE_INT, {0} },
744 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {(int)&_videoscale_element_default} },
745 { "PlayCaptureSound", CONFIGURE_VALUE_INT, {1} },
749 * [Record] matching table
751 static conf_info_table conf_main_record_table[] = {
752 { "UseAudioEncoderQueue", CONFIGURE_VALUE_INT, {1} },
753 { "UseVideoEncoderQueue", CONFIGURE_VALUE_INT, {1} },
754 { "VideoProfile", CONFIGURE_VALUE_INT, {0} },
755 { "VideoAutoAudioConvert", CONFIGURE_VALUE_INT, {0} },
756 { "VideoAutoAudioResample", CONFIGURE_VALUE_INT, {0} },
757 { "VideoAutoColorSpace", CONFIGURE_VALUE_INT, {0} },
758 { "AudioProfile", CONFIGURE_VALUE_INT, {0} },
759 { "AudioAutoAudioConvert", CONFIGURE_VALUE_INT, {0} },
760 { "AudioAutoAudioResample", CONFIGURE_VALUE_INT, {0} },
761 { "AudioAutoColorSpace", CONFIGURE_VALUE_INT, {0} },
762 { "ImageProfile", CONFIGURE_VALUE_INT, {0} },
763 { "ImageAutoAudioConvert", CONFIGURE_VALUE_INT, {0} },
764 { "ImageAutoAudioResample", CONFIGURE_VALUE_INT, {0} },
765 { "ImageAutoColorSpace", CONFIGURE_VALUE_INT, {0} },
766 { "RecordsinkElement", CONFIGURE_VALUE_ELEMENT, {(int)&_recordsink_element_default} },
767 { "UseNoiseSuppressor", CONFIGURE_VALUE_INT, {0} },
768 { "DropVideoFrame", CONFIGURE_VALUE_INT, {0} },
769 { "PassFirstVideoFrame", CONFIGURE_VALUE_INT, {0} },
770 { "SupportDualStream", CONFIGURE_VALUE_INT, {FALSE} },
774 * [VideoEncoder] matching table
776 static conf_info_table conf_main_video_encoder_table[] = {
777 { "H263", CONFIGURE_VALUE_ELEMENT, {(int)&_h263_element_default} },
778 { "H264", CONFIGURE_VALUE_ELEMENT, {(int)&_h264_element_default} },
779 { "H26L", CONFIGURE_VALUE_ELEMENT, {(int)&_h26l_element_default} },
780 { "MPEG4", CONFIGURE_VALUE_ELEMENT, {(int)&_mpeg4_element_default} },
781 { "MPEG1", CONFIGURE_VALUE_ELEMENT, {(int)&_mpeg1_element_default} },
782 { "THEORA", CONFIGURE_VALUE_ELEMENT, {(int)&_theora_element_default} },
786 * [AudioEncoder] matching table
788 static conf_info_table conf_main_audio_encoder_table[] = {
789 { "AMR", CONFIGURE_VALUE_ELEMENT, {(int)&_amr_element_default} },
790 { "G723_1", CONFIGURE_VALUE_ELEMENT, {(int)&_g723_1_element_default} },
791 { "MP3", CONFIGURE_VALUE_ELEMENT, {(int)&_mp3_element_default} },
792 { "AAC", CONFIGURE_VALUE_ELEMENT, {(int)&_aac_element_default} },
793 { "MMF", CONFIGURE_VALUE_ELEMENT, {(int)&_mmf_element_default} },
794 { "ADPCM", CONFIGURE_VALUE_ELEMENT, {(int)&_adpcm_element_default} },
795 { "WAVE", CONFIGURE_VALUE_ELEMENT, {(int)&_wave_element_default} },
796 { "MIDI", CONFIGURE_VALUE_ELEMENT, {(int)&_midi_element_default} },
797 { "IMELODY", CONFIGURE_VALUE_ELEMENT, {(int)&_imelody_element_default} },
798 { "VORBIS", CONFIGURE_VALUE_ELEMENT, {(int)&_vorbis_element_default} },
802 * [ImageEncoder] matching table
804 static conf_info_table conf_main_image_encoder_table[] = {
805 { "JPEG", CONFIGURE_VALUE_ELEMENT, {(int)&_jpeg_element_default} },
806 { "PNG", CONFIGURE_VALUE_ELEMENT, {(int)&_png_element_default} },
807 { "BMP", CONFIGURE_VALUE_ELEMENT, {(int)&_bmp_element_default} },
808 { "WBMP", CONFIGURE_VALUE_ELEMENT, {(int)&_wbmp_element_default} },
809 { "TIFF", CONFIGURE_VALUE_ELEMENT, {(int)&_tiff_element_default} },
810 { "PCX", CONFIGURE_VALUE_ELEMENT, {(int)&_pcx_element_default} },
811 { "GIF", CONFIGURE_VALUE_ELEMENT, {(int)&_gif_element_default} },
812 { "ICO", CONFIGURE_VALUE_ELEMENT, {(int)&_ico_element_default} },
813 { "RAS", CONFIGURE_VALUE_ELEMENT, {(int)&_ras_element_default} },
814 { "TGA", CONFIGURE_VALUE_ELEMENT, {(int)&_tga_element_default} },
815 { "XBM", CONFIGURE_VALUE_ELEMENT, {(int)&_xbm_element_default} },
816 { "XPM", CONFIGURE_VALUE_ELEMENT, {(int)&_xpm_element_default} },
820 * [Mux] matching table
822 static conf_info_table conf_main_mux_table[] = {
823 { "3GP", CONFIGURE_VALUE_ELEMENT, {(int)&_3gp_element_default} },
824 { "AMR", CONFIGURE_VALUE_ELEMENT, {(int)&_amrmux_element_default} },
825 { "MP4", CONFIGURE_VALUE_ELEMENT, {(int)&_mp4_element_default} },
826 { "AAC", CONFIGURE_VALUE_ELEMENT, {(int)&_aacmux_element_default} },
827 { "MP3", CONFIGURE_VALUE_ELEMENT, {(int)&_mp3mux_element_default} },
828 { "OGG", CONFIGURE_VALUE_ELEMENT, {(int)&_ogg_element_default} },
829 { "WAV", CONFIGURE_VALUE_ELEMENT, {(int)&_wav_element_default} },
830 { "AVI", CONFIGURE_VALUE_ELEMENT, {(int)&_avi_element_default} },
831 { "WMA", CONFIGURE_VALUE_ELEMENT, {(int)&_wma_element_default} },
832 { "WMV", CONFIGURE_VALUE_ELEMENT, {(int)&_wmv_element_default} },
833 { "MID", CONFIGURE_VALUE_ELEMENT, {(int)&_mid_element_default} },
834 { "MMF", CONFIGURE_VALUE_ELEMENT, {(int)&_mmfmux_element_default} },
835 { "MATROSKA", CONFIGURE_VALUE_ELEMENT, {(int)&_matroska_element_default} },
836 { "M2TS", CONFIGURE_VALUE_ELEMENT, {(int)&_m2ts_element_default} },
845 * [Camera] matching table
847 static conf_info_table conf_ctrl_camera_table[] = {
848 { "InputIndex", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
849 { "DeviceName", CONFIGURE_VALUE_STRING, {(int)NULL} },
850 { "PreviewResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
851 { "CaptureResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
852 { "VideoResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
853 { "FPS0", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
854 { "FPS1", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
855 { "FPS2", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
856 { "FPS3", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
857 { "FPS4", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
858 { "FPS5", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
859 { "FPS6", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
860 { "FPS7", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
861 { "FPS8", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
862 { "FPS9", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
863 { "PictureFormat", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
864 { "Overlay", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
865 { "RecommendDisplayRotation", CONFIGURE_VALUE_INT, {3} },
866 { "RecommendPreviewFormatCapture", CONFIGURE_VALUE_INT, {MM_PIXEL_FORMAT_YUYV} },
867 { "RecommendPreviewFormatRecord", CONFIGURE_VALUE_INT, {MM_PIXEL_FORMAT_NV12} },
868 { "RecommendPreviewResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {(int)NULL} },
869 { "FacingDirection", CONFIGURE_VALUE_INT, {MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR} },
873 * [Strobe] matching table
875 static conf_info_table conf_ctrl_strobe_table[] = {
876 { "StrobeControl", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
877 { "StrobeMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
878 { "StrobeEV", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
882 * [Effect] matching table
884 static conf_info_table conf_ctrl_effect_table[] = {
885 { "Brightness", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
886 { "BrightnessStepDenominator", CONFIGURE_VALUE_INT, {(int)2} },
887 { "Contrast", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
888 { "Saturation", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
889 { "Sharpness", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
890 { "WhiteBalance", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
891 { "ColorTone", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
892 { "Flip", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
893 { "Rotation", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
894 { "WDR", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
895 { "PartColorMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
896 { "PartColor", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
900 * [Photograph] matching table
902 static conf_info_table conf_ctrl_photograph_table[] = {
903 { "LensInit", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
904 { "DigitalZoom", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
905 { "OpticalZoom", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
906 { "FocusMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
907 { "AFType", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
908 { "AEType", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
909 { "ExposureValue", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
910 { "FNumber", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
911 { "ShutterSpeed", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
912 { "ISO", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
913 { "ProgramMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
914 { "AntiHandshake", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
915 { "VideoStabilization", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
916 { "FaceZoomMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
917 { "FaceZoomLevel", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
921 * [Capture] matching table
923 static conf_info_table conf_ctrl_capture_table[] = {
924 { "OutputMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
925 { "JpegQuality", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
926 { "MultishotNumber", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
927 { "SensorEncodedCapture", CONFIGURE_VALUE_INT, {1} },
928 { "SupportHDR", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
929 { "SupportZSL", CONFIGURE_VALUE_INT, {FALSE} },
933 * [Detect] matching table
935 static conf_info_table conf_ctrl_detect_table[] = {
936 { "DetectMode", CONFIGURE_VALUE_INT_ARRAY, {(int)NULL} },
937 { "DetectNumber", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
938 { "DetectSelect", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
939 { "DetectSelectNumber", CONFIGURE_VALUE_INT_RANGE, {(int)NULL} },
945 get_new_string( char* src_string )
947 return strdup(src_string);
950 void _mmcamcorder_conf_init(int type, camera_conf** configure_info)
953 int info_table_size = sizeof(conf_info_table);
955 /*_mmcam_dbg_log("Entered...");*/
957 if (type == CONFIGURE_TYPE_MAIN) {
958 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_GENERAL] = conf_main_general_table;
959 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT] = conf_main_video_input_table;
960 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT] = conf_main_audio_input_table;
961 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT] = conf_main_video_output_table;
962 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_CAPTURE] = conf_main_capture_table;
963 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_RECORD] = conf_main_record_table;
964 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER] = conf_main_video_encoder_table;
965 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER] = conf_main_audio_encoder_table;
966 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER] = conf_main_image_encoder_table;
967 conf_main_info_table[CONFIGURE_CATEGORY_MAIN_MUX] = conf_main_mux_table;
969 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_GENERAL] = sizeof( conf_main_general_table ) / info_table_size;
970 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT] = sizeof( conf_main_video_input_table ) / info_table_size;
971 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT] = sizeof( conf_main_audio_input_table ) / info_table_size;
972 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT] = sizeof( conf_main_video_output_table ) / info_table_size;
973 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_CAPTURE] = sizeof( conf_main_capture_table ) / info_table_size;
974 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_RECORD] = sizeof( conf_main_record_table ) / info_table_size;
975 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER] = sizeof( conf_main_video_encoder_table ) / info_table_size;
976 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER] = sizeof( conf_main_audio_encoder_table ) / info_table_size;
977 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER] = sizeof( conf_main_image_encoder_table ) / info_table_size;
978 conf_main_category_size[CONFIGURE_CATEGORY_MAIN_MUX] = sizeof( conf_main_mux_table ) / info_table_size;
980 (*configure_info)->info = (conf_detail**)g_malloc0( sizeof( conf_detail* ) * CONFIGURE_CATEGORY_MAIN_NUM );
982 for (i = 0 ; i < CONFIGURE_CATEGORY_MAIN_NUM ; i++) {
983 (*configure_info)->info[i] = NULL;
986 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_CAMERA] = conf_ctrl_camera_table;
987 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_STROBE] = conf_ctrl_strobe_table;
988 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_EFFECT] = conf_ctrl_effect_table;
989 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH] = conf_ctrl_photograph_table;
990 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_CAPTURE] = conf_ctrl_capture_table;
991 conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_DETECT] = conf_ctrl_detect_table;
993 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_CAMERA] = sizeof( conf_ctrl_camera_table ) / info_table_size;
994 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_STROBE] = sizeof( conf_ctrl_strobe_table ) / info_table_size;
995 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_EFFECT] = sizeof( conf_ctrl_effect_table ) / info_table_size;
996 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH] = sizeof( conf_ctrl_photograph_table ) / info_table_size;
997 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_CAPTURE] = sizeof( conf_ctrl_capture_table ) / info_table_size;
998 conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_DETECT] = sizeof( conf_ctrl_detect_table ) / info_table_size;
1000 (*configure_info)->info = (conf_detail**)g_malloc0( sizeof( conf_detail* ) * CONFIGURE_CATEGORY_CTRL_NUM );
1002 for (i = 0 ; i < CONFIGURE_CATEGORY_CTRL_NUM ; i++) {
1003 (*configure_info)->info[i] = NULL;
1007 _mmcam_dbg_log("Done.");
1014 _mmcamcorder_conf_get_info( int type, const char* ConfFile, camera_conf** configure_info )
1016 int ret = MM_ERROR_NONE;
1018 char* conf_path = NULL;
1020 _mmcam_dbg_log( "Opening...[%s]", ConfFile );
1022 mmf_return_val_if_fail( ConfFile, FALSE );
1024 conf_path = (char*)malloc( strlen(ConfFile)+strlen(CONFIGURE_PATH)+3 );
1026 if( conf_path == NULL )
1028 _mmcam_dbg_err( "malloc failed." );
1029 return MM_ERROR_CAMCORDER_LOW_MEMORY;
1032 snprintf( conf_path, strlen(ConfFile)+strlen(CONFIGURE_PATH)+2, "%s/%s", CONFIGURE_PATH, ConfFile );
1033 /*_mmcam_dbg_log( "Try open Configure File[%s]", conf_path );*/
1035 fd = fopen( conf_path, "r" );
1038 _mmcam_dbg_warn( "File open failed.[%s] retry...", conf_path );
1039 snprintf( conf_path, strlen(ConfFile)+strlen(CONFIGURE_PATH_RETRY)+2, "%s/%s", CONFIGURE_PATH_RETRY, ConfFile );
1040 /*_mmcam_dbg_log( "Try open Configure File[%s]", conf_path );*/
1041 fd = fopen( conf_path, "r" );
1044 _mmcam_dbg_warn( "File open failed.[%s] But keep going... All value will be returned as default.Type[%d]",
1051 ret = _mmcamcorder_conf_parse_info( type, fd, configure_info );
1056 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
1059 if( conf_path != NULL )
1065 /*_mmcam_dbg_log( "Leave..." );*/
1071 _mmcamcorder_conf_parse_info( int type, FILE* fd, camera_conf** configure_info )
1073 const unsigned int BUFFER_NUM_DETAILS = 256;
1074 const unsigned int BUFFER_NUM_TOKEN = 20;
1075 size_t BUFFER_LENGTH_STRING = 256;
1076 const char* delimiters = " |=,\t\n";
1079 int count_main_category = 0;
1080 int count_details = 0;
1081 int length_read = 0;
1082 int count_token = 0;
1085 char *buffer_string = NULL;
1086 char *buffer_details[BUFFER_NUM_DETAILS];
1087 char *buffer_token[BUFFER_NUM_TOKEN];
1089 char *category_name = NULL;
1090 char *detail_string = NULL;
1091 char *user_ptr = NULL;
1093 _mmcam_dbg_log( "" );
1095 camera_conf* new_conf = (camera_conf *)g_malloc0(sizeof(camera_conf));
1096 if (new_conf == NULL) {
1097 _mmcam_dbg_err("new_conf alloc failed : %d", sizeof(camera_conf));
1098 *configure_info = NULL;
1099 return MM_ERROR_CAMCORDER_LOW_MEMORY;
1102 buffer_string = (char*)g_malloc0(sizeof(char) * BUFFER_LENGTH_STRING);
1103 if (buffer_string == NULL) {
1104 _mmcam_dbg_err("buffer_string alloc failed : %d", sizeof(char) * BUFFER_LENGTH_STRING);
1105 *configure_info = NULL;
1107 return MM_ERROR_CAMCORDER_LOW_MEMORY;
1110 new_conf->type = type;
1111 *configure_info = new_conf;
1113 _mmcamcorder_conf_init( type, &new_conf );
1116 _mmcam_dbg_err("failed file descriptor fail");
1117 *configure_info = NULL;
1118 g_free(buffer_string);
1120 return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
1124 count_main_category = 0;
1126 while( !feof( fd ) )
1128 if( read_main == 0 )
1130 length_read = getline( &buffer_string, &BUFFER_LENGTH_STRING, fd );
1131 /*_mmcam_dbg_log( "Read Line : [%s]", buffer_string );*/
1134 token = strtok_r( buffer_string, delimiters, &user_ptr );
1136 if ((token) && (token[0] == ';') && (length_read > -1))
1138 /*_mmcam_dbg_log( "Comment - Nothing to do" );*/
1144 /*_mmcam_dbg_log( "token : [%s]", token );*/
1145 buffer_token[count_token] = token;
1147 token = strtok_r( NULL, delimiters, &user_ptr );
1150 if( count_token == 0 )
1159 if( *buffer_token[0] == ';' )
1161 /*_mmcam_dbg_log( "Comment - Nothing to do" );*/
1164 else if( *buffer_token[0] == '[' )
1166 category_name = get_new_string( buffer_token[0] );
1168 count_main_category++;
1171 while( !feof( fd ) )
1173 length_read = getline( &buffer_string, &BUFFER_LENGTH_STRING, fd );
1174 /*_mmcam_dbg_log( "Read Detail Line : [%s], read length : [%d]", buffer_string, length_read );*/
1176 detail_string = get_new_string( buffer_string );
1178 token = strtok_r( buffer_string, delimiters, &user_ptr );
1180 if( token && token[0] != ';' && length_read > -1 )
1182 /*_mmcam_dbg_log( "token : [%s]", token );*/
1183 if( token[0] == '[' )
1186 buffer_token[0] = token;
1187 SAFE_FREE( detail_string );
1191 buffer_details[count_details++] = detail_string;
1195 SAFE_FREE( detail_string );
1199 /*_mmcam_dbg_log( "type : %d, category_name : %s, count : [%d]", type, category_name, count_details );*/
1201 if( count_details == 0 )
1203 _mmcam_dbg_warn( "category %s has no detail value... skip this category...", category_name );
1204 SAFE_FREE(category_name);
1211 if( type == CONFIGURE_TYPE_MAIN )
1213 if( !strcmp( "[General]", category_name ) )
1215 category = CONFIGURE_CATEGORY_MAIN_GENERAL;
1217 else if( !strcmp( "[VideoInput]", category_name ) )
1219 category = CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT;
1221 else if( !strcmp( "[AudioInput]", category_name ) )
1223 category = CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT;
1225 else if( !strcmp( "[VideoOutput]", category_name ) )
1227 category = CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT;
1229 else if( !strcmp( "[Capture]", category_name ) )
1231 category = CONFIGURE_CATEGORY_MAIN_CAPTURE;
1233 else if( !strcmp( "[Record]", category_name ) )
1235 category = CONFIGURE_CATEGORY_MAIN_RECORD;
1237 else if( !strcmp( "[VideoEncoder]", category_name ) )
1239 category = CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER;
1241 else if( !strcmp( "[AudioEncoder]", category_name ) )
1243 category = CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER;
1245 else if( !strcmp( "[ImageEncoder]", category_name ) )
1247 category = CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER;
1249 else if( !strcmp( "[Mux]", category_name ) )
1251 category = CONFIGURE_CATEGORY_MAIN_MUX;
1256 if( !strcmp( "[Camera]", category_name ) )
1258 category = CONFIGURE_CATEGORY_CTRL_CAMERA;
1260 else if( !strcmp( "[Strobe]", category_name ) )
1262 category = CONFIGURE_CATEGORY_CTRL_STROBE;
1264 else if( !strcmp( "[Effect]", category_name ) )
1266 category = CONFIGURE_CATEGORY_CTRL_EFFECT;
1268 else if( !strcmp( "[Photograph]", category_name ) )
1270 category = CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH;
1272 else if( !strcmp( "[Capture]", category_name ) )
1274 category = CONFIGURE_CATEGORY_CTRL_CAPTURE;
1276 else if( !strcmp( "[Detect]", category_name ) )
1278 category = CONFIGURE_CATEGORY_CTRL_DETECT;
1282 if( category != -1 )
1284 _mmcamcorder_conf_add_info( type, &(new_conf->info[category]),
1285 buffer_details, category, count_details );
1289 _mmcam_dbg_warn( "No matched category[%s],type[%d]... check it.", category_name, type );
1296 for( i = 0 ; i < count_details ; i++ )
1298 SAFE_FREE( buffer_details[i] );
1303 SAFE_FREE(category_name);
1306 //(*configure_info) = new_conf;
1308 SAFE_FREE( buffer_string );
1310 /*_mmcam_dbg_log( "Done." );*/
1312 return MM_ERROR_NONE;
1316 void _mmcamcorder_conf_release_info(camera_conf **configure_info)
1321 int type = CONFIGURE_VALUE_INT;
1323 int category_num = CONFIGURE_CATEGORY_MAIN_NUM;
1324 camera_conf *temp_conf = (*configure_info);
1326 type_int2 *temp_int = NULL;
1327 type_int_range *temp_int_range = NULL;
1328 type_int_array *temp_int_array = NULL;
1329 type_int_pair_array *temp_int_pair_array = NULL;
1330 type_string2 *temp_string = NULL;
1331 type_string_array *temp_string_array = NULL;
1332 type_element2 *temp_element = NULL;
1334 _mmcam_dbg_log("Entered...");
1336 mmf_return_if_fail(temp_conf);
1338 if ((*configure_info)->type == CONFIGURE_TYPE_MAIN) {
1339 category_num = CONFIGURE_CATEGORY_MAIN_NUM;
1341 category_num = CONFIGURE_CATEGORY_CTRL_NUM;
1344 for (i = 0 ; i < category_num ; i++) {
1345 if (temp_conf->info[i]) {
1346 for (j = 0 ; j < temp_conf->info[i]->count ; j++) {
1347 if (temp_conf->info[i]->detail_info[j] == NULL) {
1351 if (_mmcamcorder_conf_get_value_type(temp_conf->type, i, ((type_element*)(temp_conf->info[i]->detail_info[j]))->name, &type)) {
1353 case CONFIGURE_VALUE_INT:
1354 temp_int = (type_int2*)(temp_conf->info[i]->detail_info[j]);
1355 SAFE_FREE(temp_int->name);
1357 case CONFIGURE_VALUE_INT_RANGE:
1358 temp_int_range = (type_int_range*)(temp_conf->info[i]->detail_info[j]);
1359 SAFE_FREE(temp_int_range->name);
1361 case CONFIGURE_VALUE_INT_ARRAY:
1362 temp_int_array = (type_int_array*)(temp_conf->info[i]->detail_info[j]);
1363 SAFE_FREE(temp_int_array->name);
1364 SAFE_FREE(temp_int_array->value);
1366 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
1367 temp_int_pair_array = (type_int_pair_array*)(temp_conf->info[i]->detail_info[j]);
1368 SAFE_FREE(temp_int_pair_array->name);
1369 SAFE_FREE(temp_int_pair_array->value[0]);
1370 SAFE_FREE(temp_int_pair_array->value[1]);
1372 case CONFIGURE_VALUE_STRING:
1373 temp_string = (type_string2*)(temp_conf->info[i]->detail_info[j]);
1374 SAFE_FREE(temp_string->name);
1375 SAFE_FREE(temp_string->value);
1377 case CONFIGURE_VALUE_STRING_ARRAY:
1378 temp_string_array = (type_string_array*)(temp_conf->info[i]->detail_info[j]);
1379 SAFE_FREE(temp_string_array->name);
1380 if (temp_string_array->value) {
1381 count = temp_string_array->count;
1382 for (k = 0 ; k < count ; k++) {
1383 SAFE_FREE(temp_string_array->value[k]);
1385 g_free(temp_string_array->value);
1386 temp_string_array->value = NULL;
1388 SAFE_FREE(temp_string_array->default_value);
1390 case CONFIGURE_VALUE_ELEMENT:
1391 temp_element = (type_element2*)(temp_conf->info[i]->detail_info[j]);
1392 SAFE_FREE(temp_element->name);
1393 SAFE_FREE(temp_element->element_name);
1395 if (temp_element->value_int) {
1396 count = temp_element->count_int;
1397 for (k = 0 ; k < count ; k++) {
1398 SAFE_FREE(temp_element->value_int[k]->name);
1399 SAFE_FREE(temp_element->value_int[k]);
1401 g_free(temp_element->value_int);
1404 if (temp_element->value_string) {
1405 count = temp_element->count_string;
1406 for (k = 0 ; k < count ; k++) {
1407 SAFE_FREE(temp_element->value_string[k]->name);
1408 SAFE_FREE(temp_element->value_string[k]->value);
1409 SAFE_FREE(temp_element->value_string[k]);
1411 g_free(temp_element->value_string);
1415 _mmcam_dbg_warn("unknown type %d", type);
1420 SAFE_FREE(temp_conf->info[i]->detail_info[j]);
1421 temp_conf->info[i]->detail_info[j] = NULL;
1424 SAFE_FREE(temp_conf->info[i]->detail_info);
1425 temp_conf->info[i]->detail_info = NULL;
1427 SAFE_FREE(temp_conf->info[i]);
1428 temp_conf->info[i] = NULL;
1432 SAFE_FREE((*configure_info)->info);
1433 SAFE_FREE((*configure_info));
1435 _mmcam_dbg_log("Done.");
1440 _mmcamcorder_conf_get_value_type( int type, int category, const char* name, int* value_type )
1443 int count_value = 0;
1445 /*_mmcam_dbg_log( "Entered..." );*/
1447 mmf_return_val_if_fail( name, FALSE );
1449 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
1451 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
1455 /*_mmcam_dbg_log( "Number of value : [%d]", count_value );*/
1457 if( type == CONFIGURE_TYPE_MAIN )
1459 for( i = 0 ; i < count_value ; i++ )
1461 if( !strcmp( conf_main_info_table[category][i].name, name ) )
1463 *value_type = conf_main_info_table[category][i].value_type;
1464 /*_mmcam_dbg_log( "Category[%d],Name[%s],Type[%d]", category, name, *value_type );*/
1471 for( i = 0 ; i < count_value ; i++ )
1473 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
1475 *value_type = conf_ctrl_info_table[category][i].value_type;
1476 /*_mmcam_dbg_log( "Category[%d],Name[%s],Type[%d]", category, name, *value_type );*/
1487 _mmcamcorder_conf_add_info( int type, conf_detail** info, char** buffer_details, int category, int count_details )
1489 const int BUFFER_NUM_TOKEN = 256;
1496 char *buffer_token[BUFFER_NUM_TOKEN];
1497 char *user_ptr = NULL;
1499 const char *delimiters = " |=,\t\n";
1500 const char *delimiters_sub = " |\t\n";
1501 const char *delimiters_3rd = "|\n";
1503 mmf_return_val_if_fail( buffer_details, FALSE );
1505 (*info) = (conf_detail*)g_malloc0( sizeof(conf_detail) );
1506 if (*info == NULL) {
1507 _mmcam_dbg_err("allocation failed");
1510 (*info)->detail_info = (void**)g_malloc0(sizeof(void*) * count_details);
1511 (*info)->count = count_details;
1513 for ( i = 0 ; i < count_details ; i++ ) {
1514 /*_mmcam_dbg_log("Read line\"%s\"", buffer_details[i]);*/
1516 token = strtok_r( buffer_details[i], delimiters, &user_ptr );
1519 buffer_token[count_token] = token;
1522 (*info)->detail_info[i] = NULL;
1523 _mmcam_dbg_warn( "No token... check it.[%s]", buffer_details[i] );
1527 if (!_mmcamcorder_conf_get_value_type(type, category, buffer_token[0], &value_type)) {
1528 (*info)->detail_info[i] = NULL;
1529 _mmcam_dbg_warn( "Failed to get value type... check it. Category[%d],Name[%s]", category, buffer_token[0] );
1533 if (value_type != CONFIGURE_VALUE_STRING && value_type != CONFIGURE_VALUE_STRING_ARRAY) {
1534 token = strtok_r( NULL, delimiters, &user_ptr );
1536 buffer_token[count_token] = token;
1537 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1539 token = strtok_r( NULL, delimiters, &user_ptr );
1542 if (count_token < 2) {
1543 (*info)->detail_info[i] = NULL;
1544 _mmcam_dbg_warn( "Number of token is too small... check it.[%s]", buffer_details[i] );
1547 } else { /* CONFIGURE_VALUE_STRING or CONFIGURE_VALUE_STRING_ARRAY */
1549 strtok_r( NULL, delimiters_sub, &user_ptr );
1551 if (value_type == CONFIGURE_VALUE_STRING_ARRAY) {
1552 token = strtok_r( NULL, delimiters_sub, &user_ptr );
1554 buffer_token[count_token] = token;
1555 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1557 token = strtok_r( NULL, delimiters_sub, &user_ptr );
1559 } else { /* CONFIGURE_VALUE_STRING */
1560 token = strtok_r( NULL, delimiters_3rd, &user_ptr );
1563 buffer_token[count_token] = token;
1564 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1569 if (count_token < 2) {
1570 (*info)->detail_info[i] = NULL;
1571 _mmcam_dbg_warn( "No string value... check it.[%s]", buffer_details[i] );
1578 case CONFIGURE_VALUE_INT:
1582 new_int = (type_int2*)g_malloc0( sizeof(type_int2) );
1583 if ( new_int == NULL ) {
1584 _mmcam_dbg_err("allocation failed");
1587 new_int->name = get_new_string( buffer_token[0] );
1588 new_int->value = atoi( buffer_token[1] );
1589 (*info)->detail_info[i] = (void*)new_int;
1590 /*_mmcam_dbg_log("INT - name[%s],value[%d]", new_int->name, new_int->value);*/
1593 case CONFIGURE_VALUE_INT_RANGE:
1595 type_int_range* new_int_range;
1597 new_int_range = (type_int_range*)g_malloc0( sizeof(type_int_range) );
1598 if ( new_int_range == NULL ) {
1599 _mmcam_dbg_err("allocation failed");
1602 new_int_range->name = get_new_string( buffer_token[0] );
1603 new_int_range->min = atoi( buffer_token[1] );
1604 new_int_range->max = atoi( buffer_token[2] );
1605 new_int_range->default_value = atoi( buffer_token[3] );
1606 (*info)->detail_info[i] = (void*)new_int_range;
1608 _mmcam_dbg_log("INT RANGE - name[%s],min[%d],max[%d],default[%d]",
1609 new_int_range->name,
1612 new_int_range->default_value);
1616 case CONFIGURE_VALUE_INT_ARRAY:
1618 int count_value = count_token - 2;
1619 type_int_array* new_int_array;
1621 new_int_array = (type_int_array*)g_malloc0( sizeof(type_int_array) );
1622 if (new_int_array == NULL) {
1623 _mmcam_dbg_err("allocation failed");
1626 new_int_array->name = get_new_string( buffer_token[0] );
1627 new_int_array->value = (int*)g_malloc0( sizeof(int)*count_value );
1628 if (new_int_array->value == NULL) {
1629 if (new_int_array->name) {
1630 free(new_int_array->name);
1631 new_int_array->name = NULL;
1633 free(new_int_array);
1634 new_int_array = NULL;
1635 _mmcam_dbg_err("allocation failed");
1638 new_int_array->count = count_value;
1640 /*_mmcam_dbg_log("INT ARRAY - name[%s]", new_int_array->name);*/
1641 for ( j = 0 ; j < count_value ; j++ ) {
1642 new_int_array->value[j] = atoi( buffer_token[j+1] );
1643 /*_mmcam_dbg_log(" index[%d] - value[%d]", j, new_int_array->value[j]);*/
1646 new_int_array->default_value = atoi( buffer_token[count_token-1] );
1647 /*_mmcam_dbg_log(" default value[%d]", new_int_array->default_value);*/
1649 (*info)->detail_info[i] = (void*)new_int_array;
1652 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
1654 int count_value = ( count_token - 3 ) >> 1;
1655 type_int_pair_array* new_int_pair_array;
1657 new_int_pair_array = (type_int_pair_array*)g_malloc0( sizeof(type_int_pair_array) );
1658 if ( new_int_pair_array == NULL ) {
1659 _mmcam_dbg_err("allocation failed");
1662 new_int_pair_array->name = get_new_string( buffer_token[0] );
1663 new_int_pair_array->value[0] = (int*)g_malloc( sizeof(int)*(count_value) );
1664 if ( new_int_pair_array->value[0] == NULL ) {
1665 if (new_int_pair_array->name) {
1666 free( new_int_pair_array->name );
1667 new_int_pair_array->name = NULL;
1669 free( new_int_pair_array );
1670 new_int_pair_array = NULL;
1671 _mmcam_dbg_err("allocation failed");
1674 new_int_pair_array->value[1] = (int*)g_malloc( sizeof(int)*(count_value) );
1675 if ( new_int_pair_array->value[1] == NULL ) {
1676 free( new_int_pair_array->value[0] );
1677 new_int_pair_array->value[0] = NULL;
1678 if (new_int_pair_array->name) {
1679 free( new_int_pair_array->name );
1680 new_int_pair_array->name = NULL;
1682 free( new_int_pair_array );
1683 new_int_pair_array = NULL;
1684 _mmcam_dbg_err("allocation failed");
1687 new_int_pair_array->count = count_value;
1689 /*_mmcam_dbg_log("INT PAIR ARRAY - name[%s],count[%d]", new_int_pair_array->name, count_value);*/
1690 for ( j = 0 ; j < count_value ; j++ ) {
1691 new_int_pair_array->value[0][j] = atoi( buffer_token[(j<<1)+1] );
1692 new_int_pair_array->value[1][j] = atoi( buffer_token[(j<<1)+2] );
1694 _mmcam_dbg_log(" index[%d] - value[%d,%d]", j,
1695 new_int_pair_array->value[0][j],
1696 new_int_pair_array->value[1][j]);
1700 new_int_pair_array->default_value[0] = atoi( buffer_token[count_token-2] );
1701 new_int_pair_array->default_value[1] = atoi( buffer_token[count_token-1] );
1703 _mmcam_dbg_log(" default value[%d,%d]",
1704 new_int_pair_array->default_value[0],
1705 new_int_pair_array->default_value[1]);
1707 (*info)->detail_info[i] = (void*)new_int_pair_array;
1710 case CONFIGURE_VALUE_STRING:
1712 type_string2* new_string;
1714 new_string = (type_string2*)g_malloc0( sizeof(type_string2) );
1715 if (new_string == NULL) {
1716 _mmcam_dbg_err("allocation failed");
1719 new_string->name = get_new_string( buffer_token[0] );
1720 new_string->value = get_new_string( buffer_token[1] );
1721 (*info)->detail_info[i] = (void*)new_string;
1723 /*_mmcam_dbg_log("STRING - name[%s],value[%s]", new_string->name, new_string->value);*/
1726 case CONFIGURE_VALUE_STRING_ARRAY:
1728 int count_value = count_token - 2;
1729 type_string_array* new_string_array;
1731 new_string_array = (type_string_array*)g_malloc0( sizeof(type_string_array) );
1732 if ( new_string_array == NULL ) {
1735 new_string_array->name = get_new_string( buffer_token[0] );
1736 new_string_array->count = count_value;
1737 new_string_array->value = (char**)g_malloc0( sizeof(char*)*count_value );
1738 if ( new_string_array->value == NULL ) {
1739 if (new_string_array->name) {
1740 free(new_string_array->name);
1741 new_string_array->name = NULL;
1743 free(new_string_array);
1744 new_string_array = NULL;
1745 _mmcam_dbg_err("allocation failed");
1748 /*_mmcam_dbg_log("STRING ARRAY - name[%s]", new_string_array->name);*/
1749 for ( j = 0 ; j < count_value ; j++ ) {
1750 new_string_array->value[j] = get_new_string( buffer_token[j+1] );
1751 /*_mmcam_dbg_log(" index[%d] - value[%s]", j, new_string_array->value[j]);*/
1754 new_string_array->default_value = get_new_string( buffer_token[count_token-1] );
1755 /*_mmcam_dbg_log(" default value[%s]", new_string_array->default_value);*/
1756 (*info)->detail_info[i] = (void*)new_string_array;
1759 case CONFIGURE_VALUE_ELEMENT:
1761 type_element2* new_element;
1763 new_element = (type_element2*)g_malloc0( sizeof(type_element2) );
1764 if ( new_element == NULL ) {
1765 _mmcam_dbg_err("allocation failed");
1768 new_element->name = get_new_string( buffer_token[0] );
1769 new_element->element_name = get_new_string( buffer_token[1] );
1770 new_element->count_int = atoi( buffer_token[2] );
1771 new_element->value_int = NULL;
1772 new_element->count_string = atoi( buffer_token[3] );
1773 new_element->value_string = NULL;
1775 _mmcam_dbg_log("Element - name[%s],element_name[%s],count_int[%d],count_string[%d]",
1776 new_element->name, new_element->element_name, new_element->count_int, new_element->count_string);
1779 /* add int values */
1780 if ( new_element->count_int > 0 ) {
1781 new_element->value_int = (type_int2**)g_malloc0( sizeof(type_int2*)*(new_element->count_int) );
1782 if ( new_element->value_int) {
1783 for ( j = 0 ; j < new_element->count_int ; j++ ) {
1784 new_element->value_int[j] = (type_int2*)g_malloc( sizeof(type_int2) );
1785 if ( new_element->value_int[j] ) {
1786 new_element->value_int[j]->name = get_new_string( buffer_token[4+(j<<1)] );
1787 new_element->value_int[j]->value = atoi( buffer_token[5+(j<<1)] );
1789 _mmcam_dbg_err("allocation failed");
1792 _mmcam_dbg_log(" Element INT[%d] - name[%s],value[%d]",
1793 j, new_element->value_int[j]->name, new_element->value_int[j]->value);
1797 _mmcam_dbg_err("allocation failed");
1802 new_element->value_int = NULL;
1805 /* add string values */
1806 if ( new_element->count_string > 0 ) {
1807 new_element->value_string = (type_string2**)g_malloc0( sizeof(type_string2*)*(new_element->count_string) );
1808 if (new_element->value_string) {
1809 for ( ; j < new_element->count_string + new_element->count_int ; j++ ) {
1810 new_element->value_string[j-new_element->count_int] = (type_string2*)g_malloc0( sizeof(type_string2) );
1811 if(new_element->value_string[j-new_element->count_int]) {
1812 new_element->value_string[j-new_element->count_int]->name = get_new_string( buffer_token[4+(j<<1)] );
1813 new_element->value_string[j-new_element->count_int]->value = get_new_string( buffer_token[5+(j<<1)] );
1815 _mmcam_dbg_log(" Element STRING[%d] - name[%s],value[%s]",
1816 j-new_element->count_int, new_element->value_string[j-new_element->count_int]->name, new_element->value_string[j-new_element->count_int]->value);
1819 _mmcam_dbg_err("allocation failed");
1823 _mmcam_dbg_err("malloc failed : %d", sizeof(type_string2*)*(new_element->count_string));
1826 new_element->value_string = NULL;
1829 (*info)->detail_info[i] = (void*)new_element;
1842 _mmcamcorder_conf_get_value_int( camera_conf* configure_info, int category, const char* name, int* value )
1847 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
1849 mmf_return_val_if_fail( configure_info, FALSE );
1850 mmf_return_val_if_fail( name, FALSE );
1852 if( configure_info->info[category] )
1854 count = configure_info->info[category]->count;
1855 info = configure_info->info[category];
1857 for( i = 0 ; i < count ; i++ )
1859 if( info->detail_info[i] == NULL )
1864 if( !strcmp( ((type_int*)(info->detail_info[i]))->name , name ) )
1866 *value = ((type_int*)(info->detail_info[i]))->value;
1867 //_mmcam_dbg_log( "Get[%s] int[%d]", name, *value );
1873 if( _mmcamcorder_conf_get_default_value_int( configure_info->type, category, name, value ) )
1875 //_mmcam_dbg_log( "Get[%s] int[%d]", name, *value );
1879 _mmcam_dbg_warn( "Faild to get int... check it...Category[%d],Name[%s]", category, name );
1885 _mmcamcorder_conf_get_value_int_range( camera_conf* configure_info, int category, const char* name, type_int_range** value )
1890 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
1892 mmf_return_val_if_fail( configure_info, FALSE );
1893 mmf_return_val_if_fail( name, FALSE );
1895 if( configure_info->info[category] )
1897 count = configure_info->info[category]->count;
1898 info = configure_info->info[category];
1900 for( i = 0 ; i < count ; i++ )
1902 if( info->detail_info[i] == NULL )
1907 if( !strcmp( ((type_int_range*)(info->detail_info[i]))->name , name ) )
1909 *value = (type_int_range*)(info->detail_info[i]);
1911 _mmcam_dbg_log( "Get[%s] int range - min[%d],max[%d],default[%d]",
1912 name, (*value)->min, (*value)->max, (*value)->default_value );
1921 /*_mmcam_dbg_warn( "Faild to get int range... check it...Category[%d],Name[%s]", category, name );*/
1927 _mmcamcorder_conf_get_value_int_array( camera_conf* configure_info, int category, const char* name, type_int_array** value )
1932 /*_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );*/
1934 mmf_return_val_if_fail( configure_info, FALSE );
1935 mmf_return_val_if_fail( name, FALSE );
1937 if( configure_info->info[category] )
1939 count = configure_info->info[category]->count;
1940 info = configure_info->info[category];
1942 for( i = 0 ; i < count ; i++ )
1944 if( info->detail_info[i] == NULL )
1949 if( !strcmp( ((type_int_array*)(info->detail_info[i]))->name , name ) )
1951 *value = (type_int_array*)(info->detail_info[i]);
1953 _mmcam_dbg_log( "Get[%s] int array - [%x],count[%d],default[%d]",
1954 name, (*value)->value, (*value)->count, (*value)->default_value );
1963 /*_mmcam_dbg_warn( "Faild to get int array... check it...Category[%d],Name[%s]", category, name );*/
1969 _mmcamcorder_conf_get_value_int_pair_array( camera_conf* configure_info, int category, const char* name, type_int_pair_array** value )
1974 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
1976 mmf_return_val_if_fail( configure_info, FALSE );
1977 mmf_return_val_if_fail( name, FALSE );
1979 if( configure_info->info[category] )
1981 count = configure_info->info[category]->count;
1982 info = configure_info->info[category];
1984 for( i = 0 ; i < count ; i++ )
1986 if( info->detail_info[i] == NULL )
1991 if( !strcmp( ((type_int_pair_array*)(info->detail_info[i]))->name , name ) )
1993 *value = (type_int_pair_array*)(info->detail_info[i]);
1995 _mmcam_dbg_log( "Get[%s] int pair array - [%x][%x],count[%d],default[%d][%d]",
1996 name, (*value)->value[0], (*value)->value[1], (*value)->count,
1997 (*value)->default_value[0], (*value)->default_value[1] );
2006 _mmcam_dbg_warn( "Faild to get int pair array... check it...Category[%d],Name[%s]", category, name );
2012 _mmcamcorder_conf_get_value_string( camera_conf* configure_info, int category, const char* name, const char** value )
2017 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
2019 mmf_return_val_if_fail( configure_info, FALSE );
2020 mmf_return_val_if_fail( name, FALSE );
2022 if( configure_info->info[category] )
2024 count = configure_info->info[category]->count;
2025 info = configure_info->info[category];
2027 for( i = 0 ; i < count ; i++ )
2029 if( info->detail_info[i] == NULL )
2034 if( !strcmp( ((type_string*)(info->detail_info[i]))->name , name ) )
2036 *value = ((type_string*)(info->detail_info[i]))->value;
2037 //_mmcam_dbg_log( "Get[%s] string[%s]", name, *value );
2043 if( _mmcamcorder_conf_get_default_value_string( configure_info->type, category, name, value ) )
2045 //_mmcam_dbg_log( "Get[%s]string[%s]", name, *value );
2049 _mmcam_dbg_warn( "Faild to get string... check it...Category[%d],Name[%s]", category, name );
2055 _mmcamcorder_conf_get_value_string_array( camera_conf* configure_info, int category, const char* name, type_string_array** value )
2060 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
2062 mmf_return_val_if_fail( configure_info, FALSE );
2063 mmf_return_val_if_fail( name, FALSE );
2065 if( configure_info->info[category] )
2067 count = configure_info->info[category]->count;
2068 info = configure_info->info[category];
2070 for( i = 0 ; i < count ; i++ )
2072 if( info->detail_info[i] == NULL )
2077 if( !strcmp( ((type_string_array*)(info->detail_info[i]))->name , name ) )
2079 *value = (type_string_array*)(info->detail_info[i]);
2081 _mmcam_dbg_log( "Get[%s] string array - [%x],count[%d],default[%s]",
2082 name, (*value)->value, (*value)->count, (*value)->default_value );
2091 /*_mmcam_dbg_warn( "Faild to get string array... check it...Category[%d],Name[%s]", category, name );*/
2097 _mmcamcorder_conf_get_element( camera_conf* configure_info, int category, const char* name, type_element** element )
2102 //_mmcam_dbg_log( "Entered... category[%d],name[%s]", category, name );
2104 mmf_return_val_if_fail( configure_info, FALSE );
2105 mmf_return_val_if_fail( name, FALSE );
2107 if( configure_info->info[category] )
2109 count = configure_info->info[category]->count;
2110 info = configure_info->info[category];
2112 for( i = 0 ; i < count ; i++ )
2114 if( info->detail_info[i] == NULL )
2119 if( !strcmp( ((type_element*)(info->detail_info[i]))->name , name ) )
2121 *element = (type_element*)(info->detail_info[i]);
2122 //_mmcam_dbg_log( "Get[%s] element[%x]", name, *element );
2128 if( _mmcamcorder_conf_get_default_element( configure_info->type, category, name, element ) )
2130 //_mmcam_dbg_log( "Get[%s] element[%x]", name, *element );
2134 _mmcam_dbg_warn( "Faild to get element name... check it...Category[%d],Name[%s]", category, name );
2140 _mmcamcorder_conf_get_value_element_name( type_element* element, const char** value )
2142 //_mmcam_dbg_log( "Entered..." );
2144 mmf_return_val_if_fail( element, FALSE );
2146 *value = element->element_name;
2148 //_mmcam_dbg_log( "Get element name : [%s]", *value );
2154 _mmcamcorder_conf_get_value_element_int( type_element* element, const char* name, int* value )
2158 //_mmcam_dbg_log( "Entered..." );
2160 mmf_return_val_if_fail( element, FALSE );
2161 mmf_return_val_if_fail( name, FALSE );
2163 for( i = 0 ; i < element->count_int ; i++ )
2165 if( !strcmp( element->value_int[i]->name , name ) )
2167 *value = element->value_int[i]->value;
2168 //_mmcam_dbg_log( "Get[%s] element int[%d]", name, *value );
2173 _mmcam_dbg_warn( "Faild to get int in element... ElementName[%p],Name[%s],Count[%d]",
2174 element->name, name, element->count_int );
2180 _mmcamcorder_conf_get_value_element_string( type_element* element, const char* name, const char** value )
2184 //_mmcam_dbg_log( "Entered..." );
2186 mmf_return_val_if_fail( element, FALSE );
2187 mmf_return_val_if_fail( name, FALSE );
2189 for( i = 0 ; i < element->count_string ; i++ )
2191 if( !strcmp( element->value_string[i]->name , name ) )
2193 *value = element->value_string[i]->value;
2194 //_mmcam_dbg_log( "Get[%s] element string[%s]", name, *value );
2199 _mmcam_dbg_warn( "Faild to get int in element... ElementName[%p],Name[%s],Count[%d]",
2200 element->name, name, element->count_string );
2206 _mmcamcorder_conf_set_value_element_property( GstElement* gst, type_element* element )
2210 //_mmcam_dbg_log( "Entered..." );
2212 mmf_return_val_if_fail( gst, FALSE );
2213 mmf_return_val_if_fail( element, FALSE );
2215 if( element->count_int == 0 )
2217 /*_mmcam_dbg_log( "There is no integer property to set in INI file[%s].", element->name );*/
2221 if( element->value_int == NULL )
2223 _mmcam_dbg_warn( "count_int[%d] is NOT zero, but value_int is NULL", element->count_int );
2227 for( i = 0 ; i < element->count_int ; i++ )
2229 MMCAMCORDER_G_OBJECT_SET( gst, element->value_int[i]->name, element->value_int[i]->value );
2232 _mmcam_dbg_log( "Element[%s] Set[%s] -> integer[%d]",
2233 element->element_name,
2234 element->value_int[i]->name,
2235 element->value_int[i]->value );
2240 if( element->count_string == 0 )
2242 _mmcam_dbg_log( "There is no string property to set in INI file[%s].", element->name );
2246 if( element->value_string == NULL )
2248 _mmcam_dbg_warn( "count_string[%d] is NOT zero, but value_string is NULL", element->count_string );
2252 for( i = 0 ; i < element->count_string ; i++ )
2254 MMCAMCORDER_G_OBJECT_SET_POINTER( gst, element->value_string[i]->name, element->value_string[i]->value );
2256 _mmcam_dbg_log( "Element[%s] Set[%s] -> string[%s]",
2257 element->element_name,
2258 element->value_string[i]->name,
2259 element->value_string[i]->value );
2263 //_mmcam_dbg_log( "Done." );
2269 _mmcamcorder_conf_get_default_value_int( int type, int category, const char* name, int* value )
2272 int count_value = 0;
2274 //_mmcam_dbg_log( "Entered..." );
2276 mmf_return_val_if_fail( name, FALSE );
2278 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
2280 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
2284 if( type == CONFIGURE_TYPE_MAIN )
2286 for( i = 0 ; i < count_value ; i++ )
2288 if( !strcmp( conf_main_info_table[category][i].name, name ) )
2290 *value = conf_main_info_table[category][i].value_int;
2297 for( i = 0 ; i < count_value ; i++ )
2299 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
2301 *value = conf_ctrl_info_table[category][i].value_int;
2307 _mmcam_dbg_warn( "Failed to get default int... check it... Type[%d],Category[%d],Name[%s]", type, category, name );
2313 _mmcamcorder_conf_get_default_value_string( int type, int category, const char* name, const char** value )
2316 int count_value = 0;
2318 //_mmcam_dbg_log( "Entered..." );
2320 mmf_return_val_if_fail( name, FALSE );
2322 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
2324 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
2328 if( type == CONFIGURE_TYPE_MAIN )
2330 for( i = 0 ; i < count_value ; i++ )
2332 if( !strcmp( conf_main_info_table[category][i].name, name ) )
2334 *value = conf_main_info_table[category][i].value_string;
2335 _mmcam_dbg_log( "Get[%s] default string[%s]", name, *value );
2342 for( i = 0 ; i < count_value ; i++ )
2344 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
2346 *value = conf_ctrl_info_table[category][i].value_string;
2347 _mmcam_dbg_log( "Get[%s] default string[%s]", name, *value );
2353 _mmcam_dbg_warn( "Failed to get default string... check it... Type[%d],Category[%d],Name[%s]", type, category, name );
2359 _mmcamcorder_conf_get_default_element( int type, int category, const char* name, type_element** element )
2362 int count_value = 0;
2364 //_mmcam_dbg_log( "Entered..." );
2366 mmf_return_val_if_fail( name, FALSE );
2368 if( !_mmcamcorder_conf_get_category_size( type, category, &count_value ) )
2370 _mmcam_dbg_warn( "No matched category... check it... categoty[%d]", category );
2374 if( type == CONFIGURE_TYPE_MAIN )
2376 for( i = 0 ; i < count_value ; i++ )
2378 if( !strcmp( conf_main_info_table[category][i].name, name ) )
2380 *element = conf_main_info_table[category][i].value_element;
2381 _mmcam_dbg_log( "Get[%s] element[%p]", name, *element );
2388 for( i = 0 ; i < count_value ; i++ )
2390 if( !strcmp( conf_ctrl_info_table[category][i].name, name ) )
2392 *element = conf_ctrl_info_table[category][i].value_element;
2393 _mmcam_dbg_log( "Get[%s] element[%p]", name, *element );
2399 _mmcam_dbg_warn( "Failed to get default element... check it... Type[%d],Category[%d],Name[%s]", type, category, name );
2405 _mmcamcorder_conf_get_category_size( int type, int category, int* size )
2407 // mmf_return_val_if_fail( conf_main_category_size, FALSE );
2408 // mmf_return_val_if_fail( conf_ctrl_category_size, FALSE );
2410 if( type == CONFIGURE_TYPE_MAIN )
2412 mmf_return_val_if_fail( category < CONFIGURE_CATEGORY_MAIN_NUM, FALSE );
2414 *size = (int)conf_main_category_size[category];
2418 mmf_return_val_if_fail( category < CONFIGURE_CATEGORY_CTRL_NUM, FALSE );
2420 *size = (int)conf_ctrl_category_size[category];
2427 _mmcamcorder_conf_print_info( camera_conf** configure_info )
2429 int i, j, k, type, category_type;
2432 type_int_range *temp_int_range;
2433 type_int_array *temp_int_array;
2434 type_int_pair_array *temp_int_pair_array;
2435 type_string *temp_string;
2436 type_element *temp_element;
2438 g_print( "[ConfigureInfoPrint] : Entered.\n" );
2440 mmf_return_if_fail( *configure_info );
2442 if( (*configure_info)->type == CONFIGURE_TYPE_MAIN )
2444 category_type = CONFIGURE_CATEGORY_MAIN_NUM;
2448 category_type = CONFIGURE_CATEGORY_CTRL_NUM;
2451 for( i = 0 ; i < category_type ; i++ )
2453 if( (*configure_info)->info[i] )
2455 g_print( "[ConfigureInfo] : Category [%d]\n", i );
2456 for( j = 0 ; j < (*configure_info)->info[i]->count ; j++ )
2458 if( _mmcamcorder_conf_get_value_type( (*configure_info)->type, i, ((type_int*)((*configure_info)->info[i]->detail_info[j]))->name, &type ) )
2462 case CONFIGURE_VALUE_INT:
2463 temp_int = (type_int*)((*configure_info)->info[i]->detail_info[j]);
2464 g_print( "[ConfigureInfo] : INT - Name[%s],Value [%d]\n", temp_int->name, temp_int->value );
2466 case CONFIGURE_VALUE_INT_RANGE:
2467 temp_int_range = (type_int_range*)((*configure_info)->info[i]->detail_info[j]);
2468 g_print( "[ConfigureInfo] : INT_RANGE - Name[%s],Value [%d]~[%d], default [%d]\n",
2469 temp_int_range->name, temp_int_range->min, temp_int_range->max, temp_int_range->default_value );
2471 case CONFIGURE_VALUE_INT_ARRAY:
2472 temp_int_array = (type_int_array*)((*configure_info)->info[i]->detail_info[j]);
2473 g_print( "[ConfigureInfo] : INT_ARRAY - Name[%s], default [%d]\n - ",
2474 temp_int_array->name, temp_int_array->default_value );
2475 for( k = 0 ; k < temp_int_array->count ; k++ )
2477 g_print( "[%d] ", temp_int_array->value[k] );
2481 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
2482 temp_int_pair_array = (type_int_pair_array*)((*configure_info)->info[i]->detail_info[j]);
2483 g_print( "[ConfigureInfo] : INT_PAIR_ARRAY - Name[%s], default [%d][%d]\n - ",
2484 temp_int_pair_array->name, temp_int_pair_array->default_value[0], temp_int_pair_array->default_value[0] );
2485 for( k = 0 ; k < temp_int_pair_array->count ; k++ )
2487 g_print( "[%d,%d] ", temp_int_pair_array->value[0][k], temp_int_pair_array->value[1][k] );
2491 case CONFIGURE_VALUE_STRING:
2492 temp_string = (type_string*)((*configure_info)->info[i]->detail_info[j]);
2493 g_print( "[ConfigureInfo] : STRING - Name[%s],Value[%s]\n", temp_string->name, temp_string->value );
2495 case CONFIGURE_VALUE_ELEMENT:
2496 temp_element = (type_element*)((*configure_info)->info[i]->detail_info[j]);
2497 g_print( "[ConfigureInfo] : Element - Name[%s],Element_Name[%s]\n", temp_element->name, temp_element->element_name );
2498 for( k = 0 ; k < temp_element->count_int ; k++ )
2500 g_print( " - INT[%d] Name[%s],Value[%d]\n", k, temp_element->value_int[k]->name, temp_element->value_int[k]->value );
2502 for( k = 0 ; k < temp_element->count_string ; k++ )
2504 g_print( " - STRING[%d] Name[%s],Value[%s]\n", k, temp_element->value_string[k]->name, temp_element->value_string[k]->value );
2508 g_print( "[ConfigureInfo] : Not matched value type... So can not print data... check it... Name[%s],type[%d]\n", ((type_int*)((*configure_info)->info[i]->detail_info[j]))->name, type );
2514 g_print( "[ConfigureInfo] : Failed to get value type." );
2520 g_print( "[ConfigureInfoPrint] : Done.\n" );
2524 static type_element *
2525 __mmcamcorder_get_audio_codec_element(MMHandleType handle)
2527 type_element *telement = NULL;
2528 const char *codec_type_str = NULL;
2529 int codec_type = MM_AUDIO_CODEC_INVALID;
2530 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2531 _MMCamcorderSubContext *sc = NULL;
2533 mmf_return_val_if_fail(hcamcorder, NULL);
2534 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2536 mmf_return_val_if_fail(sc, NULL);
2540 /* Check element availability */
2541 mm_camcorder_get_attributes(handle, NULL, MMCAM_AUDIO_ENCODER, &codec_type, NULL);
2543 switch( codec_type )
2545 case MM_AUDIO_CODEC_AMR:
2546 codec_type_str = "AMR";
2548 case MM_AUDIO_CODEC_G723_1:
2549 codec_type_str = "G723_1";
2551 case MM_AUDIO_CODEC_MP3:
2552 codec_type_str = "MP3";
2554 case MM_AUDIO_CODEC_AAC:
2555 codec_type_str = "AAC";
2557 case MM_AUDIO_CODEC_MMF:
2558 codec_type_str = "MMF";
2560 case MM_AUDIO_CODEC_ADPCM:
2561 codec_type_str = "ADPCM";
2563 case MM_AUDIO_CODEC_WAVE:
2564 codec_type_str = "WAVE";
2566 case MM_AUDIO_CODEC_MIDI:
2567 codec_type_str = "MIDI";
2569 case MM_AUDIO_CODEC_IMELODY:
2570 codec_type_str = "IMELODY";
2572 case MM_AUDIO_CODEC_VORBIS:
2573 codec_type_str = "VORBIS";
2576 _mmcam_dbg_err( "Not supported audio codec[%d]", codec_type );
2580 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2581 CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER,
2589 static type_element *
2590 __mmcamcorder_get_video_codec_element(MMHandleType handle)
2592 type_element *telement = NULL;
2593 const char *codec_type_str = NULL;
2594 int codec_type = MM_VIDEO_CODEC_INVALID;
2595 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2596 _MMCamcorderSubContext *sc = NULL;
2598 mmf_return_val_if_fail(hcamcorder, NULL);
2599 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2601 mmf_return_val_if_fail(sc, NULL);
2605 /* Check element availability */
2606 mm_camcorder_get_attributes(handle, NULL, MMCAM_VIDEO_ENCODER, &codec_type, NULL);
2608 switch( codec_type )
2610 case MM_VIDEO_CODEC_H263:
2611 codec_type_str = "H263";
2613 case MM_VIDEO_CODEC_H264:
2614 codec_type_str = "H264";
2616 case MM_VIDEO_CODEC_H26L:
2617 codec_type_str = "H26L";
2619 case MM_VIDEO_CODEC_MPEG4:
2620 codec_type_str = "MPEG4";
2622 case MM_VIDEO_CODEC_MPEG1:
2623 codec_type_str = "MPEG1";
2625 case MM_VIDEO_CODEC_THEORA:
2626 codec_type_str = "THEORA";
2629 _mmcam_dbg_err( "Not supported video codec[%d]", codec_type );
2633 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2634 CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER,
2642 static type_element *
2643 __mmcamcorder_get_image_codec_element(MMHandleType handle)
2645 type_element *telement = NULL;
2646 const char *codec_type_str = NULL;
2647 int codec_type = MM_IMAGE_CODEC_INVALID;
2648 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2649 _MMCamcorderSubContext *sc = NULL;
2651 mmf_return_val_if_fail(hcamcorder, NULL);
2652 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2654 mmf_return_val_if_fail(sc, NULL);
2658 /* Check element availability */
2659 mm_camcorder_get_attributes(handle, NULL, MMCAM_IMAGE_ENCODER, &codec_type, NULL);
2661 switch( codec_type )
2663 case MM_IMAGE_CODEC_JPEG:
2664 codec_type_str = "JPEG";
2666 case MM_IMAGE_CODEC_SRW:
2667 codec_type_str = "SRW";
2669 case MM_IMAGE_CODEC_JPEG_SRW:
2670 codec_type_str = "JPEG_SRW";
2672 case MM_IMAGE_CODEC_PNG:
2673 codec_type_str = "PNG";
2675 case MM_IMAGE_CODEC_BMP:
2676 codec_type_str = "BMP";
2678 case MM_IMAGE_CODEC_WBMP:
2679 codec_type_str = "WBMP";
2681 case MM_IMAGE_CODEC_TIFF:
2682 codec_type_str = "TIFF";
2684 case MM_IMAGE_CODEC_PCX:
2685 codec_type_str = "PCX";
2687 case MM_IMAGE_CODEC_GIF:
2688 codec_type_str = "GIF";
2690 case MM_IMAGE_CODEC_ICO:
2691 codec_type_str = "ICO";
2693 case MM_IMAGE_CODEC_RAS:
2694 codec_type_str = "RAS";
2696 case MM_IMAGE_CODEC_TGA:
2697 codec_type_str = "TGA";
2699 case MM_IMAGE_CODEC_XBM:
2700 codec_type_str = "XBM";
2702 case MM_IMAGE_CODEC_XPM:
2703 codec_type_str = "XPM";
2706 _mmcam_dbg_err( "Not supported image codec[%d]", codec_type );
2710 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2711 CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER,
2719 static type_element *
2720 __mmcamcorder_get_file_format_element(MMHandleType handle)
2722 type_element *telement = NULL;
2723 const char *mux_type_str = NULL;
2724 int file_type = MM_FILE_FORMAT_INVALID;
2725 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
2726 _MMCamcorderSubContext *sc = NULL;
2728 mmf_return_val_if_fail(hcamcorder, NULL);
2729 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2731 mmf_return_val_if_fail(sc, NULL);
2735 /* Check element availability */
2736 mm_camcorder_get_attributes(handle, NULL, MMCAM_FILE_FORMAT, &file_type, NULL);
2740 case MM_FILE_FORMAT_3GP:
2741 mux_type_str = "3GP";
2743 case MM_FILE_FORMAT_AMR:
2744 mux_type_str = "AMR";
2746 case MM_FILE_FORMAT_MP4:
2747 mux_type_str = "MP4";
2749 case MM_FILE_FORMAT_AAC:
2750 mux_type_str = "AAC";
2752 case MM_FILE_FORMAT_MP3:
2753 mux_type_str = "MP3";
2755 case MM_FILE_FORMAT_OGG:
2756 mux_type_str = "OGG";
2758 case MM_FILE_FORMAT_WAV:
2759 mux_type_str = "WAV";
2761 case MM_FILE_FORMAT_AVI:
2762 mux_type_str = "AVI";
2764 case MM_FILE_FORMAT_WMA:
2765 mux_type_str = "WMA";
2767 case MM_FILE_FORMAT_WMV:
2768 mux_type_str = "WMV";
2770 case MM_FILE_FORMAT_MID:
2771 mux_type_str = "MID";
2773 case MM_FILE_FORMAT_MMF:
2774 mux_type_str = "MMF";
2776 case MM_FILE_FORMAT_MATROSKA:
2777 mux_type_str = "MATROSKA";
2779 case MM_FILE_FORMAT_M2TS:
2780 mux_type_str = "M2TS";
2783 _mmcam_dbg_err( "Not supported file format[%d]", file_type );
2787 _mmcamcorder_conf_get_element( hcamcorder->conf_main,
2788 CONFIGURE_CATEGORY_MAIN_MUX,
2797 _mmcamcorder_get_type_element(MMHandleType handle, int type)
2799 type_element *telement = NULL;
2801 _mmcam_dbg_log("type:%d", type);
2805 case MM_CAM_AUDIO_ENCODER:
2806 telement = __mmcamcorder_get_audio_codec_element(handle);
2808 case MM_CAM_VIDEO_ENCODER:
2809 telement = __mmcamcorder_get_video_codec_element(handle);
2811 case MM_CAM_IMAGE_ENCODER:
2812 telement = __mmcamcorder_get_image_codec_element(handle);
2814 case MM_CAM_FILE_FORMAT:
2815 telement = __mmcamcorder_get_file_format_element(handle);
2818 _mmcam_dbg_log("Can't get element type form this profile.(%d)", type);
2825 int _mmcamcorder_get_audio_codec_format(MMHandleType handle, const char *name)
2827 int codec_index = MM_AUDIO_CODEC_INVALID;
2830 _mmcam_dbg_err("name is NULL");
2831 return MM_AUDIO_CODEC_INVALID;
2834 if (!strcmp(name, "AMR")) {
2835 codec_index = MM_AUDIO_CODEC_AMR;
2836 } else if (!strcmp(name, "G723_1")) {
2837 codec_index = MM_AUDIO_CODEC_G723_1;
2838 } else if (!strcmp(name, "MP3")) {
2839 codec_index = MM_AUDIO_CODEC_MP3;
2840 } else if (!strcmp(name, "AAC")) {
2841 codec_index = MM_AUDIO_CODEC_AAC;
2842 } else if (!strcmp(name, "MMF")) {
2843 codec_index = MM_AUDIO_CODEC_MMF;
2844 } else if (!strcmp(name, "ADPCM")) {
2845 codec_index = MM_AUDIO_CODEC_ADPCM;
2846 } else if (!strcmp(name, "WAVE")) {
2847 codec_index = MM_AUDIO_CODEC_WAVE;
2848 } else if (!strcmp(name, "MIDI")) {
2849 codec_index = MM_AUDIO_CODEC_MIDI;
2850 } else if (!strcmp(name, "IMELODY")) {
2851 codec_index = MM_AUDIO_CODEC_IMELODY;
2852 } else if (!strcmp(name, "VORBIS")) {
2853 codec_index = MM_AUDIO_CODEC_VORBIS;
2856 /*_mmcam_dbg_log("audio codec index %d", codec_index);*/
2863 int _mmcamcorder_get_video_codec_format(MMHandleType handle, const char *name)
2865 int codec_index = MM_VIDEO_CODEC_INVALID;
2868 _mmcam_dbg_err("name is NULL");
2869 return MM_VIDEO_CODEC_INVALID;
2872 if (!strcmp(name, "H263")) {
2873 codec_index = MM_VIDEO_CODEC_H263;
2874 } else if (!strcmp(name, "H264")) {
2875 codec_index = MM_VIDEO_CODEC_H264;
2876 } else if (!strcmp(name, "H26L")) {
2877 codec_index = MM_VIDEO_CODEC_H26L;
2878 } else if (!strcmp(name, "MPEG4")) {
2879 codec_index = MM_VIDEO_CODEC_MPEG4;
2880 } else if (!strcmp(name, "MPEG1")) {
2881 codec_index = MM_VIDEO_CODEC_MPEG1;
2882 } else if (!strcmp(name, "THEORA")) {
2883 codec_index = MM_VIDEO_CODEC_THEORA;
2886 /*_mmcam_dbg_log("video codec index %d", codec_index);*/
2893 int _mmcamcorder_get_image_codec_format(MMHandleType handle, const char *name)
2895 int codec_index = MM_IMAGE_CODEC_INVALID;
2898 _mmcam_dbg_err("name is NULL");
2899 return MM_IMAGE_CODEC_INVALID;
2902 if (!strcmp(name, "JPEG")) {
2903 codec_index = MM_IMAGE_CODEC_JPEG;
2904 } else if (!strcmp(name, "PNG")) {
2905 codec_index = MM_IMAGE_CODEC_PNG;
2906 } else if (!strcmp(name, "BMP")) {
2907 codec_index = MM_IMAGE_CODEC_BMP;
2908 } else if (!strcmp(name, "WBMP")) {
2909 codec_index = MM_IMAGE_CODEC_WBMP;
2910 } else if (!strcmp(name, "TIFF")) {
2911 codec_index = MM_IMAGE_CODEC_TIFF;
2912 } else if (!strcmp(name, "PCX")) {
2913 codec_index = MM_IMAGE_CODEC_PCX;
2914 } else if (!strcmp(name, "GIF")) {
2915 codec_index = MM_IMAGE_CODEC_GIF;
2916 } else if (!strcmp(name, "ICO")) {
2917 codec_index = MM_IMAGE_CODEC_ICO;
2918 } else if (!strcmp(name, "RAS")) {
2919 codec_index = MM_IMAGE_CODEC_RAS;
2920 } else if (!strcmp(name, "TGA")) {
2921 codec_index = MM_IMAGE_CODEC_TGA;
2922 } else if (!strcmp(name, "XBM")) {
2923 codec_index = MM_IMAGE_CODEC_XBM;
2924 } else if (!strcmp(name, "XPM")) {
2925 codec_index = MM_IMAGE_CODEC_XPM;
2928 _mmcam_dbg_log("image codec index %d", codec_index);
2934 int _mmcamcorder_get_mux_format(MMHandleType handle, const char *name)
2936 int mux_index = MM_FILE_FORMAT_INVALID;
2939 _mmcam_dbg_err("name is NULL");
2940 return MM_FILE_FORMAT_INVALID;
2943 if (!strcmp(name, "3GP")) {
2944 mux_index = MM_FILE_FORMAT_3GP;
2945 } else if (!strcmp(name, "AMR")) {
2946 mux_index = MM_FILE_FORMAT_AMR;
2947 } else if (!strcmp(name, "MP4")) {
2948 mux_index = MM_FILE_FORMAT_MP4;
2949 } else if (!strcmp(name, "AAC")) {
2950 mux_index = MM_FILE_FORMAT_AAC;
2951 } else if (!strcmp(name, "MP3")) {
2952 mux_index = MM_FILE_FORMAT_MP3;
2953 } else if (!strcmp(name, "OGG")) {
2954 mux_index = MM_FILE_FORMAT_OGG;
2955 } else if (!strcmp(name, "WAV")) {
2956 mux_index = MM_FILE_FORMAT_WAV;
2957 } else if (!strcmp(name, "AVI")) {
2958 mux_index = MM_FILE_FORMAT_AVI;
2959 } else if (!strcmp(name, "WMA")) {
2960 mux_index = MM_FILE_FORMAT_WMA;
2961 } else if (!strcmp(name, "WMV")) {
2962 mux_index = MM_FILE_FORMAT_WMV;
2963 } else if (!strcmp(name, "MID")) {
2964 mux_index = MM_FILE_FORMAT_MID;
2965 } else if (!strcmp(name, "MMF")) {
2966 mux_index = MM_FILE_FORMAT_MMF;
2967 } else if (!strcmp(name, "MATROSKA")) {
2968 mux_index = MM_FILE_FORMAT_MATROSKA;
2969 } else if (!strcmp(name, "M2TS")) {
2970 mux_index = MM_FILE_FORMAT_M2TS;
2974 /*_mmcam_dbg_log("mux index %d", mux_index);*/
2981 _mmcamcorder_get_format(MMHandleType handle, int conf_category, const char *name)
2985 mmf_return_val_if_fail(name, -1);
2987 switch(conf_category)
2989 case CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER:
2990 fmt = _mmcamcorder_get_audio_codec_format(handle, name);
2992 case CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER:
2993 fmt = _mmcamcorder_get_video_codec_format(handle, name);
2995 case CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER:
2996 fmt = _mmcamcorder_get_image_codec_format(handle, name);
2998 case CONFIGURE_CATEGORY_MAIN_MUX:
2999 fmt = _mmcamcorder_get_mux_format(handle, name);
3002 _mmcam_dbg_log("Can't get format from this category.(%d)", conf_category);
3009 _mmcamcorder_get_available_format(MMHandleType handle, int conf_category, int ** format)
3011 mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
3012 camera_conf* configure_info = NULL;
3014 int total_count = 0;
3016 mmf_return_val_if_fail(hcamcorder, 0);
3018 /*_mmcam_dbg_log("conf_category:%d", conf_category);*/
3020 configure_info = hcamcorder->conf_main;
3022 if (configure_info->info[conf_category]) {
3025 const char *name = NULL;
3026 int count = configure_info->info[conf_category]->count;
3027 conf_detail *info = configure_info->info[conf_category];
3029 /*_mmcam_dbg_log("count[%d], info[%p]", count, info);*/
3031 if (count <= 0 || !info) {
3035 arr = (int*) g_malloc0(count * sizeof(int));
3037 _mmcam_dbg_err("malloc failed : %d", count * sizeof(int));
3041 for (i = 0 ; i < count ; i++) {
3042 if (info->detail_info[i] == NULL) {
3046 name = ((type_element*)(info->detail_info[i]))->name;
3047 fmt = _mmcamcorder_get_format(handle, conf_category, name);
3049 arr[total_count++] = fmt;
3052 /*_mmcam_dbg_log("name:%s, fmt:%d", name, fmt);*/