| Message ID | 20251125162851.2301793-27-stefan.klug@ideasonboard.com |
|---|---|
| State | Accepted |
| Headers | show |
| Series |
|
| Related | show |
Quoting Stefan Klug (2025-11-25 16:28:38) > Add a LensDewarpEnable control to enable or disable lens dewarping if it > is configured. Implement it inside the dw100 converter module. > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > All self contained in the module that handles it. Just what I like :-) Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > --- > > Changes in v3: > - Moved control handling into converter module > - Moved yaml handling into converter module > - Collected tag > > Changes in v2: > - Merged control definition and usage into one patch > - Improved control description > - Fixed actual handling of LensDewarpEnable control that got lost in a > previous rebase > --- > src/libcamera/control_ids_core.yaml | 7 +++++++ > src/libcamera/converter/converter_dw100.cpp | 12 ++++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/src/libcamera/control_ids_core.yaml b/src/libcamera/control_ids_core.yaml > index f781865859ac..3bcb475fd102 100644 > --- a/src/libcamera/control_ids_core.yaml > +++ b/src/libcamera/control_ids_core.yaml > @@ -1346,4 +1346,11 @@ controls: > reduces the WdrExposureValue until the amount of pixels that are close > to saturation is lower than this value. > > + - LensDewarpEnable: > + type: bool > + direction: inout > + description: | > + Enable or disable lens dewarping. This control is only available if lens > + dewarp parameters are configured in the tuning file. > + > ... > diff --git a/src/libcamera/converter/converter_dw100.cpp b/src/libcamera/converter/converter_dw100.cpp > index 03ffd939dc63..7adad1b502f0 100644 > --- a/src/libcamera/converter/converter_dw100.cpp > +++ b/src/libcamera/converter/converter_dw100.cpp > @@ -343,6 +343,9 @@ void ConverterDW100Module::updateControlInfos(const Stream *stream, ControlInfoM > controls[&controls::ScalerCrop] = ControlInfo(Rectangle(sensorCrop_.x, sensorCrop_.y, 1, 1), > sensorCrop_, sensorCrop_); > > + if (dewarpParams_.has_value()) > + controls[&controls::LensDewarpEnable] = ControlInfo(false, true, true); > + > if (!converter_.supportsRequests()) > LOG(Converter, Warning) > << "dw100 kernel driver has no requests support." > @@ -366,6 +369,12 @@ void ConverterDW100Module::setControls(const Stream *stream, const ControlList & > auto &info = vertexMaps_[stream]; > auto &vertexMap = info.map; > > + const auto &lensDewarpEnable = controls.get(controls::LensDewarpEnable); > + if (lensDewarpEnable) { > + vertexMap.setLensDewarpEnable(*lensDewarpEnable); > + info.update = true; > + } > + > const auto &crop = controls.get(controls::ScalerCrop); > if (crop) { > vertexMap.setScalerCrop(*crop); > @@ -394,6 +403,9 @@ void ConverterDW100Module::populateMetadata(const Stream *stream, ControlList &m > auto &vertexMap = vertexMaps_[stream].map; > > meta.set(controls::ScalerCrop, vertexMap.effectiveScalerCrop()); > + > + if (dewarpParams_.has_value()) > + meta.set(controls::LensDewarpEnable, vertexMap.lensDewarpEnable()); > } > > /** > -- > 2.51.0 >
diff --git a/src/libcamera/control_ids_core.yaml b/src/libcamera/control_ids_core.yaml index f781865859ac..3bcb475fd102 100644 --- a/src/libcamera/control_ids_core.yaml +++ b/src/libcamera/control_ids_core.yaml @@ -1346,4 +1346,11 @@ controls: reduces the WdrExposureValue until the amount of pixels that are close to saturation is lower than this value. + - LensDewarpEnable: + type: bool + direction: inout + description: | + Enable or disable lens dewarping. This control is only available if lens + dewarp parameters are configured in the tuning file. + ... diff --git a/src/libcamera/converter/converter_dw100.cpp b/src/libcamera/converter/converter_dw100.cpp index 03ffd939dc63..7adad1b502f0 100644 --- a/src/libcamera/converter/converter_dw100.cpp +++ b/src/libcamera/converter/converter_dw100.cpp @@ -343,6 +343,9 @@ void ConverterDW100Module::updateControlInfos(const Stream *stream, ControlInfoM controls[&controls::ScalerCrop] = ControlInfo(Rectangle(sensorCrop_.x, sensorCrop_.y, 1, 1), sensorCrop_, sensorCrop_); + if (dewarpParams_.has_value()) + controls[&controls::LensDewarpEnable] = ControlInfo(false, true, true); + if (!converter_.supportsRequests()) LOG(Converter, Warning) << "dw100 kernel driver has no requests support." @@ -366,6 +369,12 @@ void ConverterDW100Module::setControls(const Stream *stream, const ControlList & auto &info = vertexMaps_[stream]; auto &vertexMap = info.map; + const auto &lensDewarpEnable = controls.get(controls::LensDewarpEnable); + if (lensDewarpEnable) { + vertexMap.setLensDewarpEnable(*lensDewarpEnable); + info.update = true; + } + const auto &crop = controls.get(controls::ScalerCrop); if (crop) { vertexMap.setScalerCrop(*crop); @@ -394,6 +403,9 @@ void ConverterDW100Module::populateMetadata(const Stream *stream, ControlList &m auto &vertexMap = vertexMaps_[stream].map; meta.set(controls::ScalerCrop, vertexMap.effectiveScalerCrop()); + + if (dewarpParams_.has_value()) + meta.set(controls::LensDewarpEnable, vertexMap.lensDewarpEnable()); } /**