我的ALSA驱动程序实现如下:
1)等待来自设备的MSI PCI中断。(中断表明音频数据已准备好从设备传输)
2)当收到中断时,ALSA驱动程序将一帧音频数据复制到ALSA框架。
3)ALSA驱动程序在将一帧复制到ALSA框架后更新hw_ptr。复制一帧数据后,将在ISR中调用snd_pcm_period_elapsed()。
4)通过执行以下命令可以观察到更新的hw_ptr。 cat / proc / asound / card2 / pcm0c / sub0 / status
/ *输出* /
状态:正在运行
owner_pid:2323
触发时间:114.467323430
时间戳:0.000000000
延迟:7200
可用:7200
avail_max:7200
hw_ptr:7200
appl_ptr:0
其中card2是上述PCIe卡实例。
5)转到第1步
问题是:
1)启动应用程序时,hw_ptr和app_ptr有时没有更新(例如VLC)。
2)当应用程序发送“启动”命令时,在驱动程序中调用snd_pcm_ops触发器回调。但是,将一帧复制到ALSA框架后,ALSA驱动程序会自行停止,而无需等待“停止”命令。
有关上述查询的任何输入都将有所帮助。
先谢谢了。
关于, 库尔卡尼。