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 2313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2324 if (type == webrtc::kVideoCodecH264) { | 2324 if (type == webrtc::kVideoCodecH264) { |
2325 return AllocatedDecoder( | 2325 return AllocatedDecoder( |
2326 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kH264), type, false); | 2326 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kH264), type, false); |
2327 } | 2327 } |
2328 | 2328 |
2329 return AllocatedDecoder( | 2329 return AllocatedDecoder( |
2330 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kUnsupportedCodec), | 2330 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kUnsupportedCodec), |
2331 webrtc::kVideoCodecUnknown, false); | 2331 webrtc::kVideoCodecUnknown, false); |
2332 } | 2332 } |
2333 | 2333 |
2334 void configureDecoderSpecifics(webrtc::VideoReceiveStream::Decoder* decoder, | |
2335 const cricket::VideoCodec& recvVideoCodec) { | |
2336 if (recvVideoCodec.name.compare("H264")) { | |
2337 rtc::scoped_refptr<webrtc::DecoderSpecificSettings> decoder_specifics = | |
2338 new rtc::RefCountedObject<webrtc::DecoderSpecificSettings>(); | |
sprang_webrtc
2016/07/27 08:37:25
No need to create this instance if props not found
| |
2339 cricket::CodecParameterMap::const_iterator found = | |
2340 recvVideoCodec.params.find("sprop-parameter-sets"); | |
2341 if (found != recvVideoCodec.params.end()) { | |
2342 decoder_specifics->h264_extra_settings->spropParameterSets = | |
2343 found->second; | |
2344 } | |
2345 decoder->decoder_specific = decoder_specifics; | |
2346 } | |
2347 } | |
2348 | |
2334 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureCodecs( | 2349 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureCodecs( |
2335 const std::vector<VideoCodecSettings>& recv_codecs, | 2350 const std::vector<VideoCodecSettings>& recv_codecs, |
2336 std::vector<AllocatedDecoder>* old_decoders) { | 2351 std::vector<AllocatedDecoder>* old_decoders) { |
2337 *old_decoders = allocated_decoders_; | 2352 *old_decoders = allocated_decoders_; |
2338 allocated_decoders_.clear(); | 2353 allocated_decoders_.clear(); |
2339 config_.decoders.clear(); | 2354 config_.decoders.clear(); |
2340 for (size_t i = 0; i < recv_codecs.size(); ++i) { | 2355 for (size_t i = 0; i < recv_codecs.size(); ++i) { |
2341 AllocatedDecoder allocated_decoder = | 2356 AllocatedDecoder allocated_decoder = |
2342 CreateOrReuseVideoDecoder(old_decoders, recv_codecs[i].codec); | 2357 CreateOrReuseVideoDecoder(old_decoders, recv_codecs[i].codec); |
2343 allocated_decoders_.push_back(allocated_decoder); | 2358 allocated_decoders_.push_back(allocated_decoder); |
2344 | 2359 |
2345 webrtc::VideoReceiveStream::Decoder decoder; | 2360 webrtc::VideoReceiveStream::Decoder decoder; |
2346 decoder.decoder = allocated_decoder.decoder; | 2361 decoder.decoder = allocated_decoder.decoder; |
2347 decoder.payload_type = recv_codecs[i].codec.id; | 2362 decoder.payload_type = recv_codecs[i].codec.id; |
2348 decoder.payload_name = recv_codecs[i].codec.name; | 2363 decoder.payload_name = recv_codecs[i].codec.name; |
2364 configureDecoderSpecifics(&decoder, recv_codecs[i].codec); | |
2349 config_.decoders.push_back(decoder); | 2365 config_.decoders.push_back(decoder); |
2350 } | 2366 } |
2351 | 2367 |
2352 // TODO(pbos): Reconfigure RTX based on incoming recv_codecs. | 2368 // TODO(pbos): Reconfigure RTX based on incoming recv_codecs. |
2353 config_.rtp.fec = recv_codecs.front().fec; | 2369 config_.rtp.fec = recv_codecs.front().fec; |
2354 config_.rtp.nack.rtp_history_ms = | 2370 config_.rtp.nack.rtp_history_ms = |
2355 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; | 2371 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; |
2356 } | 2372 } |
2357 | 2373 |
2358 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetLocalSsrc( | 2374 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetLocalSsrc( |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2651 rtx_mapping[video_codecs[i].codec.id] != | 2667 rtx_mapping[video_codecs[i].codec.id] != |
2652 fec_settings.red_payload_type) { | 2668 fec_settings.red_payload_type) { |
2653 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2669 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2654 } | 2670 } |
2655 } | 2671 } |
2656 | 2672 |
2657 return video_codecs; | 2673 return video_codecs; |
2658 } | 2674 } |
2659 | 2675 |
2660 } // namespace cricket | 2676 } // namespace cricket |
OLD | NEW |