You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(32) |
Jun
(60) |
Jul
(52) |
Aug
(67) |
Sep
(167) |
Oct
(186) |
Nov
(173) |
Dec
(220) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(37) |
Feb
(66) |
Mar
(89) |
Apr
(71) |
May
(32) |
Jun
(61) |
Jul
(64) |
Aug
(99) |
Sep
(33) |
Oct
(31) |
Nov
(50) |
Dec
(41) |
| 2004 |
Jan
(9) |
Feb
(9) |
Mar
(25) |
Apr
(23) |
May
(8) |
Jun
|
Jul
(1) |
Aug
(9) |
Sep
(1) |
Oct
(31) |
Nov
(38) |
Dec
|
| 2005 |
Jan
(16) |
Feb
(49) |
Mar
(14) |
Apr
(1) |
May
|
Jun
(12) |
Jul
(25) |
Aug
(18) |
Sep
(48) |
Oct
(76) |
Nov
(20) |
Dec
|
| 2006 |
Jan
(16) |
Feb
(12) |
Mar
(4) |
Apr
(5) |
May
(77) |
Jun
(37) |
Jul
(15) |
Aug
|
Sep
(3) |
Oct
(15) |
Nov
(7) |
Dec
(27) |
| 2007 |
Jan
(3) |
Feb
(2) |
Mar
|
Apr
|
May
(7) |
Jun
(18) |
Jul
(44) |
Aug
(12) |
Sep
(1) |
Oct
(13) |
Nov
(15) |
Dec
(5) |
| 2008 |
Jan
|
Feb
|
Mar
(16) |
Apr
(2) |
May
(8) |
Jun
(1) |
Jul
|
Aug
|
Sep
(8) |
Oct
(6) |
Nov
|
Dec
|
| 2009 |
Jan
|
Feb
(2) |
Mar
(6) |
Apr
|
May
|
Jun
|
Jul
(4) |
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
(3) |
| 2010 |
Jan
(8) |
Feb
(8) |
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(17) |
Oct
(7) |
Nov
(3) |
Dec
|
| 2011 |
Jan
(34) |
Feb
(47) |
Mar
(12) |
Apr
(1) |
May
(2) |
Jun
(2) |
Jul
(20) |
Aug
(4) |
Sep
(31) |
Oct
(16) |
Nov
(26) |
Dec
(40) |
| 2012 |
Jan
(10) |
Feb
(8) |
Mar
|
Apr
(5) |
May
(8) |
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
(8) |
| 2013 |
Jan
(2) |
Feb
(33) |
Mar
(21) |
Apr
(10) |
May
(29) |
Jun
(19) |
Jul
(6) |
Aug
(4) |
Sep
|
Oct
(21) |
Nov
(21) |
Dec
(7) |
| 2014 |
Jan
(3) |
Feb
(12) |
Mar
(9) |
Apr
(4) |
May
(12) |
Jun
|
Jul
|
Aug
(5) |
Sep
(23) |
Oct
(29) |
Nov
(2) |
Dec
(1) |
| 2015 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
|
Dec
(8) |
|
From: Takashi N. <nak...@ni...> - 2013-05-15 12:51:21
|
中島です。 (2013年05月14日 21:56), Kouhei Sutou wrote: > 数値が変えるようにしました! > C的にはgpointer(= void *)なのですが、Rubyにはポインターが > ないのでアドレスを数値として返すようにしました。 ありがとうございます!ご指摘の修正込みでpull requestさせていただきました。 |
|
From: Kouhei S. <ko...@co...> - 2013-05-14 12:57:43
|
須藤です。 In <201...@fu...> "Re: [ruby-gnome2-devel-ja] Clutter::Colorのクラスメソッド定義がおかしい?" on Sun, 12 May 2013 20:51:04 +0900, Kentaro Fukuchi <ke...@fu...> wrote: > 対応ありがとうございました。こちらの環境で他のサンプル含めて > 動作確認できました。 よかったです! > object introspection 関連は仕様がほいほい変わって対応が大変ですね…。 (たぶん)よくなっているので、今後にも期待です! |
|
From: Kouhei S. <ko...@co...> - 2013-05-14 12:57:15
|
須藤です。
In <518...@ni...>
"Re: [ruby-gnome2-devel-ja] GStreamerサンプルstreamsのGstBus.set_sync_handler()について" on Sun, 12 May 2013 18:10:14 +0900,
Takashi Nakajima <nak...@ni...> wrote:
> ただControllerではなくて、Gst::Clockの方でつまづいています。
>
> bin = Gst::Pipeline.new("pipeline")
> clock = bin.clock
> ...
> clock_id = clock.new_single_shot_id(clock.time + (7 * Gst::SECOND))
>
> 私の環境では、ここでclock_idにnilが返ってきてしまいます。
数値が変えるようにしました!
C的にはgpointer(= void *)なのですが、Rubyにはポインターが
ないのでアドレスを数値として返すようにしました。
> コード全文は以下です。
> https://github.com/ted-n/ruby-gnome2/blob/controller/gstreamer/sample/audio-example.rb
手元では
wait_ret = Gst::Clock.id_wait(clock_id)
$stderr.puts "Clock::id_wait returned: #{wait_ret}" if wait_ret != Gst::Clock::OK
を
wait_ret, jitter = Gst::Clock.id_wait(clock_id)
$stderr.puts "Clock::id_wait returned: #{wait_ret}" if wait_ret != Gst::ClockReturn::OK
にしたら動いたのでそこだけ直してpull requestしてもらえますか?
修正点:
* id_waitの戻り値は第2引数のjitterもある。
* Clock::OKではなくClockReturn::OK。
|
|
From: Kentaro F. <ke...@fu...> - 2013-05-12 11:51:18
|
須藤さん 対応ありがとうございました。こちらの環境で他のサンプル含めて 動作確認できました。 object introspection 関連は仕様がほいほい変わって対応が大変ですね…。 ---------------------------------------------------------- Kentaro FUKUCHI | 福地健太郎 (明治大学総合数理学部 准教授) E-mail: ke...@fu... Web: http://fukuchi.org/ 研究室: http://fukuchilab.org/ |
|
From: Kouhei S. <ko...@co...> - 2013-05-12 09:14:16
|
須藤です。 In <201...@fu...> "[ruby-gnome2-devel-ja] Clutter::Colorのクラスメソッド定義がおかしい?" on Sun, 12 May 2013 01:51:55 +0900, Kentaro Fukuchi <ke...@fu...> wrote: > clutter-color.c では、from_hls や from_string という関数が定義されています。 > > void clutter_color_from_string(ClutterColor *color, const gchar *str) > > この第一引数には out 属性が付与されており、caller-allocates として処理 > されています。実際、gir を見るとメソッドではなく関数として定義されて > います。 おぉ。。。 GObject Introspection 1.36だとそうなるんですね。。。 1.32のときはメソッドになっていたのです。 > ところが何が悪いのか、Ruby 側では Clutter::Color.from_string() は引数 > を String 一つのみ要求しており、上記定義とは異なっています。 > この from_string に適当な文字列(例: "rgba(0, 0, 0, 0)")を与えると > Segmentation Fault を引き起こします。同様の問題が from_hls の方でも > 起きています。 > > Ruby での Gobject introspection の扱いがよくわかっていないのですが、 > 第一引数が、クラスメソッドが定義されているクラスと同じクラスで、 > かつ caller-allocates の時に、なにか問題が起きているのではないで > しょうか。 gitの方でout caller-allocatesに対応しておきました! > #私としては from_* みたいなクラスメソッドは clutter 側で、callee-allocates > #で実装するのがこの場合の筋だとは思いますが。 ソースは見てないんですが、挙動だけみると、構造体のときはout もout caller-allocatesも同じように扱っているみたいでした。 > また、上記以外で、サンプルが動かなかったものについて修正を試みた > ものがあります。 > > https://github.com/fukuchi/ruby-gnome2/commit/6628e038891d9a77832c47ddc93c52c8ef5a2d4c#clutter/sample/canvas.rb > https://github.com/fukuchi/ruby-gnome2/commit/9655f1e60f23e3bf8080007c700ba542f4d954cb#clutter/sample/drop-action.rb ありがとうございます! 少し変えたりして取り込んでおきました! |
|
From: Takashi N. <nak...@ni...> - 2013-05-12 09:10:29
|
中島です。
(2013年05月11日 10:43), Kouhei Sutou wrote:
> む、手元だとおきないですねぇ。
> masterでGst.initするとGstControllerもloadするようにしておい
> たのでそれでも同じようなエラーになるか確認してもらえますか?
ありがとうございます。現masterのGst.initでは起きませんでした。
ただControllerではなくて、Gst::Clockの方でつまづいています。
bin = Gst::Pipeline.new("pipeline")
clock = bin.clock
...
clock_id = clock.new_single_shot_id(clock.time + (7 * Gst::SECOND))
私の環境では、ここでclock_idにnilが返ってきてしまいます。
Cコードでは問題なく動くのですが。
コード全文は以下です。
https://github.com/ted-n/ruby-gnome2/blob/controller/gstreamer/sample/audio-example.rb
|
|
From: Kentaro F. <ke...@fu...> - 2013-05-11 17:07:56
|
Clutter バインディングを色々試していて、ちょっとおかしな挙動を見付け
ました。
clutter-color.c では、from_hls や from_string という関数が定義されています。
void clutter_color_from_string(ClutterColor *color, const gchar *str)
この第一引数には out 属性が付与されており、caller-allocates として処理
されています。実際、gir を見るとメソッドではなく関数として定義されて
います。
ところが何が悪いのか、Ruby 側では Clutter::Color.from_string() は引数
を String 一つのみ要求しており、上記定義とは異なっています。
この from_string に適当な文字列(例: "rgba(0, 0, 0, 0)")を与えると
Segmentation Fault を引き起こします。同様の問題が from_hls の方でも
起きています。
Ruby での Gobject introspection の扱いがよくわかっていないのですが、
第一引数が、クラスメソッドが定義されているクラスと同じクラスで、
かつ caller-allocates の時に、なにか問題が起きているのではないで
しょうか。
なお、clutter/color.rb では
def hlsa(hue, luminance, saturation, alpha)
color = new(0,0,0,0)
color.from_hls(hue, luminance, saturation)
color.alpha = alpha
color
end
というクラスメソッドが定義されていますが、from_hls がクラスメソッド
として処理されているため、method が見付からないというエラーが出てい
ます。
irb(main):001:0> require 'clutter'
=> true
irb(main):002:0> Clutter.init
=> true
irb(main):003:0> Clutter::Color.hls(0, 0,0)
NoMethodError: undefined method `from_hls' for #<Clutter::Color:0x318d2d0 ptr=0x1895fb0 own=true>
from /var/lib/gems/1.9.1/gems/clutter-2.0.0/lib/clutter/color.rb:43:in `hlsa'
from /var/lib/gems/1.9.1/gems/clutter-2.0.0/lib/clutter/color.rb:38:in `hls'
from (irb):3
from /usr/bin/irb1.9.1:12:in `<main>'
#私としては from_* みたいなクラスメソッドは clutter 側で、callee-allocates
#で実装するのがこの場合の筋だとは思いますが。
こちらの環境は
Ubuntu 12.10
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
libclutter-1.0-0 - version 1.12.0-0ubuntu1
Ruby/gobject-introspection, Ruby/clutter - version 2.0.0 (gem最新版)
となっております。
また、上記以外で、サンプルが動かなかったものについて修正を試みた
ものがあります。
https://github.com/fukuchi/ruby-gnome2/commit/6628e038891d9a77832c47ddc93c52c8ef5a2d4c#clutter/sample/canvas.rb
https://github.com/fukuchi/ruby-gnome2/commit/9655f1e60f23e3bf8080007c700ba542f4d954cb#clutter/sample/drop-action.rb
これらの挙動は、もしかして git 最新版では異なるものでしょうか?
----------------------------------------------------------
Kentaro FUKUCHI | 福地健太郎 (明治大学総合数理学部 准教授)
E-mail: ke...@fu...
Web: http://fukuchi.org/
研究室: http://fukuchilab.org/
|
|
From: Kouhei S. <ko...@co...> - 2013-05-11 01:43:28
|
須藤です。
In <518...@ni...>
"Re: [ruby-gnome2-devel-ja] GStreamerサンプルstreamsのGstBus.set_sync_handler()について" on Fri, 10 May 2013 01:15:03 +0900,
Takashi Nakajima <nak...@ni...> wrote:
>> とりあえず、これは後回しにしたいのでtypoを直した状態でpull
>> requestしてもらえますか?
>
> いろいろtypoすみません。直してpull requestしました。
> 動かない状態でrequestするのは何か申し訳ないですが...
いえいえ、むしろこちらの力不足ですみません。。。
> 次に移ろうかと思いますが、controllerサンプルのため、GObjectIntrospectionで
> GstControllerを読めるようになりませんでしょうか?
> 当方で勝手にloader.load("GstController")してみたところ、以下のエラーが
> 出てしまっています。
む、手元だとおきないですねぇ。
masterでGst.initするとGstControllerもloadするようにしておい
たのでそれでも同じようなエラーになるか確認してもらえますか?
バージョンの違いなんですかねぇ。手元では1.0.7を使っているの
ですが。。。
% dpkg -l | grep libgstreamer1.0-dev
ii libgstreamer1.0-dev 1.0.7-1 amd64 GStreamer core development files
|
|
From: Takashi N. <nak...@ni...> - 2013-05-09 16:15:18
|
中島です。
(2013年05月08日 23:15), Kouhei Sutou wrote:
> とりあえず、これは後回しにしたいのでtypoを直した状態でpull
> requestしてもらえますか?
いろいろtypoすみません。直してpull requestしました。
動かない状態でrequestするのは何か申し訳ないですが...
次に移ろうかと思いますが、controllerサンプルのため、GObjectIntrospectionで
GstControllerを読めるようになりませんでしょうか?
当方で勝手にloader.load("GstController")してみたところ、以下のエラーが
出てしまっています。
/home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:
line 146
GLib-GObject-CRITICAL **:g_param_spec_boxed: assertion `G_TYPE_IS_BOXED
(boxed_type)' failed
/home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:
line 146
GLib-GObject-CRITICAL **:g_object_class_install_property: assertion
`G_IS_PARAM_SPEC (pspec)' failed
|
|
From: Kouhei S. <ko...@co...> - 2013-05-08 14:15:42
|
須藤です。
In <518...@ni...>
"[ruby-gnome2-devel-ja] GStreamerサンプルstreamsのGstBus.set_sync_handler()について" on Wed, 08 May 2013 01:15:51 +0900,
Takashi Nakajima <nak...@ni...> wrote:
> framestep1.rbの取り込みありがとうございます。
こちらこそありがとうございます!
> GStreamerサンプル移植ですが、次にstreamsディレクトリの
> stream-status.cを試してみたところ、Gst::Bus.set_sync_handler()を
> 呼んだところで以下のエラーになりました。
>
> /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:307:in
> `invoke': TODO: <BusSyncHandler>(func) callback is not supported yet.
> (NotImplementedError)
> from
> /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:307:in
> `block in load_method_info'
> from stream-status.rb:71:in `<main>'
対応しました!
set_sync_handlerの代わりにsync_handlerを使ってください。
あと、ブロックの引数はbusとmessageになるのでこうなります。
bin.bus.sync_handler do |bus, message|
...
end
ブロックの中はここを変更しないといけなかったです。
- puts "object: type #{val.type_name}, value #{val.object}"
+ puts "object: type #{val.type.name}, value #{val.value}"
^ ^^^^^^
- if val.type == Gst::Type::Task
+ if val.type == Gst::Task
------
- Gst::Bus::PASS
+ Gst::BusSyncReply::PASS
+++++++++++
が、これを直しても以下のようなメッセージがでてSEGVするんです
よねぇ。。。
*** longjmp causes uninitialized stack frame ***: ruby terminated
GVLをいじってごにょごにょするのがダメなのかしら。。。
とりあえず、これは後回しにしたいのでtypoを直した状態でpull
requestしてもらえますか?
|
|
From: Takashi N. <nak...@ni...> - 2013-05-07 16:20:16
|
中島です。 framestep1.rbの取り込みありがとうございます。 GStreamerサンプル移植ですが、次にstreamsディレクトリの stream-status.cを試してみたところ、Gst::Bus.set_sync_handler()を 呼んだところで以下のエラーになりました。 /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:307:in `invoke': TODO: <BusSyncHandler>(func) callback is not supported yet. (NotImplementedError) from /home/nakajima/Projects/ruby/gtk/ruby-gnome2/gobject-introspection/lib/gobject-introspection/loader.rb:307:in `block in load_method_info' from stream-status.rb:71:in `<main>' コード全文は以下です。 https://github.com/ted-n/ruby-gnome2/blob/streams/gstreamer/sample/stream-status.rb |
|
From: Kouhei S. <ko...@co...> - 2013-05-07 12:29:41
|
須藤です。 In <518...@ni...> "Re: [ruby-gnome2-devel-ja] GStreamerサンプルsteppingのappsink使用方法について" on Tue, 07 May 2013 00:04:23 +0900, Takashi Nakajima <nak...@ni...> wrote: >> あ、これは、stateとpendingだけじゃなく、GstStateChangeReturn >> も返っているのです。なので、 >> >> state_change_return, state, pending = bin.get_state(Gst::CLOCK_TIME_NONE) >> >> とすると期待した動きになります。 >> >> http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-state >> >> みたいに、Cで戻り値と出力引数があるときは >> >> [戻り値, 出力引数1, 出力引数2, ...] >> >> というのがRubyの戻り値になります。 > > すみません、勘違いしてました。参照カウントの方もエラーが出なくなったのを > 確認しました。問題なさそうなので、pull requestさせていただきます。 ありがとうございます! 取り込みました! |
|
From: Takashi N. <nak...@ni...> - 2013-05-06 15:09:55
|
中島です。 (2013年05月05日 23:16), Kouhei Sutou wrote: > あ、これは、stateとpendingだけじゃなく、GstStateChangeReturn > も返っているのです。なので、 > > state_change_return, state, pending = bin.get_state(Gst::CLOCK_TIME_NONE) > > とすると期待した動きになります。 > > http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-state > > みたいに、Cで戻り値と出力引数があるときは > > [戻り値, 出力引数1, 出力引数2, ...] > > というのがRubyの戻り値になります。 すみません、勘違いしてました。参照カウントの方もエラーが出なくなったのを 確認しました。問題なさそうなので、pull requestさせていただきます。 ご確認ください。 |
|
From: Kouhei S. <ko...@co...> - 2013-05-05 15:19:02
|
須藤です。 In <201...@co...> "Re: [ruby-gnome2-devel-ja] GStreamerサンプルsteppingで参照カウントエラーメッセージ" on Sun, 05 May 2013 23:27:09 +0900 (JST), Kouhei Sutou <ko...@co...> wrote: >> ただし、上記コードは私の環境では、終了時に以下のエラーメッセージが出てし >> まいます。 >> >> (framestep1.rb:16972): GStreamer-CRITICAL **: gst_mini_object_unref: >> assertion `mini_object->refcount > 0' failed >> >> (framestep1.rb:16972): GStreamer-CRITICAL **: gst_mini_object_unref: >> assertion `mini_object->refcount > 0' failed >> >> どこかでカウントがずれてるんでしょうか。 > > あぁ、これは、send_eventで渡すeventがtransfer fullなのに今の > Ruby/GObjectIntrospectionはtransferをなんにも考慮していない > のでカウントがずれてしまうからですね。これは、 > Ruby/GObjectIntrospectionの問題なのでこのサンプルはこれで大 > 丈夫です! こっちも対応しておきました。 これで、前にバッファーだったか何かで、カウントが2以上で writableにならないみたいなやつも直ったはずです。 |
|
From: Kouhei S. <ko...@co...> - 2013-05-05 14:27:22
|
須藤です。 In <518...@ni...> "[ruby-gnome2-devel-ja] GStreamerサンプルsteppingで参照カウントエラーメッセージ" on Sun, 05 May 2013 01:22:47 +0900, Takashi Nakajima <nak...@ni...> wrote: > GStreamerサンプルstepping(ファイルframestep1.c)の移植について、 > 先のメールで報告したstate値を除き、以下のコードでほぼ希望どおりに > 動くようになったと思います。 > > https://github.com/ted-n/ruby-gnome2/blob/stepping/gstreamer/sample/framestep1.rb おぉ!ありがとうございます! pull requestおねがいします! > ただし、上記コードは私の環境では、終了時に以下のエラーメッセージが出てし > まいます。 > > (framestep1.rb:16972): GStreamer-CRITICAL **: gst_mini_object_unref: > assertion `mini_object->refcount > 0' failed > > (framestep1.rb:16972): GStreamer-CRITICAL **: gst_mini_object_unref: > assertion `mini_object->refcount > 0' failed > > どこかでカウントがずれてるんでしょうか。 あぁ、これは、send_eventで渡すeventがtransfer fullなのに今の Ruby/GObjectIntrospectionはtransferをなんにも考慮していない のでカウントがずれてしまうからですね。これは、 Ruby/GObjectIntrospectionの問題なのでこのサンプルはこれで大 丈夫です! |
|
From: Kouhei S. <ko...@co...> - 2013-05-05 14:16:53
|
須藤です。 In <518...@ni...> "Re: [ruby-gnome2-devel-ja] GStreamerサンプルsteppingのappsink使用方法について" on Sat, 04 May 2013 23:12:46 +0900, Takashi Nakajima <nak...@ni...> wrote: >> masterで対応したのでpull --rebaseしてglib2と >> gobject-introspectionをmakeしてください。今回の対応のために >> これらも変更しています。 > > ありがとうございます、ブロックしなくなりました! よかったです! > ただちょっと問題があって... > Cコードの方はpauseをかけたあと、当該の > gst_element_get_state(bin, &state, &pending, -1) > で > state = 3(PAUSED), pending = 0(NULL) > が返ってくるのに対して、Rubyコード > state, pending = bin.get_state(Gst::CLOCK_TIME_NONE) > では > state = 1(READY), pending = 3(PAUSED) > が返ってきます。 あ、これは、stateとpendingだけじゃなく、GstStateChangeReturn も返っているのです。なので、 state_change_return, state, pending = bin.get_state(Gst::CLOCK_TIME_NONE) とすると期待した動きになります。 http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-state みたいに、Cで戻り値と出力引数があるときは [戻り値, 出力引数1, 出力引数2, ...] というのがRubyの戻り値になります。 > あと質問です。Gst::Eventにnew_stepコンストラクタがないようですが、 > Gst::Event.new()の引数の型が合っていれば、new_stepを選択してくれる > のでしょうか? はい!そうです! |
|
From: Takashi N. <nak...@ni...> - 2013-05-04 16:22:59
|
中島です。連投失礼します。 GStreamerサンプルstepping(ファイルframestep1.c)の移植について、 先のメールで報告したstate値を除き、以下のコードでほぼ希望どおりに 動くようになったと思います。 https://github.com/ted-n/ruby-gnome2/blob/stepping/gstreamer/sample/framestep1.rb ただし、上記コードは私の環境では、終了時に以下のエラーメッセージが出てし まいます。 (framestep1.rb:16972): GStreamer-CRITICAL **: gst_mini_object_unref: assertion `mini_object->refcount > 0' failed (framestep1.rb:16972): GStreamer-CRITICAL **: gst_mini_object_unref: assertion `mini_object->refcount > 0' failed どこかでカウントがずれてるんでしょうか。 |
|
From: Takashi N. <nak...@ni...> - 2013-05-04 14:16:22
|
中島です。 (2013年05月03日 20:46), Kouhei Sutou wrote: > これまた難しいやつでした! > masterで対応したのでpull --rebaseしてglib2と > gobject-introspectionをmakeしてください。今回の対応のために > これらも変更しています。 ありがとうございます、ブロックしなくなりました! ただちょっと問題があって... Cコードの方はpauseをかけたあと、当該の gst_element_get_state(bin, &state, &pending, -1) で state = 3(PAUSED), pending = 0(NULL) が返ってくるのに対して、Rubyコード state, pending = bin.get_state(Gst::CLOCK_TIME_NONE) では state = 1(READY), pending = 3(PAUSED) が返ってきます。 ただ、Gst.init "--gst-debug=4" としてINFO出力を見てみると、直前に notifying about state-changed READY to PAUSED (VOID_PENDING pending) が出ており、内部ではPAUSEDに遷移しているようです。 あと質問です。Gst::Eventにnew_stepコンストラクタがないようですが、 Gst::Event.new()の引数の型が合っていれば、new_stepを選択してくれる のでしょうか? |
|
From: Kouhei S. <ko...@co...> - 2013-05-03 11:46:54
|
須藤です。
In <518...@ni...>
"[ruby-gnome2-devel-ja] GStreamerサンプルsteppingのappsink使用方法について" on Thu, 02 May 2013 22:30:53 +0900,
NAKAJIMA Takashi <nak...@ni...> wrote:
> gstreamerサンプル移植について、steppingフォルダにある
> framestep1.cに挑戦しているのですが、どうしてもうまくいかないので、
> 助言いただければ幸いです。
これまた難しいやつでした!
masterで対応したのでpull --rebaseしてglib2と
gobject-introspectionをmakeしてください。今回の対応のために
これらも変更しています。
以下、詳細です。
GStreamerは非同期だったり並列していろいろやるために、裏側で
こっそり別スレッドを立てて、必要ならそこで処理をしたりしてい
ます。そのため、GStreamerに登録したコールバックが別スレッド
から呼ばれることもあります。ただ、Rubyは自分で作ったスレッド
以外ではメソッドを呼んだりできません。呼び出すとクラッシュし
てしまいます。
そこで、旧Ruby/GStreamerではGStreamerから受け取ったコールバッ
クを一度Rubyのスレッドに投げてそこで処理した結果をまた
GStreamerに返す、ということをしていました。
が、新Ruby/GStreamerではそこらへんをがんばりきれていなくて、
今回の問題が発生していました。具体的には
get_state(Ruby) ->
get_state(GStreamer) ->
appsink.signal_emit("new-preroll")(GStreamerの別スレッド) ->
signal_connect("new-preroll")のブロック呼び出し(Ruby) ← ここでブロック
というように別スレッドからnew-prerollのコールバックが呼び出
されているところでブロックしていました。これは、Rubyの
GVL(Giant VM Lock)に関連しています。get_state(Ruby)のとこ
ろでロックをもったまま進んでいたのですが、その中で別の処理
(new-prerollのブロック)をしようとしていました。なので、そ
の別の処理もロックを取ろうとしてデットロックになっていました。
今回の対応では、get_state(GStreamer)を呼び出すときにGVLのロッ
クを外しました。これで、get_state(GStreamer)内でRubyのコード
が呼ばれるようになっても動くようになりました。
今回は、Gst::Element#get_state/set_state/query/send_eventはロッ
クを外して実行するようにしました。が、もしかしたら他にもロッ
クを外さないといけないやつがあるかもしれないので、またうまく
動かないやつがあったら教えてください!
> #bin.get_state(Gst::CLOCK_TIME_NONE)
> state, pending = bin.get_state(Gst::SECOND * 3)
> puts "state: #{state.to_i}, pending: #{pending.to_i}"
> exit 1 if state != Gst::State::PAUSED
今はNONEの方を使って動くはずです!
|
|
From: NAKAJIMA T. <nak...@ni...> - 2013-05-02 13:40:47
|
中島です。ご無沙汰しております。
gstreamerサンプル移植について、steppingフォルダにある
framestep1.cに挑戦しているのですが、どうしてもうまくいかないので、
助言いただければ幸いです。
このサンプルはvideotestsrcにappsinkをつないだパイプラインに
指定した数フレームの再生をかけるものですが、まずはpauseする
ことから始まります。
ところが、以下のコードでパイプラインのステートは3秒待っても
2(READY)までで、3(PAUSED)になってくれません。
◆コード
Gst.init
# create a new bin to hold the elements
bin = Gst::Pipeline.new("pipeline")
raise "'pipeline' gstreamer plugin missing" if bin.nil?
# create a fake source
videotestsrc = Gst::ElementFactory.make("videotestsrc", "videotestsrc")
raise "'videotestsrc' gstreamer plugin missing" if videotestsrc.nil?
videotestsrc.num_buffers = 10
# and a fake sink
appsink = Gst::ElementFactory.make("appsink", "appsink")
raise "'appsink' gstreamer plugin missing" if appsink.nil?
appsink.emit_signals = true
appsink.sync = true
appsink.signal_connect("new-preroll") do |appsink|
# signalled when a new preroll buffer is available
# buffer = appsink.signal_emit_by_name("pull-preroll")
buffer = appsink.pull_preroll
puts "have new-preroll buffer #{buffer}, timestamp #{buffer}"
Gst::FlowReturn::OK
end
# add objects to the main pipeline
bin << videotestsrc << appsink
# link the elements
videotestsrc >> appsink
# go to the PAUSED state and wait for preroll
puts "prerolling first frame"
bin.pause
#bin.get_state(Gst::CLOCK_TIME_NONE)
state, pending = bin.get_state(Gst::SECOND * 3)
puts "state: #{state.to_i}, pending: #{pending.to_i}"
exit 1 if state != Gst::State::PAUSED
(全コードは
https://github.com/ted-n/ruby-gnome2/blob/stepping/gstreamer/sample/framestep1.rb
です)
◆実行結果
prerolling first frame
state: 2, pending: 2
オリジナルのCコードでは、get_stateの前にappsinkにnew-preroll
シグナルが入った後に、ステート3が返ってくるのですが、こちらの
Rubyコードではnew-prerollが入らないようで、このためステートが
変わらないのではと考えています。
appsinkの使い方が間違っているのでしょうか?
|
|
From: Kouhei S. <ko...@co...> - 2013-04-29 08:40:20
|
須藤です。
Ruby-GNOME2プロジェクトはRuby-GNOME2 2.0.0をリリースしました!
2.0.0です!
今回のリリースからGObject Introspectionベースのバインディング
のWindows用バイナリ入りgemの提供を開始しました。(例えば、
Ruby/GStreamerやRuby/Clutter。)これで、今後はGObject
Introspectionベースで開発していけそうだなぁという気がしたの
で2.0.0にしました!
ただ、まだ細々したところを作りこめていないので、引き続き使っ
て問題点があったら教えてもらえるとうれしいです!特に、オブジェ
クトの所有権周りのところが怪しいので、メモリリークしているっ
ぽいとか開放しすぎててSEGVするとかいうのを教えてもらえるとう
れしいです。
今回からRuby/GStreamerがGObject Introspectionベースになって、
GStreamer 1.0系をサポートしました。ただし、古いGStreamer
0.10系はサポートしないので、古いGStreamerを使いたい場合は古
いRuby/GStreamerを使ってください。
GObject Introspectionベースの方はまだ荒削りですが、シンプル
に使う分にはちゃんと動いています。
== お願い
=== Ruby/GTK3に関して
Ruby/GTK3のサンプルの多くはRuby/GTK2から移行しきっていません。
これらのサンプルはまだたくさん警告を出力します。すべてのサン
プルをRuby/GTK2から移行したいと思っています。この作業を手伝っ
て欲しいです。
具体的には以下のような作業になります。
% gem install gtk3
% git clone gi...@gi...:ruby-gnome2/ruby-gnome2.git
% cd ruby-gnome2/gtk3/gtk-demo
% ruby main.rb # たくさんの警告がでます。
% vim xxx.rb # 警告やエラーを直して欲しいす。
# 期待する挙動はRuby/GTK2のサンプルを動かしてみてください。
# % cd ${RUBY_GNOME2_TOP_DIR}/gtk2/gtk-demo
# % ruby main.rb
# GTK+ 3のオリジナルのサンプルも参考にしてください。
# https://git.gnome.org/browse/gtk+/tree/demos/gtk-demo
# もしかしたら、GTK+ 3から移行していないサンプルもあるか
# もしれません。そんなサンプルを見つけたらRuby/GTK3へポー
# ティングして欲しいです。
↑の作業をしてpull requestを送ってくれるとうれしいです。単位
は細かくていいです。大きいのがドカンとくるよりは細かく送って
くれたほうが確認しやすくてうれしいです。なので、少し進めたら
送ってくれると嬉しいです。
この作業の流れはgtk-demo用ですが、他にもgtk3/misc/と
gtk3/testgtk/にもサンプルがあります。これらに関しても手伝っ
てくれるとうれしいです。
=== GObject Introspectionベースのバインディングに関して
既存のバインディングの中で、可能なものはGObject
Introspectionベースのバインディングに置き換えていきたいと思っ
ています。具体的には、まずは、Ruby/GStreamerとRuby/GooCanvas
を置き換えたいと思っています。Ruby/GStreamerの方は基本的な機
能は置き換えていますが、細かい部分はまだ未確認です。というこ
とで、そのあたりの作業を手伝ってもらえないでしょうか。
これらはAPIが多くてなかなか完成しなく、まだ「実験的」な扱い
のライブラリです。しかも、新しいバージョンへの対応もできてい
ません。
GObject Introspectionベースのバインディングにすることにより、
半自動的に新しいバージョンにも対応できるようになり、開発者に
とっても利用者にとってもうれしくなります。
で、やって欲しい作業ですが、サンプルを移植して欲しいです。
こんな風にすると作業を開始できます。おかげさまでGStreamerの
方は移植が進んでいます!
GStreamerの場合:
% gem install gobject-introspection
% git clone gi...@gi...:ruby-gnome2/ruby-gnome2.git
% cd ruby-gnome2/gstreamer
% cd vim sample/xxx.rb
require "gst"
Gst.init
# サンプルを移植する
% ruby -I sample sample/xxx.rb
GStreamerのサンプルは
http://cgit.freedesktop.org/gstreamer/gstreamer/tree/tests/examples/
以下にあるようです。例えば、以下がサンプルです。
http://cgit.freedesktop.org/gstreamer/gstreamer/tree/tests/examples/helloworld/helloworld.c
GooCanvasの場合:
% gem install gobject-introspection
% git clone gi...@gi...:ruby-gnome2/ruby-gnome2.git
% cd ruby-gnome2/goocanvas
% cd vim sample/xxx.rb
require "goocanvas-gi"
# サンプルを移植する
% ruby -I sample sample/xxx.rb
GooCanvasのサンプルはここにあります。
http://git.gnome.org/browse/goocanvas/tree/demo
どれもサンプルをひとつ移植するごとにpull requestを送っても
らえるとうれしいです。
また、中にはうまく移植できないものもあるかもしれません。その
ときはpull requestかメーリングリストで教えてください。
Ruby/GObjectIntrospectionで未実装な機能が必要かもしれません。
== インストール方法
% gem install gtk2
% gem install gtk3
== Ruby-GNOME2 2.0.0: 2013-04-29
WindowsでGObject Introspectionベースのバインディングをサポー
ト!
=== 変更点
==== NEWS
* 修正
* typoを修正。 [Masafumi Yokoyamaさんが報告]
* typoを修正。 [Toyo Abeさんが報告]
==== Ruby/GLib2
* 改良
* lib/gnome2-*.rbをlib/gnome2/ディレクトリに移動。
* GLib 2.34をサポート。 [OBATA Akioさんが報告]
==== Ruby/GdkPixbuf2
* 修正
* [windows] PNGを扱えない問題を修正。
[ruby-gnoem2-devel-ja] [Masafumi Yokoyamaさんが報告]
==== Ruby/GDK3
* 改良
* [windows] 必要のないGreybirdテーマを削除。
[ruby-gnome2-devel-en] [Regis d'Aubaredeさんが報告]
* Gdk::Window#create_cairo_contextを追加。
[ruby-gnome2-devel-en] [Detlef Reichlさんが報告]
==== Ruby/GTK3
* 改良
* サンプルを更新。
[GitHub #140][GitHub #141][GitHub #144]
[Simon Arnaudさんがパッチ提供]
[GitHub #142][GitHub #143][GitHub #145][GitHub #146][GitHub #148]
[Detlef Reichlさんがパッチ提供]
==== Ruby/GObjectIntrospection
* 改良
* [windows] サポート!!
==== Ruby/GStreamer
* 改良
* GStreamer 1.0サポート!
* GObject Introspectionベースに移行!
* GStreamer 0.10サポートを削除。
==== Ruby/Clutter
* 改良
* [windows] サポート!
==== Ruby/ClutterGTK
* 改良
* [windows] サポート!
=== 感謝
* Masafumi Yokoyamaさん
* Toyo Abeさん
* OBATA Akioさん
* Regis d'Aubaredeさん
* Detlef Reichlさん
* Simon Arnaudさん
|
|
From: myokoym <my...@gm...> - 2013-04-06 13:12:26
|
横山です。 電王戦に夢中になっていたらメールがすれ違いになってしまいましたが、 対応ありがとうございます! 私もメインはLinux派なのですが、仕事ではWindowsを使っているのです。 |
|
From: myokoym <my...@gm...> - 2013-04-06 13:06:45
|
横山です。 2013年4月6日 18:43 Kouhei Sutou <ko...@co...>: > これ、require 'gdk_pixbuf2'にしても再現しますよね? はい、再現します。 > gdk_pixbuf2 gemの1.2.5でも同じ問題が起きるか試してもらえます > か?1.2.6からgdk-pixbufのバージョンをあげたので、もしかした > らそれが関係しているのかもしれません。1.2.5で落ちないのなら > 最近の変更だけ確認すればよさそうです。 いろいろ試したところ、1.2.0以降の全バージョンで再現しました。 1.1.9では再現しませんでした。 |
|
From: Kouhei S. <ko...@co...> - 2013-04-06 13:04:29
|
須藤です。 In <201...@co...> "Re: [ruby-gnome2-devel-ja] gdk-pixbuf windows: jpgとgifを同時に使うとsegfault発生" on Sat, 06 Apr 2013 18:43:39 +0900 (JST), Kouhei Sutou <ko...@co...> wrote: > gdk-pixbufのソースをのぞいてみたんですが、GdkPixbufGdipAnim > はプラグインじゃなくてgdk-pixbufに組み込まれていました。(特 > 別扱い。)組み込みなのにどうして2回登録されるのかしら。。。 明示的にconfigureオプションを指定しないと組み込みになっていな かったです。。。明示的にconfigureオプションを指定することに したので、次のリリースからは大丈夫になるはずです! 報告ありがとうございました! Windowsを使っていないのでWindowsだけで起きる問題は気づかない んですよねぇ。。。 |
|
From: Kouhei S. <ko...@co...> - 2013-04-06 09:43:53
|
須藤です。
In <CAE...@ma...>
"[ruby-gnome2-devel-ja] gdk-pixbuf windows: jpgとgifを同時に使うとsegfault発生" on Sat, 6 Apr 2013 00:03:02 +0900,
myokoym <my...@gm...> wrote:
> WindowsでRuby/GTKを使っていたらSegmentation faultに出会いました。
おぉ。。。
> 調べたところ、Windowsでjpgファイルとgifファイルを同時に使うと起きるようです。
> (Linuxでは再現しませんでした。)
>
> ## 再現コード(gtk3のサンプルファイルを使用)
>
> require 'gtk3'
> Gdk::Pixbuf.new("background.jpg")
> Gdk::Pixbuf.new("gtk-logo-rgb.gif")
>
> ## メッセージ
>
> C:\work\ruby-gnome2-master\gtk3\sample\gtk-demo>ruby jpg-and-gif-together.rb
> jpg-and-gif-together.rb: line 3
> GLib-GObject-WARNING **:cannot register existing type `GdkPixbufGdipAnim'
> jpg-and-gif-together.rb: line 3
> GLib-CRITICAL **:g_once_init_leave: assertion `result != 0' failed
> jpg-and-gif-together.rb: line 3
> GLib-GObject-CRITICAL **:g_object_new: assertion `G_TYPE_IS_OBJECT
> (object_type)' failed
> jpg-and-gif-together.rb:3: [BUG] Segmentation fault
>
> 詳細はgistに貼ってあります。
> https://gist.github.com/myokoym/5319283
これ、require 'gdk_pixbuf2'にしても再現しますよね?
gdk-pixbufはプラグインをサポートした画像処理ライブラリなんで
すが、Windowsでは、GDI+というWindowsが提供しているAPIを使っ
て画像を読み書きしているようです。で、
GdkPixbufGdipAnim(GdipはGDI+ということ)というプラグインが2
回登録されているのがSEGVの原因のようです。
gdk-pixbufのソースをのぞいてみたんですが、GdkPixbufGdipAnim
はプラグインじゃなくてgdk-pixbufに組み込まれていました。(特
別扱い。)組み込みなのにどうして2回登録されるのかしら。。。
gdk_pixbuf2 gemの1.2.5でも同じ問題が起きるか試してもらえます
か?1.2.6からgdk-pixbufのバージョンをあげたので、もしかした
らそれが関係しているのかもしれません。1.2.5で落ちないのなら
最近の変更だけ確認すればよさそうです。
|