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

Unified Diff: media/base/audio_buffer_converter_unittest.cc

Issue 177333003: Add support for midstream audio configuration changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ABS
Patch Set: disable fifo, add <cmath> to fix compile error Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/audio_buffer_converter.cc ('k') | media/base/audio_converter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/audio_buffer_converter_unittest.cc
diff --git a/media/base/audio_buffer_converter_unittest.cc b/media/base/audio_buffer_converter_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..80567cf990f1527e271e00c473f15600be8036c7
--- /dev/null
+++ b/media/base/audio_buffer_converter_unittest.cc
@@ -0,0 +1,186 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/scoped_ptr.h"
+#include "media/base/audio_buffer.h"
+#include "media/base/audio_buffer_converter.h"
+#include "media/base/sinc_resampler.h"
+#include "media/base/test_helpers.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace media {
+
+const int kOutSampleRate = 44100;
+const ChannelLayout kOutChannelLayout = CHANNEL_LAYOUT_STEREO;
+
+static scoped_refptr<AudioBuffer> MakeTestBuffer(int sample_rate,
+ ChannelLayout channel_layout,
+ int frames) {
+ return MakeAudioBuffer<uint8>(kSampleFormatU8,
+ channel_layout,
+ sample_rate,
+ 0,
+ 1,
+ frames,
+ base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0));
+}
+
+class AudioBufferConverterTest : public ::testing::Test {
+ public:
+ AudioBufferConverterTest()
+ : input_frames_(0), expected_output_frames_(0.0), output_frames_(0) {
+ AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+ kOutChannelLayout,
+ kOutSampleRate,
+ 16,
+ 512);
+ audio_buffer_converter_.reset(new AudioBufferConverter(output_params));
+ }
+
+ void Reset() {
+ audio_buffer_converter_->Reset();
+ output_frames_ = expected_output_frames_ = input_frames_ = 0;
+ }
+
+ void AddInput(const scoped_refptr<AudioBuffer>& in) {
+ if (!in->end_of_stream()) {
+ input_frames_ += in->frame_count();
+ expected_output_frames_ +=
+ in->frame_count() *
+ (static_cast<double>(kOutSampleRate) / in->sample_rate());
+ }
+ audio_buffer_converter_->AddInput(in);
+ }
+
+ void ConsumeAllOutput() {
+ AddInput(AudioBuffer::CreateEOSBuffer());
+ while (audio_buffer_converter_->HasNextBuffer()) {
+ scoped_refptr<AudioBuffer> out = audio_buffer_converter_->GetNextBuffer();
+ if (!out->end_of_stream()) {
+ output_frames_ += out->frame_count();
+ EXPECT_EQ(out->sample_rate(), kOutSampleRate);
+ EXPECT_EQ(out->channel_layout(), kOutChannelLayout);
+ } else {
+ EXPECT_FALSE(audio_buffer_converter_->HasNextBuffer());
+ }
+ }
+ EXPECT_EQ(output_frames_, ceil(expected_output_frames_));
+ }
+
+ private:
+ scoped_ptr<AudioBufferConverter> audio_buffer_converter_;
+
+ int input_frames_;
+ double expected_output_frames_;
+ int output_frames_;
+};
+
+TEST_F(AudioBufferConverterTest, PassThrough) {
+ scoped_refptr<AudioBuffer> in =
+ MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512);
+ AddInput(in);
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, Downsample) {
+ scoped_refptr<AudioBuffer> in = MakeTestBuffer(48000, kOutChannelLayout, 512);
+ AddInput(in);
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, Upsample) {
+ scoped_refptr<AudioBuffer> in = MakeTestBuffer(8000, kOutChannelLayout, 512);
+ AddInput(in);
+ ConsumeAllOutput();
+}
+
+// Test resampling a buffer smaller than the SincResampler's kernel size.
+TEST_F(AudioBufferConverterTest, Resample_TinyBuffer) {
+ AddInput(MakeTestBuffer(
+ 48000, CHANNEL_LAYOUT_STEREO, SincResampler::kKernelSize - 1));
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, Resample_DifferingBufferSizes) {
+ const int input_sample_rate = 48000;
+ AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 100));
+ AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 200));
+ AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 300));
+ AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 400));
+ AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 500));
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ChannelDownmix) {
+ scoped_refptr<AudioBuffer> in =
+ MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 512);
+ AddInput(in);
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ChannelUpmix) {
+ scoped_refptr<AudioBuffer> in =
+ MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_5_1, 512);
+ AddInput(in);
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ResampleAndRemix) {
+ scoped_refptr<AudioBuffer> in =
+ MakeTestBuffer(48000, CHANNEL_LAYOUT_5_1, 512);
+ AddInput(in);
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ConfigChange_SampleRate) {
+ AddInput(MakeTestBuffer(48000, kOutChannelLayout, 512));
+ AddInput(MakeTestBuffer(44100, kOutChannelLayout, 512));
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ConfigChange_ChannelLayout) {
+ AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_STEREO, 512));
+ AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 512));
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ConfigChange_SampleRateAndChannelLayout) {
+ AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512));
+ AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 512));
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ConfigChange_Multiple) {
+ AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512));
+ AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 512));
+ AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_5_1, 512));
+ AddInput(MakeTestBuffer(22050, CHANNEL_LAYOUT_STEREO, 512));
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, Reset) {
+ AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512));
+ Reset();
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ResampleThenReset) {
+ // Resampling is likely to leave some data buffered in AudioConverter's
+ // fifo or resampler, so make sure Reset() cleans that all up.
+ AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_STEREO, 512));
+ Reset();
+ ConsumeAllOutput();
+}
+
+TEST_F(AudioBufferConverterTest, ResetThenConvert) {
+ AddInput(MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512));
+ Reset();
+ // Make sure we can keep using the AudioBufferConverter after we've Reset().
+ AddInput(MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512));
+ ConsumeAllOutput();
+}
+
+} // namespace media
« no previous file with comments | « media/base/audio_buffer_converter.cc ('k') | media/base/audio_converter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698