[media] media: ti-vpe: sc: Fix incorrect optimization
authorNikhil Devshatwar <nikhil.nd@ti.com>
Fri, 18 Nov 2016 23:20:33 +0000 (21:20 -0200)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Tue, 22 Nov 2016 10:06:27 +0000 (08:06 -0200)
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: Nikhil Devshatwar <nikhil.nd@ti.com>
Signed-off-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/platform/ti-vpe/sc.c
drivers/media/platform/ti-vpe/sc.h

index f82d1c7f667f6184f7deee8ffbe75d8336916e58..02f3dae8ae422f1559c4bf3b843615945d224382 100644 (file)
@@ -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];
 
        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,
                coeff_h += SC_NUM_TAPS_MEM_ALIGN - SC_H_NUM_TAPS;
        }
 
-       sc->hs_index = idx;
-
        sc->load_coeff_h = true;
 }
 
@@ -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;
        }
 
-       if (idx == sc->vs_index)
-               return;
-
        cp = scaler_vs_coeffs[idx];
 
        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,
                coeff_v += SC_NUM_TAPS_MEM_ALIGN - SC_V_NUM_TAPS;
        }
 
-       sc->vs_index = idx;
        sc->load_coeff_v = true;
 }
 
index 60e411e05c308e27702e20fc87adcb032078f03a..de947db989902b11b59649be099654c107941faa 100644 (file)
@@ -189,9 +189,6 @@ struct sc_data {
        bool                    load_coeff_h;   /* have new h 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;
 };