[PATCH v1] media: platform: mtk-mdp3: Fix mdp hyfbc get plane size
roy-cw.yeh
roy-cw.yeh at mediatek.com
Mon Nov 8 23:13:07 PST 2021
From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>
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 <roy-cw.yeh at mediatek.com>
---
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
More information about the linux-arm-kernel
mailing list