diff options
Diffstat (limited to 'chromium/media/filters/audio_renderer_algorithm_unittest.cc')
-rw-r--r-- | chromium/media/filters/audio_renderer_algorithm_unittest.cc | 83 |
1 files changed, 57 insertions, 26 deletions
diff --git a/chromium/media/filters/audio_renderer_algorithm_unittest.cc b/chromium/media/filters/audio_renderer_algorithm_unittest.cc index aab4a9d8aca..0f639223980 100644 --- a/chromium/media/filters/audio_renderer_algorithm_unittest.cc +++ b/chromium/media/filters/audio_renderer_algorithm_unittest.cc @@ -69,7 +69,9 @@ class AudioRendererAlgorithmTest : public testing::Test { AudioRendererAlgorithmTest() : frames_enqueued_(0), channels_(0), + channel_layout_(CHANNEL_LAYOUT_NONE), sample_format_(kUnknownSampleFormat), + samples_per_second_(0), bytes_per_sample_(0) { } @@ -83,6 +85,8 @@ class AudioRendererAlgorithmTest : public testing::Test { SampleFormat sample_format, int samples_per_second) { channels_ = ChannelLayoutToChannelCount(channel_layout); + samples_per_second_ = samples_per_second; + channel_layout_ = channel_layout; sample_format_ = sample_format; bytes_per_sample_ = SampleFormatToBytesPerChannel(sample_format); AudioParameters params(media::AudioParameters::AUDIO_PCM_LINEAR, @@ -101,31 +105,37 @@ class AudioRendererAlgorithmTest : public testing::Test { while (!algorithm_.IsQueueFull()) { switch (sample_format_) { case kSampleFormatU8: - buffer = MakeInterleavedAudioBuffer<uint8>(sample_format_, - channels_, - 1, - 1, - kFrameSize, - kNoTimestamp(), - kNoTimestamp()); + buffer = MakeAudioBuffer<uint8>( + sample_format_, + channel_layout_, + ChannelLayoutToChannelCount(channel_layout_), + samples_per_second_, + 1, + 1, + kFrameSize, + kNoTimestamp()); break; case kSampleFormatS16: - buffer = MakeInterleavedAudioBuffer<int16>(sample_format_, - channels_, - 1, - 1, - kFrameSize, - kNoTimestamp(), - kNoTimestamp()); + buffer = MakeAudioBuffer<int16>( + sample_format_, + channel_layout_, + ChannelLayoutToChannelCount(channel_layout_), + samples_per_second_, + 1, + 1, + kFrameSize, + kNoTimestamp()); break; case kSampleFormatS32: - buffer = MakeInterleavedAudioBuffer<int32>(sample_format_, - channels_, - 1, - 1, - kFrameSize, - kNoTimestamp(), - kNoTimestamp()); + buffer = MakeAudioBuffer<int32>( + sample_format_, + channel_layout_, + ChannelLayoutToChannelCount(channel_layout_), + samples_per_second_, + 1, + 1, + kFrameSize, + kNoTimestamp()); break; default: NOTREACHED() << "Unrecognized format " << sample_format_; @@ -225,7 +235,7 @@ class AudioRendererAlgorithmTest : public testing::Test { void WsolaTest(float playback_rate) { const int kSampleRateHz = 48000; - const media::ChannelLayout kChannelLayout = CHANNEL_LAYOUT_STEREO; + const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_STEREO; const int kBytesPerSample = 2; const int kNumFrames = kSampleRateHz / 100; // 10 milliseconds. @@ -242,8 +252,12 @@ class AudioRendererAlgorithmTest : public testing::Test { scoped_ptr<AudioBus> output = AudioBus::Create(channels_, 1); // Input buffer to inject pulses. - scoped_refptr<AudioBuffer> input = AudioBuffer::CreateBuffer( - kSampleFormatPlanarF32, channels_, kPulseWidthSamples); + scoped_refptr<AudioBuffer> input = + AudioBuffer::CreateBuffer(kSampleFormatPlanarF32, + kChannelLayout, + channels_, + kSampleRateHz, + kPulseWidthSamples); const std::vector<uint8*>& channel_data = input->channel_data(); @@ -300,7 +314,9 @@ class AudioRendererAlgorithmTest : public testing::Test { AudioRendererAlgorithm algorithm_; int frames_enqueued_; int channels_; + ChannelLayout channel_layout_; SampleFormat sample_format_; + int samples_per_second_; int bytes_per_sample_; }; @@ -578,7 +594,7 @@ TEST_F(AudioRendererAlgorithmTest, FullAndDecimatedSearch) { exclude_interval)); } -TEST_F(AudioRendererAlgorithmTest, CubicInterpolation) { +TEST_F(AudioRendererAlgorithmTest, QuadraticInterpolation) { // Arbitrary coefficients. const float kA = 0.7f; const float kB = 1.2f; @@ -592,7 +608,7 @@ TEST_F(AudioRendererAlgorithmTest, CubicInterpolation) { float extremum; float extremum_value; - internal::CubicInterpolation(y_values, &extremum, &extremum_value); + internal::QuadraticInterpolation(y_values, &extremum, &extremum_value); float x_star = -kB / (2.f * kA); float y_star = kA * x_star * x_star + kB * x_star + kC; @@ -601,6 +617,21 @@ TEST_F(AudioRendererAlgorithmTest, CubicInterpolation) { EXPECT_FLOAT_EQ(y_star, extremum_value); } +TEST_F(AudioRendererAlgorithmTest, QuadraticInterpolation_Colinear) { + float y_values[3]; + y_values[0] = 1.0; + y_values[1] = 1.0; + y_values[2] = 1.0; + + float extremum; + float extremum_value; + + internal::QuadraticInterpolation(y_values, &extremum, &extremum_value); + + EXPECT_FLOAT_EQ(extremum, 0.0); + EXPECT_FLOAT_EQ(extremum_value, 1.0); +} + TEST_F(AudioRendererAlgorithmTest, WsolaSlowdown) { WsolaTest(0.6f); } |