Mercurial > libavcodec.hg
changeset 3744:805aee1f7cce libavcodec
For B-frames if the second reference frame signals intensity compensation
then the first reference frame should be intensity compensated.
author | kostya |
---|---|
date | Thu, 21 Sep 2006 04:44:35 +0000 |
parents | fc613a610303 |
children | 78a02fd46b20 |
files | vc1.c |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/vc1.c Thu Sep 21 04:38:47 2006 +0000 +++ b/vc1.c Thu Sep 21 04:44:35 2006 +0000 @@ -332,6 +332,7 @@ int dmb_is_raw; ///< direct mb plane is raw int skip_is_raw; ///< skip mb plane is not coded uint8_t luty[256], lutuv[256]; // lookup tables used for intensity compensation + int use_ic; ///< use intensity compensation in B-frames int rnd; ///< rounding control /** Frame decoding info for S/M profiles only */ @@ -1427,6 +1428,8 @@ //av_log(v->s.avctx, AV_LOG_INFO, "%c Frame: QP=[%i]%i (+%i/2) %i\n", // (v->s.pict_type == P_TYPE) ? 'P' : ((v->s.pict_type == I_TYPE) ? 'I' : 'B'), pqindex, v->pq, v->halfpq, v->rangeredfrm); + if(v->s.pict_type == I_TYPE || v->s.pict_type == P_TYPE) v->use_ic = 0; + switch(v->s.pict_type) { case P_TYPE: if (v->pq < 5) v->tt_index = 0; @@ -1441,6 +1444,7 @@ v->mv_mode2 = mv_pmode_table2[lowquant][get_prefix(gb, 1, 3)]; v->lumscale = get_bits(gb, 6); v->lumshift = get_bits(gb, 6); + v->use_ic = 1; /* fill lookup tables for intensity compensation */ if(!v->lumscale) { scale = -64; @@ -2106,18 +2110,26 @@ { int t; + if(v->use_ic) { + v->mv_mode2 = v->mv_mode; + v->mv_mode = MV_PMODE_INTENSITY_COMP; + } if(direct) { vc1_mc_1mv(v, 0); vc1_interp_mc(v); + if(v->use_ic) v->mv_mode = v->mv_mode2; return; } if(mode == BMV_TYPE_INTERPOLATED) { vc1_mc_1mv(v, 0); vc1_interp_mc(v); + if(v->use_ic) v->mv_mode = v->mv_mode2; return; } + if(v->use_ic && (mode == BMV_TYPE_BACKWARD)) v->mv_mode = v->mv_mode2; vc1_mc_1mv(v, (mode == BMV_TYPE_BACKWARD)); + if(v->use_ic) v->mv_mode = v->mv_mode2; } static inline void vc1_pred_b_mv(VC1Context *v, int dmv_x[2], int dmv_y[2], int direct, int mvtype)