aic: use chroma scan tables while decoding luma component in progressive mode
[libav.git] / libavcodec / aic.c
index a871762..e46c003 100644 (file)
@@ -196,11 +196,11 @@ static int aic_decode_header(AICContext *ctx, const uint8_t *src, int size)
     } while (0)
 
 static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst,
     } while (0)
 
 static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst,
-                             int band, int slice_width)
+                             int band, int slice_width, int force_chroma)
 {
     int has_skips, coeff_type, coeff_bits, skip_type, skip_bits;
     const int num_coeffs = aic_num_band_coeffs[band];
 {
     int has_skips, coeff_type, coeff_bits, skip_type, skip_bits;
     const int num_coeffs = aic_num_band_coeffs[band];
-    const uint8_t *scan = aic_scan[band];
+    const uint8_t *scan = aic_scan[band | force_chroma];
     int mb, idx, val;
 
     has_skips  = get_bits1(gb);
     int mb, idx, val;
 
     has_skips  = get_bits1(gb);
@@ -319,7 +319,8 @@ static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y,
            sizeof(*ctx->slice_data) * slice_width * AIC_BAND_COEFFS);
     for (i = 0; i < NUM_BANDS; i++)
         if ((ret = aic_decode_coeffs(&gb, ctx->data_ptr[i],
            sizeof(*ctx->slice_data) * slice_width * AIC_BAND_COEFFS);
     for (i = 0; i < NUM_BANDS; i++)
         if ((ret = aic_decode_coeffs(&gb, ctx->data_ptr[i],
-                                     i, slice_width)) < 0)
+                                     i, slice_width,
+                                     !ctx->interlaced)) < 0)
             return ret;
 
     for (mb = 0; mb < slice_width; mb++) {
             return ret;
 
     for (mb = 0; mb < slice_width; mb++) {
@@ -334,7 +335,7 @@ static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y,
             ctx->dsp.idct(ctx->block);
 
             if (!ctx->interlaced) {
             ctx->dsp.idct(ctx->block);
 
             if (!ctx->interlaced) {
-                dst = Y + (blk & 1) * 8 * ystride + (blk >> 1) * 8;
+                dst = Y + (blk >> 1) * 8 * ystride + (blk & 1) * 8;
                 ctx->dsp.put_signed_pixels_clamped(ctx->block, dst,
                                                    ystride);
             } else {
                 ctx->dsp.put_signed_pixels_clamped(ctx->block, dst,
                                                    ystride);
             } else {