[0.6.279] Fix the bug that adds the same stream 59/291859/4
authorGilbok Lee <gilbok.lee@samsung.com>
Mon, 24 Apr 2023 07:17:47 +0000 (16:17 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Wed, 26 Apr 2023 02:28:13 +0000 (11:28 +0900)
Change-Id: I4630acb8c160b679fb57e610e2e5d91cbb5cbb79

packaging/libmm-player.spec
src/mm_player_gst.c

index 0b6a946..070e019 100644 (file)
@@ -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
index 6679d43..7a88a4e 100644 (file)
@@ -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);