Commit graph

1994 commits

Author SHA1 Message Date
Matthew Waters 62d0bac993 gl/gi: some annotation updates for called functions
With scope, closure, destroy annotations
2017-12-09 19:32:23 +00:00
Matthew Waters 3ef6af7b0f gl/gi: also include GstVideo
Removes all the unknown type GstVideo* warnings while building the GIR
file.
2017-12-09 19:32:23 +00:00
Matthew Waters c6c7f421e3 glfeature: move internal functions into a private header
Don't expose them to the outside world
2017-12-09 19:32:23 +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 9bafa08a5d gl/docs: massive update
- add Since: markers where necessary.
- document structs
- add documentation headers for each module (short_description,
  see_also, etc)
- reduce the number of warnings gtk-doc outputs
- fix spelling mistakes
2017-12-09 19:32:23 +00:00
Matthew Waters 51a6f47bf8 gl/docs: document new API added in 1.10
GstGLRenderbuffer
GstGLFramebuffer
GstGLQuery
GstEGLImage
GstGLMemoryEGL
2017-12-09 19:32:23 +00:00
Matthew Waters 8faebcf915 glsl: fix #version 150 not working with profiles
The spec allows the core/compatibility profiles to be used
with #version 150.

Also tighten up the tests to check for default profiles being chosen
correctly.
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan a3968fa896 build: Also need to define GST_EXPORTS for Autotools
The change to use GST_EXPORT for symbols under Windows requires
GST_EXPORTS for internal use, and that is also needed under Autotools.
The same thing is done for gstreamer-1.0.dll in -core.
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan d57808385c gstgl: Re-enable WINAPI on _MSC_VER
The calling convention may be deprecated, but we still need it for
OpenGL. The build issue was caused by an incorrect syntax being used for
the WINAPI (__stdcall) prototype in function pointers which was accepted
by GCC but is rejected by MSVC.
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan 48fcf632bd plugins: Use explicit type conversion from enums
MSVC warns about this because it's a C++ compiler, and this actually
results in useful things such as the incorrect 'gboolean' return value
for functions that return GstFlowReturn, so let's do explicit
conversions to reduce the noise and increase its efficacy.
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan 503822eb20 Explicitly define float constants as float
With MSVC, this gives the following warning:

warning C4305: 'function': truncation from 'double' to 'gfloat'

Apparently, MSVC does not figure out what type to use for constants
based on the assignment. This warning is very spammy, so let's try to
fix it.
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan 9758f25430 Fix incorrect return type in several functions
All these should return GstFlowReturn, not gboolean
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan 6106816f50 gstgl: Add GST_EXPORT to all symbols used on Windows
This is a requirement for those symbols to be exported in gstgl-1.0.dll
when building with the MSVC compiler
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan c7c2a68de2 meson: Add support for building WGL on Windows
Currently only tested with MSVC.
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan 0d37cc3b11 ext/gl: Don't define boolean on Windows with MSVC
The headers we include already define boolean on Windows with MSVC, and
it leads to a typedef redefinition error with jpeglib.h which tries to
redefine it in jmorecfg.h
2017-12-09 19:32:23 +00:00
Nirbheek Chauhan 45ad33c94c gstgl: Porting fixes for MSVC with Meson
GL/gl.h needs windows.h on MSVC

WINAPI should not be used with MSVC. It also causes a build error.
2017-12-09 19:32:23 +00:00
Matthew Waters 08e20ff131 glsyncmeta: don't glFinish() everytime a sync point is set
At minimum, we only need to glFlush() if we are in a shared GL context
environment.  Move the glFinish() to when the actual wait is requested
which may be never.  Improves the throughput on older GL systems without
GL3/GLES3 and/or fence sync objects.
2017-12-09 19:32:23 +00:00
Matthew Waters 99f5ac40db meson: gl: add support for building with dispmanx on the rpi 2017-12-09 19:32:23 +00:00
Matthew Waters 36b8ed8712 gl/eglimage: Fix passing the destroy function to gst_egl_image_new_wrapped
The function pointer and the user data arguments were swapped in both
uses.

https://bugzilla.gnome.org/show_bug.cgi?id=769382
2017-12-09 19:32:23 +00:00
Munez e49f723a07 Implemented gst_video_overlay_set_window_handle()
https://bugzilla.gnome.org/show_bug.cgi?id=772608
2017-12-09 19:32:23 +00:00
Matthew Waters 78d8e895df meson: gl: fix detection of glx without gl
We need to check for libGL if we may use desktop OpenGL *or* GLX.
2017-12-09 19:32:23 +00:00
Matthew Waters f70d4ec22d meson: gl: fix incorrect error string
Use the winsys variable for an incorrect winsys provided
2017-12-09 19:32:23 +00:00
Munez 0207ce9818 gl/dispmanx: egl_show should resize the window only if there is no render rectangle set
https://bugzilla.gnome.org/show_bug.cgi?id=772699
2017-12-09 19:32:23 +00:00
Munez 7a41cbd599 gl/dispmanx: Fix set_render_rectangle typo
https://bugzilla.gnome.org/show_bug.cgi?id=772698
2017-12-09 19:32:23 +00:00
Matthew Waters 126ee924c0 glwindow: don't use g_thread_join() to join the navigation thread
Using g_thread_join() in _finalize() handlers may result in a deadlock
joining the current thread when the last reference is held by a signal
handler.

e.g.:

error 'Resource deadlock avoided' during 'pthread_join (pt->system_thread, NULL)'

The backtrace looks like this:
[...]
g_thread_join ()
gst_gl_window_finalize ()
gst_gl_window_x11_finalize ()
g_object_unref ()
g_value_unset ()
g_signal_emit_valist ()
g_signal_emit ()
gst_gl_window_send_mouse_event ()
gst_gl_window_mouse_event_cb ()
g_main_dispatch ()
[..]
g_main_loop_run ()
gst_gl_window_navigation_thread ()
g_thread_proxy ()
start_thread ()
clone ()
2017-12-09 19:32:23 +00:00
Matthew Waters c0cb6eacb5 gluploadelement: fix leak of upload library object
When only linking the element, the upload object will be created from
_transform_caps() but will never be unreffed as the only case is in _stop().

Add an unref if non-NULL to a new finalize handler for this case.
2017-12-09 19:32:23 +00:00
Matthew Waters 7ab50a8e8f tests/gl: make sure all GL commands are executed on the GL thread
e.g. the final glGetError() must also be completed on the GL thread
2017-12-09 19:32:22 +00:00
Matthew Waters 112f85a474 gl/win32: remove egl implementation
It hasn't been used in ages and is dead code.
2017-12-09 19:32:22 +00:00
Gwang Yoon Hwang 485dffa6d5 gl/dispmanx: Implements set_render_rectangle to adjust the position of window
We cannot set the x, y coordinate of the video frame at the dispmanx at
this point. We need to teach dispmanx backend to understand about
set_render_rectangle API to draw a video with other UI.

This patch keeps the current behavior which places video frame at the
center of the display if there is no set_render_rectangle call to the
dispmanx window.

https://bugzilla.gnome.org/show_bug.cgi?id=766018
2017-12-09 19:32:22 +00:00
Matthew Waters 1e8c7e0f31 gl: add necessary padding bytes to all public structs 2017-12-09 19:32:22 +00:00
Matthew Waters 7cbac97b94 gldisplay: also free the GWeakRef when removing dead contexts
Otherwise we leak GWeakRef's.

Found with make -C tests/check libs/gstglcontext.valgrind
2017-12-09 19:32:22 +00:00
Matthew Waters cb0f02c78a glcolorbalance: reconfigure on passthrough changes
Fixes an assertion when moving from passthrough to non-passthrough

Without an explicit reconfigure, glfiter won't have created the GL
resources such as the FBO, GL bufferpool, etc and basetransform will
allocate sysmem buffers instead.
2017-12-09 19:32:22 +00:00
Matthew Waters f678dcaf2b meson/gl: use separate deps for gl and glx
e.g. passing with_gl_api=gles2 would still build the glx code but not be
linking against the libGL library which is where the glX* functions are
located and would result in a linker error.

Solved by checking for the libGL library if either opengl or glx may be
needed and then disabling the corresponding deps as requested.
2017-12-09 19:32:22 +00:00
Matthew Waters 8d60fa2327 meson: add some starting build files for GL
Currently only works on linux with egl/glx + wayland/x11 but the general
principals have been layed out for adding the other GL platforms/winsys'.
2017-12-09 19:32:22 +00:00
Alistair Buxton 6d8456e018 gl/examples: Really remove references to $(GST_PLUGINS_GL_*).
These seem to have been missed in the previous commit to this file.

https://bugzilla.gnome.org/show_bug.cgi?id=771023
2017-12-09 19:32:22 +00:00
Alistair Buxton 94f5fc5d83 gl: Remove duplicate GL_CFLAGS in Makefile.am.
https://bugzilla.gnome.org/show_bug.cgi?id=771021
2017-12-09 19:32:22 +00:00
Alessandro Decina acd33a240f glupload: create the GstGLUpload object in ::transform_caps
Previously it was created in the init function and destroyed in ::stop, which
lead to segfaults when reusing the element.

Now the upload object is created in ::transform_caps if it is NULL, which is the
earliest we need it. The other vfuncs already bail out if the upload object is
NULL, which means that negotiation wasn't done.
2017-12-09 19:32:22 +00:00
Jan Schmidt ae89055e67 gl: Remove extra duplicate typedef of GstGLFramebuffer
It's triggering a warning building git master on OSX
2017-12-09 19:32:22 +00:00
Matthew Waters 00aa5748d3 tests/glupload: support opengl3 properly instead of spewing GL errors 2017-12-09 19:32:22 +00:00
Matthew Waters 19e50de319 gl/pkgconfig: add the lib include dir to the list of includes
714d8aa in core removed this include dir from it's pkgconfig file.

https://bugzilla.gnome.org/show_bug.cgi?id=770523
2017-12-09 19:32:22 +00:00
Alessandro Decina 29d6825f11 glupload: fix tests and check for the new RECONFIGURE behaviour
The tests were broken since 91fea30, which changed glupload to return
GST_GL_UPLOAD_RECONFIGURE if the texture target in the input buffers doesn't
match the texture-target configured in the output caps.

This commit fixes that and adds more checks for the new behaviour.
2017-12-09 19:32:22 +00:00
Alessandro Decina cc9f65f191 gstglupload: make the GLMemoryUpload method output the correct texture-target
Now when used with video/x-raw as input, the GLMemoryUpload method checks for
->tex_target in input GLMemory(es) and sets the output texture-target
accordingly.

Fixes video corruption with a pipeline like avfvideosrc ! video/x-raw !
glimagesink where on macos avfvideosrc pushes RECTANGLE textures but glupload
was configuring texture-target=2D as output.
2017-12-09 19:32:22 +00:00
Jan Schmidt bcc29643db gl: Update glvideomixer doc 2017-12-09 19:32:22 +00:00
Jan Schmidt fb0f015dfe gl: Add/update docs for glviewconvert, glstereomix
Add some example pipelines for glstereomix, and fix up
the example pipelines for glviewconvert
2017-12-09 19:32:22 +00:00
Jan Schmidt 97bef4e8a5 glstereomix: Fix caps negotiation
The videoaggregator negotiation sequence changed some time
back and broke glstereomix. Instead of doing nego incorrectly
in the find_best_format() vfunc, do it directly in the
update_caps() method.
2017-12-09 19:32:22 +00:00
Jan Schmidt 179f7c00fe glviewconvert: Fix texture target fixation
Don't set the chosen texture-target into the wrong structure.
The input caps may not be writable, and in any case - the
intention was to configure the othercaps. Also, remove an
extra unref - the othercaps ref is consumed by
gst_caps_make_writable already.
2017-12-09 19:32:22 +00:00
Xabier Rodriguez Calvar ab0a0e6fcb glvideoflip: implement GstVideoDirection interface
It implements now this interface with its video-direction
property. Values are changed to GstVideoOrientationMethod but they have
the same value than the originals.

https://bugzilla.gnome.org/show_bug.cgi?id=768687
2017-12-09 19:32:22 +00:00
Nirbheek Chauhan 598f8e0121 Add support for Meson as alternative/parallel build system
https://github.com/mesonbuild/meson

With contributions from:

Tim-Philipp Müller <tim@centricular.com>
Matej Knopp <matej.knopp@gmail.com>
Jussi Pakkanen <jpakkane@gmail.com> (original port)

Highlights of the features provided are:
* Faster builds on Linux (~40-50% faster)
* The ability to build with MSVC on Windows
* Generate Visual Studio project files
* Generate XCode project files
* Much faster builds on Windows (on-par with Linux)
* Seriously fast configure and building on embedded

... and many more. For more details see:

http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html

Building with Meson should work on both Linux and Windows, but may
need a few more tweaks on other operating systems.
2017-12-09 19:32:22 +00:00
Matthew Waters 8f82ec9254 gltransformation: rewrite the inverse transformation logic
It now returns the correct values for both orthographic and perspective
projections and takes into account the aspect ratio of the video, handles
the Y-flipping in GL and by us and uses some more helpers from graphene.
2017-12-09 19:32:22 +00:00
Matthew Waters 792299d9ae glwindow: marshal gst_gl_window_resize through the window loop
saves having every caller do it themselves.
2017-12-09 19:32:22 +00:00