diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c index 461be0918a..894e7679be 100644 --- a/libavcodec/vp3.c +++ b/libavcodec/vp3.c @@ -862,7 +862,7 @@ static void init_dequantizer(Vp3DecodeContext *s) * the dequantization phase */ for (i = 1; i < 64; i++) { - j = quant_index[i]; + j = zigzag_index[i]; s->intra_y_dequant[j] = vp31_intra_y_dequant[i] * quality_scale / 100; if (s->intra_y_dequant[j] < MIN_DEQUANT_VAL) @@ -2065,6 +2065,7 @@ static void render_fragments(Vp3DecodeContext *s, int j; int16_t *dequantizer; DCTELEM dequant_block[64]; + DCTELEM dequant_block_permuted[64]; unsigned char *output_plane; unsigned char *last_plane; unsigned char *golden_plane; @@ -2155,9 +2156,12 @@ static void render_fragments(Vp3DecodeContext *s, i, s->all_fragments[i].coding_method, s->all_fragments[i].coeffs[0], dequantizer[0]); for (j = 0; j < 64; j++) - dequant_block[dequant_index[j]] = + dequant_block[dezigzag_index[j]] = s->all_fragments[i].coeffs[j] * dequantizer[j]; + for (j = 0; j < 64; j++) + dequant_block_permuted[s->dsp.idct_permutation[j]] = + dequant_block[j]; debug_idct("dequantized block:\n"); for (m = 0; m < 8; m++) { @@ -2171,14 +2175,14 @@ static void render_fragments(Vp3DecodeContext *s, /* invert DCT and place (or add) in final output */ if (s->all_fragments[i].coding_method == MODE_INTRA) { - dequant_block[0] += 1024; + dequant_block_permuted[0] += 1024; s->dsp.idct_put( output_plane + s->all_fragments[i].first_pixel, - stride, dequant_block); + stride, dequant_block_permuted); } else { s->dsp.idct_add( output_plane + s->all_fragments[i].first_pixel, - stride, dequant_block); + stride, dequant_block_permuted); } debug_idct("block after idct_%s():\n", @@ -2363,7 +2367,7 @@ static int vp3_decode_init(AVCodecContext *avctx) /* build quantization table */ for (i = 0; i < 64; i++) - quant_index[dequant_index[i]] = i; + zigzag_index[dezigzag_index[i]] = i; /* work out the block mapping tables */ s->superblock_fragments = av_malloc(s->superblock_count * 16 * sizeof(int)); diff --git a/libavcodec/vp3data.h b/libavcodec/vp3data.h index 016b4e25c5..0021049fcd 100644 --- a/libavcodec/vp3data.h +++ b/libavcodec/vp3data.h @@ -60,7 +60,7 @@ static uint32_t vp31_quality_threshold[64] = }; /* table used to convert natural order <-> zigzag order */ -static const int dequant_index[64] = +static const int dezigzag_index[64] = { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, @@ -71,8 +71,8 @@ static const int dequant_index[64] = 53, 60, 61, 54, 47, 55, 62, 63 }; -/* inverse of dequant index */ -static int quant_index[64]; +/* inverse of dezigzag index */ +static int zigzag_index[64]; static const uint16_t dc_bias[16][32][2] = { { /* DC bias table 0 */