跳到主要内容

HDMI RX

开发板有一个 HDMI RX 接口,支持标准的 HDMI 2.0 协议,可以支持高达 2160p@60Hz 的视频输入。

  • 准备 开发板
  • 准备 HDMI 线材

使用步骤

HDMI RX 设备接入开发板后,将被注册为内核中的视频设备,生成的节点为 /dev/video0,可以使用 v4l2-ctl 命令获取设备信息并捕获帧。

  • 检查设备信息
$ v4l2-ctl -d /dev/video40 -D
Driver Info:
Driver name : rk_hdmirx
Card type : rk_hdmirx
Bus info : fdee0000.hdmirx-controller
Driver version : 5.10.110
Capabilities : 0x84201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Streaming
Extended Pix Format
  • 确认分辨率和图像格式
$ v4l2-ctl -d /dev/video40 --get-fmt-video
Format Video Capture Multiplanar:
Width/Height : 1920/1080
Pixel Format : 'BGR3' (24-bit BGR 8-8-8)
Field : None
Number of planes : 1
Flags : premultiplied-alpha, 0x000000fe
Colorspace : Unknown (0x068c0490)
Transfer Function : Unknown (0x000000c0)
YCbCr/HSV Encoding: Unknown (0x000000ff)
Quantization : Default
Plane 0 :
Bytes per Line : 5760
Size Image : 6220800
  • 获取数字视频时序
v4l2-ctl -d /dev/video40 --get-dv-timings
DV timings:
Active width: 1920
Active height: 1080
Total width: 2200
Total height: 1125
Frame format: progressive
Polarities: -vsync -hsync
Pixelclock: 148512000 Hz (60.00 frames per second)
Horizontal frontporch: 88
Horizontal sync: 44
Horizontal backporch: 148
Vertical frontporch: 4
Vertical sync: 5
Vertical backporch: 36
Standards:
Flags:
  • 通过设置分辨率和像素格式捕获图像文件

将 HDMI RX 设置为 4k 显示器并连接到 HDMI RX。

v4l2-ctl --verbose -d /dev/video40 --set-fmt-video=width=1920,height=1080,pixelformat='BGR3' --stream-mmap=4 --stream-skip=3 --stream-count=5 --stream-to=/home/toybrick/hdmiin.yuv --stream-poll
  • 检查图片文件

在 Windows 使用 7yuv 工具

在 Linux 使用 ffplay 工具

ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 /home/toybrick/hdmiin.yuv
  • 检测音频功能

当你的 HDMI RX 有音频输入时,你可以用 arecord 从 HDMI RX 端口获得音频并在耳机上播放。

arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: rockchipes8388 [rockchip,es8388], device 0: dailink-multicodecs ES8323.7-0011-0 [dailink-multicodecs ES8323.7-0011-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: rockchiphdmiin [rockchip,hdmiin], device 0: fddf8000.i2s-dummy_codec hdmiin-dc-0 [fddf8000.i2s-dummy_codec hdmiin-dc-0]
Subdevices: 1/1
Subdevice #0: subdevice #0

你可以看到,HDMI RX(HDMI IN)的声卡号是 2,你可以运行下面的命令,在 HDMI RX 有音频输入时,录制和播放音频。

# 使用 card 2 (HDMI IN)
arecord -Dhw:2,0 -d 5 -f cd -r 44100 -c 2 -t wav /home/toybrick/hdmiin_audio.wav
# 使用 card 1 (ES8388 音频输出)
aplay -Dhw:1,0 /home/toybrick/hdmiin_audio.wav

另外,可以采用如下脚本,同时录制视频和音频。

record.sh
#!/bin/bash

DEVICE="/dev/video40"
OUTPUT="output.mp4"

# 列出所有音频设备
echo "Available audio devices:"
arecord -l
echo "Available audio cards:"
cat /proc/asound/cards

# 检查视频设备
if [ ! -e "$DEVICE" ]; then
echo "Error: Device $DEVICE not found"
exit 1
fi

# 设置设备权限
sudo chmod 666 $DEVICE

# 初始化设备
echo "Initializing device..."
v4l2-ctl -d $DEVICE --set-fmt-video=width=1920,height=1080,pixelformat=BGR3

# 等待设备就绪
sleep 2

# 开始录制(包含音频)
echo "Starting recording..."
ffmpeg -f v4l2 \
-thread_queue_size 512 \
-input_format BGR3 \
-video_size 1920x1080 \
-framerate 60 \
-i $DEVICE \
-f alsa \
-ac 2 \
-ar 48000 \
-i hw:2,0 \ # 这里的2,0需要根据实际的音频设备号调整
-c:v libx264 \
-preset ultrafast \
-qp 0 \
-c:a aac \
-y $OUTPUT

# 检查录制结果
if [ -f "$OUTPUT" ]; then
echo "Recording completed: $OUTPUT"
# 显示文件信息
ffprobe $OUTPUT
else
echo "Recording failed"
fi