www.pudn.com > mpeg4_DECORE.rar > postprocess_mmx.h


/************************************************************************** 
 *                                                                        * 
 * This code has been developed by John Funnell. This software is an      * 
 * implementation of a part of one or more MPEG-4 Video tools as          * 
 * specified in ISO/IEC 14496-2 standard.  Those intending to use this    * 
 * software module in hardware or software products are advised that its  * 
 * use may infringe existing patents or copyrights, and any such use      * 
 * would be at such party's own risk.  The original developer of this     * 
 * software module and his/her company, and subsequent editors and their  * 
 * companies (including Project Mayo), will have no liability for use of  * 
 * this software or modifications or derivatives thereof.                 * 
 *                                                                        * 
 * Project Mayo gives users of the Codec a license to this software       * 
 * module or modifications thereof for use in hardware or software        * 
 * products claiming conformance to the MPEG-4 Video Standard as          * 
 * described in the Open DivX license.                                    * 
 *                                                                        * 
 * The complete Open DivX license can be found at                         * 
 * http://www.projectmayo.com/opendivx/license.php                        * 
 *                                                                        * 
 **************************************************************************/ 
/** 
*  Copyright (C) 2001 - Project Mayo 
 * 
 * John Funnell 
 * 
 * DivX Advanced Research Center  
* 
**/ 
// postprocess_mmx.h // 
 
/*** 
 
References:   
 * ISO/IEC 14496-2 
 * MoMuSys-FDIS-V1.0-990812 
 * Intel Architecture Software Developer's Manual 
   Volume 2: Instruction Set Reference 
 
***/ 
 
/* Header to be included in all component MMX files */ 
 
#ifndef _POSTPROCESS_MMX_H_ 
#define _POSTPROCESS_MMX_H_ 
 
 
/* include the public API header file */ 
#include "postprocess.h"  
 
 
 
 
/*********************** self checking ***********************/ 
 
/* PP_SELF_CHECK enables exhaustive self-checking of all MMX routines */ 
/* self checking is broken in the "wine cl.exe" environment as printf() crashes */ 
//#define PP_SELF_CHECK 
 
/* we only ever printf() if self-checking is turned on at compile time */ 
#ifdef PP_SELF_CHECK 
 #include  
#endif 
 
 
 
 
 
/******************** inlining functions ***********************/ 
 
/* 
 If we want the component functions of the filter to be inlined into 
 the main filter loops, then we need to arrange for their source files 
 to be #include'd and for them to be identified as static inline 
*/ 
#ifdef PP_COMPONENTS_INLINE 
 #ifdef WIN32 
  #define INLINE  __inline 
 #else 
  #define INLINE  inline 
 #endif 
#else 
 #define INLINE 
#endif  
 
 
 
 
 
/******************* Experimental prefetch *****************/ 
/* it would seem my version of Microsoft's tools do not recognise prefetch  
   instructions so this isn't working! (It worked for gcc) */ 
//#define PREFETCH_ENABLE 
 
/* the optimum values (8 and 8) for these two were discovered by experimentation */ 
//#define PREFETCH_AHEAD_H 8 
//#define PREFETCH_AHEAD_V 8 
 
 
 
 
 
 
/******************* general, useful macros ****************/ 
#define ABS(a)     ( (a)>0 ? (a) : -(a) ) 
#define SIGN(a)    ( (a)<0 ? -1 : 1 ) 
#define MIN(a, b)  ( (a)<(b) ? (a) : (b) ) 
#define MAX(a, b)  ( (a)>(b) ? (a) : (b) ) 
 
 
 
 
 
 
/******************** component function prototypes **************/ 
int deblock_horiz_useDC(uint8_t *v, int stride); 
int deblock_horiz_DC_on(uint8_t *v, int stride, int QP); 
void deblock_horiz_lpf9(uint8_t *v, int stride, int QP); 
void deblock_horiz_default_filter(uint8_t *v, int stride, int QP); 
void deblock_horiz(uint8_t *image, int width, int stride, QP_STORE_T *QP_store, int QP_stride, int chromaFlag); 
int deblock_vert_useDC(uint8_t *v, int stride); 
int deblock_vert_DC_on(uint8_t *v, int stride, int QP); 
void deblock_vert_copy_and_unpack(int stride, uint8_t *source, uint64_t *dest, int n); 
void deblock_vert_choose_p1p2(uint8_t *v, int stride, uint64_t *p1p2, int QP); 
void deblock_vert_lpf9(uint64_t *v_local, uint64_t *p1p2, uint8_t *v, int stride); 
void deblock_vert_default_filter(uint8_t *v, int stride, int QP); 
void deblock_vert( uint8_t *image, int width, int stride, QP_STORE_T *QP_store, int QP_stride, int chromaFlag); 
void fast_copy(unsigned char *src, int src_stride, 
                 unsigned char *dst, int dst_stride,  
                 int horizontal_size,   int vertical_size); 
void do_emms(); 
 
 
 
 
#endif