diff --git a/AudioFilter/CMakeLists.txt b/AudioFilter/CMakeLists.txt
index c2bd485c96c05a6c2415ca973e6c98cdca538f2b..344b4712d1871f5a3af448f90ec62a367f8aa79b 100644
--- a/AudioFilter/CMakeLists.txt
+++ b/AudioFilter/CMakeLists.txt
@@ -34,8 +34,8 @@ message(JPL\ path:\ ${JPL_DIRECTORY}/../../../build/${ProjectName}/${JPL_FILE_NA
 
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED True)
-set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
+set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
 
 set(plugin_SRC FilterMediaHandler.cpp
                FilterAudioSubscriber.cpp
@@ -65,15 +65,17 @@ target_include_directories(${ProjectName} PUBLIC ${PROJECT_BINARY_DIR}
                                                  ${FFMPEG}/include
                                                  )
 target_link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
-                                        ${FFMPEG}/bin
+                                        ${FFMPEG}/lib
+                                        ${CONTRIB_PATH}/msvc/lib/x64
                                         )
 
-target_link_libraries(${ProjectName} PUBLIC avformat swscale swresample avcodec avfilter avutil)
+target_link_libraries(${ProjectName} PUBLIC libavfilter libswscale libswresample libavformat libavcodec libavutil libvpx libx264 libopus libmfx
+                                     ws2_32 Bcrypt Crypt32 Secur32 Dnsapi)
 
 add_custom_command(
     TARGET ${ProjectName}
     PRE_BUILD
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
     COMMENT "Assembling Plugin files"
 )
 
@@ -82,6 +84,8 @@ add_custom_command(
     POST_BUILD
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
+    COMMAND cd ${CONTRIB_PATH}/src/ffmpeg/
+    COMMAND git checkout *
     COMMENT "Generating JPL archive"
 )
diff --git a/AudioFilter/build.sh b/AudioFilter/build.sh
index d54e9227b70a1c890e5a01a09c247449e00c5443..9b4f33bec76d15dd4c22095e8b3fb214c04af870 100755
--- a/AudioFilter/build.sh
+++ b/AudioFilter/build.sh
@@ -46,8 +46,20 @@ while getopts t:c:p OPT; do
   esac
 done
 
+pwd
+cp -r ffmpeg ${CONTRIB_PATH}/src/
+
 if [ "${PLATFORM}" = "linux-gnu" ] || [ "${PLATFORM}" = "redhat-linux" ]
 then
+    if [ -f "${CONTRIB_PATH}/native/.ffmpeg" ]; then
+        rm "${CONTRIB_PATH}/native/.ffmpeg"
+    fi
+    WORKPATH=$(pwd)
+    cd "${CONTRIB_PATH}/native/"
+    make .ffmpeg -j8
+    rm .ffmpeg
+    cd ${WORKPATH}
+
     python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
 
     CONTRIB_PLATFORM_CURT=${ARCH}
@@ -110,12 +122,12 @@ then
 
         if [ "$CURRENT_ABI" = armeabi-v7a ]
         then
-        export AR=$TOOLCHAIN/bin/arm-linux-android-ar
-        export AS=$TOOLCHAIN/bin/arm-linux-android-as
+        export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
+        export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
         export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
         export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
-        export LD=$TOOLCHAIN/bin/arm-linux-android-ld
-        export RANLIB=$TOOLCHAIN/bin/arm-linux-android-ranlib
+        export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
+        export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
         export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
         export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
 
@@ -179,6 +191,16 @@ then
         export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
         fi
 
+
+        if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then
+            rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg"
+        fi
+        WORKPATH=$(pwd)
+        cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/"
+        make .ffmpeg -j8
+        rm .ffmpeg
+        cd ${WORKPATH}
+
         #=========================================================
         #    Compile the plugin
         #=========================================================
@@ -225,3 +247,7 @@ then
 fi
 
 python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${EXTRAPATH}
+cd ${CONTRIB_PATH}/src/ffmpeg/
+# ffmpeg build configuration files were changed during plugin build
+# this git checkout will remove these changes
+git checkout -- .
diff --git a/AudioFilter/ffmpeg/package.json b/AudioFilter/ffmpeg/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0fd39eb17052eb5e52e334eb26f7471bbee1bb8e
--- /dev/null
+++ b/AudioFilter/ffmpeg/package.json
@@ -0,0 +1,33 @@
+{
+    "name": "ffmpeg",
+    "version": "9f38fac053010205806ece11e6aea9b7d3bde041",
+    "url": "https://github.com/FFmpeg/FFmpeg/archive/__VERSION__.tar.gz",
+    "deps": [
+        "vpx",
+        "x264",
+        "opus",
+        "ffnvcodec",
+        "media-sdk"
+    ],
+    "patches": [
+        "change-RTCP-ratio.patch",
+        "rtp_ext_abs_send_time.patch",
+        "libopusenc-enable-FEC.patch",
+        "libopusdec-enable-FEC.patch"
+    ],
+    "win_patches": [
+        "windows-configure.patch",
+        "windows-configure-ffnvcodec.patch",
+        "windows-configure-libmfx.patch"
+    ],
+    "project_paths": [],
+    "with_env" : "10.0.16299.0",
+    "custom_scripts": {
+        "pre_build": [],
+        "build": [
+            "call \"%CONTRIB_SRC_DIR%\\ffmpeg\\build_ffmpeg.bat\"",
+            "cd Build/win32/x64/lib & ren *.a *.lib"
+        ],
+        "post_build": []
+    }
+}
diff --git a/AudioFilter/ffmpeg/rules.mak b/AudioFilter/ffmpeg/rules.mak
new file mode 100644
index 0000000000000000000000000000000000000000..b8528df9f2285d7ec8d869c0e4a1697d66993168
--- /dev/null
+++ b/AudioFilter/ffmpeg/rules.mak
@@ -0,0 +1,364 @@
+ifdef HAVE_DARWIN_OS
+FFMPEG_HASH := n4.2.2
+else
+FFMPEG_HASH := 9f38fac053010205806ece11e6aea9b7d3bde041
+endif
+
+FFMPEG_URL := https://git.ffmpeg.org/gitweb/ffmpeg.git/snapshot/$(FFMPEG_HASH).tar.gz
+
+PKGS+=ffmpeg
+
+ifeq ($(call need_pkg,"libavutil >= 55.75.100 libavcodec >= 57.106.101 libavformat >= 57.82.100 libavdevice >= 57.8.101 libavfilter >= 6.105.100 libswscale >= 4.7.103 libswresample >= 2.9.100"),)
+PKGS_FOUND += ffmpeg
+endif
+
+DEPS_ffmpeg = iconv zlib vpx opus speex x264
+
+FFMPEGCONF = \
+	--cc="$(CC)" \
+	--pkg-config="$(PKG_CONFIG)"
+
+#disable everything
+FFMPEGCONF += \
+	--disable-everything \
+	--enable-zlib \
+	--enable-gpl \
+	--enable-swscale \
+	--enable-bsfs \
+	--disable-filters \
+	--disable-programs \
+	--disable-postproc
+
+FFMPEGCONF += \
+	--disable-protocols \
+	--enable-protocol=crypto \
+	--enable-protocol=file \
+	--enable-protocol=rtp \
+	--enable-protocol=srtp \
+	--enable-protocol=tcp \
+	--enable-protocol=udp \
+	--enable-protocol=unix \
+	--enable-protocol=pipe
+
+#enable muxers/demuxers
+FFMPEGCONF += \
+	--disable-demuxers \
+	--disable-muxers \
+	--enable-muxer=rtp \
+	--enable-muxer=g722 \
+	--enable-muxer=h263 \
+	--enable-muxer=h264 \
+	--enable-muxer=hevc \
+	--enable-muxer=webm \
+	--enable-muxer=ogg \
+	--enable-muxer=pcm_s16be \
+	--enable-muxer=pcm_s16le \
+	--enable-demuxer=rtp \
+	--enable-demuxer=mjpeg \
+	--enable-demuxer=mjpeg_2000 \
+	--enable-demuxer=mpegvideo \
+	--enable-demuxer=gif \
+	--enable-demuxer=image_jpeg_pipe \
+	--enable-demuxer=image_png_pipe \
+	--enable-demuxer=image_webp_pipe \
+	--enable-demuxer=matroska \
+	--enable-demuxer=m4v \
+	--enable-demuxer=mp3 \
+	--enable-demuxer=ogg \
+	--enable-demuxer=flac \
+	--enable-demuxer=wav \
+	--enable-demuxer=ac3 \
+	--enable-demuxer=g722 \
+	--enable-demuxer=pcm_mulaw \
+	--enable-demuxer=pcm_alaw \
+	--enable-demuxer=pcm_s16be \
+	--enable-demuxer=pcm_s16le \
+	--enable-demuxer=h263 \
+	--enable-demuxer=h264 \
+	--enable-demuxer=hevc
+
+#enable parsers
+FFMPEGCONF += \
+	--enable-parser=h263 \
+	--enable-parser=h264 \
+	--enable-parser=hevc \
+	--enable-parser=mpeg4video \
+	--enable-parser=vp8 \
+	--enable-parser=vp9 \
+	--enable-parser=opus
+
+#encoders/decoders
+FFMPEGCONF += \
+	--enable-encoder=adpcm_g722 \
+	--enable-decoder=adpcm_g722 \
+	--enable-encoder=rawvideo \
+	--enable-decoder=rawvideo \
+	--enable-encoder=libx264 \
+	--enable-decoder=h264 \
+	--enable-encoder=pcm_alaw \
+	--enable-decoder=pcm_alaw \
+	--enable-encoder=pcm_mulaw \
+	--enable-decoder=pcm_mulaw \
+	--enable-encoder=mpeg4 \
+	--enable-decoder=mpeg4 \
+	--enable-encoder=libvpx_vp8 \
+	--enable-decoder=vp8 \
+	--enable-decoder=vp9 \
+	--enable-encoder=h263 \
+	--enable-encoder=h263p \
+	--enable-decoder=h263 \
+	--enable-encoder=mjpeg \
+	--enable-decoder=mjpeg \
+	--enable-decoder=mjpegb \
+	--enable-libspeex \
+	--enable-libopus \
+	--enable-libvpx \
+	--enable-libx264 \
+	--enable-encoder=libspeex \
+	--enable-decoder=libspeex \
+	--enable-encoder=libopus \
+	--enable-decoder=libopus
+
+# decoders for ringtones and audio streaming
+FFMPEGCONF += \
+	--enable-decoder=flac \
+	--enable-decoder=vorbis \
+	--enable-decoder=aac \
+	--enable-decoder=ac3 \
+	--enable-decoder=eac3 \
+	--enable-decoder=mp3 \
+	--enable-decoder=pcm_u24be \
+	--enable-decoder=pcm_u24le \
+	--enable-decoder=pcm_u32be \
+	--enable-decoder=pcm_u32le \
+	--enable-decoder=pcm_u8 \
+	--enable-decoder=pcm_f16le \
+	--enable-decoder=pcm_f24le \
+	--enable-decoder=pcm_f32be \
+	--enable-decoder=pcm_f32le \
+	--enable-decoder=pcm_f64be \
+	--enable-decoder=pcm_f64le \
+	--enable-decoder=pcm_s16be \
+	--enable-decoder=pcm_s16be_planar \
+	--enable-decoder=pcm_s16le \
+	--enable-decoder=pcm_s16le_planar \
+	--enable-decoder=pcm_s24be \
+	--enable-decoder=pcm_s24le \
+	--enable-decoder=pcm_s24le_planar \
+	--enable-decoder=pcm_s32be \
+	--enable-decoder=pcm_s32le \
+	--enable-decoder=pcm_s32le_planar \
+	--enable-decoder=pcm_s64be \
+	--enable-decoder=pcm_s64le \
+	--enable-decoder=pcm_s8 \
+	--enable-decoder=pcm_s8_planar \
+	--enable-decoder=pcm_u16be \
+	--enable-decoder=pcm_u16le
+
+#encoders/decoders for images
+FFMPEGCONF += \
+	--enable-encoder=gif \
+	--enable-decoder=gif \
+	--enable-encoder=jpegls \
+	--enable-decoder=jpegls \
+	--enable-encoder=ljpeg \
+	--enable-decoder=jpeg2000 \
+	--enable-encoder=png \
+	--enable-decoder=png \
+	--enable-encoder=bmp \
+	--enable-decoder=bmp \
+	--enable-encoder=tiff \
+	--enable-decoder=tiff
+
+#filters
+FFMPEGCONF += \
+	--enable-filter=scale \
+	--enable-filter=overlay \
+	--enable-filter=amix \
+	--enable-filter=amerge \
+	--enable-filter=aresample \
+	--enable-filter=format \
+	--enable-filter=aformat \
+	--enable-filter=fps \
+	--enable-filter=transpose \
+	--enable-filter=pad \
+    --enable-filter=afir
+
+#platform specific options
+
+ifdef HAVE_WIN32
+FFMPEGCONF += \
+	--enable-indev=dshow \
+	--enable-indev=gdigrab \
+	--enable-dxva2
+endif
+
+ifdef HAVE_LINUX
+FFMPEGCONF += --enable-pic
+ifdef HAVE_ANDROID
+# Android Linux
+FFMPEGCONF += \
+	--target-os=android \
+	--enable-jni \
+	--enable-mediacodec \
+	--enable-decoder=vp8_mediacodec \
+	--enable-decoder=h264_mediacodec \
+	--enable-decoder=mpeg4_mediacodec \
+	--enable-decoder=hevc_mediacodec \
+	--enable-cross-compile \
+	--ranlib=$(RANLIB) \
+	--strip=$(STRIP) \
+	--cc=$(CC) \
+	--cxx=$(CXX) \
+	--ld=$(CC) \
+	--ar=$(AR)
+# ASM not working on Android x86 https://trac.ffmpeg.org/ticket/4928
+ifeq ($(ARCH),i386)
+FFMPEGCONF += --disable-asm
+endif
+ifeq ($(ARCH),x86_64)
+FFMPEGCONF += --disable-asm
+endif
+else
+# Desktop Linux
+DEPS_ffmpeg += ffnvcodec
+FFMPEGCONF += \
+	--target-os=linux \
+	--enable-indev=v4l2 \
+	--enable-indev=xcbgrab \
+	--enable-vdpau \
+	--enable-hwaccel=h264_vdpau \
+	--enable-hwaccel=mpeg4_vdpau \
+	--enable-vaapi \
+	--enable-hwaccel=h264_vaapi \
+	--enable-hwaccel=mpeg4_vaapi \
+	--enable-hwaccel=h263_vaapi \
+	--enable-hwaccel=vp8_vaapi \
+	--enable-hwaccel=mjpeg_vaapi \
+	--enable-hwaccel=hevc_vaapi \
+	--enable-encoder=h264_vaapi \
+	--enable-encoder=vp8_vaapi \
+	--enable-encoder=mjpeg_vaapi \
+	--enable-encoder=hevc_vaapi
+# ffnvcodec is not supported on ARM then we enable it here for i386 and x86_64
+ifeq ($(ARCH),$(filter $(ARCH),i386 x86_64))
+FFMPEGCONF += --enable-cuvid \
+	      --enable-ffnvcodec \
+	      --enable-nvdec \
+	      --enable-nvenc \
+	      --enable-hwaccel=h264_nvdec \
+	      --enable-hwaccel=hevc_nvdec \
+	      --enable-hwaccel=vp8_nvdec \
+	      --enable-hwaccel=mjpeg_nvdec \
+	      --enable-encoder=h264_nvenc \
+	      --enable-encoder=hevc_nvenc
+endif
+# End Desktop Linux:
+endif
+# End HAVE_LINUX:
+endif
+
+ifdef HAVE_MACOSX
+FFMPEGCONF += \
+	--enable-avfoundation \
+	--enable-indev=avfoundation \
+	--enable-videotoolbox \
+	--enable-hwaccel=h263_videotoolbox \
+	--enable-hwaccel=h264_videotoolbox \
+	--enable-hwaccel=mpeg4_videotoolbox \
+	--enable-hwaccel=hevc_videotoolbox \
+	--enable-encoder=h264_videotoolbox \
+	--enable-encoder=hevc_videotoolbox \
+	--disable-securetransport
+endif
+
+ifdef HAVE_IOS
+FFMPEGCONF += \
+	--enable-videotoolbox \
+	--enable-hwaccel=h263_videotoolbox \
+	--enable-hwaccel=h264_videotoolbox \
+	--enable-hwaccel=mpeg4_videotoolbox \
+	--enable-hwaccel=hevc_videotoolbox \
+	--enable-encoder=h264_videotoolbox \
+	--enable-encoder=hevc_videotoolbox \
+	--target-os=darwin \
+	--enable-cross-compile \
+	--enable-pic
+endif
+
+ifndef HAVE_IOS
+ifndef HAVE_ANDROID
+ifdef HAVE_CROSS_COMPILE
+FFMPEGCONF += --cross-prefix=$(HOST)-
+endif
+endif
+endif
+
+# x86 stuff
+ifeq ($(ARCH),i386)
+FFMPEGCONF += --arch=x86
+endif
+
+ifeq ($(ARCH),x86_64)
+FFMPEGCONF += --arch=x86_64
+endif
+
+# ARM stuff
+ifeq ($(ARCH),arm)
+FFMPEGCONF += --arch=arm
+ifdef HAVE_ARMV7A
+FFMPEGCONF += --cpu=cortex-a8
+endif
+ifdef HAVE_ARMV6
+FFMPEGCONF += --cpu=armv6 --disable-neon
+endif
+endif
+
+# ARM64 stuff
+ifeq ($(ARCH),aarch64)
+FFMPEGCONF += --arch=aarch64
+endif
+ifeq ($(ARCH),arm64)
+FFMPEGCONF += --arch=aarch64
+endif
+
+# Windows
+ifdef HAVE_WIN32
+DEPS_ffmpeg += ffnvcodec
+FFMPEGCONF += --target-os=mingw32 \
+    --enable-w32threads \
+    --disable-decoder=dca \
+	--enable-cuvid \
+	--enable-ffnvcodec \
+	--enable-nvdec \
+	--enable-nvenc \
+	--enable-hwaccel=h264_nvdec \
+	--enable-hwaccel=hevc_nvdec \
+	--enable-hwaccel=vp8_nvdec \
+	--enable-hwaccel=mjpeg_nvdec \
+	--enable-encoder=h264_nvenc \
+	--enable-encoder=hevc_nvenc
+endif
+
+$(TARBALLS)/ffmpeg-$(FFMPEG_HASH).tar.gz:
+	$(call download,$(FFMPEG_URL))
+
+.sum-ffmpeg: ffmpeg-$(FFMPEG_HASH).tar.gz
+
+ffmpeg: ffmpeg-$(FFMPEG_HASH).tar.gz
+	rm -Rf $@ $@-$(FFMPEG_HASH)
+	mkdir -p $@-$(FFMPEG_HASH)
+	(cd $@-$(FFMPEG_HASH) && tar x $(if ${BATCH_MODE},,-v) --strip-components=1 -f ../$<)
+	$(APPLY) $(SRC)/ffmpeg/remove-mjpeg-log.patch
+	$(APPLY) $(SRC)/ffmpeg/change-RTCP-ratio.patch
+	$(APPLY) $(SRC)/ffmpeg/rtp_ext_abs_send_time.patch
+	$(UPDATE_AUTOCONFIG)
+	$(MOVE)
+
+.ffmpeg: ffmpeg .sum-ffmpeg
+	cd $< && $(HOSTVARS) ./configure \
+		--extra-cflags="$(CFLAGS)" \
+		--extra-ldflags="$(LDFLAGS)" $(FFMPEGCONF) \
+		--prefix="$(PREFIX)" --enable-static --disable-shared
+	cd $< && $(MAKE) install-libs install-headers
+	touch $@
diff --git a/AudioFilter/ffmpeg/windows-configure-make.sh b/AudioFilter/ffmpeg/windows-configure-make.sh
new file mode 100644
index 0000000000000000000000000000000000000000..8fa493541f1012eb0517cd8665adc1684c7cbb73
--- /dev/null
+++ b/AudioFilter/ffmpeg/windows-configure-make.sh
@@ -0,0 +1,203 @@
+#!/bin/bash
+set +x
+set +e
+DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+cd $DIR/../../build/ffmpeg
+FFMPEGCONF='
+            --toolchain=msvc
+            --target-os=win32'
+
+#disable everything
+FFMPEGCONF+='
+            --disable-everything
+            --disable-programs
+            --disable-d3d11va
+            --disable-dxva2
+            --disable-postproc
+            --disable-filters'
+
+FFMPEGCONF+='
+            --enable-cross-compile
+            --enable-gpl
+            --enable-swscale
+            --enable-protocols
+            --enable-bsfs'
+
+#enable muxers/demuxers
+FFMPEGCONF+='
+            --enable-demuxers
+            --enable-muxers'
+
+#enable parsers
+FFMPEGCONF+='
+            --enable-parser=h263
+            --enable-parser=h264
+            --enable-parser=hevc
+            --enable-parser=mpeg4video
+            --enable-parser=vp8
+            --enable-parser=vp9
+            --enable-parser=opus'
+
+#encoders/decoders
+FFMPEGCONF+='
+            --enable-libopus
+            --enable-encoder=libopus
+            --enable-decoder=libopus
+            --enable-encoder=adpcm_g722
+            --enable-decoder=adpcm_g722
+            --enable-encoder=pcm_alaw
+            --enable-decoder=pcm_alaw
+            --enable-encoder=pcm_mulaw
+            --enable-decoder=pcm_mulaw
+            --enable-libx264
+            --enable-encoder=libx264
+            --enable-decoder=h264
+            --enable-encoder=rawvideo
+            --enable-decoder=rawvideo
+            --enable-encoder=mpeg4
+            --enable-decoder=mpeg4
+            --enable-encoder=h263
+            --enable-encoder=h263p
+            --enable-decoder=h263
+            --enable-encoder=mjpeg
+            --enable-decoder=mjpeg
+            --enable-decoder=mjpegb'
+
+# decoders for ringtones and audio streaming
+FFMPEGCONF+='
+            --enable-decoder=flac
+            --enable-decoder=vorbis
+            --enable-decoder=aac
+            --enable-decoder=ac3
+            --enable-decoder=eac3
+            --enable-decoder=mp3
+            --enable-decoder=pcm_u24be
+            --enable-decoder=pcm_u24le
+            --enable-decoder=pcm_u32be
+            --enable-decoder=pcm_u32le
+            --enable-decoder=pcm_u8
+            --enable-decoder=pcm_f16le
+            --enable-decoder=pcm_f24le
+            --enable-decoder=pcm_f32be
+            --enable-decoder=pcm_f32le
+            --enable-decoder=pcm_f64be
+            --enable-decoder=pcm_f64le
+            --enable-decoder=pcm_s16be
+            --enable-decoder=pcm_s16be_planar
+            --enable-decoder=pcm_s16le
+            --enable-decoder=pcm_s16le_planar
+            --enable-decoder=pcm_s24be
+            --enable-decoder=pcm_s24le
+            --enable-decoder=pcm_s24le_planar
+            --enable-decoder=pcm_s32be
+            --enable-decoder=pcm_s32le
+            --enable-decoder=pcm_s32le_planar
+            --enable-decoder=pcm_s64be
+            --enable-decoder=pcm_s64le
+            --enable-decoder=pcm_s8
+            --enable-decoder=pcm_s8_planar
+            --enable-decoder=pcm_u16be
+            --enable-decoder=pcm_u16le'
+
+#encoders/decoders for images
+FFMPEGCONF+='
+            --enable-encoder=gif
+            --enable-decoder=gif
+            --enable-encoder=jpegls
+            --enable-decoder=jpegls
+            --enable-encoder=ljpeg
+            --enable-decoder=jpeg2000
+            --enable-encoder=png
+            --enable-decoder=png
+            --enable-encoder=bmp
+            --enable-decoder=bmp
+            --enable-encoder=tiff
+            --enable-decoder=tiff'
+
+#filters
+FFMPEGCONF+='
+            --enable-filter=scale
+            --enable-filter=overlay
+            --enable-filter=amix
+            --enable-filter=amerge
+            --enable-filter=aresample
+            --enable-filter=format
+            --enable-filter=aformat
+            --enable-filter=fps
+            --enable-filter=transpose
+            --enable-filter=pad
+            --enable-filter=afir'
+
+if [ "$1" == "uwp" ]; then
+    EXTRACFLAGS='-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00 -I../../../../../msvc/include -I../../../../../msvc/include/opus'
+    if [ "$2" == "x64" ]; then
+        echo "configure and make ffmpeg for UWP-x64..."
+            EXTRALDFLAGS='-APPCONTAINER WindowsApp.lib libopus.lib libx264.lib -LIBPATH:../../../../../msvc/lib/x64'
+            FFMPEGCONF+=' --arch=x86_64'
+            PREFIX=../../../Build/Windows10/x64
+            OUTDIR=Output/Windows10/x64
+    elif [ "$2" == "x86" ]; then
+        echo "configure and make ffmpeg for UWP-x86..."
+            EXTRALDFLAGS='-APPCONTAINER WindowsApp.lib libopus.lib libx264.lib -LIBPATH:../../../../../msvc/lib/x86'
+            FFMPEGCONF+=' --arch=x86'
+            PREFIX=../../../Build/Windows10/x86
+            OUTDIR=Output/Windows10/x86
+    fi
+elif [ "$1" == "win32" ]; then
+    EXTRACFLAGS='-MD -D_WINDLL -I../../../../../msvc/include -I../../../../../msvc/include/opus -I../../../../../msvc/include/vpx -I../../../../../msvc/include/ffnvcodec -I../../../../../msvc/include/mfx' 
+    FFMPEGCONF+='
+                --enable-libvpx
+                --enable-encoder=libvpx_vp8
+                --enable-decoder=vp8
+                --enable-decoder=vp9'
+    FFMPEGCONF+='
+                --enable-indev=dshow
+                --enable-indev=gdigrab
+                --enable-dxva2'
+    FFMPEGCONF+='
+                --enable-ffnvcodec
+                --enable-cuvid
+                --enable-nvdec
+                --enable-nvenc
+                --enable-hwaccel=h264_nvdec
+                --enable-hwaccel=hevc_nvdec
+                --enable-hwaccel=vp8_nvdec
+                --enable-hwaccel=mjpeg_nvdec
+                --enable-encoder=h264_nvenc
+                --enable-encoder=hevc_nvenc'
+    FFMPEGCONF+='
+                --enable-libmfx
+                --enable-encoder=h264_qsv
+                --enable-encoder=hevc_qsv
+                --enable-encoder=mjpeg_qsv
+                --enable-decoder=vp8_qsv
+                --enable-decoder=h264_qsv
+                --enable-decoder=hevc_qsv
+                --enable-decoder=mjpeg_qsv
+                --enable-decoder=vp9_qsv
+                --enable-filter=scale_qsv
+                --enable-filter=overlay_qsv'
+    if [ "$2" == "x64" ]; then
+        echo "configure and make ffmpeg for win32-x64..."
+        EXTRALDFLAGS='-APPCONTAINER:NO -MACHINE:x64 Ole32.lib Kernel32.lib Gdi32.lib User32.lib Strmiids.lib Advapi32.lib OleAut32.lib Shlwapi.lib Vfw32.lib Secur32.lib Advapi32.lib libopus.lib libx264.lib libvpx.lib libmfx.lib -LIBPATH:../../../../../msvc/lib/x64'
+        FFMPEGCONF+=' --arch=x86_64'
+        PREFIX=../../../Build/win32/x64
+        OUTDIR=Output/win32/x64
+    elif [ "$2" == "x86" ]; then
+        echo "configure and make ffmpeg for win32-x86..."
+        EXTRALDFLAGS='-APPCONTAINER:NO -MACHINE:x86 Ole32.lib Kernel32.lib Gdi32.lib User32.lib Strmiids.lib OleAut32.lib Shlwapi.lib Vfw32.lib Secur32.lib Advapi32.lib libopus.lib libx264.lib libvpx.lib libmfx.lib -LIBPATH:../../../../../msvc/lib/x86'
+        FFMPEGCONF+=' --arch=x86'
+        PREFIX=../../../Build/win32/x86
+        OUTDIR=Output/win32/x86
+    fi
+fi
+rm -rf $OUTDIR
+mkdir -p $OUTDIR
+cd $OUTDIR
+pwd
+FFMPEGCONF=$(echo $FFMPEGCONF | sed -e "s/[[:space:]]\+/ /g")
+set -x
+set -e
+../../../configure $FFMPEGCONF --extra-cflags="${EXTRACFLAGS}" --extra-ldflags="${EXTRALDFLAGS}" --prefix="${PREFIX}"
+make -j8 install
+cd ../../..
diff --git a/AutoAnswer/CMakeLists.txt b/AutoAnswer/CMakeLists.txt
index 176cb6151483d811b2917cd5a0087d07c39a0862..db5d00d81b10a9c502a83bb14bd3f3be71e535cd 100644
--- a/AutoAnswer/CMakeLists.txt
+++ b/AutoAnswer/CMakeLists.txt
@@ -64,7 +64,7 @@ target_link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
 add_custom_command(
     TARGET ${ProjectName}
     PRE_BUILD
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
     COMMENT "Assembling Plugin files"
 )
 
@@ -73,6 +73,6 @@ add_custom_command(
     POST_BUILD
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
     COMMENT "Generating JPL archive"
 )
diff --git a/AutoAnswer/build.sh b/AutoAnswer/build.sh
index 5369dbc138a8e7971530257f878602797b111443..12f6d35efe66662ec6405fd534e7f5535f50004e 100755
--- a/AutoAnswer/build.sh
+++ b/AutoAnswer/build.sh
@@ -99,12 +99,12 @@ then
 
         if [ "$CURRENT_ABI" = armeabi-v7a ]
         then
-        export AR=$TOOLCHAIN/bin/arm-linux-android-ar
-        export AS=$TOOLCHAIN/bin/arm-linux-android-as
+        export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
+        export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
         export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
         export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
-        export LD=$TOOLCHAIN/bin/arm-linux-android-ld
-        export RANLIB=$TOOLCHAIN/bin/arm-linux-android-ranlib
+        export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
+        export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
         export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
         export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
 
diff --git a/GreenScreen/build.sh b/GreenScreen/build.sh
index 04e9efbd17915643ab837aa0c702cd3926f39a3b..c5e4ea7fbb406e278916a6dd30667fb50ce4f3aa 100755
--- a/GreenScreen/build.sh
+++ b/GreenScreen/build.sh
@@ -148,12 +148,12 @@ then
 
         if [ "$CURRENT_ABI" = armeabi-v7a ]
         then
-        export AR=$TOOLCHAIN/bin/arm-linux-android-ar
-        export AS=$TOOLCHAIN/bin/arm-linux-android-as
+        export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
+        export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
         export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
         export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
-        export LD=$TOOLCHAIN/bin/arm-linux-android-ld
-        export RANLIB=$TOOLCHAIN/bin/arm-linux-android-ranlib
+        export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
+        export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
         export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
         export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
 
diff --git a/HelloWorld/CMakeLists.txt b/HelloWorld/CMakeLists.txt
index 475f7e87d54678ef54c80682520f6268feb2267b..1a77e942f340fab2dfdf911df888ff84863eb1c4 100644
--- a/HelloWorld/CMakeLists.txt
+++ b/HelloWorld/CMakeLists.txt
@@ -79,7 +79,7 @@ target_link_libraries(${ProjectName} PUBLIC swscale avutil opencv_imgproc411 ope
 add_custom_command(
     TARGET ${ProjectName}
     PRE_BUILD
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
     COMMENT "Assembling Plugin files"
 )
 
@@ -88,6 +88,6 @@ add_custom_command(
     POST_BUILD
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
     COMMENT "Generating JPL archive"
 )
diff --git a/HelloWorld/build.sh b/HelloWorld/build.sh
index d5308ef196b13beb95a19f3165d05f0b1862c7d9..953f7a3a178823e6fcb6db258e72ffab92ac385e 100755
--- a/HelloWorld/build.sh
+++ b/HelloWorld/build.sh
@@ -109,12 +109,12 @@ then
 
         if [ "$CURRENT_ABI" = armeabi-v7a ]
         then
-        export AR=$TOOLCHAIN/bin/arm-linux-android-ar
-        export AS=$TOOLCHAIN/bin/arm-linux-android-as
+        export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
+        export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
         export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
         export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
-        export LD=$TOOLCHAIN/bin/arm-linux-android-ld
-        export RANLIB=$TOOLCHAIN/bin/arm-linux-android-ranlib
+        export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
+        export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
         export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
         export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
 
diff --git a/SDK/Templates/CMakeLists.txt b/SDK/Templates/CMakeLists.txt
index a855ea45671c50577160940d65b2e867da0a743d..8ee8aff305e67db7a9f4e2a1c763419d78e853af 100644
--- a/SDK/Templates/CMakeLists.txt
+++ b/SDK/Templates/CMakeLists.txt
@@ -66,7 +66,7 @@ target_link_libraries(${ProjectName} PUBLIC ---FFMPEGLIBS---)
 add_custom_command(
     TARGET ${ProjectName}
     PRE_BUILD
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
     COMMENT "Assembling Plugin files"
 )
 
@@ -75,6 +75,6 @@ add_custom_command(
     POST_BUILD
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
     COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
-    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
+    COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
     COMMENT "Generating JPL archive"
 )
diff --git a/TensorflowSegmentation/CMakeLists.txt b/TensorflowSegmentation/CMakeLists.txt
index da541a77cda00a003f4100c2f9e34be491cf87f2..f451bbcba9115964cc48fc9c92670cb469298282 100644
--- a/TensorflowSegmentation/CMakeLists.txt
+++ b/TensorflowSegmentation/CMakeLists.txt
@@ -171,7 +171,7 @@ else()
         POST_BUILD
         COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/../../../build/x86_64-linux-gnu/${TENSORFLOW}
         COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
-        COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=TensorflowSegmentation --extraPath=${TENSORFLOW}
+        COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=TensorflowSegmentation --extraPath=${TENSORFLOW}
         COMMENT "Generating JPL archive"
     )
 
diff --git a/docker/Dockerfile_android_onnxruntime b/docker/Dockerfile_android_onnxruntime
index fb7ee8e6b41436821cc0aa2dd9c35fbacd30e488..5ea23e5094950981684b0a77d500ce7735d2829e 100644
--- a/docker/Dockerfile_android_onnxruntime
+++ b/docker/Dockerfile_android_onnxruntime
@@ -2,6 +2,7 @@ FROM sflagsantos/onnxruntime1.6.0-android
 
 ENV DEBIAN_FRONTEND noninteractive
 ENV EXTRALIBS_PATH=/home/gradle/Libs/onnxruntime/
+ENV SSH_AUTH_SOCK /home/gradle/.sockets/ssh
 
 ENV LANG en_US.utf8
 ENV LC_ALL en_US.utf8
@@ -44,8 +45,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
 	&& locale-gen $LANG $LC_ALL && update-locale $LANG $LC_ALL
 
 # Android SDK tools
-ENV ANDROID_HOME=/opt/android-sdk
-ENV ANDROID_SDK_ROOT=${ANDROID_HOME}
+ENV ANDROID_HOME /opt/android-sdk
+ENV ANDROID_SDK_ROOT ${ANDROID_HOME}
 RUN wget -O /tmp/android-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip && \
 	mkdir -p ${ANDROID_HOME} && \
 	unzip -q -d ${ANDROID_HOME} /tmp/android-tools.zip && \
@@ -66,9 +67,10 @@ RUN (while sleep 1; do echo "y"; done) | sdkmanager --sdk_root=${ANDROID_HOME} '
 	'extras;android;m2repository'\
 	'extras;google;m2repository'\
 	'ndk;21.3.6528147'
-ENV ANDROID_SDK=${ANDROID_HOME}
-ENV ANDROID_NDK=${ANDROID_HOME}/ndk/21.3.6528147
+ENV ANDROID_SDK ${ANDROID_HOME}
+ENV ANDROID_NDK ${ANDROID_HOME}/ndk/21.3.6528147
 
 # Fastlane
 RUN gem install fastlane -NV
 ENV HOME=/tmp
+
diff --git a/docker/Dockerfile_ubuntu_18.04_deploy b/docker/Dockerfile_ubuntu_18.04_deploy
new file mode 100644
index 0000000000000000000000000000000000000000..8bf8842b34fc11d1a45c44034b36434125f5c4c7
--- /dev/null
+++ b/docker/Dockerfile_ubuntu_18.04_deploy
@@ -0,0 +1,78 @@
+FROM sflagsantos/onnxruntime1.6.0-ubuntu18.04
+
+ENV DEBIAN_FRONTEND noninteractive
+ENV CUDA_HOME=/root/Libs/cuda
+ENV CUDNN_HOME=/root/Libs/cuda
+ENV EXTRALIBS_PATH=/root/Libs/onnxruntime/
+
+# Speed up mk-build-deps
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y -o Acquire::Retries=2 \
+        clang \
+        g++-8 \
+        gcc-8 \
+        cpp-8 \
+        file \
+        make \
+        libc6-dev \
+        libstdc++-8-dev \
+        git \
+        autoconf \
+        automake \
+        autopoint \
+        cmake \
+        libdbus-1-dev \
+        libdbus-c++-dev \
+        libgnutls28-dev \
+        libargon2-0-dev \
+        libcanberra-gtk3-dev \
+        libclutter-gtk-1.0-dev \
+        libclutter-1.0-dev \
+        libglib2.0-dev \
+        libgtk-3-dev \
+        libnotify-dev \
+        qtbase5-dev \
+        qttools5-dev \
+        qttools5-dev-tools \
+        yasm \
+        nasm \
+        autotools-dev \
+        gettext \
+        libpulse-dev \
+        libasound2-dev \
+        libexpat1-dev \
+        libpcre3-dev \
+        libyaml-cpp-dev \
+        libboost-dev \
+        libxext-dev \
+        libxfixes-dev \
+        libspeex-dev \
+        libspeexdsp-dev \
+        uuid-dev \
+        libavcodec-dev \
+        libavutil-dev \
+        libavformat-dev \
+        libswscale-dev \
+        libavdevice-dev \
+        libopus-dev \
+        libudev-dev \
+        libgsm1-dev \
+        libjsoncpp-dev \
+        libmsgpack-dev \
+        libnatpmp-dev \
+        libayatana-appindicator3-dev \
+        libqrencode-dev \
+        libnm-dev \
+        libwebkit2gtk-4.0-dev \
+        libcrypto++-dev \
+        libva-dev \
+        libvdpau-dev \
+	libssl-dev \
+        libsndfile1-dev
+
+RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50
+RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50
+
+RUN chown 999:999 /root
+WORKDIR /root