diff --git a/.gitmodules b/.gitmodules index e7249a28e..e85178bd1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -82,3 +82,6 @@ [submodule "submodules/externals/openh264"] path = submodules/externals/openh264 url = https://github.com/cisco/openh264 +[submodule "submodules/externals/libmatroska"] + path = submodules/externals/libmatroska + url = https://github.com/Matroska-Org/foundation-source.git diff --git a/Makefile b/Makefile index 0e9deaefa..b75b52be3 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,7 @@ BUILD_SILK=1 BUILD_TUNNEL=0 BUILD_WEBRTC_AECM=1 BUILD_OPUS=1 +BUILD_MATROSKA=0 BUILD_WEBRTC_ISAC=1 BUILD_FOR_X86=1 USE_JAVAH=1 @@ -287,6 +288,79 @@ clean-vpx: rm -rf submodules/externals/build/libvpx/arm && \ rm -rf submodules/externals/build/libvpx/x86 +#libmatroska +ifeq ($(BUILD_VIDEO), 1) +ifeq ($(BUILD_MATROSKA),1) +BUILD_MATROSKA_DEPS=$(LIBEBML2_BUILD_DIR)/arm/libebml2.a $(LIBMATROSKA_BUILD_DIR)/arm/libmatroska2.a +ifeq ($(BUILD_FOR_X86), 1) +BUILD_MATROSKA_DEPS+=$(LIBEBML2_BUILD_DIR)/x86/libebml2.a $(LIBMATROSKA_BUILD_DIR)/x86/libmatroska2.a +endif #BUILD_FOR_X86 +endif #BUILD_MATROSKA +endif #BUILD_VIDEO +LIBMATROSKA_SRC_DIR=$(TOPDIR)/submodules/externals/libmatroska +LIBMATROSKA_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libmatroska +LIBEBML2_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libebml2 +COREMAKE=$(LIBMATROSKA_SRC_DIR)/corec/tools/coremake/coremake + +$(LIBEBML2_BUILD_DIR)/arm/libebml2.a: $(LIBMATROSKA_SRC_DIR)/release/android_armv7/libebml2.a + mkdir -p $(LIBEBML2_BUILD_DIR)/arm + cp $< $@ + +$(LIBMATROSKA_BUILD_DIR)/arm/libmatroska2.a: $(LIBMATROSKA_SRC_DIR)/release/android_armv7/libmatroska2.a + mkdir -p $(LIBMATROSKA_BUILD_DIR)/arm + cp $< $@ + +$(LIBEBML2_BUILD_DIR)/x86/libebml2.a: $(LIBMATROSKA_SRC_DIR)/release/android_x86/libebml2.a + mkdir -p $(LIBEBML2_BUILD_DIR)/x86 + cp $< $@ + +$(LIBMATROSKA_BUILD_DIR)/x86/libmatroska2.a: $(LIBMATROSKA_SRC_DIR)/release/android_x86/libmatroska2.a + mkdir -p $(LIBMATROSKA_BUILD_DIR)/x86 + cp $< $@ + +$(LIBMATROSKA_SRC_DIR)/release/android_armv7/libebml2.a: $(LIBMATROSKA_SRC_DIR)/coremake_android_armv7.txt + make -C $(LIBMATROSKA_SRC_DIR) ebml2 + +$(LIBMATROSKA_SRC_DIR)/release/android_armv7/libmatroska2.a: $(LIBMATROSKA_SRC_DIR)/coremake_android_armv7.txt + make -C $(LIBMATROSKA_SRC_DIR) matroska2 + +$(LIBMATROSKA_SRC_DIR)/release/android_x86/libebml2.a: $(LIBMATROSKA_SRC_DIR)/coremake_android_x86.txt + make -C $(LIBMATROSKA_SRC_DIR) ebml2 + +$(LIBMATROSKA_SRC_DIR)/release/android_x86/libmatroska2.a: $(LIBMATROSKA_SRC_DIR)/coremake_android_x86.txt + make -C $(LIBMATROSKA_SRC_DIR) matroska2 + +$(LIBMATROSKA_SRC_DIR)/coremake_android_armv7.txt: $(COREMAKE) $(LIBMATROSKA_SRC_DIR)/configure_config_h.txt $(LIBMATROSKA_SRC_DIR)/fix_coremake.txt + cd $(LIBMATROSKA_SRC_DIR); $(COREMAKE) android_armv7 -f $(LIBMATROSKA_SRC_DIR)/root.proj + rm -f $(LIBMATROSKA_SRC_DIR)/coremake_*.txt; + touch $@ + +$(LIBMATROSKA_SRC_DIR)/coremake_android_x86.txt: $(COREMAKE) $(LIBMATROSKA_SRC_DIR)/configure_config_h.txt $(LIBMATROSKA_SRC_DIR)/fix_coremake.txt + cd $(LIBMATROSKA_SRC_DIR); $(COREMAKE) android_x86 -f $(LIBMATROSKA_SRC_DIR)/root.proj + rm -f $(LIBMATROSKA_SRC_DIR)/coremake_*.txt + touch $@ + +$(COREMAKE): + make -C $(LIBMATROSKA_SRC_DIR)/corec/tools/coremake + +$(LIBMATROSKA_SRC_DIR)/configure_config_h.txt: + echo "#define CONFIG_ANDROID_NDK $(NDK_PATH)" >> $(LIBMATROSKA_SRC_DIR)/config.h + echo "#define CONFIG_ANDROID_VERSION $(ANDROID_MOST_RECENT_TARGET)" >> $(LIBMATROSKA_SRC_DIR)/config.h + echo "#define CONFIG_ANDROID_PLATFORM linux-x86_64" >> $(LIBMATROSKA_SRC_DIR)/config.h + touch $@ + +$(LIBMATROSKA_SRC_DIR)/fix_coremake.txt: + cd $(LIBMATROSKA_SRC_DIR); patch -p0 < ../build/libmatroska/coremake_fix.patch + cp $(LIBMATROSKA_BUILD_DIR)/android_x86.build $(LIBMATROSKA_SRC_DIR)/corec/tools/coremake + touch $@ + +build-matroska: $(BUILD_MATROSKA_DEPS) + +clean-matroska: + rm -rf $(LIBMATROSKA_BUILD_DIR)/{arm,x86} + rm -rf $(LIBEBML2_BUILD_DIR)/{arm,x86} + cd $(LIBMATROSKA_SRC_DIR); $(COREMAKE) clean + #SILK LIBMSSILK_SRC_DIR=$(TOPDIR)/submodules/mssilk LIBMSSILK_BUILD_DIR=$(LIBMSSILK_SRC_DIR) @@ -379,7 +453,7 @@ $(SQLITE_BASENAME).zip: curl -sO $(SQLITE_URL) #Build targets -prepare-sources: build-ffmpeg build-x264 build-openh264 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 build-openh264 prepare-ilbc build-vpx build-matroska prepare-silk prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-sqlite3 GENERATE_OPTIONS = NDK_DEBUG=$(NDK_DEBUG) BUILD_FOR_X86=$(BUILD_FOR_X86) \ diff --git a/jni/Android.mk b/jni/Android.mk index a086e34e6..c894f5d32 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -100,6 +100,11 @@ endif include $(linphone-root-dir)/submodules/externals/build/ffmpeg/Android.mk include $(linphone-root-dir)/submodules/externals/build/libvpx/Android.mk +ifeq ($(BUILD_MATROSKA), 1) +include $(linphone-root-dir)/submodules/externals/buil/libebml/Android.mk +include $(linphone-root-dir)/submodules/externals/buil/libmatroska/Android.mk +endif + endif #_BUILD_VIDEO diff --git a/jni/Application.mk b/jni/Application.mk index 41610bf2f..69de103f3 100644 --- a/jni/Application.mk +++ b/jni/Application.mk @@ -65,7 +65,10 @@ endif ifeq ($(BUILD_OPENH264),1) APP_MODULES += libwels libmsopenh264 endif +ifeq ($(BUILD_MATROSKA), 1) +APP_MODULES += libebml2 libmatroska2 endif +endif # BUILD_VIDEO _BUILD_AMR=0 ifneq ($(BUILD_AMRNB), 0) diff --git a/submodules/externals/build/libebml2/Android.mk b/submodules/externals/build/libebml2/Android.mk new file mode 100644 index 000000000..418edf082 --- /dev/null +++ b/submodules/externals/build/libebml2/Android.mk @@ -0,0 +1,7 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE := libebml2 +LOCAL_SRC_FILES := $(TARGET_ARCH)/libebml2.a + +include $(PREBUILT_STATIC_LIBRARY) \ No newline at end of file diff --git a/submodules/externals/build/libmatroska/Android.mk b/submodules/externals/build/libmatroska/Android.mk new file mode 100755 index 000000000..8814d1a39 --- /dev/null +++ b/submodules/externals/build/libmatroska/Android.mk @@ -0,0 +1,7 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE := libmatroska2 +LOCAL_SRC_FILES := $(TARGET_ARCH)/libmatroska2.a + +include $(PREBUILT_STATIC_LIBRARY) diff --git a/submodules/externals/build/libmatroska/android_x86.build b/submodules/externals/build/libmatroska/android_x86.build new file mode 100644 index 000000000..88b7ccd12 --- /dev/null +++ b/submodules/externals/build/libmatroska/android_x86.build @@ -0,0 +1,13 @@ +#define TARGARCH x86 +#define TARGARCH_ABI x86 +#define TARGOPTIM release +#define IX86 + +CCFLAGS += -O3 -m32 -march=i486 -msse -mmmx -Wno-multichar -fvisibility=hidden -fno-PIC -DRESOURCE_COREC +ANDROID_ABI += x86 +ANDROID_ARCH = arch-x86 +ANDROID_GCC_PREFIX = i686-linux-android- +ANDROID_GCC = x86-4.8 +ANDROID_GCC_LIB = gcc/i686-linux-android/4.8/libgcc.a + +#include "android.inc" diff --git a/submodules/externals/build/libmatroska/coremake_fix.patch b/submodules/externals/build/libmatroska/coremake_fix.patch new file mode 100644 index 000000000..5d96ca429 --- /dev/null +++ b/submodules/externals/build/libmatroska/coremake_fix.patch @@ -0,0 +1,38 @@ +--- corec/tools/coremake/android_arm.inc ++++ corec/tools/coremake/android_arm.inc +@@ -7,8 +7,8 @@ + SFLAGS += -march=armv7-a + ANDROID_ABI += armeabi + ANDROID_ARCH = arch-arm +-ANDROID_GCC_PREFIX = arm-eabi- +-ANDROID_GCC = arm-eabi-4.4.0 +-ANDROID_GCC_LIB = gcc/arm-eabi/4.4.0/libgcc.a ++ANDROID_GCC_PREFIX = arm-linux-androideabi- ++ANDROID_GCC = arm-linux-androideabi-4.8 ++ANDROID_GCC_LIB = gcc/arm-linux-androideabi/4.8/libgcc.a + + #include "android.inc" +--- corec/tools/coremake/android.inc ++++ corec/tools/coremake/android.inc +@@ -12,8 +12,8 @@ + + CONFIG + +-ANDROID_LIBC_DIR = %(§CONFIG_ANDROID_NDK)/build/platforms/android-%(CONFIG_ANDROID_VERSION)/%(ANDROID_ARCH)/usr +-ANDROID_GCC_DIR = %(§CONFIG_ANDROID_NDK)/build/prebuilt/%(CONFIG_ANDROID_PLATFORM)/%(ANDROID_GCC)/bin ++ANDROID_LIBC_DIR = %(§CONFIG_ANDROID_NDK)/platforms/%(CONFIG_ANDROID_VERSION)/%(ANDROID_ARCH)/usr ++ANDROID_GCC_DIR = %(§CONFIG_ANDROID_NDK)/toolchains/%(ANDROID_GCC)/prebuilt/%(CONFIG_ANDROID_PLATFORM)/bin + + IFNDEF CONFIG_ANDROID_NDK + ECHO Android NDK path not defined ! (CONFIG_ANDROID_NDK) +--- corec/tools/coremake/gcc_mak.inc ++++ corec/tools/coremake/gcc_mak.inc +@@ -85,7 +85,7 @@ + PRINTNL CCFLAGS += -include %(PRECOMPILED_HEADER) + ENDIF + IF %(OS_INCLUDE)!="" +- PRINTNL CCFLAGS += %(|OS_INCLUDE:%=-isystem '%') ++ PRINTNL CCFLAGS += %(OS_INCLUDE:%=-isystem '%') + ENDIF + PRINTNL CCFLAGS += %(DEFINE:%=-D%) -I . %(@INCLUDE:%=-I '%') %(@SYSINCLUDE:%=-I '%') %(@CONFIG_INCLUDE:%=-I '%') + IF %(CCFLAGS)!="" diff --git a/submodules/externals/libmatroska b/submodules/externals/libmatroska new file mode 160000 index 000000000..3414f292b --- /dev/null +++ b/submodules/externals/libmatroska @@ -0,0 +1 @@ +Subproject commit 3414f292bb5b1ac5ee2fd99976b7274fd81e48ee