Jonas Kvinge
8d262959c1
GstEnginePipeline: Fix buffering issue near track end during gapless playback
...
Ignore buffering messages when within 5 seconds of track end and about-to-finish has been signaled. This prevents spurious buffering from blocking playback during track transitions with local files.
Fixes #1725
2025-12-20 01:36:49 +01:00
Jonas Kvinge
b9b70399d8
GstEnginePipeline: Fix possible race condition in pipeline destructor
...
Wait for ongoing state changes to complete before setting pipeline to NULL.
This prevents race conditions with async state transitions that can cause crashes in GStreamer elements.
Fixes #1875
2025-12-20 01:28:53 +01:00
Jonas Kvinge
c684a95f89
GstEnginePipeline: Fix file descriptor exhaustion by using shared thread pool
...
Replace per-pipeline QThreadPool with a shared static pool to prevent
file descriptor and thread exhaustion. Each GstEnginePipeline was creating
its own thread pool, leading to resource accumulation during frequent
pipeline creation/destruction (track changes, seeking, crossfade).
The shared pool is limited to 2 threads max since state changes are
typically sequential per pipeline. This prevents the crash in g_wakeup_new()
when creating eventfd for new thread event dispatchers.
Fixes #1687
2025-12-18 19:58:23 +01:00
copilot-swe-agent[bot]
1d03bb2178
GstEnginePipeline: Fix crash in GStreamer decodebin3 when switching tracks
...
Add guard in AboutToFinishCallback to prevent race condition when pipeline is being torn down. This prevents the callback from trying to set next URL while the pipeline is being destroyed, which caused crashes in GStreamer's decodebin3.
Fixes issue where rapidly switching tracks could cause segmentation fault in gst_decodebin_input_link_to_slot.
See: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4626
Fixes #1863
Co-Authored-By: Jonas Kvinge <jonas@jkvinge.net >
2025-12-18 19:44:03 +01:00
Jonas Kvinge
afe6967c46
GstEnginePipeline: Handle "missing-plugin" messages
2025-11-30 18:13:30 +01:00
Madeline Schreiber
d901258f11
GstEnginePipeline: Ignore about-to-finish when position is 0
2025-07-07 01:05:47 +02:00
Jonas Kvinge
71287dd77e
Add option to turn off playbin3
2025-04-08 21:19:29 +02:00
Jonas Kvinge
2c9b14f5f2
GstEnginePipeline: Simplify version checks
2025-04-04 22:12:38 +02:00
Jonas Kvinge
5e031be42c
Fix cast warnings with MSVC
2025-03-25 18:05:41 +01:00
Roman Lebedev
2687dc31cc
Support arbitrarily large EBU R 128 loudness normalization
...
While i have fixed gstreamer's `volume` in
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5063
i did not see anything that followed after it was merged, namely, in
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6222 ,
the feature was moved, `"volume"` was reverted to only handle `x10` gain,
and one needs to use `"volume-full-range"` instead to do arbitrary gain.
So let's do that.
This, of course, requires run-time detection of the version
of gstreamer base plugins that we are running with,
specifically, we need version `1.24`.
2025-03-12 22:20:56 +01:00
Jonas Kvinge
0db082fca0
Replace Q_OS_WIN with Q_OS_WIN32
2025-01-28 20:30:43 +01:00
Jonas Kvinge
ab558f87b5
GstEnginePipeline: Use SetStateAsync in finish if needed
2025-01-15 07:01:43 +01:00
Jonas Kvinge
7afae70bb0
GstEnginePipeline: Make sure all set states are finished before finishing pipeline
2025-01-05 18:58:03 +01:00
Jonas Kvinge
0fff5f672a
Rename variables
2024-12-06 23:43:44 +01:00
Jonas Kvinge
c62fd2b58a
GstEnginePipeline: Add more logging for fader
2024-11-14 22:05:06 +01:00
Jonas Kvinge
712db598f7
GstEnginePipeline: Fix setting volume after fader timeout
2024-11-14 22:04:53 +01:00
Jonas Kvinge
16c9a0f974
GstEnginePipeline: Set final fader volume on timeout
2024-11-11 16:17:57 +01:00
Jonas Kvinge
18000b1b2c
GstEnginePipeline: Increase fader timeout
2024-11-11 16:17:35 +01:00
Jonas Kvinge
f1b56028b7
GstEnginePipeline: Use fully-qualified names for QTimeLine
2024-11-11 16:17:11 +01:00
Jonas Kvinge
3d2315f754
GstEnginePipeline: Add mutex locker for Spotify access token
2024-11-11 16:16:29 +01:00
Jonas Kvinge
6612eeb9e3
GstEnginePipeline: Simplify next uri reset code
2024-11-10 15:38:00 +01:00
Jonas Kvinge
93929c73ee
GstEnginePipeline: Add fader timeout
2024-11-10 02:07:22 +01:00
Jonas Kvinge
d68bede374
GstEnginePipeline: Fix fader fudge timer naming
2024-11-10 01:53:38 +01:00
Jonas Kvinge
b659b27f95
GstEnginePipeline: Replace QBasicTimer with QTimer
2024-11-10 01:50:53 +01:00
Jonas Kvinge
70d0772e04
GstEnginePipeline: Add separate set state async function
2024-11-10 01:36:48 +01:00
Jonas Kvinge
975d0dff25
Move GstStartup
2024-11-09 23:39:31 +01:00
Jonas Kvinge
c0f5b53aaf
GstEnginePipeline: Simplify checking for NULL state
2024-11-09 19:36:41 +01:00
Jonas Kvinge
ba285925ca
GstEnginePipeline: Check that state is actually NULL before finishing pipeline
...
Possible fix for #1582
2024-11-09 19:30:28 +01:00
Jonas Kvinge
a0dd2c66e4
GstEnginePipeline: Always set state to NULL
2024-11-09 19:26:39 +01:00
Jonas Kvinge
f59c6c356e
GstEnginePipeline: Get audio-sink
2024-11-09 19:22:56 +01:00
Jonas Kvinge
65b6e6d540
GstEnginePipeline: Save fader state
2024-11-09 19:21:56 +01:00
Jonas Kvinge
8da2b9cd94
Refactoring
2024-11-01 23:04:42 +01:00
Jonas Kvinge
ef9ef63f02
Port to QStringLiteral operator
2024-10-20 06:38:55 +02:00
Jonas Kvinge
0e330b81db
Use Qt::Literals::StringLiterals
2024-10-18 20:17:23 +02:00
Jonas Kvinge
b50da3eba4
GstEnginePipeline: Add missing end of stream
...
A bug was introduced when I added the mutex locker for the URLs, it did nothing when it was supposed to emit end of stream.
Fixes #1568
2024-09-29 23:40:09 +02:00
Jonas Kvinge
dae4943593
Replace Spotify username/password with access token
2024-09-28 00:09:23 +02:00
Jonas Kvinge
c3008b4179
Silence Clang Wunused-const-variable
2024-09-22 13:15:19 +02:00
Jonas Kvinge
4270b12cd1
Replace QLatin1String with operator _L1
2024-09-12 22:13:21 +02:00
Jonas Kvinge
e3e6a22172
Drop Qt 5 support
...
Qt 6 has been available for almost 4 years. Qt 5 is no longer officially supported by Qt for opensource, it's time to drop Qt 5.
2024-09-12 22:13:21 +02:00
Jonas Kvinge
4ea5eb8292
GstEnginePipeline: Set volume internal in notify volume callback
...
Fixes #1541
2024-09-10 17:04:24 +02:00
Jonas Kvinge
552440f50e
Add mutexes
2024-09-02 22:27:45 +02:00
Jonas Kvinge
8da616491d
Replace emit with Q_EMIT
2024-08-25 01:06:30 +02:00
Jonas Kvinge
a2cae06582
Remove QtConcurrent include
2024-08-24 17:01:53 +02:00
Jonas Kvinge
7ebcc73a49
More const detach fixes
2024-08-23 20:30:59 +02:00
Jonas Kvinge
9b5fe3bfd6
GstEnginePipeline: Rename PlaybinProbe to PadProbe
2024-08-23 00:17:33 +02:00
Jonas Kvinge
91eef0d695
GstEnginePipeline: Sort variables
2024-08-23 00:08:14 +02:00
Jonas Kvinge
222001bc13
GstEnginePipeline: Fix buffering
2024-08-11 14:52:00 +02:00
Jonas Kvinge
548fa3f6ee
Wait for set state to finish before deleting pipeline
...
Setting state to GST_STATE_NULL sometimes blocks, to fix this use the threadpool to set the state to NULL and wait with deleting the pipeline until the state is changed.
This fixes blocking the main thread when switching Spotify songs.
2024-08-10 18:22:56 +02:00
Jonas Kvinge
8c8acbb546
GstEnginePipeline: Rename variables
2024-08-09 19:29:12 +02:00
Jonas Kvinge
819463a865
Use anonymous namespace for constants
2024-08-07 00:52:58 +02:00