|
From: Kouhei S. <ko...@co...> - 2013-02-13 12:30:16
|
須藤です。
In <511...@ni...>
"[ruby-gnome2-devel-ja] gi使用時のsignal_connectについて" on Wed, 13 Feb 2013 00:06:12 +0900,
NAKAJIMA Takashi <nak...@ni...> wrote:
> で、今度はtypefind.cにしました。
> (ruby-gnome2-devel-enでも表明した方がいいのかな?
> metadataは取りかかられている方がいらっしゃるので
> やらないでおきます)
あぁ、かぶりそうなら表明した方がよさそうですねぇ。
今回はかぶらないと思うので大丈夫だと思います!
> こちらはsignal_connectがあるのですが、以下のコードで
> エラーになっています。
>
> # add objects to the main pipeline
> pipeline << filesrc << typefind << sink
>
> typefind.signal_connect("have-type") do |probability, caps|
> (caps情報をXML形式で吐くコード)
> end
>
> 実行時のエラーメッセージ:
> ** (typefind.rb:16761): ERROR **: Please call
> rbgutil_start_callback_dispatch_thread() to dispatch a callback from
> non-ruby thread before callbacks are requested from non-ruby thread.
>
> 何かおまじないが要るんでしょうか?
はい、いるんです!
GStreamerは内部でスレッドを作るんですが、RubyはRubyが初期化
されたスレッド内でしか動けないので、GStreamer側からコールバッ
クを呼ばれたときにそのままRubyで定義されたコールバックを呼ぶ
わけにはいかないんです。そうしちゃうと、GStreamer側が作った
スレッドから呼ばれると死んじゃいます。なので、違うスレッドか
ら呼ばれてもRubyが初期化されたスレッドで実行する、というおま
じないをかけないといけません。
ということで、かけておきました!
git pull --rebaseして、gobject-introspection/でmakeしてから
もう一度動かしてみてもらえますか?
|