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:
Sinks:
VCU Codec:
Streaming Interfaces:
Video format:
10G Deliverables:
Pipeline | Input source | Output Type | Resolution | Video encode/Decoder 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
x – Not supported
The below figure shows the HDMI Video Display design hardware block diagram.
The below figure shows the HDMI Video Display design software block diagram.
Refer below link for Board Setup
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_hdmitx/ to FAT32 formatted SD card directory.
└── rdf0428-zcu106-vcu-trd-2019-1 ├── apu │ ├── apps │ ├── vcu_petalinux_bsp │ ├── vcu_sdx │ └── ws_bypass ├── host_x86 │ └── host_package ├── images │ ├── vcu_10g │ ├── vcu_audio │ ├── vcu_hdmirx │ ├── vcu_hdmitx │ ├── vcu_pcie │ ├── vcu_plddr_hdmi │ ├── vcu_sdirx │ ├── vcu_sdirxtx │ ├── vcu_sditx │ ├── vcu_sdx │ └── vcu_trd ├── pl │ ├── constrs │ ├── pre-built │ ├── scripts │ └── srcs └── README.txt |
TRD package contents specific to VCU HDMI Tx design are placed in the following directory structure.
└── rdf0428-zcu106-vcu-trd-2019-1 ├── apu │ ├── apps │ └── vcu_petalinux_bsp ├── documentation ├── images │ ├── vcu_hdmitx │ │ ├── autostart.sh │ │ ├── bin │ │ ├── BOOT.BIN │ │ ├── config │ │ ├── image.ub │ │ ├── system.dtb │ │ └── vcu ├── pl │ ├── constrs │ ├── pre-built │ │ ├── vcu_hdmitx │ ├── Readme.txt │ ├── scripts │ │ └── vcu_hdmitx.tcl │ └── srcs └── README.txt |
Configuration files(input.cfg) are placed in the following directory structure in /media/card.
config/ ├── Display ├── Stream └── input.cfg |
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 the plain text.
Execution of the application is shown below:
% vcu_gst_app < path to *.cfg file> |
Example:
Display Pipeline execution
% vcu_gst_app /media/card/config/Display/input.cfg |
Stream-in Pipeline execution
% vcu_gst_app /media/card/config/Stream/input.cfg |
To measure the latency of the pipeline, run the below command. The latency data is huge, so dump it to a file.
% GST_DEBUG="GST_TRACER:7" GST_TRACERS="latency;scheduletime" ./vcu_gst_app ./input.cfg >& dump_log.txt |
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 input. 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 for each stream.
Exit:
It indicates to the application that the configuration is over.
Input Configuration:
It is the starting point of 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:///media/usb/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 no)
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.
$ modetest -D a0070000.v_mix -s 40:3840x2160-60@AR24 -w 35:"alpha":0 |
$ gst-launch-1.0 uridecodebin uri="file:///run/media/sda/test.ts" ! queue max-size-bytes=0 ! kmssink bus-id="a0070000.v_mix" |
NOTE: File location should be SATA SSD(ext4 format) to avoid the read-write bandwidth issue.
$ 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" |
$ 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=nal ! omxh265dec internal-entropy-buffers=5 low-latency=1 ! queue max-size-bytes=0 ! kmssink bus-id="a0070000.v_mix" |