mirror of https://gitee.com/openkylin/linux.git
[media] em28xx: em28xx_urb_data_copy(): move duplicate code for capture_type=0 and capture_type=2 to a function
Reduce code duplication by moving the duplicate code for dev->capture_type=0 (vbi start) and dev->capture_type=2 (video start) to a function. The same function will also be called by the (not yet existing) em25xx frame data processing code. Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
4078d625c9
commit
e04c00d985
|
@ -358,6 +358,27 @@ static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev,
|
|||
return buf;
|
||||
}
|
||||
|
||||
/*
|
||||
* Finish the current buffer if completed and prepare for the next field
|
||||
*/
|
||||
static struct em28xx_buffer *
|
||||
finish_field_prepare_next(struct em28xx *dev,
|
||||
struct em28xx_buffer *buf,
|
||||
struct em28xx_dmaqueue *dma_q)
|
||||
{
|
||||
if (dev->progressive || dev->top_field) { /* Brand new frame */
|
||||
if (buf != NULL)
|
||||
finish_buffer(dev, buf);
|
||||
buf = get_next_buf(dev, dma_q);
|
||||
}
|
||||
if (buf != NULL) {
|
||||
buf->top_field = dev->top_field;
|
||||
buf->pos = 0;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
/* Processes and copies the URB data content (video and VBI data) */
|
||||
static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
|
||||
{
|
||||
|
@ -448,17 +469,9 @@ static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
|
|||
* have no continuation header */
|
||||
|
||||
if (dev->capture_type == 0) {
|
||||
vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q);
|
||||
dev->usb_ctl.vbi_buf = vbi_buf;
|
||||
dev->capture_type = 1;
|
||||
if (dev->top_field) { /* Brand new frame */
|
||||
if (vbi_buf != NULL)
|
||||
finish_buffer(dev, vbi_buf);
|
||||
vbi_buf = get_next_buf(dev, vbi_dma_q);
|
||||
dev->usb_ctl.vbi_buf = vbi_buf;
|
||||
}
|
||||
if (vbi_buf != NULL) {
|
||||
vbi_buf->top_field = dev->top_field;
|
||||
vbi_buf->pos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->capture_type == 1) {
|
||||
|
@ -480,17 +493,9 @@ static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
|
|||
}
|
||||
|
||||
if (dev->capture_type == 2) {
|
||||
buf = finish_field_prepare_next(dev, buf, dma_q);
|
||||
dev->usb_ctl.vid_buf = buf;
|
||||
dev->capture_type = 3;
|
||||
if (dev->progressive || dev->top_field) {
|
||||
if (buf != NULL)
|
||||
finish_buffer(dev, buf);
|
||||
buf = get_next_buf(dev, dma_q);
|
||||
dev->usb_ctl.vid_buf = buf;
|
||||
}
|
||||
if (buf != NULL) {
|
||||
buf->top_field = dev->top_field;
|
||||
buf->pos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (buf != NULL && dev->capture_type == 3 && len > 0)
|
||||
|
|
Loading…
Reference in New Issue