Thread: [libdc1394-devel] VIDEO1394_IOC_LISTEN_WAIT/POLL_BUFFER ioctl failed!
Capture and control API for IIDC compliant cameras
Brought to you by:
ddouxchamps,
gordp
From: Cagdas O. <ca...@xs...> - 2006-03-28 08:53:01
|
Hi, I was getting this error often when using dma_capture with WAIT policy. So I dug the reason behind it until the kernel. The reason is I consume frames in a burst and sometimes the last one I WAIT for is not there and WAIT is interrupted within kernel. 2.6.16 kernel uses the same call for POLL_BUFFER and WAIT_BUFFER. In the case that WAIT_BUFFER call wakes up from wait_interruptible BEFORE a frame arrives, kernel returns the same errno, EINTR to libdc1394 as it would do for POLL_BUFFER is returning empty buffer. In libdc1394 this errno is perfectly well processed for POLL_BUFFER but WAIT_BUFFER failure is not processed correctly. In this case libdc1394 returns DC1394_FAILURE instead. Moreover the ring buffer counter is increased by one. This is meaningless. Increasing this count can help a dma_done_with_buffer after such a failure but the correct policy should return something else that waiting application should be able to process and retry as necessary. Of course ring buffer counter should remain same as it rolls back to original at POLL_BUFFER policy. These are actually same things, policy only changes expectation but failure should be analysed carefully by the application. I already hacked pre6 for a usable work around. As far as I see today revision 1.26.2.25 of dc1394_capture.c in CVS is still not addressing this issue. Do you want a patch against pre6 or CVS? One little question if anybody remembers: At what kernel revision using a single frame ring buffer became possible? I guess this error was introduced around that time because now completely empty ring buffer is possible. regards, Cagdas |