[Bug 728268] New: Need a way to detect that pool haven't changed, is active, and does not need to be renegotiated
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Tue Apr 15 07:39:16 PDT 2014
https://bugzilla.gnome.org/show_bug.cgi?id=728268
GStreamer | gstreamer (core) | unspecified
Summary: Need a way to detect that pool haven't changed, is
active, and does not need to be renegotiated
Classification: Platform
Product: GStreamer
Version: unspecified
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: gstreamer (core)
AssignedTo: gstreamer-bugs at lists.freedesktop.org
ReportedBy: nicolas.dufresne at collabora.co.uk
QAContact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
Currently base classes blindly call decide_allocation() whenever a reconfigure
event is triggered. It assumed that pools found in the query and selected by
the element are not active. In most cases, the second query endup with the same
pool (which is active, hence configuration cannot be changed) and settings are
still compatible.
This issue can be triggered with pipelines like this one (VideoDecoder):
GST_DEBUG=3 gst-launch-1.0 videotestsrc ! jpegenc ! decodebin ! xvimagesink
Trace:
bufferpool gstbufferpool.c:632:gst_buffer_pool_set_config:<xvimagebufferpool0>
can't change config, we are active
And this one (BaseSrc):
bufferpool gstbufferpool.c:632:gst_buffer_pool_set_config:<xvimagebufferpool0>
can't change config, we are active
I'm not fully certain what is right and what is wrong in current
implementation. It seems that most active pool detection is required, that some
helper to detect "compatible" config would be nice.
I also have the impression that setting the config should be done once, most
likely by the base class, but that I'm not so clear, since there is no way to
tell the base class we want to enabled certain options.
Finally, for decoders, it's not always possible to switch pool right away.
Buffers from the pool could be used as the decoder observation, so releasing
them at any moment could break the image. Instead, the renegotiation should be
handled asynchronously. Waiting for a sync point, draining, stopping the pool,
and then operating the allocation query. We need a way to tell the base class
about that, and implement an asynchronous mechanism for it.
This not exactly a plan, so input would be appreciated.
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list