[RK3288][Android6.0] 调试笔记 --- Audio驱动层判断录音数据是否异常
2017-05-31 14:19
691 查看
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
之前有提到上层可以通过dump pcm数据查看波形来确定录音采样的数据是否正常,这里给出驱动层查看方法。
http://blog.csdn.net/kris_fei/article/details/72763579
当一次传输完成后会调用dmaengine_pcm_dma_complete(),而rockchip其实已经添加了调试方法,只是在本文件中把宏CONFIG_ARCH_ROCKCHIP关闭了。
OS: Android 6.0
Kernel: 3.10.92
之前有提到上层可以通过dump pcm数据查看波形来确定录音采样的数据是否正常,这里给出驱动层查看方法。
http://blog.csdn.net/kris_fei/article/details/72763579
当一次传输完成后会调用dmaengine_pcm_dma_complete(),而rockchip其实已经添加了调试方法,只是在本文件中把宏CONFIG_ARCH_ROCKCHIP关闭了。
static void dmaengine_pcm_dma_complete(void *arg) { struct snd_pcm_substream *substream = arg; struct dmaengine_pcm_runtime_data *prtd = substream_to_prtd(substream); //本文件中被undef了,要自己打开。 #ifdef CONFIG_ARCH_ROCKCHIP if(debug_audio_timeout){ struct snd_pcm_runtime *runtime = substream->runtime; static ktime_t before = {0},after = {0}; s64 t; before = after; after = ktime_get(); //t就是一次DMA传输完成时间间隔。 t = ktime_to_us(ktime_sub(after, before)); //右边的表示理论DMA一次传输需要的时间,单位是us,+32可能是rk经过测试之后可以容忍的出错帧数。 //当条件成立的时候,说明DMA没出完完成,这时就会有问题了。 if(t > (snd_pcm_lib_period_bytes(substream)/4+32)*1000*1000/runtime->rate && t != ktime_to_us(after)) // (23220)4096/4/44100 + 32/44100 { //当在kmsg中频繁看到这条Log音频应该有异常了。 printk(KERN_DEBUG "Time out:: Audio DMA buffdone time out!!! the time = %lld!\n", t); } //printk(KERN_DEBUG "audio DMA callback time = %lld\n", t); } #endif prtd->pos += snd_pcm_lib_period_bytes(substream); if (prtd->pos >= snd_pcm_lib_buffer_bytes(substream)) prtd->pos = 0; snd_pcm_period_elapsed(substream); }
相关文章推荐
- [RK3288][Android6.0] 调试笔记 --- Audio录音PCM数据抓取
- [RK3288][Android6.0] 调试笔记 --- Audio分离DTMF tone引起的异常
- [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED
- [RK3288][Android6.0] 调试笔记 --- Audio的Voice Call无法静音问题
- [RK3288][Android6.0] 调试笔记 --- 录音apk无权限录音问题
- [RK3288][Android6.0] 调试笔记 --- Audio之分离DTMF tones
- [RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题
- [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】
- [RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题
- [RK3288][Android6.0] 调试笔记 --- 命令行录音方法
- [RK3288][Android6.0] 调试笔记 --- 如何确认声卡是否注册成功【转】
- [RK3288][Android6.0] 调试笔记 --- PreviewCallback获取NV12格式数据
- [RK3288][Android6.0] 调试笔记 --- 实时录音会有呲呲噪音问题
- [RK3288][Android6.0] 调试笔记 --- 修改录音采样率提示报错问题
- [RK3288][Android6.0] Audio录音HAL层的数据读取流程分析
- [RK3288][Android6.0] 调试笔记 --- 如何确认声卡是否注册成功
- [RK3288][Android6.0] 调试笔记 --- RT5640录音时的Codec寄存器列表
- [RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题【转】
- [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别
- [RK3288][Android6.0] 调试笔记 --- Camera没有权限打开问题