Index: webrtc/media/engine/webrtcvideoengine.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine.cc b/webrtc/media/engine/webrtcvideoengine.cc |
index 030544461a982c48b5b693d14fd1e07e6f41fe3f..020878ad6c5779a6af1cee8dc539c9ce391daae5 100644 |
--- a/webrtc/media/engine/webrtcvideoengine.cc |
+++ b/webrtc/media/engine/webrtcvideoengine.cc |
@@ -2155,13 +2155,13 @@ WebRtcVideoChannel::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder( |
const VideoCodec& codec) { |
webrtc::VideoCodecType type = webrtc::PayloadStringToCodecType(codec.name); |
- for (size_t i = 0; i < old_decoders->size(); ++i) { |
- if ((*old_decoders)[i].type == type) { |
- AllocatedDecoder decoder = (*old_decoders)[i]; |
- (*old_decoders)[i] = old_decoders->back(); |
- old_decoders->pop_back(); |
- return decoder; |
- } |
+ const auto& found = std::find_if( |
+ old_decoders->begin(), old_decoders->end(), |
+ [type](const AllocatedDecoder decoder) { return decoder.type == type; }); |
+ if (found != old_decoders->end()) { |
+ AllocatedDecoder decoder = *found; |
+ old_decoders->erase(found); |
+ return decoder; |
} |
if (external_decoder_factory_ != NULL) { |
@@ -2185,21 +2185,18 @@ void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs( |
*old_decoders = allocated_decoders_; |
allocated_decoders_.clear(); |
config_.decoders.clear(); |
- for (size_t i = 0; i < recv_codecs.size(); ++i) { |
+ config_.rtp.rtx_associated_payload_types.clear(); |
+ for (const auto& recv_codec : recv_codecs) { |
AllocatedDecoder allocated_decoder = |
- CreateOrReuseVideoDecoder(old_decoders, recv_codecs[i].codec); |
+ CreateOrReuseVideoDecoder(old_decoders, recv_codec.codec); |
allocated_decoders_.push_back(allocated_decoder); |
webrtc::VideoReceiveStream::Decoder decoder; |
decoder.decoder = allocated_decoder.decoder; |
- decoder.payload_type = recv_codecs[i].codec.id; |
- decoder.payload_name = recv_codecs[i].codec.name; |
- decoder.codec_params = recv_codecs[i].codec.params; |
+ decoder.payload_type = recv_codec.codec.id; |
+ decoder.payload_name = recv_codec.codec.name; |
+ decoder.codec_params = recv_codec.codec.params; |
config_.decoders.push_back(decoder); |
- } |
- |
- config_.rtp.rtx_associated_payload_types.clear(); |
- for (const VideoCodecSettings& recv_codec : recv_codecs) { |
config_.rtp.rtx_associated_payload_types[recv_codec.rtx_payload_type] = |
recv_codec.codec.id; |
} |
@@ -2344,12 +2341,10 @@ void WebRtcVideoChannel::WebRtcVideoReceiveStream:: |
void WebRtcVideoChannel::WebRtcVideoReceiveStream::ClearDecoders( |
std::vector<AllocatedDecoder>* allocated_decoders) { |
- for (size_t i = 0; i < allocated_decoders->size(); ++i) { |
- if ((*allocated_decoders)[i].external) { |
- external_decoder_factory_->DestroyVideoDecoder( |
- (*allocated_decoders)[i].external_decoder); |
- } |
- delete (*allocated_decoders)[i].decoder; |
+ for (auto& dec : *allocated_decoders) { |
+ if (dec.external) |
+ external_decoder_factory_->DestroyVideoDecoder(dec.external_decoder); |
+ delete dec.decoder; |
} |
allocated_decoders->clear(); |
} |