summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-08-25 19:52:12 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-08-26 14:27:37 +0300
commit3bce337fbe5caeab6064e1969fb2fd0c537d57db (patch)
tree25ee62eb08da00b78d6d7a07317d6730707420eb
parentc671cbe622469185311fafce4b32b6b995a04445 (diff)
libcamera: pipeline: vimc: Fix configuration validation
The sensor aligns the width and height to multiples of two pixels, and the scaler has a x3 hardcoded factor. The output size must thus be aligned to 6 pixels, not 3. Fix it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/libcamera/pipeline/vimc/vimc.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 7e237650..d192670b 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -149,11 +149,15 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()
/* Clamp the size based on the device limits. */
const Size size = cfg.size;
- /* The scaler hardcodes a x3 scale-up ratio. */
+ /*
+ * The scaler hardcodes a x3 scale-up ratio, and the sensor output size
+ * is aligned to two pixels in both directions. The output width and
+ * height thus have to be multiples of 6.
+ */
cfg.size.width = std::max(48U, std::min(4096U, cfg.size.width));
cfg.size.height = std::max(48U, std::min(2160U, cfg.size.height));
- cfg.size.width -= cfg.size.width % 3;
- cfg.size.height -= cfg.size.height % 3;
+ cfg.size.width -= cfg.size.width % 6;
+ cfg.size.height -= cfg.size.height % 6;
if (cfg.size != size) {
LOG(VIMC, Debug)