OMAPDSS: DISPC: handle 0 out_width/out_height in ovl_setup()
Overlay out_width/height are set to 0 when scaling is not used by the users of omapdss. Currently ovl_setup() expects the caller of ovl_setup() to convert those zero values to width or height. This patch makes ovl_setup() accept zero values for out_width/height, making calling ovl_setup() a bit simpler as the overlay_info can be just passed to this function without modifications. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
1cb0017813
commit
cf0736681e
|
@ -1781,6 +1781,7 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
|
|||
s32 pix_inc;
|
||||
u16 frame_height = oi->height;
|
||||
unsigned int field_offset = 0;
|
||||
u16 outw, outh;
|
||||
|
||||
DSSDBG("dispc_ovl_setup %d, pa %x, pa_uv %x, sw %d, %d,%d, %dx%d -> "
|
||||
"%dx%d, cmode %x, rot %d, mir %d, ilace %d chan %d repl %d "
|
||||
|
@ -1792,25 +1793,28 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
|
|||
if (oi->paddr == 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ilace && oi->height == oi->out_height)
|
||||
outw = oi->out_width == 0 ? oi->width : oi->out_width;
|
||||
outh = oi->out_height == 0 ? oi->height : oi->out_height;
|
||||
|
||||
if (ilace && oi->height == outh)
|
||||
fieldmode = 1;
|
||||
|
||||
if (ilace) {
|
||||
if (fieldmode)
|
||||
oi->height /= 2;
|
||||
oi->pos_y /= 2;
|
||||
oi->out_height /= 2;
|
||||
outh /= 2;
|
||||
|
||||
DSSDBG("adjusting for ilace: height %d, pos_y %d, "
|
||||
"out_height %d\n",
|
||||
oi->height, oi->pos_y, oi->out_height);
|
||||
oi->height, oi->pos_y, outh);
|
||||
}
|
||||
|
||||
if (!dss_feat_color_mode_supported(plane, oi->color_mode))
|
||||
return -EINVAL;
|
||||
|
||||
r = dispc_ovl_calc_scaling(plane, channel, oi->width, oi->height,
|
||||
oi->out_width, oi->out_height, oi->color_mode,
|
||||
outw, outh, oi->color_mode,
|
||||
&five_taps);
|
||||
if (r)
|
||||
return r;
|
||||
|
@ -1828,10 +1832,10 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
|
|||
* so the integer part must be added to the base address of the
|
||||
* bottom field.
|
||||
*/
|
||||
if (!oi->height || oi->height == oi->out_height)
|
||||
if (!oi->height || oi->height == outh)
|
||||
field_offset = 0;
|
||||
else
|
||||
field_offset = oi->height / oi->out_height / 2;
|
||||
field_offset = oi->height / outh / 2;
|
||||
}
|
||||
|
||||
/* Fields are independent but interleaved in memory. */
|
||||
|
@ -1867,7 +1871,7 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
|
|||
dispc_ovl_set_pix_inc(plane, pix_inc);
|
||||
|
||||
DSSDBG("%d,%d %dx%d -> %dx%d\n", oi->pos_x, oi->pos_y, oi->width,
|
||||
oi->height, oi->out_width, oi->out_height);
|
||||
oi->height, outw, outh);
|
||||
|
||||
dispc_ovl_set_pos(plane, oi->pos_x, oi->pos_y);
|
||||
|
||||
|
@ -1875,10 +1879,10 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
|
|||
|
||||
if (ovl->caps & OMAP_DSS_OVL_CAP_SCALE) {
|
||||
dispc_ovl_set_scaling(plane, oi->width, oi->height,
|
||||
oi->out_width, oi->out_height,
|
||||
outw, outh,
|
||||
ilace, five_taps, fieldmode,
|
||||
oi->color_mode, oi->rotation);
|
||||
dispc_ovl_set_vid_size(plane, oi->out_width, oi->out_height);
|
||||
dispc_ovl_set_vid_size(plane, outw, outh);
|
||||
dispc_ovl_set_vid_color_conv(plane, cconv);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue