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
6c56aba687
glwindow: handle gst_video_overlay_set_render_rectangle
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
79f4a5fcf3
gl/utils: implement wayland display GstContext
...
requried for sharing GL contexts or subsurface support
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
Jan Schmidt
0f6b04c91d
gl: Don't leak temp strings in _RGB_pixel_order()
...
Fix a memory leak of temporary strings when computing
swizzling of RGB formats.
2017-12-09 19:32:03 +00:00
Jan Schmidt
5007311198
glfilter: Add transform_internal_caps() vfunc
...
Add a vfunc that is called by glfilter before it sets
caps features and intersects with the peer caps, and
move removing the size from caps into its default
implementation. Allows sub-classes to do more
sophisticated management of the size fields in case they
don't support arbitrary resizing or have distinct
preferences.
2017-12-09 19:32:03 +00:00
Jan Schmidt
697107fe7d
glfilter: Don't remove size fields from caps
...
Instead of removing size fields, set them to the full range
like videoscale does, so the caps are clearly unfixed in
all cases.
2017-12-09 19:32:03 +00:00
Julien Isorce
238edceda4
gl: add GstGLContextGPUProcess backend
...
It builds its GL vtable from a proc address provided
by the application.
2017-12-09 19:32:02 +00:00
Julien Isorce
fce0e0ba3c
gl: add and use gst_gl_internal_format_rgba
...
Previously when compiling GstGL with both GL and GLES2,
GL_RGBA8 was picked from GL/gl.h. But a clash may happen at
runtime when one is selecting GLES2.
gst_gl_internal_format_rgba allows to check at runtime
if it should use GL_RGBA or GL_RGBA8.
2017-12-09 19:32:02 +00:00
Julien Isorce
2efeb71c83
glwindow_x11: use parent default implementation
2017-12-09 19:32:02 +00:00
Julien Isorce
fa7aafb4ff
glcontext_glx: rename variable from window to context
2017-12-09 19:32:02 +00:00
Julien Isorce
01961ec44d
glwindow: initialize debug in class_init
...
Useful if one uses gst_gl_window_x11_new directly
instead of gst_gl_window_new.
2017-12-09 19:32:02 +00:00
Julien Isorce
a81de2f282
glcontext: initialize debug in class_init
...
Useful if one uses gst_gl_context_egl_new directly
instead of gst_gl_context_new.
2017-12-09 19:32:02 +00:00
Julien Isorce
5849a9f657
glcontext: add gst_gl_context_set_display helper
2017-12-09 19:32:02 +00:00
Julien Isorce
bad3e16601
glcontext: add missing _CAST after G_TYPE_CHECK_CLASS
2017-12-09 19:32:02 +00:00
Julien Isorce
78ca5ce1c4
glwindow: add missing _CAST after G_TYPE_CHECK_CLASS
2017-12-09 19:32:02 +00:00
Julien Isorce
2472bcaaa6
glwindow: provides some default implementations to factorize with all backends
2017-12-09 19:32:02 +00:00
Xavier Claessens
840157230d
gl: propagate return value from filter and filter_texture
...
https://bugzilla.gnome.org/show_bug.cgi?id=749846
2017-12-09 19:32:02 +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
eba6f6b80f
gl/calayer: provide the exact GL api version for the wrapped context
...
Otherwise we could end up being mistaken for the diference between a
gl3 and a gl2 context resulting in a failure getting the list of
extensions from the wrapped context due to the difference between
glGetString and glGetStringi for the GL_EXTENSIONS token.
https://bugzilla.gnome.org/show_bug.cgi?id=749728
2017-12-09 19:32:02 +00:00
Xavier Claessens
6db457a7d9
gl: win32: do not call SetParent in release_parent_win_id()
...
When called from gst_gl_window_win32_close(), internal window
could not exist, and if it does it's going to be destroyed just
after that anyway. Also it causes window_proc() to be called
and crash because it gets a NULL context.
When called from gst_gl_window_win32_set_window_handle() we are
going to set another parent anyway, and it's probably better to
reparent directly instead of passing by a NULL parent which could
cause the internal window to popup briefly.
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2017-12-09 19:32:02 +00:00
Xavier Claessens
1d9ccc2189
gl: win32: remove unused code
...
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2017-12-09 19:32:02 +00:00
Xavier Claessens
77e1e70fdc
gl: win32: fix crash when finalizing GstGLContext
...
gst_gl_context_finalize() is calling gst_gl_window_win32_quit()
which was posting a message. But then window_proc takes window's
context and get a NULL.
Now that we've got a GMainLoop we can do like other backends and
simply call g_main_loop_quit().
This also remove duplicated code to release the parent window and
potential crash there because parent_proc could be NULL if we never
created the internal window. That could happen for example if setting
state to READY then setting a window_handle, and go back to NULL state.
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2017-12-09 19:32:02 +00:00
Xavier Claessens
db0380a9ee
gl: win32: Fix leaked GstGLContext
...
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2017-12-09 19:32:02 +00:00
Xavier Claessens
8f268785d6
gl: win32: set the parent window when creating internal window
...
When _set_window_handle() was called in READY state, it wasn't
set to the internal window created later.
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2017-12-09 19:32:02 +00:00
Xavier Claessens
886ea15c52
gl: win32: use a GMainContext to dispatch win32 messages
...
gst_gl_window_win32_send_message_async() could be called before the
internal window is created so we cannot use PostMessage there.
x11 and wayland backends both create a custom GSource for this,
so there is no reason to not do that for win32.
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2017-12-09 19:32:02 +00:00
Jan Schmidt
95b08b75ba
glupload: Don't leak all memory uploaded via raw uploads.
...
Remove an extra ref missed when switching over to not
reusing output textures
2017-12-09 19:32:02 +00:00
Matthew Waters
d4894caacf
glcontext: require a shader version to initialize.
...
It's very near pointless to try our GL implementation without shaders.
https://bugzilla.gnome.org/show_bug.cgi?id=749284
2017-12-09 19:32:02 +00:00
Xavier Claessens
80fab54c0a
gl: fix crash on windows with intel driver
...
https://bugzilla.gnome.org/show_bug.cgi?id=749430
2017-12-09 19:32:01 +00:00
Matthew Waters
e8e84cf6b3
gl/calayer: provide a current wrapped GstGLContext for callbacks
...
So that the draw and resize callbacks can get the current GstGLContext.
2017-12-09 19:32:01 +00:00
Matthew Waters
18b9519a66
glsyncmeta: ensure that the Fence is going to be executed
...
Otherwise it could stay client side without being submitted to the GL
server resulting in another context waiting on a Fence that will never
become signalled causing a deadlock.
2017-12-09 19:32:01 +00:00
Matthew Waters
62c2d98c52
glupload: don't reuse output textures for raw data upload
...
Causes stale textures to be used further down the chain.
2017-12-09 19:32:01 +00:00
Matthew Waters
d5e0d435e4
glframebuffer: don't clear the framebuffer
...
Breaks attempting to blend with the destination buffer and should be done
explicitly by the callback anyway.
2017-12-09 19:32:01 +00:00
Matthew Waters
5a275c77eb
glbasefilter: track gl_start/stop correctly
...
Don't start multiple times without calling gl_stop.
2017-12-09 19:32:01 +00:00
Matthew Waters
5d8841c8e7
glcontext/cocoa: implement GL3 core context selection
2017-12-09 19:32:01 +00:00
Matthew Waters
72993f54fa
gl: remove useless gl{En,Dis}able (GL_TEXTURE_*) calls
...
We are using shaders everywhere and so they are not needed
2017-12-09 19:32:01 +00:00
Matthew Waters
675f789871
glshader: attempt to detect the gles2 inside opengl3 case
...
This is necessary to use gles2 shaders in a GL 3 core context on
OS X which fails without a proper #version being set on the shaders.
2017-12-09 19:32:01 +00:00
Matthew Waters
2b4ce9435d
glshader: remove references to gl3 specific shaders
...
We rely specifically on gles2 shaders being supported by the GL
implementation with GL3 core profile.
2017-12-09 19:32:01 +00:00
Matthew Waters
65c57b77ff
gl: element buffers are part of vao state
...
Use them as such. They are also required for GL3 core profile support
with glDrawElements on OS X.
2017-12-09 19:32:01 +00:00
Matthew Waters
cc587ce1f1
glmemory: properly detect (hopefully) the correct ext_rg/arb_rg variant
...
GL_EXT_texture_rg is only valid for GLES2. GLES3 uses similar wording to
the GL_ARB_texture_rg which requires a sized internal format that the
GL_EXT_texture_rg does not require.
https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_rg.txt
https://www.opengl.org/registry/specs/ARB/texture_rg.txt
2017-12-09 19:32:01 +00:00
Matthew Waters
16522a737c
glcontext: propagate the version/extension failure upwards
...
Otherwise the calling code has no idea that the context failed to
be created fully.
https://bugzilla.gnome.org/show_bug.cgi?id=749284
2017-12-09 19:32:01 +00:00
Matthew Waters
50d3161ac5
gl: don't deadlock on context creation failure
...
https://bugzilla.gnome.org/show_bug.cgi?id=749284
2017-12-09 19:32:01 +00:00
Sebastian Dröge
51d3a0a059
Revert "gl: readd glupload/download onto element pads"
...
This reverts commit 87d8270f30
.
2017-12-09 19:32:00 +00:00
Matthew Waters
5216434678
glsyncmeta: fixup size declaration
2017-12-09 19:32:00 +00:00
Jan Schmidt
c2450a28f5
glcolorconvert: Improve passthrough check when no conversion is needed.
...
Make the passthrough check contingent on only the fields we
can modify being unchanged, and pre-compute it when caps
change instead of checking on each buffer. Makes the passthrough
more lenient if consumers are lax about making input and output
caps complete.
2017-12-09 19:32:00 +00:00
Matthew Waters
343947f383
gl: readd glupload/download onto element pads
...
Allows insertion of gl elements into non-gl pipelines without converter
(upload/download) elements.
https://bugzilla.gnome.org/show_bug.cgi?id=743974
2017-12-09 19:32:00 +00:00
Jan Schmidt
9958df5dd1
glupload: Make upload method static caps non-const.
...
Retrieving a GstStaticCaps does a one time internal
initialisation and caches it - they can't be stored as
const structures.
2017-12-09 19:32:00 +00:00
Matthew Waters
84b61ad4d5
glmemory: remove uneeded unref
...
The call to _gl_mem_alloc_data will unref and NULLify 'dest' for us.
We just need to return.
https://bugzilla.gnome.org/show_bug.cgi?id=744246
2017-12-09 19:32:00 +00:00
Matthew Waters
c902a6f525
glupload: provide the sink template caps that could be used
...
https://bugzilla.gnome.org/show_bug.cgi?id=746399
2017-12-09 19:32:00 +00:00
Xavier Claessens
403ee23de1
egl: Use maximum bits per color instead of minimum
...
https://bugzilla.gnome.org/show_bug.cgi?id=748425
2017-12-09 19:32:00 +00:00
Matthew Waters
f4f3284161
gl: unref display/other-context in the correct place
...
Otherwise state changes from PLAYING->READY->PAUSED will cause there to
to be no display configured on the element.
https://bugzilla.gnome.org/show_bug.cgi?id=748405
2017-12-09 19:32:00 +00:00
Sebastian Dröge
ee6bfe0127
glfilter: De-camelcase onInitFBO() vfunc
2017-12-09 19:31:59 +00:00
Sebastian Dröge
3613ecfd0a
glfilter: Remove onStart/onStop vfuncs, and unused onReset()
...
onStart/onStop are just duplicates of the basetransform ones, onReset
was never called but was used everywhere when stop should've been used.
2017-12-09 19:31:59 +00:00
Matthew Waters
db3bd840b9
glbasefilter: Unref other context in finalize, and display in READY->NULL
...
https://bugzilla.gnome.org/show_bug.cgi?id=748405
2017-12-09 19:31:59 +00:00
Matthew Waters
6445569abf
glwindow: track context activation properly
...
We only need to deactivate/reactivate the context iff it was already
active.
2017-12-09 19:31:59 +00:00
Matthew Waters
03908c679e
gldisplay: synchronize the searching and creation of GstGLContext's
...
Ootherwise we could end up with multiple elements in different chains
each creating a context. Fixes context creation with glvideomixer.
2017-12-09 19:31:59 +00:00
Matthieu Bouron
d20af8338a
glcontext: Make gst_gl_context_egl_activate fail if the old surface could not be destroyed
...
https://bugzilla.gnome.org/show_bug.cgi?id=746251
2017-12-09 19:31:59 +00:00
Matthieu Bouron
87a336350d
glcontext: Make gst_gl_context_egl_activate fail if the surface could not be created
...
Also add some error logging.
2017-12-09 19:31:59 +00:00
Sebastian Dröge
659477c7c7
glcolorconvert: Fix last commit
2017-12-09 19:31:59 +00:00
Sebastian Dröge
4a8001e683
gl: Remove iOS/EAGL workaround for R/RG textures
...
This should be unneeded now after https://bugzilla.gnome.org/show_bug.cgi?id=732507
2017-12-09 19:31:58 +00:00
Sebastian Dröge
bd2821982f
glcolorconvert: Add correct check for RG/R textures in glcolorconvert too
...
https://bugzilla.gnome.org/show_bug.cgi?id=732507
2017-12-09 19:31:58 +00:00
Anton Obzhirov
c45072ae86
glbasefilter: avoid segfault when gl platform is not available
...
https://bugzilla.gnome.org/show_bug.cgi?id=747124
2017-12-09 19:31:58 +00:00
Alessandro Decina
83990b491e
libgstgl: fix rendering on iOS
...
Stop assuming that the handle has been set by the time ->create_context is
called. After bc7a7259f3
set_window_handle always
happens after ->create_context in fact.
See also https://bugzilla.gnome.org/show_bug.cgi?id=745090
2017-12-09 19:31:58 +00:00
Edward Hervey
0f4c79099e
introspection: Don't use g-ir-scanner cache at compile time
...
It pollutes user directories and we don't need to cache it
https://bugzilla.gnome.org/show_bug.cgi?id=747095
2017-12-09 19:31:58 +00:00
Philippe Normand
79d340004d
gl/dispmanx: surfaceless EGL context support
...
Show the DispmanX window only if there's no shared external GL context
set up. When a window is required by the context a transparent
DispmanX element is created and later on made visible by the ::show
method.
https://bugzilla.gnome.org/show_bug.cgi?id=746632
2017-12-09 19:31:58 +00:00
Julien Isorce
0142f551f8
glwindow: remove unused gl_thread field
2017-12-09 19:31:58 +00:00
Julien Isorce
a71d479cc3
gldisplay: fix GThread leak
...
https://bugzilla.gnome.org/show_bug.cgi?id=746541
2017-12-09 19:31:58 +00:00
Matthew Waters
0b5c7e8b49
gl/docs: update some doc comments
2017-12-09 19:31:58 +00:00
Matthew Waters
1c51ba395a
gldisplay: tentative proper context collision detection
...
Fixes
tee name=t ! queue ! gliamgesink t. ! queue ! glimagesink
2017-12-09 19:31:58 +00:00
Víctor Manuel Jáquez Leal
55dbb25dcc
glupload: move meta-data copy into gst-gl library
...
In some upload implementations the out buffer has more than one references,
turning the buffer not writable, so it won't be possible to modify its
meta-data.
This patch moves the meta-data copy before increasing the reference of the out
buffer.
https://bugzilla.gnome.org/show_bug.cgi?id=746173
2017-12-09 19:31:58 +00:00
Matthew Waters
420cdf9cf6
glmemory: fix the slight difference between EXT_rg and ARB_rg
...
GL_EXT_texture_rg doesn't take sized formats for the internalformat
parameter of TexImage* but GL_ARB_texture_rg and GL(ES)3 do.
https://bugzilla.gnome.org/show_bug.cgi?id=732507
2017-12-09 19:31:58 +00:00
Matthew Waters
93968916a4
glsyncmeta: make context to wait and set sync explicit
...
otherwise we may wait on a sync object in same context by accident
2017-12-09 19:31:58 +00:00
Julien Isorce
63366be8ad
gl: add GstGLDisplayCocoa
...
https://bugzilla.gnome.org/show_bug.cgi?id=746012
2017-12-09 19:31:58 +00:00
Julien Isorce
d3b3887c52
gl/cocoa: do not terminate loop in gst_gl_window_cocoa_close
...
It is now done in _finalize.
Fix regression introduced by
"gl/window: create the main loop/context on init/finalize"
bc7a7259f3
2017-12-09 19:31:58 +00:00
Julien Isorce
a51680b1b3
gl: avoid overwriting display and context to NULL
...
It happens when the application provides display
and/or context.
2017-12-09 19:31:57 +00:00
Matthew Waters
15fd4e164a
glshader: attribute locations are -1 on error
2017-12-09 19:31:57 +00:00
Neos3452
7d83351172
glshader: prevent from getting attributes without vertex shader
...
It doesn't make sense to query for vertex attributes without a vertex
shader. Moreover this is causing a crash on OSX.
https://bugzilla.gnome.org/show_bug.cgi?id=746168
2017-12-09 19:31:57 +00:00
Matthew Waters
7b9d70944b
glupload: unref the bufferpool
2017-12-09 19:31:57 +00:00
Matthew Waters
92f0aa9bd8
gl: get the context from basemixer/basefilter
2017-12-09 19:31:57 +00:00
Matthew Waters
51620950e4
gl: retreive the gldisplay/app gl context as soon as possible
...
fixes the usage of gst_gl_display_filter_gl_api
2017-12-09 19:31:57 +00:00
Julien Isorce
d6e460095f
glcolorconvert: cache indices in a buffer object
2017-12-09 19:31:57 +00:00
Matthew Waters
35476a4cb4
gl/cocoa: avoid deadlock when creating context on the main thread.
...
Make window/view creation async so that it is possible to
gst_gl_context_create from the main thread.
2017-12-09 19:31:57 +00:00
Matthew Waters
813fb633b4
gl: store the list of contexts within gldisplay
...
Removes the reliance on the allocation query to propogate GL contexts.
Allows thread safely getting a context for the a specific thread.
2017-12-09 19:31:57 +00:00
Matthew Waters
d44594c622
glcontext: store the thread current context
2017-12-09 19:31:57 +00:00
Matthew Waters
3e608bcce7
glfilter: don't use the library upload/convert objects
2017-12-09 19:31:57 +00:00
Matthew Waters
1ba38bc10a
glupload: implement propose_allocation pool handling for glmemory upload
2017-12-09 19:31:56 +00:00
Matthew Waters
2ead0d97ed
gl: add a new glbasefilter class below glfilter
...
It deals with propagating the gl display/contexts throughout the
application/pipeline
2017-12-09 19:31:56 +00:00
Matthew Waters
6d4cca89ef
glutils: expose running a query on a set of src/sink pads
2017-12-09 19:31:56 +00:00
Matthew Waters
f9ac4984eb
glfilter: advertise resize in the caps negotiation properly
2017-12-09 19:31:56 +00:00
Matthew Waters
1d4b82d5f8
glcolorconvert: we don't do resizing of the video frames
...
As we cannot do accurate texel sampling then due to the texture
coordinates being interpolated based on the output frame size.
2017-12-09 19:31:56 +00:00
Matthew Waters
39eb34eb43
gl/x11: don't XGetWindowAttributes every XEvent
...
fixes a deadlock in xcb where the X window may not exist.
https://bugzilla.gnome.org/show_bug.cgi?id=745633
2017-12-09 19:31:56 +00:00
Matthew Waters
9968b512c5
gl/window: hopefully fixup compile warnings on android/ios
2017-12-09 19:31:56 +00:00
Jan Schmidt
ebbdf29a24
glfilter: Remove redundant check for clearing context on reset.
...
The context is already cleared a few lines above.
2017-12-09 19:31:56 +00:00
Jan Schmidt
6350c35352
Remove a bunch of silly ';;' typos at the end of lines
2017-12-09 19:31:56 +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
Nicolas Dufresne
da41207841
glfilter: Don't chain downstream pool
...
Chaining a downstream pool would lead to two owner of the same
pool. In dynamic pipeline, if one owner is removed from the pipeline
the pool will be stopped, and the rest of the pipeline will fail
since the pool will now be flushing. Also fix proposed pool caching,
filter->pool was never set, never unrefed.
https://bugzilla.gnome.org/show_bug.cgi?id=745705
2017-12-09 19:31:56 +00:00