Add Windows, Mac, Android support to low bandwidth audio test
BUG=webrtc:7229 Review-Url: https://codereview.webrtc.org/2767383005 Cr-Commit-Position: refs/heads/master@{#17470}
This commit is contained in:
parent
30cbd0ba8f
commit
6d305baa04
@ -20,6 +20,8 @@ import sys
|
||||
|
||||
|
||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
# Needed to properly resolve PATH and executable extensions on Windows.
|
||||
USE_SHELL = sys.platform == 'win32'
|
||||
|
||||
|
||||
def main(directories):
|
||||
@ -37,7 +39,7 @@ def main(directories):
|
||||
path,
|
||||
]
|
||||
print 'Downloading precompiled tools...'
|
||||
subprocess.check_call(cmd)
|
||||
subprocess.check_call(cmd, shell=USE_SHELL)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@ -321,7 +321,10 @@ if (!build_with_chromium) {
|
||||
]
|
||||
}
|
||||
if (rtc_enable_protobuf) {
|
||||
deps += [ "logging:rtc_event_log2rtp_dump" ]
|
||||
deps += [
|
||||
"audio:low_bandwidth_audio_test",
|
||||
"logging:rtc_event_log2rtp_dump",
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,9 +78,6 @@ if (rtc_include_tests) {
|
||||
"//testing/gmock",
|
||||
"//testing/gtest",
|
||||
]
|
||||
if (rtc_enable_protobuf) {
|
||||
deps += [ ":low_bandwidth_audio_test" ]
|
||||
}
|
||||
|
||||
if (!build_with_chromium && is_clang) {
|
||||
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
|
||||
@ -89,7 +86,7 @@ if (rtc_include_tests) {
|
||||
}
|
||||
|
||||
if (rtc_enable_protobuf) {
|
||||
rtc_executable("low_bandwidth_audio_test") {
|
||||
rtc_test("low_bandwidth_audio_test") {
|
||||
testonly = true
|
||||
|
||||
sources = [
|
||||
@ -101,7 +98,6 @@ if (rtc_include_tests) {
|
||||
"../common_audio",
|
||||
"../system_wrappers",
|
||||
"../test:fake_audio_device",
|
||||
"../test:run_test",
|
||||
"../test:test_common",
|
||||
"../test:test_main",
|
||||
]
|
||||
|
||||
@ -13,7 +13,6 @@
|
||||
#include "webrtc/audio/test/low_bandwidth_audio_test.h"
|
||||
#include "webrtc/common_audio/wav_file.h"
|
||||
#include "webrtc/test/gtest.h"
|
||||
#include "webrtc/test/run_test.h"
|
||||
#include "webrtc/system_wrappers/include/sleep.h"
|
||||
#include "webrtc/test/testsupport/fileutils.h"
|
||||
|
||||
@ -109,7 +108,7 @@ void AudioQualityTest::OnTestFinished() {
|
||||
|
||||
// Output information about the input and output audio files so that further
|
||||
// processing can be done by an external process.
|
||||
printf("TEST %s %s:%s\n", test_info->name(),
|
||||
printf("TEST %s %s %s\n", test_info->name(),
|
||||
AudioInputFile().c_str(), AudioOutputFile().c_str());
|
||||
}
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@ import argparse
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
@ -38,6 +39,9 @@ def _ParseArgs():
|
||||
help='Path to the build directory (e.g. out/Release).')
|
||||
parser.add_argument('--remove', action='store_true',
|
||||
help='Remove output audio files after testing.')
|
||||
parser.add_argument('--android', action='store_true',
|
||||
help='Perform the test on a connected Android device instead.')
|
||||
parser.add_argument('--adb-path', help='Path to adb binary.', default='adb')
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
@ -51,13 +55,6 @@ def _GetPlatform():
|
||||
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')
|
||||
@ -67,11 +64,24 @@ def _DownloadTools():
|
||||
command = [sys.executable, download_script, toolchain_dir]
|
||||
subprocess.check_call(_LogCommand(command))
|
||||
|
||||
pesq_path = os.path.join(toolchain_dir, _GetPlatform(),
|
||||
'pesq' + _GetExecutableExtension())
|
||||
pesq_path = os.path.join(toolchain_dir, _GetPlatform(), 'pesq')
|
||||
return pesq_path
|
||||
|
||||
|
||||
def _GetFile(file_path, out_dir, android=False, adb_path=None):
|
||||
out_file_name = os.path.basename(file_path)
|
||||
out_file_path = os.path.join(out_dir, out_file_name)
|
||||
|
||||
if android:
|
||||
# Pull the file from the connected Android device
|
||||
adb_command = [adb_path, 'pull', file_path, out_dir]
|
||||
subprocess.check_call(_LogCommand(adb_command))
|
||||
elif os.path.abspath(file_path) != os.path.abspath(out_file_path):
|
||||
shutil.copy(file_path, out_file_path)
|
||||
|
||||
return out_file_path
|
||||
|
||||
|
||||
def main():
|
||||
# pylint: disable=W0101
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
@ -80,29 +90,41 @@ def main():
|
||||
|
||||
pesq_path = _DownloadTools()
|
||||
|
||||
test_executable_path = os.path.join(args.build_dir,
|
||||
'low_bandwidth_audio_test' + _GetExecutableExtension())
|
||||
out_dir = os.path.join(args.build_dir, '..')
|
||||
if args.android:
|
||||
test_command = [os.path.join(args.build_dir, 'bin',
|
||||
'run_low_bandwidth_audio_test'), '-v']
|
||||
else:
|
||||
test_command = [os.path.join(args.build_dir, 'low_bandwidth_audio_test')]
|
||||
|
||||
# Start the test executable that produces audio files.
|
||||
command = [test_executable_path]
|
||||
test_process = subprocess.Popen(_LogCommand(command), stdout=subprocess.PIPE)
|
||||
test_process = subprocess.Popen(_LogCommand(test_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)
|
||||
# Output from Android has a prefix, need to skip it.
|
||||
match = re.search(r'^(?:I\b.+\b)?TEST (\w+) ([^ ]+?) ([^ ]+?)\s*$', line)
|
||||
if not match:
|
||||
continue
|
||||
test_name, reference_file, degraded_file = match.groups()
|
||||
test_name = match.group(1)
|
||||
reference_file = _GetFile(match.group(2), out_dir,
|
||||
args.android, args.adb_path)
|
||||
degraded_file = _GetFile(match.group(3), out_dir,
|
||||
args.android, args.adb_path)
|
||||
|
||||
# Analyze audio
|
||||
command = [pesq_path, '+16000', reference_file, degraded_file]
|
||||
pesq_output = subprocess.check_output(_LogCommand(command))
|
||||
|
||||
if args.remove:
|
||||
os.remove(degraded_file)
|
||||
# Analyze audio.
|
||||
pesq_command = [pesq_path, '+16000',
|
||||
os.path.basename(reference_file),
|
||||
os.path.basename(degraded_file)]
|
||||
# Need to provide paths in the current directory due to a bug in PESQ:
|
||||
# On Mac, for some 'path/to/file.wav', if 'file.wav' is longer than
|
||||
# 'path/to', PESQ crashes.
|
||||
pesq_output = subprocess.check_output(_LogCommand(pesq_command),
|
||||
cwd=out_dir)
|
||||
|
||||
# Find the scores in stdout of pesq.
|
||||
match = re.search(
|
||||
@ -116,6 +138,10 @@ def main():
|
||||
else:
|
||||
logging.error('PESQ: %s', pesq_output.splitlines()[-1])
|
||||
|
||||
if args.remove:
|
||||
os.remove(reference_file)
|
||||
os.remove(degraded_file)
|
||||
|
||||
return test_process.wait()
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user