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

Unified Diff: webrtc/audio/test/low_bandwidth_audio_test.py

Issue 2694203002: Low-bandwidth audio testing (Closed)
Patch Set: Rebase Created 3 years, 9 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/audio/test/low_bandwidth_audio_test.cc ('k') | webrtc/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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__':
« no previous file with comments | « webrtc/audio/test/low_bandwidth_audio_test.cc ('k') | webrtc/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698