ClutterGst Aspect Rate

Y901x 1.2 beta2 を公開しました。

色々考えた結果リサイズはキーボード操作のみに。
だってメニューからリサイズしたことなんて作った本人は一度も無いモン!

GTK+ 3.20 でショートカットウィンドウが追加されるようなのでそれで賄う予定。
ソレを使う問題点は Ubuntu には完全未対応となるってことだけ。
Ubuntu GNOME でさえ 3.18 ですから。

その Ubuntu は次で独自 API に切り換えるという破滅への第一歩を選んだみたい。
GNOME が GNOME3 でアレだけシェアを落としたのを見てきたはずなのにねぇ。
とりあえず我がサイトは Ubuntu のページを全削除しておいた。

まあそれはどうでもよくて。
アスペクト比変更機能には本当に困った。

GStreamer-devel – Difference between videoscale and videobox

gst-launch-1.0 には aspect-ratio というオプションがある。
ならば普通に比率を与えれば有効にできる手段があるはず!
と探してみるけど全然見つからない。

手段は違うけどこんなのも見つけた。
kaa-candy/gstreamer.py at master ? freevo/kaa-candy ? GitHub
でも clutter_actor_animatev はもう使うなとのこと。

本当に Clutter はゴロッと変わって以前のサンプルコードが全滅状態。
初期段階で手を出さないでよかったなんて思うくらい。

結局自力でやることに。

        this.actor = new Clutter.Actor();
        this.actor.set_background_color(Clutter.Color.new(0, 0, 0, 255));
        //this.content = new ClutterGst.Aspectratio();
        this.content = new ClutterGst.Content();
        this.actor.set_content(this.content);
		//
		// etc...
		//
        this.set_video_size = function() {
            let allocation = this.vbox.get_allocation();
            let offset = SEEKBAR_HEIGHT;
            if (this.is_fullscreen)
                offset = 0;
            if (this.player.get_uri() != null) {
                let w = this.src_width;
                if (this.aspectrate == 1)
                    w = this.src_height *16 / 9;
                else if (this.aspectrate == 2)
                    w = this.src_height *4 / 3;
                let h = this.src_height;
                let aw = allocation.width;
                let ah = allocation.height - offset;
                let width, height, x, y = 0;
                if (aw * h > ah * w) {
                    width = w * ah / h;
                    height = ah;
                    x = (aw - width) / 2;
                    y = 0;
                } else {
                    width = aw;
                    height = h * aw / w;
                    x = 0;
                    y = (ah - height) / 2;
                }
                this.actor.set_width(width);
                this.actor.set_height(height);
                this.actor.set_position(x, y);
            } else {
                this.actor.set_width(allocation.width);
                this.actor.set_height(allocation.height - offset);
            }
        }

ま、自力変更は x の付かない Y901 でやっていたし。
ClutterGst.Content を適切にレイアウトするだけで難しくはない。

それより色々問題が出ている。

application_id を有効にすると多重起動の一つを閉じただけで落ちる。
GLXBadDrawable というエラーで落ちる。

GtkApplication からもう一つウインドウを開く処理を入れると落ちる。
GLXBadDrawable というエラーで落ちる。

GL* だから OpenGL だよね、Clutter 側がなんとかしてくれないとお手上げ。