gst/interleave/deinterleave.c (gst_deinterleave_add_new_pads): Use fixed caps on...
authorAndy Wingo <wingo@pobox.com>
Sat, 13 Jan 2007 19:12:32 +0000 (19:12 +0000)
committerAndy Wingo <wingo@pobox.com>
Sat, 13 Jan 2007 19:12:32 +0000 (19:12 +0000)
Original commit message from CVS:
2007-01-13  Andy Wingo  <wingo@pobox.com>

* gst/interleave/deinterleave.c (gst_deinterleave_add_new_pads):
Use fixed caps on src pads.
(gst_deinterleave_remove_pads): Remove src pads, not sink pads. I
seem to have reverse midas disease!
(gst_deinterleave_process): Proxy timestamps, offsets, durations,
and set caps on outgoing buffers. Fixes #395597, I think.

ChangeLog
gst/interleave/deinterleave.c

index 86283d5469802cbe8be46716b9c3862507752385..8e44f7ddc2a81b20c0fea2abce4c4101b2d79da3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2007-01-13  Andy Wingo  <wingo@pobox.com>
 
+       * gst/interleave/deinterleave.c (gst_deinterleave_add_new_pads):
+       Use fixed caps on src pads.
+       (gst_deinterleave_remove_pads): Remove src pads, not sink pads. I
+       seem to have reverse midas disease!
+       (gst_deinterleave_process): Proxy timestamps, offsets, durations,
+       and set caps on outgoing buffers. Fixes #395597, I think.
+
        * gst/interleave/interleave.c (gst_interleave_init): Init the
        activation mode properly.
        (gst_interleave_src_setcaps, gst_interleave_src_getcaps)
index 09f19e15f47c5ac85e4a88476d7feb7f3c8e2785..f5c238dee2056025bcd3022a0235d9e0a7cc764f 100644 (file)
@@ -143,6 +143,7 @@ gst_deinterleave_add_new_pads (GstDeinterleave * self, GstCaps * caps)
     pad = gst_pad_new_from_static_template (&src_template, name);
     g_free (name);
     gst_pad_set_caps (pad, caps);
+    gst_pad_use_fixed_caps (pad);
     GST_PAD_UNSET_FLUSHING (pad);
     gst_element_add_pad (GST_ELEMENT (self), pad);
   }
@@ -154,22 +155,21 @@ static void
 gst_deinterleave_remove_pads (GstDeinterleave * self)
 {
   GstElement *elem;
-  GList *sinks, *l;
+  GList *srcs, *l;
 
   elem = GST_ELEMENT (self);
 
   GST_INFO_OBJECT (self, "remove_pads()");
 
-  sinks = g_list_copy (elem->sinkpads);
+  srcs = g_list_copy (elem->srcpads);
 
-  for (l = sinks; l; l = l->next)
-    /* force set_caps when going to RUNNING, see note in set_caps */
+  for (l = srcs; l; l = l->next)
     gst_element_remove_pad (elem, GST_PAD (l->data));
 
   gst_pad_set_caps (self->sink, NULL);
   gst_caps_replace (&self->sinkcaps, NULL);
 
-  g_list_free (sinks);
+  g_list_free (srcs);
 }
 
 static gboolean
@@ -248,6 +248,12 @@ gst_deinterleave_process (GstDeinterleave * self, GstBuffer * buf)
       goto alloc_buffer_failed;
     if (buffers_out[i] && GST_BUFFER_SIZE (buffers_out[i]) != bufsize)
       goto alloc_buffer_bad_size;
+
+    if (buffers_out[i]) {
+      GST_BUFFER_TIMESTAMP (buffers_out[i]) = GST_BUFFER_TIMESTAMP (buf);
+      GST_BUFFER_OFFSET (buffers_out[i]) = GST_BUFFER_OFFSET (buf);
+      GST_BUFFER_DURATION (buffers_out[i]) = GST_BUFFER_DURATION (buf);
+    }
   }
 
   /* do the thing */