drm/rockchip: vop: correct the source size of uv scale factor setting
authorMark Yao <mark.yao@rock-chips.com>
Mon, 6 Jun 2016 07:58:46 +0000 (15:58 +0800)
committerMark Yao <mark.yao@rock-chips.com>
Tue, 19 Jul 2016 01:42:20 +0000 (09:42 +0800)
When the input color format is YUV, we need to do some external scale
for CBCR. Like,
 * In YUV420 data format:
     cbcr_xscale = dst_w / src_w * 2;
     cbcr_yscale = dst_h / src_h * 2;
 * In YUV422 data format:
     cbcr_xscale = dst_w / src_w * 2;
     cbcr_yscale = dst_h / src_h;
 * In YUV444 data format
     cbcr_xscale = dst_w / src_w;
     cbcr_yscale = dst_h / src_h;

Signed-off-by: Yakir Yang <ykk@rock-chips.com>
drivers/gpu/drm/rockchip/rockchip_drm_vop.c

index e01c43560669988c7ea8f05a22df0c4ae56033d1..aad105ba735fb4b5121ffcbea203fb1b008c9bcb 100644 (file)
@@ -328,9 +328,9 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win,
                            scl_cal_scale2(src_h, dst_h));
                if (is_yuv) {
                        VOP_SCL_SET(vop, win, scale_cbcr_x,
-                                   scl_cal_scale2(src_w, dst_w));
+                                   scl_cal_scale2(cbcr_src_w, dst_w));
                        VOP_SCL_SET(vop, win, scale_cbcr_y,
-                                   scl_cal_scale2(src_h, dst_h));
+                                   scl_cal_scale2(cbcr_src_h, dst_h));
                }
                return;
        }