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

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

Issue 2708933005: Fix WebAudio support for discrete channel layouts. (Closed)
Patch Set: Zero session_id. 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,
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/media/renderer_webaudiodevice_impl.cc ('k') | content/renderer/renderer_blink_platform_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698