[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