diff --git a/contrib/build_all.bat b/contrib/build_all.bat
index e70ebb3bf1295f9f8f30e350af6a3d3011abf1e5..d38abe582e8515b70a139f380b2c10af807fc11a 100644
--- a/contrib/build_all.bat
+++ b/contrib/build_all.bat
@@ -54,6 +54,7 @@ if "%1"=="uwp" (
 set TOBUILD= ^
 x264=build\x264\SMP\libx264.vcxproj, ^
 opus=build\opus\SMP\libopus.vcxproj, ^
+media-sdk=build\media-sdk\api\mfx_dispatch\windows\libmfx_vs2015.vcxproj, ^
 ffmpeg=ffmpeg, ^
 restbed=restbed, ^
 jsoncpp=build\jsoncpp\makefiles\vs2017\lib_json.vcxproj, ^
@@ -80,6 +81,7 @@ set TOBUILD= ^
 vpx=build\vpx\SMP\libvpx.vcxproj, ^
 x264=build\x264\SMP\libx264.vcxproj, ^
 opus=build\opus\SMP\libopus.vcxproj, ^
+media-sdk=build\media-sdk\api\mfx_dispatch\windows\libmfx_vs2015.vcxproj, ^
 ffmpeg=ffmpeg, ^
 restbed=restbed, ^
 jsoncpp=build\jsoncpp\makefiles\vs2017\lib_json.vcxproj, ^
diff --git a/contrib/src/fetch_all.bat b/contrib/src/fetch_all.bat
index 347537c5895cc69ae18bc88e2b2418b545f2c0cf..083e77d9d9f6d0e07757d68a49fa5df37a439500 100644
--- a/contrib/src/fetch_all.bat
+++ b/contrib/src/fetch_all.bat
@@ -21,6 +21,7 @@ if "%1"=="uwp" (
 
 :uwpDeps
 set DEPENDENCIES=( ^
+media-sdk, ^
 ffnvcodec, ^
 ffmpeg, ^
 argon2, ^
@@ -46,6 +47,7 @@ goto fetch
 
 :win32Deps
 set DEPENDENCIES=( ^
+media-sdk, ^
 ffnvcodec, ^
 ffmpeg, ^
 argon2, ^
diff --git a/contrib/src/ffmpeg/fetch_and_patch.bat b/contrib/src/ffmpeg/fetch_and_patch.bat
index 53213d8ace65b385468f744e6074031a6516ce55..a0ddff8fd12b88974ecfaef6e9d7f0dc98d11fe9 100644
--- a/contrib/src/ffmpeg/fetch_and_patch.bat
+++ b/contrib/src/ffmpeg/fetch_and_patch.bat
@@ -32,5 +32,6 @@ 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
+git apply --reject --whitespace=fix %SRC%\ffmpeg\windows-configure-libmfx.patch
 
 cd %SRC%
\ No newline at end of file
diff --git a/contrib/src/ffmpeg/windows-configure-libmfx.patch b/contrib/src/ffmpeg/windows-configure-libmfx.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2559107dad6a778146c915edb885a5ee5d2bf574
--- /dev/null
+++ b/contrib/src/ffmpeg/windows-configure-libmfx.patch
@@ -0,0 +1,23 @@
+From 2358a7712c9cc88990131f04ea678b5020bc2bb0 Mon Sep 17 00:00:00 2001
+From: Eden Abitbol <eden.abitbol@savoirfairelinux.com>
+Date: Tue, 23 Jul 2019 12:30:03 -0400
+Subject: [PATCH] Fix mfx link for windows.
+
+---
+ configure | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/configure
++++ b/configure
+@@ -6016,8 +6016,6 @@ enabled libkvazaar        && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kv
+ # Media SDK or Intel Media Server Studio, these don't come with
+ # pkg-config support.  Instead, users should make sure that the build
+ # can find the libraries and headers through other means.
+-enabled libmfx            && { check_pkg_config libmfx libmfx "mfx/mfxvideo.h" MFXInit ||
+-                               { require libmfx "mfx/mfxvideo.h" MFXInit "-llibmfx $advapi32_extralibs" && warn "using libmfx without pkg-config"; } }
+ enabled libmodplug        && require_pkg_config libmodplug libmodplug libmodplug/modplug.h ModPlug_Load
+ enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame $libm_extralibs
+ enabled libmysofa         && { check_pkg_config libmysofa libmysofa mysofa.h mysofa_load ||
+-- 
+2.22.0.windows.1
+
diff --git a/contrib/src/ffmpeg/windows-configure-make.sh b/contrib/src/ffmpeg/windows-configure-make.sh
index df50a11a42330cb2ec32a119216b932314445f48..b033b29136e48af30d1185b1891bb7fe941d812e 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 -I../../../../../msvc/include/ffnvcodec'
+    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
@@ -152,26 +152,38 @@ 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'
+    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
+                --enable-decoder=vp9
+                --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 OleAut32.lib Shlwapi.lib Vfw32.lib Secur32.lib libopus.lib libx264.lib libvpx.lib -LIBPATH:../../../../../msvc/lib/x64'
+        EXTRALDFLAGS='-APPCONTAINER:NO -MACHINE:x64 Ole32.lib Kernel32.lib Gdi32.lib User32.lib Strmiids.lib Advapi32.lib OleAut32.lib Shlwapi.lib Vfw32.lib Secur32.lib Advapi32.lib libopus.lib libx264.lib libvpx.lib libmfx.lib -LIBPATH:../../../../../msvc/lib/x64'
         FFMPEGCONF+=' --arch=x86_64'
         PREFIX=../../../Build/win32/x64
         OUTDIR=Output/win32/x64
     elif [ "$2" == "x86" ]; then
         echo "configure and make ffmpeg for win32-x86..."
-        EXTRALDFLAGS='-APPCONTAINER:NO -MACHINE:x86 Ole32.lib Kernel32.lib Gdi32.lib User32.lib Strmiids.lib OleAut32.lib Shlwapi.lib Vfw32.lib Secur32.lib libopus.lib libx264.lib libvpx.lib -LIBPATH:../../../../../msvc/lib/x86'
+        EXTRALDFLAGS='-APPCONTAINER:NO -MACHINE:x86 Ole32.lib Kernel32.lib Gdi32.lib User32.lib Strmiids.lib OleAut32.lib Shlwapi.lib Vfw32.lib Secur32.lib Advapi32.lib libopus.lib libx264.lib libvpx.lib libmfx.lib -LIBPATH:../../../../../msvc/lib/x86'
         FFMPEGCONF+=' --arch=x86'
         PREFIX=../../../Build/win32/x86
         OUTDIR=Output/win32/x86
diff --git a/contrib/src/media-sdk/fetch_and_patch.bat b/contrib/src/media-sdk/fetch_and_patch.bat
new file mode 100644
index 0000000000000000000000000000000000000000..c37e86716eb1bb0cde080a34ddaf8ec84f0773ec
--- /dev/null
+++ b/contrib/src/media-sdk/fetch_and_patch.bat
@@ -0,0 +1,22 @@
+set BUILD=%SRC%..\build
+
+set MEDIA_SDK_HASH=intel-mediasdk-19.2.0
+set MEDIA_SDK_URL=https://github.com/Intel-Media-SDK/MediaSDK/archive/%MEDIA_SDK_HASH%.tar.gz
+
+mkdir %BUILD%
+
+if %USE_CACHE%==1 (
+    copy %CACHE_DIR%\%MEDIA_SDK_HASH%.tar.gz %cd%
+) else (
+    %WGET_CMD% %MEDIA_SDK_URL%
+)
+
+7z -y x %MEDIA_SDK_HASH%.tar.gz && 7z -y x %MEDIA_SDK_HASH%.tar -o%BUILD%
+del %MEDIA_SDK_HASH%.tar && del %MEDIA_SDK_HASH%.tar.gz && del %BUILD%\pax_global_header
+rename %BUILD%\MediaSDK-%MEDIA_SDK_HASH% media-sdk
+
+cd %BUILD%\media-sdk
+
+%APPLY_CMD% %SRC%\media-sdk\windows-static-lib-build.patch
+
+cd %SRC%
\ No newline at end of file
diff --git a/contrib/src/media-sdk/windows-static-lib-build.patch b/contrib/src/media-sdk/windows-static-lib-build.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a732824246340b57daea62e63f4dd1e3e1997bd0
--- /dev/null
+++ b/contrib/src/media-sdk/windows-static-lib-build.patch
@@ -0,0 +1,98 @@
+From 689a7acb36963c8558db3e879e6c22dcaaa535e7 Mon Sep 17 00:00:00 2001
+From: Eden Abitbol <eden.abitbol@savoirfairelinux.com>
+Date: Tue, 23 Jul 2019 11:30:49 -0400
+Subject: [PATCH] Copy build output to correct directory
+
+---
+ api/mfx_dispatch/windows/libmfx_vs2015.sln    |  7 ++--
+ .../windows/libmfx_vs2015.vcxproj             | 33 +++++++++++++++++--
+ 2 files changed, 35 insertions(+), 5 deletions(-)
+
+--- a/api/mfx_dispatch/windows/libmfx_vs2015.sln
++++ b/api/mfx_dispatch/windows/libmfx_vs2015.sln
+@@ -1,7 +1,7 @@
+ 
+ Microsoft Visual Studio Solution File, Format Version 12.00
+-# Visual Studio 14
+-VisualStudioVersion = 14.0.25420.1
++# Visual Studio 15
++VisualStudioVersion = 15.0.28307.757
+ MinimumVisualStudioVersion = 10.0.40219.1
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmfx_vs2015", "libmfx_vs2015.vcxproj", "{A9F7AEFB-DC6C-49E8-8E71-5351ABDCE627}"
+ EndProject
+@@ -25,6 +25,9 @@ Global
+ 	GlobalSection(SolutionProperties) = preSolution
+ 		HideSolutionNode = FALSE
+ 	EndGlobalSection
++	GlobalSection(ExtensibilityGlobals) = postSolution
++		SolutionGuid = {94706D6C-B55B-49AB-B136-337F5E9B2FA3}
++	EndGlobalSection
+ 	GlobalSection(DPCodeReviewSolutionGUID) = preSolution
+ 		DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
+ 	EndGlobalSection
+--- a/api/mfx_dispatch/windows/libmfx_vs2015.vcxproj
++++ b/api/mfx_dispatch/windows/libmfx_vs2015.vcxproj
+@@ -79,7 +79,7 @@
+   </PropertyGroup>
+   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+   <PropertyGroup>
+-    <OutDir>..\..\..\..\build\win_$(Platform)\$(Configuration)\lib\</OutDir>
++    <OutDir>..\..\..\build\win_$(Platform)\$(Configuration)\lib\</OutDir>
+     <IntDir>$(OutDir)..\objs\$(ProjectName)\</IntDir>
+     <IncludePath>$(MINIDDK_ROOT)\Include\um;$(MINIDDK_ROOT)\Include\shared;$(IncludePath)</IncludePath>
+     <LibraryPath>$(MINIDDK_ROOT)\Lib\win8\um\x86;$(LibraryPath)</LibraryPath>
+@@ -88,7 +88,7 @@
+     <TargetName>$(ProjectName)</TargetName>
+   </PropertyGroup>
+   <PropertyGroup Condition="'$(Configuration)'=='Release'">
+-    <TargetName>$(ProjectName)</TargetName>
++    <TargetName>libmfx</TargetName>
+   </PropertyGroup>
+   <ItemDefinitionGroup>
+     <ClCompile>
+@@ -199,7 +199,7 @@
+       <AdditionalIncludeDirectories>include;..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+       <PreprocessorDefinitions>WIN64;NDEBUG;_LIB;_ALLOW_MSC_VER_MISMATCH;_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH;_ALLOW_RUNTIME_LIBRARY_MISMATCH;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+       <ExceptionHandling>Async</ExceptionHandling>
+-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
++      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+       <BufferSecurityCheck>true</BufferSecurityCheck>
+       <WarningLevel>Level4</WarningLevel>
+       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+@@ -208,6 +208,33 @@
+       <ControlFlowGuard>Guard</ControlFlowGuard>
+     </ClCompile>
+     <Lib />
++    <Lib>
++      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
++      <AdditionalDependencies>Advapi32.lib</AdditionalDependencies>
++    </Lib>
++    <PostBuildEvent>
++      <Command>mkdir "$(OutDir)"..\..\..\..\..\..\msvc\include
++
++mkdir "$(OutDir)"..\..\..\..\..\..\msvc\include\mfx
++
++mkdir "$(OutDir)"..\..\..\..\..\..\msvc\lib
++
++mkdir "$(OutDir)"..\..\..\..\..\..\msvc\lib\x64
++
++xcopy /S /Y "$(OutDir)"*.lib "$(OutDir)"..\..\..\..\..\..\msvc\lib\x64
++
++
++
++
++xcopy /S /Y "$(OutDir)"*.pdb "$(OutDir)"..\..\..\..\..\..\msvc\lib\x64
++
++
++xcopy /S /Y $(ProjectDir)..\..\..\api\include\*.h "$(OutDir)"..\..\..\..\..\..\msvc\include\mfx
++</Command>
++    </PostBuildEvent>
++    <ProjectReference>
++      <LinkLibraryDependencies>true</LinkLibraryDependencies>
++    </ProjectReference>
+   </ItemDefinitionGroup>
+   <ItemGroup>
+     <ClCompile Include="src\main.cpp" />
+-- 
+2.22.0.windows.1
+
diff --git a/src/media/video/accel.cpp b/src/media/video/accel.cpp
index 5374b4d8e9a1e1f25becb0406ea951efd2fbc486..db291a54bf57454cf29695f451b50775439021ed 100644
--- a/src/media/video/accel.cpp
+++ b/src/media/video/accel.cpp
@@ -257,6 +257,7 @@ HardwareAccel::setupDecoder(AVCodecID id, int width, int height)
         { "vaapi", AV_HWDEVICE_TYPE_VAAPI, AV_PIX_FMT_VAAPI, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264, AV_CODEC_ID_MPEG4, AV_CODEC_ID_VP8, AV_CODEC_ID_MJPEG } },
         { "vdpau", AV_HWDEVICE_TYPE_VDPAU, AV_PIX_FMT_VDPAU, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264, AV_CODEC_ID_MPEG4 } },
         { "videotoolbox", AV_HWDEVICE_TYPE_VIDEOTOOLBOX, AV_PIX_FMT_VIDEOTOOLBOX, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264, AV_CODEC_ID_MPEG4 } },
+        { "qsv", AV_HWDEVICE_TYPE_QSV, AV_PIX_FMT_QSV, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264, AV_CODEC_ID_H265, AV_CODEC_ID_MJPEG, AV_CODEC_ID_VP8, AV_CODEC_ID_VP9 } },
     };
 
     for (const auto& api : apiList) {
@@ -283,6 +284,7 @@ HardwareAccel::setupEncoder(AVCodecID id, int width, int height, AVBufferRef* fr
         { "nvenc", AV_HWDEVICE_TYPE_CUDA, AV_PIX_FMT_CUDA, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264, AV_CODEC_ID_H265 } },
         { "vaapi", AV_HWDEVICE_TYPE_VAAPI, AV_PIX_FMT_VAAPI, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264, AV_CODEC_ID_MJPEG, AV_CODEC_ID_VP8 } },
         { "videotoolbox", AV_HWDEVICE_TYPE_VIDEOTOOLBOX, AV_PIX_FMT_VIDEOTOOLBOX, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264 } },
+        { "qsv", AV_HWDEVICE_TYPE_QSV, AV_PIX_FMT_QSV, AV_PIX_FMT_NV12, { AV_CODEC_ID_H264, AV_CODEC_ID_H265, AV_CODEC_ID_MJPEG, AV_CODEC_ID_VP8 } },
     };
 
     for (auto api : apiList) {