AudioPolicyManager::setDeviceConnectionState 流程(一)


  當有線耳機插入/拔出或藍牙耳機的插入/拔出等,這些事件都會引起Audio Route的重新配置。重新配置的過程實在AudioPolicyManager::setDeviceConnectionState中實現的。

/*status_t AudioPolicyManager::setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state,const char *device_address)*/

  該函數有三個參數,device:連接設備,state:連接狀態,device_address:設備地址

  以有線耳機插入為例,device = 0x4 / 0x8(4環/3環),state = 0 / 1(拔出/插入), device_address = NULL.

  完整流程可以分為以下幾個步驟:

  Step1:device check,判斷該device是否為Output device or Input devices,若兩者都不是,則表示該設備不合理。

  Step2:state check,根據state狀態來進入不同的switch block內。因為分析的是耳機插入,這里會進到插入block。

  Step3:outputs check,尋找該device對應可以使用的Outputs,該Outputs由兩部分組成,一個是當前存在並且mSupportDevices支持該device的mOutputs;另一個是從剩余的profiles中生成的。

  Step4:check output是否需要切換。

  Step5:close no needed ouputs

  Step6:set output devices

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM