Android音频子系统分析-audio_policy_configuration.xml

先附上一个高通的例子,再解释内容。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) 2016-2017, 2019, 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">
                    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
                </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 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_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="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="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">
                    <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="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="record_24" role="sink">
                    <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_OUT_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">
                    <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">
                    <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">
                    <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>

            </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"/>
                <route type="mix" sink="Speaker"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                <route type="mix" sink="Wired Headset"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                <route type="mix" sink="Wired Headphones"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                <route type="mix" sink="Line"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                <route type="mix" sink="HDMI"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,compress_passthrough,voip_rx"/>
                <route type="mix" sink="Proxy"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
                <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"/>
                <route type="mix" sink="BT SCO Headset"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
                <route type="mix" sink="BT SCO Car Kit"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
                <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"/>
                <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"/>
                <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"/>
                 <route type="mix" sink="usb_surround_sound"
                        sources="USB Device In,USB Headset In"/>
                <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"/>
                <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"/>
                <route type="mix" sink="BT A2DP Headphones"
                       sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
                <route type="mix" sink="BT A2DP Speaker"
                       sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
                <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset 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,48000" 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,48000" 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_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>

概括来说,这个文件定义了系统会使用到的音频设备,支持的音频流,以及设备与流之间的走向关系。devicePort对应设备,mixPort对应流,routes对应走向关系。

module:

module对应不同的hal实现,从文件中我们看到有primary,a2dp,usb三个module,

需要注意的是AudioFlinger中通过hal接口IDevicesFactory.openDevice(string device) 打开的就是这个module,而不是一个真实的扬声器或者耳机之类的设备。

每个module都会有一个audio_hal的实现,通常会命名为audio_hw.c,代码路径如下:

  • android/vendor/qcom/opensource/audio-hal/primary-hal/hal/
  • android/system/bt/audio_a2dp_hw/
  • android/hardware/libhardware/modules/usbaudio/

对应到设备端,会看到有三个库,分别是:

  • audio.primary.sdm845.so
  • audio.usb.default.so
  • audio.a2dp.default.so

attachedDevices:

永久连接的设备,是devicePort中的一部分。

defaultOutputDevice:

当无策略规则适用时默认会使用这个设备

mixPort:

每一个mixPort都对应一个音频输入或者输出流。

其中role有两个角色,source代表此流可以用于输出,如输出到扬声器。sink代表此流可以用于接受输入,如麦克风采集到数据后输出到此流。

flag和profile用于指定此流支持的一些属性配置。

devicePort:

对应一个真实设备。可以是永久连接的设备,也可以是动态插拔的外设。同样role有source和sink两个角色。profile于指定此流支持的一些属性配置。

type用于设备的唯一标识。

routes:

用于连接设备和流,列出所有可能的连接。

type:表示所有音源相互排斥(mux)或可以混合(mix)。

sink: 可以是设备,也可以是流。每一个route只有一个sink。

source: 同样可以是设备,也可以是流。每一个route中可包含多个source。

<route type="mix" sink="Earpiece"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
<route type="mix" sink="Speaker"
                       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
<route type="mix" sink="primary input"
                       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner"/>
<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"/>

以上配置可以解释为:

1.假定音频流要输出到耳机或扬声器,那么可以采用的音频流(mixPort)可以是primary output, raw 等等。

2.假定音频流要输出到primary input或voip_tx。那么可以使用的设备有 Built-In Mic,Built-In Back Mic等麦克风。

从配置文件中可以看到不同的sink,可能有相同的source。那么具体采用那个source会根据音频策略来决定。比如:

1. 从上层传来了一个deep_buffer的流,到底是输出到耳机还是内置扬声器,会根据是否插入耳机和耳机的优先级来判定。

2. 上层传来请求录音请求,不管是普通录音,还是voip语音电话录音,会从可用的录音设备中查找优先级最高的一个设备进行录音。

include:

在文件最后引用了r_submix_audio_policy_configuration.xml

include的作用是引用其它的内容,等效于将其它文件的内容直接放到此处。

r_submix 和其它module一样,最终会编译成audio.r_submix.default.so。

r_submix 用于音频输出数据回采。我们在使用AudioRecord录音时,可以指定录音源为MediaRecorder.AudioSource.REMOTE_SUBMIX。当指定这种类型时,音频输出就不会输出到播放设备,而是中转到r_submix input。进而回传到AudioRecord。

audio_policy_configuration初始化逻辑:

audio_policy_configuration.xml在AudioPolicyManager初始化时会被解析。

首先遍历module,再分别遍历输出mixport和输入mixport。如果mixport找到的设备出现在attachedDevices中才会打开此流。

void AudioPolicyManager::onNewAudioModulesAvailableInt(DeviceVector *newDevices)
{
    ALOGW("CCDEBUG mDefaultOutputDevice %s", mDefaultOutputDevice->getTagName().c_str());
    for(const sp<DeviceDescriptor> &d : mOutputDevicesAll){
        ALOGW("CCDEBUG mOutputDevicesAll %s", d->getTagName().c_str());
    }
    //遍历配置文件中的modules
    for (const auto& hwModule : mHwModulesAll) {
        ......
        ALOGW("CCDEBUG Open HW module %s", hwModule->getName());
        mHwModules.push_back(hwModule);
        遍历配置文件中的MixPort
        for (const auto& outProfile : hwModule->getOutputProfiles()) {            
            //supportedDevices 是在route中配置了此mixport的设备集合
            const DeviceVector &supportedDevices = outProfile->getSupportedDevices();
            //availProfileDevices 是从supportedDevices 中同时存在于mOutputDevicesAll中的设备集合,mOutputDevicesAll是永久连接(attachedDevices)的输出设备。
            DeviceVector availProfileDevices = supportedDevices.filter(mOutputDevicesAll);
            sp<DeviceDescriptor> supportedDevice = 0;
            if (supportedDevices.contains(mDefaultOutputDevice)) {
                supportedDevice = mDefaultOutputDevice;
            } else {
                // choose first device present in profile's SupportedDevices also part of
                // mAvailableOutputDevices.
                if (availProfileDevices.isEmpty()) {
                    ALOGW("CCDEBUG return 1 availProfileDevices.isEmpty() %s %s", hwModule->getName(), outProfile->getTagName().c_str()
                    continue;
                }
                supportedDevice = availProfileDevices.itemAt(0);
            }
            if (!mOutputDevicesAll.contains(supportedDevice)) {
                continue;
            }
            sp<SwAudioOutputDescriptor> outputDesc = new SwAudioOutputDescriptor(outProfile,
                                                                                 mpClientInterface);
            audio_io_handle_t output = AUDIO_IO_HANDLE_NONE;
            ALOGW("CCDEBUG Open SwAudioOutputDescriptore %s profile %s", hwModule->getName(), outProfile->getTagName().c_str());
            status_t status = outputDesc->open(nullptr /* halConfig */, nullptr /* mixerConfig */,
                                               DeviceVector(supportedDevice),
                                               AUDIO_STREAM_DEFAULT,
                                               AUDIO_OUTPUT_FLAG_NONE, &output);
            
			...
        }
        // open input streams needed to access attached devices to validate
        // mAvailableInputDevices list
        for (const auto& inProfile : hwModule->getInputProfiles()) {
            ...
        }
    }
}

比如在打开primary module时:

1. 遍历第一个输出mixport(primary output),routes中包含primary output的有:Earpiece, Speaker, Wired Headset, Wired Headphones, BT SCO, BT SCO Headset, BT SCO Car Kit, BT A2DP Out, BT A2DP Headphones, BT A2DP Speaker, HDMI, USB Device Out, Line, FM, Proxy, USB Headset Out。这部分设备Earpiece和Speaker存在于attachedDevices中,因此primary output流会被打开。

2. 遍历第六个输出mixport(compress_passthrough),routes中包含compress_passthrough的有:HDMI,这个设备不在attachedDevices中,因此开机初始化时compress_passthrough流不会被打开。只有当HDMI插入时才会打开。

最后附上加上打印后的开机log

1206  1206 W APM_AudioPolicyManager: CCDEBUG Open HW module primary
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Earpiece
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Car Kit
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices HDMI
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Line
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices FM
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Proxy
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile primary output
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Earpiece
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Car Kit
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices HDMI
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Line
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Proxy
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile raw
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Earpiece
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Car Kit
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices HDMI
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Line
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Proxy
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile deep_buffer
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Earpiece
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Line
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile mmap_no_irq_out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG return 1 availProfileDevices.isEmpty() primary hifi_playback
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices HDMI
1206  1206 W APM_AudioPolicyManager: CCDEBUG return 1 availProfileDevices.isEmpty() primary compress_passthrough
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Earpiece
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Car Kit
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices HDMI
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Line
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Proxy
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile direct_pcm
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Earpiece
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Car Kit
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT A2DP Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices HDMI
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Line
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Proxy
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile compressed_offload
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Telephony Tx
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile voice_tx
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Earpiece
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Speaker
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Wired Headphones
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Headset
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT SCO Car Kit
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices HDMI
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Device Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Line
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Headset Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile voip_rx
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Telephony Tx
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open SwAudioOutputDescriptore primary profile incall_music_uplink
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open HW module usb
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices USB Host Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG return 1 availProfileDevices.isEmpty() usb usb_accessory output
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open HW module r_submix
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices Remote Submix Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG return 1 availProfileDevices.isEmpty() r_submix r_submix output
1206  1206 W APM_AudioPolicyManager: CCDEBUG Open HW module bluetooth
1206  1206 W APM_AudioPolicyManager: CCDEBUG supportedDevices BT Hearing Aid Out
1206  1206 W APM_AudioPolicyManager: CCDEBUG return 1 availProfileDevices.isEmpty() bluetooth hearing aid output

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值