Use Abseil container algorithms in media/

Bug: None
Change-Id: I292e3401bbf19a66271dd5ef2b3ca4f8dcfd155d
Reviewed-on: https://webrtc-review.googlesource.com/c/120003
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Seth Hampson <shampson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26434}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 2359ebc..6a24aba 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -136,6 +136,7 @@
     "units:data_rate",
     "video:encoded_image",
     "video:video_frame",
+    "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/types:optional",
 
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 8c05cc5..e703abb 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -143,6 +143,7 @@
     "../rtc_base:rtc_base_approved",
     "../rtc_base/system:rtc_export",
     "../rtc_base/third_party/sigslot",
+    "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/types:optional",
   ]
@@ -369,6 +370,7 @@
     "../rtc_base/experiments:field_trial_parser",
     "../rtc_base/experiments:normalize_simulcast_size_experiment",
     "../system_wrappers",
+    "//third_party/abseil-cpp/absl/algorithm:container",
     "//third_party/abseil-cpp/absl/memory",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/types:optional",
@@ -416,6 +418,7 @@
     "../rtc_base:rtc_base_approved",
     "../rtc_base/third_party/sigslot",
     "../system_wrappers",
+    "//third_party/abseil-cpp/absl/algorithm:container",
   ]
 }
 
@@ -453,6 +456,7 @@
       "../rtc_base:gunit_helpers",
       "../rtc_base:rtc_task_queue",
       "../rtc_base:stringutils",
+      "//third_party/abseil-cpp/absl/algorithm:container",
       "//third_party/abseil-cpp/absl/memory",
       "//third_party/abseil-cpp/absl/strings",
     ]
@@ -652,6 +656,7 @@
       "../test:audio_codec_mocks",
       "../test:test_support",
       "../test:video_test_common",
+      "//third_party/abseil-cpp/absl/algorithm:container",
     ]
   }
 }
diff --git a/media/base/codec.cc b/media/base/codec.cc
index 805a79e..16ef65d 100644
--- a/media/base/codec.cc
+++ b/media/base/codec.cc
@@ -10,8 +10,7 @@
 
 #include "media/base/codec.h"
 
-#include <algorithm>
-
+#include "absl/algorithm/container.h"
 #include "absl/strings/match.h"
 #include "media/base/h264_profile_level_id.h"
 #include "media/base/vp9_profile.h"
@@ -35,7 +34,7 @@
 }
 
 bool FeedbackParams::Has(const FeedbackParam& param) const {
-  return std::find(params_.begin(), params_.end(), param) != params_.end();
+  return absl::c_linear_search(params_, param);
 }
 
 void FeedbackParams::Add(const FeedbackParam& param) {
diff --git a/media/base/fake_media_engine.cc b/media/base/fake_media_engine.cc
index ab8ce99..70fabc5 100644
--- a/media/base/fake_media_engine.cc
+++ b/media/base/fake_media_engine.cc
@@ -12,6 +12,7 @@
 
 #include <utility>
 
+#include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
 #include "absl/strings/match.h"
 #include "rtc_base/checks.h"
@@ -482,7 +483,7 @@
   return (channels_.size() > index) ? channels_[index] : NULL;
 }
 void FakeVoiceEngine::UnregisterChannel(VoiceMediaChannel* channel) {
-  channels_.erase(std::find(channels_.begin(), channels_.end(), channel));
+  channels_.erase(absl::c_find(channels_, channel));
 }
 const std::vector<AudioCodec>& FakeVoiceEngine::send_codecs() const {
   return codecs_;
@@ -537,7 +538,7 @@
   return (channels_.size() > index) ? channels_[index] : nullptr;
 }
 void FakeVideoEngine::UnregisterChannel(VideoMediaChannel* channel) {
-  auto it = std::find(channels_.begin(), channels_.end(), channel);
+  auto it = absl::c_find(channels_, channel);
   RTC_DCHECK(it != channels_.end());
   channels_.erase(it);
 }
@@ -586,7 +587,7 @@
   return (channels_.size() > index) ? channels_[index] : NULL;
 }
 void FakeDataEngine::UnregisterChannel(DataMediaChannel* channel) {
-  channels_.erase(std::find(channels_.begin(), channels_.end(), channel));
+  channels_.erase(absl::c_find(channels_, channel));
 }
 void FakeDataEngine::SetDataCodecs(const std::vector<DataCodec>& data_codecs) {
   data_codecs_ = data_codecs;
diff --git a/media/base/fake_media_engine.h b/media/base/fake_media_engine.h
index ff8f44d..564b0da 100644
--- a/media/base/fake_media_engine.h
+++ b/media/base/fake_media_engine.h
@@ -19,6 +19,7 @@
 #include <tuple>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "api/call/audio_sink.h"
 #include "media/base/audio_source.h"
 #include "media/base/media_engine.h"
@@ -101,8 +102,7 @@
   void set_fail_set_send_codecs(bool fail) { fail_set_send_codecs_ = fail; }
   void set_fail_set_recv_codecs(bool fail) { fail_set_recv_codecs_ = fail; }
   virtual bool AddSendStream(const StreamParams& sp) {
-    if (std::find(send_streams_.begin(), send_streams_.end(), sp) !=
-        send_streams_.end()) {
+    if (absl::c_linear_search(send_streams_, sp)) {
       return false;
     }
     send_streams_.push_back(sp);
@@ -118,8 +118,7 @@
     return RemoveStreamBySsrc(&send_streams_, ssrc);
   }
   virtual bool AddRecvStream(const StreamParams& sp) {
-    if (std::find(receive_streams_.begin(), receive_streams_.end(), sp) !=
-        receive_streams_.end()) {
+    if (absl::c_linear_search(receive_streams_, sp)) {
       return false;
     }
     receive_streams_.push_back(sp);
diff --git a/media/base/fake_rtp.cc b/media/base/fake_rtp.cc
index 751766e..175de6f 100644
--- a/media/base/fake_rtp.cc
+++ b/media/base/fake_rtp.cc
@@ -10,8 +10,8 @@
 
 #include <stdint.h>
 #include <string.h>
-#include <algorithm>
 
+#include "absl/algorithm/container.h"
 #include "media/base/fake_rtp.h"
 #include "rtc_base/checks.h"
 #include "test/gtest.h"
@@ -53,9 +53,7 @@
 
     // The header extension doesn't get encrypted if the id is not in the
     // list of header extensions to encrypt.
-    if (expect_equal ||
-        std::find(encrypted_headers.begin(), encrypted_headers.end(), id) ==
-            encrypted_headers.end()) {
+    if (expect_equal || !absl::c_linear_search(encrypted_headers, id)) {
       EXPECT_EQ(0, memcmp(extension_data1, extension_data2, len));
     } else {
       EXPECT_NE(0, memcmp(extension_data1, extension_data2, len));
diff --git a/media/base/stream_params.cc b/media/base/stream_params.cc
index 329aa30..0545f75 100644
--- a/media/base/stream_params.cc
+++ b/media/base/stream_params.cc
@@ -11,9 +11,9 @@
 #include "media/base/stream_params.h"
 
 #include <stdint.h>
-#include <algorithm>
 #include <list>
 
+#include "absl/algorithm/container.h"
 #include "api/array_view.h"
 #include "rtc_base/strings/string_builder.h"
 
@@ -153,8 +153,7 @@
           ssrc_groups == other.ssrc_groups && cname == other.cname &&
           stream_ids_ == other.stream_ids_ &&
           // RIDs are not required to be in the same order for equality.
-          rids_.size() == other.rids_.size() &&
-          std::is_permutation(rids_.begin(), rids_.end(), other.rids_.begin()));
+          absl::c_is_permutation(rids_, other.rids_));
 }
 
 std::string StreamParams::ToString() const {
@@ -328,8 +327,7 @@
 
 namespace {
 void RemoveFirst(std::list<uint32_t>* ssrcs, uint32_t value) {
-  std::list<uint32_t>::iterator it =
-      std::find(ssrcs->begin(), ssrcs->end(), value);
+  auto it = absl::c_find(*ssrcs, value);
   if (it != ssrcs->end()) {
     ssrcs->erase(it);
   }
diff --git a/media/base/stream_params.h b/media/base/stream_params.h
index de567d0..c69f423 100644
--- a/media/base/stream_params.h
+++ b/media/base/stream_params.h
@@ -47,11 +47,11 @@
 #define MEDIA_BASE_STREAM_PARAMS_H_
 
 #include <stddef.h>
-#include <algorithm>
 #include <cstdint>
 #include <string>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "media/base/rid_description.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/unique_id_generator.h"
@@ -114,7 +114,7 @@
   }
   bool has_ssrcs() const { return !ssrcs.empty(); }
   bool has_ssrc(uint32_t ssrc) const {
-    return std::find(ssrcs.begin(), ssrcs.end(), ssrc) != ssrcs.end();
+    return absl::c_linear_search(ssrcs, ssrc);
   }
   void add_ssrc(uint32_t ssrc) { ssrcs.push_back(ssrc); }
   bool has_ssrc_groups() const { return !ssrc_groups.empty(); }
@@ -296,15 +296,13 @@
 template <class Condition>
 const StreamParams* GetStream(const StreamParamsVec& streams,
                               Condition condition) {
-  StreamParamsVec::const_iterator found =
-      std::find_if(streams.begin(), streams.end(), condition);
+  auto found = absl::c_find_if(streams, condition);
   return found == streams.end() ? nullptr : &(*found);
 }
 
 template <class Condition>
 StreamParams* GetStream(StreamParamsVec& streams, Condition condition) {
-  StreamParamsVec::iterator found =
-      std::find_if(streams.begin(), streams.end(), condition);
+  auto found = absl::c_find_if(streams, condition);
   return found == streams.end() ? nullptr : &(*found);
 }
 
diff --git a/media/base/video_source_base.cc b/media/base/video_source_base.cc
index 71b4276..d057a24 100644
--- a/media/base/video_source_base.cc
+++ b/media/base/video_source_base.cc
@@ -10,8 +10,7 @@
 
 #include "media/base/video_source_base.h"
 
-#include <algorithm>
-
+#include "absl/algorithm/container.h"
 #include "rtc_base/checks.h"
 
 namespace rtc {
@@ -44,8 +43,8 @@
 
 VideoSourceBase::SinkPair* VideoSourceBase::FindSinkPair(
     const VideoSinkInterface<webrtc::VideoFrame>* sink) {
-  auto sink_pair_it = std::find_if(
-      sinks_.begin(), sinks_.end(),
+  auto sink_pair_it = absl::c_find_if(
+      sinks_,
       [sink](const SinkPair& sink_pair) { return sink_pair.sink == sink; });
   if (sink_pair_it != sinks_.end()) {
     return &*sink_pair_it;
diff --git a/media/engine/fake_webrtc_call.cc b/media/engine/fake_webrtc_call.cc
index c223064..4dd3b39 100644
--- a/media/engine/fake_webrtc_call.cc
+++ b/media/engine/fake_webrtc_call.cc
@@ -10,9 +10,9 @@
 
 #include "media/engine/fake_webrtc_call.h"
 
-#include <algorithm>
 #include <utility>
 
+#include "absl/algorithm/container.h"
 #include "api/call/audio_sink.h"
 #include "media/base/rtp_utils.h"
 #include "rtc_base/checks.h"
@@ -467,9 +467,8 @@
 }
 
 void FakeCall::DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) {
-  auto it = std::find(audio_send_streams_.begin(),
-                      audio_send_streams_.end(),
-                      static_cast<FakeAudioSendStream*>(send_stream));
+  auto it = absl::c_find(audio_send_streams_,
+                         static_cast<FakeAudioSendStream*>(send_stream));
   if (it == audio_send_streams_.end()) {
     ADD_FAILURE() << "DestroyAudioSendStream called with unknown parameter.";
   } else {
@@ -488,9 +487,8 @@
 
 void FakeCall::DestroyAudioReceiveStream(
     webrtc::AudioReceiveStream* receive_stream) {
-  auto it = std::find(audio_receive_streams_.begin(),
-                      audio_receive_streams_.end(),
-                      static_cast<FakeAudioReceiveStream*>(receive_stream));
+  auto it = absl::c_find(audio_receive_streams_,
+                         static_cast<FakeAudioReceiveStream*>(receive_stream));
   if (it == audio_receive_streams_.end()) {
     ADD_FAILURE() << "DestroyAudioReceiveStream called with unknown parameter.";
   } else {
@@ -510,9 +508,8 @@
 }
 
 void FakeCall::DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) {
-  auto it = std::find(video_send_streams_.begin(),
-                      video_send_streams_.end(),
-                      static_cast<FakeVideoSendStream*>(send_stream));
+  auto it = absl::c_find(video_send_streams_,
+                         static_cast<FakeVideoSendStream*>(send_stream));
   if (it == video_send_streams_.end()) {
     ADD_FAILURE() << "DestroyVideoSendStream called with unknown parameter.";
   } else {
@@ -531,9 +528,8 @@
 
 void FakeCall::DestroyVideoReceiveStream(
     webrtc::VideoReceiveStream* receive_stream) {
-  auto it = std::find(video_receive_streams_.begin(),
-                      video_receive_streams_.end(),
-                      static_cast<FakeVideoReceiveStream*>(receive_stream));
+  auto it = absl::c_find(video_receive_streams_,
+                         static_cast<FakeVideoReceiveStream*>(receive_stream));
   if (it == video_receive_streams_.end()) {
     ADD_FAILURE() << "DestroyVideoReceiveStream called with unknown parameter.";
   } else {
@@ -552,9 +548,9 @@
 
 void FakeCall::DestroyFlexfecReceiveStream(
     webrtc::FlexfecReceiveStream* receive_stream) {
-  auto it = std::find(flexfec_receive_streams_.begin(),
-                      flexfec_receive_streams_.end(),
-                      static_cast<FakeFlexfecReceiveStream*>(receive_stream));
+  auto it =
+      absl::c_find(flexfec_receive_streams_,
+                   static_cast<FakeFlexfecReceiveStream*>(receive_stream));
   if (it == flexfec_receive_streams_.end()) {
     ADD_FAILURE()
         << "DestroyFlexfecReceiveStream called with unknown parameter.";
diff --git a/media/engine/webrtc_media_engine.cc b/media/engine/webrtc_media_engine.cc
index 5ea99b6..5de0927 100644
--- a/media/engine/webrtc_media_engine.cc
+++ b/media/engine/webrtc_media_engine.cc
@@ -10,9 +10,9 @@
 
 #include "media/engine/webrtc_media_engine.h"
 
-#include <algorithm>
 #include <utility>
 
+#include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
 #include "api/video/builtin_video_bitrate_allocator_factory.h"
 #include "api/video_codecs/video_decoder_factory.h"
@@ -82,8 +82,8 @@
   RTC_DCHECK(extensions);
   bool found = false;
   for (const char* uri : extensions_decreasing_prio) {
-    auto it = std::find_if(
-        extensions->begin(), extensions->end(),
+    auto it = absl::c_find_if(
+        *extensions,
         [uri](const webrtc::RtpExtension& rhs) { return rhs.uri == uri; });
     if (it != extensions->end()) {
       if (found) {
@@ -135,8 +135,8 @@
   // Sort by name, ascending (prioritise encryption), so that we don't reset
   // extensions if they were specified in a different order (also allows us
   // to use std::unique below).
-  std::sort(
-      result.begin(), result.end(),
+  absl::c_sort(
+      result,
       [](const webrtc::RtpExtension& rhs, const webrtc::RtpExtension& lhs) {
         return rhs.encrypt == lhs.encrypt ? rhs.uri < lhs.uri
                                           : rhs.encrypt > lhs.encrypt;
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index f26e5dd..756bc56 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -560,10 +560,6 @@
 bool WebRtcVideoChannel::NonFlexfecReceiveCodecsHaveChanged(
     std::vector<VideoCodecSettings> before,
     std::vector<VideoCodecSettings> after) {
-  if (before.size() != after.size()) {
-    return true;
-  }
-
   // The receive codec order doesn't matter, so we sort the codecs before
   // comparing. This is necessary because currently the
   // only way to change the send codec is to munge SDP, which causes
@@ -576,14 +572,14 @@
                        const VideoCodecSettings& codec2) {
     return codec1.codec.id > codec2.codec.id;
   };
-  std::sort(before.begin(), before.end(), comparison);
-  std::sort(after.begin(), after.end(), comparison);
+  absl::c_sort(before, comparison);
+  absl::c_sort(after, comparison);
 
   // Changes in FlexFEC payload type are handled separately in
   // WebRtcVideoChannel::GetChangedRecvParameters, so disregard FlexFEC in the
   // comparison here.
-  return !std::equal(before.begin(), before.end(), after.begin(),
-                     VideoCodecSettings::EqualsDisregardingFlexfec);
+  return !absl::c_equal(before, after,
+                        VideoCodecSettings::EqualsDisregardingFlexfec);
 }
 
 bool WebRtcVideoChannel::GetChangedSendParameters(
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index a4bb932..14b4232 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -8,12 +8,12 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include <algorithm>
 #include <map>
 #include <memory>
 #include <utility>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "absl/memory/memory.h"
 #include "absl/strings/match.h"
 #include "api/rtp_parameters.h"
@@ -681,8 +681,7 @@
   for (const webrtc::SdpVideoFormat& format :
        encoder_factory_->GetSupportedFormats()) {
     cricket::VideoCodec engine_codec = GetEngineCodec(format.name);
-    if (std::find(parameters.codecs.begin(), parameters.codecs.end(),
-                  engine_codec) == parameters.codecs.end()) {
+    if (!absl::c_linear_search(parameters.codecs, engine_codec)) {
       parameters.codecs.push_back(engine_codec);
     }
   }
@@ -878,23 +877,15 @@
        Flexfec03SupportedAsInternalCodecBehindFieldTrial) {
   encoder_factory_->AddSupportedVideoCodecType("VP8");
 
-  auto is_flexfec = [](const VideoCodec& codec) {
-    if (codec.name == "flexfec-03")
-      return true;
-    return false;
-  };
+  auto flexfec = Field("name", &VideoCodec::name, "flexfec-03");
 
   // FlexFEC is not active without field trial.
-  const std::vector<VideoCodec> codecs_before = engine_.codecs();
-  EXPECT_EQ(codecs_before.end(), std::find_if(codecs_before.begin(),
-                                              codecs_before.end(), is_flexfec));
+  EXPECT_THAT(engine_.codecs(), Not(Contains(flexfec)));
 
   // FlexFEC is active with field trial.
   webrtc::test::ScopedFieldTrials override_field_trials_(
       "WebRTC-FlexFEC-03-Advertised/Enabled/");
-  const std::vector<VideoCodec> codecs_after = engine_.codecs();
-  EXPECT_NE(codecs_after.end(),
-            std::find_if(codecs_after.begin(), codecs_after.end(), is_flexfec));
+  EXPECT_THAT(engine_.codecs(), Contains(flexfec));
 }
 
 // Test that codecs are added in the order they are reported from the factory.
@@ -2461,8 +2452,7 @@
 
   // Setting the same extensions (even if in different order) shouldn't
   // reallocate the stream.
-  std::reverse(send_parameters_.extensions.begin(),
-               send_parameters_.extensions.end());
+  absl::c_reverse(send_parameters_.extensions);
   EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
 
   EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams());
@@ -2494,8 +2484,7 @@
 
   // Setting the same extensions (even if in different order) shouldn't
   // reallocate the stream.
-  std::reverse(recv_parameters_.extensions.begin(),
-               recv_parameters_.extensions.end());
+  absl::c_reverse(recv_parameters_.extensions);
   EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
 
   EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams());
@@ -6869,16 +6858,12 @@
     std::vector<webrtc::RtpSource> sources = channel_->GetSources(kSsrc);
     EXPECT_EQ(sources[0].timestamp_ms(), sources[1].timestamp_ms());
     // 1 SSRC and 1 CSRC.
-    EXPECT_EQ(1, std::count_if(sources.begin(), sources.end(),
-                               [](const webrtc::RtpSource& source) {
-                                 return source.source_type() ==
-                                        webrtc::RtpSourceType::SSRC;
-                               }));
-    EXPECT_EQ(1, std::count_if(sources.begin(), sources.end(),
-                               [](const webrtc::RtpSource& source) {
-                                 return source.source_type() ==
-                                        webrtc::RtpSourceType::CSRC;
-                               }));
+    EXPECT_EQ(1, absl::c_count_if(sources, [](const webrtc::RtpSource& source) {
+                return source.source_type() == webrtc::RtpSourceType::SSRC;
+              }));
+    EXPECT_EQ(1, absl::c_count_if(sources, [](const webrtc::RtpSource& source) {
+                return source.source_type() == webrtc::RtpSourceType::CSRC;
+              }));
   }
   int64_t timestamp1 = channel_->GetSources(kSsrc)[0].timestamp_ms();
 
@@ -6898,22 +6883,18 @@
     std::vector<webrtc::RtpSource> sources = channel_->GetSources(kSsrc);
     EXPECT_NE(sources[0].timestamp_ms(), sources[1].timestamp_ms());
     // 1 SSRC and 1 CSRC.
-    EXPECT_EQ(1, std::count_if(sources.begin(), sources.end(),
-                               [](const webrtc::RtpSource& source) {
-                                 return source.source_type() ==
-                                        webrtc::RtpSourceType::SSRC;
-                               }));
-    EXPECT_EQ(1, std::count_if(sources.begin(), sources.end(),
-                               [](const webrtc::RtpSource& source) {
-                                 return source.source_type() ==
-                                        webrtc::RtpSourceType::CSRC;
-                               }));
-    auto ssrcSource = std::find_if(
-        sources.begin(), sources.end(), [](const webrtc::RtpSource& source) {
+    EXPECT_EQ(1, absl::c_count_if(sources, [](const webrtc::RtpSource& source) {
+                return source.source_type() == webrtc::RtpSourceType::SSRC;
+              }));
+    EXPECT_EQ(1, absl::c_count_if(sources, [](const webrtc::RtpSource& source) {
+                return source.source_type() == webrtc::RtpSourceType::CSRC;
+              }));
+    auto ssrcSource =
+        absl::c_find_if(sources, [](const webrtc::RtpSource& source) {
           return source.source_type() == webrtc::RtpSourceType::SSRC;
         });
-    auto csrcSource = std::find_if(
-        sources.begin(), sources.end(), [](const webrtc::RtpSource& source) {
+    auto csrcSource =
+        absl::c_find_if(sources, [](const webrtc::RtpSource& source) {
           return source.source_type() == webrtc::RtpSourceType::CSRC;
         });
 
@@ -6928,16 +6909,12 @@
     ASSERT_EQ(1u, channel_->GetSources(kSsrc).size());
     EXPECT_EQ(0u, channel_->GetSources(kCsrc).size());
     std::vector<webrtc::RtpSource> sources = channel_->GetSources(kSsrc);
-    EXPECT_EQ(1, std::count_if(sources.begin(), sources.end(),
-                               [](const webrtc::RtpSource& source) {
-                                 return source.source_type() ==
-                                        webrtc::RtpSourceType::SSRC;
-                               }));
-    EXPECT_EQ(0, std::count_if(sources.begin(), sources.end(),
-                               [](const webrtc::RtpSource& source) {
-                                 return source.source_type() ==
-                                        webrtc::RtpSourceType::CSRC;
-                               }));
+    EXPECT_EQ(1, absl::c_count_if(sources, [](const webrtc::RtpSource& source) {
+                return source.source_type() == webrtc::RtpSourceType::SSRC;
+              }));
+    EXPECT_EQ(0, absl::c_count_if(sources, [](const webrtc::RtpSource& source) {
+                return source.source_type() == webrtc::RtpSourceType::CSRC;
+              }));
   }
 
   fake_clock_.AdvanceTime(webrtc::TimeDelta::ms(1));
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index 8089a0f..67d89fd 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -19,6 +19,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "absl/strings/match.h"
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/call/audio_sink.h"
@@ -125,12 +126,10 @@
     return true;
   }
   std::vector<int> payload_types;
-  for (const AudioCodec& codec : codecs) {
-    payload_types.push_back(codec.id);
-  }
-  std::sort(payload_types.begin(), payload_types.end());
-  auto it = std::unique(payload_types.begin(), payload_types.end());
-  return it == payload_types.end();
+  absl::c_transform(codecs, std::back_inserter(payload_types),
+                    [](const AudioCodec& codec) { return codec.id; });
+  absl::c_sort(payload_types);
+  return absl::c_adjacent_find(payload_types) == payload_types.end();
 }
 
 absl::optional<std::string> GetAudioNetworkAdaptorConfig(
@@ -579,7 +578,7 @@
 
 void WebRtcVoiceEngine::UnregisterChannel(WebRtcVoiceMediaChannel* channel) {
   RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
-  auto it = std::find(channels_.begin(), channels_.end(), channel);
+  auto it = absl::c_find(channels_, channel);
   RTC_DCHECK(it != channels_.end());
   channels_.erase(it);
 }
@@ -2029,9 +2028,7 @@
   if (!GetRtpSsrc(packet->cdata(), packet->size(), &ssrc)) {
     return;
   }
-  RTC_DCHECK(std::find(unsignaled_recv_ssrcs_.begin(),
-                       unsignaled_recv_ssrcs_.end(),
-                       ssrc) == unsignaled_recv_ssrcs_.end());
+  RTC_DCHECK(!absl::c_linear_search(unsignaled_recv_ssrcs_, ssrc));
 
   // Add new stream.
   StreamParams sp = unsignaled_stream_params_;
@@ -2181,7 +2178,7 @@
     // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8158
     if (!unsignaled_recv_ssrcs_.empty()) {
       auto end_it = --unsignaled_recv_ssrcs_.end();
-      if (std::find(unsignaled_recv_ssrcs_.begin(), end_it, ssrc) != end_it) {
+      if (absl::linear_search(unsignaled_recv_ssrcs_.begin(), end_it, ssrc)) {
         continue;
       }
     }
@@ -2280,8 +2277,7 @@
 bool WebRtcVoiceMediaChannel::MaybeDeregisterUnsignaledRecvStream(
     uint32_t ssrc) {
   RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
-  auto it = std::find(unsignaled_recv_ssrcs_.begin(),
-                      unsignaled_recv_ssrcs_.end(), ssrc);
+  auto it = absl::c_find(unsignaled_recv_ssrcs_, ssrc);
   if (it != unsignaled_recv_ssrcs_.end()) {
     unsignaled_recv_ssrcs_.erase(it);
     return true;
diff --git a/media/sctp/sctp_transport.cc b/media/sctp/sctp_transport.cc
index 65c2181..b656018 100644
--- a/media/sctp/sctp_transport.cc
+++ b/media/sctp/sctp_transport.cc
@@ -23,9 +23,9 @@
 #include <stdarg.h>
 #include <stdio.h>
 
-#include <algorithm>
 #include <memory>
 
+#include "absl/algorithm/container.h"
 #include "media/base/codec.h"
 #include "media/base/media_constants.h"
 #include "media/base/stream_params.h"
@@ -779,8 +779,8 @@
 
   // Figure out how many streams need to be reset. We need to do this so we can
   // allocate the right amount of memory for the sctp_reset_streams structure.
-  size_t num_streams = std::count_if(
-      stream_status_by_sid_.begin(), stream_status_by_sid_.end(),
+  size_t num_streams = absl::c_count_if(
+      stream_status_by_sid_,
       [](const std::map<uint32_t, StreamStatus>::value_type& stream) {
         return stream.second.need_outgoing_reset();
       });
diff --git a/media/sctp/sctp_transport_unittest.cc b/media/sctp/sctp_transport_unittest.cc
index 0170785..c86b62b 100644
--- a/media/sctp/sctp_transport_unittest.cc
+++ b/media/sctp/sctp_transport_unittest.cc
@@ -10,11 +10,11 @@
 
 #include <stdio.h>
 #include <string.h>
-#include <algorithm>
 #include <memory>
 #include <string>
 #include <vector>
 
+#include "absl/algorithm/container.h"
 #include "media/sctp/sctp_transport.h"
 #include "p2p/base/fake_dtls_transport.h"
 #include "rtc_base/copy_on_write_buffer.h"
@@ -75,12 +75,11 @@
   }
 
   int StreamCloseCount(int stream) {
-    return std::count(closed_streams_.begin(), closed_streams_.end(), stream);
+    return absl::c_count(closed_streams_, stream);
   }
 
   bool WasStreamClosed(int stream) {
-    return std::find(closed_streams_.begin(), closed_streams_.end(), stream) !=
-           closed_streams_.end();
+    return absl::c_linear_search(closed_streams_, stream);
   }
 
   bool ReadyToSend() { return ready_to_send_; }
@@ -102,9 +101,7 @@
   SignalTransportClosedReopener(SctpTransport* transport, SctpTransport* peer)
       : transport_(transport), peer_(peer) {}
 
-  int StreamCloseCount(int stream) {
-    return std::count(streams_.begin(), streams_.end(), stream);
-  }
+  int StreamCloseCount(int stream) { return absl::c_count(streams_, stream); }
 
  private:
   void OnStreamClosed(int stream) {