vvdec: add VVdeC decoder element
Closes #380
This MR adds a new vvdec
element which decodes VVC streams using the safe bindings to the VVdeC library from vvdec-rs.
To manually test playback the easiest way is to start a gst-env with a patch to the TS demuxer to support VVC. It should become easier to test in future gstreamer versions when there's an H.266 parser (work started in gst-plugins-bad!2364 (closed) and is maybe in progress)
It works both with a manual pipeline such as
gst-launch-1.0 filesrc location=vvc.ts ! tsdemux ! h266parse ! vvdec ! videoconvert ! autovideosink
or via gst-play-1.0 vvc.ts
.
Some input files can be obtained here.
Seeking also works, although sluggish: after flushing, the first newly decoded frame is displayed quickly but it then takes up to 2 seconds for playback to continue smoothly.
Some possible improvements to it which I'm not tackling here yet:
- Grayscale support: Although VVdeC reports supporting YUV400, I couldn't find streams to test it with nor was I successful to encode an asset with VVenC easily to test. So I'm not claiming support for it yet.
- Latency query: It's clear that there's some latency in the decoder but it's not yet clear to me about how to retrieve or calculate it yet so I didn't dare to implement the query yet. In VVdeC, they use interchangeably the number of parser threads as the "parser frames delay", but I've seen cases where I had 8 parser threads and decoded frames were only returned after pushing 20 frames.