diff --git a/media/base/codec.cc b/media/base/codec.cc
index 9ada18f..5a67696 100644
--- a/media/base/codec.cc
+++ b/media/base/codec.cc
@@ -387,11 +387,10 @@
       FeedbackParam(kRtcpFbParamTransportCc, kParamValueEmpty));
 }
 
-const VideoCodec* FindMatchingCodec(
-    const std::vector<VideoCodec>& supported_codecs,
-    const VideoCodec& codec) {
+const Codec* FindMatchingVideoCodec(const std::vector<Codec>& supported_codecs,
+                                    const Codec& codec) {
   webrtc::SdpVideoFormat sdp_video_format{codec.name, codec.params};
-  for (const VideoCodec& supported_codec : supported_codecs) {
+  for (const Codec& supported_codec : supported_codecs) {
     if (sdp_video_format.IsSameCodec(
             {supported_codec.name, supported_codec.params})) {
       return &supported_codec;
@@ -400,12 +399,12 @@
   return nullptr;
 }
 
-std::vector<const VideoCodec*> FindAllMatchingCodecs(
-    const std::vector<VideoCodec>& supported_codecs,
-    const VideoCodec& codec) {
-  std::vector<const VideoCodec*> result;
+std::vector<const Codec*> FindAllMatchingCodecs(
+    const std::vector<Codec>& supported_codecs,
+    const Codec& codec) {
+  std::vector<const Codec*> result;
   webrtc::SdpVideoFormat sdp(codec.name, codec.params);
-  for (const VideoCodec& supported_codec : supported_codecs) {
+  for (const Codec& supported_codec : supported_codecs) {
     if (sdp.IsSameCodec({supported_codec.name, supported_codec.params})) {
       result.push_back(&supported_codec);
     }
diff --git a/media/base/codec.h b/media/base/codec.h
index b8ef22e..53b674f 100644
--- a/media/base/codec.h
+++ b/media/base/codec.h
@@ -217,14 +217,13 @@
 
 // Returns the first codec in `supported_codecs` that matches `codec`, or
 // nullptr if no codec matches.
-const VideoCodec* FindMatchingCodec(
-    const std::vector<VideoCodec>& supported_codecs,
-    const VideoCodec& codec);
+const Codec* FindMatchingVideoCodec(const std::vector<Codec>& supported_codecs,
+                                    const Codec& codec);
 
 // Returns all codecs in `supported_codecs` that matches `codec`.
-std::vector<const VideoCodec*> FindAllMatchingCodecs(
-    const std::vector<VideoCodec>& supported_codecs,
-    const VideoCodec& codec);
+std::vector<const Codec*> FindAllMatchingCodecs(
+    const std::vector<Codec>& supported_codecs,
+    const Codec& codec);
 
 RTC_EXPORT void AddH264ConstrainedBaselineProfileToSupportedFormats(
     std::vector<webrtc::SdpVideoFormat>* supported_formats);
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 70bcb07..fad0f4f 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2679,7 +2679,7 @@
                                         /*is_decoder_factory=*/true,
                                         /*include_rtx=*/true, call_->trials());
     for (const VideoCodecSettings& mapped_codec : mapped_codecs) {
-      if (!FindMatchingCodec(local_supported_codecs, mapped_codec.codec)) {
+      if (!FindMatchingVideoCodec(local_supported_codecs, mapped_codec.codec)) {
         RTC_LOG(LS_ERROR) << "GetChangedReceiverParameters called with "
                              "unsupported video codec: "
                           << mapped_codec.codec.ToString();
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 2c44c47..0f416aa 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -722,16 +722,17 @@
   // Now search for RTX codecs for them. Expect that they all have associated
   // RTX codecs.
   EXPECT_TRUE(HasRtxCodec(
-      codecs, FindMatchingCodec(
+      codecs, FindMatchingVideoCodec(
                   codecs, cricket::CreateVideoCodec(h264_constrained_baseline))
                   ->id));
   EXPECT_TRUE(HasRtxCodec(
-      codecs, FindMatchingCodec(
+      codecs, FindMatchingVideoCodec(
                   codecs, cricket::CreateVideoCodec(h264_constrained_high))
                   ->id));
   EXPECT_TRUE(HasRtxCodec(
       codecs,
-      FindMatchingCodec(codecs, cricket::CreateVideoCodec(h264_high))->id));
+      FindMatchingVideoCodec(codecs, cricket::CreateVideoCodec(h264_high))
+          ->id));
 }
 
 #if defined(RTC_ENABLE_VP9)
diff --git a/pc/media_session.cc b/pc/media_session.cc
index 53c422f..4f74870 100644
--- a/pc/media_session.cc
+++ b/pc/media_session.cc
@@ -440,12 +440,11 @@
 // Adds a StreamParams for each SenderOptions in `sender_options` to
 // content_description.
 // `current_params` - All currently known StreamParams of any media type.
-template <class C>
 static bool AddStreamParams(const std::vector<SenderOptions>& sender_options,
                             const std::string& rtcp_cname,
                             UniqueRandomIdGenerator* ssrc_generator,
                             StreamParamsVec* current_streams,
-                            MediaContentDescriptionImpl<C>* content_description,
+                            MediaContentDescription* content_description,
                             const webrtc::FieldTrialsView& field_trials) {
   // SCTP streams are not negotiated using SDP/ContentDescriptions.
   if (IsSctpProtocol(content_description->protocol())) {
@@ -712,18 +711,18 @@
   }
   return true;
 }
-template <class C>
+
 static bool CreateMediaContentOffer(
     const MediaDescriptionOptions& media_description_options,
     const MediaSessionOptions& session_options,
-    const std::vector<C>& codecs,
+    const std::vector<Codec>& codecs,
     const SecurePolicy& secure_policy,
     const CryptoParamsVec* current_cryptos,
     const std::vector<std::string>& crypto_suites,
     const RtpHeaderExtensions& rtp_extensions,
     UniqueRandomIdGenerator* ssrc_generator,
     StreamParamsVec* current_streams,
-    MediaContentDescriptionImpl<C>* offer,
+    MediaContentDescription* offer,
     const webrtc::FieldTrialsView& field_trials) {
   offer->AddCodecs(codecs);
   if (!AddStreamParams(media_description_options.sender_options,
@@ -1365,17 +1364,16 @@
                       audio_codecs->end());
 }
 
-template <class C>
 static bool SetCodecsInAnswer(
-    const MediaContentDescriptionImpl<C>* offer,
-    const std::vector<C>& local_codecs,
+    const MediaContentDescription* offer,
+    const std::vector<Codec>& local_codecs,
     const MediaDescriptionOptions& media_description_options,
     const MediaSessionOptions& session_options,
     UniqueRandomIdGenerator* ssrc_generator,
     StreamParamsVec* current_streams,
-    MediaContentDescriptionImpl<C>* answer,
+    MediaContentDescription* answer,
     const webrtc::FieldTrialsView& field_trials) {
-  std::vector<C> negotiated_codecs;
+  std::vector<Codec> negotiated_codecs;
   NegotiateCodecs(local_codecs, offer->codecs(), &negotiated_codecs,
                   media_description_options.codec_preferences.empty(),
                   &field_trials);
