blob: 56c5061332d5988a71c30f9f5b7abcd7826c362f [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/process_config.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "src/media/audio/audio_core/testing/matchers.h"
using media::audio::testing::VolumeMappingEq;
using testing::FloatEq;
using testing::Matcher;
using testing::Pointwise;
namespace media::audio {
namespace {
TEST(ProcessConfigTest, Build) {
auto volume_curve = VolumeCurve::DefaultForMinGain(-160.0f);
auto config = ProcessConfig::Builder().SetDefaultVolumeCurve(volume_curve).Build();
EXPECT_THAT(config.default_volume_curve().mappings(),
Pointwise(VolumeMappingEq(), volume_curve.mappings()));
}
TEST(ProcessConfigTest, LoudnessTransform) {
auto volume_curve = VolumeCurve::DefaultForMinGain(-160.0f);
auto config = ProcessConfig::Builder().SetDefaultVolumeCurve(volume_curve).Build();
auto transform = config.default_loudness_transform();
EXPECT_NE(transform, nullptr);
EXPECT_FLOAT_EQ(transform->Evaluate<1>({VolumeValue{0.}}), Gain::kMinGainDb);
EXPECT_FLOAT_EQ(transform->Evaluate<1>({VolumeValue{1.}}), Gain::kUnityGainDb);
}
TEST(ProcessConfigTest, SetInstance) {
auto volume_curve = VolumeCurve::DefaultForMinGain(-160.0f);
auto config = ProcessConfig::Builder().SetDefaultVolumeCurve(volume_curve).Build();
// Test that |set_instance|/|instance| are coherent and we can reset the instance once a handle
// goes out of scope.
{
auto handle = ProcessConfig::set_instance(config);
EXPECT_THAT(
config.default_volume_curve().mappings(),
Pointwise(VolumeMappingEq(), ProcessConfig::instance().default_volume_curve().mappings()));
}
{
auto handle = ProcessConfig::set_instance(config);
EXPECT_THAT(
config.default_volume_curve().mappings(),
Pointwise(VolumeMappingEq(), ProcessConfig::instance().default_volume_curve().mappings()));
}
}
TEST(ProcessConfigTest, CanCopy) {
auto handle = [] {
auto volume_curve = VolumeCurve::DefaultForMinGain(-160.0f);
auto config = ProcessConfig::Builder().SetDefaultVolumeCurve(volume_curve).Build();
return ProcessConfig::set_instance(config);
}();
ProcessConfig::instance().default_loudness_transform()->Evaluate<1>({VolumeValue{1}});
}
} // namespace
} // namespace media::audio