GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2021-09-24T11:09:10Zhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/405queue2 : async-done error after seek2021-09-24T11:09:10ZDonghyeok Yangqueue2 : async-done error after seekDear All.
I have an issue about GST_ELEMENT_FLOW_ERROR in queue2.
Actually, I use dashdemux to playback for recorded file in our target environment (e.g TV).
the issue recorde file's duration is shrot(17sec) and it has multi audio str...Dear All.
I have an issue about GST_ELEMENT_FLOW_ERROR in queue2.
Actually, I use dashdemux to playback for recorded file in our target environment (e.g TV).
the issue recorde file's duration is shrot(17sec) and it has multi audio stream.
one dashdemux push all audio stream and because each audio streams are encoded as an independent mp4 file, one audio stream has one qtdemux.
it means when push EOS event, all audio path send EOS event.
the issue is when try seek, async-done is not finished.
in this case, queue2 of non selected audio track receive EOS but src pad is not linked.
so queue2 call GST_ELEMENT_FLOW_ERROR and playbin3 cannot change status.
when I remove GST_FLOW_NOT_LINKED condition, issue is not happened.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/241queue2: Deadlock in Queue2 when music streaming plays long time.2022-03-04T20:15:23ZBugzilla Migration Userqueue2: Deadlock in Queue2 when music streaming plays long time.## Submitted by Suhwang Kim
**[Link to original bug (#783675)](https://bugzilla.gnome.org/show_bug.cgi?id=783675)**
## Description
A deadlock occurred while accessing one variable in two threads.
This is sometimes issue.
One ...## Submitted by Suhwang Kim
**[Link to original bug (#783675)](https://bugzilla.gnome.org/show_bug.cgi?id=783675)**
## Description
A deadlock occurred while accessing one variable in two threads.
This is sometimes issue.
One thread sets the "downstream_may_block" value.
Compares this value with another thread and executes g_cond_wait().
Deadlock occurs at this point.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1397queue2: deadlock when deactivate is called in pull mode2022-09-20T10:07:17ZPaweł Stawickiqueue2: deadlock when deactivate is called in pull mode### Describe your issue
when playing a mp3 file with ring-buffer-max-size set (queue2 source pad is in pull mode)
occasionally there is a deadlock when stopping the stream (when activate_pull(..., false) is called).
#### Setup
- **Opera...### Describe your issue
when playing a mp3 file with ring-buffer-max-size set (queue2 source pad is in pull mode)
occasionally there is a deadlock when stopping the stream (when activate_pull(..., false) is called).
#### Setup
- **Operating System:** Debian GNU/Linux 11 (bullseye), 64 bit version
- **Device:** raspbery pi 400
- **GStreamer Version:** 1.21.0 (GIT) branch: main (0151d621afbde1e267c64f2697da0146b72d7f6a), 1.18.3
- **Command line:** gst-launch-1.0 urisourcebin buffer-size=5242880 ring-buffer-max-size=20971520 uri=$URI ! decodebin3 ! audioconvert ! autoaudiosink
### Steps to reproduce the bug
see: https://github.com/stawel/gstreamer-tests/tree/main/queue2_deactivate_pull_deadlock
1. in terminal 1 run:
```
pi@raspberrypi:~/queue2_deactivate_pull_deadlock $ python2 serve_http.py # run a http server with "range" - any should do
```
2. in terminal 2 run:
```
[main] pi@raspberrypi:~/queue2_deactivate_pull_deadlock $ ./deadlock.sh
```
after a while (1 minut) you should see:
```
Mon 22 Aug 2022 07:36:49 PM BST ............ Test: 91
[...]
0:00:00.178975027 13507 0x7f980086a0 DEBUG queue2 gstqueue2.c:1300:update_in_rates:<queue2-0> rates: in 0.000000, time 0:00:00.000000000
0:00:00.179027581 13507 0x7f980086a0 LOG queue2 gstqueue2.c:1033:get_buffering_level:<queue2-0> Cur level bytes/time/rate-time/buffers 0/0:00:00.000000000/0:00:00.000000000/0
0:00:00.179074710 13507 0x7f980086a0 DEBUG queue2 gstqueue2.c:1071:get_buffering_level:<queue2-0> buffering 1, level 0
0:00:00.182656692 13507 0x55bed11c00 DEBUG queue2 gstqueue2.c:2744:gst_queue2_handle_sink_event:<queue2-0> refusing event, we are flushing
0:00:00.183046351 13507 0x55bed11c00 DEBUG queue2 gstqueue2.c:2744:gst_queue2_handle_sink_event:<queue2-0> refusing event, we are flushing
0:00:00.183098535 13507 0x55bed11c00 DEBUG queue2 gstqueue2.c:2744:gst_queue2_handle_sink_event:<queue2-0> refusing event, we are flushing
[deadlock]
```
### How reproducible is the bug?
after 1 minut of script running
### Additional Information
deadlock.sh script:
https://github.com/stawel/gstreamer-tests/blob/main/queue2_deactivate_pull_deadlock/deadlock.sh
callstack:
```[main] pi@raspberrypi:~/gstreamer/gstreamer/builddir $ gdb /home/pi/gstreamer/gstreamer/builddir/subprojects/gstreamer/tools/gst-launch-1.0 -p 13507
[...]
(gdb) thread apply all where
Thread 6 (Thread 0x7f877fe1c0 (LWP 13517) "id3demux0:sink"):
#0 syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1 0x0000007fa14924b0 in g_cond_wait (cond=cond@entry=0x7f90042378, mutex=mutex@entry=0x7f90042368) at ../subprojects/glib/glib/gthread-posix.c:1575
#2 0x0000007fa0861614 in gst_queue2_create_read (queue=queue@entry=0x7f90042040, offset=offset@entry=5289256, length=<optimized out>, length@entry=128, buffer=buffer@entry=0x7f877fcfb0) at ../subprojects/gstreamer/plugins/elements/gstqueue2.c:1617
#3 0x0000007fa08624f8 in gst_queue2_get_range (pad=<optimized out>, parent=0x7f90042040, offset=5289256, length=128, buffer=0x7f877fcfb0) at ../subprojects/gstreamer/plugins/elements/gstqueue2.c:3602
#4 0x0000007fa12a9530 in gst_pad_get_range_unchecked (pad=pad@entry=0x55bed21600, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd060) at ../subprojects/gstreamer/gst/gstpad.c:4935
#5 0x0000007fa12b0eac in gst_pad_pull_range (pad=pad@entry=0x55bed16a90, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd160) at ../subprojects/gstreamer/gst/gstpad.c:5180
#6 0x0000007fa1292310 in gst_proxy_pad_getrange_default (pad=<optimized out>, parent=<optimized out>, offset=5289256, size=128, buffer=0x7f877fd160) at ../subprojects/gstreamer/gst/gstghostpad.c:185
#7 0x0000007fa12a9530 in gst_pad_get_range_unchecked (pad=pad@entry=0x55bed0ca20, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd210) at ../subprojects/gstreamer/gst/gstpad.c:4935
#8 0x0000007fa12b0eac in gst_pad_pull_range (pad=pad@entry=0x55bed0c060, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd310) at ../subprojects/gstreamer/gst/gstpad.c:5180
#9 0x0000007fa1292310 in gst_proxy_pad_getrange_default (pad=<optimized out>, parent=<optimized out>, offset=5289256, size=128, buffer=0x7f877fd310) at ../subprojects/gstreamer/gst/gstghostpad.c:185
#10 0x0000007fa12a9530 in gst_pad_get_range_unchecked (pad=pad@entry=0x55bed16370, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd3c0) at ../subprojects/gstreamer/gst/gstpad.c:4935
#11 0x0000007fa12b0eac in gst_pad_pull_range (pad=pad@entry=0x55bed0cc90, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd4c0) at ../subprojects/gstreamer/gst/gstpad.c:5180
#12 0x0000007fa1292310 in gst_proxy_pad_getrange_default (pad=<optimized out>, parent=<optimized out>, offset=5289256, size=128, buffer=0x7f877fd4c0) at ../subprojects/gstreamer/gst/gstghostpad.c:185
#13 0x0000007fa12a9530 in gst_pad_get_range_unchecked (pad=pad@entry=0x55bed16cf0, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd570) at ../subprojects/gstreamer/gst/gstpad.c:4935
#14 0x0000007fa12b0eac in gst_pad_pull_range (pad=0x55bed21850, offset=5289256, size=128, buffer=0x7f877fd640) at ../subprojects/gstreamer/gst/gstpad.c:5180
#15 0x0000007fa12a9530 in gst_pad_get_range_unchecked (pad=pad@entry=0x55bed21aa0, offset=offset@entry=5289256, size=size@entry=128, buffer=buffer@entry=0x7f877fd6f0) at ../subprojects/gstreamer/gst/gstpad.c:4935
#16 0x0000007fa12b0eac in gst_pad_pull_range (pad=0x55bed21cf0, offset=offset@entry=5289256, size=128, buffer=buffer@entry=0x7f877fd7e8) at ../subprojects/gstreamer/gst/gstpad.c:5180
#17 0x0000007fa0a1cbdc in gst_tag_demux_pull_end_tag (tags=<synthetic pointer>, demux=0x7f90048a20) at ../subprojects/gst-plugins-base/gst-libs/gst/tag/gsttagdemux.c:1078
#18 gst_tag_demux_element_find (demux=0x7f90048a20) at ../subprojects/gst-plugins-base/gst-libs/gst/tag/gsttagdemux.c:1337
#19 0x0000007fa0a1dae4 in gst_tag_demux_element_loop (demux=0x7f90048a20) at ../subprojects/gst-plugins-base/gst-libs/gst/tag/gsttagdemux.c:1457
#20 0x0000007fa12e4044 in gst_task_func (task=0x7f9000e3b0) at ../subprojects/gstreamer/gst/gsttask.c:384
#21 0x0000007fa1469f28 in g_thread_pool_thread_proxy (data=<optimized out>) at ../subprojects/glib/glib/gthreadpool.c:354
#22 0x0000007fa14694b4 in g_thread_proxy (data=0x7f980221e0) at ../subprojects/glib/glib/gthread.c:827
#23 0x0000007fa106a628 in start_thread (arg=0x7f877fdac0) at pthread_create.c:477
#24 0x0000007fa116901c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
Thread 5 (Thread 0x7f9d5be1c0 (LWP 13513) "typefind:sink"):
#0 syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1 0x0000007fa14924b0 in g_cond_wait (cond=cond@entry=0x55bed43f50, mutex=mutex@entry=0x55bed43f08) at ../subprojects/glib/glib/gthread-posix.c:1575
#2 0x0000007fa12e41ec in gst_task_func (task=0x55bed43ef0) at ../subprojects/gstreamer/gst/gsttask.c:369
#3 0x0000007fa1469f28 in g_thread_pool_thread_proxy (data=<optimized out>) at ../subprojects/glib/glib/gthreadpool.c:354
#4 0x0000007fa14694b4 in g_thread_proxy (data=0x7f98008520) at ../subprojects/glib/glib/gthread.c:827
#5 0x0000007fa106a628 in start_thread (arg=0x7f9d5bdac0) at pthread_create.c:477
#6 0x0000007fa116901c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
Thread 4 (Thread 0x7f9f1ed1c0 (LWP 13511) "gmain"):
#0 0x0000007fa115f2f4 in __GI___poll (fds=0x55bed47b90, nfds=1, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
#1 0x0000007fa1440178 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x55bed47b90, timeout=<optimized out>, context=0x55bed48600) at ../subprojects/glib/glib/gmain.c:4478
#2 g_main_context_iterate (context=context@entry=0x55bed48600, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../subprojects/glib/glib/gmain.c:4170
#3 0x0000007fa1440294 in g_main_context_iteration (context=0x55bed48600, may_block=may_block@entry=1) at ../subprojects/glib/glib/gmain.c:4240
#4 0x0000007fa14402ec in glib_worker_main (data=<optimized out>) at ../subprojects/glib/glib/gmain.c:6140
#5 0x0000007fa14694b4 in g_thread_proxy (data=0x55bed11cc0) at ../subprojects/glib/glib/gthread.c:827
#6 0x0000007fa106a628 in start_thread (arg=0x7f9f1ecac0) at pthread_create.c:477
#7 0x0000007fa116901c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
Thread 3 (Thread 0x7f9f9ee1c0 (LWP 13510) "souphttpsrc0:sr"):
#0 syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1 0x0000007fa14924b0 in g_cond_wait (cond=cond@entry=0x55bed431d0, mutex=mutex@entry=0x55bed43188) at ../subprojects/glib/glib/gthread-posix.c:1575
#2 0x0000007fa12e41ec in gst_task_func (task=0x55bed43170) at ../subprojects/gstreamer/gst/gsttask.c:369
#3 0x0000007fa1469f28 in g_thread_pool_thread_proxy (data=<optimized out>) at ../subprojects/glib/glib/gthreadpool.c:354
#4 0x0000007fa14694b4 in g_thread_proxy (data=0x55bed11c00) at ../subprojects/glib/glib/gthread.c:827
#5 0x0000007fa106a628 in start_thread (arg=0x7f9f9edac0) at pthread_create.c:477
#6 0x0000007fa116901c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
Thread 2 (Thread 0x7fa01ef1c0 (LWP 13509) "gst-launch-1.0"):
--Type <RET> for more, q to quit, c to continue without paging--c
#0 0x0000007fa115f2f4 in __GI___poll (fds=0x7f9800d510, nfds=1, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
#1 0x0000007fa1440178 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x7f9800d510, timeout=<optimized out>, context=0x55bed450a0) at ../subprojects/glib/glib/gmain.c:4478
#2 g_main_context_iterate (context=0x55bed450a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../subprojects/glib/glib/gmain.c:4170
#3 0x0000007fa144051c in g_main_loop_run (loop=0x55bed45160) at ../subprojects/glib/glib/gmain.c:4373
#4 0x0000007fa07a3e18 in thread_func (user_data=0x55bed3e8f0) at ../subprojects/gst-plugins-good/ext/soup/gstsouphttpsrc.c:1065
#5 0x0000007fa14694b4 in g_thread_proxy (data=0x55bed11b00) at ../subprojects/glib/glib/gthread.c:827
#6 0x0000007fa106a628 in start_thread (arg=0x7fa01eeac0) at pthread_create.c:477
#7 0x0000007fa116901c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
Thread 1 (Thread 0x7fa158c040 (LWP 13507) "gst-launch-1.0"):
#0 __lll_lock_wait (futex=futex@entry=0x7f90012200, private=0) at lowlevellock.c:52
#1 0x0000007fa106cd14 in __GI___pthread_mutex_lock (mutex=0x7f90012200) at pthread_mutex_lock.c:115
#2 0x0000007fa12aca54 in post_activate (new_mode=GST_PAD_MODE_NONE, pad=0x55bed21600) at ../subprojects/gstreamer/gst/gstpad.c:1042
#3 activate_mode_internal (pad=pad@entry=0x55bed21600, parent=parent@entry=0x7f90042040, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1220
#4 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed21600, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#5 0x0000007fa12acb98 in activate_mode_internal (pad=pad@entry=0x55bed16a90, parent=parent@entry=0x55bed0ca20, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1181
#6 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed16a90, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#7 0x0000007fa12924c4 in gst_ghost_pad_activate_pull_default (pad=0x55bed0ca20, parent=<optimized out>, active=0) at ../subprojects/gstreamer/gst/gstghostpad.c:393
#8 0x0000007fa12ac924 in activate_mode_internal (pad=pad@entry=0x55bed0ca20, parent=parent@entry=0x55bed160e0, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1213
#9 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed0ca20, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#10 0x0000007fa12acb98 in activate_mode_internal (pad=pad@entry=0x55bed0c060, parent=parent@entry=0x55bed0a0f0, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1181
#11 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed0c060, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#12 0x0000007fa1292964 in gst_ghost_pad_internal_activate_pull_default (parent=<optimized out>, active=0, pad=0x55bed16370) at ../subprojects/gstreamer/gst/gstghostpad.c:302
#13 gst_ghost_pad_internal_activate_mode_default (pad=0x55bed16370, parent=<optimized out>, mode=<optimized out>, active=0) at ../subprojects/gstreamer/gst/gstghostpad.c:344
#14 0x0000007fa12ac924 in activate_mode_internal (pad=pad@entry=0x55bed16370, parent=parent@entry=0x55bed0c060, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1213
#15 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed16370, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#16 0x0000007fa12acb98 in activate_mode_internal (pad=pad@entry=0x55bed0cc90, parent=parent@entry=0x7f90048040, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1181
#17 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed0cc90, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#18 0x0000007fa1292964 in gst_ghost_pad_internal_activate_pull_default (parent=<optimized out>, active=0, pad=0x55bed16cf0) at ../subprojects/gstreamer/gst/gstghostpad.c:302
#19 gst_ghost_pad_internal_activate_mode_default (pad=0x55bed16cf0, parent=<optimized out>, mode=<optimized out>, active=0) at ../subprojects/gstreamer/gst/gstghostpad.c:344
#20 0x0000007fa12ac924 in activate_mode_internal (pad=pad@entry=0x55bed16cf0, parent=parent@entry=0x55bed0cc90, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1213
#21 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed16cf0, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#22 0x0000007fa12acb98 in activate_mode_internal (pad=pad@entry=0x55bed21850, parent=parent@entry=0x55bed41800, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1181
#23 0x0000007fa12ad36c in gst_pad_activate_mode (pad=0x55bed21850, mode=GST_PAD_MODE_PULL, active=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#24 0x0000007fa12ac924 in activate_mode_internal (pad=pad@entry=0x55bed21aa0, parent=parent@entry=0x55bed41800, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1213
#25 0x0000007fa12ad36c in gst_pad_activate_mode (pad=pad@entry=0x55bed21aa0, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1318
#26 0x0000007fa12acb98 in activate_mode_internal (pad=pad@entry=0x55bed21cf0, parent=parent@entry=0x7f90048a20, mode=mode@entry=GST_PAD_MODE_PULL, active=active@entry=0) at ../subprojects/gstreamer/gst/gstpad.c:1181
#27 0x0000007fa12ad11c in gst_pad_set_active (pad=pad@entry=0x55bed21cf0, active=0) at ../subprojects/gstreamer/gst/gstpad.c:1111
#28 0x0000007fa1282e1c in activate_pads (vpad=<optimized out>, ret=0x7fd3522c38, active=0x7fd3522c9c) at ../subprojects/gstreamer/gst/gstelement.c:3181
#29 0x0000007fa129ae88 in gst_iterator_fold (it=it@entry=0x55becec530, func=func@entry=0x7fa1282df4 <activate_pads>, ret=ret@entry=0x7fd3522c38, user_data=user_data@entry=0x7fd3522c9c) at ../subprojects/gstreamer/gst/gstiterator.c:617
#30 0x0000007fa12834c8 in iterator_activate_fold_with_resync (iter=iter@entry=0x55becec530, user_data=user_data@entry=0x7fd3522c9c, func=<optimized out>) at ../subprojects/gstreamer/gst/gstelement.c:3205
#31 0x0000007fa1285b70 in gst_element_pads_activate (element=element@entry=0x7f90048a20, active=<optimized out>, active@entry=0) at ../subprojects/gstreamer/gst/gstelement.c:3249
#32 0x0000007fa1285de8 in gst_element_change_state_func (element=0x7f90048a20, transition=<optimized out>) at ../subprojects/gstreamer/gst/gstelement.c:3315
#33 0x0000007fa0a1fb5c in gst_tag_demux_change_state (element=0x7f90048a20, transition=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gst-plugins-base/gst-libs/gst/tag/gsttagdemux.c:1733
#34 0x0000007fa128837c in gst_element_change_state (element=element@entry=0x7f90048a20, transition=transition@entry=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstelement.c:3093
#35 0x0000007fa1288b24 in gst_element_set_state_func (element=0x7f90048a20, state=<optimized out>) at ../subprojects/gstreamer/gst/gstelement.c:3047
#36 0x0000007fa1263354 in gst_bin_element_set_state (next=GST_STATE_READY, current=GST_STATE_PAUSED, start_time=0, base_time=0, element=0x7f90048a20, bin=0x7f90048040) at ../subprojects/gstreamer/gst/gstbin.c:2581
#37 gst_bin_change_state_func (element=0x7f90048040, transition=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstbin.c:2923
#38 0x0000007fa0c27bbc in gst_parse_bin_change_state (element=0x7f90048040, transition=<optimized out>) at ../subprojects/gst-plugins-base/gst/playback/gstparsebin.c:4391
#39 0x0000007fa128837c in gst_element_change_state (element=element@entry=0x7f90048040, transition=transition@entry=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstelement.c:3093
#40 0x0000007fa1288b24 in gst_element_set_state_func (element=0x7f90048040, state=<optimized out>) at ../subprojects/gstreamer/gst/gstelement.c:3047
#41 0x0000007fa1263354 in gst_bin_element_set_state (next=GST_STATE_READY, current=GST_STATE_PAUSED, start_time=0, base_time=0, element=0x7f90048040, bin=0x55bed0a0f0) at ../subprojects/gstreamer/gst/gstbin.c:2581
#42 gst_bin_change_state_func (element=0x55bed0a0f0, transition=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstbin.c:2923
#43 0x0000007fa0c12a78 in gst_decodebin3_change_state (element=0x55bed0a0f0, transition=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c:3153
#44 0x0000007fa128837c in gst_element_change_state (element=element@entry=0x55bed0a0f0, transition=transition@entry=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstelement.c:3093
#45 0x0000007fa1288b24 in gst_element_set_state_func (element=0x55bed0a0f0, state=<optimized out>) at ../subprojects/gstreamer/gst/gstelement.c:3047
#46 0x0000007fa1263354 in gst_bin_element_set_state (next=GST_STATE_READY, current=GST_STATE_PAUSED, start_time=0, base_time=0, element=0x55bed0a0f0, bin=0x55bed2a230) at ../subprojects/gstreamer/gst/gstbin.c:2581
#47 gst_bin_change_state_func (element=0x55bed2a230, transition=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstbin.c:2923
#48 0x0000007fa12b675c in gst_pipeline_change_state (element=0x55bed2a230, transition=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstpipeline.c:529
#49 0x0000007fa128837c in gst_element_change_state (element=element@entry=0x55bed2a230, transition=transition@entry=GST_STATE_CHANGE_PAUSED_TO_READY) at ../subprojects/gstreamer/gst/gstelement.c:3093
#50 0x0000007fa1288b24 in gst_element_set_state_func (element=0x55bed2a230, state=<optimized out>) at ../subprojects/gstreamer/gst/gstelement.c:3047
#51 0x0000005582b73c24 in main (argc=<optimized out>, argv=<optimized out>) at ../subprojects/gstreamer/tools/gst-launch.c:1339
(gdb)
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/31Queue2 doesn't change fill level when seeking back into a "hole"2022-03-04T00:58:51ZBugzilla Migration UserQueue2 doesn't change fill level when seeking back into a "hole"## Submitted by Bastien Nocera `@hadess`
**[Link to original bug (#685818)](https://bugzilla.gnome.org/show_bug.cgi?id=685818)**
## Description
See [bug 635637](https://bugzilla.gnome.org/show_bug.cgi?id=635637) for Totem's implemen...## Submitted by Bastien Nocera `@hadess`
**[Link to original bug (#685818)](https://bugzilla.gnome.org/show_bug.cgi?id=685818)**
## Description
See [bug 635637](https://bugzilla.gnome.org/show_bug.cgi?id=635637) for Totem's implementation.
When download buffering, we should be able to skip forward past the fill level (which seems to work) but when seeking back into a "hole", we should be resetting the fill level to match the current location of the slider.
Eg:
1. launch totem test suite (in browser-plugin/tests/, run launch-web-server.sh start)
2. link a file that can be "download-buffered" in browser-plugin/tests (ln -s /test-file/blah.mov foo.mov)
3. play the movie: totem http://localhost:12345/foo.mov
4. click far forward (buffer level moves with it)
5. click back quite a bit again (buffer level doesn't move back, even though this section of the video isn't download)
You'll also notice that the fill level doesn't seem to match the slider's position, which is a bit of a problem...
Version: 1.x
### Blocking
* [Bug 635637](https://bugzilla.gnome.org/show_bug.cgi?id=635637)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/126queue2: Doesn't push the flush stop on its thread2021-09-24T11:10:45ZBugzilla Migration Userqueue2: Doesn't push the flush stop on its thread## Submitted by Olivier Crête `@ocrete`
**[Link to original bug (#753080)](https://bugzilla.gnome.org/show_bug.cgi?id=753080)**
## Description
I have this backtrace where a flush stop event from a demuxer ends push making a sticky s...## Submitted by Olivier Crête `@ocrete`
**[Link to original bug (#753080)](https://bugzilla.gnome.org/show_bug.cgi?id=753080)**
## Description
I have this backtrace where a flush stop event from a demuxer ends push making a sticky stream-start event be pushed down and then gets stuck in playsink's pad probe. So it causes a deadlock.
I'm attaching a patch that just makes queue2 put the flush-stop in the queue, but I guess the other option would be to make playsink's probe drop stick events and just wait for buffer/gap before continuing.
My test is:
`GST_DEBUG=2 GST_GL_XINITTHREADS=1 DISPLAY=:1 GST_VALIDATE_SCENARIO=change_state_intensive gdb --args gst-validate-1.0 playbin uri=http://127.0.0.1:8079/defaults/ogg/vorbis_theora.1.ogg audio-sink='fakesink sync=true' video-sink='fakesink sync=true' --set-media-info "/home/ocrete/gst-validate/gst-integration-testsuites/medias/defaults/online-streams-infos/http/vorbis_theora.1.ogg.stream_info"`
Here is the stack trace:
```
Thread 5 (Thread 0x7fffd71a3700 (LWP 2553)):
#0 0x00007ffff50a5239 in syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007ffff53f802f in g_cond_wait (cond=0x7fffc40c8d68, mutex=0x7fffc40c8cf8) at gthread-posix.c:1395
#2 0x00007ffff6290619 in do_probe_callbacks (pad=0x7fffc40c8ce0 [GstProxyPad], info=0x7fffd719f790, defaultval=GST_FLOW_OK) at gstpad.c:3516
#3 0x00007ffff62955f4 in gst_pad_push_event_unchecked (pad=0x7fffc40c8ce0 [GstProxyPad], event=0x7fffc8024810, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)
at gstpad.c:5031
#4 0x00007ffff6290b97 in push_sticky (pad=0x7fffc40c8ce0 [GstProxyPad], ev=0x7fffd719f890, user_data=0x7fffd719f8f0) at gstpad.c:3651
#5 0x00007ffff6287dd3 in events_foreach (pad=0x7fffc40c8ce0 [GstProxyPad], func=0x7ffff6290a82 <push_sticky>, user_data=0x7fffd719f8f0) at gstpad.c:590
#6 0x00007ffff6290f38 in check_sticky (pad=0x7fffc40c8ce0 [GstProxyPad], event=0x7fffc8024810) at gstpad.c:3707
#7 0x00007ffff6295dfb in gst_pad_push_event (pad=0x7fffc40c8ce0 [GstProxyPad], event=0x7fffc8024810) at gstpad.c:5189
#8 0x00007ffff628eb95 in event_forward_func (pad=0x7fffc40c8ce0 [GstProxyPad], data=0x7fffd719fa30) at gstpad.c:2884
#9 0x00007ffff628e997 in gst_pad_forward (pad=0x7fffc4118530 [GstGhostPad], forward=0x7ffff628ea6e <event_forward_func>, user_data=0x7fffd719fa30)
at gstpad.c:2838
---Type <return> to continue, or q <return> to quit---
#10 0x00007ffff628ed49 in gst_pad_event_default (pad=0x7fffc4118530 [GstGhostPad], parent=0x830160 [GstPlaySink], event=0x7fffc8024810) at gstpad.c:2935
#11 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc4118530 [GstGhostPad], event=0x7fffc8024810, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)
at gstpad.c:5388
#12 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffc4130710 [GstPad], event=0x7fffc8024810, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)
at gstpad.c:5064
#13 0x00007ffff6290b97 in push_sticky (pad=0x7fffc4130710 [GstPad], ev=0x7fffd719fc30, user_data=0x7fffd719fc90) at gstpad.c:3651
#14 0x00007ffff6287dd3 in events_foreach (pad=0x7fffc4130710 [GstPad], func=0x7ffff6290a82 <push_sticky>, user_data=0x7fffd719fc90) at gstpad.c:590
#15 0x00007ffff6290f38 in check_sticky (pad=0x7fffc4130710 [GstPad], event=0x7fffc8024810) at gstpad.c:3707
#16 0x00007ffff6295dfb in gst_pad_push_event (pad=0x7fffc4130710 [GstPad], event=0x7fffc8024810) at gstpad.c:5189
#17 0x00007fffeb2dc489 in gst_selector_pad_event (pad=0x7fffc40b8e20 [GstSelectorPad], parent=0x7fffc40b6b80 [GstInputSelector], event=0x7fffc8024810)
at gstinputselector.c:632
#18 0x00007ffff7bad778 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0x7fffcc1609f0 [GstValidatePadMonitor], parent=0x7fffc40b6b80 [GstInputSelector], event=0x7fffc8024810, handler=0x7fffeb2dbdde <gst_selector_pad_event>) at gst-validate-pad-monitor.c:1788
#19 0x00007ffff7bafa1d in gst_validate_pad_monitor_sink_event_func (pad=0x7fffc40b8e20 [GstSelectorPad], parent=0x7fffc40b6b80 [GstInputSelector], event=0x7fffc8024810) at gst-validate-pad-monitor.c:2103
#20 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc40b8e20 [GstSelectorPad], event=0x7fffc8024810, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at gstpad.c:5388
#21 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffc41182c0 [GstGhostPad], event=0x7fffc8024810, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)
at gstpad.c:5064
#22 0x00007ffff6290b97 in push_sticky (pad=0x7fffc41182c0 [GstGhostPad], ev=0x7fffd71a0060, user_data=0x7fffd71a00c0) at gstpad.c:3651
#23 0x00007ffff6287dd3 in events_foreach (pad=0x7fffc41182c0 [GstGhostPad], func=0x7ffff6290a82 <push_sticky>, user_data=0x7fffd71a00c0) at gstpad.c:590
#24 0x00007ffff6290f38 in check_sticky (pad=0x7fffc41182c0 [GstGhostPad], event=0x7fffc8024810) at gstpad.c:3707
#25 0x00007ffff6295dfb in gst_pad_push_event (pad=0x7fffc41182c0 [GstGhostPad], event=0x7fffc8024810) at gstpad.c:5189
#26 0x00007ffff628eb95 in event_forward_func (pad=0x7fffc41182c0 [GstGhostPad], data=0x7fffd71a0200) at gstpad.c:2884
#27 0x00007ffff628e997 in gst_pad_forward (pad=0x7fffd80391e0 [GstProxyPad], forward=0x7ffff628ea6e <event_forward_func>, user_data=0x7fffd71a0200)
at gstpad.c:2838
#28 0x00007ffff628ed49 in gst_pad_event_default (pad=0x7fffd80391e0 [GstProxyPad], parent=0x7fffc41182c0 [GstGhostPad], event=0x7fffc8024810)
at gstpad.c:2935
#29 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffd80391e0 [GstProxyPad], event=0x7fffc8024810, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)
at gstpad.c:5388
#30 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffcc007550 [GstDecodePad], event=0x7fffc8024810, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)
at gstpad.c:5064
#31 0x00007ffff6290b97 in push_sticky (pad=0x7fffcc007550 [GstDecodePad], ev=0x7fffd71a0400, user_data=0x7fffd71a0460) at gstpad.c:3651
#32 0x00007ffff6287dd3 in events_foreach (pad=0x7fffcc007550 [GstDecodePad], func=0x7ffff6290a82 <push_sticky>, user_data=0x7fffd71a0460) at gstpad.c:590
#33 0x00007ffff6290f38 in check_sticky (pad=0x7fffcc007550 [GstDecodePad], event=0x7fffbc0022a0) at gstpad.c:3707
#34 0x00007ffff6295dfb in gst_pad_push_event (pad=0x7fffcc007550 [GstDecodePad], event=0x7fffbc0022a0) at gstpad.c:5189
#35 0x00007ffff628eb95 in event_forward_func (pad=0x7fffcc007550 [GstDecodePad], data=0x7fffd71a05a0) at gstpad.c:2884
#36 0x00007ffff628e997 in gst_pad_forward (pad=0x7fffd8038d40 [GstProxyPad], forward=0x7ffff628ea6e <event_forward_func>, user_data=0x7fffd71a05a0)
at gstpad.c:2838
#37 0x00007ffff628ed49 in gst_pad_event_default (pad=0x7fffd8038d40 [GstProxyPad], parent=0x7fffcc007550 [GstDecodePad], event=0x7fffbc0022a0)
at gstpad.c:2935
#38 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffd8038d40 [GstProxyPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#39 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x8376b0 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#40 0x00007ffff6295e22 in gst_pad_push_event (pad=0x8376b0 [GstPad], event=0x7fffbc0022a0) at gstpad.c:5195
#41 0x00007ffff6cd2854 in gst_video_decoder_push_event (decoder=0x7fffcc12b5a0 [GstTheoraDec], event=0x7fffbc0022a0) at gstvideodecoder.c:934
#42 0x00007ffff6cd3f09 in gst_video_decoder_sink_event_default (decoder=0x7fffcc12b5a0 [GstTheoraDec], event=0x7fffbc0022a0) at gstvideodecoder.c:1374
#43 0x00007ffff6cd40f6 in gst_video_decoder_sink_event (pad=0x7fffc4131010 [GstPad], parent=0x7fffcc12b5a0 [GstTheoraDec], event=0x7fffbc0022a0)
at gstvideodecoder.c:1410
#44 0x00007ffff7bad778 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0x7fffd81319c0 [GstValidatePadMonitor], parent=0x7fffcc12b5a0 [GstTheoraDec], event=0x7fffbc0022a0, handler=0x7ffff6cd401b <gst_video_decoder_sink_event>) at gst-validate-pad-monitor.c:1788
#45 0x00007ffff7bafa1d in gst_validate_pad_monitor_sink_event_func (pad=0x7fffc4131010 [GstPad], parent=0x7fffcc12b5a0 [GstTheoraDec], event=0x7fffbc0022a0) at gst-validate-pad-monitor.c:2103
#46 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc4131010 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#47 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x837230 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#48 0x00007ffff6295e22 in gst_pad_push_event (pad=0x837230 [GstPad], event=0x7fffbc0022a0) at gstpad.c:5195
#49 0x00007fffeb2e61b6 in gst_multi_queue_sink_event (pad=0x7fffc4130950 [GstPad], parent=0x7fffcc137030 [GstMultiQueue], event=0x7fffbc0022a0)
at gstmultiqueue.c:1792
#50 0x00007ffff7bad778 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0x7fffd81317f0 [GstValidatePadMonitor], parent=0x7fffcc137030 [GstMultiQueue], event=0x7fffbc0022a0, handler=0x7fffeb2e6041 <gst_multi_queue_sink_event>) at gst-validate-pad-monitor.c:1788
---Type <return> to continue, or q <return> to quit---
#51 0x00007ffff7bafa1d in gst_validate_pad_monitor_sink_event_func (pad=0x7fffc4130950 [GstPad], parent=0x7fffcc137030 [GstMultiQueue], event=0x7fffbc0022a0) at gst-validate-pad-monitor.c:2103
#52 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc4130950 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#53 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffcc141e30 [GstOggPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#54 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffcc141e30 [GstOggPad], event=0x7fffbc0022a0) at gstpad.c:5195
#55 0x00007fffd75d7d65 in gst_ogg_demux_send_event (ogg=0x7fffcc11a7c0 [GstOggDemux], event=0x7fffbc0022a0) at gstoggdemux.c:4592
#56 0x00007fffd75ce1e3 in gst_ogg_demux_sink_event (pad=0x7fffc4108060 [GstPad], parent=0x7fffcc11a7c0 [GstOggDemux], event=0x7fffbc0022a0)
at gstoggdemux.c:2322
#57 0x00007ffff7bad778 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0x7fffcc170200 [GstValidatePadMonitor], parent=0x7fffcc11a7c0 [GstOggDemux], event=0x7fffbc0022a0, handler=0x7fffd75ce0ca <gst_ogg_demux_sink_event>) at gst-validate-pad-monitor.c:1788
#58 0x00007ffff7bafa1d in gst_validate_pad_monitor_sink_event_func (pad=0x7fffc4108060 [GstPad], parent=0x7fffcc11a7c0 [GstOggDemux], event=0x7fffbc0022a0)
at gst-validate-pad-monitor.c:2103
#59 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc4108060 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#60 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffcc10aff0 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#61 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffcc10aff0 [GstPad], event=0x7fffbc0022a0) at gstpad.c:5195
#62 0x00007fffeb3045ac in gst_type_find_element_sink_event (pad=0x7fffc40c0de0 [GstPad], parent=0x86b7b0 [GstTypeFindElement], event=0x7fffbc0022a0)
at gsttypefindelement.c:695
#63 0x00007ffff7bad778 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0x7fffd81310b0 [GstValidatePadMonitor], parent=0x86b7b0 [GstTypeFindElement], event=0x7fffbc0022a0, handler=0x7fffeb304174 <gst_type_find_element_sink_event>) at gst-validate-pad-monitor.c:1788
#64 0x00007ffff7bafa1d in gst_validate_pad_monitor_sink_event_func (pad=0x7fffc40c0de0 [GstPad], parent=0x86b7b0 [GstTypeFindElement], event=0x7fffbc0022a0) at gst-validate-pad-monitor.c:2103
#65 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc40c0de0 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#66 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffd8038650 [GstProxyPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#67 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffd8038650 [GstProxyPad], event=0x7fffbc0022a0) at gstpad.c:5195
#68 0x00007ffff628eb95 in event_forward_func (pad=0x7fffd8038650 [GstProxyPad], data=0x7fffd71a1750) at gstpad.c:2884
#69 0x00007ffff628e997 in gst_pad_forward (pad=0x7fffd8035170 [GstGhostPad], forward=0x7ffff628ea6e <event_forward_func>, user_data=0x7fffd71a1750)
at gstpad.c:2838
#70 0x00007ffff628ed49 in gst_pad_event_default (pad=0x7fffd8035170 [GstGhostPad], parent=0x7fffc4118770 [GstDecodeBin], event=0x7fffbc0022a0)
at gstpad.c:2935
#71 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffd8035170 [GstGhostPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#72 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffcc10ab70 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#73 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffcc10ab70 [GstPad], event=0x7fffbc0022a0) at gstpad.c:5195
#74 0x00007fffeb2f9c6a in gst_queue2_handle_sink_event (pad=0x7fffcc10a6f0 [GstPad], parent=0x7fffd808ec00 [GstQueue2], event=0x7fffbc0022a0)
at gstqueue2.c:2310
#75 0x00007ffff7bad778 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0x7fffd8131450 [GstValidatePadMonitor], parent=0x7fffd808ec00 [GstQueue2], event=0x7fffbc0022a0, handler=0x7fffeb2f9490 <gst_queue2_handle_sink_event>) at gst-validate-pad-monitor.c:1788
#76 0x00007ffff7bafa1d in gst_validate_pad_monitor_sink_event_func (pad=0x7fffcc10a6f0 [GstPad], parent=0x7fffd808ec00 [GstQueue2], event=0x7fffbc0022a0)
at gst-validate-pad-monitor.c:2103
#77 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffcc10a6f0 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#78 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffc4109920 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#79 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffc4109920 [GstPad], event=0x7fffbc0022a0) at gstpad.c:5195
#80 0x00007fffeb3045ac in gst_type_find_element_sink_event (pad=0x7fffc4130290 [GstPad], parent=0x86b030 [GstTypeFindElement], event=0x7fffbc0022a0)
at gsttypefindelement.c:695
#81 0x00007ffff7bad778 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0xb065f0 [GstValidatePadMonitor], parent=0x86b030 [GstTypeFindElement], event=0x7fffbc0022a0, handler=0x7fffeb304174 <gst_type_find_element_sink_event>) at gst-validate-pad-monitor.c:1788
#82 0x00007ffff7bafa1d in gst_validate_pad_monitor_sink_event_func (pad=0x7fffc4130290 [GstPad], parent=0x86b030 [GstTypeFindElement], event=0x7fffbc0022a0) at gst-validate-pad-monitor.c:2103
#83 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc4130290 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5388
#84 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffcc10bd70 [GstPad], event=0x7fffbc0022a0, type=320) at gstpad.c:5064
#85 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffcc10bd70 [GstPad], event=0x7fffbc0022a0) at gstpad.c:5195
#86 0x00007ffff658a28e in gst_base_src_perform_seek (src=0x86d8d0 [GstSoupHTTPSrc], event=0x7fffb0003980, unlock=1) at gstbasesrc.c:1681
#87 0x00007ffff658b218 in gst_base_src_default_event (src=0x86d8d0 [GstSoupHTTPSrc], event=0x7fffb0003980) at gstbasesrc.c:1990
#88 0x00007ffff658b393 in gst_base_src_event (pad=0x7fffcc10bd70 [GstPad], parent=0x86d8d0 [GstSoupHTTPSrc], event=0x7fffb0003980) at gstbasesrc.c:2042
#89 0x00007ffff7badc19 in gst_validate_pad_monitor_src_event_check (pad_monitor=0xb06420 [GstValidatePadMonitor], parent=0x86d8d0 [GstSoupHTTPSrc], event=0x7fffb0003980, handler=0x7ffff658b327 <gst_base_src_event>) at gst-validate-pad-monitor.c:1873
#90 0x00007ffff7bafd3b in gst_validate_pad_monitor_src_event_func (pad=0x7fffcc10bd70 [GstPad], parent=0x86d8d0 [GstSoupHTTPSrc], event=0x7fffb0003980)
at gst-validate-pad-monitor.c:2121
#91 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffcc10bd70 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5388
---Type <return> to continue, or q <return> to quit---
#92 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffc4130290 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5064
#93 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffc4130290 [GstPad], event=0x7fffb0003980) at gstpad.c:5195
#94 0x00007fffeb303be0 in gst_type_find_element_src_event (pad=0x7fffc4109920 [GstPad], parent=0x86b030 [GstTypeFindElement], event=0x7fffb0003980)
at gsttypefindelement.c:518
#95 0x00007ffff7badc19 in gst_validate_pad_monitor_src_event_check (pad_monitor=0x7fffc80a3760 [GstValidatePadMonitor], parent=0x86b030 [GstTypeFindElement], event=0x7fffb0003980, handler=0x7fffeb303b33 <gst_type_find_element_src_event>) at gst-validate-pad-monitor.c:1873
#96 0x00007ffff7bafd3b in gst_validate_pad_monitor_src_event_func (pad=0x7fffc4109920 [GstPad], parent=0x86b030 [GstTypeFindElement], event=0x7fffb0003980)
at gst-validate-pad-monitor.c:2121
#97 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffc4109920 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5388
#98 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffcc10a6f0 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5064
#99 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffcc10a6f0 [GstPad], event=0x7fffb0003980) at gstpad.c:5195
#100 0x00007fffeb2fc87c in gst_queue2_handle_src_event (pad=0x7fffcc10ab70 [GstPad], parent=0x7fffd808ec00 [GstQueue2], event=0x7fffb0003980)
at gstqueue2.c:2898
#101 0x00007ffff7badc19 in gst_validate_pad_monitor_src_event_check (pad_monitor=0x7fffd8131620 [GstValidatePadMonitor], parent=0x7fffd808ec00 [GstQueue2], event=0x7fffb0003980, handler=0x7fffeb2fc3d6 <gst_queue2_handle_src_event>) at gst-validate-pad-monitor.c:1873
#102 0x00007ffff7bafd3b in gst_validate_pad_monitor_src_event_func (pad=0x7fffcc10ab70 [GstPad], parent=0x7fffd808ec00 [GstQueue2], event=0x7fffb0003980)
at gst-validate-pad-monitor.c:2121
#103 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffcc10ab70 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5388
#104 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffd8035170 [GstGhostPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at #105 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffd8035170 [GstGhostPad], event=0x7fffb0003980) at gstpad.c:5195
#106 0x00007ffff628eb95 in event_forward_func (pad=0x7fffd8035170 [GstGhostPad], data=0x7fffd71a2990) at gstpad.c:2884
#107 0x00007ffff628e997 in gst_pad_forward (pad=0x7fffd8038650 [GstProxyPad], forward=0x7ffff628ea6e <event_forward_func>, user_data=0x7fffd71a2990)
at gstpad.c:2838
#108 0x00007ffff628ed49 in gst_pad_event_default (pad=0x7fffd8038650 [GstProxyPad], parent=0x7fffd8035170 [GstGhostPad], event=0x7fffb0003980)
at gstpad.c:2935
#109 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffd8038650 [GstProxyPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5388
#110 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffc40c0de0 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5064
#111 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffc40c0de0 [GstPad], event=0x7fffb0003980) at gstpad.c:5195
#112 0x00007fffeb303be0 in gst_type_find_element_src_event (pad=0x7fffcc10aff0 [GstPad], parent=0x86b7b0 [GstTypeFindElement], event=0x7fffb0003980)
at gsttypefindelement.c:518
#113 0x00007ffff7badc19 in gst_validate_pad_monitor_src_event_check (pad_monitor=0x7fffd8131280 [GstValidatePadMonitor], parent=0x86b7b0 [GstTypeFindElement], event=0x7fffb0003980, handler=0x7fffeb303b33 <gst_type_find_element_src_event>) at gst-validate-pad-monitor.c:1873
#114 0x00007ffff7bafd3b in gst_validate_pad_monitor_src_event_func (pad=0x7fffcc10aff0 [GstPad], parent=0x86b7b0 [GstTypeFindElement], event=0x7fffb0003980) at gst-validate-pad-monitor.c:2121
#115 0x00007ffff62967b5 in gst_pad_send_event_unchecked (pad=0x7fffcc10aff0 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5388
#116 0x00007ffff62957fe in gst_pad_push_event_unchecked (pad=0x7fffc4108060 [GstPad], event=0x7fffb0003980, type=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM)
at gstpad.c:5064
#117 0x00007ffff6295e22 in gst_pad_push_event (pad=0x7fffc4108060 [GstPad], event=0x7fffb0003980) at gstpad.c:5195
#118 0x00007fffd75d9027 in gst_ogg_demux_loop_push (ogg=0x7fffcc11a7c0 [GstOggDemux]) at gstoggdemux.c:4885
#119 0x00007ffff53da0a5 in g_thread_proxy (data=0x7fffcc11fc00) at gthread.c:764
#120 0x00007ffff67cb555 in start_thread (arg=0x7fffd71a3700) at pthread_create.c:333
#121 0x00007ffff50aaf3d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
gstpad.c:5064
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/680queue2: eos races against downstream error in push mode2021-09-24T11:08:25ZJonathan Matthewqueue2: eos races against downstream error in push modeI can reproduce this fairly reliably with gst-discoverer-1.0 and a jpeg file with 4 components, which jpegdec doesn't support, if the jpeg is accessed over sftp. The symptom is that gst-discoverer-1.0 times out. Attaching gdb to it sho...I can reproduce this fairly reliably with gst-discoverer-1.0 and a jpeg file with 4 components, which jpegdec doesn't support, if the jpeg is accessed over sftp. The symptom is that gst-discoverer-1.0 times out. Attaching gdb to it shows that the only threads running are queue2 and typefind tasks, which are both paused.
As far as I can tell, if queue2 in push mode gets eos from upstream before it gets the error from jpegdec, it handles it properly, creating an internal data flow error. If the error arrives first, that sets queue->srcresult and queue->sinkresult to GST_FLOW_ERROR ([here](plugins/elements/gstqueue2.c#L3203)), and doesn't emit the error ([here](plugins/elements/gstqueue2.c#L3237)). The code in gst_queue2_handle_sink_event() that would emit the error when the eos arrives actually doesn't get to run because queue->sinkresult is not GST_FLOW_OK, and that gets checked first ([here](plugins/elements/gstqueue2.c#L2677)) causing the event to be dropped.
I don't have any useful thoughts on how to fix this. I can provide a test image and some debug logs if that would help.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/293queue2: Handle buffering on sparse streams2022-10-20T05:57:40ZBugzilla Migration Userqueue2: Handle buffering on sparse streams## Submitted by Edward Hervey `@bilboed`
**[Link to original bug (#796295)](https://bugzilla.gnome.org/show_bug.cgi?id=796295)**
## Description
If an adaptive demuxer (or any other source) provides a sparse stream (subtitles or capt...## Submitted by Edward Hervey `@bilboed`
**[Link to original bug (#796295)](https://bugzilla.gnome.org/show_bug.cgi?id=796295)**
## Description
If an adaptive demuxer (or any other source) provides a sparse stream (subtitles or captions), queue2 goes nuts constantly going posting buffering messages from 0% to 100% and back.
If we have a SPARSE stream, we should just post 100% buffering.
And this assumes that upstream elements properly set the stream flags of course :)Edward HerveyEdward Herveyhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/208queue2: handle overwriting the current range correctly2021-09-24T11:09:57ZBugzilla Migration Userqueue2: handle overwriting the current range correctly## Submitted by Michael Olbrich `@mol`
**[Link to original bug (#774831)](https://bugzilla.gnome.org/show_bug.cgi?id=774831)**
## Description
Created attachment 340491
queue2: handle overwriting the current range correctly
Th...## Submitted by Michael Olbrich `@mol`
**[Link to original bug (#774831)](https://bugzilla.gnome.org/show_bug.cgi?id=774831)**
## Description
Created attachment 340491
queue2: handle overwriting the current range correctly
This basically reverts b3802f7a9e7988901367196dd3dc45cf4053d850 ("queue2:
fix crash deleting current region for small ring buffers") and fixes the
original problem correctly.
Ignoring the current range while checking which ranges must be truncated or
removed is incorrect. With just one range, it it possible, that the offset
of the current range must be adjusted because the corresponding data will
be overwritten.
To fix the original problem, the current range is never removed. Instead it
may be truncated to zero length before the new data is appended.
Note: The test-case from the original commit still works and my test-case (seeking backwards to a position in the current range that was overwritten but not removed from the range) works again. But I'm not 100% sure I got all possible corner cases, so someone with better understanding of queue2 should probably double check this.
**Patch 340491**, "queue2: handle overwriting the current range correctly":
[0001-queue2-handle-overwriting-the-current-range-correctl.patch](/uploads/bcd50b8ab4b3d7ae0fb906e0481bfa95/0001-queue2-handle-overwriting-the-current-range-correctl.patch)
### See also
* [Bug 767688](https://bugzilla.gnome.org/show_bug.cgi?id=767688)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/96queue2: incorrect current-level-time reported after seek (with packetized data)2018-11-05T08:29:36ZBugzilla Migration Userqueue2: incorrect current-level-time reported after seek (with packetized data)## Submitted by Aleksander Wabik
**[Link to original bug (#744587)](https://bugzilla.gnome.org/show_bug.cgi?id=744587)**
## Description
Created attachment 296913
The testcase
Steps to reproduce the bug:
1) Have a queue2 ...## Submitted by Aleksander Wabik
**[Link to original bug (#744587)](https://bugzilla.gnome.org/show_bug.cgi?id=744587)**
## Description
Created attachment 296913
The testcase
Steps to reproduce the bug:
1) Have a queue2 element,
2) Send SEGMENT (GST_FORMAT_TIME) event with non-zero start/position/time.
3) Start pushing buffers with PTSes starting at 0 to the queue.
Effects:
1) As soon the queue obtains buffers with valid in-segment PTS, it reports buffered time level correctly,
2) As soon the queue pushes first buffer with PTS < segment.start to the srcpad, the queue stops reporting buffered time level correctly, it reports 0 buffered.
This is caused by rewriting src_segment.position with buffer's PTS, and then gst_segment_to_running_time() returns GST_CLOCK_TIME_NONE.
At this point, if we have a very fast source element, and a very slow decoder, the decoder may block on the first frame (with PTS below segment start) for quite a long time (especially if it's a software decoder decoding 1080p HEVC or VP9 frame). In this time, the queue reports current-level-time == 0, and what's worse, if the queue has buffer & byte limits 0, and only the time limit set, fast source may push megabytes of data, tens of seconds of data, even though the limit may be 0.5 seconds. The queue will not block, as it thinks it's 0% filled.
Additional bug (fixed by the same fix): some streams have non-monotonic PTSes. Push buffer with PTS=1s, duration=1s, and then push buffer with PTS=0s, duration=1s. The queue has now 2 seconds of data buffered, but it will report only one second.
I am attaching the extended unit tests for queue2 element that demonstrate both these problems.
~~**Patch 296913**~~, "The testcase":
[patch1-queue2-testcase.patch](/uploads/45ddd0f507d0096b9ec0cbeea377265c/patch1-queue2-testcase.patch)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1554queue2: overwrite in ring-buffer modes2022-11-09T18:52:59ZEdward Herveyqueue2: overwrite in ring-buffer modesReproducible with `USE_PLAYBIN3=1 gst-validate-launcher -t validate.test.mp4.redirect.play_15s -f -F`
* There is `queue2` in ringbuffer mode *upstream* of `typefind ! qtdemux`
* Initially `typefind` pulls 4096 bytes from offset 0 from`q...Reproducible with `USE_PLAYBIN3=1 gst-validate-launcher -t validate.test.mp4.redirect.play_15s -f -F`
* There is `queue2` in ringbuffer mode *upstream* of `typefind ! qtdemux`
* Initially `typefind` pulls 4096 bytes from offset 0 from`queue2`
* Later `qtdemux` attempts to pull 16 bytes from offset 0 ... and does *not* get the data from offset 0 (it's from a later position)
Wasn't able to look to deep into it, but it seems as though the tracking of which offset is present in the ringbuffer is invalid when doing little pulls like that.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/66queue2: Process SEEKING query2022-11-10T09:20:44ZBugzilla Migration Userqueue2: Process SEEKING query## Submitted by Jan Alexander Steffens `@heftig`
**[Link to original bug (#733351)](https://bugzilla.gnome.org/show_bug.cgi?id=733351)**
## Description
Created attachment 281085
patch
In order to seek FLV streams, flvdemux cr...## Submitted by Jan Alexander Steffens `@heftig`
**[Link to original bug (#733351)](https://bugzilla.gnome.org/show_bug.cgi?id=733351)**
## Description
Created attachment 281085
patch
In order to seek FLV streams, flvdemux creates a seek index;
however, this index is not created if upstream is not seekable.
gst_flv_demux_check_seekability was copied nearly verbatim from
GstBaseParse.
This commit adds QUERY_SEEKING handling to queue2, so RTMP live
streams become seekable when a queue2 in download or ringbuffer
mode is inserted:
rtmpsrc ! queue2 ! flvdemux
Alternatively, flvdemux could be altered to not require
seekability. I am unsure what is the best approach.
~~**Patch 281085**~~, "patch":
[0001-queue2-Process-SEEKING-query.patch](/uploads/df33bc06c04b65b6738288e18ea70f7c/0001-queue2-Process-SEEKING-query.patch)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/566queue2 responds to upstream reconfigure event with a downstream query2020-06-05T10:58:52ZJan Schmidtqueue2 responds to upstream reconfigure event with a downstream queryQueue2 does a downstream bitrate query in response to receiving a reconfigure event, which has a high chance of deadlocking. It should set a flag and defer the query to the streaming thread.Queue2 does a downstream bitrate query in response to receiving a reconfigure event, which has a high chance of deadlocking. It should set a flag and defer the query to the streaming thread.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/681queue2: Stream keeps buffering even with stable network connection2022-10-20T06:03:16ZHäcker Felixqueue2: Stream keeps buffering even with stable network connection(Coming from https://gitlab.gnome.org/World/Shortwave/-/issues/528)
I was able to reproduce the issue in a isolated toolbox `fedora-toolbox-34` image.
```
⬢[haecker-felix@toolbox ~]$ gst-play-1.0 http://s2-webradio.antenne.de/antenne
...(Coming from https://gitlab.gnome.org/World/Shortwave/-/issues/528)
I was able to reproduce the issue in a isolated toolbox `fedora-toolbox-34` image.
```
⬢[haecker-felix@toolbox ~]$ gst-play-1.0 http://s2-webradio.antenne.de/antenne
Press 'k' to see a list of keyboard shortcuts.
Now playing http://s2-webradio.antenne.de/antenne
Prerolling...
Redistribute latency...
Prerolled... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
Buffering... 100%
```
Same stream, but `GST_DEBUG=4` enabled: [log.txt](/uploads/c30639db0fa5dc8b94b33f490f366ccf/log.txt)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/629queue2 thinks it's restricting scheduling modes, but actually it isn't2020-11-04T09:27:08ZJonathan Matthewqueue2 thinks it's restricting scheduling modes, but actually it isn'tWhen not using a temporary file, queue2 tries to prevent pull mode scheduling (see [gst_queue2_handle_src_query](plugins/elements/gstqueue2.c#L3499), but this has no effect as it has no way to remove the scheduling modes already set on t...When not using a temporary file, queue2 tries to prevent pull mode scheduling (see [gst_queue2_handle_src_query](plugins/elements/gstqueue2.c#L3499), but this has no effect as it has no way to remove the scheduling modes already set on the query. Most uses of gst_query_set_scheduling() act as if it removes scheduling modes from the query, but the one in souphttpsrc doesn't.
To back up a bit, playbin uri=sftp://.../file.mp3 doesn't work with gstreamer 1.18 (since commit b87f8307) as giosrc will do push or pull mode, and uridecodebin decides it needs a queue2 since the uri matches its list of stream prefixes. The pipeline tries to activate in pull mode and ends up with these errors:
(gst-launch-1.0:191372): GStreamer-CRITICAL **: 14:12:21.412: pushing on pad typefind:src but it was not activated in push mode
(gst-launch-1.0:191372): GStreamer-WARNING **: 14:12:21.412:
Trying to join task 0x55f86e3e9170 from its thread would deadlock.
You cannot change the state of an element from its streaming
thread. Use g_idle_add() or post a GstMessage on the bus to
schedule the state change from the main thread.
and then sometimes issues some misleading messages about missing plugins.
You don't need sftp to see this, you can just do filesrc ! queue2 ! decodebin ! fakesink (which fails) and then replace filesrc with pushfilesrc to see it work properly.
I'm really not sure how to fix this properly, but adding gst_structure_remove_field (structure, "modes"); in [gst_query_set_scheduling](gst/gstquery.c#L2162) works.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/12queue: add burst/batch feature to reduce writer wakeups and context switches2024-01-10T10:54:55ZBugzilla Migration Userqueue: add burst/batch feature to reduce writer wakeups and context switches## Submitted by Venkat
**[Link to original bug (#613827)](https://bugzilla.gnome.org/show_bug.cgi?id=613827)**
## Description
When I use max-size-buffers and min-threshold-buffers values as parameters to QUEUE in gstreamer pipe line...## Submitted by Venkat
**[Link to original bug (#613827)](https://bugzilla.gnome.org/show_bug.cgi?id=613827)**
## Description
When I use max-size-buffers and min-threshold-buffers values as parameters to QUEUE in gstreamer pipe line, Its not waiting it is not waiting until it reach min-threshold-buffers. Currently queue fills the buffer as the buffer empty. It is not able to perform the requirement of waiting until it all buffers empty.
The changes needed found in gstqueue.c at gstreamer/plugins/elements/
function:gst_queue_chain (GstPad * pad, GstBuffer * buffer)
/* don't leak. Instead, wait for space to be available */
do {
/* for as long as the queue is filled, ait until min-threshold-buffers reaches. */
GST_QUEUE_WAIT_DEL_CHECK (queue, out_flushing);
} while (!gst_queue_is_empty(queue));
and
Need changes in gst_queue_is_empty function to satisfy all the conditions. I am not sure all the conditions (need some evaluation in this)
static gboolean gst_queue_is_empty (GstQueue * queue)
{
if (queue->queue->length == 0)
return TRUE;
if ((queue->cur_level.buffers == 0) || (queue->cur_level.bytes == 0) || (queue->cur_level.time == 0) )
return TRUE;
if (( queue->min_threshold.buffers == 0 &&
queue->cur_level.buffers `< queue->`max_size.buffers) ||
(queue->min_threshold.bytes == 0 &&
queue->cur_level.bytes `< queue->`max_size.bytes) ||
(queue->min_threshold.time == 0 &&
queue->cur_level.time `< queue->`max_size.time)) &&
!gst_queue_is_filled (queue)
return TRUE;
/* It is possible that a max size is reached before all min thresholds are.
* Therefore, only consider it empty if it is not filled. */
return ((queue->min_threshold.buffers > 0 &&
queue->cur_level.buffers `< queue->`min_threshold.buffers) ||
(queue->min_threshold.bytes > 0 &&
queue->cur_level.bytes `< queue->`min_threshold.bytes) ||
(queue->min_threshold.time > 0 &&
queue->cur_level.time `< queue->`min_threshold.time)) &&
!gst_queue_is_filled (queue);
}https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/101queue: Add property to allow pushing all queued buffers together2021-09-24T11:10:58ZBugzilla Migration Userqueue: Add property to allow pushing all queued buffers together## Submitted by Jose Antonio Santos Cadenas
**[Link to original bug (#746524)](https://bugzilla.gnome.org/show_bug.cgi?id=746524)**
## Description
Created attachment 299946
queue: Add property to allow pushing all queued buffers t...## Submitted by Jose Antonio Santos Cadenas
**[Link to original bug (#746524)](https://bugzilla.gnome.org/show_bug.cgi?id=746524)**
## Description
Created attachment 299946
queue: Add property to allow pushing all queued buffers together
Attached patch adds a property that allows queue to send a buffer list with all the
queued buffers currently in the queue. If there are other kind of data in the queue order is preserved I mean, buffer list only contains buffers up to an event or a query.
~~**Patch 299946**~~, "queue: Add property to allow pushing all queued buffers together":
[0001-queue-Add-property-to-allow-pushing-all-queued-buffe.patch](/uploads/61fe2cbbf12d2ecaa921030735cfa91e/0001-queue-Add-property-to-allow-pushing-all-queued-buffe.patch)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/563queue blocks on flush-start2022-11-10T09:21:04ZJan Schmidtqueue blocks on flush-startI have a scenario with a dynamic pipeline, where I want to wake up a portion of a pipeline and disconnect it. To make that quicker, I push a flush-start event and catch it in a pad probe on the srcpad of a queue and drop it. The goal is ...I have a scenario with a dynamic pipeline, where I want to wake up a portion of a pipeline and disconnect it. To make that quicker, I push a flush-start event and catch it in a pad probe on the srcpad of a queue and drop it. The goal is to make everything upstream of that queue wake up, without disturbing the downstream portion.
The sinkpad handler for queue reacts to a flush-start event by forwarding (good) and then trying to stop the src pad task (bad). That means that when the flush-start event is dropped in the srcpad handler, the thread sending the event gets blocked indefinitely in the sink pad.
I need to think about this more, but filing this issue so I don't forget. I don't think it's as simple as saying that the queue should not wait on the srcpad task in this situation.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2703`Queued GOP time is negative` error in splitmuxsink for rtspsrc2024-02-07T10:31:34ZZiad Hatahet`Queued GOP time is negative` error in splitmuxsink for rtspsrcWe're hitting this error when running a GStreamer pipeline to capture HLS video segments:
```
ERROR: from element /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink: Timestamping error on input streams
Additional debug info:
../gst/mul...We're hitting this error when running a GStreamer pipeline to capture HLS video segments:
```
ERROR: from element /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink: Timestamping error on input streams
Additional debug info:
../gst/multifile/gstsplitmuxsink.c(2594): handle_gathered_gop (): /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink:
Queued GOP time is negative -0:00:00.035816292
Execution ended after 0:22:00.008870101
```
The pipeline that produced this error is
```
$ gst-launch-1.0 rtspsrc location=rtsp://$USER:$PASSWORD@$IP is-live=true protocols=tcp \
! rtph264depay wait-for-keyframe=true request-keyframe=true \
! h264parse \
! splitmuxsink name=splitmuxsink max-size-time=10000000000 send-keyframe-requests=true muxer=mpegtsmux location=segment%05d.ts
```
There should not be any errors when running the pipeline. I tried setting `config-interval=-1` on the `h264parse` node, but the issue persists.https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/1017`Queued GOP time is negative` error in splitmuxsink for rtspsrc2023-06-23T09:12:42ZZiad Hatahet`Queued GOP time is negative` error in splitmuxsink for rtspsrcWe're hitting this error when running a GStreamer pipeline to capture HLS video segments:
```
ERROR: from element /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink: Timestamping error on input streams
Additional debug info:
../gst/mul...We're hitting this error when running a GStreamer pipeline to capture HLS video segments:
```
ERROR: from element /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink: Timestamping error on input streams
Additional debug info:
../gst/multifile/gstsplitmuxsink.c(2594): handle_gathered_gop (): /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink:
Queued GOP time is negative -0:00:00.035816292
Execution ended after 0:22:00.008870101
```
The pipeline that produced this error is
```
$ gst-launch-1.0 rtspsrc location=rtsp://$USER:$PASSWORD@$IP is-live=true protocols=tcp \
! rtph264depay wait-for-keyframe=true request-keyframe=true \
! h264parse \
! splitmuxsink name=splitmuxsink max-size-time=10000000000 send-keyframe-requests=true muxer=mpegtsmux location=segment%05d.mp4
```
There should not be any errors when running the pipeline. I tried setting `config-interval=-1` on the `h264parse` node, but the issue persists.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/199queue: Fix race when calculating cur_level.time2021-09-24T11:10:00ZBugzilla Migration Userqueue: Fix race when calculating cur_level.time## Submitted by Stian Selnes `@stianse`
**[Link to original bug (#773096)](https://bugzilla.gnome.org/show_bug.cgi?id=773096)**
## Description
On the first buffer, it's possible that sink_segment is set but
src_segment has not bee...## Submitted by Stian Selnes `@stianse`
**[Link to original bug (#773096)](https://bugzilla.gnome.org/show_bug.cgi?id=773096)**
## Description
On the first buffer, it's possible that sink_segment is set but
src_segment has not been set yet. If this is the case, we should not
calculate cur_level.time since sink_segment.position may be large and
src_segment.position default is 0, with the resulting diff being larger
than max-size-time, causing the queue to start leaking (if
leaky=downstream).
One potential consequence of this is that the segment event may be
stored on the srcpad before the caps event is pushed downstream, causing
a g_warning ("Sticky event misordering, got 'segment' before 'caps'").