audiotrack、audioflinger、audiopolicysevice
當audiopolicymanagerbase構造時,它會根據使用者提供的audio_policy.conf來分析系統中有哪些audio inte***ce(primary,a2dp以及usb),然後通過audioflinger::loadhwmodule載入各audio inte***ce對應的庫檔案,並依次開啟其中的output(openoutput)和input(openinput)
· audioflinger openoutput時,會開啟乙個audio_stream_out_t通道,生成audiostreamout物件,新建playbackthread等等。此生會產生全域性唯一的audio_io_handle_t值,這個值是與playbackthread相對應的,它作為mplaybackthreads鍵值對的key值存在。
audiotrack建立時,呼叫getoutput獲得output全域性標記值。getoutput經過audiosystem調到audiopolicysevice,最終是落在getoutput @ audiopolicymanager。然後分3步,獲取stream型別對應的strategy、應用策略,判斷哪些output符合使用者傳入的stream型別、選擇乙個最適合的output。
然後呼叫createtrack時,傳入這個output值,checkplaybackthread_l藉此找到匹配的playbackthread。
找到匹配的playbackthread後,還需要在其內部建立乙個playbackthread::track物件(所有track都由playbackthread::mtracks全域性變數管理),這些工作由playbackthread::createtrack_l完成。
當playbackthread建立乙個playbackthread::track物件時,分配了所需的緩衝區空間,這塊空間是可以跨程序共享的,audiotrack可以通過track->getcblk()來獲取。
最好audioflinger返回給audiotrack建立好的track的trackhandle。
未完待續。。。。
android audio 音量設定分析
audiod 中經常遇到的場景是音量調整與輸出裝置的切換,下面兩篇文章 針對這兩個場景分別分析一下 1,音量調整場景 android 音量調整,可以使用兩種方式 軟體mixer的時候修改pcm data 控制dac硬體的增益 第一種情況,如果是多路mix的情況,就是mixerthread進行軟體mi...
Android Audio音訊通路 七
例如 deep buffer playback speaker 通路中的路由控制項 1 deep buffer usacase 對應的 fe pcm quat mi2s rx speaker device所連線的be dai audio mixer 表示dsp路由功能 value 1 表示連線 va...
簡談系統設計
系統設計是把需求轉化為軟體系統的最重要的環節。系統設計的優劣在根本上決定了軟體系統的質量。系統設計要比純粹的程式設計困難得多。天下西湖三十六,最美是杭州 千年前的蘇東坡大學士對西湖精彩絕倫的系統設計,使杭州榮公升為 天堂 讓後人只剩下讚嘆和破壞的份了。系統設計大體上包含四個方面的內容 體系結構設計 ...