diff options
author | Andy Wingo <wingo@pobox.com> | 2007-01-13 19:12:32 +0000 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2007-01-13 19:12:32 +0000 |
commit | fbf13cbbf1cd2061d19fb784af2cc5fd91fb5e40 (patch) | |
tree | 287a5575c9c75889fecca01e8250df445e2438c9 /gst/interleave | |
parent | 25b0abdd803d60a217e1080388e2ce783e8e5082 (diff) | |
download | gst-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')
-rw-r--r-- | gst/interleave/deinterleave.c | 16 |
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 */ |