| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 2137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2148 return rtc::Optional<uint32_t>(primary_ssrcs[0]); | 2148 return rtc::Optional<uint32_t>(primary_ssrcs[0]); |
| 2149 } | 2149 } |
| 2150 } | 2150 } |
| 2151 | 2151 |
| 2152 WebRtcVideoChannel::WebRtcVideoReceiveStream::AllocatedDecoder | 2152 WebRtcVideoChannel::WebRtcVideoReceiveStream::AllocatedDecoder |
| 2153 WebRtcVideoChannel::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder( | 2153 WebRtcVideoChannel::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder( |
| 2154 std::vector<AllocatedDecoder>* old_decoders, | 2154 std::vector<AllocatedDecoder>* old_decoders, |
| 2155 const VideoCodec& codec) { | 2155 const VideoCodec& codec) { |
| 2156 webrtc::VideoCodecType type = webrtc::PayloadStringToCodecType(codec.name); | 2156 webrtc::VideoCodecType type = webrtc::PayloadStringToCodecType(codec.name); |
| 2157 | 2157 |
| 2158 for (size_t i = 0; i < old_decoders->size(); ++i) { | 2158 const auto& found = std::find_if( |
| 2159 if ((*old_decoders)[i].type == type) { | 2159 old_decoders->begin(), old_decoders->end(), |
| 2160 AllocatedDecoder decoder = (*old_decoders)[i]; | 2160 [type](const AllocatedDecoder decoder) { return decoder.type == type; }); |
| 2161 (*old_decoders)[i] = old_decoders->back(); | 2161 if (found != old_decoders->end()) { |
| 2162 old_decoders->pop_back(); | 2162 AllocatedDecoder decoder = *found; |
| 2163 return decoder; | 2163 old_decoders->erase(found); |
| 2164 } | 2164 return decoder; |
| 2165 } | 2165 } |
| 2166 | 2166 |
| 2167 if (external_decoder_factory_ != NULL) { | 2167 if (external_decoder_factory_ != NULL) { |
| 2168 webrtc::VideoDecoder* decoder = | 2168 webrtc::VideoDecoder* decoder = |
| 2169 external_decoder_factory_->CreateVideoDecoderWithParams( | 2169 external_decoder_factory_->CreateVideoDecoderWithParams( |
| 2170 type, {stream_params_.id}); | 2170 type, {stream_params_.id}); |
| 2171 if (decoder != NULL) { | 2171 if (decoder != NULL) { |
| 2172 return AllocatedDecoder(decoder, type, true /* is_external */); | 2172 return AllocatedDecoder(decoder, type, true /* is_external */); |
| 2173 } | 2173 } |
| 2174 } | 2174 } |
| 2175 | 2175 |
| 2176 InternalDecoderFactory internal_decoder_factory; | 2176 InternalDecoderFactory internal_decoder_factory; |
| 2177 return AllocatedDecoder(internal_decoder_factory.CreateVideoDecoderWithParams( | 2177 return AllocatedDecoder(internal_decoder_factory.CreateVideoDecoderWithParams( |
| 2178 type, {stream_params_.id}), | 2178 type, {stream_params_.id}), |
| 2179 type, false /* is_external */); | 2179 type, false /* is_external */); |
| 2180 } | 2180 } |
| 2181 | 2181 |
| 2182 void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs( | 2182 void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs( |
| 2183 const std::vector<VideoCodecSettings>& recv_codecs, | 2183 const std::vector<VideoCodecSettings>& recv_codecs, |
| 2184 std::vector<AllocatedDecoder>* old_decoders) { | 2184 std::vector<AllocatedDecoder>* old_decoders) { |
| 2185 *old_decoders = allocated_decoders_; | 2185 *old_decoders = allocated_decoders_; |
| 2186 allocated_decoders_.clear(); | 2186 allocated_decoders_.clear(); |
| 2187 config_.decoders.clear(); | 2187 config_.decoders.clear(); |
| 2188 for (size_t i = 0; i < recv_codecs.size(); ++i) { | 2188 config_.rtp.rtx_associated_payload_types.clear(); |
| 2189 for (const auto& recv_codec : recv_codecs) { |
| 2189 AllocatedDecoder allocated_decoder = | 2190 AllocatedDecoder allocated_decoder = |
| 2190 CreateOrReuseVideoDecoder(old_decoders, recv_codecs[i].codec); | 2191 CreateOrReuseVideoDecoder(old_decoders, recv_codec.codec); |
| 2191 allocated_decoders_.push_back(allocated_decoder); | 2192 allocated_decoders_.push_back(allocated_decoder); |
| 2192 | 2193 |
| 2193 webrtc::VideoReceiveStream::Decoder decoder; | 2194 webrtc::VideoReceiveStream::Decoder decoder; |
| 2194 decoder.decoder = allocated_decoder.decoder; | 2195 decoder.decoder = allocated_decoder.decoder; |
| 2195 decoder.payload_type = recv_codecs[i].codec.id; | 2196 decoder.payload_type = recv_codec.codec.id; |
| 2196 decoder.payload_name = recv_codecs[i].codec.name; | 2197 decoder.payload_name = recv_codec.codec.name; |
| 2197 decoder.codec_params = recv_codecs[i].codec.params; | 2198 decoder.codec_params = recv_codec.codec.params; |
| 2198 config_.decoders.push_back(decoder); | 2199 config_.decoders.push_back(decoder); |
| 2199 } | |
| 2200 | |
| 2201 config_.rtp.rtx_associated_payload_types.clear(); | |
| 2202 for (const VideoCodecSettings& recv_codec : recv_codecs) { | |
| 2203 config_.rtp.rtx_associated_payload_types[recv_codec.rtx_payload_type] = | 2200 config_.rtp.rtx_associated_payload_types[recv_codec.rtx_payload_type] = |
| 2204 recv_codec.codec.id; | 2201 recv_codec.codec.id; |
| 2205 } | 2202 } |
| 2206 | 2203 |
| 2207 config_.rtp.ulpfec = recv_codecs.front().ulpfec; | 2204 config_.rtp.ulpfec = recv_codecs.front().ulpfec; |
| 2208 | 2205 |
| 2209 config_.rtp.nack.rtp_history_ms = | 2206 config_.rtp.nack.rtp_history_ms = |
| 2210 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; | 2207 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; |
| 2211 } | 2208 } |
| 2212 | 2209 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2337 | 2334 |
| 2338 void WebRtcVideoChannel::WebRtcVideoReceiveStream:: | 2335 void WebRtcVideoChannel::WebRtcVideoReceiveStream:: |
| 2339 MaybeDissociateFlexfecFromVideo() { | 2336 MaybeDissociateFlexfecFromVideo() { |
| 2340 if (stream_ && flexfec_stream_) { | 2337 if (stream_ && flexfec_stream_) { |
| 2341 stream_->RemoveSecondarySink(flexfec_stream_); | 2338 stream_->RemoveSecondarySink(flexfec_stream_); |
| 2342 } | 2339 } |
| 2343 } | 2340 } |
| 2344 | 2341 |
| 2345 void WebRtcVideoChannel::WebRtcVideoReceiveStream::ClearDecoders( | 2342 void WebRtcVideoChannel::WebRtcVideoReceiveStream::ClearDecoders( |
| 2346 std::vector<AllocatedDecoder>* allocated_decoders) { | 2343 std::vector<AllocatedDecoder>* allocated_decoders) { |
| 2347 for (size_t i = 0; i < allocated_decoders->size(); ++i) { | 2344 for (auto& dec : *allocated_decoders) { |
| 2348 if ((*allocated_decoders)[i].external) { | 2345 if (dec.external) |
| 2349 external_decoder_factory_->DestroyVideoDecoder( | 2346 external_decoder_factory_->DestroyVideoDecoder(dec.external_decoder); |
| 2350 (*allocated_decoders)[i].external_decoder); | 2347 delete dec.decoder; |
| 2351 } | |
| 2352 delete (*allocated_decoders)[i].decoder; | |
| 2353 } | 2348 } |
| 2354 allocated_decoders->clear(); | 2349 allocated_decoders->clear(); |
| 2355 } | 2350 } |
| 2356 | 2351 |
| 2357 void WebRtcVideoChannel::WebRtcVideoReceiveStream::OnFrame( | 2352 void WebRtcVideoChannel::WebRtcVideoReceiveStream::OnFrame( |
| 2358 const webrtc::VideoFrame& frame) { | 2353 const webrtc::VideoFrame& frame) { |
| 2359 rtc::CritScope crit(&sink_lock_); | 2354 rtc::CritScope crit(&sink_lock_); |
| 2360 | 2355 |
| 2361 if (first_frame_timestamp_ < 0) | 2356 if (first_frame_timestamp_ < 0) |
| 2362 first_frame_timestamp_ = frame.timestamp(); | 2357 first_frame_timestamp_ = frame.timestamp(); |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2628 stream.temporal_layer_thresholds_bps.resize(GetDefaultVp9TemporalLayers() - | 2623 stream.temporal_layer_thresholds_bps.resize(GetDefaultVp9TemporalLayers() - |
| 2629 1); | 2624 1); |
| 2630 } | 2625 } |
| 2631 | 2626 |
| 2632 std::vector<webrtc::VideoStream> streams; | 2627 std::vector<webrtc::VideoStream> streams; |
| 2633 streams.push_back(stream); | 2628 streams.push_back(stream); |
| 2634 return streams; | 2629 return streams; |
| 2635 } | 2630 } |
| 2636 | 2631 |
| 2637 } // namespace cricket | 2632 } // namespace cricket |
| OLD | NEW |