--- motion_comp.c 2002/06/12 20:38:40 1.5 +++ motion_comp.c 2002/08/15 18:13:02 1.10 @@ -31,28 +31,28 @@ ddx = dx / 2; ddy = dy / 2; transfer_8to16sub(dct_codes, cur + y * stride + x, - ref + (y + ddy) * stride + x + ddx, stride); + ref + (int) ((y + ddy) * stride + x + ddx), stride); break; case 1: ddx = dx / 2; ddy = (dy - 1) / 2; transfer_8to16sub(dct_codes, cur + y * stride + x, - refv + (y + ddy) * stride + x + ddx, stride); + refv + (int) ((y + ddy) * stride + x + ddx), stride); break; case 2: ddx = (dx - 1) / 2; ddy = dy / 2; transfer_8to16sub(dct_codes, cur + y * stride + x, - refh + (y + ddy) * stride + x + ddx, stride); + refh + (int) ((y + ddy) * stride + x + ddx), stride); break; default: // case 3: ddx = (dx - 1) / 2; ddy = (dy - 1) / 2; transfer_8to16sub(dct_codes, cur + y * stride + x, - refhv + (y + ddy) * stride + x + ddx, stride); + refhv + (int) ((y + ddy) * stride + x + ddx), stride); break; } } @@ -99,7 +99,10 @@ dy = (dy & 3) ? (dy >> 1) | 1 : dy / 2; /* uv-image-based compensation */ -#ifdef BFRAMES +#ifdef BUGGY_BFRAMES +/* was #ifdef BFRAMES, but that's not possible because non-halfpel is _allowed_ + if max_bframes<=0 . We should better check for XVID_HALFPEL flag */ + compensate8x8_halfpel(&dct_codes[4 * 64], cur->u, ref->u, refh->u, refv->u, refhv->u, 8 * i, 8 * j, dx, dy, edged_width / 2); @@ -107,6 +110,8 @@ refv->v, refhv->v, 8 * i, 8 * j, dx, dy, edged_width / 2); #else + + /* uv-block-based compensation */ interpolate8x8_switch(refv->u, ref->u, 8 * i, 8 * j, dx, dy, edged_width / 2, rounding);