diff --git a/.gitmodules b/.gitmodules index 518a5d541..2e6201501 100644 --- a/.gitmodules +++ b/.gitmodules @@ -79,3 +79,9 @@ [submodule "submodules/msisac"] path = submodules/msisac url = git://git.linphone.org/msisac.git +[submodule "submodules/msopenh264"] + path = submodules/msopenh264 + url = git://git.linphone.org/msopenh264.git +[submodule "submodules/externals/openh264"] + path = submodules/externals/openh264 + url = https://github.com/cisco/openh264 diff --git a/Makefile b/Makefile index 799e9ad0c..c5f0e70bb 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ ENABLE_GPL_THIRD_PARTIES=1 #default options, can be overidden using make OPTION=value . ifeq ($(ENABLE_GPL_THIRD_PARTIES),1) -BUILD_X264=1 +BUILD_X264=0 BUILD_G729=1 else #x264 and g729 requires additional licensing agreements. @@ -43,6 +43,7 @@ endif NDK_DEBUG=0 BUILD_VIDEO=1 +BUILD_OPENH264=1 BUILD_UPNP=1 BUILD_AMRNB=full # 0, light or full BUILD_AMRWB=1 @@ -201,6 +202,57 @@ clean-x264: rm -rf $(X264_BUILD_DIR)/arm && \ rm -rf $(X264_BUILD_DIR)/x86 +#openh264 +ifeq ($(BUILD_VIDEO),1) +ifeq ($(BUILD_OPENH264), 1) +BUILD_OPENH264_DEPS=\ + $(OPENH264_BUILD_DIR)/include/codec_api.h \ + $(OPENH264_BUILD_DIR)/include/codec_app_def.h \ + $(OPENH264_BUILD_DIR)/include/codec_def.h \ + $(OPENH264_BUILD_DIR)/arm/libwels.a +ifeq ($(BUILD_FOR_X86), 1) + BUILD_OPENH264_DEPS+=$(OPENH264_BUILD_DIR)/x86/libwels.a +endif +endif + +OPENH264_SRC_DIR=$(TOPDIR)/submodules/externals/openh264 +OPENH264_BUILD_DIR=$(TOPDIR)/submodules/externals/build/openh264 + +$(OPENH264_BUILD_DIR)/include/codec_api.h: + mkdir -p $(OPENH264_BUILD_DIR)/include/wels && \ + cp $(OPENH264_SRC_DIR)/codec/api/svc/codec_api.h $(OPENH264_BUILD_DIR)/include/wels/ + +$(OPENH264_BUILD_DIR)/include/codec_app_def.h: + mkdir -p $(OPENH264_BUILD_DIR)/include/wels && \ + cp $(OPENH264_SRC_DIR)/codec/api/svc/codec_app_def.h $(OPENH264_BUILD_DIR)/include/wels/ + +$(OPENH264_BUILD_DIR)/include/codec_def.h: + mkdir -p $(OPENH264_BUILD_DIR)/include/wels && \ + cp $(OPENH264_SRC_DIR)/codec/api/svc/codec_def.h $(OPENH264_BUILD_DIR)/include/wels/ + +$(OPENH264_BUILD_DIR)/arm/libwels.a: + mkdir -p $(OPENH264_BUILD_DIR)/arm && \ + cd $(OPENH264_SRC_DIR) && \ + make libraries -j $(NUMCPUS) OS=android ARCH=arm NDKROOT=$(NDK_PATH) TARGET=$(ANDROID_MOST_RECENT_TARGET) && \ + cp libwels.a $(OPENH264_BUILD_DIR)/arm/libwels.a && \ + make clean OS=android ARCH=arm NDKROOT=$(NDK_PATH) TARGET=$(ANDROID_MOST_RECENT_TARGET) \ + || ( echo "Build of openh264 for arm failed." ; exit 1 ) + +$(OPENH264_BUILD_DIR)/x86/libwels.a: + mkdir -p $(OPENH264_BUILD_DIR)/x86 && \ + cd $(OPENH264_SRC_DIR) && \ + make libraries -j $(NUMCPUS) OS=android ARCH=x86 NDKROOT=$(NDK_PATH) TARGET=$(ANDROID_MOST_RECENT_TARGET) && \ + cp libwels.a $(OPENH264_BUILD_DIR)/x86/libwels.a && \ + make clean OS=android ARCH=x86 NDKROOT=$(NDK_PATH) TARGET=$(ANDROID_MOST_RECENT_TARGET) \ + || ( echo "Build of openh264 for arm failed." ; exit 1 ) +endif + +build-openh264: $(BUILD_OPENH264_DEPS) + +clean-openh264: + rm -rf $(OPENH264_BUILD_DIR)/arm && \ + rm -rf $(OPENH264_BUILD_DIR)/x86 + #libvpx ifeq ($(BUILD_VIDEO),1) BUILD_VPX_DEPS=$(LIBVPX_SRC_DIR)/configure_android_x86_patch_applied.txt $(LIBVPX_BUILD_DIR)/arm/libvpx.a @@ -328,12 +380,12 @@ $(SQLITE_BASENAME).zip: curl -sO $(SQLITE_URL) #Build targets -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 +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 GENERATE_OPTIONS = NDK_DEBUG=$(NDK_DEBUG) BUILD_FOR_X86=$(BUILD_FOR_X86) \ BUILD_AMRNB=$(BUILD_AMRNB) BUILD_AMRWB=$(BUILD_AMRWB) BUILD_SILK=$(BUILD_SILK) BUILD_G729=$(BUILD_G729) BUILD_OPUS=$(BUILD_OPUS) \ - BUILD_VIDEO=$(BUILD_VIDEO) BUILD_X264=$(BUILD_X264) \ + BUILD_VIDEO=$(BUILD_VIDEO) BUILD_X264=$(BUILD_X264) BUILD_OPENH264=$(BUILD_OPENH264) \ BUILD_UPNP=$(BUILD_UPNP) BUILD_ZRTP=$(BUILD_ZRTP) BUILD_WEBRTC_AECM=$(BUILD_WEBRTC_AECM) BUILD_WEBRTC_ISAC=$(BUILD_WEBRTC_ISAC) @@ -413,7 +465,7 @@ clean-ndk-build: clean: clean-ndk-build ant clean -veryclean: clean clean-ffmpeg clean-x264 clean-vpx +veryclean: clean clean-ffmpeg clean-x264 clean-openh264 clean-vpx .PHONY: clean install-apk run-linphone diff --git a/jni/Android.mk b/jni/Android.mk index 7ea3e33ab..a086e34e6 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -5,9 +5,11 @@ #variables given on command line take precedence over the ones defined internally. ifeq ($(TARGET_ARCH_ABI), armeabi) _BUILD_X264=0 +_BUILD_OPENH264=0 _BUILD_VIDEO=0 else _BUILD_X264=$(BUILD_X264) +_BUILD_OPENH264=$(BUILD_OPENH264) _BUILD_VIDEO=$(BUILD_VIDEO) endif @@ -87,6 +89,14 @@ include $(linphone-root-dir)/submodules/msx264/Android.mk include $(linphone-root-dir)/submodules/externals/build/x264/Android.mk endif +ifeq ($(_BUILD_OPENH264),1) +ifeq (,$(DUMP_VAR)) +$(info $(TARGET_ARCH_ABI): Build OpenH264 plugin for mediastreamer2) +endif +include $(linphone-root-dir)/submodules/msopenh264/Android.mk +include $(linphone-root-dir)/submodules/externals/build/openh264/Android.mk +endif + include $(linphone-root-dir)/submodules/externals/build/ffmpeg/Android.mk include $(linphone-root-dir)/submodules/externals/build/libvpx/Android.mk diff --git a/jni/Application.mk b/jni/Application.mk index 0507ce618..41610bf2f 100644 --- a/jni/Application.mk +++ b/jni/Application.mk @@ -28,6 +28,10 @@ ifeq ($(BUILD_X264),) BUILD_X264=0 endif +ifeq ($(BUILD_OPENH264),) +BUILD_OPENH264=0 +endif + ifeq ($(BUILD_G729),) BUILD_G729=0 endif @@ -58,6 +62,9 @@ APP_MODULES += libvpx ifeq ($(BUILD_X264),1) APP_MODULES +=libx264 libmsx264 endif +ifeq ($(BUILD_OPENH264),1) +APP_MODULES += libwels libmsopenh264 +endif endif _BUILD_AMR=0 diff --git a/submodules/externals/openh264 b/submodules/externals/openh264 new file mode 160000 index 000000000..fb5700bd5 --- /dev/null +++ b/submodules/externals/openh264 @@ -0,0 +1 @@ +Subproject commit fb5700bd5cc18dd33c120ce9dd5f79b8f1f35f3a diff --git a/submodules/linphone b/submodules/linphone index 5e01d28d2..90b510176 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 5e01d28d2bb5388a82de982fa274ba1e9f843ef1 +Subproject commit 90b51017647087cc3fb1656a8c933bec5623934b diff --git a/submodules/msopenh264 b/submodules/msopenh264 new file mode 160000 index 000000000..d7c97675f --- /dev/null +++ b/submodules/msopenh264 @@ -0,0 +1 @@ +Subproject commit d7c97675f6dd727c79f75bd807f69a8ad8946146