Hardware-accelerated rendering
GES picks its compositor and the raw-video helpers it plugs around every
clip (color converter, scaler, deinterlacer, video flip, GPU
upload/download) from whatever GStreamer plugins are installed, ranked
by GstRank. The default ranks pick the software compositor, so an
HW backend (Vulkan, GL, CUDA, D3D11/12, HIP, ...) only takes over after
its compositor is promoted - see Selecting a backend
below.
What the application sees
- The clip filter chain and the timeline's smart mixer use the highest
ranked
Compositor-klass element registered with GStreamer at the time GES first builds video. - The supporting elements - color converter, scaler, deinterlacer, video
flipper, uploader, downloader - are picked from the same plugin
whenever possible, falling back to other plugins of the same memory
type (e.g.
memory:GLMemory), and finally to system memory. - If a backend's compositor only consumes its native memory (for example
glvideomixerelement), the whole video chain stays on that memory: no implicit downloads at the tail. Otherwise system memory is used as a common denominator between roles, with uploads/downloads added only around the compositor. - If a role has no native element for the chosen memory but the backend
ships an uploader/downloader pair, GES wraps a software element in a
download ! sw_core ! uploadbin so the rest of the chain stays native. If no such pair exists, the backend is rejected and the next one (or finally software) is tried.
The application sets clip geometry (posx, posy, width, height,
alpha, etc.) the same way regardless of the backend - the smart mixer
forwards those properties onto whichever compositor was picked.
Selecting a backend
To make GES pick a hardware compositor, raise its rank above the software one. Two equivalent mechanisms:
-
GST_PLUGIN_FEATURE_RANKenvironment variable (standard GStreamer mechanism), e.g.GST_PLUGIN_FEATURE_RANK=glvideomixer:MAX ges-launch-1.0 ... -
gst_plugin_feature_set_rank()at runtime. GES listens for rank changes on everyCompositor-klass feature and re-resolves the next time it builds video, so the override can happen before or afterges_init().
Internals
For the role-by-role registry-query rules, klass keywords, sysmem
fallback policy and wrapper shapes, see
subprojects/gst-editing-services/docs/design/video-element-selection.md
in the source tree.
The results of the search are