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 -----------------------------------------------------------------------*/
37 /*-----------------------------------------------------------------------
38 | GLOBAL VARIABLE DEFINITIONS |
39 -----------------------------------------------------------------------*/
41 /*-----------------------------------------------------------------------
42 | LOCAL VARIABLE DEFINITIONS |
43 -----------------------------------------------------------------------*/
44 #define DEFAULT_AUDIO_BUFFER_INTERVAL 50
47 char *get_new_string(char* src_string)
49 return g_strdup(src_string);
52 void _mmcamcorder_conf_init(MMHandleType handle, int type, camera_conf** configure_info)
55 int info_table_size = sizeof(conf_info_table);
57 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
59 /* Videosrc element default value */
60 static type_element _videosrc_element_default = {
69 /* Audiosrc element default value */
70 static type_int ___audiosrc_default_channel = {"Channel", 1};
71 static type_int ___audiosrc_default_bitrate = {"BitRate", 8000};
72 static type_int ___audiosrc_default_depth = {"Depth", 16};
73 static type_int ___audiosrc_default_blocksize = {"BlockSize", 1280};
74 static type_int* __audiosrc_default_int_array[] = {
75 &___audiosrc_default_channel,
76 &___audiosrc_default_bitrate,
77 &___audiosrc_default_depth,
78 &___audiosrc_default_blocksize,
80 static type_string ___audiosrc_default_device = {"Device", "default"};
81 static type_string* __audiosrc_default_string_array[] = {
82 &___audiosrc_default_device,
84 static type_element _audiosrc_element_default = {
87 __audiosrc_default_int_array,
88 sizeof(__audiosrc_default_int_array) / sizeof(type_int*),
89 __audiosrc_default_string_array,
90 sizeof(__audiosrc_default_string_array) / sizeof(type_string*),
93 static type_element _audiomodemsrc_element_default = {
94 "AudiomodemsrcElement",
96 __audiosrc_default_int_array,
97 sizeof(__audiosrc_default_int_array) / sizeof(type_int*),
98 __audiosrc_default_string_array,
99 sizeof(__audiosrc_default_string_array) / sizeof(type_string*),
103 /* Videosink element default value */
104 static type_int ___videosink_default_display_id = {"display-id", 3};
105 static type_int ___videosink_default_x = {"x", 0};
106 static type_int ___videosink_default_y = {"y", 0};
107 static type_int ___videosink_default_width = {"width", 800};
108 static type_int ___videosink_default_height = {"height", 480};
109 static type_int ___videosink_default_rotation = {"rotation", 1};
110 static type_int* __videosink_default_int_array[] = {
111 &___videosink_default_display_id,
112 &___videosink_default_x,
113 &___videosink_default_y,
114 &___videosink_default_width,
115 &___videosink_default_height,
116 &___videosink_default_rotation,
118 static type_string* __videosink_default_string_array[] = {NULL};
119 static type_element _videosink_element_overlay_default = {
120 "VideosinkElementOverlay",
122 __videosink_default_int_array,
123 sizeof(__videosink_default_int_array) / sizeof(type_int*),
124 __videosink_default_string_array,
125 sizeof(__videosink_default_string_array) / sizeof(type_string*),
127 static type_element _videosink_element_evas_default = {
128 "VideosinkElementEvas",
130 __videosink_default_int_array,
131 sizeof(__videosink_default_int_array) / sizeof(type_int*),
132 __videosink_default_string_array,
133 sizeof(__videosink_default_string_array) / sizeof(type_string*),
135 static type_element _videosink_element_gl_default = {
136 "VideosinkElementGL",
138 __videosink_default_int_array,
139 sizeof(__videosink_default_int_array) / sizeof(type_int*),
140 __videosink_default_string_array,
141 sizeof(__videosink_default_string_array) / sizeof(type_string*),
143 static type_element _videosink_element_remote_default = {
144 "VideosinkElementRemote",
146 __videosink_default_int_array,
147 sizeof(__videosink_default_int_array) / sizeof(type_int*),
148 __videosink_default_string_array,
149 sizeof(__videosink_default_string_array) / sizeof(type_string*),
151 static type_element _videosink_element_null_default = {
152 "VideosinkElementNull",
154 __videosink_default_int_array,
155 sizeof(__videosink_default_int_array) / sizeof(type_int*),
156 __videosink_default_string_array,
157 sizeof(__videosink_default_string_array) / sizeof(type_string*),
160 /* Videoscale element default value */
161 static type_element _videoscale_element_default = {
170 /* Videoconvert element default value */
171 static type_element _videoconvert_element_default = {
172 "VideoconvertElement",
180 /* H.264 decoder element default value */
181 static type_element _videodecoder_element_h264_default = {
182 "VideodecoderElementH264",
190 /* Record sink element default value */
191 static type_element _recordsink_element_default = {
200 /* H263 element default value */
201 static type_element _h263_element_default = {
210 /* H264 element default value */
211 static type_element _h264_element_default = {
220 /* H26L element default value */
221 static type_element _h26l_element_default = {
230 /* MPEG4 element default value */
231 static type_element _mpeg4_element_default = {
240 /* MPEG1 element default value */
241 static type_element _mpeg1_element_default = {
250 /* THEORA element default value */
251 static type_element _theora_element_default = {
260 /* AMR element default value */
261 static type_element _amr_element_default = {
270 /* G723_1 element default value */
271 static type_element _g723_1_element_default = {
280 /* MP3 element default value */
281 static type_element _mp3_element_default = {
290 /* AAC element default value */
291 static type_element _aac_element_default = {
300 /* MMF element default value */
301 static type_element _mmf_element_default = {
310 /* ADPCM element default value */
311 static type_element _adpcm_element_default = {
313 "avenc_adpcm_ima_qt",
320 /* WAVE element default value */
321 static type_element _wave_element_default = {
330 /* VORBIS element default value */
331 static type_element _vorbis_element_default = {
340 /* MIDI element default value */
341 static type_element _midi_element_default = {
350 /* IMELODY element default value */
351 static type_element _imelody_element_default = {
360 /* JPEG element default value */
361 static type_element _jpeg_element_default = {
370 /* PNG element default value */
371 static type_element _png_element_default = {
380 /* BMP element default value */
381 static type_element _bmp_element_default = {
390 /* WBMP element default value */
391 static type_element _wbmp_element_default = {
400 /* TIFF element default value */
401 static type_element _tiff_element_default = {
410 /* PCX element default value */
411 static type_element _pcx_element_default = {
420 /* GIF element default value */
421 static type_element _gif_element_default = {
430 /* ICO element default value */
431 static type_element _ico_element_default = {
440 /* RAS element default value */
441 static type_element _ras_element_default = {
450 /* TGA element default value */
451 static type_element _tga_element_default = {
460 /* XBM element default value */
461 static type_element _xbm_element_default = {
470 /* XPM element default value */
471 static type_element _xpm_element_default = {
480 /* 3GP element default value */
481 static type_element _3gp_element_default = {
490 /* AMR mux element default value */
491 static type_element _amrmux_element_default = {
500 /* MP4 element default value */
501 static type_element _mp4_element_default = {
510 /* AAC mux element default value */
511 static type_element _aacmux_element_default = {
520 /* MP3 mux element default value */
521 static type_element _mp3mux_element_default = {
530 /* OGG element default value */
531 static type_element _ogg_element_default = {
540 /* WAV element default value */
541 static type_element _wav_element_default = {
550 /* AVI element default value */
551 static type_element _avi_element_default = {
560 /* WMA element default value */
561 static type_element _wma_element_default = {
570 /* WMV element default value */
571 static type_element _wmv_element_default = {
580 /* MID element default value */
581 static type_element _mid_element_default = {
590 /* MMF mux element default value */
591 static type_element _mmfmux_element_default = {
600 /* MATROSKA element default value */
601 static type_element _matroska_element_default = {
610 /* M2TS element default value */
611 static type_element _m2ts_element_default = {
620 /* [General] matching table */
621 static conf_info_table conf_main_general_table[] = {
622 { "SyncStateChange", CONFIGURE_VALUE_INT, {.value_int = 1} },
623 { "GSTInitOption", CONFIGURE_VALUE_STRING_ARRAY, {NULL} },
624 { "ModelName", CONFIGURE_VALUE_STRING, {NULL} },
625 { "DisabledAttributes", CONFIGURE_VALUE_STRING_ARRAY, {NULL} },
628 /* [VideoInput] matching table */
629 static conf_info_table conf_main_video_input_table[] = {
630 { "UseConfCtrl", CONFIGURE_VALUE_INT, {.value_int = 1} },
631 { "ConfCtrlFile0", CONFIGURE_VALUE_STRING, {NULL} },
632 { "ConfCtrlFile1", CONFIGURE_VALUE_STRING, {NULL} },
633 { "VideosrcElement", CONFIGURE_VALUE_ELEMENT, {&_videosrc_element_default} },
634 { "UseVideoscale", CONFIGURE_VALUE_INT, {.value_int = 0} },
635 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {&_videoscale_element_default} },
636 { "UseZeroCopyFormat", CONFIGURE_VALUE_INT, {.value_int = 0} },
637 { "DeviceCount", CONFIGURE_VALUE_INT, {.value_int = MM_VIDEO_DEVICE_NUM} },
638 { "SupportMediaPacketPreviewCb", CONFIGURE_VALUE_INT, {.value_int = 0} },
641 /* [AudioInput] matching table */
642 static conf_info_table conf_main_audio_input_table[] = {
643 { "AudioDevice", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
644 { "AudiosrcElement", CONFIGURE_VALUE_ELEMENT, {&_audiosrc_element_default} },
645 { "AudiomodemsrcElement", CONFIGURE_VALUE_ELEMENT, {&_audiomodemsrc_element_default} },
646 { "AudioBufferInterval", CONFIGURE_VALUE_INT, {.value_int = DEFAULT_AUDIO_BUFFER_INTERVAL} },
649 /* [VideoOutput] matching table */
650 static conf_info_table conf_main_video_output_table[] = {
651 { "DisplayDevice", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
652 { "DisplayMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
653 { "Videosink", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
654 { "VideosinkElementOverlay", CONFIGURE_VALUE_ELEMENT, {&_videosink_element_overlay_default} },
655 { "VideosinkElementEvas", CONFIGURE_VALUE_ELEMENT, {&_videosink_element_evas_default} },
656 { "VideosinkElementGL", CONFIGURE_VALUE_ELEMENT, {&_videosink_element_gl_default} },
657 { "VideosinkElementRemote", CONFIGURE_VALUE_ELEMENT, {&_videosink_element_remote_default} },
658 { "VideosinkElementNull", CONFIGURE_VALUE_ELEMENT, {&_videosink_element_null_default} },
659 { "UseVideoscale", CONFIGURE_VALUE_INT, {.value_int = 0} },
660 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {&_videoscale_element_default} },
661 { "UseVideoconvert", CONFIGURE_VALUE_INT, {.value_int = 0} },
662 { "VideoconvertElement", CONFIGURE_VALUE_ELEMENT, {&_videoconvert_element_default} },
663 { "VideodecoderElementH264", CONFIGURE_VALUE_ELEMENT, {&_videodecoder_element_h264_default} },
664 { "RecreateDecoder", CONFIGURE_VALUE_INT, {.value_int = 0} }
667 /* [Capture] matching table */
668 static conf_info_table conf_main_capture_table[] = {
669 { "UseEncodebin", CONFIGURE_VALUE_INT, {.value_int = 0} },
670 { "UseCaptureMode", CONFIGURE_VALUE_INT, {.value_int = 0} },
671 { "VideoscaleElement", CONFIGURE_VALUE_ELEMENT, {&_videoscale_element_default} },
672 { "PlayCaptureSound", CONFIGURE_VALUE_INT, {.value_int = 1} },
675 /* [Record] matching table */
676 static conf_info_table conf_main_record_table[] = {
677 { "UseAudioEncoderQueue", CONFIGURE_VALUE_INT, {.value_int = 1} },
678 { "UseVideoEncoderQueue", CONFIGURE_VALUE_INT, {.value_int = 1} },
679 { "VideoProfile", CONFIGURE_VALUE_INT, {.value_int = 0} },
680 { "VideoAutoAudioConvert", CONFIGURE_VALUE_INT, {.value_int = 0} },
681 { "VideoAutoAudioResample", CONFIGURE_VALUE_INT, {.value_int = 0} },
682 { "VideoAutoColorSpace", CONFIGURE_VALUE_INT, {.value_int = 0} },
683 { "AudioProfile", CONFIGURE_VALUE_INT, {.value_int = 0} },
684 { "AudioAutoAudioConvert", CONFIGURE_VALUE_INT, {.value_int = 0} },
685 { "AudioAutoAudioResample", CONFIGURE_VALUE_INT, {.value_int = 0} },
686 { "AudioAutoColorSpace", CONFIGURE_VALUE_INT, {.value_int = 0} },
687 { "ImageProfile", CONFIGURE_VALUE_INT, {.value_int = 0} },
688 { "ImageAutoAudioConvert", CONFIGURE_VALUE_INT, {.value_int = 0} },
689 { "ImageAutoAudioResample", CONFIGURE_VALUE_INT, {.value_int = 0} },
690 { "ImageAutoColorSpace", CONFIGURE_VALUE_INT, {.value_int = 0} },
691 { "RecordsinkElement", CONFIGURE_VALUE_ELEMENT, {&_recordsink_element_default} },
692 { "UseNoiseSuppressor", CONFIGURE_VALUE_INT, {.value_int = 0} },
693 { "DropVideoFrame", CONFIGURE_VALUE_INT, {.value_int = 0} },
694 { "PassFirstVideoFrame", CONFIGURE_VALUE_INT, {.value_int = 0} },
695 { "SupportDualStream", CONFIGURE_VALUE_INT, {.value_int = FALSE} },
698 /* [VideoEncoder] matching table */
699 static conf_info_table conf_main_video_encoder_table[] = {
700 { "H263", CONFIGURE_VALUE_ELEMENT, {&_h263_element_default} },
701 { "H264", CONFIGURE_VALUE_ELEMENT, {&_h264_element_default} },
702 { "H26L", CONFIGURE_VALUE_ELEMENT, {&_h26l_element_default} },
703 { "MPEG4", CONFIGURE_VALUE_ELEMENT, {&_mpeg4_element_default} },
704 { "MPEG1", CONFIGURE_VALUE_ELEMENT, {&_mpeg1_element_default} },
705 { "THEORA", CONFIGURE_VALUE_ELEMENT, {&_theora_element_default} },
708 /* [AudioEncoder] matching table */
709 static conf_info_table conf_main_audio_encoder_table[] = {
710 { "AMR", CONFIGURE_VALUE_ELEMENT, {&_amr_element_default} },
711 { "G723_1", CONFIGURE_VALUE_ELEMENT, {&_g723_1_element_default} },
712 { "MP3", CONFIGURE_VALUE_ELEMENT, {&_mp3_element_default} },
713 { "AAC", CONFIGURE_VALUE_ELEMENT, {&_aac_element_default} },
714 { "MMF", CONFIGURE_VALUE_ELEMENT, {&_mmf_element_default} },
715 { "ADPCM", CONFIGURE_VALUE_ELEMENT, {&_adpcm_element_default} },
716 { "WAVE", CONFIGURE_VALUE_ELEMENT, {&_wave_element_default} },
717 { "MIDI", CONFIGURE_VALUE_ELEMENT, {&_midi_element_default} },
718 { "IMELODY", CONFIGURE_VALUE_ELEMENT, {&_imelody_element_default} },
719 { "VORBIS", CONFIGURE_VALUE_ELEMENT, {&_vorbis_element_default} },
722 /* [ImageEncoder] matching table */
723 static conf_info_table conf_main_image_encoder_table[] = {
724 { "JPEG", CONFIGURE_VALUE_ELEMENT, {&_jpeg_element_default} },
725 { "PNG", CONFIGURE_VALUE_ELEMENT, {&_png_element_default} },
726 { "BMP", CONFIGURE_VALUE_ELEMENT, {&_bmp_element_default} },
727 { "WBMP", CONFIGURE_VALUE_ELEMENT, {&_wbmp_element_default} },
728 { "TIFF", CONFIGURE_VALUE_ELEMENT, {&_tiff_element_default} },
729 { "PCX", CONFIGURE_VALUE_ELEMENT, {&_pcx_element_default} },
730 { "GIF", CONFIGURE_VALUE_ELEMENT, {&_gif_element_default} },
731 { "ICO", CONFIGURE_VALUE_ELEMENT, {&_ico_element_default} },
732 { "RAS", CONFIGURE_VALUE_ELEMENT, {&_ras_element_default} },
733 { "TGA", CONFIGURE_VALUE_ELEMENT, {&_tga_element_default} },
734 { "XBM", CONFIGURE_VALUE_ELEMENT, {&_xbm_element_default} },
735 { "XPM", CONFIGURE_VALUE_ELEMENT, {&_xpm_element_default} },
738 /* [Mux] matching table */
739 static conf_info_table conf_main_mux_table[] = {
740 { "3GP", CONFIGURE_VALUE_ELEMENT, {&_3gp_element_default} },
741 { "AMR", CONFIGURE_VALUE_ELEMENT, {&_amrmux_element_default} },
742 { "MP4", CONFIGURE_VALUE_ELEMENT, {&_mp4_element_default} },
743 { "AAC", CONFIGURE_VALUE_ELEMENT, {&_aacmux_element_default} },
744 { "MP3", CONFIGURE_VALUE_ELEMENT, {&_mp3mux_element_default} },
745 { "OGG", CONFIGURE_VALUE_ELEMENT, {&_ogg_element_default} },
746 { "WAV", CONFIGURE_VALUE_ELEMENT, {&_wav_element_default} },
747 { "AVI", CONFIGURE_VALUE_ELEMENT, {&_avi_element_default} },
748 { "WMA", CONFIGURE_VALUE_ELEMENT, {&_wma_element_default} },
749 { "WMV", CONFIGURE_VALUE_ELEMENT, {&_wmv_element_default} },
750 { "MID", CONFIGURE_VALUE_ELEMENT, {&_mid_element_default} },
751 { "MMF", CONFIGURE_VALUE_ELEMENT, {&_mmfmux_element_default} },
752 { "MATROSKA", CONFIGURE_VALUE_ELEMENT, {&_matroska_element_default} },
753 { "M2TS", CONFIGURE_VALUE_ELEMENT, {&_m2ts_element_default} },
761 /* [Camera] matching table */
762 static conf_info_table conf_ctrl_camera_table[] = {
763 { "InputIndex", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
764 { "DeviceName", CONFIGURE_VALUE_STRING, {NULL} },
765 { "PreviewResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {NULL} },
766 { "CaptureResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {NULL} },
767 { "VideoResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {NULL} },
768 { "FPS0", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
769 { "FPS1", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
770 { "FPS2", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
771 { "FPS3", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
772 { "FPS4", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
773 { "FPS5", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
774 { "FPS6", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
775 { "FPS7", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
776 { "FPS8", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
777 { "FPS9", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
778 { "PictureFormat", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
779 { "Overlay", CONFIGURE_VALUE_INT_RANGE, {NULL} },
780 { "RecommendDisplayRotation", CONFIGURE_VALUE_INT, {.value_int = 3} },
781 { "RecommendPreviewFormatCapture", CONFIGURE_VALUE_INT, {.value_int = MM_PIXEL_FORMAT_YUYV} },
782 { "RecommendPreviewFormatRecord", CONFIGURE_VALUE_INT, {.value_int = MM_PIXEL_FORMAT_NV12} },
783 { "RecommendPreviewResolution", CONFIGURE_VALUE_INT_PAIR_ARRAY, {NULL} },
784 { "FacingDirection", CONFIGURE_VALUE_INT, {.value_int = MM_CAMCORDER_CAMERA_FACING_DIRECTION_REAR} },
787 /* [Strobe] matching table */
788 static conf_info_table conf_ctrl_strobe_table[] = {
789 { "StrobeControl", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
790 { "StrobeMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
791 { "StrobeEV", CONFIGURE_VALUE_INT_RANGE, {NULL} },
794 /* [Effect] matching table */
795 static conf_info_table conf_ctrl_effect_table[] = {
796 { "Brightness", CONFIGURE_VALUE_INT_RANGE, {NULL} },
797 { "BrightnessStepDenominator", CONFIGURE_VALUE_INT, {.value_int = 2} },
798 { "Contrast", CONFIGURE_VALUE_INT_RANGE, {NULL} },
799 { "Saturation", CONFIGURE_VALUE_INT_RANGE, {NULL} },
800 { "Sharpness", CONFIGURE_VALUE_INT_RANGE, {NULL} },
801 { "WhiteBalance", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
802 { "ColorTone", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
803 { "Flip", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
804 { "Rotation", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
805 { "WDR", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
806 { "PartColorMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
807 { "PartColor", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
810 /* [Photograph] matching table */
811 static conf_info_table conf_ctrl_photograph_table[] = {
812 { "LensInit", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
813 { "DigitalZoom", CONFIGURE_VALUE_INT_RANGE, {NULL} },
814 { "OpticalZoom", CONFIGURE_VALUE_INT_RANGE, {NULL} },
815 { "FocusMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
816 { "AFType", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
817 { "AEType", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
818 { "ExposureValue", CONFIGURE_VALUE_INT_RANGE, {NULL} },
819 { "FNumber", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
820 { "ShutterSpeed", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
821 { "ISO", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
822 { "ProgramMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
823 { "AntiHandshake", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
824 { "VideoStabilization", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
825 { "FaceZoomMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
826 { "FaceZoomLevel", CONFIGURE_VALUE_INT_RANGE, {NULL} },
827 { "PanMecha", CONFIGURE_VALUE_INT_RANGE, {NULL} },
828 { "PanElec", CONFIGURE_VALUE_INT_RANGE, {NULL} },
829 { "TiltMecha", CONFIGURE_VALUE_INT_RANGE, {NULL} },
830 { "TiltElec", CONFIGURE_VALUE_INT_RANGE, {NULL} },
833 /* [Capture] matching table */
834 static conf_info_table conf_ctrl_capture_table[] = {
835 { "OutputMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
836 { "JpegQuality", CONFIGURE_VALUE_INT_RANGE, {NULL} },
837 { "MultishotNumber", CONFIGURE_VALUE_INT_RANGE, {NULL} },
838 { "SensorEncodedCapture", CONFIGURE_VALUE_INT, {.value_int = 1} },
839 { "SupportHDR", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
840 { "SupportZSL", CONFIGURE_VALUE_INT, {.value_int = FALSE} },
843 /* [Detect] matching table */
844 static conf_info_table conf_ctrl_detect_table[] = {
845 { "DetectMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
846 { "DetectNumber", CONFIGURE_VALUE_INT_RANGE, {NULL} },
847 { "DetectSelect", CONFIGURE_VALUE_INT_RANGE, {NULL} },
848 { "DetectSelectNumber", CONFIGURE_VALUE_INT_RANGE, {NULL} },
851 if (hcamcorder == NULL) {
852 _mmcam_dbg_err("handle is NULL");
856 _mmcam_dbg_log("Entered...");
858 if (type == CONFIGURE_TYPE_MAIN) {
859 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_GENERAL] = conf_main_general_table;
860 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT] = conf_main_video_input_table;
861 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT] = conf_main_audio_input_table;
862 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT] = conf_main_video_output_table;
863 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_CAPTURE] = conf_main_capture_table;
864 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_RECORD] = conf_main_record_table;
865 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER] = conf_main_video_encoder_table;
866 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER] = conf_main_audio_encoder_table;
867 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER] = conf_main_image_encoder_table;
868 hcamcorder->conf_main_info_table[CONFIGURE_CATEGORY_MAIN_MUX] = conf_main_mux_table;
870 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_GENERAL] = sizeof(conf_main_general_table) / info_table_size;
871 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT] = sizeof(conf_main_video_input_table) / info_table_size;
872 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT] = sizeof(conf_main_audio_input_table) / info_table_size;
873 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT] = sizeof(conf_main_video_output_table) / info_table_size;
874 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_CAPTURE] = sizeof(conf_main_capture_table) / info_table_size;
875 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_RECORD] = sizeof(conf_main_record_table) / info_table_size;
876 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER] = sizeof(conf_main_video_encoder_table) / info_table_size;
877 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER] = sizeof(conf_main_audio_encoder_table) / info_table_size;
878 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER] = sizeof(conf_main_image_encoder_table) / info_table_size;
879 hcamcorder->conf_main_category_size[CONFIGURE_CATEGORY_MAIN_MUX] = sizeof(conf_main_mux_table) / info_table_size;
881 (*configure_info)->info = (conf_detail**)g_malloc0(sizeof(conf_detail*) * CONFIGURE_CATEGORY_MAIN_NUM);
883 for (i = 0 ; i < CONFIGURE_CATEGORY_MAIN_NUM ; i++)
884 (*configure_info)->info[i] = NULL;
886 hcamcorder->conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_CAMERA] = conf_ctrl_camera_table;
887 hcamcorder->conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_STROBE] = conf_ctrl_strobe_table;
888 hcamcorder->conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_EFFECT] = conf_ctrl_effect_table;
889 hcamcorder->conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH] = conf_ctrl_photograph_table;
890 hcamcorder->conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_CAPTURE] = conf_ctrl_capture_table;
891 hcamcorder->conf_ctrl_info_table[CONFIGURE_CATEGORY_CTRL_DETECT] = conf_ctrl_detect_table;
893 hcamcorder->conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_CAMERA] = sizeof(conf_ctrl_camera_table) / info_table_size;
894 hcamcorder->conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_STROBE] = sizeof(conf_ctrl_strobe_table) / info_table_size;
895 hcamcorder->conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_EFFECT] = sizeof(conf_ctrl_effect_table) / info_table_size;
896 hcamcorder->conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH] = sizeof(conf_ctrl_photograph_table) / info_table_size;
897 hcamcorder->conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_CAPTURE] = sizeof(conf_ctrl_capture_table) / info_table_size;
898 hcamcorder->conf_ctrl_category_size[CONFIGURE_CATEGORY_CTRL_DETECT] = sizeof(conf_ctrl_detect_table) / info_table_size;
900 (*configure_info)->info = (conf_detail**)g_malloc0(sizeof(conf_detail*) * CONFIGURE_CATEGORY_CTRL_NUM);
902 for (i = 0 ; i < CONFIGURE_CATEGORY_CTRL_NUM ; i++)
903 (*configure_info)->info[i] = NULL;
906 _mmcam_dbg_log("Done.");
912 int _mmcamcorder_conf_get_info(MMHandleType handle, int type, const char *ConfFile, camera_conf **configure_info)
914 int ret = MM_ERROR_NONE;
916 char conf_path[60] = {'\0',};
918 _mmcam_dbg_log("Opening...[%s]", ConfFile);
920 mmf_return_val_if_fail(ConfFile, FALSE);
922 snprintf(conf_path, sizeof(conf_path), "%s/multimedia/%s", SYSCONFDIR, ConfFile);
923 _mmcam_dbg_log("Try open Configure File[%s]", conf_path);
925 fd = fopen(conf_path, "r");
927 _mmcam_dbg_warn("File open failed.[%s] retry...", conf_path);
929 snprintf(conf_path, sizeof(conf_path), "%s/multimedia/%s", TZ_SYS_ETC, ConfFile);
930 _mmcam_dbg_log("Try open Configure File[%s]", conf_path);
931 fd = fopen(conf_path, "r");
933 _mmcam_dbg_warn("open failed.[%s] errno [%d]", conf_path, errno);
937 ret = _mmcamcorder_conf_parse_info(handle, type, fd, configure_info);
941 ret = MM_ERROR_CAMCORDER_NOT_SUPPORTED;
943 ret = MM_ERROR_CAMCORDER_CREATE_CONFIGURE;
946 _mmcam_dbg_log("Leave...");
952 int _mmcamcorder_conf_parse_info(MMHandleType handle, int type, FILE* fd, camera_conf** configure_info)
954 const unsigned int BUFFER_NUM_DETAILS = 256;
955 const unsigned int BUFFER_NUM_TOKEN = 20;
956 size_t BUFFER_LENGTH_STRING = 256;
957 const char* delimiters = " |=,\t\n";
960 int count_main_category = 0;
961 int count_details = 0;
966 char *buffer_string = NULL;
967 char *buffer_details[BUFFER_NUM_DETAILS];
968 char *buffer_token[BUFFER_NUM_TOKEN];
970 char *category_name = NULL;
971 char *detail_string = NULL;
972 char *user_ptr = NULL;
976 camera_conf* new_conf = (camera_conf *)g_malloc0(sizeof(camera_conf));
977 if (new_conf == NULL) {
978 _mmcam_dbg_err("new_conf alloc failed : %d", sizeof(camera_conf));
979 *configure_info = NULL;
980 return MM_ERROR_CAMCORDER_LOW_MEMORY;
983 buffer_string = (char*)g_malloc0(sizeof(char) * BUFFER_LENGTH_STRING);
984 if (buffer_string == NULL) {
985 _mmcam_dbg_err("buffer_string alloc failed : %d", sizeof(char) * BUFFER_LENGTH_STRING);
986 *configure_info = NULL;
987 SAFE_G_FREE(new_conf);
988 return MM_ERROR_CAMCORDER_LOW_MEMORY;
991 new_conf->type = type;
992 *configure_info = new_conf;
994 _mmcamcorder_conf_init(handle, type, &new_conf);
997 _mmcam_dbg_err("failed file descriptor fail");
998 *configure_info = NULL;
999 SAFE_G_FREE(buffer_string);
1000 SAFE_G_FREE(new_conf);
1001 return MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
1005 count_main_category = 0;
1008 if (read_main == 0) {
1009 length_read = getline(&buffer_string, &BUFFER_LENGTH_STRING, fd);
1010 /*_mmcam_dbg_log( "Read Line : [%s]", buffer_string );*/
1013 token = strtok_r(buffer_string, delimiters, &user_ptr);
1015 if ((token) && (token[0] == ';') && (length_read > -1)) {
1016 /*_mmcam_dbg_log( "Comment - Nothing to do" );*/
1021 /*_mmcam_dbg_log("token : [%s]", token);*/
1022 buffer_token[count_token] = token;
1024 token = strtok_r(NULL, delimiters, &user_ptr);
1027 if (count_token == 0)
1034 if (*buffer_token[0] == ';') {
1035 /*_mmcam_dbg_log( "Comment - Nothing to do" );*/
1038 else if (*buffer_token[0] == '[') {
1039 category_name = get_new_string(buffer_token[0]);
1040 if (category_name == NULL) {
1041 _mmcam_dbg_err("strdup failed for [%s]", buffer_token[0]);
1045 count_main_category++;
1049 length_read = getline(&buffer_string, &BUFFER_LENGTH_STRING, fd);
1050 /*_mmcam_dbg_log("Read Detail Line : [%s], read length : [%d]", buffer_string, length_read);*/
1052 detail_string = get_new_string(buffer_string);
1054 token = strtok_r(buffer_string, delimiters, &user_ptr);
1056 if (token && token[0] != ';' && length_read > -1) {
1057 /*_mmcam_dbg_log("token : [%s]", token);*/
1058 if (token[0] == '[') {
1060 buffer_token[0] = token;
1061 SAFE_G_FREE(detail_string);
1065 buffer_details[count_details++] = detail_string;
1067 SAFE_G_FREE(detail_string);
1071 /*_mmcam_dbg_log("type : %d, category_name : %s, count : [%d]", type, category_name, count_details);*/
1073 if (count_details == 0) {
1074 _mmcam_dbg_warn("category %s has no detail value... skip this category...", category_name);
1075 SAFE_G_FREE(category_name);
1082 if (type == CONFIGURE_TYPE_MAIN) {
1083 if (!strcmp("[General]", category_name)) {
1084 category = CONFIGURE_CATEGORY_MAIN_GENERAL;
1085 } else if (!strcmp("[VideoInput]", category_name)) {
1086 category = CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT;
1087 } else if (!strcmp("[AudioInput]", category_name)) {
1088 category = CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT;
1089 } else if (!strcmp("[VideoOutput]", category_name)) {
1090 category = CONFIGURE_CATEGORY_MAIN_VIDEO_OUTPUT;
1091 } else if (!strcmp("[Capture]", category_name)) {
1092 category = CONFIGURE_CATEGORY_MAIN_CAPTURE;
1093 } else if (!strcmp("[Record]", category_name)) {
1094 category = CONFIGURE_CATEGORY_MAIN_RECORD;
1095 } else if (!strcmp("[VideoEncoder]", category_name)) {
1096 category = CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER;
1097 } else if (!strcmp("[AudioEncoder]", category_name)) {
1098 category = CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER;
1099 } else if (!strcmp("[ImageEncoder]", category_name)) {
1100 category = CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER;
1101 } else if (!strcmp("[Mux]", category_name)) {
1102 category = CONFIGURE_CATEGORY_MAIN_MUX;
1105 if (!strcmp("[Camera]", category_name)) {
1106 category = CONFIGURE_CATEGORY_CTRL_CAMERA;
1107 } else if (!strcmp("[Strobe]", category_name)) {
1108 category = CONFIGURE_CATEGORY_CTRL_STROBE;
1109 } else if (!strcmp("[Effect]", category_name)) {
1110 category = CONFIGURE_CATEGORY_CTRL_EFFECT;
1111 } else if (!strcmp("[Photograph]", category_name)) {
1112 category = CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH;
1113 } else if (!strcmp("[Capture]", category_name)) {
1114 category = CONFIGURE_CATEGORY_CTRL_CAPTURE;
1115 } else if (!strcmp("[Detect]", category_name)) {
1116 category = CONFIGURE_CATEGORY_CTRL_DETECT;
1120 if (category != -1) {
1121 _mmcamcorder_conf_add_info(handle, type, &(new_conf->info[category]),
1122 buffer_details, category, count_details);
1124 _mmcam_dbg_warn("No matched category[%s],type[%d]... check it.", category_name, type);
1131 for (i = 0 ; i < count_details ; i++) {
1132 SAFE_G_FREE(buffer_details[i]);
1137 SAFE_G_FREE(category_name);
1140 /* (*configure_info) = new_conf; */
1142 SAFE_G_FREE(buffer_string);
1144 /*_mmcam_dbg_log("Done.");*/
1146 return MM_ERROR_NONE;
1150 void _mmcamcorder_conf_release_info(MMHandleType handle, camera_conf **configure_info)
1155 int type = CONFIGURE_VALUE_INT;
1157 int category_num = CONFIGURE_CATEGORY_MAIN_NUM;
1158 camera_conf *temp_conf = (*configure_info);
1160 type_int2 *temp_int = NULL;
1161 type_int_range *temp_int_range = NULL;
1162 type_int_array *temp_int_array = NULL;
1163 type_int_pair_array *temp_int_pair_array = NULL;
1164 type_string2 *temp_string = NULL;
1165 type_string_array *temp_string_array = NULL;
1166 type_element2 *temp_element = NULL;
1168 _mmcam_dbg_log("Entered...");
1170 mmf_return_if_fail(temp_conf);
1172 if ((*configure_info)->type == CONFIGURE_TYPE_MAIN)
1173 category_num = CONFIGURE_CATEGORY_MAIN_NUM;
1175 category_num = CONFIGURE_CATEGORY_CTRL_NUM;
1177 for (i = 0 ; i < category_num ; i++) {
1178 if (temp_conf->info[i]) {
1179 for (j = 0 ; j < temp_conf->info[i]->count ; j++) {
1180 if (temp_conf->info[i]->detail_info[j] == NULL)
1183 if (_mmcamcorder_conf_get_value_type(handle, temp_conf->type, i, ((type_element*)(temp_conf->info[i]->detail_info[j]))->name, &type)) {
1185 case CONFIGURE_VALUE_INT:
1186 temp_int = (type_int2*)(temp_conf->info[i]->detail_info[j]);
1187 SAFE_G_FREE(temp_int->name);
1189 case CONFIGURE_VALUE_INT_RANGE:
1190 temp_int_range = (type_int_range*)(temp_conf->info[i]->detail_info[j]);
1191 SAFE_G_FREE(temp_int_range->name);
1193 case CONFIGURE_VALUE_INT_ARRAY:
1194 temp_int_array = (type_int_array*)(temp_conf->info[i]->detail_info[j]);
1195 SAFE_G_FREE(temp_int_array->name);
1196 SAFE_G_FREE(temp_int_array->value);
1198 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
1199 temp_int_pair_array = (type_int_pair_array*)(temp_conf->info[i]->detail_info[j]);
1200 SAFE_G_FREE(temp_int_pair_array->name);
1201 SAFE_G_FREE(temp_int_pair_array->value[0]);
1202 SAFE_G_FREE(temp_int_pair_array->value[1]);
1204 case CONFIGURE_VALUE_STRING:
1205 temp_string = (type_string2*)(temp_conf->info[i]->detail_info[j]);
1206 SAFE_G_FREE(temp_string->name);
1207 SAFE_G_FREE(temp_string->value);
1209 case CONFIGURE_VALUE_STRING_ARRAY:
1210 temp_string_array = (type_string_array*)(temp_conf->info[i]->detail_info[j]);
1211 SAFE_G_FREE(temp_string_array->name);
1212 if (temp_string_array->value) {
1213 count = temp_string_array->count;
1214 for (k = 0 ; k < count ; k++) {
1215 SAFE_G_FREE(temp_string_array->value[k]);
1218 SAFE_G_FREE(temp_string_array->value);
1220 SAFE_G_FREE(temp_string_array->default_value);
1222 case CONFIGURE_VALUE_ELEMENT:
1223 temp_element = (type_element2*)(temp_conf->info[i]->detail_info[j]);
1224 SAFE_G_FREE(temp_element->name);
1225 SAFE_G_FREE(temp_element->element_name);
1227 if (temp_element->value_int) {
1228 count = temp_element->count_int;
1229 for (k = 0 ; k < count ; k++) {
1230 SAFE_G_FREE(temp_element->value_int[k]->name);
1231 SAFE_G_FREE(temp_element->value_int[k]);
1233 SAFE_G_FREE(temp_element->value_int);
1236 if (temp_element->value_string) {
1237 count = temp_element->count_string;
1238 for (k = 0 ; k < count ; k++) {
1239 SAFE_G_FREE(temp_element->value_string[k]->name);
1240 SAFE_G_FREE(temp_element->value_string[k]->value);
1241 SAFE_G_FREE(temp_element->value_string[k]);
1243 SAFE_G_FREE(temp_element->value_string);
1247 _mmcam_dbg_warn("unknown type %d", type);
1252 SAFE_G_FREE(temp_conf->info[i]->detail_info[j]);
1255 SAFE_G_FREE(temp_conf->info[i]->detail_info);
1257 SAFE_G_FREE(temp_conf->info[i]);
1258 temp_conf->info[i] = NULL;
1262 SAFE_G_FREE((*configure_info)->info);
1263 SAFE_G_FREE((*configure_info));
1265 _mmcam_dbg_log("Done.");
1268 int _mmcamcorder_conf_get_value_type(MMHandleType handle, int type, int category, const char* name, int* value_type)
1271 int count_value = 0;
1273 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
1275 if (hcamcorder == NULL) {
1276 _mmcam_dbg_err("handle is NULL");
1280 /*_mmcam_dbg_log("Entered...");*/
1282 mmf_return_val_if_fail(name, FALSE);
1284 if (!_mmcamcorder_conf_get_category_size(handle, type, category, &count_value)) {
1285 _mmcam_dbg_warn("No matched category... check it... categoty[%d]", category);
1289 /*_mmcam_dbg_log("Number of value : [%d]", count_value);*/
1291 if (type == CONFIGURE_TYPE_MAIN) {
1292 for (i = 0 ; i < count_value ; i++) {
1293 if (!strcmp(hcamcorder->conf_main_info_table[category][i].name, name)) {
1294 *value_type = hcamcorder->conf_main_info_table[category][i].value_type;
1295 /*_mmcam_dbg_log("Category[%d],Name[%s],Type[%d]", category, name, *value_type);*/
1300 for (i = 0 ; i < count_value ; i++) {
1301 if (!strcmp(hcamcorder->conf_ctrl_info_table[category][i].name, name)) {
1302 *value_type = hcamcorder->conf_ctrl_info_table[category][i].value_type;
1303 /*_mmcam_dbg_log("Category[%d],Name[%s],Type[%d]", category, name, *value_type);*/
1313 int _mmcamcorder_conf_add_info(MMHandleType handle, int type, conf_detail** info, char** buffer_details, int category, int count_details)
1315 const int BUFFER_NUM_TOKEN = 256;
1322 char *buffer_token[BUFFER_NUM_TOKEN];
1323 char *user_ptr = NULL;
1325 const char *delimiters = " |=,\t\n";
1326 const char *delimiters_sub = " |\t\n";
1327 const char *delimiters_3rd = "|\n";
1329 mmf_return_val_if_fail(buffer_details, FALSE);
1331 (*info) = (conf_detail*)g_malloc0(sizeof(conf_detail));
1332 if (*info == NULL) {
1333 _mmcam_dbg_err("allocation failed");
1336 (*info)->detail_info = (void**)g_malloc0(sizeof(void*) * count_details);
1337 (*info)->count = count_details;
1339 for (i = 0 ; i < count_details ; i++) {
1340 /*_mmcam_dbg_log("Read line\"%s\"", buffer_details[i]);*/
1342 token = strtok_r(buffer_details[i], delimiters, &user_ptr);
1345 buffer_token[count_token] = token;
1348 (*info)->detail_info[i] = NULL;
1349 _mmcam_dbg_warn("No token... check it.[%s]", buffer_details[i]);
1353 if (!_mmcamcorder_conf_get_value_type(handle, type, category, buffer_token[0], &value_type)) {
1354 (*info)->detail_info[i] = NULL;
1355 _mmcam_dbg_warn("Failed to get value type... check it. Category[%d],Name[%s]", category, buffer_token[0]);
1359 if (value_type != CONFIGURE_VALUE_STRING && value_type != CONFIGURE_VALUE_STRING_ARRAY) {
1360 token = strtok_r(NULL, delimiters, &user_ptr);
1362 buffer_token[count_token] = token;
1363 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1365 token = strtok_r(NULL, delimiters, &user_ptr);
1368 if (count_token < 2) {
1369 (*info)->detail_info[i] = NULL;
1370 _mmcam_dbg_warn("Number of token is too small... check it.[%s]", buffer_details[i]);
1373 } else { /* CONFIGURE_VALUE_STRING or CONFIGURE_VALUE_STRING_ARRAY */
1375 strtok_r(NULL, delimiters_sub, &user_ptr);
1377 if (value_type == CONFIGURE_VALUE_STRING_ARRAY) {
1378 token = strtok_r(NULL, delimiters_sub, &user_ptr);
1380 buffer_token[count_token] = token;
1381 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1383 token = strtok_r(NULL, delimiters_sub, &user_ptr);
1385 } else { /* CONFIGURE_VALUE_STRING */
1386 token = strtok_r(NULL, delimiters_3rd, &user_ptr);
1389 buffer_token[count_token] = token;
1390 /*_mmcam_dbg_log("token : [%s]", buffer_token[count_token]);*/
1395 if (count_token < 2) {
1396 (*info)->detail_info[i] = NULL;
1397 _mmcam_dbg_warn("No string value... check it.[%s]", buffer_details[i]);
1402 switch (value_type) {
1403 case CONFIGURE_VALUE_INT:
1407 new_int = (type_int2*)g_malloc0(sizeof(type_int2));
1408 if (new_int == NULL) {
1409 _mmcam_dbg_err("allocation failed");
1412 new_int->name = get_new_string(buffer_token[0]);
1413 new_int->value = atoi(buffer_token[1]);
1414 (*info)->detail_info[i] = (void*)new_int;
1415 /*_mmcam_dbg_log("INT - name[%s],value[%d]", new_int->name, new_int->value);*/
1418 case CONFIGURE_VALUE_INT_RANGE:
1420 type_int_range* new_int_range;
1422 new_int_range = (type_int_range*)g_malloc0(sizeof(type_int_range));
1423 if (new_int_range == NULL) {
1424 _mmcam_dbg_err("allocation failed");
1427 new_int_range->name = get_new_string(buffer_token[0]);
1428 new_int_range->min = atoi(buffer_token[1]);
1429 new_int_range->max = atoi(buffer_token[2]);
1430 new_int_range->default_value = atoi(buffer_token[3]);
1431 (*info)->detail_info[i] = (void*)new_int_range;
1433 _mmcam_dbg_log("INT RANGE - name[%s],min[%d],max[%d],default[%d]",
1434 new_int_range->name,
1437 new_int_range->default_value);
1441 case CONFIGURE_VALUE_INT_ARRAY:
1443 int count_value = count_token - 2;
1444 type_int_array* new_int_array;
1446 new_int_array = (type_int_array*)g_malloc0(sizeof(type_int_array));
1447 if (new_int_array == NULL) {
1448 _mmcam_dbg_err("allocation failed");
1451 new_int_array->name = get_new_string(buffer_token[0]);
1452 new_int_array->value = (int*)g_malloc0(sizeof(int)*count_value);
1453 if (new_int_array->value == NULL) {
1454 SAFE_G_FREE(new_int_array->name);
1455 SAFE_G_FREE(new_int_array);
1456 _mmcam_dbg_err("allocation failed");
1459 new_int_array->count = count_value;
1461 /*_mmcam_dbg_log("INT ARRAY - name[%s]", new_int_array->name);*/
1462 for (j = 0 ; j < count_value ; j++) {
1463 new_int_array->value[j] = atoi(buffer_token[j+1]);
1464 /*_mmcam_dbg_log(" index[%d] - value[%d]", j, new_int_array->value[j]);*/
1467 new_int_array->default_value = atoi(buffer_token[count_token-1]);
1468 /*_mmcam_dbg_log(" default value[%d]", new_int_array->default_value);*/
1470 (*info)->detail_info[i] = (void*)new_int_array;
1473 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
1475 int count_value = (count_token - 3) >> 1;
1476 type_int_pair_array* new_int_pair_array;
1478 new_int_pair_array = (type_int_pair_array*)g_malloc0(sizeof(type_int_pair_array));
1479 if (new_int_pair_array == NULL) {
1480 _mmcam_dbg_err("allocation failed");
1483 new_int_pair_array->name = get_new_string(buffer_token[0]);
1484 new_int_pair_array->value[0] = (int*)g_malloc0(sizeof(int)*(count_value));
1485 if (new_int_pair_array->value[0] == NULL) {
1486 SAFE_G_FREE(new_int_pair_array->name);
1487 SAFE_G_FREE(new_int_pair_array);
1488 _mmcam_dbg_err("allocation failed");
1491 new_int_pair_array->value[1] = (int*)g_malloc0(sizeof(int)*(count_value));
1492 if (new_int_pair_array->value[1] == NULL) {
1493 SAFE_G_FREE(new_int_pair_array->value[0]);
1494 SAFE_G_FREE(new_int_pair_array->name);
1495 SAFE_G_FREE(new_int_pair_array);
1496 _mmcam_dbg_err("allocation failed");
1499 new_int_pair_array->count = count_value;
1501 /*_mmcam_dbg_log("INT PAIR ARRAY - name[%s],count[%d]", new_int_pair_array->name, count_value);*/
1502 for (j = 0 ; j < count_value ; j++) {
1503 new_int_pair_array->value[0][j] = atoi(buffer_token[(j<<1)+1]);
1504 new_int_pair_array->value[1][j] = atoi(buffer_token[(j<<1)+2]);
1506 _mmcam_dbg_log(" index[%d] - value[%d,%d]", j,
1507 new_int_pair_array->value[0][j],
1508 new_int_pair_array->value[1][j]);
1512 new_int_pair_array->default_value[0] = atoi(buffer_token[count_token-2]);
1513 new_int_pair_array->default_value[1] = atoi(buffer_token[count_token-1]);
1515 _mmcam_dbg_log(" default value[%d,%d]",
1516 new_int_pair_array->default_value[0],
1517 new_int_pair_array->default_value[1]);
1519 (*info)->detail_info[i] = (void*)new_int_pair_array;
1522 case CONFIGURE_VALUE_STRING:
1524 type_string2* new_string;
1526 new_string = (type_string2*)g_malloc0(sizeof(type_string2));
1527 if (new_string == NULL) {
1528 _mmcam_dbg_err("allocation failed");
1531 new_string->name = get_new_string(buffer_token[0]);
1532 new_string->value = get_new_string(buffer_token[1]);
1533 (*info)->detail_info[i] = (void*)new_string;
1535 /*_mmcam_dbg_log("STRING - name[%s],value[%s]", new_string->name, new_string->value);*/
1538 case CONFIGURE_VALUE_STRING_ARRAY:
1540 int count_value = count_token - 2;
1541 type_string_array* new_string_array;
1543 new_string_array = (type_string_array*)g_malloc0(sizeof(type_string_array));
1544 if (new_string_array == NULL)
1547 new_string_array->name = get_new_string(buffer_token[0]);
1548 new_string_array->count = count_value;
1549 new_string_array->value = (char**)g_malloc0(sizeof(char*)*count_value);
1550 if (new_string_array->value == NULL) {
1551 SAFE_G_FREE(new_string_array->name);
1552 SAFE_G_FREE(new_string_array);
1553 _mmcam_dbg_err("allocation failed");
1556 /*_mmcam_dbg_log("STRING ARRAY - name[%s]", new_string_array->name);*/
1557 for (j = 0 ; j < count_value ; j++) {
1558 new_string_array->value[j] = get_new_string(buffer_token[j+1]);
1559 /*_mmcam_dbg_log(" index[%d] - value[%s]", j, new_string_array->value[j]);*/
1562 new_string_array->default_value = get_new_string(buffer_token[count_token-1]);
1563 /*_mmcam_dbg_log(" default value[%s]", new_string_array->default_value);*/
1564 (*info)->detail_info[i] = (void*)new_string_array;
1567 case CONFIGURE_VALUE_ELEMENT:
1569 type_element2* new_element;
1571 new_element = (type_element2*)g_malloc0(sizeof(type_element2));
1572 if (new_element == NULL) {
1573 _mmcam_dbg_err("allocation failed");
1576 new_element->name = get_new_string(buffer_token[0]);
1577 new_element->element_name = get_new_string(buffer_token[1]);
1578 new_element->count_int = atoi(buffer_token[2]);
1579 new_element->value_int = NULL;
1580 new_element->count_string = atoi(buffer_token[3]);
1581 new_element->value_string = NULL;
1583 _mmcam_dbg_log("Element - name[%s],element_name[%s],count_int[%d],count_string[%d]",
1584 new_element->name, new_element->element_name, new_element->count_int, new_element->count_string);
1587 /* add int values */
1588 if (new_element->count_int > 0 && new_element->count_int <= 30) {
1589 new_element->value_int = (type_int2**)g_malloc0(sizeof(type_int2*)*(new_element->count_int));
1590 if (new_element->value_int) {
1591 for (j = 0 ; j < new_element->count_int ; j++) {
1592 new_element->value_int[j] = (type_int2*)g_malloc0(sizeof(type_int2));
1593 if (new_element->value_int[j]) {
1594 new_element->value_int[j]->name = get_new_string(buffer_token[4+(j<<1)]);
1595 new_element->value_int[j]->value = atoi(buffer_token[5+(j<<1)]);
1597 _mmcam_dbg_err("allocation failed");
1600 _mmcam_dbg_log(" Element INT[%d] - name[%s],value[%d]",
1601 j, new_element->value_int[j]->name, new_element->value_int[j]->value);
1605 _mmcam_dbg_err("allocation failed");
1608 /*_mmcam_dbg_err("invalid count - %d", new_element->count_int);*/
1609 new_element->value_int = NULL;
1612 /* add string values */
1613 if (new_element->count_string > 0 && new_element->count_string <= 30 &&
1614 new_element->count_int >= 0 && new_element->count_int <= 30) {
1615 new_element->value_string = (type_string2**)g_malloc0(sizeof(type_string2*)*(new_element->count_string));
1616 if (new_element->value_string) {
1617 for ( ; j < new_element->count_string + new_element->count_int ; j++) {
1618 new_element->value_string[j-new_element->count_int] = (type_string2*)g_malloc0(sizeof(type_string2));
1619 if (new_element->value_string[j-new_element->count_int]) {
1620 new_element->value_string[j-new_element->count_int]->name = get_new_string(buffer_token[4+(j<<1)]);
1621 new_element->value_string[j-new_element->count_int]->value = get_new_string(buffer_token[5+(j<<1)]);
1623 _mmcam_dbg_log(" Element STRING[%d] - name[%s],value[%s]",
1624 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);
1627 _mmcam_dbg_err("allocation failed");
1631 _mmcam_dbg_err("malloc failed : %d", sizeof(type_string2*)*(new_element->count_string));
1634 /*_mmcam_dbg_err("invalid count - %d", new_element->count_string);*/
1635 new_element->value_string = NULL;
1638 (*info)->detail_info[i] = (void*)new_element;
1650 int _mmcamcorder_conf_get_value_int(MMHandleType handle, camera_conf* configure_info, int category, const char* name, int* value)
1655 /* _mmcam_dbg_log("Entered... category[%d],name[%s]", category, name); */
1657 mmf_return_val_if_fail(configure_info, FALSE);
1658 mmf_return_val_if_fail(name, FALSE);
1660 if (configure_info->info[category]) {
1661 count = configure_info->info[category]->count;
1662 info = configure_info->info[category];
1664 for (i = 0 ; i < count ; i++) {
1665 if (info->detail_info[i] == NULL)
1668 if (!strcmp(((type_int*)(info->detail_info[i]))->name , name)) {
1669 *value = ((type_int*)(info->detail_info[i]))->value;
1670 /* _mmcam_dbg_log("Get[%s] int[%d]", name, *value); */
1676 if (_mmcamcorder_conf_get_default_value_int(handle, configure_info->type, category, name, value)) {
1677 /*_mmcam_dbg_log("Get[%s] int[%d]", name, *value);*/
1681 _mmcam_dbg_err("Faild to get int... check it...Category[%d],Name[%s]", category, name);
1687 _mmcamcorder_conf_get_value_int_range(camera_conf* configure_info, int category, const char* name, type_int_range** value)
1692 /* _mmcam_dbg_log("Entered... category[%d],name[%s]", category, name); */
1694 mmf_return_val_if_fail(configure_info, FALSE);
1695 mmf_return_val_if_fail(name, FALSE);
1697 if (configure_info->info[category]) {
1698 count = configure_info->info[category]->count;
1699 info = configure_info->info[category];
1701 for (i = 0 ; i < count ; i++) {
1702 if (info->detail_info[i] == NULL)
1705 if (!strcmp(((type_int_range*)(info->detail_info[i]))->name , name)) {
1706 *value = (type_int_range*)(info->detail_info[i]);
1708 _mmcam_dbg_log("Get[%s] int range - min[%d],max[%d],default[%d]",
1709 name, (*value)->min, (*value)->max, (*value)->default_value);
1718 /*_mmcam_dbg_warn( "Faild to get int range... check it...Category[%d],Name[%s]", category, name );*/
1724 _mmcamcorder_conf_get_value_int_array(camera_conf* configure_info, int category, const char* name, type_int_array** value)
1729 /*_mmcam_dbg_log("Entered... category[%d],name[%s]", category, name);*/
1731 mmf_return_val_if_fail(configure_info, FALSE);
1732 mmf_return_val_if_fail(name, FALSE);
1734 if (configure_info->info[category]) {
1735 count = configure_info->info[category]->count;
1736 info = configure_info->info[category];
1738 for (i = 0 ; i < count ; i++) {
1739 if (info->detail_info[i] == NULL)
1742 if (!strcmp(((type_int_array*)(info->detail_info[i]))->name , name)) {
1743 *value = (type_int_array*)(info->detail_info[i]);
1745 _mmcam_dbg_log("Get[%s] int array - [%x],count[%d],default[%d]",
1746 name, (*value)->value, (*value)->count, (*value)->default_value);
1755 /*_mmcam_dbg_warn( "Faild to get int array... check it...Category[%d],Name[%s]", category, name );*/
1761 _mmcamcorder_conf_get_value_int_pair_array(camera_conf* configure_info, int category, const char* name, type_int_pair_array** value)
1766 /* _mmcam_dbg_log("Entered... category[%d],name[%s]", category, name); */
1768 mmf_return_val_if_fail(configure_info, FALSE);
1769 mmf_return_val_if_fail(name, FALSE);
1771 if (configure_info->info[category]) {
1772 count = configure_info->info[category]->count;
1773 info = configure_info->info[category];
1775 for (i = 0 ; i < count ; i++) {
1776 if (info->detail_info[i] == NULL)
1779 if (!strcmp(((type_int_pair_array*)(info->detail_info[i]))->name , name)) {
1780 *value = (type_int_pair_array*)(info->detail_info[i]);
1782 _mmcam_dbg_log("Get[%s] int pair array - [%x][%x],count[%d],default[%d][%d]",
1783 name, (*value)->value[0], (*value)->value[1], (*value)->count,
1784 (*value)->default_value[0], (*value)->default_value[1]);
1793 /*_mmcam_dbg_warn("Faild to get int pair array... check it...Category[%d],Name[%s]", category, name);*/
1798 int _mmcamcorder_conf_get_value_string(MMHandleType handle, camera_conf* configure_info, int category, const char* name, const char** value)
1803 /* _mmcam_dbg_log("Entered... category[%d],name[%s]", category, name); */
1805 mmf_return_val_if_fail(configure_info, FALSE);
1806 mmf_return_val_if_fail(name, FALSE);
1808 if (configure_info->info[category]) {
1809 count = configure_info->info[category]->count;
1810 info = configure_info->info[category];
1812 for (i = 0 ; i < count ; i++) {
1813 if (info->detail_info[i] == NULL)
1816 if (!strcmp(((type_string*)(info->detail_info[i]))->name , name)) {
1817 *value = ((type_string*)(info->detail_info[i]))->value;
1818 /*_mmcam_dbg_log( "Get[%s] string[%s]", name, *value ? *value : "NULL" );*/
1824 if (_mmcamcorder_conf_get_default_value_string(handle, configure_info->type, category, name, value)) {
1825 /*_mmcam_dbg_log( "Get[%s] string[%s]", name, *value ? *value : "NULL" );*/
1829 _mmcam_dbg_err("Faild to get string... check it...Category[%d],Name[%s]", category, name);
1835 _mmcamcorder_conf_get_value_string_array(camera_conf* configure_info, int category, const char* name, type_string_array** value)
1840 /* _mmcam_dbg_log("Entered... category[%d],name[%s]", category, name); */
1842 mmf_return_val_if_fail(configure_info, FALSE);
1843 mmf_return_val_if_fail(name, FALSE);
1845 if (configure_info->info[category]) {
1846 count = configure_info->info[category]->count;
1847 info = configure_info->info[category];
1849 for (i = 0 ; i < count ; i++) {
1850 if (info->detail_info[i] == NULL)
1853 if (!strcmp(((type_string_array*)(info->detail_info[i]))->name , name)) {
1854 *value = (type_string_array*)(info->detail_info[i]);
1856 _mmcam_dbg_log("Get[%s] string array - [%x],count[%d],default[%s]",
1857 name, (*value)->value, (*value)->count, (*value)->default_value);
1866 /*_mmcam_dbg_warn("Faild to get string array... check it...Category[%d],Name[%s]", category, name);*/
1871 int _mmcamcorder_conf_get_element(MMHandleType handle, camera_conf* configure_info, int category, const char* name, type_element** element)
1876 /* _mmcam_dbg_log("Entered... category[%d], ame[%s]", category, name); */
1878 mmf_return_val_if_fail(configure_info, FALSE);
1879 mmf_return_val_if_fail(name, FALSE);
1881 if (configure_info->info[category]) {
1882 count = configure_info->info[category]->count;
1883 info = configure_info->info[category];
1885 for (i = 0 ; i < count ; i++) {
1886 if (info->detail_info[i] == NULL)
1889 if (!strcmp(((type_element*)(info->detail_info[i]))->name , name)) {
1890 *element = (type_element*)(info->detail_info[i]);
1891 /* _mmcam_dbg_log("Get[%s] element[%x]", name, *element); */
1897 if (_mmcamcorder_conf_get_default_element(handle, configure_info->type, category, name, element)) {
1898 /* _mmcam_dbg_log("Get[%s] element[%x]", name, *element); */
1902 _mmcam_dbg_warn("Faild to get element name... check it...Category[%d],Name[%s]", category, name);
1908 _mmcamcorder_conf_get_value_element_name(type_element* element, const char** value)
1910 /* _mmcam_dbg_log("Entered..."); */
1912 mmf_return_val_if_fail(element, FALSE);
1914 *value = element->element_name;
1916 /* _mmcam_dbg_log("Get element name : [%s]", *value); */
1922 _mmcamcorder_conf_get_value_element_int(type_element* element, const char* name, int* value)
1926 /* _mmcam_dbg_log( "Entered..." ); */
1928 mmf_return_val_if_fail(element, FALSE);
1929 mmf_return_val_if_fail(name, FALSE);
1931 for (i = 0 ; i < element->count_int ; i++) {
1932 if (!strcmp(element->value_int[i]->name, name)) {
1933 *value = element->value_int[i]->value;
1934 /* _mmcam_dbg_log("Get[%s] element int[%d]", name, *value); */
1939 _mmcam_dbg_warn("Faild to get int in element... ElementName[%p],Name[%s],Count[%d]",
1940 element->name, name, element->count_int);
1946 _mmcamcorder_conf_get_value_element_string(type_element* element, const char* name, const char** value)
1950 /* _mmcam_dbg_log("Entered..."); */
1952 mmf_return_val_if_fail(element, FALSE);
1953 mmf_return_val_if_fail(name, FALSE);
1955 for (i = 0 ; i < element->count_string ; i++) {
1956 if (!strcmp(element->value_string[i]->name, name)) {
1957 *value = element->value_string[i]->value;
1958 /*_mmcam_dbg_log("Get[%s] element string[%s]", name, *value);*/
1963 _mmcam_dbg_warn("Faild to get int in element... ElementName[%p],Name[%s],Count[%d]",
1964 element->name, name, element->count_string);
1970 _mmcamcorder_conf_set_value_element_property(GstElement* gst, type_element* element)
1974 /* _mmcam_dbg_log("Entered..."); */
1976 mmf_return_val_if_fail(gst, FALSE);
1977 mmf_return_val_if_fail(element, FALSE);
1979 if (element->count_int == 0) {
1980 /*_mmcam_dbg_log( "There is no integer property to set in INI file[%s].", element->name );*/
1982 if (element->value_int == NULL) {
1983 _mmcam_dbg_warn("count_int[%d] is NOT zero, but value_int is NULL", element->count_int);
1987 for (i = 0 ; i < element->count_int ; i++) {
1988 MMCAMCORDER_G_OBJECT_SET(gst, element->value_int[i]->name, element->value_int[i]->value);
1991 _mmcam_dbg_log("Element[%s] Set[%s] -> integer[%d]",
1992 element->element_name,
1993 element->value_int[i]->name,
1994 element->value_int[i]->value);
1999 if (element->count_string == 0) {
2000 _mmcam_dbg_log("There is no string property to set in INI file[%s].", element->name);
2002 if (element->value_string == NULL) {
2003 _mmcam_dbg_warn("count_string[%d] is NOT zero, but value_string is NULL", element->count_string);
2007 for (i = 0 ; i < element->count_string ; i++) {
2008 MMCAMCORDER_G_OBJECT_SET_POINTER(gst, element->value_string[i]->name, element->value_string[i]->value);
2010 _mmcam_dbg_log("Element[%s] Set[%s] -> string[%s]",
2011 element->element_name,
2012 element->value_string[i]->name,
2013 element->value_string[i]->value);
2017 /* _mmcam_dbg_log( "Done." ); */
2023 _mmcamcorder_conf_get_default_value_int(MMHandleType handle, int type, int category, const char* name, int* value)
2026 int count_value = 0;
2028 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2030 if (hcamcorder == NULL) {
2031 _mmcam_dbg_err("handle is NULL");
2035 /* _mmcam_dbg_log("Entered..."); */
2037 mmf_return_val_if_fail(name, FALSE);
2039 if (!_mmcamcorder_conf_get_category_size(handle, type, category, &count_value)) {
2040 _mmcam_dbg_warn("No matched category... check it... categoty[%d]", category);
2044 if (type == CONFIGURE_TYPE_MAIN) {
2045 for (i = 0 ; i < count_value ; i++) {
2046 if (!strcmp(hcamcorder->conf_main_info_table[category][i].name, name)) {
2047 *value = hcamcorder->conf_main_info_table[category][i].value_int;
2052 for (i = 0 ; i < count_value ; i++) {
2053 if (!strcmp(hcamcorder->conf_ctrl_info_table[category][i].name, name)) {
2054 *value = hcamcorder->conf_ctrl_info_table[category][i].value_int;
2060 _mmcam_dbg_err("Failed to get default int... check it... Type[%d],Category[%d],Name[%s]", type, category, name);
2065 int _mmcamcorder_conf_get_default_value_string(MMHandleType handle, int type, int category, const char* name, const char** value)
2068 int count_value = 0;
2070 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2072 if (hcamcorder == NULL) {
2073 _mmcam_dbg_err("handle is NULL");
2077 /* _mmcam_dbg_log("Entered..."); */
2079 mmf_return_val_if_fail(name, FALSE);
2081 if (!_mmcamcorder_conf_get_category_size(handle, type, category, &count_value)) {
2082 _mmcam_dbg_warn("No matched category... check it... categoty[%d]", category);
2086 if (type == CONFIGURE_TYPE_MAIN) {
2087 for (i = 0 ; i < count_value ; i++) {
2088 if (!strcmp(hcamcorder->conf_main_info_table[category][i].name, name)) {
2089 *value = hcamcorder->conf_main_info_table[category][i].value_string;
2090 /*_mmcam_dbg_log("Get[%s] default string[%s]", name, *value ? *value : "NULL");*/
2095 for (i = 0 ; i < count_value ; i++) {
2096 if (!strcmp(hcamcorder->conf_ctrl_info_table[category][i].name, name)) {
2097 *value = hcamcorder->conf_ctrl_info_table[category][i].value_string;
2098 /*_mmcam_dbg_log("Get[%s] default string[%s]", name, *value ? *value : "NULL");*/
2104 _mmcam_dbg_warn("Failed to get default string... check it... Type[%d],Category[%d],Name[%s]", type, category, name);
2109 int _mmcamcorder_conf_get_default_element(MMHandleType handle, int type, int category, const char* name, type_element** element)
2112 int count_value = 0;
2114 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2116 if (hcamcorder == NULL) {
2117 _mmcam_dbg_err("handle is NULL");
2121 /* _mmcam_dbg_log("Entered..."); */
2123 mmf_return_val_if_fail(name, FALSE);
2125 if (!_mmcamcorder_conf_get_category_size(handle, type, category, &count_value)) {
2126 _mmcam_dbg_warn("No matched category... check it... categoty[%d]", category);
2130 if (type == CONFIGURE_TYPE_MAIN) {
2131 for (i = 0 ; i < count_value ; i++) {
2132 if (!strcmp(hcamcorder->conf_main_info_table[category][i].name, name)) {
2133 *element = hcamcorder->conf_main_info_table[category][i].value_element;
2134 _mmcam_dbg_log("Get[%s] element[%p]", name, *element);
2139 for (i = 0 ; i < count_value ; i++) {
2140 if (!strcmp(hcamcorder->conf_ctrl_info_table[category][i].name, name)) {
2141 *element = hcamcorder->conf_ctrl_info_table[category][i].value_element;
2142 _mmcam_dbg_log("Get[%s] element[%p]", name, *element);
2148 _mmcam_dbg_warn("Failed to get default element... check it... Type[%d],Category[%d],Name[%s]", type, category, name);
2153 int _mmcamcorder_conf_get_category_size(MMHandleType handle, int type, int category, int* size)
2155 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2157 if (hcamcorder == NULL) {
2158 _mmcam_dbg_err("handle is NULL");
2163 mmf_return_val_if_fail(conf_main_category_size, FALSE);
2164 mmf_return_val_if_fail(conf_ctrl_category_size, FALSE);
2167 if (type == CONFIGURE_TYPE_MAIN) {
2168 mmf_return_val_if_fail(category < CONFIGURE_CATEGORY_MAIN_NUM, FALSE);
2170 *size = (int)hcamcorder->conf_main_category_size[category];
2172 mmf_return_val_if_fail(category < CONFIGURE_CATEGORY_CTRL_NUM, FALSE);
2174 *size = (int)hcamcorder->conf_ctrl_category_size[category];
2181 _mmcamcorder_conf_print_info(MMHandleType handle, camera_conf** configure_info)
2183 int i, j, k, type, category_type;
2186 type_int_range *temp_int_range;
2187 type_int_array *temp_int_array;
2188 type_int_pair_array *temp_int_pair_array;
2189 type_string *temp_string;
2190 type_element *temp_element;
2192 g_print("[ConfigureInfoPrint] : Entered.\n");
2194 mmf_return_if_fail(*configure_info);
2196 if ((*configure_info)->type == CONFIGURE_TYPE_MAIN)
2197 category_type = CONFIGURE_CATEGORY_MAIN_NUM;
2199 category_type = CONFIGURE_CATEGORY_CTRL_NUM;
2201 for (i = 0 ; i < category_type ; i++) {
2203 if ((*configure_info)->info[i]) {
2204 g_print("[ConfigureInfo] : Category [%d]\n", i);
2206 for (j = 0 ; j < (*configure_info)->info[i]->count ; j++) {
2208 if (_mmcamcorder_conf_get_value_type(handle, (*configure_info)->type, i, ((type_int*)((*configure_info)->info[i]->detail_info[j]))->name, &type)) {
2210 case CONFIGURE_VALUE_INT:
2211 temp_int = (type_int*)((*configure_info)->info[i]->detail_info[j]);
2212 g_print("[ConfigureInfo] : INT - Name[%s],Value [%d]\n", temp_int->name, temp_int->value);
2214 case CONFIGURE_VALUE_INT_RANGE:
2215 temp_int_range = (type_int_range*)((*configure_info)->info[i]->detail_info[j]);
2216 g_print("[ConfigureInfo] : INT_RANGE - Name[%s],Value [%d]~[%d], default [%d]\n",
2217 temp_int_range->name, temp_int_range->min, temp_int_range->max, temp_int_range->default_value);
2219 case CONFIGURE_VALUE_INT_ARRAY:
2220 temp_int_array = (type_int_array*)((*configure_info)->info[i]->detail_info[j]);
2221 g_print("[ConfigureInfo] : INT_ARRAY - Name[%s], default [%d]\n - ",
2222 temp_int_array->name, temp_int_array->default_value);
2224 for (k = 0 ; k < temp_int_array->count ; k++)
2225 g_print("[%d] ", temp_int_array->value[k]);
2229 case CONFIGURE_VALUE_INT_PAIR_ARRAY:
2230 temp_int_pair_array = (type_int_pair_array*)((*configure_info)->info[i]->detail_info[j]);
2231 g_print("[ConfigureInfo] : INT_PAIR_ARRAY - Name[%s], default [%d][%d]\n - ",
2232 temp_int_pair_array->name, temp_int_pair_array->default_value[0], temp_int_pair_array->default_value[0]);
2234 for (k = 0 ; k < temp_int_pair_array->count ; k++)
2235 g_print("[%d,%d] ", temp_int_pair_array->value[0][k], temp_int_pair_array->value[1][k]);
2239 case CONFIGURE_VALUE_STRING:
2240 temp_string = (type_string*)((*configure_info)->info[i]->detail_info[j]);
2241 g_print("[ConfigureInfo] : STRING - Name[%s],Value[%s]\n", temp_string->name, temp_string->value);
2243 case CONFIGURE_VALUE_ELEMENT:
2244 temp_element = (type_element*)((*configure_info)->info[i]->detail_info[j]);
2245 g_print("[ConfigureInfo] : Element - Name[%s],Element_Name[%s]\n", temp_element->name, temp_element->element_name);
2247 for (k = 0 ; k < temp_element->count_int ; k++)
2248 g_print(" - INT[%d] Name[%s],Value[%d]\n", k, temp_element->value_int[k]->name, temp_element->value_int[k]->value);
2250 for (k = 0 ; k < temp_element->count_string ; k++)
2251 g_print(" - STRING[%d] Name[%s],Value[%s]\n", k, temp_element->value_string[k]->name, temp_element->value_string[k]->value);
2255 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);
2259 g_print("[ConfigureInfo] : Failed to get value type.");
2265 g_print("[ConfigureInfoPrint] : Done.\n");
2269 static type_element *
2270 __mmcamcorder_get_audio_codec_element(MMHandleType handle)
2272 type_element *telement = NULL;
2273 const char *codec_type_str = NULL;
2274 int codec_type = MM_AUDIO_CODEC_INVALID;
2275 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2276 _MMCamcorderSubContext *sc = NULL;
2278 mmf_return_val_if_fail(hcamcorder, NULL);
2279 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2281 mmf_return_val_if_fail(sc, NULL);
2285 /* Check element availability */
2286 mm_camcorder_get_attributes(handle, NULL, MMCAM_AUDIO_ENCODER, &codec_type, NULL);
2288 switch (codec_type) {
2289 case MM_AUDIO_CODEC_AMR:
2290 codec_type_str = "AMR";
2292 case MM_AUDIO_CODEC_G723_1:
2293 codec_type_str = "G723_1";
2295 case MM_AUDIO_CODEC_MP3:
2296 codec_type_str = "MP3";
2298 case MM_AUDIO_CODEC_AAC:
2299 codec_type_str = "AAC";
2301 case MM_AUDIO_CODEC_MMF:
2302 codec_type_str = "MMF";
2304 case MM_AUDIO_CODEC_ADPCM:
2305 codec_type_str = "ADPCM";
2307 case MM_AUDIO_CODEC_WAVE:
2308 codec_type_str = "WAVE";
2310 case MM_AUDIO_CODEC_MIDI:
2311 codec_type_str = "MIDI";
2313 case MM_AUDIO_CODEC_IMELODY:
2314 codec_type_str = "IMELODY";
2316 case MM_AUDIO_CODEC_VORBIS:
2317 codec_type_str = "VORBIS";
2320 _mmcam_dbg_err("Not supported audio codec[%d]", codec_type);
2324 _mmcamcorder_conf_get_element(handle, hcamcorder->conf_main,
2325 CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER,
2333 static type_element *
2334 __mmcamcorder_get_video_codec_element(MMHandleType handle)
2336 type_element *telement = NULL;
2337 const char *codec_type_str = NULL;
2338 int codec_type = MM_VIDEO_CODEC_INVALID;
2339 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2340 _MMCamcorderSubContext *sc = NULL;
2342 mmf_return_val_if_fail(hcamcorder, NULL);
2343 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2345 mmf_return_val_if_fail(sc, NULL);
2349 /* Check element availability */
2350 mm_camcorder_get_attributes(handle, NULL, MMCAM_VIDEO_ENCODER, &codec_type, NULL);
2352 switch (codec_type) {
2353 case MM_VIDEO_CODEC_H263:
2354 codec_type_str = "H263";
2356 case MM_VIDEO_CODEC_H264:
2357 codec_type_str = "H264";
2359 case MM_VIDEO_CODEC_H26L:
2360 codec_type_str = "H26L";
2362 case MM_VIDEO_CODEC_MPEG4:
2363 codec_type_str = "MPEG4";
2365 case MM_VIDEO_CODEC_MPEG1:
2366 codec_type_str = "MPEG1";
2368 case MM_VIDEO_CODEC_THEORA:
2369 codec_type_str = "THEORA";
2372 _mmcam_dbg_err("Not supported video codec[%d]", codec_type);
2376 _mmcamcorder_conf_get_element(handle, hcamcorder->conf_main,
2377 CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER,
2385 static type_element *
2386 __mmcamcorder_get_image_codec_element(MMHandleType handle)
2388 type_element *telement = NULL;
2389 const char *codec_type_str = NULL;
2390 int codec_type = MM_IMAGE_CODEC_INVALID;
2391 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2392 _MMCamcorderSubContext *sc = NULL;
2394 mmf_return_val_if_fail(hcamcorder, NULL);
2395 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2397 mmf_return_val_if_fail(sc, NULL);
2401 /* Check element availability */
2402 mm_camcorder_get_attributes(handle, NULL, MMCAM_IMAGE_ENCODER, &codec_type, NULL);
2404 switch (codec_type) {
2405 case MM_IMAGE_CODEC_JPEG:
2406 codec_type_str = "JPEG";
2408 case MM_IMAGE_CODEC_SRW:
2409 codec_type_str = "SRW";
2411 case MM_IMAGE_CODEC_JPEG_SRW:
2412 codec_type_str = "JPEG_SRW";
2414 case MM_IMAGE_CODEC_PNG:
2415 codec_type_str = "PNG";
2417 case MM_IMAGE_CODEC_BMP:
2418 codec_type_str = "BMP";
2420 case MM_IMAGE_CODEC_WBMP:
2421 codec_type_str = "WBMP";
2423 case MM_IMAGE_CODEC_TIFF:
2424 codec_type_str = "TIFF";
2426 case MM_IMAGE_CODEC_PCX:
2427 codec_type_str = "PCX";
2429 case MM_IMAGE_CODEC_GIF:
2430 codec_type_str = "GIF";
2432 case MM_IMAGE_CODEC_ICO:
2433 codec_type_str = "ICO";
2435 case MM_IMAGE_CODEC_RAS:
2436 codec_type_str = "RAS";
2438 case MM_IMAGE_CODEC_TGA:
2439 codec_type_str = "TGA";
2441 case MM_IMAGE_CODEC_XBM:
2442 codec_type_str = "XBM";
2444 case MM_IMAGE_CODEC_XPM:
2445 codec_type_str = "XPM";
2448 _mmcam_dbg_err("Not supported image codec[%d]", codec_type);
2452 _mmcamcorder_conf_get_element(handle, hcamcorder->conf_main,
2453 CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER,
2461 static type_element *
2462 __mmcamcorder_get_file_format_element(MMHandleType handle)
2464 type_element *telement = NULL;
2465 const char *mux_type_str = NULL;
2466 int file_type = MM_FILE_FORMAT_INVALID;
2467 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2468 _MMCamcorderSubContext *sc = NULL;
2470 mmf_return_val_if_fail(hcamcorder, NULL);
2471 sc = MMF_CAMCORDER_SUBCONTEXT(handle);
2473 mmf_return_val_if_fail(sc, NULL);
2477 /* Check element availability */
2478 mm_camcorder_get_attributes(handle, NULL, MMCAM_FILE_FORMAT, &file_type, NULL);
2480 switch (file_type) {
2481 case MM_FILE_FORMAT_3GP:
2482 mux_type_str = "3GP";
2484 case MM_FILE_FORMAT_AMR:
2485 mux_type_str = "AMR";
2487 case MM_FILE_FORMAT_MP4:
2488 mux_type_str = "MP4";
2490 case MM_FILE_FORMAT_AAC:
2491 mux_type_str = "AAC";
2493 case MM_FILE_FORMAT_MP3:
2494 mux_type_str = "MP3";
2496 case MM_FILE_FORMAT_OGG:
2497 mux_type_str = "OGG";
2499 case MM_FILE_FORMAT_WAV:
2500 mux_type_str = "WAV";
2502 case MM_FILE_FORMAT_AVI:
2503 mux_type_str = "AVI";
2505 case MM_FILE_FORMAT_WMA:
2506 mux_type_str = "WMA";
2508 case MM_FILE_FORMAT_WMV:
2509 mux_type_str = "WMV";
2511 case MM_FILE_FORMAT_MID:
2512 mux_type_str = "MID";
2514 case MM_FILE_FORMAT_MMF:
2515 mux_type_str = "MMF";
2517 case MM_FILE_FORMAT_MATROSKA:
2518 mux_type_str = "MATROSKA";
2520 case MM_FILE_FORMAT_M2TS:
2521 mux_type_str = "M2TS";
2524 _mmcam_dbg_err("Not supported file format[%d]", file_type);
2528 _mmcamcorder_conf_get_element(handle, hcamcorder->conf_main,
2529 CONFIGURE_CATEGORY_MAIN_MUX,
2538 _mmcamcorder_get_type_element(MMHandleType handle, int type)
2540 type_element *telement = NULL;
2542 _mmcam_dbg_log("type:%d", type);
2545 case MM_CAM_AUDIO_ENCODER:
2546 telement = __mmcamcorder_get_audio_codec_element(handle);
2548 case MM_CAM_VIDEO_ENCODER:
2549 telement = __mmcamcorder_get_video_codec_element(handle);
2551 case MM_CAM_IMAGE_ENCODER:
2552 telement = __mmcamcorder_get_image_codec_element(handle);
2554 case MM_CAM_FILE_FORMAT:
2555 telement = __mmcamcorder_get_file_format_element(handle);
2558 _mmcam_dbg_log("Can't get element type form this profile.(%d)", type);
2565 int _mmcamcorder_get_audio_codec_format(MMHandleType handle, const char *name)
2567 int codec_index = MM_AUDIO_CODEC_INVALID;
2570 _mmcam_dbg_err("name is NULL");
2571 return MM_AUDIO_CODEC_INVALID;
2574 if (!strcmp(name, "AMR")) {
2575 codec_index = MM_AUDIO_CODEC_AMR;
2576 } else if (!strcmp(name, "G723_1")) {
2577 codec_index = MM_AUDIO_CODEC_G723_1;
2578 } else if (!strcmp(name, "MP3")) {
2579 codec_index = MM_AUDIO_CODEC_MP3;
2580 } else if (!strcmp(name, "AAC")) {
2581 codec_index = MM_AUDIO_CODEC_AAC;
2582 } else if (!strcmp(name, "MMF")) {
2583 codec_index = MM_AUDIO_CODEC_MMF;
2584 } else if (!strcmp(name, "ADPCM")) {
2585 codec_index = MM_AUDIO_CODEC_ADPCM;
2586 } else if (!strcmp(name, "WAVE")) {
2587 codec_index = MM_AUDIO_CODEC_WAVE;
2588 } else if (!strcmp(name, "MIDI")) {
2589 codec_index = MM_AUDIO_CODEC_MIDI;
2590 } else if (!strcmp(name, "IMELODY")) {
2591 codec_index = MM_AUDIO_CODEC_IMELODY;
2592 } else if (!strcmp(name, "VORBIS")) {
2593 codec_index = MM_AUDIO_CODEC_VORBIS;
2596 /*_mmcam_dbg_log("audio codec index %d", codec_index);*/
2603 int _mmcamcorder_get_video_codec_format(MMHandleType handle, const char *name)
2605 int codec_index = MM_VIDEO_CODEC_INVALID;
2608 _mmcam_dbg_err("name is NULL");
2609 return MM_VIDEO_CODEC_INVALID;
2612 if (!strcmp(name, "H263")) {
2613 codec_index = MM_VIDEO_CODEC_H263;
2614 } else if (!strcmp(name, "H264")) {
2615 codec_index = MM_VIDEO_CODEC_H264;
2616 } else if (!strcmp(name, "H26L")) {
2617 codec_index = MM_VIDEO_CODEC_H26L;
2618 } else if (!strcmp(name, "MPEG4")) {
2619 codec_index = MM_VIDEO_CODEC_MPEG4;
2620 } else if (!strcmp(name, "MPEG1")) {
2621 codec_index = MM_VIDEO_CODEC_MPEG1;
2622 } else if (!strcmp(name, "THEORA")) {
2623 codec_index = MM_VIDEO_CODEC_THEORA;
2626 /*_mmcam_dbg_log("video codec index %d", codec_index);*/
2633 int _mmcamcorder_get_image_codec_format(MMHandleType handle, const char *name)
2635 int codec_index = MM_IMAGE_CODEC_INVALID;
2638 _mmcam_dbg_err("name is NULL");
2639 return MM_IMAGE_CODEC_INVALID;
2642 if (!strcmp(name, "JPEG")) {
2643 codec_index = MM_IMAGE_CODEC_JPEG;
2644 } else if (!strcmp(name, "PNG")) {
2645 codec_index = MM_IMAGE_CODEC_PNG;
2646 } else if (!strcmp(name, "BMP")) {
2647 codec_index = MM_IMAGE_CODEC_BMP;
2648 } else if (!strcmp(name, "WBMP")) {
2649 codec_index = MM_IMAGE_CODEC_WBMP;
2650 } else if (!strcmp(name, "TIFF")) {
2651 codec_index = MM_IMAGE_CODEC_TIFF;
2652 } else if (!strcmp(name, "PCX")) {
2653 codec_index = MM_IMAGE_CODEC_PCX;
2654 } else if (!strcmp(name, "GIF")) {
2655 codec_index = MM_IMAGE_CODEC_GIF;
2656 } else if (!strcmp(name, "ICO")) {
2657 codec_index = MM_IMAGE_CODEC_ICO;
2658 } else if (!strcmp(name, "RAS")) {
2659 codec_index = MM_IMAGE_CODEC_RAS;
2660 } else if (!strcmp(name, "TGA")) {
2661 codec_index = MM_IMAGE_CODEC_TGA;
2662 } else if (!strcmp(name, "XBM")) {
2663 codec_index = MM_IMAGE_CODEC_XBM;
2664 } else if (!strcmp(name, "XPM")) {
2665 codec_index = MM_IMAGE_CODEC_XPM;
2668 _mmcam_dbg_log("image codec index %d", codec_index);
2674 int _mmcamcorder_get_mux_format(MMHandleType handle, const char *name)
2676 int mux_index = MM_FILE_FORMAT_INVALID;
2679 _mmcam_dbg_err("name is NULL");
2680 return MM_FILE_FORMAT_INVALID;
2683 if (!strcmp(name, "3GP")) {
2684 mux_index = MM_FILE_FORMAT_3GP;
2685 } else if (!strcmp(name, "AMR")) {
2686 mux_index = MM_FILE_FORMAT_AMR;
2687 } else if (!strcmp(name, "MP4")) {
2688 mux_index = MM_FILE_FORMAT_MP4;
2689 } else if (!strcmp(name, "AAC")) {
2690 mux_index = MM_FILE_FORMAT_AAC;
2691 } else if (!strcmp(name, "MP3")) {
2692 mux_index = MM_FILE_FORMAT_MP3;
2693 } else if (!strcmp(name, "OGG")) {
2694 mux_index = MM_FILE_FORMAT_OGG;
2695 } else if (!strcmp(name, "WAV")) {
2696 mux_index = MM_FILE_FORMAT_WAV;
2697 } else if (!strcmp(name, "AVI")) {
2698 mux_index = MM_FILE_FORMAT_AVI;
2699 } else if (!strcmp(name, "WMA")) {
2700 mux_index = MM_FILE_FORMAT_WMA;
2701 } else if (!strcmp(name, "WMV")) {
2702 mux_index = MM_FILE_FORMAT_WMV;
2703 } else if (!strcmp(name, "MID")) {
2704 mux_index = MM_FILE_FORMAT_MID;
2705 } else if (!strcmp(name, "MMF")) {
2706 mux_index = MM_FILE_FORMAT_MMF;
2707 } else if (!strcmp(name, "MATROSKA")) {
2708 mux_index = MM_FILE_FORMAT_MATROSKA;
2709 } else if (!strcmp(name, "M2TS")) {
2710 mux_index = MM_FILE_FORMAT_M2TS;
2713 /*_mmcam_dbg_log("mux index %d", mux_index);*/
2720 _mmcamcorder_get_format(MMHandleType handle, int conf_category, const char *name)
2724 mmf_return_val_if_fail(name, -1);
2726 switch (conf_category) {
2727 case CONFIGURE_CATEGORY_MAIN_AUDIO_ENCODER:
2728 fmt = _mmcamcorder_get_audio_codec_format(handle, name);
2730 case CONFIGURE_CATEGORY_MAIN_VIDEO_ENCODER:
2731 fmt = _mmcamcorder_get_video_codec_format(handle, name);
2733 case CONFIGURE_CATEGORY_MAIN_IMAGE_ENCODER:
2734 fmt = _mmcamcorder_get_image_codec_format(handle, name);
2736 case CONFIGURE_CATEGORY_MAIN_MUX:
2737 fmt = _mmcamcorder_get_mux_format(handle, name);
2740 _mmcam_dbg_log("Can't get format from this category.(%d)", conf_category);
2747 _mmcamcorder_get_available_format(MMHandleType handle, int conf_category, int ** format)
2749 mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
2750 camera_conf* configure_info = NULL;
2752 int total_count = 0;
2754 mmf_return_val_if_fail(hcamcorder, 0);
2756 /*_mmcam_dbg_log("conf_category:%d", conf_category);*/
2758 configure_info = hcamcorder->conf_main;
2760 if (configure_info->info[conf_category]) {
2763 const char *name = NULL;
2764 int count = configure_info->info[conf_category]->count;
2765 conf_detail *info = configure_info->info[conf_category];
2767 /*_mmcam_dbg_log("count[%d], info[%p]", count, info);*/
2769 if (count <= 0 || !info)
2772 arr = (int*) g_malloc0(count * sizeof(int));
2774 _mmcam_dbg_err("malloc failed : %d", count * sizeof(int));
2778 for (i = 0 ; i < count ; i++) {
2779 if (info->detail_info[i] == NULL)
2782 name = ((type_element*)(info->detail_info[i]))->name;
2783 fmt = _mmcamcorder_get_format(handle, conf_category, name);
2785 arr[total_count++] = fmt;
2787 /*_mmcam_dbg_log("name:%s, fmt:%d", name, fmt);*/