[PATCH v1] media: platform: mtk-mdp3: Fix mdp hyfbc get plane size
From: roy-cw.yeh <hidden>
Date: 2021-11-09 07:14:53
Also in:
linux-arm-kernel
Subsystem:
media input infrastructure (v4l/dvb), the rest · Maintainers:
Mauro Carvalho Chehab, Linus Torvalds
From: "Roy-CW.Yeh" <redacted> mdp_fmt_get_hyfbc_plane_size should return size depends on different plane rather than one same size (buffer size) Signed-off-by: Roy-CW.Yeh <redacted> --- drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c b/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c
index ac5d0f06f39e..aabc1c2a9166 100644
--- a/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c
+++ b/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c@@ -151,7 +151,8 @@ int mdp_enum_fmt_mplane(struct mdp_dev *mdp, struct v4l2_fmtdesc *f) return 0; } -static u32 mdp_fmt_get_hyfbc_plane_size(u32 width, u32 height, u32 color) +static u32 mdp_fmt_get_hyfbc_plane_size(u32 width, + u32 height, u32 color, unsigned int plane) { u32 y_data_size = 0; u32 c_data_size = 0;
@@ -176,7 +177,10 @@ static u32 mdp_fmt_get_hyfbc_plane_size(u32 width, u32 height, u32 color) c_data_ofst = ((y_data_ofst + y_data_size + c_header_size + 4095) >> 12) << 12; // align 4k c_header_ofst = c_data_ofst - c_header_size; - return (c_data_ofst + c_data_size); + if (plane == 0) + return c_header_ofst; + else + return (c_data_ofst + c_data_size); } static u32 mdp_fmt_get_afbc_plane_size(u32 width, u32 height, u32 color)
@@ -256,7 +260,7 @@ const struct mdp_format *mdp_try_fmt_mplane(struct mdp_dev *mdp, if (MDP_COLOR_IS_HYFBC_COMPRESS(fmt->mdp_color)) { si = mdp_fmt_get_hyfbc_plane_size(pix_mp->width, - pix_mp->height, fmt->mdp_color); + pix_mp->height, fmt->mdp_color, i); } else if (MDP_COLOR_IS_COMPRESS(fmt->mdp_color)) { si = mdp_fmt_get_afbc_plane_size(pix_mp->width, pix_mp->height, fmt->mdp_color);
@@ -529,7 +533,7 @@ static void mdp_prepare_buffer(struct img_image_buffer *b, b->format.plane_fmt[i].size = mdp_fmt_get_hyfbc_plane_size(pix_mp->width, pix_mp->height, - b->format.colorformat); + b->format.colorformat, i); } else if (MDP_COLOR_IS_COMPRESS(b->format.colorformat)) { b->format.plane_fmt[i].size = mdp_fmt_get_afbc_plane_size(pix_mp->width,
@@ -562,7 +566,7 @@ static void mdp_prepare_buffer(struct img_image_buffer *b, b->format.plane_fmt[i].size = mdp_fmt_get_hyfbc_plane_size(pix_mp->width, pix_mp->height, - b->format.colorformat); + b->format.colorformat, i); } else if (MDP_COLOR_IS_COMPRESS(b->format.colorformat)) { b->format.plane_fmt[i].size = mdp_fmt_get_afbc_plane_size(pix_mp->width,
--
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek