| // Copyright 2019 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/usage_settings.h" |
| |
| #include <gtest/gtest.h> |
| |
| #include "src/media/audio/audio_core/mixer/gain.h" |
| |
| namespace media::audio { |
| namespace { |
| |
| constexpr float kArbitraryGainValue = -45.0; |
| constexpr float kArbitraryGainAdjustment = -2.0; |
| |
| constexpr float kArbitraryVolumeValue = 0.14; |
| |
| TEST(UsageGainSettingsTest, RenderUsageGainPersists) { |
| UsageGainSettings under_test; |
| |
| const auto test_usage = [&under_test](auto render_usage) { |
| under_test.SetUsageGain(fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage)), |
| kArbitraryGainValue); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage))), |
| kArbitraryGainValue); |
| |
| under_test.SetUsageGainAdjustment( |
| fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage)), |
| kArbitraryGainAdjustment); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithRenderUsage(std::move(render_usage))), |
| kArbitraryGainValue + kArbitraryGainAdjustment); |
| }; |
| |
| test_usage(fuchsia::media::AudioRenderUsage::MEDIA); |
| test_usage(fuchsia::media::AudioRenderUsage::COMMUNICATION); |
| } |
| |
| TEST(UsageGainSettingsTest, RenderUsageGainPersistsComponents) { |
| UsageGainSettings under_test; |
| |
| const auto test_usage = [&under_test](auto render_usage) { |
| under_test.SetUsageGain(fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage)), |
| kArbitraryGainValue); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage))), |
| kArbitraryGainValue); |
| |
| under_test.SetUsageGainAdjustment( |
| fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage)), |
| kArbitraryGainAdjustment); |
| EXPECT_FLOAT_EQ(under_test.GetUnadjustedUsageGain( |
| fuchsia::media::Usage::WithRenderUsage(std::move(render_usage))), |
| kArbitraryGainValue); |
| }; |
| |
| test_usage(fuchsia::media::AudioRenderUsage::MEDIA); |
| test_usage(fuchsia::media::AudioRenderUsage::COMMUNICATION); |
| } |
| |
| TEST(UsageGainSettingsTest, RenderUsageGainAdjustmentPersists) { |
| UsageGainSettings under_test; |
| |
| const auto test_usage = [&under_test](auto render_usage) { |
| under_test.SetUsageGain(fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage)), |
| kArbitraryGainValue); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage))), |
| kArbitraryGainValue); |
| |
| under_test.SetUsageGainAdjustment( |
| fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage)), |
| kArbitraryGainAdjustment); |
| EXPECT_FLOAT_EQ(under_test.GetUsageGainAdjustment( |
| fuchsia::media::Usage::WithRenderUsage(std::move(render_usage))), |
| kArbitraryGainAdjustment); |
| }; |
| |
| test_usage(fuchsia::media::AudioRenderUsage::MEDIA); |
| test_usage(fuchsia::media::AudioRenderUsage::COMMUNICATION); |
| } |
| |
| TEST(UsageGainSettingsTest, CaptureUsageGainPersists) { |
| UsageGainSettings under_test; |
| |
| const auto test_usage = [&under_test](auto capture_usage) { |
| under_test.SetUsageGain(fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage)), |
| kArbitraryGainValue); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage))), |
| kArbitraryGainValue); |
| |
| under_test.SetUsageGainAdjustment( |
| fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage)), |
| kArbitraryGainAdjustment); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithCaptureUsage(std::move(capture_usage))), |
| kArbitraryGainValue + kArbitraryGainAdjustment); |
| }; |
| |
| test_usage(fuchsia::media::AudioCaptureUsage::BACKGROUND); |
| test_usage(fuchsia::media::AudioCaptureUsage::SYSTEM_AGENT); |
| } |
| |
| TEST(UsageGainSettingsTest, CaptureUsageGainPersistsComponents) { |
| UsageGainSettings under_test; |
| |
| const auto test_usage = [&under_test](auto capture_usage) { |
| under_test.SetUsageGain(fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage)), |
| kArbitraryGainValue); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage))), |
| kArbitraryGainValue); |
| |
| under_test.SetUsageGainAdjustment( |
| fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage)), |
| kArbitraryGainAdjustment); |
| EXPECT_FLOAT_EQ(under_test.GetUnadjustedUsageGain( |
| fuchsia::media::Usage::WithCaptureUsage(std::move(capture_usage))), |
| kArbitraryGainValue); |
| }; |
| |
| test_usage(fuchsia::media::AudioCaptureUsage::BACKGROUND); |
| test_usage(fuchsia::media::AudioCaptureUsage::SYSTEM_AGENT); |
| } |
| |
| TEST(UsageGainSettingsTest, CaptureUsageGainAdjustmentPersists) { |
| UsageGainSettings under_test; |
| |
| const auto test_usage = [&under_test](auto capture_usage) { |
| under_test.SetUsageGain(fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage)), |
| kArbitraryGainValue); |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain( |
| fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage))), |
| kArbitraryGainValue); |
| |
| under_test.SetUsageGainAdjustment( |
| fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage)), |
| kArbitraryGainAdjustment); |
| EXPECT_FLOAT_EQ(under_test.GetUsageGainAdjustment( |
| fuchsia::media::Usage::WithCaptureUsage(std::move(capture_usage))), |
| kArbitraryGainAdjustment); |
| }; |
| |
| test_usage(fuchsia::media::AudioCaptureUsage::BACKGROUND); |
| test_usage(fuchsia::media::AudioCaptureUsage::SYSTEM_AGENT); |
| } |
| |
| TEST(UsageGainSettingsTest, UsageGainCannotExceedUnity) { |
| const auto usage = |
| fuchsia::media::Usage::WithRenderUsage(fuchsia::media::AudioRenderUsage::SYSTEM_AGENT); |
| UsageGainSettings under_test; |
| under_test.SetUsageGain(fidl::Clone(usage), 10.0); |
| |
| EXPECT_FLOAT_EQ(under_test.GetAdjustedUsageGain(std::move(usage)), Gain::kUnityGainDb); |
| } |
| |
| TEST(UsageVolumeSettingsTest, RenderUsageVolumePersists) { |
| UsageVolumeSettings under_test; |
| |
| const auto test_usage = [&under_test](auto render_usage) { |
| under_test.SetUsageVolume(fuchsia::media::Usage::WithRenderUsage(fidl::Clone(render_usage)), |
| kArbitraryVolumeValue); |
| EXPECT_FLOAT_EQ( |
| under_test.GetUsageVolume(fuchsia::media::Usage::WithRenderUsage(std::move(render_usage))), |
| kArbitraryVolumeValue); |
| }; |
| |
| test_usage(fuchsia::media::AudioRenderUsage::BACKGROUND); |
| test_usage(fuchsia::media::AudioRenderUsage::MEDIA); |
| test_usage(fuchsia::media::AudioRenderUsage::INTERRUPTION); |
| test_usage(fuchsia::media::AudioRenderUsage::SYSTEM_AGENT); |
| test_usage(fuchsia::media::AudioRenderUsage::COMMUNICATION); |
| } |
| |
| TEST(UsageVolumeSettingsTest, CaptureUsageVolumePersists) { |
| UsageVolumeSettings under_test; |
| |
| const auto test_usage = [&under_test](auto capture_usage) { |
| under_test.SetUsageVolume(fuchsia::media::Usage::WithCaptureUsage(fidl::Clone(capture_usage)), |
| kArbitraryVolumeValue); |
| EXPECT_FLOAT_EQ(under_test.GetUsageVolume( |
| fuchsia::media::Usage::WithCaptureUsage(std::move(capture_usage))), |
| kArbitraryVolumeValue); |
| }; |
| |
| test_usage(fuchsia::media::AudioCaptureUsage::BACKGROUND); |
| test_usage(fuchsia::media::AudioCaptureUsage::SYSTEM_AGENT); |
| } |
| |
| TEST(UsageVolumeSettingsTest, DefaultVolumeIsMax) { |
| UsageVolumeSettings under_test; |
| |
| const auto test_usage = [&under_test](auto capture_usage) { |
| EXPECT_FLOAT_EQ(under_test.GetUsageVolume( |
| fuchsia::media::Usage::WithCaptureUsage(std::move(capture_usage))), |
| fuchsia::media::audio::MAX_VOLUME); |
| }; |
| |
| test_usage(fuchsia::media::AudioCaptureUsage::BACKGROUND); |
| test_usage(fuchsia::media::AudioCaptureUsage::SYSTEM_AGENT); |
| } |
| |
| } // namespace |
| } // namespace media::audio |