All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] for the file gspca/mr97310a.c
@ 2009-03-06  2:34 kilgota
  2009-03-06  4:58 ` Kyle Guinn
  0 siblings, 1 reply; 6+ messages in thread
From: kilgota @ 2009-03-06  2:34 UTC (permalink / raw)
  To: linux-media


First time ever that I mouse-copied an address and it gained a typo. 
Amazing. So trying again. The patch works better than the mouse, though. 
Guaranteed.

---------- Forwarded message ----------
Date: Thu, 5 Mar 2009 20:09:52 -0600 (CST)
From: kilgota@banach.math.auburn.edu
To: Hans de Goede <hdegoede@redhat.com>
Cc: Kyle Guinn <elyk03@gmail.com>, Jean-Francois Moine <moinejf@free.fr>,
     linux-mmedia@vger.kernel.org
Subject: [PATCH] for the file gspca/mr97310a.c


I just realized that the message below only went in one direction and did not 
have the proper title. So I fix that, now. The purpose of the patch has been 
extensively discussed in the thread seen in the title of the forwarded message. 
The patch below improves on the previous patch submitted for discussion, by 
fixing a bug in that one. The purpose of the patch is to save the header for 
the raw frames from the MR97310a cameras, which previously was not done. The 
patch achieves this result, and, when tested with two cameras, gives nice 
results.

A parallel patch for libv4lconvert/mr97310a.c was also presented in the RFC. 
Needless to say, it is needed simultaneously, before the output from the camera 
can be properly decompressed.

Theodore Kilgore

---------- Forwarded message ----------
Date: Thu, 5 Mar 2009 19:27:57 -0600 (CST)
From: kilgota@banach.math.auburn.edu
To: Hans de Goede <hdegoede@redhat.com>
Subject: Re: RFC on proposed patches to mr97310a.c for gspca and v4l



On Fri, 6 Mar 2009, Hans de Goede wrote:

> Well 2.6.29 is getting closer, so we need to be reasonable quick with the
> kernel side changes. As we do not want to change this after a kernel
> has been released with the current behaviour.
> 
> For libv4l we can take our time. But having a kernel patch ready soon
> would be good.

Well, it did not take as long as I thought. And, as far as the libv4lconvert 
change, you _do_ have a patch, right?

So, here is a patch for one file, namely for gspca/mr97310a.c. I hope that it 
will meet all objections.

Signed-off-by: Theodore Kilgore <kilgota@auburn.edu>
----------------------------------------------------------------------
--- mr97310a.c.old	2009-02-23 23:59:07.000000000 -0600
+++ mr97310a.c	2009-03-05 19:14:13.000000000 -0600
@@ -29,9 +29,7 @@ MODULE_LICENSE("GPL");
  /* specific webcam descriptor */
  struct sd {
  	struct gspca_dev gspca_dev;  /* !! must be the first item */
-
  	u8 sof_read;
-	u8 header_read;
  };

  /* V4L2 controls supported by the driver */
@@ -100,12 +98,9 @@ static int sd_init(struct gspca_dev *gsp

  static int sd_start(struct gspca_dev *gspca_dev)
  {
-	struct sd *sd = (struct sd *) gspca_dev;
  	__u8 *data = gspca_dev->usb_buf;
  	int err_code;

-	sd->sof_read = 0;
-
  	/* Note:  register descriptions guessed from MR97113A driver */

  	data[0] = 0x01;
@@ -285,40 +280,29 @@ static void sd_pkt_scan(struct gspca_dev
  			__u8 *data,                   /* isoc packet */
  			int len)                      /* iso packet length */
  {
-	struct sd *sd = (struct sd *) gspca_dev;
  	unsigned char *sof;

  	sof = pac_find_sof(gspca_dev, data, len);
  	if (sof) {
  		int n;
-
+		int marker_len = sizeof pac_sof_marker;
  		/* finish decoding current frame */
  		n = sof - data;
-		if (n > sizeof pac_sof_marker)
-			n -= sizeof pac_sof_marker;
+		if (n > marker_len)
+			n -= marker_len;
  		else
  			n = 0;
  		frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
  					data, n);
-		sd->header_read = 0;
-		gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0);
-		len -= sof - data;
+		/* Start next frame. */
+		gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
+			pac_sof_marker, marker_len);
+		len -= n;
+		len -= marker_len;
+		if (len < 0)
+			len = 0;
  		data = sof;
  	}
-	if (sd->header_read < 7) {
-		int needed;
-
-		/* skip the rest of the header */
-		needed = 7 - sd->header_read;
-		if (len <= needed) {
-			sd->header_read += len;
-			return;
-		}
-		data += needed;
-		len -= needed;
-		sd->header_read = 7;
-	}
-
  	gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
  }

@@ -337,6 +321,7 @@ static const struct sd_desc sd_desc = {
  /* -- module initialisation -- */
  static const __devinitdata struct usb_device_id device_table[] = {
  	{USB_DEVICE(0x08ca, 0x0111)},
+	{USB_DEVICE(0x093a, 0x010f)},
  	{}
  };
  MODULE_DEVICE_TABLE(usb, device_table);

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-03-11  1:05 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-06  2:34 [PATCH] for the file gspca/mr97310a.c kilgota
2009-03-06  4:58 ` Kyle Guinn
2009-03-06  6:41   ` kilgota
2009-03-06  8:12     ` Hans de Goede
2009-03-06 21:22       ` [PATCH] for the file gspca/mr97310a.c (revisions) kilgota
2009-03-11  1:18       ` A question about documentation kilgota

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.