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

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

Issue 2708933005: Fix WebAudio support for discrete channel layouts. (Closed)
Patch Set: Created 3 years, 10 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
OLDNEW
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
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, blink::WebAudioLatencyHint(
80 blink::WebAudioLatencyHint::kCategoryInteractive),
81 this, 0, url::Origin()));
82 webaudio_device_->SetMediaTaskRunnerForTesting(message_loop_.task_runner());
83 }
84
73 MOCK_METHOD1(CreateAudioCapturerSource, 85 MOCK_METHOD1(CreateAudioCapturerSource,
74 scoped_refptr<media::AudioCapturerSource>(int)); 86 scoped_refptr<media::AudioCapturerSource>(int));
75 MOCK_METHOD4(CreateFinalAudioRendererSink, 87 MOCK_METHOD4(CreateFinalAudioRendererSink,
76 scoped_refptr<media::AudioRendererSink>(int, 88 scoped_refptr<media::AudioRendererSink>(int,
77 int, 89 int,
78 const std::string&, 90 const std::string&,
79 const url::Origin&)); 91 const url::Origin&));
80 MOCK_METHOD5( 92 MOCK_METHOD5(
81 CreateSwitchableAudioRendererSink, 93 CreateSwitchableAudioRendererSink,
82 scoped_refptr<media::SwitchableAudioRendererSink>(SourceType, 94 scoped_refptr<media::SwitchableAudioRendererSink>(SourceType,
(...skipping 20 matching lines...) Expand all
103 115
104 return mock_sink; 116 return mock_sink;
105 } 117 }
106 118
107 void TearDown() override { webaudio_device_.reset(); } 119 void TearDown() override { webaudio_device_.reset(); }
108 120
109 std::unique_ptr<RendererWebAudioDeviceImpl> webaudio_device_; 121 std::unique_ptr<RendererWebAudioDeviceImpl> webaudio_device_;
110 base::MessageLoop message_loop_; 122 base::MessageLoop message_loop_;
111 }; 123 };
112 124
125 TEST_F(RendererWebAudioDeviceImplTest, ChannelLayout) {
126 for (int ch = 1; ch < static_cast<int>(media::limits::kMaxChannels); ++ch) {
127 SCOPED_TRACE(base::StringPrintf("ch == %d", ch));
128
129 media::ChannelLayout layout = media::GuessChannelLayout(ch);
130 if (layout == media::CHANNEL_LAYOUT_UNSUPPORTED)
131 layout = media::CHANNEL_LAYOUT_DISCRETE;
132
133 SetupDevice(layout, ch);
134 media::AudioParameters sink_params =
135 webaudio_device_->get_sink_params_for_testing();
136 EXPECT_TRUE(sink_params.IsValid());
137 EXPECT_EQ(layout, sink_params.channel_layout());
138 EXPECT_EQ(ch, sink_params.channels());
139 }
140 }
141
113 TEST_F(RendererWebAudioDeviceImplTest, TestLatencyHintValues) { 142 TEST_F(RendererWebAudioDeviceImplTest, TestLatencyHintValues) {
114 blink::WebAudioLatencyHint interactiveLatencyHint( 143 blink::WebAudioLatencyHint interactiveLatencyHint(
115 blink::WebAudioLatencyHint::kCategoryInteractive); 144 blink::WebAudioLatencyHint::kCategoryInteractive);
116 int interactiveBufferSize = 145 int interactiveBufferSize =
117 media::AudioLatency::GetInteractiveBufferSize(kHardwareBufferSize); 146 media::AudioLatency::GetInteractiveBufferSize(kHardwareBufferSize);
118 SetupDevice(interactiveLatencyHint); 147 SetupDevice(interactiveLatencyHint);
119 148
120 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate); 149 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
121 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize); 150 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize);
122 151
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate); 215 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
187 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize); 216 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize);
188 217
189 #if !defined(OS_ANDROID) 218 #if !defined(OS_ANDROID)
190 EXPECT_GE(playbackBufferSize, balancedBufferSize); 219 EXPECT_GE(playbackBufferSize, balancedBufferSize);
191 EXPECT_GE(balancedBufferSize, interactiveBufferSize); 220 EXPECT_GE(balancedBufferSize, interactiveBufferSize);
192 #endif 221 #endif
193 } 222 }
194 223
195 } // namespace content 224 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698