blob: 8869cdf3e9b01c3121fb5accbee82584e7afc552 [file] [log] [blame]
// 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