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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 bool has_internal_source; | 61 bool has_internal_source; |
62 }; | 62 }; |
63 | 63 |
64 virtual ~EncoderFactoryAdapter() {} | 64 virtual ~EncoderFactoryAdapter() {} |
65 | 65 |
66 virtual AllocatedEncoder CreateVideoEncoder( | 66 virtual AllocatedEncoder CreateVideoEncoder( |
67 const VideoCodec& codec, | 67 const VideoCodec& codec, |
68 bool is_conference_mode_screenshare) const = 0; | 68 bool is_conference_mode_screenshare) const = 0; |
69 | 69 |
70 virtual std::vector<VideoCodec> GetSupportedCodecs() const = 0; | 70 virtual std::vector<VideoCodec> GetSupportedCodecs() const = 0; |
71 | |
72 virtual std::unique_ptr<EncoderFactoryAdapter> clone() const = 0; | |
73 }; | 71 }; |
74 | 72 |
75 class DecoderFactoryAdapter { | 73 class DecoderFactoryAdapter { |
76 public: | 74 public: |
77 virtual ~DecoderFactoryAdapter() {} | 75 virtual ~DecoderFactoryAdapter() {} |
78 | 76 |
79 virtual std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder( | 77 virtual std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder( |
80 const VideoCodec& codec, | 78 const VideoCodec& codec, |
81 const VideoDecoderParams& decoder_params) const = 0; | 79 const VideoDecoderParams& decoder_params) const = 0; |
82 | |
83 virtual std::unique_ptr<DecoderFactoryAdapter> clone() const = 0; | |
84 }; | 80 }; |
85 | 81 |
86 namespace { | 82 namespace { |
87 | 83 |
| 84 std::vector<VideoCodec> AssignPayloadTypesAndAddAssociatedRtxCodecs( |
| 85 const std::vector<VideoCodec>& input_codecs); |
| 86 |
88 // Wraps cricket::WebRtcVideoEncoderFactory* into common EncoderFactoryAdapter | 87 // Wraps cricket::WebRtcVideoEncoderFactory* into common EncoderFactoryAdapter |
89 // interface. | 88 // interface. |
90 // TODO(magjed): Add wrapper class for future webrtc::VideoEncoderFactory | 89 // TODO(magjed): Add wrapper class for future webrtc::VideoEncoderFactory |
91 // interface, https://bugs.chromium.org/p/webrtc/issues/detail?id=7925. | 90 // interface, https://bugs.chromium.org/p/webrtc/issues/detail?id=7925. |
92 class CricketEncoderFactoryAdapter : public EncoderFactoryAdapter { | 91 class CricketEncoderFactoryAdapter : public EncoderFactoryAdapter { |
93 public: | 92 public: |
94 explicit CricketEncoderFactoryAdapter( | 93 explicit CricketEncoderFactoryAdapter( |
95 WebRtcVideoEncoderFactory* external_encoder_factory) | 94 WebRtcVideoEncoderFactory* external_encoder_factory) |
96 : internal_encoder_factory_(new InternalEncoderFactory()), | 95 : internal_encoder_factory_(new InternalEncoderFactory()), |
97 external_encoder_factory_(external_encoder_factory) {} | 96 external_encoder_factory_(external_encoder_factory) {} |
98 | 97 |
99 private: | 98 private: |
100 explicit CricketEncoderFactoryAdapter( | 99 explicit CricketEncoderFactoryAdapter( |
101 const CricketEncoderFactoryAdapter& other) | 100 const CricketEncoderFactoryAdapter& other) |
102 : CricketEncoderFactoryAdapter(other.external_encoder_factory_) {} | 101 : CricketEncoderFactoryAdapter(other.external_encoder_factory_) {} |
103 | 102 |
104 AllocatedEncoder CreateVideoEncoder( | 103 AllocatedEncoder CreateVideoEncoder( |
105 const VideoCodec& codec, | 104 const VideoCodec& codec, |
106 bool is_conference_mode_screenshare) const override; | 105 bool is_conference_mode_screenshare) const override; |
107 | 106 |
108 std::vector<VideoCodec> GetSupportedCodecs() const override; | 107 std::vector<VideoCodec> GetSupportedCodecs() const override; |
109 | 108 |
110 std::unique_ptr<EncoderFactoryAdapter> clone() const override { | |
111 return std::unique_ptr<EncoderFactoryAdapter>( | |
112 new CricketEncoderFactoryAdapter(*this)); | |
113 } | |
114 | |
115 const std::unique_ptr<WebRtcVideoEncoderFactory> internal_encoder_factory_; | 109 const std::unique_ptr<WebRtcVideoEncoderFactory> internal_encoder_factory_; |
116 WebRtcVideoEncoderFactory* const external_encoder_factory_; | 110 WebRtcVideoEncoderFactory* const external_encoder_factory_; |
117 }; | 111 }; |
118 | 112 |
119 class CricketDecoderFactoryAdapter : public DecoderFactoryAdapter { | 113 class CricketDecoderFactoryAdapter : public DecoderFactoryAdapter { |
120 public: | 114 public: |
121 explicit CricketDecoderFactoryAdapter( | 115 explicit CricketDecoderFactoryAdapter( |
122 WebRtcVideoDecoderFactory* external_decoder_factory) | 116 WebRtcVideoDecoderFactory* external_decoder_factory) |
123 : internal_decoder_factory_(new InternalDecoderFactory()), | 117 : internal_decoder_factory_(new InternalDecoderFactory()), |
124 external_decoder_factory_(external_decoder_factory) {} | 118 external_decoder_factory_(external_decoder_factory) {} |
125 | 119 |
126 private: | 120 private: |
127 explicit CricketDecoderFactoryAdapter( | 121 explicit CricketDecoderFactoryAdapter( |
128 const CricketDecoderFactoryAdapter& other) | 122 const CricketDecoderFactoryAdapter& other) |
129 : CricketDecoderFactoryAdapter(other.external_decoder_factory_) {} | 123 : CricketDecoderFactoryAdapter(other.external_decoder_factory_) {} |
130 | 124 |
131 std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder( | 125 std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder( |
132 const VideoCodec& codec, | 126 const VideoCodec& codec, |
133 const VideoDecoderParams& decoder_params) const override; | 127 const VideoDecoderParams& decoder_params) const override; |
134 | 128 |
135 std::unique_ptr<DecoderFactoryAdapter> clone() const override { | |
136 return std::unique_ptr<DecoderFactoryAdapter>( | |
137 new CricketDecoderFactoryAdapter(*this)); | |
138 } | |
139 | |
140 const std::unique_ptr<WebRtcVideoDecoderFactory> internal_decoder_factory_; | 129 const std::unique_ptr<WebRtcVideoDecoderFactory> internal_decoder_factory_; |
141 WebRtcVideoDecoderFactory* const external_decoder_factory_; | 130 WebRtcVideoDecoderFactory* const external_decoder_factory_; |
142 }; | 131 }; |
143 | 132 |
144 // If this field trial is enabled, we will enable sending FlexFEC and disable | 133 // If this field trial is enabled, we will enable sending FlexFEC and disable |
145 // sending ULPFEC whenever the former has been negotiated in the SDPs. | 134 // sending ULPFEC whenever the former has been negotiated in the SDPs. |
146 bool IsFlexfecFieldTrialEnabled() { | 135 bool IsFlexfecFieldTrialEnabled() { |
147 return webrtc::field_trial::IsEnabled("WebRTC-FlexFEC-03"); | 136 return webrtc::field_trial::IsEnabled("WebRTC-FlexFEC-03"); |
148 } | 137 } |
149 | 138 |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 WebRtcVideoChannel* channel, | 384 WebRtcVideoChannel* channel, |
396 rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) { | 385 rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) { |
397 default_sink_ = sink; | 386 default_sink_ = sink; |
398 rtc::Optional<uint32_t> default_recv_ssrc = | 387 rtc::Optional<uint32_t> default_recv_ssrc = |
399 channel->GetDefaultReceiveStreamSsrc(); | 388 channel->GetDefaultReceiveStreamSsrc(); |
400 if (default_recv_ssrc) { | 389 if (default_recv_ssrc) { |
401 channel->SetSink(*default_recv_ssrc, default_sink_); | 390 channel->SetSink(*default_recv_ssrc, default_sink_); |
402 } | 391 } |
403 } | 392 } |
404 | 393 |
405 WebRtcVideoEngine::WebRtcVideoEngine() | 394 WebRtcVideoEngine::WebRtcVideoEngine( |
406 : initialized_(false), | 395 WebRtcVideoEncoderFactory* external_video_encoder_factory, |
407 decoder_factory_(new CricketDecoderFactoryAdapter( | 396 WebRtcVideoDecoderFactory* external_video_decoder_factory) |
408 nullptr /* external_decoder_factory */)), | 397 : decoder_factory_( |
409 encoder_factory_(new CricketEncoderFactoryAdapter( | 398 new CricketDecoderFactoryAdapter(external_video_decoder_factory)), |
410 nullptr /* external_encoder_factory */)) { | 399 encoder_factory_( |
| 400 new CricketEncoderFactoryAdapter(external_video_encoder_factory)) { |
411 LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()"; | 401 LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()"; |
412 } | 402 } |
413 | 403 |
414 WebRtcVideoEngine::~WebRtcVideoEngine() { | 404 WebRtcVideoEngine::~WebRtcVideoEngine() { |
415 LOG(LS_INFO) << "WebRtcVideoEngine::~WebRtcVideoEngine"; | 405 LOG(LS_INFO) << "WebRtcVideoEngine::~WebRtcVideoEngine"; |
416 } | 406 } |
417 | 407 |
418 void WebRtcVideoEngine::Init() { | |
419 LOG(LS_INFO) << "WebRtcVideoEngine::Init"; | |
420 initialized_ = true; | |
421 } | |
422 | |
423 WebRtcVideoChannel* WebRtcVideoEngine::CreateChannel( | 408 WebRtcVideoChannel* WebRtcVideoEngine::CreateChannel( |
424 webrtc::Call* call, | 409 webrtc::Call* call, |
425 const MediaConfig& config, | 410 const MediaConfig& config, |
426 const VideoOptions& options) { | 411 const VideoOptions& options) { |
427 RTC_DCHECK(initialized_); | |
428 LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString(); | 412 LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString(); |
429 return new WebRtcVideoChannel(call, config, options, *encoder_factory_, | 413 return new WebRtcVideoChannel(call, config, options, encoder_factory_.get(), |
430 *decoder_factory_); | 414 decoder_factory_.get()); |
431 } | 415 } |
432 | 416 |
433 std::vector<VideoCodec> WebRtcVideoEngine::codecs() const { | 417 std::vector<VideoCodec> WebRtcVideoEngine::codecs() const { |
434 return encoder_factory_->GetSupportedCodecs(); | 418 return encoder_factory_->GetSupportedCodecs(); |
435 } | 419 } |
436 | 420 |
437 RtpCapabilities WebRtcVideoEngine::GetCapabilities() const { | 421 RtpCapabilities WebRtcVideoEngine::GetCapabilities() const { |
438 RtpCapabilities capabilities; | 422 RtpCapabilities capabilities; |
439 capabilities.header_extensions.push_back( | 423 capabilities.header_extensions.push_back( |
440 webrtc::RtpExtension(webrtc::RtpExtension::kTimestampOffsetUri, | 424 webrtc::RtpExtension(webrtc::RtpExtension::kTimestampOffsetUri, |
(...skipping 12 matching lines...) Expand all Loading... |
453 webrtc::RtpExtension::kPlayoutDelayDefaultId)); | 437 webrtc::RtpExtension::kPlayoutDelayDefaultId)); |
454 capabilities.header_extensions.push_back( | 438 capabilities.header_extensions.push_back( |
455 webrtc::RtpExtension(webrtc::RtpExtension::kVideoContentTypeUri, | 439 webrtc::RtpExtension(webrtc::RtpExtension::kVideoContentTypeUri, |
456 webrtc::RtpExtension::kVideoContentTypeDefaultId)); | 440 webrtc::RtpExtension::kVideoContentTypeDefaultId)); |
457 capabilities.header_extensions.push_back( | 441 capabilities.header_extensions.push_back( |
458 webrtc::RtpExtension(webrtc::RtpExtension::kVideoTimingUri, | 442 webrtc::RtpExtension(webrtc::RtpExtension::kVideoTimingUri, |
459 webrtc::RtpExtension::kVideoTimingDefaultId)); | 443 webrtc::RtpExtension::kVideoTimingDefaultId)); |
460 return capabilities; | 444 return capabilities; |
461 } | 445 } |
462 | 446 |
463 void WebRtcVideoEngine::SetExternalDecoderFactory( | 447 namespace { |
464 WebRtcVideoDecoderFactory* decoder_factory) { | |
465 RTC_DCHECK(!initialized_); | |
466 decoder_factory_.reset(new CricketDecoderFactoryAdapter(decoder_factory)); | |
467 } | |
468 | |
469 void WebRtcVideoEngine::SetExternalEncoderFactory( | |
470 WebRtcVideoEncoderFactory* encoder_factory) { | |
471 RTC_DCHECK(!initialized_); | |
472 encoder_factory_.reset(new CricketEncoderFactoryAdapter(encoder_factory)); | |
473 } | |
474 | |
475 // This function will assign dynamic payload types (in the range [96, 127]) to | 448 // This function will assign dynamic payload types (in the range [96, 127]) to |
476 // the input codecs, and also add associated RTX codecs for recognized codecs | 449 // the input codecs, and also add associated RTX codecs for recognized codecs |
477 // (VP8, VP9, H264, and RED). It will also add default feedback params to the | 450 // (VP8, VP9, H264, and RED). It will also add default feedback params to the |
478 // codecs. | 451 // codecs. |
479 static std::vector<VideoCodec> AssignPayloadTypesAndAddAssociatedRtxCodecs( | 452 std::vector<VideoCodec> AssignPayloadTypesAndAddAssociatedRtxCodecs( |
480 const std::vector<VideoCodec>& input_codecs) { | 453 const std::vector<VideoCodec>& input_codecs) { |
481 static const int kFirstDynamicPayloadType = 96; | 454 static const int kFirstDynamicPayloadType = 96; |
482 static const int kLastDynamicPayloadType = 127; | 455 static const int kLastDynamicPayloadType = 127; |
483 int payload_type = kFirstDynamicPayloadType; | 456 int payload_type = kFirstDynamicPayloadType; |
484 std::vector<VideoCodec> output_codecs; | 457 std::vector<VideoCodec> output_codecs; |
485 for (VideoCodec codec : input_codecs) { | 458 for (VideoCodec codec : input_codecs) { |
486 codec.id = payload_type; | 459 codec.id = payload_type; |
487 if (codec.name != kRedCodecName && codec.name != kUlpfecCodecName && | 460 if (codec.name != kRedCodecName && codec.name != kUlpfecCodecName && |
488 codec.name != kFlexfecCodecName) { | 461 codec.name != kFlexfecCodecName) { |
489 AddDefaultFeedbackParams(&codec); | 462 AddDefaultFeedbackParams(&codec); |
(...skipping 16 matching lines...) Expand all Loading... |
506 VideoCodec::CreateRtxCodec(payload_type, codec.id)); | 479 VideoCodec::CreateRtxCodec(payload_type, codec.id)); |
507 | 480 |
508 // Increment payload type. | 481 // Increment payload type. |
509 ++payload_type; | 482 ++payload_type; |
510 if (payload_type > kLastDynamicPayloadType) | 483 if (payload_type > kLastDynamicPayloadType) |
511 break; | 484 break; |
512 } | 485 } |
513 } | 486 } |
514 return output_codecs; | 487 return output_codecs; |
515 } | 488 } |
| 489 } // namespace |
516 | 490 |
517 std::vector<VideoCodec> CricketEncoderFactoryAdapter::GetSupportedCodecs() | 491 std::vector<VideoCodec> CricketEncoderFactoryAdapter::GetSupportedCodecs() |
518 const { | 492 const { |
519 std::vector<VideoCodec> codecs = InternalEncoderFactory().supported_codecs(); | 493 std::vector<VideoCodec> codecs = InternalEncoderFactory().supported_codecs(); |
520 LOG(LS_INFO) << "Internally supported codecs: " | 494 LOG(LS_INFO) << "Internally supported codecs: " |
521 << CodecVectorToString(codecs); | 495 << CodecVectorToString(codecs); |
522 | 496 |
523 // Add external codecs. | 497 // Add external codecs. |
524 if (external_encoder_factory_ != nullptr) { | 498 if (external_encoder_factory_ != nullptr) { |
525 const std::vector<VideoCodec>& external_codecs = | 499 const std::vector<VideoCodec>& external_codecs = |
526 external_encoder_factory_->supported_codecs(); | 500 external_encoder_factory_->supported_codecs(); |
527 for (const VideoCodec& codec : external_codecs) { | 501 for (const VideoCodec& codec : external_codecs) { |
528 // Don't add same codec twice. | 502 // Don't add same codec twice. |
529 if (!FindMatchingCodec(codecs, codec)) | 503 if (!FindMatchingCodec(codecs, codec)) |
530 codecs.push_back(codec); | 504 codecs.push_back(codec); |
531 } | 505 } |
532 LOG(LS_INFO) << "Codecs supported by the external encoder factory: " | 506 LOG(LS_INFO) << "Codecs supported by the external encoder factory: " |
533 << CodecVectorToString(external_codecs); | 507 << CodecVectorToString(external_codecs); |
534 } | 508 } |
535 | 509 |
536 return AssignPayloadTypesAndAddAssociatedRtxCodecs(codecs); | 510 return AssignPayloadTypesAndAddAssociatedRtxCodecs(codecs); |
537 } | 511 } |
538 | 512 |
539 WebRtcVideoChannel::WebRtcVideoChannel( | 513 WebRtcVideoChannel::WebRtcVideoChannel( |
540 webrtc::Call* call, | 514 webrtc::Call* call, |
541 const MediaConfig& config, | 515 const MediaConfig& config, |
542 const VideoOptions& options, | 516 const VideoOptions& options, |
543 const EncoderFactoryAdapter& encoder_factory, | 517 const EncoderFactoryAdapter* encoder_factory, |
544 const DecoderFactoryAdapter& decoder_factory) | 518 const DecoderFactoryAdapter* decoder_factory) |
545 : VideoMediaChannel(config), | 519 : VideoMediaChannel(config), |
546 call_(call), | 520 call_(call), |
547 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), | 521 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), |
548 video_config_(config.video), | 522 video_config_(config.video), |
549 encoder_factory_(encoder_factory.clone()), | 523 encoder_factory_(encoder_factory), |
550 decoder_factory_(decoder_factory.clone()), | 524 decoder_factory_(decoder_factory), |
551 default_send_options_(options), | 525 default_send_options_(options), |
552 last_stats_log_ms_(-1) { | 526 last_stats_log_ms_(-1) { |
553 RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 527 RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
554 | 528 |
555 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; | 529 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; |
556 sending_ = false; | 530 sending_ = false; |
557 recv_codecs_ = MapCodecs(encoder_factory_->GetSupportedCodecs()); | 531 recv_codecs_ = MapCodecs(encoder_factory_->GetSupportedCodecs()); |
558 recv_flexfec_payload_type_ = recv_codecs_.front().flexfec_payload_type; | 532 recv_flexfec_payload_type_ = recv_codecs_.front().flexfec_payload_type; |
559 } | 533 } |
560 | 534 |
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 return false; | 1019 return false; |
1046 | 1020 |
1047 for (uint32_t used_ssrc : sp.ssrcs) | 1021 for (uint32_t used_ssrc : sp.ssrcs) |
1048 send_ssrcs_.insert(used_ssrc); | 1022 send_ssrcs_.insert(used_ssrc); |
1049 | 1023 |
1050 webrtc::VideoSendStream::Config config(this); | 1024 webrtc::VideoSendStream::Config config(this); |
1051 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; | 1025 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; |
1052 config.periodic_alr_bandwidth_probing = | 1026 config.periodic_alr_bandwidth_probing = |
1053 video_config_.periodic_alr_bandwidth_probing; | 1027 video_config_.periodic_alr_bandwidth_probing; |
1054 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( | 1028 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( |
1055 call_, sp, std::move(config), default_send_options_, *encoder_factory_, | 1029 call_, sp, std::move(config), default_send_options_, encoder_factory_, |
1056 video_config_.enable_cpu_overuse_detection, | 1030 video_config_.enable_cpu_overuse_detection, |
1057 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, | 1031 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, |
1058 send_params_); | 1032 send_params_); |
1059 | 1033 |
1060 uint32_t ssrc = sp.first_ssrc(); | 1034 uint32_t ssrc = sp.first_ssrc(); |
1061 RTC_DCHECK(ssrc != 0); | 1035 RTC_DCHECK(ssrc != 0); |
1062 send_streams_[ssrc] = stream; | 1036 send_streams_[ssrc] = stream; |
1063 | 1037 |
1064 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { | 1038 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { |
1065 rtcp_receiver_report_ssrc_ = ssrc; | 1039 rtcp_receiver_report_ssrc_ = ssrc; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1156 | 1130 |
1157 webrtc::VideoReceiveStream::Config config(this); | 1131 webrtc::VideoReceiveStream::Config config(this); |
1158 webrtc::FlexfecReceiveStream::Config flexfec_config(this); | 1132 webrtc::FlexfecReceiveStream::Config flexfec_config(this); |
1159 ConfigureReceiverRtp(&config, &flexfec_config, sp); | 1133 ConfigureReceiverRtp(&config, &flexfec_config, sp); |
1160 | 1134 |
1161 config.disable_prerenderer_smoothing = | 1135 config.disable_prerenderer_smoothing = |
1162 video_config_.disable_prerenderer_smoothing; | 1136 video_config_.disable_prerenderer_smoothing; |
1163 config.sync_group = sp.sync_label; | 1137 config.sync_group = sp.sync_label; |
1164 | 1138 |
1165 receive_streams_[ssrc] = new WebRtcVideoReceiveStream( | 1139 receive_streams_[ssrc] = new WebRtcVideoReceiveStream( |
1166 call_, sp, std::move(config), *decoder_factory_, default_stream, | 1140 call_, sp, std::move(config), decoder_factory_, default_stream, |
1167 recv_codecs_, flexfec_config); | 1141 recv_codecs_, flexfec_config); |
1168 | 1142 |
1169 return true; | 1143 return true; |
1170 } | 1144 } |
1171 | 1145 |
1172 void WebRtcVideoChannel::ConfigureReceiverRtp( | 1146 void WebRtcVideoChannel::ConfigureReceiverRtp( |
1173 webrtc::VideoReceiveStream::Config* config, | 1147 webrtc::VideoReceiveStream::Config* config, |
1174 webrtc::FlexfecReceiveStream::Config* flexfec_config, | 1148 webrtc::FlexfecReceiveStream::Config* flexfec_config, |
1175 const StreamParams& sp) const { | 1149 const StreamParams& sp) const { |
1176 uint32_t ssrc = sp.first_ssrc(); | 1150 uint32_t ssrc = sp.first_ssrc(); |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1495 bool has_internal_source) | 1469 bool has_internal_source) |
1496 : encoder(std::move(encoder)), | 1470 : encoder(std::move(encoder)), |
1497 is_hardware_accelerated(is_hardware_accelerated), | 1471 is_hardware_accelerated(is_hardware_accelerated), |
1498 has_internal_source(has_internal_source) {} | 1472 has_internal_source(has_internal_source) {} |
1499 | 1473 |
1500 WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream( | 1474 WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream( |
1501 webrtc::Call* call, | 1475 webrtc::Call* call, |
1502 const StreamParams& sp, | 1476 const StreamParams& sp, |
1503 webrtc::VideoSendStream::Config config, | 1477 webrtc::VideoSendStream::Config config, |
1504 const VideoOptions& options, | 1478 const VideoOptions& options, |
1505 const EncoderFactoryAdapter& encoder_factory, | 1479 const EncoderFactoryAdapter* encoder_factory, |
1506 bool enable_cpu_overuse_detection, | 1480 bool enable_cpu_overuse_detection, |
1507 int max_bitrate_bps, | 1481 int max_bitrate_bps, |
1508 const rtc::Optional<VideoCodecSettings>& codec_settings, | 1482 const rtc::Optional<VideoCodecSettings>& codec_settings, |
1509 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, | 1483 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, |
1510 // TODO(deadbeef): Don't duplicate information between send_params, | 1484 // TODO(deadbeef): Don't duplicate information between send_params, |
1511 // rtp_extensions, options, etc. | 1485 // rtp_extensions, options, etc. |
1512 const VideoSendParameters& send_params) | 1486 const VideoSendParameters& send_params) |
1513 : worker_thread_(rtc::Thread::Current()), | 1487 : worker_thread_(rtc::Thread::Current()), |
1514 ssrcs_(sp.ssrcs), | 1488 ssrcs_(sp.ssrcs), |
1515 ssrc_groups_(sp.ssrc_groups), | 1489 ssrc_groups_(sp.ssrc_groups), |
1516 call_(call), | 1490 call_(call), |
1517 enable_cpu_overuse_detection_(enable_cpu_overuse_detection), | 1491 enable_cpu_overuse_detection_(enable_cpu_overuse_detection), |
1518 source_(nullptr), | 1492 source_(nullptr), |
1519 encoder_factory_(encoder_factory.clone()), | 1493 encoder_factory_(encoder_factory), |
1520 stream_(nullptr), | 1494 stream_(nullptr), |
1521 encoder_sink_(nullptr), | 1495 encoder_sink_(nullptr), |
1522 parameters_(std::move(config), options, max_bitrate_bps, codec_settings), | 1496 parameters_(std::move(config), options, max_bitrate_bps, codec_settings), |
1523 rtp_parameters_(CreateRtpParametersWithOneEncoding()), | 1497 rtp_parameters_(CreateRtpParametersWithOneEncoding()), |
1524 sending_(false) { | 1498 sending_(false) { |
1525 parameters_.config.rtp.max_packet_size = kVideoMtu; | 1499 parameters_.config.rtp.max_packet_size = kVideoMtu; |
1526 parameters_.conference_mode = send_params.conference_mode; | 1500 parameters_.conference_mode = send_params.conference_mode; |
1527 | 1501 |
1528 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); | 1502 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); |
1529 | 1503 |
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2096 } | 2070 } |
2097 | 2071 |
2098 // Call stream_->Start() if necessary conditions are met. | 2072 // Call stream_->Start() if necessary conditions are met. |
2099 UpdateSendState(); | 2073 UpdateSendState(); |
2100 } | 2074 } |
2101 | 2075 |
2102 WebRtcVideoChannel::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( | 2076 WebRtcVideoChannel::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( |
2103 webrtc::Call* call, | 2077 webrtc::Call* call, |
2104 const StreamParams& sp, | 2078 const StreamParams& sp, |
2105 webrtc::VideoReceiveStream::Config config, | 2079 webrtc::VideoReceiveStream::Config config, |
2106 const DecoderFactoryAdapter& decoder_factory, | 2080 const DecoderFactoryAdapter* decoder_factory, |
2107 bool default_stream, | 2081 bool default_stream, |
2108 const std::vector<VideoCodecSettings>& recv_codecs, | 2082 const std::vector<VideoCodecSettings>& recv_codecs, |
2109 const webrtc::FlexfecReceiveStream::Config& flexfec_config) | 2083 const webrtc::FlexfecReceiveStream::Config& flexfec_config) |
2110 : call_(call), | 2084 : call_(call), |
2111 stream_params_(sp), | 2085 stream_params_(sp), |
2112 stream_(NULL), | 2086 stream_(NULL), |
2113 default_stream_(default_stream), | 2087 default_stream_(default_stream), |
2114 config_(std::move(config)), | 2088 config_(std::move(config)), |
2115 flexfec_config_(flexfec_config), | 2089 flexfec_config_(flexfec_config), |
2116 flexfec_stream_(nullptr), | 2090 flexfec_stream_(nullptr), |
2117 decoder_factory_(decoder_factory.clone()), | 2091 decoder_factory_(decoder_factory), |
2118 sink_(NULL), | 2092 sink_(NULL), |
2119 first_frame_timestamp_(-1), | 2093 first_frame_timestamp_(-1), |
2120 estimated_remote_start_ntp_time_ms_(0) { | 2094 estimated_remote_start_ntp_time_ms_(0) { |
2121 config_.renderer = this; | 2095 config_.renderer = this; |
2122 DecoderMap old_decoders; | 2096 DecoderMap old_decoders; |
2123 ConfigureCodecs(recv_codecs, &old_decoders); | 2097 ConfigureCodecs(recv_codecs, &old_decoders); |
2124 ConfigureFlexfecCodec(flexfec_config.payload_type); | 2098 ConfigureFlexfecCodec(flexfec_config.payload_type); |
2125 MaybeRecreateWebRtcFlexfecStream(); | 2099 MaybeRecreateWebRtcFlexfecStream(); |
2126 RecreateWebRtcVideoStream(); | 2100 RecreateWebRtcVideoStream(); |
2127 RTC_DCHECK(old_decoders.empty()); | 2101 RTC_DCHECK(old_decoders.empty()); |
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2634 stream.temporal_layer_thresholds_bps.resize(GetDefaultVp9TemporalLayers() - | 2608 stream.temporal_layer_thresholds_bps.resize(GetDefaultVp9TemporalLayers() - |
2635 1); | 2609 1); |
2636 } | 2610 } |
2637 | 2611 |
2638 std::vector<webrtc::VideoStream> streams; | 2612 std::vector<webrtc::VideoStream> streams; |
2639 streams.push_back(stream); | 2613 streams.push_back(stream); |
2640 return streams; | 2614 return streams; |
2641 } | 2615 } |
2642 | 2616 |
2643 } // namespace cricket | 2617 } // namespace cricket |
OLD | NEW |