|
|
|
@@ -152,6 +152,7 @@ typedef struct AICContext { |
|
|
|
int16_t *data_ptr[NUM_BANDS]; |
|
|
|
|
|
|
|
DECLARE_ALIGNED(16, int16_t, block)[64]; |
|
|
|
DECLARE_ALIGNED(16, uint8_t, quant_matrix)[64]; |
|
|
|
} AICContext; |
|
|
|
|
|
|
|
static int aic_decode_header(AICContext *ctx, const uint8_t *src, int size) |
|
|
|
@@ -287,7 +288,7 @@ static void recombine_block_il(int16_t *dst, const uint8_t *scan, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void unquant_block(int16_t *block, int q) |
|
|
|
static void unquant_block(int16_t *block, int q, uint8_t *quant_matrix) |
|
|
|
{ |
|
|
|
int i; |
|
|
|
|
|
|
|
@@ -295,7 +296,7 @@ static void unquant_block(int16_t *block, int q) |
|
|
|
int val = (uint16_t)block[i]; |
|
|
|
int sign = val & 1; |
|
|
|
|
|
|
|
block[i] = (((val >> 1) ^ -sign) * q * aic_quant_matrix[i] >> 4) |
|
|
|
block[i] = (((val >> 1) ^ -sign) * q * quant_matrix[i] >> 4) |
|
|
|
+ sign; |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -336,7 +337,7 @@ static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y, |
|
|
|
else |
|
|
|
recombine_block_il(ctx->block, ctx->scantable.permutated, |
|
|
|
&base_y, &ext_y, blk); |
|
|
|
unquant_block(ctx->block, ctx->quant); |
|
|
|
unquant_block(ctx->block, ctx->quant, ctx->quant_matrix); |
|
|
|
ctx->dsp.idct(ctx->block); |
|
|
|
|
|
|
|
if (!ctx->interlaced) { |
|
|
|
@@ -354,7 +355,7 @@ static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y, |
|
|
|
for (blk = 0; blk < 2; blk++) { |
|
|
|
recombine_block(ctx->block, ctx->scantable.permutated, |
|
|
|
&base_c, &ext_c); |
|
|
|
unquant_block(ctx->block, ctx->quant); |
|
|
|
unquant_block(ctx->block, ctx->quant, ctx->quant_matrix); |
|
|
|
ctx->dsp.idct(ctx->block); |
|
|
|
ctx->dsp.put_signed_pixels_clamped(ctx->block, C[blk], |
|
|
|
ctx->frame->linesize[blk + 1]); |
|
|
|
@@ -432,6 +433,8 @@ static av_cold int aic_decode_init(AVCodecContext *avctx) |
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
scan[i] = i; |
|
|
|
ff_init_scantable(ctx->dsp.idct_permutation, &ctx->scantable, scan); |
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
ctx->quant_matrix[ctx->dsp.idct_permutation[i]] = aic_quant_matrix[i]; |
|
|
|
|
|
|
|
ctx->mb_width = FFALIGN(avctx->width, 16) >> 4; |
|
|
|
ctx->mb_height = FFALIGN(avctx->height, 16) >> 4; |
|
|
|
|