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

Side by Side Diff: webrtc/video/video_send_stream.cc

Issue 2912713002: Persist RTP state for FlexFEC. (Closed)
Patch Set: sprang comments 1. Created 3 years, 6 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
« no previous file with comments | « webrtc/video/end_to_end_tests.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 #include "webrtc/video/video_send_stream.h" 10 #include "webrtc/video/video_send_stream.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 rtp_rtcp->SetSendingStatus(false); 88 rtp_rtcp->SetSendingStatus(false);
89 rtp_rtcp->SetSendingMediaStatus(false); 89 rtp_rtcp->SetSendingMediaStatus(false);
90 rtp_rtcp->SetRTCPStatus(RtcpMode::kCompound); 90 rtp_rtcp->SetRTCPStatus(RtcpMode::kCompound);
91 modules.push_back(rtp_rtcp); 91 modules.push_back(rtp_rtcp);
92 } 92 }
93 return modules; 93 return modules;
94 } 94 }
95 95
96 // TODO(brandtr): Update this function when we support multistream protection. 96 // TODO(brandtr): Update this function when we support multistream protection.
97 std::unique_ptr<FlexfecSender> MaybeCreateFlexfecSender( 97 std::unique_ptr<FlexfecSender> MaybeCreateFlexfecSender(
98 const VideoSendStream::Config& config) { 98 const VideoSendStream::Config& config,
99 const std::map<uint32_t, RtpState>& suspended_ssrcs) {
99 if (config.rtp.flexfec.payload_type < 0) { 100 if (config.rtp.flexfec.payload_type < 0) {
100 return nullptr; 101 return nullptr;
101 } 102 }
102 RTC_DCHECK_GE(config.rtp.flexfec.payload_type, 0); 103 RTC_DCHECK_GE(config.rtp.flexfec.payload_type, 0);
103 RTC_DCHECK_LE(config.rtp.flexfec.payload_type, 127); 104 RTC_DCHECK_LE(config.rtp.flexfec.payload_type, 127);
104 if (config.rtp.flexfec.ssrc == 0) { 105 if (config.rtp.flexfec.ssrc == 0) {
105 LOG(LS_WARNING) << "FlexFEC is enabled, but no FlexFEC SSRC given. " 106 LOG(LS_WARNING) << "FlexFEC is enabled, but no FlexFEC SSRC given. "
106 "Therefore disabling FlexFEC."; 107 "Therefore disabling FlexFEC.";
107 return nullptr; 108 return nullptr;
108 } 109 }
(...skipping 12 matching lines...) Expand all
121 122
122 if (config.rtp.flexfec.protected_media_ssrcs.size() > 1) { 123 if (config.rtp.flexfec.protected_media_ssrcs.size() > 1) {
123 LOG(LS_WARNING) 124 LOG(LS_WARNING)
124 << "The supplied FlexfecConfig contained multiple protected " 125 << "The supplied FlexfecConfig contained multiple protected "
125 "media streams, but our implementation currently only " 126 "media streams, but our implementation currently only "
126 "supports protecting a single media stream. " 127 "supports protecting a single media stream. "
127 "To avoid confusion, disabling FlexFEC completely."; 128 "To avoid confusion, disabling FlexFEC completely.";
128 return nullptr; 129 return nullptr;
129 } 130 }
130 131
132 const RtpState* rtp_state = nullptr;
133 auto it = suspended_ssrcs.find(config.rtp.flexfec.ssrc);
134 if (it != suspended_ssrcs.end()) {
135 rtp_state = &it->second;
136 }
137
131 RTC_DCHECK_EQ(1U, config.rtp.flexfec.protected_media_ssrcs.size()); 138 RTC_DCHECK_EQ(1U, config.rtp.flexfec.protected_media_ssrcs.size());
132 return std::unique_ptr<FlexfecSender>(new FlexfecSender( 139 return std::unique_ptr<FlexfecSender>(new FlexfecSender(
133 config.rtp.flexfec.payload_type, config.rtp.flexfec.ssrc, 140 config.rtp.flexfec.payload_type, config.rtp.flexfec.ssrc,
134 config.rtp.flexfec.protected_media_ssrcs[0], config.rtp.extensions, 141 config.rtp.flexfec.protected_media_ssrcs[0], config.rtp.extensions,
135 RTPSender::FecExtensionSizes(), Clock::GetRealTimeClock())); 142 RTPSender::FecExtensionSizes(), rtp_state, Clock::GetRealTimeClock()));
136 } 143 }
137 144
138 } // namespace 145 } // namespace
139 146
140 std::string 147 std::string
141 VideoSendStream::Config::EncoderSettings::ToString() const { 148 VideoSendStream::Config::EncoderSettings::ToString() const {
142 std::stringstream ss; 149 std::stringstream ss;
143 ss << "{payload_name: " << payload_name; 150 ss << "{payload_name: " << payload_name;
144 ss << ", payload_type: " << payload_type; 151 ss << ", payload_type: " << payload_type;
145 ss << ", encoder: " << (encoder ? "(VideoEncoder)" : "nullptr"); 152 ss << ", encoder: " << (encoder ? "(VideoEncoder)" : "nullptr");
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")), 762 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")),
756 stats_proxy_(stats_proxy), 763 stats_proxy_(stats_proxy),
757 config_(config), 764 config_(config),
758 suspended_ssrcs_(std::move(suspended_ssrcs)), 765 suspended_ssrcs_(std::move(suspended_ssrcs)),
759 module_process_thread_(nullptr), 766 module_process_thread_(nullptr),
760 worker_queue_(worker_queue), 767 worker_queue_(worker_queue),
761 check_encoder_activity_task_(nullptr), 768 check_encoder_activity_task_(nullptr),
762 call_stats_(call_stats), 769 call_stats_(call_stats),
763 transport_(transport), 770 transport_(transport),
764 bitrate_allocator_(bitrate_allocator), 771 bitrate_allocator_(bitrate_allocator),
765 flexfec_sender_(MaybeCreateFlexfecSender(*config_)), 772 flexfec_sender_(MaybeCreateFlexfecSender(*config_, suspended_ssrcs_)),
766 max_padding_bitrate_(0), 773 max_padding_bitrate_(0),
767 encoder_min_bitrate_bps_(0), 774 encoder_min_bitrate_bps_(0),
768 encoder_max_bitrate_bps_(initial_encoder_max_bitrate), 775 encoder_max_bitrate_bps_(initial_encoder_max_bitrate),
769 encoder_target_rate_bps_(0), 776 encoder_target_rate_bps_(0),
770 vie_encoder_(vie_encoder), 777 vie_encoder_(vie_encoder),
771 encoder_feedback_(Clock::GetRealTimeClock(), 778 encoder_feedback_(Clock::GetRealTimeClock(),
772 config_->rtp.ssrcs, 779 config_->rtp.ssrcs,
773 vie_encoder), 780 vie_encoder),
774 protection_bitrate_calculator_(Clock::GetRealTimeClock(), this), 781 protection_bitrate_calculator_(Clock::GetRealTimeClock(), this),
775 bandwidth_observer_(transport->send_side_cc() 782 bandwidth_observer_(transport->send_side_cc()
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 1184 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
1178 rtp_rtcp->SetRtxSendPayloadType(config_->rtp.ulpfec.red_rtx_payload_type, 1185 rtp_rtcp->SetRtxSendPayloadType(config_->rtp.ulpfec.red_rtx_payload_type,
1179 config_->rtp.ulpfec.red_payload_type); 1186 config_->rtp.ulpfec.red_payload_type);
1180 } 1187 }
1181 } 1188 }
1182 } 1189 }
1183 1190
1184 std::map<uint32_t, RtpState> VideoSendStreamImpl::GetRtpStates() const { 1191 std::map<uint32_t, RtpState> VideoSendStreamImpl::GetRtpStates() const {
1185 RTC_DCHECK_RUN_ON(worker_queue_); 1192 RTC_DCHECK_RUN_ON(worker_queue_);
1186 std::map<uint32_t, RtpState> rtp_states; 1193 std::map<uint32_t, RtpState> rtp_states;
1194
1187 for (size_t i = 0; i < config_->rtp.ssrcs.size(); ++i) { 1195 for (size_t i = 0; i < config_->rtp.ssrcs.size(); ++i) {
1188 uint32_t ssrc = config_->rtp.ssrcs[i]; 1196 uint32_t ssrc = config_->rtp.ssrcs[i];
1189 RTC_DCHECK_EQ(ssrc, rtp_rtcp_modules_[i]->SSRC()); 1197 RTC_DCHECK_EQ(ssrc, rtp_rtcp_modules_[i]->SSRC());
1190 rtp_states[ssrc] = rtp_rtcp_modules_[i]->GetRtpState(); 1198 rtp_states[ssrc] = rtp_rtcp_modules_[i]->GetRtpState();
1191 } 1199 }
1192 1200
1193 for (size_t i = 0; i < config_->rtp.rtx.ssrcs.size(); ++i) { 1201 for (size_t i = 0; i < config_->rtp.rtx.ssrcs.size(); ++i) {
1194 uint32_t ssrc = config_->rtp.rtx.ssrcs[i]; 1202 uint32_t ssrc = config_->rtp.rtx.ssrcs[i];
1195 rtp_states[ssrc] = rtp_rtcp_modules_[i]->GetRtxState(); 1203 rtp_states[ssrc] = rtp_rtcp_modules_[i]->GetRtxState();
1196 } 1204 }
1197 1205
1206 if (flexfec_sender_) {
1207 uint32_t ssrc = config_->rtp.flexfec.ssrc;
1208 rtp_states[ssrc] = flexfec_sender_->GetRtpState();
1209 }
1210
1198 return rtp_states; 1211 return rtp_states;
1199 } 1212 }
1200 1213
1201 void VideoSendStreamImpl::SignalNetworkState(NetworkState state) { 1214 void VideoSendStreamImpl::SignalNetworkState(NetworkState state) {
1202 RTC_DCHECK_RUN_ON(worker_queue_); 1215 RTC_DCHECK_RUN_ON(worker_queue_);
1203 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 1216 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
1204 rtp_rtcp->SetRTCPStatus(state == kNetworkUp ? config_->rtp.rtcp_mode 1217 rtp_rtcp->SetRTCPStatus(state == kNetworkUp ? config_->rtp.rtcp_mode
1205 : RtcpMode::kOff); 1218 : RtcpMode::kOff);
1206 } 1219 }
1207 } 1220 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 std::min(config_->rtp.max_packet_size, 1336 std::min(config_->rtp.max_packet_size,
1324 kPathMTU - transport_overhead_bytes_per_packet_); 1337 kPathMTU - transport_overhead_bytes_per_packet_);
1325 1338
1326 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 1339 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
1327 rtp_rtcp->SetMaxRtpPacketSize(rtp_packet_size); 1340 rtp_rtcp->SetMaxRtpPacketSize(rtp_packet_size);
1328 } 1341 }
1329 } 1342 }
1330 1343
1331 } // namespace internal 1344 } // namespace internal
1332 } // namespace webrtc 1345 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/end_to_end_tests.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698