All of lore.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 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.