Commit graph

1224 commits

Author SHA1 Message Date
Matthew Waters
69a90b5bfe gl/syncmeta: implement synchronisation without glFenceSync
Uses glFinish as that's the best we have for lesser OpenGL versions.
2015-08-08 17:30:42 +02:00
Matthew Waters
83995c0935 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.
2015-08-08 15:32:17 +02:00
Sebastian Dröge
b21f01276c 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.
2015-07-29 19:11:58 +01:00
Nicolas Dufresne
f79cad55e2 glupload: Add fixme about using bufferpool for raw
http://bugzilla.gnome.org/show_bug.cgi?id=752937
2015-07-28 08:59:48 -04:00
Nicolas Dufresne
adbd9d3c05 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
2015-07-28 08:54:29 -04:00
Nicolas Dufresne
eb4d3c352a Revert "glupload: memcpy on raw data upload"
This reverts commit 82c0189b28.

https://bugzilla.gnome.org/show_bug.cgi?id=752937
2015-07-28 08:54:29 -04:00
Matthew Waters
ee94aa003a 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)
2015-07-27 21:54:27 +10:00
Matthew Waters
1137ed3e45 gl/cocoa: fix definition of gst_gl_context_new
gstglcontext_cocoa.m:75:1: error: conflicting types for 'gst_gl_context_cocoa_new'
2015-07-27 20:03:05 +10:00
Matthew Waters
2beaabea12 gl/win32: fix definition of gst_gl_window_win32_new 2015-07-27 20:00:47 +10:00
Matthew Waters
4d9ae8ebba wayland: fail window open if the display is the correct type
Errors out cleanly if a wayland compositor is not running
2015-07-27 18:23:33 +10:00
Matthew Waters
3b89d8a23c 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
2015-07-27 18:23:29 +10:00
Matthew Waters
dbcae77e02 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
2015-07-27 18:23:17 +10:00
Julien Isorce
5e4b94c1bb 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
2015-07-27 09:03:58 +01:00
Jan Schmidt
45f8a27211 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
2015-07-27 17:21:33 +10:00
Julien Isorce
90a1ff1383 gl: move GL_NUM_EXTENSIONS definition after gl.h
https://bugzilla.gnome.org/show_bug.cgi?id=752743
2015-07-24 00:03:26 +01:00
Luis de Bethencourt
7ecf6b0d6c glupload: fix memory leak
GstCapsFeatures need to be freed with gst_caps_features_free() after use.

CID #1312136, CID #1312136
2015-07-23 10:58:21 +01:00
Nicolas Dufresne
e310e6d540 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
2015-07-22 17:00:25 -04:00
Nicolas Dufresne
9c020443e6 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
2015-07-22 17:00:25 -04:00
Nicolas Dufresne
d92375eaae 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
2015-07-22 14:06:34 -04:00
Nicolas Dufresne
4a1e63817f libgstgl: Makefile style fix 2015-07-22 13:33:12 -04:00
Nicolas Dufresne
17788157a1 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
2015-07-22 13:17:18 -04:00
Lubosz Sarnecki
b155f5d73e gloverlaycompositor: Create own shader object
Make gloverlaycompositor independent of the shader used in the sink.

https://bugzilla.gnome.org/show_bug.cgi?id=745107
2015-07-22 13:16:39 -04:00
Luis de Bethencourt
c9820f20e2 gloverlaycompositor: for loop initial declarations are only allowed in C99 mode
Fixes compiler warnings
2015-07-21 13:11:21 +01:00
Julien Isorce
57f389d9ce gl: use gst_gl_display_create_context in more elements.
glbasefilter, glbasemixer and gltestsrc.

https://bugzilla.gnome.org/show_bug.cgi?id=750310
2015-07-21 11:37:21 +01:00
Matthew Waters
2fc017e822 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
2015-07-21 17:34:27 +10:00
Matthew Waters
b3357754c1 glcolorconvert: add RGB to NV12/NV21 conversion 2015-07-21 15:39:35 +10:00
Lubosz Sarnecki
555428872c 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
2015-07-20 14:41:12 -04:00
Lubosz Sarnecki
6eaeefc6a9 glupload: Detect overlay meta buffers correctly
https://bugzilla.gnome.org/show_bug.cgi?id=745107
2015-07-20 14:41:12 -04:00
Lubosz Sarnecki
a7d1b7fcad glimagesinkbin: Add GstVideoOverlayCompositionMeta caps features
https://bugzilla.gnome.org/show_bug.cgi?id=745107
2015-07-20 14:41:12 -04:00
Lubosz Sarnecki
b2601a7b43 gloverlaycompositor: Add GstGLOverlayCompositor class
Manages the GstGLCompositionOverlay objects,
caches already uploaded overlays and draws them.

https://bugzilla.gnome.org/show_bug.cgi?id=745107
2015-07-20 14:41:11 -04:00
Lubosz Sarnecki
b4a4999bb2 glcompositionoverlay: Add compatibility for GL contexts without glGenVertexArrays
https://bugzilla.gnome.org/show_bug.cgi?id=745107
2015-07-20 14:41:11 -04:00
Lubosz Sarnecki
7c7f84c603 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
2015-07-20 14:41:11 -04:00
Lubosz Sarnecki
60c8b73cf5 glupload: Move debug init to top of the file
https://bugzilla.gnome.org/show_bug.cgi?id=745107
2015-07-20 14:06:29 -04:00
Matthew Waters
d13201fedb glmemory: check for pbo availability before attempting pbo download
https://bugzilla.gnome.org/show_bug.cgi?id=751165
2015-07-20 18:19:02 +10:00
Matthew Waters
d5996de5d7 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.
2015-07-18 18:18:22 +10:00
Matthew Waters
74711c214d glcontext: consolidate get_proc_address function definition
Pass the GstGLAPI directly.
2015-07-18 17:10:04 +10:00
Matthew Waters
e96431e9b1 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.
2015-07-18 16:31:43 +10:00
Matthew Waters
be9ad5eeb2 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.
2015-07-18 15:34:55 +10:00
Matthew Waters
b679cc2238 glcontext: use the debug object variant for completeness 2015-07-18 15:34:55 +10:00
Matthew Waters
82c0189b28 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.
2015-07-14 17:49:17 +10:00
Matthew Waters
19f2b3b882 glbasebuffer: add some debug and zero the data pointers on init 2015-07-14 17:47:29 +10:00
Sebastian Dröge
34622c3961 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
2015-07-08 22:29:27 +10:00
Matthew Waters
d5a39896dc download: only start a download transfer for sysmem caps features 2015-07-07 22:38:08 +10:00
Hyunjun Ko
ba18bc5398 glsyncmeta: transform func: return FALSE if not supported or failed
https://bugzilla.gnome.org/show_bug.cgi?id=751778
2015-07-07 13:39:08 +03:00
Matthew Waters
7f44ee0514 android: add missing egl.h include 2015-07-07 16:39:09 +10:00
Matthew Waters
26df88cd24 gl: consolidate egl header includes to egl-only headers
They may conflict with other headers.
2015-07-07 13:12:49 +10:00
Julien Isorce
f037b28a7b 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.
2015-07-02 15:16:56 +01:00
Nicolas Dufresne
fe283a9aeb gl: Don't leak pool if set_config failed 2015-07-02 09:40:05 -04:00
Nicolas Dufresne
38abd7f019 glfilter: Don't cache buffer pool
Caching and sharing to multiple element the same pool prevents
renegotiation from passthrough to not passthrough.
2015-07-02 09:40:05 -04:00
Sebastian Dröge
cb01fbfc27 Revert "gl/window/x11: don't create our own X11 display"
This reverts commit 5697b6b89b.

https://bugzilla.gnome.org/show_bug.cgi?id=751003
2015-06-23 16:46:39 +02:00
Sebastian Dröge
ad579b73e6 Revert "eagl: Don't dispatch_sync() to the main thread if we are on the main thread"
This reverts commit 0bff481011.

It wasn't supposed to be merged and also doesn't fix the problem.
2015-06-23 14:16:39 +02:00
Sebastian Dröge
0bff481011 eagl: Don't dispatch_sync() to the main thread if we are on the main thread
This will otherwise deadlock.

https://bugzilla.gnome.org/show_bug.cgi?id=751101
2015-06-23 11:05:06 +02:00
John Ludwig
1ece34af2c gl: Include texParameterf in the GL function table
https://bugzilla.gnome.org/show_bug.cgi?id=751228
2015-06-23 10:31:44 +02:00
Julien Isorce
2d62f1c479 glmemory: fix consistency about pbo availability.
https://bugzilla.gnome.org/show_bug.cgi?id=751165
2015-06-22 15:12:11 +01:00
Julien Isorce
66d833fcf2 gldisplay: add gst_gl_display_create_context
It also emits a create-context signal so that an application
can provide an external GstGLContext backend.

https://bugzilla.gnome.org/show_bug.cgi?id=750310
2015-06-19 13:10:30 +01:00
Julien Isorce
b0995fcca0 glcontext: move display from priv
https://bugzilla.gnome.org/show_bug.cgi?id=750310
2015-06-19 13:09:53 +01:00
Julien Isorce
5c23b98e27 Revert "glcontext: add gst_gl_context_set_display helper"
This reverts commit 71b8103cbd.
2015-06-19 13:09:46 +01:00
Julien Isorce
5b003b68ca Revert "gl: add GstGLContextGPUProcess backend"
This reverts commit b377112ee3.
2015-06-19 13:08:49 +01:00
Nicolas Dufresne
ca950fef14 glviewconvert: Fix GLES2 compatibility 2015-06-18 18:09:55 -04:00
Nicolas Dufresne
0e1303a294 glviewconvert: Fix broken validity check 2015-06-18 18:02:21 -04:00
Jan Schmidt
1aa3911d40 gl libs: Add glviewconvert helper object
Add API for a helper object that can convert between different
stereoscopic video representations, and later do filtering
of multiple view streams.

https://bugzilla.gnome.org/show_bug.cgi?id=611157
2015-06-19 01:49:32 +10:00
Matthew Waters
c3a47c910d glmemory: separate pbo transfer from texture transfers
When supported, the potentially longer pbo upload/download can be
initiated before the texture upload/download, potentially increasing
throughput.
2015-06-12 16:59:20 +10:00
Matthew Waters
7d8d1f8206 glmemory: implement on top of glbasebuffer
Provides convenient access to PBO usage.

Currently texture updates are coupled tightly to data transfers.
2015-06-12 16:59:20 +10:00
Matthew Waters
6e88b07cc5 gl: new glbasebuffer GstMemory object
Provides generic handling of GL buffer objects accessible using
the GL bind points (GL_ARRAY_BUFFER, GL_PIXEL_*_BUFFER).

Implementation based off the current GstGLMemory.
2015-06-12 16:59:20 +10:00
Matthew Waters
2741093c97 gl/prototypes: add some buffer function prototypes 2015-06-12 16:09:49 +10:00
Matthew Waters
ea4867dfa7 gl/window/x11: only listen on the X Display when needed
5697b6b89b causes us to possibly listen
on a toolkit provided Display connection.  We thus could eat their
precious winsys events.  Only listen if we need to
(!foreign_display or videooverlay).
2015-06-12 13:14:57 +10:00
Jan Schmidt
e2ce1eff36 gl: Add support for multiple views in upload, colour convert and download
Support multiple attached views on input/output buffers
by processing each one, not just the first.
2015-06-12 00:39:15 +10:00
Matthew Waters
5697b6b89b gl/window/x11: don't create our own X11 display
It's not needed anymore with most window operations occuring in the
GL thread.
2015-06-12 00:34:58 +10:00
Matthew Waters
e2adfb8bf2 gl/window/x11: handle_events() may be called before the window has been created
Fixes an XIO fatal error
2015-06-12 00:34:58 +10:00
Sebastian Dröge
e7ca427ddb gl: OES_vertex_array_object is improperly implemented on PowerVR SGX 544MP
https://bugzilla.gnome.org/show_bug.cgi?id=750185
2015-06-10 13:31:16 +02:00
Thiago Santos
045bfa10fe Fix a common typo: retreive -> retrieve
Seems to have been copy pasted around a few places
2015-06-05 09:43:35 -03:00
Philippe Normand
53a149f5d4 gl/dispmanx: Fix build 2015-06-04 09:42:01 +02:00
Matthew Waters
050e12c62a gl/window/dispmanx: fix compiler warning 2015-06-04 15:01:16 +10:00
Matthew Waters
fbbf1ac324 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
2015-06-04 12:16:35 +10:00
Julien Isorce
b7808270ca glwindow_cocoa: use parent default implementation
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=750337
2015-06-03 21:24:59 +01:00
Jan Schmidt
840f63896f glsyncmeta: Set new sync point when copying
Set a new sync point when copying instead of
transferring the (non-refcounted) GL sync object
from the source meta.

https://bugzilla.gnome.org/show_bug.cgi?id=750279
2015-06-03 00:50:29 +10:00
Jan Schmidt
0ce8d77e54 glsyncmeta: Add some debug output 2015-06-03 00:50:28 +10:00
Matthew Waters
ab2656ebe5 glmemory: provide compatibility definition for GLES2 for GL_RGBA8 2015-06-02 17:24:18 +10:00
Matthew Waters
d914cc6e72 gl: consolidate internal_rgba_format into glmemory
Expose some useful value format conversion functions available in
GstGLMemory.
2015-06-02 16:33:44 +10:00
Julien Isorce
742dba0c2a glcontext_gpu_process: close the window when done 2015-06-01 14:09:54 +01:00
Julien Isorce
e9c2e93f3f glwindow_gpu_process: avoid empty struct 2015-06-01 14:09:54 +01:00
Julien Isorce
d843b9e8c3 glwindow: move main loop/context creation back to init/finalize
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=750199
2015-06-01 14:09:34 +01:00
Sebastian Dröge
5b0c3ac153 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 = {
                                        ^
2015-05-31 21:31:00 +02:00
Matthew Waters
360f0be2a8 glwindow: fix compiler error
gstglwindow.c:1118:544: error: 'return' with no value, in function returning non-void [-Werror]
   g_return_if_fail (GST_GL_IS_WINDOW (window));
2015-05-31 16:53:14 +10:00
Matthew Waters
e385adc241 gl/wayland: implement setting the render rectangle
Places our subsurface at the rectangle provided position
2015-05-31 16:09:34 +10:00
Matthew Waters
fac0cdc7ac glwindow: handle gst_video_overlay_set_render_rectangle 2015-05-31 16:04:13 +10:00
Matthew Waters
2442c240f5 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.
2015-05-31 16:04:13 +10:00
Matthew Waters
de389e07dc gl/wayland: implement basic video overlay support via subsurfaces
Currently does not position the subsurface relative to the parent surface at all
2015-05-31 16:04:13 +10:00
Matthew Waters
1dc0f40a35 gl/wayland: allow a NULL wl_event_queue
perform operations on the default wl_display event queue in that case
2015-05-31 16:04:13 +10:00
Matthew Waters
b39ccd3745 gl/utils: implement wayland display GstContext
requried for sharing GL contexts or subsurface support
2015-05-31 16:04:12 +10:00
Matthew Waters
be9739cd2f 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
2015-05-31 16:04:12 +10:00
Jan Schmidt
845256bf61 gl: Don't leak temp strings in _RGB_pixel_order()
Fix a memory leak of temporary strings when computing
swizzling of RGB formats.
2015-05-30 02:46:24 +10:00
Jan Schmidt
5543803acf 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.
2015-05-30 02:31:39 +10:00
Jan Schmidt
b6002141ab 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.
2015-05-30 02:31:39 +10:00
Julien Isorce
b377112ee3 gl: add GstGLContextGPUProcess backend
It builds its GL vtable from a proc address provided
by the application.
2015-05-27 17:22:40 +01:00
Julien Isorce
ba5bf50d5f 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.
2015-05-27 17:20:05 +01:00
Julien Isorce
c5f8c789a3 glwindow_x11: use parent default implementation 2015-05-27 17:10:32 +01:00
Julien Isorce
48751c8d8a glcontext_glx: rename variable from window to context 2015-05-27 17:10:19 +01:00
Julien Isorce
9364fc5d7f glwindow: initialize debug in class_init
Useful if one uses gst_gl_window_x11_new directly
instead of gst_gl_window_new.
2015-05-27 17:10:08 +01:00
Julien Isorce
3bc4f55d3d glcontext: initialize debug in class_init
Useful if one uses gst_gl_context_egl_new directly
instead of gst_gl_context_new.
2015-05-27 17:09:53 +01:00