| 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..6482d3d0209cba828185f771b1299d8c0e355304 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,30 +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()
 | 
| +
 | 
| +      # 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])
 | 
|  
 | 
| -  _RunCommand([test_executable])
 | 
| +  return test_process.wait()
 | 
|  
 | 
|  
 | 
|  if __name__ == '__main__':
 | 
| 
 |