[gst-devel] Immutable structure when GstQuery is referenced more than once

José Alburquerque jaalburquerque at cox.net
Thu Jan 10 22:22:35 CET 2008


As you might know, I'm working on C++ bindings for gst (if interested in 
testing or looking at it, it can be checked out via svn using the url 
http://svn.gnome.org/svn/gnomemm/gstreamermm/trunk).  I just finished 
wrapping the GstQuery and modified a mini ogg player application I had 
written to test element querying (specifically I modified a call back 
function, which is called when the forward button in the application is 
pressed, to query the main pipeline for the stream position which is 
displayed in the main window).

I'm getting a couple of warnings which I think are related to the how 
many references to the GstQuery I have before I send the query.  This is 
what they look like:

(lt-oggplayer:7134): GStreamer-CRITICAL **: gst_structure_id_set_valist: 
assertion `IS_MUTABLE (structure)' failed

(lt-oggplayer:7134): GStreamer-CRITICAL **: gst_structure_id_set_valist: 
assertion `IS_MUTABLE (structure)' failed

I'm pretty sure I get these because I'm referencing the GstQuery more 
than once before the call to gst_element_query().  The referencing 
occurs in the C++ code because we've made a class for each of the 
queries and use/create/pass them only with an "auto pointer" class 
(called RefPtr) which automatically references and unreferences 
gobjects/miniobjects.  The extra reference to the GstQuery occurs 
because of a C++ cast of the auto pointer from referring to the base 
Query class to a derived QueryPosition class (shown below to clarify) 
just before the element query (in the if statement):

void PlayerWindow::on_forward(void)
{
    ...
    Gst::Format fmt = Gst::FORMAT_TIME;

    Glib::RefPtr<Gst::Query> query = Gst::QueryPosition::create(fmt);

    // Cast from base to derived
    Glib::RefPtr<Gst::QueryPosition> posQuery =
        Glib::RefPtr<Gst::QueryPosition>::cast_dynamic(query);

    if (mainPipeline->query(posQuery))
    {
    ...
    }
}

I know that the cast causes the warnings because they go away without 
it.  Is there a reason a GstQuery's structure becomes immutable if it is 
referenced more than once?  Thanks.

-Jose




More information about the gstreamer-devel mailing list