Commit graph

2727 commits

Author SHA1 Message Date
Sebastian Dröge
281a13efa1 adaptivedemux: Remember the last return value of gst_adaptive_demux_stream_update_fragment_info()
It's going to return EOS if the period ended or otherwise there is just no
next fragment left. If we don't store the last return value, it will always
stay OK and gst_adaptive_demux_combine_flows() will always return OK instead
of EOS once all streams are done.

This partially switches period changes in DASH by at least trying to switch
instead of just stopping. What is still left is that after a period change
with DASH the times all start at 0 again instead of continuing.
2015-06-23 13:15:55 +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
Mathieu Duponchelle
1248b00c80 videoaggregator: simplifies and improves sink_get_caps.
The problem here was that after removing the formats and
all the things we could convert, we then intersected these
caps with the template caps.

Hence if a subclass offered permissive sink templates
(eg all the possible formats videoconvert handles), but only
one output format, then at negotiation time getcaps returned
caps with the format restricted to that format, even though
we do handle conversion.

https://bugzilla.gnome.org/show_bug.cgi?id=751255
2015-06-23 00:57:59 +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
Tim-Philipp Müller
bd5db4f72f codecparsers: jpeg: add some padding to ScanHdr struct
For bits that we don't parse out at the moment.
2015-06-21 17:13:07 +01:00
Tim-Philipp Müller
5b02e4ac59 codecparsers: jpeg: fix docs for table parsing functions 2015-06-21 14:59:13 +01:00
Tim-Philipp Müller
d8963a015f docs: add new JPEG codecparser API to the docs
And sprinkle some more Since markers
2015-06-21 13:55:29 +01:00
Tim-Philipp Müller
7d8f694501 codecparsers: jpeg: fix validity checking of data parsed
g_return_val_if_fail() and g_assert() are not appropriate
for checking untrusted external data.

https://bugzilla.gnome.org/show_bug.cgi?id=673925
2015-06-21 11:32:10 +01:00
Tim-Philipp Müller
0f04a61bbe codecparsers: jpeg: fix up API
- add data pointer to GstJpegSegment and pass segment
  to all parsing functions, rename accordingly
- shorten GstJpegMarkerCode enum type name to GstJpegMarker
- move function gtk-doc blurbs into .c file
- add since markers
- flesh out docs for SOF markers

https://bugzilla.gnome.org/show_bug.cgi?id=673925
2015-06-21 11:31:50 +01:00
Tim-Philipp Müller
4a85958909 codecparsers: jpeg: tweak API a little
https://bugzilla.gnome.org/show_bug.cgi?id=673925
2015-06-21 11:30:30 +01:00
Tim-Philipp Müller
441478d161 codecparsers: jpeg: hide gst_jpeg_scan_for_marker_code()
Make this function private for now, since it's unclear whether
it's actually needed seeing that gst_jpeg_parse() scans too.

https://bugzilla.gnome.org/show_bug.cgi?id=673925
2015-06-21 11:30:30 +01:00
Gwenole Beauchesne
d279e12c8f codecparsers: jpeg: fix and optimize scan for next marker code.
Fix scan for next marker code when there is an odd number of filler
(0xff) bytes before the actual marker code. Also optimize the loop
to execute with fewer instructions (~10%).

This fixes parsing for Spectralfan.mov.
2015-06-21 11:28:38 +01:00
Gwenole Beauchesne
41ed5c0266 codecparsers: jpeg: fix calculation of segment size.
The size of a marker segment is defined to be exclusive of any initial
marker code. So, fix the size for SOI, EOI and APPn segments but also
the size of any possible segment that is usually "reserved" or not
explicitly defined.

https://bugzilla.gnome.org/show_bug.cgi?id=707447
2015-06-21 11:28:38 +01:00
Wind Yuan
c83e413656 codecparsers: jpeg: fix default Huffman tables generation.
Fix build_huffman_table() to correctly fill in the associated HUFFVAL
entries to the default Huffman tables.
2015-06-21 11:28:38 +01:00
Gwenole Beauchesne
7e7b4d68f4 codecparsers: jpeg: add JPEG bitstream parser
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>

https://bugzilla.gnome.org/show_bug.cgi?id=673925
2015-06-21 11:28:30 +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
Vineeth TM
7823e6d606 nalutils: trivial patch to check if
trivial patch to add proper ( while checking for if(G_UNLIKELY())

https://bugzilla.gnome.org/show_bug.cgi?id=751087
2015-06-16 22:05:34 -04:00
Sebastian Dröge
f2617ee0ee videoaggregator: Print some debug output if we change the timestamp offset 2015-06-15 14:29:04 +02:00
Sebastian Dröge
3c9176d7e8 videoaggregator: Add some more debug output 2015-06-15 14:25:43 +02:00
Sebastian Dröge
442114c606 videoaggregator: Don't update the ts-offset before updating the actual configured caps 2015-06-15 14:19:05 +02:00
Sebastian Dröge
9533d1f165 videoaggregator: Remember if the last LATENCY query returned live or not and use the in the QoS messages 2015-06-15 14:18:39 +02:00
Mathieu Duponchelle
3c2fff7165 videoaggregator: No need to artificially bound the zorder.
It is an unsigned integer so the upper bound is G_MAXUINT.
2015-06-14 23:15:25 +02:00
Luis de Bethencourt
417db39d0d codecparsers: mpeg4: actually return full number of bits of resync marker
Switch the increment of markersize from when it is used to when it is
returned from compute_resync_marker_size.

This also makes the CHECK_REMAINING in gst_mpeg4_parse_video_packet_header
check for the actually required number of bits now and not one too few.

https://bugzilla.gnome.org/show_bug.cgi?id=739345
2015-06-13 18:03:11 +01:00
Tim-Philipp Müller
b14fb383ed Revert "codecparsers: remove ignored increment of return"
This reverts commit 916b954315.

Clearly something else was intended, and it also makes
more sense to add the extra bit. The resync marker is
N zero bits plus a 1 bit, and the pattern/mask needs to
be run on N+1 bits too.

(Even after the rever the code doesn't do that of course, so
it still needs to be fixed differently.)

https://bugzilla.gnome.org/show_bug.cgi?id=739345
2015-06-13 17:59:42 +01:00
Nirbheek Chauhan
b395c055eb videoaggregator: add "ignore-eos" property for input pads
When set, it causes videoaggregator to repeatedly aggregate the last buffer on
an EOS pad instead of skipping it and outputting silence. This is useful, for
instance, while playing back files seamless one after the other, to avoid
videoaggregator ever outputting silence (the checkerboard pattern).

It is to be noted that if all the pads on videoaggregator have this property set
on them, the mixer will never forward EOS downstream for obvious reasons. Hence,
at least one pad with 'ignore-eos' set to FALSE must send EOS to the mixer
before it will be forwarded downstream.

https://bugzilla.gnome.org/show_bug.cgi?id=748946
2015-06-12 19:44:50 +01:00
Jesper Larsen
355439206d mpegts: return early if packetizing short section
Short sections have 3 bytes of common header, while other sections
have 8 bytes of common header. If packetizing common header of short
section, we should stop after the first 3 bytes.

https://bugzilla.gnome.org/show_bug.cgi?id=735653
2015-06-12 19:21:51 +01: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
7b8d819d18 videoaggregator: simplify aggregate returning
Rework special handling with goto/labels to only have one case
and otherwise just return normally.
2015-06-08 12:35:25 -03:00
Thiago Santos
443a3beb8f videoaggregator: refactor caps reconfigure to its own function
Makes the aggregation code shorter and easier to read
2015-06-08 12:34:23 -03:00
Thiago Santos
9f9c723f5d videoaggregator: fixing types in aggregate function
Correctly use boolean and GstFlowReturn types in the function.
2015-06-08 12:33:40 -03:00
Thiago Santos
a5e1f26385 videoaggregator: use macro to access aggregator src pad
Makes code a bit more readable
2015-06-08 12:09:51 -03:00
Thiago Santos
0a495cbea2 aggregator: add a convenience macro to get the source pad
Easier than casting or acessing the parent everywhere
2015-06-08 12:09:51 -03: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
Sebastian Dröge
4dd355cea2 adaptivedemux: Error out if downloading a segment failed too often in live mode
It's true that we shouldn't consider errors fatal immediately, but if we
always ignore them we will loop infinitely on live streams with segments
that can't be downloaded at all.
2015-06-05 11:26:11 +02:00
Sebastian Dröge
fc67e1db8b adaptivedemux: Release the manifest mutex before waiting for a download
Otherwise we will hurt parallel downloads in the best case, and often cause
deadlocks.
2015-06-04 12:36:41 +02: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
Olivier Crête
10319757b4 aggregator: Document that the latency is in ns 2015-06-01 18:50:14 -04: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
Jan Schmidt
37298354ff videoaggregator: Add class property to disable caps scaling
Add preserve_update_caps_result boolean on the class to allow
sub-classes to disable videoaggregator removing sizes and framerate
from the update_caps() return result.
2015-05-30 01:33:49 +10:00
Jan Schmidt
6dabd46a2d videoaggregator: Catch errors, and allow sub-class to return NULL from get_output_buffer()
A return value of GST_FLOW_OK with a NULL buffer from get_output_buffer()
means the sub-class doesn't want to produce an output buffer, so
skip it.

If gst_videoaggregator_do_aggregate() generates an error, make sure
to propagate it - don't just ignore and discard the error by
over-writing it with the gst_pad_push() result.
2015-05-30 01:33:49 +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
Julien Isorce
71b8103cbd glcontext: add gst_gl_context_set_display helper 2015-05-27 17:09:42 +01:00
Julien Isorce
8ad3c0a7b9 glcontext: add missing _CAST after G_TYPE_CHECK_CLASS 2015-05-27 17:09:31 +01:00
Julien Isorce
411488598e glwindow: add missing _CAST after G_TYPE_CHECK_CLASS 2015-05-27 17:09:23 +01:00
Julien Isorce
072183ce61 glwindow: provides some default implementations to factorize with all backends 2015-05-27 17:08:11 +01:00
Jan Schmidt
e3ec07220b aggregator: Push EOS on error return.
Before shutting down the srcpad task due to a
downstream error, push an EOS to give downstream
a chance to shut down somewhat cleanly.
2015-05-28 01:03:15 +10:00
Xavier Claessens
7bfd2703c6 gl: propagate return value from filter and filter_texture
https://bugzilla.gnome.org/show_bug.cgi?id=749846
2015-05-26 16:49:55 -04:00
Luis de Bethencourt
6857048079 adaptivedemux: 'for' loop initial declaration
'for' loop initial declarations are only allowed in C89, moving the declaration
to before the 'for' loop.
2015-05-26 15:24:55 +01:00
Matthew Waters
656918d5d6 gl/wayland: remove dead event source code 2015-05-25 17:39:14 +10:00
Matthew Waters
2704fdaa59 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
2015-05-25 17:39:14 +10:00
Matthew Waters
dec8139e65 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
2015-05-23 01:26:05 +10:00
Xavier Claessens
1a98face84 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
2015-05-21 16:58:11 -04:00
Xavier Claessens
ae77afeb74 gl: win32: remove unused code
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2015-05-21 16:58:11 -04:00
Xavier Claessens
247697ce62 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
2015-05-21 14:33:53 -04:00
Xavier Claessens
e1a827822e gl: win32: Fix leaked GstGLContext
https://bugzilla.gnome.org/show_bug.cgi?id=749601
2015-05-21 14:33:53 -04:00
Xavier Claessens
0acc18c60f 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
2015-05-21 14:33:52 -04:00
Xavier Claessens
e24bc348bd 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
2015-05-21 14:33:52 -04:00
Jan Schmidt
c9372ae33f glupload: Don't leak all memory uploaded via raw uploads.
Remove an extra ref missed when switching over to not
reusing output textures
2015-05-22 00:28:25 +10:00
Matthew Waters
e9f0d0fb51 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
2015-05-21 15:07:38 +10:00