summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
diff options
context:
space:
mode:
authorDavid Plowman <david.plowman@raspberrypi.com>2023-01-12 11:06:33 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2023-01-30 16:30:43 +0000
commit4133dbe2b3c2a0f06b4382c66a36d7adf9c72a57 (patch)
tree75ced02fdae12312530bc727cf25a545fde97a7c /src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
parentbb35ac92e4e0f8304b81c659f434e8bf4d10ddec (diff)
pipeline: raspberrypi: Improve the values reported in the ScalerCrop control
Previously the x,y offsets in the min/max ScalerCrop control values were zero. Here we make them the same as the sensor's analogue crop offset which is I think less misleading. With this change, it also seems reasonable to advertise the default scaler crop value to be the true default that you will get. This makes it possible for applications to see what that value will be without having to start the camera and wait for frames. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/libcamera/pipeline/raspberrypi/raspberrypi.cpp')
-rw-r--r--src/libcamera/pipeline/raspberrypi/raspberrypi.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index d8232ff8..9229d3cb 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -848,6 +848,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
/* Adjust aspect ratio by providing crops on the input image. */
Size size = unicamFormat.size.boundedToAspectRatio(maxSize);
Rectangle crop = size.centeredTo(Rectangle(unicamFormat.size).center());
+ Rectangle defaultCrop = crop;
data->ispCrop_ = crop;
data->isp_[Isp::Input].dev()->setSelection(V4L2_SEL_TGT_CROP, &crop);
@@ -901,9 +902,9 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
ctrlMap.emplace(c.first, c.second);
/* Add the ScalerCrop control limits based on the current mode. */
- Rectangle ispMinCrop(data->ispMinCropSize_);
- ispMinCrop.scaleBy(data->sensorInfo_.analogCrop.size(), data->sensorInfo_.outputSize);
- ctrlMap[&controls::ScalerCrop] = ControlInfo(ispMinCrop, Rectangle(data->sensorInfo_.analogCrop.size()));
+ Rectangle ispMinCrop = data->scaleIspCrop(Rectangle(data->ispMinCropSize_));
+ defaultCrop = data->scaleIspCrop(defaultCrop);
+ ctrlMap[&controls::ScalerCrop] = ControlInfo(ispMinCrop, data->sensorInfo_.analogCrop, defaultCrop);
data->controlInfo_ = ControlInfoMap(std::move(ctrlMap), result.controlInfo.idmap());