gstreamer/libs/gst
Rob Clark 29289ee79e basetransform fix for upstream caps-renegotiation
If initially pass-through caps are negotiated between a transform element's
sink and src pads, but then the downstream element returns different caps
on a buffer from pad_alloc(), basetransform gets stuck with proxy_alloc=TRUE
even though the upstream peer doesn't accept the caps, causing
gst_pad_peer_accept_caps() to be called on each buffer in _buffer_alloc():

    if (!gst_caps_is_equal (newcaps, caps)) {
      GST_DEBUG_OBJECT (trans, "caps are new");
      /* we have new caps, see if we can proxy downstream */
>>    if (gst_pad_peer_accept_caps (pad, newcaps)) {
        /* peer accepts the caps, return a buffer in this format */
        GST_DEBUG_OBJECT (trans, "peer accepted new caps");

which is taking ~40ms/frame.

This patch does two things.  (1) if the buffer returned from pad_alloc() has
new caps, trigger the decision whether to proxy the buffer-alloc to be
revisited, and (2) disable proxy if peer does not accept new caps.  (The first
part may not be strictly needed, but seemed like a good idea.)

Note that this issue would not arise except in case of downstream elements
who have on their template-caps, some that would be suitable for pass-through,
but at runtime pick more restrictive caps (for ex, after querying a driver for
what formats it actually supports).
2010-07-27 17:34:49 +02:00
..
base basetransform fix for upstream caps-renegotiation 2010-07-27 17:34:49 +02:00
check gstcheck: fix some silly list iteration code 2010-07-16 18:20:57 +01:00
controller controller: Fix build with GST_REMOVE_DEPRECATED 2010-06-25 18:25:40 +02:00
dataprotocol libs: point gobject-introspection scanner to .la files 2010-04-03 13:41:52 +01:00
helpers build: when building executables, put libs to link to into LDADD instead of LDFLAGS 2010-04-14 11:23:37 +01:00
net libs: point gobject-introspection scanner to .la files 2010-04-03 13:41:52 +01:00
Makefile.am registry: Add registry helper phase 1 2009-10-06 19:51:42 +01:00