Android audio_policy_configuration.xml

前言
Android的audioserver 进程启动时,会创建AudioPolicyManager,在构造函数中,首先会去解析audio_policy_configuration.xml文件。
audio音频数据从一个源走到一个目的都是需要根据配置文件audio_policy_configuration.xml来决定,所以理解configuration配置文件中各个标签项转化为c++实体类的及各成员至关重要。

AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientInterface,
                                       bool /*forTesting*/)
    :
    mUidCached(getuid()),
    mpClientInterface(clientInterface),
    mLimitRingtoneVolume(false), mLastVoiceVolume(-1.0f),
    mA2dpSuspended(false),
#ifdef USE_XML_AUDIO_POLICY_CONF
    mVolumeCurves(new VolumeCurvesCollection()),
    mConfig(mHwModulesAll, mAvailableOutputDevices, mAvailableInputDevices,
            mDefaultOutputDevice, static_cast(mVolumeCurves.get())),
#else
    mVolumeCurves(new StreamDescriptorCollection()),
    mConfig(mHwModulesAll, mAvailableOutputDevices, mAvailableInputDevices,
            mDefaultOutputDevice),
#endif
    mAudioPortGeneration(1),
    mBeaconMuteRefCount(0),
    mBeaconPlayingRefCount(0),
    mBeaconMuted(false),
    mTtsOutputAvailable(false),
    mMasterMono(false),
    mMusicEffectOutput(AUDIO_IO_HANDLE_NONE),
    mHasComputedSoundTriggerSupportsConcurrentCapture(false)
{
}

AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientInterface)
        : AudioPolicyManager(clientInterface, false /*forTesting*/)
{
    loadConfig();
    initialize();
}

audio_policy_configuration.xml为音频audio的设备、流以及路由等配置文件,里面写明了audio音频部分有哪些设备、哪些流以及它们支持的编码、格式以及通道存储布局等等





    

    
    


    
    
        
        
            
                Speaker
                Built-In Mic
                Built-In Back Mic
            
            Speaker
            
                
                    
                
                
                    
                
                
                    
                    
                    
                
                
                    
                
                
                    
                
                
                    
                
            
            
                
                
                   
                
                
                    
                    
                        
                    
                
                
                    
                
                
                    
                
                
                    
                
                
                    
                
                
                    
                
                
                    
                

                
                    
                
                
                    
                
                
                    
                
                
                    
                
                
                    
                
            
            
            
                
                
                
                
                
                
                
            

        

        
        

        
        

        
        

        
        

    
    

    

    
    

    


audio_policy_configuration.xml中 的对应每一个audio hal 的so,module中列出的mixPorts,devicePorts和routes解析之后完整的描述了音频的路由规则
module name
支持“primary” (用于车载使用场景), "A2DP", "remote_submix"和"USB"。模块名称和相应音频驱动程序应编译到 audio.primary.$(variant).so 中
devicePorts
包含可从此模块访问的所有输入和输出设备(包括永久连接的设备和可移除设备)的设备描述符列表。设备的output和input,不是像mixport那样以role来分,而是以type中有关键字“IN”和“OUT”来区分
mixPorts
包含由音频 HAL 提供的所有输出流和输入流的列表。每个 mixPort 实例都可被视为传输到 Android AudioService 的物理音频流,stream配置了自己的格式、采样率以及mask,并且分为输出、输入流。一个mixPort标签可能有多个profile属性,也就是支持很多编码格式属性
routes
定义输入和输出设备之间或音频流和设备之间可能存在的连接的列表。route是把deviceport和mixport连接起来的路由,数据由一个stream输出到另一个device,或者从一个device输出到另一个stream。

你可能感兴趣的:(Android audio_policy_configuration.xml)