Which GStreamer Plugins Rely on Libaom?
The Alliance for Open Media’s reference software library, libaom, is
vital for encoding and decoding AV1 video streams within the GStreamer
multimedia framework. GStreamer integrates this library through a
dedicated extension plugin block contained within its “Bad” plugins
package (gst-plugins-bad). Specifically, two fundamental
media processing elements, av1enc and av1dec,
directly rely on libaom to achieve software-based AV1 processing.
The AOM Plugin Submodule
In GStreamer, dependencies on external libraries are organized into
submodules under specific package groups. Because AV1 development and
its early implementations were evolving rapidly, the integration
wrappers for libaom were placed in the gst-plugins-bad
repository under the ext/aom/ directory. Despite the “bad”
naming convention—which only reflects a historic lack of a long-term API
guarantee or rigorous code review relative to the “base” package—the
submodule is fully functional and widely used for software-defined AV1
video processing.
Primary Elements Utilizing Libaom
The wrapper module exposes two key operational elements to GStreamer media pipelines:
1. av1enc (AV1 Video Encoder)
The av1enc element is a video encoder that compresses
raw, uncompressed video frames into an AV1-compliant elementary stream.
It maps GStreamer properties directly to the underlying libaom
configuration structures.
- Function: Accepts raw video formats (such as I420, I420_10LE, Y444, and Y444_10LE) and outputs an encoded AV1 stream.
- Key Features: Exposes complex libaom properties to the pipeline interface, including CPU-usage presets, variable bitrate (VBR) controls, constant quality (CQ) modes, and keyframe placement parameters.
2. av1dec (AV1 Video Decoder)
The av1dec element acts as the corresponding video
decoder. It accepts compressed AV1 data blocks and utilizes libaom’s
decoding architecture to reconstruct the original frames.
- Function: Consumes an AV1 byte stream (often parsed
by an upstream helper like
av1parse) and outputs raw, uncompressed video structures. - Key Features: Provides a software-based fallback decoder when hardware-accelerated processing options (such as VA-API or NVDEC) are unavailable on the host system.
Distinguishing Libaom from Alternative AV1 Plugins
When building GStreamer pipelines for AV1, it is worth noting that libaom is not the only option available. GStreamer includes alternative elements for AV1 that rely on completely separate libraries:
- svtav1enc: This encoder leverages the Scalable Video Technology for AV1 (SVT-AV1) library, which is highly optimized for multi-core CPU architectures.
- dav1dec: This decoder uses the
dav1dlibrary, an open-source decoder focused on speed and performance efficiency over the libaom reference decoder. - Hardware Accelerated Plugins: Elements starting
with
vaav1,nvv4l2av1, ord3d11av1utilize GPU hardware blocks rather than software libraries like libaom.