You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.7 KiB
111 lines
3.7 KiB
# 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()
|