Commit graph

8299 commits

Author SHA1 Message Date
Mikhail Fludkov
6577f5e91e gsttraceutils: actually disable tracing system hooks if configured
`./configure --disable-gst-tracer-hooks` didn't do anything, hooks were
always enabled regardless of the option. It works correctly in the
Meson build though.
2017-11-24 13:40:34 +01:00
Havard Graff
eb9ac74362 utils: add gst_utils_dump_buffer()
Useful for debugging.
2017-11-24 13:40:33 +01:00
Stian Selnes
512cec3dea pad: gst_pad_activate_mode() always succeed if same mode
Checking that the pad is in the correct mode before the parent is
checked makes the call always succeed if the mode is ok.

This fixes a race with ghostpad where gst_pad_activate_mode() could
trigger a g_critical() if the ghostpad is unparented while the
proxypad is deactivating, for instance if the ghostpad is released.
More specifically, gst_ghost_pad_internal_activate_push_default()'s
call to gst_pad_activate_mode() would fail if ghostpad doesn't have a
parent. With this patch it will return true of mode is already
correct.
2017-11-24 13:40:31 +01:00
Tim-Philipp Müller
b63ed9e066 ghostpad: return TRUE if target pad was already set
The state is as it should be, so no reason to return
FALSE really, everything's good.
2017-11-24 13:39:39 +01:00
Tim-Philipp Müller
3203a10821 ghostpad: access internal pad with lock held 2017-11-24 13:39:39 +01:00
Havard Graff
e515aa06fe ghostpad: fix race-condition while tearing down
An upstream query will take a ref on the internal proxypad, and can
hence end up owning the last reference to that pad, causing a crash.
2017-11-24 13:39:36 +01:00
Tim-Philipp Müller
7ea4152323 gstvalue: allocate slightly larger than needed tables at startup
If we pre-allocate only *exactly* as many nodes as we need for the
core types, we are practically guaranteed a re-alloc when external
code like GstVideoTimeCode or GstEncodingProfile register their
own GstValue things. So allocate a bit more than strictly needed.
2017-11-23 13:56:51 +01:00
Mathieu Duponchelle
c01949a99e pad templates: Allow specifying GType
See https://bugzilla.gnome.org/show_bug.cgi?id=731301

https://bugzilla.gnome.org/show_bug.cgi?id=789986
2017-11-22 16:44:08 +01:00
Matthew Waters
86abf49c23 gst: add a promise object
An object that can be waited on and asked for asynchronous values.
In much the same way as promise/futures in js/java/etc

A callback can be installed for when the promise changes state.

Original idea by
Jan Schmidt <jan@centricular.com>

With contributions from
Nirbheek Chauhan <nirbheek@centricular.com>
Mathieu Duponchelle <mathieu@centricular.com>

https://bugzilla.gnome.org/show_bug.cgi?id=789843
2017-11-23 00:48:30 +11:00
Edward Hervey
40c5396c24 registrychunks: Make sure we use aligned memory
This is in the same vein as for all other features. Some systems
might not allow unaligned read.
2017-11-20 17:01:04 +01:00
Edward Hervey
d915dd4b20 gstpad: Make pad (de)activation atomic
The following could happen previously:
* T1: calls gst_pad_set_active()
* T2: currently (de)activating it
* T1: gst_pad_set_active() returns, caller assumes that the pad has
  completed the requested (de)activation ... whereas it is not
  the case since the actual (de)activation in T2 might still be
  going on.

To ensure atomicity of pad (de)activation, we use a internal
variable (and cond) to ensure only one thread at a time goes through
the actual (de)activation block

https://bugzilla.gnome.org/show_bug.cgi?id=790431
2017-11-16 10:55:36 +01:00
Edward Hervey
80262013ca gstpad: Make calls to GstPadActivateFunction MT-safe
checking whether we already were in the target GstPadMode was being
done too early and there was the risk that we *would* end up
(de)activating a pad more than once.

Instead, re-do the check for pad mode when entering the final pad
(de)activation block.

https://bugzilla.gnome.org/show_bug.cgi?id=790431
2017-11-16 08:29:22 +01:00
Nicolas Dufresne
7595c38a73 paramspec: Move condition check inside the g_return
It's mostly a debug check and crash avoidance, it's better to
keep all the condition inside the macro.
2017-11-10 12:09:41 -05:00
Nicolas Dufresne
98f4ff8331 paramspec: Add missing since for _spec_array() 2017-11-10 12:09:41 -05:00
Tim-Philipp Müller
d106390adc element: add gst_element_foreach_*pad()
Add convenience API that iterates over all pads, sink pads or
source pads and makes sure that the foreach function is called
exactly once for each pad.

This is a KISS implementation. It doesn't use GstIterator and
doesn't try to do clever things like resync if pads are added
or removed while the function is executing. We can still do that
in future if we think it's needed, but in practice it will
likely make absolutely no difference whatsoever, since these
things will have to be handled properly elsewhere by the element
anyway if they're important.

After all, it's always possible that a pad is added or removed
just after the iterator finishes iterating, but before the
function returns.

This is also a replacement for gst_aggregator_iterate_sink_pads().

https://bugzilla.gnome.org/show_bug.cgi?id=785679
2017-11-02 15:59:22 +00:00
Edward Hervey
fb56ad6bee gstvalue: Cast GST_MAKE_FOURCC arguments
To make it explicit that we are dealing with uint32 targets

Avoids erroneous  runtime error: left shift of negative value -1

https://bugzilla.gnome.org/show_bug.cgi?id=789700
2017-10-31 12:02:18 +01:00
Edward Hervey
c0c9a531ef event: Don't allow invalid SELECT_STREAMS event creation
Asking to select no streams makes no sense and can create various
issues.

If one doesn't one any stream it should deactivate (or not use) the
element in question.
2017-10-27 09:53:06 +02:00
Edward Hervey
4844adf193 gst: Fix build with option parsing disabled 2017-10-25 17:10:15 +02:00
Stefan Sauer
05ce354d3e segment: clarify the segment docs for the duration 2017-10-20 16:15:01 +02:00
Stefan Sauer
38dd43df29 Revert "segment: also intialize the duration"
This reverts commit f1baaae175.
2017-10-20 16:11:44 +02:00
Stefan Sauer
f1baaae175 segment: also intialize the duration
If start and stop are set, calculate the duration and set it too.
2017-10-20 14:30:42 +02:00
Jan Schmidt
6adb6b478f seqnum: Never return a seqnum of 0, reset GST_SEQNUM_INVALID
Various plugins use the value of '0' as an invalid seqnum value
(qtdemux for matching duplicated seek events, for example). Make
that behaviour explicit, create a GST_SEQNUM_INVALID value,
and ensure gst_util_seqnum_next never returns it.
2017-10-18 02:31:12 +11:00
Mathieu Duponchelle
e838007d09 gstbuffer: fix meta removal in gst_buffer_foreach_meta
When updating the linked list, prev->next = next is correct
if prev is actually updated after being set to the head
of the list at the start.

https://bugzilla.gnome.org/show_bug.cgi?id=788617
2017-10-11 19:57:04 +02:00
Ashish Kumar
0ca70247fc device-provider: gst_device_provider_unhide_provider() always fails
https://bugzilla.gnome.org/show_bug.cgi?id=788520
2017-10-05 09:42:39 +01:00
Havard Graff
fee176d253 meson: remove vs_module_defs
The GST_EXPORT should handle it.
2017-10-05 09:35:41 +01:00
Edward Hervey
ebad8c0094 bin: iterate_sorted: Ensure sources are always returned last
For linked elements, the resulting gst_bin_iterate_sorted() will
properly return elements from sink to sources.

If we have some elements that are not linked, we *still* want to
ensure that we return:
* In priority any sinks
* Last of all any sources
* And in between any element which is neither source nor sink

For this to work, when looking for the next candidate element,
not only check the degree order, but if there are two candidates
with the same degree order, prefer the non-source one.

Amongst other things, this fixes the case where we activating a
bin containing unlinked sources and other elements. Without this
we could end up activating sources (which might start adding pads
to be linked) before other (to which those new source element pads
might be linked) are not activated

https://bugzilla.gnome.org/show_bug.cgi?id=788434
2017-10-03 07:56:39 +02:00
Stefan Sauer
eb329eec1c structure: add a todo comment
Printing NULL is confusing when the type is e.g. a GArray that is not empty.
2017-10-02 16:23:31 +02:00
Stefan Sauer
e584886d06 query: doc consistency
Mention that it is the 'buffer size', like we do elsewhere.
2017-10-02 13:14:21 +02:00
Mathieu Duponchelle
2138acabe5 gst: Modify behaviour of gst_get_main_executable_path
To actually return the path of the executable, not its
directory.

https://bugzilla.gnome.org/show_bug.cgi?id=788256
2017-09-27 20:59:54 +02:00
Mathieu Duponchelle
895bb7bcd6 gst: API: gst_get_main_executable_path()
This is useful for plugins that need to inspect the
folder of the main executable in order to determine the
set of features they will expose, for example:

https://github.com/centricular/gstreamer-vst3

https://bugzilla.gnome.org/show_bug.cgi?id=788214
2017-09-27 20:59:54 +02:00
Mathieu Duponchelle
49e230ad1a gst: Do not try to determine executable path on iOS.
The method used relies on "libproc.h", which is only available
on OSX.

https://bugzilla.gnome.org/show_bug.cgi?id=788234
2017-09-27 13:56:15 +02:00
Mathieu Duponchelle
c9815957d3 gst: Fix typo in windows function name.
GetModuleFilename -> GetModuleFileName

https://bugzilla.gnome.org/show_bug.cgi?id=788234
2017-09-27 13:56:15 +02:00
Mathieu Duponchelle
a5e168071c plugin dependencies: fix 6cddce7663
There were a few errors:

* The plugin scanner now accepts executable path as an argument.
  In case it is NULL, argc == 2

* We find the executable path in init_pre instead of gst_init,
  allowing this to work when gst is initialized through the
  option group (eg gst-inspect)

* There was a semi-colon missing in the __APPLE__ #ifdef
2017-09-26 15:15:27 +02:00
Mathieu Duponchelle
6cddce7663 plugin: API: GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_RELATIVE_TO_EXE
When a plugin declares a dependency using this flag, all the
relative paths are considered to be relative to the path of
the main executable.

We try to determine the path of the executable portably,
with implementations provided for Linux, Windows and Mac.

If retrieval of the path fails, we will not detect changes.

In order for the main executable path to be the same when
scanning a plugin in a child process, a new variable is
exposed in gst_private.h, _gst_executable_path

https://bugzilla.gnome.org/show_bug.cgi?id=788152
2017-09-26 13:12:00 +02:00
Sebastian Dröge
f649f0a44f info: GstStackTraceFlags were added in 1.12 2017-09-17 18:55:43 +03:00
Tim-Philipp Müller
8f26af8b02 bufferlist: add gst_buffer_list_calculate_size()
Returns size in bytes.
2017-09-17 12:35:25 +01:00
Tim-Philipp Müller
177c4ffe6a bufferlist: add gst_buffer_list_get_writable()
Ensures buffer is writable. Useful if we want to change
metadata on it such as timestamps.

https://bugzilla.gnome.org/show_bug.cgi?id=750241
2017-09-17 12:24:25 +01:00
Michael Shigorin
9cd8fae44d gstconfig.h.in: initial e2k arch support
This makes gstreamer buildable on Elbrus 2000.

https://bugzilla.gnome.org/show_bug.cgi?id=787587
2017-09-12 14:01:57 -04:00
Sebastian Dröge
870a387e5d info: GstDebugColorFlags are flags, not an enum
Annotate as such.
2017-09-09 16:14:30 +03:00
Edward Hervey
aed32ee2ab pad: Don't call remaining probes after they return DROPPED|HANDLED
If multiple probes are set on a pad and one probe returns either
GST_PAD_PROBE_HANDLED or GST_PAD_PROBE_DROPPED we need to stop
calling the remaining probes.

https://bugzilla.gnome.org/show_bug.cgi?id=787243
2017-09-04 14:37:42 +02:00
Thibault Saunier
996bedb81d value: Handle serializing NULL GValueArray
Concider them as an empty array and do not segfault...

https://bugzilla.gnome.org/show_bug.cgi?id=786670
2017-08-26 13:46:58 -03:00
Sebastian Dröge
0459b2db84 element/deviceprovider: Add instance getter functions for class properties
That is, the metadata and pad templates. Using instance getters is
easier to deal with for bindings, especially autogenerated ones.
2017-08-17 14:13:39 +03:00
Tim-Philipp Müller
e7996a23d6 allocator: Hide private sysmem GType func
Was never exposed in any header file, only exported
by accident.
2017-08-14 11:01:44 +01:00
Tim-Philipp Müller
b1422a2fb8 utils: fix g-ir-scanner warning about bogus transfer annotations
for vararg parameters. Vararg functions are not introspectable anyway,
so might just as well mark them as '(skip)' while we're at it.

gstutils.c:2611: Warning: Gst: invalid "transfer" annotation for <varargs>: only valid for object and GVariant types
2017-08-10 10:30:59 +01:00
Sebastian Dröge
849dfe82f1 utils: Skip gst_calculate_linear_regression() in bindings 2017-08-08 21:20:31 +03:00
Tim-Philipp Müller
24880717cf meson: fix a few warnings 2017-08-07 11:06:58 +01:00
Sebastian Dröge
087eca8827 pad: Recheck sticky events after non-blocking buffer probes and blocking event probes
Without the former, event changes (e.g. setting a pad offset) does not
take effect for the current buffer but only for the next one. Without
the latter, non-blocking event probes would not see any updated events
yet.
2017-08-02 21:02:32 +03:00
Tim-Philipp Müller
a79503a433 info: fix build with gst debugging disabled 2017-07-29 10:28:03 +01:00
Sebastian Dröge
ad0dd860c9 debug: Add a memory ringbuffer based debug logger
This stores debug logs in memory per thread and uses up to a
configurable amount of bytes per thread for the logs. Inactive threads
are timed out after a configurable amount of time.

https://bugzilla.gnome.org/show_bug.cgi?id=785035
2017-07-28 17:27:51 +01:00
Sebastian Dröge
0bf3531efa segment: Add missing out annotations for various parameters 2017-07-28 17:27:32 +01:00