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

Side by Side Diff: talk/media/webrtc/webrtcvideoengine2.cc

Issue 1269863005: MediaController/Call instantiation. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Remove redundant reset(nullptr) Created 5 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 * libjingle 2 * libjingle
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 const int kVideoRtpBufferSize = 65536; 333 const int kVideoRtpBufferSize = 65536;
334 334
335 // This constant is really an on/off, lower-level configurable NACK history 335 // This constant is really an on/off, lower-level configurable NACK history
336 // duration hasn't been implemented. 336 // duration hasn't been implemented.
337 static const int kNackHistoryMs = 1000; 337 static const int kNackHistoryMs = 1000;
338 338
339 static const int kDefaultQpMax = 56; 339 static const int kDefaultQpMax = 56;
340 340
341 static const int kDefaultRtcpReceiverReportSsrc = 1; 341 static const int kDefaultRtcpReceiverReportSsrc = 1;
342 342
343 const int kMinBandwidthBps = 30000;
344 const int kStartBandwidthBps = 300000;
345 const int kMaxBandwidthBps = 2000000;
346
347 std::vector<VideoCodec> DefaultVideoCodecList() { 343 std::vector<VideoCodec> DefaultVideoCodecList() {
348 std::vector<VideoCodec> codecs; 344 std::vector<VideoCodec> codecs;
349 if (CodecIsInternallySupported(kVp9CodecName)) { 345 if (CodecIsInternallySupported(kVp9CodecName)) {
350 codecs.push_back(MakeVideoCodecWithDefaultFeedbackParams(kDefaultVp9PlType, 346 codecs.push_back(MakeVideoCodecWithDefaultFeedbackParams(kDefaultVp9PlType,
351 kVp9CodecName)); 347 kVp9CodecName));
352 // TODO(andresp): Add rtx codec for vp9 and verify it works. 348 // TODO(andresp): Add rtx codec for vp9 and verify it works.
353 } 349 }
354 codecs.push_back(MakeVideoCodecWithDefaultFeedbackParams(kDefaultVp8PlType, 350 codecs.push_back(MakeVideoCodecWithDefaultFeedbackParams(kDefaultVp8PlType,
355 kVp8CodecName)); 351 kVp8CodecName));
356 if (CodecIsInternallySupported(kH264CodecName)) { 352 if (CodecIsInternallySupported(kH264CodecName)) {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 LOG(LS_INFO) << "Creating default receive stream for SSRC=" << ssrc << "."; 526 LOG(LS_INFO) << "Creating default receive stream for SSRC=" << ssrc << ".";
531 if (!channel->AddRecvStream(sp, true)) { 527 if (!channel->AddRecvStream(sp, true)) {
532 LOG(LS_WARNING) << "Could not create default receive stream."; 528 LOG(LS_WARNING) << "Could not create default receive stream.";
533 } 529 }
534 530
535 channel->SetRenderer(ssrc, default_renderer_); 531 channel->SetRenderer(ssrc, default_renderer_);
536 default_recv_ssrc_ = ssrc; 532 default_recv_ssrc_ = ssrc;
537 return kDeliverPacket; 533 return kDeliverPacket;
538 } 534 }
539 535
540 WebRtcCallFactory::~WebRtcCallFactory() {
541 }
542 webrtc::Call* WebRtcCallFactory::CreateCall(
543 const webrtc::Call::Config& config) {
544 return webrtc::Call::Create(config);
545 }
546
547 VideoRenderer* DefaultUnsignalledSsrcHandler::GetDefaultRenderer() const { 536 VideoRenderer* DefaultUnsignalledSsrcHandler::GetDefaultRenderer() const {
548 return default_renderer_; 537 return default_renderer_;
549 } 538 }
550 539
551 void DefaultUnsignalledSsrcHandler::SetDefaultRenderer( 540 void DefaultUnsignalledSsrcHandler::SetDefaultRenderer(
552 VideoMediaChannel* channel, 541 VideoMediaChannel* channel,
553 VideoRenderer* renderer) { 542 VideoRenderer* renderer) {
554 default_renderer_ = renderer; 543 default_renderer_ = renderer;
555 if (default_recv_ssrc_ != 0) { 544 if (default_recv_ssrc_ != 0) {
556 channel->SetRenderer(default_recv_ssrc_, default_renderer_); 545 channel->SetRenderer(default_recv_ssrc_, default_renderer_);
557 } 546 }
558 } 547 }
559 548
560 WebRtcVideoEngine2::WebRtcVideoEngine2(WebRtcVoiceEngine* voice_engine) 549 WebRtcVideoEngine2::WebRtcVideoEngine2()
561 : voice_engine_(voice_engine), 550 : initialized_(false),
562 initialized_(false),
563 call_factory_(&default_call_factory_),
564 external_decoder_factory_(NULL), 551 external_decoder_factory_(NULL),
565 external_encoder_factory_(NULL) { 552 external_encoder_factory_(NULL) {
566 LOG(LS_INFO) << "WebRtcVideoEngine2::WebRtcVideoEngine2()"; 553 LOG(LS_INFO) << "WebRtcVideoEngine2::WebRtcVideoEngine2()";
567 video_codecs_ = GetSupportedCodecs(); 554 video_codecs_ = GetSupportedCodecs();
568 rtp_header_extensions_.push_back( 555 rtp_header_extensions_.push_back(
569 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, 556 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension,
570 kRtpTimestampOffsetHeaderExtensionDefaultId)); 557 kRtpTimestampOffsetHeaderExtensionDefaultId));
571 rtp_header_extensions_.push_back( 558 rtp_header_extensions_.push_back(
572 RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, 559 RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension,
573 kRtpAbsoluteSenderTimeHeaderExtensionDefaultId)); 560 kRtpAbsoluteSenderTimeHeaderExtensionDefaultId));
574 rtp_header_extensions_.push_back( 561 rtp_header_extensions_.push_back(
575 RtpHeaderExtension(kRtpVideoRotationHeaderExtension, 562 RtpHeaderExtension(kRtpVideoRotationHeaderExtension,
576 kRtpVideoRotationHeaderExtensionDefaultId)); 563 kRtpVideoRotationHeaderExtensionDefaultId));
577 } 564 }
578 565
579 WebRtcVideoEngine2::~WebRtcVideoEngine2() { 566 WebRtcVideoEngine2::~WebRtcVideoEngine2() {
580 LOG(LS_INFO) << "WebRtcVideoEngine2::~WebRtcVideoEngine2"; 567 LOG(LS_INFO) << "WebRtcVideoEngine2::~WebRtcVideoEngine2";
581 } 568 }
582 569
583 void WebRtcVideoEngine2::SetCallFactory(WebRtcCallFactory* call_factory) {
584 DCHECK(!initialized_);
585 call_factory_ = call_factory;
586 }
587
588 void WebRtcVideoEngine2::Init() { 570 void WebRtcVideoEngine2::Init() {
589 LOG(LS_INFO) << "WebRtcVideoEngine2::Init"; 571 LOG(LS_INFO) << "WebRtcVideoEngine2::Init";
590 initialized_ = true; 572 initialized_ = true;
591 } 573 }
592 574
593 int WebRtcVideoEngine2::GetCapabilities() { return VIDEO_RECV | VIDEO_SEND; } 575 int WebRtcVideoEngine2::GetCapabilities() { return VIDEO_RECV | VIDEO_SEND; }
594 576
595 bool WebRtcVideoEngine2::SetDefaultEncoderConfig( 577 bool WebRtcVideoEngine2::SetDefaultEncoderConfig(
596 const VideoEncoderConfig& config) { 578 const VideoEncoderConfig& config) {
597 const VideoCodec& codec = config.max_codec; 579 const VideoCodec& codec = config.max_codec;
(...skipping 11 matching lines...) Expand all
609 if (!supports_codec) { 591 if (!supports_codec) {
610 LOG(LS_ERROR) << "SetDefaultEncoderConfig, codec not supported: " 592 LOG(LS_ERROR) << "SetDefaultEncoderConfig, codec not supported: "
611 << codec.ToString(); 593 << codec.ToString();
612 return false; 594 return false;
613 } 595 }
614 596
615 return true; 597 return true;
616 } 598 }
617 599
618 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel( 600 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel(
619 const VideoOptions& options, 601 webrtc::Call* call,
620 VoiceMediaChannel* voice_channel) { 602 const VideoOptions& options) {
621 DCHECK(initialized_); 603 DCHECK(initialized_);
622 LOG(LS_INFO) << "CreateChannel: " 604 LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString();
623 << (voice_channel != NULL ? "With" : "Without") 605 WebRtcVideoChannel2* channel = new WebRtcVideoChannel2(call, options,
624 << " voice channel. Options: " << options.ToString(); 606 external_encoder_factory_, external_decoder_factory_);
625 WebRtcVideoChannel2* channel =
626 new WebRtcVideoChannel2(call_factory_, voice_engine_,
627 static_cast<WebRtcVoiceMediaChannel*>(voice_channel), options,
628 external_encoder_factory_, external_decoder_factory_);
629 if (!channel->Init()) {
630 delete channel;
631 return NULL;
632 }
633 channel->SetRecvCodecs(video_codecs_); 607 channel->SetRecvCodecs(video_codecs_);
634 return channel; 608 return channel;
635 } 609 }
636 610
637 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const { 611 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const {
638 return video_codecs_; 612 return video_codecs_;
639 } 613 }
640 614
641 const std::vector<RtpHeaderExtension>& 615 const std::vector<RtpHeaderExtension>&
642 WebRtcVideoEngine2::rtp_header_extensions() const { 616 WebRtcVideoEngine2::rtp_header_extensions() const {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 codecs[i].max_fps, 755 codecs[i].max_fps,
782 0); 756 0);
783 757
784 AddDefaultFeedbackParams(&codec); 758 AddDefaultFeedbackParams(&codec);
785 supported_codecs.push_back(codec); 759 supported_codecs.push_back(codec);
786 } 760 }
787 return supported_codecs; 761 return supported_codecs;
788 } 762 }
789 763
790 WebRtcVideoChannel2::WebRtcVideoChannel2( 764 WebRtcVideoChannel2::WebRtcVideoChannel2(
791 WebRtcCallFactory* call_factory, 765 webrtc::Call* call,
792 WebRtcVoiceEngine* voice_engine,
793 WebRtcVoiceMediaChannel* voice_channel,
794 const VideoOptions& options, 766 const VideoOptions& options,
795 WebRtcVideoEncoderFactory* external_encoder_factory, 767 WebRtcVideoEncoderFactory* external_encoder_factory,
796 WebRtcVideoDecoderFactory* external_decoder_factory) 768 WebRtcVideoDecoderFactory* external_decoder_factory)
797 : unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), 769 : call_(call),
798 voice_channel_(voice_channel), 770 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
799 voice_channel_id_(voice_channel ? voice_channel->voe_channel() : -1),
800 external_encoder_factory_(external_encoder_factory), 771 external_encoder_factory_(external_encoder_factory),
801 external_decoder_factory_(external_decoder_factory) { 772 external_decoder_factory_(external_decoder_factory) {
802 DCHECK(thread_checker_.CalledOnValidThread()); 773 DCHECK(thread_checker_.CalledOnValidThread());
803 SetDefaultOptions(); 774 SetDefaultOptions();
804 options_.SetAll(options); 775 options_.SetAll(options);
805 options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_); 776 options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_);
806 webrtc::Call::Config config;
807 if (voice_engine != NULL) {
808 config.voice_engine = voice_engine->voe()->engine();
809 }
810 config.bitrate_config.min_bitrate_bps = kMinBandwidthBps;
811 config.bitrate_config.start_bitrate_bps = kStartBandwidthBps;
812 config.bitrate_config.max_bitrate_bps = kMaxBandwidthBps;
813 call_.reset(call_factory->CreateCall(config));
814 if (voice_channel_) {
815 voice_channel_->SetCall(call_.get());
816 }
817 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; 777 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
818 sending_ = false; 778 sending_ = false;
819 default_send_ssrc_ = 0; 779 default_send_ssrc_ = 0;
820 } 780 }
821 781
822 void WebRtcVideoChannel2::SetDefaultOptions() { 782 void WebRtcVideoChannel2::SetDefaultOptions() {
823 options_.cpu_overuse_detection.Set(true); 783 options_.cpu_overuse_detection.Set(true);
824 options_.dscp.Set(false); 784 options_.dscp.Set(false);
825 options_.suspend_below_min_bitrate.Set(false); 785 options_.suspend_below_min_bitrate.Set(false);
826 options_.video_noise_reduction.Set(true); 786 options_.video_noise_reduction.Set(true);
827 options_.screencast_min_bitrate.Set(0); 787 options_.screencast_min_bitrate.Set(0);
828 } 788 }
829 789
830 WebRtcVideoChannel2::~WebRtcVideoChannel2() { 790 WebRtcVideoChannel2::~WebRtcVideoChannel2() {
831 DetachVoiceChannel();
832 for (auto& kv : send_streams_) 791 for (auto& kv : send_streams_)
833 delete kv.second; 792 delete kv.second;
834 for (auto& kv : receive_streams_) 793 for (auto& kv : receive_streams_)
835 delete kv.second; 794 delete kv.second;
836 } 795 }
837 796
838 bool WebRtcVideoChannel2::Init() { return true; }
839
840 void WebRtcVideoChannel2::DetachVoiceChannel() {
841 DCHECK(thread_checker_.CalledOnValidThread());
842 if (voice_channel_) {
843 voice_channel_->SetCall(nullptr);
844 voice_channel_ = nullptr;
845 }
846 }
847
848 bool WebRtcVideoChannel2::CodecIsExternallySupported( 797 bool WebRtcVideoChannel2::CodecIsExternallySupported(
849 const std::string& name) const { 798 const std::string& name) const {
850 if (external_encoder_factory_ == NULL) { 799 if (external_encoder_factory_ == NULL) {
851 return false; 800 return false;
852 } 801 }
853 802
854 const std::vector<WebRtcVideoEncoderFactory::VideoCodec> external_codecs = 803 const std::vector<WebRtcVideoEncoderFactory::VideoCodec> external_codecs =
855 external_encoder_factory_->codecs(); 804 external_encoder_factory_->codecs();
856 for (size_t c = 0; c < external_codecs.size(); ++c) { 805 for (size_t c = 0; c < external_codecs.size(); ++c) {
857 if (CodecNamesEq(name, external_codecs[c].name)) { 806 if (CodecNamesEq(name, external_codecs[c].name)) {
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 if (!ValidateSendSsrcAvailability(sp)) 1091 if (!ValidateSendSsrcAvailability(sp))
1143 return false; 1092 return false;
1144 1093
1145 for (uint32 used_ssrc : sp.ssrcs) 1094 for (uint32 used_ssrc : sp.ssrcs)
1146 send_ssrcs_.insert(used_ssrc); 1095 send_ssrcs_.insert(used_ssrc);
1147 1096
1148 webrtc::VideoSendStream::Config config(this); 1097 webrtc::VideoSendStream::Config config(this);
1149 config.overuse_callback = this; 1098 config.overuse_callback = this;
1150 1099
1151 WebRtcVideoSendStream* stream = 1100 WebRtcVideoSendStream* stream =
1152 new WebRtcVideoSendStream(call_.get(), 1101 new WebRtcVideoSendStream(call_,
1153 sp, 1102 sp,
1154 config, 1103 config,
1155 external_encoder_factory_, 1104 external_encoder_factory_,
1156 options_, 1105 options_,
1157 bitrate_config_.max_bitrate_bps, 1106 bitrate_config_.max_bitrate_bps,
1158 send_codec_, 1107 send_codec_,
1159 send_rtp_extensions_); 1108 send_rtp_extensions_);
1160 1109
1161 uint32 ssrc = sp.first_ssrc(); 1110 uint32 ssrc = sp.first_ssrc();
1162 DCHECK(ssrc != 0); 1111 DCHECK(ssrc != 0);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 // Set up A/V sync group based on sync label. 1214 // Set up A/V sync group based on sync label.
1266 config.sync_group = sp.sync_label; 1215 config.sync_group = sp.sync_label;
1267 1216
1268 config.rtp.remb = false; 1217 config.rtp.remb = false;
1269 VideoCodecSettings send_codec; 1218 VideoCodecSettings send_codec;
1270 if (send_codec_.Get(&send_codec)) { 1219 if (send_codec_.Get(&send_codec)) {
1271 config.rtp.remb = HasRemb(send_codec.codec); 1220 config.rtp.remb = HasRemb(send_codec.codec);
1272 } 1221 }
1273 1222
1274 receive_streams_[ssrc] = new WebRtcVideoReceiveStream( 1223 receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
1275 call_.get(), sp, config, external_decoder_factory_, default_stream, 1224 call_, sp, config, external_decoder_factory_, default_stream,
1276 recv_codecs_); 1225 recv_codecs_);
1277 1226
1278 return true; 1227 return true;
1279 } 1228 }
1280 1229
1281 void WebRtcVideoChannel2::ConfigureReceiverRtp( 1230 void WebRtcVideoChannel2::ConfigureReceiverRtp(
1282 webrtc::VideoReceiveStream::Config* config, 1231 webrtc::VideoReceiveStream::Config* config,
1283 const StreamParams& sp) const { 1232 const StreamParams& sp) const {
1284 uint32 ssrc = sp.first_ssrc(); 1233 uint32 ssrc = sp.first_ssrc();
1285 1234
(...skipping 1506 matching lines...) Expand 10 before | Expand all | Expand 10 after
2792 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2741 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2793 } 2742 }
2794 } 2743 }
2795 2744
2796 return video_codecs; 2745 return video_codecs;
2797 } 2746 }
2798 2747
2799 } // namespace cricket 2748 } // namespace cricket
2800 2749
2801 #endif // HAVE_WEBRTC_VIDEO 2750 #endif // HAVE_WEBRTC_VIDEO
OLDNEW
« no previous file with comments | « talk/media/webrtc/webrtcvideoengine2.h ('k') | talk/media/webrtc/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698