From: Takashi N. <nak...@ni...> - 2013-03-02 11:38:53
|
中島です。 giを使ったGStreamerのサンプルを移植中ですが、今度はadapter フォルダのadapter_test.cについて、以下3点ご教示お願いします。 (今現在困っているのは3つめだけですが) 1. GstBaseのバインディング このadapter_test.cは、GstBase-1.0.girに定義されている GstAdapterを使っています。こちらGstBaseのバインディングの 作成予定はありますでしょうか? なお、試しにgst.rbのモジュール名とLoaderのパラメータを "GstBase"に変えたものをrequireしてみたところ、 GstBase::Adapter.newは通ったようです。 2. Gst::Bufferの生成方法 AdapterにGst::Bufferを与えるのですが、これを生成する関数として、 オリジナル使用の gst_buffer_new_and_alloc() の v.1.0版と思われる、 gst_buffer_new_allocate() を使いたいと考えています。 しかしgiの Gst::Bufferには new_allocate というコンストラクタが定義 されておらず、 buf = Gst::Buffer.new buf.initialize_new_allocate(nil, size) という形になっているようです。 これで生成と初期化はできているようですが、気分としては buf = Gst::Buffer.new_allocate(nil, size) などで一発生成できるとうれしいです。 3. Gst::Bufferがwritableにならない 上記生成したGst::Bufferに、 buf.memset(0, 0, size) で0クリアしようとしたところ、コンソールに大量のメッセージ (adapter_test.rb:8776): GStreamer-CRITICAL **: gst_buffer_memset: assertion `gst_buffer_is_writable (buffer)' failed が出力され、書き込みに失敗しました。 GStreamerのリファレンスによると、Bufferのrefcountが1でなければ ならないらしいですが、上記 2. のコードだとカウントが上がってしまうので しょうか? なお、refcountを確認したいのですが、Buffer内でカウントを持っているらしい GstMiniObjectを以下のように参照すると puts buf.mini_object.refcount 以下のエラーになります。 /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:150:in `get_field_value': failed to get field value (ArgumentError) from /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:150:in `block (2 levels) in load_fields' なお、現在のコードは以下です。 https://github.com/ted-n/ruby-gnome2/blob/adapter/gstreamer-gi/sample/adapter_test.rb https://github.com/ted-n/ruby-gnome2/blob/adapter/gstreamer-gi/sample/gst-base.rb |