Zynq UltraScale+ MPSoC VCU TRD 2020.1 - HDMI Video Display

This page provides all the information related to Design Module 7 - VCU TRD HDMI Video Display design.

Table of Contents

1 Overview

The primary goal of this Design is to demonstrate the capabilities of VCU hard block present in Zynq UltraScale+ EV devices. The TRD will serve as a platform to tune the performance parameters of VCU and arrive at optimal configurations for encoder and decoder blocks with the streaming use case where bandwidth plays a vital role. 

This design supports the following video interfaces:

Sources:

  • File source (SD card, USB storage, SATA hard disk)

  • Stream-In from network or internet

Sinks:

  • HDMI-Tx display pipeline implemented in the PL

VCU Codec:

  • Video Encode/Decode capability using VCU hard block in PL 

    • AVC/HEVC encoding

    • Encoder/decoder parameter configuration

Streaming Interfaces:

  • 1G Ethernet on PS 

Video format:

  • NV12

10G Deliverables:

Pipeline

Input Source

Output Type

Resolution

Video Codec Type

Deliverables

Playback pipeline

File Source / Stream-In

HDMI-Tx

4K / 1080p

HEVC / AVC

Playback of the local-file / stream-in with video decoded using VCU and display on  HDMI-Tx

Supported Features:

The table below provides the supported encoder feature in this release.

Resolution

Command Line

Single Stream

Multi-stream

4Kp60

NA

4Kp30

NA

1080p60

NA

√ - Supported
NA - Not applicable

The below figure shows the HDMI Video Display design hardware block diagram.

The below figure shows the HDMI Video Display design software block diagram.


1.1 Board Setup

Refer below link for Board Setup

1.2 Run Flow

The TRD package is released with the source code, Vivado project, Petalinux BSP, and SD card image that enables the user to run the demonstration. It also includes the binaries necessary to configure and boot the ZCU106 board. Prior to running the steps mentioned in this wiki page, download the TRD package and extract its contents to a directory referred to as TRD_HOME which is the home directory.

Refer below link to download all TRD contents.

TRD package contents specific to HDMI Video Display design is placed in the following directory structure. The user needs to copy all the files from the $TRD_HOME/images/vcu_hdmi_tx/ to FAT32 formatted SD card directory.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 rdf0428-zcu106-vcu-trd-2020-1 ├── apu │ └── vcu_petalinux_bsp ├── images │ ├── vcu_10g │ ├── vcu_audio │ ├── vcu_hdmi_multistream_xv20 │ ├── vcu_hdmi_rx │ ├── vcu_hdmi_tx │ ├── vcu_llp2_hdmi_nv12 │ ├── vcu_llp2_hdmi_nv16 │ ├── vcu_llp2_hdmi_xv20 │ ├── vcu_llp2_sdi_xv20 │ ├── vcu_multistream_nv12 │ ├── vcu_pcie │ ├── vcu_sdirx │ ├── vcu_sditx │ └── vcu_sdi_xv20 ├── pcie_host_package │ ├── COPYING │ ├── include │ ├── libxdma │ ├── LICENSE │ ├── readme.txt │ ├── RELEASE │ ├── tests │ ├── tools │ └── xdma ├── pl │ ├── constrs │ ├── designs │ ├── prebuild │ ├── README.md │ └── srcs └── README.txt

TRD package contents specific to VCU HDMI-Tx design are placed in the following directory structure.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 └── rdf0428-zcu106-vcu-trd-2020-1 ├── apu │ └── vcu_petalinux_bsp │ └── xilinx-vcu-zcu106-v2020.1-final.bsp ├── images │ ├── vcu_hdmi_tx │ │ ├── autostart.sh │ │ ├── BOOT.BIN │ │ ├── boot.scr │ │ ├── config │ │ ├── image.ub │ │ ├── system.dtb │ │ └── vcu ├── pcie_host_package ├── pl │ ├── constrs │ ├── designs │ │ ├──zcu106_hdmitx │ ├── prebuild │ │ ├──zcu106_hdmirx │ ├── README.md │ └── srcs │ ├── hdl │ └── ip └── README.txt

Configuration files (input.cfg) are placed in the following directory structure in /media/card.

1 2 3 4 5 6 config ├── Display │   └── input.cfg ├── Stream │   └── input.cfg └── input.cfg

1.2.1 GStreamer Application (vcu_gst_app)

The vcu_gst_app is a command-line multi-threaded Linux application. The command-line application requires an input configuration file (input.cfg) to be provided in plain text.

Execution of the application is shown below:

1 $ vcu_gst_app <path to *.cfg file>

Example:

Display Pipeline execution

1 $ vcu_gst_app /media/card/config/Display/input.cfg

Stream-in Pipeline execution

1 $ vcu_gst_app /media/card/config/Stream/input.cfg

Latency Measurement: To measure the latency of the pipeline, run the below command. The latency data is huge, so dump it to a file.

1 $ GST_DEBUG="GST_TRACER:7" GST_TRACERS="latency" GST_DEBUG_FILE=/run/latency.log vcu_gst_app /media/card/config/input.cfg

Refer below link for detailed run flow steps

1.3 Build Flow

Refer below link for Build Flow


2 Other Information

2.1 Known Issues

2.2 Limitations


3 Appendix A - Input Configuration File (input.cfg)

The example configuration files are stored at /media/card/config/ folder.

Common Configuration:
It is the starting point of common configuration.

Num of Input:
Provide the number of inputs. This is always 1 for this design.

Output:
Select the video interface
Options: HDMI or DP

Out Type:
Options: Display

Display Rate:
Pipeline frame rate
Options: 30 FPS or 60 FPS

Exit:
It indicates to the application that the configuration is over.

Input Configuration:
It is the starting point of the input configuration.

Input Num:
Starting Nth input configuration
Options: 1

Input Type:
Input source type.
Options: File, Stream

Uri:
File path or Network URL. Applicable for file playback and stream-in pipeline only. Supported file formats for playback are ts, mp4 and mkv.
Options: file:///run/media/sda/abc.ts (for file path), udp://192.168.26.89:5004/ (for Network streaming, Here 192.168.26.89 is IP address and 5004 is port number)

Raw:
To tell the pipeline is processed or pass-through
Options: True, False

Width:
The width of the live source
Options: 3840, 1920

Height:
The height of the live source
Options: 2160, 1080

Exit:
It indicates to the application that the configuration is over.

Trace Configuration:
It is the starting point of trace configuration.

FPS Info:
To display fps info on the console
Options: True, False

APM Info:
To display the APM counter number on the console
Options: True, False

Pipeline Info:
To display pipeline info on console
Options: True, False

Exit
It indicates to the application that the configuration is over.


4 Appendix B - HDMI-Tx Link-up and GStreamer Commands

This section covers configuration of HDMI-Tx, along with demonstrating HDMI-Tx link-up issue using modetest utility. It also contains sample GStreamer HDMI Video pipelines for Playback and Stream-in use-cases.

  • If HDMI-Tx link-up issue is observed after Linux booting, use the following command:

1 $ modetest -D a0070000.v_mix -s 44:3840x2160-60@BG24
  • File Playback use case: Run the following gst-launch-1.0 command for file playback using the GStreamer pipeline.

1 $ gst-launch-1.0 uridecodebin uri="file:///run/media/sda/test.ts" ! queue max-size-bytes=0 ! kmssink bus-id="a0070000.v_mix"

The file location should be SATA SSD(ext4 format) to avoid the read-write bandwidth issue

  • Stream-in use case: Run the following gst-launch-1.0 command to display CBR stream-in on HDMI-Tx video using the Gstreamer pipeline where 5004 is port number.

1 $ gst-launch-1.0 udpsrc port=5004 buffer-size=60000000 caps="application/x-rtp, clock-rate=90000" ! rtpjitterbuffer latency=1000 ! rtpmp2tdepay ! tsparse ! video/mpegts ! tsdemux name=demux ! queue ! h265parse ! video/x-h265, profile=main, alignment=au ! omxh265dec internal-entropy-buffers=5 low-latency=0 ! queue max-size-bytes=0 ! kmssink bus-id="a0070000.v_mix"