[svn] / trunk / xvidcore / src / image / qpel.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/image/qpel.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1586, Wed Jan 5 23:02:15 2005 UTC revision 1988, Wed May 18 09:10:05 2011 UTC
# Line 19  Line 19 
19   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   * $Id: qpel.c,v 1.5 2005-01-05 23:02:15 edgomez Exp $   * $Id$
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
26  #ifndef XVID_AUTO_INCLUDE  #ifndef XVID_AUTO_INCLUDE
27    
28    #include <stdio.h>
29    
30  #include "../portab.h"  #include "../portab.h"
31  #include "qpel.h"  #include "qpel.h"
32    
# Line 197  Line 199 
199  /* Global scope hooks  /* Global scope hooks
200   ****************************************************************************/   ****************************************************************************/
201    
202  XVID_QP_FUNCS *xvid_QP_Funcs = 0;  XVID_QP_FUNCS *xvid_QP_Funcs = NULL;
203  XVID_QP_FUNCS *xvid_QP_Add_Funcs = 0;  XVID_QP_FUNCS *xvid_QP_Add_Funcs = NULL;
204    
205  /* Reference plain C impl. declaration  /* Reference plain C impl. declaration
206   ****************************************************************************/   ****************************************************************************/
# Line 241  Line 243 
243  /* mmx impl. declaration (see. qpel_mmx.asm  /* mmx impl. declaration (see. qpel_mmx.asm
244   ****************************************************************************/   ****************************************************************************/
245    
246  #ifdef ARCH_IS_IA32  #if defined (ARCH_IS_IA32) || defined(ARCH_IS_X86_64)
247  extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_16_mmx);  extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_16_mmx);
248  extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_16_mmx);  extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_16_mmx);
249  extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_Up_16_mmx);  extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_Up_16_mmx);
# Line 340  Line 342 
342    
343  #endif /* ARCH_IS_PPC */  #endif /* ARCH_IS_PPC */
344    
 /* mmx impl. (for 64bit bus) declaration (see. qpel_mmx.asm  
  ****************************************************************************/  
   
 #ifdef ARCH_IS_X86_64  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_Up_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_Up_16_x86_64);  
   
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_8_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_8_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_Up_8_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_8_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_8_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_Up_8_x86_64);  
   
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Add_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_Add_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_Up_Add_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Add_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_Add_16_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_Up_Add_16_x86_64);  
   
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_8_Add_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_8_Add_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_H_Pass_Avrg_Up_8_Add_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_8_Add_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_8_Add_x86_64);  
 extern XVID_QP_PASS_SIGNATURE(xvid_V_Pass_Avrg_Up_8_Add_x86_64);  
   
 XVID_QP_FUNCS xvid_QP_Funcs_x86_64 = {  
         xvid_H_Pass_16_x86_64, xvid_H_Pass_Avrg_16_x86_64, xvid_H_Pass_Avrg_Up_16_x86_64,  
         xvid_V_Pass_16_x86_64, xvid_V_Pass_Avrg_16_x86_64, xvid_V_Pass_Avrg_Up_16_x86_64,  
   
         xvid_H_Pass_8_x86_64, xvid_H_Pass_Avrg_8_x86_64, xvid_H_Pass_Avrg_Up_8_x86_64,  
         xvid_V_Pass_8_x86_64, xvid_V_Pass_Avrg_8_x86_64, xvid_V_Pass_Avrg_Up_8_x86_64  
 };  
   
 XVID_QP_FUNCS xvid_QP_Add_Funcs_x86_64 = {  
         xvid_H_Pass_Add_16_x86_64, xvid_H_Pass_Avrg_Add_16_x86_64, xvid_H_Pass_Avrg_Up_Add_16_x86_64,  
         xvid_V_Pass_Add_16_x86_64, xvid_V_Pass_Avrg_Add_16_x86_64, xvid_V_Pass_Avrg_Up_Add_16_x86_64,  
   
         xvid_H_Pass_8_Add_x86_64, xvid_H_Pass_Avrg_8_Add_x86_64, xvid_H_Pass_Avrg_Up_8_Add_x86_64,  
         xvid_V_Pass_8_Add_x86_64, xvid_V_Pass_Avrg_8_Add_x86_64, xvid_V_Pass_Avrg_Up_8_Add_x86_64,  
 };  
 #endif /* ARCH_IS_X86_64 */  
   
345  /* tables for ASM  /* tables for ASM
346   ****************************************************************************/   ****************************************************************************/
347    
 #ifdef ARCH_IS_IA32  
 uint16_t xvid_Expand_mmx[256][4]; /* 8b -> 64b expansion table */  
 #endif  
348    
349  #ifdef ARCH_IS_X86_64  #if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)
350  extern uint16_t xvid_Expand_mmx[][]; /* 8b -> 64b expansion table */  /* These symbols will be used outside this file, so tell the compiler
351     * they're global. */
352    extern uint16_t xvid_Expand_mmx[256][4]; /* 8b -> 64b expansion table */
353    
354    extern int16_t xvid_FIR_1_0_0_0[256][4];
355    extern int16_t xvid_FIR_3_1_0_0[256][4];
356    extern int16_t xvid_FIR_6_3_1_0[256][4];
357    extern int16_t xvid_FIR_14_3_2_1[256][4];
358    extern int16_t xvid_FIR_20_6_3_1[256][4];
359    extern int16_t xvid_FIR_20_20_6_3[256][4];
360    extern int16_t xvid_FIR_23_19_6_3[256][4];
361    extern int16_t xvid_FIR_7_20_20_6[256][4];
362    extern int16_t xvid_FIR_6_20_20_6[256][4];
363    extern int16_t xvid_FIR_6_20_20_7[256][4];
364    extern int16_t xvid_FIR_3_6_20_20[256][4];
365    extern int16_t xvid_FIR_3_6_19_23[256][4];
366    extern int16_t xvid_FIR_1_3_6_20[256][4];
367    extern int16_t xvid_FIR_1_2_3_14[256][4];
368    extern int16_t xvid_FIR_0_1_3_6[256][4];
369    extern int16_t xvid_FIR_0_0_1_3[256][4];
370    extern int16_t xvid_FIR_0_0_0_1[256][4];
371  #endif  #endif
372    
373  /* Alternate way of filtering (cf. USE_TABLES flag in qpel_mmx.asm)  /* Arrays definitions, according to the target platform */
374   *  
375   * 17 tables, 2K each => 34K  #if !defined(ARCH_IS_X86_64) && !defined(ARCH_IS_IA32)
376   * Mirroring can be acheived composing 11 basic tables  /* Only ia32/ia64 will use these tables outside this file so mark them
377   * (for instance: (23,19,-6,3)=(20,20,-6,3)+(3,-1,0,0)  * static for all other archs */
378   * Using Symmetries (and bswap) could reduce further  #define __SCOPE static
379   * the memory to 7 tables (->14K). */  __SCOPE int16_t xvid_FIR_1_0_0_0[256][4];
380  #ifdef ARCH_IS_X86_64  __SCOPE int16_t xvid_FIR_3_1_0_0[256][4];
381  extern int16_t xvid_FIR_1_0_0_0[][];  __SCOPE int16_t xvid_FIR_6_3_1_0[256][4];
382  extern int16_t xvid_FIR_3_1_0_0[][];  __SCOPE int16_t xvid_FIR_14_3_2_1[256][4];
383  extern int16_t xvid_FIR_6_3_1_0[][];  __SCOPE int16_t xvid_FIR_20_6_3_1[256][4];
384  extern int16_t xvid_FIR_14_3_2_1[][];  __SCOPE int16_t xvid_FIR_20_20_6_3[256][4];
385  extern int16_t xvid_FIR_20_6_3_1[][];  __SCOPE int16_t xvid_FIR_23_19_6_3[256][4];
386  extern int16_t xvid_FIR_20_20_6_3[][];  __SCOPE int16_t xvid_FIR_7_20_20_6[256][4];
387  extern int16_t xvid_FIR_23_19_6_3[][];  __SCOPE int16_t xvid_FIR_6_20_20_6[256][4];
388  extern int16_t xvid_FIR_7_20_20_6[][];  __SCOPE int16_t xvid_FIR_6_20_20_7[256][4];
389  extern int16_t xvid_FIR_6_20_20_6[][];  __SCOPE int16_t xvid_FIR_3_6_20_20[256][4];
390  extern int16_t xvid_FIR_6_20_20_7[][];  __SCOPE int16_t xvid_FIR_3_6_19_23[256][4];
391  extern int16_t xvid_FIR_3_6_20_20[][];  __SCOPE int16_t xvid_FIR_1_3_6_20[256][4];
392  extern int16_t xvid_FIR_3_6_19_23[][];  __SCOPE int16_t xvid_FIR_1_2_3_14[256][4];
393  extern int16_t xvid_FIR_1_3_6_20[][];  __SCOPE int16_t xvid_FIR_0_1_3_6[256][4];
394  extern int16_t xvid_FIR_1_2_3_14[][];  __SCOPE int16_t xvid_FIR_0_0_1_3[256][4];
395  extern int16_t xvid_FIR_0_1_3_6[][];  __SCOPE int16_t xvid_FIR_0_0_0_1[256][4];
 extern int16_t xvid_FIR_0_0_1_3[][];  
 extern int16_t xvid_FIR_0_0_0_1[][];  
 #else  
 int16_t xvid_FIR_1_0_0_0[256][4];  
 int16_t xvid_FIR_3_1_0_0[256][4];  
 int16_t xvid_FIR_6_3_1_0[256][4];  
 int16_t xvid_FIR_14_3_2_1[256][4];  
 int16_t xvid_FIR_20_6_3_1[256][4];  
 int16_t xvid_FIR_20_20_6_3[256][4];  
 int16_t xvid_FIR_23_19_6_3[256][4];  
 int16_t xvid_FIR_7_20_20_6[256][4];  
 int16_t xvid_FIR_6_20_20_6[256][4];  
 int16_t xvid_FIR_6_20_20_7[256][4];  
 int16_t xvid_FIR_3_6_20_20[256][4];  
 int16_t xvid_FIR_3_6_19_23[256][4];  
 int16_t xvid_FIR_1_3_6_20[256][4];  
 int16_t xvid_FIR_1_2_3_14[256][4];  
 int16_t xvid_FIR_0_1_3_6[256][4];  
 int16_t xvid_FIR_0_0_1_3[256][4];  
 int16_t xvid_FIR_0_0_0_1[256][4];  
396  #endif  #endif
397    
398  static void Init_FIR_Table(int16_t Tab[][4],  static void Init_FIR_Table(int16_t Tab[][4],
# Line 458  Line 408 
408  }  }
409    
410    
411  void xvid_Init_QP()  void xvid_Init_QP(void)
412  {  {
413  #ifdef ARCH_IS_IA32  #if defined (ARCH_IS_IA32) || defined (ARCH_IS_X86_64)
414          int i;          int i;
415    
416          for(i=0; i<256; ++i) {          for(i=0; i<256; ++i) {

Legend:
Removed from v.1586  
changed lines
  Added in v.1988

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4