From 0bd31a01df37cd3fd9b5c4addf37084a8a2d2da6 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 26 Sep 2013 16:49:03 +0200 Subject: [PATCH] Update x264 and enable it on x86. --- Makefile | 49 +++++++++++++++--- jni/Android.mk | 8 +-- jni/Application.mk | 4 -- src/org/linphone/PreferencesFragment.java | 4 +- submodules/externals/build/x264/Android.mk | 60 ++-------------------- submodules/externals/x264 | 2 +- 6 files changed, 50 insertions(+), 77 deletions(-) diff --git a/Makefile b/Makefile index dbe8185d8..09d8525ee 100644 --- a/Makefile +++ b/Makefile @@ -106,6 +106,43 @@ clean-ffmpeg: rm -rf $(FFMPEG_BUILD_DIR)/arm && \ rm -rf $(FFMPEG_BUILD_DIR)/x86 +#x264 +ifeq ($(BUILD_X264), 1) +BUILD_X264_DEPS=$(X264_BUILD_DIR)/arm/libx264.a +ifeq ($(BUILD_FOR_X86), 1) + BUILD_X264_DEPS+=$(X264_BUILD_DIR)/x86/libx264.a +endif +X264_SRC_DIR=$(TOPDIR)/submodules/externals/x264 +X264_BUILD_DIR=$(TOPDIR)/submodules/externals/build/x264 +X264_CONFIGURE_OPTIONS=--disable-shared +X264_ARM_CONFIGURE_OPTIONS=--host=arm-none-linux-gnueabi --sysroot=$(NDK_PATH)/platforms/android-18/arch-arm --cross-prefix=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --enable-pic +X264_X86_CONFIGURE_OPTIONS=--host=i686-linux-gnueabi --sysroot=$(NDK_PATH)/platforms/android-18/arch-x86 --cross-prefix=$(NDK_PATH)/toolchains/x86-4.6/prebuilt/linux-x86_64/bin/i686-linux-android- + +$(X264_BUILD_DIR)/arm/libx264.a: + mkdir -p $(X264_BUILD_DIR)/arm && \ + cd $(X264_SRC_DIR) && \ + $(X264_SRC_DIR)/configure $(X264_CONFIGURE_OPTIONS) $(X264_ARM_CONFIGURE_OPTIONS) && \ + make -j $(NUMCPUS) && \ + cp libx264.a $(X264_BUILD_DIR)/arm/libx264.a && \ + make clean \ + || ( echo "Build of x264 for arm failed." ; exit 1 ) + +$(X264_BUILD_DIR)/x86/libx264.a: + mkdir -p $(X264_BUILD_DIR)/x86 && \ + cd $(X264_SRC_DIR) && \ + $(X264_SRC_DIR)/configure $(X264_CONFIGURE_OPTIONS) $(X264_X86_CONFIGURE_OPTIONS) && \ + make -j $(NUMCPUS) && \ + cp libx264.a $(X264_BUILD_DIR)/x86/libx264.a && \ + make clean \ + || ( echo "Build of x264 for x86 failed." ; exit 1 ) + +endif +build-x264: $(BUILD_X264_DEPS) + +clean-x264: + rm -rf $(X264_BUILD_DIR)/arm && \ + rm -rf $(X264_BUILD_DIR)/x86 + #libvpx BUILD_VPX_DEPS=$(LIBVPX_BUILD_DIR)/arm/libvpx.a ifeq ($(BUILD_FOR_X86), 1) @@ -116,15 +153,15 @@ LIBVPX_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libvpx LIBVPX_CONFIGURE_OPTIONS=--disable-vp9 --disable-examples --disable-unit-tests --disable-postproc --enable-error-concealment $(LIBVPX_BUILD_DIR)/arm/libvpx.a: - mkdir -p submodules/externals/build/libvpx/arm && \ - cd submodules/externals/build/libvpx/arm && \ + mkdir -p $(LIBVPX_BUILD_DIR)/arm && \ + cd $(LIBVPX_BUILD_DIR)/arm && \ $(LIBVPX_SRC_DIR)/configure --target=armv7-android-gcc --sdk-path=$(NDK_PATH) $(LIBVPX_CONFIGURE_OPTIONS) && \ make -j ${NUMCPUS} \ || ( echo "Build of libvpx for arm failed." ; exit 1 ) $(LIBVPX_BUILD_DIR)/x86/libvpx.a: - mkdir -p submodules/externals/build/libvpx/x86 && \ - cd submodules/externals/build/libvpx/x86 && \ + mkdir -p $(LIBVPX_BUILD_DIR)/x86 && \ + cd $(LIBVPX_BUILD_DIR)/x86 && \ $(LIBVPX_SRC_DIR)/configure --target=x86-android-gcc --sdk-path=$(NDK_PATH) $(LIBVPX_CONFIGURE_OPTIONS) --extra-cflags="--sysroot=$(NDK_PATH)/platforms/android-18/arch-x86" && \ make -j${NUMCPUS} \ || ( echo "Build of libvpx for x86 failed." ; exit 1 ) @@ -220,7 +257,7 @@ $(SQLITE_BASENAME).zip: curl -sO $(SQLITE_URL) #Build targets -prepare-sources: build-ffmpeg prepare-ilbc build-vpx prepare-silk prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-sqlite3 +prepare-sources: build-ffmpeg build-x264 prepare-ilbc build-vpx prepare-silk prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-sqlite3 LIBLINPHONE_OPTIONS = NDK_DEBUG=$(NDK_DEBUG) LINPHONE_VERSION=$(LINPHONE_VERSION) BUILD_UPNP=$(BUILD_UPNP) BUILD_REMOTE_PROVISIONING=$(BUILD_REMOTE_PROVISIONING) BUILD_X264=$(BUILD_X264) \ BUILD_AMRNB=$(BUILD_AMRNB) BUILD_AMRWB=$(BUILD_AMRWB) BUILD_GPLV3_ZRTP=$(BUILD_GPLV3_ZRTP) BUILD_SILK=$(BUILD_SILK) BUILD_G729=$(BUILD_G729) BUILD_TUNNEL=$(BUILD_TUNNEL) \ @@ -275,7 +312,7 @@ clean-ndk-build: clean: clean-ndk-build -veryclean: clean clean-ffmpeg clean-vpx +veryclean: clean clean-ffmpeg clean-x264 clean-vpx .PHONY: clean diff --git a/jni/Android.mk b/jni/Android.mk index 37b0a9b39..478e58a8a 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -4,15 +4,9 @@ include $(linphone-root-dir)/submodules/linphone/mediastreamer2/src/android/libn #enable video on armv7 and x86 targets only +ifeq ($(TARGET_ARCH_ABI), armeabi) _BUILD_X264=0 _BUILD_VIDEO=0 -ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) -_BUILD_X264=1 -_BUILD_VIDEO=1 -endif -ifeq ($(TARGET_ARCH_ABI),x86) -_BUILD_X264=1 -_BUILD_VIDEO=1 endif ifeq ($(_BUILD_VIDEO),0) ifeq (,$(DUMP_VAR)) diff --git a/jni/Application.mk b/jni/Application.mk index b2eadf090..0d0695fa5 100644 --- a/jni/Application.mk +++ b/jni/Application.mk @@ -20,10 +20,6 @@ ifeq ($(BUILD_X264),) BUILD_X264=0 endif -ifeq ($(BUILD_X264),) -BUILD_X264=0 -endif - ifeq ($(BUILD_G729),) BUILD_G729=0 endif diff --git a/src/org/linphone/PreferencesFragment.java b/src/org/linphone/PreferencesFragment.java index cf1073167..5a4a767ee 100644 --- a/src/org/linphone/PreferencesFragment.java +++ b/src/org/linphone/PreferencesFragment.java @@ -178,10 +178,10 @@ public class PreferencesFragment extends PreferencesListFragment implements EcCa prefMPEG4.setSummary(R.string.pref_video_codec_mpeg4_unavailable); } else { detectVideoCodec(R.string.pref_video_codec_h264_key, "H264"); - if (!Version.hasNeon()) + if (!Version.hasFastCpuWithAsmOptim()) { // Android without neon doesn't support H264 - Log.w("No NEON available, disabling H264"); + Log.w("CPU does not have asm optimisations available, disabling H264"); findPreference(R.string.pref_video_codec_h264_key).setEnabled(false); findPreference(R.string.pref_video_codec_h264_key).setDefaultValue(false); } diff --git a/submodules/externals/build/x264/Android.mk b/submodules/externals/build/x264/Android.mk index 2943c71b1..780179357 100644 --- a/submodules/externals/build/x264/Android.mk +++ b/submodules/externals/build/x264/Android.mk @@ -1,61 +1,7 @@ -# -# List of compiled files and related options obtained using -# ./configure --cross-prefix=arm-none-linux-gnueabi- --host=arm-none-linux-gnueabi --disable-pthread --enable-pic -# && make -# - -LOCAL_PATH:= $(call my-dir)/../../x264 +LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libx264 +LOCAL_SRC_FILES := $(TARGET_ARCH)/libx264.a -LOCAL_SRC_FILES = \ - common/mc.c \ - common/predict.c \ - common/pixel.c \ - common/macroblock.c \ - common/frame.c \ - common/dct.c \ - common/cpu.c \ - common/cabac.c \ - common/common.c \ - common/mdate.c \ - common/rectangle.c \ - common/set.c \ - common/quant.c \ - common/deblock.c \ - common/vlc.c \ - common/mvpred.c \ - common/bitstream.c \ - encoder/analyse.c \ - encoder/me.c \ - encoder/ratecontrol.c \ - encoder/set.c \ - encoder/macroblock.c \ - encoder/cabac.c \ - encoder/cavlc.c \ - encoder/encoder.c \ - encoder/lookahead.c \ - common/arm/mc-c.c \ - common/arm/predict-c.c \ - common/arm/cpu-a.S \ - common/arm/pixel-a.S \ - common/arm/mc-a.S \ - common/arm/dct-a.S \ - common/arm/quant-a.S \ - common/arm/deblock-a.S \ - common/arm/predict-a.S - - -LOCAL_ARM_MODE := arm - - -LOCAL_CFLAGS += -DPIC -DBIT_DEPTH=8 -std=gnu99 - -#for including config.h: -LOCAL_C_INCLUDES += \ - $(LOCAL_PATH)/../build/x264 \ - $(LOCAL_PATH)/ - -include $(BUILD_STATIC_LIBRARY) - +include $(PREBUILT_STATIC_LIBRARY) diff --git a/submodules/externals/x264 b/submodules/externals/x264 index e89c4cfc9..3361d59a0 160000 --- a/submodules/externals/x264 +++ b/submodules/externals/x264 @@ -1 +1 @@ -Subproject commit e89c4cfc9f37d0b7684507974b333545b5bcc37a +Subproject commit 3361d59a0a83dcb8b321cc0eb8e6ba68ca49c7d4