public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: kilgota@banach.math.auburn.edu
Cc: Kyle Guinn <elyk03@gmail.com>,
	Jean-Francois Moine <moinejf@free.fr>,
	linux-media@vger.kernel.org
Subject: Re: RFC on proposed patches to mr97310a.c for gspca and v4l
Date: Thu, 05 Mar 2009 21:40:56 +0100	[thread overview]
Message-ID: <49B038D8.8060702@redhat.com> (raw)
In-Reply-To: <alpine.LNX.2.00.0903051345560.27979@banach.math.auburn.edu>



kilgota@banach.math.auburn.edu wrote:
> 
> 
> On Thu, 5 Mar 2009, Hans de Goede wrote:
> 
>>
>>
>> kilgota@banach.math.auburn.edu wrote:
>>>
>>>
>>> On Thu, 5 Mar 2009, Hans de Goede wrote:
>>>
>>>>
>>>>
>>>> Kyle Guinn wrote:
>>>>> On Wednesday 04 March 2009 22:34:13 kilgota@banach.math.auburn.edu 
>>>>> wrote:
>>>>>> On Wed, 4 Mar 2009, Kyle Guinn wrote:
>>>>>>> On Tuesday 03 March 2009 18:12:33 kilgota@banach.math.auburn.edu 
>>>>>>> wrote:
>>>>>>>> contents of file mr97310a.patch follow, for gspca/mr97310a.c
>>>>>>>> --------------------------------------------------------
>>>>>>>> --- mr97310a.c.old    2009-02-23 23:59:07.000000000 -0600
>>>>>>>> +++ mr97310a.c.new    2009-03-03 17:19:06.000000000 -0600
>>>>>>>> @@ -302,21 +302,9 @@ static void sd_pkt_scan(struct gspca_dev
>>>>>>>>                       data, n);
>>>>>>>>           sd->header_read = 0;
>>>>>>>>           gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0);
>>>>>>>> -        len -= sof - data;
>>>>>>>> -        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;
>>>>>>>> +        /* keep the header, including sof marker, for coming 
>>>>>>>> frame */
>>>>>>>> +        len -= n;
>>>>>>>> +        data = sof - sizeof pac_sof_marker;;
>>>>>>>>       }
>>>>>>>>
>>>>>>>>       gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
>>>>>>> A few notes:
>>>>>>>
>>>>>>> 1.  There is an extra semicolon on that last added line.
>>>>>> Oops. My bifocals.
>>>>>>
>>>>>>> 2.  sd->header_read no longer seems necessary.
>>>>>> This is very likely true.
>>>>>>
>>>>>>> 3.  If the SOF marker is split over two transfers then everything 
>>>>>>> falls
>>>>>>> apart.
>>>>>> Are you sure about that?
>>>>>>
>>>>>
>>>>> Simple example:  One transfer ends with FF FF 00 and the next 
>>>>> begins with FF 96 64.  pac_find_sof() returns a pointer to 64, n is 
>>>>> set to 0, len stays the same, data now points at 3 bytes _before_ 
>>>>> the transfer buffer, and we will most likely get undefined behavior 
>>>>> when trying to copy the data out of the transfer buffer.  Not only 
>>>>> that, but the FF FF 00 portion of the SOF won't get copied to the 
>>>>> frame buffer.
>>>>>
>>>>
>>>> Good point, since we will always pass frames to userspace which 
>>>> start with the
>>>> sof, maybe we should just only pass the variable part of the header 
>>>> to userspace?
>>>>
>>>> That sure feels like the easiest solution to me.
>>>>
>>>> Regards,
>>>>
>>>> Hans
>>>>
>>>
>>> Hans, that would not solve the problem. In fact, it appears to me 
>>> that this problem was already inherent in the driver code before I 
>>> proposed any patches at all.
>>
>> Erm, if I understood correctly (haven't looked yet) the driver is working
>> with the sof detection from pac_common, which does work with a SOF split
>> over multiple frames.
> 
> That is not my impression of what the code in pac_common is doing. That 
> code, as I understand, is totally neutral about such things. What is 
> does is to parse some data and search for an SOF marker, and if it finds 
> such a thing then it declares the next byte after to be what it calls 
> "sof". Specifically, there is the function
> 
> static unsigned char *pac_find_sof(struct gspca_dev *gspca_dev,
>                                         unsigned char *m, int len)
> 
> and what it does is that it searches through unsigned char *m up to the 
> extent declared in int len, looking for an SOF marker. If it finds one, 
> then it returns the location of the next byte after the SOF marker has 
> been successfully read.
> 

Check that function again, more carefully, if it fails, but finds a part of
the sof at the end of m it remembers how much of the sof it has already seen
and continues where it left of the next time it is called.

Regards,

Hans

  reply	other threads:[~2009-03-05 20:41 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-17 19:09 MR97310A and other image formats Jean-Francois Moine
2009-02-17 19:35 ` Thomas Kaiser
2009-02-18  9:25   ` Jean-Francois Moine
2009-02-18 12:58     ` Thomas Kaiser
2009-02-18 19:17       ` Jean-Francois Moine
2009-02-17 19:43 ` Thomas Kaiser
2009-02-18  1:07 ` Kyle Guinn
2009-02-19  0:40   ` kilgota
2009-03-04  0:12   ` RFC on proposed patches to mr97310a.c for gspca and v4l kilgota
2009-03-04  2:50     ` Kyle Guinn
2009-03-04  5:21       ` kilgota
2009-03-04  8:41         ` Thomas Kaiser
2009-03-04  8:54           ` Thomas Kaiser
2009-03-04 19:01             ` kilgota
2009-03-05 13:02               ` Thomas Kaiser
2009-03-05 18:29                 ` kilgota
2009-03-05 19:19                   ` Thomas Kaiser
2009-03-05 19:45                     ` kilgota
2009-03-05 20:29                       ` Thomas Kaiser
2009-03-05 20:55                         ` kilgota
2009-03-05 20:51                           ` Thomas Kaiser
2009-04-15 23:59                 ` Some questions about mr97310 controls (continuing previous thread on mr97310a.c) Theodore Kilgore
2009-04-16 16:10                   ` Thomas Kaiser
2009-04-16 22:50                     ` Theodore Kilgore
2009-04-17  8:36                       ` Hans de Goede
2009-05-02  1:47                   ` Progress with the MR97310A "CIF" cameras Theodore Kilgore
2009-04-16  5:14           ` RFC on proposed patches to mr97310a.c for gspca and v4l Kyle Guinn
2009-04-16 18:22             ` Theodore Kilgore
2009-04-17  4:33               ` Kyle Guinn
2009-04-17 17:50                 ` Theodore Kilgore
2009-04-18  0:04                   ` Kyle Guinn
2009-04-18  0:43                     ` Theodore Kilgore
2009-04-21  1:18                     ` RFC on proposed patches to mr97310a.c for gspca and v4l (headers) Theodore Kilgore
2009-04-21  2:44                       ` Theodore Kilgore
2009-05-15 22:31             ` Preliminary results with an SN9C2028 camera Theodore Kilgore
2009-05-19  7:56               ` Hans de Goede
2009-05-19 18:18                 ` Theodore Kilgore
2009-03-04  8:39       ` RFC on proposed patches to mr97310a.c for gspca and v4l Hans de Goede
2009-03-04 18:46         ` kilgota
2009-03-05  1:33         ` Kyle Guinn
2009-03-05  7:01           ` Hans de Goede
2009-03-04  8:35     ` Hans de Goede
2009-03-05  2:49     ` Kyle Guinn
2009-03-05  4:34       ` kilgota
2009-03-05  5:54         ` Kyle Guinn
2009-03-05  6:47           ` kilgota
2009-03-05  7:00           ` Hans de Goede
2009-03-05 19:08             ` kilgota
2009-03-05 19:07               ` Hans de Goede
2009-03-05 20:42                 ` kilgota
2009-03-05 20:40                   ` Hans de Goede [this message]
2009-03-05 20:58                     ` kilgota
2009-03-06  1:21                       ` Kyle Guinn
2009-03-06  1:57                         ` kilgota
2009-03-28 22:42                         ` [PATCH] to add new camera in gspca/mr97310a.c Theodore Kilgore
2009-02-19 18:17 ` MR97310A and other image formats kilgota
2009-02-19 19:17   ` Thomas Kaiser
2009-02-19 21:54     ` kilgota
2009-02-19 22:45       ` Thomas Kaiser
2009-02-19 23:50         ` kilgota
2009-02-20  0:52           ` Thomas Kaiser
2009-02-20  1:32             ` kilgota
2009-02-20  8:00               ` Thomas Kaiser
2009-02-20 18:45                 ` kilgota
2009-02-20 19:05                   ` Thomas Kaiser
2009-02-20 20:26                     ` kilgota

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49B038D8.8060702@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=elyk03@gmail.com \
    --cc=kilgota@banach.math.auburn.edu \
    --cc=linux-media@vger.kernel.org \
    --cc=moinejf@free.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox