Commit graph

8769 commits

Author SHA1 Message Date
Aaron Boxer
509f6201e1 documentation: fix a number of typos 2019-10-06 11:12:11 -04:00
Sebastian Dröge
9fb84ea7f4 gst: Don't pass miniobjects to GST_DEBUG_OBJECT() and similar macros
The argument must be at least a GObject according to the GstLogFunction
definition, and while the default C log function handles miniobjects
just fine this is crashing bindings and user-supplied log functions that
(rightfully) don't expect anything but GObjects.
2019-09-30 11:52:03 +03:00
Mathieu Duponchelle
0dafe6e639 gstvalue: use value_nick for serialization
not value_name . This was causing incorrect launch lines to be
displayed by gst-device-monitor, and the deserialization code
below works with nicks.
2019-09-17 01:09:05 +00:00
Mathieu Duponchelle
a9e2776074 deviceprovider: set the bus to non-flushing before calling klass->start
Not posting DEVICE_ADDED messages while a device provider is being
started makes things awkward for applications, as they have to call
get_devices() after starting the monitor.

This requires redundant code on the application side, and as far as
I understand also could cause race conditions, when a device gets
added between the calls to gst_device_monitor_start() and
gst_device_monitor_get_devices(), causing the application to "see"
the same device twice.
2019-09-16 23:56:44 +00:00
Sebastian Dröge
9cf764b2ec element: Enforce that elements created by gst_element_factory_create/make() are floating
Bindings might have a hard time making sure that the reference is indeed
still floating after returning here.

See https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/444
2019-09-12 09:50:17 +00:00
Sebastian Dröge
341ee45155 device: Enforce that elements created by gst_device_create_element() are floating
Bindings might have a hard time making sure that the reference is indeed
still floating after returning here.

See https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/444
2019-09-12 09:50:17 +00:00
Sebastian Dröge
1edcf747ee device: gst_device_create_element() is transfer floating, not transfer full
Fixing the annotation fixes leaking of the created element in all
bindings using GObject-Introspection.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/444
2019-09-12 09:50:17 +00:00
Niels De Graef
4812c4087f Don't pass default GLib marshallers for signals
By passing NULL to `g_signal_new` instead of a marshaller, GLib will
actually internally optimize the signal (if the marshaller is available
in GLib itself) by also setting the valist marshaller. This makes the
signal emission a bit more performant than the regular marshalling,
which still needs to box into `GValue` and call libffi in case of a
generic marshaller.

Note that for custom marshallers, one would use
`g_signal_set_va_marshaller()` with the valist marshaller instead.
2019-09-09 12:16:24 +00:00
Vivia Nikolaidou
7774aae713 pad: Added gst_pad_get_single_internal_link
gst_pad_iterate_internal_links is usually used to find a single internal
link that a pad has, e.g. to find the corresponding pad of a multiqueue.
Added a helper function that will return either a single internal link,
if there's no other, or NULL.
2019-09-05 11:49:18 +03:00
David Svensson Fors
f8d70b475c miniobject: free qdata array when the last qdata is removed
In cases with many long-lived buffers that have qdata only very
briefly, the memory overhead of keeping an array of 16 GstQData
structs for each buffer can be significant. We free the array when
the last qdata is removed, like it was done in 1.14.

Fixes #436
2019-09-04 16:31:53 +02:00
Nicolas Dufresne
80a76a4b4d bin: Fix minor race when adding to a bin
This patch simply add a null check around a case where a child may have
been unparented concurrently to the deep_add_remove operation. This was
found by accident in the form of an "IS_GST_OBJECT" assertion, but had
no other known side effect in that test.
2019-09-03 15:42:17 -04:00
Niels De Graef
9e69c90869 object: Use g_object_notify_by_pspec()
`g_object_notify()` actually takes a global lock to look up the
`GParamSpec` that corresponds to the given property name. It's not a
huge performance hit, but it's easily avoidable by using the
`_by_pspec()` variant.
2019-08-25 21:32:44 +02:00
Seungha Yang
e6c43380bb info: Take lock around all prinf on Windows
On Windows, concurrent colored gstreamr debug output and usual
stdout/stderr string will cause broken output on terminal.
Since it's OS specific behavior, that's hard to completely avoid it
but we can protect it at least among our printing interfaces side.
2019-08-24 12:15:56 +00:00
Mathieu Duponchelle
7e87a05e5a docstrings: port ulinks to markdown links 2019-08-23 18:17:41 +02:00
Johan Sternerup
a4d5c95638 utils: Avoid memory merge in gst_util_dump_buffer()
For buffers with multiple memory chunks, gst_buffer_map() has the side
effect of merging the memory chunks into one contiguous
chunk. Since gst_util_dump_mem() used gst_buffer_map() the internals
of the buffer could actually change as a result of printing it.

For the case of a buffer containing several memory chunks,
gst_memory_map() is now used to obtain the memory address and each
memory chunk is dumped separately preceded by a header line. The
behaviour for a buffer containing a single memory chunk is left unchanged.
2019-08-21 08:37:50 +02:00
Jan Alexander Steffens (heftig)
1d5a1e8235 element: Added gst_element_get_current_clock_time and gst_element_get_current_running_time
Helper functions for getting the element clock's time, and the clock
time minus base time, respectively.
2019-08-12 12:59:27 +03:00
Sebastian Dröge
533fbf766e registry: Use plugin directory from the build system for relocateable Windows builds
Instead of guessing something based on preprocessor defines and magic.
2019-08-09 07:22:38 +00:00
Thibault Saunier
d6c14e70a1 device-monitor: list hidden providers before listing devices
The way it was implemented could make the list updated after the
list of device was filled with supposdely hidden devices
2019-08-07 15:20:39 -04:00
Tim-Philipp Müller
8841c3a22f message: fix up enum value for GST_MESSAGE_DEVICE_CHANGED
This was added in 1.16 and accidentally duplicated the value of
the existing GST_MESSAGE_REDIRECT.

As the only known user of this message is GStreamer core itself,
and it is quite an obscure message, it seems best to just fix up
the enum value even if that technically breaks API.

Fixes #418
2019-08-06 08:02:09 +00:00
Doug Nazar
7b596ba6c6 info: Fix deadlock in gst_ring_buffer_logger_log
gst_ring_buffer_logger_log calls several functions while formatting
the message which may in turn log a message while we already hold
the mutex. Do all formatting first before acquiring the mutex to
avoid this and reduce the time we hold the mutex.
2019-08-05 15:24:03 +00:00
Sebastian Dröge
55e79c3772 info: Free some more memory on gst_deinit() 2019-07-15 11:35:07 +03:00
Sebastian Dröge
04a7334140 info: Deprecate gst_debug_category_free()
And change it to do nothing at all.

As debug categories don't use reference counting and they can be
retrieved from anywhere at any time by name, it is fundamentally unsafe
to free them at any point in time except for right before the end of the
process.

No code apart from a unit test seems to be currently using the function,
so deprecate it and also change it to do nothing at all.
2019-07-15 11:35:07 +03:00
Jan Schmidt
318a6169f7 gsttracerutils: Fix build with disabled tracer hooks.
Add a stub gst_tracing_get_active_tracers() call when building
with tracer hooks disabled.
2019-07-07 20:42:56 +10:00
Nirbheek Chauhan
e5a3f12ff2 gstinfo: Fix typo in debug log message 2019-07-02 15:13:26 +05:30
Nirbheek Chauhan
1685f38bb2 gsttracer: Add new API to fetch the list of active tracers
This will be useful in the next commit where we add action-signals on
the leaks tracer to get information about leaks and to manipulate
checkpoints as a replacement for the SIGUSR1 and SIGUSR2 signals for
doing the same.
2019-07-02 15:13:26 +05:30
Nicolas Dufresne
8a9b20a18b bufferpool: Fix the buffer size reset code
The offset in gst_buffer_resize() is additive. So to move back the
offset to zero, we need to pass the opposite of the current offset. This
was raised through the related unit test failingon 32bit as on 64bit
the alignment padding was enough to hide the issue. The test was
modified to also fail on 64bit. This patch will remove spurious
assertions like:

  assertion 'bufmax >= bufoffs + offset + size' failed

Fixes #316
2019-07-01 16:49:04 -04:00
Nirbheek Chauhan
aae5f58dd1 tracerrecord: Be stricter while parsing record templates
It's not really possible for us to recover when someone uses the
gst_tracer_record_new() API incorrectly. Also, document a piece of
somewhat-obscure code.
2019-07-01 13:33:13 +00:00
Nirbheek Chauhan
f336fdd088 gstsystemclock: Mark the clock as MAY_BE_LEAKED
It is freed in gst_deinit(), but otherwise it is leaked.
2019-07-01 11:51:46 +00:00
Nirbheek Chauhan
4ba6898f24 gstinfo: Rework stack trace detection a bit
Ensure that the code paths for HAVE_UNWIND and HAVE_DBGHELP are never
taken at the same time, even if the build file code changes.

Prefer DbgHelp over libunwind on Windows in case both are somehow
available because DbgHelp is only available when building with the
MSVC toolchain, and libunwind won't give us debug symbols from objects
built with the MSVC toolchain.

Also, print slightly more useful messages for the level of stack trace
support enabled, and document what each if conditional does.
2019-07-01 10:36:09 +00:00
Nirbheek Chauhan
145f8546c4 gstinfo: Add an explicit enum for GST_STACK_TRACE_SHOW_NONE
The code implicitly uses this value when the stack trace is not FULL.
Mostly useful for documenting the behaviour when each flag is passed
and for translating to/from strings.
2019-07-01 10:36:09 +00:00
Nirbheek Chauhan
5f89225bc2 gstplugin: Don't stat plugins when building for UWP
When using GStreamer with Universal Windows Platform apps, dynamic
plugins can only be loaded by filename (without a path) using
gst_plugin_load_file() which will call into g_module_open().

On Windows, GModule calls LoadLibrary() on the filename, but with
UWP we need to use LoadPackagedLibrary() which is basically the same
as LoadLibrary(), except it looks only for DLLs (by name) that have
been packaged as assets with the app.

These assets are not files and cannot be accessed using normal file
APIs such as open() or stat().

The upstream glib merge request for adding LoadPackagedLibrary support
is: https://gitlab.gnome.org/GNOME/glib/merge_requests/951

NOTE: Whitespcae removal is to make gst-indent happy
2019-06-28 13:44:49 +05:30
Nirbheek Chauhan
9b7eaa3ed5 gstconfig.h.in: Windows ARM64 does not allow unaligned access 2019-06-28 13:01:14 +05:30
Mathieu Duponchelle
c34fe82b5b devicemonitor: add debug category 2019-06-21 13:38:58 +00:00
Michael Bunk
4bc68bb3fe Fixing various typos 2019-06-20 15:20:27 +00:00
Havard Graff
0257c7813b gstmeta: Optimize get_tags() by using private quark table 2019-06-17 09:50:32 +02:00
Havard Graff
ce7e6a9406 pad: increase debug-level to warning for fatal outcomes 2019-06-13 16:30:14 +00:00
Niels De Graef
09141c6e1f Use G_DEFINE_AUTOPTR_CLEANUP_FUNC unconditionally
Since we started depending on GLib 2.44, we can be sure this macro is
defined (it will be a no-op on compilers that don't support it). For
plugins we should just start using `G_DECLARE_FINAL_TYPE` which means
we no longer need the macro there, but for most types in core we don't
want to break ABI, which means it's better to just keep it like it is
(and use the `#ifdef` instead).
2019-06-04 08:50:59 +02:00
Mathieu Duponchelle
bcb4be455e gstelement: fix links to the gsterror page 2019-05-31 01:56:08 +02:00
Mathieu Duponchelle
cce397cc50 gsttaglist: do not link to symbols from gst-plugins-base in doc 2019-05-31 01:45:41 +02:00
Mathieu Duponchelle
ca17a6c791 doc: remove xml from comments 2019-05-29 21:33:42 +02:00
Thibault Saunier
e31f06f7f9 registry: Avoid discovering plugins in hotdoc private directories 2019-05-16 18:22:20 +00:00
Edward Hervey
7aee718394 gstpad: Probes that return HANDLED can reset the data info field
Before GST_PAD_PROBE_HANDLED was introduced, we had to handle the case
where some probes would reset the probe info data field to NULL. This would
be considered an invalid use-case.

But with GST_PAD_PROBE_HANDLED it is totally fine to reset that, since
the probe has "handled" it.
2019-05-16 15:13:48 +02:00
Thibault Saunier
949fba4b1f doc: Fix hotdoc warnings
* Making sure that `static inline` function are in the GIR (by first
  defining them, and make sure to mark as skiped)
* Do not try to link to unexisting symbols
* Also generate GIR information about gst_tracers
2019-05-13 16:34:09 -04:00
Thibault Saunier
a0c65067e0 Port to hotdoc 2019-05-13 16:34:09 -04:00
Thibault Saunier
3d5dbfb457 gst: Add a GParamSpecFlag to force gst-inspect to use pspec default value
Instead of the object value, this should be used every time a random
value will be returned by g_object_get This is also useful to make the
values returned by inspecting element stable accross runs.
2019-05-13 11:33:49 -04:00
Thibault Saunier
4e29b4aa34 doc: Add some missing docstrings 2019-05-13 11:33:49 -04:00
Thibault Saunier
5b2da0835e doc: Fix and add some missing docstrings 2019-05-13 11:33:49 -04:00
Thibault Saunier
4d259e8af3 structure: Mark _from_string as constructor 2019-05-13 11:33:49 -04:00
Nirbheek Chauhan
ebd918c0f6 meson: Pass -DGST_STATIC_COMPILATION for static builds
This is only needed on Windows when building with MSVC, but it is safe
to pass it everywhere.

Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/398
2019-05-13 14:42:28 +05:30
Nirbheek Chauhan
b19de413b9 meson: Link to objects instea of static helper library
Otherwise the objects from that static helper library are not included
in the gstreamer-1.0 static library. This was supposed to be fixed in
Meson, but the pull request hasn't been merged yet:
https://github.com/mesonbuild/meson/pull/3939

Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/398
2019-05-13 13:24:42 +05:30
Niels De Graef
8d180557eb uri: Add gst_clear_uri()
Basically, you can use this instead of using `gst_uri_unref()` (which
needs to be preceded by a NULL-check).

See https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/275
and https://gitlab.freedesktop.org/gstreamer/gstreamer/merge_requests/3
2019-05-10 14:59:23 +02:00
Niels De Graef
cfca53ce67 gst: Add support for g_autoptr(GstPromise) 2019-05-08 12:11:50 +02:00
Niklas Hambüchen
f5ccb2215a Make get_flex_version.py script executable
Like all other scripts in the same dir.

It has a hashbang, so it should be executable.
2019-05-01 15:46:56 +02:00
Mathieu Duponchelle
21a02e7672 gstsegment: Add GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED
This is generally useful, and mandated by the ONVIF streaming
spec, section 6.5.3

<https://www.onvif.org/specs/stream/ONVIF-Streaming-Spec.pdf>
2019-04-24 15:30:22 +00:00
Sebastian Dröge
a42aaf87d5 gst: Fix various Since markers 2019-04-23 15:08:18 +03:00
Sebastian Dröge
26aa7a6d36 caps: Add Since: 1.16 marker to gst_caps_copy() 2019-04-23 14:53:11 +03:00
Mathieu Duponchelle
dc5a62f702 gstinfo: clean up function pointer names hashtable
And add strduped function pointer names to the global quark
table, so that they don't get reported as lost by valgrind.

This allows us to use GST_DEBUG when running tests under
valgrind.
2019-04-17 23:03:56 +02:00
Philipp Zabel
b99bca2790 event: fix seek event creation
Creating seek events segfaults on 32-bit ARM since commit 2fa15d5371
('event: add new seek parameter, "trickmode-interval"'), which missed
casting the trickmode-interval initializer in the variable argument list
to guint64.
2019-04-12 18:30:12 +02:00
Sebastian Dröge
e0c9d4f879 controlbinding: Check if the weak pointer was cleared before explicitly removing it
Otherwise we'll get an assertion if the object behind the weak pointer
was already destroyed in the meantime as we would pass NULL as first
argument to g_object_remove_weak_pointer().
2019-04-10 10:18:54 +03:00
Mathieu Duponchelle
2fa15d5371 event: add new seek parameter, "trickmode-interval"
When performing a key unit trickmode seek, it may be useful to
specify a minimum interval between the output frames, either
in very high rate cases, or as a protection against streams
that may contain an overly large amount of key frames.

One use case is ONVIF Section 6.5.3:

<https://www.onvif.org/specs/stream/ONVIF-Streaming-Spec.pdf>
2019-04-01 17:13:32 +00:00
Stephane Cerveau
a01c4965de gst_element_get_factory: update documentation
Inform about a potential NULL result.
2019-03-14 13:12:52 +01:00
Stephane Cerveau
b5af526c9c gst_element_factory_get_metadata: protect from null factory 2019-03-13 18:46:14 +01:00
Santiago Carot-Nemesio
706e10ad05 gsttaskpool: Do not block tasks while cleaning up the taskpool
There is a deadlock if any thread from the pool tries to push
a new task while other thread is waiting for the pool of threads
to finish. With this patch the thread will get an error when it
tries to add a new task while the taskpool is being cleaned up.
2019-03-08 17:27:30 +01:00
Marco Trevisan (Treviño)
b5286f0560 gsturi: Fix annotation on get_path to return a nullable
Use proper syntax or the (nullable): part will be part of the description
2019-03-06 19:46:46 +01:00
Marco Trevisan (Treviño)
951dc50d34 gstmessage: Fix annotations on details
Details argument should be nullable, but the docstring uses a wrong syntax.
2019-03-06 19:34:12 +01:00
Mathieu Duponchelle
5dc149f4f2 gstbuffer: store meta in add order
The previous implementation of add was implemented as a prepend,
switch to append as that seems like the expected order.
2019-03-04 12:57:02 +00:00
Santiago Carot-Nemesio
e322250fb1 taskpool: Set error in case something goes wrong in the default handlers 2019-02-28 17:02:30 +01:00
Tim-Philipp Müller
8d3ca40e9d meson: dist get_flex_version.py 2019-02-26 13:24:28 +00:00
Philipp Zabel
b611c4e0af plugin: add 0BSD as valid license
Add the zero-clause BSD license, which is an alteration of the ISC
license, to the list of valid licenses.
2019-02-25 14:58:22 +01:00
Philipp Zabel
bef07f73a2 plugin: fix link to 3-clause BSD license
The current link points to the 2-clause BSD license,
explicitly link to the 3-clause version of the license.
2019-02-25 14:51:18 +01:00
Nirbheek Chauhan
a1447b036c gstmacros.h: Fix restrict definition on MSVC
Turns out it's exposed as `__restrict`, not as `restrict`.

https://gitlab.freedesktop.org/gstreamer/gstreamer/merge_requests/95#note_120782
2019-02-20 17:51:40 +05:30
Nirbheek Chauhan
ea4b086142 gstmacros.h: Fix check for 'restrict' keyword
MSVC also defines it as a keyword. Fixes build errors in projects that
include MSVC's xkeycheck.h which ensures that keywords aren't overriden
with a define.
2019-02-20 01:25:11 +05:30
Seungha Yang
790f193d63 buffer: Don't miss return value on Windows build
... and use InterlockedExchangeAdd64 for the 64bit value.
InterlockedExchangeAdd is 32bit version.
2019-02-18 10:21:18 +09:00
Sebastian Dröge
2108c6228a bus: Make removing of signal/bus watches thread-safe
Between getting the GSource with the mutex and destroying it, something
else might've destroyed it already and we would have a dangling pointer.

Keep an additional reference just in case.
2019-02-15 13:23:37 +02:00
Sebastian Dröge
8de3344ecc bus: Don't allow removing signal watches with gst_bus_remove_watch()
Signal watches are reference counted and gst_bus_remove_watch() would
immediately remove it, breaking the reference counting. Only
gst_bus_remove_signal_watch() should be used for removing signal
watches.
2019-02-15 13:21:35 +02:00
Lawrence Troup
2276336621 pad: Document that pad unlink function is called with pad lock held
Fixes #353
2019-02-13 11:56:15 +00:00
Tim-Philipp Müller
f62ee97592 buffer: store sequence number for metas
For metas where order might be significant if multiple metas are
attached to the same buffer, so store a sequence number with the
meta when adding it to the buffer. This allows users of the meta
to make sure metas are processed in the right order.

We need a 64-bit integer for the sequence number here in the API,
a 32-bit one might overflow too easily with high packet/buffer
rates. We could do it rtp-seqnum style of course, but that's a
bit of a pain.

We could also make it so that gst_buffer_add_meta() just keeps metas in
order or rely on the order we add the metas in, but that seems too
fragile overall, when buffers (incl. metas) get merged or split.

Also add a compare function for easier sorting.

We store the seqnum in the MetaItem struct here and not in the
GstMeta struct since there's no padding in the GstMeta struct.
We could add a private struct to GstMeta before the start of
GstMeta, but that's what MetaItem effectively is implementation-
wise. We can still change this later if we want, since it's all
private.

Fixes #262
2019-02-12 17:53:08 +00:00
Sebastian Dröge
335826a3eb deviceprovider: It's (transfer none) not (transfer-none) 2019-02-09 11:35:59 +02:00
Thibault Saunier
97aa82387f device-provider: Allow notifying application of device changes
Thi introduces new APIs to post a `DEVICE_CHANGED` message on the
bus so the application is notifies when a device is modified. For
example, if the "defaultness" of a device was changed or any property
that can be changed at any time. Atomically changing the device
object notifying that way allow us to abtract away the internal threads.

New APIS:
  - gst_message_new_device_changed
  - gst_message_parse_device_changed
  - gst_device_provider_device_changed
2019-02-08 13:44:02 -03:00
Nirbheek Chauhan
c164b88ac1 meson: Extract flex version using a regex inside a script
Different builds of Flex on different platforms output different strings
in --version. For example:

macOS:
flex 2.5.35 Apple(flex-31)

Windows:
win_flex.exe 2.6.4
C:\Program Files (x86)\GnuWin32\bin\flex.EXE version 2.5.4

We need to look for a string that looks like a version, which means
a regex till https://github.com/mesonbuild/meson/issues/1609 is fixed.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/356
2019-02-08 16:54:10 +05:30
Sebastian Dröge
d3a2ed10fe datetime: new() and new_local_time() constructors are not nullable 2019-01-29 14:49:28 +00:00
Sebastian Dröge
f6816d5412 pad: Constructors are all not nullable
They can't possibly return NULL except in case of assertions.
2019-01-29 14:49:28 +00:00
Sebastian Dröge
92b38d2a00 padtemplate: Constructors are all nullable as they check the template name 2019-01-29 14:49:28 +00:00
Mathieu Duponchelle
57cefb5932 gstinfo: add Windows stacktraces support
This uses the DbgHelp library if available
2019-01-28 14:29:23 +00:00
Nicolas Dufresne
c816ec4f0e pad: Remove unneeded 64bit upcast in debug trace
The hook->hook_id is a gulong for which there are no portability issues
when tracing in printf format with %lu. So use %lu and remove the upcast
to 64 bit. This makes the code more consistent with everything else
tracing that hook_id and other gulong id.
2019-01-26 01:42:22 +00:00
Sebastian Dröge
5688773b91 taglist: Remove (scope call) annotation from gst_tag_register()
This was added in 7fdb15d6a2 but it is wrong. (scope call) is for
closures that only have to stay valid for the scope of the call, but the
tag merge function has to stay valid for the whole lifetime of the
application instead.

There's no appropriate scope annotation for that so we have to skip
these functions for now.
2019-01-24 07:52:34 +00:00
Mathieu Duponchelle
59c31d8d0f meson: improve flex version parsing
the output of flex --version can contain more than one space
2019-01-23 21:15:09 +01:00
Sebastian Dröge
a143d9cb0c pad: Fix printf format when printing hook id
It's a gulong so we have to cast it to a guint64 when using it with
G_GUINT64_FORMAT.

Spotted by Vincent Penvern.
2019-01-15 16:07:04 +00:00
Daniel Drake
e0c9b04538 deviceprovider: fix counting number of times started
GstDeviceProvider has a started_count private variable counter,
and the gst_device_provider_start() documentation emphasizes the
importance of balancing the start and stop calls.

However, when starting a provider that is already started, the
current code will never increment the counter more than once.

So you start it twice, but it will have start_count 1, which is the
maximum value it will ever see.

Then when you stop it twice, on the 2nd stop, after decrementing the
counter in gst_device_provider_stop():

  else if (provider->priv->started_count < 1) {
    g_critical
        ("Trying to stop a GstDeviceProvider %s which is already stopped",
        GST_OBJECT_NAME (provider));

and the program is killed.

Fix this by incrementing the counter when starting a device provider that
was already started.
2019-01-14 16:26:44 +08:00
Sebastian Dröge
37edc474e3 Revert "bin: Hold the state lock while removing elements from a bin"
This reverts commit 7f70d7a945
2019-01-10 12:05:34 +00:00
Jan Alexander Steffens (heftig)
c5eddea72a structure: Support stepped ranges when fixating
The step restriction was completely ignored until now.
2019-01-09 23:03:08 +00:00
Jan Alexander Steffens (heftig)
b77f7b6820 structure: Use GLib's CLAMP macro for fixating ranges
Just a bit of refactoring.
2019-01-09 23:03:08 +00:00
Sebastian Dröge
cacc834d8f element: Add note about racyness to gst_element_set_locked_state()
This is racy if the state lock of the parent bin is not taken. The
parent bin might've just checked the flag in another thread and as the
next step proceed to change the child element's state.
2019-01-09 16:12:26 +02:00
Sebastian Dröge
7f70d7a945 bin: Hold the state lock while removing elements from a bin
We need to take the state lock here to ensure that we're
not currently just before setting the state of this child
element. Otherwise it can happen that we removed the element
here and e.g. set it to NULL state, and shortly afterwards
have another thread set it to a higher state again as part of
a state change for the whole bin.

When adding an element to the bin this is not needed as we
require callers to always ensure after adding to the bin that
the new element is set to the correct state.
2019-01-07 14:08:00 +02:00
Edward Hervey
7c1d700384 parse: Move variable to block where it's used
There was a dead assignment used outside of the bin/pipeline creation
which was confusing (and unused). Just move that variable to
where it is actually used.

(Note that that variable was not needed outside of that block since
the refactoring done in 2b33d33185 )
2018-12-15 11:46:26 +01:00
Sebastian Dröge
4af3b3f159 pad: Print some debug information about pad probe hooks we remove 2018-12-14 18:37:53 +02:00
Guillaume Desmottes
e03f086fae gstcaps: add gst_caps_set_features_simple()
Convenient helper setting a caps feature on all the structures of a
caps.
2018-12-11 16:39:30 +01:00
Dardo D Kleiner
6318e7c675 buffer: Fix memory corruption in gst_buffer_foreach_meta() when removing metas
Fix corruption of meta list head when removing metas at the beginning
during iteration. Linked list handling in gst_buffer_foreach_meta
failed to track the previous entry and update the correct next pointer
when removing items from beyond the head of the list, resulting in
arbitrary list pointer corruption.

Closes #332
2018-12-05 20:50:45 +00:00
Jordan Petridis
84512152c1
Run gst-indent through the files
This is required before we enabled an indent test in the CI.

https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/33
2018-11-28 05:58:53 +02:00
Seungha Yang
3332e39baa gst: Fix string leak when G_VALUE_COLLECT_INIT() was failed
Returned string should be freed

Fixes #319
2018-11-12 20:12:41 +09:00
Sebastian Dröge
5f469abbed debugutils: Make sure that GST_DEBUG_GRAPH_SHOW_VERBOSE gets the correct value in introspection
Currently in Python it would become a signed 64 bit value but should
actually be an unsigned 32 bit value with all bits set.

This is the same problem as with GST_MESSAGE_TYPE_ANY.

See https://bugzilla.gnome.org/show_bug.cgi?id=732633
2018-11-10 19:08:52 +00:00
Havard Graff
1335110409 tests: fix tests when compiling with glib_checks=disabled
We won't be able to do ASSERT_CRITICAL, but the main body of the tests
are still valid, and given we ship GStreamer with this configuration, it
is important to be able to run some tests against it.
2018-11-10 15:37:36 +00:00
Sebastian Dröge
1fda8c3bcf clock: Move clock GWeakRef to a private GstClockEntry struct
There's no need for it to be in the public struct and we can keep the
padding for things to be added in the future.
2018-11-08 09:07:07 +00:00
Matthew Waters
4fc4ad87d5 query: add a new bitrate query
Allows determining from downstream what the expected bitrate of a stream
may be which is useful in queue2 for setting time based limits when
upstream does not provide timing information.

Implement bitrate query handling in queue2

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/60
2018-11-07 15:04:14 +00:00
Havard Graff
c6e5f59b2c systemclock: pre-calculate the ratio for multiplying the perf-count on win
Saves a lot of computations.
2018-11-06 10:39:05 +01:00
Havard Graff
4b3872f757 gstpad: use hook_id instead of hook in called_probes list
A pointer to a hook in this list can easily not be unique, given both
the slice-allocator reusing memory, and the OS re-using freed blocks
in malloc.

By doing many repeated add and remove of probes, this becomes very easily
reproduced.

Instead use hook_id, which *is* unique for a added GHook.
2018-11-06 10:04:00 +01:00
Matthew Waters
ddfcc28c8b gst/buffer: add a new function for wrapping GBytes
One restriction on the GBytes is that the data cannot be NULL as this is
explicitly forbidden by GstMemory.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/318
2018-11-06 16:12:42 +11:00
Jan Alexander Steffens (heftig)
92d5d5bc57
gst_clear_*: Remove volatile from arguments
g_clear_pointer is not thread-safe and never was. GLib similarly removed
the volatile from g_clear_object in 2aacef39b1.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/327
2018-11-05 14:16:36 +01:00
Jan Alexander Steffens (heftig)
1c3db34150
gst_clear_*: Cast to GstMiniObject** when needed 2018-11-05 14:03:54 +01:00
Niels De Graef
b7bb44fb72 query: add gst_query_take()
This makes its API consistent with the other GstMiniObject subclasses
2018-11-05 11:06:30 +00:00
Niels De Graef
ef1438f847 message: add gst_message_take()
This makes its API consistent with the other GstMiniObject subclasses
2018-11-05 11:06:30 +00:00
Niels De Graef
00b358d461 taglist: add gst_tag_list_replace/take()
This makes its API consistent with the other GstMiniObject subclasses.
2018-11-05 11:06:30 +00:00
Niels De Graef
63e3edecfd bufferlist: add gst_buffer_list_replace/take()
This makes its API consistent with the other GstMiniObject subclasses.
2018-11-05 11:06:30 +00:00
Niels De Graef
e35dc31fda structure: add gst_clear_structure()
Basically, you can use this instead of using gst_structure_free (which
needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
fdeddb4b93 taglist: add gst_clear_tag_list()
Basically, you can use this instead of using gst_tag_list_unref (which
needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
bb07550c2d query: add gst_clear_query()
Basically, you can use this instead of using gst_query_unref (which
needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
24f1fb252a message: add gst_clear_message()
Basically, you can use this instead of using gst_message_unref (which
needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
efbfa54a4a event: add gst_clear_event()
Basically, you can use this instead of using gst_event_unref (which
needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
a0fd447abe caps: add gst_clear_caps()
Basically, you can use this instead of using gst_caps_unref (which
needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
fa1d7a86af bufferlist: add gst_clear_buffer_list()
Basically, you can use this instead of using gst_buffer_list_unref
(which needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
1068d9e2c8 buffer: add gst_clear_buffer()
Basically, you can use this instead of using gst_buffer_unref (which
needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
7e69305657 miniobject: add gst_clear_mini_object()
This is based on g_clear_object(). Basically, you can use this instead
of using gst_mini_object_unref (which needs to be preceded by a NULL-check).

Also fixes #275
2018-11-05 11:06:30 +00:00
Niels De Graef
c5793f82d3 object: add gst_clear_object()
This is based on g_clear_object(). Basically, you can use this instead
of using g_object_unref (which needs to be preceded by a NULL-check).

Fixes #275
2018-11-05 11:06:30 +00:00
Sebastian Dröge
8250b8d81a clock: Move clock weak ref into its own ABI struct
Otherwise it will be hard to add other things into the padding later
without breaking API.
2018-11-03 19:00:36 +02:00
Sebastian Dröge
4de89865d4 clock: Add new functions to the documentation 2018-11-03 19:00:35 +02:00
Sebastian Dröge
f34472822c clock: Fix deprecation handling of the GstClock clock field 2018-11-03 19:00:24 +02:00
Thomas Bluemel
36ab067905 clock: Keep weak reference to underlying clock
Fixes potential segmentation fault when using a GstClockID that
is referencing an already freed GstClock

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/187
2018-11-03 19:00:22 +02:00
Jan Schmidt
80015d69a7 segment: Allow stop == -1 in gst_segment_to_running_time() and rate < 0
If a segment has stop == -1, then gst_segment_to_running_time()
would refuse to calculate a running time for negative rates,
but gst_segment_do_seek() allows this scenario and uses a
valid duration for calculations.

Make the 2 functions consistent by using any configured duration
to calculate a running time too in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=796559
2018-10-29 04:03:56 +11:00
Jordan Petridis
9251cd9bf5 gst: skip format specifiers from gir generation
GST_TIME_FORMAT, GST_TIME_ARGS, GST_STIME_FORMAT, GST_STIME_ARGS
GST_PTR_FORMAT, GST_SEGMENT_FORMAT, GST_FOURCC_FORMAT and
GST_FOURCC_ARGS are format specifiers.
They can't be used outside of C and should be generated in the gir.

https://bugzilla.gnome.org/show_bug.cgi?id=797320
2018-10-23 16:21:58 +01:00
Jordan Petridis
cd6ceb1c41 gst/gsterror.h: skip GST_ERROR_SYSTEM during gir generation
GST_ERROR_SYSTEM can't really be used outside of C and should
be skipped.

https://bugzilla.gnome.org/show_bug.cgi?id=797320
2018-10-23 16:21:58 +01:00
Philippe Normand
a2832689ad gstelementfactory: Remove MEDIA_HARDWARE FactoryType
Using the MEDIA_ classifier prefix was inappropriate. It is sufficient to
specify the additional klass name that element can set in their metadata.

(follow-up of commit ca4b61c555)

https://bugzilla.gnome.org/show_bug.cgi?id=796921
2018-10-12 17:20:02 +01:00
Philippe Normand
ca4b61c555 gstelementfactory: Add MEDIA_HARDWARE klass classifier
The Harware factory type classifier allows elements (decoders and encoders,
mostly) to advertize they rely on hardware devices to perform encoding or
decoding operations. This classifier can be used by applications to filter and
select only the elements that use hardware devices, for instance to ensure
zero-copy support is enabled for a specific pipeline.

https://bugzilla.gnome.org/show_bug.cgi?id=796921
2018-10-12 10:08:47 +01:00
Thibault Saunier
b89b1802df protection: Fix the string to define unspecified system id
Setting it to "unspecified-system-id".
2018-10-03 19:28:08 +02:00
Yacine Bandou
05a3da347b protection: Add a new definition for unspecified system protection
In some cases the system protection ID is not present in the contents
or in their metadata.
This define is used to set the value of the "system_id" field in GstProtectionEvent,
with this value, the application will use an external information to choose which
protection system to use.

Example: The matroskademux uses this value in the case of encrypted WebM,
the application will choose the appropriate protection system based on the information
received through EME API.

https://bugzilla.gnome.org/show_bug.cgi?id=797231
2018-10-03 17:05:45 +02:00
Mathieu Duponchelle
2fee579747 element: remove inactive pad g_warning in add_pad
The documentation incorrectly used to state that the pads were
not automatically activated when added, whereas we actually do
that when appropriate.

Callers of gst_element_add_pad must not hold the object lock,
which implies that they cannot perform the same checks as
add_pad in a non-racy manner.

This updates the documentation, and removes the g_warning
that was output before performing automatic activation.

https://bugzilla.gnome.org/show_bug.cgi?id=797181
2018-09-27 12:46:50 +02:00
Tim-Philipp Müller
57c8e0146f libs: figure out right export define in configure
Add new GST_API_EXPORT in config.h and use that for GST_*_API
decorators instead of GST_EXPORT.

The right export define depends on the toolchain and whether
we're using -fvisibility=hidden or not, so it's better to set it
to the right thing directly than hard-coding a compiler whitelist
in the public header.

We put the export define into config.h instead of passing it via the
command line to the compiler because it might contain spaces and brackets
and in the autotools scenario we'd have to pass that through multiple
layers of plumbing and Makefile/shell escaping and we're just not going
to be *that* lucky.

The export define is only used if we're compiling our lib, not by external
users of the lib headers, so it's not a problem to put it into config.h

Also, this means all .c files of libs need to include config.h
to get the export marker defined, so fix up a few that didn't
include config.h.

This commit depends on a common submodule commit that makes gst-glib-gen.mak
add an #include "config.h" to generated enum/marshal .c files for the
autotools build.

https://bugzilla.gnome.org/show_bug.cgi?id=797185
2018-09-24 08:39:37 +01:00
Tim-Philipp Müller
46ed0f0489 libs: fix 'inconsistent DLL linkage' warnings on Windows
For each lib we build export its own API in headers when we're
building it, otherwise import the API from the headers.

This fixes linker warnings on Windows when building with MSVC.

The problem was that we had defined all GST_*_API decorators
unconditionally to GST_EXPORT. This was intentional and only
supposed to be temporary, but caused linker warnings because
we tell the linker that we want to export all symbols even
those from externall DLLs, and when the linker notices that
they were in external DLLS and not present locally it warns.

What we need to do when building each library is: export
the library's own symbols and import all other symbols. To
this end we define e.g. BUILDING_GST_FOO and then we define
the GST_FOO_API decorator either to export or to import
symbols depending on whether BUILDING_GST_FOO is set or not.
That way external users of each library API automatically
get the import.

https://bugzilla.gnome.org/show_bug.cgi?id=797185
2018-09-23 23:23:01 +01:00
Tim-Philipp Müller
50038bed79 gstconfig.h: add GST_API_IMPORT define
This is for use by the various GST_*_API decorators and
will be what they get defined to when a library API is being
used by external users of that library (not the library itself
whilst it's being compiled).

In most cases it will simply map to a plain 'extern' but on
Windows with MSVC it will need to map to __declspec(dllimport).
For functions this is not strictly needed, but for exported
variables it is.

https://bugzilla.gnome.org/show_bug.cgi?id=797185
2018-09-23 23:23:01 +01:00
Philippe Normand
616d588b52 bin: Fix use-after-free issue in gst_bin_add()
gst_element_post_message() takes ownership of the message so we need to increase
its refcount until we no longer require access to its data (context_type).

https://bugzilla.gnome.org/show_bug.cgi?id=797099
2018-09-08 19:15:41 +01:00
Philippe Normand
30a3fe53fa utils: Set default values for position and duration query results
https://bugzilla.gnome.org/show_bug.cgi?id=797066
2018-09-03 12:06:35 +01:00
Sebastian Dröge
e6e22af828 Revert "pad: Don't drop LATENCY queries with default implementation"
This reverts commit 794944f779.

Accumulating non-live latency values generally makes no sense and often
gives invalid results with min>max
2018-08-31 12:16:43 +03:00
Sebastian Dröge
5c4317c399 Revert "pad: Accumulate live/non-live latency values separately"
This reverts commit f5783e1cac.
2018-08-31 12:16:43 +03:00
Nirbheek Chauhan
c389c59b22 meson: Maintain macOS ABI through dylib versioning
Requires Meson 0.48, but the feature will be ignored on older versions
so it's safe to add it without bumping the requirement.

Documentation:
https://github.com/mesonbuild/meson/blob/master/docs/markdown/Reference-manual.md#shared_library
2018-08-31 14:40:14 +05:30
Sebastian Dröge
f5783e1cac pad: Accumulate live/non-live latency values separately
And only ever use the non-live values if all pads are non-live,
otherwise only use the results of all live pads.

It's unclear what one would use the values for in the non-live case, but
by this we at least pass them through correctly then.

This is a follow-up for 794944f779, which
causes wrong latency calculations if the first pad is non-live but a
later pad is actually live. In that case the live values would be
accumulated together with the values of the non-live first pad,
generally causing wrong min/max latencies to be calculated.
2018-08-31 11:44:34 +03:00
Jan Schmidt
260b9791fc gstsegment: Handle positions before the segment properly
Fixes for gst_segment_position_from_running_time_full() when
converting running_times that precede the segment start (or
stop in a negative rate segment)

The return value was incorrectly negated in those cases.

Add some more unit test checks for those cases, and especially
for segments with offsets.
2018-08-28 01:54:02 +10:00
Tim-Philipp Müller
de8fe283d6 autotools: stop controlling symbol visibility with -export-symbols-regex
Instead, use -fvisibility=hidden and explicit exports via GST_EXPORT.
This should result in consistent behaviour for the autotools and
Meson builds where this is done already, and will allow us to drop
the win32 .def files.
2018-08-12 23:26:25 +01:00
Tim-Philipp Müller
ce4698487e meson: add option to disable parse-launch pipeline string parser 2018-08-10 00:08:43 +01:00
Sebastian Dröge
942fc7f79e gst: Add poisoning to more types 2018-08-03 14:31:34 +03:00
Sebastian Dröge
babd0e5f5d pad: Update pad offsets on the current event if the offset changed in pad probes
https://bugzilla.gnome.org/show_bug.cgi?id=796898
2018-08-01 14:23:04 +03:00
Sebastian Dröge
c3d3cf074e pad: Ensure that the pad is blocked for IDLE probes if they are called from the streaming thread too
IDLE probes that are directly called when being added will increase /
decrease the "number of IDLE probes running" counter around the call,
but when running from the streaming thread this won't happen.

This has the effect that when running from a streaming thread it is
possible to push serialized events or data out of the pad without
problems, but otherwise it would deadlock because serialized data would
wait for the IDLE probe to finish first (it is blocking after all!).

With this change it will now always consistently deadlock instead of
just every once in a while, which should make it obvious why this
happens and prevent racy deadlocks in application code.

https://bugzilla.gnome.org/show_bug.cgi?id=796895
2018-08-01 14:23:04 +03:00
Sebastian Dröge
b079334c1c gst: Simplify some boolean expressions
(!x || (x && y)) is the same as (!x || y)

https://bugzilla.gnome.org/show_bug.cgi?id=796847
2018-07-24 09:58:31 +03:00
Sebastian Dröge
2aa9ad9c62 Revert "pad: Handle changing sticky events in pad probes"
This reverts commit 11e0f451eb.

When pushing a sticky event out of a pad with a pad probe or pad offset,
those should not be applied to the event that is actually stored in the
event but only in the event sent downstream. The pad probe and pad
offsets are conceptually *after* the pad, added by external code and
should not affect any internal state of pads/elements.

Also storing the modified event has the side-effect that a re-sent event
would arrive with any previous modifications done by the same pad probe
again inside that pad probe, and it would have to check if its
modifications are already applied or not.

For sink pads and generally for events arriving in a pad, some further
changes are still needed and those are tracked in
  https://bugzilla.gnome.org/show_bug.cgi?id=765049

In addition, the commit also had a refcounting problem with events,
causing already destroyed events to be stored inside pads.
2018-07-23 23:17:54 +03:00
Mathieu Duponchelle
9831c9bbdb bus: add missing (out) annotation to get_poll_fd() 2018-07-20 23:52:01 +02:00
Sebastian Dröge
99a534271a sample: Set buffer/caps/buffer-lists to NULL correctly when replacing them with NULL 2018-07-10 08:48:47 +02:00
Sebastian Dröge
cb51bd6b31 bufferlist: Prevent gst_buffer_list_foreach() from modifying non-writeable lists
Previously gst_buffer_list_foreach() could modify (drop or replace)
buffers in non-writable lists, which could cause all kinds of problems
if other code also has a reference to the list and assumes that it stays
the same.

https://bugzilla.gnome.org/show_bug.cgi?id=796692
2018-07-09 09:45:45 +02:00
Sebastian Dröge
6fa351407a miniobject: Add parent pointers to the miniobject to influence writability
Every container of miniobjects now needs to store itself as parent in
the child object, and remove itself again at a later time.

A miniobject is only writable if there is at most one parent, and that
parent is writable itself, and if the reference count of the miniobject
is 1.

GstBuffer (for memories), GstBufferList (for buffers) and GstSample (for
caps, buffer, bufferlist) was updated accordingly.

Without this it was possible to have e.g. a bufferlist with refcount 2
in two places, modifying the same buffer with refcount 1 at the same
time.

https://bugzilla.gnome.org/show_bug.cgi?id=796692
2018-07-09 09:45:45 +02:00
Bastian Köcher
cd3e55c38e gstreamer: fix install dir for configure files
Nixos installs into a non-standard includedir.

https://bugzilla.gnome.org/show_bug.cgi?id=794856
2018-07-07 12:42:17 +02:00
Nicolas Dufresne
9722e89644 structure: Update doc error in ARRAY/LIST helpers 2018-07-04 14:00:35 -04:00
Philippe Normand
cc55b304ef protection: Release decryptors list, even if it's empty
https://bugzilla.gnome.org/show_bug.cgi?id=796651
2018-06-25 16:38:13 +01:00
Tim-Philipp Müller
2db8e3705f Update for g_type_class_add_private() deprecation in recent GLib
https://gitlab.gnome.org/GNOME/glib/merge_requests/7
2018-06-24 12:49:14 +02:00
Sebastian Dröge
8f496b7392 event: Unset SNAP flags when creating a new seek event without KEY_UNIT flag
The SNAP flags only make sense in combination with the KEY_UNIT flag,
and without they expose all kinds of unexpected behaviour in various
elements that don't expect this from happening.

Also warn if this ever happens.

https://bugzilla.gnome.org/show_bug.cgi?id=796558
2018-06-18 10:31:16 +03:00
Sebastian Dröge
1908daf29c event: Require writable events for setting the running-time-offset and sequence number
Otherwise multiple code paths with the same event could change the
values on each other.

https://bugzilla.gnome.org/show_bug.cgi?id=796615
2018-06-18 10:30:51 +03:00
Guillaume Desmottes
6dba0d91ed gst_structure_to_string: display actual value of pointers
We used to always display "NULL" which was pretty confusing when
debugging.

https://bugzilla.gnome.org/show_bug.cgi?id=794355
2018-06-15 11:37:24 +02:00
Thibault Saunier
8833ca942e stream: Add some missing API safe guards 2018-06-13 16:27:24 -04:00
Tim-Philipp Müller
b0777476ff poll: minor docs clarification
'Not implemented' could be misinterpreted to mean that
the API doesn't even exist there.
2018-06-08 17:58:43 +01:00
Guillaume Desmottes
b2593133b5 poll: add API to watch for POLLPRI
Windows doesn't seem to have an equivalent of POLLPRI so disabled those
functions on this platform.

This API can be used, for example, to wait for video4linux events which
are using POLLPRI.

https://bugzilla.gnome.org/show_bug.cgi?id=794977
2018-06-08 11:53:55 -04:00
Guillaume Desmottes
1e321eb51f poll: stop treating on POLLPRI as 'read'
Current code was considering "can read" as having either POLLIN or POLLPRI being
set.
This may lead to client being awaken because of POLLPRI, starting a blocking
read and getting stuck because there is actually nothing to read.

This patch removes POLLPRI handling in read code and I'll add specific
API to wait for POLLPRI.

https://bugzilla.gnome.org/show_bug.cgi?id=794977
2018-06-08 11:53:55 -04:00
Edward Hervey
52d4ae7680 message: Only allow setting valid seqnum on messages
If we want to make sure we never end up with invalid seqnum on
messages let's forbid setting them.
2018-06-05 17:01:05 +02:00
Edward Hervey
14e849927d event: Only allow setting valid seqnum on events
If we want to make sure we never end up with invalid seqnum on
events let's forbid setting them.
2018-06-05 16:59:50 +02:00
Edward Hervey
5b0fe8d174 bin: Make sure we don't use invalid seqnums on messages
There is a possibility that the accumlation functions don't set
a seqnum. Make sure we only set/override the seqnum of the new
messages if we *have* a valid upstream seqnum to use
2018-06-05 16:58:21 +02:00
Edward Hervey
dea69f4c1e datetime: Update/fix documentation 2018-05-21 11:37:00 +02:00
Edward Hervey
438c1c116d sample: Update documentation 2018-05-21 11:36:42 +02:00
Edward Hervey
580f94ee97 gst: Add an example to GST_STATIC_PAD_TEMPLATE macro 2018-05-21 11:17:30 +02:00
Mark Nauwelaerts
a7456eec0d gst: add some GIR array annotations 2018-05-21 09:15:09 +02:00
Sebastian Dröge
13d5957fd7 pad: Fix race condition causing the same probe to be called multiple times
Probes were remembering a cookie that was used to check if the probe was
already called this time before the probes list changed. However the
same probes could've been called by another thread in between and thus
gotten a new cookie, and would then be called a second time.

https://bugzilla.gnome.org/show_bug.cgi?id=795987
2018-05-11 18:54:55 +03:00
Edward Hervey
80dfb7bb3f gst: Use memcpy() instead of strncpy() where appropriate
strncpy() is assumed to be for strings so the compiler assumes that
it will need an extra byte for the string-terminaning NULL.

For cases where we know it's actually "binary" data, just copy it
with memcpy.

https://bugzilla.gnome.org/show_bug.cgi?id=795756
2018-05-07 17:05:36 +02:00
Jan Schmidt
273d0a05e8 gstevent: Add some FIXME: 2.0 about removing the timestamp
The timestamp field isn't valuable or used well anywhere. We
should remove it for GStreamer 2.0

https://bugzilla.gnome.org/show_bug.cgi?id=761462
2018-05-07 01:33:16 +10:00
Nirbheek Chauhan
4fb02fc85b meson: Update option names to omit disable_ and with- prefixes
Also yield common options to the outer project (gst-build in our case)
so that they don't have to be set manually.
2018-05-05 20:30:43 +05:30
Tim-Philipp Müller
a5ecb465a9 bufferlist: fix abort due to underflow when creating 0-sized list
gst_buffer_list_new_sized(0) will cause an underflow in a calculation
which then makes it try to allocate huge amounts of memory, which
may lead to aborts.

https://bugzilla.gnome.org/show_bug.cgi?id=795758
2018-05-05 16:20:05 +02:00
Francisco Velazquez
554f604d37 debugutils: Update configure option in documentation
Update documentation on non existent option `gst-enable-gst-debug'.  Instead,
one has to make sure that the `--disable-gst-debug' option was not used when
compiling GStreamer (i.e., `./configure --disable-gst-debug').

https://bugzilla.gnome.org/show_bug.cgi?id=795801
2018-05-04 15:25:24 +03:00
luz.paz
98200ddd8d Source code typo fixes
https://bugzilla.gnome.org/show_bug.cgi?id=795610
2018-05-01 11:25:21 +01:00
luz.paz
4a402c1c7d Fix typos in comments and docs
Found via `codespell`

https://bugzilla.gnome.org/show_bug.cgi?id=795610
2018-05-01 11:18:03 +01:00
Tim-Philipp Müller
0691278377 buffer: don't over-allocate internal GstMeta items
We would allocate space for two GstMeta structs even though
there is only one in the end (the one in GstMetaItem and in
GstFooMeta overlap).
2018-04-25 18:28:00 +01:00
Xavier Claessens
b00b1d5361 Meson: Use library() to build both static and shared libs
Meson supports building both static and shared libraries in a single
library() call. It has the advantage of reusing the same .o objects and
thus avoid double compilation.

https://bugzilla.gnome.org/show_bug.cgi?id=794627
2018-04-25 00:40:30 +01:00
Thibault Saunier
121cfe3575 Revert "docs: Minor fix in event_new_select_streams"
This reverts commit f218917d02.
2018-04-18 11:35:20 -03:00
Thibault Saunier
f218917d02 docs: Minor fix in event_new_select_streams 2018-04-17 20:03:37 -03:00
Thibault Saunier
b27ee943c2 caps: Add a macro based variant of gst_caps_copy
This way we do not hit the performance overhead of having the method
not inlined but still can use it from bindings.
2018-04-17 14:00:20 -03:00
Thibault Saunier
11e0f451eb pad: Handle changing sticky events in pad probes
In the case where the user sets a new padprobeinfo->data in a probe
where the data is a sticky event, the new sticky event should be automatically
sticked on the probed pad.

https://bugzilla.gnome.org/show_bug.cgi?id=795330
2018-04-17 13:36:26 -03:00
Thibault Saunier
588e054e6d debug: Make PADS debug background blue
Red on red was... suboptimal!

https://bugzilla.gnome.org/show_bug.cgi?id=795330
2018-04-17 13:36:26 -03:00
Thibault Saunier
d1b2d3429c gst: Stop inlining gst_caps_copy
This way it gets exposed to bindings through GObject Introspection.
2018-04-17 10:15:06 -03:00
Aurelien Jarno
8a156d1725 gstconfig.h.in: initial RISC-V support
RISC-V supports unaligned accesses, but these might run extremely slowly
depending on the implementation. Therefore set GST_HAVE_UNALIGNED_ACCESS
to 0 on this architecture.

https://bugzilla.gnome.org/show_bug.cgi?id=795271
2018-04-15 11:22:48 +03:00
Mathieu Duponchelle
ed5d888ba5 gstsample: new API
gst_sample_set_buffer
gst_sample_set_caps
gst_sample_set_segment
gst_sample_set_info
gst_sample_is_writable
gst_sample_make_writable

This commit makes it possible to reuse a sample object and avoid
unnecessary memory allocations, for example in appsink.

In addition, writability is now required to set the buffer list.

https://bugzilla.gnome.org/show_bug.cgi?id=795144
2018-04-13 23:44:54 +02:00
Mark Nauwelaerts
ea0f8ebce1 gst: add some GIR array annotations 2018-04-13 20:16:33 +02:00
Víctor Manuel Jáquez Leal
e141c85f96 debugutils: Add missing parameters documentation 2018-04-13 10:57:07 +02:00
Tim-Philipp Müller
ae612551fa gstdebug: fix occasional deadlocks on windows when outputting debug logging
When outputting debug logs on Windows, some sections are protected
with a non-recursive lock. Turns out though that gst_debug_message_get()
might indirectly, via our printf format extensions, call code which
in turn would try to log something when it can't handle something. If
that happens we end up in gst_debug_log_default() again recursively and
try to again take the lock that's already taken, thus deadlocking.

Format the debug message string outside of the critical section
instead to avoid this.

https://bugzilla.gnome.org/show_bug.cgi?id=784382
2018-04-11 23:12:44 +01:00
Tim-Philipp Müller
629bd08e02 gsturi: include gstconfig.h earlier for GST_API define 2018-04-09 14:19:19 +01:00
Jan Alexander Steffens (heftig)
6436437d83 gstinfo: fix debug levels being applied in the wrong order
Remove unneeded reapplication of patterns. Besides being
superfluous (gst_debug_reset_threshold already applies
patterns) it was also wrong and didn't stop checking patterns
after the first match (broken in 67e9d139).

Also fix up unit test which checked for the wrong order.

https://bugzilla.gnome.org/show_bug.cgi?id=794717
2018-04-05 11:00:09 +01:00
Jan Alexander Steffens (heftig)
c4ff069864 gstinfo: Simplify gst_debug_reset_threshold() implementation
Replace the while+goto with a for+break and check walk to determine
whether we had a match. Move up the unlock to keep the locked section as
small as possible.

https://bugzilla.gnome.org/show_bug.cgi?id=794717
2018-04-05 10:52:13 +01:00
Jan Alexander Steffens (heftig)
b12df466f2 gstinfo: Reduce code duplication around level pattern matching
Move the match, logging and set_threshold to a new function.

The log levels are different, so choose the higher one (LOG). Having two
equivalent messages at two different levels seems like a bad idea
anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=794717
2018-04-05 10:52:13 +01:00
Tim-Philipp Müller
8117a29408 streamcollection: embed GQueue into the private struct 2018-04-05 10:52:13 +01:00
Edward Hervey
f5b962cd0d gst: Documentation fixes
* Fix copy-paste error for GstParamSpecArray documentation
* Use proper field name for tracer utils documentation
2018-04-02 12:42:30 +02:00
Matthew Waters
f5f1fb5780 bin: fix deep-element-added signal debug log message
Adding the bin to the child element doesn't really make sense.
2018-03-29 12:36:11 +11:00
Tim-Philipp Müller
ccf7751613 meson: remove no longer needed core enumtypes template files 2018-03-22 12:50:55 +00:00
Alessandro Decina
145eca289a meson: use gnome.mkenums_simple() to generate core enumtypes 2018-03-22 12:50:30 +00:00
Petr Kulhavy
7d75d3ef41 gstbuffer: reset buffer to its original size if intact
Enhance default_reset_buffer() to resize the buffer to its full size if the
memory hasn't changed. This allows to reuse the buffer even if the offset has
changed or the size has shrunk, rather than freeing the buffer.

Change related to: https://bugzilla.gnome.org/show_bug.cgi?id=772841
2018-03-21 17:50:30 -04:00
Sebastian Dröge
bd116608de paramspecs: Set g-i annotation values for GST_PARAM_* constants 2018-03-21 10:13:44 +02:00
Sebastian Dröge
e884980666 elementfactory: GST_ELEMENT_FACTORY_TYPE_DECODABLE had DECRYPTOR added, update g-i annotation value 2018-03-21 10:11:30 +02:00
Sebastian Dröge
70c86bc998 gst: Fix compilation with latest GLib
g_object_ref() forwards the type of its argument nowadays.

./grammar.y:409:14: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
gstchildproxy.c:212:7: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
2018-03-20 16:11:01 +02:00
Tim-Philipp Müller
8983cce9f6 gst: GST_EXPORT -> GST_API
We need different export decorators for the different libs.
For now no actual change though, just rename before the release,
and add prelude headers to define the new decorator to GST_EXPORT.
2018-03-13 00:45:35 +00:00
Matthew Waters
7a008ea481 promise: be more explicit in docs about who/when to use reply/interrupt/expire
https://bugzilla.gnome.org/show_bug.cgi?id=794153
2018-03-12 22:06:21 +11:00
Sebastian Dröge
f204b57fa5 debugutils: Change dot-file functions documentation to proper gtk-doc
This way gobject-introspection also picks it up and handles our
annotations.

See https://gitlab.gnome.org/GNOME/gobject-introspection/issues/194
2018-03-05 11:52:24 +02:00
Sebastian Dröge
a1bf0f0e6a gst: Add some more (type filename) annotations 2018-03-04 10:25:08 +02:00
Mathieu Duponchelle
d67623c7a9 meson: enable more warnings
Modeled on the autotools build, -W flags are only
added if the compiler supports them.

https://bugzilla.gnome.org/show_bug.cgi?id=793958
2018-03-01 17:20:48 +01:00
Mathieu Duponchelle
609adc0609 ghostpad: ensure we build a ghost pad ..
When we construct from a custom GType
2018-03-01 01:12:07 +01:00
Mathieu Duponchelle
60fae518b0 pad: fix mixed declarations 2018-03-01 01:09:48 +01:00
Mathieu Duponchelle
7847e69ef8 pad, ghostpad: use the template gtype if specified
Also make sure the GType passed to the with_gtype versions
of the template constructors is_a GstPad

https://bugzilla.gnome.org/show_bug.cgi?id=793933
2018-03-01 00:39:08 +01:00
Mark Nauwelaerts
9fb56a32f5 gst: fix some GIR annotations
Mostly related to out parameters and their transfer
2018-02-18 12:16:36 +01:00
Tim-Philipp Müller
ea402c7034 gstconfig.h: want deprecation warnings if GST_DISABLE_DEPRECATED is *set*
Fix inverted logic. If GST_DISABLE_DEPRECATED is undefined,
we don't want warnings about deprecated API, and if it's
defined we do want warnings.
2018-02-15 12:11:41 +00:00
Tim-Philipp Müller
ffa4dc4dce autotools: use -fno-strict-aliasing where supported
https://bugzilla.gnome.org/show_bug.cgi?id=769183
2018-02-03 17:56:04 +01:00
Tim-Philipp Müller
08dab770d6 buffer: fix gtk-doc warning regarding _get_n_meta() declaration 2018-02-03 17:55:29 +01:00
Matthew Waters
442aca430a gstpromise: add since 1.14 markers 2018-02-02 15:06:36 +11:00
Mathieu Duponchelle
8451a2ab04 gstbuffer.h: move FLAG_LAST documentation back to the bottom 2018-01-31 14:01:36 +01:00
Mathieu Duponchelle
ebcdfd2e9c gstbuffer: add GST_BUFFER_FLAG_NON_DROPPABLE
This can be used to identify buffers for which a higher percentage
of redundancy should be allocated when performing forward error
correction, or to prevent still video frames from being dropped by
elements due to QoS.

https://bugzilla.gnome.org/show_bug.cgi?id=793008
2018-01-31 13:34:13 +01:00
Tim-Philipp Müller
cd10f14726 buffer: add gst_buffer_get_n_meta() convenience function
Counts how many metas there are for a certain api type.

https://bugzilla.gnome.org/show_bug.cgi?id=791918
2018-01-27 11:18:19 +00:00
Arun Raghavan
b5028383ab gst: Fix up a bunch of GIR annotations
This is mostly on nullable return values, and some other minor ones that
I ran across.

https://bugzilla.gnome.org/show_bug.cgi?id=789319
2018-01-27 10:41:24 +00:00
Arun Raghavan
41a59cddb6 devicemonitor: Return NULL instead of FALSE
Same effect, meaning is clearer.

https://bugzilla.gnome.org/show_bug.cgi?id=789319
2018-01-27 10:29:18 +00:00
François Laignel
46b1a6e505 message: Add gst_message_writable_structure()
Add gst_message_writable_structure() to be able to add extra fields to
messages (and be on par with GstEvent).

https://bugzilla.gnome.org/show_bug.cgi?id=792928
2018-01-26 16:09:10 +02:00
Tim-Philipp Müller
db1d99db76 childproxy: gracefully handle methods being NULL
Do this for all method invoke functions for consistency.

https://bugzilla.gnome.org/show_bug.cgi?id=750154
2018-01-20 15:30:53 +00:00
Sebastian Dröge
e8bae061f1 padtemplate: And add missing GST_EXPORT to gst_pad_template_new_with_gtype() 2018-01-18 19:16:12 +02:00
Sebastian Dröge
6b1df25441 padtemplate: Add missing Since: 1.14 marker to gst_pad_template_new_with_gtype() 2018-01-18 19:15:09 +02:00
Sebastian Dröge
50433576b5 padtemplate: Add gst_pad_template_new_with_gtype()
For being able to create a pad template with GType without having a
static pad template.
2018-01-18 19:09:46 +02:00
Sebastian Dröge
645840676c padtemplate: Add Since: 1.14 marker to gst_pad_template_new_from_static_pad_template_with_gtype() 2018-01-18 19:09:46 +02:00
Edward Hervey
31383e4413 gstpad: Avoid stream-dead-lock on deactivation
The following case can happen when two thread try to activate and
deactivate a pad at the same time:
T1: starts to deactivate, calls pre_activate(), sets in_activation
    to TRUE and carries on
T2: starts to activate, calls pre_activate(), in_activation is TRUE
    so it waits on the GCond
T1: calls post_activate(), tries to acquire the streaming lock ..
    but can't because T2 is currently holding it

With this patch, the deadlock will no longer happen but does not
solve the problem that:
T2: will resume activation of the pad, set the pad mode to the target
   one (PUSH or PULL) and eventually the streaming lock gets released.
T1: is able to finish calling post_activate() ... but ... the pad
   wasn't deactivated (T2 was the last one to "activate" the pad.

https://bugzilla.gnome.org/show_bug.cgi?id=792341
2018-01-16 10:29:18 +01:00
Edward Hervey
6cd783b9fc gstpad: Release pending g_cond_wait() when stopping/pausing task
Otherwise we would deadlock waiting forever for the streaming lock
to be released

https://bugzilla.gnome.org/show_bug.cgi?id=792341
2018-01-15 18:19:48 +01:00
Tim-Philipp Müller
968dd651c2 docs: explicit refer to GObject docs for floating refs
https://bugzilla.gnome.org/show_bug.cgi?id=788477
2018-01-12 18:47:17 +00:00
Tim-Philipp Müller
d7a9b08268 utils: use g_get_monotonic_time() as fallback in gst_utils_get_timestamp()
This is a better fit given that the function docs say this
should (only) be used for interval measurements, but also
this seems to give much better granularity on Windows
systems, where before this change there would often be
10-20 lines of debug log with the same timestamp up front.
2018-01-11 18:44:50 +00:00
Tim-Philipp Müller
5feff26624 plugin: plugin_load() must return a ref even if it was loaded already
Fix refcounting issue when plugin was loaded already.
gst_plugin_load() is supposed to return a ref, so it
must always return a ref.

This also fixes the gstplugin unit test on windows where
fork is not available and where test_load_coreelements()
would unref a plugin ref it didn't get and then mess up
the internal registry plugin list state for the next test,
in case where the test registry does not exist yet.
2018-01-11 17:10:45 +00:00
Tim-Philipp Müller
3aa5ff37cd info: reset default threshold to LEVEL_DEFAULT not 0
in set_threshold_from_string().
2018-01-11 11:36:53 +00:00
Sebastian Dröge
e32d89d6c9 streams: GstStreamType/GstStream are available since 1.10
Annotate them as such.
2017-12-26 18:10:25 +01:00
Stefan Sauer
c96901d4d9 segment: add a FIXME-2.0 for the format parameters
Capture the somewhat not ordinary use of the extra format parameter in a
comment.
See https://bugzilla.gnome.org/show_bug.cgi?id=788979
2017-12-26 11:29:39 +01:00
Tim-Philipp Müller
252ce5a093 Skip gst_deinit() if gstreamer was not initialized properly
Can happen if an error occurs during option parsing, for example.

https://bugzilla.gnome.org/show_bug.cgi?id=781914
2017-12-24 16:21:38 +01:00
Sebastian Dröge
70104857b0 systemclock: set_default() clock parameter can be NULL 2017-12-20 18:56:23 +02:00
Sebastian Dröge
1a5a5709ad element: Annotate set_clock() clock parameter with allow-none 2017-12-20 18:11:48 +02:00
Sebastian Dröge
e16e55ed04 element: Annotate set_bus() bus parameter as allow-none
It's possible to replace the bus with NULL/None
2017-12-20 18:09:28 +02:00
Sebastian Dröge
f85e93d004 plugin: Annotate add_dependency() arguments as NULL-terminated arrays 2017-12-17 14:19:14 +02:00
Umang Jain
52d2891fe3 docs: GstBus: Provide more information for ref/unref during bus watch.
https://bugzilla.gnome.org/show_bug.cgi?id=791588
2017-12-14 09:34:59 +00:00
Matthew Waters
a0400a0d28 docs: include tracers in the documentation
Requires exposing the tracer GType from the GstTracerFactory in order
to link the plugin with the tracer in the documentation.

https://bugzilla.gnome.org/show_bug.cgi?id=791253
2017-12-14 14:46:46 +11:00
Tim-Philipp Müller
f05bd2a016 docs: Fix a few gtk-doc warnings
Broken links mostly.
2017-12-07 12:16:57 +00:00
Edward Hervey
0afc114629 gstpad: Handle GST_PAD_PROBE_HANDLED on sticky event push
When actually pushing an event, if we get GST_FLOW_CUSTOM_SUCCESS_1
(which is the conversion of GST_PAD_PROBE_HANDLED return value),
don't consider the stick event push as ignored, but as handled
2017-12-06 17:23:05 +01:00
Sebastian Dröge
adf304d5af event/query/message: Annotate get_structure() return value as nullable 2017-12-06 13:40:46 +02:00