blob: 27cf2e0d6d81dfcb2d9c7869f53c8d2da2e95612 [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/channel_attributes.h"
#include <fuchsia/media/cpp/fidl.h>
#include <vector>
#include <gtest/gtest.h>
namespace media::audio {
namespace {
constexpr uint32_t kTestAudibleFrequency = 2000;
constexpr uint32_t kTestUltrasonicFrequency = 27000;
// Return true if it overlaps the audible range at all. Must include more than just boundary value.
TEST(ChannelAttributesTest, ChannelIncludesAudible) {
EXPECT_FALSE(ChannelAttributes().IncludesAudible());
EXPECT_FALSE(ChannelAttributes(0, 0).IncludesAudible());
EXPECT_FALSE(ChannelAttributes(ChannelAttributes::kAudibleUltrasonicBoundaryHz,
fuchsia::media::MAX_PCM_FRAMES_PER_SECOND)
.IncludesAudible());
EXPECT_TRUE(ChannelAttributes(0, 1).IncludesAudible());
EXPECT_TRUE(ChannelAttributes(ChannelAttributes::kAudibleUltrasonicBoundaryHz - 1,
ChannelAttributes::kAudibleUltrasonicBoundaryHz)
.IncludesAudible());
EXPECT_TRUE(ChannelAttributes(kTestAudibleFrequency, kTestAudibleFrequency).IncludesAudible());
}
// Return true if it overlaps ultrasonic range. Must include more than just the boundary value.
TEST(ChannelAttributesTest, ChannelIncludesUltrasonic) {
EXPECT_FALSE(ChannelAttributes().IncludesUltrasonic());
EXPECT_FALSE(
ChannelAttributes(0, ChannelAttributes::kAudibleUltrasonicBoundaryHz).IncludesUltrasonic());
EXPECT_FALSE(ChannelAttributes(fuchsia::media::MAX_PCM_FRAMES_PER_SECOND / 2,
fuchsia::media::MAX_PCM_FRAMES_PER_SECOND)
.IncludesUltrasonic());
EXPECT_TRUE(ChannelAttributes(0, ChannelAttributes::kAudibleUltrasonicBoundaryHz + 1)
.IncludesUltrasonic());
EXPECT_TRUE(ChannelAttributes(fuchsia::media::MAX_PCM_FRAMES_PER_SECOND / 2 - 1,
fuchsia::media::MAX_PCM_FRAMES_PER_SECOND)
.IncludesUltrasonic());
EXPECT_TRUE(
ChannelAttributes(kTestUltrasonicFrequency, kTestUltrasonicFrequency).IncludesUltrasonic());
}
// If any channel includes any of the range, then the channel set supports audible
TEST(ChannelAttributesTest, VectorIncludesAudible) {
std::vector<ChannelAttributes> channel_attribs;
EXPECT_FALSE(ChannelAttributes::IncludesAudible(channel_attribs));
channel_attribs.push_back({0, 0});
channel_attribs.push_back(
{ChannelAttributes::kAudibleUltrasonicBoundaryHz, fuchsia::media::MAX_PCM_FRAMES_PER_SECOND});
EXPECT_FALSE(ChannelAttributes::IncludesAudible(channel_attribs));
channel_attribs.push_back({kTestAudibleFrequency, kTestAudibleFrequency});
EXPECT_TRUE(ChannelAttributes::IncludesAudible(channel_attribs));
}
// The set of channels must cover the entire ultrasonic range, contiguously
TEST(ChannelAttributesTest, VectorIncludesUltrasonic) {
std::vector<ChannelAttributes> channel_attribs;
EXPECT_FALSE(ChannelAttributes::IncludesUltrasonic(channel_attribs));
channel_attribs.push_back({0, ChannelAttributes::kAudibleUltrasonicBoundaryHz});
channel_attribs.push_back(
{fuchsia::media::MAX_PCM_FRAMES_PER_SECOND / 2, fuchsia::media::MAX_PCM_FRAMES_PER_SECOND});
EXPECT_FALSE(ChannelAttributes::IncludesUltrasonic(channel_attribs));
channel_attribs.push_back({kTestUltrasonicFrequency, kTestUltrasonicFrequency});
EXPECT_TRUE(ChannelAttributes::IncludesUltrasonic(channel_attribs));
}
} // namespace
} // namespace media::audio