Commit graph

3282 commits

Author SHA1 Message Date
Matthew Waters
f9d463d80e glwindow: remove the navigation thread
This functionality can now effectively be implemented with the display event
thread.
2016-11-08 15:14:27 +11:00
Matthew Waters
4f6c226bd2 gl/x11: use xcb instead of libX11
- xcb is supposedly thread-safe!

videotestsrc ! glimagesink now doesn't spuriously result in a
'call XInitThreads()' error however if anybody else is using X11,
then XInitThreads() still needs to be called and multiple glimagesink's
still need XInitThreads().

Everything still takes libX11 handles as they are compatible with the xcb
variants.  Unfortunately we cannot move fully over to xcb due to GLX being
entirely based on Xlib.  It's also impossible to transform a xcb_connection
to a Display which means we require X11 handles.
2016-11-08 15:14:26 +11:00
Matthew Waters
e4916fb1ef gldisplay: add a list of glwindow's
With the event thread on the display, for a particular winsys event
we need to be able to retreive the window that the event matches.
2016-11-08 15:14:26 +11:00
Matthew Waters
1a6c4be242 gldisplay: add a dedicated event thread
Will take the place of the navigation event thread for dealing with
winsys events.
2016-11-08 12:50:45 +11:00
Matthew Waters
92ba1d0df6 gl: don't expose OpenGL prototypes
We roll our own to avoid depending a certain OpenGL header version
2016-11-08 12:46:09 +11:00
Matthew Waters
2a440f60e4 gl/cocoa: don't install the gstglcontext_cocoa.h header
It's not needed to be exposed
2016-11-08 12:46:09 +11:00
Matthew Waters
7dc7ec94e7 gl/android: don't install the android window header
It's not needed
2016-11-08 12:46:09 +11:00
Matthew Waters
86930b6d11 gl: add padding to all exposed winsys/platform-specific structs 2016-11-08 12:46:09 +11:00
Matthew Waters
2209c5d97f gl/wayland: install the gstgldisplay_wayland.h header
As it is used by other OpenGL sinks (gtkglsink, qmlglsink)
2016-11-08 12:45:55 +11:00
Matthew Waters
c6326530cc gl/egl: don't install the gstglcontext_egl.h header
It's not needed to be exposed and there are no users of the API.
2016-11-08 02:44:30 +11:00
Matthew Waters
cafcde5586 glfilter: remove display_init/reset
They are mirrors of GstGLBaseFilter's gl_start() and gl_stop() virtual methods
so use them instead.
2016-11-08 02:21:20 +11:00
Matthew Waters
fe64686c8c gldisplay: Fix inverted precondition
A GError argument must either be null or point to a NULL GError.

https://developer.gnome.org/glib/stable/glib-Error-Reporting.html
2016-11-03 18:21:55 +11:00
Matthew Waters
23e147f619 gl/gi: some annotation updates for called functions
With scope, closure, destroy annotations
2016-11-03 16:16:12 +11:00
Matthew Waters
61a3c55d55 gl/gi: also include GstVideo
Removes all the unknown type GstVideo* warnings while building the GIR
file.
2016-11-03 16:16:12 +11:00
Matthew Waters
19752be030 glfeature: move internal functions into a private header
Don't expose them to the outside world
2016-11-03 16:16:12 +11:00
Matthew Waters
41a6448918 gl: GST_GL_TYPE -> GST_TYPE_GL
Some deprecated symbols are kept for backwards compatibility
2016-11-03 16:16:12 +11:00
Matthew Waters
0dc003bf30 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
2016-11-03 16:16:11 +11:00
Matthew Waters
1296741d3d gl/docs: document new API added in 1.10
GstGLRenderbuffer
GstGLFramebuffer
GstGLQuery
GstEGLImage
GstGLMemoryEGL
2016-11-03 12:08:44 +11:00
Matthew Waters
4b43862cdb 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.
2016-11-03 12:08:44 +11:00
Lyon Wang
8d41d816a2 player: Add configuration for enabling accurate seeks
https://bugzilla.gnome.org/show_bug.cgi?id=773521
2016-11-01 19:49:52 +02:00
Sebastian Dröge
8ba57fb4bd player: Cache duration and return cached duration
https://bugzilla.gnome.org/show_bug.cgi?id=771992
2016-11-01 19:36:40 +02:00
Nirbheek Chauhan
f1c9fa28d2 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.
2016-10-28 10:01:36 +05:30
Nirbheek Chauhan
7e6764e304 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.
2016-10-28 10:00:59 +05:30
Nirbheek Chauhan
f790863755 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.
2016-10-27 23:06:26 +05:30
Nirbheek Chauhan
83df90ed6c Fix incorrect return type in several functions
All these should return GstFlowReturn, not gboolean
2016-10-27 23:06:26 +05:30
Nirbheek Chauhan
e3c1a545ba 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
2016-10-27 23:06:25 +05:30
Nirbheek Chauhan
6f707381c3 meson: Add support for building WGL on Windows
Currently only tested with MSVC.
2016-10-27 23:06:25 +05:30
Nirbheek Chauhan
d5dba89fc0 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.
2016-10-27 23:06:25 +05:30
Matthew Waters
cbaee81f9c 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.
2016-10-21 15:54:37 +11:00
Matthew Waters
c36ea6f56f meson: gl: add support for building with dispmanx on the rpi 2016-10-19 17:10:48 +11:00
Matthew Waters
0abeebc4e8 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
2016-10-18 22:43:03 +11:00
Munez
cb8204f6c0 Implemented gst_video_overlay_set_window_handle()
https://bugzilla.gnome.org/show_bug.cgi?id=772608
2016-10-18 15:53:10 +11:00
Matthew Waters
5e2f9a9690 meson: gl: fix detection of glx without gl
We need to check for libGL if we may use desktop OpenGL *or* GLX.
2016-10-18 14:15:40 +11:00
Matthew Waters
b85fa6f2dd meson: gl: fix incorrect error string
Use the winsys variable for an incorrect winsys provided
2016-10-18 14:10:32 +11:00
Munez
429135face 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
2016-10-18 11:23:42 +11:00
Munez
1cf3d0a590 gl/dispmanx: Fix set_render_rectangle typo
https://bugzilla.gnome.org/show_bug.cgi?id=772698
2016-10-18 11:23:42 +11:00
Arnaud Vrac
e8b24f9189 adaptivedemux: fix buffer size print format
https://bugzilla.gnome.org/show_bug.cgi?id=772706
2016-10-11 09:59:03 +01:00
Edward Hervey
4aadf50012 adaptivedemux: Calculate values before queue2
In order to calculate the *actual* bitrate for downloading a fragment
we need to take into account the time since we requested the fragment.

Without this, the bitrate calculations (previously reported by queue2)
would be biased since they wouldn't take into account the request latency
(that is the time between the moment we request a specific URI and the
moment we receive the first byte of that request).

Such examples were it would be biased would be high-bandwith but high-latency
networks. If you download 5MB in 500ms, but it takes 200ms to get the first
byte, queue2 would report 80Mbit/s (5Mb in 500ms) , but taking the request
into account it is only 57Mbit/s (5Mb in 700ms).

While this would not cause too much issues if the above fragment represented
a much longer duration (5s of content), it would cause issues with short
ones (say 1s, or when doing keyframe-only requests which are even shorter)
where the code would expect to be able to download up to 80Mbit/s ... whereas
if we take the request time into account it's much lower (and we would
therefore end up doing late requests).

Also calculate the request latency for debugging purposes and further
usage (it could allow us to figure out the maximum request rate for
example).

https://bugzilla.gnome.org/show_bug.cgi?id=733959

https://bugzilla.gnome.org/show_bug.cgi?id=772330
2016-10-08 14:13:51 +02:00
Matthew Waters
9ad4c67578 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 ()
2016-10-05 18:32:09 +11:00
Matthew Waters
e20dab09ea gl/win32: remove egl implementation
It hasn't been used in ages and is dead code.
2016-10-05 12:20:52 +11:00
Wonchul Lee
69b866326e tsdemux: Add conditions to identify ATSC EAC3
https://bugzilla.gnome.org/show_bug.cgi?id=770528
2016-10-03 15:14:54 -04:00
Sebastian Dröge
254db116a1 player: Remove Return documentation for function returning void 2016-09-30 13:42:06 +03:00
Gwang Yoon Hwang
b75ec0c433 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
2016-09-28 17:08:52 +10:00
Matthew Waters
c200e47ef8 gl: add necessary padding bytes to all public structs 2016-09-28 17:08:52 +10:00
Sebastian Dröge
fa31ea7ac3 player: Only report the initial duration if the query was successful 2016-09-26 13:26:36 +03:00
Matthew Waters
bad58e2b13 gldisplay: also free the GWeakRef when removing dead contexts
Otherwise we leak GWeakRef's.

Found with make -C tests/check libs/gstglcontext.valgrind
2016-09-22 18:25:37 +10:00
Martin Kelly
c40845731a wayland/Makefile.am: add missing libs
libgstwayland is missing a dependency on $(GST_PLUGINS_BASE_LIBS), so add it.

https://bugzilla.gnome.org/show_bug.cgi?id=771794
2016-09-21 20:07:06 -04:00
Sebastian Dröge
ac6e2af62d player: Remove some leftovers from external GstPlayer 2016-09-17 17:08:22 -04:00
Sebastian Dröge
79cab9f8b8 player: Remove boolean return from set_subtitle_uri()
It can't fail synchronously and is inconsistent with set_uri().
2016-09-15 13:15:51 +02:00
Sebastian Dröge
a036b7ef9f player: Don't change state to PLAYING immediately if a seek is pending
We first have to finish the seek (in PAUSED) and move to PLAYING once
the seek is actually finished (unless a new one is pending then).
2016-09-14 18:07:55 +02:00