blob: 839b37d07d92e3017ed491265961a271482e4dcb [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/audio/public/cpp/audio_processing_mojom_traits.h"
namespace mojo {
// static
bool StructTraits<audio::mojom::AudioProcessingSettingsDataView,
media::AudioProcessingSettings>::
Read(audio::mojom::AudioProcessingSettingsDataView data,
media::AudioProcessingSettings* out_settings) {
media::EchoCancellationType echo_cancellation;
if (!data.ReadEchoCancellation(&echo_cancellation))
return false;
media::NoiseSuppressionType noise_suppression;
if (!data.ReadNoiseSuppression(&noise_suppression))
return false;
media::AutomaticGainControlType automatic_gain_control;
if (!data.ReadAutomaticGainControl(&automatic_gain_control))
return false;
*out_settings = media::AudioProcessingSettings{
echo_cancellation, noise_suppression,
automatic_gain_control, data.high_pass_filter(),
data.typing_detection(), data.stereo_mirroring()};
return true;
}
bool StructTraits<audio::mojom::AudioProcessingStatsDataView,
webrtc::AudioProcessorInterface::AudioProcessorStatistics>::
Read(audio::mojom::AudioProcessingStatsDataView data,
webrtc::AudioProcessorInterface::AudioProcessorStatistics* out_stats) {
out_stats->typing_noise_detected = data.typing_noise_detected();
auto& apm_stats = out_stats->apm_statistics;
apm_stats = {};
if (data.has_echo_return_loss())
apm_stats.echo_return_loss = data.echo_return_loss();
if (data.has_echo_return_loss_enhancement())
apm_stats.echo_return_loss_enhancement =
data.echo_return_loss_enhancement();
if (data.has_divergent_filter_fraction())
apm_stats.divergent_filter_fraction = data.divergent_filter_fraction();
if (data.has_delay_median_ms())
apm_stats.delay_median_ms = data.delay_median_ms();
if (data.has_delay_standard_deviation_ms())
apm_stats.delay_standard_deviation_ms = data.delay_standard_deviation_ms();
if (data.has_residual_echo_likelihood())
apm_stats.residual_echo_likelihood = data.residual_echo_likelihood();
if (data.has_residual_echo_likelihood_recent_max())
apm_stats.residual_echo_likelihood_recent_max =
data.residual_echo_likelihood_recent_max();
if (data.has_delay_ms())
apm_stats.delay_ms = data.delay_ms();
return true;
}
} // namespace mojo