Xilinx ZYNQ UltraScale+ MPSoC Accelerating Image Processing Elements
Xilinx ZYNQ UltraScale+ MPSoC | ||||
---|---|---|---|---|
Introduction | ||||
Getting Started | ||||
Xilinx Kria | ||||
Development | ||||
Development Flows Examples | ||||
GStreamer | ||||
|
||||
Contact Us |
Xilinx MPSoC's VCU IP is capable of simultaneously encoding and decoding up to 32 streams of H.264 and H.265 codecs, with a maximum bandwidth equivalent to 4K60. 8K encoding/decoding is also supported at a 15 FPS reduced rate mode.
It is important to notice that to make use of the VCU, firmware with the VCU enabled must be loaded into the FPGA. For this wiki, the smartcam example firmware was used during testing. Xilinx seems to have stopped including these apps in the newer versions of Petalinux, for this reason, you may need to add them manually. The firmware can be found in this repository and follow the instructions to add a firmware recipe to the Petalinux build.
Video Encoding
H.264
The H.264 encoder is available through the omxh264enc GStreamer element.
gst-inspect-1.0 omxh264enc
|
---|
root@xilinx-kv260-starterkit-20222:~# gst-inspect-1.0 omxh264enc Factory Details: Rank primary + 1 (257) Long-name OpenMAX H.264 Video Encoder Klass Codec/Encoder/Video/Hardware Description Encode H.264 video streams Author Sebastian Dr?ge <sebastian.droege@collabora.co.uk> Plugin Details: Name omx Description GStreamer OpenMAX Plug-ins Filename /usr/lib/gstreamer-1.0/libgstomx.so Version 1.18.5 License LGPL Source module gst-omx Source release date 2021-09-08 Binary package GStreamer OpenMAX Plug-ins Origin URL Unknown package origin GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstVideoEncoder +----GstOMXVideoEnc +----GstOMXH264Enc +----GstOMXH264Enc-omxh264enc Implemented Interfaces: GstPreset Pad Templates: SINK template: 'sink' Availability: Always Capabilities: video/x-raw(memory:XLNXLL) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] video/x-raw format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] SRC template: 'src' Availability: Always Capabilities: video/x-h264 width: [ 16, 4096 ] height: [ 16, 4096 ] framerate: [ 0/1, 2147483647/1 ] stream-format: byte-stream alignment: { (string)au, (string)nal } Element has no clocking capabilities. Element has no URI handling capabilities. Pads: SINK: 'sink' Pad Template: 'sink' SRC: 'src' Pad Template: 'src' Element Properties: aspect-ratio : Display aspect ratio of the video sequence to be written in SPS/VUI flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncAspectRatio" Default: 0, "auto" (0): auto - 4:3 for SD video,16:9 for HD video,unspecified for unknown format (1): 1-1 - 1:1 aspect ratio (2): 4-3 - 4:3 aspect ratio (3): 16-9 - 16:9 aspect ratio (4): none - Aspect ratio information is not present in the stream b-frames : Number of B-frames between two consecutive P-frames flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Unsigned Integer. Range: 0 - 4294967295 Default: 0 constrained-intra-prediction: If enabled, prediction only uses residual data and decoded samples from neighbouring coding blocks coded using intra prediction modes flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false control-rate : Bitrate control method flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncControlRate" Default: -1, "default" (0): disable - Disable (1): variable - Variable (2): constant - Constant (3): variable-skip-frames - Variable Skip Frames (4): constant-skip-frames - Constant Skip Frames (2130706434): capped-variable - Capped Variable (2130706433): low-latency - Low Latency (-1): default - Component Default cpb-size : Coded Picture Buffer as specified in the HRD model in msec. Not used when control-rate=disable flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 3000 default-roi-quality : The default quality level to apply to each Region of Interest flags: readable, writable Enum "GstOMXVideoEncRoiQuality" Default: 0, "high" (0): high - Delta QP of -5 (1): medium - Delta QP of 0 (2): low - Delta QP of +5 (3): dont-care - Maximum delta QP value (4): intra - Region all LCU encoded with intra prediction mode dependent-slice : If encoding with multiple slices, specify whether the additional slices are dependent slice segments or regular slices flags: readable, writable Boolean. Default: false entropy-mode : Entropy mode for encoding process flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXH264EncEntropyMode" Default: -1, "default" (0): CAVLC - CAVLC entropy mode (1): CABAC - CABAC entropy mode (-1): default - Component Default filler-data : Enable/Disable Filler Data NAL units for CBR rate control flags: readable, writable, changeable only in NULL or READY state Boolean. Default: true gdr-mode : Gradual Decoder Refresh scheme mode. Only used if gop-mode=low-delay-p flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncGdrMode" Default: 0, "disabled" (0): disabled - No GDR (1): vertical - Gradual refresh using a vertical bar moving from left to right (2): horizontal - Gradual refresh using a horizontal bar moving from top to bottom gop-length : Distance between two consecutive I frames flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Unsigned Integer. Range: 0 - 1000 Default: 30 gop-mode : Group Of Pictures mode flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncGopMode" Default: 0, "basic" (0): basic - Basic GOP settings (1): basic-b - Basic GOP settings, includes only B-frames (2): pyramidal - Advanced GOP pattern with hierarchical B-frames (3): pyramidal-b - Advanced GOP pattern with hierarchical B-frames, includes only B-frames (5): low-delay-p - Single I-frame followed by P-frames only (6): low-delay-b - Single I-frame followed by B-frames only (4): adaptive - Advanced GOP pattern with adaptive B-frames hlg-sdr-compatible : If enabled and input caps contain HLG colorimetry, insert BT2020 EOTF and ATC SEI instead flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false initial-delay : The initial removal delay as specified in the HRD model in msec. Not used when control-rate=disable flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 1500 input-crop : Cropping parameters for input video buffer ('<left, top, width, height>') flags: writable GstValueArray of GValues of type "gint" Write only interval-intraframes: Interval of coding Intra frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 -h264,alignment=nal ! ...). flags: readable, writable Enum "GstOMXVideoEncLatencyMode" Default: 0, "normal" (0): normal - Normal mode (1): low-latency - Low latency mode (-1): default - Component Default long-term-freq : Periodicity of LongTerm reference picture marking in encoding process Units in frames, distance between two consequtive long-term reference pictures flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 0 long-term-ref : If enabled, encoder accepts dynamically inserting and using long-term reference picture events from upstream elements flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false look-ahead : The number of frames processed ahead of second pass encoding. If smaller than 2, dual pass encoding is disabled flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 0 loop-filter-alpha-c0-offset: Alpha C0 offset for the deblocking filter, used only when loop-filter-mode is enabled flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Integer. Range: -6 - 6 Default: -1 loop-filter-beta-offset: Beta offset for the deblocking filter, used only when loop-filter-mode is enabled flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Integer. Range: -6 - 6 Default: -1 loop-filter-mode : Enable or disable the deblocking filter (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXH264EncLoopFilter" Default: -1, "default" (0): enable - Enable deblocking filter (1): disable - Disable deblocking filter (2): disable-slice-boundary - Disables deblocking filter on slice boundary (-1): default - Component Default low-bandwidth : If enabled, decrease the vertical search range used for P-frame motion estimation to reduce the bandwidth flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false max-bitrate : Max bitrate in Kbps, only used if control-rate=variable (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 max-consecutive-skip: Max number of consecutive frames to be skipped. Only applicable if skip-frame is enabled flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 ze will not have any effect flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 0 icture-size-x value. If set it to 0 then max-picture-size-x will not have any effect flags: writable GstValueArray of GValues of type "gint" Write only max-qp : Maximum QP value allowed for the rate control flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 51 Default: 51 le flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 min-force-key-unit-interval: Minimum interval between force-keyunit requests in nanoseconds flags: readable, writable Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 min-qp : Minimum QP value allowed for the rate control flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 51 Default: 10 name : The name of the object flags: readable, writable, 0x2000 String. Default: "omxh264enc-omxh264enc0" egularly as possible. If slice-size is defined as well more slices may be produced to fit the slice-size requirement (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 1 - 4294967295 Default: 4294967295 output-crop : Cropping parameters for output bitstream ('<left, top, width, height>') flags: writable GstValueArray of GValues of type "gint" Write only parent : The parent of the object flags: readable, writable, 0x2000 Object of type "GstObject" periodicity-idr : Periodicity of IDR frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 periodicty-idr : Periodicity of IDR frames (0xffffffff=component default) DEPRECATED - only for backwards compat flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 prefetch-buffer : Enable/Disable L2Cache buffer in encoding process flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false qos : Handle Quality-of-Service events from downstream flags: readable, writable Boolean. Default: false qp-mode : QP control mode used by the VCU encoder flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncQpMode" Default: -1, "default" (0): uniform - Use the same QP for all coding units of the frame (1): roi - Adjust QP according to the regions of interest defined on each frame. Must be set to handle ROI metadata. (2): auto - Let the VCU encoder change the QP for each coding unit according to its content (3): load-qp-absolute - Uses absolute QP values set by user. Must be set to use External QP buffer (4): load-qp-relative - Uses Relative/Delta QP values set by user. Must be set to use External QP buffer (-1): default - Component Default quant-b-frames : Quantization parameter for B-frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 quant-i-frames : Quantization parameter for I-frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 quant-p-frames : Quantization parameter for P-frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 ref-frames : Number of reference frames used for inter-motion search (0=component default) flags: readable, writable, changeable only in NULL or READY state Unknown type 16 "guchar" scaling-list : Scaling list mode flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncScalingList" Default: 1, "default" (1): default - Default scaling list mode (0): flat - Flat scaling list mode Skip. Only used if control-rate=constant or variable and b-frames are less than 2 flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false slice-size : Target slice size (in bytes) that the encoder uses to automatically split the bitstream into approximately equally-sized slices flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 65535 Default: 0 target-bitrate : Target bitrate in Kbps (0xffffffff=component default) flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 uniform-slice-type : Enable/Disable uniform slice type in slice header flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false use-out-port-pool : Use a buffer pool on the output port flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false cture size will be limited to max-picture-size-x value. If set it to 0 then max-picture-size-x will not have any effect flags: writable GstValueArray of GValues of type "gint" Write only y444-to-gray : Enable/Disable YUV format manipulation to Y8 flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false |
Performance
Using AR1335 camera through AP1302 ISP at 1080p:
gst-launch-1.0 mediasrcbin media-device=/dev/media0 v4l2src0::io-mode=4 ! video/x-raw, width=1920, height=1080, format=NV12, framerate=30/1 ! omxh264enc ! perf ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 2 % | 30.000 | Not tested |
Using AR1335 camera through AP1302 ISP at 4K:
gst-launch-1.0 mediasrcbin media-device=/dev/media0 v4l2src0::io-mode=4 ! video/x-raw, width=3840, height=2160, format=NV12, framerate=30/1 ! omxh264enc ! perf ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 3 % | 30.000 | Not tested |
H.265
The H.265 encoder is available through the omxh265enc GStreamer element.
gst-inspect-1.0 omxh265enc
|
---|
root@xilinx-kv260-starterkit-20222:~# gst-inspect-1.0 omxh265enc Factory Details: Rank primary + 1 (257) Long-name OpenMAX H.265 Video Encoder Klass Codec/Encoder/Video/Hardware Description Encode H.265 video streams Author Sebastian Dr?ge <sebastian.droege@collabora.co.uk> Plugin Details: Name omx Description GStreamer OpenMAX Plug-ins Filename /usr/lib/gstreamer-1.0/libgstomx.so Version 1.18.5 License LGPL Source module gst-omx Source release date 2021-09-08 Binary package GStreamer OpenMAX Plug-ins Origin URL Unknown package origin GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstVideoEncoder +----GstOMXVideoEnc +----GstOMXH265Enc +----GstOMXH265Enc-omxh265enc Implemented Interfaces: GstPreset Pad Templates: SINK template: 'sink' Availability: Always Capabilities: video/x-raw(format:Interlaced) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] interlace-mode: alternate video/x-raw(memory:XLNXLL) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] video/x-raw format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] SRC template: 'src' Availability: Always Capabilities: video/x-h265 width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] stream-format: byte-stream aligmment: { (string)au, (string)nal } Element has no clocking capabilities. Element has no URI handling capabilities. Pads: SINK: 'sink' Pad Template: 'sink' SRC: 'src' Pad Template: 'src' Element Properties: aspect-ratio : Display aspect ratio of the video sequence to be written in SPS/VUI flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncAspectRatio" Default: 0, "auto" (0): auto - 4:3 for SD video,16:9 for HD video,unspecified for unknown format (1): 1-1 - 1:1 aspect ratio (2): 4-3 - 4:3 aspect ratio (3): 16-9 - 16:9 aspect ratio (4): none - Aspect ratio information is not present in the stream b-frames : Number of B-frames between two consecutive P-frames flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Unsigned Integer. Range: 0 - 4294967295 Default: 0 constrained-intra-prediction: If enabled, prediction only uses residual data and decoded samples from neighbouring coding blocks coded using intra prediction modes flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false control-rate : Bitrate control method flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncControlRate" Default: -1, "default" (0): disable - Disable (1): variable - Variable (2): constant - Constant (3): variable-skip-frames - Variable Skip Frames (4): constant-skip-frames - Constant Skip Frames (2130706434): capped-variable - Capped Variable (2130706433): low-latency - Low Latency (-1): default - Component Default cpb-size : Coded Picture Buffer as specified in the HRD model in msec. Not used when control-rate=disable flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 3000 default-roi-quality : The default quality level to apply to each Region of Interest flags: readable, writable Enum "GstOMXVideoEncRoiQuality" Default: 0, "high" (0): high - Delta QP of -5 (1): medium - Delta QP of 0 (2): low - Delta QP of +5 (3): dont-care - Maximum delta QP value (4): intra - Region all LCU encoded with intra prediction mode dependent-slice : If encoding with multiple slices, specify whether the additional slices are dependent slice segments or regular slices flags: readable, writable Boolean. Default: false filler-data : Enable/Disable Filler Data NAL units for CBR rate control flags: readable, writable, changeable only in NULL or READY state Boolean. Default: true gdr-mode : Gradual Decoder Refresh scheme mode. Only used if gop-mode=low-delay-p flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncGdrMode" Default: 0, "disabled" (0): disabled - No GDR (1): vertical - Gradual refresh using a vertical bar moving from left to right (2): horizontal - Gradual refresh using a horizontal bar moving from top to bottom gop-length : Distance between two consecutive I frames flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Unsigned Integer. Range: 0 - 1000 Default: 30 gop-mode : Group Of Pictures mode flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncGopMode" Default: 0, "basic" (0): basic - Basic GOP settings (1): basic-b - Basic GOP settings, includes only B-frames (2): pyramidal - Advanced GOP pattern with hierarchical B-frames (3): pyramidal-b - Advanced GOP pattern with hierarchical B-frames, includes only B-frames (5): low-delay-p - Single I-frame followed by P-frames only (6): low-delay-b - Single I-frame followed by B-frames only (4): adaptive - Advanced GOP pattern with adaptive B-frames hlg-sdr-compatible : If enabled and input caps contain HLG colorimetry, insert BT2020 EOTF and ATC SEI instead flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false initial-delay : The initial removal delay as specified in the HRD model in msec. Not used when control-rate=disable flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 1500 input-crop : Cropping parameters for input video buffer ('<left, top, width, height>') flags: writable GstValueArray of GValues of type "gint" Write only interval-intraframes: Interval of coding Intra frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 -h264,alignment=nal ! ...). flags: readable, writable Enum "GstOMXVideoEncLatencyMode" Default: 0, "normal" (0): normal - Normal mode (1): low-latency - Low latency mode (-1): default - Component Default long-term-freq : Periodicity of LongTerm reference picture marking in encoding process Units in frames, distance between two consequtive long-term reference pictures flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 0 long-term-ref : If enabled, encoder accepts dynamically inserting and using long-term reference picture events from upstream elements flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false look-ahead : The number of frames processed ahead of second pass encoding. If smaller than 2, dual pass encoding is disabled flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 0 loop-filter-beta-offset: Beta offset for the deblocking filter, used only when loop-filter-mode is enabled flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Integer. Range: -6 - 6 Default: -1 loop-filter-mode : Enable or disable the deblocking filter (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXH265EncLoopFilter" Default: -1, "default" (0): enable - Enable deblocking filter (1): disable - Disable deblocking filter (2): disable-cross-slice - Disable deblocking filter on slice boundary (3): disable-cross-tile - Disable deblocking filter on tile boundary (4): disable-slice-and-tile - Disable deblocking filter on slice and tile boundary (-1): default - Component Default loop-filter-tc-offset: TC offset for the deblocking filter, used only when loop-filter-mode is enabled flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Integer. Range: -6 - 6 Default: -1 low-bandwidth : If enabled, decrease the vertical search range used for P-frame motion estimation to reduce the bandwidth flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false max-bitrate : Max bitrate in Kbps, only used if control-rate=variable (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 max-consecutive-skip: Max number of consecutive frames to be skipped. Only applicable if skip-frame is enabled flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 ze will not have any effect flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 0 icture-size-x value. If set it to 0 then max-picture-size-x will not have any effect flags: writable GstValueArray of GValues of type "gint" Write only max-qp : Maximum QP value allowed for the rate control flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 51 Default: 51 le flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 min-force-key-unit-interval: Minimum interval between force-keyunit requests in nanoseconds flags: readable, writable Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 min-qp : Minimum QP value allowed for the rate control flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 51 Default: 10 name : The name of the object flags: readable, writable, 0x2000 String. Default: "omxh265enc-omxh265enc0" egularly as possible. If slice-size is defined as well more slices may be produced to fit the slice-size requirement (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 1 - 4294967295 Default: 4294967295 output-crop : Cropping parameters for output bitstream ('<left, top, width, height>') flags: writable GstValueArray of GValues of type "gint" Write only parent : The parent of the object flags: readable, writable, 0x2000 Object of type "GstObject" periodicity-idr : Periodicity of IDR frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 prefetch-buffer : Enable/Disable L2Cache buffer in encoding process flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false qos : Handle Quality-of-Service events from downstream flags: readable, writable Boolean. Default: false qp-mode : QP control mode used by the VCU encoder flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncQpMode" Default: -1, "default" (0): uniform - Use the same QP for all coding units of the frame (1): roi - Adjust QP according to the regions of interest defined on each frame. Must be set to handle ROI metadata. (2): auto - Let the VCU encoder change the QP for each coding unit according to its content (3): load-qp-absolute - Uses absolute QP values set by user. Must be set to use External QP buffer (4): load-qp-relative - Uses Relative/Delta QP values set by user. Must be set to use External QP buffer (-1): default - Component Default quant-b-frames : Quantization parameter for B-frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 quant-i-frames : Quantization parameter for I-frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 quant-p-frames : Quantization parameter for P-frames (0xffffffff=component default) flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 scaling-list : Scaling list mode flags: readable, writable, changeable only in NULL or READY state Enum "GstOMXVideoEncScalingList" Default: 1, "default" (1): default - Default scaling list mode (0): flat - Flat scaling list mode Skip. Only used if control-rate=constant or variable and b-frames are less than 2 flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false slice-size : Target slice size (in bytes) that the encoder uses to automatically split the bitstream into approximately equally-sized slices flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 0 - 65535 Default: 0 target-bitrate : Target bitrate in Kbps (0xffffffff=component default) flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state Unsigned Integer. Range: 0 - 4294967295 Default: 4294967295 uniform-slice-type : Enable/Disable uniform slice type in slice header flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false use-out-port-pool : Use a buffer pool on the output port flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false cture size will be limited to max-picture-size-x value. If set it to 0 then max-picture-size-x will not have any effect flags: writable GstValueArray of GValues of type "gint" Write only y444-to-gray : Enable/Disable YUV format manipulation to Y8 flags: readable, writable, changeable only in NULL or READY state Boolean. Default: false |
Performance
Using AR1335 camera through AP1302 ISP at 1080p:
gst-launch-1.0 mediasrcbin media-device=/dev/media0 v4l2src0::io-mode=4 ! video/x-raw, width=1920, height=1080, format=NV12, framerate=30/1 ! omxh265enc ! perf ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 2 % | 30.000 | Not tested |
Using AR1335 camera through AP1302 ISP at 4K:
gst-launch-1.0 mediasrcbin media-device=/dev/media0 v4l2src0::io-mode=4 ! video/x-raw, width=3840, height=2160, format=NV12, framerate=30/1 ! omxh265enc ! perf ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 3 % | 30.000 | Not tested |
Video Decoding
H.264
The H.264 decoder is available through the omxh264dec GStreamer element.
gst-inspect-1.0 omxh264dec
|
---|
root@xilinx-kv260-starterkit-20222:~# gst-inspect-1.0 omxh264dec Factory Details: Rank primary + 1 (257) Long-name OpenMAX H.264 Video Decoder Klass Codec/Decoder/Video/Hardware Description Decode H.264 video streams Author Sebastian Dr?ge <sebastian.droege@collabora.co.uk> Plugin Details: Name omx Description GStreamer OpenMAX Plug-ins Filename /usr/lib/gstreamer-1.0/libgstomx.so Version 1.18.5 License LGPL Source module gst-omx Source release date 2021-09-08 Binary package GStreamer OpenMAX Plug-ins Origin URL Unknown package origin GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstVideoDecoder +----GstOMXVideoDec +----GstOMXH264Dec +----GstOMXH264Dec-omxh264dec Pad Templates: SINK template: 'sink' Availability: Always Capabilities: video/x-h264 alignment: au stream-format: byte-stream width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] video/x-h264 alignment: nal stream-format: byte-stream width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] SRC template: 'src' Availability: Always Capabilities: video/x-raw(memory:GLMemory) format: RGBA width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] video/x-raw(memory:XLNXLL, format:Interlaced) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] interlace-mode: alternate video/x-raw(format:Interlaced) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] interlace-mode: alternate video/x-raw(memory:XLNXLL) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] video/x-raw format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] Element has no clocking capabilities. Element has no URI handling capabilities. Pads: SINK: 'sink' Pad Template: 'sink' SRC: 'src' Pad Template: 'src' Element Properties: g high bitrate streams. Decreasing it reduces the memory footprint flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 2 - 16 Default: 5 t to 'au' for normal latency and 'nal' for subframe latency (e.g. ... ! video/x-h264,alignment=nal ! omxh264dec low-latency=1 ! ...). flags: readable, writable Enum "GstOMXVideoDecLatencyMode" Default: 0, "normal" (0): normal - Normal mode (1): reduced-latency - Low ref dpb mode(reduced-latency) (2): low-latency - Low latency mode (-1): default - Component Default low-latency : When enabled, buffers will be pushed before they are evicted from the DBP, reducing decoding latency. flags: readable, writable Boolean. Default: false max-errors : Max consecutive decoder errors before returning flow error flags: readable, writable Integer. Range: -1 - 2147483647 Default: 10 name : The name of the object flags: readable, writable, 0x2000 String. Default: "omxh264dec-omxh264dec0" output-position : Position coordinates of start of active pixel data in video buffer ('<position_x, position_y>') flags: writable GstValueArray of GValues of type "gint" Write only parent : The parent of the object flags: readable, writable, 0x2000 Object of type "GstObject" qos : Handle Quality-of-Service events from downstream flags: readable, writable Boolean. Default: true buffer and process them. flags: readable, writable Boolean. Default: false |
Performance
1080p
File: 1080p-h264-60fps.mp4
gst-launch-1.0 filesrc location="1080p-h264-60fps.mp4" ! qtdemux ! h264parse ! queue ! omxh264dec ! perf ! queue ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 105 % | 40.582 | Not tested |
4K
File:
gst-launch-1.0 filesrc location="" ! qtdemux ! queue ! omxh264dec ! perf ! queue ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | Not tested | Not tested | Not tested |
H.265
The H.265 decoder is available through the omxh265dec GStreamer element.
gst-inspect-1.0 omxh265dec
|
---|
root@xilinx-kv260-starterkit-20222:~# gst-inspect-1.0 omxh265dec Rank primary + 1 (257) Long-name OpenMAX H.265 Video Decoder Klass Codec/Decoder/Video/Hardware Description Decode H.265 video streams Author Sebastian Dr?ge <sebastian.droege@collabora.co.uk> Plugin Details: Name omx Description GStreamer OpenMAX Plug-ins Filename /usr/lib/gstreamer-1.0/libgstomx.so Version 1.18.5 License LGPL Source module gst-omx Source release date 2021-09-08 Binary package GStreamer OpenMAX Plug-ins Origin URL Unknown package origin GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstVideoDecoder +----GstOMXVideoDec +----GstOMXH265Dec +----GstOMXH265Dec-omxh265dec Pad Templates: SINK template: 'sink' Availability: Always Capabilities: video/x-h265 alignment: au stream-format: byte-stream width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] video/x-h265 alignment: nal stream-format: byte-stream width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] SRC template: 'src' Availability: Always Capabilities: video/x-raw(memory:GLMemory) format: RGBA width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] video/x-raw(memory:XLNXLL, format:Interlaced) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] interlace-mode: alternate video/x-raw(format:Interlaced) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] interlace-mode: alternate video/x-raw(memory:XLNXLL) format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] video/x-raw format: { (string)NV16_10LE32, (string)NV12_10LE32, (string)NV16, (string)NV12, (string)GRAY10_LE32, (string)GRAY8, (string)Y444, (string)Y444_10LE32 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] Element has no clocking capabilities. Element has no URI handling capabilities. Pads: SINK: 'sink' Pad Template: 'sink' SRC: 'src' Pad Template: 'src' Element Properties: g high bitrate streams. Decreasing it reduces the memory footprint flags: readable, writable, changeable only in NULL or READY state Unsigned Integer. Range: 2 - 16 Default: 5 t to 'au' for normal latency and 'nal' for subframe latency (e.g. ... ! video/x-h264,alignment=nal ! omxh264dec low-latency=1 ! ...). flags: readable, writable Enum "GstOMXVideoDecLatencyMode" Default: 0, "normal" (0): normal - Normal mode (1): reduced-latency - Low ref dpb mode(reduced-latency) (2): low-latency - Low latency mode (-1): default - Component Default low-latency : When enabled, buffers will be pushed before they are evicted from the DBP, reducing decoding latency. flags: readable, writable Boolean. Default: false max-errors : Max consecutive decoder errors before returning flow error flags: readable, writable Integer. Range: -1 - 2147483647 Default: 10 name : The name of the object flags: readable, writable, 0x2000 String. Default: "omxh265dec-omxh265dec0" output-position : Position coordinates of start of active pixel data in video buffer ('<position_x, position_y>') flags: writable GstValueArray of GValues of type "gint" Write only parent : The parent of the object flags: readable, writable, 0x2000 Object of type "GstObject" qos : Handle Quality-of-Service events from downstream flags: readable, writable Boolean. Default: true buffer and process them. flags: readable, writable Boolean. Default: false |
Performance
1080p
File: 1080p-hevc-30fps.mkv
gst-launch-1.0 filesrc location="1080p-hevc-30fps.mkv" ! matroskademux ! h265parse ! queue ! omxh265dec ! perf ! queue ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 108 % | 40.109 | Not tested |
4K
File: 4k-hevc-60fps.mkv
gst-launch-1.0 filesrc location="4k-hevc-60fps.mkv" ! matroskademux ! h265parse ! queue ! omxh265dec ! perf ! queue ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 103 % | 7.919 | Not tested |
Simultaneous encoding and decoding
gst-launch-1.0 mediasrcbin media-device=/dev/media0 v4l2src0::io-mode=4 ! video/x-raw, width=3840, height=2160, format=NV12, framerate=30/1 ! omxh265enc ! queue ! omxh265dec ! perf ! queue ! fakesink
Board | CPU % | FPS | Element latency (ms) |
---|---|---|---|
KV260 | 102 % | 9.775 | Not tested |