2017-03-14 65 views
0

試圖讓一個子類:如何重寫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(),但我看不到這個工廠與我的自定義類相關。

回答

0

當需要時(對象創建),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元素直接創建(代碼是在同一文件夾,因爲這一種)。

1

好的,這是

g_object_new(my_bin_get_type(), NULL); 

其中my_bin_get_type()G_DEFINE_TYPE提供。