From: Gilbok Lee Date: Tue, 8 Sep 2020 08:11:35 +0000 (+0900) Subject: [0.6.238] Fix memory leak due to without unref source element X-Git-Tag: submit/tizen/20200909.015028^0 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git;a=commitdiff_plain;h=a86141955aeef192f6a083a4d50f8f2e03c541d2 [0.6.238] Fix memory leak due to without unref source element - Create __mmplayer_rtsp_src_setup() for clean code Change-Id: Ia2295f1e3d58012389f2a8edc8faa0380faa230d --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index db7128f..2ef3859 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -1,6 +1,6 @@ Name: libmm-player Summary: Multimedia Framework Player Library -Version: 0.6.237 +Version: 0.6.238 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c index ccc7bbd..906be79 100644 --- a/src/mm_player_gst.c +++ b/src/mm_player_gst.c @@ -2823,7 +2823,7 @@ __mmplayer_gst_make_rtsp_src(mmplayer_t *player) return element; } -void __mmplayer_http_src_setup(GstElement *source, gpointer data) +static void __mmplayer_http_src_setup(GstElement *source, gpointer data) { #define HTTP_SOURCE_BLOCK_SIZE (64 * 1024) @@ -2839,29 +2839,24 @@ void __mmplayer_http_src_setup(GstElement *source, gpointer data) LOGD("source element %s", GST_ELEMENT_NAME(source)); - /* get profile attribute */ attrs = MMPLAYER_GET_ATTRS(player); if (!attrs) { LOGE("failed to get content attribute"); return; } - /* get attribute */ mm_attrs_get_string_by_name(attrs, "streaming_cookie", &cookies); mm_attrs_get_string_by_name(attrs, "streaming_user_agent", &user_agent); if (player->ini.http_timeout != DEFAULT_HTTP_TIMEOUT) http_timeout = player->ini.http_timeout; - /* get attribute */ SECURE_LOGD("cookies : %s", cookies); SECURE_LOGD("user_agent : %s", user_agent); LOGD("timeout : %d", http_timeout); - /* setting property to streaming source */ g_object_set(G_OBJECT(source), "timeout", http_timeout, "blocksize", (unsigned long)(HTTP_SOURCE_BLOCK_SIZE), NULL); - /* parsing cookies */ if ((cookie_list = _mmplayer_get_cookie_list((const char *)cookies))) { g_object_set(G_OBJECT(source), "cookies", cookie_list, NULL); g_strfreev(cookie_list); @@ -2874,6 +2869,31 @@ void __mmplayer_http_src_setup(GstElement *source, gpointer data) return; } +static void __mmplayer_rtsp_src_setup(GstElement *source, gpointer data) +{ + mmplayer_t *player = (mmplayer_t *)data; + gchar *user_agent = NULL; + MMHandleType attrs = 0; + + MMPLAYER_FENTER(); + MMPLAYER_RETURN_IF_FAIL(player); + + attrs = MMPLAYER_GET_ATTRS(player); + if (!attrs) { + LOGE("failed to get content attribute"); + return; + } + + mm_attrs_get_string_by_name(attrs, "streaming_user_agent", &user_agent); + + SECURE_LOGD("user_agent : %s", user_agent); + + if (user_agent) + g_object_set(G_OBJECT(source), "user-agent", user_agent, NULL); + + MMPLAYER_FLEAVE(); +} + static void __mmplayer_gst_found_source(GObject *object, GObject *orig, GParamSpec *pspec, gpointer data) { @@ -2891,16 +2911,7 @@ __mmplayer_gst_found_source(GObject *object, GObject *orig, GParamSpec *pspec, g if (MMPLAYER_IS_HTTP_STREAMING(player)) { __mmplayer_http_src_setup(source, data); } else if (MMPLAYER_IS_RTSP_STREAMING(player)) { - gchar *user_agent = NULL; - - /* get attribute */ - mm_attrs_get_string_by_name(player->attrs, "streaming_user_agent", &user_agent); - - SECURE_LOGD("user_agent : %s", user_agent); - - /* setting property to streaming source */ - if (user_agent) - g_object_set(G_OBJECT(source), "user-agent", user_agent, NULL); + __mmplayer_rtsp_src_setup(source, data); } else if (MMPLAYER_IS_SMOOTH_STREAMING(player)) { g_object_set(G_OBJECT(source), "timeout", DEFAULT_HTTP_TIMEOUT, NULL); } else if (player->profile.uri_type == MM_PLAYER_URI_TYPE_MEM) { @@ -2908,10 +2919,12 @@ __mmplayer_gst_found_source(GObject *object, GObject *orig, GParamSpec *pspec, g "size", (gint64)player->profile.input_mem.len, "blocksize", 20480, NULL); _mmplayer_add_signal_connection(player, G_OBJECT(source), MM_PLAYER_SIGNAL_TYPE_OTHERS, "seek-data", - G_CALLBACK(__mmplayer_gst_appsrc_seek_data_mem), (gpointer)&player->profile.input_mem); + G_CALLBACK(__mmplayer_gst_appsrc_seek_data_mem), (gpointer)&player->profile.input_mem); _mmplayer_add_signal_connection(player, G_OBJECT(source), MM_PLAYER_SIGNAL_TYPE_OTHERS, "need-data", - G_CALLBACK(__mmplayer_gst_appsrc_feed_data_mem), (gpointer)&player->profile.input_mem); + G_CALLBACK(__mmplayer_gst_appsrc_feed_data_mem), (gpointer)&player->profile.input_mem); } + gst_object_unref (source); + MMPLAYER_FLEAVE(); }