|
Kevin Kofler |
c87d486 |
diff -ur qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn
|
|
Kevin Kofler |
c87d486 |
--- qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn 2017-05-18 16:51:44.000000000 +0200
|
|
Kevin Kofler |
c87d486 |
+++ qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn 2017-06-10 02:41:10.317340598 +0200
|
|
Kevin Kofler |
c87d486 |
@@ -196,9 +196,6 @@
|
|
Kevin Kofler |
c87d486 |
]
|
|
Kevin Kofler |
c87d486 |
if (arm_optionally_use_neon) {
|
|
Kevin Kofler |
c87d486 |
# Run-time NEON detection.
|
|
Kevin Kofler |
c87d486 |
- deps = [ "//third_party/android_tools:cpu_features" ]
|
|
Kevin Kofler |
c87d486 |
- # To get the __android_log_print routine
|
|
Kevin Kofler |
c87d486 |
- libs = [ "log" ]
|
|
Kevin Kofler |
c87d486 |
# Detection routine
|
|
Kevin Kofler |
c87d486 |
sources += [ "sp/src/arm/detect.c" ]
|
|
Kevin Kofler |
c87d486 |
}
|
|
Kevin Kofler |
c87d486 |
diff -ur qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c
|
|
Kevin Kofler |
c87d486 |
--- qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c 2017-05-18 16:51:44.000000000 +0200
|
|
Kevin Kofler |
c87d486 |
+++ qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c 2017-06-10 02:38:30.593809570 +0200
|
|
Kevin Kofler |
db8ac78 |
@@ -9,13 +9,57 @@
|
|
Kevin Kofler |
db8ac78 |
*
|
|
Kevin Kofler |
db8ac78 |
*/
|
|
Kevin Kofler |
db8ac78 |
|
|
Kevin Kofler |
db8ac78 |
-#include <cpu-features.h>
|
|
Kevin Kofler |
db8ac78 |
-
|
|
Kevin Kofler |
db8ac78 |
-#include "android/log.h"
|
|
Kevin Kofler |
db8ac78 |
#include "dl/sp/api/omxSP.h"
|
|
Kevin Kofler |
db8ac78 |
|
|
Kevin Kofler |
db8ac78 |
+// For ArmCpuCaps()
|
|
Kevin Kofler |
db8ac78 |
+#include <stdio.h>
|
|
Kevin Kofler |
db8ac78 |
+#include <string.h>
|
|
Kevin Kofler |
db8ac78 |
+
|
|
Kevin Kofler |
db8ac78 |
+// based on libvpx arm_cpudetect.c
|
|
Kevin Kofler |
db8ac78 |
+static int ArmCpuCaps(const char* cpuinfo_name) {
|
|
Kevin Kofler |
db8ac78 |
+ char cpuinfo_line[512];
|
|
Kevin Kofler |
db8ac78 |
+ FILE* f = fopen(cpuinfo_name, "r");
|
|
Kevin Kofler |
db8ac78 |
+ if (!f) {
|
|
Kevin Kofler |
db8ac78 |
+ // Assume Neon if /proc/cpuinfo is unavailable.
|
|
Kevin Kofler |
db8ac78 |
+ // This will occur for Chrome sandbox for Pepper or Render process.
|
|
Kevin Kofler |
db8ac78 |
+ return 1;
|
|
Kevin Kofler |
db8ac78 |
+ }
|
|
Kevin Kofler |
db8ac78 |
+ while (fgets(cpuinfo_line, sizeof(cpuinfo_line) - 1, f)) {
|
|
Kevin Kofler |
db8ac78 |
+ if (memcmp(cpuinfo_line, "Features", 8) == 0) {
|
|
Kevin Kofler |
db8ac78 |
+ char* p = strstr(cpuinfo_line, " neon");
|
|
Kevin Kofler |
db8ac78 |
+ if (p && (p[5] == ' ' || p[5] == '\n')) {
|
|
Kevin Kofler |
db8ac78 |
+ fclose(f);
|
|
Kevin Kofler |
db8ac78 |
+ return 1;
|
|
Kevin Kofler |
db8ac78 |
+ }
|
|
Kevin Kofler |
db8ac78 |
+ // aarch64 uses asimd for Neon.
|
|
Kevin Kofler |
db8ac78 |
+ p = strstr(cpuinfo_line, " asimd");
|
|
Kevin Kofler |
db8ac78 |
+ if (p && (p[6] == ' ' || p[6] == '\n')) {
|
|
Kevin Kofler |
db8ac78 |
+ fclose(f);
|
|
Kevin Kofler |
db8ac78 |
+ return 1;
|
|
Kevin Kofler |
db8ac78 |
+ }
|
|
Kevin Kofler |
db8ac78 |
+ }
|
|
Kevin Kofler |
db8ac78 |
+ }
|
|
Kevin Kofler |
db8ac78 |
+ fclose(f);
|
|
Kevin Kofler |
db8ac78 |
+ return 0;
|
|
Kevin Kofler |
db8ac78 |
+}
|
|
Kevin Kofler |
db8ac78 |
+
|
|
Kevin Kofler |
db8ac78 |
int omxSP_HasArmNeon() {
|
|
Kevin Kofler |
db8ac78 |
- return (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
|
|
Kevin Kofler |
db8ac78 |
+#if defined(__arm__) || defined(__aarch64__)
|
|
Kevin Kofler |
db8ac78 |
+// gcc -mfpu=neon defines __ARM_NEON__
|
|
Kevin Kofler |
db8ac78 |
+// __ARM_NEON__ generates code that requires Neon. NaCL also requires Neon.
|
|
Kevin Kofler |
db8ac78 |
+// For Linux, /proc/cpuinfo can be tested but without that assume Neon.
|
|
Kevin Kofler |
db8ac78 |
+#if defined(__ARM_NEON__) || defined(__native_client__) || !defined(__linux__)
|
|
Kevin Kofler |
db8ac78 |
+ return 1;
|
|
Kevin Kofler |
db8ac78 |
+// For aarch64(arm64), /proc/cpuinfo's feature is not complete, e.g. no neon
|
|
Kevin Kofler |
db8ac78 |
+// flag in it.
|
|
Kevin Kofler |
db8ac78 |
+// So for aarch64, neon enabling is hard coded here.
|
|
Kevin Kofler |
db8ac78 |
+#elif defined(__aarch64__)
|
|
Kevin Kofler |
db8ac78 |
+ return 1;
|
|
Kevin Kofler |
db8ac78 |
+#else
|
|
Kevin Kofler |
db8ac78 |
+ // Linux arm parse text file for neon detect.
|
|
Kevin Kofler |
db8ac78 |
+ return ArmCpuCaps("/proc/cpuinfo");
|
|
Kevin Kofler |
db8ac78 |
+#endif
|
|
Kevin Kofler |
db8ac78 |
+#endif // __arm__
|
|
Kevin Kofler |
db8ac78 |
}
|
|
Kevin Kofler |
db8ac78 |
|
|
Kevin Kofler |
db8ac78 |
static void SetFFTRoutines() {
|
|
Kevin Kofler |
c815122 |
@@ -24,13 +68,9 @@
|
|
Kevin Kofler |
db8ac78 |
* forward and inverse FFTs
|
|
Kevin Kofler |
db8ac78 |
*/
|
|
Kevin Kofler |
db8ac78 |
if (omxSP_HasArmNeon()) {
|
|
Kevin Kofler |
db8ac78 |
- __android_log_print(ANDROID_LOG_INFO, "OpenMAX DL FFT",
|
|
Kevin Kofler |
db8ac78 |
- "Using NEON FFT");
|
|
Kevin Kofler |
db8ac78 |
omxSP_FFTFwd_RToCCS_F32 = omxSP_FFTFwd_RToCCS_F32_Sfs;
|
|
Kevin Kofler |
db8ac78 |
omxSP_FFTInv_CCSToR_F32 = omxSP_FFTInv_CCSToR_F32_Sfs;
|
|
Kevin Kofler |
db8ac78 |
} else {
|
|
Kevin Kofler |
db8ac78 |
- __android_log_print(ANDROID_LOG_INFO, "OpenMAX DL FFT",
|
|
Kevin Kofler |
db8ac78 |
- "Using non-NEON FFT");
|
|
Kevin Kofler |
db8ac78 |
omxSP_FFTFwd_RToCCS_F32 = omxSP_FFTFwd_RToCCS_F32_Sfs_vfp;
|
|
Kevin Kofler |
db8ac78 |
omxSP_FFTInv_CCSToR_F32 = omxSP_FFTInv_CCSToR_F32_Sfs_vfp;
|
|
Kevin Kofler |
db8ac78 |
}
|