[Android] Hack to detect hidden x86 SoC
Geoffrey Métais
git at videolan.org
Wed Aug 3 18:15:09 CEST 2016
vlc-android | branch: 2.0.x | Geoffrey Métais <geoffrey.metais at gmail.com> | Wed Aug 3 17:14:50 2016 +0200| [06633982466d634fccc81469a3a057528d1a778f] | committer: Geoffrey Métais
Hack to detect hidden x86 SoC
(cherry picked from commit 47f59fbae311b3529045fbc350164b36a02ab5b8)
> https://code.videolan.org/videolan/vlc-android/commit/06633982466d634fccc81469a3a057528d1a778f
---
libvlc/src/org/videolan/libvlc/util/VLCUtil.java | 48 ++++++++++++++----------
1 file changed, 29 insertions(+), 19 deletions(-)
diff --git a/libvlc/src/org/videolan/libvlc/util/VLCUtil.java b/libvlc/src/org/videolan/libvlc/util/VLCUtil.java
index 9e6b0d6..6208ec0 100644
--- a/libvlc/src/org/videolan/libvlc/util/VLCUtil.java
+++ b/libvlc/src/org/videolan/libvlc/util/VLCUtil.java
@@ -20,16 +20,6 @@
package org.videolan.libvlc.util;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Locale;
-
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -40,6 +30,16 @@ import android.util.Log;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.Media;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Locale;
+
public class VLCUtil {
public final static String TAG = "VLC/LibVLC/Util";
@@ -73,8 +73,8 @@ public class VLCUtil {
// If already checked return cached result
if (errorMsg != null || isCompatible) return isCompatible;
- boolean hasNeon = false, hasFpu = false, hasArmV6 = false,
- hasArmV7 = false, hasMips = false, hasX86 = false, is64bits = false;
+ boolean hasNeon = false, hasFpu = false, hasArmV6 = false, hasPlaceHolder = false,
+ hasArmV7 = false, hasMips = false, hasX86 = false, is64bits = false, isIntel = false;
float bogoMIPS = -1;
int processors = 0;
@@ -141,14 +141,18 @@ public class VLCUtil {
hasArmV6 = true; /* Armv7 is backwards compatible to < v6 */
} else if (line.contains("ARMv6"))
hasArmV6 = true;
- // "clflush size" is a x86-specific cpuinfo tag.
- // (see kernel sources arch/x86/kernel/cpu/proc.c)
+ // "clflush size" is a x86-specific cpuinfo tag.
+ // (see kernel sources arch/x86/kernel/cpu/proc.c)
else if (line.contains("clflush size"))
hasX86 = true;
else if (line.contains("GenuineIntel"))
hasX86 = true;
- // "microsecond timers" is specific to MIPS.
- // see arch/mips/kernel/proc.c
+ else if (line.contains("placeholder"))
+ hasPlaceHolder = true;
+ else if (line.contains("CPU implementer") && line.contains("0x69"))
+ isIntel = true;
+ // "microsecond timers" is specific to MIPS.
+ // see arch/mips/kernel/proc.c
else if (line.contains("microsecond timers"))
hasMips = true;
if (line.contains("neon") || line.contains("asimd"))
@@ -185,8 +189,14 @@ public class VLCUtil {
if (elf != null) {
// Enforce proper architecture to prevent problems
if (elfHasX86 && !hasX86) {
- errorMsg = "x86 build on non-x86 device";
- isCompatible = false;
+ //Some devices lie on their /proc/cpuinfo
+ // they seem to have a 'Hardware : placeholder' property
+ if (hasPlaceHolder && isIntel) {
+ Log.d(TAG, "Emulated armv7 detected, trying to launch x86 libraries");
+ } else {
+ errorMsg = "x86 build on non-x86 device";
+ isCompatible = false;
+ }
} else if (elfHasArm && !hasArmV6) {
errorMsg = "ARM build on non ARM device";
isCompatible = false;
@@ -248,7 +258,7 @@ public class VLCUtil {
// Store into MachineSpecs
machineSpecs = new MachineSpecs();
Log.d(TAG, "machineSpecs: hasArmV6: " + hasArmV6 + ", hasArmV7: " + hasArmV7 +
- ", hasX86: " + hasX86 + ", is64bits: " + is64bits);
+ ", hasX86: " + hasX86 + ", is64bits: " + is64bits);
machineSpecs.hasArmV6 = hasArmV6;
machineSpecs.hasArmV7 = hasArmV7;
machineSpecs.hasFpu = hasFpu;
More information about the Android
mailing list