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

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

Issue 1713493003: Enabling rtcp-rsize negotiation and fixing some issues with it. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing unit test and adding more TODOs. 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 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 795
796 if (bitrate_config_changed) { 796 if (bitrate_config_changed) {
797 call_->SetBitrateConfig(bitrate_config_); 797 call_->SetBitrateConfig(bitrate_config_);
798 } 798 }
799 799
800 { 800 {
801 rtc::CritScope stream_lock(&stream_crit_); 801 rtc::CritScope stream_lock(&stream_crit_);
802 for (auto& kv : send_streams_) { 802 for (auto& kv : send_streams_) {
803 kv.second->SetSendParameters(changed_params); 803 kv.second->SetSendParameters(changed_params);
804 } 804 }
805 if (changed_params.codec) { 805 if (changed_params.codec || changed_params.rtcp_mode) {
806 // Update receive feedback parameters from new codec. 806 // Update receive feedback parameters from new codec or RTCP mode.
807 LOG(LS_INFO) 807 LOG(LS_INFO)
808 << "SetFeedbackOptions on all the receive streams because the send " 808 << "SetFeedbackOptions on all the receive streams because the send "
809 "codec has changed."; 809 "codec or RTCP mode has changed.";
810 for (auto& kv : receive_streams_) { 810 for (auto& kv : receive_streams_) {
811 RTC_DCHECK(kv.second != nullptr); 811 RTC_DCHECK(kv.second != nullptr);
812 kv.second->SetFeedbackParameters(HasNack(send_codec_->codec), 812 kv.second->SetFeedbackParameters(
813 HasRemb(send_codec_->codec), 813 HasNack(send_codec_->codec), HasRemb(send_codec_->codec),
814 HasTransportCc(send_codec_->codec)); 814 HasTransportCc(send_codec_->codec),
815 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize
816 : webrtc::RtcpMode::kCompound);
815 } 817 }
816 } 818 }
817 } 819 }
818 send_params_ = params; 820 send_params_ = params;
819 return true; 821 return true;
820 } 822 }
821 webrtc::RtpParameters WebRtcVideoChannel2::GetRtpParameters( 823 webrtc::RtpParameters WebRtcVideoChannel2::GetRtpParameters(
822 uint32_t ssrc) const { 824 uint32_t ssrc) const {
823 rtc::CritScope stream_lock(&stream_crit_); 825 rtc::CritScope stream_lock(&stream_crit_);
824 auto it = send_streams_.find(ssrc); 826 auto it = send_streams_.find(ssrc);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 } 877 }
876 878
877 // Handle RTP header extensions. 879 // Handle RTP header extensions.
878 std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions( 880 std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
879 params.extensions, webrtc::RtpExtension::IsSupportedForVideo, false); 881 params.extensions, webrtc::RtpExtension::IsSupportedForVideo, false);
880 if (filtered_extensions != recv_rtp_extensions_) { 882 if (filtered_extensions != recv_rtp_extensions_) {
881 changed_params->rtp_header_extensions = 883 changed_params->rtp_header_extensions =
882 rtc::Optional<std::vector<webrtc::RtpExtension>>(filtered_extensions); 884 rtc::Optional<std::vector<webrtc::RtpExtension>>(filtered_extensions);
883 } 885 }
884 886
885 // Handle RTCP mode.
886 if (params.rtcp.reduced_size != recv_params_.rtcp.reduced_size) {
887 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>(
888 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize
889 : webrtc::RtcpMode::kCompound);
890 }
891
892 return true; 887 return true;
893 } 888 }
894 889
895 bool WebRtcVideoChannel2::SetRecvParameters(const VideoRecvParameters& params) { 890 bool WebRtcVideoChannel2::SetRecvParameters(const VideoRecvParameters& params) {
896 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvParameters"); 891 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvParameters");
897 LOG(LS_INFO) << "SetRecvParameters: " << params.ToString(); 892 LOG(LS_INFO) << "SetRecvParameters: " << params.ToString();
898 ChangedRecvParameters changed_params; 893 ChangedRecvParameters changed_params;
899 if (!GetChangedRecvParameters(params, &changed_params)) { 894 if (!GetChangedRecvParameters(params, &changed_params)) {
900 return false; 895 return false;
901 } 896 }
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1152 1147
1153 void WebRtcVideoChannel2::ConfigureReceiverRtp( 1148 void WebRtcVideoChannel2::ConfigureReceiverRtp(
1154 webrtc::VideoReceiveStream::Config* config, 1149 webrtc::VideoReceiveStream::Config* config,
1155 const StreamParams& sp) const { 1150 const StreamParams& sp) const {
1156 uint32_t ssrc = sp.first_ssrc(); 1151 uint32_t ssrc = sp.first_ssrc();
1157 1152
1158 config->rtp.remote_ssrc = ssrc; 1153 config->rtp.remote_ssrc = ssrc;
1159 config->rtp.local_ssrc = rtcp_receiver_report_ssrc_; 1154 config->rtp.local_ssrc = rtcp_receiver_report_ssrc_;
1160 1155
1161 config->rtp.extensions = recv_rtp_extensions_; 1156 config->rtp.extensions = recv_rtp_extensions_;
1162 config->rtp.rtcp_mode = recv_params_.rtcp.reduced_size 1157 // Whether or not the receive stream sends reduced size RTCP is determined
1158 // by the send params.
1159 // TODO(deadbeef): Once we change "send_params" to "sender_params" and
1160 // "recv_params" to "receiver_params", we should get this out of
1161 // receiver_params_.
1162 config->rtp.rtcp_mode = send_params_.rtcp.reduced_size
1163 ? webrtc::RtcpMode::kReducedSize 1163 ? webrtc::RtcpMode::kReducedSize
1164 : webrtc::RtcpMode::kCompound; 1164 : webrtc::RtcpMode::kCompound;
1165 1165
1166 // TODO(pbos): This protection is against setting the same local ssrc as 1166 // TODO(pbos): This protection is against setting the same local ssrc as
1167 // remote which is not permitted by the lower-level API. RTCP requires a 1167 // remote which is not permitted by the lower-level API. RTCP requires a
1168 // corresponding sender SSRC. Figure out what to do when we don't have 1168 // corresponding sender SSRC. Figure out what to do when we don't have
1169 // (receive-only) or know a good local SSRC. 1169 // (receive-only) or know a good local SSRC.
1170 if (config->rtp.remote_ssrc == config->rtp.local_ssrc) { 1170 if (config->rtp.remote_ssrc == config->rtp.local_ssrc) {
1171 if (config->rtp.local_ssrc != kDefaultRtcpReceiverReportSsrc) { 1171 if (config->rtp.local_ssrc != kDefaultRtcpReceiverReportSsrc) {
1172 config->rtp.local_ssrc = kDefaultRtcpReceiverReportSsrc; 1172 config->rtp.local_ssrc = kDefaultRtcpReceiverReportSsrc;
(...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2287 config_.rtp.local_ssrc = local_ssrc; 2287 config_.rtp.local_ssrc = local_ssrc;
2288 LOG(LS_INFO) 2288 LOG(LS_INFO)
2289 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc=" 2289 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc="
2290 << local_ssrc; 2290 << local_ssrc;
2291 RecreateWebRtcStream(); 2291 RecreateWebRtcStream();
2292 } 2292 }
2293 2293
2294 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFeedbackParameters( 2294 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFeedbackParameters(
2295 bool nack_enabled, 2295 bool nack_enabled,
2296 bool remb_enabled, 2296 bool remb_enabled,
2297 bool transport_cc_enabled) { 2297 bool transport_cc_enabled,
2298 webrtc::RtcpMode rtcp_mode) {
2298 int nack_history_ms = nack_enabled ? kNackHistoryMs : 0; 2299 int nack_history_ms = nack_enabled ? kNackHistoryMs : 0;
2299 if (config_.rtp.nack.rtp_history_ms == nack_history_ms && 2300 if (config_.rtp.nack.rtp_history_ms == nack_history_ms &&
2300 config_.rtp.remb == remb_enabled && 2301 config_.rtp.remb == remb_enabled &&
2301 config_.rtp.transport_cc == transport_cc_enabled) { 2302 config_.rtp.transport_cc == transport_cc_enabled &&
2303 config_.rtp.rtcp_mode == rtcp_mode) {
2302 LOG(LS_INFO) 2304 LOG(LS_INFO)
2303 << "Ignoring call to SetFeedbackParameters because parameters are " 2305 << "Ignoring call to SetFeedbackParameters because parameters are "
2304 "unchanged; nack=" 2306 "unchanged; nack="
2305 << nack_enabled << ", remb=" << remb_enabled 2307 << nack_enabled << ", remb=" << remb_enabled
2306 << ", transport_cc=" << transport_cc_enabled; 2308 << ", transport_cc=" << transport_cc_enabled;
2307 return; 2309 return;
2308 } 2310 }
2309 config_.rtp.remb = remb_enabled; 2311 config_.rtp.remb = remb_enabled;
2310 config_.rtp.nack.rtp_history_ms = nack_history_ms; 2312 config_.rtp.nack.rtp_history_ms = nack_history_ms;
2311 config_.rtp.transport_cc = transport_cc_enabled; 2313 config_.rtp.transport_cc = transport_cc_enabled;
2314 config_.rtp.rtcp_mode = rtcp_mode;
2312 LOG(LS_INFO) 2315 LOG(LS_INFO)
2313 << "RecreateWebRtcStream (recv) because of SetFeedbackParameters; nack=" 2316 << "RecreateWebRtcStream (recv) because of SetFeedbackParameters; nack="
2314 << nack_enabled << ", remb=" << remb_enabled 2317 << nack_enabled << ", remb=" << remb_enabled
2315 << ", transport_cc=" << transport_cc_enabled; 2318 << ", transport_cc=" << transport_cc_enabled;
2316 RecreateWebRtcStream(); 2319 RecreateWebRtcStream();
2317 } 2320 }
2318 2321
2319 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvParameters( 2322 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvParameters(
2320 const ChangedRecvParameters& params) { 2323 const ChangedRecvParameters& params) {
2321 bool needs_recreation = false; 2324 bool needs_recreation = false;
2322 std::vector<AllocatedDecoder> old_decoders; 2325 std::vector<AllocatedDecoder> old_decoders;
2323 if (params.codec_settings) { 2326 if (params.codec_settings) {
2324 ConfigureCodecs(*params.codec_settings, &old_decoders); 2327 ConfigureCodecs(*params.codec_settings, &old_decoders);
2325 needs_recreation = true; 2328 needs_recreation = true;
2326 } 2329 }
2327 if (params.rtp_header_extensions) { 2330 if (params.rtp_header_extensions) {
2328 config_.rtp.extensions = *params.rtp_header_extensions; 2331 config_.rtp.extensions = *params.rtp_header_extensions;
2329 needs_recreation = true; 2332 needs_recreation = true;
2330 } 2333 }
2331 if (params.rtcp_mode) {
2332 config_.rtp.rtcp_mode = *params.rtcp_mode;
2333 needs_recreation = true;
2334 }
2335 if (needs_recreation) { 2334 if (needs_recreation) {
2336 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRecvParameters"; 2335 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRecvParameters";
2337 RecreateWebRtcStream(); 2336 RecreateWebRtcStream();
2338 ClearDecoders(&old_decoders); 2337 ClearDecoders(&old_decoders);
2339 } 2338 }
2340 } 2339 }
2341 2340
2342 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::RecreateWebRtcStream() { 2341 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::RecreateWebRtcStream() {
2343 if (stream_ != NULL) { 2342 if (stream_ != NULL) {
2344 call_->DestroyVideoReceiveStream(stream_); 2343 call_->DestroyVideoReceiveStream(stream_);
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
2567 rtx_mapping[video_codecs[i].codec.id] != 2566 rtx_mapping[video_codecs[i].codec.id] !=
2568 fec_settings.red_payload_type) { 2567 fec_settings.red_payload_type) {
2569 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2568 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2570 } 2569 }
2571 } 2570 }
2572 2571
2573 return video_codecs; 2572 return video_codecs;
2574 } 2573 }
2575 2574
2576 } // namespace cricket 2575 } // 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