From fbf13cbbf1cd2061d19fb784af2cc5fd91fb5e40 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sat, 13 Jan 2007 19:12:32 +0000 Subject: gst/interleave/deinterleave.c (gst_deinterleave_add_new_pads): Use fixed caps on src pads. Original commit message from CVS: 2007-01-13 Andy Wingo * 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/deinterleave.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'gst/interleave/deinterleave.c') diff --git a/gst/interleave/deinterleave.c b/gst/interleave/deinterleave.c index 09f19e15..f5c238de 100644 --- a/gst/interleave/deinterleave.c +++ b/gst/interleave/deinterleave.c @@ -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 */ -- cgit v1.2.1