20 |
* along with this program ; if not, write to the Free Software |
* along with this program ; if not, write to the Free Software |
21 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 |
* |
* |
23 |
* $Id: motion_comp.c,v 1.20 2004-03-22 22:36:24 edgomez Exp $ |
* $Id: motion_comp.c,v 1.20.2.1 2004-10-12 21:06:34 edgomez Exp $ |
24 |
* |
* |
25 |
****************************************************************************/ |
****************************************************************************/ |
26 |
|
|
86 |
{ |
{ |
87 |
switch (((dx & 1) << 1) + (dy & 1)) { |
switch (((dx & 1) << 1) + (dy & 1)) { |
88 |
case 0: |
case 0: |
89 |
return refn + (int) ((x * block + dx / 2) + (y * block + dy / 2) * stride); |
return refn + (int) (((int)x * (int)block + dx / 2) + ((int)y * (int)block + dy / 2) * (int)stride); |
90 |
case 1: |
case 1: |
91 |
return refv + (int) ((x * block + dx / 2) + (y * block + (dy - 1) / 2) * stride); |
return refv + (int) (((int)x * (int)block + dx / 2) + ((int)y * (int)block + (dy - 1) / 2) * (int)stride); |
92 |
case 2: |
case 2: |
93 |
return refh + (int) ((x * block + (dx - 1) / 2) + (y * block + dy / 2) * stride); |
return refh + (int) (((int)x * (int)block + (dx - 1) / 2) + ((int)y * (int)block + dy / 2) * (int)stride); |
94 |
default: |
default: |
95 |
return refhv + (int) ((x * block + (dx - 1) / 2) + (y * block + (dy - 1) / 2) * stride); |
return refhv + (int) (((int)x * (int)block + (dx - 1) / 2) + ((int)y * (int)block + (dy - 1) / 2) * (int)stride); |
96 |
} |
} |
97 |
} |
} |
98 |
|
|
129 |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
130 |
#endif |
#endif |
131 |
ptr = tmp; |
ptr = tmp; |
132 |
} else ptr = ref + (y + dy/4)*stride + x + dx/4; /* fullpixel position */ |
} else ptr = ref + ((int)y + dy/4)*(int)stride + (int)x + dx/4; /* fullpixel position */ |
133 |
|
|
134 |
} else ptr = get_ref(ref, refh, refv, refhv, x, y, 1, dx, dy, stride); |
} else ptr = get_ref(ref, refh, refv, refhv, x, y, 1, dx, dy, stride); |
135 |
|
|
197 |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
198 |
#endif |
#endif |
199 |
ptr = tmp; |
ptr = tmp; |
200 |
} else ptr = ref + (y + dy/4)*stride + x + dx/4; /* fullpixel position */ |
} else ptr = ref + ((int)y + dy/4)*(int)stride + (int)x + dx/4; /* fullpixel position */ |
201 |
} else ptr = get_ref(ref, refh, refv, refhv, x, y, 1, dx, dy, stride); |
} else ptr = get_ref(ref, refh, refv, refhv, x, y, 1, dx, dy, stride); |
202 |
|
|
203 |
transfer_8to16sub(dct_codes, cur + y * stride + x, ptr, stride); |
transfer_8to16sub(dct_codes, cur + y * stride + x, ptr, stride); |
463 |
(uint8_t *) f_ref->y, tmp + 32, |
(uint8_t *) f_ref->y, tmp + 32, |
464 |
tmp + 64, tmp + 96, 16*i, 16*j, dx, dy, edged_width, 0); |
tmp + 64, tmp + 96, 16*i, 16*j, dx, dy, edged_width, 0); |
465 |
ptr1 = tmp; |
ptr1 = tmp; |
466 |
} else ptr1 = f_ref->y + (16*j + dy/4)*edged_width + 16*i + dx/4; /* fullpixel position */ |
} else ptr1 = f_ref->y + (16*(int)j + dy/4)*(int)edged_width + 16*(int)i + dx/4; /* fullpixel position */ |
467 |
|
|
468 |
if ((b_dx&3) | (b_dy&3)) { |
if ((b_dx&3) | (b_dy&3)) { |
469 |
interpolate16x16_quarterpel(tmp - i * 16 - j * 16 * edged_width + 16, |
interpolate16x16_quarterpel(tmp - i * 16 - j * 16 * edged_width + 16, |
470 |
(uint8_t *) b_ref->y, tmp + 32, |
(uint8_t *) b_ref->y, tmp + 32, |
471 |
tmp + 64, tmp + 96, 16*i, 16*j, b_dx, b_dy, edged_width, 0); |
tmp + 64, tmp + 96, 16*i, 16*j, b_dx, b_dy, edged_width, 0); |
472 |
ptr2 = tmp + 16; |
ptr2 = tmp + 16; |
473 |
} else ptr2 = b_ref->y + (16*j + b_dy/4)*edged_width + 16*i + b_dx/4; /* fullpixel position */ |
} else ptr2 = b_ref->y + (16*(int)j + b_dy/4)*(int)edged_width + 16*(int)i + b_dx/4; /* fullpixel position */ |
474 |
|
|
475 |
b_dx /= 2; |
b_dx /= 2; |
476 |
b_dy /= 2; |
b_dy /= 2; |
517 |
tmp + 32, tmp + 64, tmp + 96, |
tmp + 32, tmp + 64, tmp + 96, |
518 |
16*i + (k&1)*8, 16*j + (k>>1)*8, dx, dy, edged_width, 0); |
16*i + (k&1)*8, 16*j + (k>>1)*8, dx, dy, edged_width, 0); |
519 |
ptr1 = tmp; |
ptr1 = tmp; |
520 |
} else ptr1 = f_ref->y + (16*j + (k>>1)*8 + dy/4)*edged_width + 16*i + (k&1)*8 + dx/4; |
} else ptr1 = f_ref->y + (16*(int)j + (k>>1)*8 + dy/4)*(int)edged_width + 16*(int)i + (k&1)*8 + dx/4; |
521 |
|
|
522 |
if ((b_dx&3) | (b_dy&3)) { |
if ((b_dx&3) | (b_dy&3)) { |
523 |
interpolate8x8_quarterpel(tmp - (i * 16+(k&1)*8) - (j * 16+((k>>1)*8)) * edged_width + 16, |
interpolate8x8_quarterpel(tmp - (i * 16+(k&1)*8) - (j * 16+((k>>1)*8)) * edged_width + 16, |
525 |
tmp + 16, tmp + 32, tmp + 48, |
tmp + 16, tmp + 32, tmp + 48, |
526 |
16*i + (k&1)*8, 16*j + (k>>1)*8, b_dx, b_dy, edged_width, 0); |
16*i + (k&1)*8, 16*j + (k>>1)*8, b_dx, b_dy, edged_width, 0); |
527 |
ptr2 = tmp + 16; |
ptr2 = tmp + 16; |
528 |
} else ptr2 = b_ref->y + (16*j + (k>>1)*8 + b_dy/4)*edged_width + 16*i + (k&1)*8 + b_dx/4; |
} else ptr2 = b_ref->y + (16*(int)j + (k>>1)*8 + b_dy/4)*(int)edged_width + 16*(int)i + (k&1)*8 + b_dx/4; |
529 |
} else { |
} else { |
530 |
sumx += dx; sumy += dy; |
sumx += dx; sumy += dy; |
531 |
b_sumx += b_dx; b_sumy += b_dy; |
b_sumx += b_dx; b_sumy += b_dy; |