Murali Marimekala
Murali Marimekala

Reputation: 73

usb_fill_bulk_urb with less buffer_length gives no garbage Transport stream data

Currently I am working on a DVB-T2 dongle which is connected to my Ubuntu laptop 14.04 using USB

interface.

I am using following applications to perform scanning and channel play. 1. w_scan - which scans and gives me a channel.conf file 2. vlc ./channel.conf - plays a channel using modulation parameters in channel.conf

Things work fine when Pid filtering is disabled. But when Pid filtering is enabled, I see

macroblocks on the screen instead of smooth AV. Even AV is breaking a lot.

After going through the driver code, I tried increasing the URB buffer size from 3K (21*188) to

64K (348*188). The AV became smooth.

This urb buffer size is buffer_length (lenght of transport buffer) in below function.

void usb_fill_bulk_urb (struct urb * urb, struct usb_device * dev, unsigned int pipe, void * transfer_buffer, int buffer_length, usb_complete_t complete_fn, void * context);

As you can see the driver uses bulk mode of usb transfer.

Could anyone explain me why increasing the buffer is solving the macroblock issue ?

Give me some pointers to understand this issue better.

Thanks in advance, Murali

Upvotes: 1

Views: 428

Answers (1)

Murali Marimekala
Murali Marimekala

Reputation: 73

finally found soultion for this issue, the usb frame size and urb buffer size should be same (in my case 21x188). In my code, found that USB frame size was set to (348x188) and urb buffer size was (21x188) which was causing the issue.

Upvotes: 1

Related Questions