Re: [libdc] dc1394 on usb, format7 framerate
Capture and control API for IIDC compliant cameras
Brought to you by:
ddouxchamps,
gordp
From: Philippe De M. <ph...@ma...> - 2016-10-10 21:41:55
|
Hi Damien, On Mon, Oct 10, 2016 at 11:09:56PM +0900, Damien Douxchamps wrote: > Hi Philippe, > > On Thu, 2016-10-06 at 14:35 +0200, Philippe De Muyter wrote: > > Hi dc1394 experts, > > > > I try to use a iidc/usb camera on linux on a USB 2.0 host, and I have > > questions about the framerate setting. The libdc1394 faqs explains > > only the real firewire cases. > > > > - is there a way using libdc1394 to know we are actually working with > > a usb camera ? > > I had a quick look at the code and there seems to be no way to do so at > the moment. It would relatively trivial to do, for example by setting > flags in the currently unused dc134_camera_t->flags. I will look into > that. > > > - is there a libdc1394 function yielding the actual bus speed (not > > dc1394_video_get_iso_speed, which only gives firewire speed) > > This would be a libusb functionality. Of course it could be also probed > by libdc... > > > - would that help to compute the packet size needed to obtain > > a desired framerate ? > > Sorry, not sure here... > > > - is there another way using libdc1394 to set the framerate for > > format7 modes ? > > I usually use the "framerate" feature. You can see it in coriander if > it's supported by your camera (my FireflyMV USB has it). Now that you mention it, I finally see the "framerate" feature in coriander (it's the last entry in the Controls tab). I must admit that I hadn't noticed it before. > > You could also enable the timestamp feature that some PGR cameras have, > although their meaning for USB devices is not obvious (it's related to > the bus clock on 1394 devices). PGR has great manuals though... > > > I have some experimental results with a PointGrey Chameleon3 CM3-U3-13Y3C : > > Here are the times to transmit 75 1280x1024 Y422 (also called UYVY) frames, > > thus with a frame size equal to 1280x1024x2 = 2621440 bytes. Camera > > answers : unit_bytes = 328, max_bytes = 6560. > > > > packet_size time for 75 frames > > 328 1m17.667s > > 656 0m39.398s > > 984 0m26.611s > > 2624 0m10.300s 0m10.361s 0m10.401s > > 2952 0m9.273s 0m9.431s 0m9.276s > > 3280 0m8.926s 0m8.504s 0m9.185s > > 3608 0m8.639s 0m8.537s 0m8.691s > > 3936 0m8.470s 0m8.651s 0m8.466s > > 4264 0m8.488s 0m8.637s 0m8.507s > > 4592 0m8.503s 0m8.485s 0m8.736s > > 4920 0m8.512s 0m8.495s 0m8.550s > > 5248 0m10.105s 0m10.232s 0m10.170s > > 5576 0m9.594s 0m9.549s 0m9.715s > > 5904 0m9.092s 0m9.113s 0m9.151s > > 6232 0m8.678s 0m8.662s 0m8.658s > > 6560 0m8.391s 0m8.409s 0m8.748s > > > > Note the strange behaviour beginning at 5248 > > That's a bit odd. Padding bytes would not explain such a large > difference. Note the decreasing pattern from 2624 is similar from the > what is observed at 5248. Meanwhile, I have measured again the transfer rate with all the possible packet sizes for different pixelformats, thus with different 'total_bytes' for a frame. I've come to the conclusion that 'unit_bytes' for each pixelformat for my camera is the packet size that will produce a '1 fps' transfer rate. If I configure a 'n * unit_bytes' packet size, I get a 'n fps' transfer rate, up to around a ~5084 packet size. Above that packet size the transfer rate is reset to a lower value. This is probably limited by the USB 2.0 bus speed. Now, using coriander, I see that in order to use the 'framerate' feature, I must set the packet_size to its highest value (or perhaps the 'recommended' value), Alternatively, if I reduce the 'packet size', I see that the framerate feature value follows the change in packet size. I'll try using the "framerate" feature, instead of reducing the packet size. Thanks for you answer Philippe -- Philippe De Muyter +32 2 6101532 Macq SA rue de l'Aeronef 2 B-1140 Bruxelles |