Pynqのサンプル
https://pynq.readthedocs.io/en/latest/9_base_overlay_video.html#Starting-and-stopping-the-controller
の簡易版です.
HDMI INコントローラーの初期化
HDMIを使用するには,HDMIソースを接続し,次のセルを実行してください.HDMIソースが検出されない場合,エラーでタイムアウトします.
in[1]:
from pynq import Overlay
from pynq.drivers.video import HDMI
Overlay("base.bit").download()
hdmi_in = HDMI('in')
HDMI INの確認
HDMI INコントローラーの状態を確認します.
in[2]:
hdmi_in.state()
out[2]:
2
状態は以下の整数として返されます.
- 0:切断
- 1:ストリーミング中
- 2:一時停止中
HDMIソースが接続されている場合,HDMIソースの解像度を取得できます.
in[3]:
hdmi_in.start()
width = hdmi_in.frame_width()
height = hdmi_in.frame_height()
print('HDMI is capturing a video source of resolution {}x{}'\
.format(width,height))
HDMI is capturing a video source of resolution 1280x720
HDMI OUTコントローラーの初期化
HDMI出力を使用するのは,HDMI入力を使用する場合と似ています.HDMI OUTポートにディスプレイデバイス等を接続します.
in[4]:
hdmi_out = HDMI('out')
HDMI OUTの確認¶
HDMI OUTコントローラーの状態を確認します.
in[5]:
hdmi_out.state()
out[5]:
0
状態は以下の整数として返されます.
- 0:停止中
- 1:動作中
HDMI OUTの解像度の設定
初期化直後は解像度は最低レベルの 640x480 60Hzとして設定されます.
現在の状態を確認するには以下のようにします.
in[6]:
hdmi_out.mode()
out[6]:
'640x480@60Hz'
現在のモードが文字列として出力されます.モードを変更するには引数にインデックスを渡して mode() を呼び出します.
in[7]:
hdmi_out.mode(2)
out[7]:
'1280x720@60Hz'
有効なモードは以下の通りです.
- 0:640x480, 60Hz
- 1:800x600, 60Hz
- 2:1280x720, 60Hz
- 3:1280x1024, 60Hz
- 4:1920x1080, 60Hz
HDMI INからHDMI OUTへ出力
HDMI INからの入力画像をキャプチャしてHDMI OUTに表示するには,HDMI INとHDMI OUTの双方で同じフレームリストを共有するようにします.一方のフレームリストをもう一方のコンストラクタの引数として渡すことで双方のフレームリストを共有させることができます.
in[8]:
hdmi_out = HDMI('out', frame_list=hdmi_in.frame_list)
hdmi_out.mode(2)
out[8]:
'1280x720@60Hz'
HDMI INからHDMI OUTへ出力
HDMI INからの入力画像をキャプチャしてHDMI OUTに表示するには,HDMI INとHDMI OUTの双方で同じフレームリストを共有するようにします.一方のフレームリストをもう一方のコンストラクタの引数として渡すことで双方のフレームリストを共有させることができます.
in[8]:
hdmi_out = HDMI('out', frame_list=hdmi_in.frame_list)
hdmi_out.mode(2)
out[8]:
'1280x720@60Hz'
コントローラーを開始することにより,HDMI INからの画像がHDMI OUTから表示されます.
in[9]:
hdmi_out.start()
in[10]:
print(hdmi_in.state())
print(hdmi_out.state())
1
1
コントローラーを停止し,オブジェクトを解放する.
in[11]:
hdmi_out.stop()
hdmi_in.stop()
del hdmi_out
del hdmi_in