diff --git a/jni/Android.mk b/jni/Android.mk index 80223ee5e..766543a96 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -93,7 +93,7 @@ endif endif ifeq ($(wildcard $(linphone-root-dir)/submodules/externals/prebuilts/ffmpeg.mk),) -#include $(linphone-root-dir)/submodules/externals/build/ffmpeg/Android.mk +include $(linphone-root-dir)/submodules/externals/build/ffmpeg/Android.mk include $(linphone-root-dir)/submodules/externals/build/ffmpeg-no-neon/Android.mk else include $(linphone-root-dir)/submodules/externals/prebuilts/ffmpeg.mk @@ -118,6 +118,7 @@ endif include $(linphone-root-dir)/submodules/linphone/build/android/Android.mk +include $(linphone-root-dir)/submodules/linphone/build/android/Android-no-neon.mk _BUILD_AMR=0 ifneq ($(BUILD_AMRNB), 0) diff --git a/jni/Application.mk b/jni/Application.mk index 405618b1f..c67dc451a 100644 --- a/jni/Application.mk +++ b/jni/Application.mk @@ -1,5 +1,5 @@ APP_PROJECT_PATH := $(call my-dir)/../ -APP_MODULES :=libspeex libgsm libortp libosip2 libeXosip2 libmediastreamer2 liblinphone +APP_MODULES :=libspeex libgsm libortp libosip2 libeXosip2 libmediastreamer2 liblinphone liblinphonenoneon APP_STL := stlport_static #default values @@ -14,8 +14,9 @@ BUILD_SRTP=1 endif ifeq ($(LINPHONE_VIDEO),1) -APP_MODULES += libavutil libavcore libavcodec libswscale libvpx -APP_MODULES += libavutil-no-neon libavcore-no-neon libavcodec-no-neon libswscale-no-neon +APP_MODULES += libavutil libavcore libavcodec libswscale +APP_MODULES += libavutilnoneon libavcorenoneon libavcodecnoneon libswscalenoneon +APP_MODULES += libvpx endif _BUILD_AMR=0 diff --git a/src/org/linphone/IncallActivity.java b/src/org/linphone/IncallActivity.java index 35f62efaa..758ed3a00 100644 --- a/src/org/linphone/IncallActivity.java +++ b/src/org/linphone/IncallActivity.java @@ -600,6 +600,11 @@ public class IncallActivity extends AbstractCalleesActivity implements } else if (lc().soundResourcesLocked()) { return; } else if (State.Paused == actualState) { + if (call != null && call.cameraEnabled() && call.getCurrentParamsCopy().getVideoEnabled()) + { + finish(); + LinphoneActivity.instance().startVideoActivity(call, 0); + } lc().resumeCall(call); } } diff --git a/src/org/linphone/core/LinphoneCoreFactoryImpl.java b/src/org/linphone/core/LinphoneCoreFactoryImpl.java index a5ae7805f..3dedd06d0 100644 --- a/src/org/linphone/core/LinphoneCoreFactoryImpl.java +++ b/src/org/linphone/core/LinphoneCoreFactoryImpl.java @@ -20,9 +20,12 @@ package org.linphone.core; import java.io.File; import java.io.IOException; +import java.io.InputStream; import org.linphone.mediastream.Version; +import android.util.Log; + public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { private static void loadOptionalLibrary(String s) { @@ -35,10 +38,17 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { static { // FFMPEG (audio/video) - loadOptionalLibrary("avutil"); - loadOptionalLibrary("swscale"); - loadOptionalLibrary("avcore"); - loadOptionalLibrary("avcodec"); + if (!hasNeonInCpuFeatures()) { + loadOptionalLibrary("avutilnoneon"); + loadOptionalLibrary("swscalenoneon"); + loadOptionalLibrary("avcorenoneon"); + loadOptionalLibrary("avcodecnoneon"); + } else { + loadOptionalLibrary("avutil"); + loadOptionalLibrary("swscale"); + loadOptionalLibrary("avcore"); + loadOptionalLibrary("avcodec"); + } // OPENSSL (cryptography) // lin prefix avoids collision with libs in /system/lib @@ -56,7 +66,11 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { loadOptionalLibrary("bcg729"); //Main library - System.loadLibrary("linphone"); + if (!hasNeonInCpuFeatures()) { + System.loadLibrary("linphonenoneon"); + } else { + System.loadLibrary("linphone"); + } Version.dumpCapabilities(); } @@ -121,4 +135,28 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { public LinphoneFriend createLinphoneFriend() { return createLinphoneFriend(null); } + + public static boolean hasNeonInCpuFeatures() + { + ProcessBuilder cmd; + boolean result = false; + + try { + String[] args = {"/system/bin/cat", "/proc/cpuinfo"}; + cmd = new ProcessBuilder(args); + + Process process = cmd.start(); + InputStream in = process.getInputStream(); + byte[] re = new byte[1024]; + while(in.read(re) != -1){ + String line = new String(re); + if (line.startsWith("Features")) + result = line.contains("neon"); + } + in.close(); + } catch(IOException ex){ + ex.printStackTrace(); + } + return result; + } } diff --git a/submodules/externals/build/ffmpeg-no-neon/Android_libavcodec.mk b/submodules/externals/build/ffmpeg-no-neon/Android_libavcodec.mk index 63705219f..987b79d1f 100755 --- a/submodules/externals/build/ffmpeg-no-neon/Android_libavcodec.mk +++ b/submodules/externals/build/ffmpeg-no-neon/Android_libavcodec.mk @@ -1,7 +1,7 @@ LOCAL_PATH:= $(call my-dir)/../../ffmpeg include $(CLEAR_VARS) -LOCAL_MODULE := libavcodec +LOCAL_MODULE := libavcodecnoneon LOCAL_SRC_FILES = \ libavcodec/allcodecs.c \ @@ -103,7 +103,7 @@ LOCAL_C_INCLUDES += \ $(LOCAL_PATH)/ \ $(LOCAL_PATH)/libavutil -LOCAL_SHARED_LIBRARIES := libavutil libavcore +LOCAL_SHARED_LIBRARIES := libavutilnoneon libavcorenoneon include $(BUILD_SHARED_LIBRARY) diff --git a/submodules/externals/build/ffmpeg-no-neon/Android_libavcore.mk b/submodules/externals/build/ffmpeg-no-neon/Android_libavcore.mk index ca27ba83c..6d71bca3f 100644 --- a/submodules/externals/build/ffmpeg-no-neon/Android_libavcore.mk +++ b/submodules/externals/build/ffmpeg-no-neon/Android_libavcore.mk @@ -2,7 +2,7 @@ LOCAL_PATH:= $(call my-dir)/../../ffmpeg/ include $(CLEAR_VARS) -LOCAL_MODULE := libavcore +LOCAL_MODULE := libavcorenoneon LOCAL_SRC_FILES := \ @@ -21,7 +21,7 @@ LOCAL_CFLAGS += -DHAVE_AV_CONFIG_H #for including config.h: LOCAL_C_INCLUDES += $(LOCAL_PATH)/../build/ffmpeg-no-neon $(LOCAL_PATH)/ -LOCAL_SHARED_LIBRARIES := libavutil +LOCAL_SHARED_LIBRARIES := libavutilnoneon include $(BUILD_SHARED_LIBRARY) diff --git a/submodules/externals/build/ffmpeg-no-neon/Android_libavutil.mk b/submodules/externals/build/ffmpeg-no-neon/Android_libavutil.mk index 84b2158f5..85ad51558 100755 --- a/submodules/externals/build/ffmpeg-no-neon/Android_libavutil.mk +++ b/submodules/externals/build/ffmpeg-no-neon/Android_libavutil.mk @@ -2,7 +2,7 @@ LOCAL_PATH:= $(call my-dir)/../../ffmpeg/ include $(CLEAR_VARS) -LOCAL_MODULE := libavutil +LOCAL_MODULE := libavutilnoneon LOCAL_SRC_FILES = \ diff --git a/submodules/externals/build/ffmpeg-no-neon/Android_libswscale.mk b/submodules/externals/build/ffmpeg-no-neon/Android_libswscale.mk index 5afb4bb84..21c5c7219 100755 --- a/submodules/externals/build/ffmpeg-no-neon/Android_libswscale.mk +++ b/submodules/externals/build/ffmpeg-no-neon/Android_libswscale.mk @@ -2,7 +2,7 @@ LOCAL_PATH:= $(call my-dir)/../../ffmpeg/libswscale/ include $(CLEAR_VARS) -LOCAL_MODULE := libswscale +LOCAL_MODULE := libswscalenoneon LOCAL_SRC_FILES = \ options.c \ @@ -20,7 +20,7 @@ LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../build/ffmpeg-no-neon \ $(LOCAL_PATH)/ \ $(LOCAL_PATH)/../ -LOCAL_SHARED_LIBRARIES := libavutil +LOCAL_SHARED_LIBRARIES := libavutilnoneon include $(BUILD_SHARED_LIBRARY) diff --git a/submodules/linphone b/submodules/linphone index 06968d9ad..ec2bfe3f3 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 06968d9ad3849676847c678568f8fde125084cdd +Subproject commit ec2bfe3f34e04b08e1410d2349e88ae700b4c271