blob: a814a3b2dfc561cf384948cb8c66ae0603cf8820 [file] [log] [blame]
// 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/pipeline_config.h"
#include <gtest/gtest.h>
#include "src/media/audio/effects/test_effects/test_effects_v2.h"
#include "src/media/audio/lib/effects_loader/effects_loader_v2.h"
namespace media::audio {
namespace {
zx_status_t NopEffect(uint64_t num_frames, float* input, float* output,
float total_applied_gain_for_input,
std::vector<fuchsia_audio_effects::wire::ProcessMetrics>& metrics) {
return ZX_OK;
}
} // namespace
TEST(PipelineConfigTest, CalculateChannelsDefaultNoEffects) {
auto config = PipelineConfig::Default();
// No effects, the pipeline channelization is the same as the output of the root mix stage.
auto format = config.OutputFormat(nullptr);
EXPECT_EQ(format.sample_format(), fuchsia::media::AudioSampleFormat::FLOAT);
EXPECT_EQ(format.channels(), PipelineConfig::kDefaultMixGroupChannels);
EXPECT_EQ(format.frames_per_second(), PipelineConfig::kDefaultMixGroupRate);
}
TEST(PipelineConfigTest, CalculateChannelsV1) {
auto config = PipelineConfig::Default();
// With rechannelization effects, the last effect defines the channelization.
config.mutable_root().effects_v1.push_back(
{"lib.so", "effect", "e1", "", {PipelineConfig::kDefaultMixGroupChannels + 1}});
config.mutable_root().effects_v1.push_back(
{"lib.so", "effect", "e2", "", {PipelineConfig::kDefaultMixGroupChannels + 2}});
auto format = config.OutputFormat(nullptr);
EXPECT_EQ(format.sample_format(), fuchsia::media::AudioSampleFormat::FLOAT);
EXPECT_EQ(format.channels(), PipelineConfig::kDefaultMixGroupChannels + 2);
EXPECT_EQ(format.frames_per_second(), PipelineConfig::kDefaultMixGroupRate);
}
TEST(PipelineConfigTest, CalculateChannelsV2) {
constexpr int16_t kOutputChannelsForEffect = PipelineConfig::kDefaultMixGroupChannels + 1;
// Add a simple effect to test_effects.so.
TestEffectsV2 test_effects;
test_effects.AddEffect({
.name = "Nop",
.process = &NopEffect,
.process_in_place = false,
.max_frames_per_call = 10,
.frames_per_second = 48000,
.input_channels = 1,
.output_channels = kOutputChannelsForEffect,
});
auto loader_result = EffectsLoaderV2::CreateFromChannel(test_effects.NewClient());
ASSERT_TRUE(loader_result.is_ok());
auto config = PipelineConfig::Default();
config.mutable_root().effects_v2 = PipelineConfig::EffectV2{.instance_name = "Nop"};
auto format = config.OutputFormat(loader_result.value().get());
EXPECT_EQ(format.sample_format(), fuchsia::media::AudioSampleFormat::FLOAT);
EXPECT_EQ(format.channels(), kOutputChannelsForEffect);
EXPECT_EQ(format.frames_per_second(), PipelineConfig::kDefaultMixGroupRate);
}
} // namespace media::audio