Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(470)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine.cc

Issue 3008043002: Simplify passing video codec factories in media engine (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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(&parameters_.config.rtp.ssrcs); 1502 sp.GetPrimarySsrcs(&parameters_.config.rtp.ssrcs);
1529 1503
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine.h ('k') | webrtc/media/engine/webrtcvideoengine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698