LoginSignup
4
6

More than 5 years have passed since last update.

Pynq-Z1でHDMIパススルー

Posted at

Pynqのサンプル
https://pynq.readthedocs.io/en/latest/9_base_overlay_video.html#Starting-and-stopping-the-controller
の簡易版です.

HDMI INコントローラーの初期化

HDMIを使用するには,HDMIソースを接続し,次のセルを実行してください.HDMIソースが検出されない場合,エラーでタイムアウトします.

in[1]:

JupyterNotebook
from pynq import Overlay
from pynq.drivers.video import HDMI

Overlay("base.bit").download()

hdmi_in = HDMI('in')

HDMI INの確認

HDMI INコントローラーの状態を確認します.

in[2]:

JupyterNotebook
hdmi_in.state()

out[2]:

JupyterNotebook
2

状態は以下の整数として返されます.

  • 0:切断
  • 1:ストリーミング中
  • 2:一時停止中

HDMIソースが接続されている場合,HDMIソースの解像度を取得できます.

in[3]:

JupyterNotebook
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]:

JupyterNotebook
hdmi_out = HDMI('out')

HDMI OUTの確認¶

HDMI OUTコントローラーの状態を確認します.

in[5]:

JupyterNotebook
hdmi_out.state()

out[5]:

JupyterNotebook
0

状態は以下の整数として返されます.

  • 0:停止中
  • 1:動作中

HDMI OUTの解像度の設定

初期化直後は解像度は最低レベルの 640x480 60Hzとして設定されます.
現在の状態を確認するには以下のようにします.

in[6]:

JupyterNotebook
hdmi_out.mode()

out[6]:

JupyterNotebook
'640x480@60Hz'

現在のモードが文字列として出力されます.モードを変更するには引数にインデックスを渡して mode() を呼び出します.

in[7]:

JupyterNotebook
hdmi_out.mode(2)

out[7]:

JupyterNotebook
'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]:

JupyterNotebook
hdmi_out = HDMI('out', frame_list=hdmi_in.frame_list)
hdmi_out.mode(2)

out[8]:

JupyterNotebook
'1280x720@60Hz'

HDMI INからHDMI OUTへ出力

HDMI INからの入力画像をキャプチャしてHDMI OUTに表示するには,HDMI INとHDMI OUTの双方で同じフレームリストを共有するようにします.一方のフレームリストをもう一方のコンストラクタの引数として渡すことで双方のフレームリストを共有させることができます.

in[8]:

JupyterNotebook
hdmi_out = HDMI('out', frame_list=hdmi_in.frame_list)
hdmi_out.mode(2)

out[8]:

JupyterNotebook
'1280x720@60Hz'

コントローラーを開始することにより,HDMI INからの画像がHDMI OUTから表示されます.

in[9]:

JupyterNotebook
hdmi_out.start()

in[10]:

JupyterNotebook
print(hdmi_in.state())
print(hdmi_out.state())

1
1

コントローラーを停止し,オブジェクトを解放する.

in[11]:

JupyterNotebook
hdmi_out.stop()
hdmi_in.stop()
del hdmi_out
del hdmi_in
4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6