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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 } | 204 } |
205 | 205 |
206 AudioProcessingImpl::~AudioProcessingImpl() { | 206 AudioProcessingImpl::~AudioProcessingImpl() { |
207 // Depends on gain_control_ and | 207 // Depends on gain_control_ and |
208 // public_submodules_->gain_control_for_experimental_agc. | 208 // public_submodules_->gain_control_for_experimental_agc. |
209 private_submodules_->agc_manager.reset(); | 209 private_submodules_->agc_manager.reset(); |
210 // Depends on gain_control_. | 210 // Depends on gain_control_. |
211 public_submodules_->gain_control_for_experimental_agc.reset(); | 211 public_submodules_->gain_control_for_experimental_agc.reset(); |
212 | 212 |
213 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 213 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
214 if (debug_dump_.debug_file->Open()) { | 214 debug_dump_.debug_file->CloseFile(); |
215 debug_dump_.debug_file->CloseFile(); | |
216 } | |
217 #endif | 215 #endif |
218 } | 216 } |
219 | 217 |
220 int AudioProcessingImpl::Initialize() { | 218 int AudioProcessingImpl::Initialize() { |
221 // Run in a single-threaded manner during initialization. | 219 // Run in a single-threaded manner during initialization. |
222 rtc::CritScope cs_render(&crit_render_); | 220 rtc::CritScope cs_render(&crit_render_); |
223 rtc::CritScope cs_capture(&crit_capture_); | 221 rtc::CritScope cs_capture(&crit_capture_); |
224 return InitializeLocked(); | 222 return InitializeLocked(); |
225 } | 223 } |
226 | 224 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 InitializeExperimentalAgc(); | 317 InitializeExperimentalAgc(); |
320 InitializeTransient(); | 318 InitializeTransient(); |
321 InitializeBeamformer(); | 319 InitializeBeamformer(); |
322 InitializeIntelligibility(); | 320 InitializeIntelligibility(); |
323 InitializeHighPassFilter(); | 321 InitializeHighPassFilter(); |
324 InitializeNoiseSuppression(); | 322 InitializeNoiseSuppression(); |
325 InitializeLevelEstimator(); | 323 InitializeLevelEstimator(); |
326 InitializeVoiceDetection(); | 324 InitializeVoiceDetection(); |
327 | 325 |
328 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 326 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
329 if (debug_dump_.debug_file->Open()) { | 327 if (debug_dump_.debug_file->is_open()) { |
330 int err = WriteInitMessage(); | 328 int err = WriteInitMessage(); |
331 if (err != kNoError) { | 329 if (err != kNoError) { |
332 return err; | 330 return err; |
333 } | 331 } |
334 } | 332 } |
335 #endif | 333 #endif |
336 | 334 |
337 return kNoError; | 335 return kNoError; |
338 } | 336 } |
339 | 337 |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 { | 528 { |
531 // Do conditional reinitialization. | 529 // Do conditional reinitialization. |
532 rtc::CritScope cs_render(&crit_render_); | 530 rtc::CritScope cs_render(&crit_render_); |
533 RETURN_ON_ERR(MaybeInitializeCapture(processing_config)); | 531 RETURN_ON_ERR(MaybeInitializeCapture(processing_config)); |
534 } | 532 } |
535 rtc::CritScope cs_capture(&crit_capture_); | 533 rtc::CritScope cs_capture(&crit_capture_); |
536 assert(processing_config.input_stream().num_frames() == | 534 assert(processing_config.input_stream().num_frames() == |
537 formats_.api_format.input_stream().num_frames()); | 535 formats_.api_format.input_stream().num_frames()); |
538 | 536 |
539 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 537 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
540 if (debug_dump_.debug_file->Open()) { | 538 if (debug_dump_.debug_file->is_open()) { |
541 RETURN_ON_ERR(WriteConfigMessage(false)); | 539 RETURN_ON_ERR(WriteConfigMessage(false)); |
542 | 540 |
543 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); | 541 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); |
544 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 542 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
545 const size_t channel_size = | 543 const size_t channel_size = |
546 sizeof(float) * formats_.api_format.input_stream().num_frames(); | 544 sizeof(float) * formats_.api_format.input_stream().num_frames(); |
547 for (size_t i = 0; i < formats_.api_format.input_stream().num_channels(); | 545 for (size_t i = 0; i < formats_.api_format.input_stream().num_channels(); |
548 ++i) | 546 ++i) |
549 msg->add_input_channel(src[i], channel_size); | 547 msg->add_input_channel(src[i], channel_size); |
550 } | 548 } |
551 #endif | 549 #endif |
552 | 550 |
553 capture_.capture_audio->CopyFrom(src, formats_.api_format.input_stream()); | 551 capture_.capture_audio->CopyFrom(src, formats_.api_format.input_stream()); |
554 RETURN_ON_ERR(ProcessStreamLocked()); | 552 RETURN_ON_ERR(ProcessStreamLocked()); |
555 capture_.capture_audio->CopyTo(formats_.api_format.output_stream(), dest); | 553 capture_.capture_audio->CopyTo(formats_.api_format.output_stream(), dest); |
556 | 554 |
557 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 555 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
558 if (debug_dump_.debug_file->Open()) { | 556 if (debug_dump_.debug_file->is_open()) { |
559 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 557 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
560 const size_t channel_size = | 558 const size_t channel_size = |
561 sizeof(float) * formats_.api_format.output_stream().num_frames(); | 559 sizeof(float) * formats_.api_format.output_stream().num_frames(); |
562 for (size_t i = 0; i < formats_.api_format.output_stream().num_channels(); | 560 for (size_t i = 0; i < formats_.api_format.output_stream().num_channels(); |
563 ++i) | 561 ++i) |
564 msg->add_output_channel(dest[i], channel_size); | 562 msg->add_output_channel(dest[i], channel_size); |
565 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 563 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
566 &debug_dump_.num_bytes_left_for_log_, | 564 &debug_dump_.num_bytes_left_for_log_, |
567 &crit_debug_, &debug_dump_.capture)); | 565 &crit_debug_, &debug_dump_.capture)); |
568 } | 566 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
617 rtc::CritScope cs_render(&crit_render_); | 615 rtc::CritScope cs_render(&crit_render_); |
618 RETURN_ON_ERR(MaybeInitializeCapture(processing_config)); | 616 RETURN_ON_ERR(MaybeInitializeCapture(processing_config)); |
619 } | 617 } |
620 rtc::CritScope cs_capture(&crit_capture_); | 618 rtc::CritScope cs_capture(&crit_capture_); |
621 if (frame->samples_per_channel_ != | 619 if (frame->samples_per_channel_ != |
622 formats_.api_format.input_stream().num_frames()) { | 620 formats_.api_format.input_stream().num_frames()) { |
623 return kBadDataLengthError; | 621 return kBadDataLengthError; |
624 } | 622 } |
625 | 623 |
626 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 624 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
627 if (debug_dump_.debug_file->Open()) { | 625 if (debug_dump_.debug_file->is_open()) { |
628 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); | 626 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); |
629 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 627 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
630 const size_t data_size = | 628 const size_t data_size = |
631 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; | 629 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; |
632 msg->set_input_data(frame->data_, data_size); | 630 msg->set_input_data(frame->data_, data_size); |
633 } | 631 } |
634 #endif | 632 #endif |
635 | 633 |
636 capture_.capture_audio->DeinterleaveFrom(frame); | 634 capture_.capture_audio->DeinterleaveFrom(frame); |
637 RETURN_ON_ERR(ProcessStreamLocked()); | 635 RETURN_ON_ERR(ProcessStreamLocked()); |
638 capture_.capture_audio->InterleaveTo(frame, output_copy_needed()); | 636 capture_.capture_audio->InterleaveTo(frame, output_copy_needed()); |
639 | 637 |
640 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 638 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
641 if (debug_dump_.debug_file->Open()) { | 639 if (debug_dump_.debug_file->is_open()) { |
642 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 640 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
643 const size_t data_size = | 641 const size_t data_size = |
644 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; | 642 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; |
645 msg->set_output_data(frame->data_, data_size); | 643 msg->set_output_data(frame->data_, data_size); |
646 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 644 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
647 &debug_dump_.num_bytes_left_for_log_, | 645 &debug_dump_.num_bytes_left_for_log_, |
648 &crit_debug_, &debug_dump_.capture)); | 646 &crit_debug_, &debug_dump_.capture)); |
649 } | 647 } |
650 #endif | 648 #endif |
651 | 649 |
652 return kNoError; | 650 return kNoError; |
653 } | 651 } |
654 | 652 |
655 int AudioProcessingImpl::ProcessStreamLocked() { | 653 int AudioProcessingImpl::ProcessStreamLocked() { |
656 // Ensure that not both the AEC and AECM are active at the same time. | 654 // Ensure that not both the AEC and AECM are active at the same time. |
657 // TODO(peah): Simplify once the public API Enable functions for these | 655 // TODO(peah): Simplify once the public API Enable functions for these |
658 // are moved to APM. | 656 // are moved to APM. |
659 RTC_DCHECK(!(public_submodules_->echo_cancellation->is_enabled() && | 657 RTC_DCHECK(!(public_submodules_->echo_cancellation->is_enabled() && |
660 public_submodules_->echo_control_mobile->is_enabled())); | 658 public_submodules_->echo_control_mobile->is_enabled())); |
661 | 659 |
662 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 660 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
663 if (debug_dump_.debug_file->Open()) { | 661 if (debug_dump_.debug_file->is_open()) { |
664 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 662 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
665 msg->set_delay(capture_nonlocked_.stream_delay_ms); | 663 msg->set_delay(capture_nonlocked_.stream_delay_ms); |
666 msg->set_drift( | 664 msg->set_drift( |
667 public_submodules_->echo_cancellation->stream_drift_samples()); | 665 public_submodules_->echo_cancellation->stream_drift_samples()); |
668 msg->set_level(gain_control()->stream_analog_level()); | 666 msg->set_level(gain_control()->stream_analog_level()); |
669 msg->set_keypress(capture_.key_pressed); | 667 msg->set_keypress(capture_.key_pressed); |
670 } | 668 } |
671 #endif | 669 #endif |
672 | 670 |
673 MaybeUpdateHistograms(); | 671 MaybeUpdateHistograms(); |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 | 819 |
822 ProcessingConfig processing_config = formats_.api_format; | 820 ProcessingConfig processing_config = formats_.api_format; |
823 processing_config.reverse_input_stream() = reverse_input_config; | 821 processing_config.reverse_input_stream() = reverse_input_config; |
824 processing_config.reverse_output_stream() = reverse_output_config; | 822 processing_config.reverse_output_stream() = reverse_output_config; |
825 | 823 |
826 RETURN_ON_ERR(MaybeInitializeRender(processing_config)); | 824 RETURN_ON_ERR(MaybeInitializeRender(processing_config)); |
827 assert(reverse_input_config.num_frames() == | 825 assert(reverse_input_config.num_frames() == |
828 formats_.api_format.reverse_input_stream().num_frames()); | 826 formats_.api_format.reverse_input_stream().num_frames()); |
829 | 827 |
830 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 828 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
831 if (debug_dump_.debug_file->Open()) { | 829 if (debug_dump_.debug_file->is_open()) { |
832 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM); | 830 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM); |
833 audioproc::ReverseStream* msg = | 831 audioproc::ReverseStream* msg = |
834 debug_dump_.render.event_msg->mutable_reverse_stream(); | 832 debug_dump_.render.event_msg->mutable_reverse_stream(); |
835 const size_t channel_size = | 833 const size_t channel_size = |
836 sizeof(float) * formats_.api_format.reverse_input_stream().num_frames(); | 834 sizeof(float) * formats_.api_format.reverse_input_stream().num_frames(); |
837 for (size_t i = 0; | 835 for (size_t i = 0; |
838 i < formats_.api_format.reverse_input_stream().num_channels(); ++i) | 836 i < formats_.api_format.reverse_input_stream().num_channels(); ++i) |
839 msg->add_channel(src[i], channel_size); | 837 msg->add_channel(src[i], channel_size); |
840 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 838 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
841 &debug_dump_.num_bytes_left_for_log_, | 839 &debug_dump_.num_bytes_left_for_log_, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 processing_config.reverse_output_stream().set_num_channels( | 874 processing_config.reverse_output_stream().set_num_channels( |
877 frame->num_channels_); | 875 frame->num_channels_); |
878 | 876 |
879 RETURN_ON_ERR(MaybeInitializeRender(processing_config)); | 877 RETURN_ON_ERR(MaybeInitializeRender(processing_config)); |
880 if (frame->samples_per_channel_ != | 878 if (frame->samples_per_channel_ != |
881 formats_.api_format.reverse_input_stream().num_frames()) { | 879 formats_.api_format.reverse_input_stream().num_frames()) { |
882 return kBadDataLengthError; | 880 return kBadDataLengthError; |
883 } | 881 } |
884 | 882 |
885 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 883 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
886 if (debug_dump_.debug_file->Open()) { | 884 if (debug_dump_.debug_file->is_open()) { |
887 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM); | 885 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM); |
888 audioproc::ReverseStream* msg = | 886 audioproc::ReverseStream* msg = |
889 debug_dump_.render.event_msg->mutable_reverse_stream(); | 887 debug_dump_.render.event_msg->mutable_reverse_stream(); |
890 const size_t data_size = | 888 const size_t data_size = |
891 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; | 889 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; |
892 msg->set_data(frame->data_, data_size); | 890 msg->set_data(frame->data_, data_size); |
893 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 891 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
894 &debug_dump_.num_bytes_left_for_log_, | 892 &debug_dump_.num_bytes_left_for_log_, |
895 &crit_debug_, &debug_dump_.render)); | 893 &crit_debug_, &debug_dump_.render)); |
896 } | 894 } |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 rtc::CritScope cs_capture(&crit_capture_); | 981 rtc::CritScope cs_capture(&crit_capture_); |
984 static_assert(kMaxFilenameSize == FileWrapper::kMaxFileNameSize, ""); | 982 static_assert(kMaxFilenameSize == FileWrapper::kMaxFileNameSize, ""); |
985 | 983 |
986 if (filename == nullptr) { | 984 if (filename == nullptr) { |
987 return kNullPointerError; | 985 return kNullPointerError; |
988 } | 986 } |
989 | 987 |
990 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 988 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
991 debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes; | 989 debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes; |
992 // Stop any ongoing recording. | 990 // Stop any ongoing recording. |
993 if (debug_dump_.debug_file->Open()) { | 991 debug_dump_.debug_file->CloseFile(); |
994 if (debug_dump_.debug_file->CloseFile() == -1) { | |
995 return kFileError; | |
996 } | |
997 } | |
998 | 992 |
999 if (debug_dump_.debug_file->OpenFile(filename, false) == -1) { | 993 if (debug_dump_.debug_file->OpenFile(filename, false) == -1) { |
1000 debug_dump_.debug_file->CloseFile(); | |
1001 return kFileError; | 994 return kFileError; |
1002 } | 995 } |
1003 | 996 |
1004 RETURN_ON_ERR(WriteConfigMessage(true)); | 997 RETURN_ON_ERR(WriteConfigMessage(true)); |
1005 RETURN_ON_ERR(WriteInitMessage()); | 998 RETURN_ON_ERR(WriteInitMessage()); |
1006 return kNoError; | 999 return kNoError; |
1007 #else | 1000 #else |
1008 return kUnsupportedFunctionError; | 1001 return kUnsupportedFunctionError; |
1009 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP | 1002 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
1010 } | 1003 } |
1011 | 1004 |
1012 int AudioProcessingImpl::StartDebugRecording(FILE* handle, | 1005 int AudioProcessingImpl::StartDebugRecording(FILE* handle, |
1013 int64_t max_log_size_bytes) { | 1006 int64_t max_log_size_bytes) { |
1014 // Run in a single-threaded manner. | 1007 // Run in a single-threaded manner. |
1015 rtc::CritScope cs_render(&crit_render_); | 1008 rtc::CritScope cs_render(&crit_render_); |
1016 rtc::CritScope cs_capture(&crit_capture_); | 1009 rtc::CritScope cs_capture(&crit_capture_); |
1017 | 1010 |
1018 if (handle == nullptr) { | 1011 if (handle == nullptr) { |
1019 return kNullPointerError; | 1012 return kNullPointerError; |
1020 } | 1013 } |
1021 | 1014 |
1022 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 1015 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
1023 debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes; | 1016 debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes; |
1024 | 1017 |
1025 // Stop any ongoing recording. | 1018 // Stop any ongoing recording. |
1026 if (debug_dump_.debug_file->Open()) { | 1019 debug_dump_.debug_file->CloseFile(); |
1027 if (debug_dump_.debug_file->CloseFile() == -1) { | |
1028 return kFileError; | |
1029 } | |
1030 } | |
1031 | 1020 |
1032 if (debug_dump_.debug_file->OpenFromFileHandle(handle, true, false) == -1) { | 1021 if (debug_dump_.debug_file->OpenFromFileHandle(handle) == -1) { |
1033 return kFileError; | 1022 return kFileError; |
1034 } | 1023 } |
1035 | 1024 |
1036 RETURN_ON_ERR(WriteConfigMessage(true)); | 1025 RETURN_ON_ERR(WriteConfigMessage(true)); |
1037 RETURN_ON_ERR(WriteInitMessage()); | 1026 RETURN_ON_ERR(WriteInitMessage()); |
1038 return kNoError; | 1027 return kNoError; |
1039 #else | 1028 #else |
1040 return kUnsupportedFunctionError; | 1029 return kUnsupportedFunctionError; |
1041 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP | 1030 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
1042 } | 1031 } |
1043 | 1032 |
1044 int AudioProcessingImpl::StartDebugRecordingForPlatformFile( | 1033 int AudioProcessingImpl::StartDebugRecordingForPlatformFile( |
1045 rtc::PlatformFile handle) { | 1034 rtc::PlatformFile handle) { |
1046 // Run in a single-threaded manner. | 1035 // Run in a single-threaded manner. |
1047 rtc::CritScope cs_render(&crit_render_); | 1036 rtc::CritScope cs_render(&crit_render_); |
1048 rtc::CritScope cs_capture(&crit_capture_); | 1037 rtc::CritScope cs_capture(&crit_capture_); |
1049 FILE* stream = rtc::FdopenPlatformFileForWriting(handle); | 1038 FILE* stream = rtc::FdopenPlatformFileForWriting(handle); |
1050 return StartDebugRecording(stream, -1); | 1039 return StartDebugRecording(stream, -1); |
1051 } | 1040 } |
1052 | 1041 |
1053 int AudioProcessingImpl::StopDebugRecording() { | 1042 int AudioProcessingImpl::StopDebugRecording() { |
1054 // Run in a single-threaded manner. | 1043 // Run in a single-threaded manner. |
1055 rtc::CritScope cs_render(&crit_render_); | 1044 rtc::CritScope cs_render(&crit_render_); |
1056 rtc::CritScope cs_capture(&crit_capture_); | 1045 rtc::CritScope cs_capture(&crit_capture_); |
1057 | 1046 |
1058 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 1047 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
1059 // We just return if recording hasn't started. | 1048 // We just return if recording hasn't started. |
1060 if (debug_dump_.debug_file->Open()) { | 1049 debug_dump_.debug_file->CloseFile(); |
1061 if (debug_dump_.debug_file->CloseFile() == -1) { | |
1062 return kFileError; | |
1063 } | |
1064 } | |
1065 return kNoError; | 1050 return kNoError; |
1066 #else | 1051 #else |
1067 return kUnsupportedFunctionError; | 1052 return kUnsupportedFunctionError; |
1068 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP | 1053 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
1069 } | 1054 } |
1070 | 1055 |
1071 EchoCancellation* AudioProcessingImpl::echo_cancellation() const { | 1056 EchoCancellation* AudioProcessingImpl::echo_cancellation() const { |
1072 // Adding a lock here has no effect as it allows any access to the submodule | 1057 // Adding a lock here has no effect as it allows any access to the submodule |
1073 // from the returned pointer. | 1058 // from the returned pointer. |
1074 return public_submodules_->echo_cancellation.get(); | 1059 return public_submodules_->echo_cancellation.get(); |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1355 #endif | 1340 #endif |
1356 | 1341 |
1357 if (!debug_state->event_msg->SerializeToString(&debug_state->event_str)) { | 1342 if (!debug_state->event_msg->SerializeToString(&debug_state->event_str)) { |
1358 return kUnspecifiedError; | 1343 return kUnspecifiedError; |
1359 } | 1344 } |
1360 | 1345 |
1361 { | 1346 { |
1362 // Ensure atomic writes of the message. | 1347 // Ensure atomic writes of the message. |
1363 rtc::CritScope cs_debug(crit_debug); | 1348 rtc::CritScope cs_debug(crit_debug); |
1364 | 1349 |
1365 RTC_DCHECK(debug_file->Open()); | 1350 RTC_DCHECK(debug_file->is_open()); |
1366 // Update the byte counter. | 1351 // Update the byte counter. |
1367 if (*filesize_limit_bytes >= 0) { | 1352 if (*filesize_limit_bytes >= 0) { |
1368 *filesize_limit_bytes -= | 1353 *filesize_limit_bytes -= |
1369 (sizeof(int32_t) + debug_state->event_str.length()); | 1354 (sizeof(int32_t) + debug_state->event_str.length()); |
1370 if (*filesize_limit_bytes < 0) { | 1355 if (*filesize_limit_bytes < 0) { |
1371 // Not enough bytes are left to write this message, so stop logging. | 1356 // Not enough bytes are left to write this message, so stop logging. |
1372 debug_file->CloseFile(); | 1357 debug_file->CloseFile(); |
1373 return kNoError; | 1358 return kNoError; |
1374 } | 1359 } |
1375 } | 1360 } |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1470 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); | 1455 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); |
1471 | 1456 |
1472 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 1457 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
1473 &debug_dump_.num_bytes_left_for_log_, | 1458 &debug_dump_.num_bytes_left_for_log_, |
1474 &crit_debug_, &debug_dump_.capture)); | 1459 &crit_debug_, &debug_dump_.capture)); |
1475 return kNoError; | 1460 return kNoError; |
1476 } | 1461 } |
1477 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP | 1462 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
1478 | 1463 |
1479 } // namespace webrtc | 1464 } // namespace webrtc |
OLD | NEW |