Commit graph

565 commits

Author SHA1 Message Date
Sebastian Dröge
a0522c8193 ptp: Fix compilation with rustc 1.48
That's currently the minimum version we declare in meson.build but the
latest changes introduced some usage of 1.62 features.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5265>
2023-08-31 06:05:18 +00:00
Sebastian Dröge
967aa2abca ptp: Listen with different sockets on individual interfaces
This allows us to portably know on which interface a multicast packet
arrived, and to send back any packets for that clock on the correct
interface.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5232>
2023-08-30 12:19:46 +00:00
Olivier Crête
e2d7fbe94f gst-stats: Add argument for a custom regexp
This is to use gst-stats against GStreamer logs that went through
some other logging system.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3935>
2023-08-25 21:43:36 +00:00
Piotr Brzeziński
2cc30770cf tools: Disable fault signal handlers in gst-launch/gst-validate on macOS
By default, macOS attempts to run lldb against a misbehaving process to handle the crash. This does not play well
with the SISEGV/SIGQUIT handler we add in gst-launch/gst-validate. The 'spinning' mechanism causes the lldb
and debugserver processes ran by macOS to misbehave, taking 100% CPU and rendering both themselves and the GStreamer
instance frozen and very hard to effectively kill. macOS's Activity Monitor is also unusable while this is happening.

This patch takes the quickest possible solution of just disabling those signal handlers entirely on macOS.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5190>
2023-08-16 08:52:36 +00:00
Piotr Brzeziński
601e31fe6e queuearray: Add sorting and sorted pushing
Adds gst_queue_array_sort for sorting and gst_queue_array_push_sorted{,struct} for pushing in a sorted order.
All three functions accept a comparison GCompareDataFunc along with optional user_data to pass to it.

In gst_queue_array_sort a small workaround was needed to correctly sort non-struct arrays. Like what _find() already
does, we need to dereference our pointers first, to make sure we can use the same comparison functions everywhere.
This is done via a small wrapper around the provided comparison function.
The array can also wrap around (tail ends up 'before' the head), in which case we have to reorder the array (similar to
what do_expand() does) to then be able to use an existing sorting function, like g_qsort_with_data().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5112>
2023-08-16 06:54:55 +00:00
Matthew Waters
9160a9eb26 parse: avoid -Werror=unused-but-set-variable
bison seems to generate a yyparse() with one unsed but set variable in it.
Avoid that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5110>
2023-07-29 13:12:21 +00:00
Philippe Normand
cec774b653 query: Add a quark for SELECTABLE query type
So that `gst_query_type_get_name()` won't return "unknown" for this type.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5048>
2023-07-19 01:24:30 +00:00
Olivier Crête
48c43e5b7f gst-omx: Retire the whole package
The OpenMAX standard is long dead and even the Raspberry Pi OS
no longer supports it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4976>
2023-07-16 19:10:03 +00:00
Nirbheek Chauhan
8e1b6accbd meson: Always use forward slashes in defines with paths
Fixes the following build failure on MSYS2:

```
../subprojects/gstreamer/tests/check/elements/filesrc.c: In function 'test_seeking':
../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: error: incomplete universal character name \U
  107 |   g_object_set (G_OBJECT (src), "location", TESTFILE, NULL);
      |                                                     ^
../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\A'
../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\g'
../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\s'
../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\g'
../subprojects/gstreamer/tests/check/elements/filesrc.c:107:53: warning: unknown escape sequence: '\c'
```

Due to: `-DTESTFILE=\"C:\\Users\\Administrator\[...]`

https://gitlab.freedesktop.org/nirbheek/gstreamer/-/jobs/45317733

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5018>
2023-07-12 21:17:25 +00:00
Alicia Boya García
9ca194d8cc harness: Fix race condition when torn down during the handling of a non-serialized query or event
It's possible and normal to tear down a harness while the pipeline is
running. At the same time, it's desired for the
`gst_harness_pad_link_tear_down()` function to be synchronous.

This has created the conflict where the main thread may request a
harness to be torn down while it's in use or about to be used by a pad
in the streaming thread.

The previous implementation of `gst_harness_pad_link_tear_down()` tried
to handle this by taking the stream lock of the harnessed pad and
resetting all the pad functions while holding it. That approach was
however insufficient to handle the case where a non-serialized event
or query is being handled or about to be handled in a different thread.

This edge case was one race condition behind the flakes in the flvmux
check tests -- the rest being covered by https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2803.

This patch fixes the problem by adding an intermediate ref-counted
object, GstHarnessLink, which replaces the usage of the HARNESS_KEY
association. GstHarnessLink allows the pad functions such as event,
query and chain to borrow a reference to GstHarness and more
importantly, to lock the GstHarnessLink during their usage to block
(delay) its destruction until no users are left, and guarantee that any
future user will not receive an invalid GstHarness handle past its
destruction.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5017>
2023-07-12 13:18:00 +00:00
Théo Maillart
8f1524a592 inputselector: fix playing variable is never set
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4983>
2023-07-07 08:43:56 +00:00
Andoni Morales Alastruey
20c6d8c78f leaks: add unix signals documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4973>
2023-07-06 10:26:18 +00:00
Jan Schmidt
0461103965 basesrc: Don't hold the object lock while pushing an event
Release the object lock before pushing a segment event.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4951>
2023-06-30 16:05:57 +00:00
Alicia Boya García
8c628fa325 validate tests: include debugutilsbad to be able to use testsrcbin
Fixes test: validate.uridecodebin.expose_raw_pad_caps

testsrcbin (currently part of debugutilsbad) is an useful element for
validate tests.

validate.uridecodebin.expose_raw_pad_caps makes use of it.
Unfortunately, because validate tests with GStreamer only run with
whitelisted plugins and `debugutilsbad` wasn't in the whitelist, the
test was failing and being auto-skipped.

This patch adds debugutilsbad to the whitelists used by validate tests
in subprojects with a validate/meson.build.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4931>
2023-06-27 10:13:19 +00:00
Víctor Manuel Jáquez Leal
e5d524b338 caps: Fix documentation
Fix gst_caps_filter_and_map_in_place() documentation, aiming to
gst_caps_maps_in_place() to express their difference.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4933>
2023-06-26 19:56:55 +02:00
Alicia Boya García
82ffdfb13c task: Log task states as string
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4913>
2023-06-22 23:24:58 +00:00
Edward Hervey
8081c22a73 streamcollection: Use upstream-id as name
It is more coherent, in the same vein as  08dc5d29

Fixes #2640

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4911>
2023-06-22 14:06:04 +02:00
Seungha Yang
eb87bbc1ba gst: Don't use DllMain in case of static build
That might cause duplicated symbol linking error if app has its own
DllMain

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4905>
2023-06-20 19:14:49 +00:00
Seungha Yang
513d897d6e aggregator: Resume srcpad task on stream-start only when running
Race condition without this patch:
- srcpad task is being stopped in gst_aggregator_stop_srcpad_task()
- at that moment, in pre-queue event handler, gst_pad_get_task_state()
  returned GST_TASK_PAUSED
- then in srcpad task got stopped in gst_aggregator_stop_srcpad_task()
- finally srcpad task got resumed in pre-queue event handler

To address it, checks "running" flag in pre-queue event handler.
Both pre-queue stream-start event handler and "running" flag
are protected by SRC_LOCK already.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4847>
2023-06-14 16:57:35 +00:00
Elliot Chen
308a9f9466 typefindhelper: avoid printing error log
some plugins such as wavparse may need find if type of media
contained in the given data and will print error log if there
is no matching factory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4814>
2023-06-14 10:25:53 +00:00
Jochen Henneberg
df41d11a7d netclientclock: Handle time server reset correctly
If the time server is restarted with a time in the past the net client
clock will not report the new time anymore as this would mean that the
clock moves back in time which it does not do.

Now the clock will be kept alive but marked as corrupted and will not
be re-used from the cache.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4802>
2023-06-13 22:11:55 +00:00
Guillaume Desmottes
767ee35265 tracerutils: allow casting parameters types
It was impossible to have an u32 parameter such as
'max-buffer-size=(uint)5' because the parentheses were not properly
parsed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3981>
2023-06-12 12:27:57 +00:00
Ruben Gonzalez
51877ee373 doc: Add %p and %r patters for GST_DEBUG_FILE
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4166>
2023-06-11 17:31:32 +00:00
Nicolas Dufresne
343c42ca84 flagset: Fail parsing on overflowing hex strings
This adds code to detect when the hex form of the string we are to
parse exceeds the number of bytes that would form a 32bit flag. This will
avoid treating as flagset anything above then the expected 32 bits and also
stop treading DRM format with modifiers as flagset (like
drm-format=AB24:0x0100000000000002).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4775>
2023-06-09 22:26:39 +00:00
Seungha Yang
f78e7b1bef aggregator: Restart srcpad task on stream-start
Re-start srcpad task on stream-start in addition to flush event
so that subclass can process data when new pad is added
after EOS or an input stream is started again with stream-start event

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4783>
2023-06-09 19:58:38 +09:00
Seungha Yang
cf60babf87 filesink: Fix buffered mode writing
Fixing miscalculated buffer index when a buffer holds multiple
memories and it's not aligned to the vector size 16

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4809>
2023-06-09 03:22:30 +09:00
Sebastian Dröge
c9d9af2fee ptp: Set port-reuse socket options before binding the socket
Otherwise it only works if GStreamer is binding the first socket on this
port.

Unfortunately this requires duplicating a bit more of Rust std because
`UdpSocket` can only be created already bound without allowing to set
any options between socket creation and binding.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4807>
2023-06-08 13:43:33 +00:00
Sebastian Dröge
2ef261557d ptp: Correctly parse clock ID from the commandline parameters in the helper
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2652

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4806>
2023-06-08 10:53:32 +00:00
Philippe Normand
56b9c4772f utils: Fix doc warnings in gst_utils_simplify_fraction
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4793>
2023-06-08 02:38:54 +00:00
Seungha Yang
9f70328b70 systemclock: Use Windows interlocked APIs
MSVC most likely does not support C11 atomic operations
with given compile options

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4794>
2023-06-08 01:02:45 +00:00
Seungha Yang
c79649b6ec gst: Call priv_gst_clock_init() on DllMain
Can avoid atomic read per gst_util_get_timestamp() call

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4794>
2023-06-08 01:02:45 +00:00
Seungha Yang
ed52e3a005 tests: basesink: Add STREAM-START after EOS test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4782>
2023-06-06 21:31:16 +00:00
Seungha Yang
63a529ffd4 basesink: Clear EOS flag on STREAM-START event
EOS -> STREAM-START -> new data flow is valid scenario

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4782>
2023-06-06 21:31:16 +00:00
Stéphane Cerveau
e6cd58bc3c gstreamer-full: keep g_module_symbol to init plugins
In Android use case, the flag GST_FULL_COMPILATION
is not defined whereas the plugins need to be
initialized using 'gst_init_static_plugins'
method.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4777>
2023-06-06 13:10:21 +00:00
Seungha Yang
a1c2df830b clocksync: Fix deadlock because of taken stream lock on flush-start
Deadlock happens when streaming thread is already blocked by downstream
and clocksync is trying to take stream lock on flush-start.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4772>
2023-06-05 20:17:40 +09:00
Nirbheek Chauhan
5fed707553 docs: Use backticks to escape * in markdown
Otherwise it's interpreted as emphasis.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4753>
2023-06-02 13:25:23 +00:00
Michael Grzeschik
1528ab2e7a gstreamer: gst-utils: add gst_util_simplify_fraction
We add the gst_util_simplify_fraction function to be able to convert
fractions such as 333333/10000000 to 1/30.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1304>
2023-06-01 19:19:04 +00:00
Stéphane Cerveau
9b277d68c5 gstreamer-full: add GST_STATIC_COMPILATION for Windows
In the case of a gstreamer-full target type to static,
the GST_STATIC_COMPILATION is necessary on Windows to avoid
a different mangling from the external project using the
gstreamer-full libraries (ie dllimport).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4128>
2023-05-31 15:17:11 +00:00
Stéphane Cerveau
8a28136627 gstreamer-full: helpers built as tools
gst-plugin-scanner and gst-completion-helper
are now built part of the helpers as tools.

Add libraries to the summary to know
what library will be built and can be exposed
by gstreamer-full

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4128>
2023-05-31 15:17:11 +00:00
Stéphane Cerveau
dd17beb681 gstreamer-full: add full static support
Allow a project to use gstreamer-full as a static library
and link to create a binary without dependencies.

Introduce the option 'gst-full-target-type' to
select the build type, dynamic(default) or static.

In gstreamer-full/static build configuration gstreamer (gst.c)
needs the symbol gst_init_static_plugins which is defined
in gstreamer-full.
All the tests and examples are linking with gstreamer but the
symbol gst_init_static_plugins is only defined in the gstreamer-full
library. gstreamer-full can not be built first as it needs to know what plugins
will be built.

One option would be to build all the examples and tests after
gstreamer-full as the tools.

Disable tools build in subprojects too as it will be built at the end of
build process.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4128>
2023-05-31 15:17:11 +00:00
Sebastian Dröge
98c5ceb73f ptp: On Windows handle socket polls that result in no error but also no FD_READ event
According to the documentation this should never happen but apparently
does under certain circumstances. As the sockets are set non-blocking,
trying to read from them regardless should not cause any problems.

In all cases that were observed so far, the socket in question actually
has a packet queued up for reading.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4748>
2023-05-31 13:11:39 +00:00
Sebastian Dröge
fa8fbab0f7 ptp: Parse PTP messages in the helper process and filter earlier
This drops invalid, unknown or uninteresting PTP messages in the helper
process already instead of forwarding them to the main process.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4665>
2023-05-24 14:16:23 +00:00
Sebastian Dröge
61a6b79e62 ptp: Ignore DELAY_RESP messages not for us earlier in the main process
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4665>
2023-05-24 14:16:23 +00:00
Sebastian Dröge
5a79d230ce ptp: Set UDP sockets as non-blocking
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4665>
2023-05-24 14:16:23 +00:00
Sebastian Dröge
b76f9c8392 ptp: Capture actual send/receive times in the helper process
While this doesn't yet use any OS provided times from the actual network
stack, this still gets rid of any IPC jitter between the helper process
and the main process as part of the PTP time calculations and should
improve accuracy.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4665>
2023-05-24 14:16:23 +00:00
Sebastian Dröge
c52212604e gst: clock: Clean up code to get the monotonic / realtime clock a bit
On Windows and macOS always use the proper monotonic clock, including
for gst_util_get_timestamp(), and initialize its state only once.

Also on macOS use clock_gettime() for the realtime clock, if available
instead of always falling back to GLib.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4658>
2023-05-22 11:48:27 +00:00
Sebastian Dröge
639367f818 ptp: Work around bug in ptpd in default configuration
ptpd is defaulting to the hybrid mode, and was sending invalid multicast
PTP messages in that configuration until ce96c742a88792a8d92deebaf03927e1b367f4a9.
While this commit was made in 2015 there was no release in the meantime.

Work around this by detecting this case and defaulting to the default
values for the given intervals as given by the PTP standard.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4654>
2023-05-19 14:44:49 +00:00
Sebastian Dröge
d55492add4 ptp: Fix compilation with Rust 1.48
Use `ErrorKind::NotFound` instead of `ErrorKind::Unsupported` if the
`getrandom` syscall is not available. `Unsupported` was added in 1.53.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4647>
2023-05-19 12:47:28 +00:00
Sebastian Dröge
87ca02bee7 ptp: Add logging between the helper process and the main process via stderr
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4647>
2023-05-19 12:47:28 +00:00
Sebastian Dröge
ebc050d133 ptp: Add a working default branch to the message type switch
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4647>
2023-05-19 12:47:28 +00:00
Sebastian Dröge
b74669a38a ptp: Get rid of struct padding in the messages with the helper process
Also remove the now unnecessary private header file.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4647>
2023-05-19 12:47:28 +00:00
Ruben Gonzalez
5c0f6b88d8 README.md: fix current version
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4662>
2023-05-18 06:25:50 +00:00
Mathieu Duponchelle
9914b34bf5 parse/grammar: fix missing unref of looked up child
the target parameter of gst_child_proxy_lookup() is (transfer full)

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2560
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4622>
2023-05-12 19:07:09 +00:00
Sebastian Dröge
0219b6f6fa ptp-helper: Add some tests for functionality and memory safety of unsafe code
These tests are mostly for ensuring that the calls to system APIs are
done correctly and that there are no memory bugs (that would be caught
by valgrind) in the unsafe code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4458>
2023-05-12 17:06:01 +00:00
Lukas Geiger
1815061e26 macos: Set activation policy in gst_macos_main
Setting the policy to NSApplicationActivationPolicyAccessory by default makes
sure that we can activate windows programmatically or by clicking on them.
Without that, windows would disappear if you clicked outside them and there
would be no way to bring them to front again. This change also allows osxvideosink
to receive navigation events correctly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4573>
2023-05-12 01:11:19 +02:00
Maxim P. DEMENTYEV
f9c24cd7e7 plugin ext dep INFO: Adding var name and value part number
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4570>
2023-05-08 14:39:24 +00:00
Seungha Yang
c789b66971 pluginloader-win32: Use UWP compatible Windows API
CreateFile2 API should be used in case of UWP

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4556>
2023-05-06 19:13:29 +00:00
Sebastian Dröge
a79774be74 gstreamer: pluginloader: Remove unnecessary Windows special cases
The Windows plugin loader is in a separate file.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4541>
2023-05-04 09:25:49 +03:00
Sebastian Dröge
7e12f8fb6a gstreamer: #undef a few local #defines after usage
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4541>
2023-05-04 00:17:47 +03:00
Sebastian Dröge
58fcfd8721 gstreamer: ptpclock: Remove unnecessary empty line
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4541>
2023-05-04 00:15:33 +03:00
Sebastian Dröge
914c094764 gstreamer: Fix minor memory leak in error path for internal path depth helper function
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4541>
2023-05-04 00:14:29 +03:00
Sebastian Dröge
f9dff72726 ptp: Allow relocation of GStreamer installation for finding PTP helper process
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4538>
2023-05-03 17:01:07 +00:00
Sebastian Dröge
5cb245b011 gst: pluginloader: De-duplicate count_directories() private function
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4538>
2023-05-03 17:01:07 +00:00
Tim-Philipp Müller
f64acbf9e5 pluginfeature: fix unexpected version check behaviour for git versions
check_version(1.23.1) would return TRUE for a git development version
like 1.23.0.1, which is quite confusing and somewhat unexpected.

We fixed this up in the version check macros already in !2501, so this
updates the run-time check accordingly as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4513>
2023-05-02 18:09:42 +00:00
Seungha Yang
fafecf9cb3 sample: Add gst_clear_sample() method
Similar to other GstMiniObject clear helper methods like
gst_clear_buffer().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4473>
2023-04-28 04:38:30 +09:00
Seungha Yang
b7083ad242 sample: Fix typo around gst_sample_copy() method
It's sample, not buffer

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4473>
2023-04-27 18:35:41 +00:00
Guillaume Desmottes
0d254f59b8 core: pad: fully log event being pushed
It's useful when debugging to check the details of the event being sent,
like the segment for example.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4493>
2023-04-26 18:00:14 +00:00
Thibault Saunier
7aaf2b48ef doc: Avoid shelling out to hotdoc to generate plugins config files
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4479>
2023-04-25 02:57:55 +00:00
Jordan Petridis
791a068c58 build: appease clang warning
Clang complains about these variables being (possibly) unitialized, even
when they are assigned to NULL or proper value inside the macro.

Might as well initialize them to avoid the warning.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4281>
2023-04-24 12:37:07 +00:00
Thibault Saunier
b14e675a27 gir: Checkout all .gir files and check that they are updated on the CI
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3010>
2023-04-22 09:32:32 -04:00
Ruben Gonzalez
a7f4d5716a gst: Delete inoperative ARG_PLUGIN_SPEW
Logic related with the option was deleted 20 years ago in commit:
086de421dc

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4452>
2023-04-21 12:35:39 +00:00
badcel
acb913a878 base: adapter: Explicitly mark size parameter as input
The generated gir file marks the size parameter as "out" by default.
This is wrong in the context of a caller allocated buffer with a given size.
Explicitly marking the size parameter as (in) fixes the issue.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4399>
2023-04-18 08:41:46 +00:00
Sebastian Dröge
6378ebbdcd ptp-helper: Add a feature option for the PTP support
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Sebastian Dröge
2e84603b02 ptp-helper: Convert various meson message() to warning()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Sebastian Dröge
7cba04f2c6 ptp-helper: Don't check for a Rust compiler on unsupported platforms
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Sebastian Dröge
b35d598003 ptp-helper: Check for the required Rust toolchain version via meson
If an older version is found that gives a more useful output than a
compiler error at a later time.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Seungha Yang
acdf70e576 pluginloader-win32: Fix for pipe connection error
Don't error out on WAIT_IO_COMPLETION. It means queued APC job
was executed but the job may not be our callback.
For example, user or system might be able to schedule APC on
gst_init() thread or so.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4405>
2023-04-13 07:08:09 +00:00
Sebastian Dröge
16ce61fb57 gst: tracer: Initialize tracing infrastructure even if the debug system is not compiled in
There is a separate #define for the tracing infrastructure.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4402>
2023-04-13 01:14:18 +00:00
Tim-Philipp Müller
f7fd71be89 gstreamer: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4388>
2023-04-11 09:21:18 +00:00
Edward Hervey
0fa3c5c561 typefindhelper: Avoid dead assignment
Move variables within the loop (where they are actually used)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4387>
2023-04-11 07:23:48 +02:00
Sebastian Dröge
9d25a5075e ptp-helper: Set a process priority / nice value of -5 on UNIX platforms
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3889>
2023-04-07 15:49:02 +00:00
Sebastian Dröge
572d344482 ptp-helper: Set thread priority to time-critical on Windows
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3889>
2023-04-07 15:49:02 +00:00
Sebastian Dröge
3fdfcdf2f6 ptp-helper: Rewrite in Rust for portability and security
This works on Linux, Android, Windows, macOS, FreeBSD, NetBSD, OpenBSD,
DragonFlyBSD, Solaris and Illumos.
Newly supported compared to the C version is Windows.

Compared to the C version various error paths are handled more correctly
and a couple of memory leaks are fixed. Otherwise it should work identically.

The minimum required Rust version for compiling this is 1.48, i.e. the
version currently in Debian stable. On Windows, Rust 1.54 is needed at
least.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3889>
2023-04-07 15:49:02 +00:00
Guillaume Desmottes
7b41db3ab6 basesrc: add gst_base_src_push_segment()
gst_base_src_new_segment() does not send the segment right away, which
may break events ordering if subclass sends other events after
calling it.
Introducing a variant pushing the segment right away to preserve
ordering in such cases.

Will be used by appsrc which has its own internal queue where we need to
preserve events order.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4297>
2023-04-05 11:11:46 +00:00
Jan Alexander Steffens (heftig)
cd827e790a multiqueue: Simplify gst_multi_queue_iterate_internal_links
We don't need to obtain the mutex to ensure that `sq` is non-NULL. `sq`
is assigned immediately after the pads are created and not destroyed
until the pads are finalized.

Use the pad direction to determine which internal peer we need.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/888>
2023-04-04 12:22:18 +00:00
Michael Gruner
53c145a158 gstelement: protect async state changes against spurious wake ups
When a pipeline is pre-rolling, it waits for all sink elements to report
they have received a buffer before completing the transition to paused.
This async wait is done using a state condition variable. The way this
waits are currently implemented do not protect against spurious conditional
wake ups, which may happen due to external factors in the kernel.

This change implements the wait within a loop that iterates over the protected
variable to reinitiates the wait if the wakeup was spurious. More details in
the [GCond docs](https://docs.gtk.org/glib/struct.Cond.html).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4086>
2023-04-04 07:24:57 +00:00
Tim-Philipp Müller
c73f6c5746 tools: gst-inspect: print action signals as emit_by_name() invocations
It's quite confusing to print a function callback signature for
action signals when people need to do a g_signal_by_name() invocation
in order to use this feature. Requires too much background knowledge
about how GObject works under the hood to make sense of that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4299>
2023-04-02 16:35:32 +00:00
Tim-Philipp Müller
8e5196fec6 tools: gst-inspect: prettify type names for strings
'gchararray' and 'GStrv' are not types used anywhere else
and are just confusing. Map that to 'const gchar *' and 'gchar *'
etc. depending on context.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4299>
2023-04-02 16:35:32 +00:00
Tim-Philipp Müller
b21a0948aa tools: gst-inspect: add vertical spacing between properties and signals
Makes it easier to read and less squashed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4299>
2023-04-02 16:35:32 +00:00
Seungha Yang
55db8367f7 tools: Count argc after parsing GOption on Windows
Existing codes rely on modified argc value by g_option_context_parse()
but g_option_context_parse_strv() is used in case of Windows.
Count arguments after the option parsing manually.
Fixing command "gst-inspect-1.0.exe -b"

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4313>
2023-03-31 18:11:52 +00:00
Juan Navarro
b41a5d3ccb gstutils: Add category and object to most logging messages
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4291>
2023-03-28 22:41:53 +00:00
Sebastian Dröge
49c9f31803 datetime: Return G_MAXFLOAT instead of G_MAXDOUBLE for no timezone offset
Returning G_MAXDOUBLE from a function returning a float is not going to
work well and MSVC also correctly warns about this.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4264>
2023-03-27 16:50:33 +00:00
Tim-Philipp Müller
330836db8e taglist, plugins: fix compiler warnings with GLib >= 2.76
Fix compiler warnings about not using the return value when
freeing the GString segment with g_string_free(.., FALSE):

    ignoring return value of ‘g_string_free_and_steal’ declared with attribute ‘warn_unused_result’

which we get with newer GLib versions. These were all harmless.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4273>
2023-03-27 07:37:11 +00:00
Aleksandr Slobodeniuk
4f988e24d2 bin: fix documentation about event forwarding
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4249>
2023-03-23 02:39:34 +00:00
Tim-Philipp Müller
574e6b7994 gstreamer: re-indent with GNU indent 2.2.12
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4182>
2023-03-17 03:18:53 +00:00
Vivia Nikolaidou
e9faf63d2e inputselector: Wake up streaming thread before PLAYING_TO_PAUSED transition
Also take object lock before iterating the pads.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4190>
2023-03-16 13:34:28 +00:00
Sebastian Dröge
85b0b343db parse: Add unit test for array parsing in capsfilters
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4181>
2023-03-16 10:51:38 +00:00
Mathieu Duponchelle
e4a26238a0 parse: fix parsing arrays in caps for "implicit" capsfilters
When using such a launch line:

fakesrc ! "audio/x-opus, channel-mapping=(int)<0, 1>" ! fakesink

the caps string, with spaces escaped but no quotes gets passed to
gst_caps_from_string(), which then fails to parse the array because it
contains spaces.

When using an explicit capsfilter instead:

fakesrc ! capsfilter caps="audio/x-opus, channel-mapping=(int)<0, 1>" ! fakesink

the caps string, with spaces escaped and quotes gets passed through
gst_value_deserialize, which first calls gst_str_unwrap() on it and only
then gst_caps_from_string() on the result.

This fixes the inconsistency by using a custom version of str_unwrap()
in the parser, which doesn't expect a quoted string.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4181>
2023-03-16 10:51:38 +00:00
Xavier Claessens
096bd3c4a2 gstbuffer: Add parent meta when a copy shares memory with parent
When copying a buffer, for example with gst_buffer_make_writable(), the
new buffer might reference the same GstMemory as the src buffer,
making those memories not writable. If the src buffer gets disposed
first it should return to its buffer pool, but since some of its
memories are not writable it gets discarded and new buffer/memory gets
allocated.

Solves this by making the new buffer keep a reference to the src buffer,
that ensures that by the time the src buffer gets disposed no other
buffer are referencing its memories and it can thus return safely to its
pool.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4176>
2023-03-16 00:03:11 +00:00
Xavier Claessens
22613b9baf gstbuffer: Unref memories before metas
gst_buffer_add_parent_buffer_meta() is used when a GstBuffer uses
GstMemory from another buffer that was allocated from a pool. In that
case we want to make sure the buffer returns to the pool when the memory
is writable again, otherwise a copy of the memory is created. That means
the child buffer must drop its ref to the memory first, then drop the
ref to parent buffer so it can return to the pool when it is the only
owner of the memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4176>
2023-03-16 00:03:11 +00:00
Nicolas Dufresne
5c256cffa6 basesink: Add GST_BASE_SINK_FLOW_DROPPED return value
This new flow return value can be used in ::render virtual method
to signal that a frame is not being rendered.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3801>
2023-03-14 21:50:57 +00:00
Alicia Boya García
136b2e0eae tracers: Document the 'log' tracer
This patch adds documentation to the 'log' tracer and amends the design
document of Tracers to replace a misleading example of the 'log' tracer
with a different example that uses tracer arguments with tracers that do
actually handle said arguments.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4153>
2023-03-14 01:35:14 +00:00
Xavier Claessens
174132af8d gstallocator: Use the right allocator instance to free memory
In the case GST_ALLOCATOR_FLAG_CUSTOM_ALLOC is set, `copy` is allocated
by the default allocator and not mem->allocator.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4144>
2023-03-11 08:03:17 +00:00
Nirbheek Chauhan
f3665ce800 gstvalue: Implement union for GstFractionRange
This fixes simplification of caps with GstFractionRange structures,
for example, this caps:

  video/x-raw, framerate=(fraction)5/1; video/x-raw, framerate=(fraction)[ 5/1, 30/1 ]

can now be simplified to:

  video/x-raw, framerate=(fraction)[ 5/1, 30/1 ]

instead of:

  video/x-raw, framerate=(fraction){ 5/1, [ 5/1, 30/1 ] }

And this:

  video/x-raw, framerate=(fraction)[ 2/1, 5/1 ]; video/x-raw, framerate=(fraction)[ 5/1, 30/1 ]

can be simplified to:

  video/x-raw, framerate=(fraction)[ 2/1, 30/1 ]

instead of

  video/x-raw, framerate=(fraction){ [ 2/1, 5/1 ], [ 5/1, 30/1 ] }

This fixes overly-complicated GL caps set by avfvideosrc on macOS and
iOS when capturing from a webcam.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4132>
2023-03-11 04:15:13 +00:00
Chao Guo
dfa8661334 bin: Fix bin won't post async done message to parent while nothing pending in state changing
When we run Cheese 41.1 on our imx platform, Cheese preview freeze
at first frame.

During pipeline state changing from NULL to PLAYING, if there are
both elements that state change asynchronously and state change
with no preroll in the bin, the element inside may send ASYNC_DONE
message to it, while the bin's pending state is VOID_PENDING.

In this case, the bin will not post ASYNC_DONE message to parent
bin, which makes parent bin thinks that there are still elements
in it that haven't completed state changing, causing the pipeline
freeze in an intermediate state.

This commit modifies the bin_handle_async_done() function. When the
bin, whose pending state is VOIDING_PENDING, receives the ASYNC_DONE
message, it will also post this message to its parent bin.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3490>
2023-03-03 12:22:08 +00:00
Alicia Boya García
0f8785cbc6 basesink: Support position queries after non-resetting flushes
A flush is resetting or not depending on the reset_time argument in the
FLUSH_STOP event is set.

Resetting flushes reset the running time to zero and clear any existing
segment. These are the kind of flushes used by flushing seeks, and by far the
most common. Non-resetting flushes are much more niche, used for instance for
quality changes in adaptivedemux2 and MediaSource Extensions in WebKit.

A key difference between the seek use case and the quality change use case is
that the latter is much more removed from the player. Seeks generally occur
because an user request it, whereas quality changes can be automatic.

Currently, there are three notable cases where position queries fail:

(a) before pre-roll, as there is no segment yet. This is one is understandable,
as for at least some time before pre-roll, we cannot know if a media stream
would start at 0 or any other position, or the duration of the stream for that
matter.

(b) after a resetting flush caused by a seek. This kind of flush resets the
segment, so it's not surprising position queries fail. This is inconvenient for
applications, as it means they always need to handle position reporting (e.g.
in UI) separately every time they request a seek, e.g. by caching the seek
target and using it when the position query fail. I'm not fond of this
behavior, as it's unintuitive and makes GStreamer harder to use, but at this
point could be difficult to change and it's not within the scope of this
proposal.

(c) after a non-resetting flush, e.g. caused by a quality change. The segment
is not reset in this case. Position queries work until a FLUSH_STOP is sent.
Querying position after a FLUSH_START but before a FLUSH_STOP works, and
returns the position the sink was at the moment the FLUSH_START was received.
**This in fact the only reliable way (short of adding probes to the sink
element) to get this position**, as FLUSH_START receival is asynchronous with
playback.

In the case (c), as of currently, position queries fail once the FLUSH_STOP is
received. But unlike in (b), the application has no position to fall back to,
as the FLUSH_START was initiated by elements inside the pipeline that are in a
lower layer of abstraction. Specific applications that have control of both the
player and the internal element doing the flushing -- such as WebKit -- can
still work around this problem through layer violations (lucky!), but this
still puts in question this behavior in GStreamer.

This patch fixes this case by amending the position query handler of basesink,
which was previously erroneously returning early with "wrong state", even
though the flush occurs in PAUSED or PLAYING.

A unit test checking this behavior has also been added.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3471>
2023-03-03 10:16:25 +00:00
Vivia Nikolaidou
cf5b659bc6 inputselector: Avoid deadlock when shutting down
Transition from PLAYING to PAUSED unschedules any pending clock wait,
but there was no guard that prevented another input buffer then waiting
again while in PAUSED before dataflow stops. Use a new `playing` flag to
avoid this, and exit the chain function if instead of playing we're now
flushing. Basically the same as the clocksync element.

Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1772

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4098>
2023-03-02 16:52:35 +02:00
Mathieu Duponchelle
f3e16deaad aggregator: improve parsing in create_new_pad
The previous implementation was a bit primitive, assuming the subclass
had registered a template name starting with sink_ . Instead make
the effort of parsing the actual template name, and use that to generate
the final pad name.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4032>
2023-02-28 17:43:57 +00:00
Stefan Brüns
fb076db1b2 gst-inspect: Enhance auto-install-info output for De/Encryptor class
Without this it is not possible to lookup which plugin handles a specific
encrypted mimetype (e.g. application/x-cenc or application/x-aavd).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1604>
2023-02-23 15:35:32 +00:00
Tim-Philipp Müller
65d9467f37 gstreamer: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4040>
2023-02-22 12:22:12 +00:00
James Hilliard
1f1e7a3d99 buffer: fix copy meta reference debug log formatting
Fixes the following valgrind error:
==616== Conditional jump or move depends on uninitialised value(s)
==616==    at 0x4900E34: gst_debug_print_object (gstinfo.c:1143)
==616==    by 0x49010B6: gst_info_printf_pointer_extension_func (gstinfo.c:1215)
==616==    by 0x4959FDB: __gst_printf_pointer_extension_serialize (printf-extension.c:47)
==616==    by 0x495A487: printf_postprocess_args (vasnprintf.c:258)
==616==    by 0x495A52C: __gst_vasnprintf (vasnprintf.c:290)
==616==    by 0x4959F8F: __gst_vasprintf (printf.c:154)
==616==    by 0x4901C1F: gst_debug_message_get (gstinfo.c:791)
==616==    by 0x4901C75: _gst_debug_log_preamble (gstinfo.c:1431)
==616==    by 0x4903208: gst_debug_log_default (gstinfo.c:1575)
==616==    by 0x49020BA: gst_debug_log_full_valist (gstinfo.c:624)
==616==    by 0x490211D: gst_debug_log_valist (gstinfo.c:656)
==616==    by 0x49021AD: gst_debug_log (gstinfo.c:533)
==616==    by 0x48DDC11: gst_buffer_copy_into (gstbuffer.c:693)
==616==    by 0x48DF5F1: gst_buffer_copy_with_flags (gstbuffer.c:727)
==616==    by 0x48DF640: gst_buffer_copy_deep (gstbuffer.c:756)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4034>
2023-02-21 20:14:00 -07:00
Jan Alexander Steffens (heftig)
aeb262a7e1 pad: Don't leak user_data in gst_pad_start_task
When the task already exists, we forgot to free the passed `user_data`.
This wasn't an issue for most C code, which doesn't pass a
`GDestroyNotify`, but bindings such as gstreamer-rs do!

That said, allocating a trampoline in gstreamer-rs just for it to get
thrown away again is awkward. Maybe we need a `gst_pad_resume_task`?

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3920>
2023-02-09 15:40:56 +00:00
Thibault Saunier
1bab0ef2aa bin: Do not deactivate pad in NULL_TO_READY
Since b76d336549
pads are deactivated when going to READY but in `uridecodebin(3)`, the
sources source pads are activated while in NULL state (when PULL mode is
supported), meaning that we are ending up deactivating those pads in
NULL_TO_READY, breaking the pipeline.

The intent of the commit mentioned above is to ensure that the pads are
deactivated either in PAUSED_TO_READY or READY_TO_READY, so it should
be safe to avoid deactivating in NULL_TO_READY.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3849>
2023-02-08 13:23:46 +00:00
medithe
3943503fc1 gstreamer: bin: Don't unlock unlocked mutex in gst_bin_remove_func()
Calling `g_mutex_unlock(mutex)` leads to an undefined behavior if the
mutex is not locked by the current thread.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3903>
2023-02-07 19:03:43 +02:00
Sebastian Dröge
716aaa562b net: ptp: Use GSubprocess instead of lower-level GLib APIs that don't work on Windows
libgstnet depends on GIO already anyway so we can as well make use of it
instead of a half-baked Windows implementation that doesn't actually
work.

As a next step, the helper process also needs to be made usable on
Windows.

See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1259

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3887>
2023-02-03 18:51:17 +00:00
Seungha Yang
e1a22402d3 tools: Make sure UTF-8 encoded command line arguments on Windows
On Windows, arguments passed in main() are system codepage
encoded and might not be valid UTF-8 string.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3828>
2023-02-03 16:05:19 +00:00
Seungha Yang
c0a4f41525 pluginloader-win32: Prepend gstreamer-1.0-0.dll directory to PATH env for child process
Usually gst-plugin-scanner.exe will be located under libexec/gstreamer-1.0
or even somewhere user specified location via GST_PLUGIN_SCANNER
environment. So, in order for child process to be able to load
GStreamer DLLs, parent process will need to update PATH env

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3886>
2023-02-03 14:25:21 +00:00
Jan Schmidt
138863b327 gsturi: Add API to order query strings
Add gst_uri_get_query_string_ordered() and gst_uri_to_string_with_keys() that
allow constructing the URI string with query arguments in a specific order.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3803>
2023-02-02 11:02:47 +01:00
Thibault Saunier
3963396716 gstutils: Add a utility to create a stream-id without a pad
We already have functions to generate a stream-id from pads but in the
end those pads are not even used in most cases. This adds functions to
generate a stream-id even before creating the source pads for the
element that is going to use it. For example a demuxer that is properly
implements the GstStream/GstStreamCollection API will not have a Pad but
already needs to generate a stream-id.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3160>
2023-02-01 22:26:33 +00:00
Seungha Yang
09d29cca5a pluginloader-win32: Watch child process handle on connection
... so that parent can avoid waiting if child process got terminated
unexpectedly

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:11 +00:00
Seungha Yang
464a8be3a4 pluginloader-win32: Check pipe state in child process
Retry if server is not ready for the connection

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:11 +00:00
Seungha Yang
0df7cd852c pluginloader-win32: Enhance debug log
Change log level to ERROR if it's unexpected, and print error reasons

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:10 +00:00
Seungha Yang
f314884b7d pluginloader-win32: Zero initialize overlapped struct before use
Helper child process might be spawned multiple times for some reason
then overlapped struct can hold garbage data. Always clear the struct.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
2023-02-01 17:00:10 +00:00
Thibault Saunier
35e2ecd48b clocksync: Add "QoS" support
When ClockSync synchronizes the data stream on the clock, it should also
push `QoS` events if the user wants to do it as, as stated in [the QoS
design doc] "Elements that synchronize buffers on the pipeline clock
will usually measure the current QoS".

The logic has been replicated from `GstBaseSink`.

[the QoS design doc]: https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/qos.html

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2225>
2023-02-01 07:02:19 +00:00
Mathieu Duponchelle
4d240c27b7 BaseSrc: fix transfer annotation for fixate virtual method
The fixate virtual method has the same semantics as gst_caps_fixate(),
so the caps parameter must be marked as (transfer full).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3830>
2023-01-28 03:48:21 +00:00
Mathieu Duponchelle
c8298a2787 BaseSrc, PushSrc: add nullable annotations to virtual methods
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3806>
2023-01-26 22:35:31 +00:00
Jan Alexander Steffens (heftig)
e3fa65abab aggregator: Warn about the right segment's format
We were checking the head segment here, not the current segment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/611>
2023-01-26 10:39:08 +01:00
Jan Alexander Steffens (heftig)
08d4b0051a aggregator: Always lock aggpad around update_time_level
`aggpad->segment` is protected by the `aggpad`'s object lock. We need to
take the lock before calling `update_time_level`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/611>
2023-01-26 10:39:08 +01:00
Daniel Ulery
befab7af72 filesink: Adds rb+ file mode
Adds rb+ file mode to filesink so that files can be pre-allocated. This
can be use to keep reduce fragmentation over time with splitmuxsink.

Fixes  #955

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1532>
2023-01-26 07:05:21 +00:00
Seungha Yang
621feb32e9 gst-plugin-scanner: Add support for Windows
Adding Win32 specific plugin loader implementation.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/11
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3512>
2023-01-25 18:24:28 +00:00
Sebastian Dröge
bfaa02ab56 gst: Fix gst_type_find_peek() return value annotation
It's not possible to annotate a in-parameter for a return value array as
the array length. Both are assumed to have the same direction and the
current annotation causes the size parameter to be considered an out
parameter.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3787>
2023-01-25 13:16:44 +00:00
Edward Hervey
21cad29bcd multiqueue: Handle use-interleave latency live pipelines
Due to the dynamic nature of multiqueue, when `use-interleave` is used we can't
report a maximum tolerated latency (when queried) since it is calculated
dynamically.

When in such live pipelines, we need to make sure multiqueue can handle the
lowest global latency (provided by this event). Failure to do that would
result in not providing enough buffering for a realtime pipeline.

Fixes #1732

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3772>
2023-01-24 19:42:49 +00:00
Thibault Saunier
095a5ba425 factory: Add "Timestamper" as new factory type
This will be used by elements that correct timestamps (like the
h264timestamper for example)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3779>
2023-01-24 16:31:40 +00:00
Tim-Philipp Müller
45aac1e938 base: bitwriter: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
3dd12cb640 inputselector: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
78a941e873 multiqueue: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
fa55d8302b queue2: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
ed78e55bc7 tracers: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
78149326c9 libs: base: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
1919030363 baseparse: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
ba6d952cd5 gstcheck: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
bda6287075 controller: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
c1baa37f74 tracerutils: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
3261daa623 taskpool: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
eeced74fce segment: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
19a6468a53 sample: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
f343d01f10 query: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:06 +00:00
Tim-Philipp Müller
e190ff16cc iterator: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
6a0be7ea56 event: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00
Tim-Philipp Müller
dcc8830bb2 info: drop use of GSlice
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
2023-01-24 15:25:05 +00:00