fix checking rule of strncpy
[platform/core/multimedia/libmm-wfd.git] / src / mm_wfd_sink_ini.c
1 /*
2  * libmm-wfd
3  *
4  * Copyright (c) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>, ByungWook Jang <bw.jang@samsung.com>,
7  * Manoj Kumar K <manojkumar.k@samsung.com>, Hyunil Park <hyunil46.park@samsung.com>
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */
22
23 #include <glib.h>
24 #include <glib/gstdio.h>
25 #include <stdlib.h>
26 #include <iniparser.h>
27 #include <mm_error.h>
28 #include "mm_wfd_sink_ini.h"
29 #include "mm_wfd_sink_dlog.h"
30
31 static gboolean loaded = FALSE;
32
33 /* global variables here */
34 #ifdef MM_WFD_SINK_DEFAULT_INI
35 static gboolean __generate_sink_default_ini(void);
36 #endif
37
38 static void __mm_wfd_sink_ini_check_status(void);
39
40 /* macro */
41 #define MM_WFD_SINK_INI_GET_STRING(x_dict, x_item, x_ini, x_default) \
42         do { \
43                 gchar *str = NULL; \
44                 gint length = 0; \
45                 \
46                 str = iniparser_getstring(x_dict, x_ini, (char *)x_default); \
47                 if (str) { \
48                         length = strlen(str); \
49                         if ((length > 1) && (length < WFD_SINK_INI_MAX_STRLEN)) \
50                                 strncpy(x_item, str, WFD_SINK_INI_MAX_STRLEN-1); \
51                         else \
52                                 strncpy(x_item, x_default, WFD_SINK_INI_MAX_STRLEN-1); \
53                 } else { \
54                         strncpy(x_item, x_default, WFD_SINK_INI_MAX_STRLEN-1); \
55                 } \
56         } while (0);
57
58 #ifdef MM_WFD_SINK_DEFAULT_INI
59 static
60 gboolean __generate_sink_default_ini(void)
61 {
62         FILE *fp = NULL;
63         const gchar *default_ini = MM_WFD_SINK_DEFAULT_INI;
64
65
66         /* create new file */
67         fp = fopen(MM_WFD_SINK_INI_DEFAULT_PATH, "wt");
68
69         if (!fp) {
70                 return FALSE;
71         }
72
73         /* writing default ini file */
74         if (strlen(default_ini) != fwrite(default_ini, 1, strlen(default_ini), fp)) {
75                 fclose(fp);
76                 return FALSE;
77         }
78
79         fclose(fp);
80         return TRUE;
81 }
82 #endif
83
84 int
85 mm_wfd_sink_ini_load(mm_wfd_sink_ini_t *ini)
86 {
87         dictionary *dict = NULL;
88
89         wfd_sink_debug_fenter();
90
91
92         __mm_wfd_sink_ini_check_status();
93
94         /* first, try to load existing ini file */
95         dict = iniparser_load(MM_WFD_SINK_INI_DEFAULT_PATH);
96
97         /* if no file exists. create one with set of default values */
98         if (!dict) {
99 #ifdef MM_WFD_SINK_DEFAULT_INI
100                 wfd_sink_debug("No inifile found. create default ini file.\n");
101                 if (FALSE == __generate_sink_default_ini()) {
102                         wfd_sink_error("Creating default ini file failed. Use default values.\n");
103                 } else {
104                         /* load default ini */
105                         dict = iniparser_load(MM_WFD_SINK_INI_DEFAULT_PATH);
106                 }
107 #else
108                 wfd_sink_error("No ini file found. \n");
109
110                 return MM_ERROR_FILE_NOT_FOUND;
111 #endif
112         }
113
114         /* get ini values */
115         memset(ini, 0, sizeof(mm_wfd_sink_ini_t));
116
117         if (dict) { /* if dict is available */
118                 /* general */
119                 MM_WFD_SINK_INI_GET_STRING(dict, ini->gst_param[0], "general:gstparam1", DEFAULT_GST_PARAM);
120                 MM_WFD_SINK_INI_GET_STRING(dict, ini->gst_param[1], "general:gstparam2", DEFAULT_GST_PARAM);
121                 MM_WFD_SINK_INI_GET_STRING(dict, ini->gst_param[2], "general:gstparam3", DEFAULT_GST_PARAM);
122                 MM_WFD_SINK_INI_GET_STRING(dict, ini->gst_param[3], "general:gstparam4", DEFAULT_GST_PARAM);
123                 MM_WFD_SINK_INI_GET_STRING(dict, ini->gst_param[4], "general:gstparam5", DEFAULT_GST_PARAM);
124                 ini->generate_dot = iniparser_getboolean(dict, "general:generate dot", DEFAULT_GENERATE_DOT);
125                 ini->enable_pad_probe = iniparser_getboolean(dict, "general:enable pad probe", DEFAULT_ENABLE_PAD_PROBE);
126                 ini->state_change_timeout = iniparser_getint(dict, "general:state change timeout", DEFAULT_STATE_CHANGE_TIMEOUT);
127                 ini->set_debug_property = iniparser_getboolean(dict, "general:set debug property", DEFAULT_SET_DEBUG_PROPERTY);
128                 ini->enable_asm = iniparser_getboolean(dict, "general:enable asm", DEFAULT_ENABLE_ASM);
129                 ini->jitter_buffer_latency = iniparser_getint(dict, "general:jitter buffer latency", DEFAULT_JITTER_BUFFER_LATENCY);
130                 ini->enable_retransmission = iniparser_getboolean(dict, "general:enable retransmission", DEFAULT_ENABLE_RETRANSMISSION);
131                 ini->enable_reset_basetime = iniparser_getboolean(dict, "general:enable reset basetime", DEFAULT_ENABLE_RESET_BASETIME);
132                 ini->video_sink_max_lateness = iniparser_getint(dict, "general:video sink max lateness", DEFAULT_VIDEO_SINK_MAX_LATENESS);
133                 ini->sink_ts_offset = iniparser_getint(dict, "general:sink ts offset", DEFAULT_SINK_TS_OFFSET);
134                 ini->audio_sink_async = iniparser_getboolean(dict, "general:audio sink async", DEFAULT_AUDIO_SINK_ASYNC);
135                 ini->video_sink_async = iniparser_getboolean(dict, "general:video sink async", DEFAULT_VIDEO_SINK_ASYNC);
136                 ini->enable_ts_data_dump = iniparser_getboolean(dict, "general:enable ts data dump", DEFAULT_ENABLE_TS_DATA_DUMP);
137                 ini->enable_wfdsrc_pad_probe = iniparser_getboolean(dict, "general:enable wfdsrc pad probe", DEFAULT_ENABLE_WFDRTSPSRC_PAD_PROBE);
138
139
140                 /* pipeline */
141                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_source, "pipeline:wfdsrc element", DEFAULT_NAME_OF_SOURCE);
142                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_tsdemux, "pipeline:tsdemux element", DEFAULT_NAME_OF_TSDEMUX);
143                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_audio_hdcp, "pipeline:audio hdcp element", DEFAULT_NAME_OF_AUDIO_HDCP);
144                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_aac_parser, "pipeline:aac parser element", DEFAULT_NAME_OF_AAC_PARSER);
145                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_aac_decoder, "pipeline:aac decoder element", DEFAULT_NAME_OF_AAC_DECODER);
146                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_ac3_parser, "pipeline:ac3 parser element", DEFAULT_NAME_OF_AC3_PARSER);
147                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_ac3_decoder, "pipeline:ac3 decoder element", DEFAULT_NAME_OF_AC3_DECODER);
148                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_lpcm_converter, "pipeline:lpcm converter element", DEFAULT_NAME_OF_LPCM_CONVERTER);
149                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_lpcm_filter, "pipeline:lpcm filter element", DEFAULT_NAME_OF_LPCM_FILTER);
150                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_audio_resampler, "pipeline:audio resampler element", DEFAULT_NAME_OF_AUDIO_RESAMPLER);
151                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_audio_volume, "pipeline:audio volume element", DEFAULT_NAME_OF_AUDIO_VOLUME);
152                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_audio_sink, "pipeline:audio sink element", DEFAULT_NAME_OF_AUDIO_SINK);
153                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_hdcp, "pipeline:video hdcp element", DEFAULT_NAME_OF_VIDEO_HDCP);
154                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_parser, "pipeline:video parser element", DEFAULT_NAME_OF_VIDEO_PARSER);
155                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_capssetter, "pipeline:video capssetter element", DEFAULT_NAME_OF_VIDEO_CAPSSETTER);
156                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_decoder, "pipeline:video decoder element", DEFAULT_NAME_OF_VIDEO_DECODER);
157                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_converter, "pipeline:video converter element", DEFAULT_NAME_OF_VIDEO_CONVERTER);
158                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_filter, "pipeline:video filter element", DEFAULT_NAME_OF_VIDEO_FILTER);
159                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_sink, "pipeline:video sink element", DEFAULT_NAME_OF_VIDEO_SINK);
160                 MM_WFD_SINK_INI_GET_STRING(dict, ini->name_of_video_evas_sink, "pipeline:video evas sink element", DEFAULT_NAME_OF_EVAS_VIDEO_SINK);
161
162                 /* audio parameter*/
163                 ini->audio_codec = iniparser_getint(dict, "audio param:audio codec", DEFAULT_AUDIO_CODEC);
164                 ini->audio_latency = iniparser_getint(dict, "audio param:audio latency", DEFAULT_AUDIO_LATENCY);
165                 ini->audio_channel = iniparser_getint(dict, "audio param:audio channels", DEFAULT_AUDIO_CHANNELS);
166                 ini->audio_sampling_frequency = iniparser_getint(dict, "audio param:audio sampling frequency", DEFAULT_AUDIO_SAMP_FREQUENCY);
167
168                 /* video parameter*/
169                 ini->video_codec = iniparser_getint(dict, "video param:video codec", DEFAULT_VIDEO_CODEC);
170                 ini->video_native_resolution = iniparser_getint(dict, "video param:video native resolution", DEFAULT_VIDEO_NATIVE_RESOLUTION);
171                 ini->video_cea_support = iniparser_getint(dict, "video param:video cea support", DEFAULT_VIDEO_CEA_SUPPORT);
172                 ini->video_vesa_support = iniparser_getint(dict, "video param:video vesa support", DEFAULT_VIDEO_VESA_SUPPORT);
173                 ini->video_hh_support = iniparser_getint(dict, "video param:video hh support", DEFAULT_VIDEO_HH_SUPPORT);
174                 ini->video_profile = iniparser_getint(dict, "video param:video profile", DEFAULT_VIDEO_PROFILE);
175                 ini->video_level = iniparser_getint(dict, "video param:video level", DEFAULT_VIDEO_LEVEL);
176                 ini->video_latency = iniparser_getint(dict, "video param:video latency", DEFAULT_VIDEO_LATENCY);
177                 ini->video_vertical_resolution = iniparser_getint(dict, "video param:video vertical resolution", DEFAULT_VIDEO_VERTICAL_RESOLUTION);
178                 ini->video_horizontal_resolution = iniparser_getint(dict, "video param:video horizontal resolution", DEFAULT_VIDEO_HORIZONTAL_RESOLUTION);
179                 ini->video_minimum_slicing = iniparser_getint(dict, "video param:video minimum slicesize", DEFAULT_VIDEO_MIN_SLICESIZE);
180                 ini->video_slice_enc_param = iniparser_getint(dict, "video param:video slice encoding params", DEFAULT_VIDEO_SLICE_ENC_PARAM);
181                 ini->video_framerate_control_support = iniparser_getint(dict, "video param:video framerate control support", DEFAULT_VIDEO_FRAMERATE_CONTROL);
182
183                 /* hdcp parameter*/
184                 ini->hdcp_content_protection = iniparser_getint(dict, "hdcp param:hdcp content protection", DEFAULT_HDCP_CONTENT_PROTECTION);
185                 ini->hdcp_port_no = iniparser_getint(dict, "hdcp param:hdcp port no", DEFAULT_HDCP_PORT_NO);
186         } else { /* if dict is not available just fill the structure with default value */
187                 wfd_sink_error("failed to load ini. using hardcoded default\n");
188
189                 /* general */
190                 strncpy(ini->gst_param[0], DEFAULT_GST_PARAM, WFD_SINK_INI_MAX_STRLEN - 1);
191                 strncpy(ini->gst_param[1], DEFAULT_GST_PARAM, WFD_SINK_INI_MAX_STRLEN - 1);
192                 strncpy(ini->gst_param[2], DEFAULT_GST_PARAM, WFD_SINK_INI_MAX_STRLEN - 1);
193                 strncpy(ini->gst_param[3], DEFAULT_GST_PARAM, WFD_SINK_INI_MAX_STRLEN - 1);
194                 strncpy(ini->gst_param[4], DEFAULT_GST_PARAM, WFD_SINK_INI_MAX_STRLEN - 1);
195                 ini->generate_dot =  DEFAULT_GENERATE_DOT;
196                 ini->enable_pad_probe = DEFAULT_ENABLE_PAD_PROBE;
197                 ini->state_change_timeout = DEFAULT_STATE_CHANGE_TIMEOUT;
198                 ini->set_debug_property =  DEFAULT_SET_DEBUG_PROPERTY;
199                 ini->enable_asm =  DEFAULT_ENABLE_ASM;
200                 ini->jitter_buffer_latency = DEFAULT_JITTER_BUFFER_LATENCY;
201                 ini->enable_retransmission =  DEFAULT_ENABLE_RETRANSMISSION;
202                 ini->enable_reset_basetime =  DEFAULT_ENABLE_RESET_BASETIME;
203                 ini->video_sink_max_lateness = DEFAULT_VIDEO_SINK_MAX_LATENESS;
204                 ini->sink_ts_offset = DEFAULT_SINK_TS_OFFSET;
205                 ini->enable_ts_data_dump = DEFAULT_ENABLE_TS_DATA_DUMP;
206                 ini->enable_wfdsrc_pad_probe = DEFAULT_ENABLE_WFDRTSPSRC_PAD_PROBE;
207
208                 /* pipeline */
209                 strncpy(ini->name_of_source, DEFAULT_NAME_OF_TSDEMUX, WFD_SINK_INI_MAX_STRLEN - 1);
210                 strncpy(ini->name_of_tsdemux, DEFAULT_NAME_OF_TSDEMUX, WFD_SINK_INI_MAX_STRLEN - 1);
211                 strncpy(ini->name_of_audio_hdcp, DEFAULT_NAME_OF_AUDIO_HDCP, WFD_SINK_INI_MAX_STRLEN - 1);
212                 strncpy(ini->name_of_aac_parser, DEFAULT_NAME_OF_AAC_PARSER, WFD_SINK_INI_MAX_STRLEN - 1);
213                 strncpy(ini->name_of_aac_decoder, DEFAULT_NAME_OF_AAC_DECODER, WFD_SINK_INI_MAX_STRLEN - 1);
214                 strncpy(ini->name_of_ac3_parser, DEFAULT_NAME_OF_AC3_PARSER, WFD_SINK_INI_MAX_STRLEN - 1);
215                 strncpy(ini->name_of_ac3_decoder, DEFAULT_NAME_OF_AC3_DECODER, WFD_SINK_INI_MAX_STRLEN - 1);
216                 strncpy(ini->name_of_lpcm_converter, DEFAULT_NAME_OF_LPCM_CONVERTER, WFD_SINK_INI_MAX_STRLEN - 1);
217                 strncpy(ini->name_of_lpcm_filter, DEFAULT_NAME_OF_LPCM_FILTER, WFD_SINK_INI_MAX_STRLEN - 1);
218                 strncpy(ini->name_of_audio_resampler, DEFAULT_NAME_OF_AUDIO_RESAMPLER, WFD_SINK_INI_MAX_STRLEN - 1);
219                 strncpy(ini->name_of_audio_volume, DEFAULT_NAME_OF_AUDIO_VOLUME, WFD_SINK_INI_MAX_STRLEN - 1);
220                 strncpy(ini->name_of_audio_sink, DEFAULT_NAME_OF_AUDIO_SINK, WFD_SINK_INI_MAX_STRLEN - 1);
221                 strncpy(ini->name_of_video_hdcp, DEFAULT_NAME_OF_VIDEO_HDCP, WFD_SINK_INI_MAX_STRLEN - 1);
222                 strncpy(ini->name_of_video_parser, DEFAULT_NAME_OF_VIDEO_PARSER, WFD_SINK_INI_MAX_STRLEN - 1);
223                 strncpy(ini->name_of_video_capssetter, DEFAULT_NAME_OF_VIDEO_CAPSSETTER, WFD_SINK_INI_MAX_STRLEN - 1);
224                 strncpy(ini->name_of_video_decoder, DEFAULT_NAME_OF_VIDEO_DECODER, WFD_SINK_INI_MAX_STRLEN - 1);
225                 strncpy(ini->name_of_video_converter, DEFAULT_NAME_OF_VIDEO_CONVERTER, WFD_SINK_INI_MAX_STRLEN - 1);
226                 strncpy(ini->name_of_video_filter, DEFAULT_NAME_OF_VIDEO_FILTER, WFD_SINK_INI_MAX_STRLEN - 1);
227                 strncpy(ini->name_of_video_sink, DEFAULT_NAME_OF_VIDEO_SINK, WFD_SINK_INI_MAX_STRLEN - 1);
228                 strncpy(ini->name_of_video_evas_sink, DEFAULT_NAME_OF_EVAS_VIDEO_SINK, WFD_SINK_INI_MAX_STRLEN - 1);
229
230                 /* audio parameter*/
231                 ini->audio_codec = DEFAULT_AUDIO_CODEC;
232                 ini->audio_latency = DEFAULT_AUDIO_LATENCY;
233                 ini->audio_channel = DEFAULT_AUDIO_CHANNELS;
234                 ini->audio_sampling_frequency = DEFAULT_AUDIO_SAMP_FREQUENCY;
235
236                 /* video parameter*/
237                 ini->video_codec = DEFAULT_VIDEO_CODEC;
238                 ini->video_native_resolution = DEFAULT_VIDEO_NATIVE_RESOLUTION;
239                 ini->video_cea_support = DEFAULT_VIDEO_CEA_SUPPORT;
240                 ini->video_vesa_support = DEFAULT_VIDEO_VESA_SUPPORT;
241                 ini->video_hh_support = DEFAULT_VIDEO_HH_SUPPORT;
242                 ini->video_profile = DEFAULT_VIDEO_PROFILE;
243                 ini->video_level = DEFAULT_VIDEO_LEVEL;
244                 ini->video_latency = DEFAULT_VIDEO_LATENCY;
245                 ini->video_vertical_resolution = DEFAULT_VIDEO_VERTICAL_RESOLUTION;
246                 ini->video_horizontal_resolution = DEFAULT_VIDEO_HORIZONTAL_RESOLUTION;
247                 ini->video_minimum_slicing = DEFAULT_VIDEO_MIN_SLICESIZE;
248                 ini->video_slice_enc_param = DEFAULT_VIDEO_SLICE_ENC_PARAM;
249                 ini->video_framerate_control_support = DEFAULT_VIDEO_FRAMERATE_CONTROL;
250
251                 /* hdcp parameter*/
252                 ini->hdcp_content_protection = DEFAULT_HDCP_CONTENT_PROTECTION;
253                 ini->hdcp_port_no = DEFAULT_HDCP_PORT_NO;
254         }
255
256         /* free dict as we got our own structure */
257         iniparser_freedict(dict);
258
259
260         /* dump structure */
261         wfd_sink_debug("W-Fi Display Sink Initial Settings-----------------------------------\n");
262
263         /* general */
264         wfd_sink_debug("gst_param1 : %s\n", ini->gst_param[0]);
265         wfd_sink_debug("gst_param2 : %s\n", ini->gst_param[1]);
266         wfd_sink_debug("gst_param3 : %s\n", ini->gst_param[2]);
267         wfd_sink_debug("gst_param4 : %s\n", ini->gst_param[3]);
268         wfd_sink_debug("gst_param5 : %s\n", ini->gst_param[4]);
269         wfd_sink_debug("generate_dot : %d\n", ini->generate_dot);
270         if (ini->generate_dot == TRUE) {
271                 wfd_sink_debug("generate_dot is TRUE, dot file will be stored into /tmp/\n");
272                 g_setenv("GST_DEBUG_DUMP_DOT_DIR", "/tmp/", FALSE);
273         }
274         wfd_sink_debug("enable_pad_probe : %d\n", ini->enable_pad_probe);
275         wfd_sink_debug("state_change_timeout(sec) : %d\n", ini->state_change_timeout);
276         wfd_sink_debug("set_debug_property : %d\n", ini->set_debug_property);
277         wfd_sink_debug("enable_asm : %d\n", ini->enable_asm);
278         wfd_sink_debug("jitter_buffer_latency(msec) : %d\n", ini->jitter_buffer_latency);
279         wfd_sink_debug("enable_retransmission : %d\n", ini->enable_retransmission);
280         wfd_sink_debug("enable_reset_basetime : %d\n", ini->enable_reset_basetime);
281         wfd_sink_debug("video_sink_max_lateness(nsec) : %d\n", ini->video_sink_max_lateness);
282         wfd_sink_debug("sink_ts_offset(nsec) : %d\n", ini->sink_ts_offset);
283         wfd_sink_debug("audio_sink_async : %d\n", ini->audio_sink_async);
284         wfd_sink_debug("video_sink_async : %d\n", ini->video_sink_async);
285         wfd_sink_debug("enable_ts_data_dump : %d\n", ini->enable_ts_data_dump);
286         wfd_sink_debug("enable_wfdsrc_pad_probe : %d\n", ini->enable_wfdsrc_pad_probe);
287
288         /* pipeline */
289         wfd_sink_debug("name_of_source : %s\n", ini->name_of_source);
290         wfd_sink_debug("name_of_tsdemux : %s\n", ini->name_of_tsdemux);
291         wfd_sink_debug("name_of_audio_hdcp : %s\n", ini->name_of_audio_hdcp);
292         wfd_sink_debug("name_of_aac_parser : %s\n", ini->name_of_aac_parser);
293         wfd_sink_debug("name_of_aac_decoder : %s\n", ini->name_of_aac_decoder);
294         wfd_sink_debug("name_of_ac3_parser : %s\n", ini->name_of_ac3_parser);
295         wfd_sink_debug("name_of_ac3_decoder : %s\n", ini->name_of_ac3_decoder);
296         wfd_sink_debug("name_of_lpcm_converter : %s\n", ini->name_of_lpcm_converter);
297         wfd_sink_debug("name_of_lpcm_filter : %s\n", ini->name_of_lpcm_filter);
298         wfd_sink_debug("name_of_audio_resampler : %s\n", ini->name_of_audio_resampler);
299         wfd_sink_debug("name_of_audio_volume : %s\n", ini->name_of_audio_volume);
300         wfd_sink_debug("name_of_audio_sink : %s\n", ini->name_of_audio_sink);
301         wfd_sink_debug("name_of_video_hdcp : %s\n", ini->name_of_video_hdcp);
302         wfd_sink_debug("name_of_video_parser : %s\n", ini->name_of_video_parser);
303         wfd_sink_debug("name_of_video_capssetter : %s\n", ini->name_of_video_capssetter);
304         wfd_sink_debug("name_of_video_decoder : %s\n", ini->name_of_video_decoder);
305         wfd_sink_debug("name_of_video_converter : %s\n", ini->name_of_video_converter);
306         wfd_sink_debug("name_of_video_filter : %s\n", ini->name_of_video_filter);
307         wfd_sink_debug("name_of_video_sink : %s\n", ini->name_of_video_sink);
308         wfd_sink_debug("name_of_video_evas_sink : %s\n", ini->name_of_video_evas_sink);
309
310         /* audio parameter*/
311         wfd_sink_debug("audio_codec : %x\n", ini->audio_codec);
312         wfd_sink_debug("audio_latency : %d\n", ini->audio_latency);
313         wfd_sink_debug("audio_channel : %x\n", ini->audio_channel);
314         wfd_sink_debug("audio_sampling_frequency : %x\n", ini->audio_sampling_frequency);
315
316         /* video parameter*/
317         wfd_sink_debug("video_codec : %x\n", ini->video_codec);
318         wfd_sink_debug("video_native_resolution : %x\n", ini->video_native_resolution);
319         wfd_sink_debug("video_cea_support : %x\n", ini->video_cea_support);
320         wfd_sink_debug("video_vesa_support : %x\n", ini->video_vesa_support);
321         wfd_sink_debug("video_hh_support : %x\n", ini->video_hh_support);
322         wfd_sink_debug("video_profile : %x\n", ini->video_profile);
323         wfd_sink_debug("video_level : %x\n", ini->video_level);
324         wfd_sink_debug("video_latency : %d\n", ini->video_latency);
325         wfd_sink_debug("video_vertical_resolution : %d\n", ini->video_vertical_resolution);
326         wfd_sink_debug("video_horizontal_resolution : %d\n", ini->video_horizontal_resolution);
327         wfd_sink_debug("video_minimum_slicing : %d\n", ini->video_minimum_slicing);
328         wfd_sink_debug("video_slice_enc_param : %d\n", ini->video_slice_enc_param);
329         wfd_sink_debug("video_framerate_control_support : %d\n", ini->video_framerate_control_support);
330
331         /* hdcp parameter*/
332         wfd_sink_debug("hdcp_content_protection : %x\n", ini->hdcp_content_protection);
333         wfd_sink_debug("hdcp_port_no : %d\n", ini->hdcp_port_no);
334
335         wfd_sink_debug("---------------------------------------------------\n");
336
337         loaded = TRUE;
338
339         wfd_sink_debug_fleave();
340
341         return MM_ERROR_NONE;
342 }
343
344
345 static
346 void __mm_wfd_sink_ini_check_status(void)
347 {
348         struct stat ini_buff;
349
350         wfd_sink_debug_fenter();
351
352         if (g_stat(MM_WFD_SINK_INI_DEFAULT_PATH, &ini_buff) < 0) {
353                 wfd_sink_error("failed to get mmfw_wfd_sink ini status\n");
354         } else {
355                 if (ini_buff.st_size < 5) {
356                         wfd_sink_error("mmfw_wfd_sink.ini file size=%d, Corrupted! So, Removed\n", (int)ini_buff.st_size);
357                         g_remove(MM_WFD_SINK_INI_DEFAULT_PATH);
358                 }
359         }
360
361         wfd_sink_debug_fleave();
362 }
363
364 int
365 mm_wfd_sink_ini_unload(mm_wfd_sink_ini_t *ini)
366 {
367         wfd_sink_debug_fenter();
368
369         loaded = FALSE;
370
371         wfd_sink_debug_fleave();
372
373         return MM_ERROR_NONE;
374 }