mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-20 11:00:16 +00:00
29289ee79e
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). |
||
---|---|---|
.. | ||
.gitignore | ||
gstadapter.c | ||
gstadapter.h | ||
gstbasesink.c | ||
gstbasesink.h | ||
gstbasesrc.c | ||
gstbasesrc.h | ||
gstbasetransform.c | ||
gstbasetransform.h | ||
gstbitreader.c | ||
gstbitreader.h | ||
gstbytereader-docs.h | ||
gstbytereader.c | ||
gstbytereader.h | ||
gstbytewriter.c | ||
gstbytewriter.h | ||
gstcollectpads.c | ||
gstcollectpads.h | ||
gstdataqueue.c | ||
gstdataqueue.h | ||
gstpushsrc.c | ||
gstpushsrc.h | ||
gsttypefindhelper.c | ||
gsttypefindhelper.h | ||
Makefile.am | ||
README |
Base classes ------------ GstBaseSink FIXME: not much point making it operate in pull mode as a generic base class I guess...