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{