From da579a79154e8f83e1465ea0c2b30a40c0451d61 Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Tue, 12 Oct 2021 15:35:04 +0900 Subject: [PATCH] [0.6.264] Delete video sink when player set audio only - player has blocked when player set audio only Change-Id: I0cf2b1c51ffc196334b1303cbf23d8803b0c58dc --- packaging/libmm-player.spec | 2 +- src/mm_player_gst.c | 24 ++++++++++++------------ src/mm_player_priv.c | 4 ++++ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 92619d1..9df3d35 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.263 +Version: 0.6.264 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c index 14447fc..2944e42 100644 --- a/src/mm_player_gst.c +++ b/src/mm_player_gst.c @@ -3055,20 +3055,20 @@ __mmplayer_gst_find_child_element(GstBin *bin, const gchar *element_name) MMPLAYER_RETURN_VAL_IF_FAIL(bin && element_name, NULL); iter = gst_bin_iterate_recurse(bin); - if (iter != NULL) { - while (gst_iterator_next(iter, &item) == GST_ITERATOR_OK) { - ch_element = g_value_get_object(&item); - ch_factory = gst_element_get_factory(ch_element); - LOGD("children factory %s", GST_OBJECT_NAME(ch_factory)); - if (g_strrstr(GST_OBJECT_NAME(ch_factory), element_name)) { - LOGD("Find %s element", element_name); - break; - } - ch_element = NULL; - g_value_reset(&item); + MMPLAYER_RETURN_VAL_IF_FAIL(iter, NULL); + + while (gst_iterator_next(iter, &item) == GST_ITERATOR_OK) { + ch_element = g_value_get_object(&item); + ch_factory = gst_element_get_factory(ch_element); + LOGD("children factory %s", GST_OBJECT_NAME(ch_factory)); + if (g_strrstr(GST_OBJECT_NAME(ch_factory), element_name)) { + LOGD("Find %s element", element_name); + break; } - gst_iterator_free(iter); + ch_element = NULL; + g_value_reset(&item); } + gst_iterator_free(iter); MMPLAYER_FLEAVE(); return ch_element; diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index b4114f0..6f88332 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -2270,6 +2270,8 @@ _mmplayer_set_audio_only(MMHandleType hplayer, bool audio_only) player->pipeline->videobin[MMPLAYER_V_SINK].gst, MM_ERROR_PLAYER_NO_OP); /* invalid op */ + __mmplayer_del_sink(player, player->pipeline->videobin[MMPLAYER_V_SINK].gst); + __mmplayer_switch_stream(player, MM_PLAYER_TRACK_TYPE_VIDEO, INVALID_TRACK_INDEX); /* release decoder resource */ @@ -7597,6 +7599,8 @@ _mmplayer_gst_decode_pad_removed(GstElement *elem, GstPad *pad, __mmplayer_release_signal_connection(player, MM_PLAYER_SIGNAL_TYPE_VIDEOBIN); + __mmplayer_del_sink(player, videobin[MMPLAYER_V_SINK].gst); + if (!gst_bin_remove(GST_BIN_CAST(mainbin[MMPLAYER_M_PIPE].gst), videobin[MMPLAYER_V_BIN].gst)) { LOGE("failed to remove videobin"); gst_object_unref(GST_OBJECT(videobin[MMPLAYER_V_BIN].gst)); -- 2.7.4