From 386b572066a830e15f36519a25d352d4d65041d8 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Wed, 23 Jul 2014 14:43:29 +0200 Subject: [PATCH] validate: launcher: Force clock syncronization for some scenarios In some cases it is necessary that the clock is sync so that all the actions can be executed. --- validate/data/change_state_intensive.scenario | 2 +- validate/data/fast_backward.scenario | 2 +- validate/data/fast_forward.scenario | 2 +- validate/data/seek_backward.scenario | 2 +- validate/data/seek_forward.scenario | 2 +- validate/tools/launcher/apps/gst-validate.py | 17 +++++++++++------ validate/tools/launcher/baseclasses.py | 11 +++++++++++ 7 files changed, 27 insertions(+), 11 deletions(-) diff --git a/validate/data/change_state_intensive.scenario b/validate/data/change_state_intensive.scenario index d5e54c94f5..1b10795a98 100644 --- a/validate/data/change_state_intensive.scenario +++ b/validate/data/change_state_intensive.scenario @@ -1,4 +1,4 @@ -description, duration=0, summary="Set state to NULL->PLAYING->NULL 20 times" +description, duration=0, summary="Set state to NULL->PLAYING->NULL 20 times", need-clock-sync=true set-state, state="null" set-state, state="playing" set-state, state="null" diff --git a/validate/data/fast_backward.scenario b/validate/data/fast_backward.scenario index 2c6d0ede8d..cca9985469 100644 --- a/validate/data/fast_backward.scenario +++ b/validate/data/fast_backward.scenario @@ -1,4 +1,4 @@ -description, duration=30.0, minfo-media-duration=310.0, seek=true, reverse-playback=true +description, duration=30.0, minfo-media-duration=310.0, seek=true, reverse-playback=true, need-clock-sync=true seek, name=Fast-backward-seek, playback_time=0.0, rate=-2.0, start=0.0, stop=310.0, flags=accurate+flush seek, name=Fast-backward-seek, playback_time=300.0, rate=-4.0, start=0.0, stop=300.0, flags=accurate+flush seek, name=Fast-backward-seek, playback_time=280.0, rate=-8.0, start=0.0, stop=280.0, flags=accurate+flush diff --git a/validate/data/fast_forward.scenario b/validate/data/fast_forward.scenario index 80c09b76f5..61ad939f2d 100644 --- a/validate/data/fast_forward.scenario +++ b/validate/data/fast_forward.scenario @@ -1,4 +1,4 @@ -description, duration=35.0, seek=true +description, duration=35.0, seek=true, need-clock-sync=true seek, name=Fast-forward-seek, playback_time=0.0, rate=2.0, start=0.0, flags=accurate+flush seek, name=Fast-forward-seek, playback_time="min(10.0, duration*0.25)", rate=4.0, start=0.0, flags=accurate+flush seek, name=Fast-forward-seek, playback_time="min(20.0, duration*0.50)", rate=8.0, start=0.0, flags=accurate+flush diff --git a/validate/data/seek_backward.scenario b/validate/data/seek_backward.scenario index 20b71ae4b8..5083c9b590 100644 --- a/validate/data/seek_backward.scenario +++ b/validate/data/seek_backward.scenario @@ -1,4 +1,4 @@ -description, seek=true, duration=30 +description, seek=true, duration=30, need-clock-sync=true seek, name=Backward-seek, playback_time="min(5.0, (duration/4))", rate=1.0, start=0.0, flags=accurate+flush seek, name=Backward-seek, playback_time="min(10.0, 2*(duration/4))", rate=1.0, start="min(5.0, duration/4)", flags=accurate+flush seek, name=Backward-seek, playback_time="min(15.0, 3*(duration/4))", rate=1.0, start="min(10.0, 2*(duration/4))", flags=accurate+flush diff --git a/validate/data/seek_forward.scenario b/validate/data/seek_forward.scenario index c1fa55fb77..1487cc9bb9 100644 --- a/validate/data/seek_forward.scenario +++ b/validate/data/seek_forward.scenario @@ -1,4 +1,4 @@ -description, seek=true, duration=20 +description, seek=true, duration=20, need-clock-sync=true seek, name=First-forward-seek, playback_time="min(5.0, (duration/8))", start="min(10, 2*(duration/8))", flags=accurate+flush seek, name=Second-forward-seek, playback_time="min(15.0, 3*(duration/8))", start="min(20, 4*(duration/8))", flags=accurate+flush seek, name=Third-forward-seek, playback_time="min(25, 5*(duration/8))", start="min(30.0, 6*(duration/8))", flags=accurate+flush diff --git a/validate/tools/launcher/apps/gst-validate.py b/validate/tools/launcher/apps/gst-validate.py index a55239c4ce..6bd3945a45 100644 --- a/validate/tools/launcher/apps/gst-validate.py +++ b/validate/tools/launcher/apps/gst-validate.py @@ -161,15 +161,20 @@ class GstValidatePlaybinTestsGenerator(GstValidatePipelineTestsGenerator): pipe = self._pipeline_template protocol = minfo.media_descriptor.get_protocol() - if self.test_manager.options.mute: - fakesink = "'fakesink'" - pipe += " audio-sink=%s video-sink=%s" %(fakesink, fakesink) - pipe += " uri=%s" % uri for scenario in special_scenarios + scenarios: + cpipe = pipe if not minfo.media_descriptor.is_compatible(scenario): continue + if self.test_manager.options.mute: + if scenario.needs_clock_sync(): + fakesink = "'fakesink sync=true'" + else: + fakesink = "'fakesink'" + + cpipe += " audio-sink=%s video-sink=%s" %(fakesink, fakesink) + fname = "%s.%s" % (self.get_fname(scenario, protocol), os.path.basename(uri).replace(".", "_")) @@ -177,12 +182,12 @@ class GstValidatePlaybinTestsGenerator(GstValidatePipelineTestsGenerator): if scenario.does_reverse_playback() and protocol == Protocols.HTTP: # 10MB so we can reverse playback - pipe += " ring-buffer-max-size=10485760" + cpipe += " ring-buffer-max-size=10485760" self.add_test(GstValidateLaunchTest(fname, self.test_manager.options, self.test_manager.reporter, - pipe, + cpipe, scenario=scenario, media_descriptor=minfo.media_descriptor) ) diff --git a/validate/tools/launcher/baseclasses.py b/validate/tools/launcher/baseclasses.py index 0c83566671..4cb863d4e3 100644 --- a/validate/tools/launcher/baseclasses.py +++ b/validate/tools/launcher/baseclasses.py @@ -849,6 +849,12 @@ class Scenario(object): return False + def needs_clock_sync(self): + if hasattr(self, "need_clock_sync"): + return bool(self.need_clock_sync) + + return False + def does_reverse_playback(self): if hasattr(self, "reverse_playback"): return bool(self.seek) @@ -1032,6 +1038,11 @@ class MediaDescriptor(Loggable): scenario, self.get_uri()) return False + if self.is_image() and scenario.needs_clock_sync(): + self.debug("Do not run %s as %s is an image", + scenario, self.get_uri()) + return False + for track_type in ['audio', 'subtitle']: if self.get_num_tracks(track_type) < scenario.get_min_tracks(track_type): self.debug("%s -- %s | At least %s %s track needed < %s"