Commit 955be60e authored by Steve Longerbeam's avatar Steve Longerbeam Committed by Greg Kroah-Hartman

gpu: ipu-v3: image-convert: Fix input bytesperline width/height align

[ Upstream commit ff391ecd ]

The output width and height alignment values were being used in the
input bytesperline calculation. Fix by separating local vars w_align
and h_align into w_align_in, h_align_in, w_align_out, and h_align_out.

Fixes: d966e23d ("gpu: ipu-v3: image-convert: fix bytesperline
adjustment")
Signed-off-by: default avatarSteve Longerbeam <slongerbeam@gmail.com>
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 658031ea
...@@ -1885,7 +1885,8 @@ void ipu_image_convert_adjust(struct ipu_image *in, struct ipu_image *out, ...@@ -1885,7 +1885,8 @@ void ipu_image_convert_adjust(struct ipu_image *in, struct ipu_image *out,
enum ipu_rotate_mode rot_mode) enum ipu_rotate_mode rot_mode)
{ {
const struct ipu_image_pixfmt *infmt, *outfmt; const struct ipu_image_pixfmt *infmt, *outfmt;
u32 w_align, h_align; u32 w_align_out, h_align_out;
u32 w_align_in, h_align_in;
infmt = get_format(in->pix.pixelformat); infmt = get_format(in->pix.pixelformat);
outfmt = get_format(out->pix.pixelformat); outfmt = get_format(out->pix.pixelformat);
...@@ -1917,22 +1918,31 @@ void ipu_image_convert_adjust(struct ipu_image *in, struct ipu_image *out, ...@@ -1917,22 +1918,31 @@ void ipu_image_convert_adjust(struct ipu_image *in, struct ipu_image *out,
} }
/* align input width/height */ /* align input width/height */
w_align = ilog2(tile_width_align(IMAGE_CONVERT_IN, infmt, rot_mode)); w_align_in = ilog2(tile_width_align(IMAGE_CONVERT_IN, infmt,
h_align = ilog2(tile_height_align(IMAGE_CONVERT_IN, infmt, rot_mode)); rot_mode));
in->pix.width = clamp_align(in->pix.width, MIN_W, MAX_W, w_align); h_align_in = ilog2(tile_height_align(IMAGE_CONVERT_IN, infmt,
in->pix.height = clamp_align(in->pix.height, MIN_H, MAX_H, h_align); rot_mode));
in->pix.width = clamp_align(in->pix.width, MIN_W, MAX_W,
w_align_in);
in->pix.height = clamp_align(in->pix.height, MIN_H, MAX_H,
h_align_in);
/* align output width/height */ /* align output width/height */
w_align = ilog2(tile_width_align(IMAGE_CONVERT_OUT, outfmt, rot_mode)); w_align_out = ilog2(tile_width_align(IMAGE_CONVERT_OUT, outfmt,
h_align = ilog2(tile_height_align(IMAGE_CONVERT_OUT, outfmt, rot_mode)); rot_mode));
out->pix.width = clamp_align(out->pix.width, MIN_W, MAX_W, w_align); h_align_out = ilog2(tile_height_align(IMAGE_CONVERT_OUT, outfmt,
out->pix.height = clamp_align(out->pix.height, MIN_H, MAX_H, h_align); rot_mode));
out->pix.width = clamp_align(out->pix.width, MIN_W, MAX_W,
w_align_out);
out->pix.height = clamp_align(out->pix.height, MIN_H, MAX_H,
h_align_out);
/* set input/output strides and image sizes */ /* set input/output strides and image sizes */
in->pix.bytesperline = infmt->planar ? in->pix.bytesperline = infmt->planar ?
clamp_align(in->pix.width, 2 << w_align, MAX_W, w_align) : clamp_align(in->pix.width, 2 << w_align_in, MAX_W,
w_align_in) :
clamp_align((in->pix.width * infmt->bpp) >> 3, clamp_align((in->pix.width * infmt->bpp) >> 3,
2 << w_align, MAX_W, w_align); 2 << w_align_in, MAX_W, w_align_in);
in->pix.sizeimage = infmt->planar ? in->pix.sizeimage = infmt->planar ?
(in->pix.height * in->pix.bytesperline * infmt->bpp) >> 3 : (in->pix.height * in->pix.bytesperline * infmt->bpp) >> 3 :
in->pix.height * in->pix.bytesperline; in->pix.height * in->pix.bytesperline;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment