Commit 9ef6e4db authored by Dave Stevenson's avatar Dave Stevenson Committed by Hans Verkuil
Browse files

media: i2c: imx219: Fix 1920x1080 mode to use 1:1 pixel aspect ratio



Commit 0af46fbc ("media: i2c: imx219: Calculate crop rectangle
dynamically") meant that the 1920x1080 mode switched from using no
binning to using vertical binning but no horizontal binning, which
resulted in stretched pixels.

Until proper controls are available to independently select horizontal
and vertical binning, restore the original 1:1 pixel aspect ratio by
forcing binning to be uniform in both directions.

Cc: stable@vger.kernel.org
Fixes: 0af46fbc ("media: i2c: imx219: Calculate crop rectangle dynamically")
Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
[Add comment & reword commit message]
Signed-off-by: default avatarJai Luthra <jai.luthra@ideasonboard.com>
Reviewed-by: default avatarJacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarHans Verkuil <hverkuil+cisco@kernel.org>
parent c423487b
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -856,7 +856,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
	const struct imx219_mode *mode;
	struct v4l2_mbus_framefmt *format;
	struct v4l2_rect *crop;
	u8 bin_h, bin_v;
	u8 bin_h, bin_v, binning;
	u32 prev_line_len;

	format = v4l2_subdev_state_get_format(state, 0);
@@ -877,9 +877,12 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
	bin_h = min(IMX219_PIXEL_ARRAY_WIDTH / format->width, 2U);
	bin_v = min(IMX219_PIXEL_ARRAY_HEIGHT / format->height, 2U);

	/* Ensure bin_h and bin_v are same to avoid 1:2 or 2:1 stretching */
	binning = min(bin_h, bin_v);

	crop = v4l2_subdev_state_get_crop(state, 0);
	crop->width = format->width * bin_h;
	crop->height = format->height * bin_v;
	crop->width = format->width * binning;
	crop->height = format->height * binning;
	crop->left = (IMX219_NATIVE_WIDTH - crop->width) / 2;
	crop->top = (IMX219_NATIVE_HEIGHT - crop->height) / 2;