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 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); | 836 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); |
837 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 837 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
838 const size_t channel_size = | 838 const size_t channel_size = |
839 sizeof(float) * formats_.api_format.input_stream().num_frames(); | 839 sizeof(float) * formats_.api_format.input_stream().num_frames(); |
840 for (size_t i = 0; i < formats_.api_format.input_stream().num_channels(); | 840 for (size_t i = 0; i < formats_.api_format.input_stream().num_channels(); |
841 ++i) | 841 ++i) |
842 msg->add_input_channel(src[i], channel_size); | 842 msg->add_input_channel(src[i], channel_size); |
843 } | 843 } |
844 #endif | 844 #endif |
845 | 845 |
846 std::unique_ptr<AecDump::CaptureStreamInfo> stream_info; | 846 AecDump::CaptureStreamInfo* stream_info; |
847 if (aec_dump_) { | 847 if (aec_dump_) { |
848 stream_info = RecordUnprocessedCaptureStream(src); | 848 stream_info = RecordUnprocessedCaptureStream(src); |
849 } | 849 } |
850 | 850 |
851 capture_.capture_audio->CopyFrom(src, formats_.api_format.input_stream()); | 851 capture_.capture_audio->CopyFrom(src, formats_.api_format.input_stream()); |
852 RETURN_ON_ERR(ProcessCaptureStreamLocked()); | 852 RETURN_ON_ERR(ProcessCaptureStreamLocked()); |
853 capture_.capture_audio->CopyTo(formats_.api_format.output_stream(), dest); | 853 capture_.capture_audio->CopyTo(formats_.api_format.output_stream(), dest); |
854 | 854 |
855 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 855 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
856 if (debug_dump_.debug_file->is_open()) { | 856 if (debug_dump_.debug_file->is_open()) { |
857 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 857 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
858 const size_t channel_size = | 858 const size_t channel_size = |
859 sizeof(float) * formats_.api_format.output_stream().num_frames(); | 859 sizeof(float) * formats_.api_format.output_stream().num_frames(); |
860 for (size_t i = 0; i < formats_.api_format.output_stream().num_channels(); | 860 for (size_t i = 0; i < formats_.api_format.output_stream().num_channels(); |
861 ++i) | 861 ++i) |
862 msg->add_output_channel(dest[i], channel_size); | 862 msg->add_output_channel(dest[i], channel_size); |
863 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 863 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
864 &debug_dump_.num_bytes_left_for_log_, | 864 &debug_dump_.num_bytes_left_for_log_, |
865 &crit_debug_, &debug_dump_.capture)); | 865 &crit_debug_, &debug_dump_.capture)); |
866 } | 866 } |
867 #endif | 867 #endif |
868 if (aec_dump_) { | 868 if (aec_dump_) { |
869 RecordProcessedCaptureStream(dest, std::move(stream_info)); | 869 RecordProcessedCaptureStream(dest, stream_info); |
870 } | 870 } |
871 return kNoError; | 871 return kNoError; |
872 } | 872 } |
873 | 873 |
874 void AudioProcessingImpl::QueueRenderAudio(AudioBuffer* audio) { | 874 void AudioProcessingImpl::QueueRenderAudio(AudioBuffer* audio) { |
875 EchoCancellationImpl::PackRenderAudioBuffer(audio, num_output_channels(), | 875 EchoCancellationImpl::PackRenderAudioBuffer(audio, num_output_channels(), |
876 num_reverse_channels(), | 876 num_reverse_channels(), |
877 &aec_render_queue_buffer_); | 877 &aec_render_queue_buffer_); |
878 | 878 |
879 RTC_DCHECK_GE(160, audio->num_frames_per_band()); | 879 RTC_DCHECK_GE(160, audio->num_frames_per_band()); |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1097 rtc::CritScope cs_render(&crit_render_); | 1097 rtc::CritScope cs_render(&crit_render_); |
1098 RETURN_ON_ERR( | 1098 RETURN_ON_ERR( |
1099 MaybeInitializeCapture(processing_config, reinitialization_required)); | 1099 MaybeInitializeCapture(processing_config, reinitialization_required)); |
1100 } | 1100 } |
1101 rtc::CritScope cs_capture(&crit_capture_); | 1101 rtc::CritScope cs_capture(&crit_capture_); |
1102 if (frame->samples_per_channel_ != | 1102 if (frame->samples_per_channel_ != |
1103 formats_.api_format.input_stream().num_frames()) { | 1103 formats_.api_format.input_stream().num_frames()) { |
1104 return kBadDataLengthError; | 1104 return kBadDataLengthError; |
1105 } | 1105 } |
1106 | 1106 |
1107 std::unique_ptr<AecDump::CaptureStreamInfo> stream_info; | 1107 AecDump::CaptureStreamInfo* stream_info; |
1108 if (aec_dump_) { | 1108 if (aec_dump_) { |
1109 stream_info = RecordUnprocessedCaptureStream(*frame); | 1109 stream_info = RecordUnprocessedCaptureStream(*frame); |
1110 } | 1110 } |
1111 | 1111 |
1112 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 1112 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
1113 if (debug_dump_.debug_file->is_open()) { | 1113 if (debug_dump_.debug_file->is_open()) { |
1114 RETURN_ON_ERR(WriteConfigMessage(false)); | 1114 RETURN_ON_ERR(WriteConfigMessage(false)); |
1115 | 1115 |
1116 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); | 1116 debug_dump_.capture.event_msg->set_type(audioproc::Event::STREAM); |
1117 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 1117 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
1118 const size_t data_size = | 1118 const size_t data_size = |
1119 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; | 1119 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; |
1120 msg->set_input_data(frame->data_, data_size); | 1120 msg->set_input_data(frame->data_, data_size); |
1121 } | 1121 } |
1122 #endif | 1122 #endif |
1123 | 1123 |
1124 capture_.capture_audio->DeinterleaveFrom(frame); | 1124 capture_.capture_audio->DeinterleaveFrom(frame); |
1125 RETURN_ON_ERR(ProcessCaptureStreamLocked()); | 1125 RETURN_ON_ERR(ProcessCaptureStreamLocked()); |
1126 capture_.capture_audio->InterleaveTo( | 1126 capture_.capture_audio->InterleaveTo( |
1127 frame, submodule_states_.CaptureMultiBandProcessingActive()); | 1127 frame, submodule_states_.CaptureMultiBandProcessingActive()); |
1128 | 1128 |
1129 if (aec_dump_) { | 1129 if (aec_dump_) { |
1130 RecordProcessedCaptureStream(*frame, std::move(stream_info)); | 1130 RecordProcessedCaptureStream(*frame, stream_info); |
1131 } | 1131 } |
1132 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 1132 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
1133 if (debug_dump_.debug_file->is_open()) { | 1133 if (debug_dump_.debug_file->is_open()) { |
1134 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); | 1134 audioproc::Stream* msg = debug_dump_.capture.event_msg->mutable_stream(); |
1135 const size_t data_size = | 1135 const size_t data_size = |
1136 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; | 1136 sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; |
1137 msg->set_output_data(frame->data_, data_size); | 1137 msg->set_output_data(frame->data_, data_size); |
1138 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), | 1138 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
1139 &debug_dump_.num_bytes_left_for_log_, | 1139 &debug_dump_.num_bytes_left_for_log_, |
1140 &crit_debug_, &debug_dump_.capture)); | 1140 &crit_debug_, &debug_dump_.capture)); |
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1947 static_cast<int>(public_submodules_->noise_suppression->level()); | 1947 static_cast<int>(public_submodules_->noise_suppression->level()); |
1948 | 1948 |
1949 apm_config.transient_suppression_enabled = | 1949 apm_config.transient_suppression_enabled = |
1950 capture_.transient_suppressor_enabled; | 1950 capture_.transient_suppressor_enabled; |
1951 apm_config.intelligibility_enhancer_enabled = | 1951 apm_config.intelligibility_enhancer_enabled = |
1952 capture_nonlocked_.intelligibility_enabled; | 1952 capture_nonlocked_.intelligibility_enabled; |
1953 apm_config.experiments_description = experiments_description; | 1953 apm_config.experiments_description = experiments_description; |
1954 return apm_config; | 1954 return apm_config; |
1955 } | 1955 } |
1956 | 1956 |
1957 std::unique_ptr<AecDump::CaptureStreamInfo> | 1957 AecDump::CaptureStreamInfo* AudioProcessingImpl::RecordUnprocessedCaptureStream( |
1958 AudioProcessingImpl::RecordUnprocessedCaptureStream( | |
1959 const float* const* src) const { | 1958 const float* const* src) const { |
1960 RTC_DCHECK(aec_dump_); | 1959 RTC_DCHECK(aec_dump_); |
1961 aec_dump_->WriteConfig(CollectApmConfig(), false); | 1960 aec_dump_->WriteConfig(CollectApmConfig(), false); |
1962 auto stream_info = aec_dump_->CreateCaptureStreamInfo(); | 1961 auto* stream_info = aec_dump_->GetCaptureStreamInfo(); |
1963 RTC_DCHECK(stream_info); | 1962 RTC_DCHECK(stream_info); |
1964 | 1963 |
1965 const size_t channel_size = formats_.api_format.input_stream().num_frames(); | 1964 const size_t channel_size = formats_.api_format.input_stream().num_frames(); |
1966 const size_t num_channels = formats_.api_format.input_stream().num_channels(); | 1965 const size_t num_channels = formats_.api_format.input_stream().num_channels(); |
1967 stream_info->AddInput(FloatAudioFrame(src, num_channels, channel_size)); | 1966 stream_info->AddInput(FloatAudioFrame(src, num_channels, channel_size)); |
1968 PopulateStreamInfoWithState(stream_info.get()); | 1967 PopulateStreamInfoWithState(stream_info); |
1969 return stream_info; | 1968 return stream_info; |
1970 } | 1969 } |
1971 | 1970 |
1972 std::unique_ptr<AecDump::CaptureStreamInfo> | 1971 AecDump::CaptureStreamInfo* AudioProcessingImpl::RecordUnprocessedCaptureStream( |
1973 AudioProcessingImpl::RecordUnprocessedCaptureStream( | |
1974 const AudioFrame& capture_frame) const { | 1972 const AudioFrame& capture_frame) const { |
1975 RTC_DCHECK(aec_dump_); | 1973 RTC_DCHECK(aec_dump_); |
1976 auto stream_info = aec_dump_->CreateCaptureStreamInfo(); | 1974 auto* stream_info = aec_dump_->GetCaptureStreamInfo(); |
1977 RTC_DCHECK(stream_info); | 1975 RTC_DCHECK(stream_info); |
1978 | 1976 |
1979 stream_info->AddInput(capture_frame); | 1977 stream_info->AddInput(capture_frame); |
1980 PopulateStreamInfoWithState(stream_info.get()); | 1978 PopulateStreamInfoWithState(stream_info); |
1981 aec_dump_->WriteConfig(CollectApmConfig(), false); | 1979 aec_dump_->WriteConfig(CollectApmConfig(), false); |
1982 return stream_info; | 1980 return stream_info; |
1983 } | 1981 } |
1984 | 1982 |
1985 void AudioProcessingImpl::RecordProcessedCaptureStream( | 1983 void AudioProcessingImpl::RecordProcessedCaptureStream( |
1986 const float* const* processed_capture_stream, | 1984 const float* const* processed_capture_stream, |
1987 std::unique_ptr<AecDump::CaptureStreamInfo> stream_info) const { | 1985 AecDump::CaptureStreamInfo* stream_info) const { |
1988 RTC_DCHECK(stream_info); | 1986 RTC_DCHECK(stream_info); |
1989 RTC_DCHECK(aec_dump_); | 1987 RTC_DCHECK(aec_dump_); |
1990 | 1988 |
1991 const size_t channel_size = formats_.api_format.output_stream().num_frames(); | 1989 const size_t channel_size = formats_.api_format.output_stream().num_frames(); |
1992 const size_t num_channels = | 1990 const size_t num_channels = |
1993 formats_.api_format.output_stream().num_channels(); | 1991 formats_.api_format.output_stream().num_channels(); |
1994 stream_info->AddOutput( | 1992 stream_info->AddOutput( |
1995 FloatAudioFrame(processed_capture_stream, num_channels, channel_size)); | 1993 FloatAudioFrame(processed_capture_stream, num_channels, channel_size)); |
1996 aec_dump_->WriteCaptureStreamMessage(std::move(stream_info)); | 1994 aec_dump_->WriteCaptureStreamMessage(); |
1997 } | 1995 } |
1998 | 1996 |
1999 void AudioProcessingImpl::RecordProcessedCaptureStream( | 1997 void AudioProcessingImpl::RecordProcessedCaptureStream( |
2000 const AudioFrame& processed_capture_frame, | 1998 const AudioFrame& processed_capture_frame, |
2001 std::unique_ptr<AecDump::CaptureStreamInfo> stream_info) const { | 1999 AecDump::CaptureStreamInfo* stream_info) const { |
2002 RTC_DCHECK(stream_info); | 2000 RTC_DCHECK(stream_info); |
2003 RTC_DCHECK(aec_dump_); | 2001 RTC_DCHECK(aec_dump_); |
2004 | 2002 |
2005 stream_info->AddOutput(processed_capture_frame); | 2003 stream_info->AddOutput(processed_capture_frame); |
2006 aec_dump_->WriteCaptureStreamMessage(std::move(stream_info)); | 2004 aec_dump_->WriteCaptureStreamMessage(); |
2007 } | 2005 } |
2008 | 2006 |
2009 void AudioProcessingImpl::PopulateStreamInfoWithState( | 2007 void AudioProcessingImpl::PopulateStreamInfoWithState( |
2010 AecDump::CaptureStreamInfo* stream_info) const { | 2008 AecDump::CaptureStreamInfo* stream_info) const { |
2011 RTC_DCHECK(stream_info); | 2009 RTC_DCHECK(stream_info); |
2012 | 2010 |
2013 stream_info->set_delay(capture_nonlocked_.stream_delay_ms); | 2011 stream_info->set_delay(capture_nonlocked_.stream_delay_ms); |
2014 stream_info->set_drift( | 2012 stream_info->set_drift( |
2015 public_submodules_->echo_cancellation->stream_drift_samples()); | 2013 public_submodules_->echo_cancellation->stream_drift_samples()); |
2016 stream_info->set_level(gain_control()->stream_analog_level()); | 2014 stream_info->set_level(gain_control()->stream_analog_level()); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2183 previous_agc_level(0), | 2181 previous_agc_level(0), |
2184 echo_path_gain_change(false) {} | 2182 echo_path_gain_change(false) {} |
2185 | 2183 |
2186 AudioProcessingImpl::ApmCaptureState::~ApmCaptureState() = default; | 2184 AudioProcessingImpl::ApmCaptureState::~ApmCaptureState() = default; |
2187 | 2185 |
2188 AudioProcessingImpl::ApmRenderState::ApmRenderState() = default; | 2186 AudioProcessingImpl::ApmRenderState::ApmRenderState() = default; |
2189 | 2187 |
2190 AudioProcessingImpl::ApmRenderState::~ApmRenderState() = default; | 2188 AudioProcessingImpl::ApmRenderState::~ApmRenderState() = default; |
2191 | 2189 |
2192 } // namespace webrtc | 2190 } // namespace webrtc |
OLD | NEW |