2017-03-14 1 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_class_init()と呼ばれることにするmy_bin_new()に何を書くには?

私はglibのドキュメントでg_object_new()を見ましたが、何を渡すべきかは不明です。 gstreamerのソースはgst_element_factory_make()ですが、そのファクトリがカスタムクラスにどのように関係しているのかわかりません。

答えて

0

GObjectは、必要に応じてこれらのクラスとオブジェクトの初期化関数を呼び出す処理を行います(オブジェクトの作成)。要約すると、GObjectのドキュメントで詳細を確認してください。https://developer.gnome.org/gobject/stable/chapter-gobject.html

要するに、必要に応じて実装するだけで、GObjectがそれを処理します。あなたが直接作成された例をしたい場合(あなたは再生の要素を確認することができますgst_element_factory_makeを経由して使用することが登録されていないhttps://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/gst/multifile/gstsplitmuxsink.c#n214

https://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/gst/playback/gstplaysinkvideoconvert.cは、それらがplaysink要素で直接作成されたGStreamerのコード内の関数をオーバーライドするいくつかの例があります。 (コードは、これと同じフォルダ内にある)。[OK]を

1

は、my_bin_get_type()G_DEFINE_TYPEによって提供される

g_object_new(my_bin_get_type(), NULL); 

だ。

関連する問題