validate: videorate: Update tests to use fakevideodec and fix race condition

There was a case where we could end up having more buffers on the sinkpads
than what was expected, depending on timings. This ensure that we have a fixed
number of buffers produced by the testsrc, and we play until EOS.

Replace theora encoder/decoder chain with fakevideodec for testing
QoS handling in videorate rate property tests. This simplifies the
test pipeline and removes dependency on theora codecs.

Also adjust test expectations to match RGBA format output from
fakevideodec instead of I420 from theoradec, and limit buffer
counts to make tests more deterministic.

This also fixes the rate we set for 2.0 test as we were actually testing
0.5 there.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9013>
This commit is contained in:
Thibault Saunier 2025-08-19 09:41:17 -04:00 committed by GStreamer Marge Bot
parent efdc9b1aea
commit fac2d62054
7 changed files with 39 additions and 25 deletions

View File

@ -8,7 +8,7 @@
meta,
args = {
"videotestsrc pattern=ball animation-mode=frames ! video/x-raw,format=I420,framerate=30/1,width=320,height=240 $(decoder) videorate name=videorate rate=$(rate) ! fakesink sync=true qos=true",
"videotestsrc pattern=ball animation-mode=frames num-buffers=$(num_buffers) ! video/x-raw,format=RGBA,framerate=30/1,width=320,height=240 ! fakevideodec ! videorate name=videorate rate=$(rate) ! fakesink sync=true qos=true",
},
configs = {
"$(validateflow), pad=videorate:sink, buffers-checksum=as-id, ignored-event-types={ tag }",
@ -19,4 +19,4 @@ crank-clock, expected-time=0.0
crank-clock, repeat=9
wait, on-clock=true
check-position, expected-position=300000000
stop
crank-clock, repeat="$(n_cranks_to_eos)"

View File

@ -1,5 +1,4 @@
# Using an encoder/decoder to test QoS handling
# FIXME: Use a fakevideodec once merged!
set-globals, rate=(string)"0.5", decoder="! theoraenc ! theoradec !"
set-globals, rate=(string)"0.5", num_buffers=(string)5, n_cranks_to_eos=(string)1
include, location="check-rate-prop-with-decoder.meta"
include, location="check-rate-prop-with-decoder.meta"

View File

@ -1,9 +1,9 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;
event caps: video/x-raw, chroma-site=(string)jpeg, colorimetry=(string)2:4:5:0, format=(string)I420, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event caps: video/x-raw, colorimetry=(string)sRGB, format=(string)RGBA, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: content-id=0, pts=0:00:00.000000000, dur=0:00:00.033333333, flags=discont
buffer: content-id=1, pts=0:00:00.033333333, dur=0:00:00.033333333
buffer: content-id=2, pts=0:00:00.066666666, dur=0:00:00.033333334
buffer: content-id=3, pts=0:00:00.100000000, dur=0:00:00.033333333
buffer: content-id=4, pts=0:00:00.133333333, dur=0:00:00.033333333
buffer: content-id=5, pts=0:00:00.166666666, dur=0:00:00.033333334
event eos: (no structure)

View File

@ -1,5 +1,5 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;
event caps: video/x-raw, chroma-site=(string)jpeg, colorimetry=(string)2:4:5:0, format=(string)I420, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event caps: video/x-raw, colorimetry=(string)sRGB, format=(string)RGBA, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: content-id=0, pts=0:00:00.000000000, dur=0:00:00.033333333, flags=discont
buffer: content-id=0, pts=0:00:00.033333333, dur=0:00:00.033333333, flags=gap
@ -10,5 +10,5 @@ buffer: content-id=2, pts=0:00:00.166666666, dur=0:00:00.033333334, flags=gap
buffer: content-id=3, pts=0:00:00.200000000, dur=0:00:00.033333333
buffer: content-id=3, pts=0:00:00.233333333, dur=0:00:00.033333333, flags=gap
buffer: content-id=4, pts=0:00:00.266666666, dur=0:00:00.033333334
buffer: content-id=4, pts=0:00:00.300000000, dur=0:00:00.033333333, flags=gap
buffer: content-id=5, pts=0:00:00.333333333, dur=0:00:00.033333333
buffer: content-id=4, pts=0:00:00.300000000, dur=0:00:00.033333333
event eos: (no structure)

View File

@ -1,5 +1,4 @@
# Using an encoder/decoder to test QoS handling
# FIXME: Use a fakevideodec once merged!
set-globals, rate=(string)"0.5", decoder="! theoraenc ! theoradec !"
set-globals, rate=(string)"2.0", num_buffers=(string)"20", n_cranks_to_eos=(string)"2"
include, location="check-rate-prop-with-decoder.meta"
include, location="check-rate-prop-with-decoder.meta"

View File

@ -1,5 +1,5 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;
event caps: video/x-raw, chroma-site=(string)jpeg, colorimetry=(string)2:4:5:0, format=(string)I420, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event caps: video/x-raw, colorimetry=(string)sRGB, format=(string)RGBA, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: content-id=0, pts=0:00:00.000000000, dur=0:00:00.033333333, flags=discont
buffer: content-id=1, pts=0:00:00.033333333, dur=0:00:00.033333333
@ -7,3 +7,18 @@ buffer: content-id=2, pts=0:00:00.066666666, dur=0:00:00.033333334
buffer: content-id=3, pts=0:00:00.100000000, dur=0:00:00.033333333
buffer: content-id=4, pts=0:00:00.133333333, dur=0:00:00.033333333
buffer: content-id=5, pts=0:00:00.166666666, dur=0:00:00.033333334
buffer: content-id=6, pts=0:00:00.200000000, dur=0:00:00.033333333
buffer: content-id=7, pts=0:00:00.233333333, dur=0:00:00.033333333
buffer: content-id=8, pts=0:00:00.266666666, dur=0:00:00.033333334
buffer: content-id=9, pts=0:00:00.300000000, dur=0:00:00.033333333
buffer: content-id=10, pts=0:00:00.333333333, dur=0:00:00.033333333
buffer: content-id=11, pts=0:00:00.366666666, dur=0:00:00.033333334
buffer: content-id=12, pts=0:00:00.400000000, dur=0:00:00.033333333
buffer: content-id=13, pts=0:00:00.433333333, dur=0:00:00.033333333
buffer: content-id=14, pts=0:00:00.466666666, dur=0:00:00.033333334
buffer: content-id=15, pts=0:00:00.500000000, dur=0:00:00.033333333
buffer: content-id=16, pts=0:00:00.533333333, dur=0:00:00.033333333
buffer: content-id=17, pts=0:00:00.566666666, dur=0:00:00.033333334
buffer: content-id=18, pts=0:00:00.600000000, dur=0:00:00.033333333
buffer: content-id=19, pts=0:00:00.633333333, dur=0:00:00.033333333
event eos: (no structure)

View File

@ -1,14 +1,15 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;
event caps: video/x-raw, chroma-site=(string)jpeg, colorimetry=(string)2:4:5:0, format=(string)I420, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event caps: video/x-raw, colorimetry=(string)sRGB, format=(string)RGBA, framerate=(fraction)30/1, height=(int)240, interlace-mode=(string)progressive, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)320;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: content-id=0, pts=0:00:00.000000000, dur=0:00:00.033333333, flags=discont
buffer: content-id=0, pts=0:00:00.033333333, dur=0:00:00.033333333, flags=gap
buffer: content-id=1, pts=0:00:00.066666666, dur=0:00:00.033333334
buffer: content-id=1, pts=0:00:00.100000000, dur=0:00:00.033333333, flags=gap
buffer: content-id=2, pts=0:00:00.133333333, dur=0:00:00.033333333
buffer: content-id=2, pts=0:00:00.166666666, dur=0:00:00.033333334, flags=gap
buffer: content-id=3, pts=0:00:00.200000000, dur=0:00:00.033333333
buffer: content-id=3, pts=0:00:00.233333333, dur=0:00:00.033333333, flags=gap
buffer: content-id=4, pts=0:00:00.266666666, dur=0:00:00.033333334
buffer: content-id=4, pts=0:00:00.300000000, dur=0:00:00.033333333, flags=gap
buffer: content-id=5, pts=0:00:00.333333333, dur=0:00:00.033333333
buffer: content-id=2, pts=0:00:00.033333333, dur=0:00:00.033333333
buffer: content-id=4, pts=0:00:00.066666666, dur=0:00:00.033333334
buffer: content-id=6, pts=0:00:00.100000000, dur=0:00:00.033333333
buffer: content-id=8, pts=0:00:00.133333333, dur=0:00:00.033333333
buffer: content-id=10, pts=0:00:00.166666666, dur=0:00:00.033333334
buffer: content-id=12, pts=0:00:00.200000000, dur=0:00:00.033333333
buffer: content-id=14, pts=0:00:00.233333333, dur=0:00:00.033333333
buffer: content-id=16, pts=0:00:00.266666666, dur=0:00:00.033333334
buffer: content-id=18, pts=0:00:00.300000000, dur=0:00:00.033333333
buffer: content-id=19, pts=0:00:00.333333333, dur=0:00:00.033333333
event eos: (no structure)