From: Volodymyr Brynza Date: Thu, 2 Feb 2017 11:26:20 +0000 (+0200) Subject: fix memory leak X-Git-Tag: submit/tizen/20170206.043356^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F09%2F112709%2F2;p=platform%2Fcore%2Fapi%2Fmediastreamer.git fix memory leak Change-Id: I4687b9f4949ecaac16e44bdd210a5ed4d1964b6a Signed-off-by: Volodymyr Brynza --- diff --git a/packaging/capi-media-streamer.spec b/packaging/capi-media-streamer.spec index 89c0c35..646ff93 100644 --- a/packaging/capi-media-streamer.spec +++ b/packaging/capi-media-streamer.spec @@ -1,6 +1,6 @@ Name: capi-media-streamer Summary: A Media Streamer API -Version: 0.1.12 +Version: 0.1.13 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_streamer_gst.c b/src/media_streamer_gst.c index c592087..3ac83fc 100644 --- a/src/media_streamer_gst.c +++ b/src/media_streamer_gst.c @@ -1172,6 +1172,7 @@ GstElement *__ms_video_decoder_element_create(node_plug_s *plug_info, media_stre GstElement *__ms_audio_encoder_element_create(node_plug_s *plug_info, media_streamer_node_type_e type) { GstCaps *enc_caps = plug_info->src_caps; + gchar *encoder_name = NULL; if (!enc_caps) { enc_caps = gst_caps_from_string(MEDIA_STREAMER_DEFAULT_AUDIO_FORMAT); ms_debug("No Audio encoding format is set! Deafault will be: [%s]", MEDIA_STREAMER_DEFAULT_AUDIO_FORMAT); @@ -1192,8 +1193,10 @@ GstElement *__ms_audio_encoder_element_create(node_plug_s *plug_info, media_stre if (!audio_encoder) audio_encoder = __ms_element_create_by_registry(&plug_info_encoder, type); - if (g_strrstr(gst_element_get_name(audio_encoder), "aac")) + encoder_name = gst_element_get_name(audio_encoder); + if (encoder_name && g_strrstr(encoder_name, "aac")) g_object_set(audio_encoder, "compliance", -2, NULL); + MS_SAFE_GFREE(encoder_name); /* Creating bin - Audio Encoder */ GstElement *audio_enc_bin = gst_bin_new("audio_encoder"); diff --git a/src/media_streamer_node.c b/src/media_streamer_node.c index ced5323..0f69deb 100644 --- a/src/media_streamer_node.c +++ b/src/media_streamer_node.c @@ -657,6 +657,7 @@ int __ms_sink_node_create(media_streamer_node_s *node) case MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY: plugin_name = __ms_ini_get_string("node type 2:overlay", DEFAULT_VIDEO_SINK); node->gst_element = __ms_element_create(plugin_name, NULL); + g_object_set(node->gst_element, "use-tbm", FALSE, NULL); break; case MEDIA_STREAMER_NODE_SINK_TYPE_FAKE: plugin_name = __ms_ini_get_string("node type 2:fake", DEFAULT_FAKE_SINK); @@ -1567,16 +1568,20 @@ gboolean _ms_node_resouces_acquire_iter(const GValue *item, GValue *ret, gpointe then apprently this element doesn't require resources */ ms_info("Failed to found corresonding node [%s] inside streamer", GST_ELEMENT_NAME(element)); g_value_set_boolean(ret, TRUE); + g_object_unref(element); return TRUE; } if (MEDIA_STREAMER_ERROR_NONE != _ms_node_resource_aquire(node)) { ms_error("Failed to acquire resource for node [%s]", node->name); + g_object_unref(element); return FALSE; } g_value_set_boolean(ret, TRUE); + g_object_unref(element); + return TRUE; } @@ -1597,16 +1602,20 @@ gboolean _ms_node_resouces_release_iter(const GValue *item, GValue *ret, gpointe then apprently this element doesn't require resources. */ ms_debug("Failed to found corresonding node [%s] inside streamer", GST_ELEMENT_NAME(element)); g_value_set_boolean(ret, TRUE); + g_object_unref(element); return TRUE; } if (MEDIA_STREAMER_ERROR_NONE != _ms_node_resource_release(node)) { ms_error("Failed to release resource for node [%s]", node->name); + g_object_unref(element); return FALSE; } g_value_set_boolean(ret, TRUE); + g_object_unref(element); + return TRUE; } @@ -1627,15 +1636,19 @@ gboolean _ms_node_policy_check_iter(const GValue *item, GValue *ret, gpointer us then apprently this element doesn't require resources */ ms_info("Failed to found corresonding node [%s] inside streamer", GST_ELEMENT_NAME(element)); g_value_set_boolean(ret, TRUE); + g_object_unref(element); return TRUE; } if (MEDIA_STREAMER_ERROR_NONE != _ms_node_policy_check(node)) { ms_error("Failed to check policy for node [%s]", node->name); + g_object_unref(element); return FALSE; } g_value_set_boolean(ret, TRUE); + g_object_unref(element); + return TRUE; } diff --git a/src/media_streamer_node_resources.c b/src/media_streamer_node_resources.c index 2f69001..dbf8c54 100644 --- a/src/media_streamer_node_resources.c +++ b/src/media_streamer_node_resources.c @@ -74,6 +74,12 @@ static gboolean __ms_node_resources_is_needed_by_platform(media_streamer_node_s are platform dependent */ system_info_get_platform_string("http://tizen.org/system/model_name", &model_name); system_info_get_platform_string("http://tizen.org/system/platform.processor", &platform_processor); + if (!model_name || ! platform_processor) { + ms_error("Failed to get information about platform check resources"); + MS_SAFE_FREE(model_name); + MS_SAFE_FREE(platform_processor); + return TRUE; + } ms_info("Check for resources for model_name %s, platform.processor %s", model_name, platform_processor); switch (type) { @@ -97,6 +103,9 @@ static gboolean __ms_node_resources_is_needed_by_platform(media_streamer_node_s break; } + MS_SAFE_FREE(model_name); + MS_SAFE_FREE(platform_processor); + return ret; }