| Index: webrtc/media/base/codec.cc
 | 
| diff --git a/webrtc/media/base/codec.cc b/webrtc/media/base/codec.cc
 | 
| index 66bc9ff7d9d0a44f5129707c2cea06172cfe79f8..0320e58c722a9245661c257af27de37159318044 100644
 | 
| --- a/webrtc/media/base/codec.cc
 | 
| +++ b/webrtc/media/base/codec.cc
 | 
| @@ -17,10 +17,20 @@
 | 
|  #include "webrtc/base/logging.h"
 | 
|  #include "webrtc/base/stringencode.h"
 | 
|  #include "webrtc/base/stringutils.h"
 | 
| +#include "webrtc/common_video/h264/profile_level_id.h"
 | 
|  
 | 
|  namespace cricket {
 | 
|  
 | 
| -const int kMaxPayloadId = 127;
 | 
| +static bool IsSameH264Profile(const CodecParameterMap& params1,
 | 
| +                              const CodecParameterMap& params2) {
 | 
| +  const rtc::Optional<webrtc::H264::ProfileLevelId> profile_level_id =
 | 
| +      webrtc::H264::ParseSdpProfileLevelId(params1);
 | 
| +  const rtc::Optional<webrtc::H264::ProfileLevelId> other_profile_level_id =
 | 
| +      webrtc::H264::ParseSdpProfileLevelId(params2);
 | 
| +  // Compare H264 profiles, but not levels.
 | 
| +  return profile_level_id && other_profile_level_id &&
 | 
| +         profile_level_id->profile == other_profile_level_id->profile;
 | 
| +}
 | 
|  
 | 
|  bool FeedbackParam::operator==(const FeedbackParam& other) const {
 | 
|    return _stricmp(other.id().c_str(), id().c_str()) == 0 &&
 | 
| @@ -218,6 +228,14 @@ bool VideoCodec::operator==(const VideoCodec& c) const {
 | 
|    return Codec::operator==(c);
 | 
|  }
 | 
|  
 | 
| +bool VideoCodec::Matches(const VideoCodec& other) const {
 | 
| +  if (!Codec::Matches(other))
 | 
| +    return false;
 | 
| +  if (CodecNamesEq(name.c_str(), kH264CodecName))
 | 
| +    return IsSameH264Profile(params, other.params);
 | 
| +  return true;
 | 
| +}
 | 
| +
 | 
|  VideoCodec VideoCodec::CreateRtxCodec(int rtx_payload_type,
 | 
|                                        int associated_payload_type) {
 | 
|    VideoCodec rtx_codec(rtx_payload_type, kRtxCodecName);
 | 
| @@ -317,12 +335,19 @@ webrtc::VideoCodecType CodecTypeFromName(const std::string& name) {
 | 
|    return webrtc::kVideoCodecUnknown;
 | 
|  }
 | 
|  
 | 
| -bool IsCodecSupported(const std::vector<VideoCodec>& supported_codecs,
 | 
| -                      const VideoCodec& codec) {
 | 
| -  return std::any_of(supported_codecs.begin(), supported_codecs.end(),
 | 
| -                     [&codec](const VideoCodec& supported_codec) -> bool {
 | 
| -                       return CodecNamesEq(codec.name, supported_codec.name);
 | 
| -                     });
 | 
| +const VideoCodec* FindMatchingCodec(
 | 
| +    const std::vector<VideoCodec>& supported_codecs,
 | 
| +    const VideoCodec& codec) {
 | 
| +  for (const VideoCodec& supported_codec : supported_codecs) {
 | 
| +    if (!CodecNamesEq(codec.name, supported_codec.name))
 | 
| +      continue;
 | 
| +    if (CodecNamesEq(codec.name.c_str(), kH264CodecName) &&
 | 
| +        !IsSameH264Profile(codec.params, supported_codec.params)) {
 | 
| +      continue;
 | 
| +    }
 | 
| +    return &supported_codec;
 | 
| +  }
 | 
| +  return nullptr;
 | 
|  }
 | 
|  
 | 
|  }  // namespace cricket
 | 
| 
 |