From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Theodore Kilgore <kilgota@banach.math.auburn.edu>
Cc: Adam Baker <linux@baker-net.org.uk>,
Hans de Goede <hdegoede@redhat.com>,
workshop-2011@linuxtv.org,
Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: [Workshop-2011] Media Subsystem Workshop 2011
Date: Mon, 08 Aug 2011 10:45:14 -0300 [thread overview]
Message-ID: <4E3FE86A.5030908@redhat.com> (raw)
In-Reply-To: <alpine.LNX.2.00.1108072103200.20613@banach.math.auburn.edu>
Em 07-08-2011 23:26, Theodore Kilgore escreveu:
>
> (first of two replies to Adam's message; second reply deals with other
> topics)
>
> On Sun, 7 Aug 2011, Adam Baker wrote:
>
>> On Friday 05 August 2011, Hans de Goede wrote:
>>>> This sounds to be a good theme for the Workshop, or even to KS/2011.
>>>
>>> Agreed, although we don't need to talk about this for very long, the
>>> solution is basically:
>>> 1) Define a still image retrieval API for v4l2 devices (there is only 1
>>> interface for both functions on these devices, so only 1 driver, and to
>>> me it makes sense to extend the existing drivers to also do still image
>>> retrieval).
>>> 2) Modify existing kernel v4l2 drivers to provide this API
>>> 3) Write a new libgphoto driver which talks this interface (only need to
>>> do one driver since all dual mode cams will export the same API).
>>>
>>> 1) is something to discuss at the workshop.
>>>
>> This approach sounds fine as long as you can come up with a definition for the
>> API that covers the existing needs and is extensible when new cameras come
>> along and doesn't create horrible inefficiencies by not matching the way some
>> cameras work. I've only got one example of such a camera and it is a fairly
>> basic one but things I can imagine the API needing to provide are
>>
>> 1) Report number of images on device
>> 2) Select an image to read (for some cameras selecting next may be much more
>> efficient than selecting at random although whether that inefficiency occurs
>> when selecting, when reading image info or when reading image data may vary)
>> 3) Read image information for selected image (resolution, compression type,
>> FOURCC)
>> 4) Read raw image data for selected image
>> 5) Delete individual image (not supported by all cameras)
>> 6) Delete all images (sometimes supported on cameras that don't support
>> individual delete)
>>
>> I'm not sure if any of these cameras support tethered capture but if they do
>> then add
>> Take photo
>> Set resolution
>>
>> I doubt if any of them support EXIF data, thumbnail images, the ability to
>> upload images to the camera or any sound recording but if they do then those
>> are additional things that gphoto2 would want to be able to do.
>
>
> Adam,
>
> Yipe. This looks to me like one inglorious mess. I do not know if it is
> feasible, or not, but I would wish for something much more simple. Namely,
> if the camera is not a dual-mode camera then nothing of this is necessary,
> of course. But if it is a dual-mode camera then the kernel driver is able
> to "hand off" the camera to a (libgphoto2-based) userspace driver which
> can handle all of the gory details of what the camera can do in its role
> as a still camera. This would imply that there is a device which
> libgphoto2 can access, presumably another device which is distinct from
> /dev/videoX, lets call it right now /dev/camX just to give it a name
> during the discussion.
>
> So then what happens ought to be something like the following:
>
> 1. Camera is plugged in, detected, and kernel module is fired up. Then
> either
>
> 2a. A streaming app is started. Then, upon request from outside the
> kernel, the /dev/videoX is locked in and /dev/camX is locked out. The
> camera streams until told to quit streaming, and in the meantime any
> access to /dev/camX is not permitted. When the streaming is turned off,
> the lock is released.
>
> or
>
> 2b. A stillcam app is started. Then similar to 2a, but the locking is
> reversed.
>
> I think that this kind of thing would keep life simple. As I understand
> what Hans is envisioning, it is pretty much along the same lines, too. It
> would mean, of course, that the way that libgphoto2 would access one of
> these cameras would be directly to access the /dev/camX provided by the
> kernel, and not to use libusb. But that can be done, I think. As I
> mentioned before, Hans has written several libgphoto2 drivers for digital
> picture frames which are otherwise seen as USB mass storage devices.
> Something similar would have to be done with dual-mode cameras.
>
>
> I will send a second reply to this message, which deals in particular with
> the list of abilities you outlined above. The point is, the situation as
> to that list of abilities is more chaotic than is generally realized. And
> when people are laying plans they really need to be aware of that.
>From what I understood from your proposal, "/dev/camX" would be providing a
libusb-like interface, right?
If so, then, I'd say that we should just use the current libusb infrastructure.
All we need is a way to lock libusb access when another driver is using the same
USB interface.
Hans and Adam's proposal is to actually create a "/dev/camX" node that will give
fs-like access to the pictures. As the data access to the cameras generally use
PTP (or a PTP-like protocol), probably one driver will handle several different
types of cameras, so, we'll end by having one different driver for PTP than the
V4L driver.
In other words, part of libgphoto2 code will be moved into the Kernel, to allow
abstracting the webcam differences into a common interface.
In summary, there are currently two proposals:
1) a resource lock for USB interface between V4L and libusb;
2) a PTP-like USB driver, plus a resource lock between V4L and the PTP-like driver.
The same resource lock may also be implemented at libusb, in order to avoid
concurrency.
As you said that streaming on some cameras may delete all pictures from it,
I suspect that (2) is the best alternative.
Thanks,
Mauro
next prev parent reply other threads:[~2011-08-08 13:45 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-03 17:21 Media Subsystem Workshop 2011 Mauro Carvalho Chehab
2011-08-03 17:45 ` Mauro Carvalho Chehab
2011-08-08 6:22 ` Hans Verkuil
2011-08-08 13:25 ` Mauro Carvalho Chehab
2011-08-08 15:25 ` Hans Verkuil
2011-08-11 17:49 ` Rémi Denis-Courmont
2011-08-11 19:00 ` Mauro Carvalho Chehab
2011-08-03 19:53 ` Theodore Kilgore
2011-08-03 20:36 ` Mauro Carvalho Chehab
2011-08-03 23:20 ` Theodore Kilgore
2011-08-04 12:34 ` Mauro Carvalho Chehab
2011-08-04 18:37 ` Theodore Kilgore
2011-08-04 19:11 ` Mauro Carvalho Chehab
2011-08-04 21:16 ` Theodore Kilgore
2011-08-04 21:58 ` Mauro Carvalho Chehab
2011-08-04 22:57 ` Theodore Kilgore
2011-08-05 7:02 ` [Workshop-2011] " Hans de Goede
2011-08-05 17:13 ` Theodore Kilgore
2011-08-07 22:53 ` Adam Baker
2011-08-08 2:26 ` Theodore Kilgore
2011-08-08 13:45 ` Mauro Carvalho Chehab [this message]
2011-08-08 17:39 ` Theodore Kilgore
2011-08-08 18:39 ` Mauro Carvalho Chehab
2011-08-08 19:32 ` Theodore Kilgore
2011-08-08 20:07 ` Mauro Carvalho Chehab
2011-08-08 20:24 ` Adam Baker
2011-08-08 20:43 ` Theodore Kilgore
2011-08-09 7:30 ` Hans de Goede
2011-08-09 17:10 ` Theodore Kilgore
2011-08-09 20:30 ` Hans de Goede
2011-08-10 0:34 ` Theodore Kilgore
2011-08-10 7:02 ` Hans de Goede
2011-08-08 20:33 ` Adam Baker
2011-08-08 21:06 ` Theodore Kilgore
2011-08-09 7:37 ` Hans de Goede
2011-08-09 19:06 ` Theodore Kilgore
2011-08-08 2:56 ` Theodore Kilgore
2011-08-08 7:53 ` Hans de Goede
2011-08-04 11:39 ` Hans de Goede
2011-08-04 12:40 ` Mauro Carvalho Chehab
2011-08-04 16:40 ` Jean-Francois Moine
2011-08-04 19:02 ` Guennadi Liakhovetski
2011-08-04 20:33 ` Mauro Carvalho Chehab
2011-08-04 21:38 ` Adam Baker
2011-08-04 21:49 ` Mauro Carvalho Chehab
2011-08-04 22:30 ` Theodore Kilgore
2011-08-04 19:05 ` Theodore Kilgore
2011-08-04 20:35 ` Adam Baker
2011-08-04 21:55 ` Theodore Kilgore
2011-08-04 23:04 ` Adam Baker
2011-08-05 0:01 ` Theodore Kilgore
2011-08-07 22:30 ` Adam Baker
2011-08-07 23:19 ` Alan Stern
2011-08-08 0:30 ` Adam Baker
2011-08-08 14:38 ` Alan Stern
2011-08-08 3:33 ` Theodore Kilgore
2011-08-08 14:55 ` Alan Stern
2011-08-08 18:14 ` Theodore Kilgore
2011-08-08 19:22 ` Alan Stern
2011-08-08 19:58 ` Theodore Kilgore
2011-08-08 20:33 ` Alan Stern
2011-08-04 18:55 ` Theodore Kilgore
2011-08-11 10:16 ` Sakari Ailus
2011-08-11 11:03 ` Mauro Carvalho Chehab
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=4E3FE86A.5030908@redhat.com \
--to=mchehab@redhat.com \
--cc=hdegoede@redhat.com \
--cc=kilgota@banach.math.auburn.edu \
--cc=linux-media@vger.kernel.org \
--cc=linux@baker-net.org.uk \
--cc=workshop-2011@linuxtv.org \
/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.