From b7c18f2904b0a23b8d5e09931890d0b7273049e3 Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Mon, 24 Apr 2023 16:17:47 +0900 Subject: [PATCH] [0.6.279] Fix the bug that adds the same stream Change-Id: I4630acb8c160b679fb57e610e2e5d91cbb5cbb79 --- packaging/libmm-player.spec | 2 +- src/mm_player_gst.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 0b6a946..070e019 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.278 +Version: 0.6.279 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c index 6679d43..7a88a4e 100644 --- a/src/mm_player_gst.c +++ b/src/mm_player_gst.c @@ -2868,6 +2868,40 @@ __mmplayer_gst_found_source(GObject *object, GObject *orig, GParamSpec *pspec, g MMPLAYER_FLEAVE(); } +static gboolean +__mmplayer_stream_equal(gconstpointer stream1, gconstpointer stream2) +{ + const gchar *stream1_id = gst_stream_get_stream_id((GstStream *)stream1); + const gchar *stream2_id = gst_stream_get_stream_id((GstStream *)stream2); + + return (g_strcmp0(stream1_id, stream2_id) == 0); +} + +static gboolean +__mmplayer_has_duplicated_stream(mmplayer_t *player, GstStreamType stype, GstStream *stream) +{ + mmplayer_track_type_e type = MM_PLAYER_TRACK_TYPE_MAX; + MMPLAYER_FENTER(); + MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE); + + switch (stype) { + case GST_STREAM_TYPE_AUDIO: + type = MM_PLAYER_TRACK_TYPE_AUDIO; + break; + case GST_STREAM_TYPE_VIDEO: + type = MM_PLAYER_TRACK_TYPE_VIDEO; + break; + case GST_STREAM_TYPE_TEXT: + type = MM_PLAYER_TRACK_TYPE_TEXT; + break; + default: + LOGD("Skip not supported stream stype"); + return FALSE; + } + + return g_ptr_array_find_with_equal_func(player->track[type].streams, stream, __mmplayer_stream_equal, NULL); +} + static gint __mmplayer_gst_select_stream (GstElement * uridecodebin, GstStreamCollection * collection, GstStream * stream, gpointer data) @@ -2885,6 +2919,12 @@ __mmplayer_gst_select_stream (GstElement * uridecodebin, GstStreamCollection * c gst_stream_get_stream_flags(stream)); LOGD(" ID: %s", gst_stream_get_stream_id(stream)); + if (__mmplayer_has_duplicated_stream(player, stype, stream)) { + LOGD("Already added stream, skip it"); + ret = 0; + goto EXIT; + } + if (caps) { caps_str = gst_caps_to_string(caps); caps_structure = gst_caps_get_structure(caps, 0); -- 2.7.4