summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2013-07-03 20:46:28 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2013-07-04 12:09:45 +0200
commit410066986f443112ed88f501e987b6ca51ed7bd4 (patch)
tree110d6f2bcee6724e42b3199d5c7ab680b1e03f5b
parent95a57d26d8653d21f0dab1aff3558ee944853dbf (diff)
downloadffmpeg-streaming-410066986f443112ed88f501e987b6ca51ed7bd4.zip
ffmpeg-streaming-410066986f443112ed88f501e987b6ca51ed7bd4.tar.gz
aic: use chroma scan tables while decoding luma component in progressive mode
For some unclear reason Apple decided to use the same scan tables for luma and chroma in the progressive mode while using different ones for luma in the interlaced mode.
-rw-r--r--libavcodec/aic.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/libavcodec/aic.c b/libavcodec/aic.c
index a871762..e46c003 100644
--- a/libavcodec/aic.c
+++ b/libavcodec/aic.c
@@ -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,
- 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];
- 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);
@@ -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],
- i, slice_width)) < 0)
+ i, slice_width,
+ !ctx->interlaced)) < 0)
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) {
- 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 {
OpenPOWER on IntegriCloud