GStreamer multimedia framework
Find a file
Gwenole Beauchesne e0e869f536 vaapivideomemory: disallow memory shares across buffers, use a copy.
Forbid shares of GstMemory instances, and rather make copy of it. This
effectively copies the GstMemory structure and enclosed metadata, but
this does not copy the VA surface contents itself. It should though.

This fixes preroll and makes sure to not download garbage for the first
frame when a SW rendering sink is used.
2014-07-24 11:58:29 +02:00
debian.upstream vp8: fix compilation with built-in libvpx. 2014-04-19 10:17:01 +02:00
docs surfaceproxy: add copy function. 2013-11-28 17:32:18 +01:00
ext codecparsers: update to gst-vaapi-branch commit 2d53b69. 2014-07-01 17:15:47 +02:00
gst vaapivideomemory: disallow memory shares across buffers, use a copy. 2014-07-24 11:58:29 +02:00
gst-libs decoder: mpeg4: fix picture decoder return value for skipped frames. 2014-07-21 10:17:00 +02:00
patches build: fix for GStreamer 1.0.x. 2014-07-03 18:03:52 +02:00
pkgconfig build: fix pkgconfig file names (again). 2014-02-19 06:13:41 +01:00
tests build: fix source file modes. 2014-05-09 14:41:57 +02:00
.gitignore codecparsers: jpeg: use submodule sources. 2012-10-11 14:19:38 +02:00
.gitmodules vp8: use range decoder from libvpx. 2014-04-18 20:37:25 +02:00
AUTHORS AUTHORS: updates. 2014-07-03 22:51:41 +02:00
autogen.sh vp8: use range decoder from libvpx. 2014-04-18 20:37:25 +02:00
configure.ac build: mention that support for GStreamer 0.10 is deprecated. 2014-07-03 19:43:05 +02:00
COPYING.LIB Relicense gst-libs/ code to LGPL v2.1+. 2010-09-20 12:55:42 +02:00
Makefile.am plugins: add built-in video parsers as "vaapiparse" element. 2014-06-13 17:17:07 +02:00
NEWS NEWS: updates. 2014-07-03 22:21:39 +02:00
README README: updates. 2014-07-03 22:35:29 +02:00

  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.