Commit graph

8767 commits

Author SHA1 Message Date
Marijn Suijten
ab920e57eb gstbuffer: Mark buffer_map* @info as caller-allocates
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/730>
2021-01-14 10:21:10 +01:00
Seungha Yang
b71841c2d2 uri: Remove leftover documentation
Follow-up from https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/728

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/732>
2021-01-13 03:05:10 +09:00
Seungha Yang
84a3f0448b gst: Add non-inline methods for bindings to able to use core APIs
Provide non-inline version of refcounting APIs so that it can be
consumed by bindings

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer-sharp/-/issues/46
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/728>
2021-01-11 21:54:48 +09:00
Dmitry Samoylov
384fba13f4 gst: Fix doc comments
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/725>
2020-12-24 00:40:33 +07:00
Michael Tretter
77e6c98f6f pipeline: clarify that applications should handle bus messages
The pipeline posts messages on the bus even if an application does not
handle the messages. This is expected behavior but may leak messages if
the messages are not handled.

Clarify the documentation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/680>
2020-12-22 14:00:02 +00:00
Fredrik Pålsson
cd978ffd6c gstbus: change log level of repeated messages from INFO to DEBUG
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/722>
2020-12-20 23:40:43 +01:00
Thibault Saunier
0daa48f1b1 bus: Ensure that only one GSource can be attached to the bus
Until now we were enforcing that only 1 signal GSource was attached
the bus but we could attach as many GSource with `gst_bus_create_watch`
as we wanted... but in the end only 1 GSource will ever be dispatched for
a given `GstMessage` leading to totally broken behavior.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/718>
2020-12-11 12:29:50 +00:00
Thibault Saunier
5db76b4d41 bus: Do not override source->prepare
Since GLib 2.36 we do not need it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/718>
2020-12-11 12:29:50 +00:00
Nicolas Dufresne
8a45c8d1df gir: Fix parser warning due to empty line
The GIR parser does not want any empty line after the function or macro
name line.

Fixes the following warning:
[309/4246] Generating Gst-1.0.gir with a custom command
../subprojects/gstreamer/gst/gstelement.h:57: Warning: Gst: "@element" parameter unexpected at this location:
 * @element: The element name in lower case, with words separated by '_'.
    ^
../subprojects/gstreamer/gst/gstelement.h:84: Warning: Gst: "@e" parameter unexpected at this location:
 * @e: The element name in lower case, with words separated by '_'.
    ^
../subprojects/gstreamer/gst/gstelement.h:106: Warning: Gst: "@e" parameter unexpected at this location:
 * @e: The element name in lower case, with words separated by '_'.
    ^
../subprojects/gstreamer/gst/gstdeviceprovider.h:32: Warning: Gst: "@d_p" parameter unexpected at this location:
 * @d_p: The device provider name in lower case, with words separated by '_'.
    ^
../subprojects/gstreamer/gst/gstdynamictypefactory.h:28: Warning: Gst: "@t_n" parameter unexpected at this location:
 * @t_n: The dynamic type name in lower case, with words separated by '_'.
    ^
../subprojects/gstreamer/gst/gsttypefind.h:34: Warning: Gst: "@type_find" parameter unexpected at this location:
 * @type_find: The type find name in lower case, with words separated by '_'.
    ^
../subprojects/gstreamer/gst/gsttypefind.h:61: Warning: Gst: "@t_f" parameter unexpected at this location:
 * @t_f: The type find name in lower case, with words separated by '_'.
    ^

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/719>
2020-12-10 14:08:53 -05:00
Thibault Saunier
978ba72bdd structure: Handle trailing comas in serialized structs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/717>
2020-12-10 13:35:17 +00:00
Stéphane Cerveau
a41f37d94c dynamic type: add convenience macros to register
This macros will help to register a dynamic type
apart from a given plugin such as in a static build
of gstreamer where libgstreamer-full is generated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661>
2020-12-10 12:45:16 +01:00
Stéphane Cerveau
9fd20cf1a0 type find: add convenience macros to register
This macros will help to register a device provider
apart from a given plugin such as in a static build
of gstreamer where libgstreamer-full is generated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661>
2020-12-10 12:45:16 +01:00
Stéphane Cerveau
ff36ce0051 device provider: add convenience macros to register
This macros will help to register a device provider
apart from a given plugin such as in a static build
of gstreamer where libgstreamer-full is generated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661>
2020-12-10 12:45:16 +01:00
Julian Bouzas
7828237496 element: add convenience macros to register
Define separate macros to define an element
apart from the plugin itself.
These macros will help to register
elements a part from a plugin.
By example in the case of a gstreamer static build
producing the libgstreamer-full library.

More details here:

https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661>
2020-12-10 12:45:16 +01:00
Sebastian Dröge
cf0f39efe8 datetime: Make use of new g_time_zone_new_identifier() that properly handles errors
g_time_zone_new() returns UTC if it fails to parse the timezone
identifier, which is rather suboptimal and causes wrong datetimes to be
created silently.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/706>
2020-12-07 12:14:50 +02:00
Sebastian Dröge
9f23808b55 datetime: Clean up all constructors to fail gracefully if invalid dates/times are provided
And also don't crash dereferencing a NULL pointer if the GDateTime
functions return NULL.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/632

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/706>
2020-12-07 12:14:50 +02:00
Sebastian Dröge
2bedcbaa2e datetime: Change getters to return specific invalid values if the value is not set
This is more bindings friendly than requiring a special function to be
called beforehand or getting an assertion instead, and should also
simplify some usage.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/706>
2020-12-07 12:14:50 +02:00
Sebastian Dröge
16733a82f4 datetime: Improve documentation a bit to explain when NULL is returned
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/706>
2020-12-07 12:14:50 +02:00
Thibault Saunier
c35d47127b gst: Add new structure/caps/_to_string using the brackets for nesting
This adds `gst_structure_serialize` and `gst_caps_serialize` which use
the newly introduced bracket delimiters for nested structures.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/532>
2020-12-03 21:46:27 -03:00
Thibault Saunier
330450ef93 value: Cleanup on range parsing failures
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/532>
2020-12-03 21:46:27 -03:00
Thibault Saunier
322caf880d structure: Add support for brackets as nested structures/caps specifiers
This introduces a more human friendly syntax to specify nested
structures It does so by using 2 different markers for opening and
closing them instead of abusing quotes which lead to requiring an insane
amount of escaping to match nesting levels.

The brackets (`[` and `]`) have been chosen as they avoid complex
constructions with curly brackets (or lower/higher than signs) where you
could have structures embedded inside arrays (which also use curly
brackets), ie. `s, array=(structure){{struct}}` should be parsed as an
array of structures, but the cast seems to imply something different. We
do not have this issue with brackets as they are currently used for
ranges, which can only be casted to numeric types.

This commit does not make use of that new syntax for serialization as
that would break backward compatibility, so it is basically a 'sugar'
syntax for humans. A notice has been explicitly made in the
documentation to let the user know about it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/532>
2020-12-03 21:46:26 -03:00
Sebastian Dröge
7bd73a56ca streams: gst_stream_type_get_name() is not nullable
It takes an enum and only the defined values are valid to pass in here
as it's not extensible from the outside.

Add a g_return_val_if_reached() for the unreachable case and return
"invalid".

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/711>
2020-12-02 14:21:46 +00:00
Sebastian Dröge
b72f379948 info: Warn if logging with a non-GObject object if GST_ENABLE_EXTRA_CHECKS is enabled
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/712>
2020-12-02 09:35:26 +02:00
Tim-Philipp Müller
7c0dcb91fc taskpool: fix docs warnings
gsttaskpool.c:507: Warning: Gst: gst_shared_task_pool_get_max_threads: unknown parameter 'max_threads' in documentation comment

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/703>
2020-11-20 14:57:55 +00:00
Edward Hervey
17feeb1bd6 systemclock: Use clock_nanosleep for higher accuracy
The various wait implementation have a latency ranging from 50 to 500+
microseconds. While this is not a major issue when dealing with a low number of
waits per second (for ex: video), it does introduce a non-negligeable jitter for
synchronization of higher packet rate systems.

The `clock_nanosleep` syscall does offer a lower-latency waiting system but is
unfortunately blocking, so we don't want to use it in all scenarios nor for too
long.

This patch makes GstSystemClock use clock_nanosleep (if available) as such:
* Any wait below 500us uses it
* Any wait below 2ms will first use the regular waiting system and then
  clock_nanosleep

  #	modified:   gst/gstsystemclock.c

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/688>
2020-11-06 11:22:14 +01:00
Mathieu Duponchelle
b6df564251 taskpool: expose new "shared" task pool implementation
While the default implementation will spawn a thread per new
pushed task, this new implementation instead spawns a maximum
number of threads, then queues new tasks on existing threads.

The thread that the new task will be queued on is picked in
a pretty naive fashion, by simply popping the first thread
from a queue and pushing it back to the tail, but this is
an implementation detail and can always be sophisticated
in the future if the need arises.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/692>
2020-11-05 18:18:28 +00:00
Mathieu Duponchelle
b508287add taskpool: expose dispose_handle() API
This is useful when the subclass does return a non-NULL pointer
in push(), and the user doesn't want to call join()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/692>
2020-11-05 18:18:28 +00:00
Mathieu Duponchelle
c04034c50d taskpool: improve join() documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/692>
2020-11-05 18:18:28 +00:00
Mathieu Duponchelle
c884f4c124 taskpool: modify transfer annotations for push() and join()
While the default implementation passes NULL around as the
task handle, other implementations can only provide a safe
API by having that handle map to a refcounted opaque type.

While what's passed around is a gpointer, a valid transfer
type annotation has informative value.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/692>
2020-11-05 18:18:28 +00:00
Sebastian Dröge
20f6a2ece4 Add some missing nullable annotations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/678>
2020-11-05 14:22:24 +02:00
Khem Raj
96ac9abb23 gst_private.h: increse padding in struct _GstClockEntryImpl
When compiling for 32bit architectures with 64bit time_t e.g. riscv32,
the static assert that the GstClockEntryImpl smaller or
equal to the struct _GstClockEntryImpl triggered.
(they were 12bytes off).

To fix this, the padding is increased by 8 bytes (on 32bit).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/694>
2020-11-03 23:03:54 -08:00
Chris White
e74040b41e gstinfo: colorize PIDs in log messages
The PIDs on log lines were supposed to be colorized before, but the
escape sequence was incorrect.  With this change, the code uses the
correct sequence to colorize those PIDs.  E.g., instead of `\033[334m`
(incorrect), use `\033[34m` (correct).

This makes the log messages easier to read.  It also reduces the chance
that a buggy terminal will choke on the invalid escape sequence.

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/624

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/689>
2020-10-31 15:10:23 -04:00
Jan Schmidt
2a9267f2d4 bin: When removing a sink, check if the EOS status changed.
Removing a sink that hasn't posted EOS might change the bin itself
to EOS if it's the last remaining non-EOSed sink.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/683>
2020-10-30 03:56:02 +11:00
Philippe Normand
41677a526b devicemonitor: Stop only the already started providers
If a device provider fails to start (for instance the pulseaudio provider unable
to connect to the PulseAudio daemon) then the monitor should not keep track of
it in its `started` providers list. Otherwise a false positive critical warning
would be raised.

This patch also switches the started_count type from bool to int, for
consistency. This is a counter, after all.

API: gst_device_provider_is_started
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/679>
2020-10-22 11:48:05 +00:00
Stéphane Cerveau
c6c6ad2667 meson: update glib minimum version to 2.56
In order to support the symbol g_enum_to_string in various
project using GStreamer ( gst-validate etc.), the glib minimum
version should be 2.56.0.

Remove compat code as glib requirement
is now > 2.56

Version used by Ubuntu 18.04 LTS

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/199>
2020-10-15 18:12:32 +02:00
Mathieu Duponchelle
2e507d5a4b gstvalue: don't write to const char *
Our various deserializing functions require NULL terminators
to not over consume substrings (eg fields of an array). Instead
of writing a NULL terminator to the passed-in string, which may
result in segfaults, make a copy of the substring we're interested
in.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/446

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/672>
2020-10-13 01:19:47 +02:00
Xavier Claessens
4095a4b4c5 Meson: Use pkg-config generator
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4>
2020-10-12 13:39:17 +00:00
Tim-Philipp Müller
a2cbf75523 Remove unused valgrind detection
Having this just to log a debug message in case we're
running inside valgrind doesn't seem very useful, and
the code that used to use this no longer exists it seems.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/595>
2020-10-11 22:39:51 +00:00
Seungha Yang
271af223b7 info: Fix build on Windows ARM64 device
gstinfo.c(3086): error C2094: label 'done' was undefined

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/662>
2020-10-09 06:52:12 +00:00
Xavier Claessens
0ed165bf67 gst_init: Call gst_init_static_plugins() when available
When doing a static build, gstreamer-full-1.0 defines that symbol to
register static plugins. Cerbero's Android build will be updated to
implement that symbol too.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/641>
2020-10-05 16:09:10 -04:00
Mathieu Duponchelle
acdb4ce03d gstvalue: expose gst_value_deserialize_with_pspec()
Typing hints can only be passed to gst_value_deserialize()
through the type of the passed-in value. This means deserialization
can only target the desired type for the top-level elements,
making it for example impossible to deserialize an array of
flags to the expected type.

This commit exposes a new function, gst_value_deserialize_full(),
that takes an optional pspec as the extra parameter, and updates
the deserialization code to pass around that pspec, or the
element_spec when recursively parsing the elements of a list-type
value.

This allows for example passing arrays of flags through the
command line or gst_util_set_object_arg, eg:

foo="<bar,bar+baz>"

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/629>
2020-10-03 01:02:55 +02:00
Seungha Yang
220ce9c3fd info: Load DbgHelp.dll using g_module_open()
... and update meson file so that enable it only using required headers.

"dependency(...)" is unlikely successful for Windows SDK libraries
since it doesn't ship pkg-config file. So it needs to be changed
to "find_library()" to link corresponding .lib file. That would
result to most MSVC build system will link dbghelp.dll. However,
one drawback of the change is that gstreamer-1.0.dll will mandate
dbghelp.dll although it should be optional. So g_module_open() way
can be the most safe way in this case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/626>
2020-09-30 18:51:40 +00:00
Matthew Waters
19fb999e09 padtemplate: mark documentation caps as may be leaked
The template itself is already marked as such and the caps, the
documentation caps are a logical extension of those two.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/650>
2020-09-30 11:59:04 +10:00
Víctor Manuel Jáquez Leal
a854a1feda padtemplate: add missing annotation
Adds missing "transfer full" annotation for caps parameter in
gst_pad_template_set_documentation_caps()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/648>
2020-09-28 11:43:19 +00:00
Víctor Manuel Jáquez Leal
b81808de0e memory: fix documentation to display in html
Commit e9c99c05 added a deprecation message, but this message is not
displayed in the html page since the format was not correct.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/648>
2020-09-28 11:43:19 +00:00
Mathieu Duponchelle
bbca6b1ddf meta: expose API to register and create custom meta
Custom meta is backed by a GstStructure, and does not require
that users of the API expose their GstMeta implementation as
public API for other components to make use of it.

In addition, it provides a simpler interface by ignoring the
impl vs. api distinction that the regular API exposes.

This new API is meant to be the meta counterpart to custom events
and messages, and to be more convenient than the lower-level API
when the absolute best performance isn't a requirement.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/609>
2020-09-27 11:08:03 +00:00
Olivier Crête
e9c99c05ae memory: Deprecate GST_MEMORY_FLAG_NO_SHARE
This flag always causes problems as it prevents subbuffering,
instead one should create a custom GstAllocator to pool the GstMemory objects
and not rely on the lifetime of the GstBuffer object they were originally
attached to.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/614>
2020-09-18 22:37:28 +00:00
Mathieu Duponchelle
3393b456e4 gstmeta: intern registered impl string
Subsequent lookups in the hashtable are probably better done
on memory we're confident is allocated to us :)

It was easy to trigger invalid reads by calling gst_meta_register
with dynamically allocated memory, freeing that memory, then
calling gst_meta_get_info()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/628>
2020-09-18 17:31:22 +00:00
Olivier Crête
f26a9ebafb deviceprovider: Returns non-floating devices from gst_device_provider_probe
This should make the API usage more consistent. Also document that the subclasses
should just return the devices as floating.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/558>
2020-09-18 14:52:12 +00:00
Sebastian Dröge
8d0055e185 event: Add optional flags to the GAP event
This allows to signal the reason for the gap, for example missing data
like packet loss.

Based on a patch by Mikhail Fludkov <misha@pexip.com>

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/551>
2020-09-10 16:01:19 +00:00