GStreamer multimedia framework
Find a file
Víctor Manuel Jáquez Leal a50b466fc7 vaapidecode: expose raw src caps with same chroma
The try-and-error approach for getting the possible image formats from
a surface has brought several problems in different drivers, from
crashes to drop in performance.

Instead of that we change the algorithm to determine the possible
image formats based in the surface chroma: only those available image
formats with same chroma are exposed as possible raw caps.

Do this is important to avoid performance degrading in raw sinks
which doesn't handle NV12 but it does YV12 or I420.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/381>
2020-08-12 17:50:50 +02:00
docs docs: Mark parent classes as plugin API 2020-06-23 10:20:46 -04:00
gst vaapidecode: expose raw src caps with same chroma 2020-08-12 17:50:50 +02:00
gst-libs libs: util: h265: use common parser API to get vaapi profiles. 2020-08-08 19:28:15 +08:00
hooks Add hooks/pre-commit.hook 2020-01-16 09:25:02 +08:00
scripts meson: set release date from .doap file for releases 2020-07-08 17:50:51 +01:00
tests test: vaapicontext: fix draw callback with multiple videos 2020-07-31 14:02:33 +02:00
.gitignore add .gitignore 2019-10-07 11:18:59 -07:00
.gitlab-ci.yml Add Gitlab CI configuration 2018-11-12 17:43:54 +01:00
AUTHORS AUTHORS: Update 2015-12-07 12:47:04 +02:00
ChangeLog Release 1.17.2 2020-07-03 00:36:40 +01:00
COPYING.LIB Relicense gst-libs/ code to LGPL v2.1+. 2010-09-20 12:55:42 +02:00
gstreamer-vaapi.doap Release 1.17.2 2020-07-03 00:36:40 +01:00
meson.build build: update for gl pkg-config file split 2020-08-07 17:30:21 +02:00
meson_options.txt docs: Update plugin cache with the new format 2020-06-03 17:38:10 -04:00
NEWS Release 1.17.2 2020-07-03 00:36:40 +01:00
README README: update VP9 decoder and encoder 2020-05-21 11:37:36 +02:00
RELEASE Release 1.17.2 2020-07-03 00:36:40 +01:00

  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.

  * `vaapi<CODEC>dec' 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 <CODEC> and the underlying
    hardware capabilities.  This plugin is also able to implicitly
    download the decoded surface to raw YUV buffers.

  * `vaapi<CODEC>enc' is used to encode into MPEG-2, H.264 AVC, H.264
    MVC, JPEG, VP8, VP9, HEVC videos, depending on the actual value of
    <CODEC> (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>