| 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 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 msg->set_instant(output.instant); | 225 msg->set_instant(output.instant); |
| 226 msg->set_average(output.average); | 226 msg->set_average(output.average); |
| 227 msg->set_maximum(output.maximum); | 227 msg->set_maximum(output.maximum); |
| 228 msg->set_minimum(output.minimum); | 228 msg->set_minimum(output.minimum); |
| 229 } | 229 } |
| 230 #endif | 230 #endif |
| 231 | 231 |
| 232 void OpenFileAndWriteMessage(const std::string filename, | 232 void OpenFileAndWriteMessage(const std::string filename, |
| 233 const ::google::protobuf::MessageLite& msg) { | 233 const ::google::protobuf::MessageLite& msg) { |
| 234 FILE* file = fopen(filename.c_str(), "wb"); | 234 FILE* file = fopen(filename.c_str(), "wb"); |
| 235 ASSERT_TRUE(file != NULL); | 235 ASSERT_TRUE(file != nullptr); |
| 236 | 236 |
| 237 int32_t size = msg.ByteSize(); | 237 int32_t size = msg.ByteSize(); |
| 238 ASSERT_GT(size, 0); | 238 ASSERT_GT(size, 0); |
| 239 std::unique_ptr<uint8_t[]> array(new uint8_t[size]); | 239 std::unique_ptr<uint8_t[]> array(new uint8_t[size]); |
| 240 ASSERT_TRUE(msg.SerializeToArray(array.get(), size)); | 240 ASSERT_TRUE(msg.SerializeToArray(array.get(), size)); |
| 241 | 241 |
| 242 ASSERT_EQ(1u, fwrite(&size, sizeof(size), 1, file)); | 242 ASSERT_EQ(1u, fwrite(&size, sizeof(size), 1, file)); |
| 243 ASSERT_EQ(static_cast<size_t>(size), | 243 ASSERT_EQ(static_cast<size_t>(size), |
| 244 fwrite(array.get(), sizeof(array[0]), size, file)); | 244 fwrite(array.get(), sizeof(array[0]), size, file)); |
| 245 fclose(file); | 245 fclose(file); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 } | 295 } |
| 296 | 296 |
| 297 void ClearTempFiles() { | 297 void ClearTempFiles() { |
| 298 for (auto& kv : temp_filenames) | 298 for (auto& kv : temp_filenames) |
| 299 remove(kv.second.c_str()); | 299 remove(kv.second.c_str()); |
| 300 } | 300 } |
| 301 | 301 |
| 302 void OpenFileAndReadMessage(std::string filename, | 302 void OpenFileAndReadMessage(std::string filename, |
| 303 ::google::protobuf::MessageLite* msg) { | 303 ::google::protobuf::MessageLite* msg) { |
| 304 FILE* file = fopen(filename.c_str(), "rb"); | 304 FILE* file = fopen(filename.c_str(), "rb"); |
| 305 ASSERT_TRUE(file != NULL); | 305 ASSERT_TRUE(file != nullptr); |
| 306 ReadMessageFromFile(file, msg); | 306 ReadMessageFromFile(file, msg); |
| 307 fclose(file); | 307 fclose(file); |
| 308 } | 308 } |
| 309 | 309 |
| 310 // Reads a 10 ms chunk of int16 interleaved audio from the given (assumed | 310 // Reads a 10 ms chunk of int16 interleaved audio from the given (assumed |
| 311 // stereo) file, converts to deinterleaved float (optionally downmixing) and | 311 // stereo) file, converts to deinterleaved float (optionally downmixing) and |
| 312 // returns the result in |cb|. Returns false if the file ended (or on error) and | 312 // returns the result in |cb|. Returns false if the file ended (or on error) and |
| 313 // true otherwise. | 313 // true otherwise. |
| 314 // | 314 // |
| 315 // |int_data| and |float_data| are just temporary space that must be | 315 // |int_data| and |float_data| are just temporary space that must be |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 int output_sample_rate_hz_; | 403 int output_sample_rate_hz_; |
| 404 size_t num_output_channels_; | 404 size_t num_output_channels_; |
| 405 FILE* far_file_; | 405 FILE* far_file_; |
| 406 FILE* near_file_; | 406 FILE* near_file_; |
| 407 FILE* out_file_; | 407 FILE* out_file_; |
| 408 }; | 408 }; |
| 409 | 409 |
| 410 ApmTest::ApmTest() | 410 ApmTest::ApmTest() |
| 411 : output_path_(test::OutputPath()), | 411 : output_path_(test::OutputPath()), |
| 412 #if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE) | 412 #if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE) |
| 413 ref_filename_(test::ResourcePath("audio_processing/output_data_fixed", | 413 ref_filename_( |
| 414 "pb")), | 414 test::ResourcePath("audio_processing/output_data_fixed", "pb")), |
| 415 #elif defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE) | 415 #elif defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE) |
| 416 #if defined(WEBRTC_MAC) | 416 #if defined(WEBRTC_MAC) |
| 417 // A different file for Mac is needed because on this platform the AEC | 417 // A different file for Mac is needed because on this platform the AEC |
| 418 // constant |kFixedDelayMs| value is 20 and not 50 as it is on the rest. | 418 // constant |kFixedDelayMs| value is 20 and not 50 as it is on the rest. |
| 419 ref_filename_(test::ResourcePath("audio_processing/output_data_mac", | 419 ref_filename_( |
| 420 "pb")), | 420 test::ResourcePath("audio_processing/output_data_mac", "pb")), |
| 421 #else | 421 #else |
| 422 ref_filename_(test::ResourcePath("audio_processing/output_data_float", | 422 ref_filename_( |
| 423 "pb")), | 423 test::ResourcePath("audio_processing/output_data_float", "pb")), |
| 424 #endif | 424 #endif |
| 425 #endif | 425 #endif |
| 426 frame_(NULL), | 426 frame_(nullptr), |
| 427 revframe_(NULL), | 427 revframe_(nullptr), |
| 428 output_sample_rate_hz_(0), | 428 output_sample_rate_hz_(0), |
| 429 num_output_channels_(0), | 429 num_output_channels_(0), |
| 430 far_file_(NULL), | 430 far_file_(nullptr), |
| 431 near_file_(NULL), | 431 near_file_(nullptr), |
| 432 out_file_(NULL) { | 432 out_file_(nullptr) { |
| 433 Config config; | 433 Config config; |
| 434 config.Set<ExperimentalAgc>(new ExperimentalAgc(false)); | 434 config.Set<ExperimentalAgc>(new ExperimentalAgc(false)); |
| 435 apm_.reset(AudioProcessing::Create(config)); | 435 apm_.reset(AudioProcessing::Create(config)); |
| 436 } | 436 } |
| 437 | 437 |
| 438 void ApmTest::SetUp() { | 438 void ApmTest::SetUp() { |
| 439 ASSERT_TRUE(apm_.get() != NULL); | 439 ASSERT_TRUE(apm_.get() != nullptr); |
| 440 | 440 |
| 441 frame_ = new AudioFrame(); | 441 frame_ = new AudioFrame(); |
| 442 revframe_ = new AudioFrame(); | 442 revframe_ = new AudioFrame(); |
| 443 | 443 |
| 444 Init(32000, 32000, 32000, 2, 2, 2, false); | 444 Init(32000, 32000, 32000, 2, 2, 2, false); |
| 445 } | 445 } |
| 446 | 446 |
| 447 void ApmTest::TearDown() { | 447 void ApmTest::TearDown() { |
| 448 if (frame_) { | 448 if (frame_) { |
| 449 delete frame_; | 449 delete frame_; |
| 450 } | 450 } |
| 451 frame_ = NULL; | 451 frame_ = nullptr; |
| 452 | 452 |
| 453 if (revframe_) { | 453 if (revframe_) { |
| 454 delete revframe_; | 454 delete revframe_; |
| 455 } | 455 } |
| 456 revframe_ = NULL; | 456 revframe_ = nullptr; |
| 457 | 457 |
| 458 if (far_file_) { | 458 if (far_file_) { |
| 459 ASSERT_EQ(0, fclose(far_file_)); | 459 ASSERT_EQ(0, fclose(far_file_)); |
| 460 } | 460 } |
| 461 far_file_ = NULL; | 461 far_file_ = nullptr; |
| 462 | 462 |
| 463 if (near_file_) { | 463 if (near_file_) { |
| 464 ASSERT_EQ(0, fclose(near_file_)); | 464 ASSERT_EQ(0, fclose(near_file_)); |
| 465 } | 465 } |
| 466 near_file_ = NULL; | 466 near_file_ = nullptr; |
| 467 | 467 |
| 468 if (out_file_) { | 468 if (out_file_) { |
| 469 ASSERT_EQ(0, fclose(out_file_)); | 469 ASSERT_EQ(0, fclose(out_file_)); |
| 470 } | 470 } |
| 471 out_file_ = NULL; | 471 out_file_ = nullptr; |
| 472 } | 472 } |
| 473 | 473 |
| 474 void ApmTest::Init(AudioProcessing* ap) { | 474 void ApmTest::Init(AudioProcessing* ap) { |
| 475 ASSERT_EQ(kNoErr, | 475 ASSERT_EQ(kNoErr, |
| 476 ap->Initialize( | 476 ap->Initialize( |
| 477 {{{frame_->sample_rate_hz_, frame_->num_channels_}, | 477 {{{frame_->sample_rate_hz_, frame_->num_channels_}, |
| 478 {output_sample_rate_hz_, num_output_channels_}, | 478 {output_sample_rate_hz_, num_output_channels_}, |
| 479 {revframe_->sample_rate_hz_, revframe_->num_channels_}, | 479 {revframe_->sample_rate_hz_, revframe_->num_channels_}, |
| 480 {revframe_->sample_rate_hz_, revframe_->num_channels_}}})); | 480 {revframe_->sample_rate_hz_, revframe_->num_channels_}}})); |
| 481 } | 481 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 493 | 493 |
| 494 SetContainerFormat(reverse_sample_rate_hz, num_reverse_channels, revframe_, | 494 SetContainerFormat(reverse_sample_rate_hz, num_reverse_channels, revframe_, |
| 495 &revfloat_cb_); | 495 &revfloat_cb_); |
| 496 Init(apm_.get()); | 496 Init(apm_.get()); |
| 497 | 497 |
| 498 if (far_file_) { | 498 if (far_file_) { |
| 499 ASSERT_EQ(0, fclose(far_file_)); | 499 ASSERT_EQ(0, fclose(far_file_)); |
| 500 } | 500 } |
| 501 std::string filename = ResourceFilePath("far", sample_rate_hz); | 501 std::string filename = ResourceFilePath("far", sample_rate_hz); |
| 502 far_file_ = fopen(filename.c_str(), "rb"); | 502 far_file_ = fopen(filename.c_str(), "rb"); |
| 503 ASSERT_TRUE(far_file_ != NULL) << "Could not open file " << | 503 ASSERT_TRUE(far_file_ != nullptr) << "Could not open file " << filename |
| 504 filename << "\n"; | 504 << "\n"; |
| 505 | 505 |
| 506 if (near_file_) { | 506 if (near_file_) { |
| 507 ASSERT_EQ(0, fclose(near_file_)); | 507 ASSERT_EQ(0, fclose(near_file_)); |
| 508 } | 508 } |
| 509 filename = ResourceFilePath("near", sample_rate_hz); | 509 filename = ResourceFilePath("near", sample_rate_hz); |
| 510 near_file_ = fopen(filename.c_str(), "rb"); | 510 near_file_ = fopen(filename.c_str(), "rb"); |
| 511 ASSERT_TRUE(near_file_ != NULL) << "Could not open file " << | 511 ASSERT_TRUE(near_file_ != nullptr) << "Could not open file " << filename |
| 512 filename << "\n"; | 512 << "\n"; |
| 513 | 513 |
| 514 if (open_output_file) { | 514 if (open_output_file) { |
| 515 if (out_file_) { | 515 if (out_file_) { |
| 516 ASSERT_EQ(0, fclose(out_file_)); | 516 ASSERT_EQ(0, fclose(out_file_)); |
| 517 } | 517 } |
| 518 filename = OutputFilePath( | 518 filename = OutputFilePath( |
| 519 "out", sample_rate_hz, output_sample_rate_hz, reverse_sample_rate_hz, | 519 "out", sample_rate_hz, output_sample_rate_hz, reverse_sample_rate_hz, |
| 520 reverse_sample_rate_hz, num_input_channels, num_output_channels, | 520 reverse_sample_rate_hz, num_input_channels, num_output_channels, |
| 521 num_reverse_channels, num_reverse_channels, kForward); | 521 num_reverse_channels, num_reverse_channels, kForward); |
| 522 out_file_ = fopen(filename.c_str(), "wb"); | 522 out_file_ = fopen(filename.c_str(), "wb"); |
| 523 ASSERT_TRUE(out_file_ != NULL) << "Could not open file " << | 523 ASSERT_TRUE(out_file_ != nullptr) << "Could not open file " << filename |
| 524 filename << "\n"; | 524 << "\n"; |
| 525 } | 525 } |
| 526 } | 526 } |
| 527 | 527 |
| 528 void ApmTest::EnableAllComponents() { | 528 void ApmTest::EnableAllComponents() { |
| 529 EnableAllAPComponents(apm_.get()); | 529 EnableAllAPComponents(apm_.get()); |
| 530 } | 530 } |
| 531 | 531 |
| 532 bool ApmTest::ReadFrame(FILE* file, AudioFrame* frame, | 532 bool ApmTest::ReadFrame(FILE* file, AudioFrame* frame, |
| 533 ChannelBuffer<float>* cb) { | 533 ChannelBuffer<float>* cb) { |
| 534 // The files always contain stereo audio. | 534 // The files always contain stereo audio. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 548 frame->samples_per_channel_); | 548 frame->samples_per_channel_); |
| 549 } | 549 } |
| 550 | 550 |
| 551 if (cb) { | 551 if (cb) { |
| 552 ConvertToFloat(*frame, cb); | 552 ConvertToFloat(*frame, cb); |
| 553 } | 553 } |
| 554 return true; | 554 return true; |
| 555 } | 555 } |
| 556 | 556 |
| 557 bool ApmTest::ReadFrame(FILE* file, AudioFrame* frame) { | 557 bool ApmTest::ReadFrame(FILE* file, AudioFrame* frame) { |
| 558 return ReadFrame(file, frame, NULL); | 558 return ReadFrame(file, frame, nullptr); |
| 559 } | 559 } |
| 560 | 560 |
| 561 // If the end of the file has been reached, rewind it and attempt to read the | 561 // If the end of the file has been reached, rewind it and attempt to read the |
| 562 // frame again. | 562 // frame again. |
| 563 void ApmTest::ReadFrameWithRewind(FILE* file, AudioFrame* frame, | 563 void ApmTest::ReadFrameWithRewind(FILE* file, AudioFrame* frame, |
| 564 ChannelBuffer<float>* cb) { | 564 ChannelBuffer<float>* cb) { |
| 565 if (!ReadFrame(near_file_, frame_, cb)) { | 565 if (!ReadFrame(near_file_, frame_, cb)) { |
| 566 rewind(near_file_); | 566 rewind(near_file_); |
| 567 ASSERT_TRUE(ReadFrame(near_file_, frame_, cb)); | 567 ASSERT_TRUE(ReadFrame(near_file_, frame_, cb)); |
| 568 } | 568 } |
| 569 } | 569 } |
| 570 | 570 |
| 571 void ApmTest::ReadFrameWithRewind(FILE* file, AudioFrame* frame) { | 571 void ApmTest::ReadFrameWithRewind(FILE* file, AudioFrame* frame) { |
| 572 ReadFrameWithRewind(file, frame, NULL); | 572 ReadFrameWithRewind(file, frame, nullptr); |
| 573 } | 573 } |
| 574 | 574 |
| 575 void ApmTest::ProcessWithDefaultStreamParameters(AudioFrame* frame) { | 575 void ApmTest::ProcessWithDefaultStreamParameters(AudioFrame* frame) { |
| 576 EXPECT_EQ(apm_->kNoError, apm_->set_stream_delay_ms(0)); | 576 EXPECT_EQ(apm_->kNoError, apm_->set_stream_delay_ms(0)); |
| 577 apm_->echo_cancellation()->set_stream_drift_samples(0); | 577 apm_->echo_cancellation()->set_stream_drift_samples(0); |
| 578 EXPECT_EQ(apm_->kNoError, | 578 EXPECT_EQ(apm_->kNoError, |
| 579 apm_->gain_control()->set_stream_analog_level(127)); | 579 apm_->gain_control()->set_stream_analog_level(127)); |
| 580 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame)); | 580 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame)); |
| 581 } | 581 } |
| 582 | 582 |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 EXPECT_EQ(apm_->kNotEnabledError, apm_->echo_cancellation()->GetDelayMetrics( | 954 EXPECT_EQ(apm_->kNotEnabledError, apm_->echo_cancellation()->GetDelayMetrics( |
| 955 &median, &std, &poor_fraction)); | 955 &median, &std, &poor_fraction)); |
| 956 | 956 |
| 957 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(true)); | 957 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(true)); |
| 958 EXPECT_TRUE(apm_->echo_cancellation()->is_enabled()); | 958 EXPECT_TRUE(apm_->echo_cancellation()->is_enabled()); |
| 959 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(false)); | 959 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(false)); |
| 960 EXPECT_FALSE(apm_->echo_cancellation()->is_enabled()); | 960 EXPECT_FALSE(apm_->echo_cancellation()->is_enabled()); |
| 961 | 961 |
| 962 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(true)); | 962 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(true)); |
| 963 EXPECT_TRUE(apm_->echo_cancellation()->is_enabled()); | 963 EXPECT_TRUE(apm_->echo_cancellation()->is_enabled()); |
| 964 EXPECT_TRUE(apm_->echo_cancellation()->aec_core() != NULL); | 964 EXPECT_TRUE(apm_->echo_cancellation()->aec_core() != nullptr); |
| 965 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(false)); | 965 EXPECT_EQ(apm_->kNoError, apm_->echo_cancellation()->Enable(false)); |
| 966 EXPECT_FALSE(apm_->echo_cancellation()->is_enabled()); | 966 EXPECT_FALSE(apm_->echo_cancellation()->is_enabled()); |
| 967 EXPECT_FALSE(apm_->echo_cancellation()->aec_core() != NULL); | 967 EXPECT_FALSE(apm_->echo_cancellation()->aec_core() != nullptr); |
| 968 } | 968 } |
| 969 | 969 |
| 970 TEST_F(ApmTest, DISABLED_EchoCancellationReportsCorrectDelays) { | 970 TEST_F(ApmTest, DISABLED_EchoCancellationReportsCorrectDelays) { |
| 971 // TODO(bjornv): Fix this test to work with DA-AEC. | 971 // TODO(bjornv): Fix this test to work with DA-AEC. |
| 972 // Enable AEC only. | 972 // Enable AEC only. |
| 973 EXPECT_EQ(apm_->kNoError, | 973 EXPECT_EQ(apm_->kNoError, |
| 974 apm_->echo_cancellation()->enable_drift_compensation(false)); | 974 apm_->echo_cancellation()->enable_drift_compensation(false)); |
| 975 EXPECT_EQ(apm_->kNoError, | 975 EXPECT_EQ(apm_->kNoError, |
| 976 apm_->echo_cancellation()->enable_metrics(false)); | 976 apm_->echo_cancellation()->enable_metrics(false)); |
| 977 EXPECT_EQ(apm_->kNoError, | 977 EXPECT_EQ(apm_->kNoError, |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1071 EXPECT_FALSE(apm_->echo_control_mobile()->is_comfort_noise_enabled()); | 1071 EXPECT_FALSE(apm_->echo_control_mobile()->is_comfort_noise_enabled()); |
| 1072 EXPECT_EQ(apm_->kNoError, | 1072 EXPECT_EQ(apm_->kNoError, |
| 1073 apm_->echo_control_mobile()->enable_comfort_noise(true)); | 1073 apm_->echo_control_mobile()->enable_comfort_noise(true)); |
| 1074 EXPECT_TRUE(apm_->echo_control_mobile()->is_comfort_noise_enabled()); | 1074 EXPECT_TRUE(apm_->echo_control_mobile()->is_comfort_noise_enabled()); |
| 1075 // Set and get echo path | 1075 // Set and get echo path |
| 1076 const size_t echo_path_size = | 1076 const size_t echo_path_size = |
| 1077 apm_->echo_control_mobile()->echo_path_size_bytes(); | 1077 apm_->echo_control_mobile()->echo_path_size_bytes(); |
| 1078 std::unique_ptr<char[]> echo_path_in(new char[echo_path_size]); | 1078 std::unique_ptr<char[]> echo_path_in(new char[echo_path_size]); |
| 1079 std::unique_ptr<char[]> echo_path_out(new char[echo_path_size]); | 1079 std::unique_ptr<char[]> echo_path_out(new char[echo_path_size]); |
| 1080 EXPECT_EQ(apm_->kNullPointerError, | 1080 EXPECT_EQ(apm_->kNullPointerError, |
| 1081 apm_->echo_control_mobile()->SetEchoPath(NULL, echo_path_size)); | 1081 apm_->echo_control_mobile()->SetEchoPath(nullptr, echo_path_size)); |
| 1082 EXPECT_EQ(apm_->kNullPointerError, | 1082 EXPECT_EQ(apm_->kNullPointerError, |
| 1083 apm_->echo_control_mobile()->GetEchoPath(NULL, echo_path_size)); | 1083 apm_->echo_control_mobile()->GetEchoPath(nullptr, echo_path_size)); |
| 1084 EXPECT_EQ(apm_->kBadParameterError, | 1084 EXPECT_EQ(apm_->kBadParameterError, |
| 1085 apm_->echo_control_mobile()->GetEchoPath(echo_path_out.get(), 1)); | 1085 apm_->echo_control_mobile()->GetEchoPath(echo_path_out.get(), 1)); |
| 1086 EXPECT_EQ(apm_->kNoError, | 1086 EXPECT_EQ(apm_->kNoError, |
| 1087 apm_->echo_control_mobile()->GetEchoPath(echo_path_out.get(), | 1087 apm_->echo_control_mobile()->GetEchoPath(echo_path_out.get(), |
| 1088 echo_path_size)); | 1088 echo_path_size)); |
| 1089 for (size_t i = 0; i < echo_path_size; i++) { | 1089 for (size_t i = 0; i < echo_path_size; i++) { |
| 1090 echo_path_in[i] = echo_path_out[i] + 1; | 1090 echo_path_in[i] = echo_path_out[i] + 1; |
| 1091 } | 1091 } |
| 1092 EXPECT_EQ(apm_->kBadParameterError, | 1092 EXPECT_EQ(apm_->kBadParameterError, |
| 1093 apm_->echo_control_mobile()->SetEchoPath(echo_path_in.get(), 1)); | 1093 apm_->echo_control_mobile()->SetEchoPath(echo_path_in.get(), 1)); |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1305 AudioProcessing::Create(config, beamformer)); | 1305 AudioProcessing::Create(config, beamformer)); |
| 1306 EXPECT_EQ(kNoErr, apm->gain_control()->Enable(true)); | 1306 EXPECT_EQ(kNoErr, apm->gain_control()->Enable(true)); |
| 1307 ChannelBuffer<float> src_buf(kSamplesPerChannel, kNumInputChannels); | 1307 ChannelBuffer<float> src_buf(kSamplesPerChannel, kNumInputChannels); |
| 1308 ChannelBuffer<float> dest_buf(kSamplesPerChannel, kNumOutputChannels); | 1308 ChannelBuffer<float> dest_buf(kSamplesPerChannel, kNumOutputChannels); |
| 1309 const size_t max_length = kSamplesPerChannel * std::max(kNumInputChannels, | 1309 const size_t max_length = kSamplesPerChannel * std::max(kNumInputChannels, |
| 1310 kNumOutputChannels); | 1310 kNumOutputChannels); |
| 1311 std::unique_ptr<int16_t[]> int_data(new int16_t[max_length]); | 1311 std::unique_ptr<int16_t[]> int_data(new int16_t[max_length]); |
| 1312 std::unique_ptr<float[]> float_data(new float[max_length]); | 1312 std::unique_ptr<float[]> float_data(new float[max_length]); |
| 1313 std::string filename = ResourceFilePath("far", kSampleRateHz); | 1313 std::string filename = ResourceFilePath("far", kSampleRateHz); |
| 1314 FILE* far_file = fopen(filename.c_str(), "rb"); | 1314 FILE* far_file = fopen(filename.c_str(), "rb"); |
| 1315 ASSERT_TRUE(far_file != NULL) << "Could not open file " << filename << "\n"; | 1315 ASSERT_TRUE(far_file != nullptr) << "Could not open file " << filename |
| 1316 << "\n"; |
| 1316 const int kDefaultVolume = apm->gain_control()->stream_analog_level(); | 1317 const int kDefaultVolume = apm->gain_control()->stream_analog_level(); |
| 1317 const int kDefaultCompressionGain = | 1318 const int kDefaultCompressionGain = |
| 1318 apm->gain_control()->compression_gain_db(); | 1319 apm->gain_control()->compression_gain_db(); |
| 1319 bool is_target = false; | 1320 bool is_target = false; |
| 1320 EXPECT_CALL(*beamformer, is_target_present()) | 1321 EXPECT_CALL(*beamformer, is_target_present()) |
| 1321 .WillRepeatedly(testing::ReturnPointee(&is_target)); | 1322 .WillRepeatedly(testing::ReturnPointee(&is_target)); |
| 1322 for (size_t i = 0; i < kNumChunks; ++i) { | 1323 for (size_t i = 0; i < kNumChunks; ++i) { |
| 1323 ASSERT_TRUE(ReadChunk(far_file, | 1324 ASSERT_TRUE(ReadChunk(far_file, |
| 1324 int_data.get(), | 1325 int_data.get(), |
| 1325 float_data.get(), | 1326 float_data.get(), |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1700 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_)); | 1701 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_)); |
| 1701 EXPECT_FALSE(FrameDataAreEqual(*frame_, frame_copy)); | 1702 EXPECT_FALSE(FrameDataAreEqual(*frame_, frame_copy)); |
| 1702 } | 1703 } |
| 1703 | 1704 |
| 1704 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 1705 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
| 1705 void ApmTest::ProcessDebugDump(const std::string& in_filename, | 1706 void ApmTest::ProcessDebugDump(const std::string& in_filename, |
| 1706 const std::string& out_filename, | 1707 const std::string& out_filename, |
| 1707 Format format, | 1708 Format format, |
| 1708 int max_size_bytes) { | 1709 int max_size_bytes) { |
| 1709 FILE* in_file = fopen(in_filename.c_str(), "rb"); | 1710 FILE* in_file = fopen(in_filename.c_str(), "rb"); |
| 1710 ASSERT_TRUE(in_file != NULL); | 1711 ASSERT_TRUE(in_file != nullptr); |
| 1711 audioproc::Event event_msg; | 1712 audioproc::Event event_msg; |
| 1712 bool first_init = true; | 1713 bool first_init = true; |
| 1713 | 1714 |
| 1714 while (ReadMessageFromFile(in_file, &event_msg)) { | 1715 while (ReadMessageFromFile(in_file, &event_msg)) { |
| 1715 if (event_msg.type() == audioproc::Event::INIT) { | 1716 if (event_msg.type() == audioproc::Event::INIT) { |
| 1716 const audioproc::Init msg = event_msg.init(); | 1717 const audioproc::Init msg = event_msg.init(); |
| 1717 int reverse_sample_rate = msg.sample_rate(); | 1718 int reverse_sample_rate = msg.sample_rate(); |
| 1718 if (msg.has_reverse_sample_rate()) { | 1719 if (msg.has_reverse_sample_rate()) { |
| 1719 reverse_sample_rate = msg.reverse_sample_rate(); | 1720 reverse_sample_rate = msg.reverse_sample_rate(); |
| 1720 } | 1721 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1815 // We expect at least this many bytes in the created logfile. | 1816 // We expect at least this many bytes in the created logfile. |
| 1816 const size_t logging_expected_bytes = 95000; | 1817 const size_t logging_expected_bytes = 95000; |
| 1817 EnableAllComponents(); | 1818 EnableAllComponents(); |
| 1818 ProcessDebugDump(in_filename, ref_filename, format, -1); | 1819 ProcessDebugDump(in_filename, ref_filename, format, -1); |
| 1819 ProcessDebugDump(ref_filename, out_filename, format, -1); | 1820 ProcessDebugDump(ref_filename, out_filename, format, -1); |
| 1820 ProcessDebugDump(ref_filename, limited_filename, format, logging_limit_bytes); | 1821 ProcessDebugDump(ref_filename, limited_filename, format, logging_limit_bytes); |
| 1821 | 1822 |
| 1822 FILE* ref_file = fopen(ref_filename.c_str(), "rb"); | 1823 FILE* ref_file = fopen(ref_filename.c_str(), "rb"); |
| 1823 FILE* out_file = fopen(out_filename.c_str(), "rb"); | 1824 FILE* out_file = fopen(out_filename.c_str(), "rb"); |
| 1824 FILE* limited_file = fopen(limited_filename.c_str(), "rb"); | 1825 FILE* limited_file = fopen(limited_filename.c_str(), "rb"); |
| 1825 ASSERT_TRUE(ref_file != NULL); | 1826 ASSERT_TRUE(ref_file != nullptr); |
| 1826 ASSERT_TRUE(out_file != NULL); | 1827 ASSERT_TRUE(out_file != nullptr); |
| 1827 ASSERT_TRUE(limited_file != NULL); | 1828 ASSERT_TRUE(limited_file != nullptr); |
| 1828 std::unique_ptr<uint8_t[]> ref_bytes; | 1829 std::unique_ptr<uint8_t[]> ref_bytes; |
| 1829 std::unique_ptr<uint8_t[]> out_bytes; | 1830 std::unique_ptr<uint8_t[]> out_bytes; |
| 1830 std::unique_ptr<uint8_t[]> limited_bytes; | 1831 std::unique_ptr<uint8_t[]> limited_bytes; |
| 1831 | 1832 |
| 1832 size_t ref_size = ReadMessageBytesFromFile(ref_file, &ref_bytes); | 1833 size_t ref_size = ReadMessageBytesFromFile(ref_file, &ref_bytes); |
| 1833 size_t out_size = ReadMessageBytesFromFile(out_file, &out_bytes); | 1834 size_t out_size = ReadMessageBytesFromFile(out_file, &out_bytes); |
| 1834 size_t limited_size = ReadMessageBytesFromFile(limited_file, &limited_bytes); | 1835 size_t limited_size = ReadMessageBytesFromFile(limited_file, &limited_bytes); |
| 1835 size_t bytes_read = 0; | 1836 size_t bytes_read = 0; |
| 1836 size_t bytes_read_limited = 0; | 1837 size_t bytes_read_limited = 0; |
| 1837 while (ref_size > 0 && out_size > 0) { | 1838 while (ref_size > 0 && out_size > 0) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1866 TEST_F(ApmTest, VerifyDebugDumpFloat) { | 1867 TEST_F(ApmTest, VerifyDebugDumpFloat) { |
| 1867 VerifyDebugDumpTest(kFloatFormat); | 1868 VerifyDebugDumpTest(kFloatFormat); |
| 1868 } | 1869 } |
| 1869 #endif | 1870 #endif |
| 1870 | 1871 |
| 1871 // TODO(andrew): expand test to verify output. | 1872 // TODO(andrew): expand test to verify output. |
| 1872 TEST_F(ApmTest, DebugDump) { | 1873 TEST_F(ApmTest, DebugDump) { |
| 1873 const std::string filename = | 1874 const std::string filename = |
| 1874 test::TempFilename(test::OutputPath(), "debug_aec"); | 1875 test::TempFilename(test::OutputPath(), "debug_aec"); |
| 1875 EXPECT_EQ(apm_->kNullPointerError, | 1876 EXPECT_EQ(apm_->kNullPointerError, |
| 1876 apm_->StartDebugRecording(static_cast<const char*>(NULL), -1)); | 1877 apm_->StartDebugRecording(static_cast<const char*>(nullptr), -1)); |
| 1877 | 1878 |
| 1878 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 1879 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
| 1879 // Stopping without having started should be OK. | 1880 // Stopping without having started should be OK. |
| 1880 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); | 1881 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); |
| 1881 | 1882 |
| 1882 EXPECT_EQ(apm_->kNoError, apm_->StartDebugRecording(filename.c_str(), -1)); | 1883 EXPECT_EQ(apm_->kNoError, apm_->StartDebugRecording(filename.c_str(), -1)); |
| 1883 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_)); | 1884 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_)); |
| 1884 EXPECT_EQ(apm_->kNoError, apm_->ProcessReverseStream(revframe_)); | 1885 EXPECT_EQ(apm_->kNoError, apm_->ProcessReverseStream(revframe_)); |
| 1885 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); | 1886 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); |
| 1886 | 1887 |
| 1887 // Verify the file has been written. | 1888 // Verify the file has been written. |
| 1888 FILE* fid = fopen(filename.c_str(), "r"); | 1889 FILE* fid = fopen(filename.c_str(), "r"); |
| 1889 ASSERT_TRUE(fid != NULL); | 1890 ASSERT_TRUE(fid != nullptr); |
| 1890 | 1891 |
| 1891 // Clean it up. | 1892 // Clean it up. |
| 1892 ASSERT_EQ(0, fclose(fid)); | 1893 ASSERT_EQ(0, fclose(fid)); |
| 1893 ASSERT_EQ(0, remove(filename.c_str())); | 1894 ASSERT_EQ(0, remove(filename.c_str())); |
| 1894 #else | 1895 #else |
| 1895 EXPECT_EQ(apm_->kUnsupportedFunctionError, | 1896 EXPECT_EQ(apm_->kUnsupportedFunctionError, |
| 1896 apm_->StartDebugRecording(filename.c_str(), -1)); | 1897 apm_->StartDebugRecording(filename.c_str(), -1)); |
| 1897 EXPECT_EQ(apm_->kUnsupportedFunctionError, apm_->StopDebugRecording()); | 1898 EXPECT_EQ(apm_->kUnsupportedFunctionError, apm_->StopDebugRecording()); |
| 1898 | 1899 |
| 1899 // Verify the file has NOT been written. | 1900 // Verify the file has NOT been written. |
| 1900 ASSERT_TRUE(fopen(filename.c_str(), "r") == NULL); | 1901 ASSERT_TRUE(fopen(filename.c_str(), "r") == nullptr); |
| 1901 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP | 1902 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
| 1902 } | 1903 } |
| 1903 | 1904 |
| 1904 // TODO(andrew): expand test to verify output. | 1905 // TODO(andrew): expand test to verify output. |
| 1905 TEST_F(ApmTest, DebugDumpFromFileHandle) { | 1906 TEST_F(ApmTest, DebugDumpFromFileHandle) { |
| 1906 FILE* fid = NULL; | 1907 FILE* fid = nullptr; |
| 1907 EXPECT_EQ(apm_->kNullPointerError, apm_->StartDebugRecording(fid, -1)); | 1908 EXPECT_EQ(apm_->kNullPointerError, apm_->StartDebugRecording(fid, -1)); |
| 1908 const std::string filename = | 1909 const std::string filename = |
| 1909 test::TempFilename(test::OutputPath(), "debug_aec"); | 1910 test::TempFilename(test::OutputPath(), "debug_aec"); |
| 1910 fid = fopen(filename.c_str(), "w"); | 1911 fid = fopen(filename.c_str(), "w"); |
| 1911 ASSERT_TRUE(fid); | 1912 ASSERT_TRUE(fid); |
| 1912 | 1913 |
| 1913 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 1914 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
| 1914 // Stopping without having started should be OK. | 1915 // Stopping without having started should be OK. |
| 1915 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); | 1916 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); |
| 1916 | 1917 |
| 1917 EXPECT_EQ(apm_->kNoError, apm_->StartDebugRecording(fid, -1)); | 1918 EXPECT_EQ(apm_->kNoError, apm_->StartDebugRecording(fid, -1)); |
| 1918 EXPECT_EQ(apm_->kNoError, apm_->ProcessReverseStream(revframe_)); | 1919 EXPECT_EQ(apm_->kNoError, apm_->ProcessReverseStream(revframe_)); |
| 1919 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_)); | 1920 EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_)); |
| 1920 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); | 1921 EXPECT_EQ(apm_->kNoError, apm_->StopDebugRecording()); |
| 1921 | 1922 |
| 1922 // Verify the file has been written. | 1923 // Verify the file has been written. |
| 1923 fid = fopen(filename.c_str(), "r"); | 1924 fid = fopen(filename.c_str(), "r"); |
| 1924 ASSERT_TRUE(fid != NULL); | 1925 ASSERT_TRUE(fid != nullptr); |
| 1925 | 1926 |
| 1926 // Clean it up. | 1927 // Clean it up. |
| 1927 ASSERT_EQ(0, fclose(fid)); | 1928 ASSERT_EQ(0, fclose(fid)); |
| 1928 ASSERT_EQ(0, remove(filename.c_str())); | 1929 ASSERT_EQ(0, remove(filename.c_str())); |
| 1929 #else | 1930 #else |
| 1930 EXPECT_EQ(apm_->kUnsupportedFunctionError, | 1931 EXPECT_EQ(apm_->kUnsupportedFunctionError, |
| 1931 apm_->StartDebugRecording(fid, -1)); | 1932 apm_->StartDebugRecording(fid, -1)); |
| 1932 EXPECT_EQ(apm_->kUnsupportedFunctionError, apm_->StopDebugRecording()); | 1933 EXPECT_EQ(apm_->kUnsupportedFunctionError, apm_->StopDebugRecording()); |
| 1933 | 1934 |
| 1934 ASSERT_EQ(0, fclose(fid)); | 1935 ASSERT_EQ(0, fclose(fid)); |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2453 num_reverse_input_channels, | 2454 num_reverse_input_channels, |
| 2454 num_reverse_output_channels, kForward).c_str(), | 2455 num_reverse_output_channels, kForward).c_str(), |
| 2455 "wb"); | 2456 "wb"); |
| 2456 FILE* rev_out_file = | 2457 FILE* rev_out_file = |
| 2457 fopen(OutputFilePath(output_file_prefix, input_rate, output_rate, | 2458 fopen(OutputFilePath(output_file_prefix, input_rate, output_rate, |
| 2458 reverse_input_rate, reverse_output_rate, | 2459 reverse_input_rate, reverse_output_rate, |
| 2459 num_input_channels, num_output_channels, | 2460 num_input_channels, num_output_channels, |
| 2460 num_reverse_input_channels, | 2461 num_reverse_input_channels, |
| 2461 num_reverse_output_channels, kReverse).c_str(), | 2462 num_reverse_output_channels, kReverse).c_str(), |
| 2462 "wb"); | 2463 "wb"); |
| 2463 ASSERT_TRUE(far_file != NULL); | 2464 ASSERT_TRUE(far_file != nullptr); |
| 2464 ASSERT_TRUE(near_file != NULL); | 2465 ASSERT_TRUE(near_file != nullptr); |
| 2465 ASSERT_TRUE(out_file != NULL); | 2466 ASSERT_TRUE(out_file != nullptr); |
| 2466 ASSERT_TRUE(rev_out_file != NULL); | 2467 ASSERT_TRUE(rev_out_file != nullptr); |
| 2467 | 2468 |
| 2468 ChannelBuffer<float> fwd_cb(SamplesFromRate(input_rate), | 2469 ChannelBuffer<float> fwd_cb(SamplesFromRate(input_rate), |
| 2469 num_input_channels); | 2470 num_input_channels); |
| 2470 ChannelBuffer<float> rev_cb(SamplesFromRate(reverse_input_rate), | 2471 ChannelBuffer<float> rev_cb(SamplesFromRate(reverse_input_rate), |
| 2471 num_reverse_input_channels); | 2472 num_reverse_input_channels); |
| 2472 ChannelBuffer<float> out_cb(SamplesFromRate(output_rate), | 2473 ChannelBuffer<float> out_cb(SamplesFromRate(output_rate), |
| 2473 num_output_channels); | 2474 num_output_channels); |
| 2474 ChannelBuffer<float> rev_out_cb(SamplesFromRate(reverse_output_rate), | 2475 ChannelBuffer<float> rev_out_cb(SamplesFromRate(reverse_output_rate), |
| 2475 num_reverse_output_channels); | 2476 num_reverse_output_channels); |
| 2476 | 2477 |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2593 cf[i].num_output, cf[i].num_reverse_input, | 2594 cf[i].num_output, cf[i].num_reverse_input, |
| 2594 cf[i].num_reverse_output, file_direction).c_str(), | 2595 cf[i].num_reverse_output, file_direction).c_str(), |
| 2595 "rb"); | 2596 "rb"); |
| 2596 // The reference files always have matching input and output channels. | 2597 // The reference files always have matching input and output channels. |
| 2597 FILE* ref_file = fopen( | 2598 FILE* ref_file = fopen( |
| 2598 OutputFilePath("ref", ref_rate, ref_rate, ref_rate, ref_rate, | 2599 OutputFilePath("ref", ref_rate, ref_rate, ref_rate, ref_rate, |
| 2599 cf[i].num_output, cf[i].num_output, | 2600 cf[i].num_output, cf[i].num_output, |
| 2600 cf[i].num_reverse_output, cf[i].num_reverse_output, | 2601 cf[i].num_reverse_output, cf[i].num_reverse_output, |
| 2601 file_direction).c_str(), | 2602 file_direction).c_str(), |
| 2602 "rb"); | 2603 "rb"); |
| 2603 ASSERT_TRUE(out_file != NULL); | 2604 ASSERT_TRUE(out_file != nullptr); |
| 2604 ASSERT_TRUE(ref_file != NULL); | 2605 ASSERT_TRUE(ref_file != nullptr); |
| 2605 | 2606 |
| 2606 const size_t ref_length = SamplesFromRate(ref_rate) * out_num; | 2607 const size_t ref_length = SamplesFromRate(ref_rate) * out_num; |
| 2607 const size_t out_length = SamplesFromRate(out_rate) * out_num; | 2608 const size_t out_length = SamplesFromRate(out_rate) * out_num; |
| 2608 // Data from the reference file. | 2609 // Data from the reference file. |
| 2609 std::unique_ptr<float[]> ref_data(new float[ref_length]); | 2610 std::unique_ptr<float[]> ref_data(new float[ref_length]); |
| 2610 // Data from the output file. | 2611 // Data from the output file. |
| 2611 std::unique_ptr<float[]> out_data(new float[out_length]); | 2612 std::unique_ptr<float[]> out_data(new float[out_length]); |
| 2612 // Data from the resampled output, in case the reference and output rates | 2613 // Data from the resampled output, in case the reference and output rates |
| 2613 // don't match. | 2614 // don't match. |
| 2614 std::unique_ptr<float[]> cmp_data(new float[ref_length]); | 2615 std::unique_ptr<float[]> cmp_data(new float[ref_length]); |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2877 // TODO(peah): Remove the testing for | 2878 // TODO(peah): Remove the testing for |
| 2878 // apm->capture_nonlocked_.level_controller_enabled once the value in config_ | 2879 // apm->capture_nonlocked_.level_controller_enabled once the value in config_ |
| 2879 // is instead used to activate the level controller. | 2880 // is instead used to activate the level controller. |
| 2880 EXPECT_FALSE(apm->capture_nonlocked_.level_controller_enabled); | 2881 EXPECT_FALSE(apm->capture_nonlocked_.level_controller_enabled); |
| 2881 EXPECT_NEAR(kTargetLcPeakLeveldBFS, | 2882 EXPECT_NEAR(kTargetLcPeakLeveldBFS, |
| 2882 apm->config_.level_controller.initial_peak_level_dbfs, | 2883 apm->config_.level_controller.initial_peak_level_dbfs, |
| 2883 std::numeric_limits<float>::epsilon()); | 2884 std::numeric_limits<float>::epsilon()); |
| 2884 } | 2885 } |
| 2885 | 2886 |
| 2886 } // namespace webrtc | 2887 } // namespace webrtc |
| OLD | NEW |