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