提交 e04c00d9 编写于 作者: F Frank Schaefer 提交者: Mauro Carvalho Chehab

[media] em28xx: em28xx_urb_data_copy(): move duplicate code for capture_type=0...

[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: NFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 4078d625
...@@ -358,6 +358,27 @@ static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev, ...@@ -358,6 +358,27 @@ static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev,
return buf; 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) */ /* Processes and copies the URB data content (video and VBI data) */
static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb) 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) ...@@ -448,17 +469,9 @@ static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
* have no continuation header */ * have no continuation header */
if (dev->capture_type == 0) { 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; 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) { if (dev->capture_type == 1) {
...@@ -480,17 +493,9 @@ static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb) ...@@ -480,17 +493,9 @@ static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
} }
if (dev->capture_type == 2) { if (dev->capture_type == 2) {
buf = finish_field_prepare_next(dev, buf, dma_q);
dev->usb_ctl.vid_buf = buf;
dev->capture_type = 3; 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) if (buf != NULL && dev->capture_type == 3 && len > 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册