Re: gstreamermm, Gst::AudioSink and virtual functions

Hi Bruce,
I think I've already answered your question on stackoverflow:

2018-04-23 15:47 GMT+01:00 Adams, Bruce (KMLWG) <Bruce Adams kantarmedia com>:


     I’m trying to create a custom audio sink plugin for gstreamer using the Gst::AudioSink as a base class. For me this involves multiple learning curves as I’m new to gstreamer, gstreamermm and gobject. Also I have no background or real interest in gtkmm as I’m not working on GUI code at present.


I am trying to create a class along the lines of:


class MyAudioSink: public Gst::AudioSink



    explicit MyAudioSink(KantarAudioSink *gobj);

    virtual ~MyAudioSink();


    static void class_init(Gst::ElementClass<MyAudioSink> *klass);


    virtual int write_vfunc(gpointer data, guint length) override;

    virtual void reset_vfunc();



I seem to missing some magic in the class_init() function that should link the base class functions to the virtual functions in MyAudioSink.

In C we would do something like:


  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);

  GstAudioSinkClass *audio_sink_class = GST_AUDIO_SINK_CLASS (klass);

  audio_sink_class->write = GST_DEBUG_FUNCPTR (myaudiosink_write);


I don’t really grok the C++ binding to gobject.

What is the equivalent for linking to the C++ virtual function hierarchy?


I got the impression from Marcin’s video that the virtual functions should be invoked automatically.


I can create a half usable (doesn’t handle things like EOS) plugin by adding:


   add_pad(sinkpad = Gst::Pad::create(get_pad_template("sink"), "sink"));

   sinkpad->set_chain_function(sigc::mem_fun(*this, &MyAudioSink::chain));


But a sink should not have a chain function.

Also it seems strange that I have to add the sink pad at all. An audio sink should already have one I should just need to refine the capabilities a bit more.

I guess this is an artifact of using gmmproc to create C++ wrappers? I don’t want to use gmmproc myself (I not sure what package its in anyway).


I think there should some example elements and more introductory documentation (this is something I may be able to help with as I do this other commitments permitting). The best example transform element I could find was the foo element used in the test code. There is no equivalent for a sink element.


It’s also worth mentioning that the generated documentation does not appear online here





Kantar Disclaimer

gtkmm-list mailing list
gtkmm-list gnome org

Marcin Kolny

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]