From 478394bab70785284af35237712f2e06da8b2937 Mon Sep 17 00:00:00 2001 From: Reinhard Tartler Date: Tue, 2 Feb 2010 20:30:20 +0000 Subject: backport configure bits for cpu runtime detection for libpostproc and libswscale Originally committed as revision 21611 to svn://svn.ffmpeg.org/ffmpeg/branches/0.5 --- configure | 3 +++ libavcodec/ppc/check_altivec.c | 2 +- libpostproc/postprocess.c | 14 +++++++------- libswscale/swscale.c | 20 ++++++++++---------- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/configure b/configure index 04fc73d0ce..fa9d670ef9 100755 --- a/configure +++ b/configure @@ -103,6 +103,7 @@ show_help(){ echo " --disable-golomb disable Golomb code" echo " --disable-mdct disable MDCT code" echo " --disable-rdft disable RDFT code" + echo " --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)" echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation" echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers" echo " --enable-beos-netserver enable BeOS netserver" @@ -805,6 +806,7 @@ CONFIG_LIST=" postproc powerpc_perf rdft + runtime_cpudetect shared small static @@ -2268,6 +2270,7 @@ if test "$extra_version" != ""; then echo "version string suffix $extra_version" fi echo "big-endian ${bigendian-no}" +echo "runtime cpu detection ${runtime_cpudetect-no}" if enabled x86; then echo "yasm ${yasm-no}" echo "MMX enabled ${mmx-no}" diff --git a/libavcodec/ppc/check_altivec.c b/libavcodec/ppc/check_altivec.c index e034ceba41..08cc0f4374 100644 --- a/libavcodec/ppc/check_altivec.c +++ b/libavcodec/ppc/check_altivec.c @@ -63,7 +63,7 @@ int has_altivec(void) if (err == 0) return has_vu != 0; return 0; -#elif defined(RUNTIME_CPUDETECT) +#elif CONFIG_RUNTIME_CPUDETECT int proc_ver; // Support of mfspr PVR emulation added in Linux 2.6.17. __asm__ volatile("mfspr %0, 287" : "=r" (proc_ver)); diff --git a/libpostproc/postprocess.c b/libpostproc/postprocess.c index 4cfbaad7ca..b5b6649f93 100644 --- a/libpostproc/postprocess.c +++ b/libpostproc/postprocess.c @@ -554,7 +554,7 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, int step, int stride, //Note: we have C, MMX, MMX2, 3DNOW version there is no 3DNOW+MMX2 one //Plain C versions -#if !(HAVE_MMX || HAVE_ALTIVEC) || defined (RUNTIME_CPUDETECT) +#if !(HAVE_MMX || HAVE_ALTIVEC) || CONFIG_RUNTIME_CPUDETECT #define COMPILE_C #endif @@ -564,15 +564,15 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, int step, int stride, #if ARCH_X86 -#if (HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT) +#if (HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || CONFIG_RUNTIME_CPUDETECT #define COMPILE_MMX #endif -#if HAVE_MMX2 || defined (RUNTIME_CPUDETECT) +#if HAVE_MMX2 || CONFIG_RUNTIME_CPUDETECT #define COMPILE_MMX2 #endif -#if (HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT) +#if (HAVE_AMD3DNOW && !HAVE_MMX2) || CONFIG_RUNTIME_CPUDETECT #define COMPILE_3DNOW #endif #endif /* ARCH_X86 */ @@ -645,7 +645,7 @@ static inline void postProcess(const uint8_t src[], int srcStride, uint8_t dst[] // Using ifs here as they are faster than function pointers although the // difference would not be measurable here but it is much better because // someone might exchange the CPU whithout restarting MPlayer ;) -#ifdef RUNTIME_CPUDETECT +#if CONFIG_RUNTIME_CPUDETECT #if ARCH_X86 // ordered per speed fastest first if(c->cpuCaps & PP_CPU_CAPS_MMX2) @@ -664,7 +664,7 @@ static inline void postProcess(const uint8_t src[], int srcStride, uint8_t dst[] #endif postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); #endif -#else //RUNTIME_CPUDETECT +#else //CONFIG_RUNTIME_CPUDETECT #if HAVE_MMX2 postProcess_MMX2(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); #elif HAVE_AMD3DNOW @@ -676,7 +676,7 @@ static inline void postProcess(const uint8_t src[], int srcStride, uint8_t dst[] #else postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); #endif -#endif //!RUNTIME_CPUDETECT +#endif //!CONFIG_RUNTIME_CPUDETECT } //static void postProcess(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, diff --git a/libswscale/swscale.c b/libswscale/swscale.c index 4338acee03..0c089c810a 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -955,27 +955,27 @@ static inline void yuv2rgbXinC_full(SwsContext *c, int16_t *lumFilter, int16_t * //Note: we have C, X86, MMX, MMX2, 3DNOW versions, there is no 3DNOW+MMX2 one //Plain C versions -#if ((!HAVE_MMX || !CONFIG_GPL) && !HAVE_ALTIVEC) || defined (RUNTIME_CPUDETECT) +#if ((!HAVE_MMX || !CONFIG_GPL) && !HAVE_ALTIVEC) || CONFIG_RUNTIME_CPUDETECT #define COMPILE_C #endif #if ARCH_PPC -#if HAVE_ALTIVEC || defined (RUNTIME_CPUDETECT) +#if HAVE_ALTIVEC || CONFIG_RUNTIME_CPUDETECT #define COMPILE_ALTIVEC #endif #endif //ARCH_PPC #if ARCH_X86 -#if ((HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT)) && CONFIG_GPL +#if ((HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || CONFIG_RUNTIME_CPUDETECT) && CONFIG_GPL #define COMPILE_MMX #endif -#if (HAVE_MMX2 || defined (RUNTIME_CPUDETECT)) && CONFIG_GPL +#if (HAVE_MMX2 || CONFIG_RUNTIME_CPUDETECT) && CONFIG_GPL #define COMPILE_MMX2 #endif -#if ((HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT)) && CONFIG_GPL +#if ((HAVE_AMD3DNOW && !HAVE_MMX2) || CONFIG_RUNTIME_CPUDETECT) && CONFIG_GPL #define COMPILE_3DNOW #endif #endif //ARCH_X86 @@ -1636,7 +1636,7 @@ static void globalInit(void){ static SwsFunc getSwsFunc(int flags){ -#if defined(RUNTIME_CPUDETECT) +#if CONFIG_RUNTIME_CPUDETECT #if ARCH_X86 && CONFIG_GPL // ordered per speed fastest first if (flags & SWS_CPU_CAPS_MMX2) @@ -1657,7 +1657,7 @@ static SwsFunc getSwsFunc(int flags){ #endif return swScale_C; #endif /* ARCH_X86 && CONFIG_GPL */ -#else //RUNTIME_CPUDETECT +#else //CONFIG_RUNTIME_CPUDETECT #if HAVE_MMX2 return swScale_MMX2; #elif HAVE_AMD3DNOW @@ -1669,7 +1669,7 @@ static SwsFunc getSwsFunc(int flags){ #else return swScale_C; #endif -#endif //!RUNTIME_CPUDETECT +#endif //!CONFIG_RUNTIME_CPUDETECT } static int PlanarToNV12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, @@ -2193,7 +2193,7 @@ SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, int d __asm__ volatile("emms\n\t"::: "memory"); #endif -#if !defined(RUNTIME_CPUDETECT) //ensure that the flags match the compiled variant if cpudetect is off +#if !CONFIG_RUNTIME_CPUDETECT //ensure that the flags match the compiled variant if cpudetect is off flags &= ~(SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2|SWS_CPU_CAPS_3DNOW|SWS_CPU_CAPS_ALTIVEC|SWS_CPU_CAPS_BFIN); #if HAVE_MMX2 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2; @@ -2206,7 +2206,7 @@ SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, int d #elif ARCH_BFIN flags |= SWS_CPU_CAPS_BFIN; #endif -#endif /* RUNTIME_CPUDETECT */ +#endif /* CONFIG_RUNTIME_CPUDETECT */ if (clip_table[512] != 255) globalInit(); if (!rgb15to16) sws_rgb2rgb_init(flags); -- cgit v1.2.3