diff options
author | Jean-François Moine <moinejf@free.fr> | 2010-06-27 02:08:19 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-02 14:31:10 -0400 |
commit | b192ca983746585e807259414f8d6f58cb28311f (patch) | |
tree | 8c95bdcebcf4217e3813d803ecf281af2d431e5f /drivers/media/video/gspca/pac7311.c | |
parent | c6dc725c8e0c3438587e18f918f6da16e7a23539 (diff) |
V4L/DVB: gspca - main: Simplify image building
The image pointer and its length are now in the main structure instead
of in the frame buffer. They are updated on application vidioc_qbuf and
in the URB interrupt function when ending an image.
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/pac7311.c')
-rw-r--r-- | drivers/media/video/gspca/pac7311.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/media/video/gspca/pac7311.c b/drivers/media/video/gspca/pac7311.c index c978599a69dd..5568c41a296c 100644 --- a/drivers/media/video/gspca/pac7311.c +++ b/drivers/media/video/gspca/pac7311.c | |||
@@ -599,7 +599,6 @@ static const unsigned char pac_jpeg_header2[] = { | |||
599 | }; | 599 | }; |
600 | 600 | ||
601 | static void pac_start_frame(struct gspca_dev *gspca_dev, | 601 | static void pac_start_frame(struct gspca_dev *gspca_dev, |
602 | struct gspca_frame *frame, | ||
603 | __u16 lines, __u16 samples_per_line) | 602 | __u16 lines, __u16 samples_per_line) |
604 | { | 603 | { |
605 | unsigned char tmpbuf[4]; | 604 | unsigned char tmpbuf[4]; |
@@ -624,15 +623,15 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
624 | int len) /* iso packet length */ | 623 | int len) /* iso packet length */ |
625 | { | 624 | { |
626 | struct sd *sd = (struct sd *) gspca_dev; | 625 | struct sd *sd = (struct sd *) gspca_dev; |
626 | u8 *image; | ||
627 | unsigned char *sof; | 627 | unsigned char *sof; |
628 | struct gspca_frame *frame; | ||
629 | 628 | ||
630 | sof = pac_find_sof(&sd->sof_read, data, len); | 629 | sof = pac_find_sof(&sd->sof_read, data, len); |
631 | if (sof) { | 630 | if (sof) { |
632 | int n, lum_offset, footer_length; | 631 | int n, lum_offset, footer_length; |
633 | 632 | ||
634 | frame = gspca_get_i_frame(gspca_dev); | 633 | image = gspca_dev->image; |
635 | if (frame == NULL) { | 634 | if (image == NULL) { |
636 | gspca_dev->last_packet_type = DISCARD_PACKET; | 635 | gspca_dev->last_packet_type = DISCARD_PACKET; |
637 | return; | 636 | return; |
638 | } | 637 | } |
@@ -647,16 +646,15 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
647 | /* Finish decoding current frame */ | 646 | /* Finish decoding current frame */ |
648 | n = (sof - data) - (footer_length + sizeof pac_sof_marker); | 647 | n = (sof - data) - (footer_length + sizeof pac_sof_marker); |
649 | if (n < 0) { | 648 | if (n < 0) { |
650 | frame->data_end += n; | 649 | gspca_dev->image_len += n; |
651 | n = 0; | 650 | n = 0; |
651 | } else { | ||
652 | gspca_frame_add(gspca_dev, INTER_PACKET, data, n); | ||
652 | } | 653 | } |
653 | gspca_frame_add(gspca_dev, INTER_PACKET, | 654 | if (gspca_dev->last_packet_type != DISCARD_PACKET |
654 | data, n); | 655 | && image[gspca_dev->image_len - 2] == 0xff |
655 | if (gspca_dev->last_packet_type != DISCARD_PACKET && | 656 | && image[gspca_dev->image_len - 1] == 0xd9) |
656 | frame->data_end[-2] == 0xff && | 657 | gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); |
657 | frame->data_end[-1] == 0xd9) | ||
658 | gspca_frame_add(gspca_dev, LAST_PACKET, | ||
659 | NULL, 0); | ||
660 | 658 | ||
661 | n = sof - data; | 659 | n = sof - data; |
662 | len -= n; | 660 | len -= n; |
@@ -671,7 +669,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
671 | atomic_set(&sd->avg_lum, -1); | 669 | atomic_set(&sd->avg_lum, -1); |
672 | 670 | ||
673 | /* Start the new frame with the jpeg header */ | 671 | /* Start the new frame with the jpeg header */ |
674 | pac_start_frame(gspca_dev, frame, | 672 | pac_start_frame(gspca_dev, |
675 | gspca_dev->height, gspca_dev->width); | 673 | gspca_dev->height, gspca_dev->width); |
676 | } | 674 | } |
677 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); | 675 | gspca_frame_add(gspca_dev, INTER_PACKET, data, len); |