Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Ankur Deep Jaiswal
Hi,

i am trying to implement a gstreamermm plugin for a H264 hardware encoder using gstreamermm.

i am extending Gst::PushSrc for this. 
listening to Query Events using

this->get_src_pad()->set_query_function(sigc::mem_fun(*this, &FooSrc::query_event));
i am processing the query events as specified below

gboolean query_event(const Glib::RefPtr<Gst::Pad>& pad, Glib::RefPtr<Gst::Query>& queryevent)
    {
      std::cout << "got a query event: " << pad->get_name() << ":" << queryevent->get_query_type() << std::endl;
      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;
    }
but after the function has executed i get hit by the following error.

GStreamer-CRITICAL **: 20:04:41.081: gst_mini_object_ref: assertion 'mini_object != NULL' failed
to over come this, if we use the c interface for the above code , everything works perfectly fine.

    gboolean query_event(const Glib::RefPtr<Gst::Pad>& pad, Glib::RefPtr<Gst::Query>& queryevent)
    {
      std::cout << "got a query event: " << pad->get_name() << ":" << queryevent->get_query_type() << std::endl;
      switch (queryevent->get_query_type())
      {
        case Gst::QueryType::QUERY_CAPS:
        {
           std::cout << "Gst Query Event  is writable:" << queryevent->is_writable() << std::endl;
           auto * q = queryevent->gobj();
           std::cout << "Gst Query is writable: " << gst_query_is_writable(q) << std::endl;

           auto * wq = gst_query_make_writable(q);
           auto * newcaps = gst_caps_new_simple("video/x-h264",
           "stream-format",G_TYPE_STRING,"byte-stream",
           "alignment",G_TYPE_STRING,"au",
           NULL);
           gst_query_set_caps_result(wq, newcaps);
           std::cout << "Gst Query is written : " << std::endl;
           gst_caps_unref (newcaps);
          return true;

        }
      }
      return false;
    }
please do suggest.

--
Regards

Ankur Deep Jaiswal
Software Architect
Techgentsia Software Technologies Private Limited
Ernakulam

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Daniel Boles
When does that assert fail? Where's the backtrace?


_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Ankur Deep Jaiswal
Hi Daniel,

This happens when we link src of the pushsrc to sink of rtppayloader.

when we handle the Gst::QueryType::QUERY_CAPS event as such below.

  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;
    }

this is the level 5 debug log.

log start -------------------
0:00:02.192512194 [336m 3311 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;31;41m            GST_PADS gstpad.c:2378:gst_pad_link_prepare: [00m trying to link foosrcmm:src and rtph264pay:sink
0:00:02.192536485 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3040:gst_pad_query_caps:<foosrcmm:src> [00m get pad caps with filter (NULL)
0:00:02.192558512 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m               query gstquery.c:675:gst_query_new_custom: [00m creating new query 0x555555a80cf0 caps
0:00:02.192578672 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4006:gst_pad_query:<foosrcmm:src> [00m doing query 0x555555a80cf0 (caps)
got a query event: src:43523
0:00:03.374329639 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m               query gstquery.c:675:gst_query_new_custom: [00m creating new query 0x555555a80e30 caps
0:00:03.374344393 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;37;41m     GST_PERFORMANCE gstminiobject.c:317:gst_mini_object_make_writable: [00m copy GstQuery miniobject 0x555555a80cf0 -> 0x555555a80e30
0:00:03.374357249 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m           structure gststructure.c:1964:gst_structure_parse_field: [00m trying field name 'stream-format'
0:00:03.374362425 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;04m             default gstvalue.c:2548:_priv_gst_value_parse_value: [00m trying type name 'string'
0:00:03.374368089 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m           structure gststructure.c:1964:gst_structure_parse_field: [00m trying field name 'alignment'
0:00:03.374370968 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;04m             default gstvalue.c:2548:_priv_gst_value_parse_value: [00m trying type name 'string'
0:00:03.374395588 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4029:gst_pad_query:<foosrcmm:src> [00m sent query 0x555555a80cf0 (caps), result 1

(testgstreamer:3311): GStreamer- [1;35mCRITICAL [0m **: [34m12:32:58.473 [0m: gst_mini_object_ref: assertion 'mini_object != NULL' failed
0:00:03.374457499 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3047:gst_pad_query_caps:<foosrcmm:src> [00m query returned (NULL)
0:00:03.374463646 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3040:gst_pad_query_caps:<rtph264pay:sink> [00m get pad caps with filter (NULL)
0:00:03.374467365 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m               query gstquery.c:675:gst_query_new_custom: [00m creating new query 0x555555a80d40 caps
0:00:03.374471161 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4006:gst_pad_query:<rtph264pay:sink> [00m doing query 0x555555a80d40 (caps)
0:00:03.374478090 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m      rtpbasepayload gstrtpbasepayload.c:574:gst_rtp_base_payload_query_default:<rtph264pay> [00m getting caps with filter (NULL)
0:00:03.374482469 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3086:gst_pad_peer_query_caps:<rtph264pay:src> [00m get pad peer caps with filter (NULL)
0:00:03.374485731 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m               query gstquery.c:675:gst_query_new_custom: [00m creating new query 0x555555a80de0 caps
0:00:03.374489039 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4133:gst_pad_peer_query:<rtph264pay:src> [00m peer query 0x555555a80de0 (caps)
0:00:03.374492480 [336m 3311 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;31;41m            GST_PADS gstpad.c:4189:gst_pad_peer_query:<rtph264pay:src> [00m pad has no peer
0:00:03.374500545 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4029:gst_pad_query:<rtph264pay:sink> [00m sent query 0x555555a80d40 (caps), result 1
0:00:03.374504286 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3047:gst_pad_query_caps:<rtph264pay:sink> [00m query returned video/x-h264, stream-format=(string)avc, alignment=(string)au; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ nal, au }
0:00:03.374512559 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstpad.c:2278:gst_pad_link_check_compatible_unlocked:<foosrcmm:src> [00m src caps (NULL)
0:00:03.374515578 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstpad.c:2280:gst_pad_link_check_compatible_unlocked:<rtph264pay:sink> [00m sink caps video/x-h264, stream-format=(string)avc, alignment=(string)au; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ nal, au }
0:00:03.374519943 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstpad.c:2298:gst_pad_link_check_compatible_unlocked: [00m caps are not compatible
0:00:03.374522597 [336m 3311 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;31;41m            GST_PADS gstpad.c:2434:gst_pad_link_prepare: [00m caps are incompatible
0:00:03.374525503 [336m 3311 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;31;41m            GST_PADS gstpad.c:2529:gst_pad_link_full: [00m link between foosrcmm:src and rtph264pay:sink failed: no common format
0:00:03.374538989 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:318:gst_bus_post:<bus1> [00m [msg 0x555555a80630] posting on bus structure-change message: 0x555555a80630, time 99:99:99.999999999, seq-num 25, element 'sink', GstMessageStructureChange, type=(GstStructureChangeType)GST_STRUCTURE_CHANGE_TYPE_PAD_LINK, owner=(GstElement)"\(foosrcmm\)\ foosrcmm", busy=(boolean)false;
0:00:03.374555231 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:3715:gst_bin_handle_message_func:<gtkmm__gstpipeline0> [00m [msg 0x555555a80630] handling child sink message of type structure-change
0:00:03.374582114 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:961:bin_remove_messages:<rtph264pay:sink> [00m deleting message 0x555555a805b0 of type structure-change (types 0x00001000)
0:00:03.374587793 [336m 3311 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:353:gst_bus_post:<bus1> [00m [msg 0x555555a80630] dropped
log end --------------------

but if we use the API as shown below it works.

  gboolean query_event(const Glib::RefPtr<Gst::Pad>& pad, Glib::RefPtr<Gst::Query>& queryevent)
    {
      switch (queryevent->get_query_type())
      {
        case Gst::QueryType::QUERY_CAPS:
        {
           std::cout << "Gst Query Event  is writable:" << queryevent->is_writable() << std::endl;
           auto * q = queryevent->gobj();
           std::cout << "Gst Query is writable: " << gst_query_is_writable(q) << std::endl;

           auto * wq = gst_query_make_writable(q);
           auto * newcaps = gst_caps_new_simple("video/x-h264",
           "stream-format",G_TYPE_STRING,"byte-stream",
           "alignment",G_TYPE_STRING,"au",
           NULL);
           gst_query_set_caps_result(wq, newcaps);
           std::cout << "Gst Query is written : " << std::endl;
           gst_caps_unref (newcaps);
          return true;

        }
      }
      return false;
    }


log start ---------------------

0:00:07.968218034 [336m 3053 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;31;41m            GST_PADS gstpad.c:2378:gst_pad_link_prepare: [00m trying to link foosrcmm:src and rtph264pay:sink
0:00:07.968243917 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3040:gst_pad_query_caps:<foosrcmm:src> [00m get pad caps with filter (NULL)
0:00:07.968266454 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m               query gstquery.c:675:gst_query_new_custom: [00m creating new query 0x555555a814f0 caps
0:00:07.968287663 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4006:gst_pad_query:<foosrcmm:src> [00m doing query 0x555555a814f0 (caps)
0:00:09.550305389 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4029:gst_pad_query:<foosrcmm:src> [00m sent query 0x555555a814f0 (caps), result 1
0:00:09.550351757 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3047:gst_pad_query_caps:<foosrcmm:src> [00m query returned video/x-h264, stream-format=(string)byte-stream, alignment=(string)au
0:00:09.550386007 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3040:gst_pad_query_caps:<rtph264pay:sink> [00m get pad caps with filter (NULL)
0:00:09.550414780 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m               query gstquery.c:675:gst_query_new_custom: [00m creating new query 0x555555a81590 caps
0:00:09.550434461 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4006:gst_pad_query:<rtph264pay:sink> [00m doing query 0x555555a81590 (caps)
0:00:09.550460791 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m      rtpbasepayload gstrtpbasepayload.c:574:gst_rtp_base_payload_query_default:<rtph264pay> [00m getting caps with filter (NULL)
0:00:09.550482880 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3086:gst_pad_peer_query_caps:<rtph264pay:src> [00m get pad peer caps with filter (NULL)
0:00:09.550501309 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00m               query gstquery.c:675:gst_query_new_custom: [00m creating new query 0x555555a81540 caps
0:00:09.550519577 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4133:gst_pad_peer_query:<rtph264pay:src> [00m peer query 0x555555a81540 (caps)
0:00:09.550538513 [336m 3053 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;31;41m            GST_PADS gstpad.c:4189:gst_pad_peer_query:<rtph264pay:src> [00m pad has no peer
0:00:09.550566261 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4029:gst_pad_query:<rtph264pay:sink> [00m sent query 0x555555a81590 (caps), result 1
0:00:09.550587149 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstutils.c:3047:gst_pad_query_caps:<rtph264pay:sink> [00m query returned video/x-h264, stream-format=(string)avc, alignment=(string)au; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ nal, au }
0:00:09.550618681 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstpad.c:2278:gst_pad_link_check_compatible_unlocked:<foosrcmm:src> [00m src caps video/x-h264, stream-format=(string)byte-stream, alignment=(string)au
0:00:09.550640539 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstpad.c:2280:gst_pad_link_check_compatible_unlocked:<rtph264pay:sink> [00m sink caps video/x-h264, stream-format=(string)avc, alignment=(string)au; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ nal, au }
0:00:09.550673361 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m            GST_CAPS gstpad.c:2298:gst_pad_link_check_compatible_unlocked: [00m caps are compatible
0:00:09.550694672 [336m 3053 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;31;41m            GST_PADS gstpad.c:2586:gst_pad_link_full: [00m linked foosrcmm:src and rtph264pay:sink, successful
0:00:09.550718028 [336m 3053 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;34m           GST_EVENT gstevent.c:1517:gst_event_new_reconfigure: [00m creating reconfigure event
0:00:09.550733889 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m           GST_EVENT gstevent.c:306:gst_event_new_custom: [00m creating new event 0x7fffc8006b50 reconfigure 61441
0:00:09.550756422 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01;34m           GST_EVENT gstpad.c:5638:gst_pad_send_event_unchecked:<foosrcmm:src> [00m have event type reconfigure event: 0x7fffc8006b50, time 99:99:99.999999999, seq-num 25, (NULL)
0:00:09.550779908 [336m 3053 [00m 0x5555557c6d00 [36mINFO   [00m [00;01;34m           GST_EVENT gstpad.c:5744:gst_pad_send_event_unchecked:<foosrcmm:src> [00m Received event on flushing pad. Discarding
0:00:09.550813982 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:318:gst_bus_post:<bus1> [00m [msg 0x555555a80e00] posting on bus structure-change message: 0x555555a80e00, time 99:99:99.999999999, seq-num 26, element 'sink', GstMessageStructureChange, type=(GstStructureChangeType)GST_STRUCTURE_CHANGE_TYPE_PAD_LINK, owner=(GstElement)"\(foosrcmm\)\ foosrcmm", busy=(boolean)false;
0:00:09.550872653 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:3715:gst_bin_handle_message_func:<gtkmm__gstpipeline0> [00m [msg 0x555555a80e00] handling child sink message of type structure-change
0:00:09.550895790 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:961:bin_remove_messages:<rtph264pay:sink> [00m deleting message 0x555555a80d80 of type structure-change (types 0x00001000)
0:00:09.550922872 [336m 3053 [00m 0x5555557c6d00 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:353:gst_bus_post:<bus1> [00m [msg 0x555555a80e00] dropped
log end ----------------------


On Wed, Jun 13, 2018 at 2:04 AM, Daniel Boles <[hidden email]> wrote:
When does that assert fail? Where's the backtrace?


_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list




--
Regards

Ankur Deep Jaiswal
Software Architect
Techgentsia Software Technologies Private Limited
Ernakulam

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Daniel Boles
What I meant was this: Please get a backtrace from the point at which the assertion fails. That way, we can hopefully figure out where it's going wrong.

You can make GLib break on such messages using

G_DEBUG=fatal-criticals
G_DEBUG=fatal-warnings

as needed.

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Daniel Boles
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
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Ankur Deep Jaiswal

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 <[hidden email]> 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
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list




--
Regards

Ankur Deep Jaiswal
Software Architect
Techgentsia Software Technologies Private Limited
Ernakulam

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Gtkmm mailing list
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 <[hidden email]>:

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 <[hidden email]> 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
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list




--
Regards

Ankur Deep Jaiswal
Software Architect
Techgentsia Software Technologies Private Limited
Ernakulam

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list




--
Pozdrawiam
Marcin Kolny

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Glib::RefPtr<Gst::QueryCaps> ->set_caps_result gives error that "gst_mini_object_ref: assertion 'mini_object != NULL' failed"

Ankur Deep Jaiswal
Hi Marcin,

i have reported all the issue @ gnome gitlab instance.
thanks


--
Regards

Ankur Deep Jaiswal


_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list