Browse code

bink: permute Bink version 'b' quant matrices by inverse scan order

This fixes visual glitches in Bink version 'b' files, as the quantization
tables were not being permuted.

Signed-off-by: Mans Rullgard <mans@mansr.com>
(cherry picked from commit 231539217431c32d4f22a16ee2834e24f54611f4)

Peter Ross authored on 2011/02/13 18:36:29
Showing 1 changed files
... ...
@@ -1210,6 +1210,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
1210 1210
  */
1211 1211
 static av_cold void binkb_calc_quant()
1212 1212
 {
1213
+    uint8_t inv_bink_scan[64];
1213 1214
     double s[64];
1214 1215
     int i, j;
1215 1216
 
... ...
@@ -1228,17 +1229,21 @@ static av_cold void binkb_calc_quant()
1228 1228
         }
1229 1229
     }
1230 1230
 
1231
+    for (i = 0; i < 64; i++)
1232
+        inv_bink_scan[bink_scan[i]] = i;
1233
+
1231 1234
     for (j = 0; j < 16; j++) {
1232 1235
         for (i = 0; i < 64; i++) {
1236
+            int k = inv_bink_scan[i];
1233 1237
             if (s[i] == 1.0) {
1234
-                binkb_intra_quant[j][i] = (1L << 12) * binkb_intra_seed[i] *
1238
+                binkb_intra_quant[j][k] = (1L << 12) * binkb_intra_seed[i] *
1235 1239
                                           binkb_num[j]/binkb_den[j];
1236
-                binkb_inter_quant[j][i] = (1L << 12) * binkb_inter_seed[i] *
1240
+                binkb_inter_quant[j][k] = (1L << 12) * binkb_inter_seed[i] *
1237 1241
                                           binkb_num[j]/binkb_den[j];
1238 1242
             } else {
1239
-                binkb_intra_quant[j][i] = (1L << 12) * binkb_intra_seed[i] * s[i] *
1243
+                binkb_intra_quant[j][k] = (1L << 12) * binkb_intra_seed[i] * s[i] *
1240 1244
                                           binkb_num[j]/(double)binkb_den[j];
1241
-                binkb_inter_quant[j][i] = (1L << 12) * binkb_inter_seed[i] * s[i] *
1245
+                binkb_inter_quant[j][k] = (1L << 12) * binkb_inter_seed[i] * s[i] *
1242 1246
                                           binkb_num[j]/(double)binkb_den[j];
1243 1247
             }
1244 1248
         }