# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import argparse, common, datetime from autotest_lib.client.common_lib import file_utils from autotest_lib.client.common_lib.cros import chrome from autotest_lib.client.cros.video import media_test_factory, \ sequence_generator def main(): """ Loads specified video in a chrome HTML5 player and collects its screenshots at specified time instances. """ parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description='Capture images of a video.', epilog=''' This tool supports image-comparison-based video glitch detection tests. Use this tool to capture golden/reference images that will be used to verify test images captured during a video playback. Run this tool directly on the device. Copy tool first into /usr/local/autotest/cros so that autotest's common.py is imported so as to resolve autotest references correctly. Output images will be placed under /tmp/test. Images will be saved as hh_mm_ss_mss.png denoting the moment in time it was captured. ''') parser.add_argument("name", help="Name of video to use.") parser.add_argument("format", choices=['mp4', 'webm'], help="Video format to use.") parser.add_argument("definition", choices=['480p', '720p', '1080p', '720p_1080p'], help="Video definition to use.") parser.add_argument("--start", default="00:01", help="Time to start taking screenshots. (mm:ss)") parser.add_argument("--stop", help="Time to stop taking screenshots. (mm:ss).") parser.add_argument("interval", type=int, help="Seconds between two successive captures.") args = parser.parse_args() time_format = '%M:%S' # Parse time arguments from user # Start time has a default argument of 01:00, parse right away # Parse stop time later as we don't know the length of the video, # the factory does tmp = datetime.datetime.strptime(args.start, time_format) start = datetime.timedelta(minutes=tmp.minute, seconds=tmp.second) with chrome.Chrome(init_network_controller=True) as cr: bindir = '/usr/local/autotest/cros/video' cr.browser.platform.SetHTTPServerDirectories(bindir) factory = media_test_factory.MediaTestFactory( cr.browser.tabs[0], cr.browser.platform.http_server, bindir, 'dev', args.name, args.format, args.definition) # if stop time is not specified, use the length of the video if args.stop is None: stop = factory.media_length else: tmp = datetime.datetime.strptime(args.stop, time_format) stop = datetime.timedelta(minutes=tmp.minute, seconds=tmp.second) file_utils.rm_dir_if_exists(factory.test_working_dir) file_utils.make_leaf_dir(factory.test_working_dir) seq = sequence_generator.generate_interval_sequence(start, stop, args.interval) collector = factory.make_video_screenshot_collector() collector.ensure_player_is_ready() collector.collect_multiple_screenshots(seq) if __name__ == '__main__': main()