blob: d8ad88e94dd21c113a05f35149f0f3b93f297622 [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 <array>
#include <gtest/gtest.h>
#include "src/media/audio/audio_core/mixer/mixer.h"
namespace media::audio::mixer {
namespace {
class StubMixer : public Mixer {
public:
StubMixer() : Mixer(Fixed(0), Fixed(0)) {}
bool Mix(float*, int64_t, int64_t*, const void*, int64_t, Fixed*, bool) final { return false; }
};
TEST(BookkeepingTest, Defaults) {
StubMixer mixer;
auto& bookkeeping = mixer.bookkeeping();
EXPECT_EQ(bookkeeping.step_size, kOneFrame);
EXPECT_EQ(bookkeeping.rate_modulo(), 0ull);
EXPECT_EQ(bookkeeping.denominator(), 1ull);
EXPECT_EQ(bookkeeping.source_pos_modulo, 0ull);
EXPECT_TRUE(bookkeeping.gain.IsUnity());
EXPECT_FALSE(bookkeeping.gain.IsSilent());
EXPECT_FALSE(bookkeeping.gain.IsRamping());
}
// Upon Reset, Bookkeeping should clear position modulo. It does not complete in-progress ramps.
TEST(BookkeepingTest, Reset) {
StubMixer mixer;
auto& bookkeeping = mixer.bookkeeping();
bookkeeping.SetRateModuloAndDenominator(5, 7);
bookkeeping.source_pos_modulo = 3;
bookkeeping.gain.SetSourceGainWithRamp(-42.0f, zx::sec(1),
fuchsia::media::audio::RampType::SCALE_LINEAR);
EXPECT_TRUE(bookkeeping.gain.IsRamping());
bookkeeping.Reset();
// Rate should not be changed, but position modulo should be.
EXPECT_EQ(bookkeeping.rate_modulo(), 5ull);
EXPECT_EQ(bookkeeping.denominator(), 7ull);
EXPECT_TRUE(bookkeeping.gain.IsRamping());
EXPECT_EQ(bookkeeping.source_pos_modulo, 0ull);
}
} // namespace
} // namespace media::audio::mixer