linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* pwc over musb: 100% frame drop (lost) on high resolution stream
@ 2016-07-19 20:21 matwey
  2016-07-19 20:56 ` Bin Liu
  0 siblings, 1 reply; 31+ messages in thread
From: matwey @ 2016-07-19 20:21 UTC (permalink / raw)
  To: hdegoede, b-liu; +Cc: matwey, linux-media, linux-usb

Hello,

I have Philips SPC 900 camera (0471:0329) connected to my AM335x based BeagleBoneBlack SBC.
I am sure that both of them are fine and work properly.
I am running Linux 4.6.4 (my kernel config is available at https://clck.ru/A2kQs ) and I've just discovered, that there is an issue with frame transfer when high resolution formats are used.

The issue is the following. I use simple v4l2 example tool (taken from API docs), which source code is available at http://pastebin.com/grcNXxfe

When I use (see line 488) 640x480 frames

                fmt.fmt.pix.width       = 640;
                fmt.fmt.pix.height      = 480;

then I get "select timeout" and don't get any frames.

When I use 320x240 frames
                
                fmt.fmt.pix.width       = 320;
                fmt.fmt.pix.height      = 240;

then about 60% frames are missed. An example outpout of ./a.out -f is available at https://yadi.sk/d/aRka8xWPtSc4y
It looks like there are pauses between bulks of frames (frame counter and timestamp as returned from v4l2 API):

3 3705.142553
8 3705.342533
13 3705.542517
110 3708.776208
115 3708.976190
120 3709.176169
125 3709.376152
130 3709.576144
226 3712.807848

When I use tiny 160x120 frames
                
                fmt.fmt.pix.width       = 160;
                fmt.fmt.pix.height      = 120;

then more frames are received. See output example at https://yadi.sk/d/DedBmH6ftSc9t
That is why I thought that everything was fine in May when used tiny xawtv window to check kernel OOPS presence (see http://www.spinics.net/lists/linux-usb/msg141188.html for reference)

Even more. When I introduce USB hub between the host and the webcam, I can not receive even any 320x240 frames.

I've managed to use ftrace to see what is going on when no frames are received.
I've found that pwc_isoc_handler is called frequently as the following:

 0)               |  pwc_isoc_handler [pwc]() {
 0)               |    usb_submit_urb [usbcore]() {
 0)               |      usb_submit_urb.part.3 [usbcore]() {
 0)               |        usb_hcd_submit_urb [usbcore]() {
 0)   0.834 us    |          usb_get_urb [usbcore]();
 0)               |          musb_map_urb_for_dma [musb_hdrc]() {
 0)   0.792 us    |            usb_hcd_map_urb_for_dma [usbcore]();
 0)   5.750 us    |          }
 0)               |          musb_urb_enqueue [musb_hdrc]() {
 0)   0.750 us    |            _raw_spin_lock_irqsave();
 0)               |            usb_hcd_link_urb_to_ep [usbcore]() {
 0)   0.792 us    |              _raw_spin_lock();
 0)   0.791 us    |              _raw_spin_unlock();
 0) + 10.500 us   |            }
 0)   0.791 us    |            _raw_spin_unlock_irqrestore();
 0) + 25.375 us   |          }
 0) + 45.208 us   |        }
 0) + 51.042 us   |      }
 0) + 56.084 us   |    }
 0) + 61.292 us   |  }

However, pwc_isoc_handler never calls vb2_buffer_done() that is why I get "select timeout" in userspace.
Unfortunately, my kernel is not compiled with CONFIG_USB_PWC_DEBUG=y but I can recompile it, if you think that it could provide more information. I am also ready to perform additional tests (use usbmon maybe?).

How could this issue be resolved?

Thank you.

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2016-08-24 18:18 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-19 20:21 pwc over musb: 100% frame drop (lost) on high resolution stream matwey
2016-07-19 20:56 ` Bin Liu
2016-07-19 21:25   ` Matwey V. Kornilov
2016-07-19 21:34     ` Bin Liu
2016-07-20  6:09       ` Matwey V. Kornilov
2016-07-20  8:21         ` Matwey V. Kornilov
2016-07-20 14:13         ` Bin Liu
2016-07-20 14:44           ` Matwey V. Kornilov
2016-07-20 15:06             ` Bin Liu
2016-07-20 18:56               ` Matwey V. Kornilov
2016-07-23 19:24                 ` Matwey V. Kornilov
2016-07-27 17:34                   ` Matwey V. Kornilov
2016-07-28 16:16                     ` Matwey V. Kornilov
2016-07-29 18:01                       ` Matwey V. Kornilov
2016-07-31 20:31                         ` Matwey V. Kornilov
2016-08-01 16:50                           ` Viresh Kumar
2016-08-01 17:01                             ` Matwey V. Kornilov
2016-08-01 17:06                               ` Viresh Kumar
2016-08-01 18:11                                 ` Matwey V. Kornilov
2016-08-01 18:16                           ` Matwey V. Kornilov
2016-08-04 16:57                             ` Matwey V. Kornilov
2016-08-04 19:08                               ` Matwey V. Kornilov
2016-08-04 19:58                                 ` Matwey V. Kornilov
2016-08-04 20:08                                   ` Matwey V. Kornilov
2016-08-18 13:31                                     ` Matwey V. Kornilov
2016-08-20 18:09                                       ` Matwey V. Kornilov
2016-08-21 14:02                                         ` Matwey V. Kornilov
2016-08-21 16:07                                           ` Matwey V. Kornilov
2016-08-21 22:00                                             ` Alan Stern
2016-08-22  8:32                                               ` Matwey V. Kornilov
2016-08-24 18:17                                                 ` Matwey V. Kornilov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).