OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "content/renderer/media/renderer_webaudiodevice_impl.h" | 5 #include "content/renderer/media/renderer_webaudiodevice_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/strings/stringprintf.h" |
9 #include "build/build_config.h" | 10 #include "build/build_config.h" |
10 #include "content/renderer/media/audio_device_factory.h" | 11 #include "content/renderer/media/audio_device_factory.h" |
11 #include "media/base/audio_capturer_source.h" | 12 #include "media/base/audio_capturer_source.h" |
| 13 #include "media/base/limits.h" |
12 #include "media/base/mock_audio_renderer_sink.h" | 14 #include "media/base/mock_audio_renderer_sink.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
15 | 17 |
16 using testing::_; | 18 using testing::_; |
17 | 19 |
18 namespace content { | 20 namespace content { |
19 | 21 |
20 namespace { | 22 namespace { |
21 | 23 |
(...skipping 12 matching lines...) Expand all Loading... |
34 const url::Origin& security_origin) { | 36 const url::Origin& security_origin) { |
35 return media::AudioParameters(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, | 37 return media::AudioParameters(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, |
36 media::CHANNEL_LAYOUT_STEREO, | 38 media::CHANNEL_LAYOUT_STEREO, |
37 kHardwareSampleRate, 16, kHardwareBufferSize); | 39 kHardwareSampleRate, 16, kHardwareBufferSize); |
38 } | 40 } |
39 | 41 |
40 class RendererWebAudioDeviceImplUnderTest : public RendererWebAudioDeviceImpl { | 42 class RendererWebAudioDeviceImplUnderTest : public RendererWebAudioDeviceImpl { |
41 public: | 43 public: |
42 RendererWebAudioDeviceImplUnderTest( | 44 RendererWebAudioDeviceImplUnderTest( |
43 media::ChannelLayout layout, | 45 media::ChannelLayout layout, |
| 46 int channels, |
44 const blink::WebAudioLatencyHint& latency_hint, | 47 const blink::WebAudioLatencyHint& latency_hint, |
45 blink::WebAudioDevice::RenderCallback* callback, | 48 blink::WebAudioDevice::RenderCallback* callback, |
46 int session_id, | 49 int session_id, |
47 const url::Origin& security_origin) | 50 const url::Origin& security_origin) |
48 : RendererWebAudioDeviceImpl(layout, | 51 : RendererWebAudioDeviceImpl(layout, |
| 52 channels, |
49 latency_hint, | 53 latency_hint, |
50 callback, | 54 callback, |
51 session_id, | 55 session_id, |
52 security_origin, | 56 security_origin, |
53 base::Bind(&MockGetOutputDeviceParameters), | 57 base::Bind(&MockGetOutputDeviceParameters), |
54 base::Bind(&MockFrameIdFromCurrentContext)) { | 58 base::Bind(&MockFrameIdFromCurrentContext)) { |
55 } | 59 } |
56 }; | 60 }; |
57 | 61 |
58 } // namespace | 62 } // namespace |
59 | 63 |
60 class RendererWebAudioDeviceImplTest | 64 class RendererWebAudioDeviceImplTest |
61 : public blink::WebAudioDevice::RenderCallback, | 65 : public blink::WebAudioDevice::RenderCallback, |
62 public AudioDeviceFactory, | 66 public AudioDeviceFactory, |
63 public testing::Test { | 67 public testing::Test { |
64 protected: | 68 protected: |
65 RendererWebAudioDeviceImplTest() {} | 69 RendererWebAudioDeviceImplTest() {} |
66 | 70 |
67 void SetupDevice(blink::WebAudioLatencyHint latencyHint) { | 71 void SetupDevice(blink::WebAudioLatencyHint latencyHint) { |
68 webaudio_device_.reset(new RendererWebAudioDeviceImplUnderTest( | 72 webaudio_device_.reset(new RendererWebAudioDeviceImplUnderTest( |
69 media::CHANNEL_LAYOUT_MONO, latencyHint, this, 0, url::Origin())); | 73 media::CHANNEL_LAYOUT_MONO, 1, latencyHint, this, 0, url::Origin())); |
70 webaudio_device_->SetMediaTaskRunnerForTesting(message_loop_.task_runner()); | 74 webaudio_device_->SetMediaTaskRunnerForTesting(message_loop_.task_runner()); |
71 } | 75 } |
72 | 76 |
| 77 void SetupDevice(media::ChannelLayout layout, int channels) { |
| 78 webaudio_device_.reset(new RendererWebAudioDeviceImplUnderTest( |
| 79 layout, channels, |
| 80 blink::WebAudioLatencyHint( |
| 81 blink::WebAudioLatencyHint::kCategoryInteractive), |
| 82 this, 0, url::Origin())); |
| 83 webaudio_device_->SetMediaTaskRunnerForTesting(message_loop_.task_runner()); |
| 84 } |
| 85 |
73 MOCK_METHOD1(CreateAudioCapturerSource, | 86 MOCK_METHOD1(CreateAudioCapturerSource, |
74 scoped_refptr<media::AudioCapturerSource>(int)); | 87 scoped_refptr<media::AudioCapturerSource>(int)); |
75 MOCK_METHOD4(CreateFinalAudioRendererSink, | 88 MOCK_METHOD4(CreateFinalAudioRendererSink, |
76 scoped_refptr<media::AudioRendererSink>(int, | 89 scoped_refptr<media::AudioRendererSink>(int, |
77 int, | 90 int, |
78 const std::string&, | 91 const std::string&, |
79 const url::Origin&)); | 92 const url::Origin&)); |
80 MOCK_METHOD5( | 93 MOCK_METHOD5( |
81 CreateSwitchableAudioRendererSink, | 94 CreateSwitchableAudioRendererSink, |
82 scoped_refptr<media::SwitchableAudioRendererSink>(SourceType, | 95 scoped_refptr<media::SwitchableAudioRendererSink>(SourceType, |
(...skipping 20 matching lines...) Expand all Loading... |
103 | 116 |
104 return mock_sink; | 117 return mock_sink; |
105 } | 118 } |
106 | 119 |
107 void TearDown() override { webaudio_device_.reset(); } | 120 void TearDown() override { webaudio_device_.reset(); } |
108 | 121 |
109 std::unique_ptr<RendererWebAudioDeviceImpl> webaudio_device_; | 122 std::unique_ptr<RendererWebAudioDeviceImpl> webaudio_device_; |
110 base::MessageLoop message_loop_; | 123 base::MessageLoop message_loop_; |
111 }; | 124 }; |
112 | 125 |
| 126 TEST_F(RendererWebAudioDeviceImplTest, ChannelLayout) { |
| 127 for (int ch = 1; ch < static_cast<int>(media::limits::kMaxChannels); ++ch) { |
| 128 SCOPED_TRACE(base::StringPrintf("ch == %d", ch)); |
| 129 |
| 130 media::ChannelLayout layout = media::GuessChannelLayout(ch); |
| 131 if (layout == media::CHANNEL_LAYOUT_UNSUPPORTED) |
| 132 layout = media::CHANNEL_LAYOUT_DISCRETE; |
| 133 |
| 134 SetupDevice(layout, ch); |
| 135 media::AudioParameters sink_params = |
| 136 webaudio_device_->get_sink_params_for_testing(); |
| 137 EXPECT_TRUE(sink_params.IsValid()); |
| 138 EXPECT_EQ(layout, sink_params.channel_layout()); |
| 139 EXPECT_EQ(ch, sink_params.channels()); |
| 140 } |
| 141 } |
| 142 |
113 TEST_F(RendererWebAudioDeviceImplTest, TestLatencyHintValues) { | 143 TEST_F(RendererWebAudioDeviceImplTest, TestLatencyHintValues) { |
114 blink::WebAudioLatencyHint interactiveLatencyHint( | 144 blink::WebAudioLatencyHint interactiveLatencyHint( |
115 blink::WebAudioLatencyHint::kCategoryInteractive); | 145 blink::WebAudioLatencyHint::kCategoryInteractive); |
116 int interactiveBufferSize = | 146 int interactiveBufferSize = |
117 media::AudioLatency::GetInteractiveBufferSize(kHardwareBufferSize); | 147 media::AudioLatency::GetInteractiveBufferSize(kHardwareBufferSize); |
118 SetupDevice(interactiveLatencyHint); | 148 SetupDevice(interactiveLatencyHint); |
119 | 149 |
120 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate); | 150 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate); |
121 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize); | 151 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize); |
122 | 152 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate); | 216 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate); |
187 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize); | 217 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize); |
188 | 218 |
189 #if !defined(OS_ANDROID) | 219 #if !defined(OS_ANDROID) |
190 EXPECT_GE(playbackBufferSize, balancedBufferSize); | 220 EXPECT_GE(playbackBufferSize, balancedBufferSize); |
191 EXPECT_GE(balancedBufferSize, interactiveBufferSize); | 221 EXPECT_GE(balancedBufferSize, interactiveBufferSize); |
192 #endif | 222 #endif |
193 } | 223 } |
194 | 224 |
195 } // namespace content | 225 } // namespace content |
OLD | NEW |