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.8 2005-11-22 10:23:01 suxen_drol Exp $ |
* $Id: qpel.c,v 1.9 2008-11-26 01:04:34 Isibaar Exp $ |
23 |
* |
* |
24 |
****************************************************************************/ |
****************************************************************************/ |
25 |
|
|
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); |
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 |
|
|
348 |
|
|
349 |
#if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64) |
#if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64) |
350 |
/* These symbols will be used outsie this file, so tell the compiler |
/* These symbols will be used outside this file, so tell the compiler |
351 |
* they're global. Only ia32 will define them in this file, x86_64 |
* they're global. */ |
|
* will do in the assembly files */ |
|
352 |
extern uint16_t xvid_Expand_mmx[256][4]; /* 8b -> 64b expansion table */ |
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]; |
extern int16_t xvid_FIR_1_0_0_0[256][4]; |
371 |
#endif |
#endif |
372 |
|
|
373 |
/* Arrays definitions, according to the target platform */ |
/* Arrays definitions, according to the target platform */ |
|
#ifdef ARCH_IS_IA32 |
|
|
uint16_t xvid_Expand_mmx[256][4]; /* 8b -> 64b expansion table */ |
|
|
#endif |
|
374 |
|
|
375 |
#if !defined(ARCH_IS_X86_64) |
#if !defined(ARCH_IS_X86_64) && !defined(ARCH_IS_IA32) |
376 |
/* Only ia32 will use these tables outside this file so mark them |
/* Only ia32/ia64 will use these tables outside this file so mark them |
377 |
* static for all other archs */ |
* static for all other archs */ |
|
#if defined(ARCH_IS_IA32) |
|
|
#define __SCOPE |
|
|
#else |
|
378 |
#define __SCOPE static |
#define __SCOPE static |
|
#endif |
|
379 |
__SCOPE int16_t xvid_FIR_1_0_0_0[256][4]; |
__SCOPE int16_t xvid_FIR_1_0_0_0[256][4]; |
380 |
__SCOPE int16_t xvid_FIR_3_1_0_0[256][4]; |
__SCOPE int16_t xvid_FIR_3_1_0_0[256][4]; |
381 |
__SCOPE int16_t xvid_FIR_6_3_1_0[256][4]; |
__SCOPE int16_t xvid_FIR_6_3_1_0[256][4]; |
410 |
|
|
411 |
void xvid_Init_QP(void) |
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) { |