Re: RFC: add parameters to V4L controls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon January 7 2013 11:46:38 Andrzej Hajda wrote:
> Hi,
> 
> I have included this proposition already in the post "[PATCH RFC 0/2] 
> V4L: Add auto focus area control and selection" but it left unanswered.
> I repost it again in a separate e-mail, I hope this way it will be 
> easier to attract attention.
> 
> Problem description
> 
> Currently V4L2 controls can have only single value (of type int, int64, 
> string). Some hardware controls require more than single int parameter, 
> for example to set auto-focus (AF) rectangle four coordinates should be 
> passed, to set auto-focus spot two coordinates should be passed.
> 
> Current solution
> 
> In case of AF rectangle we can reuse selection API as in "[PATCH RFC 
> 0/2] V4L: Add auto focus area control and selection" post.
> Pros:
> - reuse existing API,
> Cons:
> - two IOCTL's to perform one action,
> - non-atomic operation,
> - fits well only for rectangles and spots (but with unused fields width, 
> height), in case of other parameters we should find a different way.
> 
> Proposed solution
> 
> The solution takes an advantage of the fact VIDIOC_(G/S/TRY)_EXT_CTRLS
> ioctls can be called with multiple controls per call.
> 
> I will present it using AF area control example.
> 
> There could be added four pseudo-controls, lets call them for short:
> LEFT, TOP, WIDTH, HEIGHT.
> Those controls could be passed together with V4L2_AUTO_FOCUS_AREA_RECTANGLE
> control in one ioctl as a kind of parameters.
> 
> For example setting auto-focus spot would require calling VIDIOC_S_EXT_CTRLS
> with the following controls:
> - V4L2_CID_AUTO_FOCUS_AREA = V4L2_AUTO_FOCUS_AREA_RECTANGLE
> - LEFT = ...
> - RIGHT = ...
> 
> Setting AF rectangle:
> - V4L2_CID_AUTO_FOCUS_AREA = V4L2_AUTO_FOCUS_AREA_RECTANGLE
> - LEFT = ...
> - TOP = ...
> - WIDTH = ...
> - HEIGHT = ...
> 
> Setting  AF object detection (no parameters required):
> - V4L2_CID_AUTO_FOCUS_AREA = V4L2_AUTO_FOCUS_AREA_OBJECT_DETECTION

If you want to do this, then you have to make LEFT/TOP/WIDTH/HEIGHT real
controls. There is no such thing as a pseudo control. So you need five
new controls in total:

V4L2_CID_AUTO_FOCUS_AREA
V4L2_CID_AUTO_FOCUS_LEFT
V4L2_CID_AUTO_FOCUS_RIGHT
V4L2_CID_AUTO_FOCUS_WIDTH
V4L2_CID_AUTO_FOCUS_HEIGHT

I have no problem with this from the point of view of the control API, but
whether this is the best solution for implementing auto-focus is a different
issue and input from sensor specialists is needed as well (added Laurent and
Sakari to the CC list).

The primary concern I have is that this does not scale to multiple focus
rectangles. This might not be relevant to auto focus, though.

Regards,

	Hans

> 
> I have presented all three cases to show the advantages of this solution:
> - atomicity - control and its parameters are passed in one call,
> - flexibility - we are not limited by a fixed number of parameters,
> - no-redundancy - we can pass only required parameters
> 	(no need to pass null width and height in case of spot selection),
> - extensibility - it is possible to extend parameters in the future,
> for example add parameters to V4L2_AUTO_FOCUS_AREA_OBJECT_DETECTION,
> without breaking API,
> - backward compatibility,
> - re-usability - this schema could be used in other controls,
> 	pseudo-controls could be re-used in other controls as well.
> - API backward compatibility.
> 
> 
> Regards
> Andrzej Hajda
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux