mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
5fe46af4d3
Drop references to deprecated plugins (vaapiupload, vaapidownload), mention that support for GStreamer 0.10 is deprecated, make overview more descriptive in certain aspects.
146 lines
5 KiB
Text
146 lines
5 KiB
Text
|
|
gstreamer-vaapi
|
|
VA-API support to GStreamer
|
|
|
|
Copyright (C) 2010-2011 Splitted-Desktop Systems
|
|
Copyright (C) 2011-2014 Intel Corporation
|
|
Copyright (C) 2011 Collabora Ltd.
|
|
|
|
|
|
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.
|
|
|
|
* `vaapidecode' is used to decode JPEG, MPEG-2, MPEG-4:2, H.264 AVC,
|
|
H.264 MVC, VP8, VC-1, WMV3 videos to VA surfaces, depending on the
|
|
underlying hardware capabilities. This plugin is also able to
|
|
implicitly download the decoded surface to raw YUV buffers.
|
|
|
|
* `vaapiencode_<CODEC>' is used to encode into MPEG-2, H.264 AVC,
|
|
H.264 MVC videos, depending on the actual value of <CODEC> (mpeg2,
|
|
h264, etc.). 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.
|
|
|
|
|
|
Features
|
|
--------
|
|
|
|
* VA-API support from 0.29 to 0.35
|
|
* JPEG, MPEG-2, MPEG-4, H.264 AVC, H.264 MVC, VP8 and VC-1 ad-hoc decoders
|
|
* MPEG-2, H.264 AVC and H.264 MVC ad-hoc encoders
|
|
* OpenGL rendering through VA/GLX or GLX texture-from-pixmap + FBO
|
|
* 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 Reduction
|
|
- Advanced deinterlacing: Motion-Adaptive, Motion-Compensated
|
|
|
|
|
|
Requirements
|
|
------------
|
|
|
|
Software requirements
|
|
|
|
* GStreamer 0.10.x [DEPRECATED]:
|
|
libglib2.0-dev (>= 2.28)
|
|
libgstreamer0.10-dev (>= 0.10.36)
|
|
or with GstBaseSink::query()
|
|
libgstreamer-plugins-base0.10-dev (>= 0.10.36)
|
|
libgstreamer-plugins-bad0.10-dev (>= 0.10.22.1)
|
|
or with GstVideoContext, GstSurfaceBuffer, codecparsers
|
|
|
|
Note: support for GStreamer 0.10 APIs is deprecated and will be
|
|
removed in a future release.
|
|
|
|
* GStreamer 1.0.x (up to including GStreamer 1.4):
|
|
libglib2.0-dev (>= 2.28)
|
|
libgstreamer1.0-dev (>= 1.0.0)
|
|
libgstreamer-plugins-base1.0-dev (>= 1.0.0)
|
|
libgstreamer-plugins-bad1.0-dev (>= 1.0.0)
|
|
|
|
* Renderers:
|
|
DRM: libva-dev (>= 1.1.0), libdrm-dev, libudev-dev
|
|
X11: libva-dev (>= 1.0.1)
|
|
GLX: libva-dev (>= 1.0.3)
|
|
Wayland: libva-dev (>= 1.1.0), libwayland-dev (>= 0.95.0)
|
|
|
|
Hardware requirements
|
|
|
|
* AMD platforms with UVD2 (XvBA supported)
|
|
* Intel Eaglelake (G45)
|
|
* Intel Ironlake, Sandybridge, Ivybridge and Haswell (HD Graphics)
|
|
* Intel Poulsbo (US15W)
|
|
* Intel Medfield or Cedar Trail
|
|
* NVIDIA platforms with PureVideo (VDPAU supported)
|
|
|
|
|
|
Usage
|
|
-----
|
|
|
|
VA elements are automatically plugged into GStreamer pipelines. So,
|
|
using playbin (or playbin2 with GStreamer 0.10) 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 ! vaapidecode ! vaapisink fullscreen=true
|
|
|
|
* Play a raw MPEG-2 interlaced stream
|
|
$ gst-launch-1.0 -v filesrc location=/path/to/mpeg2.bits ! \
|
|
mpegvideoparse ! vaapidecode ! 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 ! \
|
|
vaapiencode_h264 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:
|
|
<http://www.freedesktop.org/software/vaapi/releases/gstreamer-vaapi/>
|
|
|
|
Git repository for work-in-progress changes is available at:
|
|
<http://gitorious.org/vaapi/gstreamer-vaapi>
|
|
|
|
|
|
Reporting Bugs
|
|
--------------
|
|
|
|
Bugs can be reported in the GNOME Bugzilla system at:
|
|
<https://bugzilla.gnome.org/enter_bug.cgi?product=gstreamer-vaapi>
|
|
|
|
From the main page, new bugs can be reported through New -> Other ->
|
|
gstreamer-vaapi product.
|