1# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
2#
3# Use of this source code is governed by a BSD-style license
4# that can be found in the LICENSE file in the root of the source
5# tree. An additional intellectual property rights grant can be found
6# in the file PATENTS.  All contributing project authors may
7# be found in the AUTHORS file in the root of the source tree.
8
9from optparse import OptionParser
10import random
11import string
12import subprocess
13import sys
14import time
15
16from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
17
18def main():
19  parser = OptionParser()
20
21  parser.add_option('--devname', dest='devname', help='The device id')
22
23  parser.add_option(
24      '--videooutsave',
25      dest='videooutsave',
26      help='The path where to save the video out file on local computer')
27
28  parser.add_option(
29      '--videoout',
30      dest='videoout',
31      help='The path where to put the video out file')
32
33  parser.add_option(
34      '--videoout_width',
35      dest='videoout_width',
36      type='int',
37      help='The width for the video out file')
38
39  parser.add_option(
40      '--videoout_height',
41      dest='videoout_height',
42      type='int',
43      help='The height for the video out file')
44
45  parser.add_option(
46      '--videoin',
47      dest='videoin',
48      help='The path where to read input file instead of camera')
49
50  parser.add_option(
51      '--call_length',
52      dest='call_length',
53      type='int',
54      help='The length of the call')
55
56  (options, args) = parser.parse_args()
57
58  print (options, args)
59
60  devname = options.devname
61
62  videoin = options.videoin
63
64  videoout = options.videoout
65  videoout_width = options.videoout_width
66  videoout_height = options.videoout_height
67
68  videooutsave = options.videooutsave
69
70  call_length = options.call_length or 10
71
72  room = ''.join(random.choice(string.ascii_letters + string.digits)
73      for _ in range(8))
74
75  # Delete output video file.
76  if videoout:
77    subprocess.check_call(['adb', '-s', devname, 'shell', 'rm', '-f',
78        videoout])
79
80  device = MonkeyRunner.waitForConnection(2, devname)
81
82  extras = {
83      'org.appspot.apprtc.USE_VALUES_FROM_INTENT': True,
84      'org.appspot.apprtc.AUDIOCODEC': 'OPUS',
85      'org.appspot.apprtc.LOOPBACK': True,
86      'org.appspot.apprtc.VIDEOCODEC': 'VP8',
87      'org.appspot.apprtc.CAPTURETOTEXTURE': False,
88      'org.appspot.apprtc.CAMERA2': False,
89      'org.appspot.apprtc.ROOMID': room}
90
91  if videoin:
92    extras.update({'org.appspot.apprtc.VIDEO_FILE_AS_CAMERA': videoin})
93
94  if videoout:
95    extras.update({
96        'org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE': videoout,
97        'org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_WIDTH': videoout_width,
98        'org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT': videoout_height})
99
100  print extras
101
102  device.startActivity(data='https://appr.tc',
103      action='android.intent.action.VIEW',
104      component='org.appspot.apprtc/.ConnectActivity', extras=extras)
105
106  print 'Running a call for %d seconds' % call_length
107  for _ in xrange(call_length):
108    sys.stdout.write('.')
109    sys.stdout.flush()
110    time.sleep(1)
111  print '\nEnding call.'
112
113  # Press back to end the call. Will end on both sides.
114  device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)
115
116  if videooutsave:
117    time.sleep(2)
118
119    subprocess.check_call(['adb', '-s', devname, 'pull',
120        videoout, videooutsave])
121
122if __name__ == '__main__':
123  main()
124
125