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

📄 qpel.h

📁 这是一个压缩解压包,用C语言进行编程的,里面有详细的源代码.
💻 H
📖 第 1 页 / 共 2 页
字号:
	case 14:		Ops_Copy->H_Pass(tmp, src, 17, stride, rounding);		Ops->V_Pass_Avrg_Up( dst, tmp, 16, stride, rounding);		break;	case 15:		Ops_Copy->H_Pass_Avrg_Up(tmp, src, 17, stride, rounding);		Ops->V_Pass_Avrg_Up(dst, tmp, 16, stride, rounding);		break;	}}static void __inlineinterpolate16x8_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 uint8_t *src;	uint8_t *dst;	uint8_t *tmp;	int32_t quads;	const XVID_QP_FUNCS *Ops;	int32_t x_int, y_int;	const int32_t xRef = (int)x*4 + dx;	const int32_t yRef = (int)y*4 + dy;	Ops = xvid_QP_Funcs;	quads = (dx&3) | ((dy&3)<<2);	x_int = xRef >> 2;	y_int = yRef >> 2;	dst = cur + y * stride + x;	src = refn + y_int * (int)stride + x_int;	tmp = refh; /* we need at least a 16 x stride scratch block */	switch(quads) {	case 0:		transfer8x8_copy( dst, src, stride);		transfer8x8_copy( dst+8, src+8, stride);		break;	case 1:		Ops->H_Pass_Avrg(dst, src, 8, stride, rounding);		break;	case 2:		Ops->H_Pass(dst, src, 8, stride, rounding);		break;	case 3:		Ops->H_Pass_Avrg_Up(dst, src, 8, stride, rounding);		break;	case 4:		Ops->V_Pass_Avrg_8(dst, src, 16, stride, rounding);		break;	case 5:		Ops->H_Pass_Avrg(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 16, stride, rounding);		break;	case 6:		Ops->H_Pass(tmp, src,	  9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 16, stride, rounding);		break;	case 7:		Ops->H_Pass_Avrg_Up(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 16, stride, rounding);		break;	case 8:		Ops->V_Pass_8(dst, src, 16, stride, rounding);		break;	case 9:		Ops->H_Pass_Avrg(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 16, stride, rounding);		break;	case 10:		Ops->H_Pass(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 16, stride, rounding);		break;	case 11:		Ops->H_Pass_Avrg_Up(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 16, stride, rounding);		break;	case 12:		Ops->V_Pass_Avrg_Up_8(dst, src, 16, stride, rounding);		break;	case 13:		Ops->H_Pass_Avrg(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8(dst, tmp, 16, stride, rounding);		break;	case 14:		Ops->H_Pass(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8( dst, tmp, 16, stride, rounding);		break;	case 15:		Ops->H_Pass_Avrg_Up(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8(dst, tmp, 16, stride, rounding);		break;	}}static void __inlineinterpolate8x8_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 uint8_t *src;	uint8_t *dst;	uint8_t *tmp;	int32_t quads;	const XVID_QP_FUNCS *Ops;	int32_t x_int, y_int;	const int32_t xRef = (int)x*4 + dx;	const int32_t yRef = (int)y*4 + dy;	Ops = xvid_QP_Funcs;	quads = (dx&3) | ((dy&3)<<2);	x_int = xRef >> 2;	y_int = yRef >> 2;	dst = cur + y * stride + x;	src = refn + y_int * (int)stride + x_int;	tmp = refh; /* we need at least a 16 x stride scratch block */	switch(quads) {	case 0:		transfer8x8_copy( dst, src, stride);		break;	case 1:		Ops->H_Pass_Avrg_8(dst, src, 8, stride, rounding);		break;	case 2:		Ops->H_Pass_8(dst, src, 8, stride, rounding);		break;	case 3:		Ops->H_Pass_Avrg_Up_8(dst, src, 8, stride, rounding);		break;	case 4:		Ops->V_Pass_Avrg_8(dst, src, 8, stride, rounding);		break;	case 5:		Ops->H_Pass_Avrg_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 8, stride, rounding);		break;	case 6:		Ops->H_Pass_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 8, stride, rounding);		break;	case 7:		Ops->H_Pass_Avrg_Up_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 8, stride, rounding);		break;	case 8:		Ops->V_Pass_8(dst, src, 8, stride, rounding);		break;	case 9:		Ops->H_Pass_Avrg_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 8, stride, rounding);		break;	case 10:		Ops->H_Pass_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 8, stride, rounding);		break;	case 11:		Ops->H_Pass_Avrg_Up_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 8, stride, rounding);		break;	case 12:		Ops->V_Pass_Avrg_Up_8(dst, src, 8, stride, rounding);		break;	case 13:		Ops->H_Pass_Avrg_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8(dst, tmp, 8, stride, rounding);		break;	case 14:		Ops->H_Pass_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8( dst, tmp, 8, stride, rounding);		break;	case 15:		Ops->H_Pass_Avrg_Up_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8(dst, tmp, 8, stride, rounding);		break;	}}static void __inlineinterpolate8x8_add_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 uint8_t *src;	uint8_t *dst;	uint8_t *tmp;	int32_t quads;	const XVID_QP_FUNCS *Ops;	const XVID_QP_FUNCS *Ops_Copy;	int32_t x_int, y_int;	const int32_t xRef = (int)x*4 + dx;	const int32_t yRef = (int)y*4 + dy;	Ops = xvid_QP_Add_Funcs;	Ops_Copy = xvid_QP_Funcs;	quads = (dx&3) | ((dy&3)<<2);	x_int = xRef >> 2;	y_int = yRef >> 2;	dst = cur + y * stride + x;	src = refn + y_int * (int)stride + x_int;	tmp = refh; /* we need at least a 16 x stride scratch block */	switch(quads) {	case 0:		/* Misleading function name, there is no halfpel involved		 * just dst and src averaging with rounding=0 */		interpolate8x8_halfpel_add(dst, src, stride, rounding);		break;	case 1:		Ops->H_Pass_Avrg_8(dst, src, 8, stride, rounding);		break;	case 2:		Ops->H_Pass_8(dst, src, 8, stride, rounding);		break;	case 3:		Ops->H_Pass_Avrg_Up_8(dst, src, 8, stride, rounding);		break;	case 4:		Ops->V_Pass_Avrg_8(dst, src, 8, stride, rounding);		break;	case 5:		Ops_Copy->H_Pass_Avrg_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 8, stride, rounding);		break;	case 6:		Ops_Copy->H_Pass_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 8, stride, rounding);		break;	case 7:		Ops_Copy->H_Pass_Avrg_Up_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_8(dst, tmp, 8, stride, rounding);		break;	case 8:		Ops->V_Pass_8(dst, src, 8, stride, rounding);		break;	case 9:		Ops_Copy->H_Pass_Avrg_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 8, stride, rounding);		break;	case 10:		Ops_Copy->H_Pass_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 8, stride, rounding);		break;	case 11:		Ops_Copy->H_Pass_Avrg_Up_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_8(dst, tmp, 8, stride, rounding);		break;	case 12:		Ops->V_Pass_Avrg_Up_8(dst, src, 8, stride, rounding);		break;	case 13:		Ops_Copy->H_Pass_Avrg_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8(dst, tmp, 8, stride, rounding);		break;	case 14:		Ops_Copy->H_Pass_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8( dst, tmp, 8, stride, rounding);		break;	case 15:		Ops_Copy->H_Pass_Avrg_Up_8(tmp, src, 9, stride, rounding);		Ops->V_Pass_Avrg_Up_8(dst, tmp, 8, stride, rounding);		break;	}}#endif  /* _XVID_QPEL_H_ */

⌨️ 快捷键说明

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