diff --git a/validate/tools/launcher/apps/Makefile.am b/validate/tools/launcher/apps/Makefile.am index 76860ac13c..27a9946b40 100644 --- a/validate/tools/launcher/apps/Makefile.am +++ b/validate/tools/launcher/apps/Makefile.am @@ -2,5 +2,5 @@ appsdir = $(libdir)/gst-validate-launcher/python/launcher/apps/ apps_PYTHON = \ ges-launch.py \ - validate_default_testsuite.py\ + validate/validate_testsuite.py\ gst-validate.py diff --git a/validate/tools/launcher/apps/gst-validate.py b/validate/tools/launcher/apps/gst-validate.py index 77fa5e29dd..7e5545cec0 100644 --- a/validate/tools/launcher/apps/gst-validate.py +++ b/validate/tools/launcher/apps/gst-validate.py @@ -256,6 +256,76 @@ class GstValidatePlaybinTestsGenerator(GstValidatePipelineTestsGenerator): ) +class GstValidateMixerTestsGenerator(GstValidatePipelineTestsGenerator): + def __init__(self, name, test_manager, mixer, media_type, converter="", num_sources=3, + mixed_srcs={}, valid_scenarios=[]): + pipe_template = "%(mixer)s name=_mixer ! " + converter + " ! %(sink)s " + self.converter = converter + self.mixer = mixer + self.media_type = media_type + self.num_sources = num_sources + self.mixed_srcs = mixed_srcs + super(GstValidateMixerTestsGenerator, self).__init__(name, test_manager, pipe_template, + valid_scenarios=valid_scenarios) + + def populate_tests(self, uri_minfo_special_scenarios, scenarios): + wanted_ressources = [] + for uri, minfo, special_scenarios in uri_minfo_special_scenarios: + protocol = minfo.media_descriptor.get_protocol() + if protocol == Protocols.FILE and \ + minfo.media_descriptor.get_num_tracks(self.media_type) > 0: + wanted_ressources.append((uri, minfo)) + + if not self.mixed_srcs: + if not wanted_ressources: + return + + for i in range(len(uri_minfo_special_scenarios) / self.num_sources): + can_run = True + srcs = [] + name = "" + for nsource in range(self.num_sources): + uri, minfo = wanted_ressources[i + nsource] + srcs.append("uridecodebin uri=%s ! %s" % (uri, self.converter)) + fname = os.path.basename(uri).replace(".", "_") + if not name: + name = fname + else: + name += "+%s" % fname + + self.mixed_srcs[name] = tuple(srcs) + + for name, srcs in self.mixed_srcs.iteritems(): + if isinstance(srcs, dict): + pipe_arguments = {"mixer": self.mixer + " %s" % srcs["mixer_props"]} + srcs = srcs["sources"] + else: + pipe_arguments = {"mixer": self.mixer} + + if self.test_manager.options.mute: + pipe_arguments["sink"] = "'fakesink sync=true'" + else: + pipe_arguments["sink"] = "auto%ssink" % self.media_type + + pipe = self._pipeline_template % pipe_arguments + + for src in srcs: + pipe += "%s ! _mixer. " % src + + for scenario in scenarios: + fname = self.get_fname(scenario, Protocols.FILE) + "." + fname += name + + self.debug("Adding: %s", fname) + + self.add_test(GstValidateLaunchTest(fname, + self.test_manager.options, + self.test_manager.reporter, + pipe, + scenario=scenario) + ) + + class GstValidateLaunchTest(GstValidateTest): def __init__(self, classname, options, reporter, pipeline_desc, timeout=DEFAULT_TIMEOUT, scenario=None, media_descriptor=None): @@ -403,7 +473,7 @@ class GstValidateTestManager(GstValidateBaseTestManager): self._run_defaults = True self._is_populated = False execfile(os.path.join(os.path.dirname(__file__), "apps", - "validate_default_testsuite.py"), globals()) + "validate", "validate_testsuite.py"), globals()) def init(self): if which(GST_VALIDATE_COMMAND) and which(GST_VALIDATE_TRANSCODING_COMMAND): @@ -422,7 +492,10 @@ not been tested and explicitely activated if you set use --wanted-tests ALL""") return if not self.options.config: - self.register_defaults() + if self._run_defaults: + self.register_defaults() + else: + self.register_all() self._is_populated = True diff --git a/validate/tools/launcher/apps/validate_default_testsuite.py b/validate/tools/launcher/apps/validate/validate_testsuite.py similarity index 63% rename from validate/tools/launcher/apps/validate_default_testsuite.py rename to validate/tools/launcher/apps/validate/validate_testsuite.py index 193e7be57d..d0ddbfb706 100644 --- a/validate/tools/launcher/apps/validate_default_testsuite.py +++ b/validate/tools/launcher/apps/validate/validate_testsuite.py @@ -20,6 +20,28 @@ # Boston, MA 02110-1301, USA. +valid_mixing_scenarios=["play_15s", + "fast_forward", + "seek_forward", + "seek_backward", + "seek_with_stop", + "scrub_forward_seeking"] + + +def register_compositing_tests(self): + """ + Those tests are not activated in the default testsuite, + they should be activated in a configuration file. + """ + for compositor in ["compositor", "glmixer"]: + if gst_validate_checkout_element_present(compositor): + self.add_generators(GstValidateMixerTestsGenerator(compositor, self, + compositor, + "video", + converter="deinterlace ! videoconvert ! videorate ! videoscale ! video/x-raw,framerate=25/1,pixel-aspect-ratio=1/1", + valid_scenarios=valid_mixing_scenarios)) + + def register_default_test_generators(self): """ Registers default test generators @@ -28,6 +50,22 @@ def register_default_test_generators(self): GstValidateMediaCheckTestsGenerator(self), GstValidateTranscodingTestsGenerator(self)]) + for compositor in ["compositor", "glvideomixer"]: + self.add_generators(GstValidateMixerTestsGenerator(compositor + ".simple", self, + compositor, + "video", + converter="deinterlace ! videoconvert", + mixed_srcs= { + "synchronized": {"mixer_props": "sink_1::alpha=0.5 sink_1::xpos=50 sink_1::ypos=50", + "sources": + ("videotestsrc pattern=snow timestamp-offset=3000000000 ! 'video/x-raw,format=AYUV,width=640,height=480,framerate=(fraction)30/1' ! timeoverlay", + "videotestsrc pattern=smpte ! 'video/x-raw,format=AYUV,width=800,height=600,framerate=(fraction)10/1' ! timeoverlay")}, + "bgra": + ("videotestsrc ! video/x-raw, framerate=\(fraction\)10/1, width=100, height=100", + "videotestsrc ! video/x-raw, framerate=\(fraction\)5/1, width=320, height=240") + }, + valid_scenarios=valid_mixing_scenarios)) + def register_default_scenarios(self): """ @@ -95,8 +133,15 @@ def register_defaults(self): self.register_default_blacklist() self.register_default_test_generators() + +def register_all(self): + self.register_defaults() + self.register_compositing_tests() + + try: GstValidateTestManager.register_defaults = register_defaults + GstValidateTestManager.register_all = register_all GstValidateTestManager.register_default_blacklist = register_default_blacklist GstValidateTestManager.register_default_test_generators = register_default_test_generators GstValidateTestManager.register_default_scenarios = register_default_scenarios