--- xvid.c 2002/03/27 12:58:29 1.6 +++ xvid.c 2002/06/12 20:38:40 1.15 @@ -53,8 +53,13 @@ #include "motion/sad.h" #include "utils/emms.h" #include "utils/timer.h" +#include "bitstream/mbcoding.h" -int xvid_init(void *handle, int opt, void *param1, void *param2) +int +xvid_init(void *handle, + int opt, + void *param1, + void *param2) { int cpu_flags; XVID_INIT_PARAM *init_param; @@ -62,7 +67,7 @@ init_param = (XVID_INIT_PARAM *) param1; // force specific cpu settings? - if((init_param->cpu_flags & XVID_CPU_FORCE) > 0) + if ((init_param->cpu_flags & XVID_CPU_FORCE) > 0) cpu_flags = init_param->cpu_flags; else { @@ -76,10 +81,13 @@ // initialize the function pointers idct_int32_init(); - + init_vlc_tables(); + fdct = fdct_int32; idct = idct_int32; + sadInit = 0; + emms = emms_c; quant_intra = quant_intra_c; @@ -95,6 +103,7 @@ transfer_8to16copy = transfer_8to16copy_c; transfer_16to8copy = transfer_16to8copy_c; transfer_8to16sub = transfer_8to16sub_c; + transfer_8to16sub2 = transfer_8to16sub2_c; transfer_16to8add = transfer_16to8add_c; transfer8x8_copy = transfer8x8_copy_c; @@ -122,11 +131,12 @@ calc_cbp = calc_cbp_c; sad16 = sad16_c; + sad16bi = sad16bi_c; sad8 = sad8_c; dev16 = dev16_c; #ifdef ARCH_X86 - if((cpu_flags & XVID_CPU_MMX) > 0) { + if ((cpu_flags & XVID_CPU_MMX) > 0) { fdct = fdct_mmx; idct = idct_mmx; @@ -170,7 +180,7 @@ } - if((cpu_flags & XVID_CPU_MMXEXT) > 0) { + if ((cpu_flags & XVID_CPU_MMXEXT) > 0) { idct = idct_xmm; interpolate8x8_halfpel_h = interpolate8x8_halfpel_h_xmm; interpolate8x8_halfpel_v = interpolate8x8_halfpel_v_xmm; @@ -183,21 +193,41 @@ } - if((cpu_flags & XVID_CPU_3DNOW) > 0) { + if ((cpu_flags & XVID_CPU_3DNOW) > 0) { interpolate8x8_halfpel_h = interpolate8x8_halfpel_h_3dn; interpolate8x8_halfpel_v = interpolate8x8_halfpel_v_3dn; interpolate8x8_halfpel_hv = interpolate8x8_halfpel_hv_3dn; } + if ((cpu_flags & XVID_CPU_SSE2) > 0) { +#ifdef EXPERIMENTAL_SSE2_CODE + quant_intra = quant_intra_sse2; + dequant_intra = dequant_intra_sse2; + quant_inter = quant_inter_sse2; + dequant_inter = dequant_inter_sse2; + + calc_cbp = calc_cbp_sse2; + sad16 = sad16_sse2; + dev16 = dev16_sse2; + idct = idct_sse2; + fdct = fdct_sse2; +#endif + } #endif #ifdef ARCH_PPC #ifdef ARCH_PPC_ALTIVEC calc_cbp = calc_cbp_altivec; + fdct = fdct_altivec; + idct = idct_altivec; + sadInit = sadInit_altivec; + sad16 = sad16_altivec; + sad8 = sad8_altivec; + dev16 = dev16_altivec; #else calc_cbp = calc_cbp_ppc; #endif #endif - + // API version init_param->api_version = API_VERSION; @@ -207,39 +237,46 @@ return XVID_ERR_OK; } -int xvid_decore(void * handle, int opt, void * param1, void * param2) +int +xvid_decore(void *handle, + int opt, + void *param1, + void *param2) { - switch (opt) - { - case XVID_DEC_DECODE : - return decoder_decode((DECODER *) handle, (XVID_DEC_FRAME *) param1); - - case XVID_DEC_CREATE : - return decoder_create((XVID_DEC_PARAM *) param1); - - case XVID_DEC_DESTROY : - return decoder_destroy((DECODER *) handle); + switch (opt) { + case XVID_DEC_DECODE: + return decoder_decode((DECODER *) handle, (XVID_DEC_FRAME *) param1); + + case XVID_DEC_CREATE: + return decoder_create((XVID_DEC_PARAM *) param1); + + case XVID_DEC_DESTROY: + return decoder_destroy((DECODER *) handle); default: - return XVID_ERR_FAIL; - } + return XVID_ERR_FAIL; + } } -int xvid_encore(void * handle, int opt, void * param1, void * param2) +int +xvid_encore(void *handle, + int opt, + void *param1, + void *param2) { - switch (opt) - { - case XVID_ENC_ENCODE : - return encoder_encode((Encoder *) handle, (XVID_ENC_FRAME *) param1, (XVID_ENC_STATS *) param2); - - case XVID_ENC_CREATE : - return encoder_create((XVID_ENC_PARAM *) param1); - - case XVID_ENC_DESTROY : - return encoder_destroy((Encoder *) handle); + switch (opt) { + case XVID_ENC_ENCODE: + return encoder_encode((Encoder *) handle, (XVID_ENC_FRAME *) param1, + (XVID_ENC_STATS *) param2); + + case XVID_ENC_CREATE: + return encoder_create((XVID_ENC_PARAM *) param1); + + case XVID_ENC_DESTROY: + return encoder_destroy((Encoder *) handle); default: - return XVID_ERR_FAIL; - } + return XVID_ERR_FAIL; + } }