Skip to content
Snippets Groups Projects

va: VA-API H.264 decoder and infrastructure

Merged Víctor Manuel Jáquez Leal requested to merge vjaquez/gst-plugins-bad:vah264dec into master

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.

Edited by Víctor Manuel Jáquez Leal

Merge request reports

Merge request pipeline #168514 passed

Merge request pipeline passed for 79d11c20

Merged by GStreamer Marge BotGStreamer Marge Bot 4 years ago (Jun 28, 2020 1:50pm UTC)

Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • added 1 commit

    • 043d945c - va: VA-API H.264 decoder and infrastructure

    Compare with previous version

  • added 1 commit

    • 62cf8fc8 - va: VA-API H.264 decoder and infrastructure

    Compare with previous version

  • added 1 commit

    • 6f30dfd3 - va: VA-API H.264 decoder and infrastructure

    Compare with previous version

  • resolved all threads

  • I'm glad to see this implementation in right time :)

  • added 1 commit

    • b93527fa - va: VA-API H.264 decoder and infrastructure

    Compare with previous version

  • resolved all threads

  • Víctor Manuel Jáquez Leal changed the description

    changed the description

  • added 2 commits

    • 9ff332e1 - 1 commit from branch gstreamer:master
    • 8f45f118 - va: VA-API H.264 decoder and infrastructure

    Compare with previous version

  • resolved all threads

  • 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).

    • I tested on my platform and vah264dec can really work well with glimagesink with intel's iHD driver. Do you plan to implement all decoders in this way?

    • We have base classes for VP8, VP9 and HEVC (but not the l0/l1 code yet for that one). We will add more or course, but at this stage, remember this is experimental.

    • Please register or sign in to reply
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Please register or sign in to reply
    Loading