OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |