| // Copyright 2020 The Fuchsia 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 "src/media/audio/audio_core/device_config.h" |
| |
| #include <gtest/gtest.h> |
| |
| #include "src/media/audio/audio_core/process_config.h" |
| |
| namespace media::audio { |
| namespace { |
| |
| const auto kVolumeCurve = VolumeCurve::DefaultForMinGain(-160.0f); |
| const auto kConfig = ProcessConfig::Builder().SetDefaultVolumeCurve(kVolumeCurve).Build(); |
| |
| TEST(OutputDeviceProfileTest, TransformForDependentVolumeControl) { |
| const auto default_tf = kConfig.default_loudness_transform(); |
| |
| const auto eligible_for_loopback = false; |
| const auto dependent_volume_tf = |
| DeviceConfig::OutputDeviceProfile(eligible_for_loopback, /* usage_support_set */ {}, |
| kVolumeCurve, /*independent_volume_control=*/false, |
| /*pipeline_config=*/PipelineConfig::Default(), |
| /*driver_gain_db=*/0.0) |
| .loudness_transform(); |
| |
| EXPECT_FLOAT_EQ(dependent_volume_tf->Evaluate<1>({GainDbFsValue{Gain::kMinGainDb}}), |
| default_tf->Evaluate<1>({GainDbFsValue{Gain::kMinGainDb}})); |
| EXPECT_FLOAT_EQ(dependent_volume_tf->Evaluate<1>({GainDbFsValue{Gain::kMaxGainDb}}), |
| default_tf->Evaluate<1>({GainDbFsValue{Gain::kMaxGainDb}})); |
| } |
| |
| TEST(OutputDeviceProfileTest, TransformForIndependentVolumeControl) { |
| const auto default_tf = kConfig.default_loudness_transform(); |
| |
| const auto eligible_for_loopback = false; |
| const auto independent_volume_tf = |
| DeviceConfig::OutputDeviceProfile(eligible_for_loopback, /* usage_support_set */ {}, |
| kVolumeCurve, /*independent_volume_control=*/true, |
| PipelineConfig::Default(), /*driver_gain_db=*/0.0) |
| .loudness_transform(); |
| |
| EXPECT_NE(independent_volume_tf, default_tf); |
| |
| const auto no_op_tf = NoOpLoudnessTransform(); |
| EXPECT_FLOAT_EQ(independent_volume_tf->Evaluate<1>({GainDbFsValue{Gain::kMinGainDb}}), |
| no_op_tf.Evaluate<1>({GainDbFsValue{Gain::kMinGainDb}})); |
| |
| EXPECT_FLOAT_EQ(independent_volume_tf->Evaluate<1>({GainDbFsValue{Gain::kMaxGainDb}}), |
| no_op_tf.Evaluate<1>({GainDbFsValue{Gain::kMaxGainDb}})); |
| } |
| |
| TEST(DeviceProfileTest, DeviceProfileTransform) { |
| const auto handle = ProcessConfig::set_instance(kConfig); |
| |
| const auto default_tf = kConfig.default_loudness_transform(); |
| EXPECT_EQ(DeviceConfig::DeviceProfile(/* usage_support_set */ {}).loudness_transform(), |
| default_tf); |
| } |
| |
| } // namespace |
| } // namespace media::audio |