diff --git a/webrtc/media/base/mediaengine.h b/webrtc/media/base/mediaengine.h
index edf0cb0..d1d1623 100644
--- a/webrtc/media/base/mediaengine.h
+++ b/webrtc/media/base/mediaengine.h
@@ -74,7 +74,7 @@
   virtual const std::vector<AudioCodec>& audio_send_codecs() = 0;
   virtual const std::vector<AudioCodec>& audio_recv_codecs() = 0;
   virtual RtpCapabilities GetAudioCapabilities() = 0;
-  virtual const std::vector<VideoCodec> video_codecs() = 0;
+  virtual const std::vector<VideoCodec>& video_codecs() = 0;
   virtual RtpCapabilities GetVideoCapabilities() = 0;
 
   // Starts AEC dump using existing file, a maximum file size in bytes can be
@@ -147,7 +147,7 @@
   virtual RtpCapabilities GetAudioCapabilities() {
     return voice_.GetCapabilities();
   }
-  virtual const std::vector<VideoCodec> video_codecs() {
+  virtual const std::vector<VideoCodec>& video_codecs() {
     return video_.codecs();
   }
   virtual RtpCapabilities GetVideoCapabilities() {
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index dfdae5e..3cacc7d 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -543,6 +543,7 @@
       external_decoder_factory_(NULL),
       external_encoder_factory_(NULL) {
   LOG(LS_INFO) << "WebRtcVideoEngine2::WebRtcVideoEngine2()";
+  video_codecs_ = GetSupportedCodecs(external_encoder_factory_);
 }
 
 WebRtcVideoEngine2::~WebRtcVideoEngine2() {
@@ -565,8 +566,8 @@
                                  external_decoder_factory_);
 }
 
-const std::vector<VideoCodec> WebRtcVideoEngine2::codecs() const {
-  return GetSupportedCodecs(external_encoder_factory_);
+const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const {
+  return video_codecs_;
 }
 
 RtpCapabilities WebRtcVideoEngine2::GetCapabilities() const {
@@ -613,6 +614,8 @@
     encoder_factory = simulcast_encoder_factory_.get();
   }
   external_encoder_factory_ = encoder_factory;
+
+  video_codecs_ = GetSupportedCodecs(encoder_factory);
 }
 
 static std::vector<VideoCodec> GetSupportedCodecs(
diff --git a/webrtc/media/engine/webrtcvideoengine2.h b/webrtc/media/engine/webrtcvideoengine2.h
index 1032e9c..ef893d2 100644
--- a/webrtc/media/engine/webrtcvideoengine2.h
+++ b/webrtc/media/engine/webrtcvideoengine2.h
@@ -105,7 +105,7 @@
                                      const MediaConfig& config,
                                      const VideoOptions& options);
 
-  const std::vector<VideoCodec> codecs() const;
+  const std::vector<VideoCodec>& codecs() const;
   RtpCapabilities GetCapabilities() const;
 
   // Set a WebRtcVideoDecoderFactory for external decoding. Video engine does
@@ -119,6 +119,8 @@
       WebRtcVideoEncoderFactory* encoder_factory);
 
  private:
+  std::vector<VideoCodec> video_codecs_;
+
   bool initialized_;
 
   WebRtcVideoDecoderFactory* external_decoder_factory_;
diff --git a/webrtc/pc/channelmanager.cc b/webrtc/pc/channelmanager.cc
index fb6f44f..06475e9 100644
--- a/webrtc/pc/channelmanager.cc
+++ b/webrtc/pc/channelmanager.cc
@@ -29,9 +29,6 @@
 
 namespace cricket {
 
-static bool IsRtxCodec(const VideoCodec& codec) {
-  return _stricmp(kRtxCodecName, codec.name.c_str()) == 0;
-}
 
 using rtc::Bind;
 
@@ -140,13 +137,18 @@
   *ext = media_engine_->GetAudioCapabilities().header_extensions;
 }
 
-std::vector<VideoCodec> ChannelManager::GetSupportedVideoCodecs() const {
-  std::vector<VideoCodec> codecs = media_engine_->video_codecs();
-  if (!enable_rtx_) {
-    codecs.erase(std::remove_if(codecs.begin(), codecs.end(), &IsRtxCodec),
-                 codecs.end());
+void ChannelManager::GetSupportedVideoCodecs(
+    std::vector<VideoCodec>* codecs) const {
+  codecs->clear();
+
+  std::vector<VideoCodec>::const_iterator it;
+  for (it = media_engine_->video_codecs().begin();
+      it != media_engine_->video_codecs().end(); ++it) {
+    if (!enable_rtx_ && _stricmp(kRtxCodecName, it->name.c_str()) == 0) {
+      continue;
+    }
+    codecs->push_back(*it);
   }
-  return codecs;
 }
 
 void ChannelManager::GetSupportedVideoRtpHeaderExtensions(
diff --git a/webrtc/pc/channelmanager.h b/webrtc/pc/channelmanager.h
index 68b1ab2..15a3752 100644
--- a/webrtc/pc/channelmanager.h
+++ b/webrtc/pc/channelmanager.h
@@ -75,7 +75,7 @@
   void GetSupportedAudioSendCodecs(std::vector<AudioCodec>* codecs) const;
   void GetSupportedAudioReceiveCodecs(std::vector<AudioCodec>* codecs) const;
   void GetSupportedAudioRtpHeaderExtensions(RtpHeaderExtensions* ext) const;
-  std::vector<VideoCodec> GetSupportedVideoCodecs() const;
+  void GetSupportedVideoCodecs(std::vector<VideoCodec>* codecs) const;
   void GetSupportedVideoRtpHeaderExtensions(RtpHeaderExtensions* ext) const;
   void GetSupportedDataCodecs(std::vector<DataCodec>* codecs) const;
 
diff --git a/webrtc/pc/channelmanager_unittest.cc b/webrtc/pc/channelmanager_unittest.cc
index 34b347b..174d064 100644
--- a/webrtc/pc/channelmanager_unittest.cc
+++ b/webrtc/pc/channelmanager_unittest.cc
@@ -173,17 +173,17 @@
   const VideoCodec rtx_codec(96, "rtx");
 
   // By default RTX is disabled.
-  codecs = cm_->GetSupportedVideoCodecs();
+  cm_->GetSupportedVideoCodecs(&codecs);
   EXPECT_FALSE(ContainsMatchingCodec(codecs, rtx_codec));
 
   // Enable and check.
   EXPECT_TRUE(cm_->SetVideoRtxEnabled(true));
-  codecs = cm_->GetSupportedVideoCodecs();
+  cm_->GetSupportedVideoCodecs(&codecs);
   EXPECT_TRUE(ContainsMatchingCodec(codecs, rtx_codec));
 
   // Disable and check.
   EXPECT_TRUE(cm_->SetVideoRtxEnabled(false));
-  codecs = cm_->GetSupportedVideoCodecs();
+  cm_->GetSupportedVideoCodecs(&codecs);
   EXPECT_FALSE(ContainsMatchingCodec(codecs, rtx_codec));
 
   // Cannot toggle rtx after initialization.
@@ -194,7 +194,7 @@
   // Can set again after terminate.
   cm_->Terminate();
   EXPECT_TRUE(cm_->SetVideoRtxEnabled(true));
-  codecs = cm_->GetSupportedVideoCodecs();
+  cm_->GetSupportedVideoCodecs(&codecs);
   EXPECT_TRUE(ContainsMatchingCodec(codecs, rtx_codec));
 }
 
diff --git a/webrtc/pc/mediasession.cc b/webrtc/pc/mediasession.cc
index 0ebc766..ebba9ac 100644
--- a/webrtc/pc/mediasession.cc
+++ b/webrtc/pc/mediasession.cc
@@ -1274,7 +1274,7 @@
   channel_manager->GetSupportedAudioReceiveCodecs(&audio_recv_codecs_);
   channel_manager->GetSupportedAudioSendCodecs(&audio_send_codecs_);
   channel_manager->GetSupportedAudioRtpHeaderExtensions(&audio_rtp_extensions_);
-  video_codecs_ = channel_manager->GetSupportedVideoCodecs();
+  channel_manager->GetSupportedVideoCodecs(&video_codecs_);
   channel_manager->GetSupportedVideoRtpHeaderExtensions(&video_rtp_extensions_);
   channel_manager->GetSupportedDataCodecs(&data_codecs_);
   NegotiateCodecs(audio_recv_codecs_, audio_send_codecs_,
