diff --git a/MSVC/config.h b/MSVC/config.h
index f5222f2db..c9469ef60 100644
--- a/MSVC/config.h
+++ b/MSVC/config.h
@@ -7,6 +7,9 @@ systems. This function is required for `alloca.c' support on those systems.
/* Define to 1 if using `alloca.c'. */
/* #undef C_ALLOCA */
+/* Define to 1 if you want hardware acceleration support. */
+#define RING_ACCEL 1
+
/* Define to 1 if you have `alloca', as a function or macro. */
#define HAVE_ALLOCA 1
diff --git a/MSVC/ring-daemon.vcxproj b/MSVC/ring-daemon.vcxproj
index 89c807d78..eb9501c10 100644
--- a/MSVC/ring-daemon.vcxproj
+++ b/MSVC/ring-daemon.vcxproj
@@ -767,10 +767,7 @@
-
- true
- true
-
+
@@ -931,10 +928,7 @@
-
- true
- true
-
+
@@ -999,6 +993,7 @@
+
diff --git a/MSVC/ring-daemon.vcxproj.filters b/MSVC/ring-daemon.vcxproj.filters
index 5a0f068fa..4c833a923 100644
--- a/MSVC/ring-daemon.vcxproj.filters
+++ b/MSVC/ring-daemon.vcxproj.filters
@@ -367,9 +367,6 @@
Source Files\jamidht
-
- Source Files\media\video
-
Source Files\security
@@ -409,6 +406,9 @@
Source Files\media\video
+
+ Source Files\media\video
+
@@ -711,9 +711,6 @@
Source Files\media\audio\sound
-
- Source Files\media\video
-
Source Files\media\video
@@ -840,6 +837,12 @@
Source Files\media\video
+
+ Source Files
+
+
+ Source Files\media\video
+
diff --git a/contrib/src/fetch_all.bat b/contrib/src/fetch_all.bat
index f708de0d9..347537c58 100644
--- a/contrib/src/fetch_all.bat
+++ b/contrib/src/fetch_all.bat
@@ -21,6 +21,7 @@ if "%1"=="uwp" (
:uwpDeps
set DEPENDENCIES=( ^
+ffnvcodec, ^
ffmpeg, ^
argon2, ^
zlib ^
@@ -45,6 +46,7 @@ goto fetch
:win32Deps
set DEPENDENCIES=( ^
+ffnvcodec, ^
ffmpeg, ^
argon2, ^
zlib ^
diff --git a/contrib/src/ffmpeg/fetch_and_patch.bat b/contrib/src/ffmpeg/fetch_and_patch.bat
index dd5579621..53213d8ac 100644
--- a/contrib/src/ffmpeg/fetch_and_patch.bat
+++ b/contrib/src/ffmpeg/fetch_and_patch.bat
@@ -31,5 +31,6 @@ set UNIXPATH=%ROOTPATH%%UNIXPATH:C:/=%
bash -c "%PATCH_CMD% %UNIXPATH%ffmpeg/change-RTCP-ratio.patch"
git apply --reject --whitespace=fix %SRC%\ffmpeg\windows-configure.patch
+git apply --reject --whitespace=fix %SRC%\ffmpeg\windows-configure-ffnvcodec.patch
cd %SRC%
\ No newline at end of file
diff --git a/contrib/src/ffmpeg/windows-configure-ffnvcodec.patch b/contrib/src/ffmpeg/windows-configure-ffnvcodec.patch
new file mode 100644
index 000000000..4be2ddf5a
--- /dev/null
+++ b/contrib/src/ffmpeg/windows-configure-ffnvcodec.patch
@@ -0,0 +1,29 @@
+From 63d0edcee2744317fc0befad53000c206eb5ee31 Mon Sep 17 00:00:00 2001
+From: Eden Abitbol
+Date: Tue, 9 Jul 2019 10:52:29 -0400
+Subject: [PATCH] Remove ffnvcodec linux style package check for windows
+ support.
+
+---
+ configure | 7 -------
+ 1 file changed, 7 deletions(-)
+
+--- a/configure
++++ b/configure
+@@ -5897,13 +5897,6 @@ check_type "va/va.h va/va_enc_vp9.h" "VAEncPictureParameterBufferVP9"
+
+ check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
+
+-if ! disabled ffnvcodec; then
+- check_pkg_config ffnvcodec "ffnvcodec >= 8.1.24.2" \
+- "ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h" "" || \
+- { test_pkg_config ffnvcodec_tmp "ffnvcodec < 8.1" "" "" && check_pkg_config ffnvcodec "ffnvcodec >= 8.0.14.2" \
+- "ffnvcodec/nvEncodeAPI.h ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h ffnvcodec/dynlink_nvcuvid.h" ""; }
+-fi
+-
+ check_cpp_condition winrt windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"
+
+ if ! disabled w32threads && ! enabled pthreads; then
+--
+2.22.0.windows.1
+
diff --git a/contrib/src/ffmpeg/windows-configure-make.sh b/contrib/src/ffmpeg/windows-configure-make.sh
index 3070c729b..df50a11a4 100644
--- a/contrib/src/ffmpeg/windows-configure-make.sh
+++ b/contrib/src/ffmpeg/windows-configure-make.sh
@@ -142,7 +142,7 @@ if [ "$1" == "uwp" ]; then
OUTDIR=Output/Windows10/x86
fi
elif [ "$1" == "win32" ]; then
- EXTRACFLAGS='-MD -D_WINDLL -I../../../../../msvc/include -I../../../../../msvc/include/opus -I../../../../../msvc/include/vpx'
+ EXTRACFLAGS='-MD -D_WINDLL -I../../../../../msvc/include -I../../../../../msvc/include/opus -I../../../../../msvc/include/vpx -I../../../../../msvc/include/ffnvcodec'
FFMPEGCONF+='
--enable-libvpx
--enable-encoder=libvpx_vp8
@@ -152,6 +152,17 @@ elif [ "$1" == "win32" ]; then
--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'
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 OleAut32.lib Shlwapi.lib Vfw32.lib Secur32.lib libopus.lib libx264.lib libvpx.lib -LIBPATH:../../../../../msvc/lib/x64'
diff --git a/contrib/src/ffnvcodec/fetch_and_patch.bat b/contrib/src/ffnvcodec/fetch_and_patch.bat
new file mode 100644
index 000000000..6c4bcfb9c
--- /dev/null
+++ b/contrib/src/ffnvcodec/fetch_and_patch.bat
@@ -0,0 +1,28 @@
+set BUILD=%SRC%..\build
+
+mkdir %BUILD%
+cd %BUILD%
+
+set FFNVCODEC_VERSION=5eeca8cc95267d55030e98a051effa47c45f13f3
+set FFNVCODEC_GITURL=https://github.com/FFmpeg/nv-codec-headers/archive/%FFNVCODEC_VERSION%.tar.gz
+
+if %USE_CACHE%==1 (
+ copy %CACHE_DIR%\%FFNVCODEC_VERSION%.tar.gz %cd%
+) else (
+ wget --no-check-certificate %FFNVCODEC_GITURL%
+)
+
+7z -y x %FFNVCODEC_VERSION%.tar.gz && 7z -y x %FFNVCODEC_VERSION%.tar
+del %FFNVCODEC_VERSION%.tar && del %FFNVCODEC_VERSION%.tar.gz && del pax_global_header
+rename nv-codec-headers-%FFNVCODEC_VERSION% ffnvcodec
+
+cd ffnvcodec\include\ffnvcodec
+
+mkdir ..\..\..\..\msvc\include
+
+mkdir ..\..\..\..\msvc\include\ffnvcodec
+
+xcopy /S /Y *.h ..\..\..\..\msvc\include\ffnvcodec
+
+cd %SRC%
+