知方号

知方号

USB transfer sizes 限制

用Bulk传输VBI信息时,发现字幕经常出现拼写错误的问题,查了一下,原来是bulk pipe 的transfer sizes设置错误,超出了大小限制。

USB transfer sizes有如下限制:在Windows 2000, Windows XP and Windows 2003 Server中,Transfer Sizes 的最大值:控制管道: 4,000 bytes块、中断管道:256,000 bytes同步管道:全速设备:256帧, 高速设备:1024 帧 驱动可以设置USBD_PIPE_INFORMATION结构的成员变量MaximumTransferSize,但是一定要小于Transfer Sizes 的最大值。

DDK参考: MaximumTransferSize Specifies the maximum size, in bytes, for a transfer request on this pipe. In Windows Server 2003, Windows XP and later operating systems, this member is not used and does not contain valid data. The following table lists the maximum transfer sizes for each type of pipe for the major versions of Windows:

 

 

Version of WindowsType of PipeMaximum Transfer SizeWindows 2000Control pipe endpoint 04 kilobytes Control pipe64 kilobytes Interrupt or bulk pipeTheoretically unlimitedWindows XPControl pipe endpoint 04 kilobytes Control pipe64 kilobytes Interrupt pipeTheoretically unlimited Bulk pipe256 kilobytes Windows VistaControl pipe endpoint 04 kilobytes Control pipe64 kilobytes Interrupt or bulk pipeUnlimited transfers.

具体来说: 

VOID   UsbBuildInterruptOrBulkTransferRequest(    IN OUT PURB  Urb,    IN USHORT  Length,    IN USBD_PIPE_HANDLE  PipeHandle,    IN PVOID  TransferBuffer  OPTIONAL,    IN PMDL  TransferBufferMDL  OPTIONAL,    IN ULONG  TransferBufferLength, ----注意要小于上面提到的限制    IN ULONG  TransferFlags,    IN PURB  Link    );

 在Bulk传输VBI信息时: TransferBufferLength 越小,字幕显示越实时,越大则显示越延迟。但是TransferBufferLength 过于小的话,会增加I/O操作,增加系统负担;TransferBufferLength 大于256000时,部分VBI数据会丢失,因此字幕会不正确。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。