diff --git a/talk/media/base/fakemediaengine.h b/talk/media/base/fakemediaengine.h
index 18511dc..49efe0f 100644
--- a/talk/media/base/fakemediaengine.h
+++ b/talk/media/base/fakemediaengine.h
@@ -778,7 +778,6 @@
   }
   bool Init(rtc::Thread* worker_thread) { return true; }
   void Terminate() {}
-  int GetCapabilities() { return AUDIO_SEND | AUDIO_RECV; }
   webrtc::VoiceEngine* GetVoE() { return nullptr; }
   AudioOptions GetOptions() const {
     return options_;
@@ -861,7 +860,6 @@
     options_changed_ = true;
     return true;
   }
-  int GetCapabilities() { return VIDEO_SEND | VIDEO_RECV; }
   bool SetDefaultEncoderConfig(const VideoEncoderConfig& config) {
     default_encoder_config_ = config;
     return true;
diff --git a/talk/media/base/mediaengine.h b/talk/media/base/mediaengine.h
index 68536ed..d739804 100644
--- a/talk/media/base/mediaengine.h
+++ b/talk/media/base/mediaengine.h
@@ -74,8 +74,6 @@
   virtual bool Init(rtc::Thread* worker_thread) = 0;
   // Shuts down the engine.
   virtual void Terminate() = 0;
-  // Returns what the engine is capable of, as a set of Capabilities, above.
-  virtual int GetCapabilities() = 0;
   // TODO(solenberg): Remove once VoE API refactoring is done.
   virtual webrtc::VoiceEngine* GetVoE() = 0;
 
@@ -166,9 +164,6 @@
     voice_.Terminate();
   }
 
-  virtual int GetCapabilities() {
-    return (voice_.GetCapabilities() | video_.GetCapabilities());
-  }
   virtual webrtc::VoiceEngine* GetVoE() {
     return voice_.GetVoE();
   }
@@ -244,7 +239,6 @@
  public:
   bool Init(rtc::Thread* worker_thread) { return true; }
   void Terminate() {}
-  int GetCapabilities() { return 0; }
   // If you need this to return an actual channel, use FakeMediaEngine instead.
   VoiceMediaChannel* CreateChannel(const AudioOptions& options) {
     return nullptr;
@@ -279,7 +273,6 @@
  public:
   bool Init(rtc::Thread* worker_thread) { return true; }
   void Terminate() {}
-  int GetCapabilities() { return 0; }
   // If you need this to return an actual channel, use FakeMediaEngine instead.
   VideoMediaChannel* CreateChannel(
       const VideoOptions& options,
diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc
index 7cd5c06..dacab41 100644
--- a/talk/media/webrtc/webrtcvideoengine2.cc
+++ b/talk/media/webrtc/webrtcvideoengine2.cc
@@ -572,8 +572,6 @@
   initialized_ = true;
 }
 
-int WebRtcVideoEngine2::GetCapabilities() { return VIDEO_RECV | VIDEO_SEND; }
-
 bool WebRtcVideoEngine2::SetDefaultEncoderConfig(
     const VideoEncoderConfig& config) {
   const VideoCodec& codec = config.max_codec;
diff --git a/talk/media/webrtc/webrtcvideoengine2.h b/talk/media/webrtc/webrtcvideoengine2.h
index acd9a1b..f438aa0 100644
--- a/talk/media/webrtc/webrtcvideoengine2.h
+++ b/talk/media/webrtc/webrtcvideoengine2.h
@@ -112,7 +112,6 @@
   // Basic video engine implementation.
   void Init();
 
-  int GetCapabilities();
   bool SetDefaultEncoderConfig(const VideoEncoderConfig& config);
 
   WebRtcVideoChannel2* CreateChannel(webrtc::Call* call,
diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc
index f4b5ab3..214059a 100644
--- a/talk/media/webrtc/webrtcvoiceengine.cc
+++ b/talk/media/webrtc/webrtcvoiceengine.cc
@@ -563,10 +563,6 @@
   voe_wrapper_->base()->Terminate();
 }
 
-int WebRtcVoiceEngine::GetCapabilities() {
-  return AUDIO_SEND | AUDIO_RECV;
-}
-
 VoiceMediaChannel* WebRtcVoiceEngine::CreateChannel(webrtc::Call* call,
     const AudioOptions& options) {
   WebRtcVoiceMediaChannel* ch =
diff --git a/talk/media/webrtc/webrtcvoiceengine.h b/talk/media/webrtc/webrtcvoiceengine.h
index 19fefce..e8edfb1 100644
--- a/talk/media/webrtc/webrtcvoiceengine.h
+++ b/talk/media/webrtc/webrtcvoiceengine.h
@@ -70,7 +70,6 @@
   bool Init(rtc::Thread* worker_thread);
   void Terminate();
 
-  int GetCapabilities();
   webrtc::VoiceEngine* GetVoE() { return voe()->engine(); }
   VoiceMediaChannel* CreateChannel(webrtc::Call* call,
                                    const AudioOptions& options);
diff --git a/talk/session/media/channelmanager.cc b/talk/session/media/channelmanager.cc
index 97978a6..41819b7 100644
--- a/talk/session/media/channelmanager.cc
+++ b/talk/session/media/channelmanager.cc
@@ -144,10 +144,6 @@
   }
 }
 
-int ChannelManager::GetCapabilities() {
-  return media_engine_->GetCapabilities();
-}
-
 void ChannelManager::GetSupportedAudioCodecs(
     std::vector<AudioCodec>* codecs) const {
   codecs->clear();
diff --git a/talk/session/media/channelmanager.h b/talk/session/media/channelmanager.h
index cb4559c..8545cdc 100644
--- a/talk/session/media/channelmanager.h
+++ b/talk/session/media/channelmanager.h
@@ -83,9 +83,6 @@
 
   MediaEngineInterface* media_engine() { return media_engine_.get(); }
 
-  // Gets capabilities. Can be called prior to starting the media engine.
-  int GetCapabilities();
-
   // Retrieves the list of supported audio & video codec types.
   // Can be called before starting the media engine.
   void GetSupportedAudioCodecs(std::vector<AudioCodec>* codecs) const;
