--- interpolate8x8.c 2004/08/29 05:32:29 1.14 +++ interpolate8x8.c 2005/09/13 12:12:15 1.15 @@ -19,7 +19,7 @@ * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: interpolate8x8.c,v 1.14 2004/08/29 05:32:29 syskin Exp $ + * $Id: interpolate8x8.c,v 1.15 2005/09/13 12:12:15 suxen_drol Exp $ * ****************************************************************************/ @@ -32,12 +32,15 @@ INTERPOLATE8X8_PTR interpolate8x8_halfpel_v; INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv; +INTERPOLATE8X8_PTR interpolate8x4_halfpel_h; +INTERPOLATE8X8_PTR interpolate8x4_halfpel_v; +INTERPOLATE8X8_PTR interpolate8x4_halfpel_hv; + INTERPOLATE8X8_PTR interpolate8x8_halfpel_add; INTERPOLATE8X8_PTR interpolate8x8_halfpel_h_add; INTERPOLATE8X8_PTR interpolate8x8_halfpel_v_add; INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv_add; - INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2; INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4; @@ -139,6 +142,41 @@ } } +/* dst = interpolate(src) */ + +void +interpolate8x4_halfpel_h_c(uint8_t * const dst, + const uint8_t * const src, + const uint32_t stride, + const uint32_t rounding) +{ + uintptr_t j; + + if (rounding) { + for (j = 0; j < 4*stride; j+=stride) { + dst[j + 0] = (uint8_t)((src[j + 0] + src[j + 1] )>>1); + dst[j + 1] = (uint8_t)((src[j + 1] + src[j + 2] )>>1); + dst[j + 2] = (uint8_t)((src[j + 2] + src[j + 3] )>>1); + dst[j + 3] = (uint8_t)((src[j + 3] + src[j + 4] )>>1); + dst[j + 4] = (uint8_t)((src[j + 4] + src[j + 5] )>>1); + dst[j + 5] = (uint8_t)((src[j + 5] + src[j + 6] )>>1); + dst[j + 6] = (uint8_t)((src[j + 6] + src[j + 7] )>>1); + dst[j + 7] = (uint8_t)((src[j + 7] + src[j + 8] )>>1); + } + } else { + for (j = 0; j < 4*stride; j+=stride) { + dst[j + 0] = (uint8_t)((src[j + 0] + src[j + 1] + 1)>>1); + dst[j + 1] = (uint8_t)((src[j + 1] + src[j + 2] + 1)>>1); + dst[j + 2] = (uint8_t)((src[j + 2] + src[j + 3] + 1)>>1); + dst[j + 3] = (uint8_t)((src[j + 3] + src[j + 4] + 1)>>1); + dst[j + 4] = (uint8_t)((src[j + 4] + src[j + 5] + 1)>>1); + dst[j + 5] = (uint8_t)((src[j + 5] + src[j + 6] + 1)>>1); + dst[j + 6] = (uint8_t)((src[j + 6] + src[j + 7] + 1)>>1); + dst[j + 7] = (uint8_t)((src[j + 7] + src[j + 8] + 1)>>1); + } + } +} + /* dst = (dst + interpolate(src)/2 */ void @@ -210,6 +248,42 @@ } } +/* dst = interpolate(src) */ + +void +interpolate8x4_halfpel_v_c(uint8_t * const dst, + const uint8_t * const src, + const uint32_t stride, + const uint32_t rounding) +{ + uintptr_t j; + + + if (rounding) { + for (j = 0; j < 4*stride; j+=stride) { + dst[j + 0] = (uint8_t)((src[j + 0] + src[j + stride + 0] )>>1); + dst[j + 1] = (uint8_t)((src[j + 1] + src[j + stride + 1] )>>1); + dst[j + 2] = (uint8_t)((src[j + 2] + src[j + stride + 2] )>>1); + dst[j + 3] = (uint8_t)((src[j + 3] + src[j + stride + 3] )>>1); + dst[j + 4] = (uint8_t)((src[j + 4] + src[j + stride + 4] )>>1); + dst[j + 5] = (uint8_t)((src[j + 5] + src[j + stride + 5] )>>1); + dst[j + 6] = (uint8_t)((src[j + 6] + src[j + stride + 6] )>>1); + dst[j + 7] = (uint8_t)((src[j + 7] + src[j + stride + 7] )>>1); + } + } else { + for (j = 0; j < 4*stride; j+=stride) { + dst[j + 0] = (uint8_t)((src[j + 0] + src[j + stride + 0] + 1)>>1); + dst[j + 1] = (uint8_t)((src[j + 1] + src[j + stride + 1] + 1)>>1); + dst[j + 2] = (uint8_t)((src[j + 2] + src[j + stride + 2] + 1)>>1); + dst[j + 3] = (uint8_t)((src[j + 3] + src[j + stride + 3] + 1)>>1); + dst[j + 4] = (uint8_t)((src[j + 4] + src[j + stride + 4] + 1)>>1); + dst[j + 5] = (uint8_t)((src[j + 5] + src[j + stride + 5] + 1)>>1); + dst[j + 6] = (uint8_t)((src[j + 6] + src[j + stride + 6] + 1)>>1); + dst[j + 7] = (uint8_t)((src[j + 7] + src[j + stride + 7] + 1)>>1); + } + } +} + /* dst = (dst + interpolate(src))/2 */ void @@ -281,6 +355,41 @@ } } +/* dst = interpolate(src) */ + +void +interpolate8x4_halfpel_hv_c(uint8_t * const dst, + const uint8_t * const src, + const uint32_t stride, + const uint32_t rounding) +{ + uintptr_t j; + + if (rounding) { + for (j = 0; j < 4*stride; j+=stride) { + dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +1)>>2); + dst[j + 1] = (uint8_t)((src[j+1] + src[j+2] + src[j+stride+1] + src[j+stride+2] +1)>>2); + dst[j + 2] = (uint8_t)((src[j+2] + src[j+3] + src[j+stride+2] + src[j+stride+3] +1)>>2); + dst[j + 3] = (uint8_t)((src[j+3] + src[j+4] + src[j+stride+3] + src[j+stride+4] +1)>>2); + dst[j + 4] = (uint8_t)((src[j+4] + src[j+5] + src[j+stride+4] + src[j+stride+5] +1)>>2); + dst[j + 5] = (uint8_t)((src[j+5] + src[j+6] + src[j+stride+5] + src[j+stride+6] +1)>>2); + dst[j + 6] = (uint8_t)((src[j+6] + src[j+7] + src[j+stride+6] + src[j+stride+7] +1)>>2); + dst[j + 7] = (uint8_t)((src[j+7] + src[j+8] + src[j+stride+7] + src[j+stride+8] +1)>>2); + } + } else { + for (j = 0; j < 4*stride; j+=stride) { + dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +2)>>2); + dst[j + 1] = (uint8_t)((src[j+1] + src[j+2] + src[j+stride+1] + src[j+stride+2] +2)>>2); + dst[j + 2] = (uint8_t)((src[j+2] + src[j+3] + src[j+stride+2] + src[j+stride+3] +2)>>2); + dst[j + 3] = (uint8_t)((src[j+3] + src[j+4] + src[j+stride+3] + src[j+stride+4] +2)>>2); + dst[j + 4] = (uint8_t)((src[j+4] + src[j+5] + src[j+stride+4] + src[j+stride+5] +2)>>2); + dst[j + 5] = (uint8_t)((src[j+5] + src[j+6] + src[j+stride+5] + src[j+stride+6] +2)>>2); + dst[j + 6] = (uint8_t)((src[j+6] + src[j+7] + src[j+stride+6] + src[j+stride+7] +2)>>2); + dst[j + 7] = (uint8_t)((src[j+7] + src[j+8] + src[j+stride+7] + src[j+stride+8] +2)>>2); + } + } +} + /* dst = (interpolate(src) + dst)/2 */ void