GitXplorerGitXplorer
c

gstreamer-vaapi

public
5 stars
19 forks
0 issues

Commits

List of commits on branch master.
Unverified
992d9e3a20662b11654ac37e46419c363d49bce9

libs: filter: gst_vaapi_filter_get_memory_types()

cceyusa committed 5 years ago
Unverified
089ef59c374c1940273a4fa309c08bd7e02ffcd5

plugins: remove gst_vaapi_plugin_base_get_allowed_srcpad_raw_caps()

cceyusa committed 4 years ago
Unverified
a50b466fc72d69146c7009b9ed1d931a66e1014b

vaapidecode: expose raw src caps with same chroma

cceyusa committed 4 years ago
Unverified
30290115affc43078b2844cfd165d464bbcc335e

libs: util: h265: use common parser API to get vaapi profiles.

HHeJunyan committed 5 years ago
Unverified
3e9a6f80aadc911e390c1212a689427b4bb8dcfa

build: update for gl pkg-config file split

cceyusa committed 4 years ago
Unverified
34b1d195b7360fba6d70adb12072f1d25d377c8a

h264dec: mark remaining frames as unreference before exec_picture_refs_modification

xxuguangxin committed 4 years ago

README

The README file for this repository.

gstreamer-vaapi VA-API support to GStreamer

Copyright (C) 2010-2011 Splitted-Desktop Systems Copyright (C) 2011-2020 Intel Corporation Copyright (C) 2011 Collabora Ltd. Copyright (C) 2015-2020 Igalia, S.L.

License

gstreamer-vaapi helper libraries and plugin elements are available under the terms of the GNU Lesser General Public License v2.1+

Overview

gstreamer-vaapi consists in a collection of VA-API based plugins for GStreamer and helper libraries.

  • `vaapidec' is used to decode JPEG, MPEG-2, MPEG-4:2, H.264 AVC, H.264 MVC, VP8, VP9, VC-1, WMV3, HEVC videos to VA surfaces, depending on the actual value of and the underlying hardware capabilities. This plugin is also able to implicitly download the decoded surface to raw YUV buffers.

  • `vaapienc' is used to encode into MPEG-2, H.264 AVC, H.264 MVC, JPEG, VP8, VP9, HEVC videos, depending on the actual value of (mpeg2, h264, etc.) and the hardware capabilities. By default, raw format bitstreams are generated, so the result may be piped to a muxer, e.g. qtmux for MP4 containers.

  • `vaapipostproc' is used to filter VA surfaces, for e.g. scaling, deinterlacing (bob, motion-adaptive, motion-compensated), noise reduction or sharpening. This plugin is also used to upload raw YUV pixels into VA surfaces.

  • `vaapisink' is used to render VA surfaces to an X11 or Wayland display. This plugin also features a "headless" mode (DRM) more suited to remote transcode scenarios, with faster throughput.

  • vaapioverlay is a accelerated compositor that blends or composite different video streams.

Features

  • VA-API support from 0.39
  • JPEG, MPEG-2, MPEG-4, H.264 AVC, H.264 MVC, VP8, VC-1, HEVC and VP9 ad-hoc decoders
  • MPEG-2, H.264 AVC,H.264 MVC, JPEG, VP8, VP9 and HEVC ad-hoc encoders
  • OpenGL rendering through VA/GLX or GLX texture-from-pixmap + FBO
  • Support for EGL backend
  • Support for the Wayland display server
  • Support for headless decode pipelines with VA/DRM
  • Support for major HW video decoding solutions on Linux (AMD, Intel, NVIDIA)
  • Support for HW video encoding on Intel HD Graphics hardware
  • Support for VA Video Processing APIs (VA/VPP)
    • Scaling and color conversion
    • Image enhancement filters: Sharpening, Noise Reductio, Color Balance, Skin-Tone-Enhancement
    • Advanced deinterlacing: Motion-Adaptive, Motion-Compensated

Requirements

Hardware requirements

  • Hardware supported by i965 driver or iHD, such as
    • Intel Ironlake, Sandybridge, Ivybridge, Haswell, Broadwell, Skylake, etc. (HD Graphics)
    • Intel BayTrail, Braswell
    • Intel Poulsbo (US15W)
    • Intel Medfield or Cedar Trail
  • Hardware supported by AMD Radeonsi driver, such as the list below
    • AMD Carrizo, Bristol Ridge, Raven Ridge, Picasso, Renoir
    • AMD Tonga, Fiji, Polaris XX, Vega XX, Navi 1X
  • Other hardware supported by Mesa VA gallium state-tracker

Usage

VA elements are automatically plugged into GStreamer pipelines. So, using playbin should work as is. However, here are a few alternate pipelines that could be manually constructed.

  • Play an H.264 video with an MP4 container in fullscreen mode $ gst-launch-1.0 -v filesrc location=/path/to/video.mp4 !
    qtdemux ! vaapidecodebin ! vaapisink fullscreen=true

  • Play a raw MPEG-2 interlaced stream $ gst-launch-1.0 -v filesrc location=/path/to/mpeg2.bits !
    mpegvideoparse ! vaapimpeg2dec ! vaapipostproc ! vaapisink

  • Convert from one pixel format to another, while also downscaling $ gst-launch-1.0 -v filesrc location=/path/to/raw_video.yuv !
    videoparse format=yuy2 width=1280 height=720 !
    vaapipostproc format=nv12 height=480 ! vaapisink

  • Encode a 1080p stream in raw I420 format into H.264 $ gst-launch-1.0 -v filesrc location=/path/to/raw_video.yuv !
    videoparse format=i420 width=1920 height=1080 framerate=30/1 !
    vaapih264enc rate-control=cbr tune=high-compression !
    qtmux ! filesink location=/path/to/encoded_video.mp4

Sources

gstreamer-vaapi is Open Source software, so updates to this framework are really easy to get.

Stable source code releases can be found at: https://gstreamer.freedesktop.org/src/gstreamer-vaapi/

GitLab repository for work-in-progress changes is available at: https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi

Reporting Bugs

Bugs can be reported in the GStreamer's GitLab system at: https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/issues