V4L/DVB (7564): em28xx: Some fixes to display logic
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
@@ -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 {
|
|||||||
/* 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;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user