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

📄 mvmc.h

📁 优化过的xvid1.1.2源代码
💻 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 + -