We access fields that are protected by the lock and this was already
held in other places where we call the method. I have got cases where
we get the following stack/assertion:
```
#0 g_logv (log_domain=0x7fb9d84e6cd5 "GStreamer", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fb9d4de54e0) at ../glib/gmessages.c:1433
#1 0x00007fb9d802d0f3 in g_log (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at ../glib/gmessages.c:1471
#2 0x00007fb9d845bc2c in gst_pad_send_event (pad=0x7fb98c01e050, event=0x7fb9c4105b90) at ../subprojects/gstreamer/gst/gstpad.c:6096
#3 0x00007fb9d6541c35 in gst_uri_decode_bin3_set_uri (dec=0x7fb9bc450960 [GstURIDecodeBin3], uri=0x7fb9c40f5410 "file:///var/home/thiblahute/devel/gstreamer/gstreamer/subprojects/gst-integration-testsuites/medias/defaults/mp4/mp3_h264.0.mp4") at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1918
#4 0x00007fb9d6540c40 in gst_uri_decode_bin3_set_property (object=0x7fb9bc450960 [GstURIDecodeBin3], prop_id=1, value=0x7fb9d4de57b0, pspec=0x7fb9bcee5280 [GParamString]) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1569
#5 0x00007fb9d7f8f73d in object_set_property (object=0x7fb9bc450960 [GstURIDecodeBin3], pspec=0x7fb9bcee5280 [GParamString], value=0x7fb9d4de57b0, nqueue=0x7fb9c40d0c40, user_specified=<optimized out>) at ../gobject/gobject.c:1794
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5968>
If GST_PAD_SINK is passed in this means that we're supposed to convert
from sink caps to src caps, not the other way around. In other words, if
GST_PAD_SINK is passed we're supposed to produce the possible output
caps.
Previously this was inverted. This had the effect that glcolorconvert
pretended to be able to convert *to* I420 without glDrawBuffers, which is
not possible, and pretended not to be able to convert *from* I420
without glDrawBuffers, which it always supports.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5941>
Even in the case where we are not in passthrough but the subclasses are
going to run the allocation query, we need to ensure that we have a
GLContext ready to be used. Otherwise we might end up with assertions
with `gloverlaycompositor` like:
```
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140285688829504) at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=140285688829504) at ./nptl/pthread_kill.c:78
#2 __GI___pthread_kill (threadid=140285688829504, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3 0x00007f985ed88476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4 0x00007f985ed6e7f3 in __GI_abort () at ./stdlib/abort.c:79
#5 0x00007f985faedb57 in g_assertion_message (domain=<optimized out>, file=<optimized out>, line=<optimized out>, func=0x7f9856251b80 <__func__.5> "gst_gl_buffer_pool_set_config", message=<optimized out>) at ../../../glib/gtestutils.c:3253
#6 0x00007f985fb4770f in g_assertion_message_expr (domain=0x7f9856251883 "GStreamer-GL", file=0x7f9856251820 "../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbufferpool.c", line=132, func=0x7f9856251b80 <__func__.5> "gst_gl_buffer_pool_set_config", expr=<optimized out>) at ../../../glib/gtestutils.c:3279
#7 0x00007f9856200e1f in gst_gl_buffer_pool_set_config (pool=0x7f977009d7e0, config=0x7f9704549050) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbufferpool.c:132
#8 0x00007f985f99bcf7 in gst_buffer_pool_set_config (pool=0x7f977009d7e0, config=0x7f9704549050) at ../subprojects/gstreamer/gst/gstbufferpool.c:698
#9 0x00007f985620e2be in gst_gl_filter_propose_allocation (trans=0x7f9754014a80, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglfilter.c:834
#10 0x00007f98562b43c5 in gst_gl_overlay_compositor_element_propose_allocation (trans=0x7f9754014a80, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/ext/gl/gstgloverlaycompositorelement.c:188
#11 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f9754014a80, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#12 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f9754014a80, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#13 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f977c07c7e0, parent=0x7f9754014a80, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#14 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f977c07c7e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#15 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f977c07c340, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#16 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f975401e2b0, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#17 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f975401e2b0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#18 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f975401e2b0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#19 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f96e420b0c0, parent=0x7f975401e2b0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#20 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f96e420b0c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#21 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a0bf0f0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#22 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a128790, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#23 0x00007f9856289017 in _gst_gl_upload_element_propose_allocation (bt=0x7f982a128790, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/ext/gl/gstgluploadelement.c:239
#24 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a128790, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#25 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f982a128790, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#26 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f96e405b630, parent=0x7f982a128790, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#27 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f96e405b630, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#28 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f9730289670, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#29 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f9730289670, data=0x7f96cea60000) at ../subprojects/gstreamer/gst/gstpad.c:3458
#30 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f98280f5d00, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60000) at ../subprojects/gstreamer/gst/gstpad.c:3084
#31 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f98280f5d00, parent=0x7f98280cc540, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#32 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f98280f5d00, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#33 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f978438b680, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#34 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f978438b680, data=0x7f96cea60290) at ../subprojects/gstreamer/gst/gstpad.c:3458
#35 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f98280f5a10, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60290) at ../subprojects/gstreamer/gst/gstpad.c:3084
#36 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f98280f5a10, parent=0x7f97ec0147f0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#37 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f98280f5a10, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#38 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f9784831a70, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#39 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f9784831a70, data=0x7f96cea60520) at ../subprojects/gstreamer/gst/gstpad.c:3458
#40 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f9770081da0, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60520) at ../subprojects/gstreamer/gst/gstpad.c:3084
#41 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f9770081da0, parent=0x7f983c14e330, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#42 0x00007f9812258e5c in ghostpad_query_function (ghostpad=0x7f9770081da0, parent=0x7f983c14e330, query=0x7f97040310a0) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:568
#43 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f9770081da0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#44 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2713e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#45 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2713e0, data=0x7f96cea60800) at ../subprojects/gstreamer/gst/gstpad.c:3458
#46 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2800c0, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60800) at ../subprojects/gstreamer/gst/gstpad.c:3084
#47 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2800c0, parent=0x7f982a2713e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#48 0x00007f9812258a94 in internalpad_query_function (internal=0x7f982a2800c0, parent=0x7f982a2713e0, query=0x7f97040310a0) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:460
#49 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2800c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#50 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2f4c80, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#51 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2f4c80, data=0x7f96cea60ae0) at ../subprojects/gstreamer/gst/gstpad.c:3458
#52 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2dfb00, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60ae0) at ../subprojects/gstreamer/gst/gstpad.c:3084
#53 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2dfb00, parent=0x7f982a2f4c80, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#54 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2dfb00, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#55 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2fbc10, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#56 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a2e87d0, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#57 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a2e87d0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#58 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2fb9c0, parent=0x7f982a2e87d0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#59 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2fb9c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#60 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2fb770, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#61 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a302780, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#62 0x00007f985c008d9d in gst_video_rate_propose_allocation (trans=0x7f982a302780, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst/videorate/gstvideorate.c:1365
#63 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a302780, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#64 0x00007f985c008cc5 in gst_video_rate_query (trans=0x7f982a302780, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst/videorate/gstvideorate.c:1347
#65 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2fb520, parent=0x7f982a302780, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#66 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2fb520, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#67 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2889c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#68 0x00007f98122048e6 in gst_base_auto_convert_internal_sink_query (pad=0x7f9750046af0, parent=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-bad/gst/autoconvert/gstbaseautoconvert.c:1381
#69 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f9750046af0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#70 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2c13e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#71 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2c13e0, data=0x7f96cea61680) at ../subprojects/gstreamer/gst/gstpad.c:3458
#72 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2de340, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea61680) at ../subprojects/gstreamer/gst/gstpad.c:3084
#73 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2de340, parent=0x7f982a2c13e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#74 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2de340, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#75 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2db760, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#76 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d8df0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#77 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2db510, parent=0x7f982a2d8df0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#78 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2db510, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#79 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2db2c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#80 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2dc3d0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#81 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2db070, parent=0x7f982a2dc3d0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#82 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2db070, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#83 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2dae20, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#84 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d8a60, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#85 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2dabd0, parent=0x7f982a2d8a60, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#86 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2dabd0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#87 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2c1170, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#88 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2c1170, data=0x7f96cea62060) at ../subprojects/gstreamer/gst/gstpad.c:3458
#89 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2de0e0, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea62060) at ../subprojects/gstreamer/gst/gstpad.c:3084
#90 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2de0e0, parent=0x7f982a2c1170, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#91 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2de0e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#92 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2da980, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#93 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a2c8c10, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#94 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a2c8c10, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#95 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2da730, parent=0x7f982a2c8c10, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#96 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2da730, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#97 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2da4e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#98 0x00007f985f8e7ff9 in gst_base_transform_do_bufferpool (trans=0x7f982a2d1a50, outcaps=0x7f970407aac0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:948
#99 0x00007f985f8e963e in gst_base_transform_setcaps (trans=0x7f982a2d1a50, pad=0x7f982a2da290, incaps=0x7f970407aac0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1351
#100 0x00007f985f8e99c8 in gst_base_transform_reconfigure_unlocked (trans=0x7f982a2d1a50) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1431
#101 0x00007f985f8e9d38 in gst_base_transform_default_query (trans=0x7f982a2d1a50, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1515
#102 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f982a2d1a50, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#103 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2da290, parent=0x7f982a2d1a50, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#104 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2da290, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#105 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2da040, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#106 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a2c88d0, decide_query=0x0, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#107 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a2c88d0, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#108 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d7d30, parent=0x7f982a2c88d0, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#109 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d7d30, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#110 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2b7d40, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#111 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2b7d40, data=0x7f96cea62cb0) at ../subprojects/gstreamer/gst/gstpad.c:3458
#112 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2c0f00, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea62cb0) at ../subprojects/gstreamer/gst/gstpad.c:3084
#113 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2c0f00, parent=0x7f982a2ba620, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:3529
#114 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2c0f00, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#115 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d7ae0, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#116 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d86d0, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#117 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d7890, parent=0x7f982a2d86d0, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#118 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d7890, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#119 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d7640, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#120 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d5b00, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#121 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d73f0, parent=0x7f982a2d5b00, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#122 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d73f0, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#123 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d71a0, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#124 0x00007f985f8e7ff9 in gst_base_transform_do_bufferpool (trans=0x7f982a2d8340, outcaps=0x7f9704004e30) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:948
#125 0x00007f985f8e963e in gst_base_transform_setcaps (trans=0x7f982a2d8340, pad=0x7f982a2d6f50, incaps=0x7f9704002120) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1351
#126 0x00007f985f8e99c8 in gst_base_transform_reconfigure_unlocked (trans=0x7f982a2d8340) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1431
#127 0x00007f985f8e9d38 in gst_base_transform_default_query (trans=0x7f982a2d8340, direction=GST_PAD_SINK, query=0x7f97045afe90) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1515
#128 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f982a2d8340, direction=GST_PAD_SINK, query=0x7f97045afe90) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#129 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d6f50, parent=0x7f982a2d8340, query=0x7f97045afe90) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#130 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d6f50, query=0x7f97045afe90) at ../subprojects/gstreamer/gst/gstpad.c:4202
#131 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d6d00, query=0x7f97045afe90) at ../subprojects/gstreamer/gst/gstpad.c:4334
#132 0x00007f985f8e7ff9 in gst_base_transform_do_bufferpool (trans=0x7f982a2d4920, outcaps=0x7f9704071fb0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:948
#133 0x00007f985f8e963e in gst_base_transform_setcaps (trans=0x7f982a2d4920, pad=0x7f982a2d6ab0, incaps=0x7f97500020c0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1351
#134 0x00007f985f8e99c8 in gst_base_transform_reconfigure_unlocked (trans=0x7f982a2d4920) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1431
#135 0x00007f985f8eb797 in default_submit_input_buffer (trans=0x7f982a2d4920, is_discont=0, inbuf=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2041
#136 0x00007f985f8ecb28 in gst_base_transform_chain (pad=0x7f982a2d6ab0, parent=0x7f982a2d4920, buffer=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2348
#137 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2d6ab0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#138 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a2d6860, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#139 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a2d6860, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#140 0x00007f985f8ecd2e in gst_base_transform_chain (pad=0x7f982a2d6610, parent=0x7f982a2c8590, buffer=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2391
#141 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2d6610, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#142 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a2de5a0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#143 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a2de5a0, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#144 0x00007f985f9ce428 in gst_proxy_pad_chain_default (pad=0x7f982a2c1650, parent=0x7f982a290880, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstghostpad.c:127
#145 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2c1650, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#146 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f97500468a0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#147 0x00007f985f9f61cc in gst_pad_push (pad=0x7f97500468a0, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#148 0x00007f9812203aa4 in gst_base_auto_convert_sink_chain (pad=0x7f982a288770, parent=0x7f982a22fbd0, buffer=0x7f972c009b70) at ../subprojects/gst-plugins-bad/gst/autoconvert/gstbaseautoconvert.c:1032
#149 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a288770, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#150 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a288520, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#151 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a288520, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#152 0x00007f985f8ecd2e in gst_base_transform_chain (pad=0x7f982a2882d0, parent=0x7f982a274570, buffer=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2391
#153 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2882d0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#154 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a288080, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#155 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a288080, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#156 0x00007f982499b9f9 in gst_queue_push_one (queue=0x7f9829d61910) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1388
#157 0x00007f982499c88d in gst_queue_loop (pad=0x7f982a288080) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1541
#158 0x00007f985fa376bb in gst_task_func (task=0x7f976002eb90) at ../subprojects/gstreamer/gst/gsttask.c:399
#159 0x00007f985fa38bf9 in default_func (tdata=0x7f975400c160, pool=0x7f984cb62380) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#160 0x00007f985fb566b4 in g_thread_pool_thread_proxy (data=<optimized out>) at ../../../glib/gthreadpool.c:350
#161 0x00007f985fb53a51 in g_thread_proxy (data=0x7f982a071580) at ../../../glib/gthread.c:827
#162 0x00007f985eddaac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#163 0x00007f985ee6ca40 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5856>
When overlay coordinates are updated, after the initial coordinates
are set, the shader indices are applied to the wrong buffer, resulting
in the background image appearing where the overlay should.
Bind the array buffer before applying subsequent coordinate
updates.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5901>
In `parse_chain_output_probe()` the corresponding input stream might receive EOS
and thus be removed before the actual pad is removed. So we cannot assert about
this in `parsebin_pad_removed_cb()`.
Also, driving-by, protect `find_input_stream_for_pad()` with the selection lock
similarly to other functions accessing the input streams list.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5887>
This causes a lot of nasty side effects (like decoders assuming they are
actually linked downstream).
The reason why this was done was to check whether a decoder could handle the
actual caps, but this is the wrong way to do it.
The proper way to query whether a decoder can handle certain caps is via
`GST_QUERY_ACCEPT_CAPS` which is already done just before.
Partially reverts !4677 and partially fixes#3160
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5821>
This allows metas to be serialized to be transmitted or stored. This is
intended to be used for example by gdppay or unixfdsink.
Implemented on GstCustomMeta, GstVideoMeta, GstReferenceTimestampMeta,
and GstAudioMeta.
Sponsored-by: Netflix Inc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5355>
Otherwise if there is a huge gap it will only be considered a
discontinuity after another discont-time amount of buffers has passed.
Like this it will be immediately a discontinuity if the gap between the
expected and received time becomes bigger than the discont-time.
The last part of the test was actually testing for this behaviour and
expected the previous behaviour. Most other tests also had to be
adjusted because discont will now happen at slightly different times
than before.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5759>
Windows does not support fork() so all tests will run in a single
process, and global variables will be reused across multiple tests.
Thus, each test should reset global variables.
Also, setup pad chain/event functions before playing state
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5752>
Whenever that caps changes does not imply that a new segment will start.
Don't reset the last_ts if only the caps have changed. This fixes issues
if you have a stream without only first frame with TS=0, and have resolution
change happening. This was a regression introduced by !3059, which issue was
described in #1352. The reported issue is still fix after this change.
Fixes#1034
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5687>
The fake video decoder ignores input bitstream except
to enforce caps restrictions. It reads video width,
height and framerate from caps. Then it just pushes
video frames without doing any decoding.
The fake video decoder just draws a snake moving from
left to right in the middle of the frame. This is a
light weight drawing while it still provides an idea
about how smooth is the rendering.
The fake video decoder inherits from GstVideoDecoder.
It is useful to measure how smooth will be the whole
rendering pipeline if you had the most efficient video
decoder. Also useful to bisect issues for example when
suspecting issues in a specific video decoder.
Handles mpeg2, mpeg4, h263, h264, theora, vp8, wmv3, msmpeg,
flash-video, vp6, vp9, wmv1, wmv2, divx but more can be
added if needed.
For now it can only output RGBA, RGBx, BGRA, BGRx.
Its rank is 0 (none) but I added a property to change it so
that it can be selected by decodebin.
gst-launch-1.0 fakevideodec rank=512 \
playbin uri=http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4http://bugzilla.gnome.org/show_bug.cgi?id=723778Closes#679
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5636>
From a multimedia perspective GLES >= 2 has the big advantage of
supporting external textures (`OES_EGL_image_external` /
`OES_EGL_image_external_essl3`), allowing various YUV formats to be
imported directly by drivers.
It appears unlikely by now that the extension will ever be ported to
GL with Vulkan becoming more popular, leaving GL without an "official"
way to import YUV formats.
Further more, for Gst internal purposes it's likely that GLES2 works
equally well if not better on most drivers these days, especially on
embedded devices.
Thus switch the default for EGL context creation to GLES2. This won't
affect apps that create their own context, but `gst-launch-1.0` etc.,
which are often used for testing so people don't have to pass
`GST_GL_API=gles2`.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5509>
By sealing for future writes, we broke Wayland SHM support. It seems like the
wayland library maps the SHM in read/write mode. This is visible through no
display and an error message like this:
wl_shm@7: error 2: failed mmap fd 43: Operation not permitted
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5684>
If text width ever reached 1px, for example after resizing the output window, the overlay would stop rendering
and never return again. The 1px condition itself does not seem to make much sense here anyway.
This was a chain of events: width reached 1, so the composition was set to NULL. Then, after resizing the output window,
push_frame() was called but would not attempt to renegotiate because composition is NULL. This caused the width/height
to never be updated again, as that only happens during negotiation, so the overlay was gone for good.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5614>
In rare cases - notably on macOS, because of multiple GL contexts - the lack of a sync point was causing overlays
to disappear for a frame after being redrawn, or sometimes not appear at all. This change makes sure that the display
in one GL context will be correctly synchronised with the other GL context where the overlay texture was uploaded.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5610>
There is no guarantee that g_get_user_runtime_dir() is in a tmpfs. Using
an explicit shared memory API seems safer for all POSIX platforms.
Note that Android does not have shm_open() and only added memfd_create()
since API level 30 (Android 11).
Sponsored-by: Netflix Inc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5328>
Followup to 75872c802b , clang version
While we ignore `discarded-qualifiers` already for gcc, clang seems
to assign this error to `incompatible-pointer-types-discards-qualifiers`
so we need to ignore that as well.
```
In file included from \
../subprojects/gst-plugins-base/ext/cdparanoia/gstcdparanoiasrc.h:37: \
/usr/include/cdda/cdda_interface.h:164:3: error: initializing 'char *' with an expression \
of type 'const char [8]' discards qualifiers [-Werror, \
-Wincompatible-pointer-types-discards-qualifiers]
"Success",
^~~~~~~~~
```
See 75872c802b for more
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5474>
In _gl_memory_upload_propose_allocation(), when output target is "external-oes",
then we should not provide GL allocator and pool in the allocation query.
This is because the "external-oes" kind memory can never be mapped directly
and the upstream element may misuse it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5468>
The propose and decide allocation vfuncs are called directly from
basetransform and need to use the locked accessor function for
retrieving a reliable reference to the GstGLContext (if available)
Fixes spurious crashes on shutdown during pad reconfiguration
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5437>
The number of planes is a meta we carry around in the GstVideoMeta with
DMA_DRM format. In cannot be decuded correctly from knowledge of the
base format. Notably, some compression modifier may introduce an extra
plane to store the compression parameters.
So use n_planes from GstVideoMeta and pass this explicitly when
importing to EGLImage.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5461>
The DMAbuf accept function was ensuring the in_dma_info values was valid if
the in_caps have change. But the check was bogus since the in_caps was being
modified without a pointer change. As a side effect, on the second accept
call, the drm_fourcc was reset to 0, which cause the uploader to fallback.
Fix this by ensuring we always have a valid dma_frm info directly in the
set_caps() function. Also remove the bogus caps changed check and remove any
modification to the info structure and always do that inner checks.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5461>
DRM Modifiers are not generically transferrable from a format like NV12 to
their indirect shading format (R8 / RG88). So the helper to this do needs
to be removed from our API.
To make things worse, we support indirect formats that aren't DRM format in
the first place. Notably NV12_16L32 (aka MM21) is not (yet) a DRM format. Yet,
each plane can be indirectly imported using R8/RG88 and a detiling shader.
This patch also removes this constraint restoring zero-copy playback on
Mediatek SoC.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5461>
Update connection-speed at runtime in playbin, uridecodebin and decodebin
also do the same thing in urisourcebin.
With contributions from Philippe Normand <philn@igalia.com> (build fixes and
rebase on mono-repo).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4713>
This was causing a memory leak in cases like `gltestsrc ! gltransformation scale-x=0.5 ! glimagesink`.
Parent meta was being added in assumption that those buffers are different, which was not the case here,
creating a reference loop and never freeing the buffer.
Co-authored-by: Matthew Waters <matthew@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5445>
Back in the mists of time[1], we switched `giostream*` elements to not close the
stream on stop() so that applications that needed a handle to the stream after
the element stopped had it.
Unfortunately, we also have cases[2] where waiting for the element to be
finalized is too late for the stream to be closed.
In order to not change the behaviour of the element, we add a property to allow
users to select the desired behaviour.
[1]: https://bugzilla.gnome.org/show_bug.cgi?id=587896
[2]: gst-plugins-rs#423
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5372>
By using the gst_caps_set_simple() to set the format on all structures, the
compositor may create invalid combinations as the caps may contain passthrough
caps. Avoid this issue by intersecting the resul with its original.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5386>
Adds list of formats that should be used by element in needs to passthrough
video. It contains the full list of video format plus DMA_DRM format
and will be extended in the future as needed. This patches includes 3 new
symbols:
- GST_VIDEO_FORMATS_ANY_STR
- GST_VIDEO_FORMATS_ANY
- gst_video_formats_any()
The last one can be used by bindings or for code that prefers having
GstVideoFormat values instead of strings.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5386>
Right now we split the RTP header from the current buffer into a new
buffer and aggregate those buffers for later processing if the
depayloader creates an output buffer.
This is cumbersome as it happens even if none of the incoming RTP
buffers carries RTP header extensions at all just because header
aggregation has been enabled in the depayloader class.
This commit will start aggregation only in case that there really are
RTP header extensions available on an incoming RTP buffer. The check
is trivial and cheap. Once activated we keep aggregation active for
all buffers. The active state is reset on state change READY_TO_PAUSE.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5278>
The GST_VIDEO_FORMAT_Y410, GST_VIDEO_FORMAT_Y412_LE and GST_VIDEO_FORMAT_Y412_BE
formats in fact are packed formats, which have just 1 plane. But we have special
setting for them rather than using get_single_planar_format_gl_swizzle_order().
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5314>
As we don't have any mapping from YUV formats + modifiers to an equivalent
emulated format (e.g. NV12 + modifier -> R8+modifier/RG88+modifier), do no
allow these formats to be used with the indirect DMABuf uploader.
Fixes#2942
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5270>
The same is done in the set_property function. This was noticed when attempting
to dump a pipeline containing glsinkbin sink=gtk4paintablesink to dot format.
Critical warnings were raised due to the missing force-aspect-ratio property on
that sink.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5311>