I've almost got my bttv WinTV card working (I get pictures out at 25fps for 384x288 and about 15fps at 768x576 including rendering using openGL). The last problem I have is that sometimes the buffer I read seems to either 1) have not finnished updating before I read it or 2) Have started updating the next frame before I've read the whole image. See: http://www.comp.leeds.ac.uk/drm/problem.gif I'm trying to read/write from/to 2 frames the reading code is (VERSION 1): the_read_function() { ioctl(fd,VIDIOCMCAPTURE,&vmmap) ; // Request capture to current buffer src = buff + mbuf.offsets[currentBuffer] ; // Set read pointer if(currentBuffer==0) currentBuffer = 1 ; else currentBuffer = 0 ; vmmap.frame = currentBuffer ; ioctl(fd,VIDIOCSYNC,&vmmap) ; // Release next buffer for writing ..... Read out data from src (i.e. frame just written to) } Alternatively (VERSION 2): the_read_function_v2() { ioctl(fd,VIDIOCSYNC,&vmmap) ; // Release current buffer for writing ioctl(fd,VIDIOCMCAPTURE,&vmmap) ; // Request capture to current buffer src = buff + mbuf.offsets[currentBuffer] ; // Set read pointer if(currentBuffer==0) currentBuffer = 1 ; else currentBuffer = 0 ; vmmap.frame = currentBuffer ; ..... Read out data from src (i.e. frame just written to) } Both these combinations produce the problem reasonably frequently. Am I doing something wrong or is it a feature of the hardware? Many thanks Derek Magee