Mercurial > libavcodec.hg
diff vc1.c @ 9437:8aa2e86549cd libavcodec
VC1: Do qpel when needed for both MVs in a B frame
author | conrad |
---|---|
date | Tue, 14 Apr 2009 19:26:33 +0000 |
parents | 25b3650b4db5 |
children | ef3a7b711cc0 |
line wrap: on
line diff
--- a/vc1.c Tue Apr 14 04:07:35 2009 +0000 +++ b/vc1.c Tue Apr 14 19:26:33 2009 +0000 @@ -1904,11 +1904,21 @@ srcY += s->mspel * (1 + s->linesize); } - mx >>= 1; - my >>= 1; - dxy = ((my & 1) << 1) | (mx & 1); - - dsp->avg_pixels_tab[0][dxy](s->dest[0], srcY, s->linesize, 16); + if(s->mspel) { + dxy = ((my & 3) << 2) | (mx & 3); + dsp->avg_vc1_mspel_pixels_tab[dxy](s->dest[0] , srcY , s->linesize, v->rnd); + dsp->avg_vc1_mspel_pixels_tab[dxy](s->dest[0] + 8, srcY + 8, s->linesize, v->rnd); + srcY += s->linesize * 8; + dsp->avg_vc1_mspel_pixels_tab[dxy](s->dest[0] + 8 * s->linesize , srcY , s->linesize, v->rnd); + dsp->avg_vc1_mspel_pixels_tab[dxy](s->dest[0] + 8 * s->linesize + 8, srcY + 8, s->linesize, v->rnd); + } else { // hpel mc + dxy = (my & 2) | ((mx & 2) >> 1); + + if(!v->rnd) + dsp->avg_pixels_tab[0][dxy](s->dest[0], srcY, s->linesize, 16); + else + dsp->avg_no_rnd_pixels_tab[0][dxy](s->dest[0], srcY, s->linesize, 16); + } if(s->flags & CODEC_FLAG_GRAY) return; /* Chroma MC always uses qpel blilinear */