Commit bc809bfc authored by Nikhil Devshatwar's avatar Nikhil Devshatwar Committed by Mauro Carvalho Chehab

[media] media: ti-vpe: sc: Fix incorrect optimization

Current scaler library implementation of sc_set_hs_coeffs and
sc_set_vs_coeffs tries to return immediately if the calculated
coefficient index is already being used.

As the same scaler block is going to be used for all the VPE contexts,
even if the calculated index is same, the parameters have to be
reconfigured for each of the context.

Because of this, when multiple contexts use the same coefficients,
all other contexts would have zero scaling coefficients.
Fix this and also remove the unnecessary hs_index and vs_index fields.
Signed-off-by: default avatarNikhil Devshatwar <nikhil.nd@ti.com>
Signed-off-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 3d7e61f6
...@@ -84,9 +84,6 @@ void sc_set_hs_coeffs(struct sc_data *sc, void *addr, unsigned int src_w, ...@@ -84,9 +84,6 @@ void sc_set_hs_coeffs(struct sc_data *sc, void *addr, unsigned int src_w,
} }
} }
if (idx == sc->hs_index)
return;
cp = scaler_hs_coeffs[idx]; cp = scaler_hs_coeffs[idx];
for (i = 0; i < SC_NUM_PHASES * 2; i++) { for (i = 0; i < SC_NUM_PHASES * 2; i++) {
...@@ -101,8 +98,6 @@ void sc_set_hs_coeffs(struct sc_data *sc, void *addr, unsigned int src_w, ...@@ -101,8 +98,6 @@ void sc_set_hs_coeffs(struct sc_data *sc, void *addr, unsigned int src_w,
coeff_h += SC_NUM_TAPS_MEM_ALIGN - SC_H_NUM_TAPS; coeff_h += SC_NUM_TAPS_MEM_ALIGN - SC_H_NUM_TAPS;
} }
sc->hs_index = idx;
sc->load_coeff_h = true; sc->load_coeff_h = true;
} }
...@@ -130,9 +125,6 @@ void sc_set_vs_coeffs(struct sc_data *sc, void *addr, unsigned int src_h, ...@@ -130,9 +125,6 @@ void sc_set_vs_coeffs(struct sc_data *sc, void *addr, unsigned int src_h,
idx = VS_LT_9_16_SCALE + sixteenths - 8; idx = VS_LT_9_16_SCALE + sixteenths - 8;
} }
if (idx == sc->vs_index)
return;
cp = scaler_vs_coeffs[idx]; cp = scaler_vs_coeffs[idx];
for (i = 0; i < SC_NUM_PHASES * 2; i++) { for (i = 0; i < SC_NUM_PHASES * 2; i++) {
...@@ -146,7 +138,6 @@ void sc_set_vs_coeffs(struct sc_data *sc, void *addr, unsigned int src_h, ...@@ -146,7 +138,6 @@ void sc_set_vs_coeffs(struct sc_data *sc, void *addr, unsigned int src_h,
coeff_v += SC_NUM_TAPS_MEM_ALIGN - SC_V_NUM_TAPS; coeff_v += SC_NUM_TAPS_MEM_ALIGN - SC_V_NUM_TAPS;
} }
sc->vs_index = idx;
sc->load_coeff_v = true; sc->load_coeff_v = true;
} }
......
...@@ -189,9 +189,6 @@ struct sc_data { ...@@ -189,9 +189,6 @@ struct sc_data {
bool load_coeff_h; /* have new h SC coeffs */ bool load_coeff_h; /* have new h SC coeffs */
bool load_coeff_v; /* have new v SC coeffs */ bool load_coeff_v; /* have new v SC coeffs */
unsigned int hs_index; /* h SC coeffs selector */
unsigned int vs_index; /* v SC coeffs selector */
struct platform_device *pdev; struct platform_device *pdev;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment