video: rockchip: rga3: fix the wrong check of resolution in RGA3 rotating

Change-Id: If135f3cbb80f30e0a7de18ce293b188318603fde
Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
This commit is contained in:
Yu Qiaowei
2024-01-29 15:32:09 +08:00
committed by Tao Huang
parent 14e857ea06
commit 0b97d73d8e
2 changed files with 46 additions and 18 deletions

View File

@@ -1755,10 +1755,50 @@ static int rga3_scale_check(const struct rga3_req *req)
u32 win0_saw, win0_sah, win0_daw, win0_dah;
u32 win1_saw, win1_sah, win1_daw, win1_dah;
win0_saw = req->win0.src_act_w;
win0_sah = req->win0.src_act_h;
win0_daw = req->win0.dst_act_w;
win0_dah = req->win0.dst_act_h;
if (req->rotate_mode & RGA3_ROT_BIT_ROT_90) {
if (req->win1.yrgb_addr != 0) {
/* ABB */
if (req->win0.yrgb_addr == req->wr.yrgb_addr) {
/* win0 do not need rotate, but net equal to wr */
win0_saw = req->win0.src_act_h;
win0_sah = req->win0.src_act_w;
win0_daw = req->win0.dst_act_h;
win0_dah = req->win0.dst_act_w;
win1_saw = req->win1.dst_act_w;
win1_sah = req->win1.dst_act_h;
win1_daw = req->win1.dst_act_h;
win1_dah = req->win1.dst_act_w;
} else {
win0_saw = req->win0.src_act_w;
win0_sah = req->win0.src_act_h;
win0_daw = req->win0.dst_act_w;
win0_dah = req->win0.dst_act_h;
win1_saw = req->win1.src_act_w;
win1_sah = req->win1.src_act_h;
win1_daw = req->win1.dst_act_w;
win1_dah = req->win1.dst_act_h;
}
} else {
win0_saw = req->win0.src_act_w;
win0_sah = req->win0.src_act_h;
win0_daw = req->win0.dst_act_h;
win0_dah = req->win0.dst_act_w;
}
} else {
win0_saw = req->win0.src_act_w;
win0_sah = req->win0.src_act_h;
win0_daw = req->win0.dst_act_w;
win0_dah = req->win0.dst_act_h;
if (req->win1.yrgb_addr != 0) {
win1_saw = req->win1.src_act_w;
win1_sah = req->win1.src_act_h;
win1_daw = req->win1.dst_act_w;
win1_dah = req->win1.dst_act_h;
}
}
if (((win0_saw >> 3) > win0_daw) || ((win0_sah >> 3) > win0_dah)) {
pr_info("win0 unsupported to scaling less than 1/8 times. src[%d, %d], dst[%d, %d]\n",
@@ -1772,11 +1812,6 @@ static int rga3_scale_check(const struct rga3_req *req)
}
if (req->win1.yrgb_addr != 0) {
win1_saw = req->win1.src_act_w;
win1_sah = req->win1.src_act_h;
win1_daw = req->win1.dst_act_w;
win1_dah = req->win1.dst_act_h;
if (((win1_saw >> 3) > win1_daw) || ((win1_sah >> 3) > win1_dah)) {
pr_info("win1 unsupported to scaling less than 1/8 times. src[%d, %d], dst[%d, %d]\n",
win1_saw, win1_sah, win1_daw, win1_dah);

View File

@@ -225,15 +225,8 @@ static bool rga_check_scale(const struct rga_hw_data *data,
sw = src0->act_w;
sh = src0->act_h;
if ((rga_base->sina == 65536 && rga_base->cosa == 0)
|| (rga_base->sina == -65536 && rga_base->cosa == 0)) {
dw = dst->act_h;
dh = dst->act_w;
} else {
dw = dst->act_w;
dh = dst->act_h;
}
dw = dst->act_w;
dh = dst->act_h;
if (sw > dw) {
if ((sw >> data->max_downscale_factor) > dw)