diff --git a/Changelog b/Changelog
index 22cf813465358b038b92c53ef2b158126a55441b..795be3219334f8bed8ce99aa2a2e2df9811ec253 100644
--- a/Changelog
+++ b/Changelog
@@ -14,6 +14,7 @@ version <next>:
 - X-Face image encoder and decoder
 - metadata (INFO tag) support in WAV muxer
 - subtitles raw text decoder
+- support for building DLLs using MSVC
 
 
 version 1.0:
@@ -80,6 +81,7 @@ version 1.0:
 - WebVTT demuxer and decoder (simple tags supported)
 - RTP packetization of JPEG
 - faststart option in the MOV/MP4 muxer
+- support for building with MSVC
 
 
 version 0.11:
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index a4d97c1d4bfb00abd81fffc715b84a673ef3f00b..ba2977144bd27bb1e4c1f751d79e4125245f3f9e 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -673,7 +673,7 @@ typedef struct AVStream {
      * of which frame timestamps are represented.
      *
      * decoding: set by libavformat
-     * encoding: set by libavformat in av_write_header. The muxer may use the
+     * encoding: set by libavformat in avformat_write_header. The muxer may use the
      * user-provided value of @ref AVCodecContext.time_base "codec->time_base"
      * as a hint.
      */
@@ -1743,7 +1743,7 @@ int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
  * Write the stream trailer to an output media file and free the
  * file private data.
  *
- * May only be called after a successful call to av_write_header.
+ * May only be called after a successful call to avformat_write_header.
  *
  * @param s media file handle
  * @return 0 if OK, AVERROR_xxx on error
diff --git a/tests/Makefile b/tests/Makefile
index a0210c76f0ca3dae0a79ee8cf990f5dbcc3aeab0..b5e04438551d76ad99c6d6937d574f11ce7768e6 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -122,7 +122,8 @@ FATE-$(CONFIG_FFPROBE) += $(FATE_FFPROBE)
 FATE-$(CONFIG_AVCODEC)  += $(FATE_LIBAVCODEC)
 FATE-$(CONFIG_AVFORMAT) += $(FATE_LIBAVFORMAT)
 
-FATE_EXTERN-$(CONFIG_FFMPEG) += $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG)
+FATE_SAMPLES_AVCONV           += $(FATE_SAMPLES_AVCONV-yes)
+FATE_EXTERN-$(CONFIG_FFMPEG)  += $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG)
 FATE_EXTERN += $(FATE_EXTERN-yes)
 
 FATE += $(FATE-yes)
diff --git a/tests/fate/als.mak b/tests/fate/als.mak
index ab3e1c0e94a8bcb3a05268364d75af9626ffba4f..5ec11892218d1e177ec0e6d308c23462f1e73d83 100644
--- a/tests/fate/als.mak
+++ b/tests/fate/als.mak
@@ -7,5 +7,5 @@ endef
 
 $(foreach N,$(ALS_SUITE),$(eval $(call FATE_ALS_SUITE,$(N))))
 
-FATE_SAMPLES_AVCONV += $(FATE_ALS)
+FATE_SAMPLES_AVCONV-$(call DEMDEC, MOV, ALS) += $(FATE_ALS)
 fate-als: $(FATE_ALS)
diff --git a/tests/fate/demux.mak b/tests/fate/demux.mak
index f6031b8eb74a7710b7e079f4b73cd54959265976..2aaf1e471651718b34ce3406a79a59c70ce956c7 100644
--- a/tests/fate/demux.mak
+++ b/tests/fate/demux.mak
@@ -1,83 +1,84 @@
 FATE_SAMPLES_DEMUX += fate-avio-direct
 fate-avio-direct: CMD = framecrc -avioflags direct -i $(SAMPLES)/fraps/fraps-v5-bouncing-balls-partial.avi -avioflags direct
 
-FATE_SAMPLES_DEMUX += fate-adts-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_AAC_DEMUXER) += fate-adts-demux
 fate-adts-demux: CMD = crc -i $(SAMPLES)/aac/ct_faac-adts.aac -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-aea-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_AEA_DEMUXER) += fate-aea-demux
 fate-aea-demux: CMD = crc -i $(SAMPLES)/aea/chirp.aea -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-bink-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_BINK_DEMUXER) += fate-bink-demux
 fate-bink-demux: CMD = crc -i $(SAMPLES)/bink/Snd0a7d9b58.dee -vn -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-caf
+FATE_SAMPLES_DEMUX-$(CONFIG_CAF_DEMUXER) += fate-caf
 fate-caf: CMD = crc -i $(SAMPLES)/caf/caf-pcm16.caf -c copy
 
-FATE_SAMPLES_DEMUX += fate-cdxl-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_CDXL_DEMUXER) += fate-cdxl-demux
 fate-cdxl-demux: CMD = framecrc -i $(SAMPLES)/cdxl/mirage.cdxl -vcodec copy -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-d-cinema-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_DAUD_DEMUXER) += fate-d-cinema-demux
 fate-d-cinema-demux: CMD = framecrc -i $(SAMPLES)/d-cinema/THX_Science_FLT_1920-partial.302 -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-iv8-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_IV8_DEMUXER) += fate-iv8-demux
 fate-iv8-demux: CMD = framecrc -i $(SAMPLES)/iv8/zzz-partial.mpg -vcodec copy
 
 FATE_SAMPLES_DEMUX += fate-jv-demux
 fate-jv-demux: CMD = framecrc -i $(SAMPLES)/jv/intro.jv -vcodec copy -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-lmlm4-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_LMLM4_DEMUXER) += fate-lmlm4-demux
 fate-lmlm4-demux: CMD = framecrc -i $(SAMPLES)/lmlm4/LMLM4_CIFat30fps.divx -t 3 -acodec copy -vcodec copy
 
-FATE_SAMPLES_DEMUX += fate-maxis-xa
+FATE_SAMPLES_DEMUX-$(CONFIG_XA_DEMUXER) += fate-maxis-xa
 fate-maxis-xa: CMD = framecrc -i $(SAMPLES)/maxis-xa/SC2KBUG.XA -frames:a 30 -c:a copy
 
-FATE_SAMPLES_DEMUX += fate-mtv
+FATE_SAMPLES_DEMUX-$(CONFIG_MTV_DEMUXER) += fate-mtv
 fate-mtv: CMD = framecrc -i $(SAMPLES)/mtv/comedian_auto-partial.mtv -c copy
 
-FATE_SAMPLES_DEMUX += fate-mxf-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_MXF_DEMUXER) += fate-mxf-demux
 fate-mxf-demux: CMD = framecrc -i $(SAMPLES)/mxf/C0023S01.mxf -acodec copy -vcodec copy
 
-FATE_SAMPLES_DEMUX += fate-nc-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_NC_DEMUXER) += fate-nc-demux
 fate-nc-demux: CMD = framecrc -i $(SAMPLES)/nc-camera/nc-sample-partial -vcodec copy
 
-FATE_SAMPLES_DEMUX += fate-nsv-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_NSV_DEMUXER) += fate-nsv-demux
 fate-nsv-demux: CMD = framecrc -i $(SAMPLES)/nsv/witchblade-51kbps.nsv -t 6 -vcodec copy -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-oma-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_OMA_DEMUXER) += fate-oma-demux
 fate-oma-demux: CMD = crc -i $(SAMPLES)/oma/01-Untitled-partial.oma -acodec copy
 
 FATE_SAMPLES_DEMUX += fate-paf-demux
 fate-paf-demux: CMD = framecrc -i $(SAMPLES)/paf/hod1-partial.paf -vcodec copy -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-psx-str-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_STR_DEMUXER) += fate-psx-str-demux
 fate-psx-str-demux: CMD = framecrc -i $(SAMPLES)/psx-str/descent-partial.str -c copy
 
-FATE_SAMPLES_DEMUX += fate-pva-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_PVA_DEMUXER) += fate-pva-demux
 fate-pva-demux: CMD = framecrc -idct simple -i $(SAMPLES)/pva/PVA_test-partial.pva -t 0.6 -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-qcp-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_QCP_DEMUXER) += fate-qcp-demux
 fate-qcp-demux: CMD = crc -i $(SAMPLES)/qcp/0036580847.QCP -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-redcode-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_R3D_DEMUXER) += fate-redcode-demux
 fate-redcode-demux: CMD = framecrc -i $(SAMPLES)/r3d/4MB-sample.r3d -vcodec copy -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-siff
+FATE_SAMPLES_DEMUX-$(CONFIG_SIFF_DEMUXER) += fate-siff
 fate-siff: CMD = framecrc -i $(SAMPLES)/SIFF/INTRO_B.VB -t 3 -pix_fmt rgb24
 
-FATE_SAMPLES_DEMUX += fate-smjpeg-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_SMJPEG_DEMUXER) += fate-smjpeg-demux
 fate-smjpeg-demux: CMD = framecrc -i $(SAMPLES)/smjpeg/scenwin.mjpg -c copy
 
-FATE_SAMPLES_DEMUX += fate-westwood-aud
+FATE_SAMPLES_DEMUX-$(CONFIG_WSAUD_DEMUXER) += fate-westwood-aud
 fate-westwood-aud: CMD = framecrc -i $(SAMPLES)/westwood-aud/excellent.aud -c copy
 
-FATE_SAMPLES_DEMUX += fate-wtv-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_WTV_DEMUXER) += fate-wtv-demux
 fate-wtv-demux: CMD = framecrc -i $(SAMPLES)/wtv/law-and-order-partial.wtv -vcodec copy -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-xmv-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_XMV_DEMUXER) += fate-xmv-demux
 fate-xmv-demux: CMD = framecrc -i $(SAMPLES)/xmv/logos1p.fmv -vcodec copy -acodec copy
 
-FATE_SAMPLES_DEMUX += fate-xwma-demux
+FATE_SAMPLES_DEMUX-$(CONFIG_XWMA_DEMUXER) += fate-xwma-demux
 fate-xwma-demux: CMD = crc -i $(SAMPLES)/xwma/ergon.xwma -acodec copy
 
+FATE_SAMPLES_DEMUX += $(FATE_SAMPLES_DEMUX-yes)
 FATE_SAMPLES_FFMPEG += $(FATE_SAMPLES_DEMUX)
 fate-demux: $(FATE_SAMPLES_DEMUX)
diff --git a/tests/fate/indeo.mak b/tests/fate/indeo.mak
index 783af5d6d50c173335d53984b103185732c9643c..5a99b46c7fe25c897139ad2c13bfff1141893364 100644
--- a/tests/fate/indeo.mak
+++ b/tests/fate/indeo.mak
@@ -1,14 +1,14 @@
-FATE_INDEO += fate-indeo2
+FATE_INDEO-$(call DEMDEC, AVI, INDEO2) += fate-indeo2
 fate-indeo2: CMD = framecrc -i $(SAMPLES)/rt21/VPAR0026.AVI
 
-FATE_INDEO += fate-indeo3
+FATE_INDEO-$(call DEMDEC, MOV, INDEO3) += fate-indeo3
 fate-indeo3: CMD = framecrc -i $(SAMPLES)/iv32/cubes.mov
 
-FATE_INDEO += fate-indeo4
+FATE_INDEO-$(call DEMDEC, AVI, INDEO4) += fate-indeo4
 fate-indeo4: CMD = framecrc -i $(SAMPLES)/iv41/indeo41-partial.avi -an
 
-FATE_INDEO += fate-indeo5
+FATE_INDEO-$(call DEMDEC, AVI, INDEO5) += fate-indeo5
 fate-indeo5: CMD = framecrc -i $(SAMPLES)/iv50/Educ_Movie_DeadlyForce.avi -an
 
-FATE_SAMPLES_AVCONV += $(FATE_INDEO)
-fate-indeo: $(FATE_INDEO)
+FATE_SAMPLES_AVCONV += $(FATE_INDEO-yes)
+fate-indeo: $(FATE_INDEO-yes)
diff --git a/tests/fate/microsoft.mak b/tests/fate/microsoft.mak
index e9cd9b1b3ad63d620c11610f9fa5b2d9bceb9c83..7d8e6a8355ab657b3bc5b80bed3095c50259e94b 100644
--- a/tests/fate/microsoft.mak
+++ b/tests/fate/microsoft.mak
@@ -1,4 +1,4 @@
-FATE_MICROSOFT += fate-msmpeg4v1
+FATE_MICROSOFT-$(call DEMDEC, AVI, MSMPEG4V1) += fate-msmpeg4v1
 fate-msmpeg4v1: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/msmpeg4v1/mpg4.avi -an
 
 FATE_MSVIDEO1 += fate-msvideo1-16bit
@@ -7,7 +7,7 @@ fate-msvideo1-16bit: CMD = framecrc -i $(SAMPLES)/cram/clock-cram16.avi -pix_fmt
 FATE_MSVIDEO1 += fate-msvideo1-8bit
 fate-msvideo1-8bit: CMD = framecrc -i $(SAMPLES)/cram/skating.avi -t 1 -pix_fmt rgb24
 
-FATE_MICROSOFT += $(FATE_MSVIDEO1)
+FATE_MICROSOFT-$(call DEMDEC, AVI, MSVIDEO1) += $(FATE_MSVIDEO1)
 fate-msvideo1: $(FATE_MSVIDEO1)
 
 FATE_WMV8_DRM += fate-wmv8-drm
@@ -21,7 +21,7 @@ fate-wmv8-drm-nodec: CMD = framecrc -cryptokey 137381538c84c068111902a59c5cf6c34
 FATE_TESTS-no += fate-wmv8-x8intra
 fate-wmv8-x8intra: CMD = framecrc -flags +bitexact -idct 19 -i $(SAMPLES)/wmv8/wmv8_x8intra.wmv -an
 
-FATE_MICROSOFT += $(FATE_WMV8_DRM)
+FATE_MICROSOFT-$(call DEMDEC, ASF, WMV3) += $(FATE_WMV8_DRM)
 fate-wmv8_drm: $(FATE_WMV8_DRM)
 
 FATE_VC1 += fate-vc1_sa00040
@@ -45,5 +45,7 @@ fate-vc1-ism: CMD = framecrc -i $(SAMPLES)/isom/vc1-wmapro.ism -an
 FATE_MICROSOFT += $(FATE_VC1)
 fate-vc1: $(FATE_VC1)
 
+FATE_MICROSOFT += $(FATE_MICROSOFT-yes)
+
 FATE_SAMPLES_FFMPEG += $(FATE_MICROSOFT)
 fate-microsoft: $(FATE_MICROSOFT)
diff --git a/tests/fate/mpc.mak b/tests/fate/mpc.mak
index 5505a9aef3f1c53f03c69af3ea7dd0cfadead1ef..53d236ee225f5b5e590d7d429d6a5b61e0193cff 100644
--- a/tests/fate/mpc.mak
+++ b/tests/fate/mpc.mak
@@ -1,13 +1,13 @@
-FATE_MPC += fate-mpc7-demux
+FATE_MPC-$(CONFIG_MPC_DEMUXER) += fate-mpc7-demux
 fate-mpc7-demux: CMD = crc -i $(SAMPLES)/musepack/inside-mp7.mpc -acodec copy
 
-FATE_MPC += fate-mpc8-demux
+FATE_MPC-$(CONFIG_MPC8_DEMUXER) += fate-mpc8-demux
 fate-mpc8-demux: CMD = crc -i $(SAMPLES)/musepack/inside-mp8.mpc -acodec copy
 
-FATE_MPC += fate-musepack7
+FATE_MPC-$(call DEMDEC, MPC, MPC7) += fate-musepack7
 fate-musepack7: CMD = pcm -i $(SAMPLES)/musepack/inside-mp7.mpc
 fate-musepack7: CMP = oneoff
 fate-musepack7: REF = $(SAMPLES)/musepack/inside-mp7.pcm
 
-FATE_SAMPLES_FFMPEG += $(FATE_MPC)
-fate-mpc: $(FATE_MPC)
+FATE_SAMPLES_AVCONV += $(FATE_MPC-yes)
+fate-mpc: $(FATE_MPC-yes)
diff --git a/tests/fate/vqf.mak b/tests/fate/vqf.mak
index b8a91c1661bb69cdbdc46248d26518e48cd41ab5..67ee61fb9cb788c94d265c7ed48371b82cc96e90 100644
--- a/tests/fate/vqf.mak
+++ b/tests/fate/vqf.mak
@@ -1,10 +1,12 @@
-FATE_VQF += fate-twinvq
+FATE_VQF-$(call DEMDEC, VQF, TWINVQ) += fate-twinvq
 fate-twinvq: CMD = pcm -i $(SAMPLES)/vqf/achterba.vqf
 fate-twinvq: CMP = oneoff
 fate-twinvq: REF = $(SAMPLES)/vqf/achterba.pcm
 
-FATE_VQF += fate-vqf-demux
+FATE_VQF-$(CONFIG_VQF_DEMUXER) += fate-vqf-demux
 fate-vqf-demux: CMD = md5 -i $(SAMPLES)/vqf/achterba.vqf -acodec copy -f framecrc
 
+FATE_VQF += $(FATE_VQF-yes)
+
 FATE_SAMPLES_FFMPEG += $(FATE_VQF)
 fate-vqf: $(FATE_VQF)