Hi Bruce, Sorry for late response. I've looked at your example, and turns out that it was a bug in gstreamermm. I've fixed it, and the latest master branch should be ok: https://git.gnome.org/browse/gstreamermm/commit/?id=20090e4db48fa30e193be2637e881add4cb6d3d4
2018-04-30 11:36 GMT+01:00 Adams, Bruce (KMLWG) <[email protected] >: > Hi, > > The attached is a minimal project that reproduces the issue. > > It just adds a main and a CMakeLists.txt the sample code I sent earlier. > > > > One other thing that seems dubious to me is that: > > > > #include <gstreamermm/private/audiosink_p.h> > > > > Is required in order for the register_element() function to compile. > > > > Regards, > > > > Bruce. > > > > > > *From:* Marcin Kolny [mailto:[email protected]] > *Sent:* 29 April 2018 16:49 > *To:* Adams, Bruce (KMLWG) > *Cc:* [email protected] > *Subject:* Re: gstreamermm, Gst::AudioSink and virtual functions > > > > Hi Bruce, > > Could you post a whole project? It'd help me a lot with investigations. > > > > 2018-04-25 13:10 GMT+01:00 Adams, Bruce (KMLWG) < > [email protected]>: > > Hi, > > Thanks for your help so far. I’ve made some progress but I’m still > stuck. > > I am still trying to create a ‘do nothing’ audiosink upon which I can > build. > > Is there a clear statement somewhere of what an C++ audiosink class must > provide? > > I was able to create a a ‘do nothing’ sink using “gst-element-maker > mydemosink audiosink” > > which seems to work but there is nothing obvious to translate from that > code into the C++ version. > > > > The latest output is: > > > > (gst-launch-1.0:16830): GStreamer-CRITICAL **: gst_object_set_parent: > assertion 'GST_IS_OBJECT (object)' failed > > > > ** (gst-launch-1.0:16830): CRITICAL **: gst_audio_ring_buffer_open_device: > assertion 'GST_IS_AUDIO_RING_BUFFER (buf)' failed > > > > (gst-launch-1.0:16830): GStreamer-CRITICAL **: gst_object_unparent: > assertion 'GST_IS_OBJECT (object)' failed > > ERROR: Pipeline doesn't want to pause. > > > > I thought the ring buffer was provided by the parent class AudioBaseSink > but it seems not. > > > > Note for testing this I’m using: > > > > gst-launch-1.0 -v audiotestsrc blocksize=8000 num-buffers=10 ! > audio/x-raw,rate=8000,channels=1 ! myaudiosink > > > > The simplest MyAudioSink.hpp to reproduce this: > > > > #include <gstreamermm.h> > > #include <gstreamermm/audiosink.h> > > > > class MyAudioSink: public Gst::AudioSink > > { > > public: > > explicit MyAudioSink(Gst::AudioSink::BaseObjectType* gobj): > > Glib::ObjectBase(typeid (MyAudioSink)), // type must be registered > before use > > Gst::AudioSink(gobj) > > { > > } > > > > virtual ~MyAudioSink() > > { > > } > > > > static void class_init(Gst::ElementClass<MyAudioSink> *klass) > > { > > klass->set_metadata("MyAudioSink", > > "Sink/Audio", "A test audio sink", "author"); > > klass->add_pad_template(Gst::PadTemplate::create("sink", > Gst::PAD_SINK, Gst::PAD_ALWAYS, > > > Gst::Caps::create_from_string("audio/x-raw,format=S16LE, > rate=8000,channels=1"))); > > } > > }; > > > > > > A C++ myaudiofilter derived from AudioFilter on the other hand seems to > just work: > > > > gst-launch-1.0 audiotestsrc blocksize=8000 num-buffers=10 ! > audio/x-raw,rate=8000,channels=1 ! myaudiofilter ! fakesink > > > > Calling create_ring_buffer() in the constructor MyAudioSink causes a seg > fault: > > > > (gst-inspect-1.0:23564): GStreamer-CRITICAL **: gst_object_set_parent: > assertion 'GST_IS_OBJECT (object)' failed > > > > (gst-inspect-1.0:23564): GLib-GObject-CRITICAL **: g_object_get_qdata: > assertion 'G_IS_OBJECT (object)' failed > > > > (gst-inspect-1.0:23564): GLib-GObject-CRITICAL **: g_object_get_qdata: > assertion 'G_IS_OBJECT (object)' failed > > Segmentation fault (core dumped) > > > > #3 fault_handler_sighandler (signum=11) at gst-launch.c:94 > > #4 <signal handler called> > > #5 0x00007eff8272b898 in Glib::wrap_auto(_GObject*, bool) () from > /usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1 > > #6 0x00007eff82df5bcf in Glib::wrap(_GstAudioRingBuffer*, bool) () from > /usr/lib/x86_64-linux-gnu/libgstreamermm-1.0.so.1 > > #7 0x00007eff82df16c6 in Gst::AudioBaseSink::create_ring_buffer() () > from /usr/lib/x86_64-linux-gnu/libgstreamermm-1.0.so.1 > > #8 0x00007eff830f5eb4 in MyAudioSink::MyAudioSink > > > > I tried putting it in some of the vfunc’s like open, reset , write and > start instead but none of them are invoked before it starts asserting. > > > > Its not immediately obvious where to set a breakpoint to try and track > this down > > I’m wading through glib and gstreamer source trying to find out without > much success so far. > > Any tips would be appreciated. > > > > Regards, > > > > Bruce. > > > > > -- > > Pozdrawiam > Marcin Kolny > -- Pozdrawiam Marcin Kolny
_______________________________________________ gtkmm-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/gtkmm-list
