summaryrefslogtreecommitdiffstats
path: root/gst/interleave/deinterleave.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2007-01-13 19:12:32 +0000
committerAndy Wingo <wingo@pobox.com>2007-01-13 19:12:32 +0000
commitfbf13cbbf1cd2061d19fb784af2cc5fd91fb5e40 (patch)
tree287a5575c9c75889fecca01e8250df445e2438c9 /gst/interleave/deinterleave.c
parent25b0abdd803d60a217e1080388e2ce783e8e5082 (diff)
downloadgst-plugins-bad-fbf13cbbf1cd2061d19fb784af2cc5fd91fb5e40.tar.gz
gst-plugins-bad-fbf13cbbf1cd2061d19fb784af2cc5fd91fb5e40.tar.bz2
gst-plugins-bad-fbf13cbbf1cd2061d19fb784af2cc5fd91fb5e40.zip
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 <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.
Diffstat (limited to 'gst/interleave/deinterleave.c')
-rw-r--r--gst/interleave/deinterleave.c16
1 files changed, 11 insertions, 5 deletions
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 */