试图创建一个子类:
mybin.h:
#pragma once #include G_BEGIN_DECLS G_DECLARE_DERIVABLE_TYPE(MyBin, my_bin, MY, BIN, GstBin) struct _MyBinClass { GstBinClass parent_class; }; GstElement* my_bin_new(const gchar *name); G_END_DECLS
mybin.c:
#include "mybin.h" G_DEFINE_TYPE(MyBin, my_bin, GST_TYPE_BIN) static void my_bin_init(MyBin *bin) { } static void my_bin_class_init(MyBinClass *class) { // virtual function overrides go here } GstElement* my_bin_new(const gchar *name) { // ??? }
在my_bin_new()
写什么来调用my_bin_class_init()
?
我在glib文档中看到了g_object_new()
,但目前还不清楚要传递给它的是什么。 gstreamer源调用gst_element_factory_make()
,但我看不出该工厂与我的自定义类有什么关系。
好的,是的
g_object_new(my_bin_get_type(), NULL);
其中my_bin_get_type()
由G_DEFINE_TYPE
提供。
GObject将在需要时(对象创建)负责调用这些类和对象初始化函数。 检查GObject文档以了解它: https : //developer.gnome.org/gobject/stable/chapter-gobject.html
简而言之,只需根据需要实现它们,GObject将为您处理它。 在GStreamer代码中有一些覆盖函数的例子: https : //cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/gst/multifile/gstsplitmuxsink.c#n214
如果你想要一个直接创建的例子(未注册通过gst_element_factory_make
使用,你可以检查回放元素: https : gst_element_factory_make
,它们直接在playsink元素中创建(代码与此文件夹在同一个文件夹中)。
以上就是c/c++开发分享如何覆盖GstBin中的handle_message?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522019.html