1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

2020-07-11 PYNQ > HDMI出力で線を引く (pynq.lib.video Moduleのwriteframe()使用 + frameのRGB値を変更)

Last updated at Posted at 2020-07-11
動作環境
Windows 10 Pro (v1909) 
PYNQ-Z1 (Digilent) (以下、PYNQと表記)

概要

  • bitstreamはbase.bitを使う
  • pynq.lib.video ModuleにあるAPIでHDMI入力とHDMI出力を行う
  • readframe(), writeframe()を使う
  • writeframe()の前にframeの値を変更することで、線を引く

接続

PCのHDMI出力をPYNQに読み取らせる。

  • A. PCのHDMI端子 <-> PYNQのHDMI IN
  • B. PYNQのHDMI OUT <-> モニタのHDMI

手順

上記で実行したbase/videoのvideoサンプルを使う。

実際には下記を実行する。

準備

from pynq.overlays.base import BaseOverlay
from pynq.lib.video import *

base = BaseOverlay("base.bit")
hdmi_in = base.video.hdmi_in
hdmi_out = base.video.hdmi_out
hdmi_in.configure()
hdmi_out.configure(hdmi_in.mode)

hdmi_in.start()
hdmi_out.start()

ここまででHDMI入力とHDMI出力の準備ができる。

線を引く

frameの一部のRGB値を0にすることで黒の線を引く。

aframe = hdmi_in.readframe()
print(aframe.shape)

for idx in range(100):
    aframe[idx][100][0] = 0
    aframe[idx][100][1] = 0
    aframe[idx][100][2] = 0

hdmi_out.writeframe(aframe)
(720, 1280, 3)

27インチ縦置きのモニタで線を引くことができた。

IMG_1893.JPG

frame

今回試した設定ではframeのサイズは(720, 1280, 3)。単純なRGB値のnumpy ndarrayのようだ。
これであれば、HDMI OUTで任意の図形描画(と文字)ができる気がする。

座標は、右上が(0,0)になるようだ。

frame[column][row][RGB]

RGBは下記のようになるようだ。
0: blue
1: green
2: red

HDMI INなし

HDMI INをつなげずに出力だけの場合は下記のようにする。
黒い背景に赤色の線が見える。

frame2 = hdmi_out.newframe()
for idx in range(700):
    frame2[idx][100][0] = 0  # blue
    frame2[idx][100][1] = 0 # green
    frame2[idx][100][2] = 255
    
hdmi_out.writeframe(frame2)

遅い

frame2(numpy ndarray)への代入は遅い。
70 * 700 の代入で13秒程度かかる。
np.zeros()などを使った場合、flush()がない、などのエラーとなる。
単純なnumpy ndarrayでもないのかもしれない。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?