Mercurial > libavcodec.hg
comparison vc1.c @ 7846:a7162bb60138 libavcodec
Make it possible to disable loop filter in VC-1.
Unlike H.264 it does not affect picture quality on any files I've watched.
author | kostya |
---|---|
date | Thu, 11 Sep 2008 06:35:37 +0000 |
parents | 6c2cbc2a8e96 |
children | cddc3677e7dc |
comparison
equal
deleted
inserted
replaced
7845:e4edcbbca3f3 | 7846:a7162bb60138 |
---|---|
875 if(v->s.loop_filter == 1 && v->profile == PROFILE_SIMPLE) | 875 if(v->s.loop_filter == 1 && v->profile == PROFILE_SIMPLE) |
876 { | 876 { |
877 av_log(avctx, AV_LOG_ERROR, | 877 av_log(avctx, AV_LOG_ERROR, |
878 "LOOPFILTER shell not be enabled in simple profile\n"); | 878 "LOOPFILTER shell not be enabled in simple profile\n"); |
879 } | 879 } |
880 if(v->s.avctx->skip_loop_filter >= AVDISCARD_ALL) | |
881 v->s.loop_filter = 0; | |
880 | 882 |
881 v->res_x8 = get_bits1(gb); //reserved | 883 v->res_x8 = get_bits1(gb); //reserved |
882 v->multires = get_bits1(gb); | 884 v->multires = get_bits1(gb); |
883 v->res_fasttx = get_bits1(gb); | 885 v->res_fasttx = get_bits1(gb); |
884 if (!v->res_fasttx) | 886 if (!v->res_fasttx) |
3117 int val, sign; /* temp values */ | 3119 int val, sign; /* temp values */ |
3118 int first_block = 1; | 3120 int first_block = 1; |
3119 int dst_idx, off; | 3121 int dst_idx, off; |
3120 int skipped, fourmv; | 3122 int skipped, fourmv; |
3121 int block_cbp = 0, pat; | 3123 int block_cbp = 0, pat; |
3124 int apply_loop_filter; | |
3122 | 3125 |
3123 mquant = v->pq; /* Loosy initialization */ | 3126 mquant = v->pq; /* Loosy initialization */ |
3124 | 3127 |
3125 if (v->mv_type_is_raw) | 3128 if (v->mv_type_is_raw) |
3126 fourmv = get_bits1(gb); | 3129 fourmv = get_bits1(gb); |
3131 else | 3134 else |
3132 skipped = v->s.mbskip_table[mb_pos]; | 3135 skipped = v->s.mbskip_table[mb_pos]; |
3133 | 3136 |
3134 s->dsp.clear_blocks(s->block[0]); | 3137 s->dsp.clear_blocks(s->block[0]); |
3135 | 3138 |
3139 apply_loop_filter = s->loop_filter && !(s->avctx->skip_loop_filter >= AVDISCARD_NONKEY); | |
3136 if (!fourmv) /* 1MV mode */ | 3140 if (!fourmv) /* 1MV mode */ |
3137 { | 3141 { |
3138 if (!skipped) | 3142 if (!skipped) |
3139 { | 3143 { |
3140 GET_MVDATA(dmv_x, dmv_y); | 3144 GET_MVDATA(dmv_x, dmv_y); |
3195 if(v->c_avail) | 3199 if(v->c_avail) |
3196 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 3200 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); |
3197 if(v->a_avail) | 3201 if(v->a_avail) |
3198 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 3202 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); |
3199 } | 3203 } |
3200 if(v->s.loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ | 3204 if(apply_loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ |
3201 int left_cbp, top_cbp; | 3205 int left_cbp, top_cbp; |
3202 if(i & 4){ | 3206 if(i & 4){ |
3203 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 3207 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
3204 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); | 3208 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); |
3205 }else{ | 3209 }else{ |
3212 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); | 3216 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); |
3213 } | 3217 } |
3214 block_cbp |= 0xF << (i << 2); | 3218 block_cbp |= 0xF << (i << 2); |
3215 } else if(val) { | 3219 } else if(val) { |
3216 int left_cbp = 0, top_cbp = 0, filter = 0; | 3220 int left_cbp = 0, top_cbp = 0, filter = 0; |
3217 if(v->s.loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ | 3221 if(apply_loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){ |
3218 filter = 1; | 3222 filter = 1; |
3219 if(i & 4){ | 3223 if(i & 4){ |
3220 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 3224 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
3221 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); | 3225 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); |
3222 }else{ | 3226 }else{ |