public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
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/

  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