| // Copyright (c) 2021 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. |
| // |
| // Volume range definition and UMA logging utilities for |
| // `IAudioEndpointVolume::GetVolumeRange()`. |
| // |
| // Implementation notes: |
| // - The minimum supported client is Windows Vista. |
| |
| #ifndef MEDIA_AUDIO_WIN_VOLUME_RANGE_UTIL_H_ |
| #define MEDIA_AUDIO_WIN_VOLUME_RANGE_UTIL_H_ |
| |
| #include "media/base/media_export.h" |
| #include "third_party/abseil-cpp/absl/types/optional.h" |
| |
| namespace media { |
| |
| // Microphone volume range in decibels. |
| struct VolumeRange { |
| float min_volume_db; // Range minimum. |
| float max_volume_db; // Range maximum. |
| // The range above is divided into N uniform intervals of size |
| // `volume_step_db`. |
| float volume_step_db; |
| }; |
| |
| // Logs `Media.Audio.Capture.Win.VolumeRange*` UMA histograms. |
| // `Media.Audio.Capture.Win.VolumeRangeAvailable` is always logged; the logged |
| // value reflects whether `range` is specified. When specified, the volume range |
| // and the number of steps are also logged as follows. `range.min_volume_db` and |
| // `range.max_volume_db` are logged as `Media.Audio.Capture.Win.VolumeRangeMin2` |
| // and `Media.Audio.Capture.Win.VolumeRangeMax2` respectively by casting the |
| // original values to an integer, by clamping in the [-60, 60] range, and by |
| // adding a 60 dB offset in order to log positive values - required by the UMA |
| // histograms framework. The value for |
| // `Media.Audio.Capture.Win.VolumeRangeNumSteps` is computed as |
| // (`range.max_volume_db` - `range.min_volume_db` / `volume_step_db`) and it is |
| // clamped to 2000. |
| MEDIA_EXPORT void LogVolumeRangeUmaHistograms( |
| absl::optional<VolumeRange> range); |
| |
| } // namespace media |
| |
| #endif // MEDIA_AUDIO_WIN_VOLUME_RANGE_UTIL_H_ |