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;