After an upgrade from Cord Seele's meteor2 driver v. 1.0 to v. 1.1 I am
experiencing unpredictable errors. More specifically the problem occurs
when I repeatedly grab a single image from a camera in a loop similar to
this:
while (condition) {
...
n = read(v4l2->fd, img, v4l2->fmt.fmt.pix.sizeimage);
...
condition = process_image();
}
This runs just fine for a while but then hangs in the read call. The
debug output from the meteor2 driver is shown below. Since the error
does not occur everytime I run the code (but on more than half of the
executions) it is probably a timing/race problem.
<log>
Mar 3 14:58:15 vegan kernel: meteor2[via_v4l2_open]: new id: CAEEFE80
flags: 0 512
Mar 3 14:58:15 vegan kernel: meteor2[via_v4l2_read]: no filled buffer,
start snapshot
Mar 3 14:58:15 vegan kernel: meteor2[via_v4l2_read]: no buffers
requested so far
Mar 3 14:58:15 vegan kernel: meteor2[via_free_himem_bufs]: freeing 3
stream_bufs @ c1362d80
Mar 3 14:58:15 vegan kernel: meteor2[via_free_himem_bufs]: yanking buf 0
Mar 3 14:58:15 vegan kernel: meteor2[via_free_himem_bufs]: buf 1 not queued
Mar 3 14:58:15 vegan kernel: meteor2[via_free_himem_bufs]: buf 2 not queued
Mar 3 14:58:15 vegan kernel: meteor2[unmap_stream_bufs]: unmapping 3
bufs @ 0xc1362d80
Mar 3 14:58:15 vegan kernel: meteor2[unmap_stream_bufs]: sbuf->virt:
0xd8a5f000
Mar 3 14:58:15 vegan kernel: meteor2[unmap_stream_bufs]: sbuf->virt:
0xd8b90000
Mar 3 14:58:15 vegan kernel: meteor2[unmap_stream_bufs]: sbuf->virt:
0xd8cc1000
Mar 3 14:58:15 vegan kernel: meteor2[remap_stream_bufs]: mapping 3 bufs
@ 0xc1362d80
Mar 3 14:58:15 vegan kernel: meteor2[remap_stream_bufs]: addr->virt:
0xfc00000->0xd8a5f000
Mar 3 14:58:15 vegan kernel: meteor2[remap_stream_bufs]: addr->virt:
0xfd30000->0xd8b90000
Mar 3 14:58:15 vegan kernel: meteor2[remap_stream_bufs]: addr->virt:
0xfe60000->0xd8cc1000
Mar 3 14:58:15 vegan kernel: meteor2[via_v4l2_read]: need to queue a
DMA buffer
Mar 3 14:58:15 vegan kernel: meteor2[via_handle_irq_eog]: INTERNAL
ERROR: unexpected grab_state 3
</log>
grab_state 3 is STATE_G_PENDING which is set in via_snapshot_start() but
this function is seemingly only used for streaming video?!
Has any of you experienced similar problems?
- Christian