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