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

Side by Side Diff: media/base/audio_converter_unittest.cc

Issue 1070923002: Fix incorrect AudioConverter setup for discrete channel layouts. (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 | « media/base/audio_converter.cc ('k') | media/base/fake_audio_render_callback.h » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // MSVC++ requires this to be set before any other includes to get M_PI. 5 // MSVC++ requires this to be set before any other includes to get M_PI.
6 #define _USE_MATH_DEFINES 6 #define _USE_MATH_DEFINES
7 7
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 scoped_ptr<FakeAudioRenderCallback> expected_callback_; 187 scoped_ptr<FakeAudioRenderCallback> expected_callback_;
188 188
189 // Epsilon value with which to perform comparisons between |audio_bus_| and 189 // Epsilon value with which to perform comparisons between |audio_bus_| and
190 // |expected_audio_bus_|. 190 // |expected_audio_bus_|.
191 double epsilon_; 191 double epsilon_;
192 192
193 DISALLOW_COPY_AND_ASSIGN(AudioConverterTest); 193 DISALLOW_COPY_AND_ASSIGN(AudioConverterTest);
194 }; 194 };
195 195
196 // Ensure the buffer delay provided by AudioConverter is accurate. 196 // Ensure the buffer delay provided by AudioConverter is accurate.
197 TEST(AudioConverterTest, AudioDelay) { 197 TEST(AudioConverterTest, AudioDelayAndDiscreteChannelCount) {
198 // Choose input and output parameters such that the transform must make 198 // Choose input and output parameters such that the transform must make
199 // multiple calls to fill the buffer. 199 // multiple calls to fill the buffer.
200 AudioParameters input_parameters = AudioParameters( 200 AudioParameters input_parameters(AudioParameters::AUDIO_PCM_LINEAR,
201 AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate, 201 CHANNEL_LAYOUT_DISCRETE, 10, kSampleRate,
202 kBitsPerChannel, kLowLatencyBufferSize); 202 kBitsPerChannel, kLowLatencyBufferSize,
203 AudioParameters output_parameters = AudioParameters( 203 AudioParameters::NO_EFFECTS);
204 AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate * 2, 204 AudioParameters output_parameters(AudioParameters::AUDIO_PCM_LINEAR,
205 kBitsPerChannel, kHighLatencyBufferSize); 205 CHANNEL_LAYOUT_DISCRETE, 5, kSampleRate * 2,
206 kBitsPerChannel, kHighLatencyBufferSize,
207 AudioParameters::NO_EFFECTS);
206 208
207 AudioConverter converter(input_parameters, output_parameters, false); 209 AudioConverter converter(input_parameters, output_parameters, false);
208 FakeAudioRenderCallback callback(0.2); 210 FakeAudioRenderCallback callback(0.2);
209 scoped_ptr<AudioBus> audio_bus = AudioBus::Create(output_parameters); 211 scoped_ptr<AudioBus> audio_bus = AudioBus::Create(output_parameters);
210 converter.AddInput(&callback); 212 converter.AddInput(&callback);
211 converter.Convert(audio_bus.get()); 213 converter.Convert(audio_bus.get());
212 214
213 // Calculate the expected buffer delay for given AudioParameters. 215 // Calculate the expected buffer delay for given AudioParameters.
214 double input_sample_rate = input_parameters.sample_rate(); 216 double input_sample_rate = input_parameters.sample_rate();
215 int fill_count = 217 int fill_count =
216 (output_parameters.frames_per_buffer() * input_sample_rate / 218 (output_parameters.frames_per_buffer() * input_sample_rate /
217 output_parameters.sample_rate()) / input_parameters.frames_per_buffer(); 219 output_parameters.sample_rate()) / input_parameters.frames_per_buffer();
218 220
219 base::TimeDelta input_frame_duration = base::TimeDelta::FromMicroseconds( 221 base::TimeDelta input_frame_duration = base::TimeDelta::FromMicroseconds(
220 base::Time::kMicrosecondsPerSecond / input_sample_rate); 222 base::Time::kMicrosecondsPerSecond / input_sample_rate);
221 223
222 int expected_last_delay_milliseconds = 224 int expected_last_delay_milliseconds =
223 fill_count * input_parameters.frames_per_buffer() * 225 fill_count * input_parameters.frames_per_buffer() *
224 input_frame_duration.InMillisecondsF(); 226 input_frame_duration.InMillisecondsF();
225 227
226 EXPECT_EQ(expected_last_delay_milliseconds, 228 EXPECT_EQ(expected_last_delay_milliseconds,
227 callback.last_audio_delay_milliseconds()); 229 callback.last_audio_delay_milliseconds());
230 EXPECT_EQ(input_parameters.channels(), callback.last_channel_count());
228 } 231 }
229 232
230 TEST_P(AudioConverterTest, ArbitraryOutputRequestSize) { 233 TEST_P(AudioConverterTest, ArbitraryOutputRequestSize) {
231 // Resize output bus to be half of |output_parameters_|'s frames_per_buffer(). 234 // Resize output bus to be half of |output_parameters_|'s frames_per_buffer().
232 audio_bus_ = AudioBus::Create(output_parameters_.channels(), 235 audio_bus_ = AudioBus::Create(output_parameters_.channels(),
233 output_parameters_.frames_per_buffer() / 2); 236 output_parameters_.frames_per_buffer() / 2);
234 RunTest(1); 237 RunTest(1);
235 } 238 }
236 239
237 TEST_P(AudioConverterTest, NoInputs) { 240 TEST_P(AudioConverterTest, NoInputs) {
(...skipping 14 matching lines...) Expand all
252 // No resampling. No channel mixing. 255 // No resampling. No channel mixing.
253 std::tr1::make_tuple(44100, 44100, CHANNEL_LAYOUT_STEREO, 0.00000048), 256 std::tr1::make_tuple(44100, 44100, CHANNEL_LAYOUT_STEREO, 0.00000048),
254 257
255 // Upsampling. Channel upmixing. 258 // Upsampling. Channel upmixing.
256 std::tr1::make_tuple(44100, 48000, CHANNEL_LAYOUT_QUAD, 0.033), 259 std::tr1::make_tuple(44100, 48000, CHANNEL_LAYOUT_QUAD, 0.033),
257 260
258 // Downsampling. Channel downmixing. 261 // Downsampling. Channel downmixing.
259 std::tr1::make_tuple(48000, 41000, CHANNEL_LAYOUT_MONO, 0.042))); 262 std::tr1::make_tuple(48000, 41000, CHANNEL_LAYOUT_MONO, 0.042)));
260 263
261 } // namespace media 264 } // namespace media
OLDNEW
« no previous file with comments | « media/base/audio_converter.cc ('k') | media/base/fake_audio_render_callback.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698