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

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

Issue 1695663003: Drop VideoOptions from VideoSendParameters. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Let WebRtcVideoChannel2 keep construction-time default VideoOptions. Created 4 years, 9 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 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 const MediaConfig& config, 606 const MediaConfig& config,
607 const VideoOptions& options, 607 const VideoOptions& options,
608 const std::vector<VideoCodec>& recv_codecs, 608 const std::vector<VideoCodec>& recv_codecs,
609 WebRtcVideoEncoderFactory* external_encoder_factory, 609 WebRtcVideoEncoderFactory* external_encoder_factory,
610 WebRtcVideoDecoderFactory* external_decoder_factory) 610 WebRtcVideoDecoderFactory* external_decoder_factory)
611 : VideoMediaChannel(config), 611 : VideoMediaChannel(config),
612 call_(call), 612 call_(call),
613 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), 613 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
614 video_config_(config.video), 614 video_config_(config.video),
615 external_encoder_factory_(external_encoder_factory), 615 external_encoder_factory_(external_encoder_factory),
616 external_decoder_factory_(external_decoder_factory) { 616 external_decoder_factory_(external_decoder_factory),
617 send_default_options_(options) {
617 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 618 RTC_DCHECK(thread_checker_.CalledOnValidThread());
618 619
619 send_params_.options = options;
620
621 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; 620 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
622 sending_ = false; 621 sending_ = false;
623 default_send_ssrc_ = 0; 622 default_send_ssrc_ = 0;
624 RTC_DCHECK(ValidateCodecFormats(recv_codecs)); 623 RTC_DCHECK(ValidateCodecFormats(recv_codecs));
625 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs)); 624 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs));
626 } 625 }
627 626
628 WebRtcVideoChannel2::~WebRtcVideoChannel2() { 627 WebRtcVideoChannel2::~WebRtcVideoChannel2() {
629 for (auto& kv : send_streams_) 628 for (auto& kv : send_streams_)
630 delete kv.second; 629 delete kv.second;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 changed_params->max_bandwidth_bps = rtc::Optional<int>( 732 changed_params->max_bandwidth_bps = rtc::Optional<int>(
734 params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps); 733 params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps);
735 } 734 }
736 735
737 // Handle conference mode. 736 // Handle conference mode.
738 if (params.conference_mode != send_params_.conference_mode) { 737 if (params.conference_mode != send_params_.conference_mode) {
739 changed_params->conference_mode = 738 changed_params->conference_mode =
740 rtc::Optional<bool>(params.conference_mode); 739 rtc::Optional<bool>(params.conference_mode);
741 } 740 }
742 741
743 // Handle options.
744 // TODO(pbos): Require VideoSendParameters to contain a full set of options
745 // and check if params.options != options_ instead of applying a delta.
746 VideoOptions new_options = send_params_.options;
747 new_options.SetAll(params.options);
748 if (!(new_options == send_params_.options)) {
749 changed_params->options = rtc::Optional<VideoOptions>(new_options);
750 }
751
752 // Handle RTCP mode. 742 // Handle RTCP mode.
753 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) { 743 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) {
754 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>( 744 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>(
755 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize 745 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize
756 : webrtc::RtcpMode::kCompound); 746 : webrtc::RtcpMode::kCompound);
757 } 747 }
758 748
759 return true; 749 return true;
760 } 750 }
761 751
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 bitrate_config_.min_bitrate_bps > max_bitrate_bps) { 790 bitrate_config_.min_bitrate_bps > max_bitrate_bps) {
801 bitrate_config_.min_bitrate_bps = max_bitrate_bps; 791 bitrate_config_.min_bitrate_bps = max_bitrate_bps;
802 } 792 }
803 bitrate_config_changed = true; 793 bitrate_config_changed = true;
804 } 794 }
805 795
806 if (bitrate_config_changed) { 796 if (bitrate_config_changed) {
807 call_->SetBitrateConfig(bitrate_config_); 797 call_->SetBitrateConfig(bitrate_config_);
808 } 798 }
809 799
810 if (changed_params.options)
811 send_params_.options.SetAll(*changed_params.options);
812
813 { 800 {
814 rtc::CritScope stream_lock(&stream_crit_); 801 rtc::CritScope stream_lock(&stream_crit_);
815 for (auto& kv : send_streams_) { 802 for (auto& kv : send_streams_) {
816 kv.second->SetSendParameters(changed_params); 803 kv.second->SetSendParameters(changed_params);
817 } 804 }
818 if (changed_params.codec) { 805 if (changed_params.codec) {
819 // Update receive feedback parameters from new codec. 806 // Update receive feedback parameters from new codec.
820 LOG(LS_INFO) 807 LOG(LS_INFO)
821 << "SetFeedbackOptions on all the receive streams because the send " 808 << "SetFeedbackOptions on all the receive streams because the send "
822 "codec has changed."; 809 "codec has changed.";
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 rtc::CritScope stream_lock(&stream_crit_); 980 rtc::CritScope stream_lock(&stream_crit_);
994 981
995 if (!ValidateSendSsrcAvailability(sp)) 982 if (!ValidateSendSsrcAvailability(sp))
996 return false; 983 return false;
997 984
998 for (uint32_t used_ssrc : sp.ssrcs) 985 for (uint32_t used_ssrc : sp.ssrcs)
999 send_ssrcs_.insert(used_ssrc); 986 send_ssrcs_.insert(used_ssrc);
1000 987
1001 webrtc::VideoSendStream::Config config(this); 988 webrtc::VideoSendStream::Config config(this);
1002 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; 989 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate;
1003 WebRtcVideoSendStream* stream = 990 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream(
1004 new WebRtcVideoSendStream(call_, sp, config, external_encoder_factory_, 991 call_, sp, config, send_default_options_, external_encoder_factory_,
1005 video_config_.enable_cpu_overuse_detection, 992 video_config_.enable_cpu_overuse_detection,
1006 bitrate_config_.max_bitrate_bps, send_codec_, 993 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_,
1007 send_rtp_extensions_, send_params_); 994 send_params_);
1008 995
1009 uint32_t ssrc = sp.first_ssrc(); 996 uint32_t ssrc = sp.first_ssrc();
1010 RTC_DCHECK(ssrc != 0); 997 RTC_DCHECK(ssrc != 0);
1011 send_streams_[ssrc] = stream; 998 send_streams_[ssrc] = stream;
1012 999
1013 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { 1000 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) {
1014 rtcp_receiver_report_ssrc_ = ssrc; 1001 rtcp_receiver_report_ssrc_ = ssrc;
1015 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " 1002 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added "
1016 "a send stream."; 1003 "a send stream.";
1017 for (auto& kv : receive_streams_) 1004 for (auto& kv : receive_streams_)
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
1462 external_encoder = encoder; 1449 external_encoder = encoder;
1463 this->encoder = 1450 this->encoder =
1464 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); 1451 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder);
1465 } 1452 }
1466 } 1453 }
1467 1454
1468 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( 1455 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
1469 webrtc::Call* call, 1456 webrtc::Call* call,
1470 const StreamParams& sp, 1457 const StreamParams& sp,
1471 const webrtc::VideoSendStream::Config& config, 1458 const webrtc::VideoSendStream::Config& config,
1459 const VideoOptions& options,
1472 WebRtcVideoEncoderFactory* external_encoder_factory, 1460 WebRtcVideoEncoderFactory* external_encoder_factory,
1473 bool enable_cpu_overuse_detection, 1461 bool enable_cpu_overuse_detection,
1474 int max_bitrate_bps, 1462 int max_bitrate_bps,
1475 const rtc::Optional<VideoCodecSettings>& codec_settings, 1463 const rtc::Optional<VideoCodecSettings>& codec_settings,
1476 const std::vector<webrtc::RtpExtension>& rtp_extensions, 1464 const std::vector<webrtc::RtpExtension>& rtp_extensions,
1477 // TODO(deadbeef): Don't duplicate information between send_params, 1465 // TODO(deadbeef): Don't duplicate information between send_params,
1478 // rtp_extensions, options, etc. 1466 // rtp_extensions, options, etc.
1479 const VideoSendParameters& send_params) 1467 const VideoSendParameters& send_params)
1480 : worker_thread_(rtc::Thread::Current()), 1468 : worker_thread_(rtc::Thread::Current()),
1481 ssrcs_(sp.ssrcs), 1469 ssrcs_(sp.ssrcs),
1482 ssrc_groups_(sp.ssrc_groups), 1470 ssrc_groups_(sp.ssrc_groups),
1483 call_(call), 1471 call_(call),
1484 cpu_restricted_counter_(0), 1472 cpu_restricted_counter_(0),
1485 number_of_cpu_adapt_changes_(0), 1473 number_of_cpu_adapt_changes_(0),
1486 capturer_(nullptr), 1474 capturer_(nullptr),
1487 external_encoder_factory_(external_encoder_factory), 1475 external_encoder_factory_(external_encoder_factory),
1488 stream_(nullptr), 1476 stream_(nullptr),
1489 parameters_(config, send_params.options, max_bitrate_bps, codec_settings), 1477 parameters_(config, options, max_bitrate_bps, codec_settings),
1490 pending_encoder_reconfiguration_(false), 1478 pending_encoder_reconfiguration_(false),
1491 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), 1479 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false),
1492 sending_(false), 1480 sending_(false),
1493 muted_(false), 1481 muted_(false),
1494 first_frame_timestamp_ms_(0), 1482 first_frame_timestamp_ms_(0),
1495 last_frame_timestamp_ms_(0) { 1483 last_frame_timestamp_ms_(0) {
1496 parameters_.config.rtp.max_packet_size = kVideoMtu; 1484 parameters_.config.rtp.max_packet_size = kVideoMtu;
1497 parameters_.conference_mode = send_params.conference_mode; 1485 parameters_.conference_mode = send_params.conference_mode;
1498 1486
1499 sp.GetPrimarySsrcs(&parameters_.config.rtp.ssrcs); 1487 sp.GetPrimarySsrcs(&parameters_.config.rtp.ssrcs);
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
1773 } 1761 }
1774 if (params.max_bandwidth_bps) { 1762 if (params.max_bandwidth_bps) {
1775 // Max bitrate has changed, reconfigure encoder settings on the next frame 1763 // Max bitrate has changed, reconfigure encoder settings on the next frame
1776 // or stream recreation. 1764 // or stream recreation.
1777 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; 1765 parameters_.max_bitrate_bps = *params.max_bandwidth_bps;
1778 pending_encoder_reconfiguration_ = true; 1766 pending_encoder_reconfiguration_ = true;
1779 } 1767 }
1780 if (params.conference_mode) { 1768 if (params.conference_mode) {
1781 parameters_.conference_mode = *params.conference_mode; 1769 parameters_.conference_mode = *params.conference_mode;
1782 } 1770 }
1783 if (params.options)
1784 SetOptions(*params.options);
1785 1771
1786 // Set codecs and options. 1772 // Set codecs and options.
1787 if (params.codec) { 1773 if (params.codec) {
1788 SetCodec(*params.codec); 1774 SetCodec(*params.codec);
1789 return; 1775 return;
1790 } else if (params.conference_mode && parameters_.codec_settings) { 1776 } else if (params.conference_mode && parameters_.codec_settings) {
1791 SetCodec(*parameters_.codec_settings); 1777 SetCodec(*parameters_.codec_settings);
1792 return; 1778 return;
1793 } 1779 }
1794 if (recreate_stream) { 1780 if (recreate_stream) {
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
2514 rtx_mapping[video_codecs[i].codec.id] != 2500 rtx_mapping[video_codecs[i].codec.id] !=
2515 fec_settings.red_payload_type) { 2501 fec_settings.red_payload_type) {
2516 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2502 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2517 } 2503 }
2518 } 2504 }
2519 2505
2520 return video_codecs; 2506 return video_codecs;
2521 } 2507 }
2522 2508
2523 } // namespace cricket 2509 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698