drm/imx: ipuv3-plane: make sure x/y offsets are even in case of chroma subsampling
Odd x/y offsets are not allowed for horizontally/vertically chroma subsampled planar YUV formats. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Acked-by: Liu Ying <gnuiyl@gmail.com>
This commit is contained in:
parent
e73aca5184
commit
5fb57ab328
@ -259,6 +259,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
|
||||
struct drm_framebuffer *fb = state->fb;
|
||||
struct drm_framebuffer *old_fb = old_state->fb;
|
||||
unsigned long eba, ubo, vbo, old_ubo, old_vbo;
|
||||
int hsub, vsub;
|
||||
|
||||
/* Ok to disable */
|
||||
if (!fb)
|
||||
@ -372,6 +373,16 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
|
||||
|
||||
if (old_fb && old_fb->pitches[1] != fb->pitches[1])
|
||||
crtc_state->mode_changed = true;
|
||||
|
||||
/*
|
||||
* The x/y offsets must be even in case of horizontal/vertical
|
||||
* chroma subsampling.
|
||||
*/
|
||||
hsub = drm_format_horz_chroma_subsampling(fb->pixel_format);
|
||||
vsub = drm_format_vert_chroma_subsampling(fb->pixel_format);
|
||||
if (((state->src_x >> 16) & (hsub - 1)) ||
|
||||
((state->src_y >> 16) & (vsub - 1)))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user