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

Side by Side Diff: webrtc/audio/utility/audio_frame_operations_unittest.cc

Issue 2750783004: Add mute state field to AudioFrame. (Closed)
Patch Set: Address review comments Created 3 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
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 14 matching lines...) Expand all
25 } 25 }
26 26
27 AudioFrame frame_; 27 AudioFrame frame_;
28 }; 28 };
29 29
30 void SetFrameData(int16_t ch1, 30 void SetFrameData(int16_t ch1,
31 int16_t ch2, 31 int16_t ch2,
32 int16_t ch3, 32 int16_t ch3,
33 int16_t ch4, 33 int16_t ch4,
34 AudioFrame* frame) { 34 AudioFrame* frame) {
35 int16_t* frame_data = frame->mutable_data();
35 for (size_t i = 0; i < frame->samples_per_channel_ * 4; i += 4) { 36 for (size_t i = 0; i < frame->samples_per_channel_ * 4; i += 4) {
36 frame->data_[i] = ch1; 37 frame_data[i] = ch1;
37 frame->data_[i + 1] = ch2; 38 frame_data[i + 1] = ch2;
38 frame->data_[i + 2] = ch3; 39 frame_data[i + 2] = ch3;
39 frame->data_[i + 3] = ch4; 40 frame_data[i + 3] = ch4;
40 } 41 }
41 } 42 }
42 43
43 void SetFrameData(int16_t left, int16_t right, AudioFrame* frame) { 44 void SetFrameData(int16_t left, int16_t right, AudioFrame* frame) {
45 int16_t* frame_data = frame->mutable_data();
44 for (size_t i = 0; i < frame->samples_per_channel_ * 2; i += 2) { 46 for (size_t i = 0; i < frame->samples_per_channel_ * 2; i += 2) {
45 frame->data_[i] = left; 47 frame_data[i] = left;
46 frame->data_[i + 1] = right; 48 frame_data[i + 1] = right;
47 } 49 }
48 } 50 }
49 51
50 void SetFrameData(int16_t data, AudioFrame* frame) { 52 void SetFrameData(int16_t data, AudioFrame* frame) {
53 int16_t* frame_data = frame->mutable_data();
51 for (size_t i = 0; i < frame->samples_per_channel_; i++) { 54 for (size_t i = 0; i < frame->samples_per_channel_; i++) {
52 frame->data_[i] = data; 55 frame_data[i] = data;
53 } 56 }
54 } 57 }
55 58
56 void VerifyFramesAreEqual(const AudioFrame& frame1, const AudioFrame& frame2) { 59 void VerifyFramesAreEqual(const AudioFrame& frame1, const AudioFrame& frame2) {
57 EXPECT_EQ(frame1.num_channels_, frame2.num_channels_); 60 EXPECT_EQ(frame1.num_channels_, frame2.num_channels_);
58 EXPECT_EQ(frame1.samples_per_channel_, 61 EXPECT_EQ(frame1.samples_per_channel_,
59 frame2.samples_per_channel_); 62 frame2.samples_per_channel_);
63 const int16_t* frame1_data = frame1.data();
64 const int16_t* frame2_data = frame2.data();
60 for (size_t i = 0; i < frame1.samples_per_channel_ * frame1.num_channels_; 65 for (size_t i = 0; i < frame1.samples_per_channel_ * frame1.num_channels_;
61 i++) { 66 i++) {
62 EXPECT_EQ(frame1.data_[i], frame2.data_[i]); 67 EXPECT_EQ(frame1_data[i], frame2_data[i]);
63 } 68 }
64 } 69 }
65 70
66 void InitFrame(AudioFrame* frame, size_t channels, size_t samples_per_channel, 71 void InitFrame(AudioFrame* frame, size_t channels, size_t samples_per_channel,
67 int16_t left_data, int16_t right_data) { 72 int16_t left_data, int16_t right_data) {
68 RTC_DCHECK(frame); 73 RTC_DCHECK(frame);
69 RTC_DCHECK_GE(2, channels); 74 RTC_DCHECK_GE(2, channels);
70 RTC_DCHECK_GE(AudioFrame::kMaxDataSizeSamples, 75 RTC_DCHECK_GE(AudioFrame::kMaxDataSizeSamples,
71 samples_per_channel * channels); 76 samples_per_channel * channels);
72 frame->samples_per_channel_ = samples_per_channel; 77 frame->samples_per_channel_ = samples_per_channel;
73 frame->num_channels_ = channels; 78 frame->num_channels_ = channels;
74 if (channels == 2) { 79 if (channels == 2) {
75 SetFrameData(left_data, right_data, frame); 80 SetFrameData(left_data, right_data, frame);
76 } else if (channels == 1) { 81 } else if (channels == 1) {
77 SetFrameData(left_data, frame); 82 SetFrameData(left_data, frame);
78 } 83 }
79 } 84 }
80 85
81 int16_t GetChannelData(const AudioFrame& frame, size_t channel, size_t index) { 86 int16_t GetChannelData(const AudioFrame& frame, size_t channel, size_t index) {
82 RTC_DCHECK_LT(channel, frame.num_channels_); 87 RTC_DCHECK_LT(channel, frame.num_channels_);
83 RTC_DCHECK_LT(index, frame.samples_per_channel_); 88 RTC_DCHECK_LT(index, frame.samples_per_channel_);
84 return frame.data_[index * frame.num_channels_ + channel]; 89 return frame.data()[index * frame.num_channels_ + channel];
85 } 90 }
86 91
87 void VerifyFrameDataBounds(const AudioFrame& frame, size_t channel, int16_t max, 92 void VerifyFrameDataBounds(const AudioFrame& frame, size_t channel, int16_t max,
88 int16_t min) { 93 int16_t min) {
89 for (size_t i = 0; i < frame.samples_per_channel_; ++i) { 94 for (size_t i = 0; i < frame.samples_per_channel_; ++i) {
90 int16_t s = GetChannelData(frame, channel, i); 95 int16_t s = GetChannelData(frame, channel, i);
91 EXPECT_LE(min, s); 96 EXPECT_LE(min, s);
92 EXPECT_GE(max, s); 97 EXPECT_GE(max, s);
93 } 98 }
94 } 99 }
(...skipping 20 matching lines...) Expand all
115 } 120 }
116 121
117 TEST_F(AudioFrameOperationsTest, MonoToStereoBufferSucceeds) { 122 TEST_F(AudioFrameOperationsTest, MonoToStereoBufferSucceeds) {
118 AudioFrame target_frame; 123 AudioFrame target_frame;
119 frame_.num_channels_ = 1; 124 frame_.num_channels_ = 1;
120 SetFrameData(4, &frame_); 125 SetFrameData(4, &frame_);
121 126
122 target_frame.num_channels_ = 2; 127 target_frame.num_channels_ = 2;
123 target_frame.samples_per_channel_ = frame_.samples_per_channel_; 128 target_frame.samples_per_channel_ = frame_.samples_per_channel_;
124 129
125 AudioFrameOperations::MonoToStereo(frame_.data_, frame_.samples_per_channel_, 130 AudioFrameOperations::MonoToStereo(frame_.data(), frame_.samples_per_channel_,
126 target_frame.data_); 131 target_frame.mutable_data());
127 132
128 AudioFrame stereo_frame; 133 AudioFrame stereo_frame;
129 stereo_frame.samples_per_channel_ = 320; 134 stereo_frame.samples_per_channel_ = 320;
130 stereo_frame.num_channels_ = 2; 135 stereo_frame.num_channels_ = 2;
131 SetFrameData(4, 4, &stereo_frame); 136 SetFrameData(4, 4, &stereo_frame);
132 VerifyFramesAreEqual(stereo_frame, target_frame); 137 VerifyFramesAreEqual(stereo_frame, target_frame);
133 } 138 }
134 139
135 TEST_F(AudioFrameOperationsTest, StereoToMonoFailsWithBadParameters) { 140 TEST_F(AudioFrameOperationsTest, StereoToMonoFailsWithBadParameters) {
136 frame_.num_channels_ = 1; 141 frame_.num_channels_ = 1;
(...skipping 11 matching lines...) Expand all
148 VerifyFramesAreEqual(mono_frame, frame_); 153 VerifyFramesAreEqual(mono_frame, frame_);
149 } 154 }
150 155
151 TEST_F(AudioFrameOperationsTest, StereoToMonoBufferSucceeds) { 156 TEST_F(AudioFrameOperationsTest, StereoToMonoBufferSucceeds) {
152 AudioFrame target_frame; 157 AudioFrame target_frame;
153 SetFrameData(4, 2, &frame_); 158 SetFrameData(4, 2, &frame_);
154 159
155 target_frame.num_channels_ = 1; 160 target_frame.num_channels_ = 1;
156 target_frame.samples_per_channel_ = frame_.samples_per_channel_; 161 target_frame.samples_per_channel_ = frame_.samples_per_channel_;
157 162
158 AudioFrameOperations::StereoToMono(frame_.data_, frame_.samples_per_channel_, 163 AudioFrameOperations::StereoToMono(frame_.data(), frame_.samples_per_channel_,
159 target_frame.data_); 164 target_frame.mutable_data());
160 165
161 AudioFrame mono_frame; 166 AudioFrame mono_frame;
162 mono_frame.samples_per_channel_ = 320; 167 mono_frame.samples_per_channel_ = 320;
163 mono_frame.num_channels_ = 1; 168 mono_frame.num_channels_ = 1;
164 SetFrameData(3, &mono_frame); 169 SetFrameData(3, &mono_frame);
165 VerifyFramesAreEqual(mono_frame, target_frame); 170 VerifyFramesAreEqual(mono_frame, target_frame);
166 } 171 }
167 172
168 TEST_F(AudioFrameOperationsTest, StereoToMonoDoesNotWrapAround) { 173 TEST_F(AudioFrameOperationsTest, StereoToMonoDoesNotWrapAround) {
169 SetFrameData(-32768, -32768, &frame_); 174 SetFrameData(-32768, -32768, &frame_);
(...skipping 27 matching lines...) Expand all
197 } 202 }
198 203
199 TEST_F(AudioFrameOperationsTest, QuadToMonoBufferSucceeds) { 204 TEST_F(AudioFrameOperationsTest, QuadToMonoBufferSucceeds) {
200 AudioFrame target_frame; 205 AudioFrame target_frame;
201 frame_.num_channels_ = 4; 206 frame_.num_channels_ = 4;
202 SetFrameData(4, 2, 6, 8, &frame_); 207 SetFrameData(4, 2, 6, 8, &frame_);
203 208
204 target_frame.num_channels_ = 1; 209 target_frame.num_channels_ = 1;
205 target_frame.samples_per_channel_ = frame_.samples_per_channel_; 210 target_frame.samples_per_channel_ = frame_.samples_per_channel_;
206 211
207 AudioFrameOperations::QuadToMono(frame_.data_, frame_.samples_per_channel_, 212 AudioFrameOperations::QuadToMono(frame_.data(), frame_.samples_per_channel_,
208 target_frame.data_); 213 target_frame.mutable_data());
209 AudioFrame mono_frame; 214 AudioFrame mono_frame;
210 mono_frame.samples_per_channel_ = 320; 215 mono_frame.samples_per_channel_ = 320;
211 mono_frame.num_channels_ = 1; 216 mono_frame.num_channels_ = 1;
212 SetFrameData(5, &mono_frame); 217 SetFrameData(5, &mono_frame);
213 VerifyFramesAreEqual(mono_frame, target_frame); 218 VerifyFramesAreEqual(mono_frame, target_frame);
214 } 219 }
215 220
216 TEST_F(AudioFrameOperationsTest, QuadToMonoDoesNotWrapAround) { 221 TEST_F(AudioFrameOperationsTest, QuadToMonoDoesNotWrapAround) {
217 frame_.num_channels_ = 4; 222 frame_.num_channels_ = 4;
218 SetFrameData(-32768, -32768, -32768, -32768, &frame_); 223 SetFrameData(-32768, -32768, -32768, -32768, &frame_);
(...skipping 26 matching lines...) Expand all
245 } 250 }
246 251
247 TEST_F(AudioFrameOperationsTest, QuadToStereoBufferSucceeds) { 252 TEST_F(AudioFrameOperationsTest, QuadToStereoBufferSucceeds) {
248 AudioFrame target_frame; 253 AudioFrame target_frame;
249 frame_.num_channels_ = 4; 254 frame_.num_channels_ = 4;
250 SetFrameData(4, 2, 6, 8, &frame_); 255 SetFrameData(4, 2, 6, 8, &frame_);
251 256
252 target_frame.num_channels_ = 2; 257 target_frame.num_channels_ = 2;
253 target_frame.samples_per_channel_ = frame_.samples_per_channel_; 258 target_frame.samples_per_channel_ = frame_.samples_per_channel_;
254 259
255 AudioFrameOperations::QuadToStereo(frame_.data_, frame_.samples_per_channel_, 260 AudioFrameOperations::QuadToStereo(frame_.data(), frame_.samples_per_channel_,
256 target_frame.data_); 261 target_frame.mutable_data());
257 AudioFrame stereo_frame; 262 AudioFrame stereo_frame;
258 stereo_frame.samples_per_channel_ = 320; 263 stereo_frame.samples_per_channel_ = 320;
259 stereo_frame.num_channels_ = 2; 264 stereo_frame.num_channels_ = 2;
260 SetFrameData(3, 7, &stereo_frame); 265 SetFrameData(3, 7, &stereo_frame);
261 VerifyFramesAreEqual(stereo_frame, target_frame); 266 VerifyFramesAreEqual(stereo_frame, target_frame);
262 } 267 }
263 268
264 TEST_F(AudioFrameOperationsTest, QuadToStereoDoesNotWrapAround) { 269 TEST_F(AudioFrameOperationsTest, QuadToStereoDoesNotWrapAround) {
265 frame_.num_channels_ = 4; 270 frame_.num_channels_ = 4;
266 SetFrameData(-32768, -32768, -32768, -32768, &frame_); 271 SetFrameData(-32768, -32768, -32768, -32768, &frame_);
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 VerifyFramesAreEqual(frame_, frame_to_add_to); 508 VerifyFramesAreEqual(frame_, frame_to_add_to);
504 } 509 }
505 510
506 TEST_F(AudioFrameOperationsTest, AddingTwoFramesProducesTheirSum) { 511 TEST_F(AudioFrameOperationsTest, AddingTwoFramesProducesTheirSum) {
507 AudioFrame frame_to_add_to; 512 AudioFrame frame_to_add_to;
508 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; 513 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_;
509 frame_to_add_to.num_channels_ = frame_.num_channels_; 514 frame_to_add_to.num_channels_ = frame_.num_channels_;
510 SetFrameData(1000, &frame_to_add_to); 515 SetFrameData(1000, &frame_to_add_to);
511 516
512 AudioFrameOperations::Add(frame_, &frame_to_add_to); 517 AudioFrameOperations::Add(frame_, &frame_to_add_to);
513 SetFrameData(frame_.data_[0] + 1000, &frame_); 518 SetFrameData(frame_.data()[0] + 1000, &frame_);
514 VerifyFramesAreEqual(frame_, frame_to_add_to); 519 VerifyFramesAreEqual(frame_, frame_to_add_to);
515 } 520 }
516 } // namespace 521 } // namespace
517 } // namespace webrtc 522 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698