// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. module media.mojom; // Stats from software audio processing in the audio service. Are passed upon // request from the renderer, see AudioProcessorControls::GetStats() in this // file. struct AudioProcessingStats { // TODO(https://crbug.com/657632): Numeric values cannot be optional, so add // flags for each of them. bool has_echo_return_loss; double echo_return_loss; bool has_echo_return_loss_enhancement; double echo_return_loss_enhancement; }; // Settings for the software audio processing performed in the audio service. // The settings are determined in the renderer from media constraints passed by // JavaScript clients and platform capabilities, and are passed to the audio // service where the actual processing is applied. struct AudioProcessingSettings { bool echo_cancellation; bool noise_suppression; bool transient_noise_suppression; bool automatic_gain_control; bool high_pass_filter; bool multi_channel_capture_processing; bool stereo_mirroring; bool force_apm_creation; }; // This interface is hosted in the audio service and called from the renderer. // It is only used when the audio processing is performed in the audio service. interface AudioProcessorControls { // Request the latest stats from the audio processor. At the farthest level, // this is triggered by calls from JavaScript, through some levels of // indirection. (See: https://www.w3.org/TR/webrtc-stats/). Since there are no // guarantees in the standard about the rate at which stats change, it is // reasonable to let multiple user-facing calls result in just one call to // this function. GetStats() => (AudioProcessingStats stats); // Sets a preferred number of capture audio channels. This allows the audio // processor to avoid unnecessary computational load when the number of input // audio channels exceeds what is used by the input consumers. // Values less than 1 and greater than the input stream capacity are adjusted // to the nearest valid number. SetPreferredNumCaptureChannels(int32 num_preferred_channels); }; struct AudioProcessingConfig { // Used for getting stats and controlling diagnostic audio recordings (AEC // dumps). pending_receiver controls_receiver; // Used for determining which kind of audio processing is enabled. AudioProcessingSettings settings; };