523 Commits

Author SHA1 Message Date
Vivian LEE
c4439a5b55 adaptivedemux2: fix crash due to log
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4588

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9573>
2025-08-19 07:20:13 +00:00
Jan Schmidt
cdf1338e6b hlsdemux2: Fix parsing of byterange and init map directives
Don't reuse the same offset and size variables when reading
the byterange out of a MAP directive, as it can overwrite
values from a pending BYTERANGE directive for the next
fragment URI.

Fixes problems where the EXT-X-MAP directive has been written
into the playlist between an EXT-X-BYTERANGE and the fragment
URI it applies to.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9533>
2025-08-12 02:47:46 +00:00
Nirbheek Chauhan
eef8ec6e47 meson: Pass python=false to libxml2
We don't need this in gstreamer anyway.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9438>
2025-07-30 00:21:18 +00:00
Nirbheek Chauhan
19a2a158fa soup: Disable range requests when talking to Python's http.server
Python's SimpleHTTP server doesn't add Accept-Ranges and also doesn't
support range requests: https://github.com/python/cpython/issues/86809

According to the spec, this means the server may or may not support
Range requests, but we know that SimpleHTTP server doesn't, so let's
disable it. If they fix it, they will hopefully add an Accept-Ranges
header.

See also: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8505#note_2994060

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9341>
2025-07-09 13:53:57 +00:00
David Maseda Neira
188a9fa7a2 adaptivedemux2: Fixed reverse playback
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9298>
2025-06-27 12:21:51 +00:00
Jakub Adam
ddd6a708cb dashdemux2: Fix seeking in a stream with gaps
When there are gaps between segments in the DASH manifest (e.g. it's a
recording of a live stream during which the camera was turned on and off
a couple times), seeking to a timestamp that belongs into a gap leads to
repeat_index calculation yielding a nonsensical negative number (because
ts < segment->start).

In such event set the playback to continue at the first repetition of
the segment that follows after the gap.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8620>
2025-06-19 07:26:49 +00:00
Matthew Waters
9f055e1eeb qml6gloverlay: support directly passing a QQuickItem for QML the render tree
This is provided in addition to the text description in the qml-scene.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9180>
2025-06-11 11:55:51 +10:00
Elliot Chen
0f7ee14a1d adaptivedemux2: free cancellable when freeing transfer task
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8610>
2025-06-07 12:17:27 +00:00
Aleix Pol
e627d02171 qml6glitem,qtitem: Allow configuring if the item will consume input events
At the moment we are always accepting the input events to forward into
GStreamer infrastructure. This works but we might have other uses for
such events elsewhere in the QtQuick scene so allow opting out to this
behaviour.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9085>
2025-05-28 01:13:21 +00:00
Doug Nazar
c14b135861 adaptivedemux2: Ensure all download tasks call g_task_return_*()
There is a small window during stopping when tasks have been add
to the transfer_requests queue, but never transfered to the
active_transfers array and causes the fallowing error:

GTask 0x7f2c4400e930 (source object: (nil), source tag: (nil)) finalized
without ever returning (using g_task_return_*()).
This potentially indicates a bug in the program.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9060>
2025-05-27 20:35:41 +00:00
Doug Nazar
75cf21d834 gstreamer: A few small memory cleanups
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9044>
2025-05-27 10:44:37 +00:00
Doug Nazar
9a04896293 dash: mpdclient: Don't pass terminating NUL to adapter
libxml2 will complain if it detects any characters after the valid
XML, including a NUL byte.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8734>
2025-05-24 12:10:59 +00:00
Jan Schmidt
4c6a0b655d meson: Add build_rpath for qt6 plugin on macOS
This is the same fix for qt6 that was done for the qt5 plugin
in gstreamer/gstreamer!3708

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9059>
2025-05-23 11:16:18 +00:00
Jan Schmidt
6ecf12f019 adaptivedemux: Answer element-level SELECTABLE query
Add handling for the selectable query as an element query,
on top of the existing pad query handling. This is useful
for uridecodebin when handling stream collection messages
before any adaptivedemux source pads have been exposed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9002>
2025-05-17 11:13:12 +00:00
Jan Schmidt
f6efbbfa2f adaptivedemux: Copy collection inside lock
When posting the collection message, don't access the shared
collection after releasing the manifest and track locks.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9002>
2025-05-17 11:13:12 +00:00
Doug Nazar
39cb7b38e7 flac: Switch to GST_AUDIO_NE()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8984>
2025-05-14 14:45:55 -04:00
Jakub Adam
ba87e0112f qt6glwindow: add log message when a buffer pool gets set
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8938>
2025-05-06 19:50:43 +00:00
Nirbheek Chauhan
a7c92cbcab gst-examples: Port all webrtc examples to libsoup-3.0
Also do some indent changes, and add `static` while we're at it.

And move the libsoup wrap to 3.6.5, add nghttp2 wrap

We need to disable libsoup 3.0 tests because they fail to build on
Windows.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8753>
2025-04-30 10:18:57 +00:00
Nirbheek Chauhan
1fdfab27a3 meson: Add include_type: 'system' everywhere to squelch wrap warnings
Wrap dependencies add a ton of warnings with the latest GCC in Fedora
42. Squelch them by specifying that these dependencies are not
a part of the gstreamer project, and should be treated as system deps.

libsoup needs some porting work for the bump, and vorbis/lame are
already at their latest releases.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8753>
2025-04-30 10:18:56 +00:00
Alexander Slobodeniuk
a03c4de48f elements: use set_static_metadata when it's allowed
Those strings are nice but CPU doesn't want to copy them

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8905>
2025-04-26 19:30:15 +02:00
Arun Raghavan
c5733c84b1 qt6: Add a missing newline in unsupported platform message
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8702>
2025-03-27 10:02:47 +00:00
Doug Nazar
b808153d15 jack: Free various props during cleanup
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8648>
2025-03-27 09:03:18 +00:00
Doug Nazar
6279c4bab7 dash: Free various props before set & during cleanup
In addition several members were being freed via xmlFree() even though
being created via g_value_dup_string(). Switch to g_free().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8648>
2025-03-27 09:03:18 +00:00
Doug Nazar
5f90a4ae67 all: Annotate *_set_property() contructor only props without free
Properties that are marked constructor only aren't required to be freed
before g_value_dup_string() as they can only be called once during construction.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8648>
2025-03-27 09:03:18 +00:00
Jakub Adam
5aaa4c2c5a qml6glsrc: update buffer pool on renegotiation
When dynamic caps change in the pipeline leads to a new buffer pool
getting negotiated, the change is not propagated to Qt6GLWindow, which
keeps using the old, now defunct, pool.

Unset current pool on Qt6GLWindow in decide_allocation(). This will
trigger a switch to the new pool inside create().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8676>
2025-03-26 12:40:42 +00:00
Thibault Saunier
ed693c7435 video: Give better names to buffer pools
Making debugging simpler

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8617>
2025-03-12 14:49:22 +00:00
Jakub Adam
1248e4c462 adaptivedemux2: wake waiting streams upon completed manifest downlaod
Fixes race when a live stream finishes playing all segments from a
dynamic manifest and waits for its update. If the manifest meanwhile
changes from dynamic to static and this update is received
asynchronously, periodic calls of gst_adaptive_demux_manifest_update_cb
will stop. As a result the blocked stream won't get notified about the
updated manifest and will remain stuck indefinitely.

Also removed the wake-up code from gst_adaptive_demux_manifest_update_cb
where it remained as a relic from previous implementation when manifest
updates were synchronous.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8587>
2025-03-05 11:37:26 +00:00
Nirbheek Chauhan
e2e6daf362 meson: Replace disabler dependencies with not-found dependencies
If a plugin gets disabled due to a `disabler()` dependency, the plugin
docs build itself will get disabled because `all_plugins_paths` will
become a disabler.

This was actually happening with opencv on systems that don't have
opencv available, and could happen with libsoup too if the build files
change in the future.

Let's avoid wasting hours of debugging for people. A not-found
dependency has the same effect.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8582>
2025-03-04 17:38:30 +00:00
Thibault Saunier
8c16be5901 adaptivedemux: Add 'backoff' logic for HTTP request
So that the user can configure waits between retries

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8128>
2025-02-24 16:57:23 +00:00
Thibault Saunier
6d0c0d5d29 adaptivedemux2: Expose a max-retries property
So the user can configure what is the maximum number of time HTTP requests can
be performed

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8128>
2025-02-24 16:57:23 +00:00
Thibault Saunier
ba4a260c07 souphttpsrc: Add the notion of "retry-backoff"
So that the user can force waits between retries

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8128>
2025-02-24 16:57:23 +00:00
Thibault Saunier
6652360d30 souphttpsrc: Retry on SERVICE_UNAVAILABLE and INTERNAL_SERVER_ERROR
Those might be temporary issue, for example s3 returns SERVICE_UNAVAILABLE high
load, but afterward a few tries the request will work, and it has been observed
that internal server error sometimes "fix themselves"  so it makes sense to
also retry requests, in case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8128>
2025-02-24 16:57:23 +00:00
Thibault Saunier
99ad918ece adaptivedemux2: Increment retry counter to stop after MAX_ERROR_COUNT
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8128>
2025-02-24 16:57:23 +00:00
Thibault Saunier
1faa88b1ff dashdemux2: Do not set empty string 'track_id'
This is not needed and generates g_warning like:

```
  Trying to set empty string on taglist field 'container-specific-track-id'. Please file a bug.
```

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8128>
2025-02-24 16:57:23 +00:00
Matthew Waters
b2a5b4f304 qt/6: mark GstGLDisplayEGLs that would be created as foreign
Otherwise, GStreamer may preemptively call eglTerminate() before Qt has
finished using the EGLDisplay.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8504>
2025-02-21 12:03:31 +00:00
Nirbheek Chauhan
c2db03a323 soup: Ensure that libsoup RPATHs are added with Homebrew too
With the old method of adding build RPATHs, only the libsoup as
a subproject was supported. However, it's possible to use Homebrew for
libsoup too by adding libsoup as a dependency to the target (even
though we don't link to it).

Apple ld will not add a LC_LOAD_DYLIB entry for a library unless there
are symbols that need it because meson passes `-dead_strip_dylibs`, so
we can do this without issue.

As a bonus, this ensures the correct build RPATHs in all cases.

Additionally, we still need to explicitly add an LC_RPATH for the
installed case.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8403>
2025-02-09 14:25:31 +00:00
Mathieu Duponchelle
3de86b2b97 docs: port plugins to explicit sources
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8273>
2025-01-13 19:17:13 +01:00
Edward Hervey
8bc17b58a2 good: Clearly specify fallthrough in switch/case
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8229>
2025-01-13 12:51:45 +00:00
Edward Hervey
b0f527a79e adaptivedemux2: Fix CLAMP usage
It's a positive value

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8229>
2025-01-13 12:51:45 +00:00
Edward Hervey
02df2a5e9a adaptivedemux2: Remove useless ABS
Just compare the difference (in the right order)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8229>
2025-01-13 12:51:45 +00:00
Edward Hervey
0ee882cfb9 adaptivedemux2: Add missing break
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8286>
2025-01-13 08:08:00 +00:00
Edward Hervey
32ebee5594 adaptivedemux2: Fix usage of GstClockTime vs GstClockTimeDiff
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8286>
2025-01-13 08:08:00 +00:00
Sebastian Dröge
1d1c9d63be gdkpixbufdec: Check if initializing the video info actually succeeded
Otherwise a 0-byte buffer would be allocated, which gives NULL memory when
mapped.

Thanks to Antonio Morales for finding and reporting the issue.

Fixes GHSL-2024-118
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3876

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8041>
2024-12-03 16:46:04 +00:00
Sebastian Dröge
3cdf206f4f jpegdec: Directly error out on negotiation failures
Thanks to Antonio Morales for finding and reporting the issue.

Fixes GHSL-2024-247
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3862

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8040>
2024-12-03 15:26:04 +00:00
Sebastian Dröge
4a040aa11d shout2send: Unref event at the end of the event function
The function takes ownership of it and should get rid of it at the end.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7992>
2024-11-29 10:12:00 +00:00
Matthew Waters
e2d388000c qt(6)/material: ensure that we always update the context in setBuffer()
Scenario is that there are two (or more) GstGLContext's wrapping Qt's GL
context from either multiple qml(6)glsink or qml(6)glsrc elements.  Call flow is this:

1. material 1 setBuffer()
2. material 1 bind()
3. material 2 setBuffer()
4. material 2 bind()

If the call to setBuffer() reuses the same buffer as previous call, then the
qt context is not updated in the material.  If however the previously used qt
context by the material had been deactivated or freed, then bind() would fail
and could result in a critical like so:

gst_gl_context_thread_add: assertion 'context->priv->active_thread == g_thread_self ()' failed

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7970>
2024-11-26 22:57:51 +00:00
Nirbheek Chauhan
3540b33597 meson: Use new has_tools kwarg to avoid unnecessary lrelease dependency
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7937>
2024-11-26 18:32:44 +00:00
Philippe Normand
5a6594dea5 meson: Check for libsoup only if required
LibSoup is needed for the soup and adaptivedemux2 plugins, so there is no need
to do the lookup if none of those plugins is enabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7964>
2024-11-26 12:40:45 +00:00
Thibault Saunier
f8d9412e4b hlsdemux2: Handle needing more data when draining segment
Some streams in the wild have empty segments at the beginning and
hlsdemux2 use to stall forever while we can handle it by processing
the following ones. The gap handling mechanism in adaptivedemux2
works properly and pushes the required gaps.

Update validate medias so the hls stream is present.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6034>
2024-11-20 20:55:19 +00:00
Nicolas Dufresne
dccddf203f qmlgl6src: Use downstream pool when available
This make use of the pool that has been negotiated with downstream in the
decide_allocation function.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7904>
2024-11-20 19:30:39 +00:00