va: VA-API H.264 decoder and infrastructure
New plugin with an element for H.264 decoding with VA-API. This novel approach, different from gstreamer-vaapi, uses gstcodecs library for state handling.
The code is expected to looks cleaner because it uses VA-API without further layers or wrappers.
- It uses the first supported DRM device as default VA display (other displays will be supported through user's GstContext)
- Requires libva >= 1.6
- No multiview/stereo profiles neither interlaced streams because gstcodecs doesn't handle them yet
- It is incompatible with gstreamer-vaapi
- Even if memory:VAMemory is exposed, it is not handled yet by any other element
- Caps templates are generated dynamically querying VAAPI, but YV12 and I420 are added for system memory caps because they seem to be supported for all the drivers when downloading frames onto main memory, as they are used by xvimagesink and others, avoiding color conversion.
- Surfaces aren't bounded to context, so they can grow beyond the DBP size, allowing smooth reverse playback.
- There isn't yet error handling and recovery.
- 10-bit H.264 streams aren't supported by libva.
- The element is supposed to spawn if different renderD nodes with vaapi driver support are found (like gstv4l2), but it is not tested.
Sorry for the big code dump :(
Another thing I would like to discuss are the c99 initialitators used in the code. IMHO they make the code look cleaner.
Merge request reports
Activity
mentioned in merge request !1203 (closed)
- Resolved by Víctor Manuel Jáquez Leal
- Resolved by Víctor Manuel Jáquez Leal
- Resolved by Víctor Manuel Jáquez Leal
- Resolved by Víctor Manuel Jáquez Leal
Worth mentioning, I tested on Intel with glimagesink (implicit modifiers) and it worked great! As it's not ranked, it seems fairly safe to have as experimental feature? @tpm opinion?
As it's not ranked, it seems fairly safe to have as experimental feature? @tpm opinion?
Yes, please get it in if you want it in as an experimental feature for 1.18 (which was my assumption).
assigned to @gstreamer-merge-bot