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)
... | ... |
@@ -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 |
} |