4 years agoUserful gstreamer-vaapi
Reza Razavi [Thu, 1 May 2014 23:11:35 +0000 (17:11 -0600)]
Userful gstreamer-vaapi

4 years agocodecparsers: update to gst-vaapi-branch commit eaa3f7e.
Gwenole Beauchesne [Mon, 28 Apr 2014 07:42:13 +0000 (09:42 +0200)]
codecparsers: update to gst-vaapi-branch commit eaa3f7e.

h264: fix parsing of slice groups for map type = 2

4 years agocodecparsers: update to gst-vaapi branch commit f44edfc.
Gwenole Beauchesne [Sat, 26 Apr 2014 20:35:49 +0000 (22:35 +0200)]
codecparsers: update to gst-vaapi branch commit f44edfc.

h264: fix derivation of default scaling lists

4 years agodecoder: h264: fix long-term reference picture marking process.
Cong Zhong [Fri, 24 May 2013 11:00:54 +0000 (19:00 +0800)]
decoder: h264: fix long-term reference picture marking process.

Fix reference picture marking process with memory_management_control_op
set to 3 and 6, i.e. assign LongTermFrameIdx to a short-term reference
picture, or the current picture.

This fixes decoding of FRExt_MMCO4_Sony_B.

[squashed, edited to use GST_VAAPI_PICTURE_IS_COMPLETE() macro]
Signed-off-by: Gwenole Beauchesne <>
4 years agodecoder: h264: fix initialization of RefPicLists for multiple slices.
Gwenole Beauchesne [Sat, 26 Apr 2014 18:21:46 +0000 (20:21 +0200)]
decoder: h264: fix initialization of RefPicLists for multiple slices.

The initialization of reference picture lists ( applies to all
slices. So, the RefPicList0/1 lists need to be constructed prior to
each slice submission to the HW decoder.

This fixes decoding of video sequences where frames are encoded with
multiple slices of different types, e.g. 4 slices in this order I, P,
I, and P. More precisely, CABAST3_Sony_E and CABASTBR3_Sony_B.

4 years agodecoder: h264: skip SPS extension and auxiliary slice NALs.
Zhong Cong [Tue, 4 Jun 2013 07:01:46 +0000 (15:01 +0800)]
decoder: h264: skip SPS extension and auxiliary slice NALs.

When NAL units of type 13 (SPS extension) or type 19 (auxiliary slice)
are present in a video, decoders shall perform the (optional) decoding
process specified for these NAL units or shall ignore them (7.4.1).

Implement option 2 (skip) for now, as alpha composition is not
supported yet during the decoding process.

This fixes decoding of the primary coded video in alphaconformanceG.

[skip NAL units earlier, i.e. at parsing time]
Signed-off-by: Gwenole Beauchesne <>
4 years agodecoder: h264: fix slice data bit offset with MVC NAL units.
Li Xiaowei [Thu, 7 Mar 2013 03:32:20 +0000 (11:32 +0800)]
decoder: h264: fix slice data bit offset with MVC NAL units.

When MVC slice NAL units (coded slice extension and prefix NAL) are
present, the number of NAL header bytes is 3, not 1 as usual.

Signed-off-by: Li Xiaowei <>
Signed-off-by: Gwenole Beauchesne <>
4 years agodecoder: h264: fix activation of picture and sequence parameters.
Gwenole Beauchesne [Fri, 25 Apr 2014 17:11:03 +0000 (19:11 +0200)]
decoder: h264: fix activation of picture and sequence parameters.

At the time the first VCL NAL unit of a primary coded picture is found,
and if that NAL unit was parsed to be an SPS or PPS, then the entries
in the parser may have been overriden. This means that, when the picture
is to be decoded, slice_hdr->pps could point to an invalid (the next)
PPS entry.

So, one way to solve this problem is to not use the parser PPS and
SPS info but rather maintain our own activation chain in the decoder.

4 years agodecoder: h264: retain SEI messages until the end of frame.
Gwenole Beauchesne [Fri, 25 Apr 2014 14:24:01 +0000 (16:24 +0200)]
decoder: h264: retain SEI messages until the end of frame.

Retain the SEI messages that were parsed from the access unit until we
have completely decoded the current frame. This is done so that we can
peek at that data whenever necessary during decoding. e.g. for exposing
3D stereoscopic information at a later stage.

4 years agodecoder: h264: add support for grayscale encoded clips.
Gwenole Beauchesne [Fri, 25 Apr 2014 12:23:11 +0000 (14:23 +0200)]
decoder: h264: add support for grayscale encoded clips.

Fix support for grayscale encoded video clips, and possibly others if
the underlying driver supports the non-YUV 4:2:0 formats. i.e. defer
the decision that a surface with the desired chroma format is not
supported to the actual VA driver implementation.

4 years agodecoder: default to YUV 4:2:0 VA surfaces.
Gwenole Beauchesne [Fri, 25 Apr 2014 12:16:24 +0000 (14:16 +0200)]
decoder: default to YUV 4:2:0 VA surfaces.

Cope with context changes to support non-YUV 4:2:0 VA surfaces. Still,
make sure all codecs use YUV 4:2:0 output format for now, by default.

4 years agodecoder: re-indent GstVaapiDecoder base object.
Gwenole Beauchesne [Fri, 25 Apr 2014 11:57:02 +0000 (13:57 +0200)]
decoder: re-indent GstVaapiDecoder base object.

4 years agoencoder: derive chroma type from video format.
Gwenole Beauchesne [Fri, 25 Apr 2014 11:47:53 +0000 (13:47 +0200)]
encoder: derive chroma type from video format.

Cope with previous VA context change to derive the correct surface chroma
type from the input video format.

4 years agocontext: add support for non-YUV 4:2:0 formats.
Gwenole Beauchesne [Fri, 25 Apr 2014 11:45:31 +0000 (13:45 +0200)]
context: add support for non-YUV 4:2:0 formats.

Don't force allocation of VA surfaces in YUV 4:2:0 format. Rather, allow
for the upper layer to specify the desired chroma type. If the chroma
type field is not set (or yields zero), then YUV 4:2:0 format is used
by default.

4 years agovp8: fix per-segment deblocking filter level in relative mode.
Gwenole Beauchesne [Tue, 22 Apr 2014 17:53:50 +0000 (19:53 +0200)]
vp8: fix per-segment deblocking filter level in relative mode.

Fix possible bug when a per-segment deblocking filter level value
needs to be set in non-absolute mode, i.e. when the loop filter update
value is negative in delta mode.

Also clamp the resulting filter level value to 0..63 range.

4 years agovp8: fix check for disabling the loop filter (again).
Gwenole Beauchesne [Tue, 22 Apr 2014 15:25:15 +0000 (17:25 +0200)]
vp8: fix check for disabling the loop filter (again).

Improve condition to disable the loop filter. The previous heuristic
used to check all filter levels, for all segments. It turns out that
only the base filter_level value defined in the frame header needs
to be checked.

This fixes 00-comprehensive-013.

4 years agobuild: fix make dist with certain conditionals not met.
Gwenole Beauchesne [Mon, 21 Apr 2014 16:02:21 +0000 (18:02 +0200)]
build: fix make dist with certain conditionals not met.

Fix generation of source tarballs when certain conditionals are not
met. e.g. always include all buildable codecparsers sources in the
distribution tarball, fix plug-in element sources set to include X11
and encoder bits.

4 years agobuild: add missing files for GStreamer 0.10.
Gwenole Beauchesne [Mon, 21 Apr 2014 15:34:59 +0000 (17:34 +0200)]
build: add missing files for GStreamer 0.10.

Add missing GstVideoEncoder implementation files to fix build with ancient
GStreamer 0.10 stack.

4 years agobuild: add missing files for VP8 bitstream parser.
Gwenole Beauchesne [Sat, 19 Apr 2014 08:17:20 +0000 (10:17 +0200)]
build: add missing files for VP8 bitstream parser.

Fix make dist for building the VP8 bitstream parser.

4 years agovp8: allow compilation without the built-in libvpx.
Gwenole Beauchesne [Mon, 21 Apr 2014 15:49:38 +0000 (17:49 +0200)]
vp8: allow compilation without the built-in libvpx.

The built-in libvpx serves multiple purposes, among which the most
important ones could be: track the most up-to-date, and optimized,
range decoder; allow for future hybrid implementations (non-VLD);
and have a completely independent range decoder implementation.

4 years agovp8: propagate PTS from demux frame.
Gwenole Beauchesne [Mon, 21 Apr 2014 15:28:27 +0000 (17:28 +0200)]
vp8: propagate PTS from demux frame.

gst_adapter_prev_pts() is forbidden within libgstvaapi. Besides, the demuxer
or parser would already have determined the PTS from a previous stage.

4 years agovp8: fix compilation with built-in libvpx.
Gwenole Beauchesne [Sat, 19 Apr 2014 05:49:30 +0000 (07:49 +0200)]
vp8: fix compilation with built-in libvpx.

Apply correct patch from fd.o #722760 to fix several issues: update the
license terms to LGPLv2.1+, fix dependencies to built-in libvpx and fix
make dist.

4 years agovp8: use range decoder from libvpx.
Gwenole Beauchesne [Thu, 13 Feb 2014 20:17:23 +0000 (21:17 +0100)]
vp8: use range decoder from libvpx.

Add libvpx submodule that tracks the upstream version 1.3.0. This is
needed to build a library with all symbols
placed into the GSTREAMER namespace.

4 years agovp8: fix check for disabling the loop filter.
Gwenole Beauchesne [Fri, 4 Apr 2014 17:17:17 +0000 (19:17 +0200)]
vp8: fix check for disabling the loop filter.

4 years agoAdd initial VP8 decoder.
Zhao, Halley [Thu, 26 Dec 2013 23:18:24 +0000 (07:18 +0800)]
Add initial VP8 decoder.

[complete overhaul, fixed support for resolution changes]
Signed-off-by: Gwenole Beauchesne <>
4 years agodecoder: h264: cope with new gst_h264_parser_parse_sei() interface.
Gwenole Beauchesne [Fri, 21 Mar 2014 14:15:37 +0000 (15:15 +0100)]
decoder: h264: cope with new gst_h264_parser_parse_sei() interface.

The gst_h264_parse_parse_sei() function now returns an array of SEI
messages, instead of a single SEI message. Reason: it is allowed to
have several SEI messages packed into a single SEI NAL unit, instead
of multiple NAL units.

4 years agocodecparsers: update to gst-vaapi-branch commit a454f86.
Gwenole Beauchesne [Fri, 18 Apr 2014 17:36:16 +0000 (19:36 +0200)]
codecparsers: update to gst-vaapi-branch commit a454f86.

b2eb5f6 vp8: rename dboolhuff symbols
b74a881 vp8: add GStreamer native utilities
2940ac6 add VP8 bitstream parser

4 years agocodecparsers: update to gst-vaapi-branch commit d459bc5.
Gwenole Beauchesne [Fri, 18 Apr 2014 17:16:56 +0000 (19:16 +0200)]
codecparsers: update to gst-vaapi-branch commit d459bc5.

d459bc5 h264: set framerate even for interlaced videos
c78b82c h264: add support for Recovery Point SEI message
7693bac h264: add support for Frame Packing Arrangement SEI message
31fafa7 h264: add support for Stereo Video Information SEI message
8b113a6 h264: parse seq_parameter_set_mvc_extension()
040f9b8 h264: parse MVC syntax elements
cc18ef3 h264: add nal_reader_skip_long() helper
7e76a48 h264: fix slice_header() parsing for MVC
caf46d8 h264: add gst_h264_parse_nalu_header() helper
f75074e h264: add gst_h264_parse_sps_data() helper
798c397 h264: clean-up gst_h264_parser_parse_sei_message()
4e36737 h264: fix skipping of unsupported SEI messages
5300766 h264: fix SEI buffering_period() parsing

4 years agocodecparsers: update to gst-vaapi-branch commit 8fadf40.
Gwenole Beauchesne [Fri, 21 Mar 2014 14:09:14 +0000 (15:09 +0100)]
codecparsers: update to gst-vaapi-branch commit 8fadf40.

8fadf40 h264: Fix multiple SEI messages in one SEI RBSP parsing.
644825f h265: remove trailling 0x00 bytes as the spec doesn't allow them
95f9f0f h264: remove trailling 0x00 bytes as the spec doesn't allow them
766007b h265: Initialize pointer correctly that is never assigned but freed in error cases
8ec5816 h265: Fix segfault when parsing HRD parameter
5b1730f h265: Fix segfault when parsing VPS
983b7f7 h265: prevent to overrun chroma_weight_l0_flag
7ba641d h265: Fix debug output
d9f9f9b h264: not all startcodes should have 3-byte 0 prefix

4 years agodecoder: h264: fix robustness patch for bytestream format.
Gwenole Beauchesne [Tue, 4 Feb 2014 17:35:28 +0000 (18:35 +0100)]
decoder: h264: fix robustness patch for bytestream format.

Fix parser and decoder state to sync at the right locations. This is
because we could reset the parser state, while the decoder state was
not copied yet, e.g. when parsing several NAL units from multiple frames
whereas the current frame was not decoded yet.

This is a regression brought in by commit 6fe5496.

4 years agobuild: fix pkgconfig file names (again).
Gwenole Beauchesne [Tue, 18 Feb 2014 05:56:51 +0000 (06:56 +0100)]
build: fix pkgconfig file names (again).

It turns out it is more convenient to have only pkgconfig files named
after the installed GStreamer API version (1.0) instead of using all
possible subsequent names from that (1.0, 1.2, 1.4). i.e. they conflict
altogether anyway, so align pkgconfig file names to that.

4 years agobuild: fix packaging for GStreamer 1.2.
Gwenole Beauchesne [Fri, 7 Feb 2014 08:43:51 +0000 (09:43 +0100)]
build: fix packaging for GStreamer 1.2.

Fix gstreamer-vaapi includedir for GStreamer 1.2 setups. i.e. use
the pkgconfig version (1.0) instead of the intended API version (1.2).
libgstvaapi1.0-dev and libgstvaapi1.2-dev packages will now conflict,
as would core GStreamer 1.0 and GStreamer 1.2 dev packages anyway.

4 years agoBump version for development.
Gwenole Beauchesne [Fri, 24 Jan 2014 10:27:30 +0000 (11:27 +0100)]
Bump version for development.

4 years agodebian: fix trailing whitespace in description. 0.5.8
Gwenole Beauchesne [Fri, 24 Jan 2014 09:55:39 +0000 (10:55 +0100)]
debian: fix trailing whitespace in description.

4 years agodebian: fix package description.
Gwenole Beauchesne [Thu, 23 Jan 2014 22:24:55 +0000 (23:24 +0100)]
debian: fix package description.

Try to improve package description for the compiled plug-in elements
available in there. e.g. only display vaapidownload and vaapiupload
for GStreamer 0.10 builds, display vaapiencode_* elements when VA
encoding is enabled, etc.

Also increase the copyright notice date.

4 years agobuild: fix warnings on 64-bit platforms.
Gwenole Beauchesne [Thu, 23 Jan 2014 21:47:19 +0000 (22:47 +0100)]
build: fix warnings on 64-bit platforms.

4 years agobuild: fix for older versions of VA-API (< 0.34.0).
Gwenole Beauchesne [Thu, 23 Jan 2014 21:44:09 +0000 (22:44 +0100)]
build: fix for older versions of VA-API (< 0.34.0).

Fix build with older versions of VA-API (< 0.34.0), or versions without
good enough headers for encoding support for instance.

4 years ago0.5.8.
Gwenole Beauchesne [Thu, 23 Jan 2014 18:36:14 +0000 (19:36 +0100)]

4 years agoREADME: updates.
Gwenole Beauchesne [Thu, 23 Jan 2014 18:32:28 +0000 (19:32 +0100)]
README: updates.

VA-API up to 0.34.0 is actually supported. Mention new video encoding
support. Update copyright years, list of supported Intel HD Graphics

4 years agoNEWS: updates.
Gwenole Beauchesne [Thu, 23 Jan 2014 18:18:13 +0000 (19:18 +0100)]
NEWS: updates.

4 years agotests: test-filter: fix "deinterlace" option parse.
Gwenole Beauchesne [Mon, 20 Jan 2014 13:16:56 +0000 (14:16 +0100)]
tests: test-filter: fix "deinterlace" option parse.

Default to GST_VAAPI_DEINTERLACE_METHOD_NONE if no "deinterlace" option
string was provided, i.e. if it remained set to NULL.

4 years agolibs: factor out usages of vaGetConfigAttributes().
Gwenole Beauchesne [Thu, 23 Jan 2014 17:41:24 +0000 (18:41 +0100)]
libs: factor out usages of vaGetConfigAttributes().

Add gst_vaapi_get_config_attribute() helper function that takes a
GstVaapiDisplay and the rest of the arguments with VA types. The aim
is to have thread-safe VA helpers by default.

4 years agolibs: re-indent all source code related to VA utilities.
Gwenole Beauchesne [Thu, 23 Jan 2014 16:41:02 +0000 (17:41 +0100)]
libs: re-indent all source code related to VA utilities.

4 years agolibs: add missing file (libgstvaapi_priv_check.h).
Gwenole Beauchesne [Thu, 23 Jan 2014 16:06:08 +0000 (17:06 +0100)]
libs: add missing file (libgstvaapi_priv_check.h).

4 years agoencoder: notify the encoder of the submitted packed headers.
Gwenole Beauchesne [Thu, 23 Jan 2014 14:13:06 +0000 (15:13 +0100)]
encoder: notify the encoder of the submitted packed headers.

Make sure to configure the encoder with the set of packed headers we
intend to generate and submit. i.e. make selection of packed headers
to submit more robust.

4 years agoencoder: fix and factor out check for supported rate-control modes.
Gwenole Beauchesne [Thu, 23 Jan 2014 14:10:11 +0000 (15:10 +0100)]
encoder: fix and factor out check for supported rate-control modes.

Cache the first compatible GstVaapiProfile found if the encoder is not
configured yet. Next, factor out the code to check for the supported
rate-control modes by moving out vaGetConfigAttributes() to a separate
function, while also making sure that the attribute type is actually
supported by the encoder.

Also fix the default set of supported rate control modes to not the
"none" variant. It's totally useless to expose it at this point.

4 years agocontext: move rate-control mode to encoder specific config.
Gwenole Beauchesne [Thu, 23 Jan 2014 13:01:33 +0000 (14:01 +0100)]
context: move rate-control mode to encoder specific config.

Move usage-specific config out of the common GstVaapiContextInfo.
Create a specialized config for encoding and move rate-control mode
to there.

4 years agocontext: introduce concept of usage.
Gwenole Beauchesne [Thu, 23 Jan 2014 12:30:41 +0000 (13:30 +0100)]
context: introduce concept of usage.

Introduce GstVaapiContextUsage so that to explicitly determine the
usage of a VA context. This is useful in view to simplifying the
creation of VA context for VPP too.

4 years agocontext: fix get_attribute() value result.
Gwenole Beauchesne [Thu, 23 Jan 2014 10:44:12 +0000 (11:44 +0100)]
context: fix get_attribute() value result.

Unknown attributes, or attributes that are not supported for the given
profile/entrypoint pair have a return value of VA_ATTRIB_NOT_SUPPORTED.
So, return failure in this case.

4 years agocontext: move overlay composition to separate files.
Gwenole Beauchesne [Thu, 23 Jan 2014 09:59:20 +0000 (10:59 +0100)]
context: move overlay composition to separate files.

Move GstVideoOverlayComposition handling to separate source files.
This helps keeing GstVaapiContext core implementation to the bare
minimal, i.e. simpy helpers to create a VA context and handle pool
of associated VA surfaces.

4 years agocontext: clean-ups. Strip down APIs.
Gwenole Beauchesne [Thu, 23 Jan 2014 08:41:07 +0000 (09:41 +0100)]
context: clean-ups. Strip down APIs.

Improve documentation and debug messages. Clean-up APIs, i.e. strip
them down to the minimal set of interfaces. They are private, so no
need expose getters for instance.

4 years agocontext: re-indent all GstVaapiContext related source code.
Gwenole Beauchesne [Thu, 23 Jan 2014 08:27:38 +0000 (09:27 +0100)]
context: re-indent all GstVaapiContext related source code.

4 years agolibs: check that private headers remain private.
Gwenole Beauchesne [Thu, 23 Jan 2014 09:20:40 +0000 (10:20 +0100)]
libs: check that private headers remain private.

Make sure that libgstvaapi private headers remain internally used to
build libgstvaapi libraries only. All header dependencies were reviewed
and checks for IN_LIBGSTVAAPI definition were added accordingly.

Also rename GST_VAAPI_CORE definition to IN_LIBGSTVAAPI_CORE to keep

4 years agoBump library major version.
Gwenole Beauchesne [Wed, 22 Jan 2014 18:04:58 +0000 (19:04 +0100)]
Bump library major version.

Bump the library major version due to API/ABI changes that occurred in
the imaging API. In particular, GstVaapiDisplay interfaces no longer
expose any GstCaps but provide GArray based ones e.g. to determine the
set of supported decode/encode profiles.

4 years agolegal: update copyright notice dates.
Gwenole Beauchesne [Wed, 22 Jan 2014 17:54:14 +0000 (18:54 +0100)]
legal: update copyright notice dates.

4 years agolegal: add per-file authorship information.
Gwenole Beauchesne [Wed, 22 Jan 2014 17:49:20 +0000 (18:49 +0100)]
legal: add per-file authorship information.

4 years agodecoder: fix video codec frame number in standalone mode.
Gwenole Beauchesne [Wed, 22 Jan 2014 17:11:26 +0000 (18:11 +0100)]
decoder: fix video codec frame number in standalone mode.

Set a valid GstVideoCodecFrame.system_frame_number when decoding a
stream in standalone mode. While we are at it, improve the debugging
messages to also include that frame number.

4 years agodecoder: fix crash on invalid pointer for GST_DEBUG().
Wind Yuan [Fri, 17 Jan 2014 08:56:53 +0000 (16:56 +0800)]
decoder: fix crash on invalid pointer for GST_DEBUG().

When decoding failed, or that the frame was dropped, the associated
surface proxy is not guaranteed to be present. Thus, the GST_DEBUG()
message needs to check whether the proxy is actually present or not.

[fixed gst_vaapi_surface_proxy_get_surface_id() to return VA_INVALID_ID]
Signed-off-by: Gwenole Beauchesne <>
4 years agoencoder: h264: disable NAL HRD parameters for now.
Gwenole Beauchesne [Wed, 22 Jan 2014 16:07:24 +0000 (17:07 +0100)]
encoder: h264: disable NAL HRD parameters for now.

Don't emit NAL HRD parameters for now in the SPS headers because the
SEI buffering_period() and picture_timing() messages are not handled
yet. Some additional changes are necessary to get it right.

4 years agoencoder: h264: fix default CPB buffer size.
Gwenole Beauchesne [Tue, 21 Jan 2014 18:04:41 +0000 (19:04 +0100)]
encoder: h264: fix default CPB buffer size.

Fix default CPB buffer size to something more reasonable (1500 ms)
and that still fits the level limits. This is a non configurable
property for now. The initial CPB removal delay is also fixed to
750 ms.

4 years agoencoder: h264: fix bitrate encoding for HRD conformance.
Gwenole Beauchesne [Wed, 22 Jan 2014 13:43:24 +0000 (14:43 +0100)]
encoder: h264: fix bitrate encoding for HRD conformance.

Round down the calculated, or supplied, bitrate (kbps) into a multiple
of the HRD bitrate scale factor. Use a bitrate scale factor of 64 so
that to have less losses in precision. Likewise, don't round up because
that could be a strict constraint imposed by the user.

4 years agoencoder: h264: fix level lookup constraints wrt. bitrate.
Gwenole Beauchesne [Wed, 22 Jan 2014 10:25:13 +0000 (11:25 +0100)]
encoder: h264: fix level lookup constraints wrt. bitrate.

Fix the level calculation involving bitrate limits. Since we are
targetting NAL HRD conformance, the check against MaxBR from the
Table A-1 limits shall involve cpbBrNalFactor depending on the
active profile.

4 years agoencoder: h264: submit sequence parameter only once.
Gwenole Beauchesne [Tue, 21 Jan 2014 17:01:20 +0000 (18:01 +0100)]
encoder: h264: submit sequence parameter only once.

Submit sequence parameter buffers only once, or when the bitstream
was reconfigured in a way that requires such. Always submit packed
sequence parameter buffers at I-frame period, if the VA driver needs

4 years agoencoder: h264: only submit packed headers when required.
Gwenole Beauchesne [Tue, 21 Jan 2014 17:35:17 +0000 (18:35 +0100)]
encoder: h264: only submit packed headers when required.

Make sure to submit the packed headers only if the underlying VA driver
requires those. Currently, only handle packed sequence and picture

4 years agoencoder: h264: fix ip_period value in sequence parameter.
Gwenole Beauchesne [Tue, 21 Jan 2014 16:35:24 +0000 (17:35 +0100)]
encoder: h264: fix ip_period value in sequence parameter.

The VAEncSequenceParameterBuffer.ip_period value reprents the distance
between the I-frame and the next P-frame. So, this also accounts for
any additional B-frame in the middle of it.

This fixes rate control heuristics for certain VA drivers.

4 years agoencoder: h264: fix level when bitrate is automatically computed.
Gwenole Beauchesne [Tue, 21 Jan 2014 16:04:40 +0000 (17:04 +0100)]
encoder: h264: fix level when bitrate is automatically computed.

Fix level characterisation when the bitrate is automatically computed
from the active coding tools. i.e. ensure the bitrate once the profile
is completely characterized but before the level calculation process.

4 years agoencoder: h264: clean-ups.
Gwenole Beauchesne [Tue, 21 Jan 2014 15:05:22 +0000 (16:05 +0100)]
encoder: h264: clean-ups.

Document and rename a few functions here and there. Drop code that
caps num_bframes variable in reset_properties() since they shall
have been checked beforehand, during properties initialization.

4 years agoencoder: h264: clean-up bitwriter related utilities.
Gwenole Beauchesne [Tue, 21 Jan 2014 14:28:34 +0000 (15:28 +0100)]
encoder: h264: clean-up bitwriter related utilities.

Clean-up GstBitWriter related utility functions and simplify notations.
While we are at it, also make bitstream writing more robust should an
overflow occur. We could later optimize for writing headers capped to
their maximum possible size by using the _unchecked() helper variants.

4 years agoencoder: h264: completely remove private headers.
Gwenole Beauchesne [Tue, 21 Jan 2014 14:23:01 +0000 (15:23 +0100)]
encoder: h264: completely remove private headers.

Drop private header since it was originally used to expose internals
to the plugin element. The proper interface is now the properties API,
thus rendering private headers totally obsolete.

4 years agoencoder: h264: fix PPS header packing with profile < high.
Gwenole Beauchesne [Wed, 15 Jan 2014 14:54:32 +0000 (15:54 +0100)]
encoder: h264: fix PPS header packing with profile < high.

Fix PPS header packing when profile is below High since 8x8 transform
mode and scaling lists are High Profile features.

4 years agoencoder: h264: always emit VUI parameters for framerate.
Gwenole Beauchesne [Wed, 15 Jan 2014 14:46:19 +0000 (15:46 +0100)]
encoder: h264: always emit VUI parameters for framerate.

Always emit VUI parameters for timing_info, which includes framerate

4 years agoencoder: h264: really fix frame cropping rectangle calculation.
Gwenole Beauchesne [Wed, 15 Jan 2014 14:10:48 +0000 (15:10 +0100)]
encoder: h264: really fix frame cropping rectangle calculation.

Make frame cropping rectangle calculation future proof, i.e. exactly
follow the specification (7-18) to (7-21), and subsampling definitions
from Table 6-1.

4 years agovaapisink: set csc render flags from sinkpad caps.
Holger Kaelberer [Wed, 15 Jan 2014 11:09:14 +0000 (12:09 +0100)]
vaapisink: set csc render flags from sinkpad caps.

This maps GstVideoColorimetry information in vaapisink's sinkpad caps
to GST_VAAPI_COLOR_STANDARD_* flags, if per-buffer information was not

[factored out code, added SMPTE240M, handle per-buffer flags]
Signed-off-by: Gwenole Beauchesne <>
4 years agosurface: rework render flags.
Gwenole Beauchesne [Wed, 28 Mar 2012 13:05:26 +0000 (15:05 +0200)]
surface: rework render flags.

Pack render flags per category and provide more flags into the color
standard category. In particular, cover for SMPTE-240M.

4 years agovaapipostproc: add support for colorbalance filters.
Zhao, Halley [Thu, 12 Dec 2013 20:14:41 +0000 (04:14 +0800)]
vaapipostproc: add support for colorbalance filters.

Add support for hue, saturation, brightness and constrat adjustments.
Also fix cap info local copy to match the really expected cap subtype
of interest.

Signed-off-by: Gwenole Beauchesne <>
4 years agovaapipostproc: fix support for "sharpen" filter.
Zhao, Halley [Thu, 12 Dec 2013 00:38:12 +0000 (08:38 +0800)]
vaapipostproc: fix support for "sharpen" filter.

Fix copy/paste error when submitting the "sharpen" value to the
GstVaapiFilter instance.

Signed-off-by: Gwenole Beauchesne <>
4 years agopkgconfig: plugin dir should use PKG version not API version.
Lionel Landwerlin [Fri, 20 Dec 2013 12:05:42 +0000 (12:05 +0000)]
pkgconfig: plugin dir should use PKG version not API version.

Fix the pluginsdir and includedir variables in the generated pkgconfig
(.pc) files. The location needs to be built with the PKG version in
mind instead of the API version.

While we are at it, also fix the PKG version for GStreamer >= 1.3.

[additional fixes for includedir and pkg requirements]
Signed-off-by: Gwenole Beauchesne <>
4 years agovaapisink: fix display initialization in GstVideoOverlay implementation.
Holger Kaelberer [Wed, 15 Jan 2014 09:05:45 +0000 (10:05 +0100)]
vaapisink: fix display initialization in GstVideoOverlay implementation.

When gst_vaapisink_video_overlay_set_window_handle() is called early,
before the pipeline has been set to PLAYING, the display has not yet
been initialized and _PLUGIN_BASE_DISPLAY_TYPE() is not yet
up-to-date. For this reason the foreign XID is not attached.

Now _ensure_display() is called earlier.

Signed-off-by: Gwenole Beauchesne <>
4 years agovaapisink: expose the raw video formats in static caps template.
Sreerenj Balachandran [Wed, 9 Oct 2013 10:47:54 +0000 (13:47 +0300)]
vaapisink: expose the raw video formats in static caps template.

Expose all raw video formats in the static caps template since the
vaapisink is supporting raw data. We will get the exact set of formats
supported by the driver dynamically through the _get_caps() routine.

Signed-off-by: Gwenole Beauchesne <>
4 years agovaapidecode: query downstream caps features like GLTextureUploadMeta.
Matthieu Bouron [Wed, 11 Dec 2013 18:08:26 +0000 (18:08 +0000)]
vaapidecode: query downstream caps features like GLTextureUploadMeta.

Fix vaapidecode to correctly report caps features downstream, when
a custom pipeline is built manually.

Signed-off-by: Gwenole Beauchesne <>
4 years agovaapidecode: add system memory caps to template caps.
Matthieu Bouron [Tue, 17 Dec 2013 15:27:10 +0000 (15:27 +0000)]
vaapidecode: add system memory caps to template caps.

Since vaapidecode provides buffer that can be mapped as regular memory,
those caps should be added to the template caps. That only applies to
GStreamer >= 1.2.

Signed-off-by: Gwenole Beauchesne <>
4 years agovaapidecode: fix hang on SIGINT.
Wind Yuan [Tue, 17 Dec 2013 02:26:03 +0000 (10:26 +0800)]
vaapidecode: fix hang on SIGINT.

vaapidecode hangs when pipeline is stopped without any EOS, e.g. when
<Ctrl>+C is pressed, thus causing the srcpad task to keep running and
locked. This fixes a deadlock on state change from PAUSED to READY.

Signed-off-by: Gwenole Beauchesne <>
4 years agovaapiencode: fix possible hang on SIGINT.
Wind Yuan [Tue, 17 Dec 2013 09:23:42 +0000 (04:23 -0500)]
vaapiencode: fix possible hang on SIGINT.

vaapiencode might hang when the pipeline is stopped without any EOS,
e.g. when <Ctrl>+C is pressed, thus causing the srcpad task to keep
running and locked. This fixes a possible deadlock on state change

Signed-off-by: Gwenole Beauchesne <>
4 years agovaapiencode: fix typo in error message.
Gwenole Beauchesne [Tue, 14 Jan 2014 15:33:04 +0000 (16:33 +0100)]
vaapiencode: fix typo in error message.

Fix incomplete error message in gst_vaapiencode_push_frame().

4 years agoplugins: add helpers to create video caps with features.
Gwenole Beauchesne [Tue, 14 Jan 2014 18:08:36 +0000 (19:08 +0100)]
plugins: add helpers to create video caps with features.

Add gst_vaapi_video_format_new_template_caps_with_features() helper
function to add the supplied caps feature string on GStreamer >= 1.2.

Add gst_vaapi_find_preferred_caps_feature() helper function to discover
the "best" caps feature to use for the supplied pad. In practice, we
will always favor memory:VASurface first, then meta:GLTextureUploadMeta,
and finally the system memory caps.

4 years agoplugins: don't apply overlay composition in GLTextureUpload function.
Matthieu Bouron [Thu, 9 Jan 2014 11:54:11 +0000 (11:54 +0000)]
plugins: don't apply overlay composition in GLTextureUpload function.

The GLTextureUpload function is not in charge of doing the overlay
composition if any.

Signed-off-by: Gwenole Beauchesne <>
4 years agoencoder: re-order submission of VA objects.
Gwenole Beauchesne [Tue, 14 Jan 2014 12:47:52 +0000 (13:47 +0100)]
encoder: re-order submission of VA objects.

Change the submission order of VA objects so that to make that process
more logical. i.e. submit sequence parameter first, if any; next the
packed headers associated to sequece, picture or slices; and finally
the actual picture and associated slices.

4 years agoencoder: clean-up objects.
Gwenole Beauchesne [Tue, 14 Jan 2014 11:01:11 +0000 (12:01 +0100)]
encoder: clean-up objects.

Various clean-ups to improve consistency and readability: rename some
variables, drop unused macro definitions, drop initialization of vars
that are zero-initialized from the base class, drop un-necessary casts,
allocate GPtrArrays with a destroy function.

4 years agoencoder: h264: fix frame cropping rectangle calculation.
Gwenole Beauchesne [Mon, 13 Jan 2014 12:41:35 +0000 (13:41 +0100)]
encoder: h264: fix frame cropping rectangle calculation.

Fix frame cropping rectangle calculation to handle horizontal resolutions
that don't match a multiple of 16 pixels, but also the vertical resolution
that was incorrectly computed for progressive sequences too.

4 years agoencoder: h264: improve automatic bitrate calculation.
Gwenole Beauchesne [Mon, 13 Jan 2014 10:49:14 +0000 (11:49 +0100)]
encoder: h264: improve automatic bitrate calculation.

For non "Constant-QP" modes, we could provide more reasonable heuristics
for the target bitrate. In general, 48 bits per macroblock with all the
useful coding tools enable looks safe enough. Then, this rate is raised
by +10% to +15% for each coding tool that is disabled.

4 years agoencoder: h264: support "high-compression" tuning option.
Gwenole Beauchesne [Mon, 13 Jan 2014 10:11:25 +0000 (11:11 +0100)]
encoder: h264: support "high-compression" tuning option.

Add support for "high-compression" tuning option. First, determine the
largest supported profile by the hardware. Next, check any target limit
set by the user. Then, enable each individual coding tool based on the
resulting profile_idc value to use.

4 years agoencoder: h264: allow target decoder constraints.
Gwenole Beauchesne [Sun, 12 Jan 2014 21:24:04 +0000 (22:24 +0100)]
encoder: h264: allow target decoder constraints.

Allow user to precise the largest profile to use for encoding due
to target decoder constraints. For instance, if CABAC entropy coding
mode is requested by "constrained-baseline" profile only is desired,
then an error is returned during codec configuration.

Also make sure that the suitable profile we derived actually matches
what the HW can cope with.

4 years agoencoder: h264: refine size of coded buffer.
Gwenole Beauchesne [Sun, 12 Jan 2014 21:14:11 +0000 (22:14 +0100)]
encoder: h264: refine size of coded buffer.

Refine the heuristic to determine the maximum size of a coded buffer
to account for the exact number of slices. set_context_info() is the
last step during codec reconfiguration, no additional change is done
afterwards, so re-using the num_slices field here is fine.

4 years agoencoder: h264: expose more coding tools.
Wind Yuan [Fri, 13 Dec 2013 09:36:08 +0000 (17:36 +0800)]
encoder: h264: expose more coding tools.

Add new H.264 coding tools to improve compression:
- "cabac": enable CABAC entropy coding (default: FALSE);
- "dct8x8": enable spatial transform 8x8 (default: FALSE).

Signed-off-by: Gwenole Beauchesne <>
4 years agoencoder: h264: derive profile and level from active coding tools.
Gwenole Beauchesne [Fri, 10 Jan 2014 17:18:25 +0000 (18:18 +0100)]
encoder: h264: derive profile and level from active coding tools.

Automatically derive the minimum profile and level to be used for
encoding, based on the activated coding tools. The encoder will
be trying to generate a bitstream that has the best chances to be
decoded on most platforms by default.

Also change the default profile to "constrained-baseline" so that
to ensure maximum compatibility when the stream is decoded.

4 years agoencoder: h264: fix hardware profile lookup.
Gwenole Beauchesne [Fri, 10 Jan 2014 16:02:44 +0000 (17:02 +0100)]
encoder: h264: fix hardware profile lookup.

Fix lookup for a suitable HW profile, as to be used by the underlying
hardware, based on heuristics that lead to characterize the SW profile,
i.e. the one used by the SW level encoding logic.

Also fix constraint_set0_flag (A.2.1) and constraint_set1_flag (A.2.2)
as they should respectively match the baseline and main profile.

4 years agoencoder: h264: support only the byte-stream format.
Gwenole Beauchesne [Fri, 10 Jan 2014 13:46:15 +0000 (14:46 +0100)]
encoder: h264: support only the byte-stream format.

The libgstvaapi core encoders are meant to support raw bitstreams only.
Henceforth, we are always producing a stream in "byte-stream" format.

However, the "codec-data" buffer which holds SPS and PPS headers is
always available. The "lengthSizeMinusOne" field is always set to 3
so that in-place "byte-stream" format to "avc" format conversion could
be performed.

4 years agoencoder: h264: clean-ups.
Gwenole Beauchesne [Fri, 10 Jan 2014 13:05:40 +0000 (14:05 +0100)]
encoder: h264: clean-ups.

Various clean-ups to improve consistency and readability: rename some
variables, drop unused macro definitions, drop initialization of vars
that are zero-initialized from the base class, drop un-necessary casts.

4 years agoencoder: mpeg2: fix hardware profile lookup.
Gwenole Beauchesne [Mon, 13 Jan 2014 16:11:15 +0000 (17:11 +0100)]
encoder: mpeg2: fix hardware profile lookup.

Fix lookup for a suitable HW profile, as to be used by the underlying
hardware, based on heuristics that lead to characterize the SW profile,
i.e. the one used by the SW level encoding logic.

4 years agoencoder: mpeg2: derive profile and level from active coding tools.
Gwenole Beauchesne [Mon, 13 Jan 2014 15:56:04 +0000 (16:56 +0100)]
encoder: mpeg2: derive profile and level from active coding tools.

Automatically derive the minimum profile and level to be used for
encoding, based on the activated coding tools. Improve lookup for
the best suitable level with the new MPEG-2 helper functions.

Also change the default profile to "simple" so that to ensure maximum
compatibility when the stream is decoded.