From: Kouhei S. <ko...@co...> - 2013-02-04 14:18:36
|
須藤です。 In <510...@ni...> "[ruby-gnome2-devel-ja] gi使用時Gst::Bus.add_watchの引数" on Mon, 04 Feb 2013 00:45:04 +0900, NAKAJIMA Takashi <nak...@ni...> wrote: > playbin = Gst::ElementFactory.make("playbin") > bus = playbin.bus > bus.add_watch do |bus, message| > (イベント捕捉) > end > > だと、add_watchのところで以下のエラーが起きます。 おぉ。。。 > /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:243:in > `invoke': no implicit conversion from nil to integer (TypeError) > from > /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:243:in > `block in load_method_info' > from helloworld.rb:32:in `<main>' > > intパラメータを要求しているようなので、priorityかなと思い > > bus.add_watch(GLib::PRIORITY_DEFAULT) do |bus, message| > > にしたところ、次のエラーに変わりました。 はい、priorityであっています。 たしかに、 > なおGst-1.0.girによると、add_watchは > <parameters> > <parameter name="func" transfer-ownership="none" closure="1"> > <doc xml:whitespace="preserve">A function to call when a message is > received.</doc> > <type name="BusFunc" c:type="GstBusFunc"/> > </parameter> > <parameter name="user_data" transfer-ownership="none"> > <doc xml:whitespace="preserve">user data passed to @func.</doc> > <type name="gpointer" c:type="gpointer"/> > </parameter> > </parameters> > なので、priorityを渡したのも違っているのかもしれませんけど。(?) となっているのですが、 <method name="add_watch" c:identifier="gst_bus_add_watch" shadowed-by="add_watch_full" introspectable="0"> となっている通り、add_watchの実体はadd_watch_fullとして提供 されていて、add_watch_fullは <method name="add_watch_full" c:identifier="gst_bus_add_watch_full" shadows="add_watch"> <parameters> <parameter name="priority" transfer-ownership="none"> <doc xml:whitespace="preserve">The priority of the watch.</doc> <type name="gint" c:type="gint"/> </parameter> なので、最初の引数はpriorityであっています! > /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:243:in > `invoke': TODO: GSourceFunc callback is only supported. > (NotImplementedError) > from > /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:243:in > `block in load_method_info' > from helloworld.rb:32:in `<main>' > > GSourceFuncのcallbackでない(?)と怒られているようですが、ブロックで > 渡しているところが違うのでしょうか。 いえ、あっているのですが、Ruby/GObjectIntrospectionが対応し ていないのです。エラーメッセージにもある通り、GSourceFuncに は対応しているのですが、これは、GObject Introspectionが依存 しているGLibが提供しているものなので対応しています。 が、GstBusFuncはGObjectIntrospectionが依存していない GStreamerが提供していないものなので、 Ruby/GObjectIntrospectionが対応するのは変ですね。。。 なので、Ruby/GStreamerの方で対応する必要があるので、対応する ためのコードを追加しておきます!追加したらまた報告します! なかなか、スムーズにいかずにすみません。。。 |