usb_fill_bulk_urb with less buffer_length 不产生垃圾传输流数据

usb_fill_bulk_urb with less buffer_length gives no garbage Transport stream data

目前我正在开发一个 DVB-T2 加密狗,它使用 USB

连接到我的 Ubuntu 笔记本电脑 14.04

界面。

我正在使用以下应用程序进行扫描和频道播放。 1. w_scan - 扫描并给我一个 channel.conf 文件 2. vlc ./channel.conf - 使用 channel.conf

中的调制参数播放频道

禁用 Pid 过滤时一切正常。但是当启用 Pid 过滤时,我看到

屏幕上的宏块而不是流畅的 AV。甚至 AV 也有很多问题。

完成驱动程序代码后,我尝试将 URB 缓冲区大小从 3K (21*188) 增加到

64K (348*188)。 AV变得流畅

这个 urb 缓冲区大小在下面的函数中是 buffer_length(传输缓冲区的长度)。

void usb_fill_bulk_urb (struct urb * urb, struct usb_device * dev, 无符号整数管道,void * transfer_buffer, int buffer_length, usb_complete_t complete_fn, void * context);

如您所见,驱动程序使用 usb 传输的批量模式。

谁能解释一下为什么增加缓冲区可以解决宏块问题?

给我一些建议,以便更好地理解这个问题。

提前致谢, 穆拉利

终于找到了解决这个问题的方法,usb 帧大小和 urb 缓冲区大小应该相同(在我的例子中是 21x188)。在我的代码中,发现 USB 帧大小设置为 (348x188) 并且 urb 缓冲区大小设置为 (21x188),这是导致问题的原因。