diff options
author | Barnabás Pőcze <barnabas.pocze@ideasonboard.com> | 2025-03-04 12:25:17 +0100 |
---|---|---|
committer | Barnabás Pőcze <barnabas.pocze@ideasonboard.com> | 2025-04-15 13:07:21 +0200 |
commit | 78d9f7bb75b3d900536a151b1b1a0a6e9ba84c29 (patch) | |
tree | c40e57099d9f6345193d01efa799a6d53468d700 /src | |
parent | 5553efc6b13fb0dbf83fc1cbc1f46f4d19b6680a (diff) |
libcamera: pipeline: uvcvideo: Expose `Gamma` control
Commit 294ead848c3fa2 ("libcamera: Add gamma control id")
introduced the "Gamma" control, so expose it for UVC
cameras as well using the `V4L2_CID_GAMMA` control.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp index 5adc89fd..586e932d 100644 --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp @@ -329,6 +329,8 @@ int PipelineHandlerUVC::processControl(const UVCCameraData *data, ControlList *c cid = V4L2_CID_EXPOSURE_ABSOLUTE; else if (id == controls::AnalogueGain) cid = V4L2_CID_GAIN; + else if (id == controls::Gamma) + cid = V4L2_CID_GAMMA; else return -EINVAL; @@ -394,6 +396,10 @@ int PipelineHandlerUVC::processControl(const UVCCameraData *data, ControlList *c break; } + case V4L2_CID_GAMMA: + controls->set(cid, static_cast<int32_t>(std::lround(value.get<float>() * 100))); + break; + default: { int32_t ivalue = value.get<int32_t>(); controls->set(cid, ivalue); @@ -691,6 +697,9 @@ void UVCCameraData::addControl(uint32_t cid, const ControlInfo &v4l2Info, case V4L2_CID_GAIN: id = &controls::AnalogueGain; break; + case V4L2_CID_GAMMA: + id = &controls::Gamma; + break; default: return; } @@ -845,6 +854,15 @@ void UVCCameraData::addControl(uint32_t cid, const ControlInfo &v4l2Info, break; } + case V4L2_CID_GAMMA: + /* UVC gamma is in units of 1/100 gamma. */ + info = ControlInfo{ + { min / 100.0f }, + { max / 100.0f }, + { def / 100.0f } + }; + break; + default: info = v4l2Info; break; |