86 |
INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64; |
INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64; |
87 |
INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64; |
INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64; |
88 |
|
|
|
void interpolate8x8_lowpass_h(uint8_t *dst, uint8_t *src, int32_t dst_stride, int32_t src_stride, int32_t rounding); |
|
|
void interpolate8x8_lowpass_v(uint8_t *dst, uint8_t *src, int32_t dst_stride, int32_t src_stride, int32_t rounding); |
|
|
void interpolate8x8_lowpass_hv(uint8_t *dst1, uint8_t *dst2, uint8_t *src, int32_t dst1_stride, int32_t dst2_stride, int32_t src_stride, int32_t rounding); |
|
|
void interpolate8x8_bilinear2(uint8_t *dst, uint8_t *src1, uint8_t *src2, int32_t dst_stride, int32_t src_stride, int32_t rounding); |
|
|
void interpolate8x8_bilinear4(uint8_t *dst, uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4, int32_t stride, int32_t rounding); |
|
|
|
|
89 |
void interpolate8x8_c(uint8_t * const dst, |
void interpolate8x8_c(uint8_t * const dst, |
90 |
const uint8_t * const src, |
const uint8_t * const src, |
91 |
const uint32_t x, |
const uint32_t x, |
139 |
} |
} |
140 |
} |
} |
141 |
|
|
|
|
|
|
static __inline void interpolate8x8_quarterpel(uint8_t * const cur, |
|
|
uint8_t * const refn, |
|
|
const uint32_t x, const uint32_t y, |
|
|
const int32_t dx, const int dy, |
|
|
const uint32_t stride, |
|
|
const uint32_t rounding) |
|
|
{ |
|
|
const int32_t xRef = x*4 + dx; |
|
|
const int32_t yRef = y*4 + dy; |
|
|
|
|
|
uint8_t *src, *dst; |
|
|
int32_t x_int, y_int, x_frac, y_frac; |
|
|
|
|
|
uint8_t halfpel_h[72]; |
|
|
uint8_t halfpel_v[64]; |
|
|
uint8_t halfpel_hv[64]; |
|
|
|
|
|
x_int = xRef/4; |
|
|
if (xRef < 0 && xRef % 4) |
|
|
x_int--; |
|
|
|
|
|
x_frac = xRef - (4*x_int); |
|
|
|
|
|
y_int = yRef/4; |
|
|
if (yRef < 0 && yRef % 4) |
|
|
y_int--; |
|
|
|
|
|
y_frac = yRef - (4*y_int); |
|
|
|
|
|
src = refn + y_int * stride + x_int; |
|
|
dst = cur + y * stride + x; |
|
|
|
|
|
switch((y_frac << 2) | (x_frac)) { |
|
|
|
|
|
case 0: |
|
|
transfer8x8_copy(dst, src, stride); |
|
|
break; |
|
|
|
|
|
case 1: |
|
|
interpolate8x8_lowpass_h(halfpel_h, src, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, src, halfpel_h, stride, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 2: |
|
|
interpolate8x8_lowpass_h(dst, src, stride, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 3: |
|
|
interpolate8x8_lowpass_h(halfpel_h, src, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, src+1, halfpel_h, stride, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 4: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, src, halfpel_v, stride, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 5: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding); |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear4(dst, src, halfpel_h, halfpel_v, halfpel_hv, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 6: |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, halfpel_h, halfpel_hv, stride, 8, 1-rounding); |
|
|
break; |
|
|
|
|
|
case 7: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src+1, 8, stride, 16-rounding); |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear4(dst, src+1, halfpel_h, halfpel_v, halfpel_hv, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 8: |
|
|
interpolate8x8_lowpass_v(dst, src, stride, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 9: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, 16-rounding); |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, halfpel_v, halfpel_hv, stride, 8, rounding); |
|
|
break; |
|
|
|
|
|
case 10: |
|
|
interpolate8x8_lowpass_hv(dst, halfpel_h, src, stride, 8, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 11: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src+1, 8, stride, 16-rounding); |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, halfpel_v, halfpel_hv, stride, 8, rounding); |
|
|
break; |
|
|
|
|
|
case 12: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, src+stride, halfpel_v, stride, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 13: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding); |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear4(dst, src+stride, halfpel_h+8, halfpel_v, halfpel_hv, stride, rounding); |
|
|
break; |
|
|
|
|
|
case 14: |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear2(dst, halfpel_h+8, halfpel_hv, stride, 8, rounding); |
|
|
break; |
|
|
|
|
|
case 15: |
|
|
interpolate8x8_lowpass_v(halfpel_v, src+1, 8, stride, rounding); |
|
|
interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding); |
|
|
interpolate8x8_bilinear4(dst, src+stride+1, halfpel_h+8, halfpel_v, halfpel_hv, stride, rounding); |
|
|
break; |
|
|
} |
|
|
} |
|