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