diff options
-rw-r--r-- | drivers/media/video/gspca/spca505.c | 105 | ||||
-rw-r--r-- | drivers/media/video/gspca/spca506.c | 105 | ||||
-rw-r--r-- | drivers/media/video/gspca/spca508.c | 91 | ||||
-rw-r--r-- | include/linux/videodev2.h | 2 |
4 files changed, 76 insertions, 227 deletions
diff --git a/drivers/media/video/gspca/spca505.c b/drivers/media/video/gspca/spca505.c index 284d549e4d3e..32ffe5556061 100644 --- a/drivers/media/video/gspca/spca505.c +++ b/drivers/media/video/gspca/spca505.c | |||
@@ -31,10 +31,6 @@ MODULE_LICENSE("GPL"); | |||
31 | struct sd { | 31 | struct sd { |
32 | struct gspca_dev gspca_dev; /* !! must be the first item */ | 32 | struct gspca_dev gspca_dev; /* !! must be the first item */ |
33 | 33 | ||
34 | int buflen; | ||
35 | unsigned char tmpbuf[640 * 480 * 3 / 2]; /* YYUV per line */ | ||
36 | unsigned char tmpbuf2[640 * 480 * 2]; /* YUYV */ | ||
37 | |||
38 | unsigned char brightness; | 34 | unsigned char brightness; |
39 | 35 | ||
40 | char subtype; | 36 | char subtype; |
@@ -64,29 +60,29 @@ static struct ctrl sd_ctrls[] = { | |||
64 | }; | 60 | }; |
65 | 61 | ||
66 | static struct v4l2_pix_format vga_mode[] = { | 62 | static struct v4l2_pix_format vga_mode[] = { |
67 | {160, 120, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 63 | {160, 120, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
68 | .bytesperline = 160 * 2, | 64 | .bytesperline = 160 * 3, |
69 | .sizeimage = 160 * 120 * 2, | 65 | .sizeimage = 160 * 120 * 3 / 2, |
70 | .colorspace = V4L2_COLORSPACE_SRGB, | 66 | .colorspace = V4L2_COLORSPACE_SRGB, |
71 | .priv = 5}, | 67 | .priv = 5}, |
72 | {176, 144, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 68 | {176, 144, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
73 | .bytesperline = 176 * 2, | 69 | .bytesperline = 176 * 3, |
74 | .sizeimage = 176 * 144 * 2, | 70 | .sizeimage = 176 * 144 * 3 / 2, |
75 | .colorspace = V4L2_COLORSPACE_SRGB, | 71 | .colorspace = V4L2_COLORSPACE_SRGB, |
76 | .priv = 4}, | 72 | .priv = 4}, |
77 | {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 73 | {320, 240, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
78 | .bytesperline = 320 * 2, | 74 | .bytesperline = 320 * 3, |
79 | .sizeimage = 320 * 240 * 2, | 75 | .sizeimage = 320 * 240 * 3 / 2, |
80 | .colorspace = V4L2_COLORSPACE_SRGB, | 76 | .colorspace = V4L2_COLORSPACE_SRGB, |
81 | .priv = 2}, | 77 | .priv = 2}, |
82 | {352, 288, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 78 | {352, 288, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
83 | .bytesperline = 352 * 2, | 79 | .bytesperline = 352 * 3, |
84 | .sizeimage = 352 * 288 * 2, | 80 | .sizeimage = 352 * 288 * 3 / 2, |
85 | .colorspace = V4L2_COLORSPACE_SRGB, | 81 | .colorspace = V4L2_COLORSPACE_SRGB, |
86 | .priv = 1}, | 82 | .priv = 1}, |
87 | {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 83 | {640, 480, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
88 | .bytesperline = 640 * 2, | 84 | .bytesperline = 640 * 3, |
89 | .sizeimage = 640 * 480 * 2, | 85 | .sizeimage = 640 * 480 * 3 / 2, |
90 | .colorspace = V4L2_COLORSPACE_SRGB, | 86 | .colorspace = V4L2_COLORSPACE_SRGB, |
91 | .priv = 0}, | 87 | .priv = 0}, |
92 | }; | 88 | }; |
@@ -760,77 +756,30 @@ static void sd_close(struct gspca_dev *gspca_dev) | |||
760 | reg_write(gspca_dev->dev, 0x05, 0x11, 0xf); | 756 | reg_write(gspca_dev->dev, 0x05, 0x11, 0xf); |
761 | } | 757 | } |
762 | 758 | ||
763 | /* convert YYUV per line to YUYV (YUV 4:2:2) */ | ||
764 | static void yyuv_decode(unsigned char *out, | ||
765 | unsigned char *in, | ||
766 | int width, | ||
767 | int height) | ||
768 | { | ||
769 | unsigned char *Ui, *Vi, *yi, *yi1; | ||
770 | unsigned char *out1; | ||
771 | int i, j; | ||
772 | |||
773 | yi = in; | ||
774 | for (i = height / 2; --i >= 0; ) { | ||
775 | out1 = out + width * 2; /* next line */ | ||
776 | yi1 = yi + width; | ||
777 | Ui = yi1 + width; | ||
778 | Vi = Ui + width / 2; | ||
779 | for (j = width / 2; --j >= 0; ) { | ||
780 | *out++ = 128 + *yi++; | ||
781 | *out++ = 128 + *Ui; | ||
782 | *out++ = 128 + *yi++; | ||
783 | *out++ = 128 + *Vi; | ||
784 | |||
785 | *out1++ = 128 + *yi1++; | ||
786 | *out1++ = 128 + *Ui++; | ||
787 | *out1++ = 128 + *yi1++; | ||
788 | *out1++ = 128 + *Vi++; | ||
789 | } | ||
790 | yi += width * 2; | ||
791 | out = out1; | ||
792 | } | ||
793 | } | ||
794 | |||
795 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 759 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
796 | struct gspca_frame *frame, /* target */ | 760 | struct gspca_frame *frame, /* target */ |
797 | __u8 *data, /* isoc packet */ | 761 | __u8 *data, /* isoc packet */ |
798 | int len) /* iso packet length */ | 762 | int len) /* iso packet length */ |
799 | { | 763 | { |
800 | struct sd *sd = (struct sd *) gspca_dev; | ||
801 | |||
802 | switch (data[0]) { | 764 | switch (data[0]) { |
803 | case 0: /* start of frame */ | 765 | case 0: /* start of frame */ |
804 | if (gspca_dev->last_packet_type == FIRST_PACKET) { | 766 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, |
805 | yyuv_decode(sd->tmpbuf2, sd->tmpbuf, | 767 | data, 0); |
806 | gspca_dev->width, | ||
807 | gspca_dev->height); | ||
808 | frame = gspca_frame_add(gspca_dev, | ||
809 | LAST_PACKET, | ||
810 | frame, | ||
811 | sd->tmpbuf2, | ||
812 | gspca_dev->width | ||
813 | * gspca_dev->height | ||
814 | * 2); | ||
815 | } | ||
816 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | ||
817 | data, 0); | ||
818 | data += SPCA50X_OFFSET_DATA; | 768 | data += SPCA50X_OFFSET_DATA; |
819 | len -= SPCA50X_OFFSET_DATA; | 769 | len -= SPCA50X_OFFSET_DATA; |
820 | if (len > 0) | 770 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, |
821 | memcpy(sd->tmpbuf, data, len); | 771 | data, len); |
822 | else | 772 | break; |
823 | len = 0; | ||
824 | sd->buflen = len; | ||
825 | return; | ||
826 | case 0xff: /* drop */ | 773 | case 0xff: /* drop */ |
827 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ | 774 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ |
828 | return; | 775 | break; |
776 | default: | ||
777 | data += 1; | ||
778 | len -= 1; | ||
779 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | ||
780 | data, len); | ||
781 | break; | ||
829 | } | 782 | } |
830 | data += 1; | ||
831 | len -= 1; | ||
832 | memcpy(&sd->tmpbuf[sd->buflen], data, len); | ||
833 | sd->buflen += len; | ||
834 | } | 783 | } |
835 | 784 | ||
836 | static void setbrightness(struct gspca_dev *gspca_dev) | 785 | static void setbrightness(struct gspca_dev *gspca_dev) |
diff --git a/drivers/media/video/gspca/spca506.c b/drivers/media/video/gspca/spca506.c index 2c281a0563e5..6fe715c80ad2 100644 --- a/drivers/media/video/gspca/spca506.c +++ b/drivers/media/video/gspca/spca506.c | |||
@@ -33,10 +33,6 @@ MODULE_LICENSE("GPL"); | |||
33 | struct sd { | 33 | struct sd { |
34 | struct gspca_dev gspca_dev; /* !! must be the first item */ | 34 | struct gspca_dev gspca_dev; /* !! must be the first item */ |
35 | 35 | ||
36 | int buflen; | ||
37 | __u8 tmpbuf[640 * 480 * 3]; /* YYUV per line */ | ||
38 | __u8 tmpbuf2[640 * 480 * 2]; /* YUYV */ | ||
39 | |||
40 | unsigned char brightness; | 36 | unsigned char brightness; |
41 | unsigned char contrast; | 37 | unsigned char contrast; |
42 | unsigned char colors; | 38 | unsigned char colors; |
@@ -115,29 +111,29 @@ static struct ctrl sd_ctrls[] = { | |||
115 | }; | 111 | }; |
116 | 112 | ||
117 | static struct v4l2_pix_format vga_mode[] = { | 113 | static struct v4l2_pix_format vga_mode[] = { |
118 | {160, 120, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 114 | {160, 120, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
119 | .bytesperline = 160 * 2, | 115 | .bytesperline = 160 * 3, |
120 | .sizeimage = 160 * 120 * 2, | 116 | .sizeimage = 160 * 120 * 3 / 2, |
121 | .colorspace = V4L2_COLORSPACE_SRGB, | 117 | .colorspace = V4L2_COLORSPACE_SRGB, |
122 | .priv = 5}, | 118 | .priv = 5}, |
123 | {176, 144, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 119 | {176, 144, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
124 | .bytesperline = 176 * 2, | 120 | .bytesperline = 176 * 3, |
125 | .sizeimage = 176 * 144 * 2, | 121 | .sizeimage = 176 * 144 * 3 / 2, |
126 | .colorspace = V4L2_COLORSPACE_SRGB, | 122 | .colorspace = V4L2_COLORSPACE_SRGB, |
127 | .priv = 4}, | 123 | .priv = 4}, |
128 | {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 124 | {320, 240, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
129 | .bytesperline = 320 * 2, | 125 | .bytesperline = 320 * 3, |
130 | .sizeimage = 320 * 240 * 2, | 126 | .sizeimage = 320 * 240 * 3 / 2, |
131 | .colorspace = V4L2_COLORSPACE_SRGB, | 127 | .colorspace = V4L2_COLORSPACE_SRGB, |
132 | .priv = 2}, | 128 | .priv = 2}, |
133 | {352, 288, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 129 | {352, 288, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
134 | .bytesperline = 352 * 2, | 130 | .bytesperline = 352 * 3, |
135 | .sizeimage = 352 * 288 * 2, | 131 | .sizeimage = 352 * 288 * 3 / 2, |
136 | .colorspace = V4L2_COLORSPACE_SRGB, | 132 | .colorspace = V4L2_COLORSPACE_SRGB, |
137 | .priv = 1}, | 133 | .priv = 1}, |
138 | {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 134 | {640, 480, V4L2_PIX_FMT_SPCA505, V4L2_FIELD_NONE, |
139 | .bytesperline = 640 * 2, | 135 | .bytesperline = 640 * 3, |
140 | .sizeimage = 640 * 480 * 2, | 136 | .sizeimage = 640 * 480 * 3 / 2, |
141 | .colorspace = V4L2_COLORSPACE_SRGB, | 137 | .colorspace = V4L2_COLORSPACE_SRGB, |
142 | .priv = 0}, | 138 | .priv = 0}, |
143 | }; | 139 | }; |
@@ -572,77 +568,30 @@ static void sd_close(struct gspca_dev *gspca_dev) | |||
572 | { | 568 | { |
573 | } | 569 | } |
574 | 570 | ||
575 | /* convert YYUV per line to YUYV (YUV 4:2:2) */ | ||
576 | static void yyuv_decode(unsigned char *out, | ||
577 | unsigned char *in, | ||
578 | int width, | ||
579 | int height) | ||
580 | { | ||
581 | unsigned char *Ui, *Vi, *yi, *yi1; | ||
582 | unsigned char *out1; | ||
583 | int i, j; | ||
584 | |||
585 | yi = in; | ||
586 | for (i = height / 2; --i >= 0; ) { | ||
587 | out1 = out + width * 2; /* next line */ | ||
588 | yi1 = yi + width; | ||
589 | Ui = yi1 + width; | ||
590 | Vi = Ui + width / 2; | ||
591 | for (j = width / 2; --j >= 0; ) { | ||
592 | *out++ = 128 + *yi++; | ||
593 | *out++ = 128 + *Ui; | ||
594 | *out++ = 128 + *yi++; | ||
595 | *out++ = 128 + *Vi; | ||
596 | |||
597 | *out1++ = 128 + *yi1++; | ||
598 | *out1++ = 128 + *Ui++; | ||
599 | *out1++ = 128 + *yi1++; | ||
600 | *out1++ = 128 + *Vi++; | ||
601 | } | ||
602 | yi += width * 2; | ||
603 | out = out1; | ||
604 | } | ||
605 | } | ||
606 | |||
607 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 571 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
608 | struct gspca_frame *frame, /* target */ | 572 | struct gspca_frame *frame, /* target */ |
609 | __u8 *data, /* isoc packet */ | 573 | __u8 *data, /* isoc packet */ |
610 | int len) /* iso packet length */ | 574 | int len) /* iso packet length */ |
611 | { | 575 | { |
612 | struct sd *sd = (struct sd *) gspca_dev; | ||
613 | |||
614 | switch (data[0]) { | 576 | switch (data[0]) { |
615 | case 0: /* start of frame */ | 577 | case 0: /* start of frame */ |
616 | if (gspca_dev->last_packet_type == FIRST_PACKET) { | 578 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, |
617 | yyuv_decode(sd->tmpbuf2, sd->tmpbuf, | 579 | data, 0); |
618 | gspca_dev->width, | ||
619 | gspca_dev->height); | ||
620 | frame = gspca_frame_add(gspca_dev, | ||
621 | LAST_PACKET, | ||
622 | frame, | ||
623 | sd->tmpbuf2, | ||
624 | gspca_dev->width | ||
625 | * gspca_dev->height | ||
626 | * 2); | ||
627 | } | ||
628 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | ||
629 | data, 0); | ||
630 | data += SPCA50X_OFFSET_DATA; | 580 | data += SPCA50X_OFFSET_DATA; |
631 | len -= SPCA50X_OFFSET_DATA; | 581 | len -= SPCA50X_OFFSET_DATA; |
632 | if (len > 0) | 582 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, |
633 | memcpy(sd->tmpbuf, data, len); | 583 | data, len); |
634 | else | 584 | break; |
635 | len = 0; | ||
636 | sd->buflen = len; | ||
637 | return; | ||
638 | case 0xff: /* drop */ | 585 | case 0xff: /* drop */ |
639 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ | 586 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ |
640 | return; | 587 | break; |
588 | default: | ||
589 | data += 1; | ||
590 | len -= 1; | ||
591 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | ||
592 | data, len); | ||
593 | break; | ||
641 | } | 594 | } |
642 | data += 1; | ||
643 | len -= 1; | ||
644 | memcpy(&sd->tmpbuf[sd->buflen], data, len); | ||
645 | sd->buflen += len; | ||
646 | } | 595 | } |
647 | 596 | ||
648 | static void setbrightness(struct gspca_dev *gspca_dev) | 597 | static void setbrightness(struct gspca_dev *gspca_dev) |
diff --git a/drivers/media/video/gspca/spca508.c b/drivers/media/video/gspca/spca508.c index af531d62856c..4378e966edcc 100644 --- a/drivers/media/video/gspca/spca508.c +++ b/drivers/media/video/gspca/spca508.c | |||
@@ -30,10 +30,6 @@ MODULE_LICENSE("GPL"); | |||
30 | struct sd { | 30 | struct sd { |
31 | struct gspca_dev gspca_dev; /* !! must be the first item */ | 31 | struct gspca_dev gspca_dev; /* !! must be the first item */ |
32 | 32 | ||
33 | int buflen; | ||
34 | unsigned char tmpbuf[352 * 288 * 3 / 2]; /* YUVY per line */ | ||
35 | unsigned char tmpbuf2[352 * 288 * 2]; /* YUYV */ | ||
36 | |||
37 | unsigned char brightness; | 33 | unsigned char brightness; |
38 | 34 | ||
39 | char subtype; | 35 | char subtype; |
@@ -68,23 +64,23 @@ static struct ctrl sd_ctrls[] = { | |||
68 | 64 | ||
69 | static struct v4l2_pix_format sif_mode[] = { | 65 | static struct v4l2_pix_format sif_mode[] = { |
70 | {160, 120, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 66 | {160, 120, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, |
71 | .bytesperline = 160 * 2, | 67 | .bytesperline = 160 * 3, |
72 | .sizeimage = 160 * 120 * 2, | 68 | .sizeimage = 160 * 120 * 3 / 2, |
73 | .colorspace = V4L2_COLORSPACE_SRGB, | 69 | .colorspace = V4L2_COLORSPACE_SRGB, |
74 | .priv = 3}, | 70 | .priv = 3}, |
75 | {176, 144, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 71 | {176, 144, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, |
76 | .bytesperline = 176 * 2, | 72 | .bytesperline = 176 * 3, |
77 | .sizeimage = 176 * 144 * 2, | 73 | .sizeimage = 176 * 144 * 3 / 2, |
78 | .colorspace = V4L2_COLORSPACE_SRGB, | 74 | .colorspace = V4L2_COLORSPACE_SRGB, |
79 | .priv = 2}, | 75 | .priv = 2}, |
80 | {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 76 | {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, |
81 | .bytesperline = 320 * 2, | 77 | .bytesperline = 320 * 3, |
82 | .sizeimage = 320 * 240 * 2, | 78 | .sizeimage = 320 * 240 * 3 / 2, |
83 | .colorspace = V4L2_COLORSPACE_SRGB, | 79 | .colorspace = V4L2_COLORSPACE_SRGB, |
84 | .priv = 1}, | 80 | .priv = 1}, |
85 | {352, 288, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, | 81 | {352, 288, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, |
86 | .bytesperline = 352 * 2, | 82 | .bytesperline = 352 * 3, |
87 | .sizeimage = 352 * 288 * 2, | 83 | .sizeimage = 352 * 288 * 3 / 2, |
88 | .colorspace = V4L2_COLORSPACE_SRGB, | 84 | .colorspace = V4L2_COLORSPACE_SRGB, |
89 | .priv = 0}, | 85 | .priv = 0}, |
90 | }; | 86 | }; |
@@ -1567,77 +1563,30 @@ static void sd_close(struct gspca_dev *gspca_dev) | |||
1567 | { | 1563 | { |
1568 | } | 1564 | } |
1569 | 1565 | ||
1570 | /* convert YUVY per line to YUYV (YUV 4:2:2) */ | ||
1571 | static void yuvy_decode(unsigned char *out, | ||
1572 | unsigned char *in, | ||
1573 | int width, | ||
1574 | int height) | ||
1575 | { | ||
1576 | unsigned char *Ui, *Vi, *yi, *yi1; | ||
1577 | unsigned char *out1; | ||
1578 | int i, j; | ||
1579 | |||
1580 | yi = in; | ||
1581 | for (i = height / 2; --i >= 0; ) { | ||
1582 | out1 = out + width * 2; /* next line */ | ||
1583 | Ui = yi + width; | ||
1584 | Vi = Ui + width / 2; | ||
1585 | yi1 = Vi + width / 2; | ||
1586 | for (j = width / 2; --j >= 0; ) { | ||
1587 | *out++ = 128 + *yi++; | ||
1588 | *out++ = 128 + *Ui; | ||
1589 | *out++ = 128 + *yi++; | ||
1590 | *out++ = 128 + *Vi; | ||
1591 | |||
1592 | *out1++ = 128 + *yi1++; | ||
1593 | *out1++ = 128 + *Ui++; | ||
1594 | *out1++ = 128 + *yi1++; | ||
1595 | *out1++ = 128 + *Vi++; | ||
1596 | } | ||
1597 | yi += width * 2; | ||
1598 | out = out1; | ||
1599 | } | ||
1600 | } | ||
1601 | |||
1602 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 1566 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
1603 | struct gspca_frame *frame, /* target */ | 1567 | struct gspca_frame *frame, /* target */ |
1604 | __u8 *data, /* isoc packet */ | 1568 | __u8 *data, /* isoc packet */ |
1605 | int len) /* iso packet length */ | 1569 | int len) /* iso packet length */ |
1606 | { | 1570 | { |
1607 | struct sd *sd = (struct sd *) gspca_dev; | ||
1608 | |||
1609 | switch (data[0]) { | 1571 | switch (data[0]) { |
1610 | case 0: /* start of frame */ | 1572 | case 0: /* start of frame */ |
1611 | if (gspca_dev->last_packet_type == FIRST_PACKET) { | 1573 | frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, |
1612 | yuvy_decode(sd->tmpbuf2, sd->tmpbuf, | 1574 | data, 0); |
1613 | gspca_dev->width, | ||
1614 | gspca_dev->height); | ||
1615 | frame = gspca_frame_add(gspca_dev, | ||
1616 | LAST_PACKET, | ||
1617 | frame, | ||
1618 | sd->tmpbuf2, | ||
1619 | gspca_dev->width | ||
1620 | * gspca_dev->height | ||
1621 | * 2); | ||
1622 | } | ||
1623 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | ||
1624 | data, 0); | ||
1625 | data += SPCA508_OFFSET_DATA; | 1575 | data += SPCA508_OFFSET_DATA; |
1626 | len -= SPCA508_OFFSET_DATA; | 1576 | len -= SPCA508_OFFSET_DATA; |
1627 | if (len > 0) | 1577 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, |
1628 | memcpy(sd->tmpbuf, data, len); | 1578 | data, len); |
1629 | else | 1579 | break; |
1630 | len = 0; | ||
1631 | sd->buflen = len; | ||
1632 | return; | ||
1633 | case 0xff: /* drop */ | 1580 | case 0xff: /* drop */ |
1634 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ | 1581 | /* gspca_dev->last_packet_type = DISCARD_PACKET; */ |
1635 | return; | 1582 | break; |
1583 | default: | ||
1584 | data += 1; | ||
1585 | len -= 1; | ||
1586 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | ||
1587 | data, len); | ||
1588 | break; | ||
1636 | } | 1589 | } |
1637 | data += 1; | ||
1638 | len -= 1; | ||
1639 | memcpy(&sd->tmpbuf[sd->buflen], data, len); | ||
1640 | sd->buflen += len; | ||
1641 | } | 1590 | } |
1642 | 1591 | ||
1643 | static void setbrightness(struct gspca_dev *gspca_dev) | 1592 | static void setbrightness(struct gspca_dev *gspca_dev) |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index cc0c8952323b..7d9ac046389e 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -324,6 +324,8 @@ struct v4l2_pix_format { | |||
324 | #define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ | 324 | #define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ |
325 | #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ | 325 | #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ |
326 | #define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */ | 326 | #define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */ |
327 | #define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S','5','0','5') /* YYUV per line */ | ||
328 | #define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S','5','0','8') /* YUVY per line */ | ||
327 | #define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ | 329 | #define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ |
328 | #define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ | 330 | #define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ |
329 | 331 | ||