GStreamer multimedia framework
Find a file
Gwenole Beauchesne e876d9a581 overlay: fix check for pixels buffer change.
A GstVideoOverlayRectangle is created whenever the underlying pixels data
change. However, when global-alpha is supported, it is possible to re-use
the same GstVideoOverlayRectangle but with a change to the global-alpha
value. This process causes a change of sequence number, so we can no longer
check for that.

Still, if sequence numbers did not change, then there was no change in
global-alpha either. So, we need a way to compare the underlying GstBuffer
pointers. There is no API to retrieve the original pixels buffer from
a GstVideoOverlayRectangle. So, we use the following heuristics:

1. Use gst_video_overlay_rectangle_get_pixels_unscaled_argb() with the same
   format flags from which the GstVideoOverlayRectangle was created. This
   will work if there was no prior consumer of the GstVideoOverlayRectangle
   with alternate (non-"native") format flags.

2. In overlay_rectangle_has_changed_pixels(), we have to use the same
   gst_video_overlay_rectangle_get_pixels_unscaled_argb() function but
   with flags that match the subpicture. This is needed to cope with
   platforms that don't support global-alpha in HW, so the gst-video
   layer takes care of that and fixes this up with a possibly new
   GstBuffer, and hence pixels data (or) in-place by caching the current
   global-alpha value applied. So we have to determine the rectangle
   was previously used, based on what previous flags were used to
   retrieve the ARGB pixels buffer.
2013-01-11 15:29:12 +01:00
debian.upstream debian: fix make dist for packaging. 2012-10-05 13:38:52 +02:00
docs docs: remove obsolete gst_vaapi_surface_proxy_get_type(). 2012-12-18 16:24:15 +01:00
ext codecparsers: update to gst-vaapi-rebased commit b47983a. 2013-01-06 19:20:12 +01:00
gst plugins: cope with new GstVaapiVideoMeta API. 2013-01-05 18:02:31 +01:00
gst-libs overlay: fix check for pixels buffer change. 2013-01-11 15:29:12 +01:00
pkgconfig pkgconfig: fix dependencies and slightly improve description. 2012-09-07 15:31:09 +02:00
tests subpicture: add support for global-alpha. 2013-01-11 14:23:06 +01:00
.gitignore codecparsers: jpeg: use submodule sources. 2012-10-11 14:19:38 +02:00
.gitmodules Add videoutils submodule for GstVideoDecoder APIs. 2012-12-21 16:01:16 +01:00
AUTHORS AUTHORS: update to match current authors. 2012-03-16 14:21:36 +01:00
autogen.sh Add videoutils submodule for GstVideoDecoder APIs. 2012-12-21 16:01:16 +01:00
configure.ac configure: fix checks for packages installed in non-standard roots. 2013-01-11 14:16:16 +01:00
COPYING.LIB Relicense gst-libs/ code to LGPL v2.1+. 2010-09-20 12:55:42 +02:00
Makefile.am debian: fix make dist for packaging. 2012-10-17 15:49:23 +02:00
NEWS NEWS: updates. 2012-12-18 15:31:52 +01:00
README Fix and document build dependencies better. 2012-09-28 17:54:50 +02:00

  gstreamer-vaapi
  VA-API support to GStreamer

  Copyright (C) 2010-2011 Splitted-Desktop Systems
  Copyright (C) 2011-2012 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, H.264, VC-1,
    WMV3 videos to video/x-vaapi-surfaces surfaces, depending on the
    underlying HW capabilities.

  * `vaapiupload' is used to convert from video/x-raw-yuv pixels to
    video/x-vaapi-surface surfaces.

  * `vaapidownload' is used to convert from video/x-vaapi-surface
    surfaces to video/x-raw-yuv pixels.

  * `vaapipostproc' is used to postprocess video/x-vaapi-surface
    surfaces, for e.g. deinterlacing.

  * `vaapisink' is used to display video/x-vaapi-surface surfaces to
    screen.


Features
--------

  * VA-API support from 0.29 to 0.32
  * JPEG, MPEG-2, MPEG-4, H.264 and VC-1 ad-hoc decoders
  * 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)


Requirements
------------

Software requirements

  * GStreamer 0.10.x:
      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

  * 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, Sandy Bridge and Ivy Bridge (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 playbin2 should work as is. However, here are a few alternate
  pipelines constructed manually.

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

  * Play a raw MPEG-2 interlaced stream
  $ gst-launch-0.10 -v filesrc location=/path/to/mpeg2.bits ! \
      mpegvideoparse ! vaapidecode ! vaapipostproc ! vaapisink