GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2021-09-24T13:33:22Zhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/574rtpjitterbuffer: Heuristic to detect equidistant packets is broken2021-09-24T13:33:22ZSebastian Drögertpjitterbuffer: Heuristic to detect equidistant packets is brokenAs the code comment says, this is what is currently done.
```C
/* Guess whether stream currently uses equidistant packet spacing. If we
* often see identical timestamps it means the packets are not
* equidistant. */
```
This as...As the code comment says, this is what is currently done.
```C
/* Guess whether stream currently uses equidistant packet spacing. If we
* often see identical timestamps it means the packets are not
* equidistant. */
```
This assumes that the underlying codec data has a constant rate, and only considers fragmented packets as the only cause of non-equidistant packets. That's of course wrong.
It breaks for example if there are simply gaps in an audio stream (and e.g. Opus DTX, see also https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/566), but even for video if the framerate is not constant.
A solution would be to also keep track of the difference in RTP timestamps between consecutive packets, which is what "equidistant" is about in the end. Implementing that is a bit tricky though as in this part of the code we're looking at packets in the order in which they arrive, not in sequence number order.
The equidistant flag is used to only for calculating the duration of a sequence number gap, by assuming that each packet had the same duration. So if there was a gap of D seconds and X packets missing, we assume that each lost packet had a duration of D/X. This is then used for the LOST timer, as well as later for the `GstRTPPacketLost` event and as a result becomes the duration for the `GAP` event created by the depayloader, and would be used for producing PLC data.
This means that if this duration is calculated wrong, then we would potentially produce more PLC data than actual data missing, or less. The latter part should probably be based instead on the difference in RTP timestamps between the packet around the gap.https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/566opusdec: Does not handle PLC currently for discontinuous transmission (DTX)2021-09-24T13:24:57ZSebastian Drögeopusdec: Does not handle PLC currently for discontinuous transmission (DTX)See [RFC6716 2.1.9](https://tools.ietf.org/html/rfc6716#section-2.1.9)
> Discontinuous Transmission (DTX) reduces the bitrate during silence
> or background noise. When DTX is enabled, only one frame is encoded
> every 400 millis...See [RFC6716 2.1.9](https://tools.ietf.org/html/rfc6716#section-2.1.9)
> Discontinuous Transmission (DTX) reduces the bitrate during silence
> or background noise. When DTX is enabled, only one frame is encoded
> every 400 milliseconds.
and [RFC7587 3.1.3](https://tools.ietf.org/html/rfc7587#section-3.1.3), specifically
> A receiver can distinguish between DTX and packet loss by looking for
> gaps in the sequence number
and
> On the receiving side, the non-transmitted parts will be handled by a
> frame loss concealment unit in the Opus decoder, which generates a
> comfort noise signal to replace the non-transmitted parts of the
> speech or audio signal.
----
We would currently receive the DTX packets and not distinguish them from normal packets, which means that if we have e.g. 20ms packet sizes then we would decode 20ms of samples every 400ms and have a gap for everything else. Instead we should let the decoder go into the PLC code path for this and produce comfort noise.
This probably requires changes in the depayloader to detect this case (continuous seqnums, gap between RTP timestamps and sample count in the packets) and produce a GAP event for this, then the normal PLC code path in the decoder could handle this.https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/565decodebin3: stream switch error with multiple stream changes at a time2020-05-26T05:41:51ZEunhye Choidecodebin3: stream switch error with multiple stream changes at a timeIn a below test scenario, when application try to set new stream information on decodebin3,
the video decode path never be configured.
- test content : one video track + multi audio track
- test env : linux with the latest master branch...In a below test scenario, when application try to set new stream information on decodebin3,
the video decode path never be configured.
- test content : one video track + multi audio track
- test env : linux with the latest master branch (1.15.2)
- Test scenario
- step 1: send a select-streams event to disable video track, it means this event includes only audio tracks's stream-id.
- step 2: send a select-steams event to enable video track + change audio track
I have attached log file with decodebin:6.
[decodebin3_log.zip](/uploads/fbd97767e0817deb0f51933744d6b00b/decodebin3_log.zip)https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/564autotools gtk-doc scanner build failure: undefined reference to `gst_gl_displ...2019-05-15T07:01:14ZRex Dieterrdieter@gmail.comautotools gtk-doc scanner build failure: undefined reference to `gst_gl_display_wayland_get_type'Building on fedora 30 (and also tested on fedora 28), gst-plugins-base-1.15.2 build fails when using --enable-gtk-doc configure option.
```
DOC Introspecting gobjects
libtool: compile: gcc -I/usr/include/glib-2.0 -I/usr/lib64/...Building on fedora 30 (and also tested on fedora 28), gst-plugins-base-1.15.2 build fails when using --enable-gtk-doc configure option.
```
DOC Introspecting gobjects
libtool: compile: gcc -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I../../gst-libs -I../../gst-libs -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c gst-plugins-base-libs-scan.c -fPIC -DPIC -o .libs/gst-plugins-base-libs-scan.o
libtool: link: gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z -Wl,relro -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld .libs/gst-plugins-base-libs-scan.o -Wl,-z -Wl,relro -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o .libs/gst-plugins-base-libs-scan ../../gst-libs/gst/allocators/.libs/libgstallocators-1.0.so ../../gst-libs/gst/audio/.libs/libgstaudio-1.0.so ../../gst-libs/gst/fft/.libs/libgstfft-1.0.so ../../gst-libs/gst/rtp/.libs/libgstrtp-1.0.so ../../gst-libs/gst/rtsp/.libs/libgstrtsp-1.0.so ../../gst-libs/gst/sdp/.libs/libgstsdp-1.0.so /home/rdieter/pkgs.fedoraproject.org/gstreamer1-plugins-base/gst-plugins-base-1.15.2/gst-libs/gst/rtp/.libs/libgstrtp-1.0.so -lgio-2.0 ../../gst-libs/gst/tag/.libs/libgsttag-1.0.so ../../gst-libs/gst/video/.libs/libgstvideo-1.0.so ../../gst-libs/gst/app/.libs/libgstapp-1.0.so ../../gst-libs/gst/pbutils/.libs/libgstpbutils-1.0.so ../../gst-libs/gst/riff/.libs/libgstriff-1.0.so /home/rdieter/pkgs.fedoraproject.org/gstreamer1-plugins-base/gst-plugins-base-1.15.2/gst-libs/gst/audio/.libs/libgstaudio-1.0.so /var/tmp/kdecache-rdieter/BUILDROOT/gst-plugins-base-1.15.2/gst-libs/gst/tag/.libs/libgsttag-1.0.so /home/rdieter/pkgs.fedoraproject.org/gstreamer1-plugins-base/gst-plugins-base-1.15.2/gst-libs/gst/tag/.libs/libgsttag-1.0.so -lz ../../gst-libs/gst/gl/.libs/libgstgl-1.0.so /home/rdieter/pkgs.fedoraproject.org/gstreamer1-plugins-base/gst-plugins-base-1.15.2/gst-libs/gst/video/.libs/libgstvideo-1.0.so -lorc-0.4 /home/rdieter/pkgs.fedoraproject.org/gstreamer1-plugins-base/gst-plugins-base-1.15.2/gst-libs/gst/allocators/.libs/libgstallocators-1.0.so -lm -lgmodule-2.0 -lGL -lGLESv2 -lX11-xcb -lX11 -lxcb -lEGL -ldrm -lgbm -lgudev-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -pthread
.libs/gst-plugins-base-libs-scan.o: In function `get_object_types':
/var/tmp/kdecache-rdieter/BUILDROOT/gst-plugins-base-1.15.2/docs/libs/gst-plugins-base-libs-scan.c:111: undefined reference to `gst_gl_display_wayland_get_type'
collect2: error: ld returned 1 exit status
2019-03-07 12:49:52,656:scangobj.py:execute_command:1196:WARNING:Linking scanner failed: 1, command: /bin/sh ../../libtool --tag=CC --mode=link gcc -lgobject-2.0 -lglib-2.0 -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld gst-plugins-base-libs-scan.lo ../../gst-libs/gst/allocators/libgstallocators-1.0.la ../../gst-libs/gst/audio/libgstaudio-1.0.la ../../gst-libs/gst/fft/libgstfft-1.0.la ../../gst-libs/gst/rtp/libgstrtp-1.0.la ../../gst-libs/gst/rtsp/libgstrtsp-1.0.la ../../gst-libs/gst/sdp/libgstsdp-1.0.la ../../gst-libs/gst/tag/libgsttag-1.0.la ../../gst-libs/gst/video/libgstvideo-1.0.la ../../gst-libs/gst/app/libgstapp-1.0.la ../../gst-libs/gst/pbutils/libgstpbutils-1.0.la ../../gst-libs/gst/riff/libgstriff-1.0.la ../../gst-libs/gst/gl/libgstgl-1.0.la -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o gst-plugins-base-libs-scan
make[3]: *** [Makefile:971: scan-build.stamp] Error 1
```https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/issues/141totem crashed with SIGSEGV2019-03-08T12:59:31ZEl Jinete Sin Cabezatotem crashed with SIGSEGVIt was because of this: https://bugs.launchpad.net/bugs/1818972
---
Open bug in launchpad.net: https://bugs.launchpad.net/bugs/1819024
"Open video in desktop. This occurred when mixing packages of ubuntu proposed."
BackTrace:
```
#0 ...It was because of this: https://bugs.launchpad.net/bugs/1818972
---
Open bug in launchpad.net: https://bugs.launchpad.net/bugs/1819024
"Open video in desktop. This occurred when mixing packages of ubuntu proposed."
BackTrace:
```
#0 0x00007f2bec3397d7 in gl_create_context (dpy=dpy@entry=0x7f2ba41bd000, screen=0, parent=parent@entry=0x7ffc532568b0) at ../../../../gst-libs/gst/vaapi/gstvaapiutils_glx.c:313
cs = 0x5622e11c7760
fbconfigs = 0x0
fbconfig_id = 32556
val = 1394960560
n = <optimized out>
n_fbconfigs = 32764
status = <optimized out>
fbconfig_attrs = {32784, 1, 32785, 1, 5, 1, 8, 8, 9, 8, 10, 8, 0}
#1 0x00007f2bec338c42 in create_objects (texture_id=7, texture=0x5622e110de80) at ../../../../gst-libs/gst/vaapi/gstvaapitexture_glx.c:138
dpy = 0x7f2ba41bd000
old_cs = {display = 0x0, window = 0, visual = 0x438, context = 0x0, swapped_buffers = 0}
success = 0
base_texture = 0x5622e110de80
base_texture = <optimized out>
dpy = <optimized out>
old_cs = <optimized out>
success = <optimized out>
__func__ = "create_objects"
_g_boolean_var_ = <optimized out>
_g_boolean_var_ = <optimized out>
#2 create_texture_unlocked (texture=0x5622e110de80) at ../../../../gst-libs/gst/vaapi/gstvaapitexture_glx.c:177
texture_id = 7
texture_id = <optimized out>
#3 gst_vaapi_texture_glx_create (texture=0x5622e110de80) at ../../../../gst-libs/gst/vaapi/gstvaapitexture_glx.c:186
success = <optimized out>
#4 0x00007f2bec2f06ff in gst_vaapi_texture_allocate (texture=0x5622e110de80) at ../../../../gst-libs/gst/vaapi/gstvaapitexture.c:76
No locals.
#5 gst_vaapi_texture_new_internal (klass=klass@entry=0x7f2bec3862e0 <g_class>, display=display@entry=0x7f2ba400b410, id=id@entry=7, target=target@entry=3553, format=format@entry=6408, width=width@entry=1920, height=1080) at ../../../../gst-libs/gst/vaapi/gstvaapitexture.c:76
texture = 0x5622e110de80
__FUNCTION__ = "gst_vaapi_texture_new_internal"
#6 0x00007f2bec3391e7 in gst_vaapi_texture_glx_new_wrapped (display=display@entry=0x7f2ba400b410, texture_id=texture_id@entry=7, target=target@entry=3553, format=format@entry=6408) at ../../../../gst-libs/gst/vaapi/gstvaapitexture_glx.c:205
width = 1920
height = 1080
border_width = 0
ts = {target = 3553, old_texture = 7, was_enabled = 1, was_bound = 1}
success = <optimized out>
gl_api = <optimized out>
__FUNCTION__ = "gst_vaapi_texture_glx_new_wrapped"
#7 0x00007f2bec338650 in gst_vaapi_display_glx_create_texture (display=0x7f2ba400b410, id=7, target=3553, format=6408, width=<optimized out>, height=1080) at ../../../../gst-libs/gst/vaapi/gstvaapidisplay_glx.c:75
texture = 0x0
dpy = 0x7f2ba400b410
#8 0x00007f2bec2cb1bd in gst_vaapi_texture_upload (meta=0x7f2b9c0022b0, texture_id=0x7ffc53256a64) at ../../../gst/vaapi/gstvaapivideometa_texture.c:199
vmeta = 0x7f2ba806c370
meta_texture = 0x7f2b94082870
proxy = 0x5622e192cbc0
surface = 0x7f2ba0003590
dpy = 0x7f2ba400b410
texture = <optimized out>
#9 0x00007f2c09f7736b in clutter_gst_rgb32_upload_gl (sink=0x5622e1158480, buffer=<optimized out>) at clutter-gst-video-sink.c:1375
priv = 0x5622e1158120
upload_meta = 0x7f2b9c0022b0
i = <optimized out>
gl_handle = {7}
__func__ = "clutter_gst_rgb32_upload_gl"
tmp = <optimized out>
#10 0x00007f2c09f785ee in clutter_gst_source_dispatch (source=0x5622e18db940, callback=<optimized out>, user_data=<optimized out>) at clutter-gst-video-sink.c:2050
gst_source = 0x5622e18db940
priv = 0x5622e1158120
buffer = 0x7f2ba41ed4c0
pipeline_ready = 1
caps_parsed = <optimized out>
__func__ = "clutter_gst_source_dispatch"
#11 0x00007f2c0b38ea6e in g_main_dispatch (context=0x5622e0a2b340) at ../../../glib/gmain.c:3189
dispatch = 0x7f2c09f78440 <clutter_gst_source_dispatch>
prev_source = 0x0
was_in_call = 0
user_data = 0x0
callback = 0x0
cb_funcs = <optimized out>
cb_data = <optimized out>
need_destroy = <optimized out>
source = 0x5622e18db940
current = 0x5622e0aa9790
i = 0
current = <optimized out>
i = <optimized out>
__FUNCTION__ = "g_main_dispatch"
source = <optimized out>
_g_boolean_var_ = <optimized out>
was_in_call = <optimized out>
user_data = <optimized out>
callback = <optimized out>
cb_funcs = <optimized out>
cb_data = <optimized out>
need_destroy = <optimized out>
dispatch = <optimized out>
prev_source = <optimized out>
_g_boolean_var_ = <optimized out>
#12 g_main_context_dispatch (context=context@entry=0x5622e0a2b340) at ../../../glib/gmain.c:3854
No locals.
#13 0x00007f2c0b38ed08 in g_main_context_iterate (context=context@entry=0x5622e0a2b340, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3927
max_priority = 2147483647
timeout = 5
some_ready = 1
nfds = <optimized out>
allocated_nfds = 5
fds = 0x7f2bf8011630
#14 0x00007f2c0b38ed9c in g_main_context_iteration (context=context@entry=0x5622e0a2b340, may_block=may_block@entry=1) at ../../../glib/gmain.c:3988
retval = <optimized out>
#15 0x00007f2c0b24a7cd in g_application_run (application=0x5622e09fe1a0, argc=<optimized out>, argv=0x7ffc53256e78) at ../../../gio/gapplication.c:2516
arguments = 0x5622e09fbc00
status = 0
context = 0x5622e0a2b340
acquired_context = 1
__FUNCTION__ = "g_application_run"
#16 0x00005622dfae5278 in main (argc=<optimized out>, argv=<optimized out>) at ../src/totem.c:83
totem = 0x5622e09fe1a0
```https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/563audiomixer: kernel: traps: trap divide error2020-01-08T20:28:23ZKaudiomixer: kernel: traps: trap divide errorTrap Divide Error when mixing PCM audio streams from udspsrc's
Error Message:
kernel: traps: AudioMixer[1334] trap divide error ip:7f2f0d4c9358 sp:7f2efe9658e0 error:0 in libgstaudio-1.0.so.0.1403.0[7f2f0d4b8000+71000]Trap Divide Error when mixing PCM audio streams from udspsrc's
Error Message:
kernel: traps: AudioMixer[1334] trap divide error ip:7f2f0d4c9358 sp:7f2efe9658e0 error:0 in libgstaudio-1.0.so.0.1403.0[7f2f0d4b8000+71000]https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/573udpsrc: multicast optimization on Linux2021-09-24T13:33:21ZNicolas Dufresneudpsrc: multicast optimization on LinuxAs of now, we bind the udpsrc multicast socket to ANY. As a side effect, we receive all packets from all joined groups on the same port and filter them. This is can degenerate quickly in term of performance in specific scenario. I propos...As of now, we bind the udpsrc multicast socket to ANY. As a side effect, we receive all packets from all joined groups on the same port and filter them. This is can degenerate quickly in term of performance in specific scenario. I propose that on Linux, we replace all this filtering by using IP_MULTICAST_ALL socket option. If the sending of address is disable, we could likely skip retrieving the packet info.https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/572udpsrc: Does not filter base on iface when filtering incoming multicast packets2021-09-24T13:33:21ZNicolas Dufresneudpsrc: Does not filter base on iface when filtering incoming multicast packetsudpsrc will bind to address ANY when receiving multicast packets. The side effect is that it will receive packet from all the multicast group on same port that has been join on the same system. To workaround this, we udpsrc will skip pac...udpsrc will bind to address ANY when receiving multicast packets. The side effect is that it will receive packet from all the multicast group on same port that has been join on the same system. To workaround this, we udpsrc will skip packets that aren't from the multicast address we are expecting them.
This filtering is incomplete, since the same multicast address may exist through two network interface, and may not be related. We also need to filter base on the interface whenever there is one or more interface in "multicast-iface" property.https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/562Not correct play APE file2021-09-24T13:24:56ZBorisNot correct play APE fileI am build 1.15.2.1 gstreamer on arm enigma2 box.Ape files not play normal.wav,mp3,flac play ok.
[eServiceMP3] playbin uri=file:///hdd/music/MyleneFarmer-Interstellaires(2015)/MyleneFarmer-Interstellaires.ape
(enigma2:1530): CRITICAL **...I am build 1.15.2.1 gstreamer on arm enigma2 box.Ape files not play normal.wav,mp3,flac play ok.
[eServiceMP3] playbin uri=file:///hdd/music/MyleneFarmer-Interstellaires(2015)/MyleneFarmer-Interstellaires.ape
(enigma2:1530): CRITICAL **: GstAudioMeta properties would cause out-of-bounds memory access on the buffer: max_offset 9216, samples 4608, bps 2, buffer size 5292
0:00:13.228532880 1530 0xb1686350 ERROR GST_BUFFER gstbuffer.c:682:gst_buffer_copy_into: failed to copy meta 0xffbd70 of API type GstAudioMetaAPI
** (enigma2:1530): CRITICAL **: GstAudioMeta properties would cause out-of-bounds memory access on the buffer: max_offset 9216, samples 4608, bps 2, buffer size 5292
0:00:13.229398250 1530 0xb1686350 ERROR GST_BUFFER gstbuffer.c:682:gst_buffer_copy_into: failed to copy meta 0xffbd70 of API type GstAudioMetaAPITim-Philipp Müllertim@centricular.comTim-Philipp Müllertim@centricular.comhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/915webrtcbin _connect_input_stream assertion failed2023-05-16T04:24:43Zmchlrhwwebrtcbin _connect_input_stream assertion failedWhile attempting to get recvonly offers working with webrtcbin (see https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/900) I encountered an assertion failure just after a valid answer was created (`ERROR:gstwebrtcbin.c:3185...While attempting to get recvonly offers working with webrtcbin (see https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/900) I encountered an assertion failure just after a valid answer was created (`ERROR:gstwebrtcbin.c:3185:_connect_input_stream: assertion failed: (trans->stream)`). This was using the `ystreet/webrtc-renego` branch, not stable (or even master), so it's possible it is expected at this stage. Does anyone know what might cause something like that?https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/571rtspsrc: stream freezes on dropped packets when using ntp-sync2021-04-22T13:55:18ZMartin Vonheim Larsenrtspsrc: stream freezes on dropped packets when using ntp-syncUsing `rtsprc` with `ntp-sync=true` and `ntp-time-source=running-time` causes `rtpjitterbuffer` to wait for (literally) a hundred years for the next packet whenever a packet is dropped.
### Steps to reproduce
This should fail on any rea...Using `rtsprc` with `ntp-sync=true` and `ntp-time-source=running-time` causes `rtpjitterbuffer` to wait for (literally) a hundred years for the next packet whenever a packet is dropped.
### Steps to reproduce
This should fail on any reasonably recent version of gst on (at least) linux. I see the same behaviour on 1.14, 1.15.0, and master (as of March 6th 2019). See below for exact commits and distro.
First we need some rtsp server, preferrably on localhost. I'm using the `test-launch` example of `gst-rtsp-server`, but really any rtsp server should do.
```bash
gst-rtsp-server/examples/test-launch "( videotestsrc is-live=true ! video/x-raw, framerate=30/1, width=1920, height=1080 ! timeoverlay ! videoconvert ! x264enc bitrate=2000 tune=zerolatency speed-preset=ultrafast key-int-max=10 ! rtph264pay name=pay0 pt=96 )"
```
Next, start a pipeline with `rtsprc` with `ntp-sync=true` and `ntp-time-source=running-time`:
```bash
gst-launch-1.0 rtspsrc location="rtsp://localhost:8554/test" latency=0 ntp-sync=true ntp-time-source=running-time ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
```
A window with the test video should appear immediately.
Then make sure we drop packets for a few ms. If you're running against a server on localhost the following should work:
```bash
sudo tc qdisc add dev lo root netem loss 100%
sleep 0.01
sudo tc qdisc del dev lo root netem
```
__Expected behaviour__: Video stutters for a few ms, then continues to play normally.
__Actual behaviour__: Video freezes (seemingly) indefinitely.
### My test setup
I'm currently running Ubuntu 18.04 on amd_64.
GStreamer built from source, using master branches:
`gstreamer`: `dfd9fd7f82d0c480581f7659d8c3442be9fadb84`
`gst-plugins-base`: `d58b7cf75c19e03d4fde9f32bb57f357f8c92ab9`
`gst-plugins-good`: `7f95a809e9009720cedf97cbb89fb0d8293a42d4`
`gst-plugins-bad`: `919cd44f4722b48d83728a501ea8949d71fdd555`
`gst-plugins-ugly`: `ab8cc537aad620f518d22acbdce185a82258c93e`
## Faulty code in `rtpjitterbuffer`
I'm not sufficiently familiar with `rtpjitterbuffer` to suggest a good fix for this, but I have identified the cause of the issue.
Looking at `gst-plugins-good/gst/rtpmanager/gstrtpjitterbuffer.c` on commit `7f95a809e9009720cedf97cbb89fb0d8293a42d4`. The freeze happens within `wait_next_timeout()` due to `test_timeout` getting set to 3.76e+18 (which is time since NTP epoch in nanoseconds) on line 4082.
I think the correct thing to do whenever `ntp-time-source=running-time` is used is to subtract the offset from the timeout. I hacked together a fix by subtracting the offset if `test_timeout` is _really_ far into the future. This can be done by adding the following on line 4083:
```c
const GstClockTime unix_epoch_in_ntp = (2208988800LL * GST_SECOND);
if (test_timeout - now > unix_epoch_in_ntp/2)
{
test_timeout -= jitterbuffer->priv->ts_offset;
}
```
This resolves the issue, but I'm not convinced it doesn't break anything else. I also suspect there is a more elegant way to detect that NTP timestamps are being used.https://gitlab.freedesktop.org/gstreamer/gstreamer-sharp/-/issues/17Test check.gstreamer-sharp.SdpTests randomly fails2021-10-12T20:13:14ZThibault Sauniertsaunier@igalia.comTest check.gstreamer-sharp.SdpTests randomly fails```
=================
Test name: check.gstreamer-sharp.SdpTests
Command: 'MONO_PATH='/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/Tests/NUnit/3.10.1/lib/net45/nunit.framework.dll/..:/builds/seungh...```
=================
Test name: check.gstreamer-sharp.SdpTests
Command: 'MONO_PATH='/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/Tests/NUnit/3.10.1/lib/net45/nunit.framework.dll/..:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/Tests:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/pango:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/gio:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/gdk:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/ges:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/glib:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/atk:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/gtk:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/cairo:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/sources' LD_LIBRARY_PATH='//builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-editing-services/ges:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-python/gi/overrides:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/pygobject/tests:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/pygobject/tests:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/pygobject/tests:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/pygobject/gi:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/pygobject/gi:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/Tests:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/ges:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/sources:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/sample/valtest:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/gtk:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/gdk:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/atk:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/pango:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/cairo:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/gio:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gtk-sharp/Source/glib:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-editing-services/ges:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-devtools/validate/gst/overrides:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-devtools/validate/gst/validate:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-rtsp-server/gst/rtsp-server:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/dssim:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/webrtc:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/wayland:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/sctp:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/player:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/opencv:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/mpegts:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/isoff:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/interfaces:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/insertbin:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/basecamerabinsrc:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/audio:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/adaptivedemux:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-bad/gst-libs/gst/uridownloader:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/gl:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/allocators:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/app:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/riff:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/pbutils:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/rtsp:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/sdp:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/rtp:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/audio:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/video:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/fft:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gst-plugins-base/gst-libs/gst/tag:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer/libs/gst/check:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer/libs/gst/net:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer/libs/gst/controller:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer/libs/gst/base:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer/gst:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/orc/orc-test:/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/orc/orc:/builds/seungha.yang/gst-editing-services/gst-build/prefix/lib' /usr/bin/nunitlite-runner /builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/Tests/SdpTests.dll'
=================
NUnitLite 3.7.1 (.NET 4.5)
Copyright (C) 2017 Charlie Poole
Runtime Environment
OS Version: Unix 4.9.0.5
CLR Version: 4.0.30319.42000
Test Files
/builds/seungha.yang/gst-editing-services/gst-build/build/subprojects/gstreamer-sharp/Tests/SdpTests.dll
Errors, Failures and Warnings
1) Error : GstSharp.Tests.SdpTests.TesSdpMessage
TearDown : System.NullReferenceException : Object reference not set to an instance of an object
--TearDown
at GstSharp.Tests.TestBase.BaseTearDown () [0x00000] in <d27f093427404827a9be90e600b41ec3>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in <373b6e083d6e45e498c9082a8eebd27f>:0
Run Settings
Number of Test Workers: 8
Work Directory: /builds/seungha.yang/gst-editing-services/gst-build
Internal Trace: Off
Test Run Summary
Overall result: Failed
Test Count: 1, Passed: 0, Failed: 1, Warnings: 0, Inconclusive: 0, Skipped: 0
Failed Tests - Failures: 0, Errors: 1, Invalid: 0
Start time: 2019-03-06 13:40:42Z
End time: 2019-03-06 13:40:42Z
Duration: 0.130 seconds
Results (nunit3) saved as /builds/seungha.yang/gst-editing-services/gst-build/TestResult.xml
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/363Add gst_XXX_steal() functions2021-09-24T11:09:17ZSebastian DrögeAdd gst_XXX_steal() functionsThere is `gst_event_steal()` currently but not for `GstObject` or for any of the other `GstMiniObject`s. We should add those and double-check if we now finally have all the functions exist on all types consistently.There is `gst_event_steal()` currently but not for `GstObject` or for any of the other `GstMiniObject`s. We should add those and double-check if we now finally have all the functions exist on all types consistently.https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/914fpsdisplaysink plugin with vaapi video sink2021-09-24T14:37:03ZKoryun Khachatryanfpsdisplaysink plugin with vaapi video sinkHi,
I try to use fpsdisplaysink in pipeline with VAsurface (accordingly set video-sink=vaapisink). And catching error when text overlay trying to write fps on VAsurface. I can fix this by adding the conversion to system memory before fp...Hi,
I try to use fpsdisplaysink in pipeline with VAsurface (accordingly set video-sink=vaapisink). And catching error when text overlay trying to write fps on VAsurface. I can fix this by adding the conversion to system memory before fpsdisplaysink ( vaapipostproc ! video/x-raw ). Maybe the text overlay plugin should be able to draw on VAsurface or setting caps video/x-raw before drawing.
gst-launch-1.0 --gst-plugin-path ${GST_PLUGIN_PATH} \
filesrc location=$FILE ! decodebin ! video/x-raw\(memory:VASurface\) ! \
gvadetect inference-id=inf0 model=${MODEL} device=GPU every-nth-frame=1 batch-size=1 ! queue ! \
gvawatermark ! videoconvert ! fpsdisplaysink video-sink=vaapisink sync=false
call stack:
** (gst-launch-1.0:26): CRITICAL **: gst_vaapi_surface_associate_subpicture: assertion 'subpicture != NULL' failed
Caught SIGSEGV
#0 0x00007f311a62a74d in poll () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007f311ab6038c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007f311ab60712 in g_main_loop_run ()
#3 0x00007f311b0c0d29 in gst_bus_poll (bus=bus@entry=0x1b48260,
#4 0x0000000000404bb0 in event_loop (pipeline=0x1ee00d0,
#5 0x0000000000403b0e in main (argc=23, argv=0x7ffec058f0a8)
Spinning. Please run 'gdb gst-launch-1.0 26' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/913Add AES-GCM Authenticated Encryption (RFC 7714) support2022-05-27T10:00:25ZUlf OlssonAdd AES-GCM Authenticated Encryption (RFC 7714) supportSee https://tools.ietf.org/html/rfc7714See https://tools.ietf.org/html/rfc7714https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/912nvenc: hangs forever if stopped / started2019-05-02T10:21:00ZBilly Lindemannvenc: hangs forever if stopped / startedIf a pipeline is stopped / started the encoding does not seem to resume. From my own debugging it seems that the buffers are destroyed but never recreated?
On the first run the buffers area created in ```gst_nv_base_enc_handle_frame``...If a pipeline is stopped / started the encoding does not seem to resume. From my own debugging it seems that the buffers are destroyed but never recreated?
On the first run the buffers area created in ```gst_nv_base_enc_handle_frame``` but this doesn't seem to ever get called again after restarting the pipeline (going to NULL and then back to PLAYING)
Curious if anyone can point me in the right direction :)
```
0:00:10.744025792 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:1018:gst_nv_base_enc_free_buffers:<nvh264enc0> Destroying output bitstream buffer 0x7f1218166d90
0:00:10.744468947 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:1010:gst_nv_base_enc_free_buffers:<nvh264enc0> Destroying input buffer 0x7f12181290b0
0:00:10.746553038 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:1018:gst_nv_base_enc_free_buffers:<nvh264enc0> Destroying output bitstream buffer 0x7f12181682e0
0:00:10.747123195 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:1010:gst_nv_base_enc_free_buffers:<nvh264enc0> Destroying input buffer 0x7f121812c320
0:00:10.747788903 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:1018:gst_nv_base_enc_free_buffers:<nvh264enc0> Destroying output bitstream buffer 0x7f1218169830
0:00:10.748361665 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:1010:gst_nv_base_enc_free_buffers:<nvh264enc0> Destroying input buffer 0x7f121812d6c0
0:00:10.749261139 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:1018:gst_nv_base_enc_free_buffers:<nvh264enc0> Destroying output bitstream buffer 0x7f121816ad80
0:00:10.750310017 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:558:gst_nv_base_enc_stop:<nvh264enc0> encoder stopped
0:00:10.751506678 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:642:gst_nv_base_enc_close:<nvh264enc0> closing encoder
0:00:10.825728139 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:674:gst_nv_base_enc_close:<nvh264enc0> encoder closed
0:00:10.826788941 127900 0x1170b30 DEBUG nvenc gstnvbaseenc.c:398:gst_nv_base_enc_open:<nvh264enc0> opening encoder
0:00:11.101726946 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:422:gst_nv_base_enc_open:<nvh264enc0> created NVENC encoder 0x30eb9f0
0:00:11.101811177 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x00000001
0:00:11.101818210 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x00000010
0:00:11.101823129 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x00000100
0:00:11.101827888 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x00001000
0:00:11.101873956 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x01000000
0:00:11.101882693 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x10000000
0:00:11.101888905 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x04000000
0:00:11.101894345 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x02000000
0:00:11.101907470 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:302:_get_supported_input_formats:<nvh264enc0> input format: 0x20000000
0:00:11.102665334 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:487:gst_nv_base_enc_start:<nvh264enc0> starting encoder
0:00:11.102684801 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:899:gst_nv_base_enc_start_bitstream_thread:<nvh264enc0> starting bitstream thread
0:00:11.102851930 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:913:gst_nv_base_enc_start_bitstream_thread:<nvh264enc0> started thread to read bitstream
0:00:11.102970596 127900 0x7f14100194f0 LOG nvenc gstnvbaseenc.c:773:gst_nv_base_enc_bitstream_thread:<nvh264enc0> wait for bitstream buffer..
0:00:11.103066709 127900 0x1170b30 INFO nvenc gstnvbaseenc.c:517:gst_nv_base_enc_start:<nvh264enc0> encoder started
```Seungha Yangseungha@centricular.comSeungha Yangseungha@centricular.comhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/910waylandsink: Finish implementation and related library2022-03-04T21:43:53ZNicolas Dufresnewaylandsink: Finish implementation and related libraryI've spend a day looking into the state of waylandsink, trying to get the right feature set of GstVideoOverlay and could not. The problem biggest issue is that to implement VideoOverlay properly we would need to know the surface size. Un...I've spend a day looking into the state of waylandsink, trying to get the right feature set of GstVideoOverlay and could not. The problem biggest issue is that to implement VideoOverlay properly we would need to know the surface size. Unlike other protocol, the surface size cannot be queried. In fact, the surface size entirely depends on the content, and there is no way to know if there is any content in the provided window.
This information is crucial, because there is no implicit clipping of the video subsurface within the same application. That basically means that as of today's implementation, it is rather easy to get the video to fall outside of your window. And worst. In other implementation, the clipping is left to the windowing system, basically if we want to do right clipping, we pass a render rectangle that is bigger then the window.
That basically means, we want want to turn waylandsink in something more serious, we need a mechanism to set the window size. This information is often known by the application or when a toplevel surface is used (through the configure event). When this work started, a wayland library was added. It currently exist and support context sharing and atomic resize. But as this is not exported, it is completely useless.
1. Shall we expose this unstable API starting form 1.17 ?
I looked at the interface, despite that it is missing a window size, the suggested API is quite coherent with how Wayland works.
2. Or, shall we simply implement it through properties and action signals ?
We can pretty much do everything though action signal, except that that some simple things (like the context name) in the normal API we endup with complicated things (like a read-only property, or a action signal getter).
cc @gkiagia @danielsNicolas DufresneNicolas Dufresnehttps://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/570v4l2allocator: use v4l2_requestbuffers capabilities to determine allocator flags2021-09-24T13:33:21ZPhilipp Zabelphilipp.zabel@gmail.comv4l2allocator: use v4l2_requestbuffers capabilities to determine allocator flagsThere is a new capabilities field in v4l2_requestbuffers that can tell us whether the V4L2 queue supports MMAP, USERPTR, and DMABUF buffers. If any of those flags is set in the first REQBUFS(0) result, we can use those to set allocator f...There is a new capabilities field in v4l2_requestbuffers that can tell us whether the V4L2 queue supports MMAP, USERPTR, and DMABUF buffers. If any of those flags is set in the first REQBUFS(0) result, we can use those to set allocator flags and stop probing in gst_v4l2_allocator_new.
A kernel header update with the new flags is contained in !136.https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/561Memory Leak With glimagesink on OSX2019-09-23T15:36:28ZRay TileyMemory Leak With glimagesink on OSXUsing the Mac OSX packages from the 1.15.1 release the following pipeline leaks memory:
```
gst-launch-1.0 testvideosrc is-live=true pattern=black ! timeoverlay ! glimagesink
```
On my machine it starts off using ~17MB but will continue...Using the Mac OSX packages from the 1.15.1 release the following pipeline leaks memory:
```
gst-launch-1.0 testvideosrc is-live=true pattern=black ! timeoverlay ! glimagesink
```
On my machine it starts off using ~17MB but will continue to climb. At a certain point quitting the application will then cause the video output on the machine to freeze for many seconds, the length of which correlates to how much memory the process is currently consuming.
Please let me know if if additional logs would be helpful.https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/560gl: Cocoa window is never closed2021-09-24T13:24:55ZRobgl: Cocoa window is never closed**More technical description**
`GstGLWindowCocoa` fails to close the window it creates.
**Reproduction steps**
Create a bunch of pipelines outputting to `glimagesink` with `GST_GL_HAVE_WINDOW_COCOA` defined. Windows will be created, a...**More technical description**
`GstGLWindowCocoa` fails to close the window it creates.
**Reproduction steps**
Create a bunch of pipelines outputting to `glimagesink` with `GST_GL_HAVE_WINDOW_COCOA` defined. Windows will be created, and they will never be closed.
They will not be closed if the pipeline state is set to `NULL` nor if the pipeline and `glimagesink` are deleted.
**Expected result**
With `GST_GL_HAVE_WINDOW_X11` defined the `glimagesink` element will close the window when the state is set to `NULL`.
**Suspected issue**
[gstglwindow_cocoa.m#L207](https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/blob/master/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m#L207) creates the Cocoa window:
````
internal_win_id = [[GstGLNSWindow alloc] initWithContentRect:rect styleMask:
(NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |
NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable)
backing: NSBackingStoreBuffered defer: NO screen: nil gstWin: window_cocoa];
````
I believe that [gstglwindow_cocoa.m#L244](https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/blob/master/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m#L244) should close the window, but instead it just deleted the view from within the window:
````
[[internal_win_id contentView] removeFromSuperview];
````
I suspect that the above line should be replaced with:
````
[internal_win_id close];
````