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

Side by Side 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: Back to the original approach, but with working splicer timestamps. 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/memory/scoped_ptr.h"
6 #include "media/base/audio_buffer.h"
7 #include "media/base/audio_buffer_converter.h"
8 #include "media/base/sinc_resampler.h"
9 #include "media/base/test_helpers.h"
10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace media {
14
15 const int kOutSampleRate = 44100;
16 const ChannelLayout kOutChannelLayout = CHANNEL_LAYOUT_STEREO;
17
18 static scoped_refptr<AudioBuffer> MakeTestBuffer(int sample_rate,
19 ChannelLayout channel_layout,
20 int frames) {
21 return MakeAudioBuffer<uint8>(kSampleFormatU8,
22 channel_layout,
23 sample_rate,
24 0,
25 1,
26 frames,
27 base::TimeDelta::FromSeconds(0),
28 base::TimeDelta::FromSeconds(0));
29 }
30
31 class AudioBufferConverterTest : public ::testing::Test {
32 public:
33 AudioBufferConverterTest()
34 : input_frames_(0), expected_output_frames_(0.0), output_frames_(0) {
35 AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
36 kOutChannelLayout,
37 kOutSampleRate,
38 16,
39 512);
40 audio_buffer_converter_.reset(new AudioBufferConverter(output_params));
41 }
42
43 void Reset() {
44 audio_buffer_converter_->Reset();
45 output_frames_ = expected_output_frames_ = input_frames_ = 0;
46 }
47
48 void AddInput(const scoped_refptr<AudioBuffer>& in) {
49 if (!in->end_of_stream()) {
50 input_frames_ += in->frame_count();
51 expected_output_frames_ +=
52 in->frame_count() *
53 (static_cast<double>(kOutSampleRate) / in->sample_rate());
54 }
55 audio_buffer_converter_->AddInput(in);
56 }
57
58 void ConsumeAllOutput() {
59 AddInput(AudioBuffer::CreateEOSBuffer());
60 while (audio_buffer_converter_->HasNextBuffer()) {
61 scoped_refptr<AudioBuffer> out = audio_buffer_converter_->GetNextBuffer();
62 if (!out->end_of_stream()) {
63 output_frames_ += out->frame_count();
64 EXPECT_EQ(out->sample_rate(), kOutSampleRate);
65 EXPECT_EQ(out->channel_layout(), kOutChannelLayout);
66 } else {
67 EXPECT_FALSE(audio_buffer_converter_->HasNextBuffer());
68 }
69 }
70 EXPECT_EQ(output_frames_, ceil(expected_output_frames_));
71 }
72
73 private:
74 scoped_ptr<AudioBufferConverter> audio_buffer_converter_;
75
76 int input_frames_;
77 double expected_output_frames_;
78 int output_frames_;
79 };
80
81 TEST_F(AudioBufferConverterTest, PassThrough) {
82 scoped_refptr<AudioBuffer> in =
83 MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512);
84 AddInput(in);
85 ConsumeAllOutput();
86 }
87
88 TEST_F(AudioBufferConverterTest, Downsample) {
89 scoped_refptr<AudioBuffer> in = MakeTestBuffer(48000, kOutChannelLayout, 512);
90 AddInput(in);
91 ConsumeAllOutput();
92 }
93
94 TEST_F(AudioBufferConverterTest, Upsample) {
95 scoped_refptr<AudioBuffer> in = MakeTestBuffer(8000, kOutChannelLayout, 512);
96 AddInput(in);
97 ConsumeAllOutput();
98 }
99
100 // Test resampling a buffer smaller than the SincResampler's kernel size.
101 TEST_F(AudioBufferConverterTest, Resample_TinyBuffer) {
102 AddInput(MakeTestBuffer(
103 48000, CHANNEL_LAYOUT_STEREO, SincResampler::kKernelSize - 1));
104 ConsumeAllOutput();
105 }
106
107 TEST_F(AudioBufferConverterTest, Resample_DifferingBufferSizes) {
108 const int input_sample_rate = 48000;
109 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 100));
110 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 200));
111 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 300));
112 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 400));
113 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 500));
114 ConsumeAllOutput();
115 }
116
117 TEST_F(AudioBufferConverterTest, ChannelDownmix) {
118 scoped_refptr<AudioBuffer> in =
119 MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 512);
120 AddInput(in);
121 ConsumeAllOutput();
122 }
123
124 TEST_F(AudioBufferConverterTest, ChannelUpmix) {
125 scoped_refptr<AudioBuffer> in =
126 MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_5_1, 512);
127 AddInput(in);
128 ConsumeAllOutput();
129 }
130
131 TEST_F(AudioBufferConverterTest, ResampleAndRemix) {
132 scoped_refptr<AudioBuffer> in =
133 MakeTestBuffer(48000, CHANNEL_LAYOUT_5_1, 512);
134 AddInput(in);
135 ConsumeAllOutput();
136 }
137
138 TEST_F(AudioBufferConverterTest, ConfigChange_SampleRate) {
139 AddInput(MakeTestBuffer(48000, kOutChannelLayout, 512));
140 AddInput(MakeTestBuffer(44100, kOutChannelLayout, 512));
141 ConsumeAllOutput();
142 }
143
144 TEST_F(AudioBufferConverterTest, ConfigChange_ChannelLayout) {
145 AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_STEREO, 512));
146 AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 512));
147 ConsumeAllOutput();
148 }
149
150 TEST_F(AudioBufferConverterTest, ConfigChange_SampleRateAndChannelLayout) {
151 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512));
152 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 512));
153 ConsumeAllOutput();
154 }
155
156 TEST_F(AudioBufferConverterTest, ConfigChange_Multiple) {
157 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512));
158 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 512));
159 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_5_1, 512));
160 AddInput(MakeTestBuffer(22050, CHANNEL_LAYOUT_STEREO, 512));
161 ConsumeAllOutput();
162 }
163
164 TEST_F(AudioBufferConverterTest, Reset) {
165 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512));
166 Reset();
167 ConsumeAllOutput();
168 }
169
170 TEST_F(AudioBufferConverterTest, ResampleThenReset) {
171 // Resampling is likely to leave some data buffered in AudioConverter's
172 // fifo or resampler, so make sure Reset() cleans that all up.
173 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_STEREO, 512));
174 Reset();
175 ConsumeAllOutput();
176 }
177
178 TEST_F(AudioBufferConverterTest, ResetThenConvert) {
179 AddInput(MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512));
180 Reset();
181 // Make sure we can keep using the AudioBufferConverter after we've Reset().
182 AddInput(MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512));
183 ConsumeAllOutput();
184 }
185
186 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698