diff options
Diffstat (limited to 'catapult/devil/devil/android/tools/video_recorder.py')
-rwxr-xr-x | catapult/devil/devil/android/tools/video_recorder.py | 79 |
1 files changed, 42 insertions, 37 deletions
diff --git a/catapult/devil/devil/android/tools/video_recorder.py b/catapult/devil/devil/android/tools/video_recorder.py index 08432640..984931f3 100755 --- a/catapult/devil/devil/android/tools/video_recorder.py +++ b/catapult/devil/devil/android/tools/video_recorder.py @@ -2,7 +2,6 @@ # Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. - """Captures a video from an Android device.""" import argparse @@ -13,8 +12,9 @@ import time import sys if __name__ == '__main__': - sys.path.append(os.path.abspath(os.path.join( - os.path.dirname(__file__), '..', '..', '..'))) + sys.path.append( + os.path.abspath( + os.path.join(os.path.dirname(__file__), '..', '..', '..'))) from devil.android import device_signal from devil.android import device_utils from devil.android.tools import script_common @@ -28,8 +28,7 @@ logger = logging.getLogger(__name__) class VideoRecorder(object): """Records a screen capture video from an Android Device (KitKat or newer).""" - def __init__(self, device, megabits_per_second=4, size=None, - rotate=False): + def __init__(self, device, megabits_per_second=4, size=None, rotate=False): """Creates a VideoRecorder instance. Args: @@ -44,7 +43,7 @@ class VideoRecorder(object): self._bit_rate = megabits_per_second * 1000 * 1000 self._device = device self._device_file = ( - '%s/screen-recording.mp4' % device.GetExternalStoragePath()) + '%s/screen-recording.mp4' % device.GetAppWritablePath()) self._recorder_thread = None self._rotate = rotate self._size = size @@ -55,6 +54,7 @@ class VideoRecorder(object): def Start(self, timeout=None): """Start recording video.""" + def screenrecord_started(): return bool(self._device.GetPids('screenrecord')) @@ -85,8 +85,8 @@ class VideoRecorder(object): def Stop(self): """Stop recording video.""" - if not self._device.KillAll('screenrecord', signum=device_signal.SIGINT, - quiet=True): + if not self._device.KillAll( + 'screenrecord', signum=device_signal.SIGINT, quiet=True): logger.warning('Nothing to kill: screenrecord was not running') self._recorder_thread.join() @@ -100,11 +100,8 @@ class VideoRecorder(object): """ # TODO(jbudorick): Merge filename generation with the logic for doing so in # DeviceUtils. - host_file_name = ( - host_file - or 'screen-recording-%s-%s.mp4' % ( - str(self._device), - time.strftime('%Y%m%dT%H%M%S', time.localtime()))) + host_file_name = (host_file or 'screen-recording-%s-%s.mp4' % (str( + self._device), time.strftime('%Y%m%dT%H%M%S', time.localtime()))) host_file_name = os.path.abspath(host_file_name) self._device.PullFile(self._device_file, host_file_name) self._device.RemovePath(self._device_file, force=True) @@ -114,24 +111,34 @@ class VideoRecorder(object): def main(): # Parse options. parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('-d', '--device', dest='devices', action='append', - help='Serial number of Android device to use.') - parser.add_argument('--blacklist-file', help='Device blacklist JSON file.') - parser.add_argument('-f', '--file', metavar='FILE', - help='Save result to file instead of generating a ' - 'timestamped file name.') - parser.add_argument('-v', '--verbose', action='store_true', - help='Verbose logging.') - parser.add_argument('-b', '--bitrate', default=4, type=float, - help='Bitrate in megabits/s, from 0.1 to 100 mbps, ' - '%(default)d mbps by default.') - parser.add_argument('-r', '--rotate', action='store_true', - help='Rotate video by 90 degrees.') - parser.add_argument('-s', '--size', metavar='WIDTHxHEIGHT', - help='Frame size to use instead of the device ' - 'screen size.') - parser.add_argument('host_file', nargs='?', - help='File to which the video capture will be written.') + script_common.AddDeviceArguments(parser) + parser.add_argument( + '-f', + '--file', + metavar='FILE', + help='Save result to file instead of generating a ' + 'timestamped file name.') + parser.add_argument( + '-v', '--verbose', action='store_true', help='Verbose logging.') + parser.add_argument( + '-b', + '--bitrate', + default=4, + type=float, + help='Bitrate in megabits/s, from 0.1 to 100 mbps, ' + '%(default)d mbps by default.') + parser.add_argument( + '-r', '--rotate', action='store_true', help='Rotate video by 90 degrees.') + parser.add_argument( + '-s', + '--size', + metavar='WIDTHxHEIGHT', + help='Frame size to use instead of the device ' + 'screen size.') + parser.add_argument( + 'host_file', + nargs='?', + help='File to which the video capture will be written.') args = parser.parse_args() @@ -140,9 +147,7 @@ def main(): if args.verbose: logging.getLogger().setLevel(logging.DEBUG) - size = (tuple(int(i) for i in args.size.split('x')) - if args.size - else None) + size = (tuple(int(i) for i in args.size.split('x')) if args.size else None) def record_video(device, stop_recording): recorder = VideoRecorder( @@ -157,9 +162,9 @@ def main(): f = recorder.Pull(f) print 'Video written to %s' % os.path.abspath(f) - parallel_devices = device_utils.DeviceUtils.parallel( - script_common.GetDevices(args.devices, args.blacklist_file), - async=True) + parallel_devices = device_utils.DeviceUtils.parallel(script_common.GetDevices( + args.devices, args.denylist_file), + async=True) stop_recording = threading.Event() running_recording = parallel_devices.pMap(record_video, stop_recording) print 'Recording. Press Enter to stop.', |