Mercurial > libavcodec.hg
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; |