OMAPDSS: DISPC: add check for scaling limits
On OMAP3/AM43xx some scaling factors cause underflows/synclosts. After studying this, I found that sometimes the driver uses three-tap scaling with downscaling factor smaller than x0.5. This causes issues, as x0.5 is the limit for three-tap scaling. The driver has FEAT_PARAM_DOWNSCALE parameter, but that seems to be for five-tap scaling, which allows scaling down to x0.25. This patch adds checks for both horizontal and vertical scaling. For horizontal the HW always uses 5 taps, so the limit is x0.25. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
f5a734827b
commit
ab6b2582b8
1 changed files with 15 additions and 0 deletions
|
@ -2326,6 +2326,21 @@ again:
|
||||||
error = (error || in_width > maxsinglelinewidth * 2 ||
|
error = (error || in_width > maxsinglelinewidth * 2 ||
|
||||||
(in_width > maxsinglelinewidth && *five_taps) ||
|
(in_width > maxsinglelinewidth && *five_taps) ||
|
||||||
!*core_clk || *core_clk > dispc_core_clk_rate());
|
!*core_clk || *core_clk > dispc_core_clk_rate());
|
||||||
|
|
||||||
|
if (!error) {
|
||||||
|
/* verify that we're inside the limits of scaler */
|
||||||
|
if (in_width / 4 > out_width)
|
||||||
|
error = 1;
|
||||||
|
|
||||||
|
if (*five_taps) {
|
||||||
|
if (in_height / 4 > out_height)
|
||||||
|
error = 1;
|
||||||
|
} else {
|
||||||
|
if (in_height / 2 > out_height)
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
if (*decim_x == *decim_y) {
|
if (*decim_x == *decim_y) {
|
||||||
*decim_x = min_factor;
|
*decim_x = min_factor;
|
||||||
|
|
Loading…
Add table
Reference in a new issue