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),这是导致问题的原因。
目前我正在开发一个 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),这是导致问题的原因。