指定サイズでドンズマリ!

昨日とりあえずボリューム調節関連だけアップロードして追記しようと考えた。
とにかく後はリサイズだわ、それさえ済めばアルファ版として成立すると思う。

とりあえずこんなのを定義して

self.video = {  "width": 0,
                "height": 0,
                "videocrop": None}

ほとんど海外某所のコピペだがこーんなのを定義しておいて

# サイズ取り出しの処理
# 何かシンクロさせるものを作らないといけないので videocrop でも
# ちなみにコレの left とかのプロパティを弄くればクリッピングできる
bin = gst.Bin('video-sink')
self.video["videocrop"] = gst.element_factory_make('videocrop')
bin.add(self.video["videocrop"])
pad = self.video["videocrop"].get_pad("sink")
bin.add_pad(gst.GhostPad("sink", pad))
videosink = gst.element_factory_make('autovideosink')
bin.add(videosink)
gst.element_link_many(self.video["videocrop"], videosink)
self.player.set_property("video-sink", bin)
pad.connect("notify::caps", self.gst_on_notify_caps)

コネクトするハンドラをば

def gst_on_notify_caps(self, pad, pcaps):
    caps = pad.get_negotiated_caps()
    if caps != None:
        if "video" in caps.to_string():
            x = caps[0]["width"]
            y = caps[0]["height"]
            self.new_size(x, y)

元サイズはコレでなんとか取れるようになった。
(もっといい方法は無いのかなぁ?)
後は指定倍率にリサイズする関数を作ればいい。

def new_size(self, x, y):
    if x == self.video["width"] and y == self.video["height"]:
        return
    self.video["width"] = x
    self.video["height"] = y
    # で…あれ??????

今のレイアウトではいったいどうやったらこのサイズにできる?
うわあぁ丸ごとソース変更になりそうな悪寒。