|
From: NAKAJIMA T. <nak...@ni...> - 2013-02-02 12:31:26
|
はじめまして、中島と申します。
先日ruby-listにアナウンスいただきましたRuby-GNOME2リリースの案内で
GObject Introspectionを利用したサンプル移植のお誘いを読ませていただき、
素人ながら無謀にも挑戦してみることにしました。
GStreamerのhelloworld.cからと思ったのですが、以下のコード2行目の
初期化の時点でつまづいてしまい、どなたかご助言いただければ幸いです。
テストコード(simple.rb):
require "gst-gi"
Gst.init
エラーメッセージ:
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/loader.rb:248:in
`value': undefined method `new' for NilClass:Class (NoMethodError)
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/loader.rb:248:in
`load_constant_info'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/loader.rb:60:in
`load_info'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/loader.rb:35:in
`block in load'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/repository.rb:27:in
`block (2 levels) in each'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/repository.rb:26:in
`times'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/repository.rb:26:in
`block in each'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/repository.rb:25:in
`each'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/repository.rb:25:in
`each'
from
/home/nakajima/.gem/ruby/1.9.1/gems/gobject-introspection-1.2.1/lib/gobject-introspection/loader.rb:34:in
`load'
from
/home/nakajima/Projects/ruby/gtk/ruby-gnome2/gstreamer/sample/gst-gi.rb:34:in
`init'
from simple.rb:2:in `<main>'
環境:
OS: Fedora 18
Ruby: ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux]
GStreamer(RPM): gstreamer1-devel-1.0.5-1.fc18.x86_64
Gem version:
gobject-introspection (1.2.1, 1.2.0)
gtk2 (1.2.1, 1.2.0)
Ruby-GNOME2ソース: (1/27にgit clone)
やったこと:
(1)Ruby側
原因が環境なのかコードなのかわかりませんが、例外が起きている場所が
gobject-introspectionのloader.loadなので、gst-gi.rbにloadメソッドを
コピーして、repositoryの列挙ループの挙動を見たところ、8番目にある
info.nameがBUFFER_COPY_ALLというところで落ちているようです。
この箇所のgirファイル(Gst-1.0.gir)は、以下のようなものでした。
<constant name="BUFFER_COPY_ALL" value="0" c:type="GST_BUFFER_COPY_ALL">
<type name="BufferCopyFlags" c:type="GstBufferCopyFlags"/>
</constant>
(2)C側
ライブラリ側のソースを追いかけながら、見よう見まねで別にCコードを
書いてrepositoryを叩いてみたところ、上記BUFFER_COPY_ALLのデータは
以下のように見えました。
1)列挙したGIBaseInfoをg_base_info_get_typeでGIInfoTypeを取ると
GI_INFO_TYPE_CONSTANT。
2)そこからg_constant_info_get_typeでGITypeInfoを取ると
GI_TYPE_TAG_INTERFACE。
3)GITypeInfoからg_type_info_get_interfaceでGIBaseInfoを取り、
さらにg_base_info_get_typeでGIInfoTypeを取ると
GI_INFO_TYPE_FLAGS。
Rubyクラスを作るところまで追いたかったのですが、迷ってしまい
力尽きました...
|
|
From: Kouhei S. <ko...@co...> - 2013-02-02 13:41:26
|
須藤です。 In <510...@ni...> "[ruby-gnome2-devel-ja] giを使ったgstreamer-1.0の初期化(loader)でエラー" on Sat, 02 Feb 2013 21:30:25 +0900, NAKAJIMA Takashi <nak...@ni...> wrote: > 先日ruby-listにアナウンスいただきましたRuby-GNOME2リリースの案内で > GObject Introspectionを利用したサンプル移植のお誘いを読ませていただき、 > 素人ながら無謀にも挑戦してみることにしました。 わぁ!ありがとうございます! > GStreamerのhelloworld.cからと思ったのですが、以下のコード2行目の > 初期化の時点でつまづいてしまい、どなたかご助言いただければ幸いです。 > > テストコード(simple.rb): > require "gst-gi" > Gst.init おぉ。。。 > 環境: > OS: Fedora 18 > Ruby: ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux] > GStreamer(RPM): gstreamer1-devel-1.0.5-1.fc18.x86_64 > Gem version: > gobject-introspection (1.2.1, 1.2.0) > gtk2 (1.2.1, 1.2.0) > Ruby-GNOME2ソース: (1/27にgit clone) 手元のDebian GNU/Linux sidだと大丈夫なんですけどねぇ。 GStreamerのバージョンも1.0.5-1で同じで。。。 % dpkg -l | grep libgstreamer1.0-dev ii libgstreamer1.0-dev 1.0.5-1 amd64 GStreamer core development files > やったこと: > (1)Ruby側 > 原因が環境なのかコードなのかわかりませんが、例外が起きている場所が > gobject-introspectionのloader.loadなので、gst-gi.rbにloadメソッドを > コピーして、repositoryの列挙ループの挙動を見たところ、8番目にある > info.nameがBUFFER_COPY_ALLというところで落ちているようです。 > この箇所のgirファイル(Gst-1.0.gir)は、以下のようなものでした。 > <constant name="BUFFER_COPY_ALL" value="0" c:type="GST_BUFFER_COPY_ALL"> > <type name="BufferCopyFlags" c:type="GstBufferCopyFlags"/> > </constant> sidのGst-1.0.girだと↑がないんですよねぇ。 念のため、GStreamerのリポジトリの最新版を手元でビルドしてみ たのですが、それにも↑は入っていませんでした。Fedoraではどう して入っているのかしら。。。 > (2)C側 > ライブラリ側のソースを追いかけながら、見よう見まねで別にCコードを > 書いてrepositoryを叩いてみたところ、上記BUFFER_COPY_ALLのデータは > 以下のように見えました。 > 1)列挙したGIBaseInfoをg_base_info_get_typeでGIInfoTypeを取ると > GI_INFO_TYPE_CONSTANT。 > 2)そこからg_constant_info_get_typeでGITypeInfoを取ると > GI_TYPE_TAG_INTERFACE。 > 3)GITypeInfoからg_type_info_get_interfaceでGIBaseInfoを取り、 > さらにg_base_info_get_typeでGIInfoTypeを取ると > GI_INFO_TYPE_FLAGS。 > Rubyクラスを作るところまで追いたかったのですが、迷ってしまい > 力尽きました... いえいえ! ここまで調べてもらってありがとうございます! もしよかったら、3)で取ってきたGIInfoTypeに g_registered_type_info_get_g_type()して、これのGTypeを調べて もらえませんか? GTypeがとれたらg_type_name()でGTypeの名前が見れるのでそれを 教えてもらいたいです。 g_type_name(): http://developer.gnome.org/gobject/stable/gobject-Type-Information.html#g-type-name 本当はGstBufferCopyFlagsになっていて欲しいのですが、それが違 うのになっているんじゃないかと思っています。 |
|
From: NAKAJIMA T. <nak...@ni...> - 2013-02-02 14:31:37
|
須藤様 中島です。返信ありがとうございます。 > もしよかったら、3)で取ってきたGIInfoTypeに > g_registered_type_info_get_g_type()して、これのGTypeを調べて > もらえませんか? > GTypeがとれたらg_type_name()でGTypeの名前が見れるのでそれを > 教えてもらいたいです。 やってみたところ、g_type_name()では void と表示されました。環境が悪いみたいですね。 > sidのGst-1.0.girだと↑がないんですよねぇ。 > 念のため、GStreamerのリポジトリの最新版を手元でビルドしてみ > たのですが、それにも↑は入っていませんでした。Fedoraではどう > して入っているのかしら。。。 Fedoraだから... いや私のせいかもしれないし(^^;) ごめんなさい、GStreamerを修復してからリトライすることにします。 (2013年02月02日 22:41), Kouhei Sutou wrote: > 須藤です。 > > In <510...@ni...> > "[ruby-gnome2-devel-ja] giを使ったgstreamer-1.0の初期化(loader)でエラー" on Sat, 02 Feb 2013 21:30:25 +0900, > NAKAJIMA Takashi <nak...@ni...> wrote: > >> 先日ruby-listにアナウンスいただきましたRuby-GNOME2リリースの案内で >> GObject Introspectionを利用したサンプル移植のお誘いを読ませていただき、 >> 素人ながら無謀にも挑戦してみることにしました。 > わぁ!ありがとうございます! > >> GStreamerのhelloworld.cからと思ったのですが、以下のコード2行目の >> 初期化の時点でつまづいてしまい、どなたかご助言いただければ幸いです。 >> >> テストコード(simple.rb): >> require "gst-gi" >> Gst.init > おぉ。。。 > >> 環境: >> OS: Fedora 18 >> Ruby: ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux] >> GStreamer(RPM): gstreamer1-devel-1.0.5-1.fc18.x86_64 >> Gem version: >> gobject-introspection (1.2.1, 1.2.0) >> gtk2 (1.2.1, 1.2.0) >> Ruby-GNOME2ソース: (1/27にgit clone) > 手元のDebian GNU/Linux sidだと大丈夫なんですけどねぇ。 > GStreamerのバージョンも1.0.5-1で同じで。。。 > > % dpkg -l | grep libgstreamer1.0-dev > ii libgstreamer1.0-dev 1.0.5-1 amd64 GStreamer core development files > >> やったこと: >> (1)Ruby側 >> 原因が環境なのかコードなのかわかりませんが、例外が起きている場所が >> gobject-introspectionのloader.loadなので、gst-gi.rbにloadメソッドを >> コピーして、repositoryの列挙ループの挙動を見たところ、8番目にある >> info.nameがBUFFER_COPY_ALLというところで落ちているようです。 >> この箇所のgirファイル(Gst-1.0.gir)は、以下のようなものでした。 >> <constant name="BUFFER_COPY_ALL" value="0" c:type="GST_BUFFER_COPY_ALL"> >> <type name="BufferCopyFlags" c:type="GstBufferCopyFlags"/> >> </constant> > sidのGst-1.0.girだと↑がないんですよねぇ。 > 念のため、GStreamerのリポジトリの最新版を手元でビルドしてみ > たのですが、それにも↑は入っていませんでした。Fedoraではどう > して入っているのかしら。。。 > >> (2)C側 >> ライブラリ側のソースを追いかけながら、見よう見まねで別にCコードを >> 書いてrepositoryを叩いてみたところ、上記BUFFER_COPY_ALLのデータは >> 以下のように見えました。 >> 1)列挙したGIBaseInfoをg_base_info_get_typeでGIInfoTypeを取ると >> GI_INFO_TYPE_CONSTANT。 >> 2)そこからg_constant_info_get_typeでGITypeInfoを取ると >> GI_TYPE_TAG_INTERFACE。 >> 3)GITypeInfoからg_type_info_get_interfaceでGIBaseInfoを取り、 >> さらにg_base_info_get_typeでGIInfoTypeを取ると >> GI_INFO_TYPE_FLAGS。 >> Rubyクラスを作るところまで追いたかったのですが、迷ってしまい >> 力尽きました... > いえいえ! > ここまで調べてもらってありがとうございます! > > もしよかったら、3)で取ってきたGIInfoTypeに > g_registered_type_info_get_g_type()して、これのGTypeを調べて > もらえませんか? > GTypeがとれたらg_type_name()でGTypeの名前が見れるのでそれを > 教えてもらいたいです。 > > g_type_name(): http://developer.gnome.org/gobject/stable/gobject-Type-Information.html#g-type-name > > 本当はGstBufferCopyFlagsになっていて欲しいのですが、それが違 > うのになっているんじゃないかと思っています。 > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_jan > _______________________________________________ > ruby-gnome2-devel-ja mailing list > rub...@li... > https://lists.sourceforge.net/lists/listinfo/ruby-gnome2-devel-ja |
|
From: Kouhei S. <ko...@co...> - 2013-02-03 09:08:45
|
須藤です。
In <510...@ni...>
"Re: [ruby-gnome2-devel-ja] giを使ったgstreamer-1.0の初期化(loader)でエラー" on Sat, 02 Feb 2013 23:30:25 +0900,
NAKAJIMA Takashi <nak...@ni...> wrote:
>> もしよかったら、3)で取ってきたGIInfoTypeに
>> g_registered_type_info_get_g_type()して、これのGTypeを調べて
>> もらえませんか?
>> GTypeがとれたらg_type_name()でGTypeの名前が見れるのでそれを
>> 教えてもらいたいです。
>
> やってみたところ、g_type_name()では
>
> void
>
> と表示されました。環境が悪いみたいですね。
>
>> sidのGst-1.0.girだと↑がないんですよねぇ。
>> 念のため、GStreamerのリポジトリの最新版を手元でビルドしてみ
>> たのですが、それにも↑は入っていませんでした。Fedoraではどう
>> して入っているのかしら。。。
>
> Fedoraだから... いや私のせいかもしれないし(^^;)
> ごめんなさい、GStreamerを修復してからリトライすることにします。
GTypeがvoidなフラグの値も正しい値としてありえそうだったので、
masterでサポートしてみました!以下のようにすると、Gst.initが
動くと思います。
% cd #{github.com:ruby-gnome2/ruby-gnome2をcloneしたディレクトリ}
[ruby-gnome2]% git pull --rebase
[ruby-gnome2]% cd glib2
[glib2]% ruby extconf.rb
[glib2]% make
[glib2]% cd ../gobject-introspection
[gobject-introspection]% ruby extconf.rb
[gobject-introspection]% make
[gobject-introspection]% cd ../gstreamer
[gstreamer]% ruby \
-I ../glib2/lib \
-I ../glib2/ext/glib2 \
-I ../gobject-introspection/lib \
-I ../gobject-introspection/ext \
-I sample \
#{gst-giを使う.rbファイル}
|
|
From: NAKAJIMA T. <nak...@ni...> - 2013-02-03 13:59:53
|
中島です。
(2013年02月03日 18:08), Kouhei Sutou wrote:
> GTypeがvoidなフラグの値も正しい値としてありえそうだったので、
> masterでサポートしてみました!以下のようにすると、Gst.initが
> 動くと思います。
>
> % cd #{github.com:ruby-gnome2/ruby-gnome2をcloneしたディレクトリ}
> [ruby-gnome2]% git pull --rebase
> [ruby-gnome2]% cd glib2
> [glib2]% ruby extconf.rb
> [glib2]% make
> [glib2]% cd ../gobject-introspection
> [gobject-introspection]% ruby extconf.rb
> [gobject-introspection]% make
> [gobject-introspection]% cd ../gstreamer
> [gstreamer]% ruby \
> -I ../glib2/lib \
> -I ../glib2/ext/glib2 \
> -I ../gobject-introspection/lib \
> -I ../gobject-introspection/ext \
> -I sample \
> #{gst-giを使う.rbファイル}
ありがとうございます! ウチの環境でも無事Gst.initが動きました。
(なお最後の実行コマンドでは、4番目のインクルード指定は
-I ../gobject-introspection/ext/gobject-introspection
で動いてます)
まだ完動というわけではありませんが、対応ありがとうございました。
次の問題は別メールで報告します。
|