2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef __TIZEN_MEDIA_STREAMER_UTIL_H__
18 #define __TIZEN_MEDIA_STREAMER_UTIL_H__
20 #include <media_format.h>
26 #include <iniparser.h>
28 #include <json-glib/json-glib.h>
39 #define LOG_TAG "CAPI_MEDIASTREAMER"
41 #define FONT_COLOR_RESET "\033[0m"
42 #define FONT_COLOR_RED "\033[31m"
43 #define FONT_COLOR_GREEN "\033[32m"
44 #define FONT_COLOR_YELLOW "\033[33m"
45 #define FONT_COLOR_BLUE "\033[34m"
46 #define FONT_COLOR_PURPLE "\033[35m"
47 #define FONT_COLOR_CYAN "\033[36m"
48 #define FONT_COLOR_GRAY "\033[37m"
50 #define ms_debug(fmt, arg...) \
52 LOGD(FONT_COLOR_RESET""fmt""FONT_COLOR_RESET, ##arg); \
55 #define ms_info(fmt, arg...) \
57 LOGI(FONT_COLOR_GREEN""fmt""FONT_COLOR_RESET, ##arg); \
60 #define ms_warning(fmt, arg...) \
62 LOGW(FONT_COLOR_YELLOW""fmt""FONT_COLOR_RESET, ##arg); \
65 #define ms_error(fmt, arg...) \
67 LOGE(FONT_COLOR_RED""fmt""FONT_COLOR_RESET, ##arg); \
70 #define ms_debug_fenter() \
72 LOGD(FONT_COLOR_PURPLE"<Enter>"FONT_COLOR_RESET); \
75 #define ms_debug_fleave() \
77 LOGD(FONT_COLOR_PURPLE"<Leave>"FONT_COLOR_RESET); \
80 #define ms_retm_if(expr, fmt, arg...) \
83 LOGE(FONT_COLOR_RED""fmt""FONT_COLOR_RESET, ##arg); \
88 #define ms_retvm_if(expr, val, fmt, arg...) \
91 LOGE(FONT_COLOR_RED""fmt""FONT_COLOR_RESET, ##arg); \
96 #define MS_SAFE_FREE(src) {if (src) { free(src); src = NULL; } }
97 #define MS_SAFE_GFREE(src) {if (src) { g_free(src); src = NULL; } }
98 #define MS_SAFE_UNREF(src) {if (src) { gst_object_unref(GST_OBJECT(src)); src = NULL; } }
99 #define MS_TABLE_SAFE_UNREF(src) {if (src) { g_hash_table_unref(src); src = NULL; } }
101 #define MS_TIME_NONE ((int)-1)
104 /* SYSCONFDIR is defined at spec file */
105 #define MEDIA_STREAMER_INI_PATH SYSCONFDIR"/multimedia/mmfw_media_streamer.ini"
107 #define INI_MAX_STRLEN (100)
108 #define RTP_STREAM_DISABLED (0)
111 * @brief Media Streamer ini settings structure.
113 typedef struct __media_streamer_ini {
115 gboolean generate_dot;
116 gboolean use_decodebin;
117 gchar **exclude_elem_names;
118 gchar **resource_required_elem_names;
120 } media_streamer_ini_t;
123 * @brief Media Streamer format type handle.
126 media_format_mimetype_e format;
131 * @brief Media Streamer signal structure.
136 } media_streamer_signal_s;
138 typedef struct _media_streamer_wl_info_s {
140 } media_streamer_wl_info_s;
143 #define DEFAULT_VIDEO_TEST_SOURCE "videotestsrc"
144 #define DEFAULT_AUDIO_TEST_SOURCE "audiotestsrc"
145 #define DEFAULT_FAKE_SINK "fakesink"
147 /* setting default values if each value is not specified in .ini file */
149 #define DEFAULT_GENERATE_DOT FALSE
150 #define DEFAULT_USE_DECODEBIN FALSE
151 #define DEFAULT_QUEUE "queue"
152 #define DEFAULT_FILTER "capsfilter"
153 #define DEFAULT_TYPEFIND "typefind"
154 #define DEFAULT_DECODEBIN "decodebin"
155 #define DEFAULT_AUDIO_SOURCE "pulsesrc"
156 #define DEFAULT_CAMERA_SOURCE "v4l2src"
157 #define DEFAULT_VIDEO_SOURCE "videotestsrc"
158 #define DEFAULT_APP_SOURCE "appsrc"
159 #define DEFAULT_AUDIO_SINK "pulsesink"
160 #define DEFAULT_VIDEO_SINK "tizenwlsink"
161 #define DEFAULT_VIDEO_SCALE "videoscale"
162 #define DEFAULT_VIDEO_CONVERT "videoconvert"
163 #define DEFAULT_VIDEO_RATE "videorate"
164 #define DEFAULT_TEXT_OVERLAY "textoverlay"
165 #define DEFAULT_AUDIO_CONVERT "audioconvert"
166 #define DEFAULT_AUDIO_RESAMPLE "audioresample"
167 #define DEFAULT_APP_SINK "appsink"
170 #define DEFAULT_UDP_SOURCE "udpsrc"
171 #define DEFAULT_FILE_SOURCE "filesrc"
172 #define DEFAULT_HTTP_SOURCE "souphttpsrc"
173 #define DEFAULT_FILE_SINK "filesink"
174 #define DEFAULT_UDP_SINK "udpsink"
175 #define DEFAULT_RTP_BIN "rtpbin"
177 /* video format defaults */
178 #define DEFAULT_VIDEO_ENCODER "avenc_h263"
179 #define DEFAULT_VIDEO_DECODER "avdec_h263"
180 #define DEFAULT_VIDEO_PARSER "h263parse"
181 #define DEFAULT_VIDEO_RTPPAY "rtph263pay"
182 #define DEFAULT_VIDEO_RTPDEPAY "rtph263depay"
184 /* audio format defaults */
185 #define DEFAULT_AUDIO_ENCODER "amrnbenc"
186 #define DEFAULT_AUDIO_DECODER "amrnbdec"
187 #define DEFAULT_AUDIO_PARSER "amrparse"
188 #define DEFAULT_AUDIO_RTPPAY "rtpamrpay"
189 #define DEFAULT_AUDIO_RTPDEPAY "rtpamrdepay"
191 /* adaptive streaming default */
192 #define DEFAULT_ADAPTIVE_SOURCE "hlsdemux"
193 #define DEFAULT_ADAPTIVE_SINK "hlssink"
196 #define WEBRTC_PEER_ANSWER "answer"
197 #define WEBRTC_PEER_OFFER "offer"
198 #define DEFAULT_WEBRTC_PEER WEBRTC_PEER_ANSWER
200 #define MEDIA_STREAMER_DEFAULT_CAMERA_FORMAT "video/x-raw,format=I420,width=352,height=288"
201 #define MEDIA_STREAMER_DEFAULT_AUDIO_RAW_FORMAT "audio/x-raw,channels=1,rate=8000,format=S16LE"
202 #define MEDIA_STREAMER_DEFAULT_VIDEO_FORMAT "video/x-h263,width=352,height=288,framerate = 3/1"
203 #define MEDIA_STREAMER_DEFAULT_AUDIO_FORMAT "audio/AMR ,rate = 8000,channels = 1"
204 #define MEDIA_STREAMER_DEFAULT_VIDEO_RTP_FORMAT "application/x-rtp,media=video"
205 #define MEDIA_STREAMER_DEFAULT_AUDIO_RTP_FORMAT "application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1"
207 #define MS_ELEMENT_IS_OUTPUT(el) g_strrstr(el, "out")
208 #define MS_ELEMENT_IS_INPUT(el) g_strrstr(el, "in")
209 #define MS_ELEMENT_IS_AUDIO(el) g_strrstr(el, "audio")
210 #define MS_ELEMENT_IS_VIDEO(el) g_strrstr(el, "video")
211 #define MS_ELEMENT_IS_IMAGE(el) g_strrstr(el, "image")
212 #define MS_ELEMENT_IS_TEXT(el) g_strrstr(el, "text")
214 #define MS_RTP_PAD_VIDEO_IN "video_in"
215 #define MS_RTP_PAD_AUDIO_IN "audio_in"
216 #define MS_RTP_PAD_VIDEO_OUT "video_out"
217 #define MS_RTP_PAD_AUDIO_OUT "audio_out"
218 #define MEDIA_STREAMER_PARAM_VIDEO_IN_FORMAT MS_RTP_PAD_VIDEO_IN"_format"
219 #define MEDIA_STREAMER_PARAM_AUDIO_IN_FORMAT MS_RTP_PAD_AUDIO_IN"_format"
221 #define MS_ELEMENT_IS_RTP(el) g_strrstr(el, "rtp_container")
222 #define MS_ELEMENT_IS_ENCODER(el) g_strrstr(el, "encoder")
223 #define MS_ELEMENT_IS_DECODER(el) g_strrstr(el, "decoder")
225 #define MEDIA_STREAMER_DEFAULT_DOT_DIR "/tmp"
227 #define MS_SET_INT_PARAM(obj, key, value) \
229 GValue *val = g_malloc0(sizeof(GValue)); \
230 g_value_init(val, G_TYPE_INT); \
231 g_value_set_int(val, value); \
232 g_object_set_data_full(G_OBJECT(obj), key, (gpointer)val, ms_param_value_destroy); \
235 #define MS_SET_INT_STATIC_STRING_PARAM(obj, key, value) \
237 GValue *val = g_malloc0(sizeof(GValue)); \
238 g_value_init(val, G_TYPE_STRING); \
239 g_value_set_static_string(val, value); \
240 g_object_set_data_full(G_OBJECT(obj), key, (gpointer)val, ms_param_value_destroy); \
243 #define MS_SET_INT_CAPS_PARAM(obj, key, value) \
245 GValue *val = g_malloc0(sizeof(GValue)); \
246 g_value_init(val, GST_TYPE_CAPS); \
247 gst_value_set_caps(val, value); \
248 g_object_set_data_full(G_OBJECT(obj), key, (gpointer)val, ms_param_value_destroy); \
251 #define MS_GET_CAPS_TYPE(caps, type) \
253 if (caps && gst_caps_get_size(caps) > 0) \
254 type = gst_structure_get_name(gst_caps_get_structure(caps, 0)); \
260 * @brief Loads media streamer settings from ini file.
261 * The default values will be used if error has occurred.
263 void ms_load_ini_settings(media_streamer_ini_t *ini);
266 * @brief Read and copy string reading from ini file.
268 gchar *ms_ini_get_string(const char *ini_path, const char *default_str);
271 * @brief Reads comma-separated string list from ini file.
273 void ms_ini_read_list(const char *key, gchar ***list);
276 * @brief Converts Media Format mime type into Caps media format string.
278 const gchar *ms_convert_mime_to_string_format(media_format_mimetype_e mime);
281 * @brief Converts Media Format mime type into rtp media type.
283 const gchar *ms_convert_mime_to_rtp_format(media_format_mimetype_e mime);
286 * @brief Converts Caps stream format into Media Format mime type.
288 media_format_mimetype_e ms_convert_string_format_to_media_format(const char *format_type);
291 * @brief Creates Media streamer signal structure,
292 * connects it to object and appends it to signal list.
294 void ms_signal_create(GList **sig_list, GstElement *obj, const char *sig_name, GCallback cb, gpointer user_data);
297 * @brief Disconnects signal from object and
298 * destroys Media streamer signal object.
300 void ms_signal_destroy(void *data);
303 * @brief Destroys the which set as rtp node parameter.
305 void ms_param_value_destroy(gpointer data);
308 * @brief Check URI is valid file
310 int ms_util_uri_path_check(const char *file_uri);
312 /* Use g_free() to free the return value. */
313 gchar* ms_get_string_from_json_object(JsonObject *object);
315 /* Use g_free() to free the sdp and type parameter. */
316 int ms_webrtc_get_sdp_from_message(const char *sdp_msg, gchar **sdp, gchar **type);
318 /* Use g_free() to free the candidate parameter. */
319 int ms_webrtc_get_ice_candidate_from_message(const char *ice_msg, gchar **candidate, gint *mlineindex);
322 * @brief Iterates func over all elements contained within a bin.
324 int ms_bin_foreach_elements(GstBin *bin, GstIteratorFoldFunction func, void *user_data);
326 int ms_get_wl_info(Evas_Object *obj, media_streamer_wl_info_s *wl_info);
332 #endif /* __TIZEN_MEDIA_STREAMER_UTIL_H__ */