Matthew Waters
b25413fb1c
gl/wayland: move roundtrip on show to window thread
...
This makes it thread safe and fixes a possible deadlock.
Keeping the roundtrip off the window thread will result in two different
threads call wl_display_dispatch_queue() for the same queue which
violates the assumption for _dispatch_queue()'s thread-safety
guarantees.
https://bugzilla.gnome.org/show_bug.cgi?id=788754
https://bugzilla.gnome.org/show_bug.cgi?id=792156
https://bugzilla.gnome.org/show_bug.cgi?id=758984
2018-01-04 15:39:36 +11:00
Víctor Manuel Jáquez Leal
7b8108a4ca
gl: display: demote error level at display creation error
...
https://bugzilla.gnome.org/show_bug.cgi?id=791391
2017-12-19 12:41:00 +00:00
Matthew Waters
a5aff145a2
gl/wayland: call eglTerminate() before wl_display_disconnect()
...
Calling these two functions in the wrong order will result in
use-after-free inside wayland.
https://bugzilla.gnome.org/show_bug.cgi?id=787293
2017-12-09 19:32:30 +00:00
Tim-Philipp Müller
1ddde50048
gl: make some debug categories private
...
They weren't supposed to be public.
https://bugzilla.gnome.org/show_bug.cgi?id=786170
2017-12-09 19:32:29 +00:00
Tim-Philipp Müller
4be04f8315
gl: don't export symbols that are not supposed to be public
...
Make a bunch of symbols private that are currently leaked
accidentally because they have a gst_* prefix and are used
internally. We mark those we can't make static with
G_GNUC_INTERNAL so that they get hidden with the autotools
build as well (although we could just pass -fvisibility=hidden
there too).
2017-12-09 19:32:29 +00:00
Tim-Philipp Müller
fbb62097e7
gl, wayland: mark more declared functions with GST_EXPORT
2017-12-09 19:32:29 +00:00
Matthew Waters
4c75bab70d
glcontext: add public swap_buffers function
...
That simply calls the implementation
2017-12-09 19:32:28 +00:00
Sebastian Dröge
a9a05c01a9
gst: Clear floating flag in constructor of all GstObject subclasses that are not owned by any parent
...
https://bugzilla.gnome.org/show_bug.cgi?id=743062
2017-12-09 19:32:28 +00:00
Nicolas Dufresne
ae30818f7b
gldisplay: Fix assert caused by missing debug category
2017-12-09 19:32:27 +00:00
Matthew Waters
f532e699df
gl/window: remove use of main_context_push/pop_thread_default()
...
No-one's using/depending on it (it would have criticalled and not worked)
and it's causing more problems than it's solving. Store the GMainContext
in the public struct instead for subclasses to optionally use instead of
relying on the push/pop state to be correct.
https://bugzilla.gnome.org/show_bug.cgi?id=775970
2017-12-09 19:32:25 +00:00
Matthew Waters
d0b8f7c002
gl: add padding to all exposed winsys/platform-specific structs
2017-12-09 19:32:24 +00:00
Matthew Waters
d7d42971ab
gl/wayland: install the gstgldisplay_wayland.h header
...
As it is used by other OpenGL sinks (gtkglsink, qmlglsink)
2017-12-09 19:32:24 +00:00
Matthew Waters
18ac98c58b
gl: GST_GL_TYPE -> GST_TYPE_GL
...
Some deprecated symbols are kept for backwards compatibility
2017-12-09 19:32:23 +00:00
Matthew Waters
2763baf439
gl/wayland: use multi-threaded safe event wayland API
...
Multiple threads may be accessing the wayland fd at the same time which
requires the use of special wayland API to deal with to ensure nobody
will steal reads and cause a stall for anyone else.
2017-12-09 19:32:22 +00:00
Tim-Philipp Müller
2c3a31c483
gl: wayland: improve debug message when connecting to display
...
And another copy'n'paste-o.
https://bugzilla.gnome.org/show_bug.cgi?id=768929
2017-12-09 19:32:21 +00:00
Matthew Waters
f4bab389c5
gl: add .def file for msvc builds
...
Also internalize some API from being exported.
2017-12-09 19:32:16 +00:00
Matthew Waters
06de6998e5
gl: be consistent in gobject boilerpate
...
GST_GL_IS_* vs GST_IS_GL_*
git grep -l 'GST_GL_IS_' | xargs sed -i 's/GST_GL_IS_/GST_IS_GL_/g'
2017-12-09 19:32:09 +00:00
Matthew Waters
e9864e2e3e
glwindow: remove unused draw_unlocked function
...
The functionality is provided by draw anyway and is leftover from
X11's specific threading requirements that no longer apply.
2017-12-09 19:32:08 +00:00
Matthew Waters
63bbe9406a
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
2017-12-09 19:32:08 +00:00
Matthew Waters
70184c52f0
wayland: fail window open if the display is the correct type
...
Errors out cleanly if a wayland compositor is not running
2017-12-09 19:32:07 +00:00
Matthew Waters
6ccaafc0f3
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
2017-12-09 19:32:07 +00:00
Thiago Santos
33b5cd5426
Fix a common typo: retreive -> retrieve
...
Seems to have been copy pasted around a few places
2017-12-09 19:32:03 +00:00
Matthew Waters
bb1de83ff2
gl/window: use the default main loop implementation for all backends
...
fixes glimagsink being unable to display.
https://bugzilla.gnome.org/show_bug.cgi?id=750337
2017-12-09 19:32:03 +00:00
Sebastian Dröge
7ae1efa8b3
gl: Fix compiler warning
...
gstglwindow_wayland_egl.c:246:41: error: unused variable 'surface_listener' [-Werror,-Wunused-const-variable]
static const struct wl_surface_listener surface_listener = {
^
2017-12-09 19:32:03 +00:00
Matthew Waters
33d8bbaea4
gl/wayland: implement setting the render rectangle
...
Places our subsurface at the rectangle provided position
2017-12-09 19:32:03 +00:00
Matthew Waters
8332b1abe8
gl/wayland: don't block the event loop after poll
...
Use the dispatch_pending set of functions which just run the currently
queued up events instead of potentially waiting for an event to occur.
2017-12-09 19:32:03 +00:00
Matthew Waters
54199ea203
gl/wayland: implement basic video overlay support via subsurfaces
...
Currently does not position the subsurface relative to the parent surface at all
2017-12-09 19:32:03 +00:00
Matthew Waters
8404981dfb
gl/wayland: allow a NULL wl_event_queue
...
perform operations on the default wl_display event queue in that case
2017-12-09 19:32:03 +00:00
Matthew Waters
00cff1f9e4
gl/wayland: run each window on a separate queue
...
Based on patch by Julien Isorce <julien.isorce@collabora.co.uk>
https://bugzilla.gnome.org/show_bug.cgi?id=709747
2017-12-09 19:32:03 +00:00
Matthew Waters
4e58ec83e0
gl/wayland: remove dead event source code
2017-12-09 19:32:02 +00:00
Matthew Waters
9f704d7c2d
gl/wayland: add GstGLDisplayWayland
...
Simple implementation split from GstGLWindowWayland
Can now have multiple glimagesink elements all displaying output
linked via GL or otherwise (barring GL platform limitations).
The intel driver is racy and can crash setting up the two glimagesink contexts.
e.g.
videotestsrc ! tee name=t ! queue ! glupload ! glimagesinkelement
t. ! queue ! gleffects_blur ! glimagesinkelement
videotestsrc ! glupload ! glfiltercube ! tee name=t ! queue ! glimagesinkelement
t. ! queue ! gleffects_blur ! glimagesinkelement
2017-12-09 19:32:02 +00:00
Matthew Waters
5b8f3e7870
gl/window: create the main loop/context on init/finalize
...
Avoids races setting the window handle from the main thread.
https://bugzilla.gnome.org/show_bug.cgi?id=745633
2017-12-09 19:31:56 +00:00
Matthew Waters
019367c128
glwindow: remove width/height from _draw()
...
Depending on the platform, it was only ever implemented to 1) set a
default surface size, 2) resize based on the video frame or 3) nothing.
Instead, provide a set_preferred_size () that elements/applications
can use to request a certain size which may be ignored for
videooverlay/other cases.
2017-12-09 19:31:53 +00:00
Matthew Waters
e32c4a62c2
gl/wayland: implement resizing the window using the right mouse button
2017-12-09 19:31:50 +00:00
Gwenole Beauchesne
14521a89cb
gl: fix out-of-source builds.
...
Always use the locally generated <gst/gl/gstglconfig.h> file.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2017-12-09 19:31:35 +00:00
Matthew Waters
0fa966bb3d
gl: remove explicit reference to X_CFLAGS
...
They are in GL_CFLAGS if required
2017-12-09 19:31:35 +00:00
Julien Isorce
b30d15d4b8
gl: keep only one occurence of '#include <EGL/egl.h>'
...
To simply maintainance if we need to put specific includes around it.
2017-12-09 19:31:34 +00:00
Matthew Waters
2026f60879
[862/906] window: remove set_need_lock
...
No-one is using it. The only code that did was the x11 one which
doesn't need it anymore.
2017-12-09 19:31:33 +00:00
Julien Isorce
ab5a3e310d
[823/906] wayland_egl: make the wayland backend actually work on Raspberry Pi
...
Fix resizing and can now move the window
2017-12-09 19:31:31 +00:00
Matthew Waters
3b1ec77cf8
[818/906] window: add send_message_async vmethod
...
- provide a default synchronous send_message
- make context creation threadsafe again
2017-12-09 19:31:31 +00:00
Matthew Waters
b8b9fced19
[796/906] move egl into its own directory
2017-12-09 19:31:31 +00:00
Matthew Waters
9cbb652b66
[794/906] context: add subclasses for the different platforms (egl, glx, wgl, etc)
...
- most code taken from the Window subclasses
- tested combinations: xEGL, GLX, Wayland+EGL, Cocoa (under GNUStep), WGL (Wine)
2017-12-09 19:31:30 +00:00
Matthew Waters
e80533dcee
[793/906] add a GstGLContext object that will be the basis of OpenGL contexts
...
At the moment it just sits in between GstGLDisplay and GstGLWindow
performing some of the stuff that GstGLWindow used to do.
2017-12-09 19:31:30 +00:00
Matthew Waters
175f28848c
[792/906] build: use our own in tree headers before system ones
...
allows us to develop against the tree rather than what may be installed
2017-12-09 19:31:30 +00:00
Matthew Waters
d492036322
[765/906] wayland: remove fullscreen
2017-12-09 19:31:30 +00:00
Sebastian Dröge
b2934152ce
[752/906] glwindow: Add destroy notifies for the data of the callbacks
...
And actually call the close callback when the window is closed.
2017-12-09 19:31:29 +00:00
Sebastian Dröge
d937a7e899
[741/906] wayland: Don't leak main context and loop
2017-12-09 19:31:29 +00:00
Sebastian Dröge
f7998a2e98
[733/906] gl: Major header and include cleanup
2017-12-09 19:31:29 +00:00
Sebastian Dröge
92c66f55bc
[727/906] egl: Refactor EGL logic into a helper object
2017-12-09 19:31:29 +00:00
Matthew Waters
17e4fe41d3
[724/906] wayland: make reentrant
...
https://bugzilla.gnome.org/show_bug.cgi?id=703445
2017-12-09 19:31:29 +00:00