diff options
author | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2012-05-02 06:24:33 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-14 14:29:35 -0300 |
commit | fc162a099e7b34bfe3501028c919ff5d43e5e3d3 (patch) | |
tree | ed3e60fe068ad65c5a8846c110852d86582095f8 | |
parent | 0bf6b7dc5fd1e60e93657d4fe4b3d788216b9d5e (diff) | |
download | linux-fc162a099e7b34bfe3501028c919ff5d43e5e3d3.tar.gz linux-fc162a099e7b34bfe3501028c919ff5d43e5e3d3.tar.bz2 linux-fc162a099e7b34bfe3501028c919ff5d43e5e3d3.zip |
[media] V4L: Add camera 3A lock control
The V4L2_CID_3A_LOCK bitmask control allows applications to pause
or resume the automatic exposure, focus and wite balance adjustments.
It can be used, for example, to lock the 3A adjustments right before
a still image is captured, for pre-focus, etc.
The applications can control each of the algorithms independently,
through a corresponding control bit, if driver allows that.
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | Documentation/DocBook/media/v4l/controls.xml | 39 | ||||
-rw-r--r-- | drivers/media/video/v4l2-ctrls.c | 2 | ||||
-rw-r--r-- | include/linux/videodev2.h | 5 |
3 files changed, 46 insertions, 0 deletions
diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index ad0d53d3ffdd..f38f06169795 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3301,6 +3301,45 @@ lens-distortion correction.</entry> </row> <row><entry></entry></row> + <row> + <entry spanname="id"><constant>V4L2_CID_3A_LOCK</constant></entry> + <entry>bitmask</entry> + </row> + <row> + <entry spanname="descr">This control locks or unlocks the automatic +focus, exposure and white balance. The automatic adjustments can be paused +independently by setting the corresponding lock bit to 1. The camera then retains +the settings until the lock bit is cleared. The following lock bits are defined: +</entry> + </row> + <row> + <entrytbl spanname="descr" cols="2"> + <tbody valign="top"> + <row> + <entry><constant>V4L2_LOCK_EXPOSURE</constant></entry> + <entry>Automatic exposure adjustments lock.</entry> + </row> + <row> + <entry><constant>V4L2_LOCK_WHITE_BALANCE</constant></entry> + <entry>Automatic white balance adjustments lock.</entry> + </row> + <row> + <entry><constant>V4L2_LOCK_FOCUS</constant></entry> + <entry>Automatic focus lock.</entry> + </row> + </tbody> + </entrytbl> + </row> + <row><entry spanname="descr"> +When a given algorithm is not enabled, drivers should ignore requests +to lock it and should return no error. An example might be an application +setting bit <constant>V4L2_LOCK_WHITE_BALANCE</constant> when the +<constant>V4L2_CID_AUTO_WHITE_BALANCE</constant> control is set to +<constant>FALSE</constant>. The value of this control may be changed +by exposure, white balance or focus controls.</entry> + </row> + <row><entry></entry></row> + </tbody> </tgroup> </table> diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index d4dc8ba7b755..a47b29270ba3 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -661,6 +661,7 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_ISO_SENSITIVITY_AUTO: return "ISO Sensitivity, Auto"; case V4L2_CID_EXPOSURE_METERING: return "Exposure, Metering Mode"; case V4L2_CID_SCENE_MODE: return "Scene Mode"; + case V4L2_CID_3A_LOCK: return "3A Lock"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ @@ -849,6 +850,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, break; case V4L2_CID_FLASH_FAULT: case V4L2_CID_JPEG_ACTIVE_MARKER: + case V4L2_CID_3A_LOCK: *type = V4L2_CTRL_TYPE_BITMASK; break; case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE: diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 092bf5aaf348..a9b03ae44037 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1758,6 +1758,11 @@ enum v4l2_scene_mode { V4L2_SCENE_MODE_TEXT = 13, }; +#define V4L2_CID_3A_LOCK (V4L2_CID_CAMERA_CLASS_BASE+27) +#define V4L2_LOCK_EXPOSURE (1 << 0) +#define V4L2_LOCK_WHITE_BALANCE (1 << 1) +#define V4L2_LOCK_FOCUS (1 << 2) + /* FM Modulator class control IDs */ #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) |