Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(491)

Side by Side Diff: build/android/pylib/screenshot.py

Issue 1522313002: [Android] Move screenshot and video_recorder into devil. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix video_recorder timing Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/devil/android/tools/video_recorder.py ('k') | build/android/screenshot.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import logging
6 import os
7 import tempfile
8 import time
9
10 from devil.android import device_signal
11 from devil.utils import cmd_helper
12
13
14 class VideoRecorder(object):
15 """Records a screen capture video from an Android Device (KitKat or newer).
16
17 Args:
18 device: DeviceUtils instance.
19 host_file: Path to the video file to store on the host.
20 megabits_per_second: Video bitrate in megabits per second. Allowed range
21 from 0.1 to 100 mbps.
22 size: Video frame size tuple (width, height) or None to use the device
23 default.
24 rotate: If True, the video will be rotated 90 degrees.
25 """
26 def __init__(self, device, megabits_per_second=4, size=None,
27 rotate=False):
28 self._device = device
29 self._device_file = (
30 '%s/screen-recording.mp4' % device.GetExternalStoragePath())
31 self._recorder = None
32 self._recorder_stdout = None
33 self._is_started = False
34
35 self._args = ['adb']
36 if str(self._device):
37 self._args += ['-s', str(self._device)]
38 self._args += ['shell', 'screenrecord', '--verbose']
39 self._args += ['--bit-rate', str(megabits_per_second * 1000 * 1000)]
40 if size:
41 self._args += ['--size', '%dx%d' % size]
42 if rotate:
43 self._args += ['--rotate']
44 self._args += [self._device_file]
45
46 def Start(self):
47 """Start recording video."""
48 self._recorder_stdout = tempfile.mkstemp()[1]
49 self._recorder = cmd_helper.Popen(
50 self._args, stdout=open(self._recorder_stdout, 'w'))
51 if not self._device.GetPids('screenrecord'):
52 raise RuntimeError('Recording failed. Is your device running Android '
53 'KitKat or later?')
54
55 def IsStarted(self):
56 if not self._is_started:
57 for line in open(self._recorder_stdout):
58 self._is_started = line.startswith('Content area is ')
59 if self._is_started:
60 break
61 return self._is_started
62
63 def Stop(self):
64 """Stop recording video."""
65 os.remove(self._recorder_stdout)
66 self._is_started = False
67 if not self._recorder:
68 return
69 if not self._device.KillAll('screenrecord', signum=device_signal.SIGINT,
70 quiet=True):
71 logging.warning('Nothing to kill: screenrecord was not running')
72 self._recorder.wait()
73
74 def Pull(self, host_file=None):
75 """Pull resulting video file from the device.
76
77 Args:
78 host_file: Path to the video file to store on the host.
79 Returns:
80 Output video file name on the host.
81 """
82 # TODO(jbudorick): Merge filename generation with the logic for doing so in
83 # DeviceUtils.
84 host_file_name = (
85 host_file
86 or 'screen-recording-%s.mp4' % time.strftime('%Y%m%dT%H%M%S',
87 time.localtime()))
88 host_file_name = os.path.abspath(host_file_name)
89 self._device.PullFile(self._device_file, host_file_name)
90 self._device.RunShellCommand('rm -f "%s"' % self._device_file)
91 return host_file_name
OLDNEW
« no previous file with comments | « build/android/devil/android/tools/video_recorder.py ('k') | build/android/screenshot.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698