mirror of
https://github.com/webmproject/libwebp.git
synced 2025-07-16 05:49:51 +02:00
add runtime NEON detection
configure gets 2 new options: --enable-neon / --enable-neon-rtcd the NEON modules are split to their own convenience lib and built with auto-detected flags if none are given via CFLAGS. the /proc/cpuinfo check will only be used for armv7 targets whose toolchain does not enable NEON by default or didn't have NEON forced by the CFLAGS from the environment. Change-Id: I2755bc1d065d5d6ee6143b44978c2082f8bef1c5
This commit is contained in:
@ -13,6 +13,11 @@
|
||||
|
||||
#include "./dsp.h"
|
||||
|
||||
#if defined(WEBP_HAVE_NEON_RTCD)
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#if defined(WEBP_ANDROID_NEON)
|
||||
#include <cpu-features.h>
|
||||
#endif
|
||||
@ -142,8 +147,27 @@ VP8CPUInfo VP8GetCPUInfo = AndroidCPUInfo;
|
||||
// define a dummy function to enable turning off NEON at runtime by setting
|
||||
// VP8DecGetCPUInfo = NULL
|
||||
static int armCPUInfo(CPUFeature feature) {
|
||||
(void)feature;
|
||||
if (feature != kNEON) return 0;
|
||||
#if defined(__linux__) && defined(WEBP_HAVE_NEON_RTCD)
|
||||
{
|
||||
int has_neon = 0;
|
||||
char line[200];
|
||||
FILE* const cpuinfo = fopen("/proc/cpuinfo", "r");
|
||||
if (cpuinfo == NULL) return 0;
|
||||
while (fgets(line, sizeof(line), cpuinfo)) {
|
||||
if (!strncmp(line, "Features", 8)) {
|
||||
if (strstr(line, " neon ") != NULL) {
|
||||
has_neon = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(cpuinfo);
|
||||
return has_neon;
|
||||
}
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
VP8CPUInfo VP8GetCPUInfo = armCPUInfo;
|
||||
#elif defined(WEBP_USE_MIPS32) || defined(WEBP_USE_MIPS_DSP_R2)
|
||||
|
Reference in New Issue
Block a user