如何重写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提供。