OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 | 199 |
200 // Close the files. | 200 // Close the files. |
201 in_file_stereo_.Close(); | 201 in_file_stereo_.Close(); |
202 in_file_mono_.Close(); | 202 in_file_mono_.Close(); |
203 out_file_.Close(); | 203 out_file_.Close(); |
204 out_file_standalone_.Close(); | 204 out_file_standalone_.Close(); |
205 #endif | 205 #endif |
206 } | 206 } |
207 | 207 |
208 void OpusTest::Run(TestPackStereo* channel, int channels, int bitrate, | 208 void OpusTest::Run(TestPackStereo* channel, int channels, int bitrate, |
209 int frame_length, int percent_loss) { | 209 size_t frame_length, int percent_loss) { |
210 AudioFrame audio_frame; | 210 AudioFrame audio_frame; |
211 int32_t out_freq_hz_b = out_file_.SamplingFrequency(); | 211 int32_t out_freq_hz_b = out_file_.SamplingFrequency(); |
212 const int kBufferSizeSamples = 480 * 12 * 2; // Can hold 120 ms stereo audio. | 212 const size_t kBufferSizeSamples = 480 * 12 * 2; // 120 ms stereo audio. |
213 int16_t audio[kBufferSizeSamples]; | 213 int16_t audio[kBufferSizeSamples]; |
214 int16_t out_audio[kBufferSizeSamples]; | 214 int16_t out_audio[kBufferSizeSamples]; |
215 int16_t audio_type; | 215 int16_t audio_type; |
216 int written_samples = 0; | 216 size_t written_samples = 0; |
217 int read_samples = 0; | 217 size_t read_samples = 0; |
218 int decoded_samples = 0; | 218 size_t decoded_samples = 0; |
219 bool first_packet = true; | 219 bool first_packet = true; |
220 uint32_t start_time_stamp = 0; | 220 uint32_t start_time_stamp = 0; |
221 | 221 |
222 channel->reset_payload_size(); | 222 channel->reset_payload_size(); |
223 counter_ = 0; | 223 counter_ = 0; |
224 | 224 |
225 // Set encoder rate. | 225 // Set encoder rate. |
226 EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_mono_encoder_, bitrate)); | 226 EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_mono_encoder_, bitrate)); |
227 EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_stereo_encoder_, bitrate)); | 227 EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_stereo_encoder_, bitrate)); |
228 | 228 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 resampler_.Resample10Msec(audio_frame.data_, | 261 resampler_.Resample10Msec(audio_frame.data_, |
262 audio_frame.sample_rate_hz_, | 262 audio_frame.sample_rate_hz_, |
263 48000, | 263 48000, |
264 channels, | 264 channels, |
265 kBufferSizeSamples - written_samples, | 265 kBufferSizeSamples - written_samples, |
266 &audio[written_samples])); | 266 &audio[written_samples])); |
267 written_samples += 480 * channels; | 267 written_samples += 480 * channels; |
268 | 268 |
269 // Sometimes we need to loop over the audio vector to produce the right | 269 // Sometimes we need to loop over the audio vector to produce the right |
270 // number of packets. | 270 // number of packets. |
271 int loop_encode = (written_samples - read_samples) / | 271 size_t loop_encode = (written_samples - read_samples) / |
272 (channels * frame_length); | 272 (channels * frame_length); |
273 | 273 |
274 if (loop_encode > 0) { | 274 if (loop_encode > 0) { |
275 const int kMaxBytes = 1000; // Maximum number of bytes for one packet. | 275 const size_t kMaxBytes = 1000; // Maximum number of bytes for one packet. |
276 size_t bitstream_len_byte; | 276 size_t bitstream_len_byte; |
277 uint8_t bitstream[kMaxBytes]; | 277 uint8_t bitstream[kMaxBytes]; |
278 for (int i = 0; i < loop_encode; i++) { | 278 for (size_t i = 0; i < loop_encode; i++) { |
279 int bitstream_len_byte_int = WebRtcOpus_Encode( | 279 int bitstream_len_byte_int = WebRtcOpus_Encode( |
280 (channels == 1) ? opus_mono_encoder_ : opus_stereo_encoder_, | 280 (channels == 1) ? opus_mono_encoder_ : opus_stereo_encoder_, |
281 &audio[read_samples], frame_length, kMaxBytes, bitstream); | 281 &audio[read_samples], frame_length, kMaxBytes, bitstream); |
282 ASSERT_GE(bitstream_len_byte_int, 0); | 282 ASSERT_GE(bitstream_len_byte_int, 0); |
283 bitstream_len_byte = static_cast<size_t>(bitstream_len_byte_int); | 283 bitstream_len_byte = static_cast<size_t>(bitstream_len_byte_int); |
284 | 284 |
285 // Simulate packet loss by setting |packet_loss_| to "true" in | 285 // Simulate packet loss by setting |packet_loss_| to "true" in |
286 // |percent_loss| percent of the loops. | 286 // |percent_loss| percent of the loops. |
287 // TODO(tlegrand): Move handling of loss simulation to TestPackStereo. | 287 // TODO(tlegrand): Move handling of loss simulation to TestPackStereo. |
288 if (percent_loss > 0) { | 288 if (percent_loss > 0) { |
(...skipping 30 matching lines...) Expand all Loading... |
319 } | 319 } |
320 } | 320 } |
321 | 321 |
322 // Send data to the channel. "channel" will handle the loss simulation. | 322 // Send data to the channel. "channel" will handle the loss simulation. |
323 channel->SendData(kAudioFrameSpeech, payload_type_, rtp_timestamp_, | 323 channel->SendData(kAudioFrameSpeech, payload_type_, rtp_timestamp_, |
324 bitstream, bitstream_len_byte, NULL); | 324 bitstream, bitstream_len_byte, NULL); |
325 if (first_packet) { | 325 if (first_packet) { |
326 first_packet = false; | 326 first_packet = false; |
327 start_time_stamp = rtp_timestamp_; | 327 start_time_stamp = rtp_timestamp_; |
328 } | 328 } |
329 rtp_timestamp_ += frame_length; | 329 rtp_timestamp_ += static_cast<uint32_t>(frame_length); |
330 read_samples += frame_length * channels; | 330 read_samples += frame_length * channels; |
331 } | 331 } |
332 if (read_samples == written_samples) { | 332 if (read_samples == written_samples) { |
333 read_samples = 0; | 333 read_samples = 0; |
334 written_samples = 0; | 334 written_samples = 0; |
335 } | 335 } |
336 } | 336 } |
337 | 337 |
338 // Run received side of ACM. | 338 // Run received side of ACM. |
339 ASSERT_EQ(0, acm_receiver_->PlayoutData10Ms(out_freq_hz_b, &audio_frame)); | 339 ASSERT_EQ(0, acm_receiver_->PlayoutData10Ms(out_freq_hz_b, &audio_frame)); |
340 | 340 |
341 // Write output speech to file. | 341 // Write output speech to file. |
342 out_file_.Write10MsData( | 342 out_file_.Write10MsData( |
343 audio_frame.data_, | 343 audio_frame.data_, |
344 audio_frame.samples_per_channel_ * audio_frame.num_channels_); | 344 audio_frame.samples_per_channel_ * audio_frame.num_channels_); |
345 | 345 |
346 // Write stand-alone speech to file. | 346 // Write stand-alone speech to file. |
347 out_file_standalone_.Write10MsData( | 347 out_file_standalone_.Write10MsData(out_audio, decoded_samples * channels); |
348 out_audio, static_cast<size_t>(decoded_samples) * channels); | |
349 | 348 |
350 if (audio_frame.timestamp_ > start_time_stamp) { | 349 if (audio_frame.timestamp_ > start_time_stamp) { |
351 // Number of channels should be the same for both stand-alone and | 350 // Number of channels should be the same for both stand-alone and |
352 // ACM-decoding. | 351 // ACM-decoding. |
353 EXPECT_EQ(audio_frame.num_channels_, channels); | 352 EXPECT_EQ(audio_frame.num_channels_, channels); |
354 } | 353 } |
355 | 354 |
356 decoded_samples = 0; | 355 decoded_samples = 0; |
357 } | 356 } |
358 | 357 |
(...skipping 16 matching lines...) Expand all Loading... |
375 out_file_.Open(file_name, 48000, "wb"); | 374 out_file_.Open(file_name, 48000, "wb"); |
376 file_stream.str(""); | 375 file_stream.str(""); |
377 file_name = file_stream.str(); | 376 file_name = file_stream.str(); |
378 file_stream << webrtc::test::OutputPath() << "opusstandalone_out_" | 377 file_stream << webrtc::test::OutputPath() << "opusstandalone_out_" |
379 << test_number << ".pcm"; | 378 << test_number << ".pcm"; |
380 file_name = file_stream.str(); | 379 file_name = file_stream.str(); |
381 out_file_standalone_.Open(file_name, 48000, "wb"); | 380 out_file_standalone_.Open(file_name, 48000, "wb"); |
382 } | 381 } |
383 | 382 |
384 } // namespace webrtc | 383 } // namespace webrtc |
OLD | NEW |