From: Lamarque Vieira Souza <lamarque@gmail.com>
To: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: Antoine Jacquet <royale@zerezo.com>,
linux-media@vger.kernel.org, video4linux-list@redhat.com
Subject: Re: [PATCH] Implement V4L2_CAP_STREAMING for zr364xx driver
Date: Thu, 16 Jul 2009 17:09:07 -0300 [thread overview]
Message-ID: <200907161709.08087.lamarque@gmail.com> (raw)
In-Reply-To: <20090716124506.26e7e6b0@pedra.chehab.org>
Em Quinta-feira 16 Julho 2009, Mauro Carvalho Chehab escreveu:
> Em Wed, 15 Jul 2009 20:54:55 -0300
>
> Lamarque Vieira Souza <lamarque@gmail.com> escreveu:
> > This patch implements V4L2_CAP_STREAMING for the zr364xx driver, by
> > converting the driver to use videobuf. This version is synced with
> > v4l-dvb as of 15/Jul/2009.
> >
> > Tested with Creative PC-CAM 880.
> >
> > It basically:
> > . implements V4L2_CAP_STREAMING using videobuf;
> >
> > . re-implements V4L2_CAP_READWRITE using videobuf;
> >
> > . copies cam->udev->product to the card field of the v4l2_capability
> > struct. That gives more information to the users about the webcam;
> >
> > . moves the brightness setting code from before requesting a frame (in
> > read_frame) to the vidioc_s_ctrl ioctl. This way the brightness code is
> > executed only when the application requests a change in brightness and
> > not before every frame read;
> >
> > . comments part of zr364xx_vidioc_try_fmt_vid_cap that says that Skype +
> > libv4l do not work.
> >
> > This patch fixes zr364xx for applications such as mplayer,
> > Kopete+libv4l and Skype+libv4l can make use of the webcam that comes
> > with zr364xx chip.
> >
> > Signed-off-by: Lamarque V. Souza <lamarque@gmail.com>
> > ---
> >
> > diff -r c300798213a9 linux/drivers/media/video/zr364xx.c
> > --- a/linux/drivers/media/video/zr364xx.c Sun Jul 05 19:08:55 2009 -0300
> > +++ b/linux/drivers/media/video/zr364xx.c Wed Jul 15 20:50:34 2009 -0300
> > @@ -1,5 +1,5 @@
> > /*
> > - * Zoran 364xx based USB webcam module version 0.72
> > + * Zoran 364xx based USB webcam module version 0.73
> > *
> > * Allows you to use your USB webcam with V4L2 applications
> > * This is still in heavy developpement !
> > @@ -10,6 +10,8 @@
> > * Heavily inspired by usb-skeleton.c, vicam.c, cpia.c and spca50x.c
> > drivers * V4L2 version inspired by meye.c driver
> > *
> > + * Some video buffer code by Lamarque based on s2255drv.c and vivi.c
> > drivers. + *
>
> Maybe the better example for it is em28xx-video, where we firstly used
> videobuf on usb devices.
I will take a look at em28xx-video. I used s2255drv.c and vivi.c because
their code organization are similar to zr364xx.c, so it was easier to know
what to do.
> > +static void free_buffer(struct videobuf_queue *vq, struct zr364xx_buffer
> > *buf)
> > +{
> > + DBG("%s\n", __func__);
> > +
> > + /*Lamarque: is this really needed? Sometimes this blocks rmmod forever
> > + * after running Skype on an AMD64 system. */
> > + /*videobuf_waiton(&buf->vb, 0, 0);*/
>
> Answering to your note, take a look at em28xx-video implementation:
>
> /* We used to wait for the buffer to finish here, but this didn't
> work because, as we were keeping the state as VIDEOBUF_QUEUED,
> videobuf_queue_cancel marked it as finished for us.
> (Also, it could wedge forever if the hardware was
> misconfigured.)
>
> This should be safe; by the time we get here, the buffer isn't
> queued anymore. If we ever start marking the buffers as
> VIDEOBUF_ACTIVE, it won't be, though.
> */
> spin_lock_irqsave(&dev->slock, flags);
> if (dev->isoc_ctl.buf == buf)
> dev->isoc_ctl.buf = NULL;
> spin_unlock_irqrestore(&dev->slock, flags);
Yes, the comment answers my question. There is no similar code in zr364xx.c
like the one above. zr364xx_camera does not have a member with zr364xxx_buffer
type (the equivalent type of dev->isoc_ctl.buf).
> > + if (pipe_info->state != 0) {
> > + if (usb_submit_urb(pipe_info->stream_urb, GFP_KERNEL))
> > + dev_err(&cam->udev->dev, "error submitting urb\n");
> > + } else {
> > + DBG("read pipe complete state 0\n");
> > + }
>
> Hmm... for the usb_submit_urb() call that happens during IRQ context
> (while you're receiving stream), you need to use:
> urb->status = usb_submit_urb(pipe_info->stream_urb, GFP_ATOMIC);
>
> otherwise, you may get the errors that Antoine is reporting
Ok, changed to GPF_ATOMIC. Could someone test this for me since I was not
able to reproduce this problem? The new patch is here
http://bach.metasys.com.br/~lamarque/zr364xx/zr364xx.c-streaming.patch-v4l-
dvb-20090716 . I upload it to avoid bloating the mailing-list with a 40k
patch.
I have computer here with dual core processor but no display. I need to get a
DVI <-> VGA adaptor to plug my DVI LCD on it, when I get one I am going to
test the changes with SMP enabled.
--
Lamarque V. Souza
http://www.geographicguide.com/brazil.htm
Linux User #57137 - http://counter.li.org/
next prev parent reply other threads:[~2009-07-16 20:09 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-15 23:54 [PATCH] Implement V4L2_CAP_STREAMING for zr364xx driver Lamarque Vieira Souza
2009-07-16 12:59 ` Antoine Jacquet
2009-07-16 13:58 ` Lamarque Vieira Souza
2009-07-16 15:45 ` Mauro Carvalho Chehab
2009-07-16 15:56 ` Force driver to load (tcm825x) Jesko Schwarzer
2009-07-16 16:42 ` [PATCH] Implement V4L2_CAP_STREAMING for zr364xx driver Karicheri, Muralidharan
2009-07-16 20:09 ` Lamarque Vieira Souza [this message]
2009-07-17 23:50 ` Antoine Jacquet
2009-07-20 23:46 ` [PATCH] Implement changing resolution on the fly " Lamarque Vieira Souza
2009-07-21 14:29 ` Antoine Jacquet
2009-07-21 15:14 ` Lamarque Vieira Souza
2009-07-21 22:42 ` Lamarque Vieira Souza
2009-07-22 19:31 ` Antoine Jacquet
2009-07-22 19:54 ` Lamarque Vieira Souza
2009-07-22 23:58 ` Antoine Jacquet
-- strict thread matches above, loose matches on Subject: below --
2009-03-25 23:25 Patch implementing V4L2_CAP_STREAMING " Lamarque Vieira Souza
2009-03-27 18:39 ` Lamarque Vieira Souza
2009-03-28 9:34 ` Mauro Carvalho Chehab
2009-03-28 10:11 ` [PATCH] Implement " Lamarque Vieira Souza
2009-03-28 11:44 ` Hans de Goede
2009-03-28 13:09 ` Lamarque Vieira Souza
2009-07-03 2:09 ` Lamarque Vieira Souza
2009-07-11 20:29 ` Lamarque Vieira Souza
2009-07-15 20:35 ` Antoine Jacquet
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=200907161709.08087.lamarque@gmail.com \
--to=lamarque@gmail.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@infradead.org \
--cc=royale@zerezo.com \
--cc=video4linux-list@redhat.com \
/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