Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc409c0e authored by Marton Nemeth's avatar Marton Nemeth Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (13299): gspca - pac7311: Extract pac_start_frame.



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: default avatarMarton Nemeth <nm127@freemail.hu>
Signed-off-by: default avatarJean-Francois Moine <moinejf@free.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent a6b69e40
Loading
Loading
Loading
Loading
+26 −16
Original line number Diff line number Diff line
@@ -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);
}