Hi Shuzhen,

On Tuesday 21 December 2010 08:04:04 Shuzhen Wang wrote:
> I narrowed the issue a little bit more. It looks like a bandwidth/
> throughput issue. The sequence is like this:
> 
> Timestamp(seconds)
> 101.995432            Queue 0
> 101.995705            Queue 1
> 101.995978            Queue 2
> 101.996250            Queue 3
> 103.129925            Frame 0 complete
> 103.165819            Frame 1 complete
> 103.201672            Frame 2 complete
> 103.237764            Frame 3 complete
> 103.239244            Dequeue 0
> 103.241105            Queue 0
> 103.241153            Dequeue 1
> 103.243283            Queue 1
> 103.243333            Dequeue 2
> 103.245113            Queue 2
> 103.245161            Dequeue 3
> 103.247259            Queue 3
> 103.296360            Frame 0 complete
> ....
> 
> In this case, the frame interval is: 33ms-33ms-33ms-67ms.
> So in this case, effectively 1 frame is dropped at the driver level.
> 
> One thing worth noting is that the user space application has a loop
> like this (in pseudo code):
> 
>   Stream on
>   ......
>   while(true) {
>       Dequeue buffer;
>       Queue buffer;
>   }
> 
> 
> Is the frame drop due to the isochronous nature of the UVC protocol?
> In other words, because of the multiple Dequeue & Queue operations
> happening at the 103.239244 timestamp, the next frame doesn't have
> enough time/processing bandwidth to finish. Hence 1 frame is dropped.
> 
> Does this make sense?

I'd rather say that the driver starts receiving the next frame between 
103.237764 and 103.239244. As there's no buffer left at that point the frame 
is dropped.

What puzzles me is why your application doesn't start dequeuing (and 
requeuing) buffers at 103.129925, when the first frame is complete. It lets 
the buffers queue get empty, resulting in frame drop.

-- 
Regards,

Laurent Pinchart
_______________________________________________
Linux-uvc-devel mailing list
Linux-uvc-devel@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel

Reply via email to