platform/upstream/gstreamer.git
8 years agoencoder: h264: Use high profile by default
Scott D Phillips [Wed, 22 Jun 2016 21:28:44 +0000 (14:28 -0700)]
encoder: h264: Use high profile by default

Change defaults for max-bframes, cabac, and dct8x8 to be enabled
by default. This will cause the default profile to be high instead
of baseline. In most situations this is the right decision, and
the profile can still be lowered in the case of caps restrictions.

Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com>
https://bugzilla.gnome.org/show_bug.cgi?id=757941

8 years agovaapidecodebin: element warning if missing element
Víctor Manuel Jáquez Leal [Wed, 22 Jun 2016 10:15:29 +0000 (12:15 +0200)]
vaapidecodebin: element warning if missing element

Raise an element warning if a required element is not available, thus the
pipeline will post a warning message and the application will be informed.

8 years agodecoder: h265: fix to release all dpb pictures
Hyunjun Ko [Wed, 22 Jun 2016 12:11:56 +0000 (15:11 +0300)]
decoder: h265: fix to release all dpb pictures

Without this, all dpb pictures are not released during flush,
because we used the global dpb_count variable for checking the
dpb fullness which get decremented in dpb_remove_index()
routine during each loop iteration.

https://bugzilla.gnome.org/show_bug.cgi?id=767934

8 years agoAutomatic update of common submodule
Nicolas Dufresne [Tue, 21 Jun 2016 15:48:54 +0000 (11:48 -0400)]
Automatic update of common submodule

From ac2f647 to f363b32

8 years agovaapi: fix minor leaks
Hyunjun Ko [Mon, 20 Jun 2016 10:53:26 +0000 (19:53 +0900)]
vaapi: fix minor leaks

https://bugzilla.gnome.org/show_bug.cgi?id=767868

8 years agovaapi: remove an already included header
Víctor Manuel Jáquez Leal [Fri, 17 Jun 2016 15:00:03 +0000 (17:00 +0200)]
vaapi: remove an already included header

gst/gst.h is already included in gstcompat.h

8 years agovaapidecodebin: add vp9 in sink pad template
Víctor Manuel Jáquez Leal [Fri, 17 Jun 2016 14:53:26 +0000 (16:53 +0200)]
vaapidecodebin: add vp9 in sink pad template

8 years agovaapisink: return caps template if no display
Víctor Manuel Jáquez Leal [Wed, 15 Jun 2016 18:19:27 +0000 (20:19 +0200)]
vaapisink: return caps template if no display

If vaapisink received a caps query before getting a VA display, it returned
only the surfaces related caps. This behavior broke the autovideosink
negotiation.

This patch returns the pad's template caps if no VA display, otherwise the
caps are crafted as before.

https://bugzilla.gnome.org/show_bug.cgi?id=767699

8 years agodecoder: vp9: Update comment about context resets
Scott D Phillips [Wed, 15 Jun 2016 18:25:23 +0000 (11:25 -0700)]
decoder: vp9: Update comment about context resets

Clarify that vaapi context resets are never needed for vp9, but
that ensure_context() needs called when the size increases so that
new surfaces can be allocated.

Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com>
https://bugzilla.gnome.org/show_bug.cgi?id=767474

8 years agogstvaapicontext: control reset_on_resize with option
Scott D Phillips [Tue, 17 May 2016 22:34:23 +0000 (15:34 -0700)]
gstvaapicontext: control reset_on_resize with option

Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com>
https://bugzilla.gnome.org/show_bug.cgi?id=767474

8 years agovaapivideobufferpool: add video meta to config when needed
Scott D Phillips [Tue, 14 Jun 2016 16:45:22 +0000 (09:45 -0700)]
vaapivideobufferpool: add video meta to config when needed

In cases where we know the video meta must be present, add it to
the pool configuration.

Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com>
https://bugzilla.gnome.org/show_bug.cgi?id=766184

8 years agoplugins: retry pool config
Scott D Phillips [Mon, 13 Jun 2016 17:48:41 +0000 (10:48 -0700)]
plugins: retry pool config

if gst_buffer_pool_set_config returns FALSE, check the modified
config and retry set_config if the config is still acceptable.

Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com>
https://bugzilla.gnome.org/show_bug.cgi?id=766184

8 years agovaapivideomemory: internal attributes to methods
Víctor Manuel Jáquez Leal [Wed, 8 Jun 2016 16:42:43 +0000 (18:42 +0200)]
vaapivideomemory: internal attributes to methods

Mark as internal the functions used by VA-API dmabuf allocator.

8 years agoplugins: remove precondition for decide_allocation()
Víctor Manuel Jáquez Leal [Thu, 2 Jun 2016 13:41:22 +0000 (15:41 +0200)]
plugins: remove precondition for decide_allocation()

There's no need to check for the display in the plugin object when
decide_allocation() vmethod is called, because the display will created or
re-created along the method execution.

8 years agoplugins: avoid possible memory leaks
Víctor Manuel Jáquez Leal [Wed, 8 Jun 2016 16:44:34 +0000 (18:44 +0200)]
plugins: avoid possible memory leaks

Get the pool config just before use it, to avoid a memory leak if the
allocator cannot be instantiated. Similarly, return FALSE if the configuration
cannot be set, avoid keep a not used allocator in the pool.

8 years agoplugins: use GstParentBufferMeta
Víctor Manuel Jáquez Leal [Tue, 31 May 2016 09:52:57 +0000 (11:52 +0200)]
plugins: use GstParentBufferMeta

Instead of using the VASurface proxy's notify, which is internal gstvaapi API,
use the GStreamer's GstParentBufferMeta.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agoplugins: cache VASurfaces from dmabufs
Víctor Manuel Jáquez Leal [Tue, 31 May 2016 06:26:33 +0000 (08:26 +0200)]
plugins: cache VASurfaces from dmabufs

This patch avoids the creation of a VASurface each time a new input buffer is
processed, caching them in the input buffer itself.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agolibs: change gst_vaapi_surface_new_with_dma_buf_handle()
Víctor Manuel Jáquez Leal [Mon, 30 May 2016 21:55:43 +0000 (23:55 +0200)]
libs: change gst_vaapi_surface_new_with_dma_buf_handle()

Instead of passing the data already in GstVideoInfo, let's just pass the
GstVideoInfo structure.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agoplugins: use an unique allocator per pad
Víctor Manuel Jáquez Leal [Wed, 25 May 2016 10:31:15 +0000 (12:31 +0200)]
plugins: use an unique allocator per pad

Instead of instantiating an allocator per vaapivideobufferpool, only one
allocator is instantiated per element's pad and shared among future pools.
If the pad's caps changes, the allocator is reset.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agovaapivideobufferpool: share options flag with pluginbase
Víctor Manuel Jáquez Leal [Wed, 25 May 2016 08:58:01 +0000 (10:58 +0200)]
vaapivideobufferpool: share options flag with pluginbase

Originally, vaapivideobufferpool has a set of boolean variables for the
buffer configuration options.

This pach changes these boolean variables for a single bitwise, just as
it is used in pluginbase. Hence, the internal enum was moved to
vaapivideobufferpool header.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agoplugins: add gst_vaapi_plugin_base_create_pool()
Víctor Manuel Jáquez Leal [Tue, 10 May 2016 13:57:06 +0000 (15:57 +0200)]
plugins: add gst_vaapi_plugin_base_create_pool()

This patch refactors the code in pluginbase in order to centralize the buffer
pool instantiation. As the buffer pool config may have different options, these
are gathered using a bitwise flag.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agopluginbase negotiates allocator with bufferpool
Víctor Manuel Jáquez Leal [Fri, 20 May 2016 16:46:14 +0000 (18:46 +0200)]
pluginbase negotiates allocator with bufferpool

Originally vaapivideobufferpool instantiates its own allocator regardless the
received configuration, and it relies in custom configuration options to
choose which kind of allocator instantiate.

This patch transfers the responsibility of the allocator instantiate to
vaapipluginbase and pass it to the vaapivideobufferpool through its
configuration.

* gst/vaapi/gstvaapipluginbase.c
  + set_dmabuf_allocator(): inserts a dmabuf allocator in the bufferpool
  + ensure_sinkpad_buffer_pool(): set a normal vaapi video allocator in
    bufferpool configuration
  + gst_vaapi_plugin_base_propose_allocation(): call set_dmabuf_allocator() if
    needed.
  + gst_vaapi_plugin_base_decide_allocation(): set a normal vaapi video
    allocator in bufferpool configuration
* gst/vaapi/gstvaapivideobufferpool.c
  + gst_vaapi_video_buffer_pool_set_config(): instead of instantiate the
    allocator, process the received one through its configuration.
* gst/vaapi/gstvaapivideobufferpool.h: removed
  GST_BUFFER_POOL_OPTION_DMABUF_MEMORY since it is not used anymore.
* gst/vaapi/gstvaapivideomemory.c
  + gst_vaapi_is_dmabuf_allocator(): new helper function to identify a dmabuf
    allocator with the vaapi qdata.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agovaapivideobufferpool: keep only current video info
Víctor Manuel Jáquez Leal [Fri, 20 May 2016 12:39:23 +0000 (14:39 +0200)]
vaapivideobufferpool: keep only current video info

Instead of keeping old and new GstVideoInfo video structure, we only keep one,
the current one, the negotiated. The old one is not needed at all.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agopluginutil: add gst_video_info_force_nv12_if_encoded()
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 13:38:07 +0000 (15:38 +0200)]
pluginutil: add gst_video_info_force_nv12_if_encoded()

This lines repeat a couple times in the code, so it would be better to put it
a helper function.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agopluginutil: add gst_video_info_changed() helper
Víctor Manuel Jáquez Leal [Fri, 20 May 2016 12:15:53 +0000 (14:15 +0200)]
pluginutil: add gst_video_info_changed() helper

This function is shared among different elements, so let factorized it.

https://bugzilla.gnome.org/show_bug.cgi?id=765435

8 years agovaapipostproc: Add colorimetry attributes to src caps
Hyunjun Ko [Wed, 8 Jun 2016 01:14:16 +0000 (10:14 +0900)]
vaapipostproc: Add colorimetry attributes to src caps

https://bugzilla.gnome.org/show_bug.cgi?id=766596

8 years agovaapidecode: remove chroma-site and colorimetry from src caps
Hyunjun Ko [Wed, 8 Jun 2016 01:17:46 +0000 (10:17 +0900)]
vaapidecode: remove chroma-site and colorimetry from src caps

https://bugzilla.gnome.org/show_bug.cgi?id=766596

8 years agovaapipostproc: add postproc_lock to protect data members
Scott D Phillips [Tue, 7 Jun 2016 21:19:50 +0000 (14:19 -0700)]
vaapipostproc: add postproc_lock to protect data members

Add a mutex to postproc to protect concurrent access to data members.
Previously set_caps() could release the allowed_srcpad_caps while
transform_caps was in the middle of using it.

Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com>
https://bugzilla.gnome.org/show_bug.cgi?id=766940

8 years agoencoder: vp9: Add simple algorithms for reference picture selection
Sreerenj Balachandran [Mon, 30 May 2016 08:30:40 +0000 (11:30 +0300)]
encoder: vp9: Add simple algorithms for reference picture selection

Added two modes(as properties) for reference picture selection:

ref-mode-0: AltRef and GoldRef pointing to the recent keyframe
and LastRef is pointing to the previous frame.

ref-mode-1: Previous frame (n) as LastRef , n-1 th frame as GoldRef
and n-2 th frame as AltRef

https://bugzilla.gnome.org/show_bug.cgi?id=766048

8 years agoencoder: vp9: Define Max frame width and height
Sreerenj Balachandran [Mon, 30 May 2016 08:25:52 +0000 (11:25 +0300)]
encoder: vp9: Define Max frame width and height

https://bugzilla.gnome.org/show_bug.cgi?id=766048

8 years agoencoder: vp9: Add more propertis for tuning encode quality
Sreerenj Balachandran [Mon, 30 May 2016 08:25:03 +0000 (11:25 +0300)]
encoder: vp9: Add more propertis for tuning encode quality

Added three tuning properties:
1: filter_level
2: sharpness_level
3: luma ac quant-table index

https://bugzilla.gnome.org/show_bug.cgi?id=766048

8 years agoAdd vp9 encode element to "vaapi" plugin
Sreerenj Balachandran [Mon, 30 May 2016 08:24:14 +0000 (11:24 +0300)]
Add vp9 encode element to "vaapi" plugin

https://bugzilla.gnome.org/show_bug.cgi?id=766048

8 years agoAdd vp9 encoder support in libgstvaapi
Sreerenj Balachandran [Mon, 30 May 2016 08:23:12 +0000 (11:23 +0300)]
Add vp9 encoder support in libgstvaapi

https://bugzilla.gnome.org/show_bug.cgi?id=766048

8 years agobuild: Add check for VP9 encode API support in libva
Sreerenj Balachandran [Mon, 30 May 2016 08:22:35 +0000 (11:22 +0300)]
build: Add check for VP9 encode API support in libva

https://bugzilla.gnome.org/show_bug.cgi?id=766048

8 years agogstvaapisurface_drm: fix internal documentation
Víctor Manuel Jáquez Leal [Thu, 26 May 2016 09:42:32 +0000 (11:42 +0200)]
gstvaapisurface_drm: fix internal documentation

8 years agogstvaapisurface_drm: fix code-style
Víctor Manuel Jáquez Leal [Thu, 26 May 2016 09:41:25 +0000 (11:41 +0200)]
gstvaapisurface_drm: fix code-style

8 years agoplugins: remove unused header
Víctor Manuel Jáquez Leal [Wed, 25 May 2016 10:28:48 +0000 (12:28 +0200)]
plugins: remove unused header

Remove the include of gst/allocators/allocators.h since it is not used.

8 years agovaapivideobufferpool: remove GL_TEXTURE_UPLOAD_META
Víctor Manuel Jáquez Leal [Wed, 25 May 2016 08:36:33 +0000 (10:36 +0200)]
vaapivideobufferpool: remove GL_TEXTURE_UPLOAD_META

Since gstreamer-vaapi is coupled with gstreamer releases, there is no need to
keep compatibility definition.

This patch removes the definition of
GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META since it is in
gst-plugins-base version 1.2.2

8 years agoplugins: add gst_vaapi_buffer_pool_caps_is_equal()
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 20:49:11 +0000 (22:49 +0200)]
plugins: add gst_vaapi_buffer_pool_caps_is_equal()

This is a helper function to improve the readability of
ensure_sinkpad_buffer_pool(). It makes clearer when the buffer pool needs to be
re-instantiated.

8 years agoplugins: deactivate buffer pool before unref
Víctor Manuel Jáquez Leal [Tue, 24 May 2016 14:29:33 +0000 (16:29 +0200)]
plugins: deactivate buffer pool before unref

This buffer pool may still be processing buffers when a caps renegotiation is
done. This one-liner patch deactivates the pool to drain it before it
de-allocation.

8 years agoplugins: no sinkpad bufferpool when decoder
Víctor Manuel Jáquez Leal [Tue, 24 May 2016 14:22:24 +0000 (16:22 +0200)]
plugins: no sinkpad bufferpool when decoder

Right now, the decoders create a buffer pool for their sink pad which is not
used at all, because the decoders have never proposed it to upstream.

This patch avoids the buffer pool instantiating when the element inherits from
the GstVideoDecoder class.

8 years agoplugins: avoid to get/set pool config twice
Víctor Manuel Jáquez Leal [Tue, 24 May 2016 11:39:25 +0000 (13:39 +0200)]
plugins: avoid to get/set pool config twice

This patch is a bit of optimization, since the bufferpool configuration is get
when the pool is created. Hence, we only need to request it when the pool from
the allocation query is reused.

8 years agoplugins: destroy pool earlier if non-vaapi
Víctor Manuel Jáquez Leal [Fri, 13 May 2016 11:14:23 +0000 (13:14 +0200)]
plugins: destroy pool earlier if non-vaapi

If the offered pool in decide_allocation() vmethod doesn't have the
VAAPI_VIDEO_META option, it is destroyed immediatly and the pointer cleared,
so it could be created later.

8 years agovaapivideobufferpool: split caps validation
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 20:30:04 +0000 (22:30 +0200)]
vaapivideobufferpool: split caps validation

When validating the caps from bufferpool config, this patch distinguishes the
error from no caps received (NULL) from the invalid caps (cannot be converted
into GstVideoInfo structure).

8 years agoplugins: check for caps in query earlier
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 20:21:15 +0000 (22:21 +0200)]
plugins: check for caps in query earlier

Check for caps as soon gst_query_parse_allocation() returns.

8 years agoplugins: remove unused variables
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 21:13:55 +0000 (23:13 +0200)]
plugins: remove unused variables

This variables stopped to be used since commit 001a5c63, which removed the
gstvaapiuploader.

8 years agoplugins: fix potential memleak from commit 9159328
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 16:47:46 +0000 (18:47 +0200)]
plugins: fix potential memleak from commit 9159328

If gst_video_info_from_caps() fails it is required to unref the instantiated
pool.

8 years agovaapipostproc: handle if gst_video_info_from_caps() fails
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 16:04:47 +0000 (18:04 +0200)]
vaapipostproc: handle if gst_video_info_from_caps() fails

Return FALSE is the received caps cannot be transformed into a GstVideoInfo
structure.

8 years agoplugins: handle if gst_video_info_from_caps() fails
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 15:55:35 +0000 (17:55 +0200)]
plugins: handle if gst_video_info_from_caps() fails

Let's play safe and return error if, somehow, the received caps are wrong.

8 years agoplugins: relate errors to instance
Víctor Manuel Jáquez Leal [Mon, 23 May 2016 15:47:36 +0000 (17:47 +0200)]
plugins: relate errors to instance

Use GST_{ERROR,WARNING}_OBJECT instead of GST_{ERROR,WARNING}, thus the logs
will show the name of the vaapipluginbase instance that failed.

Also, the code-style is fixed, where some error labels need to be surrounded
by braces.

8 years agoplugins: use GstVideoInfo accessors
Víctor Manuel Jáquez Leal [Fri, 20 May 2016 19:01:02 +0000 (21:01 +0200)]
plugins: use GstVideoInfo accessors

Instead of access to GstVideInfo members directly, use their accessors
macros. This patch makes more resistance to future changes in GStreamer core.

8 years agoremove spurious gst_video_info_init()
Víctor Manuel Jáquez Leal [Fri, 20 May 2016 17:33:39 +0000 (19:33 +0200)]
remove spurious gst_video_info_init()

gst_video_info_set_format() and gst_video_info_from_caps() call, internally,
gst_video_info_init(), hence it is not required to call it before them. This
patch removes these spurious calls.

8 years agovaapipluginbase: code-style: rename goto label
Víctor Manuel Jáquez Leal [Fri, 20 May 2016 17:15:11 +0000 (19:15 +0200)]
vaapipluginbase: code-style: rename goto label

The error labels have error_ prefix, but this one.

8 years agovaapivideomemory: use allocator custom alloc flag
Víctor Manuel Jáquez Leal [Thu, 19 May 2016 14:34:50 +0000 (16:34 +0200)]
vaapivideomemory: use allocator custom alloc flag

Instead of a dummy alloc() vmethod, the allocator instance set the flag
GST_ALLOCATOR_FLAG_CUSTOM_ALLOC, which is used by the framework to avoid call
gst_allocator_alloc() on the allocator.

8 years agovaapivideobufferpool: relate errors to instance
Víctor Manuel Jáquez Leal [Fri, 6 May 2016 11:17:47 +0000 (13:17 +0200)]
vaapivideobufferpool: relate errors to instance

Use GST_ERROR_OBJECT instead of GST_ERROR, thus the logs will show the name of
the vaapivideobufferpool instance that failed.

8 years agoplugins: remove gst_vaapi_plugin_base_set_pool_config()
Víctor Manuel Jáquez Leal [Tue, 10 May 2016 14:14:48 +0000 (16:14 +0200)]
plugins: remove gst_vaapi_plugin_base_set_pool_config()

This function helper make sense for GStreamer 1.2, but it is not helpful for
greater version since the validation is already done in the API implementation.
Thus, it is removed.

8 years agogstvaapipluginbase: Fix typo in doc
Sreerenj Balachandran [Wed, 18 May 2016 14:05:03 +0000 (17:05 +0300)]
gstvaapipluginbase: Fix typo in doc

8 years agoencoder : h264: Disable b-frame encode in low-power mode
Sreerenj Balachandran [Fri, 13 May 2016 08:45:20 +0000 (11:45 +0300)]
encoder : h264: Disable b-frame encode in low-power mode

This is a workaround since vaapi-intel-driver doesn't have
support for B-frame encode when utilizing low-power-enc
hardware block.

Fixme :We should query the VAConfigAttribEncMaxRefFrames
instead of blindly disabling b-frame support and set b/p frame count,
buffer pool size etc based on the query result.

https://bugzilla.gnome.org/show_bug.cgi?id=766050

8 years agoencoder: h264 : Use "tune=low-power" for enabling lowpower encode
Sreerenj Balachandran [Fri, 13 May 2016 08:44:57 +0000 (11:44 +0300)]
encoder: h264 : Use "tune=low-power" for enabling lowpower encode

Remove the duplicate property "low-power-enc" and use the
tune property for enabling low power encoding mode.

https://bugzilla.gnome.org/show_bug.cgi?id=766050

8 years agogstvaapiencoder:Use internal api to dervie configured VAEntrypoint
Sreerenj Balachandran [Wed, 11 May 2016 09:06:38 +0000 (12:06 +0300)]
gstvaapiencoder:Use internal api to dervie configured VAEntrypoint

https://bugzilla.gnome.org/show_bug.cgi?id=766050

8 years agoencoder: h264: Add support of low power/high performance encoding mode
Sreerenj Balachandran [Wed, 11 May 2016 09:05:36 +0000 (12:05 +0300)]
encoder: h264: Add support of low power/high performance encoding mode

Added a new property "low-power-enc" for enabling low power
encoding mode. Certain encoding tools may not be available
with the VAEntrypointEncSliceLP.

https://bugzilla.gnome.org/show_bug.cgi?id=766050

8 years agoAdd mapping for Macroblock level rate control (VA_RC_MB)
Sreerenj Balachandran [Wed, 11 May 2016 09:04:46 +0000 (12:04 +0300)]
Add mapping for Macroblock level rate control (VA_RC_MB)

8 years agogstvaapidisplay: Add VAEntrypointEncSliceLP support
Sreerenj Balachandran [Wed, 11 May 2016 09:03:08 +0000 (12:03 +0300)]
gstvaapidisplay: Add VAEntrypointEncSliceLP support

https://bugzilla.gnome.org/show_bug.cgi?id=766050

8 years agogstvaapiprofile : Add VAEntrypointEncSliceLP definitions
Sreerenj Balachandran [Wed, 11 May 2016 08:59:59 +0000 (11:59 +0300)]
gstvaapiprofile : Add VAEntrypointEncSliceLP definitions

This is for implementations that supports low_power/high_performance
variant for slice level encode.

https://bugzilla.gnome.org/show_bug.cgi?id=766050

8 years agovaapipostproc: negotiate frame size fixation
Víctor Manuel Jáquez Leal [Thu, 5 May 2016 16:23:10 +0000 (18:23 +0200)]
vaapipostproc: negotiate frame size fixation

Refactor _fixate_frame_size(). Now, instead of fixating the frame size only
using the sink caps, also it use the next capsfilter.

This code is a shameless copy of gst_video_scale_fixate_caps() from
https://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/gst/videoscale/gstvideoscale.c?id=1.8.1#n634

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: don't use GstVideoInfo for src caps
Scott D Phillips [Fri, 6 May 2016 08:50:10 +0000 (10:50 +0200)]
vaapipostproc: don't use GstVideoInfo for src caps

Instead of using gst_video_info_to_caps () to generated the fixed src caps,
this patch enables the first step for caps negotiation with a possible
following caps filter.

_get_preferred_caps() will traverse the possible src caps looking for the one
wit the preferred feature and the preferred color format. Then the color
format, the frame size and the frame rate are fixated.

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: move gst_vaapipostproc_fixate_srccaps()
Víctor Manuel Jáquez Leal [Thu, 5 May 2016 13:32:36 +0000 (15:32 +0200)]
vaapipostproc: move gst_vaapipostproc_fixate_srccaps()

Move gst_vaapipostproc_fixate_srccaps() to gstvaapiposptprocutil.

No functional changes.

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: simplify code
Víctor Manuel Jáquez Leal [Thu, 5 May 2016 13:19:02 +0000 (15:19 +0200)]
vaapipostproc: simplify code

Change a convoluted snippet to find the preferred color format in the peer
caps.

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: use othercaps for preferred caps
Víctor Manuel Jáquez Leal [Thu, 5 May 2016 13:16:02 +0000 (15:16 +0200)]
vaapipostproc: use othercaps for preferred caps

Instead of the allowed_srcpad_caps variable, this patch uses the othercaps
from fixate_caps() vmethod to find the preferred caps feature and color
format.

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: add fixate_caps() vmethod
Scott D Phillips [Thu, 5 May 2016 11:46:11 +0000 (13:46 +0200)]
vaapipostproc: add fixate_caps() vmethod

Instead of fixating the srcpad caps in transform_caps() vmethod, this patch
implements the fixate_caps() vmethod and moves code around.

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: set early properties restrictions
Víctor Manuel Jáquez Leal [Thu, 5 May 2016 10:07:59 +0000 (12:07 +0200)]
vaapipostproc: set early properties restrictions

When running transform_caps() vmethod, returning the srcpad caps, the caps are
early restricted to the element properties set: width, height, format and
force keep aspect.

A new file was added gstvaapipostprocutil.{c,h} where the utilities functions
are stored.

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: log the caps transformation
Víctor Manuel Jáquez Leal [Mon, 25 Apr 2016 11:45:04 +0000 (13:45 +0200)]
vaapipostproc: log the caps transformation

https://bugzilla.gnome.org/show_bug.cgi?id=758548

8 years agovaapipostproc: no GLTextureUpload in sinkpad
Víctor Manuel Jáquez Leal [Wed, 27 Apr 2016 19:20:32 +0000 (21:20 +0200)]
vaapipostproc: no GLTextureUpload in sinkpad

As the vaapipostproc does not process frames with the VideoGLTextureUpload
meta, the feature is removed from the sink pad template.

https://bugzilla.gnome.org/show_bug.cgi?id=765931

8 years agovaapibufferpool: do not create texture upload meta if dmabuf
Julien Isorce [Mon, 28 Sep 2015 07:49:39 +0000 (08:49 +0100)]
vaapibufferpool: do not create texture upload meta if dmabuf

https://bugzilla.gnome.org/show_bug.cgi?id=755072

8 years agobuild: update git.mk
Víctor Manuel Jáquez Leal [Fri, 6 May 2016 10:16:26 +0000 (12:16 +0200)]
build: update git.mk

8 years agoplugin: fix macro processor check
Víctor Manuel Jáquez Leal [Fri, 29 Apr 2016 11:11:48 +0000 (13:11 +0200)]
plugin: fix macro processor check

Instead of #ifdef it should be used #if becasuse USE_GST_GL_HELPERS is always
defined in config.h, but it would be 0 or 1 depending on the configure output.

https://bugzilla.gnome.org/show_bug.cgi?id=765702

8 years agotests: display: guard possible unused variables
Víctor Manuel Jáquez Leal [Fri, 29 Apr 2016 10:53:06 +0000 (12:53 +0200)]
tests: display: guard possible unused variables

https://bugzilla.gnome.org/show_bug.cgi?id=765702

8 years agotests: inforce gstreamer code-style
Víctor Manuel Jáquez Leal [Fri, 29 Apr 2016 10:48:44 +0000 (12:48 +0200)]
tests: inforce gstreamer code-style

8 years agoencoder: h265: Enable cu_qp_delta_enabled_flag for CBR
Sreerenj Balachandran [Wed, 27 Apr 2016 14:10:26 +0000 (17:10 +0300)]
encoder: h265: Enable cu_qp_delta_enabled_flag for CBR

It seems driver requires enablement of cu_qp_delta_enabled_flag
for modifying QP values to controll the CBR mode bitrate.

https://bugzilla.gnome.org/show_bug.cgi?id=749852

8 years agoencoder: h265: Add CBR Encoding support
Sreerenj Balachandran [Wed, 27 Apr 2016 14:06:09 +0000 (17:06 +0300)]
encoder: h265: Add CBR Encoding support

https://bugzilla.gnome.org/show_bug.cgi?id=749852

8 years agogstvaapisurface: explicitely clear TILING flag if dmabuf
Julien Isorce [Fri, 27 Nov 2015 05:09:10 +0000 (05:09 +0000)]
gstvaapisurface: explicitely clear TILING flag if dmabuf

https://bugzilla.gnome.org/show_bug.cgi?id=755072

8 years agogstvaapisurface_drm: release image when done
Julien Isorce [Sun, 4 Oct 2015 22:44:16 +0000 (23:44 +0100)]
gstvaapisurface_drm: release image when done

Otherwise intel-vaapi-driver will fail to process the exported surface because
it will find it is currently derived, so considered as busy.

https://bugzilla.gnome.org/show_bug.cgi?id=755072

8 years agovaapipostproc: already have a surface proxy if dmabuf
Julien Isorce [Sat, 26 Sep 2015 05:25:12 +0000 (06:25 +0100)]
vaapipostproc: already have a surface proxy if dmabuf

https://bugzilla.gnome.org/show_bug.cgi?id=755072

8 years agovarious gst-indent
Julien Isorce [Fri, 11 Mar 2016 08:58:51 +0000 (08:58 +0000)]
various gst-indent

8 years agovaapidecode: search driver in whitelist
Víctor Manuel Jáquez Leal [Thu, 21 Apr 2016 13:14:47 +0000 (15:14 +0200)]
vaapidecode: search driver in whitelist

If the backend driver vendor string is not in a white-list, and the
environment variable GST_VAAPI_ALL_DRIVERS is not set either, the decoder will
change it state from NULL to READY, hence the auto-plug mechanism will look
for another decoder.

This patch assumes the GstContext has already being shared along the pipeline
and the element has a valid GstVaapiDisplay instance.

https://bugzilla.gnome.org/show_bug.cgi?id=764673

8 years agoplugins: rework set_context() vmethod definition
Víctor Manuel Jáquez Leal [Thu, 21 Apr 2016 10:57:30 +0000 (12:57 +0200)]
plugins: rework set_context() vmethod definition

In bug 757598 was added the set_context() vmethod chain up in
GstVaapiPluginBase. But it is buggy, since the parent_class address is
assigned to the last element which called gst_vaapi_plugin_base_class_init().

No error has shown up since none of the element's base classes redefined
set_context() vmethod from GstElement, so always the correct function was
called. Still this code is wrong and this patch make it right.

Since set_context() is the same code, a macro is used to implement that code
in all the gst-vaapi elements.

https://bugzilla.gnome.org/show_bug.cgi?id=765368

8 years agovaapipostproc: resize if negotiated and allocation caps are different
Víctor Manuel Jáquez Leal [Fri, 15 Apr 2016 15:57:25 +0000 (17:57 +0200)]
vaapipostproc: resize if negotiated and allocation caps are different

Since commit 859a2b2, in vaapidecode, allocation query can be different from
the negotiated caps.

When connecting the vaapidecoder to the vaapipostprocessor, the last one will
resize the frame to the negotiated, if and only if, some other parameter is
activated to avoid the passthrough. If it is not, the surface won't be mapped
into a image. If not, the image won't be resized and the output buffer would be
mapped.

This patch will break the passthrough if the allocation query is different
from the negotiation caps, forcing the resizing.

https://bugzilla.gnome.org/show_bug.cgi?id=765095

8 years agovaapidecode: improve code readability
Víctor Manuel Jáquez Leal [Tue, 5 Apr 2016 11:09:37 +0000 (13:09 +0200)]
vaapidecode: improve code readability

No functional changes.

8 years agovaapidecode: move GstCapsFeatures near to its use
Víctor Manuel Jáquez Leal [Tue, 5 Apr 2016 11:37:40 +0000 (13:37 +0200)]
vaapidecode: move GstCapsFeatures near to its use

Move the handling of the GstCapsFeatures just after it is used, in order to
avoid handling its memory.

8 years agovaapidecode: caps negotiation checks
Víctor Manuel Jáquez Leal [Tue, 5 Apr 2016 11:07:14 +0000 (13:07 +0200)]
vaapidecode: caps negotiation checks

Check that GLUploadTexture is not negotatiated if gstreamer-vaapi is not
compiled with GL support.

8 years agoplugins: remove param in gst_vaapi_plugin_base_decide_allocation()
Víctor Manuel Jáquez Leal [Thu, 10 Mar 2016 15:43:16 +0000 (16:43 +0100)]
plugins: remove param in gst_vaapi_plugin_base_decide_allocation()

8 years agovaapidecode: bail early if not caps in decide_allocation()
Víctor Manuel Jáquez Leal [Thu, 10 Mar 2016 15:42:04 +0000 (16:42 +0100)]
vaapidecode: bail early if not caps in decide_allocation()

8 years agoplugin: use allowed caps filter from element
Víctor Manuel Jáquez Leal [Tue, 29 Mar 2016 12:17:54 +0000 (14:17 +0200)]
plugin: use allowed caps filter from element

Instead of using the srcpad template caps for filtering the peer caps, the
function gst_vaapi_find_preferred_caps_feature(), now receives a new parameter
for the element's allowed caps.

With this modification, the vaapipostproc element simplifies a bit its code.

https://bugzilla.gnome.org/show_bug.cgi?id=765223

8 years agoplugin: remove function parameter
Víctor Manuel Jáquez Leal [Mon, 18 Apr 2016 15:28:51 +0000 (17:28 +0200)]
plugin: remove function parameter

The native format parameter in gst_vaapi_find_preferred_caps_feature() can be
saved if the out format is used for both: in and out. Thus the code is more
readable.

https://bugzilla.gnome.org/show_bug.cgi?id=765223

8 years agovaapidecode: warns if driver will do color conversions
Víctor Manuel Jáquez Leal [Mon, 18 Apr 2016 15:17:58 +0000 (17:17 +0200)]
vaapidecode: warns if driver will do color conversions

If the downstream feature is system memory, the surface has to be mapped,
hence a warning message is logged saying that the driver has to do color
conversions. This might be troublesome because not all the color conversion
combinations are supported by the VA-API drivers, and there is not a reliable
way to know them before hand.

https://bugzilla.gnome.org/show_bug.cgi?id=765223

8 years agoplugin: honour negotiated format
Víctor Manuel Jáquez Leal [Tue, 29 Mar 2016 11:28:27 +0000 (13:28 +0200)]
plugin: honour negotiated format

Instead of setting the requested format by the caller, the function
gst_vaapi_find_preferred_caps_feature() now returns, in the output parameter,
the negotiated format.

A new helper function was added: gst_vaapi_find_preferred_format(), which,
given the format list from the negotiated caps, will choose the best one, if
possible, given the native format.

https://bugzilla.gnome.org/show_bug.cgi?id=765223

8 years agoplugin: simplify caps feature selection
Víctor Manuel Jáquez Leal [Mon, 28 Mar 2016 17:26:02 +0000 (19:26 +0200)]
plugin: simplify caps feature selection

This patch simplifies the function gst_vaapi_find_preferred_caps_feature().

Instead of intersecting custom caps to find the preferred feature, the peer
caps are traversed in order to find the preferred feature, according to an
ordered feature priority list.

In the case of GLTextureUploadMeta, the colour format is computed using
GstVideoInfo of the selected fixed caps.

https://bugzilla.gnome.org/show_bug.cgi?id=765223

8 years agovaapidecode: use macros for GstVideoInfo
Víctor Manuel Jáquez Leal [Thu, 31 Mar 2016 14:39:08 +0000 (16:39 +0200)]
vaapidecode: use macros for GstVideoInfo

Instead of accessing directly to the members of the structure, use the macros.

8 years agovaapidecode: refactor is_display_resolution_changed()
Víctor Manuel Jáquez Leal [Thu, 14 Apr 2016 15:02:23 +0000 (17:02 +0200)]
vaapidecode: refactor is_display_resolution_changed()

Make the comparisons more readable and simple.

https://bugzilla.gnome.org/show_bug.cgi?id=764316

8 years agovaapidecode: keep only display_{width,height}
Víctor Manuel Jáquez Leal [Thu, 14 Apr 2016 14:43:07 +0000 (16:43 +0200)]
vaapidecode: keep only display_{width,height}

Instead of keeping the structure GstVideoInfo when we are using its width and
height, we only keep these two guints.

https://bugzilla.gnome.org/show_bug.cgi?id=764316