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

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

Issue 1745003002: Move suspend_below_min_bitrate from VideoOptions to MediaConfig. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase. 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 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 WebRtcVideoChannel2::WebRtcVideoChannel2( 605 WebRtcVideoChannel2::WebRtcVideoChannel2(
606 webrtc::Call* call, 606 webrtc::Call* call,
607 const MediaConfig& config, 607 const MediaConfig& config,
608 const VideoOptions& options, 608 const VideoOptions& options,
609 const std::vector<VideoCodec>& recv_codecs, 609 const std::vector<VideoCodec>& recv_codecs,
610 WebRtcVideoEncoderFactory* external_encoder_factory, 610 WebRtcVideoEncoderFactory* external_encoder_factory,
611 WebRtcVideoDecoderFactory* external_decoder_factory) 611 WebRtcVideoDecoderFactory* external_decoder_factory)
612 : VideoMediaChannel(config), 612 : VideoMediaChannel(config),
613 call_(call), 613 call_(call),
614 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), 614 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
615 signal_cpu_adaptation_(config.enable_cpu_overuse_detection), 615 video_config_(config.video),
616 disable_prerenderer_smoothing_(config.disable_prerenderer_smoothing),
617 external_encoder_factory_(external_encoder_factory), 616 external_encoder_factory_(external_encoder_factory),
618 external_decoder_factory_(external_decoder_factory) { 617 external_decoder_factory_(external_decoder_factory) {
619 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 618 RTC_DCHECK(thread_checker_.CalledOnValidThread());
620 619
621 send_params_.options = options; 620 send_params_.options = options;
622 621
623 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; 622 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
624 sending_ = false; 623 sending_ = false;
625 default_send_ssrc_ = 0; 624 default_send_ssrc_ = 0;
626 RTC_DCHECK(ValidateCodecFormats(recv_codecs)); 625 RTC_DCHECK(ValidateCodecFormats(recv_codecs));
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 993
995 rtc::CritScope stream_lock(&stream_crit_); 994 rtc::CritScope stream_lock(&stream_crit_);
996 995
997 if (!ValidateSendSsrcAvailability(sp)) 996 if (!ValidateSendSsrcAvailability(sp))
998 return false; 997 return false;
999 998
1000 for (uint32_t used_ssrc : sp.ssrcs) 999 for (uint32_t used_ssrc : sp.ssrcs)
1001 send_ssrcs_.insert(used_ssrc); 1000 send_ssrcs_.insert(used_ssrc);
1002 1001
1003 webrtc::VideoSendStream::Config config(this); 1002 webrtc::VideoSendStream::Config config(this);
1004 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( 1003 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate;
1005 call_, sp, config, external_encoder_factory_, signal_cpu_adaptation_, 1004 WebRtcVideoSendStream* stream =
1006 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, 1005 new WebRtcVideoSendStream(call_, sp, config, external_encoder_factory_,
1007 send_params_); 1006 video_config_.enable_cpu_overuse_detection,
1007 bitrate_config_.max_bitrate_bps, send_codec_,
1008 send_rtp_extensions_, send_params_);
1008 1009
1009 uint32_t ssrc = sp.first_ssrc(); 1010 uint32_t ssrc = sp.first_ssrc();
1010 RTC_DCHECK(ssrc != 0); 1011 RTC_DCHECK(ssrc != 0);
1011 send_streams_[ssrc] = stream; 1012 send_streams_[ssrc] = stream;
1012 1013
1013 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { 1014 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) {
1014 rtcp_receiver_report_ssrc_ = ssrc; 1015 rtcp_receiver_report_ssrc_ = ssrc;
1015 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " 1016 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added "
1016 "a send stream."; 1017 "a send stream.";
1017 for (auto& kv : receive_streams_) 1018 for (auto& kv : receive_streams_)
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1125 1126
1126 // Set up A/V sync group based on sync label. 1127 // Set up A/V sync group based on sync label.
1127 config.sync_group = sp.sync_label; 1128 config.sync_group = sp.sync_label;
1128 1129
1129 config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false; 1130 config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false;
1130 config.rtp.transport_cc = 1131 config.rtp.transport_cc =
1131 send_codec_ ? HasTransportCc(send_codec_->codec) : false; 1132 send_codec_ ? HasTransportCc(send_codec_->codec) : false;
1132 1133
1133 receive_streams_[ssrc] = new WebRtcVideoReceiveStream( 1134 receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
1134 call_, sp, config, external_decoder_factory_, default_stream, 1135 call_, sp, config, external_decoder_factory_, default_stream,
1135 recv_codecs_, disable_prerenderer_smoothing_); 1136 recv_codecs_, video_config_.disable_prerenderer_smoothing);
1136 1137
1137 return true; 1138 return true;
1138 } 1139 }
1139 1140
1140 void WebRtcVideoChannel2::ConfigureReceiverRtp( 1141 void WebRtcVideoChannel2::ConfigureReceiverRtp(
1141 webrtc::VideoReceiveStream::Config* config, 1142 webrtc::VideoReceiveStream::Config* config,
1142 const StreamParams& sp) const { 1143 const StreamParams& sp) const {
1143 uint32_t ssrc = sp.first_ssrc(); 1144 uint32_t ssrc = sp.first_ssrc();
1144 1145
1145 config->rtp.remote_ssrc = ssrc; 1146 config->rtp.remote_ssrc = ssrc;
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1502 &parameters_.config.rtp.rtx.ssrcs); 1503 &parameters_.config.rtp.rtx.ssrcs);
1503 parameters_.config.rtp.c_name = sp.cname; 1504 parameters_.config.rtp.c_name = sp.cname;
1504 parameters_.config.rtp.extensions = rtp_extensions; 1505 parameters_.config.rtp.extensions = rtp_extensions;
1505 parameters_.config.rtp.rtcp_mode = send_params.rtcp.reduced_size 1506 parameters_.config.rtp.rtcp_mode = send_params.rtcp.reduced_size
1506 ? webrtc::RtcpMode::kReducedSize 1507 ? webrtc::RtcpMode::kReducedSize
1507 : webrtc::RtcpMode::kCompound; 1508 : webrtc::RtcpMode::kCompound;
1508 parameters_.config.overuse_callback = 1509 parameters_.config.overuse_callback =
1509 enable_cpu_overuse_detection ? this : nullptr; 1510 enable_cpu_overuse_detection ? this : nullptr;
1510 1511
1511 if (codec_settings) { 1512 if (codec_settings) {
1512 SetCodecAndOptions(*codec_settings, parameters_.options); 1513 SetCodec(*codec_settings);
1513 } 1514 }
1514 } 1515 }
1515 1516
1516 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() { 1517 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() {
1517 DisconnectCapturer(); 1518 DisconnectCapturer();
1518 if (stream_ != NULL) { 1519 if (stream_ != NULL) {
1519 call_->DestroyVideoSendStream(stream_); 1520 call_->DestroyVideoSendStream(stream_);
1520 } 1521 }
1521 DestroyVideoEncoder(&allocated_encoder_); 1522 DestroyVideoEncoder(&allocated_encoder_);
1522 } 1523 }
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 } 1642 }
1642 1643
1643 const std::vector<uint32_t>& 1644 const std::vector<uint32_t>&
1644 WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const { 1645 WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const {
1645 return ssrcs_; 1646 return ssrcs_;
1646 } 1647 }
1647 1648
1648 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetOptions( 1649 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetOptions(
1649 const VideoOptions& options) { 1650 const VideoOptions& options) {
1650 rtc::CritScope cs(&lock_); 1651 rtc::CritScope cs(&lock_);
1651 if (parameters_.codec_settings) { 1652 parameters_.options.SetAll(options);
1652 LOG(LS_INFO) << "SetCodecAndOptions because of SetOptions; options=" 1653 // Reconfigure encoder settings on the next frame or stream
1653 << options.ToString(); 1654 // recreation.
1654 SetCodecAndOptions(*parameters_.codec_settings, options); 1655 pending_encoder_reconfiguration_ = true;
1655 } else {
1656 parameters_.options = options;
1657 }
1658 } 1656 }
1659 1657
1660 webrtc::VideoCodecType CodecTypeFromName(const std::string& name) { 1658 webrtc::VideoCodecType CodecTypeFromName(const std::string& name) {
1661 if (CodecNamesEq(name, kVp8CodecName)) { 1659 if (CodecNamesEq(name, kVp8CodecName)) {
1662 return webrtc::kVideoCodecVP8; 1660 return webrtc::kVideoCodecVP8;
1663 } else if (CodecNamesEq(name, kVp9CodecName)) { 1661 } else if (CodecNamesEq(name, kVp9CodecName)) {
1664 return webrtc::kVideoCodecVP9; 1662 return webrtc::kVideoCodecVP9;
1665 } else if (CodecNamesEq(name, kH264CodecName)) { 1663 } else if (CodecNamesEq(name, kH264CodecName)) {
1666 return webrtc::kVideoCodecH264; 1664 return webrtc::kVideoCodecH264;
1667 } 1665 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1704 } 1702 }
1705 1703
1706 void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder( 1704 void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder(
1707 AllocatedEncoder* encoder) { 1705 AllocatedEncoder* encoder) {
1708 if (encoder->external) { 1706 if (encoder->external) {
1709 external_encoder_factory_->DestroyVideoEncoder(encoder->external_encoder); 1707 external_encoder_factory_->DestroyVideoEncoder(encoder->external_encoder);
1710 } 1708 }
1711 delete encoder->encoder; 1709 delete encoder->encoder;
1712 } 1710 }
1713 1711
1714 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions( 1712 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec(
1715 const VideoCodecSettings& codec_settings, 1713 const VideoCodecSettings& codec_settings) {
1716 const VideoOptions& options) {
1717 parameters_.encoder_config = 1714 parameters_.encoder_config =
1718 CreateVideoEncoderConfig(last_dimensions_, codec_settings.codec); 1715 CreateVideoEncoderConfig(last_dimensions_, codec_settings.codec);
1719 RTC_DCHECK(!parameters_.encoder_config.streams.empty()); 1716 RTC_DCHECK(!parameters_.encoder_config.streams.empty());
1720 1717
1721 AllocatedEncoder new_encoder = CreateVideoEncoder(codec_settings.codec); 1718 AllocatedEncoder new_encoder = CreateVideoEncoder(codec_settings.codec);
1722 parameters_.config.encoder_settings.encoder = new_encoder.encoder; 1719 parameters_.config.encoder_settings.encoder = new_encoder.encoder;
1723 parameters_.config.encoder_settings.full_overuse_time = new_encoder.external; 1720 parameters_.config.encoder_settings.full_overuse_time = new_encoder.external;
1724 parameters_.config.encoder_settings.payload_name = codec_settings.codec.name; 1721 parameters_.config.encoder_settings.payload_name = codec_settings.codec.name;
1725 parameters_.config.encoder_settings.payload_type = codec_settings.codec.id; 1722 parameters_.config.encoder_settings.payload_type = codec_settings.codec.id;
1726 if (new_encoder.external) { 1723 if (new_encoder.external) {
(...skipping 10 matching lines...) Expand all
1737 "payload type. Ignoring."; 1734 "payload type. Ignoring.";
1738 parameters_.config.rtp.rtx.ssrcs.clear(); 1735 parameters_.config.rtp.rtx.ssrcs.clear();
1739 } else { 1736 } else {
1740 parameters_.config.rtp.rtx.payload_type = codec_settings.rtx_payload_type; 1737 parameters_.config.rtp.rtx.payload_type = codec_settings.rtx_payload_type;
1741 } 1738 }
1742 } 1739 }
1743 1740
1744 parameters_.config.rtp.nack.rtp_history_ms = 1741 parameters_.config.rtp.nack.rtp_history_ms =
1745 HasNack(codec_settings.codec) ? kNackHistoryMs : 0; 1742 HasNack(codec_settings.codec) ? kNackHistoryMs : 0;
1746 1743
1747 parameters_.config.suspend_below_min_bitrate =
1748 options.suspend_below_min_bitrate.value_or(false);
1749
1750 parameters_.codec_settings = 1744 parameters_.codec_settings =
1751 rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>(codec_settings); 1745 rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>(codec_settings);
1752 parameters_.options = options;
1753
1754 LOG(LS_INFO)
1755 << "RecreateWebRtcStream (send) because of SetCodecAndOptions; options="
1756 << options.ToString();
1757 RecreateWebRtcStream(); 1746 RecreateWebRtcStream();
1758 if (allocated_encoder_.encoder != new_encoder.encoder) { 1747 if (allocated_encoder_.encoder != new_encoder.encoder) {
1759 DestroyVideoEncoder(&allocated_encoder_); 1748 DestroyVideoEncoder(&allocated_encoder_);
1760 allocated_encoder_ = new_encoder; 1749 allocated_encoder_ = new_encoder;
1761 } 1750 }
1762 } 1751 }
1763 1752
1764 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters( 1753 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters(
1765 const ChangedSendParameters& params) { 1754 const ChangedSendParameters& params) {
1766 rtc::CritScope cs(&lock_); 1755 rtc::CritScope cs(&lock_);
(...skipping 15 matching lines...) Expand all
1782 } 1771 }
1783 if (params.max_bandwidth_bps) { 1772 if (params.max_bandwidth_bps) {
1784 // Max bitrate has changed, reconfigure encoder settings on the next frame 1773 // Max bitrate has changed, reconfigure encoder settings on the next frame
1785 // or stream recreation. 1774 // or stream recreation.
1786 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; 1775 parameters_.max_bitrate_bps = *params.max_bandwidth_bps;
1787 pending_encoder_reconfiguration_ = true; 1776 pending_encoder_reconfiguration_ = true;
1788 } 1777 }
1789 if (params.conference_mode) { 1778 if (params.conference_mode) {
1790 parameters_.conference_mode = *params.conference_mode; 1779 parameters_.conference_mode = *params.conference_mode;
1791 } 1780 }
1781 if (params.options)
1782 SetOptions(*params.options);
1783
1792 // Set codecs and options. 1784 // Set codecs and options.
1793 if (params.codec) { 1785 if (params.codec) {
1794 SetCodecAndOptions(*params.codec, 1786 SetCodec(*params.codec);
1795 params.options ? *params.options : parameters_.options);
1796 return; 1787 return;
1797 } else if (params.options) {
1798 // Reconfigure if codecs are already set.
1799 if (parameters_.codec_settings) {
1800 SetCodecAndOptions(*parameters_.codec_settings, *params.options);
1801 return;
1802 } else {
1803 parameters_.options = *params.options;
1804 }
1805 } else if (params.conference_mode && parameters_.codec_settings) { 1788 } else if (params.conference_mode && parameters_.codec_settings) {
1806 SetCodecAndOptions(*parameters_.codec_settings, parameters_.options); 1789 SetCodec(*parameters_.codec_settings);
1807 return; 1790 return;
1808 } 1791 }
1809 if (recreate_stream) { 1792 if (recreate_stream) {
1810 LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetSendParameters"; 1793 LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetSendParameters";
1811 RecreateWebRtcStream(); 1794 RecreateWebRtcStream();
1812 } 1795 }
1813 } 1796 }
1814 1797
1815 webrtc::VideoEncoderConfig 1798 webrtc::VideoEncoderConfig
1816 WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig( 1799 WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig(
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after
2534 rtx_mapping[video_codecs[i].codec.id] != 2517 rtx_mapping[video_codecs[i].codec.id] !=
2535 fec_settings.red_payload_type) { 2518 fec_settings.red_payload_type) {
2536 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2519 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2537 } 2520 }
2538 } 2521 }
2539 2522
2540 return video_codecs; 2523 return video_codecs;
2541 } 2524 }
2542 2525
2543 } // namespace cricket 2526 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698