Merge "audio VTS: Consider only attached devices for stream tests" am: 1323e4bd90
am: 384ecfa68e
am: d511b36e35
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1895277 Change-Id: If742993c606e2577fc08ddea18cde2176099ea9e
This commit is contained in:
commit
79418d5eb7
10 changed files with 1031 additions and 30 deletions
|
@ -36,9 +36,14 @@ using namespace ::android::hardware::audio::CPP_VERSION;
|
||||||
std::vector<DeviceConfigParameter> generateOutputDeviceConfigParameters(bool oneProfilePerDevice) {
|
std::vector<DeviceConfigParameter> generateOutputDeviceConfigParameters(bool oneProfilePerDevice) {
|
||||||
std::vector<DeviceConfigParameter> result;
|
std::vector<DeviceConfigParameter> result;
|
||||||
for (const auto& device : getDeviceParameters()) {
|
for (const auto& device : getDeviceParameters()) {
|
||||||
auto module =
|
const std::string moduleName = std::get<PARAM_DEVICE_NAME>(device);
|
||||||
getCachedPolicyConfig().getModuleFromName(std::get<PARAM_DEVICE_NAME>(device));
|
auto module = getCachedPolicyConfig().getModuleFromName(moduleName);
|
||||||
for (const auto& ioProfile : module->getOutputProfiles()) {
|
for (const auto& ioProfile : module->getOutputProfiles()) {
|
||||||
|
if (getCachedPolicyConfig()
|
||||||
|
.getAttachedSinkDeviceForMixPort(moduleName, ioProfile->getName())
|
||||||
|
.empty()) {
|
||||||
|
continue; // no attached device
|
||||||
|
}
|
||||||
for (const auto& profile : ioProfile->getAudioProfiles()) {
|
for (const auto& profile : ioProfile->getAudioProfiles()) {
|
||||||
const auto& channels = profile->getChannels();
|
const auto& channels = profile->getChannels();
|
||||||
const auto& sampleRates = profile->getSampleRates();
|
const auto& sampleRates = profile->getSampleRates();
|
||||||
|
@ -94,9 +99,14 @@ const std::vector<DeviceConfigParameter>& getOutputDeviceSingleConfigParameters(
|
||||||
std::vector<DeviceConfigParameter> generateInputDeviceConfigParameters(bool oneProfilePerDevice) {
|
std::vector<DeviceConfigParameter> generateInputDeviceConfigParameters(bool oneProfilePerDevice) {
|
||||||
std::vector<DeviceConfigParameter> result;
|
std::vector<DeviceConfigParameter> result;
|
||||||
for (const auto& device : getDeviceParameters()) {
|
for (const auto& device : getDeviceParameters()) {
|
||||||
auto module =
|
const std::string moduleName = std::get<PARAM_DEVICE_NAME>(device);
|
||||||
getCachedPolicyConfig().getModuleFromName(std::get<PARAM_DEVICE_NAME>(device));
|
auto module = getCachedPolicyConfig().getModuleFromName(moduleName);
|
||||||
for (const auto& ioProfile : module->getInputProfiles()) {
|
for (const auto& ioProfile : module->getInputProfiles()) {
|
||||||
|
if (getCachedPolicyConfig()
|
||||||
|
.getAttachedSourceDeviceForMixPort(moduleName, ioProfile->getName())
|
||||||
|
.empty()) {
|
||||||
|
continue; // no attached device
|
||||||
|
}
|
||||||
for (const auto& profile : ioProfile->getAudioProfiles()) {
|
for (const auto& profile : ioProfile->getAudioProfiles()) {
|
||||||
const auto& channels = profile->getChannels();
|
const auto& channels = profile->getChannels();
|
||||||
const auto& sampleRates = profile->getSampleRates();
|
const auto& sampleRates = profile->getSampleRates();
|
||||||
|
|
|
@ -499,18 +499,10 @@ static const std::vector<DeviceConfigParameter>& getOutputDevicePcmOnlyConfigPar
|
||||||
return xsd::isLinearPcm(std::get<PARAM_CONFIG>(cfg).base.format)
|
return xsd::isLinearPcm(std::get<PARAM_CONFIG>(cfg).base.format)
|
||||||
// MMAP NOIRQ and HW A/V Sync profiles use special writing protocols.
|
// MMAP NOIRQ and HW A/V Sync profiles use special writing protocols.
|
||||||
&&
|
&&
|
||||||
std::find_if(flags.begin(), flags.end(),
|
std::find_if(flags.begin(), flags.end(), [](const auto& flag) {
|
||||||
[](const auto& flag) {
|
return flag == toString(xsd::AudioInOutFlag::AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) ||
|
||||||
return flag == toString(xsd::AudioInOutFlag::
|
flag == toString(xsd::AudioInOutFlag::AUDIO_OUTPUT_FLAG_HW_AV_SYNC);
|
||||||
AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) ||
|
}) == flags.end();
|
||||||
flag == toString(xsd::AudioInOutFlag::
|
|
||||||
AUDIO_OUTPUT_FLAG_HW_AV_SYNC);
|
|
||||||
}) == flags.end() &&
|
|
||||||
!getCachedPolicyConfig()
|
|
||||||
.getAttachedSinkDeviceForMixPort(
|
|
||||||
std::get<PARAM_DEVICE_NAME>(std::get<PARAM_DEVICE>(cfg)),
|
|
||||||
std::get<PARAM_PORT_NAME>(cfg))
|
|
||||||
.empty();
|
|
||||||
});
|
});
|
||||||
return pcmParams;
|
return pcmParams;
|
||||||
}();
|
}();
|
||||||
|
@ -677,20 +669,13 @@ static const std::vector<DeviceConfigParameter>& getInputDevicePcmOnlyConfigPara
|
||||||
// reading h/w hotword might require Soundtrigger to be active.
|
// reading h/w hotword might require Soundtrigger to be active.
|
||||||
&&
|
&&
|
||||||
std::find_if(
|
std::find_if(
|
||||||
flags.begin(), flags.end(),
|
flags.begin(), flags.end(), [](const auto& flag) {
|
||||||
[](const auto& flag) {
|
|
||||||
return flag == toString(
|
return flag == toString(
|
||||||
xsd::AudioInOutFlag::
|
xsd::AudioInOutFlag::
|
||||||
AUDIO_INPUT_FLAG_MMAP_NOIRQ) ||
|
AUDIO_INPUT_FLAG_MMAP_NOIRQ) ||
|
||||||
flag == toString(xsd::AudioInOutFlag::
|
flag == toString(xsd::AudioInOutFlag::
|
||||||
AUDIO_INPUT_FLAG_HW_HOTWORD);
|
AUDIO_INPUT_FLAG_HW_HOTWORD);
|
||||||
}) == flags.end() &&
|
}) == flags.end();
|
||||||
!getCachedPolicyConfig()
|
|
||||||
.getAttachedSourceDeviceForMixPort(
|
|
||||||
std::get<PARAM_DEVICE_NAME>(
|
|
||||||
std::get<PARAM_DEVICE>(cfg)),
|
|
||||||
std::get<PARAM_PORT_NAME>(cfg))
|
|
||||||
.empty();
|
|
||||||
});
|
});
|
||||||
return pcmParams;
|
return pcmParams;
|
||||||
}();
|
}();
|
||||||
|
|
|
@ -95,11 +95,16 @@ static AudioOffloadInfo generateOffloadInfo(const AudioConfigBase& base) {
|
||||||
std::vector<DeviceConfigParameter> generateOutputDeviceConfigParameters(bool oneProfilePerDevice) {
|
std::vector<DeviceConfigParameter> generateOutputDeviceConfigParameters(bool oneProfilePerDevice) {
|
||||||
std::vector<DeviceConfigParameter> result;
|
std::vector<DeviceConfigParameter> result;
|
||||||
for (const auto& device : getDeviceParameters()) {
|
for (const auto& device : getDeviceParameters()) {
|
||||||
auto module =
|
const std::string moduleName = std::get<PARAM_DEVICE_NAME>(device);
|
||||||
getCachedPolicyConfig().getModuleFromName(std::get<PARAM_DEVICE_NAME>(device));
|
auto module = getCachedPolicyConfig().getModuleFromName(moduleName);
|
||||||
if (!module || !module->getFirstMixPorts()) break;
|
if (!module || !module->getFirstMixPorts()) break;
|
||||||
for (const auto& mixPort : module->getFirstMixPorts()->getMixPort()) {
|
for (const auto& mixPort : module->getFirstMixPorts()->getMixPort()) {
|
||||||
if (mixPort.getRole() != xsd::Role::source) continue; // not an output profile
|
if (mixPort.getRole() != xsd::Role::source) continue; // not an output profile
|
||||||
|
if (getCachedPolicyConfig()
|
||||||
|
.getAttachedSinkDeviceForMixPort(moduleName, mixPort.getName())
|
||||||
|
.empty()) {
|
||||||
|
continue; // no attached device
|
||||||
|
}
|
||||||
auto [flags, isOffload] = generateOutFlags(mixPort);
|
auto [flags, isOffload] = generateOutFlags(mixPort);
|
||||||
for (const auto& profile : mixPort.getProfile()) {
|
for (const auto& profile : mixPort.getProfile()) {
|
||||||
if (!profile.hasFormat() || !profile.hasSamplingRates() ||
|
if (!profile.hasFormat() || !profile.hasSamplingRates() ||
|
||||||
|
@ -223,11 +228,16 @@ const std::vector<DeviceConfigParameter>& getOutputDeviceInvalidConfigParameters
|
||||||
std::vector<DeviceConfigParameter> generateInputDeviceConfigParameters(bool oneProfilePerDevice) {
|
std::vector<DeviceConfigParameter> generateInputDeviceConfigParameters(bool oneProfilePerDevice) {
|
||||||
std::vector<DeviceConfigParameter> result;
|
std::vector<DeviceConfigParameter> result;
|
||||||
for (const auto& device : getDeviceParameters()) {
|
for (const auto& device : getDeviceParameters()) {
|
||||||
auto module =
|
const std::string moduleName = std::get<PARAM_DEVICE_NAME>(device);
|
||||||
getCachedPolicyConfig().getModuleFromName(std::get<PARAM_DEVICE_NAME>(device));
|
auto module = getCachedPolicyConfig().getModuleFromName(moduleName);
|
||||||
if (!module || !module->getFirstMixPorts()) break;
|
if (!module || !module->getFirstMixPorts()) break;
|
||||||
for (const auto& mixPort : module->getFirstMixPorts()->getMixPort()) {
|
for (const auto& mixPort : module->getFirstMixPorts()->getMixPort()) {
|
||||||
if (mixPort.getRole() != xsd::Role::sink) continue; // not an input profile
|
if (mixPort.getRole() != xsd::Role::sink) continue; // not an input profile
|
||||||
|
if (getCachedPolicyConfig()
|
||||||
|
.getAttachedSourceDeviceForMixPort(moduleName, mixPort.getName())
|
||||||
|
.empty()) {
|
||||||
|
continue; // no attached device
|
||||||
|
}
|
||||||
std::vector<AudioInOutFlag> flags;
|
std::vector<AudioInOutFlag> flags;
|
||||||
if (mixPort.hasFlags()) {
|
if (mixPort.hasFlags()) {
|
||||||
std::transform(mixPort.getFlags().begin(), mixPort.getFlags().end(),
|
std::transform(mixPort.getFlags().begin(), mixPort.getFlags().end(),
|
||||||
|
|
|
@ -211,6 +211,7 @@ cc_test {
|
||||||
data: [
|
data: [
|
||||||
"tests/apm_config_no_vx.xml",
|
"tests/apm_config_no_vx.xml",
|
||||||
"tests/apm_config_with_vx.xml",
|
"tests/apm_config_with_vx.xml",
|
||||||
|
"tests/apm_config_b_205808571_6_0.xml",
|
||||||
],
|
],
|
||||||
test_config: "tests/HalAudioV6_0GeneratorTest.xml",
|
test_config: "tests/HalAudioV6_0GeneratorTest.xml",
|
||||||
}
|
}
|
||||||
|
@ -240,6 +241,7 @@ cc_test {
|
||||||
"tests/apm_config_no_vx_7_0.xml",
|
"tests/apm_config_no_vx_7_0.xml",
|
||||||
"tests/apm_config_with_vx_7_0.xml",
|
"tests/apm_config_with_vx_7_0.xml",
|
||||||
"tests/apm_config_b_204314749_7_0.xml",
|
"tests/apm_config_b_204314749_7_0.xml",
|
||||||
|
"tests/apm_config_b_205808571_7_0.xml",
|
||||||
],
|
],
|
||||||
test_config: "tests/HalAudioV7_0GeneratorTest.xml",
|
test_config: "tests/HalAudioV7_0GeneratorTest.xml",
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,16 @@ class PolicyConfig : private PolicyConfigData, public android::AudioPolicyConfig
|
||||||
const std::set<std::string>& getModulesWithDevicesNames() const {
|
const std::set<std::string>& getModulesWithDevicesNames() const {
|
||||||
return mModulesWithDevicesNames;
|
return mModulesWithDevicesNames;
|
||||||
}
|
}
|
||||||
|
std::string getAttachedSinkDeviceForMixPort(const std::string& moduleName,
|
||||||
|
const std::string& mixPortName) const {
|
||||||
|
return findAttachedDevice(getAttachedDevices(moduleName),
|
||||||
|
getSinkDevicesForMixPort(moduleName, mixPortName));
|
||||||
|
}
|
||||||
|
std::string getAttachedSourceDeviceForMixPort(const std::string& moduleName,
|
||||||
|
const std::string& mixPortName) const {
|
||||||
|
return findAttachedDevice(getAttachedDevices(moduleName),
|
||||||
|
getSourceDevicesForMixPort(moduleName, mixPortName));
|
||||||
|
}
|
||||||
bool haveInputProfilesInModule(const std::string& name) const {
|
bool haveInputProfilesInModule(const std::string& name) const {
|
||||||
auto module = getModuleFromName(name);
|
auto module = getModuleFromName(name);
|
||||||
return module && !module->getInputProfiles().empty();
|
return module && !module->getInputProfiles().empty();
|
||||||
|
@ -92,6 +102,8 @@ class PolicyConfig : private PolicyConfigData, public android::AudioPolicyConfig
|
||||||
for (const auto& module : hwModules) {
|
for (const auto& module : hwModules) {
|
||||||
if (module->getDeclaredDevices().indexOf(device) >= 0) {
|
if (module->getDeclaredDevices().indexOf(device) >= 0) {
|
||||||
mModulesWithDevicesNames.insert(module->getName());
|
mModulesWithDevicesNames.insert(module->getName());
|
||||||
|
mAttachedDevicesPerModule[module->getName()].push_back(
|
||||||
|
device->getTagName());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,16 +112,64 @@ class PolicyConfig : private PolicyConfigData, public android::AudioPolicyConfig
|
||||||
for (const auto& module : hwModules) {
|
for (const auto& module : hwModules) {
|
||||||
if (module->getDeclaredDevices().indexOf(device) >= 0) {
|
if (module->getDeclaredDevices().indexOf(device) >= 0) {
|
||||||
mModulesWithDevicesNames.insert(module->getName());
|
mModulesWithDevicesNames.insert(module->getName());
|
||||||
|
mAttachedDevicesPerModule[module->getName()].push_back(
|
||||||
|
device->getTagName());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
std::string findAttachedDevice(const std::vector<std::string>& attachedDevices,
|
||||||
|
const std::set<std::string>& possibleDevices) const {
|
||||||
|
for (const auto& device : attachedDevices) {
|
||||||
|
if (possibleDevices.count(device)) return device;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
std::vector<std::string> getAttachedDevices(const std::string& moduleName) const {
|
||||||
|
if (auto iter = mAttachedDevicesPerModule.find(moduleName);
|
||||||
|
iter != mAttachedDevicesPerModule.end()) {
|
||||||
|
return iter->second;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
std::set<std::string> getSinkDevicesForMixPort(const std::string& moduleName,
|
||||||
|
const std::string& mixPortName) const {
|
||||||
|
std::set<std::string> result;
|
||||||
|
auto module = getModuleFromName(moduleName);
|
||||||
|
if (module != nullptr) {
|
||||||
|
for (const auto& route : module->getRoutes()) {
|
||||||
|
for (const auto& source : route->getSources()) {
|
||||||
|
if (source->getTagName() == mixPortName) {
|
||||||
|
result.insert(route->getSink()->getTagName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
std::set<std::string> getSourceDevicesForMixPort(const std::string& moduleName,
|
||||||
|
const std::string& mixPortName) const {
|
||||||
|
std::set<std::string> result;
|
||||||
|
auto module = getModuleFromName(moduleName);
|
||||||
|
if (module != nullptr) {
|
||||||
|
for (const auto& route : module->getRoutes()) {
|
||||||
|
if (route->getSink()->getTagName() == mixPortName) {
|
||||||
|
const auto& sources = route->getSources();
|
||||||
|
std::transform(sources.begin(), sources.end(),
|
||||||
|
std::inserter(result, result.end()),
|
||||||
|
[](const auto& source) { return source->getTagName(); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string mConfigFileName;
|
const std::string mConfigFileName;
|
||||||
status_t mStatus = android::NO_INIT;
|
status_t mStatus = android::NO_INIT;
|
||||||
std::string mFilePath;
|
std::string mFilePath;
|
||||||
sp<const android::HwModule> mPrimaryModule = nullptr;
|
sp<const android::HwModule> mPrimaryModule = nullptr;
|
||||||
std::set<std::string> mModulesWithDevicesNames;
|
std::set<std::string> mModulesWithDevicesNames;
|
||||||
|
std::map<std::string, std::vector<std::string>> mAttachedDevicesPerModule;
|
||||||
};
|
};
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
<option name="cleanup" value="true" />
|
<option name="cleanup" value="true" />
|
||||||
<option name="push" value="apm_config_no_vx.xml->/data/local/tmp/apm_config_no_vx.xml" />
|
<option name="push" value="apm_config_no_vx.xml->/data/local/tmp/apm_config_no_vx.xml" />
|
||||||
<option name="push" value="apm_config_with_vx.xml->/data/local/tmp/apm_config_with_vx.xml" />
|
<option name="push" value="apm_config_with_vx.xml->/data/local/tmp/apm_config_with_vx.xml" />
|
||||||
|
<option name="push" value="apm_config_b_205808571_6_0.xml->/data/local/tmp/apm_config_b_205808571_6_0.xml" />
|
||||||
<option name="push" value="HalAudioV6_0GeneratorTest->/data/local/tmp/HalAudioV6_0GeneratorTest" />
|
<option name="push" value="HalAudioV6_0GeneratorTest->/data/local/tmp/HalAudioV6_0GeneratorTest" />
|
||||||
</target_preparer>
|
</target_preparer>
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
<option name="push" value="apm_config_no_vx_7_0.xml->/data/local/tmp/apm_config_no_vx.xml" />
|
<option name="push" value="apm_config_no_vx_7_0.xml->/data/local/tmp/apm_config_no_vx.xml" />
|
||||||
<option name="push" value="apm_config_with_vx_7_0.xml->/data/local/tmp/apm_config_with_vx.xml" />
|
<option name="push" value="apm_config_with_vx_7_0.xml->/data/local/tmp/apm_config_with_vx.xml" />
|
||||||
<option name="push" value="apm_config_b_204314749_7_0.xml->/data/local/tmp/apm_config_b_204314749_7_0.xml" />
|
<option name="push" value="apm_config_b_204314749_7_0.xml->/data/local/tmp/apm_config_b_204314749_7_0.xml" />
|
||||||
|
<option name="push" value="apm_config_b_205808571_7_0.xml->/data/local/tmp/apm_config_b_205808571_7_0.xml" />
|
||||||
<option name="push" value="HalAudioV7_0GeneratorTest->/data/local/tmp/HalAudioV7_0GeneratorTest" />
|
<option name="push" value="HalAudioV7_0GeneratorTest->/data/local/tmp/HalAudioV7_0GeneratorTest" />
|
||||||
</target_preparer>
|
</target_preparer>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,451 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<!-- Copyright (c) 2016-2021, The Linux Foundation. All rights reserved
|
||||||
|
Not a Contribution.
|
||||||
|
-->
|
||||||
|
<!-- Copyright (C) 2015 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||||
|
<!-- version section contains a “version” tag in the form “major.minor” e.g. version=”1.0” -->
|
||||||
|
|
||||||
|
<!-- Global configuration Decalaration -->
|
||||||
|
<globalConfiguration speaker_drc_enabled="true" call_screen_mode_supported="true"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Modules section:
|
||||||
|
There is one section per audio HW module present on the platform.
|
||||||
|
Each module section will contains two mandatory tags for audio HAL “halVersion” and “name”.
|
||||||
|
The module names are the same as in current .conf file:
|
||||||
|
“primary”, “A2DP”, “remote_submix”, “USB”
|
||||||
|
Each module will contain the following sections:
|
||||||
|
“devicePorts”: a list of device descriptors for all input and output devices accessible via this
|
||||||
|
module.
|
||||||
|
This contains both permanently attached devices and removable devices.
|
||||||
|
“mixPorts”: listing all output and input streams exposed by the audio HAL
|
||||||
|
“routes”: list of possible connections between input and output devices or between stream and
|
||||||
|
devices.
|
||||||
|
"route": is defined by an attribute:
|
||||||
|
-"type": <mux|mix> means all sources are mutual exclusive (mux) or can be mixed (mix)
|
||||||
|
-"sink": the sink involved in this route
|
||||||
|
-"sources": all the sources than can be connected to the sink via vis route
|
||||||
|
“attachedDevices”: permanently attached devices.
|
||||||
|
The attachedDevices section is a list of devices names. The names correspond to device names
|
||||||
|
defined in <devicePorts> section.
|
||||||
|
“defaultOutputDevice”: device to be used by default when no policy rule applies
|
||||||
|
-->
|
||||||
|
<modules>
|
||||||
|
<!-- Primary Audio HAL -->
|
||||||
|
<module name="primary" halVersion="2.0">
|
||||||
|
<attachedDevices>
|
||||||
|
<item>Earpiece</item>
|
||||||
|
<item>Speaker</item>
|
||||||
|
<item>Telephony Tx</item>
|
||||||
|
<item>Built-In Mic</item>
|
||||||
|
<item>Built-In Back Mic</item>
|
||||||
|
<item>FM Tuner</item>
|
||||||
|
<item>Telephony Rx</item>
|
||||||
|
</attachedDevices>
|
||||||
|
<defaultOutputDevice>Speaker</defaultOutputDevice>
|
||||||
|
<mixPorts>
|
||||||
|
<mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="raw" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="haptics output" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="deep_buffer" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DEEP_BUFFER">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="mmap_no_irq_out" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="hifi_playback" role="source" />
|
||||||
|
<mixPort name="compress_passthrough" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING">
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="direct_pcm" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800,384000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800,384000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800,384000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="compressed_offload" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_MP3"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_FLAC"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_ALAC"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_APE"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_LC"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_HE_V1"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_DTS"
|
||||||
|
samplingRates="32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_DTS_HD"
|
||||||
|
samplingRates="32000,44100,48000,64000,88200,96000,128000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_WMA"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_WMA_PRO"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_VORBIS"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_ADTS_LC"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V1"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V2"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voice_tx" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voip_rx" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_VOIP_RX">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="incall_music_uplink" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_INCALL_MUSIC">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
|
||||||
|
<mixPort name="primary input" role="sink" maxOpenCount="2" maxActiveCount="2">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="fast input" role="sink"
|
||||||
|
flags="AUDIO_INPUT_FLAG_FAST">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="quad mic" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voip_tx" role="sink"
|
||||||
|
flags="AUDIO_INPUT_FLAG_VOIP_TX">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="usb_surround_sound" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="record_24" role="sink" maxOpenCount="2" maxActiveCount="2">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voice_rx" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="mmap_no_irq_in" role="sink" flags="AUDIO_INPUT_FLAG_MMAP_NOIRQ">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="hifi_input" role="sink" />
|
||||||
|
</mixPorts>
|
||||||
|
|
||||||
|
<devicePorts>
|
||||||
|
<!-- Output devices declaration, i.e. Sink DEVICE PORT -->
|
||||||
|
<devicePort tagName="Earpiece" type="AUDIO_DEVICE_OUT_EARPIECE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER" address="">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Wired Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Line" type="AUDIO_DEVICE_OUT_LINE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO Car Kit" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="HDMI" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Proxy" type="AUDIO_DEVICE_OUT_PROXY" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="FM" type="AUDIO_DEVICE_OUT_FM" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
|
||||||
|
encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"
|
||||||
|
encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"
|
||||||
|
encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Device Out" type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"/>
|
||||||
|
</devicePort>
|
||||||
|
|
||||||
|
<!-- Input devices declaration, i.e. Source DEVICE PORT -->
|
||||||
|
<devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Built-In Back Mic" type="AUDIO_DEVICE_IN_BACK_MIC" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="FM Tuner" type="AUDIO_DEVICE_IN_FM_TUNER" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO Headset Mic" type="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Telephony Rx" type="AUDIO_DEVICE_IN_TELEPHONY_RX" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Device In" type="AUDIO_DEVICE_IN_USB_DEVICE" role="source">
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source"
|
||||||
|
encodedFormats="VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
|
||||||
|
</devicePorts>
|
||||||
|
<!-- route declaration, i.e. list all available sources for a given sink -->
|
||||||
|
<routes>
|
||||||
|
<route type="mix" sink="Earpiece"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Speaker"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Wired Headset"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Wired Headphones"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Line"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="HDMI"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,compress_passthrough,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="Proxy"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,haptics output"/>
|
||||||
|
<route type="mix" sink="FM"
|
||||||
|
sources="primary output"/>
|
||||||
|
<route type="mix" sink="BT SCO"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT SCO Headset"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT SCO Car Kit"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="USB Device Out"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback,haptics output"/>
|
||||||
|
<route type="mix" sink="USB Headset Out"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback,haptics output"/>
|
||||||
|
<route type="mix" sink="Telephony Tx"
|
||||||
|
sources="voice_tx,incall_music_uplink"/>
|
||||||
|
<route type="mix" sink="voice_rx"
|
||||||
|
sources="Telephony Rx"/>
|
||||||
|
<route type="mix" sink="primary input"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx,A2DP In"/>
|
||||||
|
<route type="mix" sink="usb_surround_sound"
|
||||||
|
sources="USB Device In,USB Headset In"/>
|
||||||
|
<route type="mix" sink="fast input"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,Wired Headset Mic"/>
|
||||||
|
<route type="mix" sink="quad mic"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,Wired Headset Mic"/>
|
||||||
|
<route type="mix" sink="voip_tx"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,USB Device In,USB Headset In,Wired Headset Mic"/>
|
||||||
|
<route type="mix" sink="record_24"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,A2DP In"/>
|
||||||
|
<route type="mix" sink="mmap_no_irq_in"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
|
||||||
|
<route type="mix" sink="BT A2DP Out"
|
||||||
|
sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT A2DP Headphones"
|
||||||
|
sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT A2DP Speaker"
|
||||||
|
sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
|
||||||
|
</routes>
|
||||||
|
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- A2DP Audio HAL -->
|
||||||
|
<module name="a2dp" halVersion="2.0">
|
||||||
|
<mixPorts>
|
||||||
|
<mixPort name="a2dp input" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
</mixPorts>
|
||||||
|
|
||||||
|
<devicePorts>
|
||||||
|
<devicePort tagName="BT A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
</devicePorts>
|
||||||
|
|
||||||
|
<routes>
|
||||||
|
<route type="mix" sink="a2dp input"
|
||||||
|
sources="BT A2DP In"/>
|
||||||
|
</routes>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Usb Audio HAL -->
|
||||||
|
<module name="usb" halVersion="2.0">
|
||||||
|
<mixPorts>
|
||||||
|
<mixPort name="usb_accessory output" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
</mixPorts>
|
||||||
|
<devicePorts>
|
||||||
|
<devicePort tagName="USB Host Out" type="AUDIO_DEVICE_OUT_USB_ACCESSORY" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
</devicePorts>
|
||||||
|
<routes>
|
||||||
|
<route type="mix" sink="USB Host Out"
|
||||||
|
sources="usb_accessory output"/>
|
||||||
|
</routes>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Remote Submix Audio HAL -->
|
||||||
|
<!-- <xi:include href="/vendor/etc/r_submix_audio_policy_configuration.xml"/> -->
|
||||||
|
|
||||||
|
<!-- Bluetooth Audio HAL for hearing aid -->
|
||||||
|
<!-- <xi:include href="/vendor/etc/bluetooth_qti_hearing_aid_audio_policy_configuration.xml"/> -->
|
||||||
|
|
||||||
|
</modules>
|
||||||
|
<!-- End of Modules section -->
|
||||||
|
|
||||||
|
<!-- Volume section -->
|
||||||
|
|
||||||
|
<!-- <xi:include href="/vendor/etc/audio_policy_volumes.xml"/> -->
|
||||||
|
<!-- <xi:include href="/vendor/etc/default_volume_tables.xml"/> -->
|
||||||
|
|
||||||
|
<!-- End of Volume section -->
|
||||||
|
|
||||||
|
</audioPolicyConfiguration>
|
|
@ -0,0 +1,446 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<!-- Copyright (c) 2016-2021, The Linux Foundation. All rights reserved
|
||||||
|
Not a Contribution.
|
||||||
|
-->
|
||||||
|
<!-- Copyright (C) 2015 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<audioPolicyConfiguration version="7.0" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||||
|
<!-- version section contains a “version” tag in the form “major.minor” e.g. version=”1.0” -->
|
||||||
|
|
||||||
|
<!-- Global configuration Decalaration -->
|
||||||
|
<globalConfiguration speaker_drc_enabled="true" call_screen_mode_supported="true"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Modules section:
|
||||||
|
There is one section per audio HW module present on the platform.
|
||||||
|
Each module section will contains two mandatory tags for audio HAL “halVersion” and “name”.
|
||||||
|
The module names are the same as in current .conf file:
|
||||||
|
“primary”, “A2DP”, “remote_submix”, “USB”
|
||||||
|
Each module will contain the following sections:
|
||||||
|
“devicePorts”: a list of device descriptors for all input and output devices accessible via this
|
||||||
|
module.
|
||||||
|
This contains both permanently attached devices and removable devices.
|
||||||
|
“mixPorts”: listing all output and input streams exposed by the audio HAL
|
||||||
|
“routes”: list of possible connections between input and output devices or between stream and
|
||||||
|
devices.
|
||||||
|
"route": is defined by an attribute:
|
||||||
|
-"type": <mux|mix> means all sources are mutual exclusive (mux) or can be mixed (mix)
|
||||||
|
-"sink": the sink involved in this route
|
||||||
|
-"sources": all the sources than can be connected to the sink via vis route
|
||||||
|
“attachedDevices”: permanently attached devices.
|
||||||
|
The attachedDevices section is a list of devices names. The names correspond to device names
|
||||||
|
defined in <devicePorts> section.
|
||||||
|
“defaultOutputDevice”: device to be used by default when no policy rule applies
|
||||||
|
-->
|
||||||
|
<modules>
|
||||||
|
<!-- Primary Audio HAL -->
|
||||||
|
<module name="primary" halVersion="2.0">
|
||||||
|
<attachedDevices>
|
||||||
|
<item>Earpiece</item>
|
||||||
|
<item>Speaker</item>
|
||||||
|
<item>Telephony Tx</item>
|
||||||
|
<item>Built-In Mic</item>
|
||||||
|
<item>Built-In Back Mic</item>
|
||||||
|
<item>FM Tuner</item>
|
||||||
|
<item>Telephony Rx</item>
|
||||||
|
</attachedDevices>
|
||||||
|
<defaultOutputDevice>Speaker</defaultOutputDevice>
|
||||||
|
<mixPorts>
|
||||||
|
<mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_FAST AUDIO_OUTPUT_FLAG_PRIMARY">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="raw" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_FAST AUDIO_OUTPUT_FLAG_RAW">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="haptics output" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="deep_buffer" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DEEP_BUFFER">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="mmap_no_irq_out" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_MMAP_NOIRQ">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="hifi_playback" role="source" />
|
||||||
|
<mixPort name="compress_passthrough" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD AUDIO_OUTPUT_FLAG_NON_BLOCKING">
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="direct_pcm" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000 352800 384000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000 352800 384000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000 352800 384000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="compressed_offload" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD AUDIO_OUTPUT_FLAG_NON_BLOCKING">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_MP3"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_FLAC"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_ALAC"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_APE"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_LC"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_HE_V1"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_DTS"
|
||||||
|
samplingRates="32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_DTS_HD"
|
||||||
|
samplingRates="32000 44100 48000 64000 88200 96000 128000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_WMA"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_WMA_PRO"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_2POINT1 AUDIO_CHANNEL_OUT_QUAD AUDIO_CHANNEL_OUT_PENTA AUDIO_CHANNEL_OUT_5POINT1 AUDIO_CHANNEL_OUT_6POINT1 AUDIO_CHANNEL_OUT_7POINT1"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_VORBIS"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000 128000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_ADTS_LC"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V1"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V2"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 64000 88200 96000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voice_tx" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000 48000" channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voip_rx" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_VOIP_RX">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000 32000 48000" channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="incall_music_uplink" role="source"
|
||||||
|
flags="AUDIO_OUTPUT_FLAG_INCALL_MUSIC">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
|
||||||
|
<mixPort name="primary input" role="sink" maxOpenCount="2" maxActiveCount="2">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="fast input" role="sink"
|
||||||
|
flags="AUDIO_INPUT_FLAG_FAST">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="quad mic" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voip_tx" role="sink"
|
||||||
|
flags="AUDIO_INPUT_FLAG_VOIP_TX">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000 32000 48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="usb_surround_sound" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 88200 96000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK AUDIO_CHANNEL_INDEX_MASK_3 AUDIO_CHANNEL_INDEX_MASK_4 AUDIO_CHANNEL_IN_5POINT1 AUDIO_CHANNEL_INDEX_MASK_6"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 88200 96000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_5POINT1 AUDIO_CHANNEL_INDEX_MASK_6"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 88200 96000 176400 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_5POINT1 AUDIO_CHANNEL_INDEX_MASK_6"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="record_24" role="sink" maxOpenCount="2" maxActiveCount="2">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 96000 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK AUDIO_CHANNEL_INDEX_MASK_3 AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 96000 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK AUDIO_CHANNEL_INDEX_MASK_3 AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000 96000 192000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK AUDIO_CHANNEL_INDEX_MASK_3 AUDIO_CHANNEL_INDEX_MASK_4"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="voice_rx" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000 48000" channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="mmap_no_irq_in" role="sink" flags="AUDIO_INPUT_FLAG_MMAP_NOIRQ">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK AUDIO_CHANNEL_INDEX_MASK_3"/>
|
||||||
|
</mixPort>
|
||||||
|
<mixPort name="hifi_input" role="sink" />
|
||||||
|
</mixPorts>
|
||||||
|
|
||||||
|
<devicePorts>
|
||||||
|
<!-- Output devices declaration, i.e. Sink DEVICE PORT -->
|
||||||
|
<devicePort tagName="Earpiece" type="AUDIO_DEVICE_OUT_EARPIECE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER" address="">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Wired Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Line" type="AUDIO_DEVICE_OUT_LINE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO Car Kit" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="HDMI" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 16000 22050 32000 44100 48000 64000 88200 96000 128000 176400 192000"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Proxy" type="AUDIO_DEVICE_OUT_PROXY" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 16000 22050 32000 44100 48000 64000 88200 96000 128000 176400 192000"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="FM" type="AUDIO_DEVICE_OUT_FM" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
|
||||||
|
encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"
|
||||||
|
encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"
|
||||||
|
encodedFormats="AUDIO_FORMAT_SBC AUDIO_FORMAT_AAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_LDAC AUDIO_FORMAT_CELT AUDIO_FORMAT_APTX_ADAPTIVE AUDIO_FORMAT_APTX_TWSP VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Device Out" type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100 48000 64000 88200 96000 128000 176400 192000"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100 48000 64000 88200 96000 128000 176400 192000"/>
|
||||||
|
</devicePort>
|
||||||
|
|
||||||
|
<!-- Input devices declaration, i.e. Source DEVICE PORT -->
|
||||||
|
<devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Built-In Back Mic" type="AUDIO_DEVICE_IN_BACK_MIC" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="FM Tuner" type="AUDIO_DEVICE_IN_FM_TUNER" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000"
|
||||||
|
channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="BT SCO Headset Mic" type="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="Telephony Rx" type="AUDIO_DEVICE_IN_TELEPHONY_RX" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="8000 16000 48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Device In" type="AUDIO_DEVICE_IN_USB_DEVICE" role="source">
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
|
||||||
|
</devicePort>
|
||||||
|
<devicePort tagName="A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source"
|
||||||
|
encodedFormats="VX_AUDIO_FORMAT_LC3">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100 48000" channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
|
||||||
|
</devicePorts>
|
||||||
|
<!-- route declaration, i.e. list all available sources for a given sink -->
|
||||||
|
<routes>
|
||||||
|
<route type="mix" sink="Earpiece"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Speaker"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Wired Headset"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Wired Headphones"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="Line"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,haptics output"/>
|
||||||
|
<route type="mix" sink="HDMI"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,compress_passthrough,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="Proxy"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,haptics output"/>
|
||||||
|
<route type="mix" sink="FM"
|
||||||
|
sources="primary output"/>
|
||||||
|
<route type="mix" sink="BT SCO"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT SCO Headset"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT SCO Car Kit"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="USB Device Out"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback,haptics output"/>
|
||||||
|
<route type="mix" sink="USB Headset Out"
|
||||||
|
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback,haptics output"/>
|
||||||
|
<route type="mix" sink="Telephony Tx"
|
||||||
|
sources="voice_tx,incall_music_uplink"/>
|
||||||
|
<route type="mix" sink="voice_rx"
|
||||||
|
sources="Telephony Rx"/>
|
||||||
|
<route type="mix" sink="primary input"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx,A2DP In"/>
|
||||||
|
<route type="mix" sink="usb_surround_sound"
|
||||||
|
sources="USB Device In,USB Headset In"/>
|
||||||
|
<route type="mix" sink="fast input"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,Wired Headset Mic"/>
|
||||||
|
<route type="mix" sink="quad mic"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,Wired Headset Mic"/>
|
||||||
|
<route type="mix" sink="voip_tx"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,USB Device In,USB Headset In,Wired Headset Mic"/>
|
||||||
|
<route type="mix" sink="record_24"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,A2DP In"/>
|
||||||
|
<route type="mix" sink="mmap_no_irq_in"
|
||||||
|
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
|
||||||
|
<route type="mix" sink="BT A2DP Out"
|
||||||
|
sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT A2DP Headphones"
|
||||||
|
sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="BT A2DP Speaker"
|
||||||
|
sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx,haptics output"/>
|
||||||
|
<route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
|
||||||
|
</routes>
|
||||||
|
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- A2DP Audio HAL -->
|
||||||
|
<module name="a2dp" halVersion="2.0">
|
||||||
|
<mixPorts>
|
||||||
|
<mixPort name="a2dp input" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100 48000" channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
</mixPorts>
|
||||||
|
|
||||||
|
<devicePorts>
|
||||||
|
<devicePort tagName="BT A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100 48000" channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
</devicePorts>
|
||||||
|
|
||||||
|
<routes>
|
||||||
|
<route type="mix" sink="a2dp input"
|
||||||
|
sources="BT A2DP In"/>
|
||||||
|
</routes>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Usb Audio HAL -->
|
||||||
|
<module name="usb" halVersion="2.0">
|
||||||
|
<mixPorts>
|
||||||
|
<mixPort name="usb_accessory output" role="source">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</mixPort>
|
||||||
|
</mixPorts>
|
||||||
|
<devicePorts>
|
||||||
|
<devicePort tagName="USB Host Out" type="AUDIO_DEVICE_OUT_USB_ACCESSORY" role="sink">
|
||||||
|
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
</devicePort>
|
||||||
|
</devicePorts>
|
||||||
|
<routes>
|
||||||
|
<route type="mix" sink="USB Host Out"
|
||||||
|
sources="usb_accessory output"/>
|
||||||
|
</routes>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Remote Submix Audio HAL -->
|
||||||
|
|
||||||
|
<!-- Bluetooth Audio HAL for hearing aid -->
|
||||||
|
|
||||||
|
</modules>
|
||||||
|
<!-- End of Modules section -->
|
||||||
|
|
||||||
|
<!-- Volume section -->
|
||||||
|
|
||||||
|
<!-- End of Volume section -->
|
||||||
|
|
||||||
|
</audioPolicyConfiguration>
|
|
@ -131,8 +131,43 @@ TEST_P(GeneratorsTest, ValidateConfigs) {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
INSTANTIATE_TEST_SUITE_P(Generators, GeneratorsTest,
|
INSTANTIATE_TEST_SUITE_P(Generators, GeneratorsTest,
|
||||||
::testing::Values("apm_config_no_vx.xml", "apm_config_with_vx.xml"
|
::testing::Values("apm_config_no_vx.xml", "apm_config_with_vx.xml"
|
||||||
#if MAJOR_VERSION == 7
|
#if MAJOR_VERSION == 6
|
||||||
|
, "apm_config_b_205808571_6_0.xml"
|
||||||
|
#elif MAJOR_VERSION == 7
|
||||||
, "apm_config_b_204314749_7_0.xml"
|
, "apm_config_b_204314749_7_0.xml"
|
||||||
|
, "apm_config_b_205808571_7_0.xml"
|
||||||
#endif
|
#endif
|
||||||
));
|
));
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
TEST(GeneratorsDeviceTest, AttachedDevicesOnly) {
|
||||||
|
static const std::string kTestFile =
|
||||||
|
"apm_config_b_205808571_" STRINGIFY(MAJOR_VERSION) "_0.xml";
|
||||||
|
ASSERT_TRUE(PolicyConfigManager::getInstance().init(kDataDir, kTestFile));
|
||||||
|
EXPECT_NE(nullptr, getCachedPolicyConfig().getPrimaryModule());
|
||||||
|
const auto allInConfigs = generateInputDeviceConfigParameters(false /*oneProfilePerDevice*/);
|
||||||
|
EXPECT_FALSE(allInConfigs.empty());
|
||||||
|
for (const auto& configParam : allInConfigs) {
|
||||||
|
const AudioConfig& config = std::get<PARAM_CONFIG>(configParam);
|
||||||
|
// The config contains multichannel masks for mixPort connected to
|
||||||
|
// input devicePorts that are not attached. These multichannel masks must
|
||||||
|
// not appear among generated masks.
|
||||||
|
const uint32_t channelCount =
|
||||||
|
#if MAJOR_VERSION == 6
|
||||||
|
audio_channel_count_from_in_mask(
|
||||||
|
static_cast<audio_channel_mask_t>(config.channelMask));
|
||||||
|
#elif MAJOR_VERSION == 7
|
||||||
|
xsd::getChannelCount(config.base.channelMask);
|
||||||
|
#endif
|
||||||
|
EXPECT_TRUE(channelCount <= 4) << "Unexpected channel count: " << channelCount << " " <<
|
||||||
|
#if MAJOR_VERSION == 6
|
||||||
|
::testing::PrintToString(config.format) << ", "
|
||||||
|
<< ::testing::PrintToString(config.sampleRateHz) << ", "
|
||||||
|
<< ::testing::PrintToString(config.channelMask);
|
||||||
|
#elif MAJOR_VERSION == 7
|
||||||
|
::testing::PrintToString(config.base.format) << ", "
|
||||||
|
<< ::testing::PrintToString(config.base.sampleRateHz) << ", "
|
||||||
|
<< ::testing::PrintToString(config.base.channelMask);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue