platform/upstream/gstreamer.git
6 years agoglwindow: Fix g_return_val_if_fail in a void function
Jan Schmidt [Thu, 17 Sep 2015 11:31:39 +0000 (21:31 +1000)]
glwindow: Fix g_return_val_if_fail in a void function

6 years agoglimagesink: request a resize on caps/3d mode changes
Matthew Waters [Thu, 17 Sep 2015 07:22:47 +0000 (17:22 +1000)]
glimagesink: request a resize on caps/3d mode changes

Fixes incorrect aspect ratio on OSX when changing caps or the 3d
output mode.

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

6 years agoglwindow: add API to request a resize event on the next draw
Matthew Waters [Thu, 17 Sep 2015 07:06:37 +0000 (17:06 +1000)]
glwindow: add API to request a resize event on the next draw

- glimagesink needs to be able to resize the viewport on aspect ratio
  changes resulting from either caps changes or 3d output mode changes.
- Performing a glViewport outside the GstGLWindow::resize callback
  will not have the winsys' stack of viewports required to correctly
  place the output frame.

Provide a function to request a resize on the next draw event from the
winsys.

Also track size changes inside the base GstGLWindow class rather
than in each subclass.

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

6 years agogl/uploadelement: fail earlier if we could not upload the buffer
Matthew Waters [Thu, 17 Sep 2015 06:55:11 +0000 (16:55 +1000)]
gl/uploadelement: fail earlier if we could not upload the buffer

6 years agogl/x11: store the correct dimension from the resize events
Matthew Waters [Thu, 17 Sep 2015 06:05:21 +0000 (16:05 +1000)]
gl/x11: store the correct dimension from the resize events

small typo s/width/height/

6 years agogl: Fix GError leaks during failures
Vineeth T M [Thu, 17 Sep 2015 04:35:02 +0000 (13:35 +0900)]
gl: Fix GError leaks during failures

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

6 years agoglimagesink: avoid updating the viewport in the draw loop
Matthew Waters [Wed, 16 Sep 2015 07:28:05 +0000 (17:28 +1000)]
glimagesink: avoid updating the viewport in the draw loop

Fixes flashes/incorrect aspect ratio when resizing glimagesink on OSX.

6 years agogl: bufferpool take into account video stride alignment requirements
Tim-Philipp Müller [Tue, 15 Sep 2015 10:34:12 +0000 (11:34 +0100)]
gl: bufferpool take into account video stride alignment requirements

when allocating memory. Fixes crashes with avdec_h265 in the AVX2
code path which requires 32-byte stride alignment, but the
GstAllocationParams only specified a 16-byte alignment.

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

6 years agogl/api: use public rather than private define
Matthew Waters [Wed, 9 Sep 2015 13:53:57 +0000 (23:53 +1000)]
gl/api: use public rather than private define

HAVE_IOS is only defined for the build of this module so
attempting to use gstgl in iOS would result in incorrect GL
includes.
Use GST_GL_HAVE_PLATFORM_EAGL instead for choosing the iOS GL
header.

6 years agogl/eagl: Also unbind renderbuffer after setting up framebuffer
Sebastian Dröge [Wed, 9 Sep 2015 06:33:01 +0000 (09:33 +0300)]
gl/eagl: Also unbind renderbuffer after setting up framebuffer

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

6 years agogl/eagl: Don't make context uncurrent just to make it current again in the next line
Sebastian Dröge [Wed, 9 Sep 2015 06:27:17 +0000 (09:27 +0300)]
gl/eagl: Don't make context uncurrent just to make it current again in the next line

Also binding the framebuffer again is unnecessary then as it was just bound a
few lines before while the context was current.

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

6 years agogtk, qt, gl: fix typo in debug and error messages
Tim-Philipp Müller [Mon, 31 Aug 2015 17:06:31 +0000 (18:06 +0100)]
gtk, qt, gl: fix typo in debug and error messages

6 years agoglupload: Use base class metadata copy function
Nicolas Dufresne [Mon, 24 Aug 2015 23:47:01 +0000 (19:47 -0400)]
glupload: Use base class metadata copy function

This allow properly copying selected meta, like the composition
overlay. Note that output buffer need to be readable, but GlUpload
keeps a ref. For now, simply drop GlUpload ref after perform,
leaving that ref has no purpose. The method shall be removed
in the future.

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

6 years agoglcolorconvert: Use base transform metadata copy
Nicolas Dufresne [Mon, 24 Aug 2015 23:28:10 +0000 (19:28 -0400)]
glcolorconvert: Use base transform metadata copy

Use base class default method instead of only copying flags and
timestamp. This way, selected meta's like compostion overlay will
be passed downstream as expected.

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

6 years agogl/eagl: Unref context after setting a window handle
Sebastian Dröge [Tue, 25 Aug 2015 07:09:14 +0000 (10:09 +0300)]
gl/eagl: Unref context after setting a window handle

gst_gl_window_get_context() returns a new reference.

Hopefully fixes https://bugzilla.gnome.org/show_bug.cgi?id=753758

6 years agoglimagesink: update display size before sending event
Nicolas Dufresne [Fri, 21 Aug 2015 20:42:18 +0000 (13:42 -0700)]
glimagesink: update display size before sending event

This is minor issue, as the reconfigure event is asynchronous.
Basically, update width/height before sending the event.

6 years agogl: Let base transform relay the meta api for us
Nicolas Dufresne [Fri, 21 Aug 2015 00:27:34 +0000 (17:27 -0700)]
gl: Let base transform relay the meta api for us

During allocation query, when this element is not passthrough, it must
relay the overlay compostion meta and it's parameters. Fortunatly, base
transform can do this for us.

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

6 years agoglcontext: add specific error message when missing GL_SHADING_LANGUAGE_VERSION
Justin Kim [Fri, 21 Aug 2015 05:07:32 +0000 (14:07 +0900)]
glcontext: add specific error message when missing GL_SHADING_LANGUAGE_VERSION

GL_SHADING_LANGUAGE_VERSION was introduced since ES 2.0, but in some
android emulator doesn't support this feature. To prevent confusion for
developer, the error message need to be more clear.

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

6 years agocaopengllayersink: Don't chain up to parent's query handling twice for DRAIN query
hoonhee.lee [Fri, 21 Aug 2015 07:31:41 +0000 (16:31 +0900)]
caopengllayersink: Don't chain up to parent's query handling twice for DRAIN query

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

6 years agoglbasefilter: only call gl_{stop,start} if the context changed
Matthew Waters [Mon, 17 Aug 2015 16:35:58 +0000 (18:35 +0200)]
glbasefilter: only call gl_{stop,start} if the context changed

Removes the redundant GL object creation/deletion on every
decide_allocation call which is being called for every caps change.

Thus reduces the required GL state changes on reconfigure events
which are being sent by glimagesink/xvimagesink

6 years agoglupload: Recalculate offset and size in raw upload
Nicolas Dufresne [Sun, 16 Aug 2015 16:13:12 +0000 (18:13 +0200)]
glupload: Recalculate offset and size in raw upload

As we only expose the mapped portion of the frame into the GL
memory object (and not the original padding) we need to
re-calculate the size and offset.

6 years agochecks: Ensure thread-safe libX11/GL when running tests
Edward Hervey [Fri, 14 Aug 2015 10:25:19 +0000 (12:25 +0200)]
checks: Ensure thread-safe libX11/GL when running tests

6 years agogloverlaycompositor: Also disable the blend when done
Nicolas Dufresne [Sat, 15 Aug 2015 13:02:33 +0000 (15:02 +0200)]
gloverlaycompositor: Also disable the blend when done

6 years agoglsink: Enable sync meta on pools we offer
Nicolas Dufresne [Sat, 15 Aug 2015 12:31:15 +0000 (14:31 +0200)]
glsink: Enable sync meta on pools we offer

As the upload is asynchronous, we need to enable the sync meta to
gain correct rendering. The buffer pool receiver don't know about
that.

6 years agoglimagesink: Move overlay rendering after video rendering
Nicolas Dufresne [Fri, 14 Aug 2015 15:36:48 +0000 (17:36 +0200)]
glimagesink: Move overlay rendering after video rendering

This is mostly cosmetic, but heoretically it reduces the amount of
required object in the context at one point. It also avoids potential
conflicts.

6 years agoopengl: Change GLclampd to double
Sebastian Dröge [Sat, 15 Aug 2015 08:03:07 +0000 (10:03 +0200)]
opengl: Change GLclampd to double

GLclampd does not exist on GLES, only desktop GL.

6 years agoopengl: add missing ClearDepth prototype
Martin Kelly [Fri, 14 Aug 2015 17:32:14 +0000 (10:32 -0700)]
opengl: add missing ClearDepth prototype

The ClearDepth call is missing.

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

6 years agoglimagesink: take into account non 1/1 par for navigation
Matthew Waters [Tue, 11 Aug 2015 22:20:10 +0000 (00:20 +0200)]
glimagesink: take into account non 1/1 par for navigation

The current code was ignoring the par/dar aspect when transforming
from window coordinates to stream coordinates resulting in incorrect
coordinates being sent upstream in the navigation events.

6 years agogl: Add opengl_version.h to the list of sources
Nicolas Dufresne [Mon, 10 Aug 2015 18:48:58 +0000 (14:48 -0400)]
gl: Add opengl_version.h to the list of sources

Adding this private header to the list of sources. We don't want to make
this header public, but we need it in the list of sources otherwise it
won't be included in the tarball. This fixes make distcheck.

This regression was introduced by commit 1a6fe3db

6 years agogl: use gles2 shaders everywhere
Matthew Waters [Mon, 10 Aug 2015 14:38:32 +0000 (16:38 +0200)]
gl: use gles2 shaders everywhere

This effectively limits a glfilter subclass to be > GL(ES) 2.0.
rather than a possible GL 1.4.

6 years agoglcontext/wgl: implement gl3 core profile context selection
Matthew Waters [Mon, 10 Aug 2015 13:44:54 +0000 (15:44 +0200)]
glcontext/wgl: implement gl3 core profile context selection

6 years agogltransformation: implement pivot point for rotation and scale
Lubosz Sarnecki [Sat, 28 Feb 2015 00:07:44 +0000 (01:07 +0100)]
gltransformation: implement pivot point for rotation and scale

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

Add a pivot vector for setting the origin of rotations and scales.

With the pivot point the rotation and scale operations can have
different origins. This adds the ability to rotate around different points.
Currently the default (0, 0) pivot point is possible,
a rotation around the center, and zooming into and out of the center.

With an pivot point this is optional.
I defined the following image coordinates for the pivot point:

 (-1,1) ------------------------- (1,1)
| |
| |
| |
|   (0,0) |
| |
| |
| |
(-1,-1) ------------------------- (1,-1)

Example:

Rotate the video at the bottom left corner

gst-launch-1.0 videotestsrc \
! gltransformation \
  scale-x=0.5 \
scale-y=0.5 \
rotation-z=25.0 \
pivot-x=-1.0 \
pivot-y=-1.0 \
! glimagesink

The pivot-z option defines the pivot point in 3D space.
This only affects rotation, since we have no Z data to scale.
With this option a video can be rotated around a point in 3D space.

Example:

Rotate around point behind the video:

     gst-launch-1.0 videotestsrc \
! gltransformation \
rotation-x=10.0 \
pivot-z=-4.0 \
! glimagesink

6 years agogloverlaycompositor: Add shader to convert BGRA/ARGB -> RGBA
Nicolas Dufresne [Sat, 8 Aug 2015 18:45:42 +0000 (14:45 -0400)]
gloverlaycompositor: Add shader to convert BGRA/ARGB -> RGBA

Depending on the bytes order we will get BGRA (little) and ARGB (big)
from the composition overlay buffer while our GL code expects RGBA. Add
a fragment shader that do this conversion.

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

6 years agogl/syncmeta: implement synchronisation without glFenceSync
Matthew Waters [Sat, 8 Aug 2015 15:22:05 +0000 (17:22 +0200)]
gl/syncmeta: implement synchronisation without glFenceSync

Uses glFinish as that's the best we have for lesser OpenGL versions.

6 years agotests/glcontext: fix INVALID_ENUM GL error in test
Matthew Waters [Sat, 8 Aug 2015 13:30:43 +0000 (15:30 +0200)]
tests/glcontext: fix INVALID_ENUM GL error in test

6 years agocontext/glx: only use glXCreateContextAttribs for OpenGL 3 contexts
Matthew Waters [Sat, 8 Aug 2015 13:21:03 +0000 (15:21 +0200)]
context/glx: only use glXCreateContextAttribs for OpenGL 3 contexts

mesa for example when creating a GL 3.1 compatibility context
overrides our context profile selection to create a core context.

6 years agoglvideomixer: swap control binding proxy
Matthew Waters [Mon, 3 Aug 2015 09:48:16 +0000 (19:48 +1000)]
glvideomixer: swap control binding proxy

The ref_object and object parameters were the wrong way around.

For the typical use case where an application is setting a
GstControlBinding on the returned ghost pad:
1. our control binding would be removed when the new one was set
2. sync_values calls were not being forwarded from the internal
   pad to the ghost pad.

If an application attempts to perform other control binding
operations (get_* family of functions) on the internal pad, they
will also be forwarded to the ghost pad where a possible
GstControlBinding will provide the necessary values.

6 years agogstglfilterbin: remove unused variable
Luis de Bethencourt [Thu, 30 Jul 2015 10:12:21 +0000 (11:12 +0100)]
gstglfilterbin: remove unused variable

res is set multiple times but never used or returned. Removing it.

6 years agoglupload: Remove debug output from gst_gl_upload_transform_caps()
Sebastian Dröge [Wed, 29 Jul 2015 18:10:57 +0000 (19:10 +0100)]
glupload: Remove debug output from gst_gl_upload_transform_caps()

We can't know if the GstGLUpload type is initialized at this point already,
and thus our debug category might not be initialized yet... and cause an
assertion here.

As we don't print debug output for any of the other transform functions, let's
defer this problem for now.

6 years agoglstereomix: remove redundant initialization
Luis de Bethencourt [Wed, 29 Jul 2015 16:48:58 +0000 (17:48 +0100)]
glstereomix: remove redundant initialization

v is initialized in the for loop init, no need to do it twice. Removing
first initialization.

6 years agoglcolorconvert-test: Test notify function for setup_wrapped
Nicolas Dufresne [Tue, 28 Jul 2015 15:20:40 +0000 (11:20 -0400)]
glcolorconvert-test: Test notify function for setup_wrapped

gst_gl_memory_setup_wrapped() now takes a destroy notify function. This
destroy notify is called to track the memory life time, hence will
notify each time a memory get destroyed. This test check that the
callback count is correct.

6 years agoglcolorconvert-test: Fix build
Nicolas Dufresne [Tue, 28 Jul 2015 15:06:43 +0000 (11:06 -0400)]
glcolorconvert-test: Fix build

6 years agoglupload: Add fixme about using bufferpool for raw
Nicolas Dufresne [Tue, 28 Jul 2015 12:59:24 +0000 (08:59 -0400)]
glupload: Add fixme about using bufferpool for raw

http://bugzilla.gnome.org/show_bug.cgi?id=752937

6 years agoglupload: Keep input frame mapped as long as needed
Nicolas Dufresne [Mon, 27 Jul 2015 20:58:22 +0000 (16:58 -0400)]
glupload: Keep input frame mapped as long as needed

When performing a raw upload, we need to keep the raw data mapped as
long as needed.

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

6 years agoRevert "glupload: memcpy on raw data upload"
Nicolas Dufresne [Mon, 27 Jul 2015 19:58:10 +0000 (15:58 -0400)]
Revert "glupload: memcpy on raw data upload"

This reverts commit 82c0189b2842e8729e82a4e73491dffc977bc7c2.

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

6 years agoglcontext/wgl: fix defenition of gst_gl_context_wgl_new
Matthew Waters [Mon, 27 Jul 2015 11:54:27 +0000 (21:54 +1000)]
glcontext/wgl: fix defenition of gst_gl_context_wgl_new

gstglcontext_wgl.c: In function 'gst_gl_context_wgl_new':
gstglcontext_wgl.c:83:40: error: 'display' undeclared (first use in this function)

6 years agogl/cocoa: fix definition of gst_gl_context_new
Matthew Waters [Mon, 27 Jul 2015 10:03:05 +0000 (20:03 +1000)]
gl/cocoa: fix definition of gst_gl_context_new

gstglcontext_cocoa.m:75:1: error: conflicting types for 'gst_gl_context_cocoa_new'

6 years agogl/win32: fix definition of gst_gl_window_win32_new
Matthew Waters [Mon, 27 Jul 2015 10:00:47 +0000 (20:00 +1000)]
gl/win32: fix definition of gst_gl_window_win32_new

6 years agowayland: fail window open if the display is the correct type
Matthew Waters [Mon, 27 Jul 2015 08:21:19 +0000 (18:21 +1000)]
wayland: fail window open if the display is the correct type

Errors out cleanly if a wayland compositor is not running

6 years agoglwindow: pass display to implementation's _new()
Matthew Waters [Fri, 24 Jul 2015 07:00:27 +0000 (17:00 +1000)]
glwindow: pass display to implementation's _new()

So they have to opportunity to fail if they cannot handle the
display connection.

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

6 years agoglcontext: pass display to implentation's _new()
Matthew Waters [Fri, 24 Jul 2015 06:11:38 +0000 (16:11 +1000)]
glcontext: pass display to implentation's _new()

This allows the context to fail creation based on incompatible
display type's. e.g. glx context with an wayland display handle.

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

6 years agogl: support cgl, egl and glx within a same build
Julien Isorce [Sun, 5 Jul 2015 23:52:06 +0000 (00:52 +0100)]
gl: support cgl, egl and glx within a same build

On osx, with the same build,
gst-launch-1.0 videotestsrc ! glimagesink works with:

GST_GL_PLATFORM=egl GST_GL_WINDOW=x11 GST_GL_API=gles2
GST_GL_PLATFORM=egl GST_GL_WINDOW=x11 GST_GL_API=opengl

GST_GL_PLATFORM=glx GST_GL_WINDOW=x11 GST_GL_API=opengl

GST_GL_PLATFORM=cgl GST_GL_WINDOW=cocoa GST_GL_API=opengl
GST_GL_PLATFORM=cgl GST_GL_WINDOW=cocoa GST_GL_API=opengl3

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

6 years agoglupload: Check that caps contain desired caps features
Jan Schmidt [Mon, 27 Jul 2015 06:36:40 +0000 (16:36 +1000)]
glupload: Check that caps contain desired caps features

Use 'contains' checks instead of equality checks on caps features
to allow for uploading when caps also contain GstVideoOverlayComposition
meta.

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

6 years agogl: move GL_NUM_EXTENSIONS definition after gl.h
Julien Isorce [Sun, 5 Jul 2015 23:45:45 +0000 (00:45 +0100)]
gl: move GL_NUM_EXTENSIONS definition after gl.h

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

6 years agocaopengllayersink: remove unused label context_creation_error
Julien Isorce [Thu, 23 Jul 2015 22:59:22 +0000 (23:59 +0100)]
caopengllayersink: remove unused label context_creation_error

Build error introduced by commit
5457e55f255518d679b59a170951e299ecd8c5f6

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

6 years agoglimagesink: fix allocation meta structure leak
Tim-Philipp Müller [Thu, 23 Jul 2015 10:18:47 +0000 (11:18 +0100)]
glimagesink: fix allocation meta structure leak

gst_query_add_allocation_meta() does not take ownership
of the structure, for some reason.

CID 1312135

6 years agoglupload: fix memory leak
Luis de Bethencourt [Thu, 23 Jul 2015 09:57:26 +0000 (10:57 +0100)]
glupload: fix memory leak

GstCapsFeatures need to be freed with gst_caps_features_free() after use.

CID #1312136, CID #1312136

6 years agoglvideomixer: Add GstControlBinding proxy
Olivier Crête [Fri, 3 Jul 2015 00:10:50 +0000 (20:10 -0400)]
glvideomixer: Add GstControlBinding proxy

This is used to proxy GstControlBinding to the pad on the
parent object. This avoid having to sync the values in the proxy pad,
this is too early if you have a queue between the pad and the actual
aggregation operation.

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

6 years agoglupload: Forward composition meta even without params
Nicolas Dufresne [Wed, 22 Jul 2015 20:58:12 +0000 (16:58 -0400)]
glupload: Forward composition meta even without params

When the sink does not know the window size (e.g not created yet)
it will not add any param to the the composition meta. This is no
reason not to forward this meta API. Fixes issue where it could not
attach until we resize the window.

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

6 years agogloverlaycompositor: Keep memory pointer alive
Nicolas Dufresne [Wed, 22 Jul 2015 19:56:34 +0000 (15:56 -0400)]
gloverlaycompositor: Keep memory pointer alive

Keep the composition memory pointer alive while it's being
wrapped inside a GstGLMemory object.

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

6 years agogloverlaycompositor: Pass buffer stride
Nicolas Dufresne [Wed, 22 Jul 2015 18:17:42 +0000 (14:17 -0400)]
gloverlaycompositor: Pass buffer stride

The overlay pixel buffer stride was not given back
to the GL image.

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

6 years agogloverlaycompositor: Hide GstCompsitionOverlay object
Nicolas Dufresne [Wed, 22 Jul 2015 18:05:34 +0000 (14:05 -0400)]
gloverlaycompositor: Hide GstCompsitionOverlay object

This object is only used inside the compositor and does not
need to be expose in libgstgl API.

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

6 years agolibgstgl: Makefile style fix
Nicolas Dufresne [Wed, 22 Jul 2015 17:33:12 +0000 (13:33 -0400)]
libgstgl: Makefile style fix

6 years agocomposition-overlay: Positions are relative to texture
Nicolas Dufresne [Wed, 22 Jul 2015 03:48:25 +0000 (23:48 -0400)]
composition-overlay: Positions are relative to texture

The coordinate are relative to the texture dimension and not
the window dimension now. There is no need to pass the window
dimension or to update the overlay if the dimension changes.

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

6 years agogloverlaycompositor: Create own shader object
Lubosz Sarnecki [Wed, 22 Jul 2015 01:27:45 +0000 (21:27 -0400)]
gloverlaycompositor: Create own shader object

Make gloverlaycompositor independent of the shader used in the sink.

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

6 years agoglimagesink: Properly handle compsositor life time
Nicolas Dufresne [Tue, 21 Jul 2015 22:47:56 +0000 (18:47 -0400)]
glimagesink: Properly handle compsositor life time

Should be created in READY_TO_PAUSED, not PAUSED_TO_PLAYING.
Should be cleared in PAUSED_TO_READY.

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

6 years agocaopengllayersink: use gst_gl_display_create_context
Julien Isorce [Tue, 21 Jul 2015 10:28:08 +0000 (11:28 +0100)]
caopengllayersink: use gst_gl_display_create_context

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

6 years agoglstereosplit: use gst_gl_display_create_context
Julien Isorce [Tue, 21 Jul 2015 10:21:27 +0000 (11:21 +0100)]
glstereosplit: use gst_gl_display_create_context

Also unlock the lock on error.

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

6 years agogloverlaycompositor: for loop initial declarations are only allowed in C99 mode
Luis de Bethencourt [Tue, 21 Jul 2015 12:11:17 +0000 (13:11 +0100)]
gloverlaycompositor: for loop initial declarations are only allowed in C99 mode

Fixes compiler warnings

6 years agogl: use gst_gl_display_create_context in more elements.
Julien Isorce [Fri, 19 Jun 2015 10:57:06 +0000 (11:57 +0100)]
gl: use gst_gl_display_create_context in more elements.

glbasefilter, glbasemixer and gltestsrc.

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

6 years agogl/build: fix typo in _HEADERS resulting in installing the wrong file
Matthew Waters [Tue, 21 Jul 2015 07:34:27 +0000 (17:34 +1000)]
gl/build: fix typo in _HEADERS resulting in installing the wrong file

/usr/include/gstreamer-1.0/gst/gl/gl.h:51:43: fatal error:
    gst/gl/gstgloverlaycompositor.h: No such file or directory

6 years agoglcolorconvert: add RGB to NV12/NV21 conversion
Matthew Waters [Tue, 21 Jul 2015 05:39:35 +0000 (15:39 +1000)]
glcolorconvert: add RGB to NV12/NV21 conversion

6 years agoglimagesink: Send reconfigure event when window size changes
Lubosz Sarnecki [Wed, 1 Jul 2015 12:01:45 +0000 (14:01 +0200)]
glimagesink: Send reconfigure event when window size changes

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

6 years agoglimagesinkbin: Add allocation query for GstVideoOverlayComposition
Lubosz Sarnecki [Mon, 20 Jul 2015 18:24:22 +0000 (14:24 -0400)]
glimagesinkbin: Add allocation query for GstVideoOverlayComposition

Adds an GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE query to glupload
and glimagesink.  Detects the query from the downstream elements, so
it is executed only when downstream supports the overlay API.

This makes pipelines with textoverlay ! glupload ! gldownload ! xvimagesink possible.
Uses allocation meta struct for passing the window size upstream.

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

6 years agoglcolorconvert: Apply GstVideoOverlayCompositionMeta buffer to converted buffer
Lubosz Sarnecki [Mon, 20 Apr 2015 11:17:09 +0000 (13:17 +0200)]
glcolorconvert: Apply GstVideoOverlayCompositionMeta buffer to converted buffer

Since glcolorconvert creates a new GstBuffer,
without the GstVideoOverlayCompositionMeta data,
it needs to be copied to not be dropped.

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

6 years agoglupload: Detect overlay meta buffers correctly
Lubosz Sarnecki [Thu, 18 Jun 2015 11:34:58 +0000 (13:34 +0200)]
glupload: Detect overlay meta buffers correctly

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

6 years agoglimagesinkbin: Add GstVideoOverlayCompositionMeta caps features
Lubosz Sarnecki [Thu, 18 Jun 2015 03:43:50 +0000 (05:43 +0200)]
glimagesinkbin: Add GstVideoOverlayCompositionMeta caps features

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

6 years agoglimagesink: Upload and draw overlays with GstGLOverlayCompositor
Lubosz Sarnecki [Thu, 18 Jun 2015 04:04:37 +0000 (06:04 +0200)]
glimagesink: Upload and draw overlays with GstGLOverlayCompositor

Receives the GstOverlayComposition buffer in the glimagesink and draws them.

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

6 years agogloverlaycompositor: Add GstGLOverlayCompositor class
Lubosz Sarnecki [Tue, 30 Jun 2015 15:59:12 +0000 (17:59 +0200)]
gloverlaycompositor: Add GstGLOverlayCompositor class

Manages the GstGLCompositionOverlay objects,
caches already uploaded overlays and draws them.

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

6 years agoglcompositionoverlay: Add compatibility for GL contexts without glGenVertexArrays
Lubosz Sarnecki [Thu, 18 Jun 2015 12:15:01 +0000 (14:15 +0200)]
glcompositionoverlay: Add compatibility for GL contexts without glGenVertexArrays

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

6 years agoglcompositionoverlay: Add class for managing GstVideoOverlayCompositionOverlay buffers
Lubosz Sarnecki [Sat, 13 Jun 2015 13:35:47 +0000 (15:35 +0200)]
glcompositionoverlay: Add class for managing GstVideoOverlayCompositionOverlay buffers

Add a class to store and manage the OpenGL texture,
vertex buffer and GstVideoOverlayRectangle.
Transforms overlay coordinate space to vertex buffer space with aspect ratios in mind.

= Example Pipelines =

Simple pipeline

gst-launch-1.0 videotestsrc ! \
  textoverlay text="Hello World" font-desc="sans bold 30" ! \
  glimagesink

Display 3 static overlays at different positions

gst-launch-1.0 videotestsrc ! \
  textoverlay text="text1" valignment="top" font-desc="sans bold 30" ! \
  textoverlay text="text2" halignment="right" font-desc="sans bold 30" ! \
  textoverlay text="text3" halignment="left" font-desc="sans bold 30" ! \
  glimagesink

Display subtitle file over testsrc

gst-launch-1.0 videotestsrc ! \
  textoverlay name=foo filesrc location=foo.srt ! subparse ! queue ! foo. foo. ! \
  glimagesink

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

6 years agoglupload: Move debug init to top of the file
Lubosz Sarnecki [Thu, 18 Jun 2015 09:33:29 +0000 (11:33 +0200)]
glupload: Move debug init to top of the file

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

6 years agoglmemory: check for pbo availability before attempting pbo download
Matthew Waters [Mon, 20 Jul 2015 08:19:02 +0000 (18:19 +1000)]
glmemory: check for pbo availability before attempting pbo download

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

6 years agoglcontext: fix get_current_gl_api on x11/nvidia drivers
Matthew Waters [Sat, 18 Jul 2015 07:19:18 +0000 (17:19 +1000)]
glcontext: fix get_current_gl_api on x11/nvidia drivers

They require to get_proc_address some functions through the
platform specific {glX,egl}GetProcAddress rather than the default
GL library symbol lookup.

6 years agoglcontext: consolidate get_proc_address function definition
Matthew Waters [Sat, 18 Jul 2015 07:08:36 +0000 (17:08 +1000)]
glcontext: consolidate get_proc_address function definition

Pass the GstGLAPI directly.

6 years agoglcolorconvertelement: propagate failure to convert buffer upstream
Matthew Waters [Fri, 17 Jul 2015 07:47:37 +0000 (17:47 +1000)]
glcolorconvertelement: propagate failure to convert buffer upstream

Rather than just silently continuing

6 years agoglcontext/glx: try creating a context with the highest version
Matthew Waters [Fri, 17 Jul 2015 03:48:00 +0000 (13:48 +1000)]
glcontext/glx: try creating a context with the highest version

nvidia drivers return the exact version in glGstString (GL_VERSION)
we request on creation so start with the highest known version and
work our way down.

6 years agoglcontext: track sharedness with a cookie
Matthew Waters [Wed, 15 Jul 2015 14:37:58 +0000 (00:37 +1000)]
glcontext: track sharedness with a cookie

The previous approach of traversing the other_context weak ref tree was
1. Less performant
2. Incorrect for context destruction removing a link in the tree

Example of 2:
c1 = context_create (NULL)
c2 = context_create (c1)
c3 = context_create (c2)
context_can_share (c1, c3) == TRUE
context_destroy (c2)
unref (c2)
context_can_share (c1, c3) returns FALSE when it should be TRUE!

This does not remove the restriction that context sharedness can only
be tracked between GstGLContext's.

6 years agoglcontext: use the debug object variant for completeness
Matthew Waters [Wed, 15 Jul 2015 14:33:17 +0000 (00:33 +1000)]
glcontext: use the debug object variant for completeness

6 years agouploadelement: Protect against NULL pointer
Nicolas Dufresne [Thu, 16 Jul 2015 20:47:05 +0000 (16:47 -0400)]
uploadelement: Protect against NULL pointer

I notice that if you stop the pipeline during a renegotiation
the upload may be NULL while an allocation query is being run.
In that scenario, returning FALSE to the allocation query is the
best thing.

6 years agoglupload: memcpy on raw data upload
Matthew Waters [Tue, 14 Jul 2015 07:40:32 +0000 (17:40 +1000)]
glupload: memcpy on raw data upload

Anything else requires keeping track of the GstVideoFrame mapping
across possible multiple buffers to ensure correct data pointer
usage.

6 years agoglbasebuffer: add some debug and zero the data pointers on init
Matthew Waters [Tue, 14 Jul 2015 07:39:59 +0000 (17:39 +1000)]
glbasebuffer: add some debug and zero the data pointers on init

6 years agogl/eagl: Don't call anything synchronously from the main thread
Sebastian Dröge [Mon, 6 Jul 2015 10:28:05 +0000 (13:28 +0300)]
gl/eagl: Don't call anything synchronously from the main thread

This will deadlock if the main thread is the one who creates the GstGLContext.
All things we call from the main thread should be possible from any thread.

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

6 years agodownload: only start a download transfer for sysmem caps features
Matthew Waters [Tue, 7 Jul 2015 12:35:47 +0000 (22:35 +1000)]
download: only start a download transfer for sysmem caps features

6 years agoglsyncmeta: transform func: return FALSE if not supported or failed
Hyunjun Ko [Tue, 7 Jul 2015 01:57:26 +0000 (10:57 +0900)]
glsyncmeta: transform func: return FALSE if not supported or failed

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

6 years agoandroid: add missing egl.h include
Matthew Waters [Tue, 7 Jul 2015 06:39:09 +0000 (16:39 +1000)]
android: add missing egl.h include

6 years agogltransformation: correct vao usage
Matthew Waters [Tue, 7 Jul 2015 05:30:17 +0000 (15:30 +1000)]
gltransformation: correct vao usage

keep the vao bound after uploading the new vertex data

fixes a mesa GL error "no vertex array object bound" on caps changes

6 years agogl: consolidate egl header includes to egl-only headers
Matthew Waters [Tue, 16 Jun 2015 07:49:34 +0000 (07:49 +0000)]
gl: consolidate egl header includes to egl-only headers

They may conflict with other headers.

6 years agoglvideomixer, glmixer: Add description and klass
Olivier Crête [Fri, 3 Jul 2015 16:17:42 +0000 (12:17 -0400)]
glvideomixer, glmixer: Add description and klass

6 years agogl: initialize output params to 0 before calling gl functions
Julien Isorce [Thu, 2 Jul 2015 09:26:18 +0000 (10:26 +0100)]
gl: initialize output params to 0 before calling gl functions

The client side API of the Chromium's GPU Process has asserts
in debug mode that check that output params are initialized to 0.