From febe0f8dacea2d2a31902b3dc469be757f8c3c4d Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Wed, 24 Feb 2016 18:43:21 -0500 Subject: [PATCH] FS-8867: build using in tree libvpx, vpx no longer optional and does not use system libvpx due to issues with having to update it frequently conflicting with system libraries, now we link to the static in tree version instead. Also, mod_vpx is now a core module instead of a loadable module, so mod_vpx.so will no longer be built --- Makefile.am | 20 +- build/modules.conf.in | 1 - build/modules.conf.most | 1 - .../autoload_configs/modules.conf.xml | 1 - conf/rayo/autoload_configs/modules.conf.xml | 1 - conf/sbc/autoload_configs/modules.conf.xml | 1 - .../testing/autoload_configs/modules.conf.xml | 1 - .../vanilla/autoload_configs/modules.conf.xml | 1 - configure.ac | 29 - debian/control-modules | 4 - freeswitch.spec | 5 +- libs/.gitignore | 13 +- libs/libvpx/.gitignore | 14 + libs/libvpx/configure | 749 ++++++++++++++++++ src/include/switch_image.h | 2 +- src/mod/applications/mod_av/Makefile.am | 8 - src/mod/applications/mod_cv/Makefile.am | 8 - src/mod/applications/mod_fsv/Makefile.am | 9 - src/mod/applications/mod_mp4v2/Makefile.am | 9 - src/mod/codecs/mod_openh264/Makefile.am | 9 - src/mod/codecs/mod_vpx/Makefile.am | 15 - src/mod/codecs/mod_vpx/README | 9 - src/mod/formats/mod_imagick/Makefile.am | 8 - src/mod/formats/mod_vlc/Makefile.am | 8 - src/switch_core_video.c | 4 +- src/switch_loadable_module.c | 1 + .../codecs/mod_vpx/mod_vpx.c => switch_vpx.c} | 2 +- 27 files changed, 793 insertions(+), 140 deletions(-) create mode 100644 libs/libvpx/.gitignore create mode 100755 libs/libvpx/configure delete mode 100644 src/mod/codecs/mod_vpx/Makefile.am delete mode 100644 src/mod/codecs/mod_vpx/README rename src/{mod/codecs/mod_vpx/mod_vpx.c => switch_vpx.c} (99%) diff --git a/Makefile.am b/Makefile.am index e0a10b218a..73a6f47be8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -27,7 +27,7 @@ AM_LIBAPU_LIBS := $(subst $(switch_builddir)/,,$(shell ./libs/apr-util/apu-1-con endif AM_CFLAGS = $(SWITCH_AM_CFLAGS) $(SWITCH_ANSI_CFLAGS) -AM_CPPFLAGS = $(SWITCH_AM_CXXFLAGS) -I$(switch_srcdir)/libs/sofia-sip/libsofia-sip-ua/sdp -I$(switch_srcdir)/libs/sofia-sip/libsofia-sip-ua/su -I$(switch_builddir)/libs/sofia-sip/libsofia-sip-ua/su +AM_CPPFLAGS = -I$(switch_srcdir)/libs/libvpx $(SWITCH_AM_CXXFLAGS) -I$(switch_srcdir)/libs/sofia-sip/libsofia-sip-ua/sdp -I$(switch_srcdir)/libs/sofia-sip/libsofia-sip-ua/su -I$(switch_builddir)/libs/sofia-sip/libsofia-sip-ua/su AM_LDFLAGS = $(SWITCH_AM_LDFLAGS) $(AM_LIBAPR_LDFLAGS) $(AM_LIBAPU_LDFLAGS) DEFAULT_SOUNDS=en-us-callie-8000 @@ -120,9 +120,10 @@ CORE_CFLAGS += -I$(switch_srcdir)/libs/srtp/crypto/include -Ilibs/srtp/crypto/in CORE_CFLAGS += -I$(switch_builddir)/libs/spandsp/src -I$(switch_srcdir)/libs/spandsp/src CORE_CFLAGS += -I$(switch_builddir)/libs/tiff-4.0.2/libtiff -I$(switch_srcdir)/libs/tiff-4.0.2/libtiff CORE_CFLAGS += -DSWITCH_HAVE_YUV +CORE_CFLAGS += -DSWITCH_HAVE_VPX APR_LIBS = $(AM_LIBAPU_LIBS) $(AM_LIBAPR_LIBS) -CORE_LIBS= +CORE_LIBS=libs/libvpx/libvpx.a if SYSTEM_APRUTIL CORE_LIBS += $(AM_LIBAPU_LINKLIBTOOL) else @@ -151,10 +152,6 @@ if HAVE_PNG CORE_CFLAGS += -DSWITCH_HAVE_PNG $(LIBPNG_CFLAGS) endif -if HAVE_VPX -CORE_CFLAGS += -DSWITCH_HAVE_VPX $(VPX_CFLAGS) -endif - if HAVE_FREETYPE CORE_CFLAGS += -DSWITCH_HAVE_FREETYPE $(LIBFREETYPE_CFLAGS) endif @@ -201,9 +198,9 @@ libfreeswitch_libyuv_la_CPPFLAGS = -O2 -fomit-frame-pointer -Ilibs/libyuv/includ CORE_LIBS+=libfreeswitch_libyuv.la lib_LTLIBRARIES = libfreeswitch.la -libfreeswitch_la_CFLAGS = $(CORE_CFLAGS) $(SQLITE_CFLAGS) $(FREETYPE_CFLAGS) $(CURL_CFLAGS) $(PCRE_CFLAGS) $(SPEEX_CFLAGS) $(LIBEDIT_CFLAGS) $(openssl_CFLAGS) $(VPX_CFLAGS) $(AM_CFLAGS) +libfreeswitch_la_CFLAGS = $(CORE_CFLAGS) $(SQLITE_CFLAGS) $(FREETYPE_CFLAGS) $(CURL_CFLAGS) $(PCRE_CFLAGS) $(SPEEX_CFLAGS) $(LIBEDIT_CFLAGS) $(openssl_CFLAGS) $(AM_CFLAGS) libfreeswitch_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS) $(PLATFORM_CORE_LDFLAGS) -no-undefined -libfreeswitch_la_LIBADD = $(CORE_LIBS) $(APR_LIBS) $(SQLITE_LIBS) $(FREETYPE_LIBS) $(CURL_LIBS) $(PCRE_LIBS) $(SPEEX_LIBS) $(LIBEDIT_LIBS) $(openssl_LIBS) $(VPX_LIBS) $(PLATFORM_CORE_LIBS) +libfreeswitch_la_LIBADD = $(CORE_LIBS) $(APR_LIBS) $(SQLITE_LIBS) $(FREETYPE_LIBS) $(CURL_LIBS) $(PCRE_LIBS) $(SPEEX_LIBS) $(LIBEDIT_LIBS) $(openssl_LIBS) $(PLATFORM_CORE_LIBS) libfreeswitch_la_DEPENDENCIES = $(BUILT_SOURCES) if HAVE_PNG @@ -347,6 +344,7 @@ libfreeswitch_la_SOURCES = \ src/switch_curl.c \ src/switch_hashtable.c\ src/switch_utf8.c \ + src/switch_vpx.c \ libs/libtpl-1.5/src/tpl.c \ libs/libteletone/src/libteletone_detect.c \ libs/libteletone/src/libteletone_generate.c \ @@ -517,6 +515,12 @@ libs/libedit/src/.libs/libedit.a: libs/libzrtp/libzrtp.a: cd libs/libzrtp && $(MAKE) +libs/libvpx/Makefile: + cd libs/libvpx && sh ./configure --enable-pic --disable-docs --disable-examples --disable-install-bins --disable-install-srcs --disable-unit-tests + +libs/libvpx/libvpx.a: libs/libvpx/Makefile + @cd libs/libvpx && $(MAKE) + libs/sofia-sip/Makefile: cd libs/sofia-sip && sh ./configure.gnu $(MY_DEFAULT_ARGS) diff --git a/build/modules.conf.in b/build/modules.conf.in index f87353c193..9c1a6d4ac0 100644 --- a/build/modules.conf.in +++ b/build/modules.conf.in @@ -75,7 +75,6 @@ codecs/mod_opus #codecs/mod_silk #codecs/mod_siren #codecs/mod_theora -codecs/mod_vpx dialplans/mod_dialplan_asterisk #dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml diff --git a/build/modules.conf.most b/build/modules.conf.most index a4201706c8..3becf53b28 100644 --- a/build/modules.conf.most +++ b/build/modules.conf.most @@ -74,7 +74,6 @@ codecs/mod_sangoma_codec codecs/mod_silk codecs/mod_siren codecs/mod_theora -codecs/mod_vpx dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml diff --git a/conf/insideout/autoload_configs/modules.conf.xml b/conf/insideout/autoload_configs/modules.conf.xml index 22f35c6cf3..3e2b09cdcb 100644 --- a/conf/insideout/autoload_configs/modules.conf.xml +++ b/conf/insideout/autoload_configs/modules.conf.xml @@ -63,7 +63,6 @@ - diff --git a/conf/rayo/autoload_configs/modules.conf.xml b/conf/rayo/autoload_configs/modules.conf.xml index 3a2ace10ad..f6c58680bc 100644 --- a/conf/rayo/autoload_configs/modules.conf.xml +++ b/conf/rayo/autoload_configs/modules.conf.xml @@ -30,7 +30,6 @@ - diff --git a/conf/sbc/autoload_configs/modules.conf.xml b/conf/sbc/autoload_configs/modules.conf.xml index 940c82b7a9..579b1d33be 100644 --- a/conf/sbc/autoload_configs/modules.conf.xml +++ b/conf/sbc/autoload_configs/modules.conf.xml @@ -42,7 +42,6 @@ - diff --git a/conf/testing/autoload_configs/modules.conf.xml b/conf/testing/autoload_configs/modules.conf.xml index f0e099661f..9849ce2d94 100644 --- a/conf/testing/autoload_configs/modules.conf.xml +++ b/conf/testing/autoload_configs/modules.conf.xml @@ -23,7 +23,6 @@ - diff --git a/conf/vanilla/autoload_configs/modules.conf.xml b/conf/vanilla/autoload_configs/modules.conf.xml index 5437153660..c850d7365f 100644 --- a/conf/vanilla/autoload_configs/modules.conf.xml +++ b/conf/vanilla/autoload_configs/modules.conf.xml @@ -94,7 +94,6 @@ - diff --git a/configure.ac b/configure.ac index 6e87732053..9238dbdef3 100644 --- a/configure.ac +++ b/configure.ac @@ -895,8 +895,6 @@ CPPFLAGS="$save_CPPFLAGS" AX_HAVE_CPU_SET -AC_CHECK_LIB(vpx, vpx_img_alloc, [AC_DEFINE(HAVE_VPX, 1, [Define if you have vpx()])]) - AC_CHECK_LIB(rt, clock_gettime, [AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Define if you have clock_gettime()])]) AC_CHECK_LIB(rt, clock_getres, [AC_DEFINE(HAVE_CLOCK_GETRES, 1, [Define if you have clock_getres()])]) AC_CHECK_LIB(rt, clock_nanosleep, [AC_DEFINE(HAVE_CLOCK_NANOSLEEP, 1, [Define if you have clock_nanosleep()])]) @@ -1268,32 +1266,6 @@ PKG_CHECK_MODULES([SNDFILE], [sndfile >= 1.0.20],[ AM_CONDITIONAL([HAVE_SNDFILE],[true])],[ AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_SNDFILE],[false])]) -ac_cv_have_vpx=no -PKG_CHECK_MODULES([VPX], [vpx2 >= 1.5.0],[ - ac_cv_have_vpx=yes],[ - PKG_CHECK_MODULES([VPX], [vpx >= 1.5.0],[ - ac_cv_have_vpx=yes],[ - AC_MSG_RESULT([no]); ac_cv_have_vpx=no])]) - -vpx_atleast_15=no - -if test x"$ac_cv_have_vpx" = xyes; then -AC_MSG_CHECKING(whether libvpx is at least version 1.5) -save_CPPFLAGS="${CPPFLAGS}" -CPPFLAGS="${VPX_CFLAGS} ${save_CPPFLAGS}" -AC_TRY_COMPILE([ -#include -], [vpx_color_range_t foo = VPX_CR_FULL_RANGE;],[vpx_atleast_15=yes],[vpx_atleast_15=no]) -AC_MSG_RESULT($vpx_atleast_15) -CPPFLAGS="${save_CPPFLAGS}" -fi - -AM_CONDITIONAL([HAVE_VPX],[test "x$vpx_atleast_15" != "xno"]) - -SWITCH_AM_CFLAGS="$VPX_CFLAGS $SWITCH_AM_CFLAGS" -SWITCH_AM_CXXFLAGS="$VPX_CFLAGS $SWITCH_AM_CXXFLAGS" -SWITCH_AM_CPPFLAGS="$VPX_CFLAGS $SWITCH_AM_CPPFLAGS" - PKG_CHECK_MODULES([MPG123], [libmpg123 >= 1.20.1],[ AM_CONDITIONAL([HAVE_MPG123],[true])],[ AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_MPG123],[false])]) @@ -1775,7 +1747,6 @@ AC_CONFIG_FILES([Makefile src/mod/codecs/mod_siren/Makefile src/mod/codecs/mod_skel_codec/Makefile src/mod/codecs/mod_theora/Makefile - src/mod/codecs/mod_vpx/Makefile src/mod/dialplans/mod_dialplan_asterisk/Makefile src/mod/dialplans/mod_dialplan_directory/Makefile src/mod/dialplans/mod_dialplan_xml/Makefile diff --git a/debian/control-modules b/debian/control-modules index 66c040f5d2..28d6aea2d0 100644 --- a/debian/control-modules +++ b/debian/control-modules @@ -377,10 +377,6 @@ Module: codecs/mod_theora Description: mod_theora Adds mod_theora. -Module: codecs/mod_vpx -Description: VP8/VP9 video codec - This module adds the VP8 video codec, also known as WebM. - Module: codecs/mod_yuv Description: Adds mod_yuv Adds mod_yuv. diff --git a/freeswitch.spec b/freeswitch.spec index a3917b413d..8d1b02a701 100644 --- a/freeswitch.spec +++ b/freeswitch.spec @@ -1462,7 +1462,7 @@ ASR_TTS_MODULES="asr_tts/mod_flite asr_tts/mod_pocketsphinx asr_tts/mod_tts_comm ###################################################################################################################### CODECS_MODULES="codecs/mod_amr codecs/mod_amrwb codecs/mod_bv codecs/mod_codec2 codecs/mod_g723_1 \ codecs/mod_g729 codecs/mod_h26x codecs/mod_ilbc codecs/mod_isac codecs/mod_mp4v codecs/mod_opus codecs/mod_silk \ - codecs/mod_siren codecs/mod_theora codecs/mod_vpx" + codecs/mod_siren codecs/mod_theora" # %if %{build_sng_tc} CODECS_MODULES+="codecs/mod_sangoma_codec" @@ -2174,9 +2174,6 @@ fi %files codec-mp4v %{MODINSTDIR}/mod_mp4v.so* -%files codec-vpx -%{MODINSTDIR}/mod_vpx.so* - %files codec-opus %{MODINSTDIR}/mod_opus.so* %config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/opus.conf.xml diff --git a/libs/.gitignore b/libs/.gitignore index 9da77e16e9..a567a23673 100644 --- a/libs/.gitignore +++ b/libs/.gitignore @@ -6,7 +6,6 @@ config.log config.nice config.status config.sub -configure depcomp install-sh libtool @@ -829,3 +828,15 @@ unimrcp/build/compile /ldns/ /portaudio/ portaudio.*.log +apr-util/configure +apr-util/xml/expat/configure +apr/configure +iksemel/configure +libdingaling/configure +libyuv/Makefile +libyuv/convert +sofia-sip/configure +spandsp/configure +srtp/configure +tiff-4.0.2/configure +unimrcp/configure diff --git a/libs/libvpx/.gitignore b/libs/libvpx/.gitignore new file mode 100644 index 0000000000..9fed8d5b67 --- /dev/null +++ b/libs/libvpx/.gitignore @@ -0,0 +1,14 @@ +*.d +.bins +.docs +Makefile +config.mk +libs-*.mk +vp8_rtcd.h +vp9_rtcd.h +vpx_config.asm +vpx_config.c +vpx_config.h +vpx_dsp_rtcd.h +vpx_scale_rtcd.h +vpx_version.h diff --git a/libs/libvpx/configure b/libs/libvpx/configure new file mode 100755 index 0000000000..095cddf2db --- /dev/null +++ b/libs/libvpx/configure @@ -0,0 +1,749 @@ +#!/bin/sh +## +## configure +## +## This script is the front-end to the build system. It provides a similar +## interface to standard configure scripts with some extra bits for dealing +## with toolchains that differ from the standard POSIX interface and +## for extracting subsets of the source tree. In theory, reusable parts +## of this script were intended to live in build/make/configure.sh, +## but in practice, the line is pretty blurry. +## +## This build system is based in part on the FFmpeg configure script. +## + +#source_path="`dirname \"$0\"`" +source_path=${0%/*} +. "${source_path}/build/make/configure.sh" + +show_help(){ + show_help_pre + cat << EOF +Advanced options: + ${toggle_libs} libraries + ${toggle_examples} examples + ${toggle_docs} documentation + ${toggle_unit_tests} unit tests + ${toggle_decode_perf_tests} build decoder perf tests with unit tests + ${toggle_encode_perf_tests} build encoder perf tests with unit tests + --cpu=CPU tune for the specified CPU (ARM: cortex-a8, X86: sse3) + --libc=PATH path to alternate libc + --size-limit=WxH max size to allow in the decoder + --as={yasm|nasm|auto} use specified assembler [auto, yasm preferred] + --sdk-path=PATH path to root of sdk (android builds only) + ${toggle_codec_srcs} in/exclude codec library source code + ${toggle_debug_libs} in/exclude debug version of libraries + ${toggle_static_msvcrt} use static MSVCRT (VS builds only) + ${toggle_vp9_highbitdepth} use VP9 high bit depth (10/12) profiles + ${toggle_better_hw_compatibility} + enable encoder to produce streams with better + hardware decoder compatibility + ${toggle_vp8} VP8 codec support + ${toggle_vp9} VP9 codec support + ${toggle_vp10} VP10 codec support + ${toggle_internal_stats} output of encoder internal stats for debug, if supported (encoders) + ${toggle_postproc} postprocessing + ${toggle_vp9_postproc} vp9 specific postprocessing + ${toggle_multithread} multithreaded encoding and decoding + ${toggle_spatial_resampling} spatial sampling (scaling) support + ${toggle_realtime_only} enable this option while building for real-time encoding + ${toggle_onthefly_bitpacking} enable on-the-fly bitpacking in real-time encoding + ${toggle_error_concealment} enable this option to get a decoder which is able to conceal losses + ${toggle_coefficient_range_checking} + enable decoder to check if intermediate + transform coefficients are in valid range + ${toggle_runtime_cpu_detect} runtime cpu detection + ${toggle_shared} shared library support + ${toggle_static} static library support + ${toggle_small} favor smaller size over speed + ${toggle_postproc_visualizer} macro block / block level visualizers + ${toggle_multi_res_encoding} enable multiple-resolution encoding + ${toggle_temporal_denoising} enable temporal denoising and disable the spatial denoiser + ${toggle_vp9_temporal_denoising} + enable vp9 temporal denoising + ${toggle_webm_io} enable input from and output to WebM container + ${toggle_libyuv} enable libyuv + +Codecs: + Codecs can be selectively enabled or disabled individually, or by family: + --disable- + is equivalent to: + --disable--encoder + --disable--decoder + + Codecs available in this distribution: +EOF +#restore editor state ' + + family=""; + last_family=""; + c=""; + str=""; + for c in ${CODECS}; do + family=${c%_*} + if [ "${family}" != "${last_family}" ]; then + [ -z "${str}" ] || echo "${str}" + str="$(printf ' %10s:' ${family})" + fi + str="${str} $(printf '%10s' ${c#*_})" + last_family=${family} + done + echo "${str}" + show_help_post +} + +## +## BEGIN APPLICATION SPECIFIC CONFIGURATION +## + +# all_platforms is a list of all supported target platforms. Maintain +# alphabetically by architecture, generic-gnu last. +all_platforms="${all_platforms} armv6-darwin-gcc" +all_platforms="${all_platforms} armv6-linux-rvct" +all_platforms="${all_platforms} armv6-linux-gcc" +all_platforms="${all_platforms} armv6-none-rvct" +all_platforms="${all_platforms} arm64-darwin-gcc" +all_platforms="${all_platforms} armv7-android-gcc" #neon Cortex-A8 +all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8 +all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8 +all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8 +all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8 +all_platforms="${all_platforms} armv7-win32-vs11" +all_platforms="${all_platforms} armv7-win32-vs12" +all_platforms="${all_platforms} armv7-win32-vs14" +all_platforms="${all_platforms} armv7s-darwin-gcc" +all_platforms="${all_platforms} mips32-linux-gcc" +all_platforms="${all_platforms} mips64-linux-gcc" +all_platforms="${all_platforms} sparc-solaris-gcc" +all_platforms="${all_platforms} x86-android-gcc" +all_platforms="${all_platforms} x86-darwin8-gcc" +all_platforms="${all_platforms} x86-darwin8-icc" +all_platforms="${all_platforms} x86-darwin9-gcc" +all_platforms="${all_platforms} x86-darwin9-icc" +all_platforms="${all_platforms} x86-darwin10-gcc" +all_platforms="${all_platforms} x86-darwin11-gcc" +all_platforms="${all_platforms} x86-darwin12-gcc" +all_platforms="${all_platforms} x86-darwin13-gcc" +all_platforms="${all_platforms} x86-darwin14-gcc" +all_platforms="${all_platforms} x86-darwin15-gcc" +all_platforms="${all_platforms} x86-iphonesimulator-gcc" +all_platforms="${all_platforms} x86-linux-gcc" +all_platforms="${all_platforms} x86-linux-icc" +all_platforms="${all_platforms} x86-os2-gcc" +all_platforms="${all_platforms} x86-solaris-gcc" +all_platforms="${all_platforms} x86-win32-gcc" +all_platforms="${all_platforms} x86-win32-vs7" +all_platforms="${all_platforms} x86-win32-vs8" +all_platforms="${all_platforms} x86-win32-vs9" +all_platforms="${all_platforms} x86-win32-vs10" +all_platforms="${all_platforms} x86-win32-vs11" +all_platforms="${all_platforms} x86-win32-vs12" +all_platforms="${all_platforms} x86-win32-vs14" +all_platforms="${all_platforms} x86_64-android-gcc" +all_platforms="${all_platforms} x86_64-darwin9-gcc" +all_platforms="${all_platforms} x86_64-darwin10-gcc" +all_platforms="${all_platforms} x86_64-darwin11-gcc" +all_platforms="${all_platforms} x86_64-darwin12-gcc" +all_platforms="${all_platforms} x86_64-darwin13-gcc" +all_platforms="${all_platforms} x86_64-darwin14-gcc" +all_platforms="${all_platforms} x86_64-darwin15-gcc" +all_platforms="${all_platforms} x86_64-iphonesimulator-gcc" +all_platforms="${all_platforms} x86_64-linux-gcc" +all_platforms="${all_platforms} x86_64-linux-icc" +all_platforms="${all_platforms} x86_64-solaris-gcc" +all_platforms="${all_platforms} x86_64-win64-gcc" +all_platforms="${all_platforms} x86_64-win64-vs8" +all_platforms="${all_platforms} x86_64-win64-vs9" +all_platforms="${all_platforms} x86_64-win64-vs10" +all_platforms="${all_platforms} x86_64-win64-vs11" +all_platforms="${all_platforms} x86_64-win64-vs12" +all_platforms="${all_platforms} x86_64-win64-vs14" +all_platforms="${all_platforms} generic-gnu" + +# all_targets is a list of all targets that can be configured +# note that these should be in dependency order for now. +all_targets="libs examples docs" + +# all targets available are enabled, by default. +for t in ${all_targets}; do + [ -f "${source_path}/${t}.mk" ] && enable_feature ${t} +done + +if ! perl --version >/dev/null; then + die "Perl is required to build" +fi + + +if [ "`cd \"${source_path}\" && pwd`" != "`pwd`" ]; then + # test to see if source_path already configured + if [ -f "${source_path}/vpx_config.h" ]; then + die "source directory already configured; run 'make distclean' there first" + fi +fi + +# check installed doxygen version +doxy_version=$(doxygen --version 2>/dev/null) +doxy_major=${doxy_version%%.*} +if [ ${doxy_major:-0} -ge 1 ]; then + doxy_version=${doxy_version#*.} + doxy_minor=${doxy_version%%.*} + doxy_patch=${doxy_version##*.} + + [ $doxy_major -gt 1 ] && enable_feature doxygen + [ $doxy_minor -gt 5 ] && enable_feature doxygen + [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen +fi + +# disable codecs when their source directory does not exist +[ -d "${source_path}/vp8" ] || disable_feature vp8 +[ -d "${source_path}/vp9" ] || disable_feature vp9 +[ -d "${source_path}/vp10" ] || disable_feature vp10 + +# disable vp10 codec by default +disable_feature vp10 + +# install everything except the sources, by default. sources will have +# to be enabled when doing dist builds, since that's no longer a common +# case. +enabled doxygen && enable_feature install_docs +enable_feature install_bins +enable_feature install_libs + +enable_feature static +enable_feature optimizations +enable_feature dependency_tracking +enable_feature spatial_resampling +enable_feature multithread +enable_feature os_support +enable_feature temporal_denoising + +CODECS=" + vp8_encoder + vp8_decoder + vp9_encoder + vp9_decoder + vp10_encoder + vp10_decoder +" +CODEC_FAMILIES=" + vp8 + vp9 + vp10 +" + +ARCH_LIST=" + arm + mips + x86 + x86_64 +" +ARCH_EXT_LIST_X86=" + mmx + sse + sse2 + sse3 + ssse3 + sse4_1 + avx + avx2 +" +ARCH_EXT_LIST=" + edsp + media + neon + neon_asm + + mips32 + dspr2 + msa + mips64 + + ${ARCH_EXT_LIST_X86} +" +HAVE_LIST=" + ${ARCH_EXT_LIST} + vpx_ports + pthread_h + unistd_h +" +EXPERIMENT_LIST=" + spatial_svc + fp_mb_stats + emulate_hardware + misc_fixes +" +CONFIG_LIST=" + dependency_tracking + external_build + install_docs + install_bins + install_libs + install_srcs + use_x86inc + debug + gprof + gcov + rvct + gcc + msvs + pic + big_endian + + codec_srcs + debug_libs + + dequant_tokens + dc_recon + runtime_cpu_detect + postproc + vp9_postproc + multithread + internal_stats + ${CODECS} + ${CODEC_FAMILIES} + encoders + decoders + static_msvcrt + spatial_resampling + realtime_only + onthefly_bitpacking + error_concealment + shared + static + small + postproc_visualizer + os_support + unit_tests + webm_io + libyuv + decode_perf_tests + encode_perf_tests + multi_res_encoding + temporal_denoising + vp9_temporal_denoising + coefficient_range_checking + vp9_highbitdepth + better_hw_compatibility + experimental + size_limit + ${EXPERIMENT_LIST} +" +CMDLINE_SELECT=" + dependency_tracking + external_build + extra_warnings + werror + install_docs + install_bins + install_libs + install_srcs + debug + gprof + gcov + pic + use_x86inc + optimizations + ccache + runtime_cpu_detect + thumb + + libs + examples + docs + libc + as + size_limit + codec_srcs + debug_libs + + dequant_tokens + dc_recon + postproc + vp9_postproc + multithread + internal_stats + ${CODECS} + ${CODEC_FAMILIES} + static_msvcrt + spatial_resampling + realtime_only + onthefly_bitpacking + error_concealment + shared + static + small + postproc_visualizer + unit_tests + webm_io + libyuv + decode_perf_tests + encode_perf_tests + multi_res_encoding + temporal_denoising + vp9_temporal_denoising + coefficient_range_checking + better_hw_compatibility + vp9_highbitdepth + experimental +" + +process_cmdline() { + for opt do + optval="${opt#*=}" + case "$opt" in + --disable-codecs) for c in ${CODECS}; do disable_feature $c; done ;; + --enable-?*|--disable-?*) + eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` + if echo "${EXPERIMENT_LIST}" | grep "^ *$option\$" >/dev/null; then + if enabled experimental; then + ${action}_feature $option + else + log_echo "Ignoring $opt -- not in experimental mode." + fi + else + process_common_cmdline $opt + fi + ;; + *) process_common_cmdline "$opt" + ;; + esac + done +} + +post_process_cmdline() { + c="" + + # If the codec family is disabled, disable all components of that family. + # If the codec family is enabled, enable all components of that family. + log_echo "Configuring selected codecs" + for c in ${CODECS}; do + disabled ${c%%_*} && disable_feature ${c} + enabled ${c%%_*} && enable_feature ${c} + done + + # Enable all detected codecs, if they haven't been disabled + for c in ${CODECS}; do soft_enable $c; done + + # Enable the codec family if any component of that family is enabled + for c in ${CODECS}; do + enabled $c && enable_feature ${c%_*} + done + + # Set the {en,de}coders variable if any algorithm in that class is enabled + for c in ${CODECS}; do + enabled ${c} && enable_feature ${c##*_}s + done +} + + +process_targets() { + enabled child || write_common_config_banner + write_common_target_config_h ${BUILD_PFX}vpx_config.h + write_common_config_targets + + # Calculate the default distribution name, based on the enabled features + cf="" + DIST_DIR=vpx + for cf in $CODEC_FAMILIES; do + if enabled ${cf}_encoder && enabled ${cf}_decoder; then + DIST_DIR="${DIST_DIR}-${cf}" + elif enabled ${cf}_encoder; then + DIST_DIR="${DIST_DIR}-${cf}cx" + elif enabled ${cf}_decoder; then + DIST_DIR="${DIST_DIR}-${cf}dx" + fi + done + enabled debug_libs && DIST_DIR="${DIST_DIR}-debug" + enabled codec_srcs && DIST_DIR="${DIST_DIR}-src" + ! enabled postproc && ! enabled vp9_postproc && DIST_DIR="${DIST_DIR}-nopost" + ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt" + ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs" + DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}" + case "${tgt_os}" in + win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md" + DIST_DIR="${DIST_DIR}-${tgt_cc}" + ;; + esac + if [ -f "${source_path}/build/make/version.sh" ]; then + ver=`"$source_path/build/make/version.sh" --bare "$source_path"` + DIST_DIR="${DIST_DIR}-${ver}" + VERSION_STRING=${ver} + ver=${ver%%-*} + VERSION_PATCH=${ver##*.} + ver=${ver%.*} + VERSION_MINOR=${ver##*.} + ver=${ver#v} + VERSION_MAJOR=${ver%.*} + fi + enabled child || cat <> config.mk + +PREFIX=${prefix} +ifeq (\$(MAKECMDGOALS),dist) +DIST_DIR?=${DIST_DIR} +else +DIST_DIR?=\$(DESTDIR)${prefix} +endif +LIBSUBDIR=${libdir##${prefix}/} + +VERSION_STRING=${VERSION_STRING} + +VERSION_MAJOR=${VERSION_MAJOR} +VERSION_MINOR=${VERSION_MINOR} +VERSION_PATCH=${VERSION_PATCH} + +CONFIGURE_ARGS=${CONFIGURE_ARGS} +EOF + enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk + + # + # Write makefiles for all enabled targets + # + for tgt in libs examples docs solution; do + tgt_fn="$tgt-$toolchain.mk" + + if enabled $tgt; then + echo "Creating makefiles for ${toolchain} ${tgt}" + write_common_target_config_mk $tgt_fn ${BUILD_PFX}vpx_config.h + #write_${tgt}_config + fi + done + +} + +process_detect() { + if enabled shared; then + # Can only build shared libs on a subset of platforms. Doing this check + # here rather than at option parse time because the target auto-detect + # magic happens after the command line has been parsed. + if ! enabled linux && ! enabled os2; then + if enabled gnu; then + echo "--enable-shared is only supported on ELF; assuming this is OK" + else + die "--enable-shared only supported on ELF and OS/2 for now" + fi + fi + fi + if [ -z "$CC" ] || enabled external_build; then + echo "Bypassing toolchain for environment detection." + enable_feature external_build + check_header() { + log fake_check_header "$@" + header=$1 + shift + var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'` + disable_feature $var + # Headers common to all environments + case $header in + stdio.h) + true; + ;; + *) + result=false + for d in "$@"; do + [ -f "${d##-I}/$header" ] && result=true && break + done + ${result:-true} + esac && enable_feature $var + + # Specialize windows and POSIX environments. + case $toolchain in + *-win*-*) + # Don't check for any headers in Windows builds. + false + ;; + *) + case $header in + pthread.h) true;; + unistd.h) true;; + *) false;; + esac && enable_feature $var + esac + enabled $var + } + check_ld() { + true + } + fi + check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}" + check_ld <> ${BUILD_PFX}vpx_config.c +#include "vpx/vpx_codec.h" +static const char* const cfg = "$CONFIGURE_ARGS"; +const char *vpx_codec_build_config(void) {return cfg;} +EOF diff --git a/src/include/switch_image.h b/src/include/switch_image.h index e9e952c489..7958c69806 100644 --- a/src/include/switch_image.h +++ b/src/include/switch_image.h @@ -28,7 +28,7 @@ extern "C" { * types, removing or reassigning enums, adding/removing/rearranging * fields to structures */ -#define VPX_IMAGE_ABI_VERSION (3) /**<\hideinitializer*/ +#define VPX_IMAGE_ABI_VERSION (4) /**<\hideinitializer*/ #define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format. */ diff --git a/src/mod/applications/mod_av/Makefile.am b/src/mod/applications/mod_av/Makefile.am index 52c1c53409..261985c7a9 100644 --- a/src/mod/applications/mod_av/Makefile.am +++ b/src/mod/applications/mod_av/Makefile.am @@ -1,7 +1,6 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_av -if HAVE_VPX if HAVE_AVFORMAT mod_LTLIBRARIES = mod_av.la @@ -16,10 +15,3 @@ all: error error: $(error You must install libavformat-dev to build mod_av) endif - -else -install: error -all: error -error: - $(error You must install libvpx2-dev to build mod_av) -endif diff --git a/src/mod/applications/mod_cv/Makefile.am b/src/mod/applications/mod_cv/Makefile.am index 9f62055f64..a01bc92569 100644 --- a/src/mod/applications/mod_cv/Makefile.am +++ b/src/mod/applications/mod_cv/Makefile.am @@ -1,7 +1,6 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_cv -if HAVE_VPX if HAVE_OPENCV mod_LTLIBRARIES = mod_cv.la @@ -16,10 +15,3 @@ all: error error: $(error You must install libopencv-dev to build mod_cv) endif - -else -install: error -all: error -error: - $(error You must install libvpx2-dev to build mod_cv) -endif diff --git a/src/mod/applications/mod_fsv/Makefile.am b/src/mod/applications/mod_fsv/Makefile.am index 900d72bd7c..dd75a2f081 100644 --- a/src/mod/applications/mod_fsv/Makefile.am +++ b/src/mod/applications/mod_fsv/Makefile.am @@ -1,17 +1,8 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_fsv -if HAVE_VPX - mod_LTLIBRARIES = mod_fsv.la mod_fsv_la_SOURCES = mod_fsv.c mod_fsv_la_CFLAGS = $(AM_CFLAGS) mod_fsv_la_LIBADD = $(switch_builddir)/libfreeswitch.la mod_fsv_la_LDFLAGS = -avoid-version -module -no-undefined -shared - -else -install: error -all: error -error: - $(error You must install libvpx2-dev to build mod_fsv) -endif diff --git a/src/mod/applications/mod_mp4v2/Makefile.am b/src/mod/applications/mod_mp4v2/Makefile.am index 7bd8ee9aee..f8b8bec05a 100644 --- a/src/mod/applications/mod_mp4v2/Makefile.am +++ b/src/mod/applications/mod_mp4v2/Makefile.am @@ -1,17 +1,8 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_mp4v2 -if HAVE_VPX - mod_LTLIBRARIES = mod_mp4v2.la mod_mp4v2_la_SOURCES = mod_mp4v2.c mod_mp4v2_la_CFLAGS = $(AM_CFLAGS) mod_mp4v2_la_LIBADD = $(switch_builddir)/libfreeswitch.la mod_mp4v2_la_LDFLAGS = -avoid-version -module -no-undefined -shared -lmp4v2 - -else -install: error -all: error -error: - $(error You must install libvpx2-dev to build mod_mp4v2) -endif diff --git a/src/mod/codecs/mod_openh264/Makefile.am b/src/mod/codecs/mod_openh264/Makefile.am index f71b90e482..c541e9563f 100644 --- a/src/mod/codecs/mod_openh264/Makefile.am +++ b/src/mod/codecs/mod_openh264/Makefile.am @@ -1,8 +1,6 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_openh264 -if HAVE_VPX - OPENH264_DIR=/usr/local/ mod_LTLIBRARIES = mod_openh264.la @@ -10,10 +8,3 @@ mod_openh264_la_SOURCES = mod_openh264.cpp mod_openh264_la_CXXFLAGS = $(AM_CXXFLAGS) -I$(OPENH264_DIR)/include/wels mod_openh264_la_LIBADD = $(switch_builddir)/libfreeswitch.la mod_openh264_la_LDFLAGS = -L$(OPENH264_DIR)/lib/ -lopenh264 -avoid-version -module -no-undefined -shared - -else -install: error -all: error -error: - $(error You must install libvpx2-dev to build mod_openh264) -endif diff --git a/src/mod/codecs/mod_vpx/Makefile.am b/src/mod/codecs/mod_vpx/Makefile.am deleted file mode 100644 index 780b9af018..0000000000 --- a/src/mod/codecs/mod_vpx/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -include $(top_srcdir)/build/modmake.rulesam -MODNAME=mod_vpx - -if HAVE_VPX -mod_LTLIBRARIES = mod_vpx.la -mod_vpx_la_SOURCES = mod_vpx.c -mod_vpx_la_LIBADD = $(switch_builddir)/libfreeswitch.la -mod_vpx_la_CFLAGS = $(VPX_CFLAGS) $(SWITCH_AM_CFLAGS) -mod_vpx_la_LDFLAGS = $(VPX_LIBS) -avoid-version -module -no-undefined -shared -else -install: error -all: error -error: - $(error You must install your distros libvpx-dev to build mod_vpx) -endif diff --git a/src/mod/codecs/mod_vpx/README b/src/mod/codecs/mod_vpx/README deleted file mode 100644 index d2ee1f88a8..0000000000 --- a/src/mod/codecs/mod_vpx/README +++ /dev/null @@ -1,9 +0,0 @@ -To build this module I used the following steps: - -apt-get install yasm -git /usr/local/src/ -git clone https://chromium.googlesource.com/webm/libvpx -cd libvpx/build/ -../configure --enable-pic --enable-shared -make -make install diff --git a/src/mod/formats/mod_imagick/Makefile.am b/src/mod/formats/mod_imagick/Makefile.am index dcf49efebc..19270b6003 100644 --- a/src/mod/formats/mod_imagick/Makefile.am +++ b/src/mod/formats/mod_imagick/Makefile.am @@ -1,7 +1,6 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_imagick -if HAVE_VPX if HAVE_MAGICK mod_LTLIBRARIES = mod_imagick.la @@ -16,10 +15,3 @@ all: error error: $(error You must install libmagickcore-dev to build mod_imagick) endif - -else -install: error -all: error -error: - $(error You must install libvpx2-dev to build mod_imagick) -endif diff --git a/src/mod/formats/mod_vlc/Makefile.am b/src/mod/formats/mod_vlc/Makefile.am index 4c111d4793..328fed54b9 100644 --- a/src/mod/formats/mod_vlc/Makefile.am +++ b/src/mod/formats/mod_vlc/Makefile.am @@ -1,7 +1,6 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_vlc -if HAVE_VPX if HAVE_VLC mod_LTLIBRARIES = mod_vlc.la @@ -16,10 +15,3 @@ all: error error: $(error You must install libvlc-dev to build mod_vlc) endif - -else -install: error -all: error -error: - $(error You must install libvpx2-dev to build mod_vlc) -endif diff --git a/src/switch_core_video.c b/src/switch_core_video.c index e226b95376..3e820391bc 100644 --- a/src/switch_core_video.c +++ b/src/switch_core_video.c @@ -31,8 +31,8 @@ #ifdef SWITCH_HAVE_VPX #include "vpx/vpx_image.h" -#if VPX_IMAGE_ABI_VERSION != (3) -#error VPX_IMAGE_ABI_VERSION is not (3) +#if VPX_IMAGE_ABI_VERSION != (4) +#error VPX_IMAGE_ABI_VERSION is not (4) #endif #endif diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index b49af923c4..9a2635fca8 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -1876,6 +1876,7 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init(switch_bool_t autolo switch_loadable_module_load_module("", "CORE_SOFTTIMER_MODULE", SWITCH_FALSE, &err); switch_loadable_module_load_module("", "CORE_PCM_MODULE", SWITCH_FALSE, &err); switch_loadable_module_load_module("", "CORE_SPEEX_MODULE", SWITCH_FALSE, &err); + switch_loadable_module_load_module("", "CORE_VPX_MODULE", SWITCH_FALSE, &err); if ((xml = switch_xml_open_cfg(cf, &cfg, NULL))) { diff --git a/src/mod/codecs/mod_vpx/mod_vpx.c b/src/switch_vpx.c similarity index 99% rename from src/mod/codecs/mod_vpx/mod_vpx.c rename to src/switch_vpx.c index 8356fce7c4..58b7e2e147 100644 --- a/src/mod/codecs/mod_vpx/mod_vpx.c +++ b/src/switch_vpx.c @@ -241,7 +241,7 @@ static inline int IS_VP8_KEY_FRAME(uint8_t *data) #define IS_VP9_START_PKT(byte) ((byte) & 0x02) SWITCH_MODULE_LOAD_FUNCTION(mod_vpx_load); -SWITCH_MODULE_DEFINITION(mod_vpx, mod_vpx_load, NULL, NULL); +SWITCH_MODULE_DEFINITION(CORE_VPX_MODULE, mod_vpx_load, NULL, NULL); struct vpx_context { switch_codec_t *codec;