platform/upstream/gstreamer.git
6 years agogl: win32: Add debug category in gstglcontext_wgl.c
Xavier Claessens [Wed, 25 May 2016 13:09:01 +0000 (09:09 -0400)]
gl: win32: Add debug category in gstglcontext_wgl.c

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

6 years agoglimagesink: support video rotation using transform matrix
Haihua Hu [Mon, 16 May 2016 12:02:28 +0000 (20:02 +0800)]
glimagesink: support video rotation using transform matrix

Add "rotate-method" to glimagesink and apply transform matrix
to vertex coordinate to control rotation.

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

6 years agoglvideomixer: fix race retrieving the GL context from the display
Matthew Waters [Tue, 24 May 2016 13:39:27 +0000 (23:39 +1000)]
glvideomixer: fix race retrieving the GL context from the display

_get_gl_context() can be called concurrently from either propose_allocation() or
decide_allocation().  If it so happens that this happens at the same time,
the check for whether we already had a GL context was outside the lock.  Inside
the lock and loop, the first thing that happens is that we unref the current GL
context (if valid) as if there was a conflict adding it to the display.  If the
timing was unlucky, subsequent use of the GL context would be referencing an
already unreffed GL context object resulting in a critical:

g_object_ref: assertion 'object->ref_count > 0' failed

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

6 years agogldisplay: add some debugging about retrieving GL contexts
Matthew Waters [Tue, 24 May 2016 13:38:22 +0000 (23:38 +1000)]
gldisplay: add some debugging about retrieving GL contexts

6 years agoeglimage: Re-add accidentially removed GST_DEFINE_MINI_OBJECT_TYPE()
Sebastian Dröge [Wed, 25 May 2016 07:01:38 +0000 (10:01 +0300)]
eglimage: Re-add accidentially removed GST_DEFINE_MINI_OBJECT_TYPE()

6 years agoeglimage: Ensure that the debug category is always initalized
Sebastian Dröge [Mon, 23 May 2016 17:11:17 +0000 (20:11 +0300)]
eglimage: Ensure that the debug category is always initalized

Before the initializer was only run if dmabuf support was used.

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

6 years agogltransformation: make the pivot-z property READWRITE
Arjen Veenhuizen [Tue, 24 May 2016 13:30:09 +0000 (23:30 +1000)]
gltransformation: make the pivot-z property READWRITE

Instead of just being READABLE.

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

6 years agogltestsrc: fix src_impl leak
Guillaume Desmottes [Mon, 23 May 2016 07:40:58 +0000 (10:40 +0300)]
gltestsrc: fix src_impl leak

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

6 years agog-i: pass compiler env to g-ir-scanner
Tim-Philipp Müller [Mon, 23 May 2016 23:55:11 +0000 (00:55 +0100)]
g-i: pass compiler env to g-ir-scanner

It's what introspection.mak does as well. Should
fix spurious build failures on gnome-continuous.

6 years agogltestsrc: fix shaders ref counting
Guillaume Desmottes [Thu, 19 May 2016 14:05:33 +0000 (17:05 +0300)]
gltestsrc: fix shaders ref counting

The gltestsrc element uses two shaders: color_shader and snow_shader.
Those are alternatively assigned to the SrcShader->shader pointer and
their reference was transferred to it. Only the SrcShader->shader was
unreffed (in _src_shader_deinit()) so only one shader was properly
freed, the other one was leaked.

Fixed this by giving an extra ref to SrcShader->shader and unreffing the
2 shaders in _src_smpte_free().

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

6 years agoglmosaic: fix shader leak
Guillaume Desmottes [Thu, 19 May 2016 13:55:31 +0000 (16:55 +0300)]
glmosaic: fix shader leak

gst_gl_mosaic_init_shader() is called twice with test_glmosaic so the
first shader was leaked.

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

6 years agogl: win32: Unparent internal window before destroying it
Xavier Claessens [Mon, 16 May 2016 21:11:53 +0000 (17:11 -0400)]
gl: win32: Unparent internal window before destroying it

For some reason DestroyWindow() deadlock if it's called from
parent window's KeyPress event.

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

6 years agogl: win32: Don't steal parent focus when creating internal window
Xavier Claessens [Mon, 16 May 2016 19:26:53 +0000 (15:26 -0400)]
gl: win32: Don't steal parent focus when creating internal window

This fix regression introduced by 0acc18c60f6f962cc6553f6047fdb64891bab544.

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

6 years agogldisplay: demote no platform display debug to info
Matthew Waters [Sun, 15 May 2016 10:14:41 +0000 (13:14 +0300)]
gldisplay: demote no platform display debug to info

Avoids confusing everyone with a warning that's not always fatal.

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

6 years agogltransformation: use the affine transformation meta if available downstream
Matthew Waters [Sat, 14 May 2016 13:32:06 +0000 (16:32 +0300)]
gltransformation: use the affine transformation meta if available downstream

We can avoid a render pass if downstream supports the affine transformation meta
and increase the performance of some pipelines involving gltransformation.

Implemented by checking for the affine transformation in the allocation query
from downstream and combining our matrix with that of upstream's (or creating
our own).

6 years agogl: take the affine transformation in NDC
Matthew Waters [Sat, 14 May 2016 13:27:26 +0000 (16:27 +0300)]
gl: take the affine transformation in NDC

Provide a function to get the affine matrix in the meta in terms of NDC
coordinates and use as a standard opengl matrix.

Also advertise support for the affine transformation meta in the allocation
query.

6 years agoglbasemixer: actually attempt to propose an allocation upstream
Matthew Waters [Sat, 14 May 2016 12:50:57 +0000 (15:50 +0300)]
glbasemixer: actually attempt to propose an allocation upstream

We were always failing the allocation query as a flag was never being set to
signal a successful negotiation.  Fix by setting the required flag on a
successful caps event from upstream.

6 years agogl/egl: replace gsteglimagememory with an EGLImage wrapper
Matthew Waters [Wed, 4 May 2016 02:17:59 +0000 (12:17 +1000)]
gl/egl: replace gsteglimagememory with an EGLImage wrapper

That can be passed to GstGLMemoryEGL.

This also ports the dmabuf uploader to GstEGLImage and GstGLMemoryEGL.

6 years agogl: implement GstGLMemoryEGL
Gwang Yoon Hwang [Thu, 21 Jan 2016 13:18:17 +0000 (22:18 +0900)]
gl: implement GstGLMemoryEGL

Because current GstEGLImageMemory does not inherit GstGLMemory, GLUpload
allocates additional GLMemory and upload the decoded contents from the decoder
which uses EGLImage (e.g. gst-omx in RPi).

This work adds GstGLMemoryEGL to avoid this overhead. Decoders allocate
GstGLMemoryEGL and decode its contents to the EGLImage of GstGLMemoryEGL.  And
GLUpload uses this memory without allocation of additional textures and blit
operations.

[Matthew Waters]: gst-indent the sources and fix a critical retreiving the egl
display from the memory.

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

6 years agoglmemory: add wrapped data pointers to setup_buffer
Matthew Waters [Tue, 3 May 2016 15:16:51 +0000 (01:16 +1000)]
glmemory: add wrapped data pointers to setup_buffer

Allows creating wrapped memories with GstGLAllocationParams.

The wrapped pointers will be set in the parameters before being passed
to the memory allocation function.

6 years agoglbasememory: take a pointer as the wrapped gpu handle
Matthew Waters [Tue, 3 May 2016 14:19:44 +0000 (00:19 +1000)]
glbasememory: take a pointer as the wrapped gpu handle

Allows passing arbitrary data to wrap the the specific memory implementation
which is required for some memory implementations.

6 years agogl: fix gles3 header usage for older platforms
Matthew Waters [Tue, 3 May 2016 09:58:00 +0000 (19:58 +1000)]
gl: fix gles3 header usage for older platforms

Some platforms provide an old version of GLES2/gl2.h and GLES2/gl2ext.h that
will fail when including GLES3/gl3.h due to missing typedef's.

Seen on the RPi.

6 years agogl: enable gldeinterlace on OpenGL ES
Haihua Hu [Fri, 8 Apr 2016 08:47:15 +0000 (16:47 +0800)]
gl: enable gldeinterlace on OpenGL ES

1.Porting the exist deinterlace shader and OpenGL callback
  to be compatible with OpenGL ES.
2.Add a our blur vertical shader to gldeinterlace.
3.Add a property named “method” to let user choose which
  deinterlace function to use. Default to choose blur vertical
  method for better performance.

[Matthew Waters]: fix name of greedyh in method property (was greedhy) and port
to git master.

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

6 years agoglviewconvert: Port more things to GLES/GL 3 compatibility
Sebastian Dröge [Tue, 19 Apr 2016 16:43:03 +0000 (19:43 +0300)]
glviewconvert: Port more things to GLES/GL 3 compatibility

And move the shader mangling code into a single place instead of having a copy
in glcolorconvert and glviewconvert.

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

6 years agoglcolorconvert: GLES3 deprecates texture2D() and it does not work at all in newer...
Sebastian Dröge [Tue, 19 Apr 2016 16:27:33 +0000 (19:27 +0300)]
glcolorconvert: GLES3 deprecates texture2D() and it does not work at all in newer versions than 3.3

Use the newer texture() function instead. This fixes glimagesink and other
things on various Android devices.

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

6 years agogl: caopengllayersink: fix a minor warning
Hyunjun Ko [Wed, 20 Apr 2016 07:19:55 +0000 (16:19 +0900)]
gl: caopengllayersink: fix a minor warning

Fix "unused variable" warning

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

6 years agogl/cocoa: Fix incompatible type warning
Hyunjun Ko [Wed, 20 Apr 2016 07:00:36 +0000 (16:00 +0900)]
gl/cocoa: Fix incompatible type warning

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

6 years agoglimagesink: Fix indentation
Sebastian Dröge [Tue, 19 Apr 2016 06:30:39 +0000 (09:30 +0300)]
glimagesink: Fix indentation

6 years agoglimagesink: need to clean window_id when state change form READY to NULL
Haihua Hu [Tue, 19 Apr 2016 02:51:14 +0000 (10:51 +0800)]
glimagesink: need to clean window_id when state change form READY to NULL

When application change pipeline state NULL->READY and then READY->NULL,
glimagesink will not clear glsink->window_id. After that, when application
change state NULL->READY, the new_window_id is equal to window_id, glimagesink
will not set window handle. It will use the internal window but not the window
create by application.

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

6 years agogl/caopengllayersink: Actually unset caps_change flag after resize
Heinrich Fink [Sun, 17 Apr 2016 14:45:41 +0000 (15:45 +0100)]
gl/caopengllayersink: Actually unset caps_change flag after resize

Otherwise, the sink would execute "on_resize" for each frame.

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

6 years agogl/caopengllayer: Apply layer.contentsScale to viewport dims
Heinrich Fink [Sun, 17 Apr 2016 14:43:20 +0000 (15:43 +0100)]
gl/caopengllayer: Apply layer.contentsScale to viewport dims

Fixes blurry content on HiDPI screens

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

6 years agogl/cocoa/eagl: don't leak GThread's when dispatching messages
Matthew Waters [Tue, 12 Apr 2016 14:43:18 +0000 (00:43 +1000)]
gl/cocoa/eagl: don't leak GThread's when dispatching messages

gst_gl_context_get_thread() returns a refed pointer, we need to unref it.

6 years agogltestsrc: don't dereference null pointer
Luis de Bethencourt [Tue, 12 Apr 2016 10:14:22 +0000 (11:14 +0100)]
gltestsrc: don't dereference null pointer

funcs can be NULL, it is one of the two conditions of the OR statement
above, so confirm it isn't before dereferencing with funcs->free.

CID 1358388

6 years agoglupload: keep the parent buffer around when converting EGLImage to 2D textures
Matthew Waters [Wed, 6 Apr 2016 04:15:40 +0000 (04:15 +0000)]
glupload: keep the parent buffer around when converting EGLImage to 2D textures

e.g. receiving and releasing a buffer from OMX too early will potentially
cause textures to be overwritten while/before they are displayed.

6 years agoglbasemixer: chain up to the parent implementation
Matthew Waters [Mon, 11 Apr 2016 16:43:45 +0000 (16:43 +0000)]
glbasemixer: chain up to the parent implementation

6 years agolibgstgl: cocoa, eagl: use libdispatch to schedule GL calls
Alessandro Decina [Sun, 10 Apr 2016 22:34:00 +0000 (08:34 +1000)]
libgstgl: cocoa, eagl: use libdispatch to schedule GL calls

Use libdispatch instead of GMainLoop to dispatch GL calls. libdispatch is more
optimized and cuts a lot of poll()/pthread_* overhead.

6 years agoglwindow: reduce the number of GMutexes and GConds in send_message()
Alessandro Decina [Sun, 10 Apr 2016 22:02:45 +0000 (08:02 +1000)]
glwindow: reduce the number of GMutexes and GConds in send_message()

Don't create many short lived locks/conds in gst_gl_window_send_message. This is
a micro optimization to save a bunch of pthread_* calls which are expensive on
OSX/iOS and possibly other platforms.

6 years agovideoaggregator: repect the result of find_best_format in the default update_caps
Matthew Waters [Mon, 4 Apr 2016 10:55:51 +0000 (20:55 +1000)]
videoaggregator: repect the result of find_best_format in the default update_caps

We weren't using the result of find_best_format at all.

Also, move the find_best_format usage to the default update_caps() to make
sure that it is also overridable.

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

6 years agoglvideomixer: add support for the affine transformation meta
Matthew Waters [Wed, 23 Mar 2016 03:16:11 +0000 (03:16 +0000)]
glvideomixer: add support for the affine transformation meta

6 years agoglimagesink: support the affine transformation meta for any texture target
Matthew Waters [Wed, 23 Mar 2016 03:14:40 +0000 (03:14 +0000)]
glimagesink: support the affine transformation meta for any texture target

6 years agoglmixer: set the current texture to 0 before mapping
Matthew Waters [Tue, 5 Apr 2016 06:22:49 +0000 (16:22 +1000)]
glmixer: set the current texture to 0 before mapping

If we fail mapping, we don't want to use undefined video data in the subclass.

6 years agoglmixerbin: proxy the start-time-* properties from aggregator
Matthew Waters [Mon, 4 Apr 2016 03:43:30 +0000 (13:43 +1000)]
glmixerbin: proxy the start-time-* properties from aggregator

6 years agoeglimage: perform eglCreateImage in the gl thread
Matthew Waters [Tue, 22 Mar 2016 07:19:03 +0000 (07:19 +0000)]
eglimage: perform eglCreateImage in the gl thread

while calling eglCreateImage without a GL context current in the executing
thread works on the RPi, some other implementations will return errors.

Marshall the eglCreateImage to the GL thread to appease these implementations.

6 years agoglviewconvert: support outputting to multiple draw buffers on GLES3
Matthew Waters [Fri, 1 Apr 2016 03:58:56 +0000 (14:58 +1100)]
glviewconvert: support outputting to multiple draw buffers on GLES3

A similar change that was done to glcolorconvert adding the necessary shader
mangling.

6 years agoglcolorconvert: implement multiple render targets for GLES3
Matthew Waters [Thu, 31 Mar 2016 08:50:28 +0000 (19:50 +1100)]
glcolorconvert: implement multiple render targets for GLES3

There are numerous slight differences required between Desktop GL and GLES3 for
multiple render targets.

1. gl_FragData doesn't exist at all and one is required to use
   'layout (location = ?) out ...' instead.
2. gl_FragColor doesn't exist, same as 1
3. texture2D() has been deprecated

Fortunately most of these have been taken care of with GL3 and the shader
mangling already exists so just expand the conditions they are used in.  The
gl_FragData issue requires a new mangle pass though.  We also use this new
pass on desktop GL for consistency.

6 years agogl/build: add missing '\' at the end of the line in MakeFile.am
Matthew Waters [Thu, 31 Mar 2016 13:23:25 +0000 (00:23 +1100)]
gl/build: add missing '\' at the end of the line in MakeFile.am

Otherwise the following elements aren't included in the correct variable.

Fixes error in 'make distcheck' failing to find gstgltestsrc.h

6 years agoglcolorconvert: don't use the predefined variable name sample
Matthew Waters [Thu, 31 Mar 2016 09:00:37 +0000 (20:00 +1100)]
glcolorconvert: don't use the predefined variable name sample

Using 'sample' as a variable name is an error in GLES3

6 years agogl/examples: fix switchvideooverlay for wayland
Matthew Waters [Tue, 22 Mar 2016 12:10:24 +0000 (23:10 +1100)]
gl/examples: fix switchvideooverlay for wayland

and call XInitThreads() for X11

6 years agogl/examples: remove duplicated videooverlay example
Matthew Waters [Mon, 21 Mar 2016 04:25:21 +0000 (15:25 +1100)]
gl/examples: remove duplicated videooverlay example

filtervideooverlay proved the exact same example (only with a extra glfiltercube).

6 years agogl/examples/3d: additions for wayland support
Matthew Waters [Mon, 21 Mar 2016 04:23:41 +0000 (15:23 +1100)]
gl/examples/3d: additions for wayland support

6 years agogldifferencematte: port to gl3/gles2
Matthew Waters [Thu, 17 Mar 2016 12:50:00 +0000 (23:50 +1100)]
gldifferencematte: port to gl3/gles2

6 years agogltestsrc: port to gles2/gl3
Matthew Waters [Fri, 26 Feb 2016 09:55:47 +0000 (20:55 +1100)]
gltestsrc: port to gles2/gl3

This makes gltestsrc work everywhere \o/

- workaround RPi returning invalid values for positive coords in the
  checker shader
- reduce the number of iterations in the mandelbrot shader for gles2

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

6 years agogltestsrc: port smpte pattern to shaders
Matthew Waters [Fri, 26 Feb 2016 05:57:47 +0000 (16:57 +1100)]
gltestsrc: port smpte pattern to shaders

Loosely based on patch by
Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>

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

6 years agogltestsrc: implement the circular method
Matthew Waters [Fri, 26 Feb 2016 01:02:15 +0000 (12:02 +1100)]
gltestsrc: implement the circular method

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

6 years agogltestsrc: add a generic src framework
Matthew Waters [Thu, 25 Feb 2016 10:18:31 +0000 (21:18 +1100)]
gltestsrc: add a generic src framework

Any unsupported pattern (circular) results in an error

6 years agoglsterosplit: remove internal glupload/glcolorconvert
Matthew Waters [Mon, 29 Feb 2016 09:15:24 +0000 (20:15 +1100)]
glsterosplit: remove internal glupload/glcolorconvert

They are provided separately as elements and no other element contains the
internal references to glupload/glcolorconvert.

6 years agogl: add support for building against GLES3 headers
Matthew Waters [Thu, 31 Mar 2016 08:43:04 +0000 (19:43 +1100)]
gl: add support for building against GLES3 headers

with a fallback to GLES2 headers if available.

6 years agoglmemory: add checking the read implementation format/type on gles2 platforms
Matthew Waters [Thu, 31 Mar 2016 08:38:12 +0000 (19:38 +1100)]
glmemory: add checking the read implementation format/type on gles2 platforms

By default, reading GL_RED or GL_RG us unsupported by glReadPixels unless
exposed through GL_COLOR_READ_IMPLEMENTATION_FORMAT/TYPE.  This allows
downloading multiple-planar video frames where possible.

6 years agoglbasememory: rollback map state when subclass map fails
Matthew Waters [Thu, 31 Mar 2016 08:35:09 +0000 (19:35 +1100)]
glbasememory: rollback map state when subclass map fails

Otherwise our state doesn't reflect reality.

6 years agoglmemorypbo: unmap pbo memory on pbo read error
Matthew Waters [Thu, 31 Mar 2016 08:31:00 +0000 (19:31 +1100)]
glmemorypbo: unmap pbo memory on pbo read error

Otherwise we are returning failure with a dangling map!

Also only unset the NEED_DOWNLOAD flag in download_transfer() if the read actually
succeeds.

6 years agoglshader: add glBindFragDataLocation
Matthew Waters [Thu, 31 Mar 2016 08:25:32 +0000 (19:25 +1100)]
glshader: add glBindFragDataLocation

There are some cases where it's needed for binding in/out variables in shaders.
e.g. glsl 150 (gl 3.2) doesn't support the 'layout (location = ?)' specifiers in
the shader source so we have to bind them ourselves.

6 years agobad: use new gst_element_class_add_static_pad_template()
Vineeth TM [Fri, 4 Mar 2016 06:50:26 +0000 (15:50 +0900)]
bad: use new gst_element_class_add_static_pad_template()

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

6 years agogl/gtk: Fix compiler warning in example
Sebastian Dröge [Thu, 24 Mar 2016 12:08:46 +0000 (14:08 +0200)]
gl/gtk: Fix compiler warning in example

fxtest.c: In function ‘main’:
fxtest.c:190:3: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
   GtkWidget *window;
   ^~~~~~~~~

6 years agogl/proto: sync operations are available on GLES 3.0
Matthew Waters [Tue, 22 Mar 2016 07:20:59 +0000 (07:20 +0000)]
gl/proto: sync operations are available on GLES 3.0

Without the GST_GL_API_GLES2 bit set, we will not even attempt to look
for the function pointers in the core library and will fallback to
glFlush/glFinish.

6 years agoglmemory: unset GL_UNPACK_ROW_LENGTH in opengl3
Matthew Waters [Thu, 17 Mar 2016 11:43:12 +0000 (22:43 +1100)]
glmemory: unset GL_UNPACK_ROW_LENGTH in opengl3

If the user uploads their own texture without setting the unpack length, then
then the result will have the appearance of stride mismanagement due to
an incorrect row length.

6 years agogl/examples/qt: restrict the GL API to opengl where needed
Matthew Waters [Thu, 17 Mar 2016 05:34:42 +0000 (16:34 +1100)]
gl/examples/qt: restrict the GL API to opengl where needed

Until the examples are ported to opengl3/gles2, they will not work with any
other GL api.

6 years agogl/examples/gtk: call XInitThreads
Matthew Waters [Thu, 17 Mar 2016 05:31:52 +0000 (16:31 +1100)]
gl/examples/gtk: call XInitThreads

Fixes some sporadic X11 threading assertions.

6 years agoglutils: remove custom code for setting caps features
Matthew Waters [Wed, 16 Mar 2016 16:06:05 +0000 (03:06 +1100)]
glutils: remove custom code for setting caps features

Just use gst_caps_set_features() instead.

6 years agoglfilter: only allow the same src/sink caps when we are in passthrough mode
Matthew Waters [Wed, 16 Mar 2016 14:52:00 +0000 (01:52 +1100)]
glfilter: only allow the same src/sink caps when we are in passthrough mode

If we are given caps with extra features (like the overlay composition
features), we can only deal with that when we are in passthrough mode.

Previously we were bailing entirely and not allowing passthrough filter elements
with things like textoverlay.

Fixes the following pipeline (assuming glfilter supports passthrough):
gl ! textoverlay ! glfilter ! ... ! glimagesinkelement

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

6 years agoglupload: deal with the ANY caps feature correctly
Matthew Waters [Wed, 16 Mar 2016 11:48:00 +0000 (22:48 +1100)]
glupload: deal with the ANY caps feature correctly

When transforming, xplode it out into the necessary caps features both
with and without the passthough features.

Fixes negotiation in the following class of pipelines:

gl ! textoverlay ! glupload ! glimagesinkelement

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

6 years agoglstereo{mix,split}: allow running on GLES 2/3
Matthew Waters [Wed, 16 Mar 2016 11:16:34 +0000 (22:16 +1100)]
glstereo{mix,split}: allow running on GLES 2/3

It's mostly supported for GLES 2.x, fully supported on GLES 3.x

6 years agogleffects; give each effect a unique long name and description
Matthew Waters [Thu, 10 Mar 2016 14:40:39 +0000 (01:40 +1100)]
gleffects; give each effect a unique long name and description

Gives applications that scrape the factory details more detailed and unique
details on the exact element.

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

6 years agoglshader: some compatibility changes for GL 1.4
Matthew Waters [Thu, 10 Mar 2016 06:46:05 +0000 (17:46 +1100)]
glshader: some compatibility changes for GL 1.4

GL 1.4 (with GL_ARB_shader_objects) doesn't have glIsProgram or glIsShader
equivalents.  As they are simply assertions, skip them when there isn't a
valid function pointer.

6 years agoglfilterapp: update for the use of shaders
Matthew Waters [Wed, 9 Mar 2016 13:29:41 +0000 (00:29 +1100)]
glfilterapp: update for the use of shaders

Fixes black output when placed in pipelines (using the default drawing).

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

6 years agoglfilter: retrieve the shader attributes from the GL thread
Matthew Waters [Wed, 9 Mar 2016 13:27:53 +0000 (00:27 +1100)]
glfilter: retrieve the shader attributes from the GL thread

Otherwise we will receive bogus values

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

6 years agogl/examples/cube*: choose opengl by default
Matthew Waters [Wed, 9 Mar 2016 13:24:48 +0000 (00:24 +1100)]
gl/examples/cube*: choose opengl by default

The examples don't work with any other GL API.

Also fix the yuv example to not translate the cube out of the clipping area.

6 years agogl/examples/fxtest: add needed glupload to the pipeline
Matthew Waters [Wed, 9 Mar 2016 13:23:14 +0000 (00:23 +1100)]
gl/examples/fxtest: add needed glupload to the pipeline

Fixes a negotiation failure in the example

6 years agoglimagesink: Fix window memory leak
Vineeth TM [Wed, 9 Mar 2016 02:58:43 +0000 (11:58 +0900)]
glimagesink: Fix window memory leak

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

6 years agoglvideomixer: signal continuation in reset
Matthew Waters [Mon, 7 Mar 2016 15:06:46 +0000 (02:06 +1100)]
glvideomixer: signal continuation in reset

We want to iterate over all the pads, not just the first one.  Fix by returning
TRUE in the GstAggregatorPadForeachFunc.

Removes a GST_IS_GL_CONTEXT() assertion on shutdown with >2 inputs
using gst-launch.

6 years agogldisplay: make readding the same context a no-op
Matthew Waters [Mon, 7 Mar 2016 13:35:22 +0000 (00:35 +1100)]
gldisplay: make readding the same context a no-op

With e38af2304427db908a16bbae0e60aa68be1ba5b5 returning the correct contexts,
gst_gl_display_add_context() was susceptible to causing infinte loops when
adding the same GstGLContext more than once.  Fix and add a test for
gst_gl_display_add_context().

Fixes glvideomixer gst-validate tests.

6 years agoRevert "libgstgl: cocoa, eagl: don't marshal GL calls to the context thread"
Sebastian Dröge [Mon, 7 Mar 2016 06:52:54 +0000 (08:52 +0200)]
Revert "libgstgl: cocoa, eagl: don't marshal GL calls to the context thread"

This reverts commit 797d6415dfd6e111efb2cab544958a67cbf22b17.

We're frozen for 1.8.0 release and this change might have bigger impact.

6 years agolibgstgl: cocoa, eagl: don't marshal GL calls to the context thread
Alessandro Decina [Mon, 7 Mar 2016 05:03:25 +0000 (16:03 +1100)]
libgstgl: cocoa, eagl: don't marshal GL calls to the context thread

Execute GL calls without marshalling them to the context thread. In the cocoa
and eagl backends calling gst_gl_context_activate is cheap and therefore calling
it on the current thread and serializing GL calls with a per-context lock is
more efficient (faster and has less overhead) than marshalling everything to the
context thread.

This optimization cuts a large overhead in g_poll (continuously waking up the
context thread) and in g_mutex_*/g_cond_* (waiting for results from the context
thread).

6 years agogldisplay: really retrieve glcontext for a specific thread
Mark Nauwelaerts [Sat, 5 Mar 2016 16:16:24 +0000 (17:16 +0100)]
gldisplay: really retrieve glcontext for a specific thread

When requesting a glcontext (regardless of thread), the result was correct.
However, when requesting current glcontext on a specific thread, it could
come up with a glcontext active on another thread.

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

6 years agogl: misc docs fixes/additions
Matthew Waters [Sun, 6 Mar 2016 08:35:38 +0000 (19:35 +1100)]
gl: misc docs fixes/additions

6 years agogl*memory: document new functionality and objects
Matthew Waters [Sun, 6 Mar 2016 08:32:21 +0000 (19:32 +1100)]
gl*memory: document new functionality and objects

6 years agoglfilter: handle some more unfixed fields when fixating caps
Mark Nauwelaerts [Sat, 5 Mar 2016 18:48:45 +0000 (19:48 +0100)]
glfilter: handle some more unfixed fields when fixating caps

6 years agoglbasememory: Don't change maxsize at run-time
Nicolas Dufresne [Fri, 4 Mar 2016 00:45:43 +0000 (19:45 -0500)]
glbasememory: Don't change maxsize at run-time

Maxsize is initialized once and should never change. Allocating data
should have no impact on the selected max size for this memory. This
causing memory map failure as the maxsize would become smaller then
size. This happened when using direct rendering in avviddec on GL that
does not support PBO transfer.

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

6 years agoeglimagememory: add compatibility definitions for EGL dmabuf
Matthew Waters [Wed, 17 Feb 2016 09:13:21 +0000 (20:13 +1100)]
eglimagememory: add compatibility definitions for EGL dmabuf

e.g. the RPi doesn't have them defined

6 years agoglcontext: add a method to add a context to another share group
Matthew Waters [Thu, 25 Feb 2016 21:34:11 +0000 (08:34 +1100)]
glcontext: add a method to add a context to another share group

Intended for use with wrapped contexts that are created shared with gst's
gl contexts in order to manage the internal sharegroup state correctly.

e.g. with caopengllayer (which is used in glimagesink and caopengllayersink
on OS X), we create a CGL context from the gst context and the sharing state
was not being correctly set on either GL context and gst_gl_context_is_shared()
was always returning FALSE.

With 11fb4fff80b63b9d67a731d4bb238b6c0a29d774 only flushing with multiple
shared contexts, the required flush was not occuring causing screen
corruption or stuttering.

Note: this didn't affect GST_GL_API=opengl pipelines

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

6 years agoglmixer: iterator didn't advance in continue statement
Wang Xin-yu (王昕宇) [Wed, 24 Feb 2016 02:45:17 +0000 (10:45 +0800)]
glmixer: iterator didn't advance in continue statement

Leading to a deadlock.

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

6 years agogl: fix the build
Matthew Waters [Mon, 22 Feb 2016 10:03:14 +0000 (21:03 +1100)]
gl: fix the build

2d287812 was incomplete

6 years agogl: error out if the configured GL API is unsupported by our element
Matthew Waters [Mon, 22 Feb 2016 09:49:52 +0000 (20:49 +1100)]
gl: error out if the configured GL API is unsupported by our element

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

6 years agouninstalled.pc: add support for non libtool build systems
Julien Isorce [Thu, 18 Feb 2016 14:32:23 +0000 (14:32 +0000)]
uninstalled.pc: add support for non libtool build systems

Currently the .la path is provided which requires to use libtool as
mentioned in the GStreamer manual section-helloworld-compilerun.html.
It is fine as long as the application is built using libtool.

So currently it is not possible to compile a GStreamer application
within gst-uninstalled with CMake or other build system different
than autotools.

This patch allows to do the following in gst-uninstalled env:
gcc test.c -o test $(pkg-config --cflags --libs gstreamer-1.0 \
    gstreamer-gl-1.0)
Previously it required to prepend libtool --mode=link

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

6 years agogldebug: make sure debug is initialized when calling gst_gl_insert_debug_marker
Julien Isorce [Thu, 18 Feb 2016 16:21:38 +0000 (16:21 +0000)]
gldebug: make sure debug is initialized when calling gst_gl_insert_debug_marker

Usually gl debug is initialized in gst_gl_context_create_thread.
But this function is not used when using the GstGLContextGPUProcess
from ChromiumGStreamerBackend.

Received signal 11 SEGV_MAPERR 000000000000
gst_debug_category_get_threshold
gst_gl_insert_debug_marker
gst_gl_base_filter_gl_start

6 years agogl: Fix compiler warning about unused const variable with gcc 6
Sebastian Dröge [Thu, 18 Feb 2016 08:33:20 +0000 (10:33 +0200)]
gl: Fix compiler warning about unused const variable with gcc 6

  CC       libgstgl_x11_la-gstglcontext_glx.lo
In file included from gstglcontext_glx.c:39:0:
../utils/opengl_versions.h:52:43: error: ‘gles2_versions’ defined but not used [-Werror=unused-const-variable]
 static const struct { int major, minor; } gles2_versions[] = {
                                           ^~~~~~~~~~~~~~

6 years agogl: Move private headers from SOURCES to noinst_HEADERS
Sebastian Dröge [Thu, 18 Feb 2016 08:29:21 +0000 (10:29 +0200)]
gl: Move private headers from SOURCES to noinst_HEADERS

6 years agoglfilter: insert the debug marker from the GL thread
Matthew Waters [Wed, 17 Feb 2016 02:00:46 +0000 (13:00 +1100)]
glfilter: insert the debug marker from the GL thread

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

6 years agoglimagesink: remove unsed reconfigure variable
Matthew Waters [Wed, 17 Feb 2016 00:42:23 +0000 (11:42 +1100)]
glimagesink: remove unsed reconfigure variable

6 years agoglimagesink: don't push a reconfigure event from the GL thread
Matthew Waters [Wed, 13 Jan 2016 02:17:56 +0000 (13:17 +1100)]
glimagesink: don't push a reconfigure event from the GL thread

Doing so may cause deadlocks when other elements attempt destroy or created
GL resources.

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

6 years agoglvideomixer: don't leak pad's vertex buffer on release_pad
Wang Xin-yu (王昕宇) [Thu, 21 Jan 2016 02:40:36 +0000 (10:40 +0800)]
glvideomixer: don't leak pad's vertex buffer on release_pad

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