Skip to content

Commit 1dd341f

Browse files
Putin Leerkhuangtao
authored andcommitted
video/rockchip: rga: Fixup dst offset calculation method
Change-Id: Ib849bcd2055fa0e11aa0b2caef3138fb2055f1d3 Signed-off-by: Putin Lee <putin.li@rock-chips.com>
1 parent dcbce81 commit 1dd341f

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

drivers/video/rockchip/rga/rga_reg_info.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -703,11 +703,26 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
703703

704704
*bRGA_DST_UV_MST = 0;
705705
*bRGA_YUV_OUT_CFG = 0;
706+
707+
if (msg->rotate_mode == 1) {
708+
if (msg->sina == 65536 && msg->cosa == 0) {
709+
/* rotate 90 */
710+
x_off = msg->dst.x_offset - msg->dst.act_h + 1;
711+
} else if (msg->sina == 0 && msg->cosa == -65536) {
712+
/* rotate 180 */
713+
x_off = msg->dst.x_offset - msg->dst.act_w + 1;
714+
y_off = msg->dst.y_offset - msg->dst.act_h + 1;
715+
} else if (msg->sina == -65536 && msg->cosa == 0) {
716+
/* totate 270 */
717+
y_off = msg->dst.y_offset - msg->dst.act_w + 1;
718+
}
719+
}
720+
706721
switch(msg->dst.format)
707722
{
708723
case RK_FORMAT_YCbCr_422_SP :
709724
*bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off) * pw);
710-
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr;
725+
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + (y_off * stride) + x_off;
711726
*bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 4) & 3) << 4) | (0 << 3) | (0 << 1) | 1;
712727
break;
713728
case RK_FORMAT_YCbCr_422_P :
@@ -716,7 +731,7 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
716731
break;
717732
case RK_FORMAT_YCbCr_420_SP :
718733
*bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off) * pw);
719-
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr;
734+
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + x_off;
720735
*bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 4) & 3) << 4) | (0 << 3) | (1 << 1) | 1;
721736
break;
722737
case RK_FORMAT_YCbCr_420_P :
@@ -725,7 +740,7 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
725740
break;
726741
case RK_FORMAT_YCrCb_422_SP :
727742
*bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off) * pw);
728-
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr;
743+
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + (y_off * stride) + x_off;
729744
*bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 4) & 3) << 4) | (1 << 3) | (0 << 1) | 1;
730745
break;
731746
case RK_FORMAT_YCrCb_422_P :
@@ -734,7 +749,7 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
734749
break;
735750
case RK_FORMAT_YCrCb_420_SP :
736751
*bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off) * pw);
737-
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr;
752+
*bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + x_off;
738753
*bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 4) & 3) << 4) | (1 << 3) | (1 << 1) | 1;
739754
break;
740755
case RK_FORMAT_YCrCb_420_P :

0 commit comments

Comments
 (0)