diff options
Diffstat (limited to 'libmpeg2')
-rw-r--r-- | libmpeg2/cpu_accel.c | 23 | ||||
-rw-r--r-- | libmpeg2/mpeg2.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/libmpeg2/cpu_accel.c b/libmpeg2/cpu_accel.c index 715b126642..ee90a583ae 100644 --- a/libmpeg2/cpu_accel.c +++ b/libmpeg2/cpu_accel.c @@ -26,6 +26,7 @@ */ #include "config.h" +#include "cpudetect.h" #include <inttypes.h> @@ -35,8 +36,16 @@ #ifdef ACCEL_DETECT #if defined(ARCH_X86) || defined(ARCH_X86_64) + +/* MPlayer imports libmpeg2 as decoder, which detects MMX / 3DNow! + * instructions via assembly. However, it is regarded as duplicaed work + * in MPlayer, so that we enforce to use MPlayer's implementation. + */ +#define USE_MPLAYER_CPUDETECT + static inline uint32_t arch_accel (void) { +#if !defined(USE_MPLAYER_CPUDETECT) uint32_t eax, ebx, ecx, edx; int AMD; uint32_t caps; @@ -109,6 +118,20 @@ static inline uint32_t arch_accel (void) caps |= MPEG2_ACCEL_X86_MMXEXT; return caps; +#else /* USE_MPLAYER_CPUDETECT: Use MPlayer's cpu capability property */ + caps = 0; + if (gCpuCaps.hasMMX) + caps |= MPEG2_ACCEL_X86_MMX; + if (gCpuCaps.hasSSE2) + caps |= MPEG2_ACCEL_X86_SSE2; + if (gCpuCaps.hasMMX2) + caps |= MPEG2_ACCEL_X86_MMXEXT; + if (gCpuCaps.has3DNow) + caps |= MPEG2_ACCEL_X86_3DNOW; + + return caps; + +#endif /* USE_MPLAYER_CPUDETECT */ } #endif /* ARCH_X86 || ARCH_X86_64 */ diff --git a/libmpeg2/mpeg2.h b/libmpeg2/mpeg2.h index 388d885a85..fc65165769 100644 --- a/libmpeg2/mpeg2.h +++ b/libmpeg2/mpeg2.h @@ -159,6 +159,7 @@ void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf); #define MPEG2_ACCEL_X86_MMX 1 #define MPEG2_ACCEL_X86_3DNOW 2 #define MPEG2_ACCEL_X86_MMXEXT 4 +#define MPEG2_ACCEL_X86_SSE2 8 #define MPEG2_ACCEL_PPC_ALTIVEC 1 #define MPEG2_ACCEL_ALPHA 1 #define MPEG2_ACCEL_ALPHA_MVI 2 |