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