您好,登錄后才能下訂單哦!
承接我的上一篇https://blog.51cto.com/8906847/2367935 文章。
例如你在HUD抬頭顯示設備中,需要加入FMTX功能,即fm發(fā)射功能,另外需要在打開fmtx廣播時,音頻優(yōu)先走fmtx芯片,而不是走speaker。
那么可以這樣實現(xiàn):
1)方法一:通過特定狀態(tài)標記,來修改audiopolicy的engine.cpp
2)方法二:是使用類似如下的方式:
如果是Java的,那么可以仿照類似如下的方式:
private AudioManager getAudioManager() {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
return audioManager;
}
getAudioManager().setWiredDeviceConnectionState(AudioManager.DEVICE_OUT_AUX_DIGITAL, 0, "", "fmtx"); 表示fmtx關閉。
getAudioManager().setWiredDeviceConnectionState(AudioManager.DEVICE_OUT_AUX_DIGITAL, 1, "", "fmtx");表示fmtx開啟。
這樣更新了audio available output device,并且通知到frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp。
當然,你如果想自己增加一個DEVICE_OUT_FMTX類型也是可以的,但是更改的地方就比較多了,可以整個android代碼搜索DEVICE_OUT_AUX_DIGITAL和AUDIO_DEVICE_OUT_AUX_DIGITAL,找到需要修改的地方。
對應的Engine.cpp對audio available output device的輸出選擇則修改如下:
diff --git a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
index 3dd84c3..5797595 100755
--- a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
+++ b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
@@ -614,6 +614,12 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy,
+do {
然后fmtx驅(qū)動把HEADPHONE的codec輸出,通過switch硬件輸出到fmtx的模塊上,而不是HEADPHONE上。
利用這種方法,也可以解決例如需求:
1)BT > FMTX > Speaker
2)而且 通話時,必須走speaker,因為AEC回聲消除的問題。通過藍牙音響的話,聲音延遲太大,AEC不好處理。
另外歡迎觀看我發(fā)布的各個課程: https://edu.51cto.com/lecturer/8896847.html
或者
我的3折優(yōu)惠的專題組合課程:
https://edu.51cto.com/topic/2362.html
或者https://edu.51cto.com/topic/2385.html
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。