📄 interpolate8x8.h
字号:
#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;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -