Chromium Code Reviews| Index: webrtc/audio/test/low_bandwidth_audio_test.py |
| diff --git a/webrtc/audio/test/low_bandwidth_audio_test.py b/webrtc/audio/test/low_bandwidth_audio_test.py |
| index aaba9d23984c587fce0a0a8b4686a80f29b5a080..3b5a35b1185052e26c9bf87d7261d8ab6cb45d94 100755 |
| --- a/webrtc/audio/test/low_bandwidth_audio_test.py |
| +++ b/webrtc/audio/test/low_bandwidth_audio_test.py |
| @@ -17,6 +17,7 @@ output files will be performed. |
| import argparse |
| import logging |
| import os |
| +import re |
| import subprocess |
| import sys |
| @@ -26,31 +27,96 @@ SRC_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir, |
| os.pardir)) |
| -def _RunCommand(argv, cwd=SRC_DIR, **kwargs): |
| - logging.info('Running %r', argv) |
| - subprocess.check_call(argv, cwd=cwd, **kwargs) |
| +def _LogCommand(command): |
| + logging.info('Running %r', command) |
| + return command |
| def _ParseArgs(): |
| parser = argparse.ArgumentParser(description='Run low-bandwidth audio tests.') |
| parser.add_argument('build_dir', |
| help='Path to the build directory (e.g. out/Release).') |
| + parser.add_argument('--remove', action='store_true', |
| + help='Remove output audio files after testing.') |
| args = parser.parse_args() |
| return args |
| +def _GetPlatform(): |
| + if sys.platform == 'win32': |
| + return 'win' |
| + elif sys.platform == 'darwin': |
| + return 'mac' |
| + elif sys.platform.startswith('linux'): |
| + return 'linux' |
| + |
| + |
| +def _GetExecutableExtension(): |
| + if sys.platform == 'win32': |
| + return '.exe' |
| + else: |
| + return '' |
| + |
| + |
| +def _DownloadTools(): |
| + tools_dir = os.path.join(SRC_DIR, 'tools-webrtc') |
| + toolchain_dir = os.path.join(tools_dir, 'audio_quality') |
| + |
| + # Download pesq. |
| + download_script = os.path.join(tools_dir, 'download_tools.py') |
| + command = [sys.executable, download_script, toolchain_dir] |
| + subprocess.check_call(_LogCommand(command)) |
| + |
| + pesq_path = os.path.join(toolchain_dir, _GetPlatform(), |
| + 'pesq' + _GetExecutableExtension()) |
| + return pesq_path |
| + |
| + |
| def main(): |
| # pylint: disable=W0101 |
| logging.basicConfig(level=logging.INFO) |
| args = _ParseArgs() |
| - test_executable = os.path.join(args.build_dir, 'low_bandwidth_audio_test') |
| - if sys.platform == 'win32': |
| - test_executable += '.exe' |
| + pesq_path = _DownloadTools() |
| + |
| + test_executable_path = os.path.join(args.build_dir, |
| + 'low_bandwidth_audio_test' + _GetExecutableExtension()) |
| + |
| + # Start the test executable that produces audio files. |
| + command = [test_executable_path] |
| + test_process = subprocess.Popen(_LogCommand(command), stdout=subprocess.PIPE) |
| + |
| + for line in iter(test_process.stdout.readline, ''): |
| + # Echo the output to screen. |
| + sys.stdout.write(line) |
| + |
| + # Extract specific lines that contain information about produced files. |
| + match = re.search(r'^TEST (\w+) ([^:]+?):([^:]+?)\n?$', line) |
| + if not match: |
| + continue |
| + test_name, reference_file, degraded_file = match.groups() |
| + |
| + # Analyze audio |
| + command = [pesq_path, '+16000', reference_file, degraded_file] |
| + pesq_output = subprocess.check_output(_LogCommand(command)) |
| + |
| + if args.remove: |
| + os.remove(degraded_file) |
| + |
| + # Find the scores in stdout of pesq. |
| + match = re.search( |
| + r'Prediction \(Raw MOS, MOS-LQO\):\s+=\s+([\d.]+)\s+([\d.]+)', |
| + pesq_output) |
| + if match: |
| + raw_mos, _ = match.groups() |
| - _RunCommand([test_executable]) |
| + # Output a result for the perf dashboard. |
| + print 'RESULT pesq_mos: %s= %s score' % (test_name, raw_mos) |
| + else: |
| + logging.error('PESQ: %s', pesq_output.splitlines()[-1]) |
| + return test_process.wait() |
|
kjellander_webrtc
2017/03/17 07:11:41
+1 blank line for top-level statements
https://goo
oprypin_webrtc
2017/03/17 10:16:51
Done.
|
| if __name__ == '__main__': |
| sys.exit(main()) |