From 4cda366e893e5d9ba50eca890b62d53cc24436c9 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 10 May 2012 10:46:41 +0200 Subject: [PATCH] Load neon liblinphone if fails to load no-neon liblinphone --- .../core/LinphoneCoreFactoryImpl.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/org/linphone/core/LinphoneCoreFactoryImpl.java b/src/org/linphone/core/LinphoneCoreFactoryImpl.java index 99c880e37..8cc721e90 100644 --- a/src/org/linphone/core/LinphoneCoreFactoryImpl.java +++ b/src/org/linphone/core/LinphoneCoreFactoryImpl.java @@ -28,21 +28,30 @@ import android.util.Log; public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { - private static void loadOptionalLibrary(String s) { + private static boolean loadOptionalLibrary(String s) { try { System.loadLibrary(s); + return true; } catch (Throwable e) { Log.w("Unable to load optional library lib", s); } + return false; } static { // FFMPEG (audio/video) if (!hasNeonInCpuFeatures()) { - loadOptionalLibrary("avutilnoneon"); - loadOptionalLibrary("swscalenoneon"); - loadOptionalLibrary("avcorenoneon"); - loadOptionalLibrary("avcodecnoneon"); + boolean noNeonLibrariesLoaded = true; + noNeonLibrariesLoaded = noNeonLibrariesLoaded && loadOptionalLibrary("avutilnoneon"); + noNeonLibrariesLoaded = noNeonLibrariesLoaded && loadOptionalLibrary("swscalenoneon"); + noNeonLibrariesLoaded = noNeonLibrariesLoaded && loadOptionalLibrary("avcorenoneon"); + noNeonLibrariesLoaded = noNeonLibrariesLoaded && loadOptionalLibrary("avcodecnoneon"); + if (!noNeonLibrariesLoaded) { + loadOptionalLibrary("avutil"); + loadOptionalLibrary("swscale"); + loadOptionalLibrary("avcore"); + loadOptionalLibrary("avcodec"); + } } else { loadOptionalLibrary("avutil"); loadOptionalLibrary("swscale"); @@ -67,8 +76,13 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { //Main library if (!hasNeonInCpuFeatures()) { - System.loadLibrary("linphonenoneon"); - Log.w("linphone", "No-neon liblinphone loaded"); + try { + System.loadLibrary("linphonenoneon"); + Log.w("linphone", "No-neon liblinphone loaded"); + } catch (UnsatisfiedLinkError ule) { + Log.w("linphone", "Failed to load no-neon liblinphone, loading neon liblinphone"); + System.loadLibrary("linphone"); + } } else { System.loadLibrary("linphone"); }