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 |