GStreamer multimedia framework
Find a file
Víctor Manuel Jáquez Leal be40a1d479 tests: add simple-encoder program
This patch adds a simple-encoder test program that uses libgstvaapi for video
encoding to elementary (raw) streams. Input stream is raw YUV in the Y4M
format. That can be from a regular file or standard input when the input
filename is "-".

Usage: simple-encoder [options]* <source>

Options:
--output|-o     output file name
--codec|-c      codec to use for video encoding
--bitrate|-b    desired bitrate (kbps)

By default, and as an initial patch, the encoded stream shall conform to the
minimally supported profile. That is "Constrained Baseline Profile" for H.264
and "Simple Profile" for MPEG-2. Though, those are the defaults to be
generated by libgstvaapi.

You can find Y4M sample files here http://samples.mplayerhq.hu/yuv4mpeg2/

Original-patch-by: Changzhi Wei <changzhix.wei@intel.com>
* general code clean-up
* removed the yuv reader thread
* re-wrote the y4m file parser
* updated used API fixed some wrong usage
* fixed a lot of memory leaks
* added the bitrate setting
* keep fps' numerator and denominator
* simplified the thread control
* removed custom logging and use glib

Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>

https://bugzilla.gnome.org/show_bug.cgi?id=719528
2015-05-12 11:24:41 +02:00
debian.upstream autotools: remove gstreamer-0.10 support 2015-04-03 16:54:54 +03:00
docs surfaceproxy: add copy function. 2013-11-28 17:32:18 +01:00
ext plugins: Add h265 videoparser element "vaapiparse_h265" 2015-04-17 17:09:30 +03:00
gst vaapidecode: add guards for disabled codecs. 2015-05-04 14:27:23 +02:00
gst-libs libs: trivial documentation fix 2015-05-06 09:54:26 +02:00
patches plugins: Add h265 videoparser element "vaapiparse_h265" 2015-04-17 17:09:30 +03:00
pkgconfig build: fix pkgconfig file names (again). 2014-02-19 06:13:41 +01:00
tests tests: add simple-encoder program 2015-05-12 11:24:41 +02:00
.gitignore codecparsers: jpeg: use submodule sources. 2012-10-11 14:19:38 +02:00
.gitmodules Changing source code download links from https://gitorious to https://github 2015-04-04 00:06:56 +03:00
AUTHORS AUTHORS: Updates 2015-02-03 13:08:53 +02:00
autogen.sh autogen: drop videoutils submodule. 2015-04-17 10:44:09 +02:00
configure.ac build: upgrade glib dependency to 2.32 2015-04-30 13:54:34 +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 2015-02-03 10:00:23 +02:00
README Update README 2015-04-04 00:40:29 +03: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, JPEG, VP8 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.37
  * JPEG, MPEG-2, MPEG-4, H.264 AVC, H.264 MVC, VP8 and VC-1 ad-hoc decoders
  * MPEG-2, H.264 AVC,H.264 MVC, JPEG and VP8 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 1.2.x (up to including GStreamer 1.6):
      libglib2.0-dev (>= 2.28)
      libgstreamer1.0-dev (>= 1.2.0)
      libgstreamer-plugins-base1.0-dev (>= 1.2.0)
      libgstreamer-plugins-bad1.0-dev (>= 1.2.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, Haswell and Broadwell (HD Graphics)
  * Intel BayTrail
  * 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.