diff --git a/GreenScreen/CMakeLists.txt b/GreenScreen/CMakeLists.txt
index fc399b7..b19d1fd 100644
--- a/GreenScreen/CMakeLists.txt
+++ b/GreenScreen/CMakeLists.txt
@@ -2,7 +2,7 @@
 
 # set the project name
 set (ProjectName GreenScreen)
-set (Version 1.0.2)
+set (Version 2.0.0)
 
 project(${ProjectName} VERSION ${Version})
 
@@ -55,15 +55,16 @@
                pluginProcessor.cpp
                ./../lib/accel.cpp
                ./../lib/frameUtils.cpp
+               ./../lib/frameFilter.cpp
+               ${DAEMON_SRC}/string_utils.cpp
                )
 
 set(plugin_HDR pluginMediaHandler.h
                videoSubscriber.h
                pluginProcessor.h
-               ./../lib/accel.h
-               ./../lib/frameScaler.h
-               ./../lib/frameUtils.h
                ./../lib/pluglog.h
+               ./../lib/mediaStream.h
+               ./../lib/audioFormat.h
                )
 
 
@@ -87,11 +88,13 @@
 target_link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
                                         ${CONTRIB_PATH}/build/opencv/build/lib/Release
                                         ${CONTRIB_PATH}/build/opencv/build/3rdparty/lib/Release
-                                        ${FFMPEG}/bin
+                                        ${FFMPEG}/lib
                                         ${ONNX_DIR}
+                                        ${CONTRIB_PATH}/msvc/lib/x64
                                         )
 
-target_link_libraries(${ProjectName} PUBLIC swscale avutil libpng libjpeg-turbo opencv_imgcodecs411 opencv_imgproc411 opencv_core411 onnxruntime zlib)
+target_link_libraries(${ProjectName} PUBLIC libavfilter libswscale libavformat libavcodec libavutil libvpx libx264 libopus libmfx
+                                            libzlib ws2_32 Bcrypt Crypt32 Secur32 Dnsapi opencv_imgproc411 opencv_core411 onnxruntime msvcrt)
 endif()
 
 add_custom_command(
diff --git a/GreenScreen/build.sh b/GreenScreen/build.sh
index 2f0b65f..a04f9e9 100755
--- a/GreenScreen/build.sh
+++ b/GreenScreen/build.sh
@@ -56,9 +56,19 @@
   esac
 done
 
+cp -r ffmpeg ${CONTRIB_PATH}/src/
+
 if [ "${PLATFORM}" = "linux-gnu" ]
 then
-    python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} 
+    if [ -f "${CONTRIB_PATH}/native/.ffmpeg" ]; then
+        rm "${CONTRIB_PATH}/native/.ffmpeg"
+    fi
+    WORKPATH=$(pwd)
+    cd "${CONTRIB_PATH}/native/"
+    make .ffmpeg -j$(nproc)
+    rm .ffmpeg
+    cd ${WORKPATH}
+    python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
 
     CONTRIB_PLATFORM_CURT=${ARCH}
     CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
@@ -85,6 +95,7 @@
     -I"${PLUGINS_LIB}" \
     ./../lib/accel.cpp \
     ./../lib/frameUtils.cpp \
+    ./../lib/frameFilter.cpp \
     main.cpp \
     videoSubscriber.cpp \
     pluginMediaHandler.cpp \
@@ -93,13 +104,15 @@
     -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/opencv4/3rdparty/" \
     -L"${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}" \
     -L"${CUDA_HOME}/lib64/" \
+    -l:libavfilter.a \
     -l:libswscale.a \
+    -l:libavformat.a \
+    -l:libavcodec.a \
     -l:libavutil.a \
-    -lopencv_imgcodecs \
+    -l:libvpx.a \
+    -l:libx264.a \
     -lopencv_imgproc \
     -lopencv_core \
-    -llibpng \
-    -llibjpeg-turbo \
     -lva ${CUBLASLT} \
     -lonnxruntime \
     -o "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
@@ -219,6 +232,16 @@
         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 -j$(nproc)
+        rm .ffmpeg
+        cd ${WORKPATH}
+
         #=========================================================
         #    Compile CPU FEATURES, NEEDED FOR OPENCV
         #=========================================================
@@ -254,6 +277,7 @@
         -I"${PLUGINS_LIB}" \
         ./../lib/accel.cpp \
         ./../lib/frameUtils.cpp \
+        ./../lib/frameFilter.cpp \
         main.cpp \
         videoSubscriber.cpp \
         pluginMediaHandler.cpp \
@@ -261,13 +285,18 @@
         cpu-features.o \
         -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
         -L"${ONNX_PATH}/lib/" \
+        -lavfilter \
         -lswscale \
+        -lavformat \
+        -lavcodec \
         -lavutil \
-        -lopencv_imgcodecs \
+        -lvpx \
+        -lx264 \
+        -lspeex \
+        -lopus \
+        -liconv \
         -lopencv_imgproc \
         -lopencv_core \
-        -llibpng \
-        -llibjpeg-turbo \
         -llog -lz \
         -lonnxruntime \
         --sysroot=$ANDROID_SYSROOT \
@@ -289,3 +318,7 @@
 fi
 
 python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${ONNX_LIBS}
+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/GreenScreen/ffmpeg/package.json b/GreenScreen/ffmpeg/package.json
new file mode 100644
index 0000000..395a10a
--- /dev/null
+++ b/GreenScreen/ffmpeg/package.json
@@ -0,0 +1,35 @@
+{
+    "name": "ffmpeg",
+    "version": "9f38fac053010205806ece11e6aea9b7d3bde041",
+    "url": "https://github.com/FFmpeg/FFmpeg/archive/__VERSION__.tar.gz",
+    "deps": [
+        "zlib",
+        "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/GreenScreen/ffmpeg/rules.mak b/GreenScreen/ffmpeg/rules.mak
new file mode 100644
index 0000000..7b06d39
--- /dev/null
+++ b/GreenScreen/ffmpeg/rules.mak
@@ -0,0 +1,357 @@
+FFMPEG_HASH := 9f38fac053010205806ece11e6aea9b7d3bde041
+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=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=jpegls \
+	--enable-decoder=jpegls \
+	--enable-encoder=ljpeg \
+	--enable-decoder=jpeg2000 \
+	--enable-encoder=png \
+	--enable-decoder=png
+
+#filters
+FFMPEGCONF += \
+	--enable-filter=scale \
+	--enable-filter=overlay \
+	--enable-filter=format \
+	--enable-filter=fps \
+	--enable-filter=transpose \
+	--enable-filter=rotate \
+	--enable-filter=alphamerge \
+	--enable-filter=boxblur \
+	--enable-filter=lut \
+	--enable-filter=negate \
+	--enable-filter=colorkey \
+	--enable-filter=split
+
+
+#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
+	$(APPLY) $(SRC)/ffmpeg/libopusdec-enable-FEC.patch
+	$(APPLY) $(SRC)/ffmpeg/libopusenc-enable-FEC.patch
+	$(UPDATE_AUTOCONFIG)
+	$(MOVE)
+
+.ffmpeg: ffmpeg .sum-ffmpeg
+	cd $< && $(HOSTVARS) ./configure \
+		--extra-cflags="$(CFLAGS)" \
+		--extra-ldflags="$(LDFLAGS)" $(FFMPEGCONF) \
+		--prefix="$(PREFIX)" --enable-static --disable-shared \
+		--pkg-config-flags="--static"
+	cd $< && $(MAKE) install-libs install-headers
+	touch $@
diff --git a/GreenScreen/ffmpeg/windows-configure-make.sh b/GreenScreen/ffmpeg/windows-configure-make.sh
new file mode 100644
index 0000000..b6ec0d9
--- /dev/null
+++ b/GreenScreen/ffmpeg/windows-configure-make.sh
@@ -0,0 +1,200 @@
+#!/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
+            --enable-zlib'
+
+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=jpegls
+            --enable-decoder=jpegls
+            --enable-encoder=ljpeg
+            --enable-decoder=jpeg2000
+            --enable-encoder=png
+            --enable-decoder=png'
+
+#filters
+FFMPEGCONF+='
+            --enable-filter=scale
+            --enable-filter=overlay
+            --enable-filter=format
+            --enable-filter=fps
+            --enable-filter=transpose
+            --enable-filter=rotate
+            --enable-filter=negate
+            --enable-filter=lut
+            --enable-filter=alphamerge
+            --enable-filter=boxblur
+            --enable-filter=colorkey
+            --enable-filter=split'
+
+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 libzlib.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 libzlib.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 libzlib.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 libzlib.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/GreenScreen/main.cpp b/GreenScreen/main.cpp
index bfc1bc8..eef75af 100644
--- a/GreenScreen/main.cpp
+++ b/GreenScreen/main.cpp
@@ -32,9 +32,9 @@
 #define EXPORT_PLUGIN
 #endif
 
-#define GreenScreen_VERSION_MAJOR 1
+#define GreenScreen_VERSION_MAJOR 2
 #define GreenScreen_VERSION_MINOR 0
-#define GreenScreen_VERSION_PATCH 2
+#define GreenScreen_VERSION_PATCH 0
 
 extern "C" {
 void
@@ -44,9 +44,9 @@
 EXPORT_PLUGIN JAMI_PluginExitFunc
 JAMI_dynPluginInit(const JAMI_PluginAPI* api)
 {
-    std::cout << "**************************" << std::endl;
-    std::cout << "**  GREENSCREEN PLUGIN  **" << std::endl;
-    std::cout << "**************************" << std::endl << std::endl;
+    std::cout << "*******************" << std::endl;
+    std::cout << "**  GREENSCREEN  **" << std::endl;
+    std::cout << "*******************" << std::endl << std::endl;
     std::cout << "Version " << GreenScreen_VERSION_MAJOR << "." << GreenScreen_VERSION_MINOR << "."
               << GreenScreen_VERSION_PATCH << std::endl;
 
diff --git a/GreenScreen/manifest.json b/GreenScreen/manifest.json
index 5661ad2..0a35ec5 100644
--- a/GreenScreen/manifest.json
+++ b/GreenScreen/manifest.json
@@ -1,6 +1,6 @@
 {
     "name": "GreenScreen",
-    "description": "GreenScreen Plugin with onnx",
-    "version": "1.0.2",
+    "description": "This plugin hides your background during a call. Your banckground can be blured or changed with another image.",
+    "version": "2.0.0",
     "iconPath": "icon.svg"
-}
+}
\ No newline at end of file
diff --git a/GreenScreen/package.json b/GreenScreen/package.json
index 373f1b8..40949a7 100644
--- a/GreenScreen/package.json
+++ b/GreenScreen/package.json
@@ -1,6 +1,6 @@
 {
     "name": "GreenScreen",
-    "version": "1.0.2",
+    "version": "2.0.0",
     "extractLibs": false,
     "deps": [
         "ffmpeg",
diff --git a/GreenScreen/pluginMediaHandler.cpp b/GreenScreen/pluginMediaHandler.cpp
index 2643d6d..1bc9465 100644
--- a/GreenScreen/pluginMediaHandler.cpp
+++ b/GreenScreen/pluginMediaHandler.cpp
@@ -20,8 +20,8 @@
  */
 
 #include "pluginMediaHandler.h"
-// Logger
-#include "pluglog.h"
+
+#include <pluglog.h>
 #include <string_view>
 const char sep = separator();
 const std::string TAG = "FORESEG";
@@ -32,25 +32,24 @@
 
 PluginMediaHandler::PluginMediaHandler(std::map<std::string, std::string>&& preferences,
                                        std::string&& datapath)
-    : datapath_ {datapath}
+    : dataPath_ {datapath}
     , preferences_ {preferences}
 {
-    setId(datapath_);
+    setId(dataPath_);
 #ifdef __ANDROID__
-    mVS = std::make_shared<VideoSubscriber>(datapath_,
-                                            "mModel.ort",
-                                            preferences_.at("background"),
+    mVS = std::make_shared<VideoSubscriber>(dataPath_ + sep + "model/mModel.ort",
                                             preferences_.at("acceleration") == "1");
 #else
 #ifdef NVIDIA
-    mVS = std::make_shared<VideoSubscriber>(datapath_,
-                                            "mModel.onnx",
-                                            preferences_.at("background"),
+    mVS = std::make_shared<VideoSubscriber>(dataPath_ + sep + "model/mModel.onnx",
                                             preferences_.at("acceleration") == "1");
 #else
-    mVS = std::make_shared<VideoSubscriber>(datapath_, "mModel.onnx", preferences_.at("background"));
+    mVS = std::make_shared<VideoSubscriber>(dataPath_ + sep + "model/mModel.onnx");
 #endif // NVIDIA
 #endif // ANDROID
+    mVS->setBackground(preferences_.at("background"));
+    mVS->setBlur(preferences_.at("blur") == "1");
+    mVS->setBlurLevel(preferences_.at("blurlevel"));
 }
 
 void
@@ -68,12 +67,14 @@
     oss << "preferredStreamDirection " << preferredStreamDirection << std::endl;
     if (data.type == StreamType::video && !data.direction
         && data.direction == preferredStreamDirection) {
-        subject->attach(mVS.get()); // my image
+        detach();
+        subject->attachPriorityObserver(mVS); // my image
         oss << "got my sent image attached" << std::endl;
         attached_ = '1';
     } else if (data.type == StreamType::video && data.direction
                && data.direction == preferredStreamDirection) {
-        subject->attach(mVS.get()); // the image I receive from the others on the call
+        detach();
+        subject->attachPriorityObserver(mVS); // the image I receive from the others on the call
         oss << "got my received image attached" << std::endl;
         attached_ = '1';
     }
@@ -85,7 +86,7 @@
 PluginMediaHandler::getCallMediaHandlerDetails()
 {
     return {{"name", NAME},
-            {"iconPath", datapath_ + sep + "icon.svg"},
+            {"iconPath", dataPath_ + sep + "icon.svg"},
             {"pluginId", id()},
             {"attached", attached_},
             {"dataType", "1"}};
@@ -100,16 +101,19 @@
         if (key == "background") {
             mVS->setBackground(value);
         }
+        if (key == "blur") {
+            mVS->setBlur(value == "1");
+        }
+        if (key == "blurlevel") {
+            mVS->setBlurLevel(value);
+        }
     }
 }
 
 bool
 PluginMediaHandler::preferenceMapHasKey(const std::string& key)
 {
-    if (key == "background") {
-        return true;
-    }
-    return false;
+    return (key == "background" || key == "blur" || key == "blurlevel");
 }
 
 void
diff --git a/GreenScreen/pluginMediaHandler.h b/GreenScreen/pluginMediaHandler.h
index 3d2cc48..bc4a479 100644
--- a/GreenScreen/pluginMediaHandler.h
+++ b/GreenScreen/pluginMediaHandler.h
@@ -21,12 +21,10 @@
 
 #pragma once
 
-// Project
 #include "videoSubscriber.h"
 
-// Plugin
-#include "plugin/jamiplugin.h"
-#include "plugin/mediahandler.h"
+#include <plugin/jamiplugin.h>
+#include <plugin/mediahandler.h>
 
 using avSubjectPtr = std::weak_ptr<jami::Observable<AVFrame*>>;
 
@@ -48,7 +46,7 @@
     std::shared_ptr<VideoSubscriber> mVS;
 
 private:
-    const std::string datapath_;
+    const std::string dataPath_;
     std::map<std::string, std::string> preferences_;
     std::string attached_ {'0'};
 };
diff --git a/GreenScreen/pluginProcessor.cpp b/GreenScreen/pluginProcessor.cpp
index 62de879..ff4955b 100644
--- a/GreenScreen/pluginProcessor.cpp
+++ b/GreenScreen/pluginProcessor.cpp
@@ -20,202 +20,161 @@
  */
 
 #include "pluginProcessor.h"
-// System includes
-#include <algorithm>
-#include <cstring>
-// OpenCV headers
-#include <opencv2/core.hpp>
-#include <opencv2/imgcodecs.hpp>
-#include <opencv2/imgproc.hpp>
-// Logger
-#include <pluglog.h>
 
+#include <opencv2/imgproc.hpp>
 extern "C" {
 #include <libavutil/display.h>
 }
+#include <frameUtils.h>
+#include <pluglog.h>
+#ifdef WIN32
+#include <string_utils.h>
+#endif
 const char sep = separator();
 
 const std::string TAG = "FORESEG";
 
 namespace jami {
 
-PluginProcessor::PluginProcessor(const std::string& dataPath, const std::string& model, const std::string& backgroundImage, bool acc)
+PluginProcessor::PluginProcessor(const std::string& model, bool acc)
 {
-    activateAcc_ = acc;
-    initModel(dataPath+sep+"model/"+model);
-    setBackgroundImage(backgroundImage);
+    initModel(model, acc);
 }
 
 PluginProcessor::~PluginProcessor()
 {
+    mainFilter_.clean();
     Plog::log(Plog::LogPriority::INFO, TAG, "~pluginprocessor");
     if (session_)
         delete session_;
 }
 
 void
-PluginProcessor::setBackgroundImage(const std::string& backgroundPath)
-{
-    cv::Size size = cv::Size {0, 0};
-
-    if (!backgroundImage.empty())
-        size = backgroundImage.size();
-
-    cv::Mat newBackgroundImage = cv::imread(backgroundPath);
-    if (newBackgroundImage.cols == 0) {
-        Plog::log(Plog::LogPriority::ERR, TAG, "Background image not Loaded");
-    } else {
-        Plog::log(Plog::LogPriority::INFO, TAG, "Background image Loaded");
-        cv::cvtColor(newBackgroundImage, newBackgroundImage, cv::COLOR_BGR2RGB);
-        newBackgroundImage.convertTo(newBackgroundImage, CV_32FC3);
-        if (size.height) {
-            cv::resize(newBackgroundImage, newBackgroundImage, size);
-            backgroundRotation = 0;
-        }
-        backgroundImage = newBackgroundImage.clone();
-        newBackgroundImage.release();
-        hasBackground_ = true;
-    }
-}
-
-void
-PluginProcessor::initModel(const std::string& modelPath)
+PluginProcessor::initModel(const std::string& modelPath, bool activateAcc)
 {
     try {
         auto allocator_info = Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault);
-        input_tensor_ = Ort::Value::CreateTensor<float>(allocator_info, input_image_.data(), input_image_.size(), input_shape_.data(), input_shape_.size());
-        output_tensor_ = Ort::Value::CreateTensor<float>(allocator_info, results_.data(), results_.size(), output_shape_.data(), output_shape_.size());
-        sessOpt_ =  Ort::SessionOptions();
+        input_tensor_ = Ort::Value::CreateTensor<float>(allocator_info,
+                                                        input_image_.data(),
+                                                        input_image_.size(),
+                                                        input_shape_.data(),
+                                                        input_shape_.size());
+        output_tensor_ = Ort::Value::CreateTensor<float>(allocator_info,
+                                                         results_.data(),
+                                                         results_.size(),
+                                                         output_shape_.data(),
+                                                         output_shape_.size());
+        sessOpt_ = Ort::SessionOptions();
 
 #ifdef NVIDIA
-        if (activateAcc_)
+        if (activateAcc)
             Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_CUDA(sessOpt_, 0));
 #endif
-#ifdef ANDROID
-        if (activateAcc_)
+#ifdef __ANDROID__
+        if (activateAcc)
             Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_Nnapi(sessOpt_, 0));
 #endif
 
         sessOpt_.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL);
 #ifdef WIN32
-        std::wstring wsTmp(modelPath.begin(), modelPath.end());
-        session_ = new Ort::Session(env, wsTmp.c_str(), sessOpt_);
+        session_ = new Ort::Session(env_, to_wstring(modelPath).c_str(), sessOpt_);
 #else
-        session_ = new Ort::Session(env, modelPath.c_str(), sessOpt_);
+        session_ = new Ort::Session(env_, modelPath.c_str(), sessOpt_);
 #endif
         isAllocated_ = true;
+        Plog::log(Plog::LogPriority::INFO, TAG, "Model is allocated");
     } catch (std::exception& e) {
         Plog::log(Plog::LogPriority::ERR, TAG, e.what());
     }
-    std::ostringstream oss;
-    oss << "Model is allocated " << isAllocated_;
-    Plog::log(Plog::LogPriority::INFO, TAG, oss.str());
-}
-
-bool
-PluginProcessor::isAllocated()
-{
-    return isAllocated_;
 }
 
 void
-PluginProcessor::feedInput(const cv::Mat& frame)
+PluginProcessor::feedInput(AVFrame* input)
 {
-    cv::Mat temp(frame.rows, frame.cols, CV_32FC3, input_image_.data());
-    frame.convertTo(temp, CV_32FC3);
-}
-
-int
-PluginProcessor::getBackgroundRotation()
-{
-    return backgroundRotation;
-}
-
-void
-PluginProcessor::setBackgroundRotation(int angle)
-{
-    if (backgroundRotation != angle && (backgroundRotation - angle) != 0) {
-        rotateFrame(backgroundRotation - angle, backgroundImage);
-        backgroundRotation = angle;
-    }
+    cv::Mat frame = cv::Mat {
+        input->height,
+        input->width,
+        CV_8UC3,
+        input->data[0],
+        static_cast<size_t>(
+            input->linesize[0])}; // not zero input->linesize[0] leads to non continuous data
+    cvFrame_ = frame.clone();     // this is done to have continuous data
+    cv::Mat temp(modelInputDimensions.first,
+                 modelInputDimensions.second,
+                 CV_32FC3,
+                 input_image_.data());
+    cvFrame_.convertTo(temp, CV_32FC3);
 }
 
 void
 PluginProcessor::computePredictions()
 {
-    if (count == 0) {
+    if (count_ == 0) {
         // Run the graph
-        session_->Run(Ort::RunOptions{nullptr}, input_names, &input_tensor_, 1, output_names, &output_tensor_, 1);
-        computedMask = std::vector(results_.begin(), results_.end());
+        session_->Run(Ort::RunOptions {nullptr},
+                      modelInputNames,
+                      &input_tensor_,
+                      1,
+                      modelOutputNames,
+                      &output_tensor_,
+                      1);
+        computedMask_ = std::vector(results_.begin(), results_.end());
     }
 }
 
 void
 PluginProcessor::printMask()
 {
-    for (size_t i = 0; i < computedMask.size(); i++) {
+    std::ostringstream oss;
+    for (size_t i = 0; i < computedMask_.size(); i++) {
         // Log the predictions
-        std::ostringstream oss;
-        oss << "\nclass: " << computedMask[i] << std::endl;
-        Plog::log(Plog::LogPriority::INFO, TAG, oss.str());
-    }
-}
-
-void
-PluginProcessor::resetInitValues(const cv::Size& modelInputSize)
-{
-    previousMasks[0] = cv::Mat(modelInputSize.height, modelInputSize.width, CV_32FC1, double(0.));
-    previousMasks[1] = cv::Mat(modelInputSize.height, modelInputSize.width, CV_32FC1, double(0.));
-    kSize = cv::Size(modelInputSize.width * kernelSize, modelInputSize.height * kernelSize);
-    if (kSize.height % 2 == 0) {
-        kSize.height -= 1;
-    }
-    if (kSize.width % 2 == 0) {
-        kSize.width -= 1;
-    }
-    count = 0;
-    grabCutMode = cv::GC_INIT_WITH_MASK;
-    grabCutIterations = 5;
-}
-
-void
-copyByLine(uchar* frameData, uchar* applyMaskData, const int lineSize, cv::Size size)
-{
-    if (3 * size.width == lineSize) {
-        std::memcpy(frameData, applyMaskData, size.height * size.width * 3);
-    } else {
-        int rows = size.height;
-        int offset = 0;
-        int maskoffset = 0;
-        for (int i = 0; i < rows; i++) {
-            std::memcpy(frameData + offset, applyMaskData + maskoffset, lineSize);
-            offset += lineSize;
-            maskoffset += 3 * size.width;
+        if (computedMask_[i] > 2) {
+            oss << computedMask_[i] << " " << std::endl;
         }
     }
+    Plog::log(Plog::LogPriority::INFO, TAG, oss.str());
 }
 
 void
-PluginProcessor::drawMaskOnFrame(
-    cv::Mat& frame, cv::Mat& frameReduced, std::vector<float> computedMask, int lineSize, int angle)
+PluginProcessor::resetInitValues()
 {
-    if (computedMask.empty()) {
-        return;
+    previousMasks_[0] = previousMasks_[1] = cv::Mat(modelInputDimensions.first,
+                                                    modelInputDimensions.second,
+                                                    CV_32FC1,
+                                                    double(0.));
+    kSize_ = cv::Size(modelInputDimensions.first * kernelSize_,
+                      modelInputDimensions.second * kernelSize_);
+    if (kSize_.height % 2 == 0) {
+        kSize_.height -= 1;
     }
+    if (kSize_.width % 2 == 0) {
+        kSize_.width -= 1;
+    }
+    count_ = 0;
+    grabCutMode_ = cv::GC_INIT_WITH_MASK;
+    grabCutIterations_ = 4;
+}
 
-    if (count == 0) {
-        int maskSize = static_cast<int>(std::sqrt(computedMask.size()));
-        cv::Mat maskImg(maskSize, maskSize, CV_32FC1, computedMask.data());
-        cv::Mat* applyMask = &frameReduced;
+void
+PluginProcessor::drawMaskOnFrame(AVFrame* frame, AVFrame* frameReduced, int angle)
+{
+    if (computedMask_.empty() || !mainFilter_.initialized_)
+        return;
 
-        rotateFrame(-angle, maskImg);
-        cv::resize(maskImg, maskImg, cv::Size(frameReduced.cols, frameReduced.rows));
+    if (count_ == 0) {
+        int maskSize = static_cast<int>(std::sqrt(computedMask_.size()));
+        cv::Mat maskImg(maskSize, maskSize, CV_32FC1, computedMask_.data());
+
+        cv::resize(maskImg,
+                   maskImg,
+                   cv::Size(modelInputDimensions.first, modelInputDimensions.second));
 
         double m, M;
         cv::minMaxLoc(maskImg, &m, &M);
-
-        if (M < 2) { // avoid detection if there is any one in frame
+        bool improveMask = !isBlur_;
+        if (M < 2) { // avoid detection if there isn't anyone in frame
             maskImg = 0. * maskImg;
+            improveMask = false;
         } else {
             for (int i = 0; i < maskImg.cols; i++) {
                 for (int j = 0; j < maskImg.rows; j++) {
@@ -224,9 +183,9 @@
                     if (maskImg.at<float>(j, i) < 0.4)
                         maskImg.at<float>(j, i) = 0.;
                     else if (maskImg.at<float>(j, i) < 0.7) {
-                        float value = maskImg.at<float>(j, i) * smoothFactors[0]
-                                      + previousMasks[0].at<float>(j, i) * smoothFactors[1]
-                                      + previousMasks[1].at<float>(j, i) * smoothFactors[2];
+                        float value = maskImg.at<float>(j, i) * smoothFactors_[0]
+                                      + previousMasks_[0].at<float>(j, i) * smoothFactors_[1]
+                                      + previousMasks_[1].at<float>(j, i) * smoothFactors_[2];
                         maskImg.at<float>(j, i) = 0.;
                         if (value > 0.7)
                             maskImg.at<float>(j, i) = 1.;
@@ -235,91 +194,230 @@
                 }
             }
         }
-        if (cv::countNonZero(maskImg) != 0) {
+
+        if (improveMask) {
             cv::Mat dilate;
             cv::dilate(maskImg,
-                        dilate,
-                        cv::getStructuringElement(cv::MORPH_ELLIPSE, kSize),
-                        cv::Point(-1, -1),
-                        2);
+                       dilate,
+                       cv::getStructuringElement(cv::MORPH_ELLIPSE, kSize_),
+                       cv::Point(-1, -1),
+                       2);
             cv::erode(maskImg,
-                        maskImg,
-                        cv::getStructuringElement(cv::MORPH_ELLIPSE, kSize),
-                        cv::Point(-1, -1),
-                        2);
+                      maskImg,
+                      cv::getStructuringElement(cv::MORPH_ELLIPSE, kSize_),
+                      cv::Point(-1, -1),
+                      2);
             for (int i = 0; i < maskImg.cols; i++) {
                 for (int j = 0; j < maskImg.rows; j++) {
                     if (dilate.at<float>(j, i) != maskImg.at<float>(j, i))
-                        maskImg.at<float>(j, i) = grabcutClass;
+                        maskImg.at<float>(j, i) = grabcutClass_;
                 }
             }
+            cv::Mat applyMask = cvFrame_.clone();
             maskImg.convertTo(maskImg, CV_8UC1);
-            applyMask->convertTo(*applyMask, CV_8UC1);
+            applyMask.convertTo(applyMask, CV_8UC1);
             cv::Rect rect(1, 1, maskImg.rows, maskImg.cols);
-            cv::grabCut(*applyMask,
+            cv::grabCut(applyMask,
                         maskImg,
                         rect,
-                        bgdModel,
-                        fgdModel,
-                        grabCutIterations,
-                        grabCutMode);
+                        bgdModel_,
+                        fgdModel_,
+                        grabCutIterations_,
+                        grabCutMode_);
 
-            grabCutMode = cv::GC_EVAL;
-            grabCutIterations = 1;
+            grabCutMode_ = cv::GC_EVAL;
+            grabCutIterations_ = 1;
 
             maskImg = maskImg & 1;
             maskImg.convertTo(maskImg, CV_32FC1);
             maskImg *= 255.;
-            GaussianBlur(maskImg, maskImg, cv::Size(7, 7), 0); // float mask from 0 to 255.
+            blur(maskImg, maskImg, cv::Size(7, 7)); // float mask from 0 to 255.
             maskImg = maskImg / 255.;
         }
-        previousMasks[1] = previousMasks[0].clone();
-        previousMasks[0] = maskImg.clone();
+
+        previousMasks_[1] = previousMasks_[0].clone();
+        previousMasks_[0] = maskImg.clone();
     }
 
-    cv::Mat roiMaskImg = previousMasks[0].clone();
-    cv::Mat roiMaskImgComplementary = 1. - roiMaskImg; // mask from 1. to 0
+    cv::Mat roiMaskImg = previousMasks_[0].clone() * 255.;
+    roiMaskImg.convertTo(roiMaskImg, CV_8UC1);
 
-    std::vector<cv::Mat> channels;
-    std::vector<cv::Mat> channelsComplementary;
+    gsFrame maskFrame = {av_frame_alloc(), frameFree};
+    maskFrame->format = AV_PIX_FMT_GRAY8;
+    maskFrame->width = roiMaskImg.cols;
+    maskFrame->height = roiMaskImg.rows;
+    maskFrame->linesize[0] = roiMaskImg.step;
+    if (av_frame_get_buffer(maskFrame.get(), 0) < 0)
+        return;
 
-    channels.emplace_back(roiMaskImg);
-    channels.emplace_back(roiMaskImg);
-    channels.emplace_back(roiMaskImg);
-    channelsComplementary.emplace_back(roiMaskImgComplementary);
-    channelsComplementary.emplace_back(roiMaskImgComplementary);
-    channelsComplementary.emplace_back(roiMaskImgComplementary);
+    maskFrame->data[0] = roiMaskImg.data;
+    maskFrame->pts = 1;
+    mainFilter_.feedInput(maskFrame.get(), "mask");
+    maskFrame.reset();
 
-    cv::merge(channels, roiMaskImg);
-    cv::merge(channelsComplementary, roiMaskImgComplementary);
+    if (isBlur_)
+        mainFilter_.feedInput(frameReduced, "input");
+    mainFilter_.feedInput(frame, "input2");
+    AVFrame* filteredFrame;
+    if ((filteredFrame = mainFilter_.readOutput())) {
+        moveFrom(frame, filteredFrame);
+        frameFree(filteredFrame);
+    }
+    count_++;
+    count_ = count_ % frameCount_;
+}
 
-    cv::Mat output;
-    frameReduced.convertTo(output, roiMaskImg.type());
-    output = output.mul(roiMaskImg);
-    output += backgroundImage.mul(roiMaskImgComplementary);
-    output.convertTo(output, frameReduced.type());
+MediaStream
+PluginProcessor::getbgAVFrameInfos()
+{
+    AVFormatContext* ctx = avformat_alloc_context();
+    // Open
+    if (avformat_open_input(&ctx, backgroundPath_.c_str(), NULL, NULL) != 0) {
+        avformat_free_context(ctx);
+        Plog::log(Plog::LogPriority::INFO, TAG, "Couldn't open input stream.");
+        return {};
+    }
+    pFormatCtx_.reset(ctx);
+    // Retrieve stream information
+    if (avformat_find_stream_info(pFormatCtx_.get(), NULL) < 0) {
+        Plog::log(Plog::LogPriority::INFO, TAG, "Couldn't find stream information.");
+        return {};
+    }
 
-    cv::resize(output, output, cv::Size(frame.cols, frame.rows));
+    // Dump valid information onto standard error
+    av_dump_format(pFormatCtx_.get(), 0, backgroundPath_.c_str(), false);
 
-    copyByLine(frame.data, output.data, lineSize, cv::Size(frame.cols, frame.rows));
-    count++;
-    count = count % frameCount;
+    // Find the video stream
+    for (int i = 0; i < static_cast<int>(pFormatCtx_->nb_streams); i++)
+        if (pFormatCtx_->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
+            videoStream_ = i;
+            break;
+        }
+
+    if (videoStream_ == -1) {
+        Plog::log(Plog::LogPriority::INFO, TAG, "Didn't find a video stream.");
+        return {};
+    }
+
+    rational<int> fr = pFormatCtx_->streams[videoStream_]->r_frame_rate;
+    return MediaStream("background",
+                       pFormatCtx_->streams[videoStream_]->codecpar->format,
+                       1 / fr,
+                       pFormatCtx_->streams[videoStream_]->codecpar->width,
+                       pFormatCtx_->streams[videoStream_]->codecpar->height,
+                       0,
+                       fr);
 }
 
 void
-PluginProcessor::rotateFrame(int angle, cv::Mat& mat)
+PluginProcessor::loadBackground()
 {
-    if (angle == -90)
-        cv::rotate(mat, mat, cv::ROTATE_90_COUNTERCLOCKWISE);
-    else if (std::abs(angle) == 180)
-        cv::rotate(mat, mat, cv::ROTATE_180);
-    else if (angle == 90)
-        cv::rotate(mat, mat, cv::ROTATE_90_CLOCKWISE);
+    if (backgroundPath_.empty())
+        return;
+
+    auto bgStream_ = getbgAVFrameInfos();
+    if (mainFilter_.initialize(mainFilterDescription_, {maskms_, bgStream_, ims2_}) < 0)
+        return;
+
+    int got_frame;
+    AVCodecContext* pCodecCtx;
+    AVCodec* pCodec;
+    AVPacket* packet;
+
+    pCodecCtx = pFormatCtx_->streams[videoStream_]->codec;
+    pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
+    if (pCodec == nullptr) {
+        mainFilter_.clean();
+        pFormatCtx_.reset();
+        Plog::log(Plog::LogPriority::INFO, TAG, "Codec not found.");
+        return;
+    }
+
+    // Open codec
+    if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) {
+        mainFilter_.clean();
+        pFormatCtx_.reset();
+        Plog::log(Plog::LogPriority::INFO, TAG, "Could not open codec.");
+        return;
+    }
+
+    packet = av_packet_alloc();
+    if (av_read_frame(pFormatCtx_.get(), packet) < 0) {
+        mainFilter_.clean();
+        avcodec_close(pCodecCtx);
+        av_packet_free(&packet);
+        pFormatCtx_.reset();
+        Plog::log(Plog::LogPriority::INFO, TAG, "Could not read packet from context.");
+        return;
+    }
+
+    AVFrame* bgImage = av_frame_alloc();
+    avcodec_decode_video2(pCodecCtx, bgImage, &got_frame, packet);
+    if (got_frame) {
+        mainFilter_.feedInput(bgImage, "background");
+        mainFilter_.feedEOF("background");
+    } else
+        mainFilter_.clean();
+
+    frameFree(bgImage);
+    avcodec_close(pCodecCtx);
+    av_packet_free(&packet);
+    pFormatCtx_.reset();
 }
 
-bool
-PluginProcessor::hasBackground() const
+void
+PluginProcessor::initFilters(const std::pair<int, int>& inputSize, int format, int angle)
 {
-    return hasBackground_;
+    resetInitValues();
+    mainFilter_.clean();
+
+    std::string rotateSides = "";
+    std::string scaleSize = std::to_string(inputSize.first) + ":"
+                            + std::to_string(inputSize.second);
+    Plog::log(Plog::LogPriority::INFO, TAG, scaleSize);
+    if (std::abs(angle) == 90) {
+        rotateSides = ":out_w=ih:out_h=iw";
+        scaleSize = std::to_string(inputSize.second) + ":" + std::to_string(inputSize.first);
+    }
+
+    rational<int> fr(1, 1);
+    ims_ = MediaStream("input",
+                       AV_PIX_FMT_RGB24,
+                       1 / fr,
+                       modelInputDimensions.first,
+                       modelInputDimensions.second,
+                       0,
+                       fr);
+    ims2_ = MediaStream("input2", format, 1 / fr, inputSize.first, inputSize.second, 0, fr);
+
+    maskms_ = MediaStream("mask",
+                          AV_PIX_FMT_GRAY8,
+                          1 / fr,
+                          modelInputDimensions.first,
+                          modelInputDimensions.second,
+                          0,
+                          fr);
+
+    if (isBlur_) {
+        mainFilterDescription_ = "[mask]negate[negated],[input][negated]alphamerge,boxblur="
+                                 + blurLevel_ + ",scale=" + scaleSize
+                                 + "[blured],[input2]format=rgb24,rotate=" + rotation[-angle]
+                                 + rotateSides
+                                 + "[input2formated],[input2formated][blured]overlay,rotate="
+                                 + rotation[angle] + rotateSides;
+        Plog::log(Plog::LogPriority::INFO, TAG, mainFilterDescription_);
+        mainFilter_.initialize(mainFilterDescription_, {maskms_, ims_, ims2_});
+    } else {
+        mainFilterDescription_ = "[mask]scale=" + scaleSize
+                                 + "[fgmask],[fgmask]split=2[bg][fg],[bg]negate[bgn],"
+                                 + "[background]scale=" + scaleSize + "[backgroundformated],"
+                                 + "[backgroundformated][bgn]alphamerge[background2],"
+                                 + "[input2]rotate=" + rotation[-angle] + rotateSides
+                                 + "[input2formated],[input2formated][fg]alphamerge[foreground],"
+                                 + "[foreground][background2]overlay," + "rotate=" + rotation[angle]
+                                 + rotateSides;
+        Plog::log(Plog::LogPriority::INFO, TAG, mainFilterDescription_);
+        loadBackground();
+    }
 }
 } // namespace jami
diff --git a/GreenScreen/pluginProcessor.h b/GreenScreen/pluginProcessor.h
index 0897527..36eaa78 100644
--- a/GreenScreen/pluginProcessor.h
+++ b/GreenScreen/pluginProcessor.h
@@ -20,46 +20,50 @@
  */
 
 #pragma once
-// STL
-#include <condition_variable>
-#include <cstdint>
+
 #include <map>
-#include <memory>
-#include <mutex>
-#include <thread>
 #include <vector>
-// AvFrame
 extern "C" {
 #include <libavutil/frame.h>
 }
-// Plugin
+
 #include <plugin/jamiplugin.h>
 #include <plugin/mediahandler.h>
 
-// Opencv processing
 #include <opencv2/core.hpp>
 #include <onnxruntime_cxx_api.h>
 #ifdef NVIDIA
 #include <cuda_provider_factory.h>
 #endif
-#ifdef ANDROID
+#ifdef __ANDROID__
 #include <nnapi_provider_factory.h>
 #endif
+
+#include <frameFilter.h>
+#include <frameUtils.h>
+#include <mediaStream.h>
+#include <functional>
+
 namespace jami {
 
+using gsFrame = std::unique_ptr<AVFrame, decltype(&frameFree)>;
+
+static const char* modelInputNames[8] = {"image:0"};
+static const char* modelOutputNames[11] = {"Identity:0"};
+
 class PluginProcessor
 {
 public:
-    PluginProcessor(const std::string& dataPath, const std::string& model, const std::string& backgroundImage, bool acc);
+    PluginProcessor(const std::string& model, bool acc);
     ~PluginProcessor();
 
-    void initModel(const std::string& modelPath);
+    void initModel(const std::string& modelPath, bool activateAcc);
     /**
      * @brief feedInput
      * Takes a frame and feeds it to the model storage for predictions
      * @param frame
      */
-    void feedInput(const cv::Mat& frame);
+    void feedInput(AVFrame* input);
 
     /**
      * @brief computePredictions
@@ -69,59 +73,66 @@
     void computePredictions();
 
     void printMask();
-    void drawMaskOnFrame(cv::Mat& frame,
-                         cv::Mat& frameReduced,
-                         std::vector<float> computedMask,
-                         int lineSize,
-                         int angle);
-    int getBackgroundRotation();
-    void setBackgroundRotation(int angle);
-    void setBackgroundImage(const std::string& backgroundPath);
-    void rotateFrame(int angle, cv::Mat& mat);
-    bool hasBackground() const;
-    void resetInitValues(const cv::Size& modelInputSize);
-    bool isAllocated();
+    void drawMaskOnFrame(AVFrame* frame, AVFrame* frameReduced, int angle);
+    bool isAllocated() { return isAllocated_; }
+    void setBlur(bool isBlur) { isBlur_ = isBlur; }
+    void setBlurLevel(const std::string& blurLevel) { blurLevel_ = blurLevel; }
+    void setBackgroundImage(const std::string& backgroundPath) { backgroundPath_ = backgroundPath; }
+    void initFilters(const std::pair<int, int>& inputSize, int format, int angle);
 
-    // Output predictions
-    std::vector<float> computedMask;
-
-    cv::Mat previousMasks[2];
-    cv::Mat backgroundImage;
-
-    cv::Size kSize;
-
-    std::string backgroundPath;
+    std::pair<int, int> modelInputDimensions {257, 257};
+    std::map<int, std::string> rotation = {{90, "-PI/2"},
+                                           {-90, "PI/2"},
+                                           {-180, "-PI"},
+                                           {180, "PI"},
+                                           {0, "0"}};
 
 private:
-    int count{0};
-    cv::Mat frame;
-    int backgroundRotation{0};
-    bool hasBackground_{false};
-    cv::Mat bgdModel, fgdModel;
-    int grabCutMode{1}; // cv::GC_INIT_WITH_MASK = 1;
-    int grabCutIterations{5};
-    int grabcutClass{3};
-    int frameCount{3};
-    float smoothFactors[3] = {0.6f, 0.3f, 0.1f};
-    float kernelSize{0.05f};
+    void resetInitValues();
+    void loadBackground();
+    MediaStream getbgAVFrameInfos();
 
-    bool isAllocated_{false};
-    Ort::Env env{ORT_LOGGING_LEVEL_WARNING, "test"};
-    Ort::Value input_tensor_{nullptr};
-    std::array<int64_t, 3> input_shape_{257, 257, 3};
+    bool isBlur_ {false};
+    std::string blurLevel_;
+    std::string backgroundPath_;
+    cv::Mat previousMasks_[2];
+    std::vector<float> computedMask_;
+    cv::Mat cvFrame_;
 
-    Ort::Value output_tensor_{nullptr};
-    std::array<int64_t, 4> output_shape_{1, 17, 17, 1};
+    // process variables
+    cv::Size kSize_;
+    int count_ {0};
+    cv::Mat bgdModel_, fgdModel_;
+    int grabCutMode_ {1}; // cv::GC_INIT_WITH_MASK = 1;
+    int grabCutIterations_ {4};
+    int grabcutClass_ {3};
+    int frameCount_ {5};
+    float smoothFactors_[3] = {0.6f, 0.3f, 0.1f};
+    float kernelSize_ {0.05f};
 
+    // filters
+    std::string mainFilterDescription_;
+    FrameFilter mainFilter_;
+    std::unique_ptr<AVFormatContext, std::function<void(AVFormatContext*)>> pFormatCtx_
+        = {avformat_alloc_context(), [](AVFormatContext* ptr) {
+               avformat_close_input(&ptr);
+               avformat_free_context(ptr);
+           }};
+    int videoStream_ {-1};
+    MediaStream ims_, ims2_, maskms_;
 
-    std::array<float, 257 * 257 * 3> input_image_{};
-    
-    std::array<float, 17 * 17> results_{};
-    Ort::Session* session_{};
-    const char* input_names[8] = {"image:0"};
-    const char* output_names[11] = {"Identity:0"};
+    // onnx related
+    bool isAllocated_ {false};
+    Ort::Env env_ {ORT_LOGGING_LEVEL_WARNING, "test"};
+    Ort::Session* session_ {};
     Ort::SessionOptions sessOpt_;
 
-    bool activateAcc_{false};
+    Ort::Value input_tensor_ {nullptr};
+    std::array<int64_t, 3> input_shape_ {257, 257, 3};
+    std::array<float, 257 * 257 * 3> input_image_ {};
+
+    Ort::Value output_tensor_ {nullptr};
+    std::array<int64_t, 4> output_shape_ {1, 17, 17, 1};
+    std::array<float, 17 * 17> results_ {};
 };
 } // namespace jami
diff --git a/GreenScreen/preferences-accel.json b/GreenScreen/preferences-accel.json
index 8f87311..af90f21 100644
--- a/GreenScreen/preferences-accel.json
+++ b/GreenScreen/preferences-accel.json
@@ -6,6 +6,15 @@
         "title": "Background image",
         "summary": "Select background image file",
         "defaultValue": "data/backgrounds/background2.jpeg",
+        "scope": "plugin,Foreground Segmentation",
+        "dependsOn": "!blur"
+    },
+    {
+        "type": "Switch",
+        "key": "blur",
+        "title": "Blur",
+        "summary": "Do you want to blur background?",
+        "defaultValue": "0",
         "scope": "plugin,Foreground Segmentation"
     },
     {
@@ -18,6 +27,17 @@
     },
     {
         "type": "List",
+        "key": "blurlevel",
+        "title": "Blur level",
+        "summary": "Select how much blur do you want.",
+        "defaultValue": "8",
+        "entries": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
+        "entryValues": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
+        "scope": "plugin,Foreground Segmentation",
+        "dependsOn": "blur"
+    },
+    {
+        "type": "List",
         "key": "streamslist",
         "title": "Video stream",
         "summary": "Select stream",
diff --git a/GreenScreen/preferences.json b/GreenScreen/preferences.json
index 94b6b8f..8ee350c 100644
--- a/GreenScreen/preferences.json
+++ b/GreenScreen/preferences.json
@@ -6,10 +6,30 @@
         "title": "Background image",
         "summary": "Select background image file",
         "defaultValue": "data/backgrounds/background2.jpeg",
+        "scope": "plugin,Foreground Segmentation",
+        "dependsOn": "!blur"
+    },
+    {
+        "type": "Switch",
+        "key": "blur",
+        "title": "Blur",
+        "summary": "Do you want to blur background?",
+        "defaultValue": "0",
         "scope": "plugin,Foreground Segmentation"
     },
     {
         "type": "List",
+        "key": "blurlevel",
+        "title": "Blur level",
+        "summary": "Select how much blur do you want.",
+        "defaultValue": "8",
+        "entries": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
+        "entryValues": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
+        "scope": "plugin,Foreground Segmentation",
+        "dependsOn": "blur"
+    },
+    {
+        "type": "List",
         "key": "streamslist",
         "title": "Video stream",
         "summary": "Select stream",
diff --git a/GreenScreen/videoSubscriber.cpp b/GreenScreen/videoSubscriber.cpp
index 583a5c5..92147c8 100644
--- a/GreenScreen/videoSubscriber.cpp
+++ b/GreenScreen/videoSubscriber.cpp
@@ -20,18 +20,12 @@
  */
 
 #include "videoSubscriber.h"
-// Use for display rotation matrix
+
 extern "C" {
 #include <libavutil/display.h>
 }
 #include <accel.h>
-#include <frameUtils.h>
-
-// Opencv processing
-#include <opencv2/imgcodecs.hpp>
-#include <opencv2/imgproc.hpp>
-
-// LOGGING
+#include <mediaStream.h>
 #include <pluglog.h>
 
 const std::string TAG = "FORESEG";
@@ -39,12 +33,8 @@
 
 namespace jami {
 
-VideoSubscriber::VideoSubscriber(const std::string& dataPath,
-                                 const std::string& model,
-                                 const std::string& backgroundImage,
-                                 bool acc)
-    : path_ {dataPath}
-    , pluginProcessor {dataPath, model, backgroundImage, acc}
+VideoSubscriber::VideoSubscriber(const std::string& model, bool acc)
+    : pluginProcessor {model, acc}
 {
     /**
      * Waits for new frames and then process them
@@ -58,7 +48,7 @@
                 break;
             }
 
-            pluginProcessor.feedInput(fcopy.resizedFrameRGB);
+            pluginProcessor.feedInput(inputFrame_.get());
             newFrame = false;
             /** Unclock the mutex, this way we let the other thread
              *  copy new data while we are processing the old one
@@ -71,123 +61,96 @@
 
 VideoSubscriber::~VideoSubscriber()
 {
-    std::ostringstream oss;
-    oss << "~MediaProcessor" << std::endl;
+    inputFilter_.clean();
+    detach();
     stop();
     processFrameThread.join();
-    Plog::log(Plog::LogPriority::INFO, TAG, oss.str());
+    Plog::log(Plog::LogPriority::INFO, TAG, "~MediaProcessor");
 }
 
 void
 VideoSubscriber::update(jami::Observable<AVFrame*>*, AVFrame* const& pluginFrame)
 {
-    if (!observable_ || !pluginProcessor.isAllocated() || !pluginProcessor.hasBackground()
-        || !pluginFrame)
+    if (!observable_ || !pluginProcessor.isAllocated() || !pluginFrame)
         return;
 
     //======================================================================================
     // GET FRAME ROTATION
     AVFrameSideData* side_data = av_frame_get_side_data(pluginFrame, AV_FRAME_DATA_DISPLAYMATRIX);
-
-    int angle {0};
+    int newAngle {0};
     if (side_data) {
         auto matrix_rotation = reinterpret_cast<int32_t*>(side_data->data);
-        angle = static_cast<int>(av_display_rotation_get(matrix_rotation));
+        newAngle = static_cast<int>(av_display_rotation_get(matrix_rotation));
+    }
+    if (newAngle != angle_) {
+        angle_ = newAngle;
+        firstRun = true;
     }
 
     //======================================================================================
     // GET RAW FRAME
-    // Use a non-const Frame
-    // Convert input frame to RGB
-    int inputHeight = pluginFrame->height;
-    int inputWidth = pluginFrame->width;
-
-    fcopy.originalSize = cv::Size {inputWidth, inputHeight};
-
-    AVFrame* temp = transferToMainMemory(pluginFrame, AV_PIX_FMT_NV12);
-    AVFrame* bgrFrame = scaler.convertFormat(temp, AV_PIX_FMT_RGB24);
-    av_frame_unref(temp);
-    av_frame_free(&temp);
-    if (!bgrFrame)
+    gsFrame rgbFrame = {transferToMainMemory(pluginFrame, AV_PIX_FMT_NV12), frameFree};
+    if (!rgbFrame.get())
         return;
-    cv::Mat frame = cv::Mat {bgrFrame->height,
-                             bgrFrame->width,
-                             CV_8UC3,
-                             bgrFrame->data[0],
-                             static_cast<size_t>(bgrFrame->linesize[0])};
-    // First clone the frame as the original one is unusable because of
-    // linespace
+    rgbFrame->pts = 1;
 
-    cv::Mat clone = frame.clone();
     //======================================================================================
-
-    pluginProcessor.setBackgroundRotation(angle);
-
+    // PROCESS
     if (firstRun) {
-        fcopy.resizedSize = cv::Size {257, 257};
-        pluginProcessor.resetInitValues(fcopy.resizedSize);
-
-        cv::resize(clone, fcopy.resizedFrameRGB, fcopy.resizedSize);
-        pluginProcessor.rotateFrame(angle, fcopy.resizedFrameRGB);
-
-        cv::resize(pluginProcessor.backgroundImage,
-                   pluginProcessor.backgroundImage,
-                   fcopy.resizedSize);
+        initFilters();
+        pluginProcessor.initFilters({rgbFrame->width, rgbFrame->height}, rgbFrame->format, angle_);
+        rational<int> fr(rgbFrame->pts, 1);
+        MediaStream pluginstream_ = MediaStream("input",
+                                                rgbFrame->format,
+                                                1 / fr,
+                                                rgbFrame->width,
+                                                rgbFrame->height,
+                                                0,
+                                                fr);
+        inputFilter_.initialize(inputFilterDescription_, {pluginstream_});
 
         firstRun = false;
     }
+    if (!inputFilter_.initialized_)
+        return;
+
+    AVFrame* filteredFrame;
+    if (inputFilter_.feedInput(rgbFrame.get(), "input") == 0) {
+        if ((filteredFrame = inputFilter_.readOutput()) == 0)
+            return;
+        else
+            filteredFrame->pts = 1;
+    } else
+        return;
 
     if (!newFrame) {
         std::lock_guard<std::mutex> l(inputLock);
-        cv::resize(clone, fcopy.resizedFrameRGB, fcopy.resizedSize);
-        pluginProcessor.rotateFrame(angle, fcopy.resizedFrameRGB);
+        inputFrame_.reset(av_frame_clone(filteredFrame));
         newFrame = true;
         inputCv.notify_all();
     }
 
-    fcopy.predictionsFrameRGB = frame;
-    fcopy.predictionsResizedFrameRGB = fcopy.resizedFrameRGB.clone();
-    pluginProcessor.rotateFrame(-angle, fcopy.predictionsResizedFrameRGB);
-    pluginProcessor.drawMaskOnFrame(fcopy.predictionsFrameRGB,
-                                    fcopy.predictionsResizedFrameRGB,
-                                    pluginProcessor.computedMask,
-                                    bgrFrame->linesize[0],
-                                    angle);
+    pluginProcessor.drawMaskOnFrame(rgbFrame.get(), filteredFrame, angle_);
+    frameFree(filteredFrame);
 
-    //======================================================================================
-    // REPLACE AVFRAME DATA WITH FRAME DATA
-    if (bgrFrame->data[0]) {
-        uint8_t* frameData = bgrFrame->data[0];
-        if (angle == 90 || angle == -90) {
-            std::memmove(frameData,
-                         fcopy.predictionsFrameRGB.data,
-                         static_cast<size_t>(pluginFrame->width * pluginFrame->height * 3)
-                             * sizeof(uint8_t));
-        }
-
-        moveFrom(pluginFrame, bgrFrame);
-    }
-    av_frame_unref(bgrFrame);
-    av_frame_free(&bgrFrame);
+    moveFrom(pluginFrame, rgbFrame.get());
 }
 
 void
 VideoSubscriber::attached(jami::Observable<AVFrame*>* observable)
 {
-    std::ostringstream oss;
-    oss << "::Attached ! " << std::endl;
-    Plog::log(Plog::LogPriority::INFO, TAG, oss.str());
     observable_ = observable;
+    Plog::log(Plog::LogPriority::INFO, TAG, "Attached!");
 }
 
 void
 VideoSubscriber::detached(jami::Observable<AVFrame*>*)
 {
+    inputFilter_.clean();
+    inputFrame_.reset();
     firstRun = true;
     observable_ = nullptr;
-    std::ostringstream oss;
-    oss << "::Detached()" << std::endl;
-    Plog::log(Plog::LogPriority::INFO, TAG, oss.str());
+    Plog::log(Plog::LogPriority::INFO, TAG, "Detached!");
 }
 
 void
@@ -195,10 +158,7 @@
 {
     if (observable_) {
         firstRun = true;
-        std::ostringstream oss;
-        oss << "::Calling detach()" << std::endl;
-        Plog::log(Plog::LogPriority::INFO, TAG, oss.str());
-        observable_->detach(this);
+        observable_->detachPriorityObserver(this);
     }
 }
 
@@ -213,5 +173,35 @@
 VideoSubscriber::setBackground(const std::string& backgroundPath)
 {
     pluginProcessor.setBackgroundImage(backgroundPath);
+    firstRun = true;
+}
+
+void
+VideoSubscriber::setBlur(bool isBlur)
+{
+    pluginProcessor.setBlur(isBlur);
+    firstRun = true;
+}
+
+void
+VideoSubscriber::setBlurLevel(const std::string& blurLevel)
+{
+    pluginProcessor.setBlurLevel(blurLevel);
+    firstRun = true;
+}
+
+void
+VideoSubscriber::initFilters()
+{
+    inputFilter_.clean();
+    std::string rotateSides = "";
+    if (std::abs(angle_) == 90)
+        rotateSides = ":out_w=ih:out_h=iw";
+    inputFilterDescription_ = "[input]scale="
+                              + std::to_string(pluginProcessor.modelInputDimensions.first) + ":"
+                              + std::to_string(pluginProcessor.modelInputDimensions.second)
+                              + ",rotate=" + pluginProcessor.rotation[-angle_] + rotateSides
+                              + ",format=rgb24";
+    Plog::log(Plog::LogPriority::INFO, TAG, inputFilterDescription_);
 }
 } // namespace jami
diff --git a/GreenScreen/videoSubscriber.h b/GreenScreen/videoSubscriber.h
index f23f02d..9841ec7 100644
--- a/GreenScreen/videoSubscriber.h
+++ b/GreenScreen/videoSubscriber.h
@@ -20,44 +20,23 @@
 
 #pragma once
 
-// AvFrame
+#include "pluginProcessor.h"
+
 extern "C" {
 #include <libavutil/frame.h>
 }
 #include <observer.h>
 
-// STl
-#include <map>
 #include <thread>
 #include <condition_variable>
-
-#include <opencv2/core.hpp>
-
-#include "pluginProcessor.h"
-#include <frameScaler.h>
+#include <frameFilter.h>
 
 namespace jami {
 
-class FrameCopy
-{
-public:
-    // This frame is a resized version of the original in RGB format
-    cv::Mat resizedFrameRGB;
-    cv::Size resizedSize;
-    // This frame is used to draw predictions into in RGB format
-    cv::Mat predictionsFrameRGB;
-    cv::Size originalSize;
-    // This frame is used to draw predictions into in RGB format on a resized frame
-    cv::Mat predictionsResizedFrameRGB;
-};
-
 class VideoSubscriber : public jami::Observer<AVFrame*>
 {
 public:
-    VideoSubscriber(const std::string& dataPath,
-                    const std::string& model,
-                    const std::string& backgroundImage,
-                    bool acc = false);
+    VideoSubscriber(const std::string& model, bool acc = false);
     ~VideoSubscriber();
 
     virtual void update(jami::Observable<AVFrame*>*, AVFrame* const&) override;
@@ -67,19 +46,17 @@
     void detach();
     void stop();
     void setBackground(const std::string& backgroundPath);
+    void setBlur(bool isBlur);
+    void setBlurLevel(const std::string& blurLevel);
+    void initFilters();
 
 private:
     // Observer pattern
     Observable<AVFrame*>* observable_ {};
-
-    // Data
-    std::string path_;
-
-    // Frame
-    FrameCopy fcopy;
-    cv::Mat frame;
-
-    FrameScaler scaler;
+    int angle_ {0};
+    gsFrame inputFrame_ = {av_frame_alloc(), frameFree};
+    FrameFilter inputFilter_;
+    std::string inputFilterDescription_;
 
     // Threading
     std::thread processFrameThread;
@@ -91,7 +68,6 @@
     bool running {true};
     bool newFrame {false};
 
-    // std::shared_ptr<PluginProcessor> pluginProcessor;
     PluginProcessor pluginProcessor;
 };
 } // namespace jami
diff --git a/GreenScreen/zlib/libzlib.vcxproj b/GreenScreen/zlib/libzlib.vcxproj
new file mode 100644
index 0000000..81f9634
--- /dev/null
+++ b/GreenScreen/zlib/libzlib.vcxproj
@@ -0,0 +1,918 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugDLL|Win32">
+      <Configuration>DebugDLL</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugDLL|x64">
+      <Configuration>DebugDLL</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="ReleaseDLL|Win32">
+      <Configuration>ReleaseDLL</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="ReleaseDLL|x64">
+      <Configuration>ReleaseDLL</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="ReleaseLTO|Win32">
+      <Configuration>ReleaseLTO</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="ReleaseLTO|x64">
+      <Configuration>ReleaseLTO</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}</ProjectGuid>
+    <RootNamespace>libzlib</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings" />
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>libzlibd</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>libzlib</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>libzlib</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>zlib</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>zlibd</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>libzlibd</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>libzlib</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>libzlib</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>zlib</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">
+    <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir>
+    <TargetName>zlibd</TargetName>
+    <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ProgramDataBaseFileName>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDataBaseFileName>
+      <MinimalRebuild>false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile>
+    </Lib>
+    <Lib>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Lib>
+    <Lib>
+      <SubSystem>Windows</SubSystem>
+    </Lib>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN64;_WIN32_WINNT=0x0600;_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ProgramDataBaseFileName>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDataBaseFileName>
+      <MinimalRebuild>false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <SubSystem>Windows</SubSystem>
+      <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile>
+    </Lib>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+      <MinimalRebuild>false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <ImportLibrary>$(OutDir)\lib\x86\$(TargetName).lib</ImportLibrary>
+      <SubSystem>Windows</SubSystem>
+      <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase>
+      <ProgramDatabaseFile>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDatabaseFile>
+      <OutputFile>$(OutDir)\bin\x86\$(TargetName)$(TargetExt)</OutputFile>
+      <ModuleDefinitionFile>..\contrib\vstudio\vc11\zlibvc.def</ModuleDefinitionFile>
+      <LargeAddressAware>true</LargeAddressAware>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <MinimumRequiredVersion>5.1</MinimumRequiredVersion>
+    </Link>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN64;_WIN32_WINNT=0x0600;_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+      <MinimalRebuild>false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <OutputFile>$(OutDir)\bin\x64\$(TargetName)$(TargetExt)</OutputFile>
+      <ProgramDatabaseFile>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase>
+      <ImportLibrary>$(OutDir)\lib\x64\$(TargetName).lib</ImportLibrary>
+      <ModuleDefinitionFile>..\contrib\vstudio\vc11\zlibvc.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <MinimumRequiredVersion>6.0</MinimumRequiredVersion>
+    </Link>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <StringPooling>true</StringPooling>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InterproceduralOptimization>SingleFile</InterproceduralOptimization>
+      <ProgramDataBaseFileName>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+    <Lib>
+      <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile>
+    </Lib>
+    <Lib>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Lib>
+    <Lib>
+      <SubSystem>Windows</SubSystem>
+    </Lib>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <StringPooling>true</StringPooling>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InterproceduralOptimization>SingleFile</InterproceduralOptimization>
+      <ProgramDataBaseFileName>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+    <Lib>
+      <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile>
+    </Lib>
+    <Lib>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Lib>
+    <Lib>
+      <SubSystem>Windows</SubSystem>
+    </Lib>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN64;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <StringPooling>true</StringPooling>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InterproceduralOptimization>SingleFile</InterproceduralOptimization>
+      <ProgramDataBaseFileName>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+    <Lib>
+      <SubSystem>Windows</SubSystem>
+      <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile>
+    </Lib>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN64;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <StringPooling>true</StringPooling>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InterproceduralOptimization>SingleFile</InterproceduralOptimization>
+      <ProgramDataBaseFileName>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+    <Lib>
+      <SubSystem>Windows</SubSystem>
+      <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile>
+    </Lib>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <StringPooling>true</StringPooling>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ImportLibrary>$(OutDir)\lib\x86\$(TargetName).lib</ImportLibrary>
+      <SubSystem>Windows</SubSystem>
+      <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase>
+      <ProgramDatabaseFile>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDatabaseFile>
+      <OutputFile>$(OutDir)\bin\x86\$(TargetName)$(TargetExt)</OutputFile>
+      <ModuleDefinitionFile>..\contrib\vstudio\vc11\zlibvc.def</ModuleDefinitionFile>
+      <LargeAddressAware>true</LargeAddressAware>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <MinimumRequiredVersion>5.1</MinimumRequiredVersion>
+    </Link>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN64;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <StringPooling>true</StringPooling>
+      <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <OutputFile>$(OutDir)\bin\x64\$(TargetName)$(TargetExt)</OutputFile>
+      <ProgramDatabaseFile>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase>
+      <ImportLibrary>$(OutDir)\lib\x64\$(TargetName).lib</ImportLibrary>
+      <ModuleDefinitionFile>..\contrib\vstudio\vc11\zlibvc.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <MinimumRequiredVersion>6.0</MinimumRequiredVersion>
+    </Link>
+    <MASM>
+      <UseSafeExceptionHandlers>true</UseSafeExceptionHandlers>
+    </MASM>
+    <PostBuildEvent>
+      <Command>mkdir "$(OutDir)"\include
+copy ..\zlib.h "$(OutDir)"\include
+copy "$(OutDir)"\..\src\zlib\zconf.h "$(OutDir)"\include /Y
+copy "$(OutDir)"\lib\$(Platform)\libzlib.lib "$(OutDir)"\lib\$(Platform)\zlib.lib /Y
+mkdir $(OutDir)\licenses
+copy ..\README $(OutDir)\licenses\zlib.txt</Command>
+    </PostBuildEvent>
+    <PreBuildEvent>
+      <Command>if exist ..\zconf.h (
+del ..\zconf.h
+)
+if exist "$(OutDir)"\include\zlib.h (
+del "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del "$(OutDir)"\include\zconf.h
+)</Command>
+    </PreBuildEvent>
+    <CustomBuildStep>
+      <Message>Custom Clean Step</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>force_clean</Outputs>
+      <Command>if exist "$(OutDir)"\include\zlib.h (
+del /f /q "$(OutDir)"\include\zlib.h
+)
+if exist "$(OutDir)"\include\zconf.h (
+del /f /q "$(OutDir)"\include\zconf.h
+)
+if exist $(OutDir)\licenses\zlib.txt (
+del /f /q $(OutDir)\licenses\zlib.txt
+)</Command>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\adler32.c" />
+    <ClCompile Include="..\compress.c" />
+    <ClCompile Include="..\crc32.c" />
+    <ClCompile Include="..\deflate.c" />
+    <ClCompile Include="..\gzclose.c" />
+    <ClCompile Include="..\gzlib.c" />
+    <ClCompile Include="..\gzread.c" />
+    <ClCompile Include="..\gzwrite.c" />
+    <ClCompile Include="..\infback.c" />
+    <ClCompile Include="..\inffast.c" />
+    <ClCompile Include="..\inflate.c" />
+    <ClCompile Include="..\inftrees.c" />
+    <ClCompile Include="..\trees.c" />
+    <ClCompile Include="..\uncompr.c" />
+    <ClCompile Include="..\zutil.c" />
+    <ClCompile Include="..\contrib\minizip\ioapi.c" />
+    <ClCompile Include="..\contrib\minizip\iowin32.c">
+      <ExcludedFromBuild Condition="'$(Configuration)'=='Debug'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)'=='Release'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)'=='ReleaseLTO'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\contrib\minizip\unzip.c" />
+    <ClCompile Include="..\contrib\minizip\zip.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\crc32.h" />
+    <ClInclude Include="..\deflate.h" />
+    <ClInclude Include="..\inffast.h" />
+    <ClInclude Include="..\inffixed.h" />
+    <ClInclude Include="..\inflate.h" />
+    <ClInclude Include="..\inftrees.h" />
+    <ClInclude Include="..\trees.h" />
+    <ClInclude Include="..\zlib.h" />
+    <ClInclude Include="..\zutil.h" />
+    <ClInclude Include="..\contrib\minizip\ioapi.h" />
+    <ClInclude Include="..\contrib\minizip\unzip.h" />
+    <ClInclude Include="..\contrib\minizip\zip.h" />
+    <ClInclude Include="zconf.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\contrib\vstudio\vc11\zlib.rc">
+      <ExcludedFromBuild Condition="'$(Configuration)'=='Debug'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)'=='Release'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)'=='ReleaseLTO'">true</ExcludedFromBuild>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\contrib\vstudio\vc11\zlibvc.def" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets" />
+</Project>
diff --git a/GreenScreen/zlib/package.json b/GreenScreen/zlib/package.json
new file mode 100644
index 0000000..fdfec5e
--- /dev/null
+++ b/GreenScreen/zlib/package.json
@@ -0,0 +1,17 @@
+{
+    "name": "zlib",
+    "version": "8e4e3ead55cdd296130242d86b44b92fde3ea4d4",
+    "url": "https://github.com/ShiftMediaProject/zlib/archive/__VERSION__.tar.gz",
+    "deps": [],
+    "patches": [],
+    "win_patches": [],
+    "project_paths": [
+        "SMP/libzlib.vcxproj"
+    ],
+    "with_env" : "",
+    "custom_scripts": {
+        "pre_build": ["copy %cd%\\\\..\\\\..\\\\src\\\\zlib\\\\libzlib.vcxproj %cd%\\\\SMP\\\\libzlib.vcxproj /Y"],
+        "build": [],
+        "post_build": []
+    }
+}
diff --git a/GreenScreen/zlib/zconf.h b/GreenScreen/zlib/zconf.h
new file mode 100644
index 0000000..df47fef
--- /dev/null
+++ b/GreenScreen/zlib/zconf.h
@@ -0,0 +1,519 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
+#define Z_PREFIX_SET
+
+/* all linked symbols and init macros */
+#define _dist_code        z__dist_code
+#define _length_code      z__length_code
+#define _tr_align         z__tr_align
+#define _tr_flush_bits    z__tr_flush_bits
+#define _tr_flush_block   z__tr_flush_block
+#define _tr_init          z__tr_init
+#define _tr_stored_block  z__tr_stored_block
+#define _tr_tally         z__tr_tally
+#define adler32           z_adler32
+#define adler32_combine   z_adler32_combine
+#define adler32_combine64 z_adler32_combine64
+#define adler32_z         z_adler32_z
+#ifndef Z_SOLO
+#define compress      z_compress
+#define compress2     z_compress2
+#define compressBound z_compressBound
+#endif
+#define crc32                z_crc32
+#define crc32_combine        z_crc32_combine
+#define crc32_combine64      z_crc32_combine64
+#define crc32_z              z_crc32_z
+#define deflate              z_deflate
+#define deflateBound         z_deflateBound
+#define deflateCopy          z_deflateCopy
+#define deflateEnd           z_deflateEnd
+#define deflateGetDictionary z_deflateGetDictionary
+#define deflateInit          z_deflateInit
+#define deflateInit2         z_deflateInit2
+#define deflateInit2_        z_deflateInit2_
+#define deflateInit_         z_deflateInit_
+#define deflateParams        z_deflateParams
+#define deflatePending       z_deflatePending
+#define deflatePrime         z_deflatePrime
+#define deflateReset         z_deflateReset
+#define deflateResetKeep     z_deflateResetKeep
+#define deflateSetDictionary z_deflateSetDictionary
+#define deflateSetHeader     z_deflateSetHeader
+#define deflateTune          z_deflateTune
+#define deflate_copyright    z_deflate_copyright
+#define get_crc_table        z_get_crc_table
+#ifndef Z_SOLO
+#define gz_error       z_gz_error
+#define gz_intmax      z_gz_intmax
+#define gz_strwinerror z_gz_strwinerror
+#define gzbuffer       z_gzbuffer
+#define gzclearerr     z_gzclearerr
+#define gzclose        z_gzclose
+#define gzclose_r      z_gzclose_r
+#define gzclose_w      z_gzclose_w
+#define gzdirect       z_gzdirect
+#define gzdopen        z_gzdopen
+#define gzeof          z_gzeof
+#define gzerror        z_gzerror
+#define gzflush        z_gzflush
+#define gzfread        z_gzfread
+#define gzfwrite       z_gzfwrite
+#define gzgetc         z_gzgetc
+#define gzgetc_        z_gzgetc_
+#define gzgets         z_gzgets
+#define gzoffset       z_gzoffset
+#define gzoffset64     z_gzoffset64
+#define gzopen         z_gzopen
+#define gzopen64       z_gzopen64
+#ifdef _WIN32
+#define gzopen_w z_gzopen_w
+#endif
+#define gzprintf    z_gzprintf
+#define gzputc      z_gzputc
+#define gzputs      z_gzputs
+#define gzread      z_gzread
+#define gzrewind    z_gzrewind
+#define gzseek      z_gzseek
+#define gzseek64    z_gzseek64
+#define gzsetparams z_gzsetparams
+#define gztell      z_gztell
+#define gztell64    z_gztell64
+#define gzungetc    z_gzungetc
+#define gzvprintf   z_gzvprintf
+#define gzwrite     z_gzwrite
+#endif
+#define inflate              z_inflate
+#define inflateBack          z_inflateBack
+#define inflateBackEnd       z_inflateBackEnd
+#define inflateBackInit      z_inflateBackInit
+#define inflateBackInit_     z_inflateBackInit_
+#define inflateCodesUsed     z_inflateCodesUsed
+#define inflateCopy          z_inflateCopy
+#define inflateEnd           z_inflateEnd
+#define inflateGetDictionary z_inflateGetDictionary
+#define inflateGetHeader     z_inflateGetHeader
+#define inflateInit          z_inflateInit
+#define inflateInit2         z_inflateInit2
+#define inflateInit2_        z_inflateInit2_
+#define inflateInit_         z_inflateInit_
+#define inflateMark          z_inflateMark
+#define inflatePrime         z_inflatePrime
+#define inflateReset         z_inflateReset
+#define inflateReset2        z_inflateReset2
+#define inflateResetKeep     z_inflateResetKeep
+#define inflateSetDictionary z_inflateSetDictionary
+#define inflateSync          z_inflateSync
+#define inflateSyncPoint     z_inflateSyncPoint
+#define inflateUndermine     z_inflateUndermine
+#define inflateValidate      z_inflateValidate
+#define inflate_copyright    z_inflate_copyright
+#define inflate_fast         z_inflate_fast
+#define inflate_table        z_inflate_table
+#ifndef Z_SOLO
+#define uncompress  z_uncompress
+#define uncompress2 z_uncompress2
+#endif
+#define zError z_zError
+#ifndef Z_SOLO
+#define zcalloc z_zcalloc
+#define zcfree  z_zcfree
+#endif
+#define zlibCompileFlags z_zlibCompileFlags
+#define zlibVersion      z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#define Byte       z_Byte
+#define Bytef      z_Bytef
+#define alloc_func z_alloc_func
+#define charf      z_charf
+#define free_func  z_free_func
+#ifndef Z_SOLO
+#define gzFile z_gzFile
+#endif
+#define gz_header  z_gz_header
+#define gz_headerp z_gz_headerp
+#define in_func    z_in_func
+#define intf       z_intf
+#define out_func   z_out_func
+#define uInt       z_uInt
+#define uIntf      z_uIntf
+#define uLong      z_uLong
+#define uLongf     z_uLongf
+#define voidp      z_voidp
+#define voidpc     z_voidpc
+#define voidpf     z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#define gz_header_s    z_gz_header_s
+#define internal_state z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+#define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#ifndef WIN32
+#define WIN32
+#endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#ifndef SYS16BIT
+#define SYS16BIT
+#endif
+#endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+#define MAXSEG_64K
+#endif
+#ifdef MSDOS
+#define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+#ifndef STDC
+#define STDC
+#endif
+#if __STDC_VERSION__ >= 199901L
+#ifndef STDC99
+#define STDC99
+#endif
+#endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
+#define STDC
+#endif
+
+#ifndef STDC
+#ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+#define const /* note: need a more gentle solution here */
+#endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+#define z_const const
+#else
+#define z_const
+#endif
+
+#ifdef Z_SOLO
+typedef unsigned long z_size_t;
+#else
+#define z_longlong long long
+#if defined(NO_SIZE_T)
+typedef unsigned NO_SIZE_T z_size_t;
+#elif defined(STDC)
+#include <stddef.h>
+typedef size_t z_size_t;
+#else
+typedef unsigned long z_size_t;
+#endif
+#undef z_longlong
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#ifdef MAXSEG_64K
+#define MAX_MEM_LEVEL 8
+#else
+#define MAX_MEM_LEVEL 9
+#endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#define MAX_WBITS 15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
+ for small objects.
+*/
+
+/* Type declarations */
+
+#ifndef OF /* function prototypes */
+#ifdef STDC
+#define OF(args) args
+#else
+#define OF(args) ()
+#endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#define Z_ARG(args) args
+#else
+#define Z_ARG(args) ()
+#endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+#if defined(M_I86SM) || defined(M_I86MM)
+/* MSC small or medium model */
+#define SMALL_MEDIUM
+#ifdef _MSC_VER
+#define FAR _far
+#else
+#define FAR far
+#endif
+#endif
+#if (defined(__SMALL__) || defined(__MEDIUM__))
+/* Turbo C small or medium model */
+#define SMALL_MEDIUM
+#ifdef __BORLANDC__
+#define FAR _far
+#else
+#define FAR far
+#endif
+#endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+/* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+#ifdef ZLIB_DLL
+#if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#ifdef ZLIB_INTERNAL
+#define ZEXTERN extern __declspec(dllexport)
+#else
+#define ZEXTERN extern __declspec(dllimport)
+#endif
+#endif
+#endif /* ZLIB_DLL */
+       /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+        * define ZLIB_WINAPI.
+        * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+        */
+#ifdef ZLIB_WINAPI
+#ifdef FAR
+#undef FAR
+#endif
+#include <windows.h>
+/* No need for _export, use ZLIB.DEF instead. */
+/* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#define ZEXPORT WINAPI
+#ifdef WIN32
+#define ZEXPORTVA WINAPIV
+#else
+#define ZEXPORTVA FAR CDECL
+#endif
+#endif
+#endif
+
+#if defined(__BEOS__)
+#ifdef ZLIB_DLL
+#ifdef ZLIB_INTERNAL
+#define ZEXPORT   __declspec(dllexport)
+#define ZEXPORTVA __declspec(dllexport)
+#else
+#define ZEXPORT   __declspec(dllimport)
+#define ZEXPORTVA __declspec(dllimport)
+#endif
+#endif
+#endif
+
+#ifndef ZEXTERN
+#define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+#define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+#define ZEXPORTVA
+#endif
+
+#ifndef FAR
+#define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char Byte; /* 8 bits */
+#endif
+typedef unsigned int uInt;   /* 16 bits or more */
+typedef unsigned long uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+/* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+#define Bytef Byte FAR
+#else
+typedef Byte FAR Bytef;
+#endif
+typedef char FAR charf;
+typedef int FAR intf;
+typedef uInt FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+typedef void const* voidpc;
+typedef void FAR* voidpf;
+typedef void* voidp;
+#else
+typedef Byte const* voidpc;
+typedef Byte FAR* voidpf;
+typedef Byte* voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#include <limits.h>
+#if (UINT_MAX == 0xffffffffUL)
+#define Z_U4 unsigned
+#elif (ULONG_MAX == 0xffffffffUL)
+#define Z_U4 unsigned long
+#elif (USHRT_MAX == 0xffffffffUL)
+#define Z_U4 unsigned short
+#endif
+#endif
+
+#ifdef Z_U4
+typedef Z_U4 z_crc_t;
+#else
+typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
+#define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+#ifndef Z_SOLO
+#include <sys/types.h> /* for off_t */
+#endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#ifndef Z_SOLO
+#include <stdarg.h> /* for va_list */
+#endif
+#endif
+
+#ifdef _WIN32
+#ifndef Z_SOLO
+#include <stddef.h> /* for wchar_t */
+#endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#define Z_HAVE_UNISTD_H
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE - 0
+#define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS - 0 == 64 && defined(Z_LFS64)
+#define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+#define SEEK_SET 0 /* Seek from beginning of file.  */
+#define SEEK_CUR 1 /* Seek from current position.  */
+#define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+#define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+#define z_off64_t off64_t
+#else
+#if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#define z_off64_t __int64
+#else
+#define z_off64_t z_off_t
+#endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+#pragma map(deflateInit_, "DEIN")
+#pragma map(deflateInit2_, "DEIN2")
+#pragma map(deflateEnd, "DEEND")
+#pragma map(deflateBound, "DEBND")
+#pragma map(inflateInit_, "ININ")
+#pragma map(inflateInit2_, "ININ2")
+#pragma map(inflateEnd, "INEND")
+#pragma map(inflateSync, "INSY")
+#pragma map(inflateSetDictionary, "INSEDI")
+#pragma map(compressBound, "CMBND")
+#pragma map(inflate_table, "INTABL")
+#pragma map(inflate_fast, "INFA")
+#pragma map(inflate_copyright, "INCOPY")
+#endif
+
+#endif /* ZCONF_H */
