完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Platform: Rockchip
OS: Android 6.0 Kernel: 3.10.92 之前有提到上层可以通过dump pcm数据查看波形来确定录音采样的数据是否正常,这里给出驱动层查看方法。 当一次传输完成后会调用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 = %lldn", 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); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2142 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2808 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5580 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 18:04 , Processed in 0.597816 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号