Commit 463d086b authored by Mike Melanson's avatar Mike Melanson

get those permutations straight

Originally committed as revision 1850 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 892fc83e
...@@ -862,7 +862,7 @@ static void init_dequantizer(Vp3DecodeContext *s) ...@@ -862,7 +862,7 @@ static void init_dequantizer(Vp3DecodeContext *s)
* the dequantization phase */ * the dequantization phase */
for (i = 1; i < 64; i++) { 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; s->intra_y_dequant[j] = vp31_intra_y_dequant[i] * quality_scale / 100;
if (s->intra_y_dequant[j] < MIN_DEQUANT_VAL) if (s->intra_y_dequant[j] < MIN_DEQUANT_VAL)
...@@ -2065,6 +2065,7 @@ static void render_fragments(Vp3DecodeContext *s, ...@@ -2065,6 +2065,7 @@ static void render_fragments(Vp3DecodeContext *s,
int j; int j;
int16_t *dequantizer; int16_t *dequantizer;
DCTELEM dequant_block[64]; DCTELEM dequant_block[64];
DCTELEM dequant_block_permuted[64];
unsigned char *output_plane; unsigned char *output_plane;
unsigned char *last_plane; unsigned char *last_plane;
unsigned char *golden_plane; unsigned char *golden_plane;
...@@ -2155,9 +2156,12 @@ static void render_fragments(Vp3DecodeContext *s, ...@@ -2155,9 +2156,12 @@ static void render_fragments(Vp3DecodeContext *s,
i, s->all_fragments[i].coding_method, i, s->all_fragments[i].coding_method,
s->all_fragments[i].coeffs[0], dequantizer[0]); s->all_fragments[i].coeffs[0], dequantizer[0]);
for (j = 0; j < 64; j++) for (j = 0; j < 64; j++)
dequant_block[dequant_index[j]] = dequant_block[dezigzag_index[j]] =
s->all_fragments[i].coeffs[j] * s->all_fragments[i].coeffs[j] *
dequantizer[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"); debug_idct("dequantized block:\n");
for (m = 0; m < 8; m++) { for (m = 0; m < 8; m++) {
...@@ -2171,14 +2175,14 @@ static void render_fragments(Vp3DecodeContext *s, ...@@ -2171,14 +2175,14 @@ static void render_fragments(Vp3DecodeContext *s,
/* invert DCT and place (or add) in final output */ /* invert DCT and place (or add) in final output */
if (s->all_fragments[i].coding_method == MODE_INTRA) { if (s->all_fragments[i].coding_method == MODE_INTRA) {
dequant_block[0] += 1024; dequant_block_permuted[0] += 1024;
s->dsp.idct_put( s->dsp.idct_put(
output_plane + s->all_fragments[i].first_pixel, output_plane + s->all_fragments[i].first_pixel,
stride, dequant_block); stride, dequant_block_permuted);
} else { } else {
s->dsp.idct_add( s->dsp.idct_add(
output_plane + s->all_fragments[i].first_pixel, output_plane + s->all_fragments[i].first_pixel,
stride, dequant_block); stride, dequant_block_permuted);
} }
debug_idct("block after idct_%s():\n", debug_idct("block after idct_%s():\n",
...@@ -2363,7 +2367,7 @@ static int vp3_decode_init(AVCodecContext *avctx) ...@@ -2363,7 +2367,7 @@ static int vp3_decode_init(AVCodecContext *avctx)
/* build quantization table */ /* build quantization table */
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
quant_index[dequant_index[i]] = i; zigzag_index[dezigzag_index[i]] = i;
/* work out the block mapping tables */ /* work out the block mapping tables */
s->superblock_fragments = av_malloc(s->superblock_count * 16 * sizeof(int)); s->superblock_fragments = av_malloc(s->superblock_count * 16 * sizeof(int));
......
...@@ -60,7 +60,7 @@ static uint32_t vp31_quality_threshold[64] = ...@@ -60,7 +60,7 @@ static uint32_t vp31_quality_threshold[64] =
}; };
/* table used to convert natural order <-> zigzag order */ /* 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, { 0, 1, 8, 16, 9, 2, 3, 10,
17, 24, 32, 25, 18, 11, 4, 5, 17, 24, 32, 25, 18, 11, 4, 5,
12, 19, 26, 33, 40, 48, 41, 34, 12, 19, 26, 33, 40, 48, 41, 34,
...@@ -71,8 +71,8 @@ static const int dequant_index[64] = ...@@ -71,8 +71,8 @@ static const int dequant_index[64] =
53, 60, 61, 54, 47, 55, 62, 63 53, 60, 61, 54, 47, 55, 62, 63
}; };
/* inverse of dequant index */ /* inverse of dezigzag index */
static int quant_index[64]; static int zigzag_index[64];
static const uint16_t dc_bias[16][32][2] = { static const uint16_t dc_bias[16][32][2] = {
{ /* DC bias table 0 */ { /* DC bias table 0 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment