Ubuntu 13.04 gst

第270回 Ubuntu 13.04とGNOME:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

どうやら Ubuntu 13.04 の Nautilus は 3.6 になるようだ。

ということは Ubuntu の GStreamer も 1.0 になるということだ!
Nautilus 3.6 は動画サムネイルに GStreamer 1.0 を使っている。

これは Y901x を早々に GStreamer 1.0 仕様に変更しなければ。
まだ 0.3.9 で動くからと PyGtk のまま放置のままもどうかと思うし。
作った本人、つまり筆者以外に使っている人はいないと思うけど。

Novacut/GStreamer1.0 – Ubuntu Wiki

大方はこのとおりに変更すればイケた。
playbin2 を playbin にするのを忘れないようにと。

しかし

playbin.get_property("uri") # All None

set_property(uri) は OK だが get は何をやっても None しか得られない。
既知のバグみたいなので修正を待つしかない、それまで別の手段で URI を保存しよう。

Gst.State.CHANGE_FAILURE に相当するものが見つからない。
PlayState 変更失敗はどうやって見分けるのだろう?

#self.p_position = self.player.query_position(gst.FORMAT_TIME)[0] # 0.10 PyGtk
self.p_position = self.player.query_position(Gst.Format.TIME)[1]  # 1.0 PyGI

ココでかなり苦しんだ、[0] だと bool 値だと気がつくのに時間が掛かった。
シークバーが全然動かなくて悩んだけどそういうことだった。

ボリューム変更の手段がいまだに解らない!
PyGst で gst.interfaces 以下の部分はどう変更になったのだろう?

で、
GStreamer とは関係ないところでも多々発見。

gtk.keysyms.Return が Gdk.KEY_Return と Gdk のアトリビュートになっていた。
gobject.timeout_add が GLib.timeout_add となったのも解り難い。

''' PyGtk
pixmap = gtk.gdk.Pixmap(None, 1, 1, 1)
color = gtk.gdk.Color()
blank_cursor = gtk.gdk.Cursor(pixmap, pixmap, color, color, 0, 0)
'''
blank_cursor = Gdk.Cursor.new(Gdk.CursorType.BLANK_CURSOR)

透明マウスカーソルはこんなに簡単に作れるようになった、嬉しいぜ。
PyGtk でも実は同じような手段があったのかな?

何より一番困ったこと。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from gi.repository import Gtk, GdkPixbuf, Gdk

class CToolBox(Gtk.Box):
    """
        Inheritance GtkBox is HORIZONTAL
    """
    def __init__(self):
        Gtk.Box.__init__(self, Gtk.Orientation.VERTICAL, 0)
        self.pack_start(Gtk.Label("Orientation"), False, False, 0)
        self.pack_start(Gtk.Label("VERTICAL"), False, False, 0)

class Win(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)
        self.add(CToolBox())
        self.show_all()

Win()
Gtk.main()

vertical

これができないみたい。
GtkVBox から継承ならイケるんだけど、この場合は下記みたくするしか無いかな…

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from gi.repository import Gtk, GdkPixbuf, Gdk

class CToolBox(Gtk.Box):
    """
        OK
    """
    def __init__(self):
        Gtk.Box.__init__(self)
        vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
        vbox.pack_start(Gtk.Label("Orientation"), False, False, 0)
        vbox.pack_start(Gtk.Label("VERTICAL"), False, False, 0)
        self.pack_start(vbox, True, True, 0)

class Win(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)
        self.add(CToolBox())
        self.show_all()

Win()
Gtk.main()

設定ダイアログは GtkTable を使っているので GtkGrid に書き換えだ。
面倒だから今度!

他にも何かあった気がするけど、気がついたら又今度書く。
とりあえずまだまともに動かないけど Blog にバックアップ。
もし明日筆者が死んでも誰かが続きをやってくれるのを期待して。
y901x-0.99.0.tar.gz

しかしやはり実際にアプリケーションを作ってみないと気がつかないことが多いと実感。
作った本人しか使わないと解っていても何か作り続けるといいことがある。