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.