| OLD | NEW |
| 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 "media/base/audio_converter.h" |
| 9 |
| 8 #include <stddef.h> | 10 #include <stddef.h> |
| 9 | 11 |
| 10 #include <cmath> | 12 #include <cmath> |
| 13 #include <memory> |
| 11 | 14 |
| 12 #include "base/macros.h" | 15 #include "base/macros.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/memory/scoped_vector.h" | 16 #include "base/memory/scoped_vector.h" |
| 15 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
| 16 #include "media/base/audio_converter.h" | |
| 17 #include "media/base/fake_audio_render_callback.h" | 18 #include "media/base/fake_audio_render_callback.h" |
| 18 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 20 | 21 |
| 21 namespace media { | 22 namespace media { |
| 22 | 23 |
| 23 // Parameters which control the many input case tests. | 24 // Parameters which control the many input case tests. |
| 24 static const int kConvertInputs = 8; | 25 static const int kConvertInputs = 8; |
| 25 static const int kConvertCycles = 3; | 26 static const int kConvertCycles = 3; |
| 26 | 27 |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 SetVolume(1); | 165 SetVolume(1); |
| 165 float scale = inputs > 1 ? inputs / 2.0f : inputs; | 166 float scale = inputs > 1 ? inputs / 2.0f : inputs; |
| 166 for (int i = 0; i < kConvertCycles; ++i) | 167 for (int i = 0; i < kConvertCycles; ++i) |
| 167 ASSERT_TRUE(RenderAndValidateAudioData(scale)); | 168 ASSERT_TRUE(RenderAndValidateAudioData(scale)); |
| 168 } | 169 } |
| 169 | 170 |
| 170 protected: | 171 protected: |
| 171 virtual ~AudioConverterTest() {} | 172 virtual ~AudioConverterTest() {} |
| 172 | 173 |
| 173 // Converter under test. | 174 // Converter under test. |
| 174 scoped_ptr<AudioConverter> converter_; | 175 std::unique_ptr<AudioConverter> converter_; |
| 175 | 176 |
| 176 // Input and output parameters used for AudioConverter construction. | 177 // Input and output parameters used for AudioConverter construction. |
| 177 AudioParameters input_parameters_; | 178 AudioParameters input_parameters_; |
| 178 AudioParameters output_parameters_; | 179 AudioParameters output_parameters_; |
| 179 | 180 |
| 180 // Destination AudioBus for AudioConverter output. | 181 // Destination AudioBus for AudioConverter output. |
| 181 scoped_ptr<AudioBus> audio_bus_; | 182 std::unique_ptr<AudioBus> audio_bus_; |
| 182 | 183 |
| 183 // AudioBus containing expected results for comparison with |audio_bus_|. | 184 // AudioBus containing expected results for comparison with |audio_bus_|. |
| 184 scoped_ptr<AudioBus> expected_audio_bus_; | 185 std::unique_ptr<AudioBus> expected_audio_bus_; |
| 185 | 186 |
| 186 // Vector of all input callbacks used to drive AudioConverter::Convert(). | 187 // Vector of all input callbacks used to drive AudioConverter::Convert(). |
| 187 ScopedVector<FakeAudioRenderCallback> fake_callbacks_; | 188 ScopedVector<FakeAudioRenderCallback> fake_callbacks_; |
| 188 | 189 |
| 189 // Parallel input callback which generates the expected output. | 190 // Parallel input callback which generates the expected output. |
| 190 scoped_ptr<FakeAudioRenderCallback> expected_callback_; | 191 std::unique_ptr<FakeAudioRenderCallback> expected_callback_; |
| 191 | 192 |
| 192 // Epsilon value with which to perform comparisons between |audio_bus_| and | 193 // Epsilon value with which to perform comparisons between |audio_bus_| and |
| 193 // |expected_audio_bus_|. | 194 // |expected_audio_bus_|. |
| 194 double epsilon_; | 195 double epsilon_; |
| 195 | 196 |
| 196 DISALLOW_COPY_AND_ASSIGN(AudioConverterTest); | 197 DISALLOW_COPY_AND_ASSIGN(AudioConverterTest); |
| 197 }; | 198 }; |
| 198 | 199 |
| 199 // Ensure the buffer delay provided by AudioConverter is accurate. | 200 // Ensure the buffer delay provided by AudioConverter is accurate. |
| 200 TEST(AudioConverterTest, AudioDelayAndDiscreteChannelCount) { | 201 TEST(AudioConverterTest, AudioDelayAndDiscreteChannelCount) { |
| 201 // Choose input and output parameters such that the transform must make | 202 // Choose input and output parameters such that the transform must make |
| 202 // multiple calls to fill the buffer. | 203 // multiple calls to fill the buffer. |
| 203 AudioParameters input_parameters(AudioParameters::AUDIO_PCM_LINEAR, | 204 AudioParameters input_parameters(AudioParameters::AUDIO_PCM_LINEAR, |
| 204 CHANNEL_LAYOUT_DISCRETE, kSampleRate, | 205 CHANNEL_LAYOUT_DISCRETE, kSampleRate, |
| 205 kBitsPerChannel, kLowLatencyBufferSize); | 206 kBitsPerChannel, kLowLatencyBufferSize); |
| 206 input_parameters.set_channels_for_discrete(10); | 207 input_parameters.set_channels_for_discrete(10); |
| 207 AudioParameters output_parameters(AudioParameters::AUDIO_PCM_LINEAR, | 208 AudioParameters output_parameters(AudioParameters::AUDIO_PCM_LINEAR, |
| 208 CHANNEL_LAYOUT_DISCRETE, kSampleRate * 2, | 209 CHANNEL_LAYOUT_DISCRETE, kSampleRate * 2, |
| 209 kBitsPerChannel, kHighLatencyBufferSize); | 210 kBitsPerChannel, kHighLatencyBufferSize); |
| 210 output_parameters.set_channels_for_discrete(5); | 211 output_parameters.set_channels_for_discrete(5); |
| 211 | 212 |
| 212 AudioConverter converter(input_parameters, output_parameters, false); | 213 AudioConverter converter(input_parameters, output_parameters, false); |
| 213 FakeAudioRenderCallback callback(0.2); | 214 FakeAudioRenderCallback callback(0.2); |
| 214 scoped_ptr<AudioBus> audio_bus = AudioBus::Create(output_parameters); | 215 std::unique_ptr<AudioBus> audio_bus = AudioBus::Create(output_parameters); |
| 215 converter.AddInput(&callback); | 216 converter.AddInput(&callback); |
| 216 converter.Convert(audio_bus.get()); | 217 converter.Convert(audio_bus.get()); |
| 217 | 218 |
| 218 // Calculate the expected buffer delay for given AudioParameters. | 219 // Calculate the expected buffer delay for given AudioParameters. |
| 219 double input_sample_rate = input_parameters.sample_rate(); | 220 double input_sample_rate = input_parameters.sample_rate(); |
| 220 int fill_count = | 221 int fill_count = |
| 221 (output_parameters.frames_per_buffer() * input_sample_rate / | 222 (output_parameters.frames_per_buffer() * input_sample_rate / |
| 222 output_parameters.sample_rate()) / input_parameters.frames_per_buffer(); | 223 output_parameters.sample_rate()) / input_parameters.frames_per_buffer(); |
| 223 | 224 |
| 224 base::TimeDelta input_frame_duration = base::TimeDelta::FromMicroseconds( | 225 base::TimeDelta input_frame_duration = base::TimeDelta::FromMicroseconds( |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 // No resampling. No channel mixing. | 259 // No resampling. No channel mixing. |
| 259 std::tr1::make_tuple(44100, 44100, CHANNEL_LAYOUT_STEREO, 0.00000048), | 260 std::tr1::make_tuple(44100, 44100, CHANNEL_LAYOUT_STEREO, 0.00000048), |
| 260 | 261 |
| 261 // Upsampling. Channel upmixing. | 262 // Upsampling. Channel upmixing. |
| 262 std::tr1::make_tuple(44100, 48000, CHANNEL_LAYOUT_QUAD, 0.033), | 263 std::tr1::make_tuple(44100, 48000, CHANNEL_LAYOUT_QUAD, 0.033), |
| 263 | 264 |
| 264 // Downsampling. Channel downmixing. | 265 // Downsampling. Channel downmixing. |
| 265 std::tr1::make_tuple(48000, 41000, CHANNEL_LAYOUT_MONO, 0.042))); | 266 std::tr1::make_tuple(48000, 41000, CHANNEL_LAYOUT_MONO, 0.042))); |
| 266 | 267 |
| 267 } // namespace media | 268 } // namespace media |
| OLD | NEW |