Mercurial > libavcodec.hg
comparison vc1.c @ 8582:2624a270ef12 libavcodec
421l: fix loop filter for P-frames in VC-1
author | kostya |
---|---|
date | Tue, 13 Jan 2009 08:02:31 +0000 |
parents | a683a89503eb |
children | d94775e24b0e |
comparison
equal
deleted
inserted
replaced
8581:c8d93b8559fe | 8582:2624a270ef12 |
---|---|
3203 int left_cbp, top_cbp; | 3203 int left_cbp, top_cbp; |
3204 if(i & 4){ | 3204 if(i & 4){ |
3205 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 3205 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
3206 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); | 3206 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); |
3207 }else{ | 3207 }else{ |
3208 left_cbp = (i & 1) ? (pat >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); | 3208 left_cbp = (i & 1) ? (cbp >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); |
3209 top_cbp = (i & 2) ? (pat >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); | 3209 top_cbp = (i & 2) ? (cbp >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); |
3210 } | 3210 } |
3211 if(left_cbp & 0xC) | 3211 if(left_cbp & 0xC) |
3212 vc1_loop_filter(s->dest[dst_idx] + off, 1, i & 4 ? s->uvlinesize : s->linesize, 8, mquant); | 3212 vc1_loop_filter(s->dest[dst_idx] + off, 1, i & 4 ? s->uvlinesize : s->linesize, 8, mquant); |
3213 if(top_cbp & 0xA) | 3213 if(top_cbp & 0xA) |
3214 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); | 3214 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); |
3220 filter = 1; | 3220 filter = 1; |
3221 if(i & 4){ | 3221 if(i & 4){ |
3222 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 3222 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
3223 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); | 3223 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); |
3224 }else{ | 3224 }else{ |
3225 left_cbp = (i & 1) ? (pat >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); | 3225 left_cbp = (i & 1) ? (cbp >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); |
3226 top_cbp = (i & 2) ? (pat >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); | 3226 top_cbp = (i & 2) ? (cbp >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); |
3227 } | 3227 } |
3228 if(left_cbp & 0xC) | |
3229 vc1_loop_filter(s->dest[dst_idx] + off, 1, i & 4 ? s->uvlinesize : s->linesize, 8, mquant); | |
3230 if(top_cbp & 0xA) | |
3231 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); | |
3228 } | 3232 } |
3229 pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize, (i&4) && (s->flags & CODEC_FLAG_GRAY), filter, left_cbp, top_cbp); | 3233 pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize, (i&4) && (s->flags & CODEC_FLAG_GRAY), filter, left_cbp, top_cbp); |
3230 block_cbp |= pat << (i << 2); | 3234 block_cbp |= pat << (i << 2); |
3231 if(!v->ttmbf && ttmb < 8) ttmb = -1; | 3235 if(!v->ttmbf && ttmb < 8) ttmb = -1; |
3232 first_block = 0; | 3236 first_block = 0; |
3330 int left_cbp, top_cbp; | 3334 int left_cbp, top_cbp; |
3331 if(i & 4){ | 3335 if(i & 4){ |
3332 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 3336 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
3333 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); | 3337 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); |
3334 }else{ | 3338 }else{ |
3335 left_cbp = (i & 1) ? (pat >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); | 3339 left_cbp = (i & 1) ? (cbp >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); |
3336 top_cbp = (i & 2) ? (pat >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); | 3340 top_cbp = (i & 2) ? (cbp >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); |
3337 } | 3341 } |
3338 if(left_cbp & 0xC) | 3342 if(left_cbp & 0xC) |
3339 vc1_loop_filter(s->dest[dst_idx] + off, 1, i & 4 ? s->uvlinesize : s->linesize, 8, mquant); | 3343 vc1_loop_filter(s->dest[dst_idx] + off, 1, i & 4 ? s->uvlinesize : s->linesize, 8, mquant); |
3340 if(top_cbp & 0xA) | 3344 if(top_cbp & 0xA) |
3341 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); | 3345 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); |
3347 filter = 1; | 3351 filter = 1; |
3348 if(i & 4){ | 3352 if(i & 4){ |
3349 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); | 3353 left_cbp = v->cbp[s->mb_x - 1] >> (i * 4); |
3350 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); | 3354 top_cbp = v->cbp[s->mb_x - s->mb_stride] >> (i * 4); |
3351 }else{ | 3355 }else{ |
3352 left_cbp = (i & 1) ? (pat >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); | 3356 left_cbp = (i & 1) ? (cbp >> ((i-1)*4)) : (v->cbp[s->mb_x - 1] >> ((i+1)*4)); |
3353 top_cbp = (i & 2) ? (pat >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); | 3357 top_cbp = (i & 2) ? (cbp >> ((i-2)*4)) : (v->cbp[s->mb_x - s->mb_stride] >> ((i+2)*4)); |
3354 } | 3358 } |
3359 if(left_cbp & 0xC) | |
3360 vc1_loop_filter(s->dest[dst_idx] + off, 1, i & 4 ? s->uvlinesize : s->linesize, 8, mquant); | |
3361 if(top_cbp & 0xA) | |
3362 vc1_loop_filter(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize, 1, 8, mquant); | |
3355 } | 3363 } |
3356 pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize, (i&4) && (s->flags & CODEC_FLAG_GRAY), filter, left_cbp, top_cbp); | 3364 pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize, (i&4) && (s->flags & CODEC_FLAG_GRAY), filter, left_cbp, top_cbp); |
3357 block_cbp |= pat << (i << 2); | 3365 block_cbp |= pat << (i << 2); |
3358 if(!v->ttmbf && ttmb < 8) ttmb = -1; | 3366 if(!v->ttmbf && ttmb < 8) ttmb = -1; |
3359 first_block = 0; | 3367 first_block = 0; |