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

Side by Side Diff: chrome/browser/media/chrome_webrtc_audio_quality_browsertest.cc

Issue 965403003: Making WebRTC quality tests less dependent on installed tools. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor win fixes, improved error msg for rbga->i420, frame_analyzer Created 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/media/chrome_webrtc_video_quality_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <ctime> 5 #include <ctime>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/files/file_enumerator.h" 8 #include "base/files/file_enumerator.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 // <Monitor of x>, where x is whatever your primary sound device is called. 70 // <Monitor of x>, where x is whatever your primary sound device is called.
71 // 6. Try launching chrome as the target user on the target machine, try 71 // 6. Try launching chrome as the target user on the target machine, try
72 // playing, say, a YouTube video, and record with # arecord -f dat tmp.dat. 72 // playing, say, a YouTube video, and record with # arecord -f dat tmp.dat.
73 // Verify the recording with aplay (should have recorded what you played 73 // Verify the recording with aplay (should have recorded what you played
74 // from chrome). 74 // from chrome).
75 // 75 //
76 // Note: the volume for ALL your input devices will be forced to 100% by 76 // Note: the volume for ALL your input devices will be forced to 100% by
77 // running this test on Linux. 77 // running this test on Linux.
78 // 78 //
79 // On Mac: 79 // On Mac:
80 // TODO(phoglund): download sox from gs instead.
80 // 1. Get SoundFlower: http://rogueamoeba.com/freebies/soundflower/download.php 81 // 1. Get SoundFlower: http://rogueamoeba.com/freebies/soundflower/download.php
81 // 2. Install it + reboot. 82 // 2. Install it + reboot.
82 // 3. Install MacPorts (http://www.macports.org/). 83 // 3. Install MacPorts (http://www.macports.org/).
83 // 4. Install sox: sudo port install sox. 84 // 4. Install sox: sudo port install sox.
84 // 5. (For Chrome bots) Ensure sox and rec are reachable from the env the test 85 // 5. (For Chrome bots) Ensure sox and rec are reachable from the env the test
85 // executes in (sox and rec tends to install in /opt/, which generally isn't 86 // executes in (sox and rec tends to install in /opt/, which generally isn't
86 // in the Chrome bots' env). For instance, run 87 // in the Chrome bots' env). For instance, run
87 // sudo ln -s /opt/local/bin/rec /usr/local/bin/rec 88 // sudo ln -s /opt/local/bin/rec /usr/local/bin/rec
88 // sudo ln -s /opt/local/bin/sox /usr/local/bin/sox 89 // sudo ln -s /opt/local/bin/sox /usr/local/bin/sox
89 // 6. In Sound Preferences, set both input and output to Soundflower (2ch). 90 // 6. In Sound Preferences, set both input and output to Soundflower (2ch).
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 } 298 }
298 } 299 }
299 #endif 300 #endif
300 return true; 301 return true;
301 } 302 }
302 303
303 // Sox is the "Swiss army knife" of audio processing. We mainly use it for 304 // Sox is the "Swiss army knife" of audio processing. We mainly use it for
304 // silence trimming. See http://sox.sourceforge.net. 305 // silence trimming. See http://sox.sourceforge.net.
305 base::CommandLine MakeSoxCommandLine() { 306 base::CommandLine MakeSoxCommandLine() {
306 #if defined(OS_WIN) 307 #if defined(OS_WIN)
307 base::FilePath sox_path = test::GetReferenceFilesDir().Append( 308 base::FilePath sox_path = test::GetToolForPlatform("sox");
308 FILE_PATH_LITERAL("tools/sox.exe"));
309 if (!base::PathExists(sox_path)) { 309 if (!base::PathExists(sox_path)) {
310 LOG(ERROR) << "Missing sox.exe binary in " << sox_path.value() 310 LOG(ERROR) << "Missing sox.exe binary in " << sox_path.value()
311 << "; you may have to provide this binary yourself."; 311 << "; you may have to provide this binary yourself.";
312 return base::CommandLine(base::CommandLine::NO_PROGRAM); 312 return base::CommandLine(base::CommandLine::NO_PROGRAM);
313 } 313 }
314 base::CommandLine command_line(sox_path); 314 base::CommandLine command_line(sox_path);
315 #else 315 #else
316 // TODO(phoglund): call checked-in sox rather than system sox on mac/linux.
317 // Same for rec invocations on Mac, above.
316 base::CommandLine command_line(base::FilePath(FILE_PATH_LITERAL("sox"))); 318 base::CommandLine command_line(base::FilePath(FILE_PATH_LITERAL("sox")));
317 #endif 319 #endif
318 return command_line; 320 return command_line;
319 } 321 }
320 322
321 // Removes silence from beginning and end of the |input_audio_file| and writes 323 // Removes silence from beginning and end of the |input_audio_file| and writes
322 // the result to the |output_audio_file|. Returns true on success. 324 // the result to the |output_audio_file|. Returns true on success.
323 bool RemoveSilence(const base::FilePath& input_file, 325 bool RemoveSilence(const base::FilePath& input_file,
324 const base::FilePath& output_file) { 326 const base::FilePath& output_file) {
325 // SOX documentation for silence command: http://sox.sourceforge.net/sox.html 327 // SOX documentation for silence command: http://sox.sourceforge.net/sox.html
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 // The raw score in MOS is written to |raw_mos|, whereas the MOS-LQO score is 413 // The raw score in MOS is written to |raw_mos|, whereas the MOS-LQO score is
412 // written to mos_lqo. The scores are returned as floats in string form (e.g. 414 // written to mos_lqo. The scores are returned as floats in string form (e.g.
413 // "3.145", etc). Returns true on success. 415 // "3.145", etc). Returns true on success.
414 bool RunPesq(const base::FilePath& reference_file, 416 bool RunPesq(const base::FilePath& reference_file,
415 const base::FilePath& actual_file, 417 const base::FilePath& actual_file,
416 int sample_rate, std::string* raw_mos, std::string* mos_lqo) { 418 int sample_rate, std::string* raw_mos, std::string* mos_lqo) {
417 // PESQ will break if the paths are too long (!). 419 // PESQ will break if the paths are too long (!).
418 EXPECT_LT(reference_file.value().length(), 128u); 420 EXPECT_LT(reference_file.value().length(), 128u);
419 EXPECT_LT(actual_file.value().length(), 128u); 421 EXPECT_LT(actual_file.value().length(), 128u);
420 422
421 #if defined(OS_WIN) 423 base::FilePath pesq_path = test::GetToolForPlatform("pesq");
422 base::FilePath pesq_path =
423 test::GetReferenceFilesDir().Append(FILE_PATH_LITERAL("tools/pesq.exe"));
424 #elif defined(OS_MACOSX)
425 base::FilePath pesq_path =
426 test::GetReferenceFilesDir().Append(FILE_PATH_LITERAL("tools/pesq_mac"));
427 #else
428 base::FilePath pesq_path =
429 test::GetReferenceFilesDir().Append(FILE_PATH_LITERAL("tools/pesq"));
430 #endif
431
432 if (!base::PathExists(pesq_path)) { 424 if (!base::PathExists(pesq_path)) {
433 LOG(ERROR) << "Missing PESQ binary in " << pesq_path.value() 425 LOG(ERROR) << "Missing PESQ binary in " << pesq_path.value()
434 << "; you may have to provide this binary yourself."; 426 << "; you may have to provide this binary yourself.";
435 return false; 427 return false;
436 } 428 }
437 429
438 base::CommandLine command_line(pesq_path); 430 base::CommandLine command_line(pesq_path);
439 command_line.AppendArg(base::StringPrintf("+%d", sample_rate)); 431 command_line.AppendArg(base::StringPrintf("+%d", sample_rate));
440 command_line.AppendArgPath(reference_file); 432 command_line.AppendArgPath(reference_file);
441 command_line.AppendArgPath(actual_file); 433 command_line.AppendArgPath(actual_file);
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 #endif 766 #endif
775 767
776 // Since the AGC is off here there should be no gain at all. 768 // Since the AGC is off here there should be no gain at all.
777 IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcAudioQualityBrowserTest, 769 IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcAudioQualityBrowserTest,
778 MAYBE_MANUAL_TestAutoGainIsOffWithAudioProcessingOff) { 770 MAYBE_MANUAL_TestAutoGainIsOffWithAudioProcessingOff) {
779 const char* kAudioCallWithoutAudioProcessing = 771 const char* kAudioCallWithoutAudioProcessing =
780 "{audio: { mandatory: { echoCancellation: false } } }"; 772 "{audio: { mandatory: { echoCancellation: false } } }";
781 ASSERT_NO_FATAL_FAILURE(TestAutoGainControl( 773 ASSERT_NO_FATAL_FAILURE(TestAutoGainControl(
782 kReferenceFile, kAudioCallWithoutAudioProcessing, "_no_agc")); 774 kReferenceFile, kAudioCallWithoutAudioProcessing, "_no_agc"));
783 } 775 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/media/chrome_webrtc_video_quality_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698