如何重写GstBin中的handle_message?
问题描述:
试图让一个子类:如何重写GstBin中的handle_message?
mybin.h:
#pragma once
#include <gst/gstbin.h>
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()
,但我看不到这个工厂与我的自定义类相关。
答
当需要时(对象创建),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://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/gst/playback/gstplaysinkvideoconvert.c,他们在playsink元素直接创建(代码是在同一文件夹,因为这一种)。
答
好的,这是
g_object_new(my_bin_get_type(), NULL);
其中my_bin_get_type()
由G_DEFINE_TYPE
提供。