diff --git a/tests/fate/cbs.mak b/tests/fate/cbs.mak
index fc5967e6f3..d4658fae81 100644
--- a/tests/fate/cbs.mak
+++ b/tests/fate/cbs.mak
@@ -2,9 +2,9 @@
 # arguments, it decomposes the stream fully and then recomposes it
 # without making any changes.
 
-fate-cbs: fate-cbs-h264 fate-cbs-hevc fate-cbs-mpeg2
+fate-cbs: fate-cbs-h264 fate-cbs-hevc fate-cbs-mpeg2 fate-cbs-vp9
 
-FATE_CBS_DEPS = $(call ALLYES, $(1)_DEMUXER $(1)_PARSER $(2)_METADATA_BSF $(3)_DECODER $(3)_MUXER)
+FATE_CBS_DEPS = $(call ALLYES, $(1)_DEMUXER $(2)_PARSER $(3)_METADATA_BSF $(4)_DECODER $(5)_MUXER)
 
 define FATE_CBS_TEST
 # (codec, test_name, sample_file, output_format)
@@ -32,7 +32,7 @@ FATE_CBS_H264_SAMPLES =   \
 
 $(foreach N,$(FATE_CBS_H264_SAMPLES),$(eval $(call FATE_CBS_TEST,h264,$(basename $(N)),h264-conformance/$(N),h264)))
 
-FATE_CBS_H264-$(call FATE_CBS_DEPS, H264, H264, H264) = $(FATE_CBS_h264)
+FATE_CBS_H264-$(call FATE_CBS_DEPS, H264, H264, H264, H264, H264) = $(FATE_CBS_h264)
 FATE_SAMPLES_AVCONV += $(FATE_CBS_H264-yes)
 fate-cbs-h264: $(FATE_CBS_H264-yes)
 
@@ -61,7 +61,7 @@ FATE_CBS_HEVC_SAMPLES =       \
 
 $(foreach N,$(FATE_CBS_HEVC_SAMPLES),$(eval $(call FATE_CBS_TEST,hevc,$(basename $(N)),hevc-conformance/$(N),hevc)))
 
-FATE_CBS_HEVC-$(call FATE_CBS_DEPS, HEVC, HEVC, HEVC) = $(FATE_CBS_hevc)
+FATE_CBS_HEVC-$(call FATE_CBS_DEPS, HEVC, HEVC, HEVC, HEVC, HEVC) = $(FATE_CBS_hevc)
 FATE_SAMPLES_AVCONV += $(FATE_CBS_HEVC-yes)
 fate-cbs-hevc: $(FATE_CBS_HEVC-yes)
 
@@ -74,6 +74,30 @@ FATE_CBS_MPEG2_SAMPLES =     \
 
 $(foreach N,$(FATE_CBS_MPEG2_SAMPLES),$(eval $(call FATE_CBS_TEST,mpeg2,$(basename $(N)),mpeg2/$(N),mpeg2video)))
 
-FATE_CBS_MPEG2-$(call FATE_CBS_DEPS, MPEGVIDEO, MPEG2, MPEG2VIDEO) = $(FATE_CBS_mpeg2)
+FATE_CBS_MPEG2-$(call FATE_CBS_DEPS, MPEGVIDEO, MPEGVIDEO, MPEG2, MPEG2VIDEO, MPEG2VIDEO) = $(FATE_CBS_mpeg2)
 FATE_SAMPLES_AVCONV += $(FATE_CBS_MPEG2-yes)
 fate-cbs-mpeg2: $(FATE_CBS_MPEG2-yes)
+
+# VP9 read/write
+
+FATE_CBS_VP9_SAMPLES =                  \
+    vp90-2-03-deltaq.webm               \
+    vp90-2-05-resize.ivf                \
+    vp90-2-06-bilinear.webm             \
+    vp90-2-09-lf_deltas.webm            \
+    vp90-2-10-show-existing-frame.webm  \
+    vp90-2-10-show-existing-frame2.webm \
+    vp90-2-segmentation-aq-akiyo.webm   \
+    vp90-2-segmentation-sf-akiyo.webm   \
+    vp90-2-tiling-pedestrian.webm       \
+    vp91-2-04-yuv422.webm               \
+    vp91-2-04-yuv444.webm               \
+    vp92-2-20-10bit-yuv420.webm         \
+    vp93-2-20-10bit-yuv422.webm         \
+    vp93-2-20-12bit-yuv444.webm
+
+$(foreach N,$(FATE_CBS_VP9_SAMPLES),$(eval $(call FATE_CBS_TEST,vp9,$(basename $(N)),vp9-test-vectors/$(N),ivf)))
+
+FATE_CBS_VP9-$(call FATE_CBS_DEPS, IVF, VP9, VP9, VP9, IVF) = $(FATE_CBS_vp9)
+FATE_SAMPLES_AVCONV += $(FATE_CBS_VP9-yes)
+fate-cbs-vp9: $(FATE_CBS_VP9-yes)
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-03-deltaq b/tests/ref/fate/cbs-vp9-vp90-2-03-deltaq
new file mode 100644
index 0000000000..db09cfd5e0
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-03-deltaq
@@ -0,0 +1 @@
+bb630ef560f83951fa6547a664fdb636
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-05-resize b/tests/ref/fate/cbs-vp9-vp90-2-05-resize
new file mode 100644
index 0000000000..8f036bba81
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-05-resize
@@ -0,0 +1 @@
+6838422ebb45df353a2bad62b9aff8e9
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-06-bilinear b/tests/ref/fate/cbs-vp9-vp90-2-06-bilinear
new file mode 100644
index 0000000000..f579459179
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-06-bilinear
@@ -0,0 +1 @@
+2ca9d012c7212e38f5e2727ac66ec6c5
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-09-lf_deltas b/tests/ref/fate/cbs-vp9-vp90-2-09-lf_deltas
new file mode 100644
index 0000000000..e0b5686d0b
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-09-lf_deltas
@@ -0,0 +1 @@
+78f5e46bfaecbcd62b9126697a0d97b7
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-10-show-existing-frame b/tests/ref/fate/cbs-vp9-vp90-2-10-show-existing-frame
new file mode 100644
index 0000000000..4a4d752428
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-10-show-existing-frame
@@ -0,0 +1 @@
+eea9d10a696c6ed971e4fae9fb619b10
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-10-show-existing-frame2 b/tests/ref/fate/cbs-vp9-vp90-2-10-show-existing-frame2
new file mode 100644
index 0000000000..6da8999114
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-10-show-existing-frame2
@@ -0,0 +1 @@
+abf4c7d4be7d3576d96b6f92166b5894
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-segmentation-aq-akiyo b/tests/ref/fate/cbs-vp9-vp90-2-segmentation-aq-akiyo
new file mode 100644
index 0000000000..12dfb10d40
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-segmentation-aq-akiyo
@@ -0,0 +1 @@
+86cd3750cc9a0672717643c9b9f87fd5
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-segmentation-sf-akiyo b/tests/ref/fate/cbs-vp9-vp90-2-segmentation-sf-akiyo
new file mode 100644
index 0000000000..c2b1b8723a
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-segmentation-sf-akiyo
@@ -0,0 +1 @@
+5d12fbe6220aae9e62b1d79785a83387
diff --git a/tests/ref/fate/cbs-vp9-vp90-2-tiling-pedestrian b/tests/ref/fate/cbs-vp9-vp90-2-tiling-pedestrian
new file mode 100644
index 0000000000..f9cab39bd6
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp90-2-tiling-pedestrian
@@ -0,0 +1 @@
+4c51f3c796baa7c2baa4b7ec0d011406
diff --git a/tests/ref/fate/cbs-vp9-vp91-2-04-yuv422 b/tests/ref/fate/cbs-vp9-vp91-2-04-yuv422
new file mode 100644
index 0000000000..c086660909
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp91-2-04-yuv422
@@ -0,0 +1 @@
+9b16e2e684e1019c30817c4790107565
diff --git a/tests/ref/fate/cbs-vp9-vp91-2-04-yuv444 b/tests/ref/fate/cbs-vp9-vp91-2-04-yuv444
new file mode 100644
index 0000000000..628ea9a4d9
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp91-2-04-yuv444
@@ -0,0 +1 @@
+911eafd8e442e646c5ce97d781757ca8
diff --git a/tests/ref/fate/cbs-vp9-vp92-2-20-10bit-yuv420 b/tests/ref/fate/cbs-vp9-vp92-2-20-10bit-yuv420
new file mode 100644
index 0000000000..eeb7580d74
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp92-2-20-10bit-yuv420
@@ -0,0 +1 @@
+16198c32c29228e0513004ed1bf6fcee
diff --git a/tests/ref/fate/cbs-vp9-vp93-2-20-10bit-yuv422 b/tests/ref/fate/cbs-vp9-vp93-2-20-10bit-yuv422
new file mode 100644
index 0000000000..b25bc1166e
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp93-2-20-10bit-yuv422
@@ -0,0 +1 @@
+4bceedef4aa6a663a09761971e43b5a8
diff --git a/tests/ref/fate/cbs-vp9-vp93-2-20-12bit-yuv444 b/tests/ref/fate/cbs-vp9-vp93-2-20-12bit-yuv444
new file mode 100644
index 0000000000..8d122d1370
--- /dev/null
+++ b/tests/ref/fate/cbs-vp9-vp93-2-20-12bit-yuv444
@@ -0,0 +1 @@
+0f413b840633bfcfcc78b4c9fab933bf
