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
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:
- It is recommended to store output file in RAM or SATA.
- Achieved target bit rate depends on complexity of video content.
- 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
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
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