indeo4: expand allowed quantiser range
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 31 May 2013 19:09:27 +0000 (21:09 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 1 Jun 2013 04:36:47 +0000 (06:36 +0200)
Indeo 4 has quantiser range 0-31 instead of 0-23 for Indeo 5, and clipping
quantiser leads to incorrect quantisation and DC prediction on low-quality
videos.

This fixes bug 259.

libavcodec/ivi_common.c

index f11b729..f7e241b 100644 (file)
@@ -418,7 +418,11 @@ static int ivi_decode_blocks(GetBitContext *gb, IVIBandDesc *band, IVITile *tile
         cbp      = mb->cbp;
         buf_offs = mb->buf_offs;
 
         cbp      = mb->cbp;
         buf_offs = mb->buf_offs;
 
-        quant = av_clip(band->glob_quant + mb->q_delta, 0, 23);
+        quant = band->glob_quant + mb->q_delta;
+        if (avctx->codec_id == AV_CODEC_ID_INDEO4)
+            quant = av_clip(quant, 0, 31);
+        else
+            quant = av_clip(quant, 0, 23);
 
         base_tab  = is_intra ? band->intra_base  : band->inter_base;
         scale_tab = is_intra ? band->intra_scale : band->inter_scale;
 
         base_tab  = is_intra ? band->intra_base  : band->inter_base;
         scale_tab = is_intra ? band->intra_scale : band->inter_scale;