昨日とりあえずボリューム調節関連だけアップロードして追記しようと考えた。
とにかく後はリサイズだわ、それさえ済めばアルファ版として成立すると思う。
とりあえずこんなのを定義して
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 # で…あれ??????
今のレイアウトではいったいどうやったらこのサイズにできる?
うわあぁ丸ごとソース変更になりそうな悪寒。