diff --git a/drivers/media/platform/vivid/vivid-tpg.c b/drivers/media/platform/vivid/vivid-tpg.c index c04c45868793..cd40d4d7fdd6 100644 --- a/drivers/media/platform/vivid/vivid-tpg.c +++ b/drivers/media/platform/vivid/vivid-tpg.c @@ -1545,23 +1545,21 @@ struct tpg_draw_params { void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 *vbuf) { - bool is_tv = std; - bool is_60hz = is_tv && (std & V4L2_STD_525_60); + struct tpg_draw_params params; unsigned mv_hor_old = tpg->mv_hor_count % tpg->src_width; unsigned mv_hor_new = (tpg->mv_hor_count + tpg->mv_hor_step) % tpg->src_width; unsigned mv_vert_old = tpg->mv_vert_count % tpg->src_height; unsigned mv_vert_new = (tpg->mv_vert_count + tpg->mv_vert_step) % tpg->src_height; unsigned wss_width; unsigned f; - int hmax = (tpg->compose.height * tpg->perc_fill) / 100; int h; - unsigned twopixsize = tpg->twopixelsize[p]; + unsigned twopixsize; unsigned vdiv = tpg->vdownsampling[p]; - unsigned img_width = tpg_hdiv(tpg, p, tpg->compose.width); + unsigned img_width; unsigned line_offset; unsigned left_pillar_width = 0; - unsigned right_pillar_start = img_width; - unsigned stride = tpg->bytesperline[p]; + unsigned right_pillar_start; + unsigned stride; unsigned factor = V4L2_FIELD_HAS_T_OR_B(tpg->field) ? 2 : 1; u8 *orig_vbuf = vbuf; @@ -1573,6 +1571,17 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 tpg_recalc(tpg); + params.is_tv = std; + params.is_60hz = std & V4L2_STD_525_60; + params.twopixsize = tpg->twopixelsize[p]; + params.img_width = tpg_hdiv(tpg, p, tpg->compose.width); + params.stride = tpg->bytesperline[p]; + params.hmax = (tpg->compose.height * tpg->perc_fill) / 100; + + twopixsize = params.twopixsize; + img_width = params.img_width; + stride = params.stride; + mv_hor_old = tpg_hscale_div(tpg, p, mv_hor_old); mv_hor_new = tpg_hscale_div(tpg, p, mv_hor_new); wss_width = tpg->crop.left < tpg->src_width / 2 ? @@ -1589,6 +1598,7 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 left_pillar_width = tpg->crop.width; left_pillar_width = tpg_hscale_div(tpg, p, left_pillar_width); } + right_pillar_start = img_width; if (tpg->crop.left + tpg->crop.width > tpg->border.left + tpg->border.width) { right_pillar_start = tpg->border.left + tpg->border.width - tpg->crop.left; right_pillar_start = tpg_hscale_div(tpg, p, right_pillar_start); @@ -1596,7 +1606,7 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 right_pillar_start = img_width; } - f = tpg->field == (is_60hz ? V4L2_FIELD_TOP : V4L2_FIELD_BOTTOM); + f = tpg->field == (params.is_60hz ? V4L2_FIELD_TOP : V4L2_FIELD_BOTTOM); for (h = 0; h < tpg->compose.height; h++) { bool even; @@ -1640,8 +1650,8 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 buf_line /= vdiv; } - if (h >= hmax) { - if (hmax == tpg->compose.height) + if (h >= params.hmax) { + if (params.hmax == tpg->compose.height) continue; if (!tpg->perc_fill_blank) continue; @@ -1724,7 +1734,7 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 } if (tpg->field_alternate) { linestart_top = linestart_bottom = linestart_older; - } else if (is_60hz) { + } else if (params.is_60hz) { linestart_top = linestart_newer; linestart_bottom = linestart_older; } else { @@ -1785,7 +1795,7 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 buf_line /= vdiv; } - if (is_tv && !is_60hz && frame_line == 0 && wss_width) { + if (params.is_tv && !params.is_60hz && frame_line == 0 && wss_width) { /* * Replace the first half of the top line of a 50 Hz frame * with random data to simulate a WSS signal.