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

Side by Side Diff: webrtc/modules/audio_processing/audio_processing_impl.cc

Issue 1533913004: Revert of Added option to specify a maximum file size when recording an AEC dump. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years 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 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 capture_.capture_audio->CopyTo(formats_.api_format.output_stream(), dest); 620 capture_.capture_audio->CopyTo(formats_.api_format.output_stream(), dest);
621 621
622 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 622 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
623 if (debug_dump_.debug_file->Open()) { 623 if (debug_dump_.debug_file->Open()) {
624 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); 624 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
625 const size_t channel_size = 625 const size_t channel_size =
626 sizeof(float) * formats_.api_format.output_stream().num_frames(); 626 sizeof(float) * formats_.api_format.output_stream().num_frames();
627 for (int i = 0; i < formats_.api_format.output_stream().num_channels(); ++i) 627 for (int i = 0; i < formats_.api_format.output_stream().num_channels(); ++i)
628 msg->add_output_channel(dest[i], channel_size); 628 msg->add_output_channel(dest[i], channel_size);
629 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 629 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
630 &debug_dump_.num_bytes_left_for_log_,
631 &crit_debug_, &debug_dump_.capture)); 630 &crit_debug_, &debug_dump_.capture));
632 } 631 }
633 #endif 632 #endif
634 633
635 return kNoError; 634 return kNoError;
636 } 635 }
637 636
638 int AudioProcessingImpl::ProcessStream(AudioFrame* frame) { 637 int AudioProcessingImpl::ProcessStream(AudioFrame* frame) {
639 { 638 {
640 // Acquire the capture lock in order to safely call the function 639 // Acquire the capture lock in order to safely call the function
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 capture_.capture_audio->InterleaveTo(frame, 706 capture_.capture_audio->InterleaveTo(frame,
708 output_copy_needed(is_data_processed())); 707 output_copy_needed(is_data_processed()));
709 708
710 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 709 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
711 if (debug_dump_.debug_file->Open()) { 710 if (debug_dump_.debug_file->Open()) {
712 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); 711 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream();
713 const size_t data_size = 712 const size_t data_size =
714 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; 713 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_;
715 msg->set_output_data(frame->data_, data_size); 714 msg->set_output_data(frame->data_, data_size);
716 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 715 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
717 &debug_dump_.num_bytes_left_for_log_,
718 &crit_debug_, &debug_dump_.capture)); 716 &crit_debug_, &debug_dump_.capture));
719 } 717 }
720 #endif 718 #endif
721 719
722 return kNoError; 720 return kNoError;
723 } 721 }
724 722
725 int AudioProcessingImpl::ProcessStreamLocked() { 723 int AudioProcessingImpl::ProcessStreamLocked() {
726 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 724 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
727 if (debug_dump_.debug_file->Open()) { 725 if (debug_dump_.debug_file->Open()) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 if (debug_dump_.debug_file->Open()) { 871 if (debug_dump_.debug_file->Open()) {
874 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM); 872 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM);
875 audioproc::ReverseStream* msg = 873 audioproc::ReverseStream* msg =
876 debug_dump_.render.event_msg->mutable_reverse_stream(); 874 debug_dump_.render.event_msg->mutable_reverse_stream();
877 const size_t channel_size = 875 const size_t channel_size =
878 sizeof(float) * formats_.api_format.reverse_input_stream().num_frames(); 876 sizeof(float) * formats_.api_format.reverse_input_stream().num_frames();
879 for (int i = 0; 877 for (int i = 0;
880 i < formats_.api_format.reverse_input_stream().num_channels(); ++i) 878 i < formats_.api_format.reverse_input_stream().num_channels(); ++i)
881 msg->add_channel(src[i], channel_size); 879 msg->add_channel(src[i], channel_size);
882 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 880 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
883 &debug_dump_.num_bytes_left_for_log_,
884 &crit_debug_, &debug_dump_.render)); 881 &crit_debug_, &debug_dump_.render));
885 } 882 }
886 #endif 883 #endif
887 884
888 render_.render_audio->CopyFrom(src, 885 render_.render_audio->CopyFrom(src,
889 formats_.api_format.reverse_input_stream()); 886 formats_.api_format.reverse_input_stream());
890 return ProcessReverseStreamLocked(); 887 return ProcessReverseStreamLocked();
891 } 888 }
892 889
893 int AudioProcessingImpl::ProcessReverseStream(AudioFrame* frame) { 890 int AudioProcessingImpl::ProcessReverseStream(AudioFrame* frame) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 937
941 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 938 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
942 if (debug_dump_.debug_file->Open()) { 939 if (debug_dump_.debug_file->Open()) {
943 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM); 940 debug_dump_.render.event_msg->set_type(audioproc::Event::REVERSE_STREAM);
944 audioproc::ReverseStream* msg = 941 audioproc::ReverseStream* msg =
945 debug_dump_.render.event_msg->mutable_reverse_stream(); 942 debug_dump_.render.event_msg->mutable_reverse_stream();
946 const size_t data_size = 943 const size_t data_size =
947 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; 944 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_;
948 msg->set_data(frame->data_, data_size); 945 msg->set_data(frame->data_, data_size);
949 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 946 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
950 &debug_dump_.num_bytes_left_for_log_,
951 &crit_debug_, &debug_dump_.render)); 947 &crit_debug_, &debug_dump_.render));
952 } 948 }
953 #endif 949 #endif
954 render_.render_audio->DeinterleaveFrom(frame); 950 render_.render_audio->DeinterleaveFrom(frame);
955 return ProcessReverseStreamLocked(); 951 return ProcessReverseStreamLocked();
956 } 952 }
957 953
958 int AudioProcessingImpl::ProcessReverseStreamLocked() { 954 int AudioProcessingImpl::ProcessReverseStreamLocked() {
959 AudioBuffer* ra = render_.render_audio.get(); // For brevity. 955 AudioBuffer* ra = render_.render_audio.get(); // For brevity.
960 if (formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz) { 956 if (formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 rtc::CritScope cs(&crit_capture_); 1022 rtc::CritScope cs(&crit_capture_);
1027 capture_.delay_offset_ms = offset; 1023 capture_.delay_offset_ms = offset;
1028 } 1024 }
1029 1025
1030 int AudioProcessingImpl::delay_offset_ms() const { 1026 int AudioProcessingImpl::delay_offset_ms() const {
1031 rtc::CritScope cs(&crit_capture_); 1027 rtc::CritScope cs(&crit_capture_);
1032 return capture_.delay_offset_ms; 1028 return capture_.delay_offset_ms;
1033 } 1029 }
1034 1030
1035 int AudioProcessingImpl::StartDebugRecording( 1031 int AudioProcessingImpl::StartDebugRecording(
1036 const char filename[AudioProcessing::kMaxFilenameSize], 1032 const char filename[AudioProcessing::kMaxFilenameSize]) {
1037 int64_t max_log_size_bytes) {
1038 // Run in a single-threaded manner. 1033 // Run in a single-threaded manner.
1039 rtc::CritScope cs_render(&crit_render_); 1034 rtc::CritScope cs_render(&crit_render_);
1040 rtc::CritScope cs_capture(&crit_capture_); 1035 rtc::CritScope cs_capture(&crit_capture_);
1041 static_assert(kMaxFilenameSize == FileWrapper::kMaxFileNameSize, ""); 1036 static_assert(kMaxFilenameSize == FileWrapper::kMaxFileNameSize, "");
1042 1037
1043 if (filename == nullptr) { 1038 if (filename == nullptr) {
1044 return kNullPointerError; 1039 return kNullPointerError;
1045 } 1040 }
1046 1041
1047 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 1042 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
1048 debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes;
1049 // Stop any ongoing recording. 1043 // Stop any ongoing recording.
1050 if (debug_dump_.debug_file->Open()) { 1044 if (debug_dump_.debug_file->Open()) {
1051 if (debug_dump_.debug_file->CloseFile() == -1) { 1045 if (debug_dump_.debug_file->CloseFile() == -1) {
1052 return kFileError; 1046 return kFileError;
1053 } 1047 }
1054 } 1048 }
1055 1049
1056 if (debug_dump_.debug_file->OpenFile(filename, false) == -1) { 1050 if (debug_dump_.debug_file->OpenFile(filename, false) == -1) {
1057 debug_dump_.debug_file->CloseFile(); 1051 debug_dump_.debug_file->CloseFile();
1058 return kFileError; 1052 return kFileError;
1059 } 1053 }
1060 1054
1061 RETURN_ON_ERR(WriteConfigMessage(true)); 1055 RETURN_ON_ERR(WriteConfigMessage(true));
1062 RETURN_ON_ERR(WriteInitMessage()); 1056 RETURN_ON_ERR(WriteInitMessage());
1063 return kNoError; 1057 return kNoError;
1064 #else 1058 #else
1065 return kUnsupportedFunctionError; 1059 return kUnsupportedFunctionError;
1066 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP 1060 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
1067 } 1061 }
1068 1062
1069 int AudioProcessingImpl::StartDebugRecording(FILE* handle, 1063 int AudioProcessingImpl::StartDebugRecording(FILE* handle) {
1070 int64_t max_log_size_bytes) {
1071 // Run in a single-threaded manner. 1064 // Run in a single-threaded manner.
1072 rtc::CritScope cs_render(&crit_render_); 1065 rtc::CritScope cs_render(&crit_render_);
1073 rtc::CritScope cs_capture(&crit_capture_); 1066 rtc::CritScope cs_capture(&crit_capture_);
1074 1067
1075 if (handle == nullptr) { 1068 if (handle == nullptr) {
1076 return kNullPointerError; 1069 return kNullPointerError;
1077 } 1070 }
1078 1071
1079 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 1072 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
1080 debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes;
1081
1082 // Stop any ongoing recording. 1073 // Stop any ongoing recording.
1083 if (debug_dump_.debug_file->Open()) { 1074 if (debug_dump_.debug_file->Open()) {
1084 if (debug_dump_.debug_file->CloseFile() == -1) { 1075 if (debug_dump_.debug_file->CloseFile() == -1) {
1085 return kFileError; 1076 return kFileError;
1086 } 1077 }
1087 } 1078 }
1088 1079
1089 if (debug_dump_.debug_file->OpenFromFileHandle(handle, true, false) == -1) { 1080 if (debug_dump_.debug_file->OpenFromFileHandle(handle, true, false) == -1) {
1090 return kFileError; 1081 return kFileError;
1091 } 1082 }
1092 1083
1093 RETURN_ON_ERR(WriteConfigMessage(true)); 1084 RETURN_ON_ERR(WriteConfigMessage(true));
1094 RETURN_ON_ERR(WriteInitMessage()); 1085 RETURN_ON_ERR(WriteInitMessage());
1095 return kNoError; 1086 return kNoError;
1096 #else 1087 #else
1097 return kUnsupportedFunctionError; 1088 return kUnsupportedFunctionError;
1098 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP 1089 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
1099 } 1090 }
1100 1091
1101 int AudioProcessingImpl::StartDebugRecordingForPlatformFile( 1092 int AudioProcessingImpl::StartDebugRecordingForPlatformFile(
1102 rtc::PlatformFile handle) { 1093 rtc::PlatformFile handle) {
1103 // Run in a single-threaded manner. 1094 // Run in a single-threaded manner.
1104 rtc::CritScope cs_render(&crit_render_); 1095 rtc::CritScope cs_render(&crit_render_);
1105 rtc::CritScope cs_capture(&crit_capture_); 1096 rtc::CritScope cs_capture(&crit_capture_);
1106 FILE* stream = rtc::FdopenPlatformFileForWriting(handle); 1097 FILE* stream = rtc::FdopenPlatformFileForWriting(handle);
1107 return StartDebugRecording(stream, -1); 1098 return StartDebugRecording(stream);
1108 } 1099 }
1109 1100
1110 int AudioProcessingImpl::StopDebugRecording() { 1101 int AudioProcessingImpl::StopDebugRecording() {
1111 // Run in a single-threaded manner. 1102 // Run in a single-threaded manner.
1112 rtc::CritScope cs_render(&crit_render_); 1103 rtc::CritScope cs_render(&crit_render_);
1113 rtc::CritScope cs_capture(&crit_capture_); 1104 rtc::CritScope cs_capture(&crit_capture_);
1114 1105
1115 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 1106 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
1116 // We just return if recording hasn't started. 1107 // We just return if recording hasn't started.
1117 if (debug_dump_.debug_file->Open()) { 1108 if (debug_dump_.debug_file->Open()) {
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 RTC_HISTOGRAM_ENUMERATION("WebRTC.Audio.NumOfAecSystemDelayJumps", 1369 RTC_HISTOGRAM_ENUMERATION("WebRTC.Audio.NumOfAecSystemDelayJumps",
1379 capture_.aec_system_delay_jumps, 51); 1370 capture_.aec_system_delay_jumps, 51);
1380 } 1371 }
1381 capture_.aec_system_delay_jumps = -1; 1372 capture_.aec_system_delay_jumps = -1;
1382 capture_.last_aec_system_delay_ms = 0; 1373 capture_.last_aec_system_delay_ms = 0;
1383 } 1374 }
1384 1375
1385 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 1376 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
1386 int AudioProcessingImpl::WriteMessageToDebugFile( 1377 int AudioProcessingImpl::WriteMessageToDebugFile(
1387 FileWrapper* debug_file, 1378 FileWrapper* debug_file,
1388 int64_t* filesize_limit_bytes,
1389 rtc::CriticalSection* crit_debug, 1379 rtc::CriticalSection* crit_debug,
1390 ApmDebugDumpThreadState* debug_state) { 1380 ApmDebugDumpThreadState* debug_state) {
1391 int32_t size = debug_state->event_msg->ByteSize(); 1381 int32_t size = debug_state->event_msg->ByteSize();
1392 if (size <= 0) { 1382 if (size <= 0) {
1393 return kUnspecifiedError; 1383 return kUnspecifiedError;
1394 } 1384 }
1395 #if defined(WEBRTC_ARCH_BIG_ENDIAN) 1385 #if defined(WEBRTC_ARCH_BIG_ENDIAN)
1396 // TODO(ajm): Use little-endian "on the wire". For the moment, we can be 1386 // TODO(ajm): Use little-endian "on the wire". For the moment, we can be
1397 // pretty safe in assuming little-endian. 1387 // pretty safe in assuming little-endian.
1398 #endif 1388 #endif
1399 1389
1400 if (!debug_state->event_msg->SerializeToString(&debug_state->event_str)) { 1390 if (!debug_state->event_msg->SerializeToString(&debug_state->event_str)) {
1401 return kUnspecifiedError; 1391 return kUnspecifiedError;
1402 } 1392 }
1403 1393
1404 { 1394 {
1405 // Ensure atomic writes of the message. 1395 // Ensure atomic writes of the message.
1406 rtc::CritScope cs_debug(crit_debug); 1396 rtc::CritScope cs_capture(crit_debug);
1407
1408 RTC_DCHECK(debug_file->Open());
1409 // Update the byte counter.
1410 if (*filesize_limit_bytes >= 0) {
1411 *filesize_limit_bytes -=
1412 (sizeof(int32_t) + debug_state->event_str.length());
1413 if (*filesize_limit_bytes < 0) {
1414 // Not enough bytes are left to write this message, so stop logging.
1415 debug_file->CloseFile();
1416 return kNoError;
1417 }
1418 }
1419 // Write message preceded by its size. 1397 // Write message preceded by its size.
1420 if (!debug_file->Write(&size, sizeof(int32_t))) { 1398 if (!debug_file->Write(&size, sizeof(int32_t))) {
1421 return kFileError; 1399 return kFileError;
1422 } 1400 }
1423 if (!debug_file->Write(debug_state->event_str.data(), 1401 if (!debug_file->Write(debug_state->event_str.data(),
1424 debug_state->event_str.length())) { 1402 debug_state->event_str.length())) {
1425 return kFileError; 1403 return kFileError;
1426 } 1404 }
1427 } 1405 }
1428 1406
(...skipping 14 matching lines...) Expand all
1443 msg->set_num_reverse_channels( 1421 msg->set_num_reverse_channels(
1444 formats_.api_format.reverse_input_stream().num_channels()); 1422 formats_.api_format.reverse_input_stream().num_channels());
1445 msg->set_reverse_sample_rate( 1423 msg->set_reverse_sample_rate(
1446 formats_.api_format.reverse_input_stream().sample_rate_hz()); 1424 formats_.api_format.reverse_input_stream().sample_rate_hz());
1447 msg->set_output_sample_rate( 1425 msg->set_output_sample_rate(
1448 formats_.api_format.output_stream().sample_rate_hz()); 1426 formats_.api_format.output_stream().sample_rate_hz());
1449 // TODO(ekmeyerson): Add reverse output fields to 1427 // TODO(ekmeyerson): Add reverse output fields to
1450 // debug_dump_.capture.event_msg. 1428 // debug_dump_.capture.event_msg.
1451 1429
1452 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 1430 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
1453 &debug_dump_.num_bytes_left_for_log_,
1454 &crit_debug_, &debug_dump_.capture)); 1431 &crit_debug_, &debug_dump_.capture));
1455 return kNoError; 1432 return kNoError;
1456 } 1433 }
1457 1434
1458 int AudioProcessingImpl::WriteConfigMessage(bool forced) { 1435 int AudioProcessingImpl::WriteConfigMessage(bool forced) {
1459 audioproc::Config config; 1436 audioproc::Config config;
1460 1437
1461 config.set_aec_enabled(public_submodules_->echo_cancellation->is_enabled()); 1438 config.set_aec_enabled(public_submodules_->echo_cancellation->is_enabled());
1462 config.set_aec_delay_agnostic_enabled( 1439 config.set_aec_delay_agnostic_enabled(
1463 public_submodules_->echo_cancellation->is_delay_agnostic_enabled()); 1440 public_submodules_->echo_cancellation->is_delay_agnostic_enabled());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 debug_dump_.capture.last_serialized_config == serialized_config) { 1473 debug_dump_.capture.last_serialized_config == serialized_config) {
1497 return kNoError; 1474 return kNoError;
1498 } 1475 }
1499 1476
1500 debug_dump_.capture.last_serialized_config = serialized_config; 1477 debug_dump_.capture.last_serialized_config = serialized_config;
1501 1478
1502 debug_dump_.capture.event_msg->set_type(audioproc::Event::CONFIG); 1479 debug_dump_.capture.event_msg->set_type(audioproc::Event::CONFIG);
1503 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); 1480 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config);
1504 1481
1505 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 1482 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
1506 &debug_dump_.num_bytes_left_for_log_,
1507 &crit_debug_, &debug_dump_.capture)); 1483 &crit_debug_, &debug_dump_.capture));
1508 return kNoError; 1484 return kNoError;
1509 } 1485 }
1510 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP 1486 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
1511 1487
1512 } // namespace webrtc 1488 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/audio_processing_impl.h ('k') | webrtc/modules/audio_processing/include/audio_processing.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698