Revert cls (original cl + fixes) 7422-7424 "Add VP9 codec to VCM..."

BUG=3932
R=marpan@google.com

Review URL: https://webrtc-codereview.appspot.com/27779004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7470 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/build/common.gypi b/webrtc/build/common.gypi
index 3ed7a63..18b3383 100644
--- a/webrtc/build/common.gypi
+++ b/webrtc/build/common.gypi
@@ -42,7 +42,6 @@
       'modules_java_gyp_path%': '<(modules_java_gyp_path)',
       'gen_core_neon_offsets_gyp%': '<(gen_core_neon_offsets_gyp)',
       'webrtc_vp8_dir%': '<(webrtc_root)/modules/video_coding/codecs/vp8',
-      'webrtc_vp9_dir%': '<(webrtc_root)/modules/video_coding/codecs/vp9',
       'rbe_components_path%': '<(webrtc_root)/modules/remote_bitrate_estimator',
       'include_opus%': 1,
     },
@@ -53,7 +52,6 @@
     'modules_java_gyp_path%': '<(modules_java_gyp_path)',
     'gen_core_neon_offsets_gyp%': '<(gen_core_neon_offsets_gyp)',
     'webrtc_vp8_dir%': '<(webrtc_vp8_dir)',
-    'webrtc_vp9_dir%': '<(webrtc_vp9_dir)',
     'include_opus%': '<(include_opus)',
     'rtc_relative_path%': 1,
     'rbe_components_path%': '<(rbe_components_path)',
diff --git a/webrtc/build/tsan_suppressions_webrtc.cc b/webrtc/build/tsan_suppressions_webrtc.cc
index 01658ed..723e62a 100644
--- a/webrtc/build/tsan_suppressions_webrtc.cc
+++ b/webrtc/build/tsan_suppressions_webrtc.cc
@@ -27,7 +27,6 @@
 "race:rtc::MessageQueue::Quit\n"
 "race:FileVideoCapturerTest::VideoCapturerListener::OnFrameCaptured\n"
 "race:vp8cx_remove_encoder_threads\n"
-"race:third_party/libvpx/source/libvpx/vp9/common/vp9_scan.h\n"
 
 // Usage of trace callback and trace level is racy in libjingle_media_unittests.
 // https://code.google.com/p/webrtc/issues/detail?id=3372
diff --git a/webrtc/common_types.h b/webrtc/common_types.h
index 1778d82..e607ddc 100644
--- a/webrtc/common_types.h
+++ b/webrtc/common_types.h
@@ -597,45 +597,35 @@
   }
 };
 
-// VP9 specific
-struct VideoCodecVP9 {
-  VideoCodecComplexity complexity;
-  int                  resilience;
-  unsigned char        numberOfTemporalLayers;
-  bool                 denoisingOn;
-  bool                 frameDroppingOn;
-  int                  keyFrameInterval;
-  bool                 adaptiveQpMode;
-};
-
 // H264 specific.
-struct VideoCodecH264 {
-  VideoCodecProfile profile;
-  bool           frameDroppingOn;
-  int            keyFrameInterval;
-  // These are NULL/0 if not externally negotiated.
-  const uint8_t* spsData;
-  size_t         spsLen;
-  const uint8_t* ppsData;
-  size_t         ppsLen;
+struct VideoCodecH264
+{
+    VideoCodecProfile profile;
+    bool           frameDroppingOn;
+    int            keyFrameInterval;
+    // These are NULL/0 if not externally negotiated.
+    const uint8_t* spsData;
+    size_t         spsLen;
+    const uint8_t* ppsData;
+    size_t         ppsLen;
 };
 
 // Video codec types
-enum VideoCodecType {
-  kVideoCodecVP8,
-  kVideoCodecVP9,
-  kVideoCodecH264,
-  kVideoCodecI420,
-  kVideoCodecRED,
-  kVideoCodecULPFEC,
-  kVideoCodecGeneric,
-  kVideoCodecUnknown
+enum VideoCodecType
+{
+    kVideoCodecVP8,
+    kVideoCodecH264,
+    kVideoCodecI420,
+    kVideoCodecRED,
+    kVideoCodecULPFEC,
+    kVideoCodecGeneric,
+    kVideoCodecUnknown
 };
 
-union VideoCodecUnion {
-  VideoCodecVP8       VP8;
-  VideoCodecVP9       VP9;
-  VideoCodecH264      H264;
+union VideoCodecUnion
+{
+    VideoCodecVP8       VP8;
+    VideoCodecH264      H264;
 };
 
 
diff --git a/webrtc/engine_configurations.h b/webrtc/engine_configurations.h
index 5f4fade..e9f2309 100644
--- a/webrtc/engine_configurations.h
+++ b/webrtc/engine_configurations.h
@@ -51,7 +51,6 @@
 
 #define VIDEOCODEC_I420
 #define VIDEOCODEC_VP8
-#define VIDEOCODEC_VP9
 #define VIDEOCODEC_H264
 
 // ============================================================================
diff --git a/webrtc/modules/modules.gyp b/webrtc/modules/modules.gyp
index abf7c77..9650e66 100644
--- a/webrtc/modules/modules.gyp
+++ b/webrtc/modules/modules.gyp
@@ -96,7 +96,6 @@
             '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
             '<(webrtc_root)/common_audio/common_audio.gyp:common_audio',
             '<(webrtc_root)/modules/video_coding/codecs/vp8/vp8.gyp:webrtc_vp8',
-            '<(webrtc_root)/modules/video_coding/codecs/vp9/vp9.gyp:webrtc_vp9',
             '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
             '<(webrtc_root)/test/test.gyp:test_support_main',
             '<(webrtc_root)/test/test.gyp:frame_generator',
@@ -324,7 +323,6 @@
             '<(DEPTH)/testing/gtest.gyp:gtest',
             '<(webrtc_root)/common_video/common_video.gyp:common_video',
             '<(webrtc_root)/modules/video_coding/codecs/vp8/vp8.gyp:webrtc_vp8',
-            '<(webrtc_root)/modules/video_coding/codecs/vp9/vp9.gyp:webrtc_vp9',
             '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
             '<(webrtc_root)/test/metrics.gyp:metrics',
             '<(webrtc_root)/test/test.gyp:test_support',
diff --git a/webrtc/modules/video_coding/BUILD.gn b/webrtc/modules/video_coding/BUILD.gn
index 706e9d9..07e7afc 100644
--- a/webrtc/modules/video_coding/BUILD.gn
+++ b/webrtc/modules/video_coding/BUILD.gn
@@ -77,7 +77,6 @@
     ":video_coding_utility",
     ":webrtc_i420",
     ":webrtc_vp8",
-    ":webrtc_vp9",
     "../../common_video",
     "../../system_wrappers",
   ]
@@ -160,35 +159,3 @@
     ]
   }
 }
-
-source_set("webrtc_vp9") {
-  sources = [
-    "codecs/vp9/include/vp9.h",
-    "codecs/vp9/vp9_impl.cc",
-    "codecs/vp9/vp9_impl.h",
-  ]
-
-  configs += [ "../..:common_config" ]
-  public_configs = [ "../..:common_inherited_config" ]
-
-  if (is_clang) {
-    # Suppress warnings from Chrome's Clang plugins.
-    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
-    configs -= [ "//build/config/clang:find_bad_constructs" ]
-  }
-
-  # TODO(kjellander): Remove once libvpx has changed it's libvpx_config to be
-  # in direct_dependent_configs.
-  configs += [ "//third_party/libvpx:libvpx_config" ]
-
-  deps = [
-    ":video_coding_utility",
-    "../../common_video",
-    "../../system_wrappers",
-  ]
-  if (rtc_build_libvpx) {
-    deps += [
-      "//third_party/libvpx",
-    ]
-  }
-}
diff --git a/webrtc/modules/video_coding/codecs/interface/video_codec_interface.h b/webrtc/modules/video_coding/codecs/interface/video_codec_interface.h
index a33bd85..82bcd26 100644
--- a/webrtc/modules/video_coding/codecs/interface/video_codec_interface.h
+++ b/webrtc/modules/video_coding/codecs/interface/video_codec_interface.h
@@ -41,19 +41,6 @@
   int8_t keyIdx;  // Negative value to skip keyIdx.
 };
 
-struct CodecSpecificInfoVP9 {
-  bool hasReceivedSLI;
-  uint8_t pictureIdSLI;
-  bool hasReceivedRPSI;
-  uint64_t pictureIdRPSI;
-  int16_t pictureId;  // Negative value to skip pictureId.
-  bool nonReference;
-  uint8_t temporalIdx;
-  bool layerSync;
-  int tl0PicIdx;  // Negative value to skip tl0PicIdx.
-  int8_t keyIdx;  // Negative value to skip keyIdx.
-};
-
 struct CodecSpecificInfoGeneric {
   uint8_t simulcast_idx;
 };
@@ -63,7 +50,6 @@
 union CodecSpecificInfoUnion {
   CodecSpecificInfoGeneric generic;
   CodecSpecificInfoVP8 VP8;
-  CodecSpecificInfoVP9 VP9;
   CodecSpecificInfoH264 H264;
 };
 
diff --git a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc
index 76b6ef5..bd4a563 100644
--- a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc
+++ b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc
@@ -16,7 +16,6 @@
 #include "webrtc/modules/video_coding/codecs/test/packet_manipulator.h"
 #include "webrtc/modules/video_coding/codecs/test/videoprocessor.h"
 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
-#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h"
 #include "webrtc/modules/video_coding/main/interface/video_coding.h"
 #include "webrtc/test/testsupport/fileutils.h"
@@ -38,7 +37,6 @@
 
 // Codec and network settings.
 struct CodecConfigPars {
-  VideoCodecType codec_type;
   float packet_loss;
   int num_temporal_layers;
   int key_frame_interval;
@@ -138,7 +136,6 @@
   float start_bitrate_;
 
   // Codec and network settings.
-  VideoCodecType codec_type_;
   float packet_loss_;
   int num_temporal_layers_;
   int key_frame_interval_;
@@ -152,15 +149,8 @@
   virtual ~VideoProcessorIntegrationTest() {}
 
   void SetUpCodecConfig() {
-    if (codec_type_ == kVideoCodecVP8) {
-      encoder_ = VP8Encoder::Create();
-      decoder_ = VP8Decoder::Create();
-      VideoCodingModule::Codec(kVideoCodecVP8, &codec_settings_);
-    } else if (codec_type_ == kVideoCodecVP9) {
-      encoder_ = VP9Encoder::Create();
-      decoder_ = VP9Decoder::Create();
-      VideoCodingModule::Codec(kVideoCodecVP9, &codec_settings_);
-    }
+    encoder_ = VP8Encoder::Create();
+    decoder_ = VP8Decoder::Create();
 
     // CIF is currently used for all tests below.
     // Setup the TestConfig struct for processing of a clip in CIF resolution.
@@ -179,42 +169,26 @@
     config_.keyframe_interval = key_frame_interval_;
     config_.networking_config.packet_loss_probability = packet_loss_;
 
-    // Configure codec settings.
+    // Get a codec configuration struct and configure it.
+    VideoCodingModule::Codec(kVideoCodecVP8, &codec_settings_);
     config_.codec_settings = &codec_settings_;
     config_.codec_settings->startBitrate = start_bitrate_;
     config_.codec_settings->width = kCIFWidth;
     config_.codec_settings->height = kCIFHeight;
-
     // These features may be set depending on the test.
-    switch (config_.codec_settings->codecType) {
-     case kVideoCodecVP8:
-       config_.codec_settings->codecSpecific.VP8.errorConcealmentOn =
-           error_concealment_on_;
-       config_.codec_settings->codecSpecific.VP8.denoisingOn =
-           denoising_on_;
-       config_.codec_settings->codecSpecific.VP8.numberOfTemporalLayers =
-           num_temporal_layers_;
-       config_.codec_settings->codecSpecific.VP8.frameDroppingOn =
-           frame_dropper_on_;
-       config_.codec_settings->codecSpecific.VP8.automaticResizeOn =
-           spatial_resize_on_;
-       config_.codec_settings->codecSpecific.VP8.keyFrameInterval =
-           kBaseKeyFrameInterval;
-       break;
-     case kVideoCodecVP9:
-       config_.codec_settings->codecSpecific.VP9.denoisingOn =
-           denoising_on_;
-       config_.codec_settings->codecSpecific.VP9.numberOfTemporalLayers =
-           num_temporal_layers_;
-       config_.codec_settings->codecSpecific.VP9.frameDroppingOn =
-           frame_dropper_on_;
-       config_.codec_settings->codecSpecific.VP9.keyFrameInterval =
-           kBaseKeyFrameInterval;
-       break;
-     default:
-       assert(false);
-       break;
-     }
+    config_.codec_settings->codecSpecific.VP8.errorConcealmentOn =
+        error_concealment_on_;
+    config_.codec_settings->codecSpecific.VP8.denoisingOn =
+        denoising_on_;
+    config_.codec_settings->codecSpecific.VP8.numberOfTemporalLayers =
+        num_temporal_layers_;
+    config_.codec_settings->codecSpecific.VP8.frameDroppingOn =
+        frame_dropper_on_;
+    config_.codec_settings->codecSpecific.VP8.automaticResizeOn =
+        spatial_resize_on_;
+    config_.codec_settings->codecSpecific.VP8.keyFrameInterval =
+        kBaseKeyFrameInterval;
+
     frame_reader_ =
         new webrtc::test::FrameReaderImpl(config_.input_filename,
                                           config_.frame_length_in_bytes);
@@ -431,7 +405,6 @@
                               CodecConfigPars process,
                               RateControlMetrics* rc_metrics) {
     // Codec/config settings.
-    codec_type_ = process.codec_type;
     start_bitrate_ = rate_profile.target_bit_rate[0];
     packet_loss_ = process.packet_loss;
     key_frame_interval_ = process.key_frame_interval;
@@ -541,7 +514,6 @@
 }
 
 void SetCodecParameters(CodecConfigPars* process_settings,
-                        VideoCodecType codec_type,
                         float packet_loss,
                         int key_frame_interval,
                         int num_temporal_layers,
@@ -549,7 +521,6 @@
                         bool denoising_on,
                         bool frame_dropper_on,
                         bool spatial_resize_on) {
-  process_settings->codec_type = codec_type;
   process_settings->packet_loss = packet_loss;
   process_settings->key_frame_interval =  key_frame_interval;
   process_settings->num_temporal_layers = num_temporal_layers,
@@ -589,126 +560,7 @@
   rc_metrics[update_index].num_spatial_resizes = num_spatial_resizes;
 }
 
-// VP9: Run with no packet loss and fixed bitrate. Quality should be very high.
-// One key frame (first frame only) in sequence. Setting |key_frame_interval|
-// to -1 below means no periodic key frames in test.
-TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossVP9) {
-  // Bitrate and frame rate profile.
-  RateProfile rate_profile;
-  SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
-  rate_profile.frame_index_rate_update[1] = kNbrFramesShort + 1;
-  rate_profile.num_frames = kNbrFramesShort;
-  // Codec/network settings.
-  CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP9, 0.0f, -1, 1, false,
-                     false, true, false);
-  // Metrics for expected quality.
-  QualityMetrics quality_metrics;
-  SetQualityMetrics(&quality_metrics, 37.5, 36.0, 0.94, 0.93);
-  // Metrics for rate control.
-  RateControlMetrics rc_metrics[1];
-  SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0);
-  ProcessFramesAndVerify(quality_metrics,
-                         rate_profile,
-                         process_settings,
-                         rc_metrics);
-}
-
-// VP9: Run with 5% packet loss and fixed bitrate. Quality should be a bit
-// lower. One key frame (first frame only) in sequence.
-TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLossVP9) {
-  // Bitrate and frame rate profile.
-  RateProfile rate_profile;
-  SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
-  rate_profile.frame_index_rate_update[1] = kNbrFramesShort + 1;
-  rate_profile.num_frames = kNbrFramesShort;
-  // Codec/network settings.
-  CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP9, 0.05f, -1, 1, false,
-                     false, true, false);
-  // Metrics for expected quality.
-  QualityMetrics quality_metrics;
-  SetQualityMetrics(&quality_metrics, 17.0, 15.0, 0.45, 0.38);
-  // Metrics for rate control.
-  RateControlMetrics rc_metrics[1];
-  SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0);
-  ProcessFramesAndVerify(quality_metrics,
-                         rate_profile,
-                         process_settings,
-                         rc_metrics);
-}
-
-
-// VP9: Run with no packet loss, with varying bitrate (3 rate updates):
-// low to high to medium. Check that quality and encoder response to the new
-// target rate/per-frame bandwidth (for each rate update) is within limits.
-// One key frame (first frame only) in sequence.
-TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRateVP9) {
-  // Bitrate and frame rate profile.
-  RateProfile rate_profile;
-  SetRateProfilePars(&rate_profile, 0, 200, 30, 0);
-  SetRateProfilePars(&rate_profile, 1, 800, 30, 100);
-  SetRateProfilePars(&rate_profile, 2, 500, 30, 200);
-  rate_profile.frame_index_rate_update[3] = kNbrFramesLong + 1;
-  rate_profile.num_frames = kNbrFramesLong;
-  // Codec/network settings.
-  CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP9, 0.0f, -1, 1, false,
-                     false, true, false);
-  // Metrics for expected quality.
-  QualityMetrics quality_metrics;
-  SetQualityMetrics(&quality_metrics, 36.0, 32.0, 0.90, 0.85);
-  // Metrics for rate control.
-  RateControlMetrics rc_metrics[3];
-  SetRateControlMetrics(rc_metrics, 0, 0, 30, 20, 20, 20, 0);
-  SetRateControlMetrics(rc_metrics, 1, 2, 0, 20, 20, 60, 0);
-  SetRateControlMetrics(rc_metrics, 2, 0, 0, 20, 20, 30, 0);
-  ProcessFramesAndVerify(quality_metrics,
-                         rate_profile,
-                         process_settings,
-                         rc_metrics);
-}
-
-// VP9: Run with no packet loss, with an update (decrease) in frame rate.
-// Lower frame rate means higher per-frame-bandwidth, so easier to encode.
-// At the low bitrate in this test, this means better rate control after the
-// update(s) to lower frame rate. So expect less frame drops, and max values
-// for the rate control metrics can be lower. One key frame (first frame only).
-// Note: quality after update should be higher but we currently compute quality
-// metrics averaged over whole sequence run.
-TEST_F(VideoProcessorIntegrationTest,
-       ProcessNoLossChangeFrameRateFrameDropVP9) {
-  config_.networking_config.packet_loss_probability = 0;
-  // Bitrate and frame rate profile.
-  RateProfile rate_profile;
-  SetRateProfilePars(&rate_profile, 0, 50, 24, 0);
-  SetRateProfilePars(&rate_profile, 1, 50, 15, 100);
-  SetRateProfilePars(&rate_profile, 2, 50, 10, 200);
-  rate_profile.frame_index_rate_update[3] = kNbrFramesLong + 1;
-  rate_profile.num_frames = kNbrFramesLong;
-  // Codec/network settings.
-  CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP9, 0.0f, -1, 1, false,
-                     false, true, false);
-  // Metrics for expected quality.
-  QualityMetrics quality_metrics;
-  SetQualityMetrics(&quality_metrics, 30.0, 18.0, 0.80, 0.40);
-  // Metrics for rate control.
-  RateControlMetrics rc_metrics[3];
-  SetRateControlMetrics(rc_metrics, 0, 30, 30, 70, 15, 40, 0);
-  SetRateControlMetrics(rc_metrics, 1, 15, 0, 50, 10, 30, 0);
-  SetRateControlMetrics(rc_metrics, 2, 5, 0, 38, 10, 30, 0);
-  ProcessFramesAndVerify(quality_metrics,
-                         rate_profile,
-                         process_settings,
-                         rc_metrics);
-}
-
-
-// TODO(marpan): Add temporal layer test for VP9, once changes are in
-// vp9 wrapper for this.
-
-// VP8: Run with no packet loss and fixed bitrate. Quality should be very high.
+// Run with no packet loss and fixed bitrate. Quality should be very high.
 // One key frame (first frame only) in sequence. Setting |key_frame_interval|
 // to -1 below means no periodic key frames in test.
 TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) {
@@ -719,8 +571,7 @@
   rate_profile.num_frames = kNbrFramesShort;
   // Codec/network settings.
   CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP8, 0.0f, -1, 1, false,
-                     true, true, false);
+  SetCodecParameters(&process_settings, 0.0f, -1, 1, false, true, true, false);
   // Metrics for expected quality.
   QualityMetrics quality_metrics;
   SetQualityMetrics(&quality_metrics, 34.95, 33.0, 0.90, 0.89);
@@ -733,8 +584,8 @@
                          rc_metrics);
 }
 
-// VP8: Run with 5% packet loss and fixed bitrate. Quality should be a bit
-// lower. One key frame (first frame only) in sequence.
+// Run with 5% packet loss and fixed bitrate. Quality should be a bit lower.
+// One key frame (first frame only) in sequence.
 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) {
   // Bitrate and frame rate profile.
   RateProfile rate_profile;
@@ -743,8 +594,7 @@
   rate_profile.num_frames = kNbrFramesShort;
   // Codec/network settings.
   CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP8, 0.05f, -1, 1, false,
-                     true, true, false);
+  SetCodecParameters(&process_settings, 0.05f, -1, 1, false, true, true, false);
   // Metrics for expected quality.
   QualityMetrics quality_metrics;
   SetQualityMetrics(&quality_metrics, 20.0, 16.0, 0.60, 0.40);
@@ -757,7 +607,7 @@
                          rc_metrics);
 }
 
-// VP8: Run with 10% packet loss and fixed bitrate. Quality should be lower.
+// Run with 10% packet loss and fixed bitrate. Quality should be even lower.
 // One key frame (first frame only) in sequence.
 TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) {
   // Bitrate and frame rate profile.
@@ -767,8 +617,7 @@
   rate_profile.num_frames = kNbrFramesShort;
   // Codec/network settings.
   CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP8, 0.1f, -1, 1, false,
-                     true, true, false);
+  SetCodecParameters(&process_settings, 0.1f, -1, 1, false, true, true, false);
   // Metrics for expected quality.
   QualityMetrics quality_metrics;
   SetQualityMetrics(&quality_metrics, 19.0, 16.0, 0.50, 0.35);
@@ -790,12 +639,12 @@
 // disabled on Android. Some quality parameter in the above test has been
 // adjusted to also pass for |cpu_speed| <= 12.
 
-// VP8: Run with no packet loss, with varying bitrate (3 rate updates):
+// Run with no packet loss, with varying bitrate (3 rate updates):
 // low to high to medium. Check that quality and encoder response to the new
 // target rate/per-frame bandwidth (for each rate update) is within limits.
 // One key frame (first frame only) in sequence.
 TEST_F(VideoProcessorIntegrationTest,
-       DISABLED_ON_ANDROID(ProcessNoLossChangeBitRateVP8)) {
+       DISABLED_ON_ANDROID(ProcessNoLossChangeBitRate)) {
   // Bitrate and frame rate profile.
   RateProfile rate_profile;
   SetRateProfilePars(&rate_profile, 0, 200, 30, 0);
@@ -805,8 +654,7 @@
   rate_profile.num_frames = kNbrFramesLong;
   // Codec/network settings.
   CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP8, 0.0f, -1, 1, false,
-                     true, true, false);
+  SetCodecParameters(&process_settings, 0.0f, -1, 1, false, true, true, false);
   // Metrics for expected quality.
   QualityMetrics quality_metrics;
   SetQualityMetrics(&quality_metrics, 34.0, 32.0, 0.85, 0.80);
@@ -821,15 +669,15 @@
                          rc_metrics);
 }
 
-// VP8: Run with no packet loss, with an update (decrease) in frame rate.
+// Run with no packet loss, with an update (decrease) in frame rate.
 // Lower frame rate means higher per-frame-bandwidth, so easier to encode.
 // At the bitrate in this test, this means better rate control after the
 // update(s) to lower frame rate. So expect less frame drops, and max values
 // for the rate control metrics can be lower. One key frame (first frame only).
 // Note: quality after update should be higher but we currently compute quality
-// metrics averaged over whole sequence run.
+// metrics avergaed over whole sequence run.
 TEST_F(VideoProcessorIntegrationTest,
-       DISABLED_ON_ANDROID(ProcessNoLossChangeFrameRateFrameDropVP8)) {
+       DISABLED_ON_ANDROID(ProcessNoLossChangeFrameRateFrameDrop)) {
   config_.networking_config.packet_loss_probability = 0;
   // Bitrate and frame rate profile.
   RateProfile rate_profile;
@@ -840,8 +688,7 @@
   rate_profile.num_frames = kNbrFramesLong;
   // Codec/network settings.
   CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP8, 0.0f, -1, 1, false,
-                     true, true, false);
+  SetCodecParameters(&process_settings, 0.0f, -1, 1, false, true, true, false);
   // Metrics for expected quality.
   QualityMetrics quality_metrics;
   SetQualityMetrics(&quality_metrics, 31.0, 22.0, 0.80, 0.65);
@@ -859,7 +706,7 @@
 // Run with no packet loss, at low bitrate. During this time we should've
 // resized once.
 TEST_F(VideoProcessorIntegrationTest,
-       DISABLED_ON_ANDROID(ProcessNoLossSpatialResizeFrameDropVP8)) {
+       DISABLED_ON_ANDROID(ProcessNoLossSpatialResizeFrameDrop)) {
   config_.networking_config.packet_loss_probability = 0;
   // Bitrate and frame rate profile.
   RateProfile rate_profile;
@@ -868,8 +715,8 @@
   rate_profile.num_frames = kNbrFramesLong;
   // Codec/network settings.
   CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP8, 0.0f, kNbrFramesLong,
-                     1, false, true, true, true);
+  SetCodecParameters(
+      &process_settings, 0.0f, kNbrFramesLong, 1, false, true, true, true);
   // Metrics for expected quality.
   QualityMetrics quality_metrics;
   SetQualityMetrics(&quality_metrics, 25.0, 15.0, 0.70, 0.40);
@@ -882,13 +729,13 @@
                          rc_metrics);
 }
 
-// VP8: Run with no packet loss, with 3 temporal layers, with a rate update in
-// the middle of the sequence. The max values for the frame size mismatch and
+// Run with no packet loss, with 3 temporal layers, with a rate update in the
+// middle of the sequence. The max values for the frame size mismatch and
 // encoding rate mismatch are applied to each layer.
 // No dropped frames in this test, and internal spatial resizer is off.
 // One key frame (first frame only) in sequence, so no spatial resizing.
 TEST_F(VideoProcessorIntegrationTest,
-       DISABLED_ON_ANDROID(ProcessNoLossTemporalLayersVP8)) {
+       DISABLED_ON_ANDROID(ProcessNoLossTemporalLayers)) {
   config_.networking_config.packet_loss_probability = 0;
   // Bitrate and frame rate profile.
   RateProfile rate_profile;
@@ -898,8 +745,7 @@
   rate_profile.num_frames = kNbrFramesLong;
   // Codec/network settings.
   CodecConfigPars process_settings;
-  SetCodecParameters(&process_settings, kVideoCodecVP8, 0.0f, -1, 3, false,
-                     true, true, false);
+  SetCodecParameters(&process_settings, 0.0f, -1, 3, false, true, true, false);
   // Metrics for expected quality.
   QualityMetrics quality_metrics;
   SetQualityMetrics(&quality_metrics, 32.5, 30.0, 0.85, 0.80);
diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h
index fec53d5..08ce3c9 100644
--- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h
+++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h
@@ -35,20 +35,73 @@
 
   virtual ~VP8EncoderImpl();
 
+  // Free encoder memory.
+  //
+  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
   virtual int Release();
 
+  // Initialize the encoder with the information from the codecSettings
+  //
+  // Input:
+  //          - codec_settings    : Codec settings
+  //          - number_of_cores   : Number of cores available for the encoder
+  //          - max_payload_size  : The maximum size each payload is allowed
+  //                                to have. Usually MTU - overhead.
+  //
+  // Return value                 : Set bit rate if OK
+  //                                <0 - Errors:
+  //                                  WEBRTC_VIDEO_CODEC_ERR_PARAMETER
+  //                                  WEBRTC_VIDEO_CODEC_ERR_SIZE
+  //                                  WEBRTC_VIDEO_CODEC_LEVEL_EXCEEDED
+  //                                  WEBRTC_VIDEO_CODEC_MEMORY
+  //                                  WEBRTC_VIDEO_CODEC_ERROR
   virtual int InitEncode(const VideoCodec* codec_settings,
                          int number_of_cores,
                          uint32_t max_payload_size);
 
+  // Encode an I420 image (as a part of a video stream). The encoded image
+  // will be returned to the user through the encode complete callback.
+  //
+  // Input:
+  //          - input_image       : Image to be encoded
+  //          - frame_types       : Frame type to be generated by the encoder.
+  //
+  // Return value                 : WEBRTC_VIDEO_CODEC_OK if OK
+  //                                <0 - Errors:
+  //                                  WEBRTC_VIDEO_CODEC_ERR_PARAMETER
+  //                                  WEBRTC_VIDEO_CODEC_MEMORY
+  //                                  WEBRTC_VIDEO_CODEC_ERROR
+  //                                  WEBRTC_VIDEO_CODEC_TIMEOUT
+
   virtual int Encode(const I420VideoFrame& input_image,
                      const CodecSpecificInfo* codec_specific_info,
                      const std::vector<VideoFrameType>* frame_types);
 
+  // Register an encode complete callback object.
+  //
+  // Input:
+  //          - callback         : Callback object which handles encoded images.
+  //
+  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
   virtual int RegisterEncodeCompleteCallback(EncodedImageCallback* callback);
 
+  // Inform the encoder of the new packet loss rate and the round-trip time of
+  // the network.
+  //
+  //          - packet_loss : Fraction lost
+  //                          (loss rate in percent = 100 * packetLoss / 255)
+  //          - rtt         : Round-trip time in milliseconds
+  // Return value           : WEBRTC_VIDEO_CODEC_OK if OK
+  //                          <0 - Errors: WEBRTC_VIDEO_CODEC_ERROR
+  //
   virtual int SetChannelParameters(uint32_t packet_loss, int rtt);
 
+  // Inform the encoder about the new target bit rate.
+  //
+  //          - new_bitrate_kbit : New target bit rate
+  //          - frame_rate       : The target frame rate
+  //
+  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
   virtual int SetRates(uint32_t new_bitrate_kbit, uint32_t frame_rate);
 
  private:
@@ -97,20 +150,61 @@
 
   virtual ~VP8DecoderImpl();
 
+  // Initialize the decoder.
+  //
+  // Return value         :  WEBRTC_VIDEO_CODEC_OK.
+  //                        <0 - Errors:
+  //                                  WEBRTC_VIDEO_CODEC_ERROR
   virtual int InitDecode(const VideoCodec* inst, int number_of_cores);
 
+  // Decode encoded image (as a part of a video stream). The decoded image
+  // will be returned to the user through the decode complete callback.
+  //
+  // Input:
+  //          - input_image         : Encoded image to be decoded
+  //          - missing_frames      : True if one or more frames have been lost
+  //                                  since the previous decode call.
+  //          - fragmentation       : Specifies the start and length of each VP8
+  //                                  partition.
+  //          - codec_specific_info : pointer to specific codec data
+  //          - render_time_ms      : Render time in Ms
+  //
+  // Return value                 : WEBRTC_VIDEO_CODEC_OK if OK
+  //                                <0 - Errors:
+  //                                      WEBRTC_VIDEO_CODEC_ERROR
+  //                                      WEBRTC_VIDEO_CODEC_ERR_PARAMETER
   virtual int Decode(const EncodedImage& input_image,
                      bool missing_frames,
                      const RTPFragmentationHeader* fragmentation,
                      const CodecSpecificInfo* codec_specific_info,
                      int64_t /*render_time_ms*/);
 
+  // Register a decode complete callback object.
+  //
+  // Input:
+  //          - callback         : Callback object which handles decoded images.
+  //
+  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
   virtual int RegisterDecodeCompleteCallback(DecodedImageCallback* callback);
 
+  // Free decoder memory.
+  //
+  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK
+  //                               <0 - Errors:
+  //                                      WEBRTC_VIDEO_CODEC_ERROR
   virtual int Release();
 
+  // Reset decoder state and prepare for a new call.
+  //
+  // Return value         : WEBRTC_VIDEO_CODEC_OK.
+  //                        <0 - Errors:
+  //                                  WEBRTC_VIDEO_CODEC_UNINITIALIZED
+  //                                  WEBRTC_VIDEO_CODEC_ERROR
   virtual int Reset();
 
+  // Create a copy of the codec and its internal state.
+  //
+  // Return value                : A copy of the instance if OK, NULL otherwise.
   virtual VideoDecoder* Copy();
 
  private:
diff --git a/webrtc/modules/video_coding/codecs/vp9/include/vp9.h b/webrtc/modules/video_coding/codecs/vp9/include/vp9.h
deleted file mode 100644
index cd77f72..0000000
--- a/webrtc/modules/video_coding/codecs/vp9/include/vp9.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- *
- */
-
-#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP9_INCLUDE_VP9_H_
-#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP9_INCLUDE_VP9_H_
-
-#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
-
-namespace webrtc {
-
-class VP9Encoder : public VideoEncoder {
- public:
-  static VP9Encoder* Create();
-
-  virtual ~VP9Encoder() {}
-};
-
-
-class VP9Decoder : public VideoDecoder {
- public:
-  static VP9Decoder* Create();
-
-  virtual ~VP9Decoder() {}
-};
-}  // namespace webrtc
-
-#endif  // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP9_INCLUDE_VP9_H_
diff --git a/webrtc/modules/video_coding/codecs/vp9/vp9.gyp b/webrtc/modules/video_coding/codecs/vp9/vp9.gyp
deleted file mode 100644
index 2bd46fe..0000000
--- a/webrtc/modules/video_coding/codecs/vp9/vp9.gyp
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
-#
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file in the root of the source
-# tree. An additional intellectual property rights grant can be found
-# in the file PATENTS.  All contributing project authors may
-# be found in the AUTHORS file in the root of the source tree.
-
-{
-  'includes': [
-    '../../../../build/common.gypi',
-  ],
-  'targets': [
-    {
-      'target_name': 'webrtc_vp9',
-      'type': 'static_library',
-      'dependencies': [
-        '<(webrtc_root)/common_video/common_video.gyp:common_video',
-        '<(webrtc_root)/modules/video_coding/utility/video_coding_utility.gyp:video_coding_utility',
-        '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
-      ],
-      'conditions': [
-        ['build_libvpx==1', {
-          'dependencies': [
-            '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
-          ],
-        }],
-      ],
-      'sources': [
-        'include/vp9.h',
-        'vp9_impl.cc',
-        'vp9_impl.h',
-      ],
-    },
-  ],
-}
diff --git a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
deleted file mode 100644
index 44bbb7b..0000000
--- a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- *
- */
-
-#include "webrtc/modules/video_coding/codecs/vp9/vp9_impl.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <vector>
-
-#include "vpx/vpx_encoder.h"
-#include "vpx/vpx_decoder.h"
-#include "vpx/vp8cx.h"
-#include "vpx/vp8dx.h"
-
-#include "webrtc/common.h"
-#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
-#include "webrtc/modules/interface/module_common_types.h"
-#include "webrtc/system_wrappers/interface/tick_util.h"
-#include "webrtc/system_wrappers/interface/trace_event.h"
-
-namespace webrtc {
-
-VP9Encoder* VP9Encoder::Create() {
-  return new VP9EncoderImpl();
-}
-
-VP9EncoderImpl::VP9EncoderImpl()
-    : encoded_image_(),
-      encoded_complete_callback_(NULL),
-      inited_(false),
-      timestamp_(0),
-      picture_id_(0),
-      cpu_speed_(3),
-      rc_max_intra_target_(0),
-      encoder_(NULL),
-      config_(NULL),
-      raw_(NULL) {
-  memset(&codec_, 0, sizeof(codec_));
-  uint32_t seed = static_cast<uint32_t>(TickTime::MillisecondTimestamp());
-  srand(seed);
-}
-
-VP9EncoderImpl::~VP9EncoderImpl() {
-  Release();
-}
-
-int VP9EncoderImpl::Release() {
-  if (encoded_image_._buffer != NULL) {
-    delete [] encoded_image_._buffer;
-    encoded_image_._buffer = NULL;
-  }
-  if (encoder_ != NULL) {
-    if (vpx_codec_destroy(encoder_)) {
-      return WEBRTC_VIDEO_CODEC_MEMORY;
-    }
-    delete encoder_;
-    encoder_ = NULL;
-  }
-  if (config_ != NULL) {
-    delete config_;
-    config_ = NULL;
-  }
-  if (raw_ != NULL) {
-    vpx_img_free(raw_);
-    raw_ = NULL;
-  }
-  inited_ = false;
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9EncoderImpl::SetRates(uint32_t new_bitrate_kbit,
-                             uint32_t new_framerate) {
-  if (!inited_) {
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  }
-  if (encoder_->err) {
-    return WEBRTC_VIDEO_CODEC_ERROR;
-  }
-  if (new_framerate < 1) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  // Update bit rate
-  if (codec_.maxBitrate > 0 && new_bitrate_kbit > codec_.maxBitrate) {
-    new_bitrate_kbit = codec_.maxBitrate;
-  }
-  config_->rc_target_bitrate = new_bitrate_kbit;
-  codec_.maxFramerate = new_framerate;
-  // Update encoder context
-  if (vpx_codec_enc_config_set(encoder_, config_)) {
-    return WEBRTC_VIDEO_CODEC_ERROR;
-  }
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9EncoderImpl::InitEncode(const VideoCodec* inst,
-                               int number_of_cores,
-                               uint32_t /*max_payload_size*/) {
-  if (inst == NULL) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  if (inst->maxFramerate < 1) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  // Allow zero to represent an unspecified maxBitRate
-  if (inst->maxBitrate > 0 && inst->startBitrate > inst->maxBitrate) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  if (inst->width < 1 || inst->height < 1) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  if (number_of_cores < 1) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  int retVal = Release();
-  if (retVal < 0) {
-    return retVal;
-  }
-  if (encoder_ == NULL) {
-    encoder_ = new vpx_codec_ctx_t;
-  }
-  if (config_ == NULL) {
-    config_ = new vpx_codec_enc_cfg_t;
-  }
-  timestamp_ = 0;
-  if (&codec_ != inst) {
-    codec_ = *inst;
-  }
-  // Random start 16 bits is enough.
-  picture_id_ = static_cast<uint16_t>(rand()) & 0x7FFF;
-  // Allocate memory for encoded image
-  if (encoded_image_._buffer != NULL) {
-    delete [] encoded_image_._buffer;
-  }
-  encoded_image_._size = CalcBufferSize(kI420, codec_.width, codec_.height);
-  encoded_image_._buffer = new uint8_t[encoded_image_._size];
-  encoded_image_._completeFrame = true;
-  // Creating a wrapper to the image - setting image data to NULL. Actual
-  // pointer will be set in encode. Setting align to 1, as it is meaningless
-  // (actual memory is not allocated).
-  raw_ = vpx_img_wrap(NULL, IMG_FMT_I420, codec_.width, codec_.height,
-                      1, NULL);
-  // Populate encoder configuration with default values.
-  if (vpx_codec_enc_config_default(vpx_codec_vp9_cx(), config_, 0)) {
-    return WEBRTC_VIDEO_CODEC_ERROR;
-  }
-  config_->g_w = codec_.width;
-  config_->g_h = codec_.height;
-  config_->rc_target_bitrate = inst->startBitrate;  // in kbit/s
-  config_->g_error_resilient = 1;
-  // Setting the time base of the codec.
-  config_->g_timebase.num = 1;
-  config_->g_timebase.den = 90000;
-  config_->g_lag_in_frames = 0;  // 0- no frame lagging
-  config_->g_threads = 1;
-  // Rate control settings.
-  config_->rc_dropframe_thresh = inst->codecSpecific.VP9.frameDroppingOn ?
-      30 : 0;
-  config_->rc_end_usage = VPX_CBR;
-  config_->g_pass = VPX_RC_ONE_PASS;
-  config_->rc_min_quantizer = 2;
-  config_->rc_max_quantizer = 56;
-  config_->rc_undershoot_pct = 50;
-  config_->rc_overshoot_pct = 50;
-  config_->rc_buf_initial_sz = 500;
-  config_->rc_buf_optimal_sz = 600;
-  config_->rc_buf_sz = 1000;
-  // Set the maximum target size of any key-frame.
-  rc_max_intra_target_ = MaxIntraTarget(config_->rc_buf_optimal_sz);
-  if (inst->codecSpecific.VP9.keyFrameInterval  > 0) {
-    config_->kf_mode = VPX_KF_AUTO;
-    config_->kf_max_dist = inst->codecSpecific.VP9.keyFrameInterval;
-  } else {
-    config_->kf_mode = VPX_KF_DISABLED;
-  }
-  return InitAndSetControlSettings(inst);
-}
-
-int VP9EncoderImpl::InitAndSetControlSettings(const VideoCodec* inst) {
-  if (vpx_codec_enc_init(encoder_, vpx_codec_vp9_cx(), config_, 0)) {
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  }
-  // Only positive speeds, currently: 0 - 7.
-  // O means slowest/best quality, 7 means fastest/lowest quality.
-  // TODO(marpan): Speeds 5-7 are speed settings for real-time mode, on desktop.
-  // Currently set to 5, update to 6 (for faster encoding) after some subjective
-  // quality tests.
-  cpu_speed_ = 5;
-  // Note: some of these codec controls still use "VP8" in the control name.
-  // TODO(marpan): Update this in the next/future libvpx version.
-  vpx_codec_control(encoder_, VP8E_SET_CPUUSED, cpu_speed_);
-  vpx_codec_control(encoder_, VP8E_SET_MAX_INTRA_BITRATE_PCT,
-                    rc_max_intra_target_);
-  vpx_codec_control(encoder_, VP9E_SET_AQ_MODE,
-                    inst->codecSpecific.VP9.adaptiveQpMode ? 3 : 0);
-  // TODO(marpan): Enable in future libvpx roll: waiting for SSE2 optimization.
-// #if !defined(WEBRTC_ARCH_ARM)
-  // vpx_codec_control(encoder_, VP9E_SET_NOISE_SENSITIVITY,
-  //                   inst->codecSpecific.VP9.denoisingOn ? 1 : 0);
-// #endif
-  inited_ = true;
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-uint32_t VP9EncoderImpl::MaxIntraTarget(uint32_t optimal_buffer_size) {
-  // Set max to the optimal buffer level (normalized by target BR),
-  // and scaled by a scale_par.
-  // Max target size = scale_par * optimal_buffer_size * targetBR[Kbps].
-  // This value is presented in percentage of perFrameBw:
-  // perFrameBw = targetBR[Kbps] * 1000 / framerate.
-  // The target in % is as follows:
-  float scale_par = 0.5;
-  uint32_t target_pct =
-      optimal_buffer_size * scale_par * codec_.maxFramerate / 10;
-  // Don't go below 3 times the per frame bandwidth.
-  const uint32_t min_intra_size = 300;
-  return (target_pct < min_intra_size) ? min_intra_size: target_pct;
-}
-
-int VP9EncoderImpl::Encode(const I420VideoFrame& input_image,
-                           const CodecSpecificInfo* codec_specific_info,
-                           const std::vector<VideoFrameType>* frame_types) {
-  if (!inited_) {
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  }
-  if (input_image.IsZeroSize()) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  if (encoded_complete_callback_ == NULL) {
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  }
-  VideoFrameType frame_type = kDeltaFrame;
-  // We only support one stream at the moment.
-  if (frame_types && frame_types->size() > 0) {
-    frame_type = (*frame_types)[0];
-  }
-  // Image in vpx_image_t format.
-  // Input image is const. VPX's raw image is not defined as const.
-  raw_->planes[PLANE_Y] = const_cast<uint8_t*>(input_image.buffer(kYPlane));
-  raw_->planes[PLANE_U] = const_cast<uint8_t*>(input_image.buffer(kUPlane));
-  raw_->planes[PLANE_V] = const_cast<uint8_t*>(input_image.buffer(kVPlane));
-  raw_->stride[VPX_PLANE_Y] = input_image.stride(kYPlane);
-  raw_->stride[VPX_PLANE_U] = input_image.stride(kUPlane);
-  raw_->stride[VPX_PLANE_V] = input_image.stride(kVPlane);
-
-  int flags = 0;
-  bool send_keyframe = (frame_type == kKeyFrame);
-  if (send_keyframe) {
-    // Key frame request from caller.
-    flags = VPX_EFLAG_FORCE_KF;
-  }
-  assert(codec_.maxFramerate > 0);
-  uint32_t duration = 90000 / codec_.maxFramerate;
-  if (vpx_codec_encode(encoder_, raw_, timestamp_, duration, flags,
-                       VPX_DL_REALTIME)) {
-    return WEBRTC_VIDEO_CODEC_ERROR;
-  }
-  timestamp_ += duration;
-  return GetEncodedPartitions(input_image);
-}
-
-void VP9EncoderImpl::PopulateCodecSpecific(CodecSpecificInfo* codec_specific,
-                                       const vpx_codec_cx_pkt& pkt,
-                                       uint32_t timestamp) {
-  assert(codec_specific != NULL);
-  codec_specific->codecType = kVideoCodecVP9;
-  CodecSpecificInfoVP9 *vp9_info = &(codec_specific->codecSpecific.VP9);
-  vp9_info->pictureId = picture_id_;
-  vp9_info->keyIdx = kNoKeyIdx;
-  vp9_info->nonReference = (pkt.data.frame.flags & VPX_FRAME_IS_DROPPABLE) != 0;
-  // TODO(marpan): Temporal layers are supported in the current VP9 version,
-  // but for now use 1 temporal layer encoding. Will update this when temporal
-  // layer support for VP9 is added in webrtc.
-  vp9_info->temporalIdx = kNoTemporalIdx;
-  vp9_info->layerSync = false;
-  vp9_info->tl0PicIdx = kNoTl0PicIdx;
-  picture_id_ = (picture_id_ + 1) & 0x7FFF;
-}
-
-int VP9EncoderImpl::GetEncodedPartitions(const I420VideoFrame& input_image) {
-  vpx_codec_iter_t iter = NULL;
-  encoded_image_._length = 0;
-  encoded_image_._frameType = kDeltaFrame;
-  RTPFragmentationHeader frag_info;
-  // Note: no data partitioning in VP9, so 1 partition only. We keep this
-  // fragmentation data for now, until VP9 packetizer is implemented.
-  frag_info.VerifyAndAllocateFragmentationHeader(1);
-  int part_idx = 0;
-  CodecSpecificInfo codec_specific;
-  const vpx_codec_cx_pkt_t *pkt = NULL;
-  while ((pkt = vpx_codec_get_cx_data(encoder_, &iter)) != NULL) {
-    switch (pkt->kind) {
-      case VPX_CODEC_CX_FRAME_PKT: {
-        memcpy(&encoded_image_._buffer[encoded_image_._length],
-               pkt->data.frame.buf,
-               pkt->data.frame.sz);
-        frag_info.fragmentationOffset[part_idx] = encoded_image_._length;
-        frag_info.fragmentationLength[part_idx] =
-            static_cast<uint32_t>(pkt->data.frame.sz);
-        frag_info.fragmentationPlType[part_idx] = 0;
-        frag_info.fragmentationTimeDiff[part_idx] = 0;
-        encoded_image_._length += static_cast<uint32_t>(pkt->data.frame.sz);
-        assert(encoded_image_._length <= encoded_image_._size);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    // End of frame.
-    if ((pkt->data.frame.flags & VPX_FRAME_IS_FRAGMENT) == 0) {
-      // Check if encoded frame is a key frame.
-      if (pkt->data.frame.flags & VPX_FRAME_IS_KEY) {
-        encoded_image_._frameType = kKeyFrame;
-      }
-      PopulateCodecSpecific(&codec_specific, *pkt, input_image.timestamp());
-      break;
-    }
-  }
-  if (encoded_image_._length > 0) {
-    TRACE_COUNTER1("webrtc", "EncodedFrameSize", encoded_image_._length);
-    encoded_image_._timeStamp = input_image.timestamp();
-    encoded_image_.capture_time_ms_ = input_image.render_time_ms();
-    encoded_image_._encodedHeight = raw_->d_h;
-    encoded_image_._encodedWidth = raw_->d_w;
-    encoded_complete_callback_->Encoded(encoded_image_, &codec_specific,
-                                      &frag_info);
-  }
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9EncoderImpl::SetChannelParameters(uint32_t packet_loss, int rtt) {
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9EncoderImpl::RegisterEncodeCompleteCallback(
-    EncodedImageCallback* callback) {
-  encoded_complete_callback_ = callback;
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-VP9Decoder* VP9Decoder::Create() {
-  return new VP9DecoderImpl();
-}
-
-VP9DecoderImpl::VP9DecoderImpl()
-    : decode_complete_callback_(NULL),
-      inited_(false),
-      decoder_(NULL),
-      key_frame_required_(true) {
-  memset(&codec_, 0, sizeof(codec_));
-}
-
-VP9DecoderImpl::~VP9DecoderImpl() {
-  inited_ = true;  // in order to do the actual release
-  Release();
-}
-
-int VP9DecoderImpl::Reset() {
-  if (!inited_) {
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  }
-  InitDecode(&codec_, 1);
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9DecoderImpl::InitDecode(const VideoCodec* inst, int number_of_cores) {
-  if (inst == NULL) {
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
-  }
-  int ret_val = Release();
-  if (ret_val < 0) {
-    return ret_val;
-  }
-  if (decoder_ == NULL) {
-    decoder_ = new vpx_dec_ctx_t;
-  }
-  vpx_codec_dec_cfg_t  cfg;
-  // Setting number of threads to a constant value (1)
-  cfg.threads = 1;
-  cfg.h = cfg.w = 0;  // set after decode
-  vpx_codec_flags_t flags = 0;
-  if (vpx_codec_dec_init(decoder_, vpx_codec_vp9_dx(), &cfg, flags)) {
-    return WEBRTC_VIDEO_CODEC_MEMORY;
-  }
-  if (&codec_ != inst) {
-    // Save VideoCodec instance for later; mainly for duplicating the decoder.
-    codec_ = *inst;
-  }
-  inited_ = true;
-  // Always start with a complete key frame.
-  key_frame_required_ = true;
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9DecoderImpl::Decode(const EncodedImage& input_image,
-                           bool missing_frames,
-                           const RTPFragmentationHeader* fragmentation,
-                           const CodecSpecificInfo* codec_specific_info,
-                           int64_t /*render_time_ms*/) {
-  if (!inited_) {
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  }
-  if (decode_complete_callback_ == NULL) {
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  }
-  // Always start with a complete key frame.
-  if (key_frame_required_) {
-    if (input_image._frameType != kKeyFrame)
-      return WEBRTC_VIDEO_CODEC_ERROR;
-    // We have a key frame - is it complete?
-    if (input_image._completeFrame) {
-      key_frame_required_ = false;
-    } else {
-      return WEBRTC_VIDEO_CODEC_ERROR;
-    }
-  }
-  vpx_codec_iter_t iter = NULL;
-  vpx_image_t* img;
-  uint8_t* buffer = input_image._buffer;
-  if (input_image._length == 0) {
-    buffer = NULL;  // Triggers full frame concealment.
-  }
-  if (vpx_codec_decode(decoder_,
-                       buffer,
-                       input_image._length,
-                       0,
-                       VPX_DL_REALTIME)) {
-    return WEBRTC_VIDEO_CODEC_ERROR;
-  }
-  img = vpx_codec_get_frame(decoder_, &iter);
-  int ret = ReturnFrame(img, input_image._timeStamp);
-  if (ret != 0) {
-    return ret;
-  }
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9DecoderImpl::ReturnFrame(const vpx_image_t* img, uint32_t timestamp) {
-  if (img == NULL) {
-    // Decoder OK and NULL image => No show frame.
-    return WEBRTC_VIDEO_CODEC_NO_OUTPUT;
-  }
-  int half_height = (img->d_h + 1) / 2;
-  int size_y = img->stride[VPX_PLANE_Y] * img->d_h;
-  int size_u = img->stride[VPX_PLANE_U] * half_height;
-  int size_v = img->stride[VPX_PLANE_V] * half_height;
-  decoded_image_.CreateFrame(size_y, img->planes[VPX_PLANE_Y],
-                             size_u, img->planes[VPX_PLANE_U],
-                             size_v, img->planes[VPX_PLANE_V],
-                             img->d_w, img->d_h,
-                             img->stride[VPX_PLANE_Y],
-                             img->stride[VPX_PLANE_U],
-                             img->stride[VPX_PLANE_V]);
-  decoded_image_.set_timestamp(timestamp);
-  int ret = decode_complete_callback_->Decoded(decoded_image_);
-  if (ret != 0)
-    return ret;
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9DecoderImpl::RegisterDecodeCompleteCallback(
-    DecodedImageCallback* callback) {
-  decode_complete_callback_ = callback;
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int VP9DecoderImpl::Release() {
-  if (decoder_ != NULL) {
-    if (vpx_codec_destroy(decoder_)) {
-      return WEBRTC_VIDEO_CODEC_MEMORY;
-    }
-    delete decoder_;
-    decoder_ = NULL;
-  }
-  inited_ = false;
-  return WEBRTC_VIDEO_CODEC_OK;
-}
-}  // namespace webrtc
diff --git a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.h b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.h
deleted file mode 100644
index 94788db..0000000
--- a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- *
- */
-
-#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP9_IMPL_H_
-#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP9_IMPL_H_
-
-#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
-
-// VPX forward declaration
-typedef struct vpx_codec_ctx vpx_codec_ctx_t;
-typedef struct vpx_codec_ctx vpx_dec_ctx_t;
-typedef struct vpx_codec_enc_cfg vpx_codec_enc_cfg_t;
-typedef struct vpx_image vpx_image_t;
-typedef struct vpx_ref_frame vpx_ref_frame_t;
-struct vpx_codec_cx_pkt;
-
-namespace webrtc {
-
-class VP9EncoderImpl : public VP9Encoder {
- public:
-  VP9EncoderImpl();
-
-  virtual ~VP9EncoderImpl();
-
-  virtual int Release() OVERRIDE;
-
-  virtual int InitEncode(const VideoCodec* codec_settings,
-                         int number_of_cores,
-                         uint32_t max_payload_size) OVERRIDE;
-
-  virtual int Encode(const I420VideoFrame& input_image,
-                     const CodecSpecificInfo* codec_specific_info,
-                     const std::vector<VideoFrameType>* frame_types) OVERRIDE;
-
-  virtual int RegisterEncodeCompleteCallback(EncodedImageCallback* callback)
-  OVERRIDE;
-
-  virtual int SetChannelParameters(uint32_t packet_loss, int rtt) OVERRIDE;
-
-  virtual int SetRates(uint32_t new_bitrate_kbit, uint32_t frame_rate) OVERRIDE;
-
- private:
-  // Call encoder initialize function and set control settings.
-  int InitAndSetControlSettings(const VideoCodec* inst);
-
-  void PopulateCodecSpecific(CodecSpecificInfo* codec_specific,
-                             const vpx_codec_cx_pkt& pkt,
-                             uint32_t timestamp);
-
-  int GetEncodedPartitions(const I420VideoFrame& input_image);
-
-  // Determine maximum target for Intra frames
-  //
-  // Input:
-  //    - optimal_buffer_size : Optimal buffer size
-  // Return Value             : Max target size for Intra frames represented as
-  //                            percentage of the per frame bandwidth
-  uint32_t MaxIntraTarget(uint32_t optimal_buffer_size);
-
-  EncodedImage encoded_image_;
-  EncodedImageCallback* encoded_complete_callback_;
-  VideoCodec codec_;
-  bool inited_;
-  int64_t timestamp_;
-  uint16_t picture_id_;
-  int cpu_speed_;
-  uint32_t rc_max_intra_target_;
-  vpx_codec_ctx_t* encoder_;
-  vpx_codec_enc_cfg_t* config_;
-  vpx_image_t* raw_;
-};
-
-
-class VP9DecoderImpl : public VP9Decoder {
- public:
-  VP9DecoderImpl();
-
-  virtual ~VP9DecoderImpl();
-
-  virtual int InitDecode(const VideoCodec* inst, int number_of_cores) OVERRIDE;
-
-  virtual int Decode(const EncodedImage& input_image,
-                     bool missing_frames,
-                     const RTPFragmentationHeader* fragmentation,
-                     const CodecSpecificInfo* codec_specific_info,
-                     int64_t /*render_time_ms*/) OVERRIDE;
-
-  virtual int RegisterDecodeCompleteCallback(DecodedImageCallback* callback)
-  OVERRIDE;
-
-  virtual int Release() OVERRIDE;
-
-  virtual int Reset() OVERRIDE;
-
- private:
-  int ReturnFrame(const vpx_image_t* img, uint32_t timeStamp);
-
-  I420VideoFrame decoded_image_;
-  DecodedImageCallback* decode_complete_callback_;
-  bool inited_;
-  vpx_dec_ctx_t* decoder_;
-  VideoCodec codec_;
-  bool key_frame_required_;
-};
-}  // namespace webrtc
-
-#endif  // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP9_IMPL_H_
diff --git a/webrtc/modules/video_coding/main/interface/video_coding_defines.h b/webrtc/modules/video_coding/main/interface/video_coding_defines.h
index 0b5431c..c5f93cb 100644
--- a/webrtc/modules/video_coding/main/interface/video_coding_defines.h
+++ b/webrtc/modules/video_coding/main/interface/video_coding_defines.h
@@ -39,7 +39,6 @@
 #define VCM_RED_PAYLOAD_TYPE        96
 #define VCM_ULPFEC_PAYLOAD_TYPE     97
 #define VCM_VP8_PAYLOAD_TYPE       100
-#define VCM_VP9_PAYLOAD_TYPE       101
 #define VCM_I420_PAYLOAD_TYPE      124
 #define VCM_H264_PAYLOAD_TYPE      127
 
diff --git a/webrtc/modules/video_coding/main/source/codec_database.cc b/webrtc/modules/video_coding/main/source/codec_database.cc
index 34c6725..cd8f9d3 100644
--- a/webrtc/modules/video_coding/main/source/codec_database.cc
+++ b/webrtc/modules/video_coding/main/source/codec_database.cc
@@ -19,9 +19,6 @@
 #ifdef VIDEOCODEC_VP8
 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
 #endif
-#ifdef VIDEOCODEC_VP9
-#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
-#endif
 #include "webrtc/modules/video_coding/main/source/internal_defines.h"
 #include "webrtc/system_wrappers/interface/logging.h"
 
@@ -42,20 +39,6 @@
   return vp8_settings;
 }
 
-VideoCodecVP9 VideoEncoder::GetDefaultVp9Settings() {
-  VideoCodecVP9 vp9_settings;
-  memset(&vp9_settings, 0, sizeof(vp9_settings));
-
-  vp9_settings.resilience = 1;
-  vp9_settings.numberOfTemporalLayers = 1;
-  vp9_settings.denoisingOn = false;
-  vp9_settings.frameDroppingOn = true;
-  vp9_settings.keyFrameInterval = 3000;
-  vp9_settings.adaptiveQpMode = true;
-
-  return vp9_settings;
-}
-
 VideoCodecH264 VideoEncoder::GetDefaultH264Settings() {
   VideoCodecH264 h264_settings;
   memset(&h264_settings, 0, sizeof(h264_settings));
@@ -143,24 +126,6 @@
       return true;
     }
 #endif
-#ifdef VIDEOCODEC_VP9
-    case VCM_VP9_IDX: {
-      strncpy(settings->plName, "VP9", 4);
-      settings->codecType = kVideoCodecVP9;
-      // 96 to 127 dynamic payload types for video codecs.
-      settings->plType = VCM_VP9_PAYLOAD_TYPE;
-      settings->startBitrate = 100;
-      settings->minBitrate = VCM_MIN_BITRATE;
-      settings->maxBitrate = 0;
-      settings->maxFramerate = VCM_DEFAULT_FRAME_RATE;
-      settings->width = VCM_DEFAULT_CODEC_WIDTH;
-      settings->height = VCM_DEFAULT_CODEC_HEIGHT;
-      settings->numberOfSimulcastStreams = 0;
-      settings->qpMax = 56;
-      settings->codecSpecific.VP9 = VideoEncoder::GetDefaultVp9Settings();
-      return true;
-    }
-#endif
 #ifdef VIDEOCODEC_H264
     case VCM_H264_IDX: {
       strncpy(settings->plName, "H264", 5);
@@ -397,13 +362,6 @@
         return true;
       }
       break;
-    case kVideoCodecVP9:
-      if (memcmp(&new_send_codec.codecSpecific.VP9,
-                 &send_codec_.codecSpecific.VP9,
-                 sizeof(new_send_codec.codecSpecific.VP9)) != 0) {
-        return true;
-      }
-      break;
     case kVideoCodecH264:
       if (memcmp(&new_send_codec.codecSpecific.H264,
                  &send_codec_.codecSpecific.H264,
@@ -677,10 +635,6 @@
     case kVideoCodecVP8:
       return new VCMGenericEncoder(*(VP8Encoder::Create()));
 #endif
-#ifdef VIDEOCODEC_VP9
-    case kVideoCodecVP9:
-      return new VCMGenericEncoder(*(VP9Encoder::Create()));
-#endif
 #ifdef VIDEOCODEC_I420
     case kVideoCodecI420:
       return new VCMGenericEncoder(*(new I420Encoder));
@@ -708,10 +662,6 @@
     case kVideoCodecVP8:
       return new VCMGenericDecoder(*(VP8Decoder::Create()));
 #endif
-#ifdef VIDEOCODEC_VP9
-    case kVideoCodecVP9:
-      return new VCMGenericDecoder(*(VP9Decoder::Create()));
-#endif
 #ifdef VIDEOCODEC_I420
     case kVideoCodecI420:
       return new VCMGenericDecoder(*(new I420Decoder));
diff --git a/webrtc/modules/video_coding/main/source/internal_defines.h b/webrtc/modules/video_coding/main/source/internal_defines.h
index adc940f..ef42c62 100644
--- a/webrtc/modules/video_coding/main/source/internal_defines.h
+++ b/webrtc/modules/video_coding/main/source/internal_defines.h
@@ -39,15 +39,10 @@
 #else
   #define VCM_VP8_IDX VCM_NO_CODEC_IDX
 #endif
-#ifdef VIDEOCODEC_VP9
-  #define VCM_VP9_IDX (VCM_VP8_IDX + 1)
-#else
-  #define VCM_VP9_IDX VCM_VP8_IDX
-#endif
 #ifdef VIDEOCODEC_H264
-  #define VCM_H264_IDX (VCM_VP9_IDX + 1)
+  #define VCM_H264_IDX (VCM_VP8_IDX + 1)
 #else
-  #define VCM_H264_IDX VCM_VP9_IDX
+  #define VCM_H264_IDX VCM_VP8_IDX
 #endif
 #ifdef VIDEOCODEC_I420
   #define VCM_I420_IDX (VCM_H264_IDX + 1)
diff --git a/webrtc/modules/video_coding/main/source/video_coding.gypi b/webrtc/modules/video_coding/main/source/video_coding.gypi
index 02c5a5c..f19a585 100644
--- a/webrtc/modules/video_coding/main/source/video_coding.gypi
+++ b/webrtc/modules/video_coding/main/source/video_coding.gypi
@@ -17,7 +17,6 @@
         '<(webrtc_root)/modules/video_coding/utility/video_coding_utility.gyp:video_coding_utility',
         '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
         '<(webrtc_vp8_dir)/vp8.gyp:webrtc_vp8',
-        '<(webrtc_vp9_dir)/vp9.gyp:webrtc_vp9',
       ],
       'sources': [
         # interfaces
diff --git a/webrtc/modules/video_coding/main/test/normal_test.cc b/webrtc/modules/video_coding/main/test/normal_test.cc
index 815c3ac..f23682b 100644
--- a/webrtc/modules/video_coding/main/test/normal_test.cc
+++ b/webrtc/modules/video_coding/main/test/normal_test.cc
@@ -101,9 +101,6 @@
     rtpInfo.type.Video.codecHeader.VP8.pictureId =
         videoHdr->codecHeader.VP8.pictureId;
     break;
-  case kVideoCodecVP9:
-    // Leave for now, until we add kRtpVideoVp9 to RTP.
-    break;
   default:
     assert(false);
     return -1;
diff --git a/webrtc/modules/video_coding/main/test/test_callbacks.cc b/webrtc/modules/video_coding/main/test/test_callbacks.cc
index d68f994..710a06e 100644
--- a/webrtc/modules/video_coding/main/test/test_callbacks.cc
+++ b/webrtc/modules/video_coding/main/test/test_callbacks.cc
@@ -82,9 +82,6 @@
         rtpInfo.type.Video.codecHeader.VP8.pictureId =
             videoHdr->codecHeader.VP8.pictureId;
         break;
-    case webrtc::kRtpVideoGeneric:
-      // Leave for now, until we add kRtpVideoVp9 to RTP.
-      break;
     default:
         assert(false);
         return -1;
diff --git a/webrtc/modules/video_coding/main/test/test_util.cc b/webrtc/modules/video_coding/main/test/test_util.cc
index d2b8f8c..09ad991 100644
--- a/webrtc/modules/video_coding/main/test/test_util.cc
+++ b/webrtc/modules/video_coding/main/test/test_util.cc
@@ -151,7 +151,6 @@
   if (strncmp(plname,"VP8" , 3) == 0) {
     return webrtc::kRtpVideoVp8;
   } else {
-    // Default value.
-    return webrtc::kRtpVideoGeneric;
+    return webrtc::kRtpVideoNone;  // Default value
   }
 }
diff --git a/webrtc/modules/video_coding/main/test/tester_main.cc b/webrtc/modules/video_coding/main/test/tester_main.cc
index 874fa9e..bf17ab2 100644
--- a/webrtc/modules/video_coding/main/test/tester_main.cc
+++ b/webrtc/modules/video_coding/main/test/tester_main.cc
@@ -63,8 +63,6 @@
   args.codecName = FLAGS_codec;
   if (args.codecName == "VP8") {
     args.codecType = kVideoCodecVP8;
-  } else if (args.codecName == "VP9") {
-    args.codecType = kVideoCodecVP9;
   } else if (args.codecName == "I420") {
     args.codecType = kVideoCodecI420;
   } else {
diff --git a/webrtc/video/call.cc b/webrtc/video/call.cc
index 38c3faa..f37e538 100644
--- a/webrtc/video/call.cc
+++ b/webrtc/video/call.cc
@@ -20,7 +20,6 @@
 #include "webrtc/config.h"
 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
-#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
 #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
@@ -47,8 +46,6 @@
   switch (codec_type) {
     case kVp8:
       return VP8Encoder::Create();
-    case kVp9:
-      return VP9Encoder::Create();
   }
   assert(false);
   return NULL;
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index c1969cd..0e87a03 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -19,9 +19,6 @@
 #include "webrtc/call.h"
 #include "webrtc/frame_callback.h"
 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
-#include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
-#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
-#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h"
 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
 #include "webrtc/system_wrappers/interface/event_wrapper.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
@@ -225,60 +222,6 @@
   DestroyStreams();
 }
 
-// TODO(marpan): Re-enable this test after adding more suppressions, or on the
-// next libvpx roll.
-TEST_F(EndToEndTest, DISABLED_SendsAndReceivesVP9) {
-  class VP9Observer : public test::EndToEndTest, public VideoRenderer {
-   public:
-    VP9Observer()
-        : EndToEndTest(2 * kDefaultTimeoutMs),
-          encoder_(VideoEncoder::Create(VideoEncoder::kVp9)),
-          decoder_(VP9Decoder::Create()),
-          frame_counter_(0) {}
-
-    virtual void PerformTest() OVERRIDE {
-      EXPECT_EQ(kEventSignaled, Wait())
-          << "Timed out while waiting for enough frames to be decoded.";
-    }
-
-    virtual void ModifyConfigs(
-        VideoSendStream::Config* send_config,
-        std::vector<VideoReceiveStream::Config>* receive_configs,
-        VideoEncoderConfig* encoder_config) OVERRIDE {
-      send_config->encoder_settings.encoder = encoder_.get();
-      send_config->encoder_settings.payload_name = "VP9";
-      send_config->encoder_settings.payload_type = VCM_VP9_PAYLOAD_TYPE;
-      encoder_config->streams[0].min_bitrate_bps = 50000;
-      encoder_config->streams[0].target_bitrate_bps =
-          encoder_config->streams[0].max_bitrate_bps = 2000000;
-
-      (*receive_configs)[0].renderer = this;
-      VideoCodec codec =
-          test::CreateDecoderVideoCodec(send_config->encoder_settings);
-      (*receive_configs)[0].codecs.resize(1);
-      (*receive_configs)[0].codecs[0] = codec;
-      (*receive_configs)[0].external_decoders.resize(1);
-      (*receive_configs)[0].external_decoders[0].payload_type =
-          send_config->encoder_settings.payload_type;
-      (*receive_configs)[0].external_decoders[0].decoder = decoder_.get();
-    }
-
-    virtual void RenderFrame(const I420VideoFrame& video_frame,
-                             int time_to_render_ms) OVERRIDE {
-      const int kRequiredFrames = 500;
-      if (++frame_counter_ == kRequiredFrames)
-        observation_complete_->Set();
-    }
-
-   private:
-    scoped_ptr<webrtc::VideoEncoder> encoder_;
-    scoped_ptr<webrtc::VideoDecoder> decoder_;
-    int frame_counter_;
-  } test;
-
-  RunBaseTest(&test);
-}
-
 TEST_F(EndToEndTest, SendsAndReceivesH264) {
   class H264Observer : public test::EndToEndTest, public VideoRenderer {
    public:
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index c695e53..6e8f238 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -305,8 +305,6 @@
   memset(&video_codec, 0, sizeof(video_codec));
   if (config_.encoder_settings.payload_name == "VP8") {
     video_codec.codecType = kVideoCodecVP8;
-  } else if (config_.encoder_settings.payload_name == "VP9") {
-    video_codec.codecType = kVideoCodecVP9;
   } else if (config_.encoder_settings.payload_name == "H264") {
     video_codec.codecType = kVideoCodecH264;
   } else {
@@ -323,8 +321,6 @@
 
   if (video_codec.codecType == kVideoCodecVP8) {
     video_codec.codecSpecific.VP8 = VideoEncoder::GetDefaultVp8Settings();
-  } else if (video_codec.codecType == kVideoCodecVP9) {
-    video_codec.codecSpecific.VP9 = VideoEncoder::GetDefaultVp9Settings();
   } else if (video_codec.codecType == kVideoCodecH264) {
     video_codec.codecSpecific.H264 = VideoEncoder::GetDefaultH264Settings();
   }
diff --git a/webrtc/video_encoder.h b/webrtc/video_encoder.h
index 2bf52f3..cbdf1ef 100644
--- a/webrtc/video_encoder.h
+++ b/webrtc/video_encoder.h
@@ -40,84 +40,28 @@
  public:
   enum EncoderType {
     kVp8,
-    kVp9,
   };
 
   static VideoEncoder* Create(EncoderType codec_type);
 
   static VideoCodecVP8 GetDefaultVp8Settings();
-  static VideoCodecVP9 GetDefaultVp9Settings();
   static VideoCodecH264 GetDefaultH264Settings();
 
   virtual ~VideoEncoder() {}
 
-  // Initialize the encoder with the information from the codecSettings
-  //
-  // Input:
-  //          - codec_settings    : Codec settings
-  //          - number_of_cores   : Number of cores available for the encoder
-  //          - max_payload_size  : The maximum size each payload is allowed
-  //                                to have. Usually MTU - overhead.
-  //
-  // Return value                  : Set bit rate if OK
-  //                                 <0 - Errors:
-  //                                  WEBRTC_VIDEO_CODEC_ERR_PARAMETER
-  //                                  WEBRTC_VIDEO_CODEC_ERR_SIZE
-  //                                  WEBRTC_VIDEO_CODEC_LEVEL_EXCEEDED
-  //                                  WEBRTC_VIDEO_CODEC_MEMORY
-  //                                  WEBRTC_VIDEO_CODEC_ERROR
   virtual int32_t InitEncode(const VideoCodec* codec_settings,
                              int32_t number_of_cores,
                              uint32_t max_payload_size) = 0;
-
-  // Register an encode complete callback object.
-  //
-  // Input:
-  //          - callback         : Callback object which handles encoded images.
-  //
-  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
   virtual int32_t RegisterEncodeCompleteCallback(
       EncodedImageCallback* callback) = 0;
-
-  // Free encoder memory.
-  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
   virtual int32_t Release() = 0;
 
-  // Encode an I420 image (as a part of a video stream). The encoded image
-  // will be returned to the user through the encode complete callback.
-  //
-  // Input:
-  //          - frame             : Image to be encoded
-  //          - frame_types       : Frame type to be generated by the encoder.
-  //
-  // Return value                 : WEBRTC_VIDEO_CODEC_OK if OK
-  //                                <0 - Errors:
-  //                                  WEBRTC_VIDEO_CODEC_ERR_PARAMETER
-  //                                  WEBRTC_VIDEO_CODEC_MEMORY
-  //                                  WEBRTC_VIDEO_CODEC_ERROR
-  //                                  WEBRTC_VIDEO_CODEC_TIMEOUT
+
   virtual int32_t Encode(const I420VideoFrame& frame,
                          const CodecSpecificInfo* codec_specific_info,
                          const std::vector<VideoFrameType>* frame_types) = 0;
 
-  // Inform the encoder of the new packet loss rate and the round-trip time of
-  // the network.
-  //
-  // Input:
-  //          - packet_loss : Fraction lost
-  //                          (loss rate in percent = 100 * packetLoss / 255)
-  //          - rtt         : Round-trip time in milliseconds
-  // Return value           : WEBRTC_VIDEO_CODEC_OK if OK
-  //                          <0 - Errors: WEBRTC_VIDEO_CODEC_ERROR
   virtual int32_t SetChannelParameters(uint32_t packet_loss, int rtt) = 0;
-
-  // Inform the encoder about the new target bit rate.
-  //
-  // Input:
-  //          - bitrate         : New target bit rate
-  //          - framerate       : The target frame rate
-  //
-  // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
   virtual int32_t SetRates(uint32_t bitrate, uint32_t framerate) = 0;
 
   virtual int32_t SetPeriodicKeyFrames(bool enable) { return -1; }
diff --git a/webrtc/video_engine/test/auto_test/source/vie_autotest.cc b/webrtc/video_engine/test/auto_test/source/vie_autotest.cc
index 41fafae..fb1a46f 100644
--- a/webrtc/video_engine/test/auto_test/source/vie_autotest.cc
+++ b/webrtc/video_engine/test/auto_test/source/vie_autotest.cc
@@ -98,9 +98,6 @@
         case webrtc::kVideoCodecVP8:
             ViETest::Log("\tcodecType: VP8");
             break;
-        case webrtc::kVideoCodecVP9:
-            ViETest::Log("\tcodecType: VP9");
-            break;
         case webrtc::kVideoCodecI420:
             ViETest::Log("\tcodecType: I420");
             break;
diff --git a/webrtc/video_engine/vie_codec_impl.cc b/webrtc/video_engine/vie_codec_impl.cc
index 0ef039d..f939a66 100644
--- a/webrtc/video_engine/vie_codec_impl.cc
+++ b/webrtc/video_engine/vie_codec_impl.cc
@@ -640,8 +640,6 @@
     return false;
   } else if ((video_codec.codecType == kVideoCodecVP8 &&
               strncmp(video_codec.plName, "VP8", 4) == 0) ||
-             (video_codec.codecType == kVideoCodecVP9 &&
-              strncmp(video_codec.plName, "VP9", 4) == 0) ||
              (video_codec.codecType == kVideoCodecI420 &&
               strncmp(video_codec.plName, "I420", 4) == 0) ||
              (video_codec.codecType == kVideoCodecH264 &&
diff --git a/webrtc/webrtc.gyp b/webrtc/webrtc.gyp
index f9ed883..2b24deb 100644
--- a/webrtc/webrtc.gyp
+++ b/webrtc/webrtc.gyp
@@ -36,7 +36,6 @@
       'video_engine/video_engine.gyp:*',
       'voice_engine/voice_engine.gyp:*',
       '<(webrtc_vp8_dir)/vp8.gyp:*',
-      '<(webrtc_vp9_dir)/vp9.gyp:*',
     ],
   },
   'targets': [