Skip to content

Add LCEVC decoder and encoder plugins

Julian Bouzas requested to merge julian/gstreamer:rebased-lcevc into main

This MR adds 2 new external plugins in gst-plugins-bad (lcevcdecoder and lcevcencoder) to decode and encoder respectively MPEG-5 Part 2 (LCEVC) video using the V-Nova's SDK libraries.

Instructions describing how to test these plugins are included in a README.md file on the root directory of each plugin.

For now, only H264 is supported as h264parse is the only parser element that has the logic to extract LCEVC enhancement data from the encoded LCEVC video. This LCEVC enhancement data is then attached by the parser to encoded video buffers as GstLcevcMeta, which is later used by the new lcevcdec element (from lcevcdecoder plugin) to enhanced the decoded video which was decoded by a base decoder (Eg avdec_h264). A simple decoding pipeline looks like this:

gst-launch-1.0 filesrc location=lcevc-sample.mp4 ! qtdemux ! h264parse ! avdec_h264 ! lcevcdec ! videoconvert ! autovideosink

Autoplugging elements also work as there is a new lcevch264decodebin bin element that internally finds an H264 base decoder, and uses lcevcdec afterwards.

On the other hand, regarding LCEVC encoding, the new lcevcencoder plugin provides a lcevch264enc element which internally loads and processes video with V-Nova's LCEVC Encoding SDK plugins. For example, to use the V-Nova LCEVC SDK's x264 plugin with lcevch264enc, this is the needed pipeline:

gst-launch-1.0 videotestsrc pattern=ball num-buffers=1024 ! video/x-raw,width=1920,height=1080,format=I420,framerate=25/1 ! lcevch264enc plugin-name="x264" plugin-props="preset=superfast;tune=zerolatency" ! h264parse ! mp4mux ! filesink location=lcevc-sample.mp4

If the V-Nova's LCEVC Encoding SDK plugin is not specified using the plugin-name property, the element will try to automatically find an available H264 plugin.

Edited by Julian Bouzas

Merge request reports

Loading