comparison vc1.c @ 4239:30b14d0f2324 libavcodec

Correct rounding values in overlap filtering
author kostya
date Sun, 26 Nov 2006 04:57:31 +0000
parents a784639411d6
children c2224aefb923
comparison
equal deleted inserted replaced
4238:a784639411d6 4239:30b14d0f2324
3395 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; 3395 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1;
3396 for(j = 0; j < 64; j++) s->block[i][j] += 128; 3396 for(j = 0; j < 64; j++) s->block[i][j] += 128;
3397 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); 3397 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
3398 if(v->pq >= 9 && v->overlap) { 3398 if(v->pq >= 9 && v->overlap) {
3399 if(v->c_avail) 3399 if(v->c_avail)
3400 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? (i&1) : (s->mb_x&1)); 3400 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
3401 if(v->a_avail) 3401 if(v->a_avail)
3402 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? ((i&1)>>1) : (s->mb_y&1)); 3402 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
3403 } 3403 }
3404 } else if(val) { 3404 } else if(val) {
3405 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); 3405 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block);
3406 if(!v->ttmbf && ttmb < 8) ttmb = -1; 3406 if(!v->ttmbf && ttmb < 8) ttmb = -1;
3407 first_block = 0; 3407 first_block = 0;
3498 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1; 3498 if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1;
3499 for(j = 0; j < 64; j++) s->block[i][j] += 128; 3499 for(j = 0; j < 64; j++) s->block[i][j] += 128;
3500 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); 3500 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize);
3501 if(v->pq >= 9 && v->overlap) { 3501 if(v->pq >= 9 && v->overlap) {
3502 if(v->c_avail) 3502 if(v->c_avail)
3503 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? (i&1) : (s->mb_x&1)); 3503 s->dsp.vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
3504 if(v->a_avail) 3504 if(v->a_avail)
3505 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), (i<4) ? ((i&1)>>1) : (s->mb_y&1)); 3505 s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
3506 } 3506 }
3507 } else if(is_coded[i]) { 3507 } else if(is_coded[i]) {
3508 status = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); 3508 status = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block);
3509 if(!v->ttmbf && ttmb < 8) ttmb = -1; 3509 if(!v->ttmbf && ttmb < 8) ttmb = -1;
3510 first_block = 0; 3510 first_block = 0;
3767 } 3767 }
3768 3768
3769 vc1_put_block(v, s->block); 3769 vc1_put_block(v, s->block);
3770 if(v->pq >= 9 && v->overlap) { 3770 if(v->pq >= 9 && v->overlap) {
3771 if(s->mb_x) { 3771 if(s->mb_x) {
3772 s->dsp.vc1_h_overlap(s->dest[0], s->linesize, 0); 3772 s->dsp.vc1_h_overlap(s->dest[0], s->linesize);
3773 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 0); 3773 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize);
3774 if(!(s->flags & CODEC_FLAG_GRAY)) { 3774 if(!(s->flags & CODEC_FLAG_GRAY)) {
3775 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize, s->mb_x&1); 3775 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize);
3776 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize, s->mb_x&1); 3776 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize);
3777 } 3777 }
3778 } 3778 }
3779 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize, 1); 3779 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize);
3780 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); 3780 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize);
3781 if(!s->first_slice_line) { 3781 if(!s->first_slice_line) {
3782 s->dsp.vc1_v_overlap(s->dest[0], s->linesize, 0); 3782 s->dsp.vc1_v_overlap(s->dest[0], s->linesize);
3783 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize, 0); 3783 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize);
3784 if(!(s->flags & CODEC_FLAG_GRAY)) { 3784 if(!(s->flags & CODEC_FLAG_GRAY)) {
3785 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize, s->mb_y&1); 3785 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize);
3786 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize, s->mb_y&1); 3786 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize);
3787 } 3787 }
3788 } 3788 }
3789 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 1); 3789 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize);
3790 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); 3790 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize);
3791 } 3791 }
3792 3792
3793 if(get_bits_count(&s->gb) > v->bits) { 3793 if(get_bits_count(&s->gb) > v->bits) {
3794 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); 3794 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits);
3795 return; 3795 return;
3896 } 3896 }
3897 3897
3898 vc1_put_block(v, s->block); 3898 vc1_put_block(v, s->block);
3899 if(overlap) { 3899 if(overlap) {
3900 if(s->mb_x) { 3900 if(s->mb_x) {
3901 s->dsp.vc1_h_overlap(s->dest[0], s->linesize, 0); 3901 s->dsp.vc1_h_overlap(s->dest[0], s->linesize);
3902 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 0); 3902 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize);
3903 if(!(s->flags & CODEC_FLAG_GRAY)) { 3903 if(!(s->flags & CODEC_FLAG_GRAY)) {
3904 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize, s->mb_x&1); 3904 s->dsp.vc1_h_overlap(s->dest[1], s->uvlinesize);
3905 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize, s->mb_x&1); 3905 s->dsp.vc1_h_overlap(s->dest[2], s->uvlinesize);
3906 } 3906 }
3907 } 3907 }
3908 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize, 1); 3908 s->dsp.vc1_h_overlap(s->dest[0] + 8, s->linesize);
3909 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); 3909 s->dsp.vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize);
3910 if(!s->first_slice_line) { 3910 if(!s->first_slice_line) {
3911 s->dsp.vc1_v_overlap(s->dest[0], s->linesize, 0); 3911 s->dsp.vc1_v_overlap(s->dest[0], s->linesize);
3912 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize, 0); 3912 s->dsp.vc1_v_overlap(s->dest[0] + 8, s->linesize);
3913 if(!(s->flags & CODEC_FLAG_GRAY)) { 3913 if(!(s->flags & CODEC_FLAG_GRAY)) {
3914 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize, s->mb_y&1); 3914 s->dsp.vc1_v_overlap(s->dest[1], s->uvlinesize);
3915 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize, s->mb_y&1); 3915 s->dsp.vc1_v_overlap(s->dest[2], s->uvlinesize);
3916 } 3916 }
3917 } 3917 }
3918 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize, 1); 3918 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize);
3919 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize, 1); 3919 s->dsp.vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize);
3920 } 3920 }
3921 3921
3922 if(get_bits_count(&s->gb) > v->bits) { 3922 if(get_bits_count(&s->gb) > v->bits) {
3923 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); 3923 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits);
3924 return; 3924 return;