Max-Bitrate Benchmarking - 2023.1 English

H.264/H.265 Video Codec Unit v1.2 Solutions LogiCORE IP Product Guide (PG252)

Document ID
PG252
Release Date
2023-05-16
Version
2023.1 English

The following tables summarize the maximum bit rate achievable for 3840x2610p60 resolution, XV20 pixel format at GStreamer level. The maximum supported target bit rate values vary based on what elements and type of input used in the pipeline.

Maximum Bit Rate support for Record Use Case with 4kp60 Resolution

Table 1. Encoder Maximum Bit Rate Tests with XV20 format
Video Recording ( Live video capture → VCU encoder → Parser → Muxer → filesink )
Format Codec Entropy Mode Rate Control Mode B-Frames = 4 DDR Mode Max Target Bitrate
4:2:2, 10-bit H.264 (AVC) CABAC VBR IBBBBP PS-DDR 160 Mb/s
CAVLC VBR IBBBBP PS-DDR 160 Mb/s
H.265 (HEVC) - VBR IBBBBP PS-DDR 267 Mb/s

Example pipeline used for measurement:

ENC_EXTRA_IP_BUFFERS=5 gst-launch-1.0 -e v4l2src device=/dev/video0 io-mode=4 num-buffers=7320 ! video/x-raw, width=3840, height=2160, format=NV16_10LE32, framerate=60/1 ! omxh265enc control-rate=variable  target-bitrate=267000 max-bitrate=320400  gop-mode=basic gop-length=60 b-frames=4 num-slices=8 prefetch-buffer=TRUE cpb-size=1000 initial-delay=500 ! video/x-h265 , profile=main-422-10   ! queue max-size-bytes=0 ! h265parse ! mp4mux ! fpsdisplaysink name=fps1sink text-overlay=false fps-update-interval=1000 video-sink="filesink location=/run/test_4kp60_xv20_hevc_267000.mp4"
Note:
  1. It is recommended to store output file in RAM or SATA.
  2. Achieved target bit rate depends on complexity of video content.
  3. Above data is captured by recording a file in mp4 container format.

Maximum Bit Rate Support for Playback Use Case with 4kp60 Resolution

Playback ( Filesrc → Decoder → Display )
Format Codec Entropy Mode Rate Control Mode B-Frames = 4 DDR Mode Max Target Bitrate
4:2:2, 10-bit H.264 (AVC) CABAC VBR IBBBBP PL_DDR 120 Mb/s
CAVLC VBR IBBBBP PL_DDR 160 Mb/s
H.265 (HEVC) - VBR IBBBBP PL_DDR 267 Mb/s

Example pipeline used for measurement:

gst-launch-1.0 filesrc location=/run/test_4kp60_xv20_hevc_267000.mp4 ! qtdemux ! h265parse ! omxh265dec internal-entropy-buffers=5 ! queue max-size-bytes=0 ! fpsdisplaysink name=fps1sink text-overlay=false video-sink="kmssink bus-id="a00c0000.v_mix" plane-id=33 render-rectangle=<0,0,3840,2160> fullscreen-overlay=1" -v
Note: It is recommended to keep input file in RAM or SATA.

Maximum Bit Rate Support for Streaming Use Case with 4kp60 Resolution

Table 2. Maximum Bit Rate Support for Streaming Use Case with 4kp60 Resolution
Video Streaming ( Live video capture → VCU encoder → Parser → rtppay → Stream-out Stream-in → rtpdepay → Decoder → Display )
Format Codec Rate Control Mode Latency Mode B-Frames = 0 DDR Mode Max Target Bitrate
4:2:2, 10-bit H.264 (AVC) LOW_LATENCY Normal IPPP

Encoder

(PS_DDR),

Decoder (PL_DDR)

90 Mb/s
Reduced 90 Mb/s
Low latency 25 Mb/s
Xilinx low latency 25 Mb/s
CBR + max-picture-size Normal 90 Mb/s
Reduced 90 Mb/s
H.265 (HEVC) LOW_LATENCY Normal 130 Mb/s
Reduced 130 Mb/s
Low latency 25 Mb/s
Xilinx low latency 25 Mb/s
CBR + max-picture-size Normal 110 Mb/s
Reduced 110 Mb/s

Example pipeline used for measurement:

H.265 (HEVC) with Low-latency Rate Control Mode and Xilinx Low Latency
Server
gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 ! video/x-raw\(memory:XLNXLL\), format=NV16_10LE32,width=3840,height=2160,framerate=60/1 ! queue ! omxh265enc num-slices=8 periodicity-idr=240 cpb-size=500 gdr-mode=horizontal initial-delay=250 control-rate=low-latency prefetch-buffer=true target-bitrate=25000 gop-mode=low-delay-p ! video/x-h265, alignment=nal ! queue max-size-buffers=0 ! rtph265pay ! udpsink buffer-size=60000000 host=192.168.0.2 port=5004 async=false max-lateness=-1 qos-dscp=60 max-bitrate=120000000 -v
Client
gst-launch-1.0 udpsrc port=5004 buffer-size=60000000 caps="application/x-rtp, media=video, clock-rate=90000, payload=96, encoding-name=H265" ! rtpjitterbuffer latency=7 ! queue ! rtph265depay ! h265parse ! video/x-h265, alignment=nal ! queue ! 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=a00c0000.v_mix" sync=true -v
H.265 (HEVC) with CBR Rate Control Mode and Normal Latency Mode
Server
gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 ! video/x-raw,format=NV16_10LE32,width=3840,height=2160,framerate=60/1 ! queue ! omxh265enc num-slices=8 gop-length=120 periodicity-idr=120 control-rate=constant max-picture-size=2017 prefetch-buffer=true target-bitrate=110000 gop-mode=low-delay-p ! video/x-h265, alignment=au ! rtph265pay ! udpsink buffer-size=60000000 host=192.168.0.2 port=5004 max-lateness=-1 qos-dscp=60 async=false max-bitrate=120000000 -v
Client
gst-launch-1.0 udpsrc port=5004 buffer-size=60000000 caps="application/x-rtp, media=video, clock-rate=90000, payload=96, encoding-name=H265" ! rtpjitterbuffer latency=1000 ! rtph265depay ! h265parse ! video/x-h265, alignment=au ! omxh265dec low-latency=0 ! queue max-size-bytes=0 ! fpsdisplaysink name=fpssink text-overlay=false video-sink="kmssink bus-id=a00c0000.v_mix fullscreen-overlay=1" sync=true -v
Note: The above data is captured by streaming elementary stream over RTP.

Maximum Bit Rate Support for Serial Use Case with 4kp60 Resolution

Table 3. Maximum Bit Rate Support for Serial Use Case with 4kp60 Resolution
Serial ( Live video capture → VCU encoder → VCU decoder → Display )
Format Codec Rate Control Mode Latency Mode B-Frames = 0 or 4 DDR Mode Max Target Bitrate
4:2:2, 10-bit H.264 (AVC) LOW_LATENCY Low Latency IPPP

Encoder

(PS_DDR),

Decoder (PL_DDR)

25 Mb/s
Xilinx Low Latency IPPP 25 Mb/s
CBR + max-picture-size Normal IBBBBP 90 Mb/s
Reduced IPPP 200 Mb/s
H.265 (HEVC) LOW_LATENCY Low Latency IPPP 25 Mb/s
Xilinx Low Latency IPPP 25 Mb/s
CBR + max-picture-size Normal IBBBBP 120 Mb/s
Reduced IPPP 200 Mb/s

Example pipeline used for measurement:

H.265 (HEVC) with Low-latency Rate Control Mode and Xilinx Low Latency
gst-launch-1.0 -v v4l2src io-mode=dmabuf device=/dev/video0 ! video/x-raw\(memory:XLNXLL\), width=3840, height=2160, format=NV16_10LE32, framerate=60/1 ! queue ! omxh265enc num-slices=8 control-rate=low-latency gop-mode=low-delay-p target-bitrate=25000 cpb-size=500 gdr-mode=horizontal initial-delay=250 periodicity-idr=240 filler-data=0 prefetch-buffer=true ! 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=a00c0000.v_mix hold-extra-sample=1 show-preroll=false sync=true" sync=true -v
H.265 (HEVC) with CBR Rate Control Mode and Normal Latency Mode
gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 ! video/x-raw,format=NV16_10LE32,width=3840,height=2160,framerate=60/1 ! omxh265enc num-slices=8 gop-length=60 b-frames=4 control-rate=2 prefetch-buffer=true target-bitrate=120000 max-picture-size=2200 ! video/x-h265, alignment=au ! queue ! video/x-h265, profile=main-422-10, alignment=au ! omxh265dec low-latency=0 ! queue max-size-bytes=0 ! fpsdisplaysink name=fpssink text-overlay=false "video-sink=kmssink bus-id=a00c0000.v_mix fullscreen-overlay=1" sync=true -v