dev->capture_type = 0;
dev->vbi_read = 0;
em28xx_isocdbg("VBI START HEADER!!!\n");
- dev->cur_field = p[2];
+ dev->top_field = !(p[2] & 1);
p += 4;
len -= 4;
} else if (p[0] == 0x88 && p[1] == 0x88 &&
len -= 4;
} else if (p[0] == 0x22 && p[1] == 0x5a) {
/* start video */
+ dev->capture_type = 1;
+ dev->top_field = !(p[2] & 1);
p += 4;
len -= 4;
}
em28xx_isocdbg("dev->vbi_read > vbi_size\n");
} else if ((dev->vbi_read + len) < vbi_size) {
/* This entire frame is VBI data */
- if (dev->vbi_read == 0 &&
- (!(dev->cur_field & 1))) {
+ if (dev->vbi_read == 0 && dev->top_field) {
/* Brand new frame */
if (vbi_buf != NULL)
vbi_buffer_filled(dev,
if (dev->vbi_read == 0) {
vbi_dma_q->pos = 0;
- if (vbi_buf != NULL) {
- if (dev->cur_field & 1)
- vbi_buf->top_field = 0;
- else
- vbi_buf->top_field = 1;
- }
+ if (vbi_buf != NULL)
+ vbi_buf->top_field = dev->top_field;
}
dev->vbi_read += len;
if (dev->capture_type == 1) {
dev->capture_type = 2;
- if (dev->progressive || !(dev->cur_field & 1)) {
+ if (dev->progressive || dev->top_field) {
if (buf != NULL)
buffer_filled(dev, dma_q, buf);
get_next_buf(dma_q, &buf);
else
outp = videobuf_to_vmalloc(&buf->vb);
}
- if (buf != NULL) {
- if (dev->cur_field & 1)
- buf->top_field = 0;
- else
- buf->top_field = 1;
- }
+ if (buf != NULL)
+ buf->top_field = dev->top_field;
dma_q->pos = 0;
}
urb_init = 1;
if (urb_init) {
+ dev->capture_type = -1;
if (em28xx_vbi_supported(dev) == 1)
rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE,
dev->analog_xfer_bulk,