Re: [RFC v4] V4L2 API for flash devices

2011-06-07 Thread Mauro Carvalho Chehab
Em 19-05-2011 05:12, Sakari Ailus escreveu:
> Sylwester Nawrocki wrote:

 These were mostly fixed point arithmetic numbers in [32-bit numerator/
 32-bit denominator] form carrying exposure time, shutter speed, aperture,
 brightness, flash, etc. information. The tags could be read from ISP after
 it buffered a frame in its memory and processed it.
 In case of a JPEG image format the tags can be embedded into the main
 image file. But the image processors not always supported that so we used
 to have an ioctl for the purpose of retrieving the metadata in user space.
 In some cases it is desired to read data directly from the driver rather
 than parsing a relatively large buffer.
 It would be good to have a uniform interface for passing such data to
 applications. I think in that particular use case a control id/value pair
 sequences would do.
 
> - Which formats are your rational numbers in? A kernel interface can't
> really have floating point numbers, so there would need to be a sane way
> to pass these to user space.

The V4L2 API has support for rational numbers. The frame rate is specified as a
rational number. There's a struct for that:

struct v4l2_fract {
__u32   numerator;
__u32   denominator;
};

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v4] V4L2 API for flash devices

2011-05-19 Thread Sakari Ailus
Sylwester Nawrocki wrote:
> Hi Sakari,

Hi Sylwester,

> On 05/17/2011 10:34 PM, Sakari Ailus wrote:
>> Sylwester Nawrocki wrote:
>>> On 05/09/2011 12:11 AM, Sakari Ailus wrote:
 Sylwester Nawrocki wrote:
> On 05/07/2011 02:46 PM, Hans Verkuil wrote:
>> On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
>>> Hi,
>>>
>>> This is a fourth proposal for an interface for controlling flash devices
>>> on the V4L2/v4l2_subdev APIs.
> ...
>>> 3. Sensor metadata on frames
>>> 
>>>
>>> It'd be useful to be able to read back sensor metadata. If the flash is
>>> strobed (on sensor hardware) while streaming, it's difficult to know
>>> otherwise which frame in the stream has been exposed with flash.
>>
>> I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer
>> flag?
>> That way userspace can tell if that particular frame was taken with
>> flash.
>
> This looks more as a workaround for the problem rather than a good long
> term solution. It might be tempting to use the buffer flags which seem
> to be be more or less intended for buffer control.
> I'd like much more to see a buffer flags to be used to indicate whether
> an additional plane of (meta)data is carried by the buffer.
> There seem to be many more parameters, than a single flag indicating
> whether the frame has been exposed with flash or not, needed to be
> carried over to user space.
> But then we might need some standard format of the meta data, perhaps
> control id/value pairs and possibly a per plane configurable memory
> type.

 There are multiple possible approaches for this.

 For sensors where metadata is register-value pairs, that is, essentially
 V4L2 control values, I think this should be parsed by the sensor driver.
 The ISP (camera bridge) driver does receive the data so it'd have to
 "ask for help" from the sensor driver.
>>>
>>> I am inclined to let the ISP drivers parse the data but on the other hand
>>> it might be difficult to access same DMA buffers in kernel _and_ user space.
>>
>> This is just about mapping the buffer to both kernel and user spaces. If
>> the ISP has an iommu the kernel mapping might already exist if it comes
>> from vmalloc().
> 
> Yes, I know. I was thinking of possibly required different mapping attributes
> for kernel and user space and the problems on ARM with that.

As I replied to Laurent, this is not an issue since the memory wouldn't
be mapped to user space. The user space would get the result which has
been interpreted by the sensor driver.

> Also as metadata is supposed to occupy only small part of a frame buffer 
> perhaps
> only one page or so could be mapped in kernel space.
> I'm referring here mainly to SMIA++ method of storing metadata.

Yes, I agree.

> In case of sensors I used to work with it wouldn't be necessary to touch the
> main frame buffers as the metadata is transmitted out of band.

This depends on link a little, but on CSI-2 this is a separate channel.
In other cases the metadata is part of the frame --- but I don't know
anyone using metadata in such a case, so it _might_ be possible to just
ignore this use case.

Another alternative would be to pass binary blobs to user space and let
a library to interpret the data. This might be the way to go at least
with some more exotic cases.

>>
 As discussed previously, using V4L2 control events shouldn't probably be
 the way to go, but I think it's obvious that this is _somehow_ bound to
 controls, at least control ids.

> Also as Sakari indicated some sensors adopt custom meta data formats
> so maybe we need to introduce standard fourcc like IDs for meta data
> formats? I am not sure whether it is possible to create common
> description of an image meta data that fits all H/W.

 I'm not sure either since I know of only one example. That example, i.e.
 register-value pairs, should be something that I'd assume _some_ other
 hardware uses as well, but there could exist also hardware which
 doesn't. This solution might not work on that hardware.
>>>
>>> Of course it's hard to find a silver bullet for a hardware we do not know ;)
>>>

 If there is metadata which does not associate to V4L2 controls (or
 ioctls), either existing or not yet existing, then that probably should
 be parsed by the driver. On the other hand, I can't think of metadata
 that wouldn't fall under this right now. :-)
>>>
>>> Some metadata are arrays of length specific to a given attribute,
>>> I wonder how to support that with v4l2 controls ?
>>
>> Is the metadata something which really isn't associated to any V4L2
>> control? Are we now talking about a sensor which is more complex than a
>> regular raw bayer sensor?
> 
> I referred to tags defined in EXIF standard, as you may know every tag
> is basically an array of spec

Re: [RFC v4] V4L2 API for flash devices

2011-05-18 Thread Sylwester Nawrocki
Hi Sakari,

On 05/17/2011 10:34 PM, Sakari Ailus wrote:
> Sylwester Nawrocki wrote:
>> On 05/09/2011 12:11 AM, Sakari Ailus wrote:
>>> Sylwester Nawrocki wrote:
 On 05/07/2011 02:46 PM, Hans Verkuil wrote:
> On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
>> Hi,
>>
>> This is a fourth proposal for an interface for controlling flash devices
>> on the V4L2/v4l2_subdev APIs.
...
>> 3. Sensor metadata on frames
>> 
>>
>> It'd be useful to be able to read back sensor metadata. If the flash is
>> strobed (on sensor hardware) while streaming, it's difficult to know
>> otherwise which frame in the stream has been exposed with flash.
>
> I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer
> flag?
> That way userspace can tell if that particular frame was taken with
> flash.

 This looks more as a workaround for the problem rather than a good long
 term solution. It might be tempting to use the buffer flags which seem
 to be be more or less intended for buffer control.
 I'd like much more to see a buffer flags to be used to indicate whether
 an additional plane of (meta)data is carried by the buffer.
 There seem to be many more parameters, than a single flag indicating
 whether the frame has been exposed with flash or not, needed to be
 carried over to user space.
 But then we might need some standard format of the meta data, perhaps
 control id/value pairs and possibly a per plane configurable memory
 type.
>>>
>>> There are multiple possible approaches for this.
>>>
>>> For sensors where metadata is register-value pairs, that is, essentially
>>> V4L2 control values, I think this should be parsed by the sensor driver.
>>> The ISP (camera bridge) driver does receive the data so it'd have to
>>> "ask for help" from the sensor driver.
>>
>> I am inclined to let the ISP drivers parse the data but on the other hand
>> it might be difficult to access same DMA buffers in kernel _and_ user space.
> 
> This is just about mapping the buffer to both kernel and user spaces. If
> the ISP has an iommu the kernel mapping might already exist if it comes
> from vmalloc().

Yes, I know. I was thinking of possibly required different mapping attributes
for kernel and user space and the problems on ARM with that.
Also as metadata is supposed to occupy only small part of a frame buffer perhaps
only one page or so could be mapped in kernel space.
I'm referring here mainly to SMIA++ method of storing metadata.

In case of sensors I used to work with it wouldn't be necessary to touch the
main frame buffers as the metadata is transmitted out of band.

> 
>>> As discussed previously, using V4L2 control events shouldn't probably be
>>> the way to go, but I think it's obvious that this is _somehow_ bound to
>>> controls, at least control ids.
>>>
 Also as Sakari indicated some sensors adopt custom meta data formats
 so maybe we need to introduce standard fourcc like IDs for meta data
 formats? I am not sure whether it is possible to create common
 description of an image meta data that fits all H/W.
>>>
>>> I'm not sure either since I know of only one example. That example, i.e.
>>> register-value pairs, should be something that I'd assume _some_ other
>>> hardware uses as well, but there could exist also hardware which
>>> doesn't. This solution might not work on that hardware.
>>
>> Of course it's hard to find a silver bullet for a hardware we do not know ;)
>>
>>>
>>> If there is metadata which does not associate to V4L2 controls (or
>>> ioctls), either existing or not yet existing, then that probably should
>>> be parsed by the driver. On the other hand, I can't think of metadata
>>> that wouldn't fall under this right now. :-)
>>
>> Some metadata are arrays of length specific to a given attribute,
>> I wonder how to support that with v4l2 controls ?
> 
> Is the metadata something which really isn't associated to any V4L2
> control? Are we now talking about a sensor which is more complex than a
> regular raw bayer sensor?

I referred to tags defined in EXIF standard, as you may know every tag
is basically an array of specific data type. For most tag types the array
length is 1 though.
Similar problem is solved by the V4L extended string controls API.

And yes this kind of tags are mostly produced by more powerful ISPs,
with, for instance, 3A or distortion corrections implemented in their firmware.
So this is a little bit different situation than a raw sensor with OMAP3 ISP.

> 
>>> Do you know more examples of sensor produced metadata than SMIA++?
>>
>> The only metadata I've had a bit experience with was regular EXIF tags
>> which could be retrieved from ISP through I2C bus.
> 
> That obviously won't map to V4L2 controls.
> 
> This should very likely be just passed to user space as-is as
> different... plane?

Yes, but I am trying to assess whether it's poss

Re: [RFC v4] V4L2 API for flash devices

2011-05-18 Thread Sakari Ailus
Laurent Pinchart wrote:
> Hi Sakari,

Hi Laurent,

> On Tuesday 17 May 2011 22:34:36 Sakari Ailus wrote:
>> Sylwester Nawrocki wrote:
>>> On 05/09/2011 12:11 AM, Sakari Ailus wrote:
 Sylwester Nawrocki wrote:
> On 05/07/2011 02:46 PM, Hans Verkuil wrote:
>> On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
>>> Hi,
>>>
>>> This is a fourth proposal for an interface for controlling flash
>>> devices on the V4L2/v4l2_subdev APIs.
>>>
>>> I want to thank everyone who have participated to the development of
>>> the flash interface.
>>>
>>> Comments and questions are very, very welcome as always.
>>>
>>>
>>> Changes since v3 [12]
>>> =
>>>
>>> - V4L2_CID_FLASH_STROBE changed to button control,
>>> V4L2_CID_FLASH_STROBE_STOP button control added,
>>> V4L2_CID_FLASH_STROBE_STATUS boolean control added.
>>>
>>> - No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.
>>>
>>> - V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.
>>>
>>> - V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY
>>> and V4L2_CID_INDICATOR_INTENSITY renamed to
>>> V4L2_CID_FLASH_INDICATOR_INTENSITY.
>>>
>>> - Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
>>> extensions".
>
> [snip]
>
>>> 3. Sensor metadata on frames
>>> 
>>>
>>> It'd be useful to be able to read back sensor metadata. If the flash
>>> is strobed (on sensor hardware) while streaming, it's difficult to
>>> know otherwise which frame in the stream has been exposed with
>>> flash.
>>
>> I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer
>> flag?
>> That way userspace can tell if that particular frame was taken with
>> flash.
>
> This looks more as a workaround for the problem rather than a good long
> term solution. It might be tempting to use the buffer flags which seem
> to be be more or less intended for buffer control.
> I'd like much more to see a buffer flags to be used to indicate whether
> an additional plane of (meta)data is carried by the buffer.
> There seem to be many more parameters, than a single flag indicating
> whether the frame has been exposed with flash or not, needed to be
> carried over to user space.
> But then we might need some standard format of the meta data, perhaps
> control id/value pairs and possibly a per plane configurable memory
> type.

 There are multiple possible approaches for this.

 For sensors where metadata is register-value pairs, that is, essentially
 V4L2 control values, I think this should be parsed by the sensor driver.
 The ISP (camera bridge) driver does receive the data so it'd have to
 "ask for help" from the sensor driver.
>>>
>>> I am inclined to let the ISP drivers parse the data but on the other hand
>>> it might be difficult to access same DMA buffers in kernel _and_ user
>>> space.
>>
>> This is just about mapping the buffer to both kernel and user spaces. If
>> the ISP has an iommu the kernel mapping might already exist if it comes
>> from vmalloc().
> 
> And we're also trying to get rid of that mapping to facilitate cache 
> management. Any API we create for metadata parsing will need to take 
> potential 
> cache-related performances issues into account at the design stage.

In this case, it's not necessary to map this memory to user space at all
so the kernel mapping would be the only one.

-- 
Sakari Ailus
sakari.ai...@maxwell.research.nokia.com
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v4] V4L2 API for flash devices

2011-05-18 Thread Laurent Pinchart
Hi Sakari,

On Tuesday 17 May 2011 22:34:36 Sakari Ailus wrote:
> Sylwester Nawrocki wrote:
> > On 05/09/2011 12:11 AM, Sakari Ailus wrote:
> >> Sylwester Nawrocki wrote:
> >>> On 05/07/2011 02:46 PM, Hans Verkuil wrote:
>  On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
> > Hi,
> > 
> > This is a fourth proposal for an interface for controlling flash
> > devices on the V4L2/v4l2_subdev APIs.
> > 
> > I want to thank everyone who have participated to the development of
> > the flash interface.
> > 
> > Comments and questions are very, very welcome as always.
> > 
> > 
> > Changes since v3 [12]
> > =
> > 
> > - V4L2_CID_FLASH_STROBE changed to button control,
> > V4L2_CID_FLASH_STROBE_STOP button control added,
> > V4L2_CID_FLASH_STROBE_STATUS boolean control added.
> > 
> > - No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.
> > 
> > - V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.
> > 
> > - V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY
> > and V4L2_CID_INDICATOR_INTENSITY renamed to
> > V4L2_CID_FLASH_INDICATOR_INTENSITY.
> > 
> > - Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
> > extensions".
> >>> 
> >>> [snip]
> >>> 
> > 3. Sensor metadata on frames
> > 
> > 
> > It'd be useful to be able to read back sensor metadata. If the flash
> > is strobed (on sensor hardware) while streaming, it's difficult to
> > know otherwise which frame in the stream has been exposed with
> > flash.
>  
>  I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer
>  flag?
>  That way userspace can tell if that particular frame was taken with
>  flash.
> >>> 
> >>> This looks more as a workaround for the problem rather than a good long
> >>> term solution. It might be tempting to use the buffer flags which seem
> >>> to be be more or less intended for buffer control.
> >>> I'd like much more to see a buffer flags to be used to indicate whether
> >>> an additional plane of (meta)data is carried by the buffer.
> >>> There seem to be many more parameters, than a single flag indicating
> >>> whether the frame has been exposed with flash or not, needed to be
> >>> carried over to user space.
> >>> But then we might need some standard format of the meta data, perhaps
> >>> control id/value pairs and possibly a per plane configurable memory
> >>> type.
> >> 
> >> There are multiple possible approaches for this.
> >> 
> >> For sensors where metadata is register-value pairs, that is, essentially
> >> V4L2 control values, I think this should be parsed by the sensor driver.
> >> The ISP (camera bridge) driver does receive the data so it'd have to
> >> "ask for help" from the sensor driver.
> > 
> > I am inclined to let the ISP drivers parse the data but on the other hand
> > it might be difficult to access same DMA buffers in kernel _and_ user
> > space.
> 
> This is just about mapping the buffer to both kernel and user spaces. If
> the ISP has an iommu the kernel mapping might already exist if it comes
> from vmalloc().

And we're also trying to get rid of that mapping to facilitate cache 
management. Any API we create for metadata parsing will need to take potential 
cache-related performances issues into account at the design stage.

> >> As discussed previously, using V4L2 control events shouldn't probably be
> >> the way to go, but I think it's obvious that this is _somehow_ bound to
> >> controls, at least control ids.
> >> 
> >>> Also as Sakari indicated some sensors adopt custom meta data formats
> >>> so maybe we need to introduce standard fourcc like IDs for meta data
> >>> formats? I am not sure whether it is possible to create common
> >>> description of an image meta data that fits all H/W.
> >> 
> >> I'm not sure either since I know of only one example. That example, i.e.
> >> register-value pairs, should be something that I'd assume _some_ other
> >> hardware uses as well, but there could exist also hardware which
> >> doesn't. This solution might not work on that hardware.
> > 
> > Of course it's hard to find a silver bullet for a hardware we do not know
> > ;)
> > 
> >> If there is metadata which does not associate to V4L2 controls (or
> >> ioctls), either existing or not yet existing, then that probably should
> >> be parsed by the driver. On the other hand, I can't think of metadata
> >> that wouldn't fall under this right now. :-)
> > 
> > Some metadata are arrays of length specific to a given attribute,
> > I wonder how to support that with v4l2 controls ?
> 
> Is the metadata something which really isn't associated to any V4L2
> control? Are we now talking about a sensor which is more complex than a
> regular raw bayer sensor?
> 
> >> Do you know more examples of sensor produced metadata than SMIA++?
> > 
> > The 

Re: [RFC v4] V4L2 API for flash devices

2011-05-17 Thread Sakari Ailus
Sylwester Nawrocki wrote:
> Hi Sakari,

Hi Sylwester,

> On 05/09/2011 12:11 AM, Sakari Ailus wrote:
>> Sylwester Nawrocki wrote:
>>> On 05/07/2011 02:46 PM, Hans Verkuil wrote:
 On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
> Hi,
>
> This is a fourth proposal for an interface for controlling flash devices
> on the V4L2/v4l2_subdev APIs.
>
> I want to thank everyone who have participated to the development of the
> flash interface.
>
> Comments and questions are very, very welcome as always.
>
>
> Changes since v3 [12]
> =
>
> - V4L2_CID_FLASH_STROBE changed to button control,
> V4L2_CID_FLASH_STROBE_STOP button control added,
> V4L2_CID_FLASH_STROBE_STATUS boolean control added.
>
> - No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.
>
> - V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.
>
> - V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY and
> V4L2_CID_INDICATOR_INTENSITY renamed to
> V4L2_CID_FLASH_INDICATOR_INTENSITY.
>
> - Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
> extensions".
>
>>>
>>> [snip]
>>>
>
> 3. Sensor metadata on frames
> 
>
> It'd be useful to be able to read back sensor metadata. If the flash is
> strobed (on sensor hardware) while streaming, it's difficult to know
> otherwise which frame in the stream has been exposed with flash.

 I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer
 flag?
 That way userspace can tell if that particular frame was taken with
 flash.
>>>
>>> This looks more as a workaround for the problem rather than a good long
>>> term solution. It might be tempting to use the buffer flags which seem
>>> to be be more or less intended for buffer control.
>>> I'd like much more to see a buffer flags to be used to indicate whether
>>> an additional plane of (meta)data is carried by the buffer.
>>> There seem to be many more parameters, than a single flag indicating
>>> whether the frame has been exposed with flash or not, needed to be
>>> carried over to user space.
>>> But then we might need some standard format of the meta data, perhaps
>>> control id/value pairs and possibly a per plane configurable memory
>>> type.
>>
>> There are multiple possible approaches for this.
>>
>> For sensors where metadata is register-value pairs, that is, essentially
>> V4L2 control values, I think this should be parsed by the sensor driver.
>> The ISP (camera bridge) driver does receive the data so it'd have to
>> "ask for help" from the sensor driver.
> 
> I am inclined to let the ISP drivers parse the data but on the other hand
> it might be difficult to access same DMA buffers in kernel _and_ user space.

This is just about mapping the buffer to both kernel and user spaces. If
the ISP has an iommu the kernel mapping might already exist if it comes
from vmalloc().

>> As discussed previously, using V4L2 control events shouldn't probably be
>> the way to go, but I think it's obvious that this is _somehow_ bound to
>> controls, at least control ids.
>>
>>> Also as Sakari indicated some sensors adopt custom meta data formats
>>> so maybe we need to introduce standard fourcc like IDs for meta data
>>> formats? I am not sure whether it is possible to create common
>>> description of an image meta data that fits all H/W.
>>
>> I'm not sure either since I know of only one example. That example, i.e.
>> register-value pairs, should be something that I'd assume _some_ other
>> hardware uses as well, but there could exist also hardware which
>> doesn't. This solution might not work on that hardware.
> 
> Of course it's hard to find a silver bullet for a hardware we do not know ;)
> 
>>
>> If there is metadata which does not associate to V4L2 controls (or
>> ioctls), either existing or not yet existing, then that probably should
>> be parsed by the driver. On the other hand, I can't think of metadata
>> that wouldn't fall under this right now. :-)
> 
> Some metadata are arrays of length specific to a given attribute,
> I wonder how to support that with v4l2 controls ?

Is the metadata something which really isn't associated to any V4L2
control? Are we now talking about a sensor which is more complex than a
regular raw bayer sensor?

>> Do you know more examples of sensor produced metadata than SMIA++?
> 
> The only metadata I've had a bit experience with was regular EXIF tags
> which could be retrieved from ISP through I2C bus.

That obviously won't map to V4L2 controls.

This should very likely be just passed to user space as-is as
different... plane?

In some cases it's time critical to pass data to user space that
otherwise could be associated with a video buffer. I wonder if this case
is time critical or not.

> These were mostly fixed point arithmetic numbers in [32-bit numerato

Re: [RFC v4] V4L2 API for flash devices

2011-05-16 Thread Sakari Ailus
Andy Walls wrote:
> On Sat, 2011-05-07 at 14:46 +0200, Hans Verkuil wrote:
>> On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
>>>
>>>
>>> enum v4l2_flash_strobe_whence {
>>> V4L2_FLASH_STROBE_WHENCE_SOFTWARE,
>>> V4L2_FLASH_STROBE_WHENCE_EXTERNAL,
>>> };
>>
>> Perhaps use 'type' instead of 'whence'? English isn't my native language,
>> but it sounds pretty archaic to me.
> 
> "SOURCE" is better than "WHENCE" here.
> 
> 
> "whence" is certainly very formal and used very little.  "whence" likely
> still gets some use in English, simply because a terse synonym doesn't
> exist.
> 
> The problem with using whence is that many English speakers won't know
> its correct definition.
> 
>   "whence" means "from what source, origin, or place"
> 
> In your use here, the implicit "from" in the definition of whence is
> essential.  However, most (American) English speakers that I know think
> "whence" simply means "where".

Thanks for the feedback, Andy!

WHENCE has since changed to MODE (or at least should have been), but I
think SOURCE is even better. I'll switch to that.

Regards,

-- 
Sakari Ailus
sakari.ai...@maxwell.research.nokia.com
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v4] V4L2 API for flash devices

2011-05-14 Thread Andy Walls
On Sat, 2011-05-07 at 14:46 +0200, Hans Verkuil wrote:
> On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
> >
> > 
> > enum v4l2_flash_strobe_whence {
> > V4L2_FLASH_STROBE_WHENCE_SOFTWARE,
> > V4L2_FLASH_STROBE_WHENCE_EXTERNAL,
> > };
> 
> Perhaps use 'type' instead of 'whence'? English isn't my native language,
> but it sounds pretty archaic to me.

"SOURCE" is better than "WHENCE" here.


"whence" is certainly very formal and used very little.  "whence" likely
still gets some use in English, simply because a terse synonym doesn't
exist.

The problem with using whence is that many English speakers won't know
its correct definition.

"whence" means "from what source, origin, or place"

In your use here, the implicit "from" in the definition of whence is
essential.  However, most (American) English speakers that I know think
"whence" simply means "where".

Regards,
Andy

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v4] V4L2 API for flash devices

2011-05-10 Thread Sylwester Nawrocki
Hi Sakari,

On 05/09/2011 12:11 AM, Sakari Ailus wrote:
> Sylwester Nawrocki wrote:
>> On 05/07/2011 02:46 PM, Hans Verkuil wrote:
>>> On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
 Hi,

 This is a fourth proposal for an interface for controlling flash devices
 on the V4L2/v4l2_subdev APIs.

 I want to thank everyone who have participated to the development of the
 flash interface.

 Comments and questions are very, very welcome as always.


 Changes since v3 [12]
 =

 - V4L2_CID_FLASH_STROBE changed to button control,
 V4L2_CID_FLASH_STROBE_STOP button control added,
 V4L2_CID_FLASH_STROBE_STATUS boolean control added.

 - No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.

 - V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.

 - V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY and
 V4L2_CID_INDICATOR_INTENSITY renamed to
 V4L2_CID_FLASH_INDICATOR_INTENSITY.

 - Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
 extensions".

>>
>> [snip]
>>

 3. Sensor metadata on frames
 

 It'd be useful to be able to read back sensor metadata. If the flash is
 strobed (on sensor hardware) while streaming, it's difficult to know
 otherwise which frame in the stream has been exposed with flash.
>>>
>>> I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer
>>> flag?
>>> That way userspace can tell if that particular frame was taken with
>>> flash.
>>
>> This looks more as a workaround for the problem rather than a good long
>> term solution. It might be tempting to use the buffer flags which seem
>> to be be more or less intended for buffer control.
>> I'd like much more to see a buffer flags to be used to indicate whether
>> an additional plane of (meta)data is carried by the buffer.
>> There seem to be many more parameters, than a single flag indicating
>> whether the frame has been exposed with flash or not, needed to be
>> carried over to user space.
>> But then we might need some standard format of the meta data, perhaps
>> control id/value pairs and possibly a per plane configurable memory
>> type.
> 
> There are multiple possible approaches for this.
> 
> For sensors where metadata is register-value pairs, that is, essentially
> V4L2 control values, I think this should be parsed by the sensor driver.
> The ISP (camera bridge) driver does receive the data so it'd have to
> "ask for help" from the sensor driver.

I am inclined to let the ISP drivers parse the data but on the other hand
it might be difficult to access same DMA buffers in kernel _and_ user space.

> 
> As discussed previously, using V4L2 control events shouldn't probably be
> the way to go, but I think it's obvious that this is _somehow_ bound to
> controls, at least control ids.
> 
>> Also as Sakari indicated some sensors adopt custom meta data formats
>> so maybe we need to introduce standard fourcc like IDs for meta data
>> formats? I am not sure whether it is possible to create common
>> description of an image meta data that fits all H/W.
> 
> I'm not sure either since I know of only one example. That example, i.e.
> register-value pairs, should be something that I'd assume _some_ other
> hardware uses as well, but there could exist also hardware which
> doesn't. This solution might not work on that hardware.

Of course it's hard to find a silver bullet for a hardware we do not know ;)

> 
> If there is metadata which does not associate to V4L2 controls (or
> ioctls), either existing or not yet existing, then that probably should
> be parsed by the driver. On the other hand, I can't think of metadata
> that wouldn't fall under this right now. :-)

Some metadata are arrays of length specific to a given attribute,
I wonder how to support that with v4l2 controls ?

> 
> Do you know more examples of sensor produced metadata than SMIA++?

The only metadata I've had a bit experience with was regular EXIF tags
which could be retrieved from ISP through I2C bus.
These were mostly fixed point arithmetic numbers in [32-bit numerator/
32-bit denominator] form carrying exposure time, shutter speed, aperture,
brightness, flash, etc. information. The tags could be read from ISP after
it buffered a frame in its memory and processed it.
In case of a JPEG image format the tags can be embedded into the main
image file. But the image processors not always supported that so we used
to have an ioctl for the purpose of retrieving the metadata in user space.
In some cases it is desired to read data directly from the driver rather
than parsing a relatively large buffer.
It would be good to have a uniform interface for passing such data to
applications. I think in that particular use case a control id/value pair
sequences would do.

--
Regards,
Sylwester 
--
To unsubscribe from this list: send the

Re: [RFC v4] V4L2 API for flash devices

2011-05-08 Thread Sakari Ailus
Sylwester Nawrocki wrote:
> Hi Hans,

Hi Sylwester, Hans,

> On 05/07/2011 02:46 PM, Hans Verkuil wrote:
>> On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
>>> Hi,
>>>
>>> This is a fourth proposal for an interface for controlling flash devices
>>> on the V4L2/v4l2_subdev APIs.
>>>
>>> I want to thank everyone who have participated to the development of the
>>> flash interface.
>>>
>>> Comments and questions are very, very welcome as always.
>>>
>>>
>>> Changes since v3 [12]
>>> =
>>>
>>> - V4L2_CID_FLASH_STROBE changed to button control,
>>> V4L2_CID_FLASH_STROBE_STOP button control added,
>>> V4L2_CID_FLASH_STROBE_STATUS boolean control added.
>>>
>>> - No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.
>>>
>>> - V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.
>>>
>>> - V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY and
>>> V4L2_CID_INDICATOR_INTENSITY renamed to
>>> V4L2_CID_FLASH_INDICATOR_INTENSITY.
>>>
>>> - Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
>>> extensions".
>>>
> 
> [snip]
> 
>>>
>>> 3. Sensor metadata on frames
>>> 
>>>
>>> It'd be useful to be able to read back sensor metadata. If the flash is
>>> strobed (on sensor hardware) while streaming, it's difficult to know
>>> otherwise which frame in the stream has been exposed with flash.
>>
>> I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer
>> flag?
>> That way userspace can tell if that particular frame was taken with
>> flash.
> 
> This looks more as a workaround for the problem rather than a good long
> term solution. It might be tempting to use the buffer flags which seem
> to be be more or less intended for buffer control.
> I'd like much more to see a buffer flags to be used to indicate whether
> an additional plane of (meta)data is carried by the buffer.
> There seem to be many more parameters, than a single flag indicating
> whether the frame has been exposed with flash or not, needed to be
> carried over to user space.
> But then we might need some standard format of the meta data, perhaps
> control id/value pairs and possibly a per plane configurable memory
> type.

There are multiple possible approaches for this.

For sensors where metadata is register-value pairs, that is, essentially
V4L2 control values, I think this should be parsed by the sensor driver.
The ISP (camera bridge) driver does receive the data so it'd have to
"ask for help" from the sensor driver.

As discussed previously, using V4L2 control events shouldn't probably be
the way to go, but I think it's obvious that this is _somehow_ bound to
controls, at least control ids.

> Also as Sakari indicated some sensors adopt custom meta data formats
> so maybe we need to introduce standard fourcc like IDs for meta data
> formats? I am not sure whether it is possible to create common
> description of an image meta data that fits all H/W.

I'm not sure either since I know of only one example. That example, i.e.
register-value pairs, should be something that I'd assume _some_ other
hardware uses as well, but there could exist also hardware which
doesn't. This solution might not work on that hardware.

If there is metadata which does not associate to V4L2 controls (or
ioctls), either existing or not yet existing, then that probably should
be parsed by the driver. On the other hand, I can't think of metadata
that wouldn't fall under this right now. :-)

Do you know more examples of sensor produced metadata than SMIA++?

Regards,

-- 
Sakari Ailus
sakari.ai...@maxwell.research.nokia.com
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v4] V4L2 API for flash devices

2011-05-08 Thread Sakari Ailus
Hans Verkuil wrote:
[clip]
>>  V4L2_CID_FLASH_STROBE (button; wo; LED, xenon)
>>
>> Strobe the flash using software strobe from the host, typically over I2C
>> or a GPIO. The flash is NOT synchronised to sensor pixel are exposure
>> since the command is given asynchronously. Alternatively, if the flash
>> controller is a master in the system, the sensor exposure may be
>> triggered based on software strobe.
> 
> I would like a comment here that the driver will always stop the strobe
> to prevent hardware damage, but that STROBE_STOP can be called to shut
> down the strobe earlier.
> 
> Also, how to protect against nastiness like this:
> 
> struct v4l2_control ctrl = { V4L2_CID_FLASH_STROBE, 0 };
> 
> for (;;)
>   ioctl(fd, VIDIOC_S_CTRL, &ctrl);
> 
> Return -EBUSY as long as either a strobe is in progress or if it is unsafe to
> start a new one?

This is not implemented in the current adp1653 driver but yes, it should
be done. However, it isn't simple to implement in a way that it would
still allow the optimal use of the flash.

I'll add that to the todo list for the driver.

Modelling of the flash LED cooldown period should be relatively
independent of the board, actual LED and the flash chip, so this might
make a nice library in the future.

>>
>>
>>  V4L2_CID_FLASH_STROBE_STOP (button; wo; LED)
>>
>> This control may be used to shut down the strobe immediately.
>>
>>
>>  V4L2_CID_FLASH_STROBE_STATUS (boolean; ro; LED)
>>
>> This contol may be used to query the status of the strobe (on/off).
>>
>>
>>  V4L2_CID_FLASH_STROBE_MODE (menu; rw; LED)
>>
>> Use hardware or software strobe. If hardware strobe is selected, the
>> flash controller is a slave in the system where the sensor produces the
>> strobe signal to the flash.
>>
>> In this case the flash controller setup is limited to programming strobe
>> timeout and power (LED flash) and the sensor controls the timing and
>> length of the strobe.
>>
>> enum v4l2_flash_strobe_whence {
>>  V4L2_FLASH_STROBE_WHENCE_SOFTWARE,
>>  V4L2_FLASH_STROBE_WHENCE_EXTERNAL,
>> };
> 
> Perhaps use 'type' instead of 'whence'? English isn't my native language,
> but it sounds pretty archaic to me.

Neither it is mine. I actually forgot to change the name of the enum to
v4l2_flash_strobe_mode so it would match the control.

What do you think of that?

>>
>>
>>  V4L2_CID_FLASH_TIMEOUT (integer; rw; LED)
>>
>> The flash controller provides timeout functionality to shut down the led
>> in case the host fails to do that. For hardware strobe, this is the
>> maximum amount of time the flash should stay on, and the purpose of the
>> setting is to prevent the LED from catching fire.
> 
> It is a bit ambiguous. I assume you mean to say that the application can
> set the timeout to any value less than the maximum of the control (which
> is the maximum allowed by the hardware).

Yes; that's what I intended. I'll attempt to formulate it better in the
forthcoming patches. :-)

[clip]

>> Open questions
>> ==
>>
>> 1. Flash LED mode control
>> -
>>
>> Should the flash led mode control be a single control or a set of
>> controls? A single control would make it easier for application to
>> choose between different modes, but on the other hand limits future
>> extensibility if there would have to be further splitting of the modes. [8]
> 
> I think I like the current proposal best.

I agree.

>> 3. Units
>> 
>>
>> Which units should e.g. V4L2_CID_FLASH_TIMEOUT be using? It'd be very
>> useful to have standard unit on this control, like ms or µs.
> 
> This should be standardized. The question is how flexible we want this.
> I would definitely go for µs or perhaps even ns. But what should the
> maximum duration be? Are there extreme cases where you can have a really
> long flash in special types of photography? Perhaps this should be a 64-bit
> number?

On xenon flashes the strobe strength is controlled by strobe duration,
as far as I understand. I think it would be better to hide that under
the V4L2_CID_FLASH_INTENSITY, though.

The timeout on adp1653 the timeout is really coarse, there are 16
different values for it.

On other chips more precise control could be possible.

>> Some controls, like V4L2_CID_FLASH_INTENSITY, can't easily use a
>> standard unit. The luminous output depends on the LED connected (you
>> could use an incandescent lightbulb too, I suppose?) to the flash
>> controller. These controls typically control the current supplied by the
>> flash controller.
>>
>> The timing controls on the sensor could use pixels (or lines) since
>> these are the units the sensor uses itself. Converting between pixels
>> (or lines) and SI units is trivial since the pixel clock is known in the
>> user space.
>>
>> The flash chip, on the other hand, has no knowledge of sensor pixel
>> clock, so it should use SI units. Also, the timing control currently in
>> the flash chip itself is very coarse.
>>
>> PROPOSAL: If the co

Re: [RFC v4] V4L2 API for flash devices

2011-05-07 Thread Sylwester Nawrocki

Hi Hans,

On 05/07/2011 02:46 PM, Hans Verkuil wrote:

On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:

Hi,

This is a fourth proposal for an interface for controlling flash devices
on the V4L2/v4l2_subdev APIs.

I want to thank everyone who have participated to the development of the
flash interface.

Comments and questions are very, very welcome as always.


Changes since v3 [12]
=

- V4L2_CID_FLASH_STROBE changed to button control,
V4L2_CID_FLASH_STROBE_STOP button control added,
V4L2_CID_FLASH_STROBE_STATUS boolean control added.

- No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.

- V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.

- V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY and
V4L2_CID_INDICATOR_INTENSITY renamed to V4L2_CID_FLASH_INDICATOR_INTENSITY.

- Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
extensions".



[snip]



3. Sensor metadata on frames


It'd be useful to be able to read back sensor metadata. If the flash is
strobed (on sensor hardware) while streaming, it's difficult to know
otherwise which frame in the stream has been exposed with flash.


I wonder if it would make sense to have a V4L2_BUF_FLAG_FLASH buffer flag?
That way userspace can tell if that particular frame was taken with flash.


This looks more as a workaround for the problem rather than a good long 
term solution. It might be tempting to use the buffer flags which seem

to be be more or less intended for buffer control.
I'd like much more to see a buffer flags to be used to indicate whether
an additional plane of (meta)data is carried by the buffer.
There seem to be many more parameters, than a single flag indicating 
whether the frame has been exposed with flash or not, needed to be 
carried over to user space.

But then we might need some standard format of the meta data, perhaps
control id/value pairs and possibly a per plane configurable memory
type.

Also as Sakari indicated some sensors adopt custom meta data formats
so maybe we need to introduce standard fourcc like IDs for meta data
formats? I am not sure whether it is possible to create common 
description of an image meta data that fits all H/W.


--
Regards,
Sylwester
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v4] V4L2 API for flash devices

2011-05-07 Thread Hans Verkuil
On Thursday, May 05, 2011 20:49:21 Sakari Ailus wrote:
> Hi,
> 
> This is a fourth proposal for an interface for controlling flash devices
> on the V4L2/v4l2_subdev APIs.
> 
> I want to thank everyone who have participated to the development of the
> flash interface.
> 
> Comments and questions are very, very welcome as always.
> 
> 
> Changes since v3 [12]
> =
> 
> - V4L2_CID_FLASH_STROBE changed to button control,
> V4L2_CID_FLASH_STROBE_STOP button control added,
> V4L2_CID_FLASH_STROBE_STATUS boolean control added.
> 
> - No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.
> 
> - V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.
> 
> - V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY and
> V4L2_CID_INDICATOR_INTENSITY renamed to V4L2_CID_FLASH_INDICATOR_INTENSITY.
> 
> - Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
> extensions".
> 
> 
> Changes since v2 [9]
> 
> 
> - Rearranged proposed controls. V4L2_CID_FLASH_LED_MODE is now the first
> control.
> 
> - Added an open question on naming of indicator and torch controls.
> 
> - V4L2_CID_FLASH_STROBE_MODE renamed to V4L2_CID_FLASH_STROBE_WHENCE.
> V4L2_CID_FLASH_EXTERNAL_STROBE_WHENCE renamed to
> V4L2_CID_FLASH_EXTERNAL_STROBE_MODE.
> 
> - Removed CID_ from V4L2_CID_FLASH_EXTERNAL_STROBE_MODE values.
> 
> - Added a new use case based on [11]: Synchronised LED flash (hardware
> strobe, timed exposure).
> 
> - Added section on possible future extensions.
> 
> - Complemented the open question on units.
> 
> 
> Changes since v1 [7]
> 
> 
> - V4L2_FLASH_STROBE_MODE_EXT_STROBE renamed to
> V4L2_FLASH_STROBE_MODE_EXTERNAL.
> 
> - V4L2_CID_FLASH_STROBE control changed from button to bool.
> 
> - Removed suggestion of adding V4L2_CID_FLASH_DURATION.
> V4L2_CID_FLASH_TIMEOUT is used as hardware timeout.
> 
> - Added control access info (ro/rw).
> 
> - V4L2_FLASH_MODE_NONE added, V4L2_FLASH_LED_MODE_FLASH no longer forced
> as 1 in enum.
> 
> - Bits use (1 << x) instead of 0x00... format.
> 
> - Added an open question on flash LED mode controls.
> 
> - Added an open question on a new control:
> V4L2_CID_FLASH_EXTERNAL_STROBE_WHENCE.
> 
> - Added an open question on control units.
> 
> 
> Scope
> =
> 
> This RFC is focused mostly on the ADP1653 [1] and similar chips [2, 3]
> which provides following functionality. [2, 3] mostly differ on the
> available faults --- for example, there are faults also for the
> indicator LED.
> 
> - High power LED output (flash or torch modes)
> - Low power indicator LED output (a.k.a. privacy light)
> - Programmable flash timeout
> - Software and hardware strobe
> - Fault detection
>   - Overvoltage
>   - Overtemperature
>   - Short circuit
>   - Timeout
> - Programmable current (both high-power and indicator LEDs)
> 
> If anyone else is aware of hardware which significantly differs from
> these and does not get served well under the proposed interface, please
> tell about it.
> 
> This RFC does NOT address the synchronisation of the flash to a given
> frame since this task is typically performed by the sensor through a
> strobe signal. The host does not have enough information for this ---
> exact timing information on the exposure of the sensor pixel array. In
> this case the flash synchronisation is visible to the flash controller
> as the hardware strobe originating from the sensor.
> 
> Flash synchronisation requires
> 
> 1) flash control capability from the sensor including a strobe output,
> 2) strobe input in the flash controller,
> 3) (optionally) ability to program sensor parameters at given frame,
> such as flash strobe, and
> 4) ability to read back metadata produced by the sensor related to a
> given frame. This should include whether the frame is exposed with
> flash, i.e. the sensor's flash strobe output.
> 
> Since we have little examples of both in terms of hardware support,
> which is in practice required, it was decided to postpone the interface
> specification for now. [6]
> 
> Xenon flash controllers exist but I don't have a specific example of
> those. Typically the interface is quite simple. Gpio pins for charge and
> strobe. The length of the strobe signal determines the strength of the
> flash pulse. The strobe is controlled by the sensor as for LED flash if
> it is hardware based.
> 
> See "Possible future extensions" section below for more.
> 
> 
> Known use cases
> ===
> 
> The use case listed below concentrate on using a flash in a mobile
> device, for example in a mobile phone. The use cases could be somewhat
> different in devices the primary use of which is camera.
> 
> Unsynchronised LED flash (software strobe)
> --
> 
> Unsynchronised LED flash is controlled directly by the host as the
> sensor. The flash must be enabled by the host before the exposure of the
> image starts and disabled once it ends. The

[RFC v4] V4L2 API for flash devices

2011-05-05 Thread Sakari Ailus
Hi,

This is a fourth proposal for an interface for controlling flash devices
on the V4L2/v4l2_subdev APIs.

I want to thank everyone who have participated to the development of the
flash interface.

Comments and questions are very, very welcome as always.


Changes since v3 [12]
=

- V4L2_CID_FLASH_STROBE changed to button control,
V4L2_CID_FLASH_STROBE_STOP button control added,
V4L2_CID_FLASH_STROBE_STATUS boolean control added.

- No reason to say xenon flashes can't use V4L2_CID_FLASH_STROBE.

- V4L2_CID_FLASH_STROBE_WHENCE changed to V4L2_CID_FLASH_STROBE_MODE.

- V4L2_CID_TORCH_INTENSITY renamed to V4L2_CID_FLASH_TORCH_INTENSITY and
V4L2_CID_INDICATOR_INTENSITY renamed to V4L2_CID_FLASH_INDICATOR_INTENSITY.

- Moved V4L2_CID_FLASH_EXTERNAL_STROBE_MODE under "Possible future
extensions".


Changes since v2 [9]


- Rearranged proposed controls. V4L2_CID_FLASH_LED_MODE is now the first
control.

- Added an open question on naming of indicator and torch controls.

- V4L2_CID_FLASH_STROBE_MODE renamed to V4L2_CID_FLASH_STROBE_WHENCE.
V4L2_CID_FLASH_EXTERNAL_STROBE_WHENCE renamed to
V4L2_CID_FLASH_EXTERNAL_STROBE_MODE.

- Removed CID_ from V4L2_CID_FLASH_EXTERNAL_STROBE_MODE values.

- Added a new use case based on [11]: Synchronised LED flash (hardware
strobe, timed exposure).

- Added section on possible future extensions.

- Complemented the open question on units.


Changes since v1 [7]


- V4L2_FLASH_STROBE_MODE_EXT_STROBE renamed to
V4L2_FLASH_STROBE_MODE_EXTERNAL.

- V4L2_CID_FLASH_STROBE control changed from button to bool.

- Removed suggestion of adding V4L2_CID_FLASH_DURATION.
V4L2_CID_FLASH_TIMEOUT is used as hardware timeout.

- Added control access info (ro/rw).

- V4L2_FLASH_MODE_NONE added, V4L2_FLASH_LED_MODE_FLASH no longer forced
as 1 in enum.

- Bits use (1 << x) instead of 0x00... format.

- Added an open question on flash LED mode controls.

- Added an open question on a new control:
V4L2_CID_FLASH_EXTERNAL_STROBE_WHENCE.

- Added an open question on control units.


Scope
=

This RFC is focused mostly on the ADP1653 [1] and similar chips [2, 3]
which provides following functionality. [2, 3] mostly differ on the
available faults --- for example, there are faults also for the
indicator LED.

- High power LED output (flash or torch modes)
- Low power indicator LED output (a.k.a. privacy light)
- Programmable flash timeout
- Software and hardware strobe
- Fault detection
- Overvoltage
- Overtemperature
- Short circuit
- Timeout
- Programmable current (both high-power and indicator LEDs)

If anyone else is aware of hardware which significantly differs from
these and does not get served well under the proposed interface, please
tell about it.

This RFC does NOT address the synchronisation of the flash to a given
frame since this task is typically performed by the sensor through a
strobe signal. The host does not have enough information for this ---
exact timing information on the exposure of the sensor pixel array. In
this case the flash synchronisation is visible to the flash controller
as the hardware strobe originating from the sensor.

Flash synchronisation requires

1) flash control capability from the sensor including a strobe output,
2) strobe input in the flash controller,
3) (optionally) ability to program sensor parameters at given frame,
such as flash strobe, and
4) ability to read back metadata produced by the sensor related to a
given frame. This should include whether the frame is exposed with
flash, i.e. the sensor's flash strobe output.

Since we have little examples of both in terms of hardware support,
which is in practice required, it was decided to postpone the interface
specification for now. [6]

Xenon flash controllers exist but I don't have a specific example of
those. Typically the interface is quite simple. Gpio pins for charge and
strobe. The length of the strobe signal determines the strength of the
flash pulse. The strobe is controlled by the sensor as for LED flash if
it is hardware based.

See "Possible future extensions" section below for more.


Known use cases
===

The use case listed below concentrate on using a flash in a mobile
device, for example in a mobile phone. The use cases could be somewhat
different in devices the primary use of which is camera.

Unsynchronised LED flash (software strobe)
--

Unsynchronised LED flash is controlled directly by the host as the
sensor. The flash must be enabled by the host before the exposure of the
image starts and disabled once it ends. The host is fully responsible
for the timing of the flash.

Example of such device: Nokia N900.

Synchronised LED flash (hardware strobe)


The synchronised LED flash is pre-programmed by the host (power and
timeout) but controlled by the sensor through a strobe signal from the
sensor to the fla