Mercurial > libavcodec.hg
comparison vc1.c @ 4209:ec6d49d9c19d libavcodec
Overlap filtering was done in reverse order
| author | kostya |
|---|---|
| date | Fri, 17 Nov 2006 06:09:32 +0000 |
| parents | 34fdffe98bd0 |
| children | aee20d5bd41f |
comparison
equal
deleted
inserted
replaced
| 4208:45e0102824fb | 4209:ec6d49d9c19d |
|---|---|
| 3338 s->dsp.vc1_inv_trans_8x8(s->block[i]); | 3338 s->dsp.vc1_inv_trans_8x8(s->block[i]); |
| 3339 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; | 3339 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; |
| 3340 for(j = 0; j < 64; j++) s->block[i][j] += 128; | 3340 for(j = 0; j < 64; j++) s->block[i][j] += 128; |
| 3341 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 3341 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); |
| 3342 if(v->pq >= 9 && v->overlap) { | 3342 if(v->pq >= 9 && v->overlap) { |
| 3343 if(v->c_avail) | |
| 3344 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? (i&1) : (s->mb_x&1)); | |
| 3343 if(v->a_avail) | 3345 if(v->a_avail) |
| 3344 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? ((i&1)>>1) : (s->mb_y&1)); | 3346 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? ((i&1)>>1) : (s->mb_y&1)); |
| 3345 if(v->c_avail) | |
| 3346 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? (i&1) : (s->mb_x&1)); | |
| 3347 } | 3347 } |
| 3348 } else if(val) { | 3348 } else if(val) { |
| 3349 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); | 3349 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); |
| 3350 if(!v->ttmbf && ttmb < 8) ttmb = -1; | 3350 if(!v->ttmbf && ttmb < 8) ttmb = -1; |
| 3351 first_block = 0; | 3351 first_block = 0; |
| 3441 s->dsp.vc1_inv_trans_8x8(s->block[i]); | 3441 s->dsp.vc1_inv_trans_8x8(s->block[i]); |
| 3442 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; | 3442 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; |
| 3443 for(j = 0; j < 64; j++) s->block[i][j] += 128; | 3443 for(j = 0; j < 64; j++) s->block[i][j] += 128; |
| 3444 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); | 3444 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); |
| 3445 if(v->pq >= 9 && v->overlap) { | 3445 if(v->pq >= 9 && v->overlap) { |
| 3446 if(v->c_avail) | |
| 3447 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? (i&1) : (s->mb_x&1)); | |
| 3446 if(v->a_avail) | 3448 if(v->a_avail) |
| 3447 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? ((i&1)>>1) : (s->mb_y&1)); | 3449 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? ((i&1)>>1) : (s->mb_y&1)); |
| 3448 if(v->c_avail) | |
| 3449 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? (i&1) : (s->mb_x&1)); | |
| 3450 } | 3450 } |
| 3451 } else if(is_coded[i]) { | 3451 } else if(is_coded[i]) { |
| 3452 status = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); | 3452 status = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); |
| 3453 if(!v->ttmbf && ttmb < 8) ttmb = -1; | 3453 if(!v->ttmbf && ttmb < 8) ttmb = -1; |
| 3454 first_block = 0; | 3454 first_block = 0; |
| 3710 } | 3710 } |
| 3711 } | 3711 } |
| 3712 | 3712 |
| 3713 vc1_put_block(v, s->block); | 3713 vc1_put_block(v, s->block); |
| 3714 if(v->pq >= 9 && v->overlap) { | 3714 if(v->pq >= 9 && v->overlap) { |
| 3715 if(s->mb_x) { | |
| 3716 s->dsp.vc1_h_overlap(s->dest[0], s->linesize, 0); | |
| 3717 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 0); | |
| 3718 if(!(s->flags & CODEC_FLAG_GRAY)) { | |
| 3719 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize, s->mb_x&1); | |
| 3720 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize, s->mb_x&1); | |
| 3721 } | |
| 3722 } | |
| 3723 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize, 1); | |
| 3724 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); | |
| 3715 if(!s->first_slice_line) { | 3725 if(!s->first_slice_line) { |
| 3716 s->dsp.vc1_v_overlap(s->dest[0], s->linesize, 0); | 3726 s->dsp.vc1_v_overlap(s->dest[0], s->linesize, 0); |
| 3717 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize, 0); | 3727 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize, 0); |
| 3718 if(!(s->flags & CODEC_FLAG_GRAY)) { | 3728 if(!(s->flags & CODEC_FLAG_GRAY)) { |
| 3719 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize, s->mb_y&1); | 3729 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize, s->mb_y&1); |
| 3720 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize, s->mb_y&1); | 3730 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize, s->mb_y&1); |
| 3721 } | 3731 } |
| 3722 } | 3732 } |
| 3723 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 1); | 3733 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 1); |
| 3724 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); | 3734 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); |
| 3725 if(s->mb_x) { | |
| 3726 s->dsp.vc1_h_overlap(s->dest[0], s->linesize, 0); | |
| 3727 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 0); | |
| 3728 if(!(s->flags & CODEC_FLAG_GRAY)) { | |
| 3729 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize, s->mb_x&1); | |
| 3730 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize, s->mb_x&1); | |
| 3731 } | |
| 3732 } | |
| 3733 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize, 1); | |
| 3734 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); | |
| 3735 } | 3735 } |
| 3736 | 3736 |
| 3737 if(get_bits_count(&s->gb) > v->bits) { | 3737 if(get_bits_count(&s->gb) > v->bits) { |
| 3738 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); | 3738 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); |
| 3739 return; | 3739 return; |
| 3840 for(j = 0; j < 64; j++) s->block[k][j] += 128; | 3840 for(j = 0; j < 64; j++) s->block[k][j] += 128; |
| 3841 } | 3841 } |
| 3842 | 3842 |
| 3843 vc1_put_block(v, s->block); | 3843 vc1_put_block(v, s->block); |
| 3844 if(overlap) { | 3844 if(overlap) { |
| 3845 if(s->mb_x) { | |
| 3846 s->dsp.vc1_h_overlap(s->dest[0], s->linesize, 0); | |
| 3847 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 0); | |
| 3848 if(!(s->flags & CODEC_FLAG_GRAY)) { | |
| 3849 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize, s->mb_x&1); | |
| 3850 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize, s->mb_x&1); | |
| 3851 } | |
| 3852 } | |
| 3853 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize, 1); | |
| 3854 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); | |
| 3845 if(!s->first_slice_line) { | 3855 if(!s->first_slice_line) { |
| 3846 s->dsp.vc1_v_overlap(s->dest[0], s->linesize, 0); | 3856 s->dsp.vc1_v_overlap(s->dest[0], s->linesize, 0); |
| 3847 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize, 0); | 3857 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize, 0); |
| 3848 if(!(s->flags & CODEC_FLAG_GRAY)) { | 3858 if(!(s->flags & CODEC_FLAG_GRAY)) { |
| 3849 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize, s->mb_y&1); | 3859 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize, s->mb_y&1); |
| 3850 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize, s->mb_y&1); | 3860 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize, s->mb_y&1); |
| 3851 } | 3861 } |
| 3852 } | 3862 } |
| 3853 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 1); | 3863 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 1); |
| 3854 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); | 3864 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); |
| 3855 if(s->mb_x) { | |
| 3856 s->dsp.vc1_h_overlap(s->dest[0], s->linesize, 0); | |
| 3857 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 0); | |
| 3858 if(!(s->flags & CODEC_FLAG_GRAY)) { | |
| 3859 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize, s->mb_x&1); | |
| 3860 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize, s->mb_x&1); | |
| 3861 } | |
| 3862 } | |
| 3863 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize, 1); | |
| 3864 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); | |
| 3865 } | 3865 } |
| 3866 | 3866 |
| 3867 if(get_bits_count(&s->gb) > v->bits) { | 3867 if(get_bits_count(&s->gb) > v->bits) { |
| 3868 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); | 3868 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); |
| 3869 return; | 3869 return; |
