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

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

Issue 212103013: Add channel_count parameter back to AudioBuffer creation methods. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mstr
Patch Set: fix unit test Created 6 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_buffer_converter.cc ('k') | media/base/audio_buffer_queue_unittest.cc » ('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 2014 The Chromium Authors. All rights reserved. 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 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 #include "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "media/base/audio_buffer.h" 6 #include "media/base/audio_buffer.h"
7 #include "media/base/audio_buffer_converter.h" 7 #include "media/base/audio_buffer_converter.h"
8 #include "media/base/sinc_resampler.h" 8 #include "media/base/sinc_resampler.h"
9 #include "media/base/test_helpers.h" 9 #include "media/base/test_helpers.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace media { 13 namespace media {
14 14
15 const int kOutSampleRate = 44100; 15 const int kOutSampleRate = 44100;
16 const ChannelLayout kOutChannelLayout = CHANNEL_LAYOUT_STEREO; 16 const ChannelLayout kOutChannelLayout = CHANNEL_LAYOUT_STEREO;
17 const int kOutChannelCount = 2;
17 18
18 static scoped_refptr<AudioBuffer> MakeTestBuffer(int sample_rate, 19 static scoped_refptr<AudioBuffer> MakeTestBuffer(int sample_rate,
19 ChannelLayout channel_layout, 20 ChannelLayout channel_layout,
21 int channel_count,
20 int frames) { 22 int frames) {
21 return MakeAudioBuffer<uint8>(kSampleFormatU8, 23 return MakeAudioBuffer<uint8>(kSampleFormatU8,
22 channel_layout, 24 channel_layout,
25 channel_count,
23 sample_rate, 26 sample_rate,
24 0, 27 0,
25 1, 28 1,
26 frames, 29 frames,
27 base::TimeDelta::FromSeconds(0), 30 base::TimeDelta::FromSeconds(0),
28 base::TimeDelta::FromSeconds(0)); 31 base::TimeDelta::FromSeconds(0));
29 } 32 }
30 33
31 class AudioBufferConverterTest : public ::testing::Test { 34 class AudioBufferConverterTest : public ::testing::Test {
32 public: 35 public:
33 AudioBufferConverterTest() 36 AudioBufferConverterTest()
34 : input_frames_(0), expected_output_frames_(0.0), output_frames_(0) { 37 : input_frames_(0), expected_output_frames_(0.0), output_frames_(0) {
35 AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY, 38 AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
36 kOutChannelLayout, 39 kOutChannelLayout,
37 kOutSampleRate, 40 kOutSampleRate,
38 16, 41 16,
39 512); 42 512);
40 audio_buffer_converter_.reset(new AudioBufferConverter(output_params)); 43 ResetConverter(output_params);
41 } 44 }
42 45
43 void Reset() { 46 void Reset() {
44 audio_buffer_converter_->Reset(); 47 audio_buffer_converter_->Reset();
45 output_frames_ = expected_output_frames_ = input_frames_ = 0; 48 output_frames_ = expected_output_frames_ = input_frames_ = 0;
46 } 49 }
47 50
48 void AddInput(const scoped_refptr<AudioBuffer>& in) { 51 void AddInput(const scoped_refptr<AudioBuffer>& in) {
49 if (!in->end_of_stream()) { 52 if (!in->end_of_stream()) {
50 input_frames_ += in->frame_count(); 53 input_frames_ += in->frame_count();
51 expected_output_frames_ += 54 expected_output_frames_ +=
52 in->frame_count() * 55 in->frame_count() *
53 (static_cast<double>(kOutSampleRate) / in->sample_rate()); 56 (static_cast<double>(kOutSampleRate) / in->sample_rate());
54 } 57 }
55 audio_buffer_converter_->AddInput(in); 58 audio_buffer_converter_->AddInput(in);
56 } 59 }
57 60
58 void ConsumeAllOutput() { 61 void ConsumeAllOutput() {
59 AddInput(AudioBuffer::CreateEOSBuffer()); 62 AddInput(AudioBuffer::CreateEOSBuffer());
60 while (audio_buffer_converter_->HasNextBuffer()) { 63 while (audio_buffer_converter_->HasNextBuffer()) {
61 scoped_refptr<AudioBuffer> out = audio_buffer_converter_->GetNextBuffer(); 64 scoped_refptr<AudioBuffer> out = audio_buffer_converter_->GetNextBuffer();
62 if (!out->end_of_stream()) { 65 if (!out->end_of_stream()) {
63 output_frames_ += out->frame_count(); 66 output_frames_ += out->frame_count();
64 EXPECT_EQ(out->sample_rate(), kOutSampleRate); 67 EXPECT_EQ(out->sample_rate(), out_sample_rate_);
65 EXPECT_EQ(out->channel_layout(), kOutChannelLayout); 68 EXPECT_EQ(out->channel_layout(), out_channel_layout_);
69 EXPECT_EQ(out->channel_count(), out_channel_count_);
66 } else { 70 } else {
67 EXPECT_FALSE(audio_buffer_converter_->HasNextBuffer()); 71 EXPECT_FALSE(audio_buffer_converter_->HasNextBuffer());
68 } 72 }
69 } 73 }
70 EXPECT_EQ(output_frames_, ceil(expected_output_frames_)); 74 EXPECT_EQ(output_frames_, ceil(expected_output_frames_));
71 } 75 }
72 76
77 void ResetConverter(AudioParameters out_params) {
78 audio_buffer_converter_.reset(new AudioBufferConverter(out_params));
79 out_channel_layout_ = out_params.channel_layout();
80 out_channel_count_ = out_params.channels();
81 out_sample_rate_ = out_params.sample_rate();
82 }
83
73 private: 84 private:
74 scoped_ptr<AudioBufferConverter> audio_buffer_converter_; 85 scoped_ptr<AudioBufferConverter> audio_buffer_converter_;
75 86
76 int input_frames_; 87 int input_frames_;
77 double expected_output_frames_; 88 double expected_output_frames_;
78 int output_frames_; 89 int output_frames_;
90
91 int out_sample_rate_;
92 ChannelLayout out_channel_layout_;
93 int out_channel_count_;
79 }; 94 };
80 95
81 TEST_F(AudioBufferConverterTest, PassThrough) { 96 TEST_F(AudioBufferConverterTest, PassThrough) {
82 scoped_refptr<AudioBuffer> in = 97 scoped_refptr<AudioBuffer> in =
83 MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512); 98 MakeTestBuffer(kOutSampleRate, kOutChannelLayout, kOutChannelCount, 512);
84 AddInput(in); 99 AddInput(in);
85 ConsumeAllOutput(); 100 ConsumeAllOutput();
86 } 101 }
87 102
88 TEST_F(AudioBufferConverterTest, Downsample) { 103 TEST_F(AudioBufferConverterTest, Downsample) {
89 scoped_refptr<AudioBuffer> in = MakeTestBuffer(48000, kOutChannelLayout, 512); 104 scoped_refptr<AudioBuffer> in =
105 MakeTestBuffer(48000, kOutChannelLayout, kOutChannelCount, 512);
90 AddInput(in); 106 AddInput(in);
91 ConsumeAllOutput(); 107 ConsumeAllOutput();
92 } 108 }
93 109
94 TEST_F(AudioBufferConverterTest, Upsample) { 110 TEST_F(AudioBufferConverterTest, Upsample) {
95 scoped_refptr<AudioBuffer> in = MakeTestBuffer(8000, kOutChannelLayout, 512); 111 scoped_refptr<AudioBuffer> in =
112 MakeTestBuffer(8000, kOutChannelLayout, kOutChannelCount, 512);
96 AddInput(in); 113 AddInput(in);
97 ConsumeAllOutput(); 114 ConsumeAllOutput();
98 } 115 }
99 116
100 // Test resampling a buffer smaller than the SincResampler's kernel size. 117 // Test resampling a buffer smaller than the SincResampler's kernel size.
101 TEST_F(AudioBufferConverterTest, Resample_TinyBuffer) { 118 TEST_F(AudioBufferConverterTest, Resample_TinyBuffer) {
102 AddInput(MakeTestBuffer( 119 AddInput(MakeTestBuffer(
103 48000, CHANNEL_LAYOUT_STEREO, SincResampler::kKernelSize - 1)); 120 48000, CHANNEL_LAYOUT_STEREO, 2, SincResampler::kKernelSize - 1));
104 ConsumeAllOutput(); 121 ConsumeAllOutput();
105 } 122 }
106 123
107 TEST_F(AudioBufferConverterTest, Resample_DifferingBufferSizes) { 124 TEST_F(AudioBufferConverterTest, Resample_DifferingBufferSizes) {
108 const int input_sample_rate = 48000; 125 const int input_sample_rate = 48000;
109 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 100)); 126 AddInput(MakeTestBuffer(
110 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 200)); 127 input_sample_rate, kOutChannelLayout, kOutChannelCount, 100));
111 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 300)); 128 AddInput(MakeTestBuffer(
112 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 400)); 129 input_sample_rate, kOutChannelLayout, kOutChannelCount, 200));
113 AddInput(MakeTestBuffer(input_sample_rate, kOutChannelLayout, 500)); 130 AddInput(MakeTestBuffer(
131 input_sample_rate, kOutChannelLayout, kOutChannelCount, 300));
132 AddInput(MakeTestBuffer(
133 input_sample_rate, kOutChannelLayout, kOutChannelCount, 400));
134 AddInput(MakeTestBuffer(
135 input_sample_rate, kOutChannelLayout, kOutChannelCount, 500));
114 ConsumeAllOutput(); 136 ConsumeAllOutput();
115 } 137 }
116 138
117 TEST_F(AudioBufferConverterTest, ChannelDownmix) { 139 TEST_F(AudioBufferConverterTest, ChannelDownmix) {
118 scoped_refptr<AudioBuffer> in = 140 scoped_refptr<AudioBuffer> in =
119 MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 512); 141 MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 1, 512);
120 AddInput(in); 142 AddInput(in);
121 ConsumeAllOutput(); 143 ConsumeAllOutput();
122 } 144 }
123 145
124 TEST_F(AudioBufferConverterTest, ChannelUpmix) { 146 TEST_F(AudioBufferConverterTest, ChannelUpmix) {
125 scoped_refptr<AudioBuffer> in = 147 scoped_refptr<AudioBuffer> in =
126 MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_5_1, 512); 148 MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_5_1, 6, 512);
127 AddInput(in); 149 AddInput(in);
128 ConsumeAllOutput(); 150 ConsumeAllOutput();
129 } 151 }
130 152
131 TEST_F(AudioBufferConverterTest, ResampleAndRemix) { 153 TEST_F(AudioBufferConverterTest, ResampleAndRemix) {
132 scoped_refptr<AudioBuffer> in = 154 scoped_refptr<AudioBuffer> in =
133 MakeTestBuffer(48000, CHANNEL_LAYOUT_5_1, 512); 155 MakeTestBuffer(48000, CHANNEL_LAYOUT_5_1, 6, 512);
134 AddInput(in); 156 AddInput(in);
135 ConsumeAllOutput(); 157 ConsumeAllOutput();
136 } 158 }
137 159
138 TEST_F(AudioBufferConverterTest, ConfigChange_SampleRate) { 160 TEST_F(AudioBufferConverterTest, ConfigChange_SampleRate) {
139 AddInput(MakeTestBuffer(48000, kOutChannelLayout, 512)); 161 AddInput(MakeTestBuffer(48000, kOutChannelLayout, kOutChannelCount, 512));
140 AddInput(MakeTestBuffer(44100, kOutChannelLayout, 512)); 162 AddInput(MakeTestBuffer(44100, kOutChannelLayout, kOutChannelCount, 512));
141 ConsumeAllOutput(); 163 ConsumeAllOutput();
142 } 164 }
143 165
144 TEST_F(AudioBufferConverterTest, ConfigChange_ChannelLayout) { 166 TEST_F(AudioBufferConverterTest, ConfigChange_ChannelLayout) {
145 AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_STEREO, 512)); 167 AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_STEREO, 2, 512));
146 AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 512)); 168 AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_MONO, 1, 512));
147 ConsumeAllOutput(); 169 ConsumeAllOutput();
148 } 170 }
149 171
150 TEST_F(AudioBufferConverterTest, ConfigChange_SampleRateAndChannelLayout) { 172 TEST_F(AudioBufferConverterTest, ConfigChange_SampleRateAndChannelLayout) {
151 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512)); 173 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 2, 512));
152 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 512)); 174 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 1, 512));
153 ConsumeAllOutput(); 175 ConsumeAllOutput();
154 } 176 }
155 177
156 TEST_F(AudioBufferConverterTest, ConfigChange_Multiple) { 178 TEST_F(AudioBufferConverterTest, ConfigChange_Multiple) {
157 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512)); 179 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 2, 512));
158 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 512)); 180 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_MONO, 1, 512));
159 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_5_1, 512)); 181 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_5_1, 6, 512));
160 AddInput(MakeTestBuffer(22050, CHANNEL_LAYOUT_STEREO, 512)); 182 AddInput(MakeTestBuffer(22050, CHANNEL_LAYOUT_STEREO, 2, 512));
161 ConsumeAllOutput(); 183 ConsumeAllOutput();
162 } 184 }
163 185
164 TEST_F(AudioBufferConverterTest, Reset) { 186 TEST_F(AudioBufferConverterTest, Reset) {
165 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 512)); 187 AddInput(MakeTestBuffer(44100, CHANNEL_LAYOUT_STEREO, 2, 512));
166 Reset(); 188 Reset();
167 ConsumeAllOutput(); 189 ConsumeAllOutput();
168 } 190 }
169 191
170 TEST_F(AudioBufferConverterTest, ResampleThenReset) { 192 TEST_F(AudioBufferConverterTest, ResampleThenReset) {
171 // Resampling is likely to leave some data buffered in AudioConverter's 193 // Resampling is likely to leave some data buffered in AudioConverter's
172 // fifo or resampler, so make sure Reset() cleans that all up. 194 // fifo or resampler, so make sure Reset() cleans that all up.
173 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_STEREO, 512)); 195 AddInput(MakeTestBuffer(48000, CHANNEL_LAYOUT_STEREO, 2, 512));
174 Reset(); 196 Reset();
175 ConsumeAllOutput(); 197 ConsumeAllOutput();
176 } 198 }
177 199
178 TEST_F(AudioBufferConverterTest, ResetThenConvert) { 200 TEST_F(AudioBufferConverterTest, ResetThenConvert) {
179 AddInput(MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512)); 201 AddInput(
202 MakeTestBuffer(kOutSampleRate, kOutChannelLayout, kOutChannelCount, 512));
180 Reset(); 203 Reset();
181 // Make sure we can keep using the AudioBufferConverter after we've Reset(). 204 // Make sure we can keep using the AudioBufferConverter after we've Reset().
182 AddInput(MakeTestBuffer(kOutSampleRate, kOutChannelLayout, 512)); 205 AddInput(
206 MakeTestBuffer(kOutSampleRate, kOutChannelLayout, kOutChannelCount, 512));
183 ConsumeAllOutput(); 207 ConsumeAllOutput();
184 } 208 }
185 209
210 TEST_F(AudioBufferConverterTest, DiscreteChannelLayout) {
211 AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
212 CHANNEL_LAYOUT_DISCRETE,
213 2,
214 0,
215 kOutSampleRate,
216 16,
217 512,
218 0);
219 ResetConverter(output_params);
220 AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_STEREO, 2, 512));
221 ConsumeAllOutput();
222 }
223
186 } // namespace media 224 } // namespace media
OLDNEW
« no previous file with comments | « media/base/audio_buffer_converter.cc ('k') | media/base/audio_buffer_queue_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698