audio_options.cc (3953B)
1 /* 2 * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "api/audio_options.h" 12 13 #include <optional> 14 #include <string> 15 16 #include "api/array_view.h" 17 #include "rtc_base/strings/string_builder.h" 18 19 namespace webrtc { 20 namespace { 21 22 template <class T> 23 void ToStringIfSet(SimpleStringBuilder* result, 24 const char* key, 25 const std::optional<T>& val) { 26 if (val) { 27 (*result) << key << ": " << *val << ", "; 28 } 29 } 30 31 template <typename T> 32 void SetFrom(std::optional<T>* s, const std::optional<T>& o) { 33 if (o) { 34 *s = o; 35 } 36 } 37 38 } // namespace 39 40 AudioOptions::AudioOptions() = default; 41 AudioOptions::~AudioOptions() = default; 42 43 void AudioOptions::SetAll(const AudioOptions& change) { 44 SetFrom(&echo_cancellation, change.echo_cancellation); 45 #if defined(WEBRTC_IOS) 46 SetFrom(&ios_force_software_aec_HACK, change.ios_force_software_aec_HACK); 47 #endif 48 SetFrom(&auto_gain_control, change.auto_gain_control); 49 SetFrom(&noise_suppression, change.noise_suppression); 50 SetFrom(&highpass_filter, change.highpass_filter); 51 SetFrom(&stereo_swapping, change.stereo_swapping); 52 SetFrom(&audio_jitter_buffer_max_packets, 53 change.audio_jitter_buffer_max_packets); 54 SetFrom(&audio_jitter_buffer_fast_accelerate, 55 change.audio_jitter_buffer_fast_accelerate); 56 SetFrom(&audio_jitter_buffer_min_delay_ms, 57 change.audio_jitter_buffer_min_delay_ms); 58 SetFrom(&audio_network_adaptor, change.audio_network_adaptor); 59 SetFrom(&audio_network_adaptor_config, change.audio_network_adaptor_config); 60 SetFrom(&init_recording_on_send, change.init_recording_on_send); 61 } 62 63 bool AudioOptions::operator==(const AudioOptions& o) const { 64 return echo_cancellation == o.echo_cancellation && 65 #if defined(WEBRTC_IOS) 66 ios_force_software_aec_HACK == o.ios_force_software_aec_HACK && 67 #endif 68 auto_gain_control == o.auto_gain_control && 69 noise_suppression == o.noise_suppression && 70 highpass_filter == o.highpass_filter && 71 stereo_swapping == o.stereo_swapping && 72 audio_jitter_buffer_max_packets == o.audio_jitter_buffer_max_packets && 73 audio_jitter_buffer_fast_accelerate == 74 o.audio_jitter_buffer_fast_accelerate && 75 audio_jitter_buffer_min_delay_ms == 76 o.audio_jitter_buffer_min_delay_ms && 77 audio_network_adaptor == o.audio_network_adaptor && 78 audio_network_adaptor_config == o.audio_network_adaptor_config && 79 init_recording_on_send == o.init_recording_on_send; 80 } 81 82 std::string AudioOptions::ToString() const { 83 char buffer[1024]; 84 SimpleStringBuilder result(buffer); 85 result << "AudioOptions {"; 86 ToStringIfSet(&result, "aec", echo_cancellation); 87 #if defined(WEBRTC_IOS) 88 ToStringIfSet(&result, "ios_force_software_aec_HACK", 89 ios_force_software_aec_HACK); 90 #endif 91 ToStringIfSet(&result, "agc", auto_gain_control); 92 ToStringIfSet(&result, "ns", noise_suppression); 93 ToStringIfSet(&result, "hf", highpass_filter); 94 ToStringIfSet(&result, "swap", stereo_swapping); 95 ToStringIfSet(&result, "audio_jitter_buffer_max_packets", 96 audio_jitter_buffer_max_packets); 97 ToStringIfSet(&result, "audio_jitter_buffer_fast_accelerate", 98 audio_jitter_buffer_fast_accelerate); 99 ToStringIfSet(&result, "audio_jitter_buffer_min_delay_ms", 100 audio_jitter_buffer_min_delay_ms); 101 ToStringIfSet(&result, "audio_network_adaptor", audio_network_adaptor); 102 ToStringIfSet(&result, "init_recording_on_send", init_recording_on_send); 103 result << "}"; 104 return result.str(); 105 } 106 107 } // namespace webrtc