1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
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, HEVC 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, JPEG, VP8, HEVC 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.38
* 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 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
------------
Software requirements
* GStreamer 1.4.x (up to including GStreamer 1.6):
libglib2.0-dev (>= 2.32)
libgstreamer1.0-dev (>= 1.4.0)
libgstreamer-plugins-base1.0-dev (>= 1.4.0)
libgstreamer-plugins-bad1.0-dev (>= 1.4.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 (>= 1.0.2)
Hardware requirements
* AMD platforms with UVD2 (XvBA supported)
* Intel Eaglelake (G45)
* Intel Ironlake, Sandybridge, Ivybridge, Haswell and Broadwell (HD Graphics)
* Intel BayTrail, Braswell
* 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 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:
<https://github.com/01org/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.
|