platform/upstream/gstreamer.git
7 years agoplugins: move src allocator error to instantiator
Víctor Manuel Jáquez Leal [Mon, 24 Oct 2016 18:09:59 +0000 (20:09 +0200)]
plugins: move src allocator error to instantiator

Just as we did in ensure_sinkpad_allocator(), let's move the error message
into the ensure_srcpad_allocator() from the caller,
gst_vaapi_plugin_base_decide_allocation()

7 years agoplugins: enable direct upload if raw video
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 17:37:01 +0000 (19:37 +0200)]
plugins: enable direct upload if raw video

Enable the direct upload with linear surfaces if the negotiated sink caps are
video/x-raw without features.

7 years agopluginutil: add gst_caps_is_video_raw()
Víctor Manuel Jáquez Leal [Fri, 21 Oct 2016 09:21:04 +0000 (11:21 +0200)]
pluginutil: add gst_caps_is_video_raw()

7 years agoplugins: receive caps in ensure_sinkpad_allocator()
Víctor Manuel Jáquez Leal [Mon, 24 Oct 2016 17:25:27 +0000 (19:25 +0200)]
plugins: receive caps in ensure_sinkpad_allocator()

Instead of receiving the GstVideoInfo structure as parameter, get the original
GstCaps from ensure_sinkpad_buffer_pool(), in this way we could decide better
which allocator instantiate.

7 years agovaapivideomemory: destroy derived image at unmap
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 17:31:58 +0000 (19:31 +0200)]
vaapivideomemory: destroy derived image at unmap

If the allocator was configured to use direct upload or rendering, the
generated derived image created at mapping needs to be destroyed after
unmapping, because, in order to process the surface, it should not be marked
as "busy" by the driver.

7 years agovaapivideomemory: enhance logs for direct modes
Víctor Manuel Jáquez Leal [Fri, 21 Oct 2016 09:57:55 +0000 (11:57 +0200)]
vaapivideomemory: enhance logs for direct modes

Print, conditionally, only the enabled direct mode.

7 years agovaapivideomemory: add direct upload flag
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 15:02:49 +0000 (17:02 +0200)]
vaapivideomemory: add direct upload flag

Adds the direct-upload flag in the GstVaapiVideoAllocator and
GstVaapiVideoMemory.

It still doesn't apply any functional change.

7 years agovaapivideomemory: set direct rendering at run-time
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 14:49:22 +0000 (16:49 +0200)]
vaapivideomemory: set direct rendering at run-time

The way to experiment with the direct rendering is through and internal
compiler pre-processor flag.

The current change set enables a way to specified at run-time, as a flag
passed to the allocator at instanciation time.

7 years agovaapivideomemory: log in perf category when copy
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 16:09:59 +0000 (18:09 +0200)]
vaapivideomemory: log in perf category when copy

Log in performance category when the derive image handling fails, falling back
to memory copy.

7 years agovaapivideomemory: error log is derive image fails
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 14:31:21 +0000 (16:31 +0200)]
vaapivideomemory: error log is derive image fails

Instead of a silently failure of the derive image, this patch log an error
message according to the failure.

7 years agovaapivideomemory: store surface alloc flags in qdata
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 10:52:18 +0000 (12:52 +0200)]
vaapivideomemory: store surface alloc flags in qdata

For sake of consistency, we should add the requested surface allocation flags
to the object's qdata structure.

7 years agovaapivideomemory: category init when object define
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 10:22:06 +0000 (12:22 +0200)]
vaapivideomemory: category init when object define

Move the Gstreamer debug category initialize to the GObject definition.

7 years agolibs: vaapitexturemap: trivial code-style fix
Víctor Manuel Jáquez Leal [Thu, 3 Nov 2016 07:31:16 +0000 (08:31 +0100)]
libs: vaapitexturemap: trivial code-style fix

7 years agolibs: display: egl: avoid recreate native display
Víctor Manuel Jáquez Leal [Wed, 2 Nov 2016 19:01:09 +0000 (20:01 +0100)]
libs: display: egl: avoid recreate native display

Instead of passing the native descriptor of the display, just pass the received
GstVaapiDisplay and reuse it.

7 years agoplugins: log the GstVaapiDisplay name
Víctor Manuel Jáquez Leal [Wed, 2 Nov 2016 14:38:52 +0000 (15:38 +0100)]
plugins: log the GstVaapiDisplay name

Now that GstVaapiDisplay is descendant of GstObject, it has a human-friendly
name. Log it instead of the memory address.

7 years agolibs: window: egl: pass native va display
Hyunjun Ko [Wed, 2 Nov 2016 09:37:00 +0000 (18:37 +0900)]
libs: window: egl: pass native va display

When creating a GstVaapiWindowEGL, it also creates native window by its own
native display. It should pass the native display, either X11 or Wayland.

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

7 years agolibs: display: GstVaapiDisplay as GstObject descendant
Hyunjun Ko [Thu, 13 Oct 2016 03:53:17 +0000 (12:53 +0900)]
libs: display: GstVaapiDisplay as GstObject descendant

This patch is to change the inheritance of GstVaapiDisplay to GstObject,
instead of GstVaapiMiniObject. In this way we can use all the available
infrastructure for GObject/GstObject such as GstTracer, GIR, etc.

In addition, a new debug category for GstVaapiDisplay is created to make it
easier to trace debug messages. It is named "vaapidisplay" and it transverse
all the VA display backends (DRM, GLX, EGL, Wayland, ...)

This patch is a step forward to expose GstVaapiDisplay for users in a future
library.

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

Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
7 years agoBack to development
Sebastian Dröge [Tue, 1 Nov 2016 16:54:54 +0000 (18:54 +0200)]
Back to development

7 years agoRelease 1.10.0
Sebastian Dröge [Tue, 1 Nov 2016 16:19:32 +0000 (18:19 +0200)]
Release 1.10.0

7 years agovaapidecodebin: resurrect disable-vpp property
Víctor Manuel Jáquez Leal [Thu, 27 Oct 2016 15:13:48 +0000 (17:13 +0200)]
vaapidecodebin: resurrect disable-vpp property

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

7 years agovaapidecodebin: name the internal queue
Víctor Manuel Jáquez Leal [Thu, 27 Oct 2016 14:32:23 +0000 (16:32 +0200)]
vaapidecodebin: name the internal queue

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

7 years agovaapidecodebin: remove unused variables
Víctor Manuel Jáquez Leal [Thu, 27 Oct 2016 14:27:45 +0000 (16:27 +0200)]
vaapidecodebin: remove unused variables

Since vaapipostproc is only registered if the driver supports it, all the
support for dynamic loading were removed. Though some leftovers remained.

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

7 years agodocs: document environment variables
Víctor Manuel Jáquez Leal [Thu, 27 Oct 2016 10:53:54 +0000 (12:53 +0200)]
docs: document environment variables

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

7 years agodocs: replace vaapidecode with each codec
Víctor Manuel Jáquez Leal [Thu, 27 Oct 2016 10:31:49 +0000 (12:31 +0200)]
docs: replace vaapidecode with each codec

In the spirit of the codec split, this patch removes the documentation of
vaapidecode and adds a page per each possible decoder.

Nonetheless, only those available in the compilation system are going to be
instrospected, because the rest are not registered.

7 years agodocs: add missing long descriptions
Víctor Manuel Jáquez Leal [Thu, 27 Oct 2016 09:06:06 +0000 (11:06 +0200)]
docs: add missing long descriptions

7 years agovaapipostproc: use GST_*_OBJECT when possible
Víctor Manuel Jáquez Leal [Tue, 25 Oct 2016 12:32:44 +0000 (14:32 +0200)]
vaapipostproc: use GST_*_OBJECT when possible

Since we can have several vaapipostproc operating in a pipeline, it is useful
to know which one is generating the logging message.

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

7 years agovaapidecode: rename member to allowed_sinkpad_caps
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 15:00:23 +0000 (17:00 +0200)]
vaapidecode: rename member to allowed_sinkpad_caps

vaapidecode has a member named allowed_caps, but this name is not enough
explicit. This patch renames allowed_caps to allowed_sinkpad_caps.

No functional changes were included.

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

7 years agoplugins: fix code style for errors
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 16:12:04 +0000 (18:12 +0200)]
plugins: fix code style for errors

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

7 years agovaapivideomemory: comment style
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 15:01:57 +0000 (17:01 +0200)]
vaapivideomemory: comment style

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

7 years agovaapivideomemory: rename input parameter
Víctor Manuel Jáquez Leal [Thu, 20 Oct 2016 09:19:50 +0000 (11:19 +0200)]
vaapivideomemory: rename input parameter

In order to clarify the use of flag as input parameter, it is renamed to
surface_alloc_flag, since it is used when creating a VA surface with certain
properties.

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

7 years agovaapidecode: rename element description
Víctor Manuel Jáquez Leal [Tue, 25 Oct 2016 17:22:03 +0000 (19:22 +0200)]
vaapidecode: rename element description

So encoders and decoders have similar descriptions.

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

7 years agovaapiencode: h264, h265: rename codec name
Víctor Manuel Jáquez Leal [Tue, 2 Aug 2016 09:32:19 +0000 (11:32 +0200)]
vaapiencode: h264, h265: rename codec name

So encoder and decoders have the same codec name.

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

7 years agoplugins: simplify code
Víctor Manuel Jáquez Leal [Fri, 29 Jul 2016 13:17:33 +0000 (15:17 +0200)]
plugins: simplify code

Merge two lines of variable declarations.

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

7 years agolibs: minor correction for logical consistency
Hyunjun Ko [Fri, 7 Oct 2016 09:46:22 +0000 (18:46 +0900)]
libs: minor correction for logical consistency

GstVaapiDecode is a descendant of GstVaapiMiniObject, so, thought we should
use its methods, even though it doesn't change functionality.

GstVaapiPixmap, GstVaapiTexture and GstVaapiWindow are descendant of
GstVaapiObject, hence its methods shall be used.

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

7 years agovaapivideomemory: add explanation about the call 'dup (dmabuf_fd)'
Julien Isorce [Wed, 19 Oct 2016 14:39:54 +0000 (15:39 +0100)]
vaapivideomemory: add explanation about the call 'dup (dmabuf_fd)'

In short GstFdMemory is configured to call close when using
GstDmabufMemory.

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

7 years agobuild: clean up the dlopen usage
Víctor Manuel Jáquez Leal [Fri, 2 Sep 2016 14:42:45 +0000 (16:42 +0200)]
build: clean up the dlopen usage

7 years agoencoder: h264,h265: fix regression in offset count
Víctor Manuel Jáquez Leal [Sat, 8 Oct 2016 12:33:59 +0000 (14:33 +0200)]
encoder: h264,h265: fix regression in offset count

In commit dc35dafa a bug was introduced because I assumed that
GST_CLOCK_TIME_NONE is zero when is -1. This patch fixes that mistake.

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

7 years agodocs: update README
Víctor Manuel Jáquez Leal [Tue, 18 Oct 2016 15:02:59 +0000 (17:02 +0200)]
docs: update README

7 years agolibs: display: egl: remove unused header include
Víctor Manuel Jáquez Leal [Tue, 27 Sep 2016 15:29:25 +0000 (17:29 +0200)]
libs: display: egl: remove unused header include

The header gmodule.h is not used since the library dynamic loading for EGL
display was removed.

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

8 years agoRelease 1.9.90
Sebastian Dröge [Fri, 30 Sep 2016 10:05:20 +0000 (13:05 +0300)]
Release 1.9.90

8 years agovaapi: use new gst_element_class_add_static_pad_template()
Vineeth TM [Fri, 4 Mar 2016 07:35:11 +0000 (16:35 +0900)]
vaapi: use new gst_element_class_add_static_pad_template()

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

Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
8 years agoplugins: reset textures at negotiation/shutdown
Hyunjun Ko [Thu, 22 Sep 2016 07:34:48 +0000 (16:34 +0900)]
plugins: reset textures at negotiation/shutdown

When caps reconfiguration is called, the new downstream frame size might be
different. Thus, if the downstream caps change,the display's texture map is
reset.

In addition, during pipeline shutdown, textures in texture map have to be
released, since each one have a reference to the GstVaapiDisplay object, which
is a dangerous circular reference.

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

Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
8 years agolibs: display{egl,glx}: cache GstVaapiTextures
Hyunjun Ko [Thu, 22 Sep 2016 07:34:38 +0000 (16:34 +0900)]
libs: display{egl,glx}: cache GstVaapiTextures

instances when created and reuse

This patch improves performance when glimagesink uploads a GL texture.

It caches the GStVaapiTexture instances in GstVaapiDisplay{GLX,EGL}, using an
instance of GstVaapiTextureMap, so our internal texture structure can be found
by matching the GL texture id for each frame upload process, avoiding the
internal texture structure creation and its following destruction.

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

Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
8 years agolibs: vaapitexturemap: implement GstVaapiTextureMap
Hyunjun Ko [Thu, 22 Sep 2016 07:33:06 +0000 (16:33 +0900)]
libs: vaapitexturemap: implement GstVaapiTextureMap

Implement GstVaapiTextureMap object, which caches VAAPI textures, so them can be
reused. Internally it is a hash table.

Note that it is GstObject based rather than GstVaapiObject, as part of the future
converstion to GstObject of most of the code.

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

Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
8 years agoencoder: vp8: Increase the allocation size for coded buffer
Sreerenj Balachandran [Wed, 21 Sep 2016 06:55:53 +0000 (09:55 +0300)]
encoder: vp8: Increase the allocation size for coded buffer

We are not getting enough compression for some streams and
encoded frame end up with more size than allocated.
Assuming a compression ratio of 4, which should be good enough
for holding the frames.

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

8 years agoencoder: vp9: Fix refresh frame flag setting
Sreerenj Balachandran [Wed, 21 Sep 2016 06:52:21 +0000 (09:52 +0300)]
encoder: vp9: Fix refresh frame flag setting

While doing the mode-1 referece picture selection,
the circular buffer logic was not correctly setting the
refresh frame flags as per VP9 spec.
Make sure refresh_flag[0] get updated correclty after
each cycle of GST_VP9_REF_FRAMES.

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

8 years agovaapidecode: codec_data minimal size is 7
Víctor Manuel Jáquez Leal [Wed, 14 Sep 2016 16:42:09 +0000 (18:42 +0200)]
vaapidecode: codec_data minimal size is 7

When the format of a H.264 stream is AVC3, the SPS and PPS are inside the
stream, not in the codec_data, so the size of codec_data might be 7.

This patch reduces the minimal size of the codec_data buffer from 8 to 7.

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

8 years agovaapidecode: reset decoder hard when set_format()
Víctor Manuel Jáquez Leal [Wed, 14 Sep 2016 14:29:01 +0000 (16:29 +0200)]
vaapidecode: reset decoder hard when set_format()

set_format() is called by upstream when the stream capabilites has changed.
Before, if the new stream is compatible with the old one the VA decoder was
not destroyed. Nonetheless, with this behavoir, the VA decoder ignores
when the upstreamer parsers gets more details of the stream, such as the
framerate. Hence, when the src caps are negotiates, the further sink caps
updates are ignored.

This patch forces the VA decoder destroying and recreation when set_format()
is called.

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

8 years agoconfigure: Depend on gstreamer 1.9.2.1
Sebastian Dröge [Wed, 14 Sep 2016 09:31:39 +0000 (11:31 +0200)]
configure: Depend on gstreamer 1.9.2.1

8 years agoRevert "vaapivideomemory: load VA Image when mapping to write"
Víctor Manuel Jáquez Leal [Fri, 9 Sep 2016 10:03:37 +0000 (12:03 +0200)]
Revert "vaapivideomemory: load VA Image when mapping to write"

This reverts commit c67edea4aba35f16d9e97c78a0b49ad1b590b112.

8 years agoAutomatic update of common submodule
Jan Schmidt [Sat, 10 Sep 2016 10:52:21 +0000 (20:52 +1000)]
Automatic update of common submodule

From b18d820 to f980fd9

8 years agoAutomatic update of common submodule
Jan Schmidt [Fri, 9 Sep 2016 23:58:25 +0000 (09:58 +1000)]
Automatic update of common submodule

From f49c55e to b18d820

8 years agoplugins: set allocator's image size to sinkpad bufferpool
Hyunjun Ko [Thu, 8 Sep 2016 07:16:09 +0000 (16:16 +0900)]
plugins: set allocator's image size to sinkpad bufferpool

Otherwise the buffer is always ditched by the bufferpool, losing performance.

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

8 years agolibs: surface: ensure composite overlay is not bigger
Víctor Manuel Jáquez Leal [Wed, 7 Sep 2016 15:34:08 +0000 (17:34 +0200)]
libs: surface: ensure composite overlay is not bigger

Ensure the composition overlay rectangle (subtitles) is not bigger than
the surface where it is going to be composited and rendered.

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

8 years agovaapivideomemory: load VA Image when mapping to write
Hyunjun Ko [Wed, 7 Sep 2016 08:51:23 +0000 (17:51 +0900)]
vaapivideomemory: load VA Image when mapping to write

When calling gst_video_frame_map() with GST_MAP_WRITE flag, it doesn't call
ensure_image_is_current(), which means it doesn't guarentee VAImage is valid
in this case.

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

8 years agovaapidecode: merge vc1 and wmv3 elements
Víctor Manuel Jáquez Leal [Tue, 6 Sep 2016 10:27:45 +0000 (12:27 +0200)]
vaapidecode: merge vc1 and wmv3 elements

This patch merges vaapivc1dec and vaapiwmv3dec into a single
vaapivc1dec. Also, removed the WMVA format, since it is not
supported by libva.

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

8 years agodecoder: vc1: fails only on advanced profile
Víctor Manuel Jáquez Leal [Tue, 6 Sep 2016 09:19:05 +0000 (11:19 +0200)]
decoder: vc1: fails only on advanced profile

In commit 2eb4394 the frame coding mode was verified for progressive
regardless the profile. But the FCM is only valid in the advanced
profile. This patch checks for the advanced profile before verifying FCM for
progressive.

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

8 years agovaapi: DISPLAY envvar as dependency
Víctor Manuel Jáquez Leal [Thu, 1 Sep 2016 10:39:15 +0000 (12:39 +0200)]
vaapi: DISPLAY envvar as dependency

In a multiple video cards system, a X11 environment may have different VA
capabilities. This patch tracks the DISPLAY environment variable to
invalidates the GStreamer features cache. Also tracks WAYLAND_DISPLAY.

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

8 years agodecoder: vc1: Fail only on actual interlaced frames
Scott D Phillips [Fri, 26 Aug 2016 21:55:17 +0000 (14:55 -0700)]
decoder: vc1: Fail only on actual interlaced frames

In the earlier patch:

 f31d9f3 decoder: vc1: Print error on interlaced content

Decoding would error out if the interlace flag was set in the
sequence bdu. This isn't quite right because a video can have this
flag set and yet not have any interlaced pictures.

Here instead we error out when either parsing a field bdu or
decoding a frame bdu which has fcm set to anything other than
progressive.

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

8 years agoBack to development
Sebastian Dröge [Thu, 1 Sep 2016 09:34:48 +0000 (12:34 +0300)]
Back to development

8 years agoRelease 1.9.2
Sebastian Dröge [Thu, 1 Sep 2016 09:34:38 +0000 (12:34 +0300)]
Release 1.9.2

8 years agodecoder: vc1: Print error on interlaced content
Scott D Phillips [Tue, 16 Aug 2016 08:58:38 +0000 (11:58 +0300)]
decoder: vc1: Print error on interlaced content

Interlaced video is as yet unsupported in the vc1 element. Print
an error to make that more obvious.

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

8 years agoencoder: h264: fix C90 mixed declarations and code
Víctor Manuel Jáquez Leal [Wed, 10 Aug 2016 11:29:45 +0000 (13:29 +0200)]
encoder: h264: fix C90 mixed declarations and code

Commit 4259d1a introduced this compilation error. This patch fixes it.

8 years agoencoder: h264,h265,mpeg2,vp8: use gst_util_uint64_scale() for bitrate
Víctor Manuel Jáquez Leal [Thu, 21 Jul 2016 15:38:40 +0000 (17:38 +0200)]
encoder: h264,h265,mpeg2,vp8: use gst_util_uint64_scale() for bitrate

Use gst_util_uint64_scale() to calculate bitrate instead of normal arithmetic
to avoid overflows, underflows and loss of precision.

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

8 years agovaapiencode: h264,h265: validate fps numerator
Víctor Manuel Jáquez Leal [Tue, 5 Jul 2016 18:07:15 +0000 (20:07 +0200)]
vaapiencode: h264,h265: validate fps numerator

Validate that fps numerator is non-zero so it can be used to calculate
the duration of the B frame.

Also it gst_util_uint64_scale() is used instead of normal arithmetic in
order to aviod overflows, underflows and loss of precision.

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

8 years agoencoders: demote to RANK_NONE since not fit for autoplugging yet
Tim-Philipp Müller [Sat, 6 Aug 2016 11:54:17 +0000 (12:54 +0100)]
encoders: demote to RANK_NONE since not fit for autoplugging yet

Encoders claim to support a whole bunch of input formats but then
just error out if the format is not actually supported, even if
there's a converter in front. This means they're not fit for
autoplugging in encodebin or camerabin yet and therefore should
not have a rank. People can still use them in custom pipelines.

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

8 years agoplugins: check dmabuf-import for sink pad allocator
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 17:24:08 +0000 (19:24 +0200)]
plugins: check dmabuf-import for sink pad allocator

Check earlier if upstream video source has activated the dmabuf-import
io-mode (hack to disappear soon), thus we can avoid the re-assignation of a
new allocator.

8 years agoplugins: reset allocators if video info changed
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 18:02:54 +0000 (20:02 +0200)]
plugins: reset allocators if video info changed

If the frame size or format, change, the allocators are reset, so a new ones
can be created with the new video info.

8 years agoplugins: remove sink pad allocator if caps change
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 17:27:27 +0000 (19:27 +0200)]
plugins: remove sink pad allocator if caps change

If the negotiated sinkpad caps change, destroy the assignated allocator,
because it is not valid anymore.

8 years agopluginutil: const params to gst_video_info_changed()
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 18:01:05 +0000 (20:01 +0200)]
pluginutil: const params to gst_video_info_changed()

Since they are not modified, we should mark them as const.

8 years agogstvaapivideomemory: allocator's image size getter
Víctor Manuel Jáquez Leal [Fri, 29 Jul 2016 13:13:29 +0000 (15:13 +0200)]
gstvaapivideomemory: allocator's image size getter

Add the method gst_allocator_get_vaapi_image_size() for the
GstVaapiVideoAllocator, which gets the size of the allocated images with the
current video info.

This method replaces the direct call to the allocator's image info when the
pool is configured.

8 years agoplugins: update buffer pool size with new allocator's image size
Hyunjun Ko [Fri, 29 Jul 2016 09:06:30 +0000 (18:06 +0900)]
plugins: update buffer pool size with new allocator's image size

Depends on media, video size is sometimes updated with new allocator.
It leads to dismatch between bufferpool's set size and real allocated buffer size.

In this case, it causes every buffer is freed during release in bufferpool,
which should be reused. This affects performance.

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

8 years agoconfigure: remove gmodule-2.0 EGL dependency
Víctor Manuel Jáquez Leal [Wed, 27 Jul 2016 17:49:59 +0000 (19:49 +0200)]
configure: remove gmodule-2.0 EGL dependency

Since commit 27429ce, EGL support doesn't depend on dynamic loading libraries,
thus the dependency to gmodule-2.0 is not mandatory anymore.

8 years agoconfigure: Fix non-fatal PKG_CHECK_MODULES invocations
Scott D Phillips [Wed, 27 Jul 2016 17:09:38 +0000 (10:09 -0700)]
configure: Fix non-fatal PKG_CHECK_MODULES invocations

Some invocations of PKG_CHECK_MODULES were intended to be non-fatal if
the package is missing, but action-if-not-found was given as an empty
string which still causes the default action to run, which halts
execution.

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

8 years agolibs: egl: remove dynamic library loading code
Víctor Manuel Jáquez Leal [Wed, 13 Jul 2016 16:34:57 +0000 (18:34 +0200)]
libs: egl: remove dynamic library loading code

Since the upstream of gstreamer-vaapi, the library is not a public shared
object anymore. But the EGL support depended on this dynamic library, so the
EGL support was broken.

This patch removes the dynamic library loading code and instantiates the
EGL display using either X11 or Wayland if available.

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

8 years agovaapidecode: register only the available decoders
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 21:47:41 +0000 (23:47 +0200)]
vaapidecode: register only the available decoders

In order to register only the available decoders, this patch queries the
created test VA display, which uses the currently used back-end (X11, Wayland,
DRM, …) on the used display device.

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

8 years agovaapi: register only the available encoders
Víctor Manuel Jáquez Leal [Tue, 28 Jun 2016 09:43:15 +0000 (11:43 +0200)]
vaapi: register only the available encoders

In order to register only the available encoders, this patch queries the
created test VA display, which uses the currently used back-end (X11,
Wayland, DRM, …) on the used display device.

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

8 years agovaapidecode: split all the codecs
Víctor Manuel Jáquez Leal [Tue, 7 Jun 2016 14:28:07 +0000 (16:28 +0200)]
vaapidecode: split all the codecs

Split the vaapidecode to all the supported codecs with the format
vaapi{codec}dec.

vaapidecode is stil registered as a GObject type, but not as a
GStreamer feature, so it can be used internally by vaapidecodebin without
changing its code too much.

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

8 years agovaapidecodebin: simplify the code
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 20:19:37 +0000 (22:19 +0200)]
vaapidecodebin: simplify the code

Since the elements dependant of the VA video processor are now only registered
if it is available, vaapidecodebin code can be simplified a lot, removing all
the code required to check if the VA video processor was available.

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

8 years agovaapidecode: delay the GstVaapiDisplay instantiating
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 15:54:26 +0000 (17:54 +0200)]
vaapidecode: delay the GstVaapiDisplay instantiating

Delay the GstVaapiDisplay instantiating until when changing the state from
READY to PAUSE. In this way the element has more chances to find an already
created GstVaapiDisplay, or a GL context, in the pipeline.

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

8 years agopluginutil: set GLX display type
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 15:49:50 +0000 (17:49 +0200)]
pluginutil: set GLX display type

The function gst_vaapi_create_display_from_gl_context() cretes a
GstVaapiDisplay given a GstGLContext. But it didn't created a GLX VA display
when the GL platform was GLX, but a plain X11 VA display.

This patch fixes that, by querying the GL platform earlier.

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

8 years agoplugins: add gst_vaapi_plugin_base_find_gl_context()
Víctor Manuel Jáquez Leal [Thu, 2 Jun 2016 17:57:08 +0000 (19:57 +0200)]
plugins: add gst_vaapi_plugin_base_find_gl_context()

Using the GstContext mechanism, it is possible to find if the pipeline
shares a GstGLContext, even if we are not to negotiating GLTextureUpload
meta. This is interesting because we could negotiate system memory caps
feature, but enable DMABuf if the GstGLContext is EGL with some extensions.

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

8 years agoplugins: remove gst_vaapi_plugin_base_driver_is_whitelisted()
Víctor Manuel Jáquez Leal [Tue, 28 Jun 2016 15:14:06 +0000 (17:14 +0200)]
plugins: remove gst_vaapi_plugin_base_driver_is_whitelisted()

Since nobody is calling gst_vaapi_plugin_base_driver_is_whitelisted(),
it is deleted.

8 years agoplugins: remove common change_state() vmethod
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 16:24:10 +0000 (18:24 +0200)]
plugins: remove common change_state() vmethod

Remove the common change_state() vmethod for all the plugins, since no one is
using it.

8 years agovaapidecode: remove change_state() vmethod
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 18:38:07 +0000 (20:38 +0200)]
vaapidecode: remove change_state() vmethod

Since the driver checkup is done at registering, there is no need to do it
when changing the element state from NULL to READY. This patch remove this
vmethod from vaapidecode.

8 years agovaapi: register vaapipostproc only if supported
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 18:29:12 +0000 (20:29 +0200)]
vaapi: register vaapipostproc only if supported

Query the GstVaapiDisplay to know if the driver supports video
postprocessing. If does, then register vaapipostproc and vaapidecodebin
elements.

This patch will simplify the design of vaapidecodebin.

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

8 years agovaapi: don't register if VA driver is unsupported
Víctor Manuel Jáquez Leal [Wed, 29 Jun 2016 10:36:26 +0000 (12:36 +0200)]
vaapi: don't register if VA driver is unsupported

Using the test VA display, the driver name is queried, and if it is not
white-listed, the plugin rejects to register any element.

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

8 years agoplugins: add gst_vaapi_driver_is_whitelisted()
Víctor Manuel Jáquez Leal [Tue, 28 Jun 2016 15:14:06 +0000 (17:14 +0200)]
plugins: add gst_vaapi_driver_is_whitelisted()

Move some of the logic in gst_vaapi_plugin_base_driver_is_whitelisted() to a
new function gst_vaapi_driver_is_whitelisted(), in this way, it can be used
when registering the plugin's feature set with the test VA display.

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

8 years agovaapi: instantiate a VA display when registering
Víctor Manuel Jáquez Leal [Tue, 12 Jul 2016 17:56:02 +0000 (19:56 +0200)]
vaapi: instantiate a VA display when registering

This patch tries to instantiate a GstVaapiDisplay when registering the plugin
features, if it fails, no gstreamer-vaapi element is registering.

The purpose of this patch is to avoid a situation where the user has
gstreamer-vaapi installed but their VA-API setup is not functional, which may
lead to unexpected behavior.

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

8 years agovaapi: declare external dependencies
Víctor Manuel Jáquez Leal [Tue, 28 Jun 2016 09:33:18 +0000 (11:33 +0200)]
vaapi: declare external dependencies

There are two main external dependencies that define the feature set of this
plugin: a) the kernel and b) the VA driver

This patch tracks both dependencies, if any of them change, GStreamer will
re-inspect the plugin.

The kernel is tracked through the device files /dev/dri/card*

The VA driver is tracked through the files VA_DRIVERS_PATH/*_drv_video.so,
where VA_DRIVERS_PATH is the one defined in libva package configuration. Also,
the environment variables LIBVA_DRIVERS_PATH and LIBVA_DRIVER_NAME are tracked
since they modify the driver lookup.

Additionally, the environment variable GST_VAAPI_ALL_DRIVERS is tracked too.

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

8 years agovaapidecode: remove unneeded initializations
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 14:02:27 +0000 (16:02 +0200)]
vaapidecode: remove unneeded initializations

GObject's memory is set to zero, so there is no need to initialize to zero or
NULL it's class variables.

8 years agoplugins: remove undefined macros
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 16:28:28 +0000 (18:28 +0200)]
plugins: remove undefined macros

8 years agoRevert "gstvaapisurface_drm: release image when done"
Víctor Manuel Jáquez Leal [Tue, 19 Jul 2016 15:43:28 +0000 (17:43 +0200)]
Revert "gstvaapisurface_drm: release image when done"

This reverts commit 1dbcc8a0e199f2da6a0ab8e949f13341916128a3  and commit
372a03a9e38acbf435eb80bf31d9a9844069e504.

While the dmabuf handle is exported, the derive image must exist, otherwise
the image's VA buffer is invalid, thus the dmabuf handle is never released,
leading into a file descriptors leak.

8 years agoencoder: h265: fix code-style
Víctor Manuel Jáquez Leal [Thu, 21 Jul 2016 15:38:17 +0000 (17:38 +0200)]
encoder: h265: fix code-style

8 years agovaapipostproc: update filters at color balance
Víctor Manuel Jáquez Leal [Fri, 22 Jul 2016 14:55:59 +0000 (16:55 +0200)]
vaapipostproc: update filters at color balance

This is a fix for a regression of previous commit, which updates the filters
only when the property is set, because it is also required to update the
filter when the color balance interface change its values.

8 years agovaapipostproc: make it enable/disable pass-through mode
Hyunjun Ko [Fri, 22 Jul 2016 03:10:23 +0000 (12:10 +0900)]
vaapipostproc: make it enable/disable pass-through mode

In case that sink caps and src caps are same, and no filtering parameter set,
pass-through mode is enabled.
If new filtering parameter is set during playback, it makes it reconfiguring,
so that pass-through mode is changed

In addition, updating filter is performed during reconfiguration, if needed.

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

8 years agovaapipostproc: checking and updating filter parameter only when it's set
Hyunjun Ko [Fri, 22 Jul 2016 02:51:26 +0000 (11:51 +0900)]
vaapipostproc: checking and updating filter parameter only when it's set

This patch is to avoid checking filter value at every frame.

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

8 years agodecoder: h265: handle the SEI NAL units included in codec_data
Allen Zhang [Thu, 21 Jul 2016 08:24:31 +0000 (11:24 +0300)]
decoder: h265: handle the SEI NAL units included in codec_data

The prefix/suffix SEI nal units can appear in codec_data too
which weren't handled before. Parse these SEI headers to
fix the segfault.

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

8 years agobuild: doc: do not redefine MAINTAINERCLEANFILES
Víctor Manuel Jáquez Leal [Fri, 15 Jul 2016 14:32:26 +0000 (16:32 +0200)]
build: doc: do not redefine MAINTAINERCLEANFILES

MAINTAINERCLEANFILES is defined in gtk-doc-plugins.mak, thus instead of
overload it, the files should be added.

8 years agoencoder: h264: Fix MVC encode while enabling dct8x8
Sreerenj Balachandran [Fri, 15 Jul 2016 11:41:27 +0000 (14:41 +0300)]
encoder: h264: Fix MVC encode while enabling dct8x8

Pack the transform_8x8_mode_flag and other necessary rbsp data
in packed_pps header for MVC encode.

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