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 2255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2266 if (type == webrtc::kVideoCodecH264) { | 2266 if (type == webrtc::kVideoCodecH264) { |
2267 return AllocatedDecoder( | 2267 return AllocatedDecoder( |
2268 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kH264), type, false); | 2268 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kH264), type, false); |
2269 } | 2269 } |
2270 | 2270 |
2271 return AllocatedDecoder( | 2271 return AllocatedDecoder( |
2272 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kUnsupportedCodec), | 2272 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kUnsupportedCodec), |
2273 webrtc::kVideoCodecUnknown, false); | 2273 webrtc::kVideoCodecUnknown, false); |
2274 } | 2274 } |
2275 | 2275 |
2276 void ConfigureDecoderSpecifics(webrtc::VideoReceiveStream::Decoder* decoder, | |
2277 const cricket::VideoCodec& recv_video_codec) { | |
2278 if (recv_video_codec.name.compare("H264") == 0) { | |
2279 auto it = recv_video_codec.params.find("sprop-parameter-sets"); | |
2280 if (it != recv_video_codec.params.end()) { | |
2281 decoder->decoder_specific.h264_extra_settings = | |
2282 rtc::Optional<webrtc::VideoDecoderH264Settings>( | |
2283 webrtc::VideoDecoderH264Settings()); | |
2284 decoder->decoder_specific.h264_extra_settings->sprop_parameter_sets = | |
2285 it->second; | |
2286 } | |
2287 } | |
2288 } | |
2289 | |
2290 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureCodecs( | 2276 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureCodecs( |
2291 const std::vector<VideoCodecSettings>& recv_codecs, | 2277 const std::vector<VideoCodecSettings>& recv_codecs, |
2292 std::vector<AllocatedDecoder>* old_decoders) { | 2278 std::vector<AllocatedDecoder>* old_decoders) { |
2293 *old_decoders = allocated_decoders_; | 2279 *old_decoders = allocated_decoders_; |
2294 allocated_decoders_.clear(); | 2280 allocated_decoders_.clear(); |
2295 config_.decoders.clear(); | 2281 config_.decoders.clear(); |
2296 for (size_t i = 0; i < recv_codecs.size(); ++i) { | 2282 for (size_t i = 0; i < recv_codecs.size(); ++i) { |
2297 AllocatedDecoder allocated_decoder = | 2283 AllocatedDecoder allocated_decoder = |
2298 CreateOrReuseVideoDecoder(old_decoders, recv_codecs[i].codec); | 2284 CreateOrReuseVideoDecoder(old_decoders, recv_codecs[i].codec); |
2299 allocated_decoders_.push_back(allocated_decoder); | 2285 allocated_decoders_.push_back(allocated_decoder); |
2300 | 2286 |
2301 webrtc::VideoReceiveStream::Decoder decoder; | 2287 webrtc::VideoReceiveStream::Decoder decoder; |
2302 decoder.decoder = allocated_decoder.decoder; | 2288 decoder.decoder = allocated_decoder.decoder; |
2303 decoder.payload_type = recv_codecs[i].codec.id; | 2289 decoder.payload_type = recv_codecs[i].codec.id; |
2304 decoder.payload_name = recv_codecs[i].codec.name; | 2290 decoder.payload_name = recv_codecs[i].codec.name; |
2305 ConfigureDecoderSpecifics(&decoder, recv_codecs[i].codec); | 2291 decoder.codec_params = recv_codecs[i].codec.params; |
2306 config_.decoders.push_back(decoder); | 2292 config_.decoders.push_back(decoder); |
2307 } | 2293 } |
2308 | 2294 |
2309 // TODO(pbos): Reconfigure RTX based on incoming recv_codecs. | 2295 // TODO(pbos): Reconfigure RTX based on incoming recv_codecs. |
2310 config_.rtp.ulpfec = recv_codecs.front().ulpfec; | 2296 config_.rtp.ulpfec = recv_codecs.front().ulpfec; |
2311 flexfec_config_.flexfec_payload_type = | 2297 flexfec_config_.flexfec_payload_type = |
2312 recv_codecs.front().flexfec.flexfec_payload_type; | 2298 recv_codecs.front().flexfec.flexfec_payload_type; |
2313 config_.rtp.nack.rtp_history_ms = | 2299 config_.rtp.nack.rtp_history_ms = |
2314 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; | 2300 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; |
2315 } | 2301 } |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2615 rtx_mapping[video_codecs[i].codec.id] != | 2601 rtx_mapping[video_codecs[i].codec.id] != |
2616 ulpfec_config.red_payload_type) { | 2602 ulpfec_config.red_payload_type) { |
2617 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2603 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2618 } | 2604 } |
2619 } | 2605 } |
2620 | 2606 |
2621 return video_codecs; | 2607 return video_codecs; |
2622 } | 2608 } |
2623 | 2609 |
2624 } // namespace cricket | 2610 } // namespace cricket |
OLD | NEW |