Zynq UltraScale+MPSoC VCU TRD 2019.2 - LLP2 PS DDR NV12 HDMI Video Capture and Display
...
2 Other Information
2.1 Known Issues
- For Petalinux related known issues please refer AR# 72950: PetaLinux 2019.2 - Product Update Release Notes and Known Issues.
- For VCU related known issues please refer AR# 66763: LogiCORE H.264/H.265 Video Codec Unit (VCU) - Release Notes and Known Issues and Xilinx Zynq UltraScale+ MPSoC Video Codec Unit.
2.2 Limitations
- For Petalinux related limitations please refer AR# 72950: PetaLinux 2019.2 - Product Update Release Notes and Known Issues.
- For VCU related limitations please refer AR# 66763: LogiCORE H.264/H.265 Video Codec Unit (VCU) - Release Notes and Known Issues, Xilinx Zynq UltraScale+ MPSoC Video Codec Unit and
Anchor PG252 2019.2 PG252 2019.2 PG252 link.
2.3 Optimum VCU Encoder parameters for use-cases
Video streaming:
- Video streaming use-case requires very stable bitrate graph for all pictures.
- It is good to avoid periodic large Intra pictures during the encoding session
- Low-latency rate control (hardware RC) is the preferred control-rate for video streaming, it tries to maintain equal amount frame sizes for all pictures.
- Good to avoid periodic Intra frames instead use low-delay-p (IPPPPP…)
- VBR is not a preferred mode of streaming.
Performance: AVC Encoder settings:
- It is preferred to use 8 slices only for better AVC encoder performance.
- AVC standard does not support Tile mode processing which results in the processing of MB rows sequentially for entropy coding.
Quality: Low bitrate AVC encoding:
- Enable profile=high and use qp-mode=auto for low-bitrate encoding use-cases.
- The high profile enables 8x8 transform which results in better video quality at low bitrates.
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:
1, 2
Output:
Select the video interface.
Options: HDMI
Out Type:
Options: display and stream
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 the input configuration.
Input Num:
Starting Nth input configuration.
Options: 1, 2
Input Type:
Input source type.
Options: HDMI
Raw:
To tell the pipeline is processed or pass-through.
Options: False
Note: Raw use-case is not supported for LLP2 use-case. It is supported for non-LLP2 use-case.
Width:
The width of the live source.
Options: 3840, 1920
Height:
The height of the live source.
Options: 2160, 1080
...
Code Block | ||
---|---|---|
| ||
root@zcu106_vcu_trd:~# xmedia-ctl -p -d /dev/media1 -----> media node for HDMI input source Media controller API version 4.19.0 Media device information ------------------------ driver xilinx-video model Xilinx Video Composite Device serial bus info hw revision 0x0 driver version 4.19.0 Device topology - entity 1: vcap_hdmi output 0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 -----> Video node for HDMI Rx source 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-subdev1 pad0: Sink [fmt:VYYUYY8_1X24/1280x720 field:none colorspace:srgb] <- "a0000000.v_hdmi_rx_ss":0 [ENABLED] pad1: Source [fmt:VYYUYY8_1X24/1920x1080 field:none colorspace:srgb] -> "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-subdev2 pad0: Source [fmt:RBG888_1X24/3840x2160 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.query:no-link] -----> HDMI Rx Link Status -> "a0080000.v_proc_ss":0 [ENABLED] |
NOTE: Here "dv.query:no-link" under "v_hdmi_rx_ss" node shows HDMI-Rx source is not connected or HDMI-Rx source is not active(Try waking up the device by pressing a key on remote).
- Follow the below steps to switch the HDMI-Rx resolution from 1080p60 to 4kp60.
- Check current HDMI Input Source Resolution (1080p60) by following the above-mentioned steps.
- Run vcu_gst_app for current HDMI resolution (1080p60) by executing the following command.
Code Block | ||
---|---|---|
| ||
$ vcu_gst_app /media/card/config/input.cfg |
Below configurations needs to be set in input.cfg for non-LLP2 HDMI-1080p60 use-case.
Code Block | ||
---|---|---|
| ||
Common Configuration : START Num Of Input : 1 Output : HDMI Out Type : Display Frame Rate : 60 Exit Input Configuration : START Input Num : 1 Input Type : hdmi_1 Raw : FALSE Width : 1920 Height : 1080 Format : NV12 Enable LLP2 : FALSE Exit Encoder Configuration : START Encoder Num : 1 Encoder Name : HEVC Profile : Main Rate Control : Low_Latency Filler Data : False QP : Auto L2 Cache : TRUE Latency Mode : Sub_Frame Low Bandwidth : FALSE Gop Mode : Basic Bitrate : 25000 B Frames : 0 Slice : 8 GoP Length : 60 Preset : Custom Exit |
- Change Resolution of HDMI Input Source from 1080p60 to 4kp60 by following below steps.
- Set the HDMI source resolution to 4kp60 (Homepage → Settings → Display & Sound → Resolution → change to 4kp60).
- Save the configuration to take place the change.
- Verify the desired HDMI Input Source Resolution (4kp60) by following the above-mentioned steps.
- Change Resolution of HDMI Input Source from 1080p60 to 4kp60 by following below steps.
- If HDMI Tx link-up issue is observed after Linux booting, use the following command to get the blue screen on HDMI-Tx for 4kp60.
Code Block | ||
---|---|---|
| ||
% modetest -D a0070000.v_mix -s 35:3840x2160-60@BG24 |
- The table below lists the parameters of the pixel format.
Pixel Format | GStreamer Format | Media Bus Format | GStreamer HEVC Profile | GStreamer AVC Profile | Kmssink Plane-id |
---|---|---|---|---|---|
NV12 | NV12 | VYYUYY8_1X24 | main | high | 30, 31 |
- Run the following gst-launch-1.0 command to display NV12 video on HDMI-Tx using ultra low-latency(LLP2) GStreamer pipeline (capture → encode → decode → display). Where "video0" indicates a video node for the input source.
Code Block | ||
---|---|---|
| ||
$ gst-launch-1.0 v4l2src io-mode=4 device=/dev/video0 ! video/x-raw\(memory:XLNXLL\), width=3840, height=2160, format=NV12, framerate=60/1 ! omxh265enc qp-mode=auto gop-mode=basic gop-length=60 b-frames=0 target-bitrate=25000 num-slices=8 control-rate=low-latency prefetch-buffer=TRUE low-bandwidth=false filler-data=0 cpb-size=1000 initial-delay=500 ! video/x-h265, alignment=nal ! queue max-size-buffers=0 ! omxh265dec low-latency=1 ! video/x-raw\(memory:XLNXLL\) ! queue max-size-bytes=0 ! fpsdisplaysink name=fpssink text-overlay=false video-sink="kmssink bus-id=a0070000.v_mix plane-id=30 max-lateness=5000000 show-preroll-frame=false sync=true" sync=true |
- Run the following gst-launch-1.0 command to stream-out NV12 video using ultra low-latency(LLP2) GStreamer pipeline. Where "video0" indicates a video node for the input source.
...