Commit b4916f8c authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

V4L/DVB (7564): em28xx: Some fixes to display logic

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent dbecb44c
...@@ -365,32 +365,33 @@ static inline int em28xx_isoc_copy(struct urb *urb) ...@@ -365,32 +365,33 @@ static inline int em28xx_isoc_copy(struct urb *urb)
/* FIXME: incomplete buffer checks where removed to make /* FIXME: incomplete buffer checks where removed to make
logic simpler. Impacts of those changes should be evaluated logic simpler. Impacts of those changes should be evaluated
*/ */
if (p[0] == 0x33 && p[1] == 0x95 && p[2] == 0x00) {
em28xx_isocdbg("VBI HEADER!!!\n");
/* FIXME: Should add vbi copy */
continue;
}
if (p[0] == 0x22 && p[1] == 0x5a) { if (p[0] == 0x22 && p[1] == 0x5a) {
em28xx_isocdbg("Video frame %d, length=%i, %s\n", p[2], em28xx_isocdbg("Video frame %d, length=%i, %s\n", p[2],
len, (p[2] & 1)? "odd" : "even"); len, (p[2] & 1)? "odd" : "even");
if (p[2] & 1) if (p[2] & 1)
buf->top_field = 0; buf->top_field = 0;
else { else
if (buf->receiving) {
buffer_filled(dev, dma_q, buf);
rc = get_next_buf(dma_q, &buf);
if (rc <= 0)
return rc;
outp = videobuf_to_vmalloc(&buf->vb);
}
buf->top_field = 1; buf->top_field = 1;
// if (dev->isoc_ctl.last_field && !buf->top_field) {
if (dev->isoc_ctl.last_field != buf->top_field) {
buffer_filled(dev, dma_q, buf);
rc = get_next_buf(dma_q, &buf);
if (rc <= 0)
return rc;
outp = videobuf_to_vmalloc(&buf->vb);
} }
buf->receiving = 1; dev->isoc_ctl.last_field = buf->top_field;
dma_q->pos = 0; dma_q->pos = 0;
} else if (p[0] == 0x33 && p[1] == 0x95 && p[2] == 0x00) {
em28xx_isocdbg("VBI HEADER!!!\n");
} }
em28xx_copy_video(dev, dma_q, buf, p, outp, len); em28xx_copy_video(dev, dma_q, buf, p, outp, len);
/* FIXME: Should add vbi copy */
} }
return rc; return rc;
} }
......
...@@ -114,6 +114,9 @@ struct em28xx_usb_isoc_ctl { ...@@ -114,6 +114,9 @@ struct em28xx_usb_isoc_ctl {
/* Stores already requested buffers */ /* Stores already requested buffers */
struct em28xx_buffer *buf; struct em28xx_buffer *buf;
/* Store last filled frame */
int last_field;
/* Stores the number of received fields */ /* Stores the number of received fields */
int nfields; int nfields;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment