pvq: in float pvq case, mag must default to 1.0
authorTristan Matthews <tmatth@videolan.org>
Mon, 14 Nov 2016 22:56:42 +0000 (17:56 -0500)
committerTristan Matthews <tmatth@videolan.org>
Tue, 15 Nov 2016 17:46:41 +0000 (12:46 -0500)
Regression from c774e25ecd051357e95f850520c61ba82dca3180

Change with --enable-float-pvq:

        PSNR  PSNR-HVS  SSIM  FASTSSIM  CIEDE 2000
Average 0.36 -9.80     -3.93 -7.68      3.36

        PSNR Cb  PSNR Cr  APSNR Y  APSNR Cb  APSNR Cr  MS SSIM
Average 14.92    14.09    0.60     15.17     14.38    -8.12

src/pvq.c

index c0d833c..876dcb4 100644 (file)
--- a/src/pvq.c
+++ b/src/pvq.c
@@ -308,6 +308,12 @@ int od_qm_offset(int bs, int xydec)
     return xydec*OD_QM_STRIDE + OD_QM_OFFSET(bs);
 }
 
+#if defined(OD_FLOAT_PVQ)
+#define OD_DEFAULT_MAG 1.0
+#else
+#define OD_DEFAULT_MAG OD_QM_SCALE
+#endif
+
 /* Initialize the quantization matrix with the magnitude compensation applied.
    We need to compensate for the magnitude because lapping causes some basis
    functions to be smaller, so they would end up being quantized too finely
@@ -334,14 +340,14 @@ void od_init_qm(int16_t *x, int16_t *x_inv, const int *qm) {
           od_val32 mag;
           int16_t ytmp;
 #if OD_DEBLOCKING || OD_DISABLE_FILTER
-          mag = OD_QM_SCALE;
+          mag = OD_DEFAULT_MAG;
 #else
           /*FIXME: Do this rounding when generating OD_BASIS_MAG.*/
-          mag = (od_val32)floor(.5 + OD_QM_SCALE*OD_BASIS_MAG[xydec][bs][i]*
+          mag = (od_val32)floor(.5 + OD_DEFAULT_MAG*OD_BASIS_MAG[xydec][bs][i]*
            OD_BASIS_MAG[xydec][bs][j]);
 #endif
           if (i == 0 && j == 0) {
-            mag = OD_QM_SCALE;
+            mag = OD_DEFAULT_MAG;
           }
           else {
 #if defined(OD_FLOAT_PVQ)