📄 mvmc.h
字号:
#ifndef __MVMC_H__
#define __MVMC_H__
/*this file has many functions which compresate mb,but these functions
* have some rule. first part is p_frame function, second is B_frame
* the second functions name have "_add",
* in each part, have 1/2 1/4 pix compensation*/
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//
// these is p_vop functions
//
//
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
/*memory copy*/
/* src is 16 bits ---> dst 8 bits*/
/* the older version name is transfer_16to8copy_c,extracted
* from mem_transfer.c
* 20070122 wuhaibin */
void transfer_16to8copy(uint8_t * const dst,
const int16_t * const src,
uint32_t stride);
/* src is 8 bits --> dst is 8 bits */
/* the older version name is transfer_8to8copy_c,extracted
* from mem_transfer.c
* 20070122 wuhaibin */
void transfer8x8_copy(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride);
/* src is 8 bits --> dst is 8 bits but 8 x 4*/
/* the older version name is transfer_8to4copy_c,extracted
* from mem_transfer.c
* 20070122 wuhaibin */
void transfer8x4_copy(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride);
/* memory copy is above*/
/* these function is 1/2 pix compensation*/
/*first is 8x8 */
/* the older version name is interpolate8x8_halfpel_h_c,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x8_halfpel_h(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride,
const uint32_t rounding);
/* the older version name is interpolate8x8_halfpel_v_c,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x8_halfpel_v(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride,
const uint32_t rounding);
/* the older version name is interpolate8x8_halfpel_hv_c,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x8_halfpel_hv(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride,
const uint32_t rounding);
/* this is call function */
/* from mem_transfer.c
* 20070122 wuhaibin */
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);
/* from mem_transfer.c
* 20070122 wuhaibin */
void interpolate16x16_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);
/*second is 8x4 */
/* the older version name is interpolate8x4_halfpel_h_c,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x4_halfpel_h(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride,
const uint32_t rounding);
/* the older version name is interpolate8x4_halfpel_v_c,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x4_halfpel_v(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride,
const uint32_t rounding);
/* the older version name is interpolate8x4_halfpel_hv_c,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x4_halfpel_hv(uint8_t * const dst,
const uint8_t * const src,
const uint32_t stride,
const uint32_t rounding);
/* this is call function */
/* the older version name is interpolate8x4_switch,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x4_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);
/* 1/2 pix compensation is above */
/* 1/4 pix compensation */
/* the next 6 functions is created with FUNC_H/V/HA in qpel.c
* the SIZE = 16 and store(i,C) == (Dst[i]) = C
* 20070122 wuhaibin */
/* first 16 x16*/
void interpolate16x16_quarterpel_h(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_ha(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_ha_up(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_v(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_va(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_va_up(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
/* this is calling function*/
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);
/*second 8 x 8 */
/* the next 6 functions is created with FUNC_H/V/HA in qpel.c
* the SIZE = 16 and store(i,C) == (Dst[i]) = C
*20070122 wuhaibin */
void interpolate8x8_quarterpel_h(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_ha(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_ha_up(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_v(uint8_t *Dst, const uint8_t *Src, int32_t W, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_va(uint8_t *Dst, const uint8_t *Src, int32_t W, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_va_up(uint8_t *Dst, const uint8_t *Src, int32_t W, int32_t BpS, int32_t Rnd);
/* this is calling functions*/
void interpolate8x8_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);
/* 1/4 pix cpmpenstation is above*/
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//
// these is B_vop functions
//
//
////////////////////////////////////////////////////////////////////////
/* the older version name is transfer_16to8_add_c,extracted
* from mem_transfer.c
* 20070122 wuhaibin */
void transfer_16to8_add(uint8_t * const dst, const int16_t * const src,uint32_t stride);
/* 1/2 pix compensation */
/* first 8 X 8*/
/* the next 4 functions name have "_c",extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x8_halfpel_add(uint8_t * dst, const uint8_t * src1, const uint8_t *src2,
const uint32_t stride, const uint32_t rounding, const uint32_t height);
void interpolate8x8_halfpel_h_add(uint8_t * const dst, const uint8_t * const src, const uint32_t stride,
const uint32_t rounding);
void interpolate8x8_halfpel_v_add(uint8_t * const dst, const uint8_t * const src, const uint32_t stride,
const uint32_t rounding);
void interpolate8x8_halfpel_hv_add(uint8_t * const dst, const uint8_t * const src, const uint32_t stride,
const uint32_t rounding);
/* this is calling functions*/
/* the older version name is transfer_16to8copy_c,extracted
* from interpolate8x8.c
* 20070122 wuhaibin */
void interpolate8x8_switch_add(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);
/* this is 1/4 pix */
/* the next 6 functions is created with FUNC_H/V/HA in qpel.c
* the SIZE = 16 and store(i,C) == (Dst[i] + C + 1) >> 1
* 20070122 wuhaibin */
/*first 16 x 16*/
void interpolate16x16_quarterpel_h_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_ha_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_ha_up_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_v_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_va_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
void interpolate16x16_quarterpel_va_up_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t RND);
/* this is calling functions*/
/* the older version name is transfer_16to8copy_c,extracted
* from mem_transfer.c
* 20070122 wuhaibin */
void interpolate16x16_quarterpel_add(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);
/* this is the second 8x8*/
/* the next 6 functions is created with FUNC_H/V/HA in qpel.c
* the SIZE = 8 and store(i,C) == (Dst[i] + C + 1) >> 1
* 20070122 wuhaibin */
/*second 8 x 8 */
void interpolate8x8_quarterpel_h_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_ha_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_ha_up_add(uint8_t *Dst, const uint8_t *Src, int32_t H, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_v_add(uint8_t *Dst, const uint8_t *Src, int32_t W, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_va_add(uint8_t *Dst, const uint8_t *Src, int32_t W, int32_t BpS, int32_t Rnd);
void interpolate8x8_quarterpel_va_up_add(uint8_t *Dst, const uint8_t *Src, int32_t W, int32_t BpS, int32_t Rnd);
/* this is the calling function*/
/* the older version name is transfer_16to8copy_c,extracted
* from mem_transfer.c
* 20070122 wuhaibin */
void interpolate8x8_quarterpel_add(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);
/* 1/2 pix compensation is above*/
//GMC
/* from gmc.h 20070122 wuhaibin*/
__inline int gmc_sanitize(int value, int quarterpel, int fcode)
{
int length = 1 << (fcode+4);
if (value < -length)
return -length;
else
if(value >= length)
return length-1;
else
return value;
}
/* from gmc.c 20070122 wuhaibin*/
void Predict_16x16_C(const NEW_GMC_DATA * const This,
uint8_t *dst, const uint8_t *src,
int dststride, int srcstride, int x, int y, int rounding);
void Predict_1pt_16x16_C(const NEW_GMC_DATA * const This,
uint8_t *Dst, const uint8_t *Src,
int dststride, int srcstride, int x, int y, int rounding);
void Predict_8x8_C(const NEW_GMC_DATA * const This,
uint8_t *uDst, const uint8_t *uSrc,
uint8_t *vDst, const uint8_t *vSrc,
int dststride, int srcstride, int x, int y, int rounding);
void Predict_1pt_8x8_C(const NEW_GMC_DATA * const This,
uint8_t *uDst, const uint8_t *uSrc,
uint8_t *vDst, const uint8_t *vSrc,
int dststride, int srcstride, int x, int y, int rounding);
void get_average_mv_C(const NEW_GMC_DATA * const Dsp, VECTOR * const mv,
int x, int y, int qpel);
void generate_GMCparameters( int nb_pts, const int accuracy,
const WARPPOINTS *const pts,
const int width, const int height,
NEW_GMC_DATA *const gmc);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -