diff options
| author | Steve Longerbeam <slongerbeam@gmail.com> | 2019-06-11 21:16:55 -0400 |
|---|---|---|
| committer | Philipp Zabel <p.zabel@pengutronix.de> | 2019-06-14 08:06:16 -0400 |
| commit | ff391ecd65a1b8324c49046c3db98d9c8ab29af9 (patch) | |
| tree | 1f2640ab082ada50ab75644af44c3f93fb0bd31e | |
| parent | d1fdb6d8f6a4109a4263176c84b899076a5f8008 (diff) | |
gpu: ipu-v3: image-convert: Fix input bytesperline width/height align
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: d966e23d61a2c ("gpu: ipu-v3: image-convert: fix bytesperline
adjustment")
Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
| -rw-r--r-- | drivers/gpu/ipu-v3/ipu-image-convert.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c index 36e88434513a..36eb4c77ad91 100644 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c | |||
| @@ -1876,7 +1876,8 @@ void ipu_image_convert_adjust(struct ipu_image *in, struct ipu_image *out, | |||
| 1876 | enum ipu_rotate_mode rot_mode) | 1876 | enum ipu_rotate_mode rot_mode) |
| 1877 | { | 1877 | { |
| 1878 | const struct ipu_image_pixfmt *infmt, *outfmt; | 1878 | const struct ipu_image_pixfmt *infmt, *outfmt; |
| 1879 | u32 w_align, h_align; | 1879 | u32 w_align_out, h_align_out; |
| 1880 | u32 w_align_in, h_align_in; | ||
| 1880 | 1881 | ||
| 1881 | infmt = get_format(in->pix.pixelformat); | 1882 | infmt = get_format(in->pix.pixelformat); |
| 1882 | outfmt = get_format(out->pix.pixelformat); | 1883 | outfmt = get_format(out->pix.pixelformat); |
| @@ -1908,22 +1909,31 @@ void ipu_image_convert_adjust(struct ipu_image *in, struct ipu_image *out, | |||
| 1908 | } | 1909 | } |
| 1909 | 1910 | ||
| 1910 | /* align input width/height */ | 1911 | /* align input width/height */ |
| 1911 | w_align = ilog2(tile_width_align(IMAGE_CONVERT_IN, infmt, rot_mode)); | 1912 | w_align_in = ilog2(tile_width_align(IMAGE_CONVERT_IN, infmt, |
| 1912 | h_align = ilog2(tile_height_align(IMAGE_CONVERT_IN, infmt, rot_mode)); | 1913 | rot_mode)); |
| 1913 | in->pix.width = clamp_align(in->pix.width, MIN_W, MAX_W, w_align); | 1914 | h_align_in = ilog2(tile_height_align(IMAGE_CONVERT_IN, infmt, |
| 1914 | in->pix.height = clamp_align(in->pix.height, MIN_H, MAX_H, h_align); | 1915 | rot_mode)); |
| 1916 | in->pix.width = clamp_align(in->pix.width, MIN_W, MAX_W, | ||
| 1917 | w_align_in); | ||
| 1918 | in->pix.height = clamp_align(in->pix.height, MIN_H, MAX_H, | ||
| 1919 | h_align_in); | ||
| 1915 | 1920 | ||
| 1916 | /* align output width/height */ | 1921 | /* align output width/height */ |
| 1917 | w_align = ilog2(tile_width_align(IMAGE_CONVERT_OUT, outfmt, rot_mode)); | 1922 | w_align_out = ilog2(tile_width_align(IMAGE_CONVERT_OUT, outfmt, |
| 1918 | h_align = ilog2(tile_height_align(IMAGE_CONVERT_OUT, outfmt, rot_mode)); | 1923 | rot_mode)); |
| 1919 | out->pix.width = clamp_align(out->pix.width, MIN_W, MAX_W, w_align); | 1924 | h_align_out = ilog2(tile_height_align(IMAGE_CONVERT_OUT, outfmt, |
| 1920 | out->pix.height = clamp_align(out->pix.height, MIN_H, MAX_H, h_align); | 1925 | rot_mode)); |
| 1926 | out->pix.width = clamp_align(out->pix.width, MIN_W, MAX_W, | ||
| 1927 | w_align_out); | ||
| 1928 | out->pix.height = clamp_align(out->pix.height, MIN_H, MAX_H, | ||
| 1929 | h_align_out); | ||
| 1921 | 1930 | ||
| 1922 | /* set input/output strides and image sizes */ | 1931 | /* set input/output strides and image sizes */ |
| 1923 | in->pix.bytesperline = infmt->planar ? | 1932 | in->pix.bytesperline = infmt->planar ? |
| 1924 | clamp_align(in->pix.width, 2 << w_align, MAX_W, w_align) : | 1933 | clamp_align(in->pix.width, 2 << w_align_in, MAX_W, |
| 1934 | w_align_in) : | ||
| 1925 | clamp_align((in->pix.width * infmt->bpp) >> 3, | 1935 | clamp_align((in->pix.width * infmt->bpp) >> 3, |
| 1926 | 2 << w_align, MAX_W, w_align); | 1936 | 2 << w_align_in, MAX_W, w_align_in); |
| 1927 | in->pix.sizeimage = infmt->planar ? | 1937 | in->pix.sizeimage = infmt->planar ? |
| 1928 | (in->pix.height * in->pix.bytesperline * infmt->bpp) >> 3 : | 1938 | (in->pix.height * in->pix.bytesperline * infmt->bpp) >> 3 : |
| 1929 | in->pix.height * in->pix.bytesperline; | 1939 | in->pix.height * in->pix.bytesperline; |
