gst/mpegtsparse/mpegtsparse.c: Actually copy the structure passed in when assigning...
authorZaheer Abbas Merali <zaheerabbas@merali.org>
Mon, 6 Oct 2008 12:01:14 +0000 (12:01 +0000)
committerZaheer Abbas Merali <zaheerabbas@merali.org>
Mon, 6 Oct 2008 12:01:14 +0000 (12:01 +0000)
Original commit message from CVS:
* gst/mpegtsparse/mpegtsparse.c:
Actually copy the structure passed in when assigning it because
it gets freed straight after the function call.
Re: pat_info and pmt_info GstStructures.

ChangeLog
common
gst/mpegtsparse/mpegtsparse.c

index 1496833..cfe3d65 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-10-06  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
 
+       * gst/mpegtsparse/mpegtsparse.c:
+       Actually copy the structure passed in when assigning it because
+       it gets freed straight after the function call.
+       Re: pat_info and pmt_info GstStructures.
+
+2008-10-06  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
        Patch by: Josep Torra
 
        * gst/mpegdemux/gstmpegtsdemux.c:
diff --git a/common b/common
index 1ff63d8..ea93f2e 160000 (submodule)
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 1ff63d8f92c36bf207434436f4ce75f2a4ea11a4
+Subproject commit ea93f2ed580bcc19322e4c07f677eda980c821eb
index 3aa49db..0886def 100644 (file)
@@ -851,7 +851,7 @@ mpegts_parse_apply_pat (MpegTSParse * parse, GstStructure * pat_info)
   gchar *dbg;
 
   old_pat = parse->pat;
-  parse->pat = pat_info;
+  parse->pat = gst_structure_copy (pat_info);
 
   dbg = gst_structure_to_string (pat_info);
   GST_INFO_OBJECT (parse, "PAT %s", dbg);
@@ -975,14 +975,16 @@ mpegts_parse_apply_pmt (MpegTSParse * parse,
       for (i = 0; i < gst_value_list_get_size (old_streams); ++i) {
         value = gst_value_list_get_value (old_streams, i);
         stream = g_value_get_boxed (value);
-
         gst_structure_get_uint (stream, "pid", &pid);
         gst_structure_get_uint (stream, "stream-type", &stream_type);
         mpegts_parse_program_remove_stream (parse, program, (guint16) pid);
       }
+
       /* remove pcr stream */
       mpegts_parse_program_remove_stream (parse, program, program->pcr_pid);
+
       gst_structure_free (program->pmt_info);
+      program->pmt_info = NULL;
     }
   } else {
     /* no PAT?? */
@@ -992,7 +994,7 @@ mpegts_parse_apply_pmt (MpegTSParse * parse,
   }
 
   /* activate new pmt */
-  program->pmt_info = pmt_info;
+  program->pmt_info = gst_structure_copy (pmt_info);
   program->pmt_pid = pmt_pid;
   program->pcr_pid = pcr_pid;
   mpegts_parse_program_add_stream (parse, program, (guint16) pcr_pid, -1);