Hi Ankur, This looks to mi like a bug in gstreamermm. Could you please report it here: https://gitlab.gnome.org/GNOME/gstreamermm/issues/new ? Thank you a lot!
2018-06-14 8:38 GMT+01:00 Ankur Deep Jaiswal <an...@techgentsia.com>: > > Hi Daniel, > sorry for that , please find the GDB trace for it > > 1. the GDB trace when we use > gboolean *query_event*(const Glib::RefPtr<Gst::Pad>& pad, > Glib::RefPtr<Gst::Query>& queryevent) > { > switch (queryevent->get_query_type()) > { > case Gst::QueryType::QUERY_CAPS: > { > Glib::RefPtr<Gst::QueryCaps> querycaps = > Glib::RefPtr<Gst::QueryCaps>::cast_static(queryevent); > auto newquerycaps = Glib::RefPtr<Gst::QueryCaps>:: > cast_static(querycaps->create_writable()); > auto caps = Gst::Caps::create_from_string( > "video/x-h264, stream-format=(string)byte-stream, > alignment=(string)au"); > newquerycaps->set_caps_result(caps); */ > > return true; > } > } > return false; > } > > GStreamer-CRITICAL **: 12:55:41.181: gst_mini_object_ref: assertion > 'mini_object != NULL' failed > > #0 0x00007ffff66edc41 in () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #1 0x00007ffff66eef2b in g_logv () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #2 0x00007ffff66ef07f in g_log () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #3 0x00007ffff7897942 in gst_mini_object_ref (mini_object=0x0) at > gstminiobject.c:344 > old_refcount = <optimized out> > new_refcount = <optimized out> > __func__ = "gst_mini_object_ref" > __PRETTY_FUNCTION__ = "gst_mini_object_ref" > #4 0x00007ffff78dcee4 in gst_caps_ref (caps=<optimized out>) at > ../gst/gstcaps.h:210 > result = 0x0 > query = 0x55555589f990 > __func__ = "gst_pad_query_caps" > __PRETTY_FUNCTION__ = "gst_pad_query_caps" > #5 0x00007ffff78dcee4 in gst_pad_query_caps (pad=pad@entry=0x5555558a6180, > filter=filter@entry=0x0) at gstutils.c:3045 > result = 0x0 > query = 0x55555589f990 > __func__ = "gst_pad_query_caps" > __PRETTY_FUNCTION__ = "gst_pad_query_caps" > #6 0x00007ffff7899352 in gst_pad_link_check_compatible_unlocked > (flags=1435133496, sink=0x5555558a6620, src=0x5555558a6180) at gstpad.c:2259 > srccaps = 0x0 > sinkcaps = 0x0 > compatible = 0 > __PRETTY_FUNCTION__ = "gst_pad_link_prepare" > #7 0x00007ffff7899352 in gst_pad_link_prepare > (srcpad=srcpad@entry=0x5555558a6180, > sinkpad=sinkpad@entry=0x5555558a6620, > flags=flags@entry=GST_PAD_LINK_CHECK_DEFAULT) > at gstpad.c:2397 > __PRETTY_FUNCTION__ = "gst_pad_link_prepare" > #8 0x00007ffff78a61ea in gst_pad_link_full (srcpad=0x5555558a6180, > sinkpad=0x5555558a6620, flags=GST_PAD_LINK_CHECK_DEFAULT) at gstpad.c:2524 > result = <optimized out> > parent = 0x5555558a41a0 > srcfunc = <optimized out> > sinkfunc = <optimized out> > __func__ = "gst_pad_link_full" > __PRETTY_FUNCTION__ = "gst_pad_link_full" > #9 0x000055555555970e in main() () at ../src/test_issue.cpp:76 > srcpad = {pCppObject_ = 0x55555587c000} > sinkpad = {pCppObject_ = 0x5555558ab7a0} > linkreturn = Gst::PAD_LINK_OK > major = 1 > minor = 14 > micro = 0 > nano = 0 > main_loop = {pCppObject_ = 0x555555894930} > nano_str = 0x55555555d41f "" > pipeline = {pCppObject_ = 0x5555558840a0} > ---Type <return> to continue, or q <return> to quit--- > rtpbin = {pCppObject_ = 0x5555558a1eb0} > h264encoder = {pCppObject_ = 0x5555558a1f90} > rtph264pay = {pCppObject_ = 0x5555558a9850} > udpsink = {pCppObject_ = 0x5555557eae00} > host = "127.0.0.1" > t = {_M_id = {_M_thread = 93824995540992}} > > > 2. the GDB backtrace when we use > > 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; > > 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(); > } > > GStreamer-CRITICAL **: 13:06:42.029: gst_structure_id_take_value: > assertion 'IS_MUTABLE (structure)' failed > > #0 0x00007ffff66edc41 in () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #1 0x00007ffff66eef2b in g_logv () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #2 0x00007ffff66ef07f in g_log () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #3 0x00007ffff78c5154 in gst_structure_id_take_value > (structure=structure@entry=0x7fffe4003260, field=field@entry=392, > value=value@entry=0x7fffeef2ea90) > at gststructure.c:565 > __func__ = "gst_structure_id_take_value" > #4 0x00007ffff78b619e in ensure_array (s=0x7fffe4003260, quark=392, > element_size=<optimized out>, clear_func=<optimized out>) at gstquery.c:863 > new_array_val = > {g_type = 140737018618784, data = {{v_int = -469756720, > v_uint = 3825210576, v_long = 140737018598608, v_ulong = 140737018598608, > v_int64 = 140737018598608, v_uint64 = 140737018598608, v_float = > -9.45073176e+21, v_double = 6.9533325987692788e-310, v_pointer = > 0x7fffe40014d0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = > 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}} > array = <optimized out> > value = <optimized out> > clear_func = <optimized out> > element_size = <optimized out> > s = 0x7fffe4003260 > quark = 392 > array = <optimized out> > value = <optimized out> > #5 0x00007ffff78b89b2 in gst_query_get_n_allocation_params > (query=query@entry=0x7fffe4004450) at gstquery.c:2003 > array = <optimized out> > structure = <optimized out> > __func__ = "gst_query_get_n_allocation_params" > #6 0x00007ffff7b99939 in gst_base_src_decide_allocation_default > (basesrc=0x5555558a41a0, query=0x7fffe4004450) at gstbasesrc.c:3148 > outcaps = 0x0 > pool = 0x7ffff5ed2760 > size = 21845 > min = 0 > max = 0 > allocator = 0x7fffeef2eb40 > params = > {flags = (GST_MEMORY_FLAG_READONLY | unknown: 8), align = > 140737315791691, prefix = 93824994381856, padding = 140737322705423, > _gst_reserved = {0x1, 0x555555761020 <std::cout@@GLIBCXX_3.4>, > 0x555555761020 <std::cout@@GLIBCXX_3.4>, 0x7ffff5ed2760 > <_IO_2_1_stdout_>}} > config = <optimized out> > update_allocator = <optimized out> > __PRETTY_FUNCTION__ = "gst_base_src_decide_allocation_default" > #7 0x000055555555abbd in > FooSrc::decide_allocation_vfunc(Glib::RefPtr<Gst::Query> > const&) (this=0x5555558a1f90, query=...) at ../src/Foosrc.h:65 > newquery = 0x7fffe4004450 > retval = false > pushsrc = 0x555555894e80 > base = 0x555555894e80 > #8 0x00007ffff7537e8b in Gst::BaseSrc_Class::decide_ > allocation_vfunc_callback(_GstBaseSrc*, _GstQuery*) (self=0x5555558a41a0, > query=0x7fffe4004450) > at basesrc.cc:885 > obj = 0x5555558a1f90 > ---Type <return> to continue, or q <return> to quit--- > obj_base = <optimized out> > base = <optimized out> > #9 0x00007ffff7b9de24 in gst_base_src_prepare_allocation (caps=0x0, > basesrc=0x5555558a41a0) at gstbasesrc.c:3241 > bclass = 0x555555895a00 > pool = 0x0 > allocator = 0x0 > params = > {flags = (unknown: 1), align = 140737202285712, prefix = > 93824995779792, padding = 140737346381359, _gst_reserved = {0x2500000000, > 0x7fffe4001320, 0x0, 0x0}} > result = 1 > query = 0x7fffe4004450 > caps = 0x0 > bclass = <optimized out> > result = <optimized out> > src = 0x5555558a41a0 > buf = 0x0 > ret = <optimized out> > position = <optimized out> > eos = 0 > blocksize = <optimized out> > pending_events = 0x0 > tmp = <optimized out> > __PRETTY_FUNCTION__ = "gst_base_src_loop" > __func__ = "gst_base_src_loop" > #10 0x00007ffff7b9de24 in gst_base_src_negotiate (basesrc=0x5555558a41a0) > at gstbasesrc.c:3379 > caps = 0x0 > bclass = <optimized out> > result = <optimized out> > src = 0x5555558a41a0 > buf = 0x0 > ret = <optimized out> > position = <optimized out> > eos = 0 > blocksize = <optimized out> > pending_events = 0x0 > tmp = <optimized out> > __PRETTY_FUNCTION__ = "gst_base_src_loop" > __func__ = "gst_base_src_loop" > #11 0x00007ffff7b9de24 in gst_base_src_loop (pad=0x5555558a6180) at > gstbasesrc.c:2792 > src = 0x5555558a41a0 > buf = 0x0 > ret = <optimized out> > position = <optimized out> > eos = 0 > ---Type <return> to continue, or q <return> to quit--- > blocksize = <optimized out> > pending_events = 0x0 > tmp = <optimized out> > __PRETTY_FUNCTION__ = "gst_base_src_loop" > __func__ = "gst_base_src_loop" > #12 0x00007ffff78d0f59 in gst_task_func (task=0x5555558b64d0) at > gsttask.c:332 > lock = 0x5555558a61f0 > tself = 0x5555558d6720 > priv = 0x5555558b6480 > __PRETTY_FUNCTION__ = "gst_task_func" > #13 0x00007ffff67107d0 in () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #14 0x00007ffff670fe05 in () at /usr/lib/x86_64-linux-gnu/ > libglib-2.0.so.0 > #15 0x00007ffff64846db in start_thread (arg=0x7fffeef2f700) at > pthread_create.c:463 > pd = 0x7fffeef2f700 > now = <optimized out> > unwind_buf = > {cancel_jmp_buf = {{jmp_buf = {140737202288384, > 6702658702322279373, 140737202286208, 0, 93824995911456, 140737488343936, > -6702625674632780851, -6702680043168095283}, mask_was_saved = 0}}, priv = > {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype > = 0}}} > not_first_call = <optimized out> > #16 0x00007ffff5c0788f in clone () at ../sysdeps/unix/sysv/linux/ > x86_64/clone.S:95 > > > On Thu, Jun 14, 2018 at 12:41 PM, Daniel Boles <dboles....@gmail.com> > wrote: > >> Maybe someone else will recognise the problem faster, but again, what I'm >> interested in is when you say "*This fails*", let's get a precise trace >> about *when* it fails. So a backtrace from GDB, not a verbose runtime >> log. >> >> It's probably an issue with gstmm not implementing some refcount >> properly, but it's hard for me personally to parse that from the excess of >> info so far. >> >> >> _______________________________________________ >> gtkmm-list mailing list >> gtkmm-list@gnome.org >> https://mail.gnome.org/mailman/listinfo/gtkmm-list >> >> > > > -- > Regards > > Ankur Deep Jaiswal > Software Architect > Techgentsia Software Technologies Private Limited > Ernakulam > > _______________________________________________ > gtkmm-list mailing list > gtkmm-list@gnome.org > https://mail.gnome.org/mailman/listinfo/gtkmm-list > > -- Pozdrawiam Marcin Kolny
_______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list