blob: 967e2ee9c1912767bf67fafe46da38feea6e1608 [file] [log] [blame]
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <gtest/gtest.h>
#include <media/AudioContainers.h>
namespace android {
const static AudioProfileAttributesMultimap AUDIO_PROFILE_ATTRIBUTES = {
{AUDIO_FORMAT_PCM_16_BIT, {{44100, 48000},
{AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1}}},
{AUDIO_FORMAT_PCM_16_BIT, {{96000},
{AUDIO_CHANNEL_OUT_STEREO}}},
{AUDIO_FORMAT_PCM_8_24_BIT, {{48000},
{AUDIO_CHANNEL_OUT_STEREO}}}
};
TEST(PopulateAudioProfilesTest, AllAttributesMatches) {
const AudioProfileAttributesMultimap expected = {
{AUDIO_FORMAT_PCM_16_BIT, {{44100, 48000},
{AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1}}},
{AUDIO_FORMAT_PCM_16_BIT, {{96000},
{AUDIO_CHANNEL_OUT_STEREO}}}
};
const audio_format_t format = AUDIO_FORMAT_PCM_16_BIT;
const SampleRateSet allSampleRates = {44100, 48000, 96000};
const ChannelMaskSet allChannelMasks = {AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1};
audio_profile profiles[AUDIO_PORT_MAX_AUDIO_PROFILES];
uint32_t numProfiles = 0;
populateAudioProfiles(AUDIO_PROFILE_ATTRIBUTES, format, allChannelMasks, allSampleRates,
profiles, &numProfiles);
ASSERT_EQ(expected, createAudioProfilesAttrMap(profiles, 0, numProfiles));
}
TEST(PopulateAudioProfilesTest, AttributesNotInAllValues) {
const AudioProfileAttributesMultimap expected = {
{AUDIO_FORMAT_PCM_16_BIT, {{48000},
{AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1}}},
{AUDIO_FORMAT_PCM_16_BIT, {{96000},
{AUDIO_CHANNEL_OUT_STEREO}}}
};
const audio_format_t format = AUDIO_FORMAT_PCM_16_BIT;
const SampleRateSet allSampleRates = {48000, 96000};
const ChannelMaskSet allChannelMasks = {AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1};
audio_profile profiles[AUDIO_PORT_MAX_AUDIO_PROFILES];
uint32_t numProfiles = 0;
populateAudioProfiles(AUDIO_PROFILE_ATTRIBUTES, format, allChannelMasks, allSampleRates,
profiles, &numProfiles);
ASSERT_EQ(expected, createAudioProfilesAttrMap(profiles, 0, numProfiles));
}
TEST(PopulateAudioProfilesTest, AllValuesNotInAttributes) {
const AudioProfileAttributesMultimap expected = {
{AUDIO_FORMAT_PCM_16_BIT, {{48000},
{AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1}}},
{AUDIO_FORMAT_PCM_16_BIT, {{96000},
{AUDIO_CHANNEL_OUT_STEREO}}},
{AUDIO_FORMAT_PCM_16_BIT, {{88200},
{AUDIO_CHANNEL_OUT_MONO, AUDIO_CHANNEL_OUT_STEREO,
AUDIO_CHANNEL_OUT_7POINT1}}},
{AUDIO_FORMAT_PCM_16_BIT, {{48000, 88200, 96000},
{AUDIO_CHANNEL_OUT_MONO}}}
};
const audio_format_t format = AUDIO_FORMAT_PCM_16_BIT;
const SampleRateSet allSampleRates = {48000, 88200, 96000};
const ChannelMaskSet allChannelMasks =
{AUDIO_CHANNEL_OUT_MONO, AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1};
audio_profile profiles[AUDIO_PORT_MAX_AUDIO_PROFILES];
uint32_t numProfiles = 0;
populateAudioProfiles(AUDIO_PROFILE_ATTRIBUTES, format, allChannelMasks, allSampleRates,
profiles, &numProfiles);
ASSERT_EQ(expected, createAudioProfilesAttrMap(profiles, 0, numProfiles));
}
TEST(PopulateAudioProfilesTest, NoOverflow) {
const audio_format_t format = AUDIO_FORMAT_PCM_16_BIT;
const SampleRateSet allSampleRates = {48000, 88200, 96000};
const ChannelMaskSet allChannelMasks =
{AUDIO_CHANNEL_OUT_MONO, AUDIO_CHANNEL_OUT_STEREO, AUDIO_CHANNEL_OUT_7POINT1};
audio_profile profiles[AUDIO_PORT_MAX_AUDIO_PROFILES];
const uint32_t expectedNumProfiles = 4;
for (uint32_t i = 0; i <= AUDIO_PORT_MAX_AUDIO_PROFILES; ++i) {
uint32_t numProfiles = 0;
populateAudioProfiles(AUDIO_PROFILE_ATTRIBUTES, format, allChannelMasks, allSampleRates,
profiles, &numProfiles, i);
ASSERT_EQ(std::min(i, expectedNumProfiles), numProfiles);
}
}
} // namespace android