@@ -125,6 +125,11 @@ public:
*/
MediaPipeline pipe_;
+ struct DewarpParms {
+ Matrix<double, 3, 3> cm;
+ std::vector<double> coeffs;
+ };
+ std::optional<DewarpParms> dewarpParams_;
bool canUseDewarper_;
bool usesDewarper_;
@@ -462,6 +467,27 @@ int RkISP1CameraData::loadTuningFile(const std::string &path)
const auto ¶ms = algo["Dewarp"];
canUseDewarper_ = true;
+ Matrix<double, 3, 3> m;
+ DewarpParms dp;
+ if (params["cm"]) {
+ const auto &cm = params["cm"].get<Matrix<double, 3, 3>>();
+ if (!cm) {
+ LOG(RkISP1, Error) << "Dewarp parameters are missing 'cm' value";
+ return -EINVAL;
+ }
+ dp.cm = *cm;
+ }
+
+ if (params["coefficients"]) {
+ const auto &coeffs = params["coefficients"].getList<double>();
+ if (!coeffs) {
+ LOG(RkISP1, Error) << "Dewarp parameters 'coefficients' value is not a list";
+ return -EINVAL;
+ }
+ dp.coeffs = *coeffs;
+ }
+
+ dewarpParams_ = dp;
}
}
@@ -1066,6 +1092,10 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
auto &vertexMap = dewarper_->vertexMap(cfg.stream());
vertexMap.setSensorCrop(sensorCrop);
vertexMap.setTransform(config->combinedTransform());
+ if (data->dewarpParams_) {
+ vertexMap.setDewarpParams(data->dewarpParams_->cm,
+ data->dewarpParams_->coeffs);
+ }
data->properties_.set(properties::ScalerCropMaximum, sensorCrop);
/*
Load the dewarp parameters from the tuning file. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+)