Commit graph

191 commits

Author SHA1 Message Date
Matthew Waters
3455b050c2 glmixer: add read-only context property 2017-12-09 19:31:50 +00:00
Matthew Waters
f0c118c77a glimagesink: don't set the upload to NULL on the drain query
https://bugzilla.gnome.org/show_bug.cgi?id=732694
2017-12-09 19:31:50 +00:00
Julien Isorce
c72498af92 glimagesink: release stored buffers on drain query
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732694
2017-12-09 19:31:49 +00:00
Matthew Waters
af9b73043e gl: remove the width/height fields from the caps to support frame resizing
It was previously only occuring with sysmem caps features

https://bugzilla.gnome.org/show_bug.cgi?id=739334
2017-12-09 19:31:49 +00:00
Alessandro Decina
c3612847ef glimagesink: don't make gst_glimage_sink_handle_events call _ensure_gl_setup
gst_glimage_sink_handle_events can be called from the overlay interface and from
the main thread before GL is setup. Before this change, that would call
_ensure_gl_setup() and deadlock on OSX.

Change things so that it's always safe to call gst_glimage_sink_handle_events()
without stuff deadlocking.
2017-12-09 19:31:49 +00:00
Alessandro Decina
ab8990c89f glimagesink: fix possible deadlock on osx
Remove gst_glimage_sink_handle_events call in gst_glimage_sink_init. It was
unnecessary and when the element was instantiated from the main thread, caused a
deadlock in OSX creating the context (thread).
2017-12-09 19:31:49 +00:00
Matthew Waters
d9b724a3d2 glimagesink: clamp the resize width/height to >= 1 to avoid a GL error 2017-12-09 19:31:49 +00:00
Lubosz Sarnecki
64dd17bde6 glimagesink: implement gst_video_overlay_handle_events
https://bugzilla.gnome.org/show_bug.cgi?id=736035
2017-12-09 19:31:49 +00:00
Matthew Waters
0fa95fe809 glimagesink: resize the viewport correctly on a caps change
with force-aspect-ratio=true, if the width or height changed, the
viewport wasn't being updated to respect the new video width and height
until a resize occured.
2017-12-09 19:31:49 +00:00
Matthew Waters
b06ca547d6 glmixer: advertise support for changing input caps mid-stream
https://bugzilla.gnome.org/show_bug.cgi?id=739334
2017-12-09 19:31:49 +00:00
Matthew Waters
4a8b7c9193 glmixer: don't get the current caps from GstVideoInfo for the srcpad
It's missing the caps features needed.
2017-12-09 19:31:49 +00:00
Lubosz Sarnecki
e173ab2b9d satisfy gst-indent 2017-12-09 19:31:49 +00:00
Jan Schmidt
1a25f7e44a glfiltercube: Fix typo in property description 2017-12-09 19:31:49 +00:00
Wang Xin-yu (王昕宇)
10eb848d57 glmixer:fix incorrect parameter passed to handle_set_context 2017-12-09 19:31:48 +00:00
Matthew Waters
0b2e5c3f95 glmixer: override the caps query in order to 'convert' capsfeatures
Otherwise, it is only possible for the sink pads and the src pads to
have the exact same caps features.  We can convert from any feature
to another feature so support that.
2017-12-09 19:31:48 +00:00
Matthew Waters
1bd6e87cfc glmixer: override the accept caps query in order to 'convert' capsfeatures
Otherwise, it is only possible for the sink pads and the src pads to
have the exact same caps features.  We can convert from any feature
to another feature so support that.
2017-12-09 19:31:48 +00:00
Matthew Waters
62e3c40d97 gl: propogate other-context using GstContext 2017-12-09 19:31:48 +00:00
Matthew Waters
f0426043ce glmixer: fixup eglimage include path 2017-12-09 19:31:48 +00:00
Matthew Waters
0806de5c75 glbufferpool: add the GstVideoGLTextureUploadMeta buffer pool option 2017-12-09 19:31:48 +00:00
Matthew Waters
3cccd77d5d videoaggregator: operate on caps rather than video info
Otherwise the CapsFeatures will be lost along with the possibility
of multiple output types and formats.

https://bugzilla.gnome.org/show_bug.cgi?id=738129
2017-12-09 19:31:48 +00:00
Matthew Waters
ed6be7fead gldeinterlace: ref the uploaded buffer
Instead of the possibly non-GL input buffer.
2017-12-09 19:31:48 +00:00
Sebastian Dröge
22a1ec13b6 glimagesink: Only finalize the other context in finalize()
Otherwise we change a value of a property when going to READY state,
which is unexpected behaviour.
2017-12-09 19:31:48 +00:00
Sebastian Dröge
3eab72f409 glmixer: Call the pad's parent class finalize method 2017-12-09 19:31:48 +00:00
Sebastian Dröge
aed7da3d12 glmixer: Only finalize the other context in finalize()
Otherwise we change a value of a property when going to READY state,
which is unexpected behaviour.
2017-12-09 19:31:48 +00:00
Sebastian Dröge
c46c642fd3 gltestsrc: Add other-context property 2017-12-09 19:31:48 +00:00
Sebastian Dröge
3b9b30563e glimagesink: Don't leak other-context 2017-12-09 19:31:48 +00:00
Sebastian Dröge
9d1df014fd glmixer: Add other-context property 2017-12-09 19:31:48 +00:00
Vivia Nikolaidou
4fa5392e14 gloverlay: And fix another unused variable compiler warning 2017-12-09 19:31:48 +00:00
Vivia Nikolaidou
53213d924e gloverlay: Fix unused variable compiler warning when compiling without desktop GL 2017-12-09 19:31:48 +00:00
Wang Xin-yu (王昕宇)
924e017bda gltestsrc: implement checkers pattern with GLSL
https://bugzilla.gnome.org/show_bug.cgi?id=737505
2017-12-09 19:31:48 +00:00
Lubosz Sarnecki
28d4d57180 gltransformation: graphene multiplication order has changed
https://bugzilla.gnome.org/show_bug.cgi?id=733510
2017-12-09 19:31:47 +00:00
Matthew Waters
d30a476c1c glvideomixer: update element documentation 2017-12-09 19:31:47 +00:00
Matthew Waters
aeb60d850d Revert accidental push: "gltestsrc: implement checkers pattern with GLSL"
This reverts commit eae09179f0.
2017-12-09 19:31:47 +00:00
Wang Xin-yu (王昕宇)
14f297b61c gltestsrc: implement checkers pattern with GLSL 2017-12-09 19:31:47 +00:00
Matthew Waters
7d99c66ca5 gloverlay: fix zero output frames with YUY2/UYVY
also, be nice and disable blending for other elements
2017-12-09 19:31:47 +00:00
Matthew Waters
0e89ab4c91 gloverlay: protect desktop gl specific tokens with #if 2017-12-09 19:31:47 +00:00
Matthew Waters
f4afec4657 gloverlay: free the image memory every time the location changes
fixes a memory leak
2017-12-09 19:31:47 +00:00
Sebastian Dröge
17fa8eac04 gloverlay: Include into the build with GLES2 only too 2017-12-09 19:31:47 +00:00
Matthew Waters
1c4e5c2aeb gltestsrc: free the shader on stop 2017-12-09 19:31:47 +00:00
Matthew Waters
f5006bdf09 glvideomixer: fix blending with low-alpha sources
We also need to apply the blend paramaters to the alpha channel otherwise
the output of the blend will appear black at low alpha values (< 0.2).
2017-12-09 19:31:46 +00:00
Matthew Waters
96208c1694 gloverlay: reimplement everything
- update for shaders
 - add alpha property
 - image placement properties shamelessly borrowed from gdkpixbufoverlay
 - image placement properties are GstController able
 - use GstGLMemory for the overlay image data
 - add support for gles2
2017-12-09 19:31:46 +00:00
Matthew Waters
07489f7b76 glvideomixer: skip input frames with an alpha of 0 2017-12-09 19:31:46 +00:00
Matthew Waters
ae919f4475 gl: download whenever we have sysmem capsfeatures
Otherwise we could pass on a RGBA formatted buffer and downstream would
misinterpret that as some other video format.

Fixes pipelines of the form

    gleffects ! tee ! xvimagesink
2017-12-09 19:31:46 +00:00
Lubosz Sarnecki
3fcfcbbb87 gltestsrc: add Mandelbrot fractal pattern.
https://bugzilla.gnome.org/show_bug.cgi?id=735131
2017-12-09 19:31:46 +00:00
Lubosz Sarnecki
67732e4883 gltestsrc: implement snow pattern with GLSL.
https://bugzilla.gnome.org/show_bug.cgi?id=735131
2017-12-09 19:31:46 +00:00
Matthew Waters
6491af9ffc glupload: provide the output buffer that is rendered into
Allows callers to properly reference count the buffers used for
rendering.

Fixes a redraw race in glimagesink where the previous buffer
(the one used for redraw operations) is freed as soon as the next
buffer is uploaded.

1. glimagesink uploads in _prepare() to texture n
1.1 glupload holds buffer n
2. glimagesink _render()s texture n
3. glimagesink uploads texture n+1
3.1 glupload free previous buffer which deletes texture n
3.2 glupload holds buffer n+1
4. glwindow resize/expose
5. glimagesink redraws with texture n

The race is that the buffer n (the one used for redrawing) is freed as soon as
the buffer n+1 arrives.  There could be any amount of time and number of
redraws between this event and when buffer n+1 is actually rendered and thus
replaces buffer n as the redraw source.

https://bugzilla.gnome.org/show_bug.cgi?id=736740
2017-12-09 19:31:46 +00:00
Sanjay NM
4f6e9f4e41 gl: Removed unreachable break, unused variable
https://bugzilla.gnome.org/show_bug.cgi?id=736957
2017-12-09 19:31:46 +00:00
Ognyan Tonchev
3a70f04113 gltestsrc: do not leak pool in error cases
https://bugzilla.gnome.org/show_bug.cgi?id=736730
2017-12-09 19:31:46 +00:00
Ognyan Tonchev
276b682559 glmixer: do not leak pool in error cases
https://bugzilla.gnome.org/show_bug.cgi?id=736729
2017-12-09 19:31:46 +00:00
Lubosz Sarnecki
e3aa918032 gltransformation: fix issues and expose mvp matrix
* aspect should not be 0 on init
* rename fovy to fov
* add mvp to properties as boxed graphene type
* fix transformation order. scale first
* clear color with 1.0 alpha

https://bugzilla.gnome.org/show_bug.cgi?id=734223
2017-12-09 19:31:46 +00:00
Sebastian Dröge
2c0f8e1107 glimagesink: Add missing break to switch
CID 1232801
2017-12-09 19:31:46 +00:00
Lubosz Sarnecki
e266f6517d glimagesink: expose context
* expose context in draw / reshape callbacks
* add context property

https://bugzilla.gnome.org/show_bug.cgi?id=734482
2017-12-09 19:31:45 +00:00
Matthew Waters
94efcd2595 glmixer: unref the GstGLUpload in the pad if freed while running
Dynamic pipelines that get and release the sink pads will finalize
the pad without going through gst_gl_mixer_stop() which is where the
upload object is usually freed.  Don't leak objects in such case.
2017-12-09 19:31:45 +00:00
Wang Xin-yu (王昕宇)
922cb97758 glvideomixer: avoid gl resource race condition between different thread
https://bugzilla.gnome.org/show_bug.cgi?id=734830
2017-12-09 19:31:45 +00:00
Matthew Waters
c9d63878dd glvideomixer: don't clobber unnecessary GstVideoInfo fields
otherwise we might clobber other important fields such as the frame rate.
2017-12-09 19:31:45 +00:00
Matthew Waters
fc1b2298d6 glvideomixer: get the attribute from the correct shader 2017-12-09 19:31:45 +00:00
Matthew Waters
beb9b95d39 glimagesink: unref the window on navigation event
plugs a memory leak
2017-12-09 19:31:45 +00:00
Tim-Philipp Müller
6bbcefe029 opengl: update element docs for 1.x 2017-12-09 19:31:45 +00:00
Matthew Waters
e18905d057 glvideomixer: add a background property
That's compatible with the compositor/videomixer property

https://bugzilla.gnome.org/show_bug.cgi?id=731954
2017-12-09 19:31:45 +00:00
Vasilis Liaskovitis
7b1a853888 GstGLWindow, GstGLImagesink, x11: Scale navigation events on resized windows
If window is resized, GstStructure pointer values have to be rescaled to
original geometry. A get_surface_dimensions GLWindow class method is added for
this purpose and used in the navigation send_event function.

https://bugzilla.gnome.org/show_bug.cgi?id=703486
2017-12-09 19:31:45 +00:00
Matthew Waters
d3804ee7aa gl: document GST_GL_* environment variables
https://bugzilla.gnome.org/show_bug.cgi?id=733245
2017-12-09 19:31:45 +00:00
Matthew Waters
84a50aefe1 glimagesink: keep the uploaded buffer around on successful redisplay
We might need it later to perform a redisplay.  GstGLUpload will take
of releasing the previous buffer when it receives a new buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=733726
2017-12-09 19:31:44 +00:00
Matthew Waters
e6d5dd04d5 glimagesink: silence gsignal warning
instance '0xblah' has no handler with id '13'
2017-12-09 19:31:44 +00:00
Matthew Waters
884be3de11 glimagesink: remove extra argument from debug call 2017-12-09 19:31:44 +00:00
Vasilis Liaskovitis
c064e4e75e glimagesink: Add navigation interface and callbacks for GstGLWindow mouse/key signals
https://bugzilla.gnome.org/show_bug.cgi?id=703486
2017-12-09 19:31:44 +00:00
Wang Xin-yu (王昕宇)
2ce11e4bac gl: fix multi gl object leaks
1. fix FBO leaks in decide_allocation
2. fix texture leaks in decide_allocation and reset
3. fix texture leaks in FBO incomplete error path
2017-12-09 19:31:44 +00:00
Sebastian Dröge
f942221ebd gl: Always build gstglmixer, not only when full OpenGL support is enabled 2017-12-09 19:31:44 +00:00
Sebastian Dröge
b02a6a98b2 gl: Link to all required libraries but not more 2017-12-09 19:31:44 +00:00
Sebastian Dröge
ab7a152cd4 gl: Move GstGLMixer to the plugin for now
It depends on GstAggregator and we don't want to install headers
for that yet.

https://bugzilla.gnome.org/show_bug.cgi?id=732207
2017-12-09 19:31:44 +00:00
Nicolas Dufresne
8196b9629c glimagesink: Keep aspect ratio by default
The expected default behaviour for video sink is to maintain the
aspect ratio. Fix the default value to reflect this. The property
default was already TRUE, but the value was not initially TRUE.
2017-12-09 19:31:44 +00:00
Sebastian Dröge
23eb9beef8 glimagesink: Chain up to the parent class' finalize function 2017-12-09 19:31:44 +00:00
Sebastian Dröge
8f6224c0ed glimagesink: Make sure to always unref the display
Even if we didn't create a context yet.
2017-12-09 19:31:44 +00:00
Matthew Waters
025d6a87ba glshader: enable glshader on GLES2 2017-12-09 19:31:43 +00:00
Julien Isorce
e5c3605056 glcolorscale: do passthrough on same caps
See https://bugzilla.gnome.org/show_bug.cgi?id=732178
2017-12-09 19:31:43 +00:00
Julien Isorce
c18a109b42 gl: enable glvideomixer on GLES2 2017-12-09 19:31:43 +00:00
Matthew Waters
d86208e6ad glvideomixer: bas output width/height on the pad properties
Allows automatic negotiation of the size in the following case:
gst-launch-1.0 glvideomixer name=m sink_0::xpos=0 sink_1::xpos=320 ! glimagesink \
    videotestsrc ! m. \
    videotestsrc pattern=1 ! m.

https://bugzilla.gnome.org/show_bug.cgi?id=731878
2017-12-09 19:31:43 +00:00
Matthew Waters
dc4f9575b1 glvideomixer: don't clobber already allocated shader 2017-12-09 19:31:43 +00:00
Matthew Waters
3e092e1579 gl: XInitThreads when env variable is set
This is too allow gst-launch debugging with multiple GL contexts as
well as avoiding segfaulting innocent gtk+ apps that have not called
XInitThreads.

https://bugzilla.gnome.org/show_bug.cgi?id=731525
2017-12-09 19:31:43 +00:00
Sebastian Dröge
c88abf6ac2 gl: Need to link to new badvideo library for the video aggregator base class 2017-12-09 19:31:43 +00:00
Thibault Saunier
097373ed19 gl:glvideomixer: Add the Compositor in the element metadata class
So it is possible to pick one compositing element from the registry
2017-12-09 19:31:43 +00:00
Thibault Saunier
30a9ef3768 gl: Port glmixer to the GstVideoAggregator baseclass
https://bugzilla.gnome.org/show_bug.cgi?id=731921
2017-12-09 19:31:43 +00:00
Lubosz Sarnecki
7e6962c95e opengl: add element for transforming video geometry
* add graphene as soft dependency for linear algebra
2017-12-09 19:31:43 +00:00
Matthew Waters
918ff5b25f glfiltershader: port to GLES2
Provide a time variable
2017-12-09 19:31:43 +00:00
Matthew Waters
21c0eed027 glvideomixer: silence incorrect number of arguments in format warning 2017-12-09 19:31:43 +00:00
Matthew Waters
b1e3630974 glvideomixer: wire up the alpha pad property 2017-12-09 19:31:43 +00:00
Matthew Waters
8226bb24cc glvideomixer: support input frame scaling 2017-12-09 19:31:43 +00:00
Matthew Waters
fc45211a9d glvideomixer: add positioning of input streams
https://bugzilla.gnome.org/show_bug.cgi?id=729798
2017-12-09 19:31:43 +00:00
Matthew Waters
e7cc498fb6 glfilterapp: actually emit the client-draw signal 2017-12-09 19:31:43 +00:00
Matthew Waters
e523cdd21a glfilterapp: remove the reshape/draw properties
The reshape property was never used.
Replace the draw property with a signal.

Based on patch by Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>

https://bugzilla.gnome.org/show_bug.cgi?id=704507
2017-12-09 19:31:42 +00:00
Matthew Waters
90b86e73e7 glimagesink: replace pointer properties with signals
Based on patch by Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>

https://bugzilla.gnome.org/show_bug.cgi?id=704507
2017-12-09 19:31:42 +00:00
Matthieu Bouron
f34864fb87 glimagesink: improve state change debug message 2017-12-09 19:31:42 +00:00
Matthew Waters
e425bd31a1 glimagesink: unref the old buffer outside the lock
it could very well deadlock

https://bugzilla.gnome.org/show_bug.cgi?id=723529
2017-12-09 19:31:42 +00:00
Matthew Waters
98e9ca7270 Revert "[880/906] glimagesink: remove unused stored_buffer field"
This reverts commit af3a68db7d.

Conflicts:
	ext/gl/gstglimagesink.c

https://bugzilla.gnome.org/show_bug.cgi?id=723529
2017-12-09 19:31:42 +00:00
Matthew Waters
4a8b31afd6 glfeature: remove GST_GL_API_GLES3
instead check the gl version using gst_gl_context_check_gl_version()
2017-12-09 19:31:42 +00:00
Matthew Waters
32343333aa gl/upload: add GstGLUploadMeta object
That simply deals with the provider aspect of GstVideoGLTextureUploadMeta.
2017-12-09 19:31:41 +00:00
Julien Isorce
1c14c43c90 glimagesink: make it actually honor show-preroll-frame property
https://bugzilla.gnome.org/show_bug.cgi?id=730802
2017-12-09 19:31:41 +00:00
Matthew Waters
51fdeef98b gl/eglimage: add eglimage context feature
Allows us to selectively use EGLImages only when available

https://bugzilla.gnome.org/show_bug.cgi?id=728234
2017-12-09 19:31:41 +00:00
Sebastian Dröge
8b7d8a95ea glimagesink: Check if context creation failed before trying to use it
Otherwise we will cause assertions everywhere by passing NULL to functions
and eventually crash when dereferencing a NULL pointer.

https://bugzilla.gnome.org/show_bug.cgi?id=730069
2017-12-09 19:31:40 +00:00
Matthew Waters
9172cb8839 gl/download: update to be similar to the glupload semantics 2017-12-09 19:31:40 +00:00
Julien Isorce
17946cc0a9 gleffects: use gl_vtable 2017-12-09 19:31:40 +00:00