V4L/DVB (13299): gspca - pac7311: Extract pac_start_frame.
authorMarton Nemeth <nm127@freemail.hu>
Mon, 2 Nov 2009 11:09:34 +0000 (08:09 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 5 Dec 2009 20:41:16 +0000 (18:41 -0200)
Creating the start of the frame is done in the same way for pac7302
and for pac7311. Extract this common part to the pac_start_frame()
function.

Signed-off-by: Marton Nemeth <nm127@freemail.hu>
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/pac7311.c

index 329f867..8d3e4eb 100644 (file)
@@ -802,7 +802,7 @@ static void do_autogain(struct gspca_dev *gspca_dev)
 }
 
 /* JPEG header, part 1 */
-static const unsigned char pac7311_jpeg_header1[] = {
+static const unsigned char pac_jpeg_header1[] = {
   0xff, 0xd8,          /* SOI: Start of Image */
 
   0xff, 0xc0,          /* SOF0: Start of Frame (Baseline DCT) */
@@ -813,7 +813,7 @@ static const unsigned char pac7311_jpeg_header1[] = {
 };
 
 /* JPEG header, continued */
-static const unsigned char pac7311_jpeg_header2[] = {
+static const unsigned char pac_jpeg_header2[] = {
   0x03,                        /* Number of image components: 3 */
   0x01, 0x21, 0x00,    /* ID=1, Subsampling 1x1, Quantization table: 0 */
   0x02, 0x11, 0x01,    /* ID=2, Subsampling 2x1, Quantization table: 1 */
@@ -829,6 +829,26 @@ static const unsigned char pac7311_jpeg_header2[] = {
   0x00                 /* Successive approximation: 0 */
 };
 
+static void pac_start_frame(struct gspca_dev *gspca_dev,
+               struct gspca_frame *frame,
+               __u16 lines, __u16 samples_per_line)
+{
+       unsigned char tmpbuf[4];
+
+       gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+               pac_jpeg_header1, sizeof(pac_jpeg_header1));
+
+       tmpbuf[0] = lines >> 8;
+       tmpbuf[1] = lines & 0xff;
+       tmpbuf[2] = samples_per_line >> 8;
+       tmpbuf[3] = samples_per_line & 0xff;
+
+       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+               tmpbuf, sizeof(tmpbuf));
+       gspca_frame_add(gspca_dev, INTER_PACKET, frame,
+               pac_jpeg_header2, sizeof(pac_jpeg_header2));
+}
+
 /* this function is run at interrupt level */
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                        struct gspca_frame *frame,      /* target */
@@ -840,7 +860,6 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
 
        sof = pac_find_sof(&sd->sof_read, data, len);
        if (sof) {
-               unsigned char tmpbuf[4];
                int n, lum_offset, footer_length;
 
                if (sd->sensor == SENSOR_PAC7302) {
@@ -882,23 +901,14 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
                        atomic_set(&sd->avg_lum, -1);
 
                /* Start the new frame with the jpeg header */
-               gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
-                       pac7311_jpeg_header1, sizeof(pac7311_jpeg_header1));
                if (sd->sensor == SENSOR_PAC7302) {
                        /* The PAC7302 has the image rotated 90 degrees */
-                       tmpbuf[0] = gspca_dev->width >> 8;
-                       tmpbuf[1] = gspca_dev->width & 0xff;
-                       tmpbuf[2] = gspca_dev->height >> 8;
-                       tmpbuf[3] = gspca_dev->height & 0xff;
+                       pac_start_frame(gspca_dev, frame,
+                               gspca_dev->width, gspca_dev->height);
                } else {
-                       tmpbuf[0] = gspca_dev->height >> 8;
-                       tmpbuf[1] = gspca_dev->height & 0xff;
-                       tmpbuf[2] = gspca_dev->width >> 8;
-                       tmpbuf[3] = gspca_dev->width & 0xff;
+                       pac_start_frame(gspca_dev, frame,
+                               gspca_dev->height, gspca_dev->width);
                }
-               gspca_frame_add(gspca_dev, INTER_PACKET, frame, tmpbuf, 4);
-               gspca_frame_add(gspca_dev, INTER_PACKET, frame,
-                       pac7311_jpeg_header2, sizeof(pac7311_jpeg_header2));
        }
        gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
 }