⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interpolate8x8.h

📁 TMS320C6713Xvid视频压缩算法源代码.rar
💻 H
📖 第 1 页 / 共 2 页
字号:
	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, stride, rounding);		interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);  		break;	case 2:	    interpolate8x8_lowpass_h(dst, src, stride, rounding);  		break;	case 3:		interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);  		break;	case 4:		interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);		interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8); 		break;	case 5:		interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);		interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8); 		break;	case 6:		interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);		interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8); 		break;	case 7:		interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);		interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8); 		break;	case 8:	    interpolate8x8_lowpass_v(dst, src, stride, rounding);		break;	case 9:		interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);		interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);  		break;	case 10:		interpolate8x8_lowpass_hv(dst, halfpel_h, src, stride, rounding);		break;	case 11:		interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);		interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);   		break;	case 12:		interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);		interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);   		break;	case 13:		interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);		interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_v+stride, halfpel_hv, stride, rounding, 8); 		break;	case 14:		interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);		interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8); 		break;	case 15:		interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);		interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_hv, halfpel_v + stride, stride, rounding, 8);		break;	}}static __inline void interpolate16x16_quarterpel(uint8_t * const cur,				     uint8_t * const refn,					 uint8_t * const refh,					 uint8_t * const refv,					 uint8_t * const refhv,				     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;	uint8_t *halfpel_h, *halfpel_v, *halfpel_hv;	int32_t x_int, y_int, x_frac, y_frac;	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;	halfpel_h = refh;	halfpel_v = refv;	halfpel_hv = refhv;	dst = cur + y * stride + x;	switch((y_frac << 2) | (x_frac)) {	case 0:		transfer16x16_copy(dst, src, stride);		break;	case 1:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);		interpolate8x8_avg2(dst+8, src+8, halfpel_h+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, src+8*stride, halfpel_h+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 8);		break;	case 2:	    interpolate16x16_lowpass_h(dst, src, stride, rounding);  		break;	case 3:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);		interpolate8x8_avg2(dst+8, src + 8 + 1, halfpel_h+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, src + 8*stride + 1, halfpel_h+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8 + 1, halfpel_h+8*stride+8, stride, rounding, 8);		break;	case 4:		interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);		interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8);		interpolate8x8_avg2(dst+8, src+8, halfpel_v+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, src+8*stride, halfpel_v+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);		break;	case 5:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);		interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_hv, halfpel_v, stride, rounding, 8);		interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);		break;	case 6:		interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);		interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8);		interpolate8x8_avg2(dst+8, halfpel_h+8, halfpel_hv+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, halfpel_h+8*stride, halfpel_hv+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, halfpel_h+8*stride+8, halfpel_hv+8*stride+8, stride, rounding, 8);		break;	case 7:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);		interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_hv, halfpel_v, stride, rounding, 8);		interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);		break;	case 8:	    interpolate16x16_lowpass_v(dst, src, stride, rounding);		break;	case 9:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);		interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);		break;	case 10:		interpolate16x16_lowpass_hv(dst, halfpel_h, src, stride, rounding);		break;	case 11:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);		interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);		break;	case 12:		interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);		interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);		interpolate8x8_avg2(dst+8, src+stride+8, halfpel_v+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, src+stride+8*stride, halfpel_v+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, src+stride+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);		break;	case 13:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);		interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_hv, halfpel_v+stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+stride+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+stride+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+stride+8*stride+8, stride, rounding, 8);		break;	case 14:		interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);		interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8);		interpolate8x8_avg2(dst+8, halfpel_h+stride+8, halfpel_hv+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, halfpel_h+stride+8*stride, halfpel_hv+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, halfpel_h+stride+8*stride+8, halfpel_hv+8*stride+8, stride, rounding, 8);		break;	case 15:		interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);		interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);		interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);		interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);		interpolate8x8_avg2(dst, halfpel_hv, halfpel_v+stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+stride+8, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+stride+8*stride, stride, rounding, 8);		interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+stride+8*stride+8, stride, rounding, 8);		break;	}}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -