| # 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() |