decide_allocation_vfunc of Gst::BaseSrc takes an extra refrence of Glib::RefPtr<Gst::Query>& query
Hi ,
the default implementation of decide_allocation_vfunc fails with (test_issue:6649): GStreamer-CRITICAL **: 15:11:32.380: gst_structure_id_take_value: assertion 'IS_MUTABLE (structure)' failed
//this fails
virtual bool decide_allocation_vfunc(const Glib::RefPtr<Gst::Query>& query) override
{
const auto pushsrc = static_cast<BaseClassType*>(g_type_class_peek_parent(G_OBJECT_GET_CLASS(gobject_)) // Get the parent class of the object class (The original underlying C class).
);
std::cout << "Query is writable :" << query->is_writable() << std::endl;
const auto base = (GstBaseSrcClass *) pushsrc;
// This fails
if (base && base->decide_allocation)
{
auto * newquery = Glib::unwrap(query);
bool retval((*base->decide_allocation)((GstBaseSrc *) gobj(), newquery));
return retval;
}
typedef bool RType;
return RType();
}
//this succeeds
virtual bool decide_allocation_vfunc(const Glib::RefPtr<Gst::Query>& query) override
{
const auto base = static_cast<BaseClassType*>(
g_type_class_peek_parent(G_OBJECT_GET_CLASS(gobject_)) // Get the parent class of the object class (The original underlying C class).
);
const auto newbase = (_GstBaseSrcClass *) base;
if(newbase && newbase->decide_allocation)
{
auto * newquery = Glib::unwrap(query);
newquery->mini_object.refcount--;
bool retval((*newbase->decide_allocation)((GstBaseSrc*)gobj(),newquery));
newquery->mini_object.refcount++;
return retval;
}
typedef bool RType;
return RType();
}
please advise