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