[cvs] / xvidcore / src / image / interpolate8x8.h Repository:
ViewVC logotype

View of /xvidcore/src/image/interpolate8x8.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (download) (annotate)
Fri May 3 00:45:10 2002 UTC (21 years, 10 months ago) by chenm001
Branch: MAIN
Changes since 1.1: +6 -0 lines
add B-frame decode support
#include "../utils/mem_transfer.h"

typedef void (INTERPOLATE8X8)(uint8_t * const dst,
					const uint8_t * const src,
					const uint32_t stride,
					const uint32_t rounding);
typedef INTERPOLATE8X8 * INTERPOLATE8X8_PTR;	

extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_h;
extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_v;
extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv;

INTERPOLATE8X8 interpolate8x8_halfpel_h_c;
INTERPOLATE8X8 interpolate8x8_halfpel_v_c;
INTERPOLATE8X8 interpolate8x8_halfpel_hv_c;

INTERPOLATE8X8 interpolate8x8_halfpel_h_mmx;
INTERPOLATE8X8 interpolate8x8_halfpel_v_mmx;
INTERPOLATE8X8 interpolate8x8_halfpel_hv_mmx;

INTERPOLATE8X8 interpolate8x8_halfpel_h_xmm;
INTERPOLATE8X8 interpolate8x8_halfpel_v_xmm;
INTERPOLATE8X8 interpolate8x8_halfpel_hv_xmm;

INTERPOLATE8X8 interpolate8x8_halfpel_h_3dn;
INTERPOLATE8X8 interpolate8x8_halfpel_v_3dn;
INTERPOLATE8X8 interpolate8x8_halfpel_hv_3dn;

static __inline void interpolate8x8_switch(uint8_t * const cur,
				     const 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)
{
	int32_t ddx, ddy;

	switch ( ((dx&1)<<1) + (dy&1) )   // ((dx%2)?2:0)+((dy%2)?1:0)
    {
    case 0 :
		ddx = dx/2;
		ddy = dy/2;
		transfer8x8_copy(cur + y*stride + x, refn + (y+ddy)*stride + x + ddx, stride);
		break;

    case 1 :
		ddx = dx/2;
		ddy = (dy-1)/2;
		interpolate8x8_halfpel_v(cur + y*stride + x, 
							refn + (y+ddy)*stride + x + ddx, stride, rounding);
		break;

    case 2 :
		ddx = (dx-1)/2;
		ddy = dy/2;
		interpolate8x8_halfpel_h(cur + y*stride + x,
							refn + (y+ddy)*stride + x + ddx, stride, rounding);
		break;

    default :
		ddx = (dx-1)/2;
		ddy = (dy-1)/2;
		interpolate8x8_halfpel_hv(cur + y*stride + x,
							refn + (y+ddy)*stride + x + ddx, stride, rounding);
		break;
    }
}


void interpolate8x8_c(uint8_t * const dst,
					const uint8_t * const src,
					const uint32_t x, const uint32_t y,
					const uint32_t stride);

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4