1. 程式人生 > >[RK3288][Android6.0] 除錯筆記 --- Audio錄音PCM資料抓取

[RK3288][Android6.0] 除錯筆記 --- Audio錄音PCM資料抓取

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

當錄音異常時需要把資料dump出來判斷問題出在哪一層,RK雖然在HAL層已經提供了dump方法,但有點問題:
static ssize_t read_frames(struct stream_in *in, void *buffer, ssize_t frames)
{
......
    while (frames_wr < frames) {
        size_t frames_rd = frames - frames_wr;
        if (in->resampler != NULL) {
......//流程1

        } else {
......
#ifdef ALSA_IN_DEBUG        
            fwrite(buffer,frames_wr * frame_size,1,in_debug);
#endif

......
}
}

由於上層錄音的取樣率和硬體實際採的不一樣,因此會走流程一,這樣即使ALSA_IN_DEBUG巨集打開了也不會有效,因此可以將讀取資料的過程放在read_frames()外:
static ssize_t in_read(struct audio_stream_in *stream, void* buffer,
                       size_t bytes)
{
......
    ret = read_frames(in, buffer, frames_rq);
    if (ret > 0)
        ret = 0;
#ifdef ALSA_IN_DEBUG
    fwrite(buffer,bytes ,1,in_debug);
#endif

......
}

另外,要先在/data/下建立debug.pcm,否則無法開機。
static int adev_open_input_stream(......)
{
......
#ifdef ALSA_IN_DEBUG
    in_debug = fopen("/data/debug.pcm","wb");//please touch /data/debug.pcm first
#endif

......
}

抓出來的資料如果無法判定是否正常,用正弦波作為錄音資料測試。



相關推薦

[RK3288][Android6.0] 除錯筆記 --- Audio錄音PCM資料

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 當錄音異常時需要把資料dump出來判斷問題出在哪一層,RK雖然在HAL層已經提供了dump方法,但

[RK3288][Android6.0] 除錯筆記 --- Audio驅動層判斷錄音資料是否異常

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前有提到上層可以通過dump pcm資料檢視波形來確定錄音取樣的資料是否正常,這裡給出驅動層檢視

[RK3288][Android6.0] 除錯筆記 --- 命令列錄音方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 錄製wav檔案: 使用tinycap [email protected

[RK3288][Android6.0] 除錯筆記 --- 普通串列埠的新增

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 uart0,1,3,4 (普通串列埠) 用的是同一個串列埠驅動. uart2(除錯串列埠)的驅動程式碼嵌在fiq debugger的code中. 相關的配置在rk3288.dtsi中:

[RK3288][Android6.0] 除錯筆記 --- hwclock命令無法使用

Platform: Rockchip  OS: Android 6.0  Kernel: 3.10.92 現象:  使用hwclock,提示找不到檔案 [email protected]:/ # hwclock                          

[RK3288][Android6.0] 除錯筆記 --- I2C通訊失敗問題

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 使用rk3288的i2c5讀寫時,會出現以下error log: [email prot

[RK3288][Android6.0] 除錯筆記 --- 測試I2C裝置正常傳輸方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk在驅動層做了一個通用i2c測試程式碼提供給上層快速測試i2c外設是否傳輸正常. 測試使用方法

[RK3288][Android6.0] 除錯筆記 --- eMMC分割槽號和名字的對應

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有時候需要知道mmcblk對應的分割槽是哪一個,其實驅動已經完成這個功能了,如下: [email protected]:/dev/blo

[RK3288][Android6.0] 除錯筆記 --- user版本串列埠只有輸出不能輸入

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92現象: 編譯成user版本之後串列埠只有輸出沒有輸入.原因: 編譯user版本之後 ro.debug

[RK3288][Android6.0] 除錯筆記 --- 系統自帶預置第三方APK方法

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 Rockchip預設提供了機制來預置第三方APK, 方法很簡單: 1. 在device/rockchip/rk3288建立preinstall目錄(如果

[RK3288][Android6.0] 除錯筆記 --- 除錯串列埠的更換

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 假設專案有需求要將除錯串列埠uart2 改成 uart1, 改動如下 (還未驗證,先分享給大家,

[RK3288][Android6.0] 除錯筆記 --- pmu(rk818)暫存器讀寫

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk的pmu模組只提供了每次單個暫存器的讀寫,驅動提供了這個節點供使用:/sys/rk818/rk818_test 舉例: 讀取: echo r

[RK3288][Android6.0] 除錯筆記 --- 遮蔽系統下拉選單顯示

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 [email protected]:~/rk3288/frameworks/base/

[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 rk3288平臺的serial number是由drmservice寫進去的,drmservice在rc檔案中定義啟動: init.rk30board.

[RK3288][Android6.0] 除錯筆記 --- 螢幕顯示旋轉方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 顯示模組提供了一個property供修改旋轉方向,名為”ro.sf.hwrotation”,有四個值可選 Surface.java /** *

[RK3288][Android6.0] 除錯筆記 --- eMMC壞塊測試

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 網上搜到一個叫eMMC Brickbug Check的apk 啟動后里面的Check Memory一項提示要root,但是系統已經是root過的了,

[RK3288][Android6.0] 除錯筆記 --- CPU溫度降頻控制

rk3288平臺關於溫度調節cpu頻率有個bug. 在rk3288.dtsi中,有: temp-limit-enable = <1>; target-temp = <80>; min_temp_limit = <48>

[RK3288][Android6.0] 除錯筆記 --- 移除uboot和kernel開機logo

Platform: RockchipOS: Android 6.0Kernel: 3.10.92diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dtsindex ad3bc1a.

[RK3288][Android6.0] 除錯筆記 --- 電池電量一直顯示100%

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 跟蹤發現Android6.0相比之前的Android4.4會判斷Charger是否存在,不

[RK3288][Android6.0] 除錯筆記 --- RT5640 I2S對應的ADC/DAC通路

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Audio Codec RT5640 有兩路I2S,如下圖: 原本以為I2S1對應的就是ADCLR1/DACLR1,I2S2對應的就是ADCLR