Android底層開發之Audio HAL
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
Android底層開發之Audio HAL
在Android音訊底層除錯-基於tinyalsa中以「拋開Android的天生複雜,迴歸嵌入式Linux的本質」的方式介紹如何除錯Linux核心中的音訊驅動。
這裡向上再伸展一下進入HAL層,看是如何將tinyalsa封裝給Frameworks使用的。
基於4.2.2版本原始碼進行討論。Android官方教程是Audio Implementing the HAL.
一個完整的Android音訊系統架構如圖所示:
注:圖來自Android音訊系統之音訊框架
簡化理解Audio系統
中間部分定義為黑匣子,暫不去了解其內部結果,因為最終的執行都是會到最下端的Android HAL中的。
WiredAccessoryManager.java介紹
該服務是輪循方式地檢測有線的音訊裝置,如有線耳機/HDMI/USB音效卡等等。是在如黑匣子圖右側1處將事件傳入。
最終會呼叫到Audio HAL部分。檢測的事件以及裝置型別見audio_policy.conf介紹
audio_policy.conf介紹
除了global_configuration,還有一個audio_hw_modules是代表不同音訊硬體模組,
* primary是主要的處理模組;
* a2dp是處理藍芽音樂傳輸模組;
* usb是處理usb音效卡模組;
* r_submix是全稱是remote submix,是處理遠端音訊目前主要是Miracast(基於Wi-Fi Direct的螢幕共享協議)。
這麼分類是Google的意思,但是真正做的時候並不一定完全堅如照做。比如單獨使用primary就附帶做了hdmi/usb音訊處理也是可行的。當然了,這裡需要在對於模組的device中加入需要處理的device type。
常見的有線的音訊裝置型別與其對應的中文意思:
AUDIO_DEVICE_OUT_WIRED_HEADSET 耳機AUDIO_DEVICE_OUT_WIRED_HEADPHONE 無Mic耳機AUDIO_DEVICE_OUT_AUX_DIGITAL HDMIAUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET USB Sound Card(USB audio)注:還有很多裝置型別,由於並沒有接觸過就不翻譯試的介紹了。
- 1
- 2
- 3
- 4
- 5