乙個hdmi音訊問題的debug

2021-06-25 17:18:40 字數 1159 閱讀 4164

問題描述:

開啟logcat可了看:

沒次卡時都會列印像下面的log

w/audio_hw_primary( 2194): do_out_standby... 1074415168

i/omxplayer( 2194): stop player.

w/audio_hw_primary( 2194): card 0, port 0 device 0x2

w/audio_hw_primary( 2194): rate 44100, channel 2 period_size 0xc0

從log看是音效卡被不斷地切換。

那音效卡為什麼會切換呢? 根據android的特點,應該是檢測到了別的比hdmi優先順序更高的裝置。懷疑是檢測到了headphone插入(因為不可能檢測到藍芽 usb什麼的)。

那檢測到headphone有什麼條件?看原理圖:

預設是micbias1應該是高,沒插入耳機是gpio6_1和micbias1是連在一起的,gpio6_1為高,當插入耳機時gpio6_1與micbias1分開,gpio6_1為低就檢測到耳機插入。

現在耳機沒有插入而檢測到耳機,那只能是micbias1為低。用示波器量,micbias1會不斷地高低高低的變化。

micbias1電源的開啟:檢視該audio晶元是specf,和兩個暫存器有2個。最終發現會在下面函式關掉其中乙個:

static int rt3261_set_bias_level(struct snd_soc_codec *codec,

enum snd_soc_bias_level level)

{case snd_soc_bias_standby:

snd_soc_update_bits(codec, rt3261_pwr_anlg2,

rt3261_pwr_mb1 | rt3261_pwr_mb2, 0); //這裡把micbias1的電源關掉了。

但為什麼會進這裡?

android啟動時缺省會開啟primary的audio裝置(本機為rt3261),但是如果沒有聲音輸出會然裝置進入standby模式。

在用hdmi做輸出時,開啟hdmi音訊那rt3261就進入standby,關micbias1電源,系統誤以為檢測到headphone,切換到rt3261開啟micbias1,以為headphone拔出,就再切換到hdmi。這樣聲音就一卡一卡的了。

音訊功放的另乙個mono接法

現在流行的手機audio pa,不管是classab,或則是classd,或則是classk,在他們的datasheet中,都會推薦單端接法和差分接法,以aw8155 為例 一般情況下,有差分音源的就選差分接法 沒有差分的音源,特別是mtk的平台,我們習慣於選擇耳機輸出的左聲道作為功放的音源輸入。一...

使用libzplay庫封裝乙個音訊類

裝載請說明原位址,謝謝 的編碼解碼器。庫本身是由winapi編寫,你無須額外的庫,也不需要mfc net的支援,只能在windows下執行。可以看到上方是控制按鈕,通過對應的按鈕可以控制 效果,控制功能還是很全面的,比如聲音 漸弱 漸強 回音 通道混合 均衡器 去除某個音軌。我隨便找了乙個 改變了一...

mysql delete的乙個問題

mysql select from a id name 1 test1 2 test2 3 test3 4 test3 5 test3 5 rows in set 0.00 sec 對這樣的乙個表,需要刪除 name相同的記錄。id沒有要求,但我這裡只留下最小的id。mysql delete fro...