Biu~筆記:高通藍牙ADK(39)-- chain修改指引

       Bui~發現大家不是很理解如何去修改音頻鏈路,就是那種想多加幾條輸入源或輸出,又或者把當前的輸入輸出換到別的地方的那種應用。例如一個自帶mic的dongle,或者模擬輸入的LE dongle。大概就是這種差異化的應用,為什麼舉這兩個例子呢?(因為我有現成的代碼(→ ◡ →) )

       如果要改某個狀態下的音頻鏈路,那就需要先找出默認的鏈路是怎麼樣的,這個可以從log和qact看得到,例如在usb dongle中找到通話的鏈路。我們在qact看是這樣的

       在log中找到類似kymera start的地方,或者kymera狀態機切換到audio active的地方,不同轉態不同adk有不一樣的log,大致上都是這個形式。

       找到log就可以在代碼中找到對應的函數,這個函數就是創建鏈路的地方了,一般來說一個完整的音頻鏈路由多個的子鏈路組成,子鏈路一般會用chain這個概念去表示。從鏈路創建的函數中就能找到鏈路用了哪些chain,同時上圖log中的參數就是chain的決定因素,參數不同選的chain也不一樣。

       找到chain後,會發現他是個結構體,但是他是由.chain文件生成的,名字也是對應的

       這個.chain文件不懂的話可以看我另外一篇博文Biu~筆記:高通藍牙ADK(24)--audio chain - 大大通(中國) (wpgdadatong.com.cn),如果想修改chain鏈路也是從這個.chain文件開始修改。修改完成之後就需要回到代碼對他原有的配置進行修改,因為chain中模塊增加刪減基本都需要將對應的配置代碼做修改,不然添加了模塊不做配置或刪減了模塊沒刪除配置,都是會panic的,除非這個模塊不需要配置。

       配置完成後,就需要將chain的輸入輸出接到對應的地方,例如連到別的chain,或者連到物理的source和sink(speaker,mic等)

       整個鏈路搭起來大致流程是:

  • 創建定義好的chain (ChainCreate)
  • 配置chain中的模塊
  • 把chain端點起來 (StreamConnect)
  • 把chain內部模塊連起來 (ChainConnect)
  • 把chain跑起來 (ChainStart)

       在鏈路停止時,也按照這個方法,找到kymera stop的函數,並按著裡面的步驟執行。整個鏈路停止大致流程是:

  • 斷開chain埠連接 (StreamDisconnect)
  • 停止chain (ChainStop)
  • 釋放chain (ChainDestroy)

       以上是本期博文的全部內容,如有疑問就別在博文下方評論留言了,有什麼疑問或想了解的當面和我說(如果你知道我是誰的話ヽ( ̄▽ ̄)و),我會儘量安排上(o´ω`o)و。謝謝大家瀏覽,我們下期再見。

簡單是長期努力的結果,而不是起點

                                                 —— 不是我說的



問題1:如何獲得博主的代碼補丁?

我給你們就是了,僅供參考,是真的參考,沒有很完整或大量測試過的

問題2:如何獲得博主的聯繫方式?

通過正規渠道成為我們的VIP,即可體驗博主一對一的服務(→ ω →)

知道的人不可販賣博主聯繫方法,從前有個人這樣做,結果沒了(〃'▽'〃)

問題3:不會做有沒有作業抄?

只要在adk裡面有的應用,基本可以互相抄。博主見過各種奇奇怪怪的融合怪

問題4:不會顯示這個鏈路圖

QACT就幾個按鈕,都點一次,會出現的(除非你配置沒對,或者軟體太老)

方法二:ACAT裡面的畫圖也可以,不懂看這個Biu~筆記:高通藍牙ADK(22)--DSP音頻鏈路監聽 - 大大通(中國) (wpgdadatong.com.cn)

問題5:創建和流程都沒問題,就是會死機

可能你需要個VIP

技術文檔

類型標題檔案
軟件patch file

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論

jtc

jtc

7 個月前
博主你好,在上面音頻鏈路的示意圖中,是否可能跳過LC3的編碼和解碼,直接將音訊Raw data作傳送和接收? 在adk作這樣的修改有可行性嗎,困難點在哪呢,感謝。