Zynq UltraScale+ MPSoC VCU TRD - Debugging - HDMI Rx Capture Pipeline
The VCU TRD has a HDMI Rx capture pipeline. The following are some tips on how to debug the HDMI Rx capture pipeline configuration. They walk through how to find the settings, adjust them and then send the output to the HDMI Tx Display Pipeline, or capture and dump out some frames to disk, using YAVTA.
This was tested on the Zynq UltraScale+ MPSoC VCU TRD 2018.3, but the same steps should apply other versions of the Zynq UltraScale+ MPSoC VCU TRD, as well as to other platforms which have a similar pipeline, like the Zynq UltraScale+ MPSoC Base TRD 2018.3.
Table of Contents
How to find the HDMI Rx Capture Pipeline
Find if the driver was loaded:
Look at the DMESG output for the Xilinx HDMI Rx Subsystem to find out if the driver was loaded and the associated address.
$ dmesg | grep -i "xilinx-hdmi-rx"
[ 11.832125] xilinx-hdmi-rx a0000000.v_hdmi_rx_ss: probed
[ 11.876814] xilinx-hdmi-rx a0000000.v_hdmi_rx_ss: Using 2 EDID blocks (256 bytes) from 'xilinx/xilinx-hdmi-rx-edid.bin'.
[ 11.909455] xilinx-hdmi-rx a0000000.v_hdmi_rx_ss: hdmi rx audio initialized
[ 11.916483] xilinx-hdmi-rx a0000000.v_hdmi_rx_ss: probe successfulFind Device ID:
List the devices and find that the HDMI Rx capture is /dev/video0.
NOTE: The other HDMI captures are all created from the broadcaster as duplicates of the original HDMI Rx to do multi-stream testing.
$ v4l2-ctl --list-devices
vcap_csi output 0 (platform:vcap_csi:0):
/dev/video1
vcap_hdmi output 0 (platform:vcap_hdmi:0):
/dev/video0
vcap_hdmi_2 output 0 (platform:vcap_hdmi_2:0):
/dev/video3
vcap_hdmi_3 output 0 (platform:vcap_hdmi_3:0):
/dev/video4
vcap_hdmi_4 output 0 (platform:vcap_hdmi_4:0):
/dev/video5
vcap_hdmi_5 output 0 (platform:vcap_hdmi_5:0):
/dev/video6
vcap_hdmi_6 output 0 (platform:vcap_hdmi_6:0):
/dev/video7
vcap_hdmi_7 output 0 (platform:vcap_hdmi_7:0):
/dev/video8
vcap_tpg output 0 (platform:vcap_tpg:0):
/dev/video2Find Media Pipeline
To find the associated Media device you can use either of the following methods.
NOTE: This is important as the media device # will change depending on if the LI-IMX274MIPI-FMC card is connected or not. (In this test case the LI-IMX274MIPI-FMC card is not connected.)
Look at the devfs
Look through the media devices and to find which media device contains the HDMI Rx (
/dev/video0)
$ ls /sys/class/video4linux/video0/device/ | grep -i media
media7
$ for m in /dev/media* ; do echo $m ; media-ctl -p -d $m | grep -B 3 /dev/video0 ; echo '-----------' ; done
/dev/media0
-----------
/dev/media1
-----------
/dev/media2
-----------
/dev/media3
-----------
/dev/media4
-----------
/dev/media5
-----------
/dev/media6
-----------
/dev/media7
Device topology
- entity 1: vcap_hdmi output 0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
-----------Display Media Pipeline
You can use media-ctl to list out the structure of the pipeline and you will find that it looks like this:
HDMI Rx -> VPSS Scaler -> Video Frame Buffer Write IP
$ media-ctl -d /dev/media7 -p
Media controller API version 4.14.0
Media device information
------------------------
driver xilinx-video
model Xilinx Video Composite Device
serial
bus info
hw revision 0x0
driver version 4.14.0
Device topology
- entity 1: vcap_hdmi output 0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "a0080000.v_proc_ss":1 [ENABLED]
- entity 5: a0080000.v_proc_ss (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev7
pad0: Sink
[fmt:Y8_1X8/1280x720 field:none colorspace:srgb]
<- "a0000000.v_hdmi_rx_ss":0 [ENABLED]
pad1: Source
[fmt:VYYUYY8_1X24/1280x720 field:none]
-> "vcap_hdmi output 0":0 [ENABLED]
- entity 8: a0000000.v_hdmi_rx_ss (1 pad, 1 link)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev8
pad0: Source
[fmt:RBG888_1X24/1920x1080 field:none colorspace:srgb]
[dv.caps:BT.656/1120 min:0x0@25000000 max:4096x2160@297000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom]
[dv.detect:BT.656/1120 1920x1080p60 (2200x1125) stds:CEA-861 flags:CE-video]
-> "a0080000.v_proc_ss":0 [ENABLED]How to Configure the HDMI Rx Pipeline
Update the HDMI Rx Pipeline Formats
Use media-ctl to configure the HDMI Rx Pipeline color formats
#VPSS: Scaler Only with CSC
$ media-ctl -d /dev/media7 -V '"a0080000.v_proc_ss":0 [fmt:RBG888_1X24/1920x1080 field:none]'
$ media-ctl -d /dev/media7 -V '"a0080000.v_proc_ss":1 [fmt:VYYUYY8_1X24/1920x1080 field:none]'Use media-ctl to check if the settings were updated.
$ media-ctl -d /dev/media7 -p
Media controller API version 4.14.0
Media device information
------------------------
driver xilinx-video
model Xilinx Video Composite Device
serial
bus info
hw revision 0x0
driver version 4.14.0
Device topology
- entity 1: vcap_hdmi output 0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "a0080000.v_proc_ss":1 [ENABLED]
- entity 5: a0080000.v_proc_ss (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev7
pad0: Sink
[fmt:RBG888_1X24/1920x1080 field:none]
<- "a0000000.v_hdmi_rx_ss":0 [ENABLED]
pad1: Source
[fmt:VYYUYY8_1X24/1920x1080 field:none]
-> "vcap_hdmi output 0":0 [ENABLED]
- entity 8: a0000000.v_hdmi_rx_ss (1 pad, 1 link)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev8
pad0: Source
[fmt:RBG888_1X24/1920x1080 field:none colorspace:srgb]
[dv.caps:BT.656/1120 min:0x0@25000000 max:4096x2160@297000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom]
[dv.detect:BT.656/1120 1920x1080p60 (2200x1125) stds:CEA-861 flags:CE-video]
-> "a0080000.v_proc_ss":0 [ENABLED]Verify that HDMI Rx Pipeline is working:
HDMI Rx to HDMI Tx using GStreamer
Use GStreamer to send the output to HDIM Tx Subsystem for display on HDMI Monitor.
#Make sure modetest is no longer running
$ killall modetest
#Use GStreamer to pipe the output from the HDMI Rx to the HDMI Tx
$ gst-launch-1.0 v4l2src device=/dev/video0 io-mode=4 '!' video/x-raw, width=1920, height=1080, framerate=60/1, format=NV12 '!' queue '!' kmssink bus-id=a0070000.v_mix fullscreen-overlay=1Dump Frames using Yavta
Use Yavta list the supported formats before capturing:
$ yavta --enum-formats /dev/video0
Device /dev/video0 opened.
Device `vcap_hdmi output 0' on `platform:vcap_hdmi:0' is a video output (without mplanes) device.
- Available formats:
Format 0: NV12M (32314d4e)
Type: Video capture (1)
Name: Y/CbCr 4:2:0 (N-C)
Format 1: NV12 (3231564e)
Type: Video capture (1)
Name: Y/CbCr 4:2:0
Format 0: NV12M (32314d4e)
Type: Video capture mplanes (9)
Name: Y/CbCr 4:2:0 (N-C)
Format 1: NV12 (3231564e)
Type: Video capture mplanes (9)
Name: Y/CbCr 4:2:0
Video format: NV12 (3231564e) 1920x1080 field none, 1 planes:
* Stride 1920, buffer size 3110400Use Yavta to dump frames.
You will receive 3 output frames that can be viewed using your faforite YUV Viewer.
$ yavta -n 3 -c10 -f NV12 -s 1920x1080 --skip 7 -F /dev/video0
Device /dev/video0 opened.
Device `vcap_hdmi output 0' on `platform:vcap_hdmi:0' is a video output (without mplanes) device.
Video format set: NV12 (3231564e) 1920x1080 field none, 1 planes:
* Stride 1920, buffer size 3110400
Video format: NV12 (3231564e) 1920x1080 field none, 1 planes:
* Stride 1920, buffer size 3110400
3 buffers requested.
length: 1 offset: 3521476496 timestamp type/source: mono/EoF
Buffer 0/0 mapped at address 0x7fa6487000.
length: 1 offset: 3521476496 timestamp type/source: mono/EoF
Buffer 1/0 mapped at address 0x7fa618f000.
length: 1 offset: 3521476496 timestamp type/source: mono/EoF
Buffer 2/0 mapped at address 0x7fa5e97000.
0 (0) [-] none 0 0 B 1044.863621 1044.863635 26.603 fps ts mono/EoF
1 (1) [-] none 1 0 B 1044.880305 1044.880315 59.938 fps ts mono/EoF
2 (2) [-] none 2 0 B 1044.897026 1044.897045 59.805 fps ts mono/EoF
3 (0) [-] none 3 0 B 1044.913673 1044.913683 60.071 fps ts mono/EoF
4 (1) [-] none 4 0 B 1044.930356 1044.930366 59.941 fps ts mono/EoF
5 (2) [-] none 5 0 B 1044.947040 1044.947090 59.938 fps ts mono/EoF
6 (0) [-] none 6 0 B 1044.963724 1044.963774 59.938 fps ts mono/EoF
7 (1) [-] none 7 0 B 1044.980409 1044.980458 59.934 fps ts mono/EoF
8 (2) [-] none 8 0 B 1044.997091 1045.017878 59.945 fps ts mono/EoF
9 (0) [-] none 9 0 B 1045.013774 1045.054662 59.941 fps ts mono/EoF
Captured 10 frames in 0.228630 seconds (43.738613 fps, 0.000000 B/s).
3 buffers released.Modify the Pipeline to support RGB
After you are sure that the pipeline is working you can then change the output to RGB.
Use media-ctl to change the output type of the Video Scaler with Color Space Conversion.
#VPSS: Scaler Only with CSC
$ media-ctl -d /dev/media7 -V '"a0080000.v_proc_ss":1 [fmt:RBG888_1X24/1920x1080 field:none]'Use media-ctl to check if the settings were updated.
$ media-ctl -d /dev/media7 -p
Media controller API version 4.14.0
Media device information
------------------------
driver xilinx-video
model Xilinx Video Composite Device
serial
bus info
hw revision 0x0
driver version 4.14.0
Device topology
- entity 1: vcap_hdmi output 0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "a0080000.v_proc_ss":1 [ENABLED]
- entity 5: a0080000.v_proc_ss (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev7
pad0: Sink
[fmt:RBG888_1X24/1920x1080 field:none]
<- "a0000000.v_hdmi_rx_ss":0 [ENABLED]
pad1: Source
[fmt:RBG888_1X24/1920x1080 field:none]
-> "vcap_hdmi output 0":0 [ENABLED]
- entity 8: a0000000.v_hdmi_rx_ss (1 pad, 1 link)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev8
pad0: Source
[fmt:RBG888_1X24/1920x1080 field:none]
[dv.caps:BT.656/1120 min:0x0@25000000 max:4096x2160@297000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom]
[dv.detect:BT.656/1120 1920x1080p60 (2200x1125) stds:CEA-861 flags:CE-video]
-> "a0080000.v_proc_ss":0 [ENABLED]HDMI Rx to HDMI Tx using GStreamer
Because the output pipeline does not support RGB input, you can not use GStreamer to output to HDIM Tx Subsystem for display on HDMI Monitor. You would need to modify the Video Mixer in the PL design to accept RGB input.
Dump Frames using Yavta
Use Yavta list the supported formats before capturing:
$ yavta --enum-formats /dev/video1
Device /dev/video1 opened.
Device `vcap_csi output 0' on `platform:vcap_csi:0' is a video output (without mplanes) device.
- Available formats:
Format 0: XBGR (52474258)
Type: Video capture (1)
Name: 32-bit XBGR 8-8-8-8
Format 1: XR24 (34325258)
Type: Video capture (1)
Name: 32-bit BGRX 8-8-8-8
Format 2: RGB24 (33424752)
Type: Video capture (1)
Name: 24-bit RGB 8-8-8
Format 0: XBGR (52474258)
Type: Video capture mplanes (9)
Name: 32-bit XBGR 8-8-8-8
Format 1: XR24 (34325258)
Type: Video capture mplanes (9)
Name: 32-bit BGRX 8-8-8-8
Format 2: RGB24 (33424752)
Type: Video capture mplanes (9)
Name: 24-bit RGB 8-8-8
Video format: NV12 (3231564e) 1920x1080 field none, 1 planes:
* Stride 1920, buffer size 3110400Use Yavta to dump frames.
You will receive 3 output frames that can be viewed using your favorite YUV Viewer.
$ yavta -n 3 -c10 -f RGB24 -s 1920x1080 --skip 7 -F /dev/video0
Device /dev/video0 opened.
Device `vcap_hdmi output 0' on `platform:vcap_hdmi:0' is a video output (without mplanes) device.
Video format set: RGB24 (33424752) 1920x1080 field none, 1 planes:
* Stride 5760, buffer size 6220800
Video format: RGB24 (33424752) 1920x1080 field none, 1 planes:
* Stride 5760, buffer size 6220800
3 buffers requested.
length: 1 offset: 3309268624 timestamp type/source: mono/EoF
Buffer 0/0 mapped at address 0x7f82928000.
length: 1 offset: 3309268624 timestamp type/source: mono/EoF
Buffer 1/0 mapped at address 0x7f82339000.
length: 1 offset: 3309268624 timestamp type/source: mono/EoF
Buffer 2/0 mapped at address 0x7f81d4a000.
0 (0) [-] none 0 0 B 1373.336794 1373.336810 26.164 fps ts mono/EoF
1 (1) [-] none 1 0 B 1373.353529 1373.353586 59.755 fps ts mono/EoF
2 (2) [-] none 2 0 B 1373.370162 1373.370172 60.121 fps ts mono/EoF
3 (0) [-] none 3 0 B 1373.386846 1373.386856 59.938 fps ts mono/EoF
4 (1) [-] none 4 0 B 1373.403529 1373.403538 59.941 fps ts mono/EoF
5 (2) [-] none 5 0 B 1373.420213 1373.420222 59.938 fps ts mono/EoF
6 (0) [-] none 6 0 B 1373.436898 1373.436907 59.934 fps ts mono/EoF
7 (1) [-] none 7 0 B 1373.453581 1373.453590 59.941 fps ts mono/EoF
8 (2) [-] none 8 0 B 1373.470265 1373.531092 59.938 fps ts mono/EoF
9 (0) [-] none 9 0 B 1373.486948 1373.608656 59.941 fps ts mono/EoF
Captured 10 frames in 0.310082 seconds (32.249497 fps, 0.000000 B/s).
3 buffers released.
Debug:
Check if HDMI Input has properly locked:
#Debug HDMI Rx
hdmi_addr=$(dmesg | grep -i 'xilinx-hdmi-rx' | grep -i 'probed' | awk '/xilinx-hdmi-rx/ { print $4 }' | sed 's/://g')
cat /sys/devices/platform/amba_pl@0/${hdmi_addr}/hdmi_info
cat /sys/devices/platform/amba_pl@0/${hdmi_addr}/hdmi_log
cat /sys/devices/platform/amba_pl@0/${hdmi_addr}/vphy_info
cat /sys/devices/platform/amba_pl@0/${hdmi_addr}/vphy_log
Appendix:
List Supported Formats:
You can also use v4l2-ctl to list the supported formats. These will change when the IP is reconfigured.
When configured for VYYUYY8 Pixel Format:
$ v4l2-ctl -d /dev/video0 -D --list-formats-ext
Driver Info (not using libv4l2):
Driver name : xilinx-vipp
Card type : vcap_hdmi output 0
Bus info : platform:vcap_hdmi:0
Driver version: 4.14.0
Capabilities : 0x84201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Streaming
Extended Pix Format
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture Multiplanar
Pixel Format: 'NM12'
Name : Y/CbCr 4:2:0 (N-C)
Index : 1
Type : Video Capture Multiplanar
Pixel Format: 'NV12'
Name : Y/CbCr 4:2:0When configured for RBG888 format:
$ v4l2-ctl -d /dev/video0 -D --list-formats-ext
Driver Info (not using libv4l2):
Driver name : xilinx-vipp
Card type : vcap_hdmi output 0
Bus info : platform:vcap_hdmi:0
Driver version: 4.14.0
Capabilities : 0x84201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Streaming
Extended Pix Format
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture Multiplanar
Pixel Format: 'XBGR'
Name : 32-bit XBGR 8-8-8-8
Index : 1
Type : Video Capture Multiplanar
Pixel Format: 'XR24'
Name : 32-bit BGRX 8-8-8-8
Index : 2
Type : Video Capture Multiplanar
Pixel Format: 'RGB3'
Name : 24-bit RGB 8-8-8