summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@igalia.com>2020-04-24 15:44:54 -0400
committerThibault Saunier <tsaunier@igalia.com>2020-04-27 18:29:37 -0400
commit3c3709291f02c27be5f8bc0c23b9370cd7973efd (patch)
tree50a7d743cceb485e8681cb8b63ce331713c5098a
parent974d1436ac3983a390c26b4a8b9a1e48c81e5322 (diff)
validate: Add simple tests for clock synchronization
Those tests play a videostream in forward playback, crank the clock manually checking the time spent waiting on each crank and ensuring that the dataflow is correct using the validateflow plugin. There still is a bug with duplicated caps event flowing in the fakevideosink::sinkpad which needs fixing. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-integration-testsuites/-/merge_requests/70>
-rw-r--r--testsuites/validate.testslist2
-rw-r--r--testsuites/validate/clock_sync/video_1fps.validatetest20
-rw-r--r--testsuites/validate/clock_sync/video_1fps/flow-expectations/log-videosink-sink-expected14
-rw-r--r--testsuites/validate/clock_sync/video_30fps.validatetest22
-rw-r--r--testsuites/validate/clock_sync/video_30fps/flow-expectations/log-videosink-sink-expected39
5 files changed, 97 insertions, 0 deletions
diff --git a/testsuites/validate.testslist b/testsuites/validate.testslist
index 18da890..bc896ad 100644
--- a/testsuites/validate.testslist
+++ b/testsuites/validate.testslist
@@ -855,6 +855,8 @@ validate.test.appsrc.custom_caps_single_push
validate.test.appsrc.single_push
validate.test.aspectcropratio.set_aspect_ratio_in_paused
validate.test.baseparse.single_seek
+validate.test.clock_sync.video_1fps
+validate.test.clock_sync.video_30fps
validate.test.decryptor.cenc_audio_esds_property_overrides
validate.test.flow.simple_test
validate.test.flvdemux.audio_only.play_15s
diff --git a/testsuites/validate/clock_sync/video_1fps.validatetest b/testsuites/validate/clock_sync/video_1fps.validatetest
new file mode 100644
index 0000000..592846f
--- /dev/null
+++ b/testsuites/validate/clock_sync/video_1fps.validatetest
@@ -0,0 +1,20 @@
+meta,
+ handles-states=true,
+ ignore-eos=true,
+ args = {
+ "videotestsrc pattern=blue ! video/x-raw,format=I420,framerate=1/1 ! timeoverlay ! $(videosink) name=videosink allocation-meta-flags=0",
+ },
+ configs = {
+ "$(validateflow), pad=videosink:sink, record-buffers=true, ignored-fields={\"buffers=meta\", }",
+ }
+
+play
+seek, start=0.0, stop=5.0, flags=accurate+flush, rate=1.0
+
+# First buffer is display as fast as possible
+crank-clock, expected-elapsed-time=0.0
+crank-clock, repeat=4, expected-elapsed-time=1.0
+
+# Waiting 1 second on EOS
+crank-clock, expected-elapsed-time=1.0
+stop, on-message=eos
diff --git a/testsuites/validate/clock_sync/video_1fps/flow-expectations/log-videosink-sink-expected b/testsuites/validate/clock_sync/video_1fps/flow-expectations/log-videosink-sink-expected
new file mode 100644
index 0000000..36d2135
--- /dev/null
+++ b/testsuites/validate/clock_sync/video_1fps/flow-expectations/log-videosink-sink-expected
@@ -0,0 +1,14 @@
+event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;
+event caps: video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)1/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive;
+event caps: video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)1/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive;
+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: pts=0:00:00.000000000, dur=0:00:01.000000000, flags=discont, meta=GstVideoMeta
+event flush-start: (no structure)
+event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
+event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:05.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
+buffer: pts=0:00:00.000000000, dur=0:00:01.000000000, flags=discont, meta=GstVideoMeta
+buffer: pts=0:00:01.000000000, dur=0:00:01.000000000, meta=GstVideoMeta
+buffer: pts=0:00:02.000000000, dur=0:00:01.000000000, meta=GstVideoMeta
+buffer: pts=0:00:03.000000000, dur=0:00:01.000000000, meta=GstVideoMeta
+buffer: pts=0:00:04.000000000, dur=0:00:01.000000000, meta=GstVideoMeta
+event eos: (no structure)
diff --git a/testsuites/validate/clock_sync/video_30fps.validatetest b/testsuites/validate/clock_sync/video_30fps.validatetest
new file mode 100644
index 0000000..04a8803
--- /dev/null
+++ b/testsuites/validate/clock_sync/video_30fps.validatetest
@@ -0,0 +1,22 @@
+meta,
+ handles-states=true,
+ ignore-eos=true,
+ args = {
+ "videotestsrc pattern=blue ! video/x-raw,format=I420,framerate=1/1 ! timeoverlay ! $(videosink) name=videosink allocation-meta-flags=0",
+ },
+ configs = {
+ "$(validateflow), pad=videosink:sink, record-buffers=true, ignored-fields={\"buffers=meta\", }",
+ }
+
+play
+set-property, target-element-factory-name=capsfilter, property-name=caps, property-value="video/x-raw,framerate=30/1,format=I420"
+seek, start=1.0, stop=2.0, flags=accurate+flush, rate=1.0
+
+# First buffer is display as fast as possible
+crank-clock, expected-elapsed-time=0.0, expected-time=0.0
+crank-clock, repeat=29
+
+# Waiting 1 second on EOS
+crank-clock, expected-time=1.0
+
+stop, on-message=eos
diff --git a/testsuites/validate/clock_sync/video_30fps/flow-expectations/log-videosink-sink-expected b/testsuites/validate/clock_sync/video_30fps/flow-expectations/log-videosink-sink-expected
new file mode 100644
index 0000000..491384f
--- /dev/null
+++ b/testsuites/validate/clock_sync/video_30fps/flow-expectations/log-videosink-sink-expected
@@ -0,0 +1,39 @@
+event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;
+event caps: video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive;
+event caps: video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive;
+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: pts=0:00:00.000000000, dur=0:00:00.033333333, flags=discont, meta=GstVideoMeta
+event flush-start: (no structure)
+event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
+event segment: format=TIME, start=0:00:01.000000000, offset=0:00:00.000000000, stop=0:00:02.000000000, flags=0x01, time=0:00:01.000000000, base=0:00:00.000000000, position=0:00:01.000000000
+buffer: pts=0:00:01.000000000, dur=0:00:00.033333333, flags=discont, meta=GstVideoMeta
+buffer: pts=0:00:01.033333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.066666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.100000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.133333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.166666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.200000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.233333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.266666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.300000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.333333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.366666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.400000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.433333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.466666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.500000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.533333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.566666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.600000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.633333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.666666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.700000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.733333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.766666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.800000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.833333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.866666666, dur=0:00:00.033333334, meta=GstVideoMeta
+buffer: pts=0:00:01.900000000, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.933333333, dur=0:00:00.033333333, meta=GstVideoMeta
+buffer: pts=0:00:01.966666666, dur=0:00:00.033333334, meta=GstVideoMeta
+event eos: (no structure)