GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2022-09-04T18:32:10Zhttps://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/400ci: Check that the autogenerated code matches the versions of code generator,...2022-09-04T18:32:10ZSebastian Drögeci: Check that the autogenerated code matches the versions of code generator, Gir.tomls and .gir filesShould probably be a separate job and just needs to run `./generator.py` and then `git diff` to check if there are any changes. gtk-rs also does this.Should probably be a separate job and just needs to run `./generator.py` and then `git diff` to check if there are any changes. gtk-rs also does this.https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/976playbin3: usage of "Decoder-Sinks" (hardware decoder)2022-08-31T09:05:43ZJuergen Sachsplaybin3: usage of "Decoder-Sinks" (hardware decoder)When using _playbin3_ instead of _playbin_ the pipeline with "decoding" sink
elements no longer setup properly. This works perfectly with playbin.
I get an error message like:
```
Missing element: H.264 (High Profile) decoder
ERROR: fr...When using _playbin3_ instead of _playbin_ the pipeline with "decoding" sink
elements no longer setup properly. This works perfectly with playbin.
I get an error message like:
```
Missing element: H.264 (High Profile) decoder
ERROR: from element /GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0: Your GStreamer installation is missing a plug-in.
Additional debug info:
../../../../../../Media/GST-1.0/gstreamer/subprojects/gst-plugins-base/gst/playback/gstparsebin.c(3494): gst_parse_bin_expose (): /GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0:
no suitable plugins found:
Missing parser: H.264 (High Profile) (video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)3.2, profile=(string)high, codec_data=(buffer)01640020ffe1001e67640020acd9405005bb016e04040b4a000003000200000300c81e30632c01000668ebe3cb22c0, width=(int)1280, height=(int)720, framerate=(fraction)50/1, pixel-aspect-ratio=(fraction)1/1, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, colorimetry=(string)1:4:0:0, parsed=(boolean)true)
```
#### Background
We are using GStreamer on a SOC with integrated hardware decoders for audio and
video. This decoders are fed directly with "video/x-h264..." or "audio/mpeg..."
(and other "encoded" media formats).
So we have created sink elements with respective sink caps. The elements
are classified as "Sink/Video/Hardware" rsp. "Sink/Audio/Hardware". Obviously
"playbin3" is looking for "Decoders" for this stream caps that are not found
(We have removed the SW decoders for all caps that are supported by our hardware
from the GStreamer packages)
I also have tried to classify my Sinks as "Decoder". In this case they are built
in the pipeline (in decodebin3), but the pipeline remains paused. And there are
an unused pipes from decodebin3 (see attachment)
#### Expectation
* Can you help to understand whether this is a playbin3 issue or a problem with
our "Decoder-Sink" Elements?
* What needs to be changed in the sink to get working with playbin3
#### How to reproduce
To reproduce the problem I have attached sources for a simple "Decoder-Sink"
Element that provides `video/x-h264` capabilities on its sink pad.
Tested on GStreamer Release 1.20.3
- create local branch at 1.20.3
- apply the attached patch
- build gstreamer with (disable default h264 decoders):
```
meson -Dlibav=disabled -Dgst-plugins-bad:openh264=disabled -Dtest=enabled build
ninja -C build
```
- Enter devenv (`ninja -C build/ devenv`)
- Some test commands:
```
gstreamer/build$ export GST_DEBUG=h264sink:6,playbin*:3
gstreamer/build$ gst-inspect-1.0 h264sink
gstreamer/build$ gst-launch-1.0 playbin uri=http://192.168.0.252/media/h264sink/1280x720-h264.mp4
gstreamer/build$ gst-launch-1.0 playbin3 uri=http://192.168.0.252/media/h264sink/1280x720-h264.mp4
```
attached:
* patchfile: [0001-added-subproject-gst-test-with-h264sink.patch.tar.gz](/uploads/bbe52e4543e24991a31606fa7d199dc2/0001-added-subproject-gst-test-with-h264sink.patch.tar.gz)
* logfile and pipeline for both cases: [results.zip](/uploads/0e9d2d621b32f814b57942a4bffbc35d/results.zip)
* sample media: [1280x720-h264.mp4](/uploads/5af58aeb8d73ac17355e69141dc30915/1280x720-h264.mp4)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1410Memory leak of videoscale & videoconvert2023-06-01T17:05:40Zdandre430Memory leak of videoscale & videoconvertHi, the speed of memory increase is about 40MB per hour,when i use these two pipeline in my app to transfer video by rtmp:
```
···
GstElement *pipeline0 = gst_parse_launch("v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=(...Hi, the speed of memory increase is about 40MB per hour,when i use these two pipeline in my app to transfer video by rtmp:
```
···
GstElement *pipeline0 = gst_parse_launch("v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=(string)YUY2,width=1280,height=720 ! videoscale! video/x-raw,width=640,height=360,framerate=(fraction)25/1 ! videoconvert ! v4l2h264enc output-io-mode=dmabuf ! rtph264pay ! udpsink port=26369 buffer-size=5000000
", NULL);
GstElement *pipeline1 = gst_parse_launch("udpsrc address=localhost buffer-size=5000000 port=26369 ! application/x-rtp,encoding-name=H264 ! rtph264depay ! flvmux streamable=true ! rtmpsink location=rtmp://192.168.1.100:6012/livertmp", NULL);
···
```
I think the reason of memory increasing is videoscale&videoconvert because i have done some test. For example, the memory will be very stable when i remove videoscale and videoconvert, using “queue” to connect v4l2src and v4l2h264enc, and "h264parse" to connect v4l2h264enc and rtph264pay. Like this:
```
GstElement *pipeline0 = gst_parse_launch("v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=(string)YUY2,width=1280,height=720 ! queue ! v4l2h264enc output-io-mode=dmabuf ! h264parse ! rtph264pay ! udpsink port=26369 buffer-size=5000000", NULL);
```
Can it proves that the reason for memory growth is the using of videoscale&videoconvert in the pipeline? What can i do to fix this?https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/975Memory leak of videoscale & videoconvert2022-08-31T08:21:51Zdandre430Memory leak of videoscale & videoconvertHi, the speed of memory increase is about 40MB per hour,when i use these two pipeline in my app to transfer video by rtmp:
```
···
GstElement *pipeline0 = gst_parse_launch("v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=(...Hi, the speed of memory increase is about 40MB per hour,when i use these two pipeline in my app to transfer video by rtmp:
```
···
GstElement *pipeline0 = gst_parse_launch("v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=(string)YUY2,width=1280,height=720 ! videoscale! video/x-raw,width=640,height=360,framerate=(fraction)25/1 ! videoconvert ! v4l2h264enc output-io-mode=dmabuf ! rtph264pay ! udpsink port=26369 buffer-size=5000000
", NULL);
GstElement *pipeline1 = gst_parse_launch("udpsrc address=localhost buffer-size=5000000 port=26369 ! application/x-rtp,encoding-name=H264 ! rtph264depay ! flvmux streamable=true ! rtmpsink location=rtmp://192.168.1.100:6012/livertmp", NULL);
···
```
I think the reason of memory increasing is videoscale&videoconvert because i have done some test. For example, the memory will be very stable when i remove videoscale and videoconvert, using “queue” to connect v4l2src and v4l2h264enc, and "h264parse" to connect v4l2h264enc and rtph264pay. Like this:
```
GstElement *pipeline0 = gst_parse_launch("v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=(string)YUY2,width=1280,height=720 ! queue ! v4l2h264enc output-io-mode=dmabuf ! h264parse ! rtph264pay ! udpsink port=26369 buffer-size=5000000", NULL);
```
Can it proves that the reason for memory growth is the using of videoscale&videoconvert in the pipeline? What can i do to fix this?https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/399Unexpected behaviour with Newtype and gst::pipeline2022-09-12T19:47:56Zeden-parallelUnexpected behaviour with Newtype and gst::pipelineHello.
I am having issues creating a newtype with a gst::pipeline and could really use some insight as to what is happening.
I have a video saving pipeline that I set to NULL in one callback that later is set back to PLAYING through an...Hello.
I am having issues creating a newtype with a gst::pipeline and could really use some insight as to what is happening.
I have a video saving pipeline that I set to NULL in one callback that later is set back to PLAYING through another callback. This works fine when setting the state directly using gst::pipeline. However, I would like to create a newtype for gst::pipeline that limits the functionality to prevent possible memory leaks. I create a struct that wraps the pipeline as below:
```
/// Wrapper around the pipeline to prevent an accidental memory leak
#[derive(Debug)]
#[repr(transparent)]
pub struct Pipeline(
/// The gstreamer pipeline.
gst::Pipeline,
);
```
and change the state of the pipeline like this:
```
impl Pipeline {
...
pub fn set_state(&self, state: gst::State) -> Result<gst::StateChangeSuccess> {
Ok(self.0.set_state(state)?)
}
```
I am getting errors when trying Stop and Start the pipeline dynamically. Specifically, these are only present when restarting the pipeline using my Pipeline newtype:
```
0:00:07.894205774 10264 0x5585c48de0 WARN GST_PADS gstpad.c:4351:gst_pad_peer_query:<sink_pipeline_interpipesrc:src> could not send sticky events
(minimal:10264): GStreamer-CRITICAL **: 23:20:11.461: gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
0:00:07.903435749 10264 0x5584cb2d30 ERROR GST_BUS gstbus.c:1075:gst_bus_remove_watch:<bus4> no bus watch was present
```
Is this a ref count issue or some undefined behavior with the wrapper?
Here is my attempt at a minimal example, `omxvideoenc` gives some warnings but it seems to work well enough to get the point across:[minimal.zip](/uploads/1a51e733761bc12bf7489b7fa3253252/minimal.zip)https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/974audioconvert mix-matrix mixing issue2022-08-29T10:28:58ZÁdám Balázsaudioconvert mix-matrix mixing issueI expected audioconvert with a mix-matrix and audiomixmatrix to be replaceable.
The following pipeline plays a single channel audio on one of my speakers:
`gst-launch-1.0 audiotestsrc ! capsfilter caps=audio/x-raw,format=S16LE,rate=160...I expected audioconvert with a mix-matrix and audiomixmatrix to be replaceable.
The following pipeline plays a single channel audio on one of my speakers:
`gst-launch-1.0 audiotestsrc ! capsfilter caps=audio/x-raw,format=S16LE,rate=16000,channels=1,layout=interleaved ! audiomixmatrix in-channels=1 out-channels=2 channel-mask=3 matrix="<<0.0>,<1.0>>" ! alsasink`
If I try to replace audiomixmatrix with an audioconvert the audio is played on both of my speakers:
`gst-launch-1.0 audiotestsrc ! capsfilter caps=audio/x-raw,format=S16LE,rate=16000,channels=1,layout=interleaved ! audioconvert mix-matrix="<<0.0>,<1.0>>" ! alsasink`
Do I misuse the audioconvert component or it is a bug?https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1406nvh264enc: closed caption data is lost2023-02-19T22:50:34Zsemih4dsightnvh264enc: closed caption data is lostI have a ts file with closed caption(cea708) data. When I decode and encode this file with x264enc, the closed caption data is fine, but when I do this with nvh264enc, the closed caption data is lost. How do I encode with nvh6264enc with...I have a ts file with closed caption(cea708) data. When I decode and encode this file with x264enc, the closed caption data is fine, but when I do this with nvh264enc, the closed caption data is lost. How do I encode with nvh6264enc without losing the closed caption data?
```
gst-launch-1.0 -v filesrc location=sample2.ts ! tsdemux name=demux \
demux. \
! queue name=q_video ! h264parse ! nvh264dec ! ccextractor name=ce ! videoconvert n-threads=5 ! video/x-raw,format=I420 \
! queue ! cccombiner name=ccc ! nvh264enc b-adapt=true \
! queue ! mpegtsmux name=mux ! tsparse ! srtsink uri=srt://localhost:3003?streamid=input/live/semih ce.caption ! queue ! ccc.caption \
demux. \
! queue ! aacparse ! queue ! mux.
```
**Result:** Srt stream has not CC data
```
gst-launch-1.0 -v filesrc location=sample2.ts ! tsdemux name=demux \
demux. \
! queue name=q_video ! h264parse ! nvh264dec ! ccextractor name=ce ! videoconvert n-threads=5 ! video/x-raw,format=I420 \
! queue ! cccombiner name=ccc ! x264enc b-adapt=true \
! queue ! mpegtsmux name=mux ! tsparse ! srtsink uri=srt://localhost:3003?streamid=input/live/semih ce.caption ! queue ! ccc.caption \
demux. \
! queue ! aacparse ! queue ! mux.
```
**Result:** Srt stream has CC data
```
gst-launch-1.0 -v filesrc location=sample2.ts ! tsdemux name=demux \
demux. \
! queue name=q_video ! h264parse ! nvh264dec ! videoconvert n-threads=5 ! video/x-raw,format=I420 \
! queue ! x264enc b-adapt=true \
! queue ! mpegtsmux name=mux ! tsparse ! srtsink uri=srt://localhost:3003?streamid=input/live/semih \
demux. \
! queue ! aacparse ! queue ! mux.
```
**Result:** Srt stream has CC datahttps://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1730nvh264enc: closed caption data is lost2022-08-26T08:09:11Zsemih4dsightnvh264enc: closed caption data is lostI have a ts file with closed caption(cea708) data. When I decode and encode this file with x264enc, the closed caption data is fine, but when I do this with nvh264enc, the closed caption data is lost. How do I encode with nvh6264enc with...I have a ts file with closed caption(cea708) data. When I decode and encode this file with x264enc, the closed caption data is fine, but when I do this with nvh264enc, the closed caption data is lost. How do I encode with nvh6264enc without losing the closed caption data?
```
gst-launch-1.0 -v filesrc location=sample2.ts ! tsdemux name=demux \
demux. \
! queue name=q_video ! h264parse ! nvh264dec ! ccextractor name=ce ! videoconvert n-threads=5 ! video/x-raw,format=I420 \
! queue ! cccombiner name=ccc ! nvh264enc b-adapt=true \
! queue ! mpegtsmux name=mux ! tsparse ! srtsink uri=srt://localhost:3003?streamid=input/live/semih ce.caption ! queue ! ccc.caption \
demux. \
! queue ! aacparse ! queue ! mux.
```
**Result:** Srt stream has not CC data
```
gst-launch-1.0 -v filesrc location=sample2.ts ! tsdemux name=demux \
demux. \
! queue name=q_video ! h264parse ! nvh264dec ! ccextractor name=ce ! videoconvert n-threads=5 ! video/x-raw,format=I420 \
! queue ! cccombiner name=ccc ! x264enc b-adapt=true \
! queue ! mpegtsmux name=mux ! tsparse ! srtsink uri=srt://localhost:3003?streamid=input/live/semih ce.caption ! queue ! ccc.caption \
demux. \
! queue ! aacparse ! queue ! mux.
```
**Result:** Srt stream has CC data
```
gst-launch-1.0 -v filesrc location=sample2.ts ! tsdemux name=demux \
demux. \
! queue name=q_video ! h264parse ! nvh264dec ! videoconvert n-threads=5 ! video/x-raw,format=I420 \
! queue ! x264enc b-adapt=true \
! queue ! mpegtsmux name=mux ! tsparse ! srtsink uri=srt://localhost:3003?streamid=input/live/semih \
demux. \
! queue ! aacparse ! queue ! mux.
```
**Result:** Srt stream has CC datahttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1405Wrong start time using rtsp url in Gstreamer pipeline2022-08-26T10:56:50Zsdsds kkmkmWrong start time using rtsp url in Gstreamer pipelineHi, when I try to playback a video from nvr using " gst-launch-1.0 rtspsrc location="rtsp://192.168.x.xxx:8600/ uuid=192.168.x.xxx&startTime=20220824020000000&endTime=20220824080000000" ! decodebin ! autovideosink ", starts at a later ti...Hi, when I try to playback a video from nvr using " gst-launch-1.0 rtspsrc location="rtsp://192.168.x.xxx:8600/ uuid=192.168.x.xxx&startTime=20220824020000000&endTime=20220824080000000" ! decodebin ! autovideosink ", starts at a later time than I want. It I start it from 00:00:00 it starts correctly, but when start time is not 00:00, it starts later in direct proportion to the start time. Do you have any suggestions?https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1401nvh265sldec : flow error raised when starting a network streaming2023-02-21T14:39:56ZChristophe LAFOLETnvh265sldec : flow error raised when starting a network streamingConfiguration :
- Linux + gstreamer 1.20.3
- start a server with an H265 stream (nvh265enc) with periodic IDR
- start a client : xxx ! rtpjitterbuffer ! rtph265depay ! h265parse ! queue ! nvh265sldec ! glimagesink sync=false
nvh265slde...Configuration :
- Linux + gstreamer 1.20.3
- start a server with an H265 stream (nvh265enc) with periodic IDR
- start a client : xxx ! rtpjitterbuffer ! rtph265depay ! h265parse ! queue ! nvh265sldec ! glimagesink sync=false
nvh265sldec start to decode immediately but each HEVC frame (except IDR) have a reference on the previous picture.
The previous picture is unknown (because sent before the connection) => error raised and get some message like: "No short term reference picture for xxx".
After 10 errors, a FLOW error is raised : the process is stopped.
If the receiver is launched before the transmitter, the fault does not occur.
I make a successfull test with nvh265sldec configured with max-errors=60 to wait the next IDR frame
[log file](/uploads/650c2f5f5b27d94877376a488d603f67/traces.txt)
nvh265sldec should wait an IDR frame before to start decodinghttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1399python: Can't set RTSPContext properties (like the current token)2022-09-13T08:37:13ZChris Wigginspython: Can't set RTSPContext properties (like the current token)When trying to implement custom authentication on `gst-rtsp-server` from Python, it is not possible to set the token property in the RTSPContext. I believe this is because Python has no access to properly set properties on the `GstRTSPCo...When trying to implement custom authentication on `gst-rtsp-server` from Python, it is not possible to set the token property in the RTSPContext. I believe this is because Python has no access to properly set properties on the `GstRTSPContext` struct.
The error output is:
```python
Traceback (most recent call last):
File "test-auth.py", line 27, in do_authenticate
context.token = self.get_default_token()
RuntimeError: unable to set value for field
```
I could work around this by overriding the check method too, but I'd rather use GStreamer's built in default check.
Sample code (fails assigning the default token):
```python
#!/usr/bin/env python
import gi
gi.require_version('Gst', '1.0')
gi.require_version('GstRtspServer', '1.0')
from gi.repository import Gst, GstRtspServer, GstRtsp, GLib
loop = GLib.MainLoop()
Gst.init(None)
class MyAuth(GstRtspServer.RTSPAuth):
def __init__(self):
GstRtspServer.RTSPAuth.__init__(self)
anonymous = GstRtspServer.RTSPToken()
anonymous.set_string(GstRtspServer.RTSP_TOKEN_MEDIA_FACTORY_ROLE, "anonymous")
self.set_default_token(anonymous)
def get_supported_methods(self):
return GstRtsp.RTSPAuthMethod.BASIC
def do_authenticate(self, context):
# Fails to assign
context.token = self.get_default_token()
return True
class MyFactory(GstRtspServer.RTSPMediaFactory):
def __init__(self):
GstRtspServer.RTSPMediaFactory.__init__(self)
def do_create_element(self, url):
input_str = "videotestsrc is-live=true ! x264enc"
pipeline_str = " {input_str} ! rtph264pay name=pay0 pt=96".format(**locals())
print(pipeline_str)
return Gst.parse_launch(pipeline_str)
class GstServer():
def __init__(self):
self.server = GstRtspServer.RTSPServer()
self.auth = MyAuth()
self.server.set_auth(self.auth)
f = MyFactory()
f.set_shared(True)
m = self.server.get_mount_points()
m.add_factory("/test", f)
self.server.attach(None)
print(self.server.get_bound_port())
if __name__ == '__main__':
s = GstServer()
loop.run()
```
The PyGI say the property is r/w, so to enable this do we need to build an override into gst-python or perhaps add a method to `rtsp-context.c` to enable setting the property?https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/397gettingsrc->h != 0 error2022-09-15T11:43:29ZManoj Prasadgettingsrc->h != 0 errorI was trying to pipe udpsink data from above code into gst-launch and I’m gettingsrc->h != 0’ failed error.
Command executed in terminal as below. while gst-meet running in another terminal.
`gst-launch-1.0 -e -v udpsrc port=5000 ! vp9...I was trying to pipe udpsink data from above code into gst-launch and I’m gettingsrc->h != 0’ failed error.
Command executed in terminal as below. while gst-meet running in another terminal.
`gst-launch-1.0 -e -v udpsrc port=5000 ! vp9dec ! queue ! videoscale ! capsfilter caps='video/x-raw, width=1280, height=720' ! videoconvert ! autovideosink`
Error
`(gst-launch-1.0:48893): GStreamer-Video-CRITICAL **: 21:09:21.824: gst_video_center_rect: assertion 'src->h != 0' failed
(gst-launch-1.0:48893): GStreamer-Video-CRITICAL **: 21:09:21.824: gst_video_center_rect: assertion 'src->h != 0' failed
`
Any idea how to resolve this issue?https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/991unable to live stream using srt, facing "Unsupported timestamp reference cloc...2023-10-12T15:57:39ZAbhinav Gorleunable to live stream using srt, facing "Unsupported timestamp reference clock" issue
I am trying to stream video using srt protocol, streaming source is rtsp client.
```gst-launch-1.0 --gst-debug=3 rtspsrc location="rtsp://admin:admin@localhost/live.sdp" short-header=TRUE name=demux demux. ! rtph265depay ! queue ! vid...
I am trying to stream video using srt protocol, streaming source is rtsp client.
```gst-launch-1.0 --gst-debug=3 rtspsrc location="rtsp://admin:admin@localhost/live.sdp" short-header=TRUE name=demux demux. ! rtph265depay ! queue ! video/x-h265 ! mpegtsmux name=mux1 ! srtsink uri=srt://:8888 demux. ! queue ! rtpmp4adepay ! aacparse ! mux1.```
when I am trying to run above pipeline, getting FIXME logs and not able see stream on vlc player.
Logs:
```
0:00:00.285731958 2338 0x7f600338f0 FIXME default gstutils.c:3981:gst_pad_create_stream_id_internal:<fakesrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
Progress: (request) Sent PLAY request
0:00:00.294357875 2338 0x7f600338a0 FIXME default gstutils.c:3981:gst_pad_create_stream_id_internal:<fakesrc1:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.349911500 2338 0x7f60033400 FIXME rtpjitterbuffer gstrtpjitterbuffer.c:1551:gst_jitter_buffer_sink_parse_caps:<rtpjitterbuffer0> Unsupported timestamp reference clock
0:00:00.350078166 2338 0x7f60033400 FIXME rtpjitterbuffer gstrtpjitterbuffer.c:1559:gst_jitter_buffer_sink_parse_caps:<rtpjitterbuffer0> Unsupported media clock
0:00:00.355827125 2338 0x7f600334a0 FIXME rtpjitterbuffer gstrtpjitterbuffer.c:1551:gst_jitter_buffer_sink_parse_caps:<rtpjitterbuffer1> Unsupported timestamp reference clock
0:00:00.358561833 2338 0x7f600334a0 FIXME rtpjitterbuffer gstrtpjitterbuffer.c:1559:gst_jitter_buffer_sink_parse_caps:<rtpjitterbuffer1> Unsupported media clock
0:00:02.358866251 2338 0x7f50002400 FIXME rtph265depay gstrtph265depay.c:1310:gst_rtp_h265_depay_process:<rtph265depay0> Assuming DONL field is not present
0:00:02.360083834 2338 0x7f50002400 FIXME rtph265depay gstrtph265depay.c:1310:gst_rtp_h265_depay_process:<rtph265depay0> Assuming DONL field is not present
0:00:02.360472292 2338 0x7f50002400 FIXME rtph265depay gstrtph265depay.c:1310:gst_rtp_h265_depay_process:<rtph265depay0> Assuming DONL field is not present
0:00:02.360655334 2338 0x7f50002400 FIXME rtph265depay gstrtph265depay.c:1310:gst_rtp_h265_depay_process:<rtph265depay0> Assuming DONL field is not present
0:00:02.360766126 2338 0x7f50002400 FIXME rtph265depay gstrtph265depay.c:1310:gst_rtp_h265_depay_process:<rtph265depay0> Assuming DONL field is not present
0:00:02.360916376 2338 0x7f50002400 FIXME rtph265depay gstrtph265depay.c:1310:gst_rtp_h265_depay_process:<rtph265depay0> Assuming DONL field is not present
0:00:02.361559709 2338 0x36f5acf0 FIXME basesink gstbasesink.c:3248:gst_base_sink_default_event:<srtsink0> stream-start event without group-id. Consider implementing group-id handling in the upstream elements
0:00:02.362658667 2338 0x7f50002400 FIXME rtph265depay gstrtph265depay.c:1310:gst_rtp_h265_depay_process:<rtph265depay0> Assuming DONL field is not present
```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/gst-plugins-good/-/issues/990Endless loop in qtdemux.c2022-09-26T22:42:04ZDom. Str.Endless loop in qtdemux.cThis while loop in [qtdemux.c#L6295](https://github.com/GStreamer/gst-plugins-good/blob/master/gst/isomp4/qtdemux.c#L6295) is endless for certain values of `gap_threshold` and `min_time`. This is because an overflow may happen if `G_MAXU...This while loop in [qtdemux.c#L6295](https://github.com/GStreamer/gst-plugins-good/blob/master/gst/isomp4/qtdemux.c#L6295) is endless for certain values of `gap_threshold` and `min_time`. This is because an overflow may happen if `G_MAXUINT64 - min_time < gap_threshold` making the condition always true.
```
while (GST_CLOCK_TIME_IS_VALID (stream->segment.stop) &&
GST_CLOCK_TIME_IS_VALID (stream->segment.position) &&
stream->segment.position + gap_threshold < min_time) {
GstEvent *gap =
gst_event_new_gap (stream->segment.position, gap_threshold);
gst_pad_push_event (stream->pad, gap);
stream->segment.position += gap_threshold;
}
```
As additional info, this happens for me for a file recorded with gstreamer (fragmented mp4) where the recording got interrupted (connection to camera got lost). My pipeline is as simple as `filesrc location="<file>" ! qtdemux ! fakesink`. Same problem when using gst-discoverer. I just want to derive the duration to be able to perform a sanity check. (ffprobe immediately returns a valid (but of course incorrect) duration of `351948:42:32.35`.)https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/989Error qmlglsink building2022-08-21T16:38:24ZMaciej PiwekError qmlglsink buildingWhen I tried to build qmlglsink I got an error :
gstqtsink.cc:585:10: error: no member named 'send_event_simple' in '_GstNavigationInterface'
iface->send_event_simple = gst_qt_sink_navigation_send_event;
I use
Gstreamer version 1.20...When I tried to build qmlglsink I got an error :
gstqtsink.cc:585:10: error: no member named 'send_event_simple' in '_GstNavigationInterface'
iface->send_event_simple = gst_qt_sink_navigation_send_event;
I use
Gstreamer version 1.20.3
QMake version 3.1
Qt version 5.15.5https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/382Revisit git clone safe directories hack in CI when gitlab-runner issue is res...2022-09-23T05:23:56ZNirbheek Chauhannirbheek.chauhan@gmail.comRevisit git clone safe directories hack in CI when gitlab-runner issue is resolvedWe had to add some hacks to the CI scripts to work around [a gitlab-runner issue](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/29022) that conflicted with a git security issue. See: https://gitlab.freedesktop.org/gstreamer/cerber...We had to add some hacks to the CI scripts to work around [a gitlab-runner issue](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/29022) that conflicted with a git security issue. See: https://gitlab.freedesktop.org/gstreamer/cerbero/-/merge_requests/862#note_1499278
Revisit this and remove the hacks once https://gitlab.com/gitlab-org/gitlab-runner/-/issues/29022 is fixed.Jordan PetridіsJordan Petridіs2022-10-01https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/233closedcaption plugin doesn't install a pkgconfig file2022-09-07T13:00:15ZNirbheek Chauhannirbheek.chauhan@gmail.comclosedcaption plugin doesn't install a pkgconfig fileI could not see anything in Cargo.toml that would explain this. Needs digging.I could not see anything in Cargo.toml that would explain this. Needs digging.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1391How stream_id hash is generated from input name?2022-11-10T09:21:15ZTomyHow stream_id hash is generated from input name?OS: Ubuntu 20.04
Gstreamer version: 1.16.3
I use a funnel element to take multiple input video sources and outputs one source. In the next element, after the funnel, I want to read stream id of each video stream.
I have this code:
```...OS: Ubuntu 20.04
Gstreamer version: 1.16.3
I use a funnel element to take multiple input video sources and outputs one source. In the next element, after the funnel, I want to read stream id of each video stream.
I have this code:
```
static GstFlowReturn gst_hailofilter_transform_ip(GstBaseTransform *trans,
GstBuffer *buffer)
{
GstPad *srcpad = trans->srcpad;
gchar *stream_id = gst_pad_get_stream_id(srcpad);
std::cout << stream_id << std::endl;
```
The function prints following for two input streams:
```
0b70cf574e1fef0b694a8a449a94732091cda1ce67bc4bf7c71c59d6c331f5b1/001
7960608e8835f3eeaf8fba46351367dd76199a9e133117d4aeeccb862e8da9aa/001
0b70cf574e1fef0b694a8a449a94732091cda1ce67bc4bf7c71c59d6c331f5b1/001
7960608e8835f3eeaf8fba46351367dd76199a9e133117d4aeeccb862e8da9aa/001
.
.
.
0b70cf574e1fef0b694a8a449a94732091cda1ce67bc4bf7c71c59d6c331f5b1/001
7960608e8835f3eeaf8fba46351367dd76199a9e133117d4aeeccb862e8da9aa/001
```
These hashes must be related with input names, because for each input name it generates the same hash every time.
For example:
```
input name: "file:///tmp/input_video_1.mp4" -> generated hash: "0b70cf574e1fef0b694a8a449a94732091cda1ce67bc4bf7c71c59d6c331f5b1/001"
input name: "file:///tmp/input_video_2.mp4" -> generated hash: "7960608e8835f3eeaf8fba46351367dd76199a9e133117d4aeeccb862e8da9aa/001"
```
Is there any way how to "decode" these hashes to the original string? Or is there some other way to find out stream ids (for example first input -> 0, second input -> 1)?https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1389gstgl shouldn't use eglGetProcAddress to determine presence2022-11-10T09:21:15ZDaniel Stonedaniel@fooishbar.orggstgl shouldn't use eglGetProcAddress to determine presencegstgl has code like this in it:
```c
gst_eglDestroyImage = gst_gl_context_get_proc_address (context,
"eglDestroyImage");
if (!gst_eglDestroyImage) {
gst_eglDestroyImage = gst_gl_context_get_proc_address (context,
"eglDestroyI...gstgl has code like this in it:
```c
gst_eglDestroyImage = gst_gl_context_get_proc_address (context,
"eglDestroyImage");
if (!gst_eglDestroyImage) {
gst_eglDestroyImage = gst_gl_context_get_proc_address (context,
"eglDestroyImageKHR");
if (!gst_eglDestroyImage) {
GST_ERROR_OBJECT (context, "\"eglDestroyImage\" not exposed by the "
"implementation");
return;
}
}
```
This is not the correct way to detect entrypoint usability. `eglGetProcAddress` is explicitly specified not to work like this:
> A non-NULL return value does not guarantee that an extension function is actually supported at runtime. The client must also make a corresponding query, such as glGetString(GL_EXTENSIONS) for OpenGL and OpenGL ES extensions; vgGetString(VG_EXTENSIONS) for OpenVG extensions; eglQueryString(display, EGL_EXTENSIONS); or query the EGL or client API version for non-extension functions, to determine if a function is supported by EGL or a specific client API context.
> eglGetProcAddress may be queried for all EGL and client API functions supported by the implementation (whether those functions are extensions or not, and whether they are supported by the current client API context or not).
In this specific example, the way to detect if `eglCreateImage` and `eglDestroyImage` are usable is to see whether or not EGL is v >= 1.5. The way to detect if `eglCreateImageKHR` and `eglDestroyImageKHR` are usable is to see whether or not `EGL_KHR_image_base` is exposed as a display extension for the specific display, etc.
One way this can break is when running GStreamer under apitrace. apitrace will answer all possible entrypoints to `eglGetProcAddress()`, but if the underlying implementation does not support those entrypoints then it will hard fail at runtime.