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

Side by Side Diff: content/renderer/media/webrtc_audio_device_unittest.cc

Issue 9221010: Adds support for 16kHz input sample rate and mono channel config. in WebRTC. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Adding 16 and 32kHz input support on Mac OS X Created 8 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/environment.h" 5 #include "base/environment.h"
6 #include "base/test/test_timeouts.h" 6 #include "base/test/test_timeouts.h"
7 #include "content/renderer/media/audio_hardware.h" 7 #include "content/renderer/media/audio_hardware.h"
8 #include "content/renderer/media/webrtc_audio_device_impl.h" 8 #include "content/renderer/media/webrtc_audio_device_impl.h"
9 #include "content/test/webrtc_audio_device_test.h" 9 #include "content/test/webrtc_audio_device_test.h"
10 #include "media/audio/audio_manager.h" 10 #include "media/audio/audio_manager.h"
(...skipping 20 matching lines...) Expand all
31 class AudioUtil : public AudioUtilInterface { 31 class AudioUtil : public AudioUtilInterface {
32 public: 32 public:
33 AudioUtil() {} 33 AudioUtil() {}
34 34
35 virtual double GetAudioHardwareSampleRate() OVERRIDE { 35 virtual double GetAudioHardwareSampleRate() OVERRIDE {
36 return media::GetAudioHardwareSampleRate(); 36 return media::GetAudioHardwareSampleRate();
37 } 37 }
38 virtual double GetAudioInputHardwareSampleRate() OVERRIDE { 38 virtual double GetAudioInputHardwareSampleRate() OVERRIDE {
39 return media::GetAudioInputHardwareSampleRate(); 39 return media::GetAudioInputHardwareSampleRate();
40 } 40 }
41 virtual size_t GetAudioInputHardwareChannelCount() OVERRIDE {
42 return media::GetAudioInputHardwareChannelCount();
43 }
41 private: 44 private:
42 DISALLOW_COPY_AND_ASSIGN(AudioUtil); 45 DISALLOW_COPY_AND_ASSIGN(AudioUtil);
43 }; 46 };
44 47
45 class AudioUtilNoHardware : public AudioUtilInterface { 48 class AudioUtilNoHardware : public AudioUtilInterface {
46 public: 49 public:
47 AudioUtilNoHardware(double output_rate, double input_rate) 50 AudioUtilNoHardware(double output_rate, double input_rate,
48 : output_rate_(output_rate), input_rate_(input_rate) { 51 size_t input_channels)
52 : output_rate_(output_rate),
scherkus (not reviewing) 2012/01/18 18:19:38 indent by 2 more spaces
henrika (OOO until Aug 14) 2012/01/19 09:42:24 Done.
53 input_rate_(input_rate),
54 input_channels_(input_channels) {
49 } 55 }
50 56
51 virtual double GetAudioHardwareSampleRate() OVERRIDE { 57 virtual double GetAudioHardwareSampleRate() OVERRIDE {
52 return output_rate_; 58 return output_rate_;
53 } 59 }
54 virtual double GetAudioInputHardwareSampleRate() OVERRIDE { 60 virtual double GetAudioInputHardwareSampleRate() OVERRIDE {
55 return input_rate_; 61 return input_rate_;
56 } 62 }
63 virtual size_t GetAudioInputHardwareChannelCount() OVERRIDE {
64 return input_channels_;
65 }
57 66
58 private: 67 private:
59 double output_rate_; 68 double output_rate_;
60 double input_rate_; 69 double input_rate_;
70 size_t input_channels_;
61 DISALLOW_COPY_AND_ASSIGN(AudioUtilNoHardware); 71 DISALLOW_COPY_AND_ASSIGN(AudioUtilNoHardware);
62 }; 72 };
63 73
64 bool IsRunningHeadless() { 74 bool IsRunningHeadless() {
65 scoped_ptr<base::Environment> env(base::Environment::Create()); 75 scoped_ptr<base::Environment> env(base::Environment::Create());
66 if (env->HasVar("CHROME_HEADLESS")) 76 if (env->HasVar("CHROME_HEADLESS"))
67 return true; 77 return true;
68 return false; 78 return false;
69 } 79 }
70 80
71 // The WebRTC audio client only supports 44.1 and 48.0 kHz. 81 // The WebRTC audio client only supports 44.1 and 48.0 kHz.
72 // This method returns false if a non-supported rate is detected on the 82 // This method returns false if a non-supported rate is detected on the
73 // input or output side. 83 // input or output side.
74 // TODO(henrika): add support for automatic fallback to Windows Wave audio 84 // TODO(henrika): add support for automatic fallback to Windows Wave audio
75 // if a non-supported rate is detected. It is probably better to detect 85 // if a non-supported rate is detected. It is probably better to detect
76 // invalid audio settings by actually trying to open the audio streams instead 86 // invalid audio settings by actually trying to open the audio streams instead
77 // of relying on hard coded conditions. 87 // of relying on hard coded conditions.
78 bool HardwareSampleRatesAreValid() { 88 bool HardwareSampleRatesAreValid() {
79 int output_sample_rate = 89 int output_sample_rate =
80 static_cast<int>(audio_hardware::GetOutputSampleRate()); 90 static_cast<int>(audio_hardware::GetOutputSampleRate());
81 int input_sample_rate = 91 int input_sample_rate =
82 static_cast<int>(audio_hardware::GetInputSampleRate()); 92 static_cast<int>(audio_hardware::GetInputSampleRate());
83 bool rates_are_valid = 93 bool rates_are_valid =
84 ((output_sample_rate == 44100 || output_sample_rate == 48000) && 94 ((output_sample_rate == 44100 || output_sample_rate == 48000) &&
85 (input_sample_rate == 44100 || input_sample_rate == 48000)); 95 (input_sample_rate == 44100 || input_sample_rate == 48000 ||
96 input_sample_rate == 16000 || input_sample_rate == 32000));
86 DLOG_IF(WARNING, !rates_are_valid) << "Non-supported sample rate detected."; 97 DLOG_IF(WARNING, !rates_are_valid) << "Non-supported sample rate detected.";
87 return rates_are_valid; 98 return rates_are_valid;
88 } 99 }
89 100
90 101
91 class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess { 102 class WebRTCMediaProcessImpl : public webrtc::VoEMediaProcess {
92 public: 103 public:
93 explicit WebRTCMediaProcessImpl(base::WaitableEvent* event) 104 explicit WebRTCMediaProcessImpl(base::WaitableEvent* event)
94 : event_(event), 105 : event_(event),
95 channel_id_(-1), 106 channel_id_(-1),
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 int channels_; 164 int channels_;
154 mutable base::Lock lock_; 165 mutable base::Lock lock_;
155 DISALLOW_COPY_AND_ASSIGN(WebRTCMediaProcessImpl); 166 DISALLOW_COPY_AND_ASSIGN(WebRTCMediaProcessImpl);
156 }; 167 };
157 168
158 } // end namespace 169 } // end namespace
159 170
160 // Basic test that instantiates and initializes an instance of 171 // Basic test that instantiates and initializes an instance of
161 // WebRtcAudioDeviceImpl. 172 // WebRtcAudioDeviceImpl.
162 TEST_F(WebRTCAudioDeviceTest, Construct) { 173 TEST_F(WebRTCAudioDeviceTest, Construct) {
163 AudioUtilNoHardware audio_util(48000.0, 48000.0); 174 AudioUtilNoHardware audio_util(48000.0, 48000.0, 1);
164 SetAudioUtilCallback(&audio_util); 175 SetAudioUtilCallback(&audio_util);
165 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 176 scoped_refptr<WebRtcAudioDeviceImpl> audio_device(
166 new WebRtcAudioDeviceImpl()); 177 new WebRtcAudioDeviceImpl());
178
167 audio_device->SetSessionId(1); 179 audio_device->SetSessionId(1);
168 180
169 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 181 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
170 ASSERT_TRUE(engine.valid()); 182 ASSERT_TRUE(engine.valid());
171 183
172 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 184 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
173 int err = base->Init(audio_device); 185 int err = base->Init(audio_device);
174 EXPECT_EQ(0, err); 186 EXPECT_EQ(0, err);
175 EXPECT_EQ(0, base->Terminate()); 187 EXPECT_EQ(0, base->Terminate());
176 } 188 }
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 MessageLoop::QuitClosure(), 445 MessageLoop::QuitClosure(),
434 TestTimeouts::action_timeout_ms()); 446 TestTimeouts::action_timeout_ms());
435 message_loop_.Run(); 447 message_loop_.Run();
436 448
437 EXPECT_EQ(0, base->StopSend(ch)); 449 EXPECT_EQ(0, base->StopSend(ch));
438 EXPECT_EQ(0, base->StopPlayout(ch)); 450 EXPECT_EQ(0, base->StopPlayout(ch));
439 451
440 EXPECT_EQ(0, base->DeleteChannel(ch)); 452 EXPECT_EQ(0, base->DeleteChannel(ch));
441 EXPECT_EQ(0, base->Terminate()); 453 EXPECT_EQ(0, base->Terminate());
442 } 454 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698