Index: webrtc/examples/androidtests/video_quality_loopback_test.py |
diff --git a/webrtc/examples/androidtests/video_quality_loopback_test.py b/webrtc/examples/androidtests/video_quality_loopback_test.py |
index 2500057320aa6c9e650604a1faaee2873728b431..e8c4381f1f94fff230e8acc26c1ab92b59cbe363 100755 |
--- a/webrtc/examples/androidtests/video_quality_loopback_test.py |
+++ b/webrtc/examples/androidtests/video_quality_loopback_test.py |
@@ -19,7 +19,6 @@ It assumes you have a Android device plugged in. |
""" |
import argparse |
-import atexit |
import logging |
import os |
import shutil |
@@ -32,13 +31,6 @@ import time |
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
SRC_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir, |
os.pardir)) |
-WEBRTC_DEPS_INSTRUCTIONS = """Please add a solution to your .gclient file like |
-this and run gclient sync: |
-{ |
- "name": "webrtc.DEPS", |
- "url": "https://chromium.googlesource.com/chromium/deps/webrtc/webrtc.DEPS", |
-}, |
-""" |
class Error(Exception): |
@@ -62,7 +54,6 @@ def _RunCommandWithOutput(argv, cwd=SRC_DIR, **kwargs): |
def _RunBackgroundCommand(argv, cwd=SRC_DIR): |
logging.info('Running %r', argv) |
process = subprocess.Popen(argv, cwd=cwd) |
- atexit.register(process.terminate) |
time.sleep(0.5) |
status = process.poll() |
if status: # is not None or 0 |
@@ -108,8 +99,14 @@ def main(): |
toolchain_dir = os.path.join(tools_dir, 'video_quality_toolchain') |
# Download ffmpeg and zxing. |
- download_script = os.path.join(tools_dir, 'download_tools.py') |
- _RunCommand([sys.executable, download_script, toolchain_dir]) |
+ download_tools_script = os.path.join(tools_dir, 'download_tools.py') |
+ _RunCommand([sys.executable, download_tools_script, toolchain_dir]) |
+ |
+ testing_tools_dir = os.path.join(SRC_DIR, 'webrtc', 'tools', 'testing') |
+ |
+ # Download, extract and build AppRTC. |
+ setup_apprtc_script = os.path.join(testing_tools_dir, 'setup_apprtc.py') |
+ _RunCommand([sys.executable, setup_apprtc_script, temp_dir]) |
# Select an Android device in case multiple are connected |
for line in _RunCommandWithOutput([adb_path, 'devices']).splitlines(): |
@@ -119,82 +116,88 @@ def main(): |
else: |
raise VideoQualityTestError('Cannot find any connected Android device.') |
- # Start AppRTC Server |
- dev_appserver = os.path.join(SRC_DIR, 'out', 'apprtc', 'google_appengine', |
- 'dev_appserver.py') |
- if not os.path.isfile(dev_appserver): |
- raise VideoQualityTestError('Cannot find %s.\n%s' % |
- (dev_appserver, WEBRTC_DEPS_INSTRUCTIONS)) |
- appengine_dir = os.path.join(SRC_DIR, 'out', 'apprtc', 'out', 'app_engine') |
- _RunBackgroundCommand(['python', dev_appserver, appengine_dir, |
- '--port=9999', '--admin_port=9998', |
- '--skip_sdk_update_check', '--clear_datastore=yes']) |
- |
- # Start Collider |
- collider_path = os.path.join(SRC_DIR, 'out', 'go-workspace', 'bin', |
- 'collidermain') |
- if not os.path.isfile(collider_path): |
- raise VideoQualityTestError('Cannot find %s.\n%s' % |
- (collider_path, WEBRTC_DEPS_INSTRUCTIONS)) |
- _RunBackgroundCommand([collider_path, '-tls=false', |
- '-port=8089', '-room-server=http://localhost:9999']) |
- |
- # Start adb reverse forwarder |
- reverseforwarder_path = os.path.join( |
- SRC_DIR, 'build', 'android', 'adb_reverse_forwarder.py') |
- _RunBackgroundCommand([reverseforwarder_path, '--device', android_device, |
- '9999', '9999', '8089', '8089']) |
- |
- # Run the Espresso code. |
- test_script = os.path.join(build_dir_android, |
- 'bin', 'run_AppRTCMobileTestStubbedVideoIO') |
- _RunCommand([test_script, '--device', android_device]) |
- |
- # Pull the output video. |
- test_video = os.path.join(temp_dir, 'test_video.y4m') |
- _RunCommand([adb_path, '-s', android_device, |
- 'pull', '/sdcard/output.y4m', test_video]) |
- |
- test_video_yuv = os.path.join(temp_dir, 'test_video.yuv') |
- |
- ffmpeg_path = os.path.join(toolchain_dir, 'linux', 'ffmpeg') |
- |
- def ConvertVideo(input_video, output_video): |
- _RunCommand([ffmpeg_path, '-y', '-i', input_video, output_video]) |
- |
- ConvertVideo(test_video, test_video_yuv) |
- |
- reference_video = os.path.join(SRC_DIR, |
- 'resources', 'reference_video_640x360_30fps.y4m') |
- |
- reference_video_yuv = os.path.join(temp_dir, |
- 'reference_video_640x360_30fps.yuv') |
- |
- ConvertVideo(reference_video, reference_video_yuv) |
- |
- # Run compare script. |
- compare_script = os.path.join(SRC_DIR, 'webrtc', 'tools', 'compare_videos.py') |
- zxing_path = os.path.join(toolchain_dir, 'linux', 'zxing') |
- |
- # The frame_analyzer binary should be built for local computer and not for |
- # Android |
- frame_analyzer = os.path.join(build_dir_x86, 'frame_analyzer') |
- |
- frame_width = 640 |
- frame_height = 360 |
- |
- stats_file_ref = os.path.join(temp_dir, 'stats_ref.txt') |
- stats_file_test = os.path.join(temp_dir, 'stats_test.txt') |
- |
- _RunCommand([ |
- sys.executable, compare_script, '--ref_video', reference_video_yuv, |
- '--test_video', test_video_yuv, '--yuv_frame_width', str(frame_width), |
- '--yuv_frame_height', str(frame_height), |
- '--stats_file_ref', stats_file_ref, |
- '--stats_file_test', stats_file_test, '--frame_analyzer', frame_analyzer, |
- '--ffmpeg_path', ffmpeg_path, '--zxing_path', zxing_path]) |
- |
- shutil.rmtree(temp_dir) |
+ processes = [] |
+ try: |
+ # Start AppRTC Server |
+ dev_appserver = os.path.join(temp_dir, 'apprtc', 'temp', 'google-cloud-sdk', |
+ 'bin', 'dev_appserver.py') |
+ appengine_dir = os.path.join(temp_dir, 'apprtc', 'out', 'app_engine') |
+ processes.append(_RunBackgroundCommand([ |
+ 'python', dev_appserver, appengine_dir, |
+ '--port=9999', '--admin_port=9998', |
+ '--skip_sdk_update_check', '--clear_datastore=yes'])) |
+ |
+ # Start Collider |
+ collider_path = os.path.join(temp_dir, 'collider', 'collidermain') |
+ processes.append(_RunBackgroundCommand([ |
+ collider_path, '-tls=false', '-port=8089', |
+ '-room-server=http://localhost:9999'])) |
+ |
+ # Start adb reverse forwarder |
+ reverseforwarder_path = os.path.join( |
+ SRC_DIR, 'build', 'android', 'adb_reverse_forwarder.py') |
+ processes.append(_RunBackgroundCommand([ |
+ reverseforwarder_path, '--device', android_device, |
+ '9999', '9999', '8089', '8089'])) |
+ |
+ # Run the Espresso code. |
+ test_script = os.path.join(build_dir_android, |
+ 'bin', 'run_AppRTCMobileTestStubbedVideoIO') |
+ _RunCommand([test_script, '--device', android_device]) |
+ |
+ # Pull the output video. |
+ test_video = os.path.join(temp_dir, 'test_video.y4m') |
+ _RunCommand([adb_path, '-s', android_device, |
+ 'pull', '/sdcard/output.y4m', test_video]) |
+ |
+ test_video_yuv = os.path.join(temp_dir, 'test_video.yuv') |
+ |
+ ffmpeg_path = os.path.join(toolchain_dir, 'linux', 'ffmpeg') |
+ |
+ def ConvertVideo(input_video, output_video): |
+ _RunCommand([ffmpeg_path, '-y', '-i', input_video, output_video]) |
+ |
+ ConvertVideo(test_video, test_video_yuv) |
+ |
+ reference_video = os.path.join(SRC_DIR, |
+ 'resources', 'reference_video_640x360_30fps.y4m') |
+ |
+ reference_video_yuv = os.path.join(temp_dir, |
+ 'reference_video_640x360_30fps.yuv') |
+ |
+ ConvertVideo(reference_video, reference_video_yuv) |
+ |
+ # Run compare script. |
+ compare_script = os.path.join(SRC_DIR, 'webrtc', 'tools', |
+ 'compare_videos.py') |
+ zxing_path = os.path.join(toolchain_dir, 'linux', 'zxing') |
+ |
+ # The frame_analyzer binary should be built for local computer and not for |
+ # Android |
+ frame_analyzer = os.path.join(build_dir_x86, 'frame_analyzer') |
+ |
+ frame_width = 640 |
+ frame_height = 360 |
+ |
+ stats_file_ref = os.path.join(temp_dir, 'stats_ref.txt') |
+ stats_file_test = os.path.join(temp_dir, 'stats_test.txt') |
+ |
+ _RunCommand([ |
+ sys.executable, compare_script, '--ref_video', reference_video_yuv, |
+ '--test_video', test_video_yuv, '--yuv_frame_width', str(frame_width), |
+ '--yuv_frame_height', str(frame_height), |
+ '--stats_file_ref', stats_file_ref, |
+ '--stats_file_test', stats_file_test, |
+ '--frame_analyzer', frame_analyzer, |
+ '--ffmpeg_path', ffmpeg_path, '--zxing_path', zxing_path]) |
+ |
+ finally: |
+ for process in processes: |
+ if process: |
+ process.terminate() |
+ process.wait() |
+ |
+ shutil.rmtree(temp_dir) |
if __name__ == '__main__': |