diff --git a/libavdevice/vfwcap.c b/libavdevice/vfwcap.c
index 4182642ce94c1ecad2bf91b6d20936355a0bc68c..5e2ba844ef4f8086f16642561b4c6ed8dd5a5f1b 100644
--- a/libavdevice/vfwcap.c
+++ b/libavdevice/vfwcap.c
@@ -19,9 +19,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include <vfw.h>
-#include <windows.h>
-
 #include "libavutil/internal.h"
 #include "libavutil/log.h"
 #include "libavutil/opt.h"
@@ -30,6 +27,12 @@
 #include "libavformat/avformat.h"
 #include "libavformat/internal.h"
 
+// windows.h must no be included before winsock2.h, and libavformat internal
+// headers may include winsock2.h
+#include <windows.h>
+// windows.h needs to be included before vfw.h
+#include <vfw.h>
+
 /* Some obsolete versions of MinGW32 before 4.0.0 lack this. */
 #ifndef HWND_MESSAGE
 #define HWND_MESSAGE ((HWND) -3)