Commit graph

5096 commits

Author SHA1 Message Date
Tim-Philipp Müller
4f73d3cf80 decodebin2: fix pad leak and problem with GWeakRef code
Follow-up to !160 and commit 6a99ad2c.

Firstly, don't leak the sinkpad. g_weak_ref_get() returns
a strong reference (unless it returns NULL), so that must
be unrefed, as detected by the playbin-complex and
discoverer unit tests.

Next, if we do that we get invalid memory access when the
final pad ref is dropped a few lines below after the
request pad is released. The reason for this is that
GWeakRefs are not movable once they're in use, because
their address will be stored inside the object. In this
case the GWeakRef was embedded inside the GstDemuxerPad
struct which in turn was embedded inside the GArray data
section, and when the GArray gets resized, the structs
move. Just KISS and use a list with individual allocations
for each DemuxerPad instead.
2019-03-24 21:55:43 +00:00
Thibault Saunier
6a99ad2c02 decodebin2: Make sure to remove probes when free GstDecodeGroup
Nothing guarantees that when we free a DecodeGroup the demuxer pads
have already been freed and thus the probes have been removed meaning
that in some case it is possible that the pad probes still get called
*after* the GstDecodeGroup is freed, leading to segfaults (as we use
the freed group in that function).

Sample stack trace when that happens:

  #0  sink_pad_query_probe (pad=pad@entry=0x7fe654027180, info=info@entry=0x7ffe433bf270, user_data=0x7fe668076f80) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin2.c:3004
  3004          if (last_group->reqpads) {
  [Current thread is 1 (Thread 0x7fe69d8a0880 (LWP 24366))]
  Missing separate debuginfos, use: dnf debuginfo-install elfutils-libelf-0.176-1.fc29.x86_64 elfutils-libs-0.176-1.fc29.x86_64 libXcursor-1.1.15-4.fc29.x86_64 libXi-1.7.9-8.fc29.x86_64 libgpg-error-1.33-1.fc29.x86_64 libvpx-1.7.0-7.fc29.x86_64 soundtouch-2.1.1-1.fc29.x86_64
  (gdb) bt
  #0  0x00007fe68f7f3430 in sink_pad_query_probe (pad=pad@entry=0x7fe654027180 [GstMultiQueuePad], info=info@entry=0x7ffe433bf270, user_data=0x7fe668076f80) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin2.c:3004
  #1  0x00007fe69e79815e in probe_hook_marshal (hook=0x7fe63003a840, data=0x7ffe433bf160) at ../subprojects/gstreamer/gst/gstpad.c:3565
  #2  0x00007fe69e5774cc in g_hook_list_marshal (hook_list=hook_list@entry=0x7fe654027218, may_recurse=may_recurse@entry=1, marshaller=marshaller@entry=0x7fe69e797d40 <probe_hook_marshal>, data=data@entry=0x7ffe433bf160) at ghook.c:672
  #3  0x00007fe69e797823 in do_probe_callbacks (pad=pad@entry=0x7fe654027180 [GstMultiQueuePad], info=info@entry=0x7ffe433bf270, defaultval=defaultval@entry=GST_FLOW_OK) at ../subprojects/gstreamer/gst/gstpad.c:3727
  #4  0x00007fe69e7a25fd in gst_pad_peer_query (pad=pad@entry=0x7fe654027180 [GstMultiQueuePad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4194
  #5  0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe654027180 [GstMultiQueuePad], data=data@entry=0x7ffe433bf3c0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #6  0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6540273d0 [GstPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433bf3c0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #7  0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe6540273d0 [GstPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #8  0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe6540273d0 [GstPad], parent=0x7fe61c035e00 [GstMultiQueue], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #9  0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6540273d0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #10 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe648019620 [GstPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #11 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe648019620 [GstPad], data=data@entry=0x7ffe433bf6f0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #12 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe62000a9b0 [GstPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433bf6f0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #13 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=pad@entry=0x7fe62000a9b0 [GstPad], parent=<optimized out>, query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #14 0x00007fe69e0594d6 in gst_video_decoder_src_query_default (dec=0x7fe63001e290 [GstVP8Dec], query=0x7fe67803f140) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c:1684
  #15 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe62000a9b0 [GstPad], parent=0x7fe63001e290 [GstVP8Dec], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #16 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe62000a9b0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #17 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe630054300 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #18 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe630054300 [GstProxyPad], data=data@entry=0x7ffe433bfa80) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #19 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe660047810 [GstDecodePad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433bfa80) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #20 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe660047810 [GstDecodePad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #21 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe660047810 [GstDecodePad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #22 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe654076cf0 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #23 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe654076cf0 [GstProxyPad], data=data@entry=0x7ffe433bfce0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #24 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe668037720 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433bfce0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #25 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe668037720 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #26 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe668037720 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #27 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa762c0 [GstPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #28 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xa762c0 [GstPad], data=data@entry=0x7ffe433bff40) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #29 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0xa76510 [GstPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433bff40) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #30 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=pad@entry=0xa76510 [GstPad], parent=parent@entry=0x7fe67002b240 [GstQueue], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #31 0x00007fe68f7bd321 in gst_queue_handle_src_query (pad=0xa76510 [GstPad], parent=0x7fe67002b240 [GstQueue], query=0x7fe67803f140) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1619
  #32 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa76510 [GstPad], parent=0x7fe67002b240 [GstQueue], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #33 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa76510 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #34 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa770a0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #35 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0xa6f4d0 [GstVideoConvert], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #36 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa772f0 [GstPad], parent=0xa6f4d0 [GstVideoConvert], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #37 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa772f0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #38 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa779e0 [GstPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #39 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xa779e0 [GstPad], data=data@entry=0x7ffe433c0550) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #40 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0xa77c30 [GstPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c0550) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #41 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=pad@entry=0xa77c30 [GstPad], parent=parent@entry=0xa7f800 [GstDeinterlace], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #42 0x00007fe68c0449a7 in gst_deinterlace_src_query (pad=0xa77c30 [GstPad], parent=0xa7f800 [GstDeinterlace], query=0x7fe67803f140) at ../subprojects/gst-plugins-good/gst/deinterlace/gstdeinterlace.c:3265
  #43 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa77c30 [GstPad], parent=0xa7f800 [GstDeinterlace], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #44 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa77c30 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #45 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa76760 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #46 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0xa46860 [GstFramePositioner], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #47 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa769b0 [GstPad], parent=0xa46860 [GstFramePositioner], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #48 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa769b0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #49 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa76c00 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #50 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0xa7eb20 [GstVideoScale], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #51 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa76e50 [GstPad], parent=0xa7eb20 [GstVideoScale], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #52 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa76e50 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #53 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa77540 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #54 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0xa6f980 [GstVideoRate], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #55 0x00007fe68f7369f0 in gst_video_rate_query (trans=0xa6f980 [GstVideoRate], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gst-plugins-base/gst/videorate/gstvideorate.c:1115
  #56 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa77790 [GstPad], parent=0xa6f980 [GstVideoRate], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #57 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa77790 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #58 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa82120 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #59 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0xa172a0 [GstCapsFilter], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #60 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa82370 [GstPad], parent=0xa172a0 [GstCapsFilter], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #61 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa82370 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #62 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa44c70 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #63 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xa44c70 [GstProxyPad], data=data@entry=0x7ffe433c13a0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #64 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6700271e0 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c13a0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #65 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe6700271e0 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #66 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6700271e0 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #67 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa447b0 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #68 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xa447b0 [GstProxyPad], data=data@entry=0x7ffe433c1600) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #69 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe670026f60 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c1600) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #70 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe670026f60 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #71 0x00007fe68f54bb18 in ghostpad_query_function (ghostpad=0x7fe670026f60 [GstGhostPad], parent=0xa2a870 [NleSource], query=0x7fe67803f140) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:556
  #72 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe670026f60 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #73 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe61c00ab30 [GstGhostPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #74 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe61c00ab30 [GstGhostPad], data=data@entry=0x7ffe433c18c0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #75 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6680ccab0 [GstProxyPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c18c0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #76 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe6680ccab0 [GstProxyPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #77 0x00007fe68f54b6a9 in internalpad_query_function (internal=0x7fe6680ccab0 [GstProxyPad], parent=0x7fe61c00ab30 [GstGhostPad], query=0x7fe67803f140) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:448
  #78 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6680ccab0 [GstProxyPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #79 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe66800e510 [GESSmartMixerPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #80 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe66800e510 [GESSmartMixerPad], data=data@entry=0x7ffe433c1b80) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #81 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6680cc5f0 [GstProxyPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c1b80) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #82 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe6680cc5f0 [GstProxyPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #83 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6680cc5f0 [GstProxyPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #84 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe66805ee60 [GstGhostPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #85 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe66805ee60 [GstGhostPad], data=data@entry=0x7ffe433c1de0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #86 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe654077d90 [GstProxyPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c1de0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #87 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe654077d90 [GstProxyPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #88 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe654077d90 [GstProxyPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #89 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe654027ac0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #90 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0x7fe6680c71d0 [GstVideoConvert], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #91 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe654026a90 [GstPad], parent=0x7fe6680c71d0 [GstVideoConvert], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #92 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe654026a90 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #93 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe6680cc850 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #94 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe6680cc850 [GstProxyPad], data=data@entry=0x7ffe433c22d0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #95 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6680374a0 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c22d0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #96 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe6680374a0 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #97 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6680374a0 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #98 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe6680c7e20 [GstCompositorPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #99 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe6680c7e20 [GstCompositorPad], data=data@entry=0x7ffe433c2530) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #100 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0xa24170 [GstAggregatorPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c2530) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #101 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0xa24170 [GstAggregatorPad], parent=<optimized out>, query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #102 0x00007fe69e0e5512 in gst_aggregator_default_src_query (self=0xa21e90 [GstCompositor], query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:1909
  #103 0x00007fe69e0547be in gst_video_aggregator_src_query (agg=0xa21e90 [GstCompositor], query=0x7fe67803f140) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideoaggregator.c:2022
  #104 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa24170 [GstAggregatorPad], parent=0xa21e90 [GstCompositor], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #105 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa24170 [GstAggregatorPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #106 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x9aac10 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #107 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0xa28280 [GstIdentity], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #108 0x00007fe68f79dfc4 in gst_identity_query (base=0xa28280 [GstIdentity], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/plugins/elements/gstidentity.c:957
  #109 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x9aae60 [GstPad], parent=0xa28280 [GstIdentity], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #110 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x9aae60 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #111 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x99cc40 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #112 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x99cc40 [GstProxyPad], data=data@entry=0x7ffe433c2c00) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #113 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x9aee40 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c2c00) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #114 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x9aee40 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #115 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x9aee40 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #116 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x99d100 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #117 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x99d100 [GstProxyPad], data=data@entry=0x7ffe433c2e60) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #118 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x9af0c0 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c2e60) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #119 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x9af0c0 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #120 0x00007fe68f54bb18 in ghostpad_query_function (ghostpad=0x9af0c0 [GstGhostPad], parent=0x99ce70 [NleOperation], query=0x7fe67803f140) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:556
  #121 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x9af0c0 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #122 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x99c2c0 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #123 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x99c2c0 [GstProxyPad], data=data@entry=0x7ffe433c3120) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #124 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x9ae1c0 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c3120) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #125 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x9ae1c0 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #126 0x00007fe68f54bb18 in ghostpad_query_function (ghostpad=0x9ae1c0 [GstGhostPad], parent=0xa16290 [NleComposition], query=0x7fe67803f140) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:556
  #127 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x9ae1c0 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #128 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x9aa080 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #129 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0xa165a0 [GstCapsFilter], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #130 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x9aa9c0 [GstPad], parent=0xa165a0 [GstCapsFilter], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #131 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x9aa9c0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #132 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x99c9e0 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #133 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x99c9e0 [GstProxyPad], data=data@entry=0x7ffe433c3670) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #134 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x9aebc0 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c3670) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #135 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x9aebc0 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #136 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x9aebc0 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #137 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x99d820 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #138 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x99d820 [GstProxyPad], data=data@entry=0x7ffe433c38d0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #139 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x9af840 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c38d0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #140 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x9af840 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #141 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x9af840 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #142 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe6780247d0 [GstPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #143 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe6780247d0 [GstPad], data=data@entry=0x7ffe433c3b30) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #144 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe684032780 [GstTeePad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c3b30) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #145 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe684032780 [GstTeePad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #146 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe684032780 [GstTeePad], parent=0x7383f0 [GstTee], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #147 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe684032780 [GstTeePad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #148 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe670026060 [GstGhostPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #149 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe670026060 [GstGhostPad], data=data@entry=0x7ffe433c3e60) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #150 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x99dce0 [GstProxyPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c3e60) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #151 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x99dce0 [GstProxyPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #152 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x99dce0 [GstProxyPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #153 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa8d6b0 [GstPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #154 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xa8d6b0 [GstPad], data=data@entry=0x7ffe433c40c0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #155 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0xa8d900 [GstPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c40c0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #156 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0xa8d900 [GstPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #157 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0xa8d900 [GstPad], parent=0x9f6060 [GstStreamSynchronizer], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #158 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xa8d900 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #159 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xad5a80 [GstGhostPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #160 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xad5a80 [GstGhostPad], data=data@entry=0x7ffe433c43f0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #161 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6680275b0 [GstProxyPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c43f0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #162 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe6680275b0 [GstProxyPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #163 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6680275b0 [GstProxyPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #164 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa39580 [GstPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #165 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xa39580 [GstPad], data=data@entry=0x7ffe433c4650) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #166 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6780240e0 [GstPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c4650) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #167 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=pad@entry=0x7fe6780240e0 [GstPad], parent=parent@entry=0x7fe66800e7b0 [GstQueue], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #168 0x00007fe68f7bd321 in gst_queue_handle_src_query (pad=0x7fe6780240e0 [GstPad], parent=0x7fe66800e7b0 [GstQueue], query=0x7fe67803f140) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1619
  #169 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe6780240e0 [GstPad], parent=0x7fe66800e7b0 [GstQueue], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #170 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6780240e0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #171 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xad5580 [GstGhostPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #172 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0xad5580 [GstGhostPad], data=data@entry=0x7ffe433c49d0) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #173 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0x7fe6680270f0 [GstProxyPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c49d0) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #174 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0x7fe6680270f0 [GstProxyPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #175 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe6680270f0 [GstProxyPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #176 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe6780255b0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #177 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0x7fe674032fa0 [GstVideoConvert], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #178 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe678025a50 [GstPad], parent=0x7fe674032fa0 [GstVideoConvert], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #179 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe678025a50 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #180 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe678025800 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #181 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0x7fe6740346d0 [GstVideoScale], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #182 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe678025360 [GstPad], parent=0x7fe6740346d0 [GstVideoScale], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #183 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe678025360 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #184 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe678024580 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #185 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0x7fe674011950 [GstVideoBalance], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #186 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe678025110 [GstPad], parent=0x7fe674011950 [GstVideoBalance], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #187 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe678025110 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #188 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0xa8d460 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #189 0x00007fe69e118c6b in gst_base_transform_default_query (trans=0x7fe674037330 [GstVideoConvert], direction=GST_PAD_SRC, query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1557
  #190 0x00007fe69e6a60e9 in gst_validate_pad_monitor_query_func (pad=0x7fe678024ec0 [GstPad], parent=0x7fe674037330 [GstVideoConvert], query=0x7fe67803f140) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2378
  #191 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0x7fe678024ec0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #192 0x00007fe69e7a263b in gst_pad_peer_query (pad=pad@entry=0x7fe668027350 [GstProxyPad], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #193 0x00007fe69e7a2c2c in query_forward_func (pad=pad@entry=0x7fe668027350 [GstProxyPad], data=data@entry=0x7ffe433c5670) at ../subprojects/gstreamer/gst/gstpad.c:3376
  #194 0x00007fe69e7a0aae in gst_pad_forward (pad=pad@entry=0xad5800 [GstGhostPad], forward=forward@entry=0x7fe69e7a2b70 <query_forward_func>, user_data=user_data@entry=0x7ffe433c5670) at ../subprojects/gstreamer/gst/gstpad.c:3008
  #195 0x00007fe69e7a0ea2 in gst_pad_query_default (pad=0xad5800 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:3447
  #196 0x00007fe68f84ad95 in gst_play_sink_convert_bin_query (pad=0xad5800 [GstGhostPad], parent=<optimized out>, query=0x7fe67803f140) at ../subprojects/gst-plugins-base/gst/playback/gstplaysinkconvertbin.c:525
  #197 0x00007fe69e7a1ee0 in gst_pad_query (pad=pad@entry=0xad5800 [GstGhostPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4071
  #198 0x00007fe69e7a263b in gst_pad_peer_query (pad=0xa380b0 [GstPad], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstpad.c:4203
  #199 0x00007fe69e10564c in default_element_query (element=0xa369f0 [GstFakeSink], query=0x7fe67803f140) at ../subprojects/gstreamer/libs/gst/base/gstbasesink.c:5034
  #200 0x00007fe69e77f8f0 in gst_element_query (element=0xa369f0 [GstFakeSink], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstelement.c:1959
  #201 0x00007fe69e7584f7 in bin_query_generic_fold (vitem=<optimized out>, ret=0x7ffe433c59d0, fold=0x7ffe433c5a60) at ../subprojects/gstreamer/gst/gstbin.c:4232
  #202 0x00007fe69e78ffcc in gst_iterator_fold (it=it@entry=0x744820, func=func@entry=0x7fe69e758460 <bin_query_generic_fold>, ret=ret@entry=0x7ffe433c59d0, user_data=user_data@entry=0x7ffe433c5a60) at ../subprojects/gstreamer/gst/gstiterator.c:617
  #203 0x00007fe69e758b82 in bin_iterate_fold (bin=bin@entry=0xa19d80 [GstBin], iter=iter@entry=0x744820, fold_init=fold_init@entry=0x0, fold_done=fold_done@entry=0x0, fold_func=fold_func@entry=0x7fe69e758460 <bin_query_generic_fold>, fold_data=fold_data@entry=0x7ffe433c5a60, default_return=0) at ../subprojects/gstreamer/gst/gstbin.c:4259
  #204 0x00007fe69e75e776 in gst_bin_query (element=0xa19d80 [GstBin], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstbin.c:4379
  #205 0x00007fe69e77f8f0 in gst_element_query (element=0xa19d80 [GstBin], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstelement.c:1959
  #206 0x00007fe69e7584f7 in bin_query_generic_fold (vitem=<optimized out>, ret=0x7ffe433c5ba0, fold=0x7ffe433c5c30) at ../subprojects/gstreamer/gst/gstbin.c:4232
  #207 0x00007fe69e78ffcc in gst_iterator_fold (it=it@entry=0x744cf0, func=func@entry=0x7fe69e758460 <bin_query_generic_fold>, ret=ret@entry=0x7ffe433c5ba0, user_data=user_data@entry=0x7ffe433c5c30) at ../subprojects/gstreamer/gst/gstiterator.c:617
  #208 0x00007fe69e758b82 in bin_iterate_fold (bin=bin@entry=0x9f42e0 [GstPlaySink], iter=iter@entry=0x744cf0, fold_init=fold_init@entry=0x0, fold_done=fold_done@entry=0x0, fold_func=fold_func@entry=0x7fe69e758460 <bin_query_generic_fold>, fold_data=fold_data@entry=0x7ffe433c5c30, default_return=0) at ../subprojects/gstreamer/gst/gstbin.c:4259
  #209 0x00007fe69e75e776 in gst_bin_query (element=0x9f42e0 [GstPlaySink], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstbin.c:4379
  #210 0x00007fe69e77f8f0 in gst_element_query (element=0x9f42e0 [GstPlaySink], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstelement.c:1959
  #211 0x00007fe69e7584f7 in bin_query_generic_fold (vitem=<optimized out>, ret=0x7ffe433c5d70, fold=0x7ffe433c5e00) at ../subprojects/gstreamer/gst/gstbin.c:4232
  #212 0x00007fe69e78ffcc in gst_iterator_fold (it=it@entry=0x7448d0, func=func@entry=0x7fe69e758460 <bin_query_generic_fold>, ret=ret@entry=0x7ffe433c5d70, user_data=user_data@entry=0x7ffe433c5e00) at ../subprojects/gstreamer/gst/gstiterator.c:617
  #213 0x00007fe69e758b82 in bin_iterate_fold (bin=bin@entry=0x9ee0a0 [GESPipeline], iter=iter@entry=0x7448d0, fold_init=fold_init@entry=0x0, fold_done=fold_done@entry=0x0, fold_func=fold_func@entry=0x7fe69e758460 <bin_query_generic_fold>, fold_data=fold_data@entry=0x7ffe433c5e00, default_return=0) at ../subprojects/gstreamer/gst/gstbin.c:4259
  #214 0x00007fe69e75e776 in gst_bin_query (element=0x9ee0a0 [GESPipeline], query=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstbin.c:4379
  #215 0x00007fe69e77f8f0 in gst_element_query (element=0x9ee0a0 [GESPipeline], query=query@entry=0x7fe67803f140) at ../subprojects/gstreamer/gst/gstelement.c:1959
  #216 0x00007fe69e6b5d01 in _check_position (rate=0x7ffe433c5ee0, position=0x7ffe433c5ee8, act=0xaa82a0, scenario=0x9fe250 [GstValidateScenario]) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c:1658
  #217 0x00007fe69e6b5d01 in execute_next_action (scenario=scenario@entry=0x9fe250 [GstValidateScenario]) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c:2107
  #218 0x00007fe69e587b31 in g_timeout_dispatch (source=0xaa7da0, callback=0x7fe69e6b5830 <execute_next_action>, user_data=0x9fe250) at gmain.c:4667
  #219 0x00007fe69e58706d in g_main_dispatch (context=0x71bc50) at gmain.c:3182
  #220 0x00007fe69e58706d in g_main_context_dispatch (context=context@entry=0x71bc50) at gmain.c:3847
  #221 0x00007fe69e587438 in g_main_context_iterate (context=context@entry=0x71bc50, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3920
  #222 0x00007fe69e5874d0 in g_main_context_iteration (context=context@entry=0x71bc50, may_block=may_block@entry=1) at gmain.c:3981
  #223 0x00007fe69e3dfd25 in g_application_run (application=0x71c1f0 [GESLauncher], argc=argc@entry=6, argv=argv@entry=0x7ffe433c61c8) at gapplication.c:2470
  #224 0x000000000040393c in main (argc=6, argv=0x7ffe433c61c8) at ../subprojects/gst-editing-services/tools/ges-launch.c:88
  (gdb) p last_group
  $1 = (GstDecodeGroup *) 0x52c
  (gdb) p group
  $2 = (GstDecodeGroup *) 0x7fe668076f80
  (gdb) p group->parent
  $3 = (GstDecodeChain *) 0x7fe6680774c0
  (gdb) p group->parent->next_group
  There is no member named next_group.
  (gdb) group->parent->next_groups
  Undefined command: "group->parent->next_groups".  Try "help".
  (gdb) p group->parent->next_groups
  $4 = 0x7fe660004280 = {0x528, 0x529, 0x52a, 0x52b, 0x52c}
  (gdb) p *group->parent->next_groups
  $5 = {data=0x528, next=0x7fe668077500, prev=0x7fe64c04ab80}
  (gdb) p *group
  $6 = {dbin = 0x52a, parent = 0x7fe6680774c0, multiqueue = 0x7fe668077500, overrunsig = 167503724544, overrun = 1, no_more_pads = 0, drained = 1745725152, children = 0xa19220 = {0x73d400, <error reading variable>
  (gdb)  Quit
  (gdb)
2019-03-18 11:37:43 +00:00
Vivia Nikolaidou
8ecc3b9730 videorate: Add max-duplication-time property
This will only duplicate buffers if the gap between two consecutive
buffers is up to fill-until nsec. If it's larger, it will only output
the new buffer and mark it as discont.
2019-02-21 15:50:55 +00:00
Thibault Saunier
1a5fb98e53 typefindfunctions: Add a function to typefind xges files 2019-01-29 15:56:12 +00:00
Jordan Petridis
5396ef6e45 subparse: do not assert when failing to parse subrip timestamp
If a badly formatted was passed into `parse_subrip_time` it would
assert instead of exiting gracefully. This is problematic since
the input is provided by the user, and will trigger a crash.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/532
2019-01-14 11:43:57 +00:00
Jan Alexander Steffens (heftig)
8cffa72356 videoscale: Round when fixating to nearest ints to reduce error 2019-01-14 10:18:21 +00:00
Jan Alexander Steffens (heftig)
89519e8809 videoscale: Choose the best dimensions for fixed PAR
We might not get an exact match for width or height if stepped ranges
are involved.
2019-01-14 10:18:21 +00:00
Tim-Philipp Müller
4d603b00d7 Fix some typos in code comments
And don't use gtk-doc chunk markers for internal functions.
2019-01-11 11:27:11 +00:00
Carlos Rafael Giani
c656cfb170 audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)

The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.

This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.

The patch also applies some minor cleanup to the audiotestsrc documentation.
2019-01-10 16:15:47 +00:00
Tim-Philipp Müller
2972b673c0 compositor: add to build after move from -bad
This replaces videomixer.

Fixes #138
2018-12-28 12:16:18 +01:00
Tim-Philipp Müller
f11571f398 Move GstVideoAggregator, compositor and OpenGL mixers from -bad
Merge branch 'videoaggregator-compositor-glmixers-move'

Fixes #137 and #138.
2018-12-28 12:15:39 +01:00
Sebastian Dröge
493d47dca3 typefindfunctions: Extend MCC typefinder to also cover version 2.0
Both versions are basically the same, but version 2.0 also allows
60000/1001 as framerate and allows to specify the field and line number
for each payload.

Put the major version into the caps so that elements can limit via caps
negotiation which versions they can support.
2018-12-28 08:02:11 +00:00
Jordan Petridis
70bfb3885b
typefind: Add SCC and MCC files support 2018-12-26 11:47:08 +02:00
Mathieu Duponchelle
1edb2c4242 audio-converter: add API to determine passthrough mode
audioconvert's passthrough status can no longer be determined
strictly from input / output caps equality, as a mix-matrix can
now be specified.

We now call gst_base_transform_set_passthrough dynamically, based
on the return from the new gst_audio_converter_is_passthrough()
API, which takes the mix matrix into account.
2018-12-17 14:23:49 +00:00
Mathieu Duponchelle
98386927ee audioconvert: disable passthrough_on_same_caps
Now that audioconvert exposes a mix-matrix property, input and
output caps may be equal, but the mix-matrix still needs to be
applied.

Fixes #521
2018-12-17 14:23:49 +00:00
Jan Alexander Steffens (heftig)
29d6f1c698 typefind: Fix a maybe-uninitialized warning
Arch Linux, GCC 8.2.1+20181127, CFLAGS='-Og -g3'
2018-12-05 21:08:33 +00:00
Edward Hervey
23d1440a60 urisourcebin: Avoid potential unitialized/wrong bitrate value
Only calculate and set the bitrate if all conditions are met.
2018-11-09 12:22:31 +01:00
Edward Hervey
18942d7875 urisourcebin: Fix previous commit
rebase wasn't correct :)
2018-11-07 16:28:28 +01:00
Matthew Waters
af166b5b22 urisourcebin: add a statistics property for queueing
It contains the minimum/maximum/average byte and time levels of the
queues inside this urisourcebin

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/60
2018-11-07 15:10:05 +00:00
Matthew Waters
81e00791bf uisourcebin: update forwarded properties on change
Allows changing queueing properties at runtime

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/60
2018-11-07 15:10:05 +00:00
Matthew Waters
784e621b54 urisourcebin: add low/high-watermark properties
These are forwarded to the contained queues.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/60
2018-11-07 15:10:05 +00:00
Matthew Waters
8b69b689c0 urisourcebin: limit the byte size of the queue based on the buffer-size
Use the bitrate advertised by queue2 to determine the limits to
set across possibly multiple queue2/downloadbuffer elements.  e.g.
with two queue2's and a max-bytes based on the ratio of the
bitrate/cumulative_bitrate multiplied by the buffer_size set on urisourcebin.

This allows finer grained control over the buffer used by all the queue
elements inside urisourcebin.  Instead of a maximum of
n_streams*buffer_size being used, only buffer_size will be used however
we will fallback to n_streams*buffer_size if one of the queue2's does
not have bitrate information.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/60
2018-11-07 15:10:05 +00:00
Matthew Waters
a8e2f76731 urisourcebin: remove unused instance variable streams 2018-11-07 15:10:05 +00:00
Tim-Philipp Müller
fb8a503fd4 compositor: update disted orc backup files 2018-11-02 20:31:54 +00:00
Philippe Normand
610fa16784 playbin3: New text-offset property
This new property controls the synchronisation offset between the text and video
streams. Positive values make the text ahead of the video and negative values
make the text go behind the video.

https://bugzilla.gnome.org/show_bug.cgi?id=797134
2018-11-01 09:52:34 +00:00
Philippe Normand
dc5006fa25 playbin: New text-offset property
This new property controls the synchronisation offset between the text and video
streams. Positive values make the text ahead of the video and negative values
make the text go behind the video.

https://bugzilla.gnome.org/show_bug.cgi?id=797134
2018-11-01 09:52:34 +00:00
Philippe Normand
ea3b074ead playsink: Add text-offset property
When the playsink contains a text chain this property controls the
synchronisation of the subtitles and video by controlling the underlying
subtitleoverlay::subtitle-ts-offset property.

https://bugzilla.gnome.org/show_bug.cgi?id=797134
2018-11-01 09:52:34 +00:00
Philippe Normand
3cd38be94b subtitleoverlay: Add a subtitle-ts-offset property
This property controls the synchronisation offset between text and video in
nanoseconds, by updating the parser src pad offset.

https://bugzilla.gnome.org/show_bug.cgi?id=797134
2018-11-01 09:52:34 +00:00
Víctor Manuel Jáquez Leal
95436fa667 compositor: Fix enum type mismatch
The variable blend_mode is GstCompositorBlendMode but it is
assigned to a GstCompositorOperator enum value.
2018-10-31 19:22:35 +01:00
Johan Bjäreholt
4ab4db11ec compositor: fix undeclared functions 2018-10-30 13:32:33 +01:00
Johan Bjäreholt
f780c718e7 overlaycomposition: Fix implicit use of memset
https://bugzilla.gnome.org/show_bug.cgi?id=797353
2018-10-29 13:12:30 +00:00
Sebastian Dröge
e87fa73e60 compositor: Implement different operators via per-pad property
This removes the crossfade-ratio property and replaces it with an
operator property. Currently this implements the following operators:

- SOURCE: Copy over the source and don't look at the destination
- OVER: Default blending of the source over the destination
- ADD: Like OVER but simply adding the alpha instead

See the example for how to implement crossfading with this.

https://bugzilla.gnome.org/show_bug.cgi?id=797169
2018-10-28 17:13:26 +00:00
Sebastian Dröge
088b4c0c52 overlaycomposition: New element that allows applications to draw GstVideoOverlayComposition on a stream
https://bugzilla.gnome.org/show_bug.cgi?id=797234
2018-10-28 17:03:47 +00:00
Sebastian Dröge
596a4ee12f parsebin: Add missing locks/unlocks of the chain mutex
Before freeing pending pads it is required to hold the mutex, that's
what is protecting the list of pending pads in other places.

https://bugzilla.gnome.org/show_bug.cgi?id=796935
2018-10-28 17:03:47 +00:00
Sebastian Dröge
c41439d16f compositor: Remove extra header for the pad declaration
There's no reason for having this separate apart from making things less
discoverable.
2018-10-27 13:59:57 +01:00
Roland Jon
a15baf7976 decodebin3: fix eos event leak
https://bugzilla.gnome.org/show_bug.cgi?id=796860
2018-10-18 13:03:31 +01:00
Seungha Yang
5adec0db4f meson: Replace empty configuration_data() with copy keyword
Use 'copy' keyword to avoid meson warning message.
Note that 'copy' keyword in configure_file() is available
since meson 0.47.0

https://bugzilla.gnome.org/show_bug.cgi?id=797298
2018-10-17 14:08:47 +01:00
Seungha Yang
3499d9ea64 meson: Replace empty configuration_data() with copy keyword
Use 'copy' keyword to avoid meson warning message.
Note that 'copy' keyword in configure_file() is available
since meson 0.47.0

https://bugzilla.gnome.org/show_bug.cgi?id=797298
2018-10-17 13:48:47 +01:00
Matej Knopp
18f082a0d8 audioconvert: remove layout from structure when fixating caps
otherwise caps intersection always fails when converting non-interleaved to interleaved audio

https://bugzilla.gnome.org/show_bug.cgi?id=797225
2018-10-05 15:40:13 +03:00
Johan Bjäreholt
448ed0f244 Removed unused GST_CAT_PERFORMANCE
https://bugzilla.gnome.org/show_bug.cgi?id=797175
2018-09-19 15:06:19 +03:00
Philippe Normand
62e4e15245 playsink: audio visualization support fixes
The queue between the audiotee and the audio chain wasn't properly added to the
bin, leading to streamsynchronizer locks on EOS. Reconfiguration of the
visualization chain wasn't working as expected either. It is now possible to
dynamically enable/disable the audio visualization support.

https://bugzilla.gnome.org/show_bug.cgi?id=796553
2018-08-16 17:17:42 +01:00
Sebastian Dröge
5485a2b9ee compositor: Define crossfade-ratio to have range [0.0,1.0]
Previously negative values had the same effect as 0.0, which was
confusing.

https://bugzilla.gnome.org/show_bug.cgi?id=796845
2018-08-16 17:08:06 +03:00
Nirbheek Chauhan
eadedc68f8 meson: Add feature options for all plugins
GL dependency detection is still automagic.

https://bugzilla.gnome.org/show_bug.cgi?id=795107
2018-07-27 18:42:11 +05:30
Sebastian Dröge
3e067ae333 compositor: Don't leak all buffers while crossfading and not all pads are crossfading 2018-07-26 00:20:02 +03:00
Sebastian Dröge
aa3e64c71d compositor: Use 255 as maximum alpha instead of 256
255 will easily become 0 in the blending function as they expect
the maximum value to be 255.

Can be reproduce with

gst-launch-1.0 videotestsrc pattern=ball ! c.sink_0 \
               videotestsrc pattern=snow ! c.sink_1 \
               compositor name=c \
                 sink_0::zorder=0 sink_1::zorder=1 sink_0::crossfade-ratio=0.5 \
                 background=black ! \
               videoconvert ! xvimagesink

crossfade-ratio +/- 0.001 makes it work correctly and the same happens
at e.g. 0.25, 0.75, N*0.0625

https://bugzilla.gnome.org/show_bug.cgi?id=796846
2018-07-23 18:59:33 +03:00
Justin Kim
4fa850e3e6 audiorate: accumulate offset by time diff
The fomula, 'offset = time / rate', is correct only if
the rate is never changed. When the rate is changed,
the offset should be re-calculated based on the previous
offset.

https://bugzilla.gnome.org/show_bug.cgi?id=791269
2018-07-19 18:19:19 -04:00
Seungha Yang
4380d57779 compositor: Update conversion info in property setter
... not in getter. Otherwise, video-converter will not be updated
with new width/height

https://bugzilla.gnome.org/show_bug.cgi?id=796828
2018-07-18 14:41:31 +03:00
Wonchul Lee
53ae7df2e2 urisourcebin: Rename urisourcebin variable and query functions
https://bugzilla.gnome.org/show_bug.cgi?id=770693
2018-07-18 11:11:50 +02:00
Seungha Yang
e3362e459b urisourcebin: Set streams-aware flag
https://bugzilla.gnome.org/show_bug.cgi?id=777213

https://bugzilla.gnome.org/show_bug.cgi?id=775132
2018-07-18 09:22:56 +02:00
Guillaume Desmottes
86b0802378 rawvideoparse: fix typo in 'plane-offsets' description
The property is 'plane-offsets', not 'plane-offset' so the example in
the description was wrong.

https://bugzilla.gnome.org/show_bug.cgi?id=796817
2018-07-16 13:14:34 +02:00
George Kiagiadakis
09171b11ac audiorate: fix support for non-interleaved buffers
https://bugzilla.gnome.org/show_bug.cgi?id=796741
2018-07-12 13:38:27 +03:00
George Kiagiadakis
a498d3fe6e adder: remove non-interleaved layout from caps
adder needs more than just trivial work to support planar buffers properly
because it currently reads sub-buffers from GstCollectPads in order for all
of them to have matching sizes. In planar mode, this means it would truncate
some channels and mix them up in strange ways. It only works if all input
buffers in all sink pads have matching sizes.
2018-07-11 16:56:50 +03:00
George Kiagiadakis
114f0abbd7 audioresample: implement support for non-interleaved buffers
https://bugzilla.gnome.org/show_bug.cgi?id=705986
2018-07-11 16:26:13 +03:00
George Kiagiadakis
0eda002cfd audioconvert: implement support for converting between interleaved and non-interleaved layouts
https://bugzilla.gnome.org/show_bug.cgi?id=705986
2018-07-11 16:26:13 +03:00
George Kiagiadakis
f6f8b979d6 audiotestsrc: implement producing non-interleaved audio buffers
https://bugzilla.gnome.org/show_bug.cgi?id=796739
2018-07-11 12:23:19 +03:00
Sebastian Dröge
268c5e7e17 parsebin: Don't try to continue autoplugging a parser if we got raw caps
Otherwise we'll fail with an unhelpful message that no decoder for the
raw caps was found if a container contains raw media.
2018-07-06 17:49:39 +02:00
Edward Hervey
2657fc1fdd typefindfunctions: Bail out on huge EBML chunks
We can't handle/store more than guint32 anyway
2018-07-06 13:48:09 +02:00
Edward Hervey
38ba954e82 typefindfunctions: Use guint32 for sizes
This brings it in sync with the type used with gst_type_find_*() API
2018-07-06 13:47:58 +02:00
Edward Hervey
a87724138b typefindfunctions: Use types of same size/signedness
Where applicable/possible
2018-07-06 13:12:51 +02:00
Edward Hervey
a7e8f16df3 playsink: Properly propagate SEGMENT seqnum
When flushing chains, make sure the FLUSH events have seqnum
that are consistent with the current SEGMENT seqnum
2018-06-05 17:30:47 +02:00
Edward Hervey
5efa8e1f89 streamsynchronizer: Properly propagate seqnum on EOS event 2018-06-05 17:29:53 +02:00
Edward Hervey
3ac37bbe67 subparse: Don't read beyond array
If num_open_tags is 0, we shouldn't try to get the "last" open tag
since there isn't any.
2018-05-30 11:39:40 +02:00
Tim-Philipp Müller
9158f9f7eb docs: Fix typos 2018-05-22 14:10:03 +01:00
hoonhee.lee
88196c36f1 playbin3: Collect appropriate stream-type when doing stream selection
https://bugzilla.gnome.org/show_bug.cgi?id=796193
2018-05-17 10:19:07 +01:00
Philippe Normand
b7e8d1657d subparse: follow-up build fix after d871b1205 2018-05-12 17:21:01 +01:00
Philippe Normand
8cfd85ec61 subparse: support for more than 32 unclosed markup tags
https://bugzilla.gnome.org/show_bug.cgi?id=796043
2018-05-12 17:05:06 +01:00
Roland Jon
afca8d4815 parsebin: remove unused macro definitions
https://bugzilla.gnome.org/show_bug.cgi?id=796039
2018-05-12 07:59:21 +02:00
Seungha Yang
3678866474 decodebin3: Do not modify structure of EOS event
https://bugzilla.gnome.org/show_bug.cgi?id=795981
2018-05-10 09:09:08 +02:00
Seungha Yang
4567fcc64c urisourcebin: Do not modify structure of EOS event
https://bugzilla.gnome.org/show_bug.cgi?id=795981
2018-05-10 09:09:08 +02:00
Seungha Yang
7e724bddf3 uridecodebin3: Fix GList leak
https://bugzilla.gnome.org/show_bug.cgi?id=795937
2018-05-09 07:03:13 +01:00
Seungha Yang
12694200d5 uridecodebin3: Fix string leak
uri and suburi should be free'd

https://bugzilla.gnome.org/show_bug.cgi?id=795932
2018-05-08 16:20:08 +01:00
hoonhee.lee
1e28cba088 decodebin3: Re-order all streams and add to collection
Sort all streams from parsebins by stream type and SELECT flag
and stream-id. First video, then audio, then others.

https://bugzilla.gnome.org/show_bug.cgi?id=775615
2018-05-06 16:31:43 +02:00
Sebastian Dröge
33a8e28207 videoaggregator: Switch to a GstVideoAggregatorConvertPad subclass
This moves all the conversion related code to a single place, allows
less code-duplication inside compositor and makes the glmixer code less
awkward. It's also the same pattern as used by GstAudioAggregator.
2018-05-06 15:22:51 +02:00
Tim-Philipp Müller
1654faad38 typefindfunctions: fix tap typefinder
If we memcmp() 12 bytes we should make sure to get
at least 12 bytes as well, and not just 8 bytes.

Thanks oss-fuzz!
2018-05-06 11:10:21 +02:00
Tim-Philipp Müller
4187242a7c tcp: fix markup for example pipelines in docs
gtk-doc doesn't like the # it seems.

https://bugzilla.gnome.org/show_bug.cgi?id=795548
2018-05-05 18:02:16 +02:00
Fabrizio Gennari
401555ffb8 typefind: Add TAP and DMP files support
https://bugzilla.gnome.org/show_bug.cgi?id=661137
2018-05-05 17:13:50 +02:00
Sebastian Dröge
233ee9f077 videoaggregator: Move needs_alpha pad field to the private struct
And also trigger renegotiation if the value has changed.

https://bugzilla.gnome.org/show_bug.cgi?id=795836
2018-05-05 16:32:19 +02:00
Sebastian Dröge
1c8110ab17 videoaggregator: Move aggregated_frame and the pad buffer into the private struct
The aggregated_frame is now called prepared_frame and passed to the
prepare_frame and cleanup_frame virtual methods directly. For the
currently queued buffer there is a method on the video aggregator pad
now.
2018-05-05 16:32:19 +02:00
Sebastian Dröge
a240fb7997 videoaggregator: Move GstChildProxy implementations into leaf classes
Not every subclass will want to expose the pads via the interface.

https://bugzilla.gnome.org/show_bug.cgi?id=739011
2018-05-04 16:13:16 +02:00
Thibault Saunier
9ce8cf89ba encodebin: Also lock input caps when dynamic output is disabled
With the way caps negotiation work in encoders, the only way to ensure
that no downstream renegotiation is done in the encoder is to also lock
upstream caps. Anyway with the current behavior upstream of encoders
*require* to handle any file format so locking upstream format should
be safe.

https://bugzilla.gnome.org/show_bug.cgi?id=795464
2018-05-01 21:15:25 +02:00
hoonhee.lee
5b01f9bbc2 uridecodebin3: don't segfault if a pad is not a source pad when it is removed
Ignore to handling a pad of decodebin3 which doesn't have corresponding output
when it is removed.

https://bugzilla.gnome.org/show_bug.cgi?id=795529
2018-05-01 09:33:16 +02:00
Tim-Philipp Müller
637f26f3f8 meson: fix copy'n'paste-o in app plugin build description 2018-04-25 11:26:17 +01:00
Xavier Claessens
9ae9d2686f Meson: Generate pc file for all plugins in bad
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:08:09 +01:00
Xavier Claessens
201e7c7803 Meson: Generate pc file for all plugins in base
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:05:56 +01:00
Thibault Saunier
89d0e9cc92 parsebin: Post STREAM_COLLECTION on EVENT_STREAM_COLLECTION
Otherwise decodebin won't get notified about STREAM_COLLECTION comming
from the sources and thus will never get informored about it. Without
being informed about the stream collection decodebin won't be able to
select any streams. It ends up not creating any output for the streams
defined from outside parserbin.

https://bugzilla.gnome.org/show_bug.cgi?id=795364
2018-04-19 08:40:35 -03:00
Thibault Saunier
f0399ed435 urisourcebin: Avoid unreffing a pad we are not owning
expose_output_pad takes ownership of the pad.
2018-04-12 16:10:44 -03:00
Mathieu Duponchelle
faaa2423c2 uridecodebin3: free_play_items when READY_TO_PAUSED failed.
We will never go through the PAUSED_TO_READY transition if
that is the case, and thus never free the play items.
2018-04-12 19:33:18 +02:00
Tim-Philipp Müller
b6853f783f playbin3: fix leak of recursive mutex 2018-04-12 18:12:49 +01:00
Edward Hervey
1d2a311c1d playback: Add support for CEA 608/708 CC overlay elements
https://bugzilla.gnome.org/show_bug.cgi?id=794901
2018-04-09 15:15:24 +02:00
Thibault Saunier
a2011519ec encodebin: Always respect encoding profile preset factory name
And fail if it is not present.
2018-04-04 20:50:07 -03:00
Thibault Saunier
dbc89373ea encodebin: Inform about missing elements in the "text" error field
Instead of the debug field, that information should be directly
exposed to end users.

https://bugzilla.gnome.org/show_bug.cgi?id=794663
2018-04-02 19:31:00 -03:00
Sebastian Dröge
bec7f4ad5e videorate: In reverse playback mode, don't output the first buffer with ts=segment.stop
Instead go backwards before segment.stop based on the framerate or the
next buffers end timestamp. Otherwise the first buffer will usually be
dropped because outside the segment.

https://bugzilla.gnome.org/show_bug.cgi?id=781899
2018-03-29 20:48:27 +03:00
Seungha Yang
07eab6de3f encodebin: Use gst_object_unref() instead of g_object_unref()
... for better debugging (e.g., tracing refcount)

https://bugzilla.gnome.org/show_bug.cgi?id=794654
2018-03-24 10:31:42 -03:00
Edward Hervey
247b22ae1a playback: Remove subtitle-encoding property on uridecodebin3
For now, until we found a more future-proof solution
2018-03-12 13:48:18 +01:00
Mathieu Duponchelle
b59da8eced Port to latest GstAggregator segment API
The aggregator segment is now exposed on the src pad

https://bugzilla.gnome.org/show_bug.cgi?id=793946
2018-03-01 15:37:06 +01:00
Mathieu Duponchelle
318eb61e23 audioaggregator: remove GstAudioAggregator->info
As we now require subclasses to use a subclass of
GstAudioAggregatorPad, we can reuse its info field

https://bugzilla.gnome.org/show_bug.cgi?id=793943
2018-03-01 15:33:25 +01:00
Mathieu Duponchelle
10835e9919 audioaggregator: refactor conversion API
For the rationale, see:

https://bugzilla.gnome.org/show_bug.cgi?id=793917

Also test audiomixer conversion of current output buffer
2018-03-01 00:40:24 +01:00
Edward Hervey
2c4dfa101a Update disted backup ORC files 2018-02-15 07:14:20 +01:00
Nicolas Dufresne
a8ee76bd30 doc: Remove obsolete Since 0.10.X marks 2018-02-14 14:39:32 -05:00
Edward Hervey
3b9843d13b Update ORC fallback disted code 2018-02-14 14:36:00 +01:00
Philippe Normand
22a6287b8e playbin3: fix source-setup signal emission
Previous code would pass 0 as source element.
2018-02-14 10:23:03 +00:00
Tim-Philipp Müller
8c5725c4ea audiomixer, audiointerleave: add to build
https://bugzilla.gnome.org/show_bug.cgi?id=791218
2018-02-13 16:38:32 +00:00
Tim-Philipp Müller
ab758a9a39 audioaggregator, audiomixer, audiointerleave: move from -bad to -base
https://bugzilla.gnome.org/show_bug.cgi?id=791218
2018-02-13 15:56:49 +00:00
Edward Hervey
eacb7a77d2 playbin3: Re-enable buffering message handling
Buffering messages are only sent for the active group (in case there
is more than one).

If the inactive group posts buffering messages we keep the last one
around and will post it once it becomes the playing one.
2018-02-10 15:43:54 +01:00
François Laignel
ec7d81f67c decodebin3: high cpu usage after eos
After eos, decodebin3 enters a loop sending eos events which causes high cpu usage.

https://bugzilla.gnome.org/show_bug.cgi?id=792693
2018-02-10 13:37:27 +01:00
Edward Hervey
1f792ab89d decodebin3: Handle dual-output of STREAM_START/EOS
In order to flush out multiqueue, we send again a STREAM_START and
then a EOS event.

The problem was that was that we might end up pushing out on the
output of multiqueue (and therefore decodebin3) a series of:
* EOS / STREAM_START / EOS

Apart from the uglyness of such output, If decodebin3 is used with
elements such as concat on their output, they might potentially
block on that second STREAM_START.

In order to make sure we don't end up in that situation we send
a custom STREAM_START event when refreshing multiqueue (which we
drop on the output) and we don't special case EOS events on streams
on which we already got EOS.

At worst we now end up sending at most two EOS on the output of
multiqueue (and decodebin3).
2018-02-10 12:24:10 +01:00
Edward Hervey
c1e902a084 playbin3: Implement gapless playback
Similar in vein to the playbin2 architecture except that uridecodebin3
are prerolled much earlier and all streams of the same type are
fed through a 'concat' element.

This keeps the philosphy of having all elements connected as soon
as possible.

The 'about-to-finish' signal is emitted whenever one of the uridecodebin
is about to finish, allowing the users to set the next uri/suburi.

The notion of a group being active has changed. It now means that the
uridecodebin3 has been activated, but doesn't mean it is the one
currently being outputted by the sinks (i.e. curr_group and next_group).
This is done via detecting GST_MESSAGE_STREAM_START emission by playsink
and figuring out which group is really playing.

When the current group changes, a new thread is started to deactivate
the previous one and optionnaly fire 'about-to-finish'.
2018-02-10 12:24:10 +01:00
Edward Hervey
b9e73d0575 playbin3: Use uridecodebin3 and link/reconfigure immediately
Apologies for the big commit, but it wasn't really possible to split it
in anything smaller.

* Switch to uridecodebin3 instead of managing urisourcebin and decodebin3
ourselves. No major architectural change with this.

* Reconfigure sinks/outputs when needed. This is possible thanks to the
various streams-related API. Instead of blocking new pads and waiting
for a (fake) no-more-pads to decide what to connect, we instead reconfigure
playsink and the combiners to whatever types are currently selected. All of
this is done in reconfigure_output().
  New pads are immediately connected to (combiners and) sinks, allowing
immediate negotiation and usage.

* Since elements are always connected, the "cached-duration" feature is gone
and queries can reach the target elements.

* The auto-plugging related code is currently disabled entirely until
we get the new proper API.

* Store collections at the GstSourceGroup level and not globally

* And more comments a bit everywhere

NOTE: gapless is still not functional, but this opens the way to be able
to handle it in a streams-aware fashion (where several uridecodebin3 can
be active at the same time).
2018-02-10 12:24:09 +01:00
Edward Hervey
ebf138e29e urisourcebin: Add 'about-to-finish' signal
With push-based sources, urisourcebin will emit this signal when
the stream has been fully consumed.

This signal can be used to know when the source is done providing
data.
2018-02-10 12:24:09 +01:00
Edward Hervey
08044ab7e6 playback: New uridecodebin3 element
In the same vein as old uridecodebin except that it also
accepts a suburi and uses urisourcebin and decodebin3 internally
2018-02-10 12:24:09 +01:00
Edward Hervey
2858400608 playbin3: Remove wrong 'notify'
Those properties doesn't exist on playbin3, don't emit a notify for that
2018-02-10 12:17:39 +01:00
Edward Hervey
8386ea706f playbin3: Remove setting 'subtitle-encoding' on decodebin
That property doesn't exist
2018-02-10 12:17:39 +01:00
Edward Hervey
7b8cfb9e53 playbin3: Clarify documentation of combiner properties 2018-02-10 12:17:39 +01:00
Edward Hervey
4ed0708f78 playbin3: Remove unused define 2018-02-10 12:17:39 +01:00
Edward Hervey
9e7401bedf decodebin3: Use GST_GROUP_ID_INVALID 2018-02-10 12:17:39 +01:00
Edward Hervey
dd7a1407a4 decodebin3: Don't forward already-handling SELECT_STREAMS
Upstream might respond negatively to the event, whereas we actually
handled it.
2018-02-10 12:17:38 +01:00
Edward Hervey
401cadfd74 decodebin3: Add new about-to-finish signal 2018-02-10 12:17:38 +01:00
Edward Hervey
c136acf27a decodebin3: Remove unused definition 2018-02-10 12:17:38 +01:00
Edward Hervey
fa710a59aa decodebin3: Don't take the lock when creating a new input
We only need to take the input lock when adding/removing
inputs from the list.
2018-02-10 12:17:38 +01:00
Edward Hervey
fa9adbe986 playbin3: Remove unused variable
The lock is never used
2018-02-10 12:17:38 +01:00
Edward Hervey
1717e33da5 urisourcebin: Remove auto-plugging signals
They were never used and we need a better system
2018-02-10 12:17:36 +01:00
Edward Hervey
e5157ca400 urisourcebin: Remove ASYNC behaviour
It is not needed in the new streams-aware world
2018-02-10 12:16:09 +01:00
Edward Hervey
f4035e430a urisourcebin: Remove 'unknown-type' signal
It was never used and makes no sense in the new streams-based world
2018-02-10 12:16:09 +01:00
Edward Hervey
0f51dde728 playbin3: Disable autoplug-related code
The signals were never emitted from decodebin3. This needs
switching to a new signalling system
2018-02-10 12:16:09 +01:00
Edward Hervey
29f57e23c7 playbin3: fix "no-more-pads" handling
That signal is never emitted by decodebin3 and is handled differently
2018-02-10 12:14:47 +01:00
Edward Hervey
9f1063e4a3 playbin3: Remove duration caching
This is now handled directly via sinks and queries through pads
2018-02-10 12:14:47 +01:00
Edward Hervey
fc93302087 parsebin: Remove async behaviour
There's no reason to do async changing
2018-02-10 12:14:17 +01:00
Jan Schmidt
577c14495c tcp/multihandlesink: Handle the case of no caps
Pass data with no caps and no streamheaders without
throwing a bunch of criticals
2018-02-09 18:07:59 +11:00
Tim-Philipp Müller
3219b704fd subparse: fix pushing out of last chunk if last line has no newline
With playbin the last subtitle chunk would not get displayed
if the last chunk was missing a newline at the end. This is
because streamsynchronizer will hold back the EOS event until
the audio and video streams are finished too, so subparse
would never forcefully push out the last chunk until the very
end when it is too late.

We get a STREAM_GROUP_DONE event from streamsynchronizer however,
so handle that like EOS and force out any remaining text then.

https://bugzilla.gnome.org/show_bug.cgi?id=771853
2018-01-25 18:42:08 +00:00
Ashish Kumar
b927d60371 playback-utils: Fix caps leak on failure
https://bugzilla.gnome.org/show_bug.cgi?id=789358
2018-01-17 12:18:41 +00:00
Sam Thursfield
f1324f9cb0 videotestsrc: Document the num-buffers property
It's not obvious from the existing docs that this option exists, nor
that it can be used to give a pipeline an exact length in video frames.

https://bugzilla.gnome.org/show_bug.cgi?id=777647
2018-01-12 00:49:20 +00:00
Edward Hervey
384d27002c typefind: Fix mp3 typefinding with multiple different headers
(yes, this has never worked since it was introduced, don't worry)

If we want to actually detect layer/channels/samplerate changes,
it would be better to:
* not reset the various prev_* variables at every iteration.
* and actually store the values when they change

CID #206079
CID #206080
CID #206081
2018-01-03 15:51:34 +01:00
Mathieu Duponchelle
164b5a7f94 audioaggregator: implement input conversion
https://bugzilla.gnome.org/show_bug.cgi?id=786344
2017-12-19 23:39:37 +01:00
Nicolas Dufresne
5affe09c48 videoconvert: Filter-out crop meta
To passthrough crop-meta, the converter would need to allocate and
convert buffers of the size of the originating buffer. This is currently
made difficult by GstBaseTransform since we cannot alter the caps passed
though the allocation query. We would also need to wait for the first
input buffer to be received in order to make the decision around that
size.

So the short and safe solution is just to stop pretending we can
passthrought that meta.

https://bugzilla.gnome.org/show_bug.cgi?id=791412
2017-12-17 15:50:00 -05:00
Dongil Park
a8a5905ec6 playbin3: Fix accessing invalid index in GstStream when received select-stream event
If select-stream event was send to playbin3 as missing any GstStream of ES type
(V or A or TEX) of collection then, playbin will access to invalid address of
GstStream due to invalid index limit. This caused SIGSEGV.

https://bugzilla.gnome.org/show_bug.cgi?id=791638
2017-12-15 09:03:12 +01:00
Edward Hervey
aa10e82257 typefind: Avoid overflow calculation (image/quicktime)
The qt typefinder uses guint64 values for offset and size calculation
but the typefinder system only supports gint64 values.

Make sure we don't end up using potentially overflowing values.
2017-12-08 09:12:33 +01:00
Edward Hervey
1df9b05f18 typefind: Avoid overflow calculation
The qt typefinder uses guint64 values for offset and size calculation
but the typefinder system only supports gint64 values.

Make sure we don't end up using potentially overflowing values.
2017-12-08 08:05:10 +01:00
Edward Hervey
32eae2b166 typefind: Fix previous commit
We need to make sure we have *enough* data to read (including the
next 4 bytes)
2017-12-07 16:10:22 +01:00
Edward Hervey
b1c135aa72 typefind: Optimize qt/3gp typefinding
Request the whole 'ftyp' atom data and scan within it. Avoids doing
a lot of small 4 byte pull from upstream if it's invalid.
2017-12-07 15:05:07 +01:00
Edward Hervey
0428b4afda typefind: wavpack: limit search in blocksize
The maximum blocksize is 131072 bytes, anything bigger is a corrupted
file.
2017-12-07 15:05:07 +01:00
Edward Hervey
a3bf3094d1 typefind: Fix ico out-of-bound read
The furthest we go to verify the data is reading a guint32 at offset
18, therefore make sure we can read as much.
2017-12-07 11:04:50 +01:00
Tim-Philipp Müller
2b933a2827 Remove GstAggregator from -bad, moved to core
https://bugzilla.gnome.org/show_bug.cgi?id=739010
2017-12-02 16:14:36 +00:00
Tim-Philipp Müller
6c0744a5fc Remove GstAggregator from -bad, moved to core
https://bugzilla.gnome.org/show_bug.cgi?id=739010
2017-12-02 16:14:36 +00:00
Jun Xie
f88b20397f decodebin: Fix typo in docs
https://bugzilla.gnome.org/show_bug.cgi?id=791058
2017-12-01 10:03:40 +02:00
Edward Hervey
f2f87d220f urisourcebin: Don't leak mutexes 2017-11-25 12:45:03 +01:00
Mathieu Duponchelle
9e4b3fbd82 aggregator: Remove klass->sinkpads_type
This posed problems for the python bindings (and possibly others).

Instead, subclasses now use add_pad_template_with_gtype.

https://bugzilla.gnome.org/show_bug.cgi?id=789986
2017-11-22 16:52:29 +01:00
Mathieu Duponchelle
14f886b7b0 aggregator: Remove klass->sinkpads_type
This posed problems for the python bindings (and possibly others).

Instead, subclasses now use add_pad_template_with_gtype.

https://bugzilla.gnome.org/show_bug.cgi?id=789986
2017-11-22 16:52:29 +01:00
Edward Hervey
a47881100d videotestsrc: Avoid overflow calculation
n_frames could end up being quite big (potentially up to G_MAXINT64). Which
would result in overflowing 64bits when multiplying it by GST_SECOND.

Instead move GST_SECOND to the num argument
2017-11-21 10:15:02 +01:00
Edward Hervey
38c835ec1e decodebin2: Don't spawn threads on shutdown
If we are shutting down, don't spawn a cleanup thread to cleanup old
groups and instead queue them to be cleaned up in the state change
thread.

This avoids (hopefully for good) having a race between the state change
thread and other threads trying to deactivate elements/pads.
2017-11-16 18:22:20 +01:00
Edward Hervey
e72aa501b0 decodebin2: Avoid deactivation races
Deactivating pads from two threads isn't 100% MT-safe. There is a
slim chance that the GstPadActivateFunc might be called twice with
the same values (in this case from the cleanup thread *and* from
the GstElement change_state function when going from PAUSED to READY).

In order to avoid that, call any existing cleanup function *before*
calling the parent change_state implementation on downwards state
changes.
2017-11-16 06:44:10 +01:00
Edward Hervey
ce8f51e30e decodebin2: Don't try to add pads when shutting down
Be even more agressive than before and just hold the DYN lock when/if
adding pads and return if we are shutting down.
2017-11-14 13:40:50 +01:00
Edward Hervey
77e5a71a15 decodebin2: Don't take locks when deactivating pads
When deactivating pads, we need to ensure that the streaming threads
going through the pads we wish to deactivate can cleanly return.
Failure to do that would result in the streaming locks of those
pads never being released. The end result would be a deadlock
when stopping decodebin2.

In order to avoid that situation, release the "dyn" lock around
the deactivation code. And refactor the code to cope with the
list of blocked pads having potentially changed when re-acquiring
the lock.
2017-11-14 13:40:48 +01:00
Edward Hervey
6280547be7 playbin3: Remove unneeded blacklisting
Blacklisted mimetypes have been empty in almost 10 years ...
2017-11-10 17:22:36 +01:00
Edward Hervey
cd508aff97 playbin3: Remove context caching
This is now handled by the GstBin baseclass
2017-11-10 17:22:22 +01:00
Edward Hervey
3dd0888d1e playbin3: Remove source property
And instead use the "setup-source" signal. This opens the way to deal
with more than one 'source' for a given playlist entry
2017-11-10 17:06:46 +01:00
Edward Hervey
35a8d42724 parsebin: Don't let thread run after unref
We have a dedicated one-shot thread to handle cleanup of old groups.

While this is a good idea. It's an even better idea to make sure
that thread is *completed* before the parsebin element to which
it is related isn't freed/gone.

* There can only be one cleanup thread happening at any point in time.
  If there is already one, we wait for the previous one to finish.
* When shutting down (NULL=>READY) make sure the thread is finished

https://bugzilla.gnome.org/show_bug.cgi?id=790007
2017-11-10 17:06:45 +01:00
Edward Hervey
43b9bcbddb decodebin2: Don't let thread run after unref
We have a dedicated one-shot thread to handle cleanup of old groups.

While this is a good idea. It's an even better idea to make sure
that thread is *completed* before the decodebin2 element to which
it is related isn't freed/gone.

* There can only be one cleanup thread happening at any point in time.
  If there is already one, we wait for the previous one to finish.
* When shutting down (NULL=>READY) make sure the thread is finished

https://bugzilla.gnome.org/show_bug.cgi?id=790007
2017-11-10 17:06:10 +01:00
Edward Hervey
d53ccfd8e5 parsebin: Check for shutdown before exposing pads
We already checked previously, but we need to do it before adding
pads.
2017-11-10 17:06:10 +01:00
Edward Hervey
92e8876844 parsebin: Emit 'drained' only for the top-level chain
Instead of emitting 'drained' whenever every single chain is drained
(which would result in plenty of signal emission, and would also
occur when switching groups), only emit it when the top-level chain
is drained.

Furthermore, mark unknown (and therefore unexposed) pads as drained
since we'll never get EOS on them.

https://bugzilla.gnome.org/show_bug.cgi?id=787367
2017-11-10 10:05:26 +01:00
shakin chou
2ec51ef998 playbin: Don't ref_sink() the sinks twice
Since we're already sunk floating reference, we shouldn't call ref_sink
again, which increases the ref_count and cause leaks.

https://bugzilla.gnome.org/show_bug.cgi?id=789547
2017-11-07 10:32:34 +02:00
Edward Hervey
c81e3e6fce videotestsrc: Fix undefined left shift
Cast value to target type
2017-11-04 12:19:46 +01:00
Edward Hervey
a23d4d1c1f typefind: Fix out-of-bound read in PNM typefinder 2017-11-02 17:59:29 +01:00
Tim-Philipp Müller
eca9739bca videoaggregator: drop ABI compat in padding for new struct member
Don't really have to do that while it's in -bad and most users
are in-tree anyway.
2017-11-02 11:57:24 +00:00
Tim-Philipp Müller
6c749f75a5 typefindfunctions: fix off-by-one in webvtt typefinder
We're also checking the byte after the WEBVTT magic.
2017-11-02 09:05:47 +00:00
Edward Hervey
f448cecceb decodebin2: Recheck shutdown behaviour in error case
If we can expose the main chain, recheck whether we are shutting
down or not.

decodebin2 might have been set to READY/NULL during the attempt
to expose, which would cause it to fail ... but it is not a fatal
issue.
2017-11-02 07:55:16 +01:00
Edward Hervey
cb0b73672c Update disted orc file
For latest orc fixes
2017-10-31 11:57:23 +01:00
Edward Hervey
5bcc1e2b57 typefind: Use GST_READ_UINT32 macros
Avoids undefined behaviour with shifting
2017-10-30 11:10:11 +01:00
Edward Hervey
7b5d97e9c3 typefind: Fix out-of-bound memory access
We were not checking the proper amount of available data in several
places
2017-10-30 08:57:19 +01:00
Vivia Nikolaidou
b2be4169ee audioconvert: Fix empty mix matrix documentation typo 2017-10-27 18:29:40 +03:00
Seungha Yang
466cbef6ab decodebin3: Allow configure output stream without reassign slot
By select-streams event, current implementation of decodebin3
supports deactivate output stream (i.e., decoder element)
in reassign slot(), but cannot activate any slot without track change.

https://bugzilla.gnome.org/show_bug.cgi?id=778015
2017-10-27 09:55:59 +02:00
Seungha Yang
969ab3f48c playbin3: Use STREAMS_SELECTED message to update selected stream types
Application might choose only specific type among all available types
using select-streams event. In this case, it is desired that reconfigure
of playsink to clear unused stream path.

https://bugzilla.gnome.org/show_bug.cgi?id=778015
2017-10-27 09:55:59 +02:00
Mathieu Duponchelle
b0c184e189 audioconvert: document passing an empty mix-matrix 2017-10-26 18:05:46 +02:00
Stefan Sauer
8f4479b874 aggregator: fix type for latency property (int64 -> GStClockTime)
The value is used as GstClockTiem in the code. Adapt the hack^H^H^H^Hcode
in live-adder.
2017-10-23 11:41:17 +02:00
Mathieu Duponchelle
d4db88772b audioconvert: allow empty mix matrix
When an empty mix matrix is passed, audio-channel-mixer
will now generate a (potentially truncated) identity matrix,
this replicates the behaviour of audiomixmatrix in first-channels
mode.

https://bugzilla.gnome.org/show_bug.cgi?id=788833
2017-10-11 22:57:38 +02:00
Reynaldo H. Verdejo Pinochet
e81c334ca9 Use proper GtkDoc notation for NULL/FALSE/TRUE 2017-10-03 14:31:18 -07:00
Mathieu Duponchelle
8d52a107a4 audioconvert: [API]: expose mix-matrix property.
This obsoletes audiomixmatrix

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 20:17:48 +02:00
Mathieu Duponchelle
7a407b69e1 audioconvert: refactor format removal.
remove_format_info was a bit confusing to read, this removes
it in favor of standard gst_caps_map_in_place calls.

This no longer simplifies the resulting caps, but I
consider this should be the job of basetransform.

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 15:03:41 +02:00
Mark Nauwelaerts
2372894c63 playbin: ref_sink() sink rather than pointer to sink 2017-08-20 12:25:29 +02:00
Edward Hervey
ce65017d03 decodebin3/urisourcebin: Switch to actual EOS events internally
Use the intended sequence for re-using elements:
* EOS
* STREAM_START if element is to be re-used

This avoids having elements (such as queue/multiqueue/queue2) not
properly resetting themselves.

When delaying EOS propagation (because we want to wait until all
streams of a group are done for example), we re-trigger them by
first sending the cached STREAM_START and then EOS (which will
cause elements to re-set themselves if needed and accept new
buffers/events).

https://bugzilla.gnome.org/show_bug.cgi?id=785951
2017-08-11 11:23:29 +03:00
Mathieu Duponchelle
663ef174d8 compositor: improve conversion debugging
https://bugzilla.gnome.org/show_bug.cgi?id=786078
2017-08-10 13:55:59 +02:00
Sebastian Dröge
b4899a5a65 playbin: Make sure to ref_sink() any sinks before calling activate_sink()
It is forwarding messages to the playbin bus, thus forwarding messages
that contain a floating reference to the application. This generally
makes bindings unhappy, we must not leak floating references to them.
2017-08-07 15:27:45 +03:00
Tim-Philipp Müller
61b54cdb40 compositor: update disted orc fallback files 2017-08-03 20:14:41 +01:00
Thibault Saunier
effb593a93 compositor: Add support for crossfade blending
Crossfading is a bit more complex than just having two pads with the
right keyframes as the blending is not exactly the same.

The difference is in the way we compute the alpha channel, in the case
of crossfading, we have to compute an additive operation between
the destination and the source (factored by the alpha property of both
the input pad alpha property and the crossfading ratio) basically so
that the crossfade result of 2 opaque frames is also fully opaque at any
time in the crossfading process, avoid bleeding through the layer
blending.

Some rationnal can be found in https://phabricator.freedesktop.org/T7773.

https://bugzilla.gnome.org/show_bug.cgi?id=784827
2017-08-03 12:59:43 -04:00
Thibault Saunier
ffd4c990c1 audioconvert: Consider channel=1, channel-mask=0x0 as mono
channels=1 is always mono, having it 'unpositioned' does not make
sense.

This fixes pipeline such as:

  gst-validate-1.0 audiotestsrc ! audio/x-raw,channels=2,rate=44100,layout=interleaved ! audioconvert ! audioresample ! audio/x-raw, rate=44100, channels=1 ! avenc_mp2 ! fakesink

https://bugzilla.gnome.org/show_bug.cgi?id=785407
2017-07-26 09:26:39 -04:00
Satya Prakash Gupta
075dac486f ssaparse: Fix buffer leak in error case
https://bugzilla.gnome.org/show_bug.cgi?id=785331
2017-07-24 11:56:50 +03:00
Stefan Sauer
2bf83de168 adder: comment and formatting cleanups
Log a few more details. Update method comments. Remove some extra blank lines.
2017-07-23 13:13:14 +02:00
Mathieu Duponchelle
875af55937 videorate: flush remaining buffers on SEGMENT_DONE
Just as we do on EOS.

https://bugzilla.gnome.org/show_bug.cgi?id=784666
2017-07-21 14:22:07 -04:00
Seungha Yang
bf32c0b3b0 decodebin3: Remove FIXME and do remove_input_stream() only for the corresponding parsebin
Do not remove other parsebin's input streams. It will cause unexpected
removal of any input streams in multi-parsebin use case.

Basically, the purpose of blocking buffers is similar to checking
no-more-pads of chain/group. That is, it gives hint to know the timing
to remove old (EOSed) streams of the parsebin and to add/reuse slots
for new input streams. But, that doesn't mean that we need to remove
other parsebin's EOSed stream. Each parsebin has most likely its
own streaming thread and therefore EOSed time can be much different.
(i.e., much early EOS of subtitle only parsebin)

https://bugzilla.gnome.org/show_bug.cgi?id=785120
2017-07-19 17:13:20 +02:00
Seungha Yang
abe1183c17 parsebin: Ensure StreamType and Caps of GstStream object before exposing it
The final StreamType and Caps might not be set yet on GstStream at exposing the pads.

https://bugzilla.gnome.org/show_bug.cgi?id=785120
2017-07-19 17:13:20 +02:00
Seungha Yang
7a236e2302 playbin3: Delay linking text output until video stream is shown
We are not sure that which stream's collection arrives first
when there are multiple parsebins such as adaptive streaming.

https://bugzilla.gnome.org/show_bug.cgi?id=785120
2017-07-19 17:13:20 +02:00
Satya Prakash Gupta
3cc824c9ce encodebin: fix possible pad ref leak in error code path
https://bugzilla.gnome.org/show_bug.cgi?id=785065
2017-07-19 09:07:27 +01:00
Edward Hervey
6ccba23752 playbin3: We only care about source pads going away 2017-07-18 13:05:06 +02:00
Edward Hervey
651a0fe312 decodebin3: use lock macro where applicable 2017-07-18 13:05:06 +02:00
Thibault Saunier
4b3798fedc decodebin3: Protect fields related to streams handling with the SELECTION_LOCK
Fields related to stream handling (input_streams,
output_streams, slots, guint slot_id) where used totally unprotected
until know.

This lead to several races, especially playing back RTSP streams.

To protect those fields, the OBJECT_LOCK can not be used as we sometimes
need to be able to post message on the bus while holding it.

decodebin3 already has a lock to manage stream selection, and in the end
it makes sense to protect all the stream management fields with the same
lock which is why we reuse the SELECTION_LOCK here.

https://bugzilla.gnome.org/show_bug.cgi?id=784012
2017-07-18 13:05:06 +02:00
Edward Hervey
1188345886 decodebin3: Protect dbin->collection usage
Use the selection lock to protect dbin->collection access

https://bugzilla.gnome.org/show_bug.cgi?id=784012
2017-07-18 11:25:53 +02:00
Tim-Philipp Müller
1692f910e7 audiomixer: document caps negotiation raciness
Until we land conversion support in audioaggregator (#773762).

https://bugzilla.gnome.org/show_bug.cgi?id=777915
2017-07-14 13:54:48 +01:00
Tim-Philipp Müller
88fea7c511 adder: fix docs typo 2017-07-14 13:48:53 +01:00
Tim-Philipp Müller
cb5a2dcfbb adder: document caps negotiation raciness and workaround
https://bugzilla.gnome.org/show_bug.cgi?id=777915
2017-07-14 13:40:07 +01:00
Seungha Yang
60cae68c4e decodebin3: Push EOS to output stream if they are all drained
decodebin3 checks input streams and pushes EOS if all input streams
are EOSed. If not, fake EOS is pushed to the corresponding slot.

When adaptivedemux is used with multi-track configuration,
adaptivedemux never ever push EOS to non-selected track
because streaming thread for the slot stops with not-linked flow return.
So, decodebin3 should generate EOS itself to finish playback.

https://bugzilla.gnome.org/show_bug.cgi?id=777735
2017-07-13 07:32:42 +02:00
Seungha Yang
fc67a689af urisourcebin: Push EOS if slot is still eos state
linked input of slot can be old input, so urisourcebin should check
eos state to figure out whether it's new one or not.
If not, urisourcebin never ever forwards EOS to downstream at the end
of presentation, because the old input is still there without removal

https://bugzilla.gnome.org/show_bug.cgi?id=777735
2017-07-13 07:32:42 +02:00
Seungha Yang
06cf7440ce decodebin3: Don't send duplicated stream-start event
group-id in stream-start event might be updated in
parse_chain_output_probe (). This cause duplicated stream-start
twice with identical stream-id and seq-num, but only group-id is
different. Although there is no change, stream-start event will
be followed by the first buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=771088
2017-07-12 15:55:26 +02:00
Aaron Boxer
12c69c4cdf typefind: Detect JPEG2000 codestreams
https://bugzilla.gnome.org/show_bug.cgi?id=783625
2017-07-10 10:00:41 +03:00
Mathieu Duponchelle
bfba213437 uridecodebin: aggregate topology messages
This makes it possible for GstDiscoverer to work with sources that
have multiple source pads and hence will trigger the creation of multiple
decodebin instances such as rtspsrc.

Based on the work of Vineeth TM <vineeth.tm@samsung.com>

https://bugzilla.gnome.org/show_bug.cgi?id=754178
2017-07-03 20:08:55 -04:00
Jimmy Ohn
ca18b1f8fd encodebin: Simplify the are_raw_caps function
Remove unnecessary if statement in are_raw_caps function.
we can use result returned by gst_caps_can_intersect quite simple.

https://bugzilla.gnome.org/show_bug.cgi?id=784312
2017-06-29 15:51:53 -04:00
Mark Nauwelaerts
dac113a867 subparse: ensure serialized sending of segment event at proper time 2017-06-25 22:25:40 +02:00
Thibault Saunier
7e94d2824f urisourcebin: Call do_async_done when source state change returns NO_PREROLL
Otherwise for RTSP streams for example, the pipeline will never go to
PLAYING as it will be missing an ASYNC_DONE message.

https://bugzilla.gnome.org/show_bug.cgi?id=780099
2017-06-15 14:35:06 -04:00
Nicolas Dufresne
cc28e7cce0 rawvideoparse: Fix missing VideoMeta
The base class is trying to align the processed data, but it endup
removing the GstVideoMeta. That caused wrong result. Instead, just copy
from the process function with the appropriate alignment.

https://bugzilla.gnome.org/show_bug.cgi?id=781204
2017-06-12 15:55:31 -04:00
Sebastian Dröge
66929f8970 urisourcebin: Use downloadbuffer element
And only set low-percent/high-percent if not using downloadbuffer, just
like in old uridecodebin. using the watermark based buffering causes
playback to hang never finish buffering with downloadbuffer.
2017-06-12 10:24:43 +03:00
Arun Raghavan
25e0b77bbe encodebin: Don't try rate adjustment before the first buffer
With both audiorate and videorate, it seems more sensible to apply rate
adjustments after the first buffer appears. For example, with v4l2src,
there is often a small delay before the first video buffer turns up, and
this can cause a stuttery start because of videorate trying to ensure a
perfect stream.
2017-06-08 12:35:23 +05:30
Arun Raghavan
08525d825d encodebin: Don't set audiorate property before NULL check 2017-06-08 12:34:24 +05:30
Wim Taymans
16b8851440 audioconvert: resize output buffer to correct size
If we are using a downstream bufferpool we need to set the size of the
buffer to our output size.
2017-06-02 09:44:19 +02:00
Sebastian Dröge
d5069d27ef Revert "decodebin2: Set a time limit on "upstream" multiqueues"
This reverts commit 07dc9ba071. It causes
timeouts in validate because queues run full before prerolling.
2017-05-31 12:30:40 +03:00
Edward Hervey
07dc9ba071 decodebin2: Set a time limit on "upstream" multiqueues
Those multiqueue are the ones dealing with adaptive demuxers. They should
have a time limit set so that they don't end up buffering too much data.

They would previously be set with no limits at all, which would cause them
to grow indefinitely until downstream blocks.
2017-05-31 10:27:19 +03:00
Olivier Crête
4fdb5ab675 videotestsrc: Protect videoinfo with object lock
The videoinfo is set in the streaming thread, but can be read by any
thread from the various queries, so protect it with the object lock.
2017-05-23 08:54:25 +02:00
Olivier Crête
930c3cea40 audioaggregate: Don't hold object locks across calls to aggregate_one
https://bugzilla.gnome.org/show_bug.cgi?id=782878
2017-05-21 18:44:53 +02:00
Olivier Crête
7b2e201bfa audiointerleave: Take object lock while modifying channel count 2017-05-20 17:52:00 +02:00
Guillaume Desmottes
36b7e5890f videorate: stop copying buffers in drop-only mode
gst_video_rate_flush_prev() ensures that the pushed buffer is writable
by calling gst_buffer_make_writable() on videorate->prevbuf.

In drop-only mode we always push buffers directly when they are received
from GstBaseTransform (gst_video_rate_transform_ip()) and do not keep them
around. GstBaseTransform already ensures that those buffers are
writable so there is no need to do it twice.

This change saves us from copying buffers in drop-only mode as we no longer
calls gst_buffer_make_writable() with a buffer having a refcount of 2
(one ref owned by GstBaseTransform and one in videorate->prevbuf).

https://bugzilla.gnome.org/show_bug.cgi?id=780767
2017-05-20 16:35:53 +02:00
Guillaume Desmottes
2c2d2a444c videorate: factor out gst_video_rate_push_buffer()
No semantic change, just factor out this function from
gst_video_rate_flush_prev().

I'm about to use it to change the 'drop-only' code path.

https://bugzilla.gnome.org/show_bug.cgi?id=780767
2017-05-20 16:35:53 +02:00
Matthew Waters
719498601f aggregator: add simple support for caps handling
Modelled off the videoaggregator caps handling as that seems the most
mature aggregtor-using implementation that has caps handling there is.

https://bugzilla.gnome.org/show_bug.cgi?id=776931
2017-05-20 16:21:17 +02:00
Matthew Waters
57673e608e aggregator: add simple support for caps handling
Modelled off the videoaggregator caps handling as that seems the most
mature aggregtor-using implementation that has caps handling there is.

https://bugzilla.gnome.org/show_bug.cgi?id=776931
2017-05-20 16:21:17 +02:00
George Kiagiadakis
2a60a9f66f videoaggregator: delay using new caps from a sink pad until the next buffer in the queue is taken
When caps changes while streaming, the new caps was getting processed
immediately in videoaggregator, but the next buffer in the queue that
corresponds to this new caps was not necessarily being used immediately,
which resulted sometimes in using an old buffer with new caps. Of course
there used to be a separate buffer_vinfo for mapping the buffer with its
own caps, but in compositor the GstVideoConverter was still using wrong
info and resulted in invalid reads and corrupt output.

This approach here is more safe. We delay using the new caps
until we actually select the next buffer in the queue for use.
This way we also eliminate the need for buffer_vinfo, since the
pad->info is always in sync with the format of the selected buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=780682
2017-05-20 16:21:16 +02:00
Sebastian Dröge
efbda07cfa urisourcebin: Unref query with gst_query_unref()
Not gst_object_unref().
2017-05-18 11:03:07 +03:00
Nicolas Dufresne
c483cbf904 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:05:52 -04:00
Nicolas Dufresne
40f4fc3d84 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:05:52 -04:00
Nicolas Dufresne
8e6c6266d7 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 13:42:07 -04:00
Vincent Penquerc'h
b97cbe678f decodebin2: fix use after free from demuxer flush pad probe
In some cases, we could get a flush-stop event after the chain structure
containing the demuxer was freed.

https://bugzilla.gnome.org/show_bug.cgi?id=782095
2017-05-03 17:37:12 +01:00
Sebastian Dröge
0be4504b10 Revert "videorate: In reverse playback mode, don't output the first buffer with ts=segment.stop"
This reverts commit e6736e9925.

This one is for after 1.12.0 and shouldn't have been merged yet.
2017-05-02 14:32:02 +03:00
Sebastian Dröge
e6736e9925 videorate: In reverse playback mode, don't output the first buffer with ts=segment.stop
Instead go backwards before segment.stop based on the framerate or the
next buffers end timestamp. Otherwise the first buffer will usually be
dropped because outside the segment.

https://bugzilla.gnome.org/show_bug.cgi?id=781899
2017-05-02 14:05:39 +03:00
Tim-Philipp Müller
6a3640f367 playbin: minor docs fix
The "frame" property is no more, it's "sample" these days.
2017-04-28 15:54:04 +01:00
Thibault Saunier
3a9a603276 docs: Port all docstring to gtk-doc markdown 2017-04-12 12:57:57 -03:00
Thibault Saunier
2bf2696945 docs: Port all docstring to gtk-doc markdown 2017-04-12 12:57:57 -03:00
Tim-Philipp Müller
4246198fb3 No need for newlines in debug log statements 2017-04-12 09:58:49 +01:00
Sebastian Dröge
711504aad1 volume: Store volume as a double for consistency with the property type
And the potential increased precision, which shouldn't matter much here.

https://bugzilla.gnome.org/show_bug.cgi?id=781149
2017-04-11 11:17:18 +03:00
Vincent Penquerc'h
9c8e700b91 encodebin: fix list leak when requesting a new pad
https://bugzilla.gnome.org/show_bug.cgi?id=780769
2017-03-31 16:14:50 +01:00
Douglas Bagnall
974cbfb3c4 audiointerleave: don't overflow channel map with >64 channels
When there are more than 64 channels, we don't want to exceed the
bounds of the ordering_map buffer, and in these cases we don't want to
remap at all. Here we avoid doing that.

Based on a patch originally for plugins-good/interleave in
https://bugzilla.gnome.org/show_bug.cgi?id=780331
2017-03-31 14:11:56 +03:00
Jan Schmidt
546a99026b urisourcebin: Set removed flag when removing buffering msg
Forgot to set the flag, resulting in a missed check for
sending 100% in some cases. Spotted by Coverity.

CID: 1403263
2017-03-27 23:00:34 +11:00
Vincent Penquerc'h
1ad791792c rawvideoparse: fix assert on large width/height in caps
https://bugzilla.gnome.org/show_bug.cgi?id=776446
2017-03-27 11:27:19 +01:00
Jan Schmidt
0bb82827f7 typefind: Expand the search range for HLS detection
HLS files can have arbitrary extra tags in them, and
those can be quite long lines. We need to search
further than 256 bytes sometimes just to get past the
first few lines of the file. Make the limit 4KB,
which matches a typical input block size and should
hopefully cover every crazy input.

https://bugzilla.gnome.org/show_bug.cgi?id=780559
2017-03-27 13:01:39 +11:00
Nicolas Dufresne
d81a6da702 rawvideoparse: Rename frame-stride in to frame-size
The term stride is confusing here, since the stride is always use
to signal the pixel row size of an image (including padding). Also
a frame may have a single stride, which adds to the confusion. This
patch uses frame-size, which simply indicate the frame size in the
case the images have some padding in between.

https://bugzilla.gnome.org/show_bug.cgi?id=780053
2017-03-24 13:50:06 -04:00
Nicolas Dufresne
2b4a173e89 rawvideoparse: Use GstValueArray for strides and offsets
This allow using those property through gst-launch-1.0. This type
gained a deserilizer recently. The syntax is: <val1, val2, ...>.
Note that we also use the type int instead of uint to avoid having
to cast when specifying the values. The deserilizers assume
int by default.

https://bugzilla.gnome.org/show_bug.cgi?id=780053
2017-03-24 13:50:06 -04:00
Haihua Hu
6749e81ce2 streamsynchronizer: every stream need keep their own send_gap_event flag
When a clip has video audio and subtitle, if need send gap event
to audio and subtitle, we should make sure all has been sent, so
need every stream keep one send_gap_event.

https://bugzilla.gnome.org/show_bug.cgi?id=780429
2017-03-23 12:55:57 +02:00
Jan Schmidt
a0f870a215 urisourcebin: Mention which queue is being linked in debug output 2017-03-23 00:21:44 +11:00
Seungha Yang
587c417d89 urisourcebin: Fix typefind list leak
https://bugzilla.gnome.org/show_bug.cgi?id=780257
2017-03-20 11:57:11 +02:00
Jan Schmidt
0b6a933e01 decodebin: Close a small race posting 100% buffering
When posting 100% buffering due to removing the last
buffering element, we still need to hold the posting
lock as well, to avoid any race with other elements
that might post a buffering message at that exact
moment
2017-03-18 02:03:47 +11:00
Jan Schmidt
94da76d301 urisourcebin: Fix buffering message aggregation.
Add locking, and handle EOS properly now that urisourcebin
uses custom events in place of real EOS events, so we
need to manually remove buffering messages and potentially
post 100% in that situation
2017-03-18 02:03:47 +11:00
Jan Schmidt
8cb57a4fe8 urisourcebin: Store slot info on the queue object too
The buffering message handling tries to look up the
slot info on the queue itself.
2017-03-18 02:03:47 +11:00
Jan Schmidt
97001a886a videotestsrc: Publish multiview-mode info in the caps
Don't allow downstream to accidentally pretend that
the output is anything than a mono or single-eye
left/right view.

https://bugzilla.gnome.org/show_bug.cgi?id=776172
2017-03-18 02:03:47 +11:00
Olivier Crête
c1acb1c1fb multifdsink: Remove GValueArray from the doc
It's been a GstStructure for a long time. Also fix
a typo in the name of one of the fields.
2017-03-14 16:30:46 -04:00
Thibault Saunier
099ac9faf2 docs: Convert gtkdoc comments to markdown
Modernizing the documentation, making it simpler to read an
modify and allowing us to possibly switch to hotdoc in the
future.
2017-03-10 18:19:17 -03:00
Nicolas Dufresne
fb7d9e26ff Fix plugin filenames to match pugin names
- libgstencodebin.so is now libgstencoding.so
 - libgstximage.so is now libgstximagesink.so (meson only)

https://bugzilla.gnome.org/show_bug.cgi?id=779344
2017-03-08 20:04:17 -05:00
Jan Schmidt
4e911760d2 urisourcebin: Shrink queue2 max-size-time buffering
The expanded 4 second buffering was making radio streams that are
being delivered at real-time speeds too slow. We might need
a better plan for matching the queue2 size to incoming bitrate
in the absence of tag information or timestamping.

In uridecodebin, it used tags on the output of decodebin to
adjust the queue2 buffering, but urisourcebin doesn't have that
view - decodebin is downstream from us.
2017-03-09 01:42:14 +11:00
Sebastian Dröge
903a8863ce playbin3/urisourcebin: Enable buffering by default
This only has effect on network streams in these elements, and by
enabling it by default we get the same behaviour as in playbin2.
2017-03-07 14:59:36 +02:00
Sebastian Dröge
6eef6bd1f5 rawbaseparse: Assert that frame size is > 0
We would later divide by zero otherwise, and generally won't do the
right thing.

CID 1401383
2017-02-28 15:51:00 +02:00
Sebastian Dröge
9a62892428 rawaudioparse: Fix potential NULL pointer dereference
CID 1364606
2017-02-28 15:26:36 +02:00
Sebastian Dröge
033057cf74 decodebin3: Fix potential NULL pointer dereference on slot deactivation
CID 1363331
2017-02-28 15:17:24 +02:00
Sebastian Dröge
bd9fd89d61 urisourcebin: Fix inverted check for an existing slot
CID 1363330
2017-02-28 15:15:31 +02:00
Sebastian Dröge
f41198db9d decodebin3: Handle stream-start events without group id correctly
CID 1363327
2017-02-28 15:13:49 +02:00
Sebastian Dröge
aee020c26f glvideomixer/compositor: Correctly error out if calculating DAR fails
CID 1320700
2017-02-28 13:06:41 +02:00
Tim-Philipp Müller
14f04c3b69 rawparse: fix linking for audio/video libs
Broke build in gnome continuous
2017-02-25 19:20:19 +00:00
Sebastian Dröge
8d4a98d2ae rawparse: Fix meson build 2017-02-25 15:14:07 +02:00
Sebastian Dröge
38ec8f396f rawparse: Move to gst-plugins-base
https://bugzilla.gnome.org/show_bug.cgi?id=774544
2017-02-25 14:48:40 +02:00
Sebastian Dröge
498ee680fe Merge branch 'rawparse-moved-plugin' 2017-02-25 14:32:33 +02:00
Sebastian Dröge
49ac382b47 video-converter: Implement multi-threaded scaling/conversion
This adds a property to select the maximum number of threads to use for
conversion and scaling. During processing, each plane is split into
an equal number of consecutive lines that are then processed by each
thread.

During tests, this gave up to 1.8x speedup with 2 threads and up to 3.2x
speedup with 4 threads when converting e.g. 1080p to 4k in v210.

https://bugzilla.gnome.org/show_bug.cgi?id=778974
2017-02-23 21:55:29 +02:00
Sebastian Dröge
4cde35553f rawbaseparse: Drop incomplete frames at EOS
See https://bugzilla.gnome.org/show_bug.cgi?id=773666

This would ideally be solved in baseparse but that requires further
thought at this point, and in the meantime it would be good to have
rawbaseparse not assert on this but handle it gracefully instead.
2017-02-18 20:18:50 +02:00
Heekyoung Seo
0889d89407 typefindfunctions: prevent unsigned int overflow
https://bugzilla.gnome.org/show_bug.cgi?id=778432
2017-02-14 12:22:37 +02:00
Stefan Sauer
66148a770c adder: ensure the discont flag is correct
Previously it happened that reused buffer caused the discont to be on the wrong
buffers.
2017-02-10 21:41:29 +01:00
Seungha Yang
6b5617c2a7 decodebin3: Fix crash caused by slot double freeing
Probe for MultiQueue source pad might receive EOS twice,
the first is fake-eos and the other is actual EOS.
And the slot can be freed with fake-eos/EOS if the slot has no input.

Since slot freeing is async, double free can be possible.
So, decodebin3 needs to remove the probe also with slot freeing.

https://bugzilla.gnome.org/show_bug.cgi?id=777530
2017-01-31 17:16:16 +01:00
Seungha Yang
e6ee68a34f decodebin3: Fix list leak on handle_stream_switch()
Free no more used list variables

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Seungha Yang
44bc10219c decodebin3: Change requested_selection to have its own memory for stream-id
"requested_selection" list might be generated by select-streams event.
And memory of stream-id(s) in select-streams is independent from that of stream-collection.

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Seungha Yang
30fe123fdb decodebin3: Change return types of stream_in_{list,collection}
Change return types of functions to get memory address of stream-id.

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Seungha Yang
10fe0497b2 playback: Fix leak on select_streams
Since gst_event_parse_select_streams() returns newly allocated
memory for stream-id(s), it should be freed explicitly.

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Tim-Philipp Müller
f9d110f596 videorate: fix LATENCY query
The latency query originally had a fallthrough to the default
label at the end as fallback, but that got messed up when the
DURATION and POSITION queries were added, so it then fell through
to the duration query handler instead. Restore original behaviour.

https://bugzilla.gnome.org/show_bug.cgi?id=699077
2017-01-24 01:04:53 +00:00
Tim-Philipp Müller
d6c0e9072b videorate: fix duration and position query handling
Duration query would return TRUE and duration=-1. This
worked in the unit test because the unit test implementation
was a bit broken.

Both queries need to access rate with a lock.

Fix broken duration query test as well. It relied on broken
behaviour by the videorate query handler, and also it was
implemented as a downstream query rather than an upstream
query. And we must return HANDLED from the probe so that the
query we intercept actually returns TRUE.

https://bugzilla.gnome.org/show_bug.cgi?id=699077
2017-01-24 01:04:39 +00:00
Sebastian Dröge
d894c19db6 samiparse: Check that the string has a non-zero length before overwriting the last byte with '\0'
https://bugzilla.gnome.org/show_bug.cgi?id=777502
2017-01-20 08:03:33 +02:00
Jan Schmidt
54bf104274 decodebin: Don't leak blocked pad references on errors
When the decodebin state change fails because of an error
message, we might not go through PAUSED->READY. Don't leak
a ref to decodebin pads due to pad blocking in that case.

This is because we return ASYNC going to PAUSED, and if
we fail before reaching PAUSED the only transition we'll
see is READY->NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=775893
2017-01-18 13:09:06 +02:00
Carl Karsten
99f4899491 videotestsrc: Add options to make ball pattern based on system time, and invert each second.
This adds some extra options that affect pattern=ball mode, allowing the
animation to be synced to running time or wall-time clock for comparing
sync across different instances / pipelines / machines.

Also added is the ability to invert the rendering colours every second,
and some different ball motion patterns.

https://bugzilla.gnome.org/show_bug.cgi?id=740557
2017-01-18 09:52:50 +11:00
Jan Schmidt
5076520502 urisourcebin: Preserve seqnum on EOS events
When converting EOS to/from our custom fake EOS event,
preserve any seqnum on the original event.
2017-01-12 22:28:50 +11:00
Edward Hervey
90e86b8638 urisourcebin: Avoid races when setting up typefind
The state of urisourcebin (and all elements contained within) can
change at any point in time, including when setting up the typefind
element.

In order to avoid ending up with typefind starting without being fully
connected, lock the state and connect to the 'have-type' signal.
2017-01-12 10:51:34 +01:00
Jan Schmidt
ef8f0cdd9d urisourcebin: Drop fake EOS if the pad got relinked
If our pad got relinked in since the fake-EOS was sent to the
pad, then drop the fake-EOS event.

CID: 1398546
2017-01-11 23:18:47 +11:00
Arun Raghavan
a2c2b22176 urisourcebin: Drop some dead code
The ret == GST_STATE_CHANGE_FAILURE is handled in the previous for loop
already.

CID: 1398544
2017-01-11 17:14:46 +05:30
Seungha Yang
1eedb4ea91 urisourcebin: Clear pad from pending list if it was linked
If not, the other slots might try to link the pad again.
This can happen when the demuxer has multiple src pads
and their caps are identical

https://bugzilla.gnome.org/show_bug.cgi?id=777121
2017-01-11 20:19:45 +11:00
Seungha Yang
7bd7b2209a urisourcebin: Configure typefind element for non-streaming uri
To ensure configuring adaptivedemux if needed,
setup typefind element even if uri is not matched to streaming protocol.

https://bugzilla.gnome.org/show_bug.cgi?id=776458
2017-01-11 00:26:27 +11:00
Seungha Yang
5d0628ff52 urisourcebin: Use GList for typefind elements
We need typefind elements per source element's srcpad

https://bugzilla.gnome.org/show_bug.cgi?id=776458
2017-01-11 00:26:27 +11:00
Seungha Yang
46c6e92abd urisourcebin: Remove unused signal handler variable
Remove never used handler id

https://bugzilla.gnome.org/show_bug.cgi?id=776458
2017-01-11 00:26:27 +11:00
Seungha Yang
87f21a925c urisourcebin: Clear EOS state with stream-start/flush-stop event
The EOS state marker should cleared on stream-start or flush-stop

https://bugzilla.gnome.org/show_bug.cgi?id=777009
2017-01-09 22:38:14 +11:00
Seungha Yang
c10e7c5011 urisourcebin: Never push actual EOS event to slot
Due to the special nature of adaptivedemux, reconfigure happens
frequently with seek/track-change.
In very exceptional cases, the following sequence is possible:
  * EOS event is pushed to queue element and still buffers are queued
  * During draining remaining buffers, reconfiguration downstream
happens due to track switch.
  * The queue gets a not-linked flow return from downstream
  * Because the sinkpad is EOS, the queue registers an
    error on the bus, causing the pipeline to fail.

Avoid the sinkpad getting marked EOS in the first place, by using a
custom event in place of EOS.

https://bugzilla.gnome.org/show_bug.cgi?id=777009
2017-01-09 22:31:46 +11:00
Thibault Saunier
fe0e51914a encodebin: Fix stream_group_free when creating it went bad
Avoiding trying to use NULL pointers
2017-01-04 11:43:08 -03:00
Mark Nauwelaerts
28f4e7db12 playsink: do not link to audio or video filter using padname
... as a sinkpad need not be called "sink", and it is not the case
for e.g. timeoverlay (and friends).

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=776623
2017-01-04 15:09:00 +01:00
Tim-Philipp Müller
ad53caf059 multihandlesink: fix some property descriptions 2017-01-04 13:44:53 +00:00
Jan Schmidt
c2a91d2cfd playback: Fix a small race on decodebin/parsebin shutdown.
When shutting down decodebin2 and parsebin, they set their
output pads to flushing, and there is a very small window
where elements might send a sticky event such as a tag event
(which silently fails due to flushing) and then sends a buffer,
and the buffer will return GST_FLOW_ERROR because it can't
forward sticky events. The element will then send an error
message on the bus. This can also happen when elements send EOS
just as shutdown is happening. Since we're about to destroy all
the elements inside parsebin and decodebin anyway, just discard
error messages from them.

A nicer but more difficult fix for GStreamer 2.0 is to make
all event pushing / handling in core return a GstFlowReturn
like buffers do, so we can report a FLUSHING state cleanly.
2017-01-03 02:27:51 +11:00
Tim-Philipp Müller
b00bba5d43 encodebin: fix queue property types when setting 2017-01-02 12:56:04 +00:00
Song Bing
01f467f6a4 encodebin: allow more buffers in output queue for better performance
https://bugzilla.gnome.org/show_bug.cgi?id=744191
2017-01-02 12:56:04 +00:00
Arun Raghavan
e112a78826 audioconvert: Relocate a NULL check before accessing converter
CID 1396745
2017-01-02 17:56:36 +05:30
Carlos Rafael Giani
a257a177c3 audiotestsrc: Fix incorrect start of tick waveform
Make sure ticks start with an accumulator value of 0 by incrementing it
after filling in samples instead of before and by resetting the accumulator
every time a tick begins. This prevents it from being discontinuous at the
beginning of the tick.

https://bugzilla.gnome.org/show_bug.cgi?id=774050
2016-12-23 16:51:07 +00:00
Nicola Murino
07646dd11b tcpclientsrc: add timeout property
https://bugzilla.gnome.org/show_bug.cgi?id=749567
2016-12-21 10:05:49 +02:00
Jan Schmidt
9517bd9b34 parsebin: Ignore failure to send sticky events
When plugging and then exposing a parser, don't fail
if it fails to send sticky events. The most likely
reason is that things were flushed due to the app
immediately doing a seek, but we can't detect flushing
separately to other error conditions without a
gst_pad_send_event_full() core function that returns
a GstFlowReturn.
2016-12-21 00:44:45 +11:00
Thibault Saunier
5fd3142b67 encodebin: Fix build initializing sprof 2016-12-19 15:08:12 -03:00
Thibault Saunier
c8ea302e57 encodebin: Fallback to other profile if we fail with one
In some case we might have EncodingProfile that will be defined
in a way that, for example if a Preset is not present, another
profile for that stream should be used.

A test is added showing the feature.

https://bugzilla.gnome.org/show_bug.cgi?id=776188
2016-12-19 10:13:23 -03:00
Thibault Saunier
2d1b5a1dc2 encodebin: Enhance error debug when failing to create an encoder 2016-12-19 10:13:23 -03:00
Sebastian Dröge
ce693174f4 decodebin2: Put the correct element srcpad into the topology for the very last element of a chain
We were putting the decode pad there, which is the ghostpad linked to
the last element. The decode pad is already in the pad field.
2016-12-17 22:01:10 +02:00