mpegts: Handle glib < 2.58
authorEdward Hervey <edward@centricular.com>
Thu, 10 Mar 2022 09:33:56 +0000 (10:33 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 10 Mar 2022 17:24:45 +0000 (17:24 +0000)
By using a workaround to the lack of g_ptr_array_steal_index.

Fixes #1078

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1917>

subprojects/gst-plugins-bad/gst/mpegtsdemux/mpegtsbase.c
subprojects/gst-plugins-bad/gst/mpegtsdemux/mpegtsbase.h

index 76aa2e7..4675dc8 100644 (file)
@@ -501,8 +501,15 @@ mpegts_base_steal_program (MpegTSBase * base, gint program_number)
 
   for (i = 0; i < base->programs->len; i++) {
     MpegTSBaseProgram *program = g_ptr_array_index (base->programs, i);
-    if (program->program_number == program_number)
+    if (program->program_number == program_number) {
+#if GLIB_CHECK_VERSION(2, 58, 0)
       return g_ptr_array_steal_index (base->programs, i);
+#else
+      program->recycle = TRUE;
+      g_ptr_array_remove_index (base->programs, i);
+      return program;
+#endif
+    }
   }
 
   return NULL;
@@ -523,6 +530,11 @@ mpegts_base_free_program (MpegTSBaseProgram * program)
 {
   GList *tmp;
 
+  if (program->recycle) {
+    program->recycle = FALSE;
+    return;
+  }
+
   if (program->pmt) {
     gst_mpegts_section_unref (program->section);
     program->pmt = NULL;
index 8965c48..3d463f4 100644 (file)
@@ -95,6 +95,9 @@ struct _MpegTSBaseProgram
   gboolean active;
   /* TRUE if this is the first program created */
   gboolean initial_program;
+
+  /* TRUE if the program shouldn't be freed */
+  gboolean recycle;
 };
 
 typedef enum {