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

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

Issue 1452883002: Require negotiation to send transport cc feedback over RTCP. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: . Created 5 years, 1 month 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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 webrtc::H264Decoder::IsSupported(); 159 webrtc::H264Decoder::IsSupported();
160 } 160 }
161 return false; 161 return false;
162 } 162 }
163 163
164 void AddDefaultFeedbackParams(VideoCodec* codec) { 164 void AddDefaultFeedbackParams(VideoCodec* codec) {
165 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamCcm, kRtcpFbCcmParamFir)); 165 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamCcm, kRtcpFbCcmParamFir));
166 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty)); 166 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty));
167 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtcpFbNackParamPli)); 167 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtcpFbNackParamPli));
168 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamRemb, kParamValueEmpty)); 168 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamRemb, kParamValueEmpty));
169 codec->AddFeedbackParam(
170 FeedbackParam(kRtcpFbParamTransportCc, kParamValueEmpty));
169 } 171 }
170 172
171 static VideoCodec MakeVideoCodecWithDefaultFeedbackParams(int payload_type, 173 static VideoCodec MakeVideoCodecWithDefaultFeedbackParams(int payload_type,
172 const char* name) { 174 const char* name) {
173 VideoCodec codec(payload_type, name, kDefaultVideoMaxWidth, 175 VideoCodec codec(payload_type, name, kDefaultVideoMaxWidth,
174 kDefaultVideoMaxHeight, kDefaultVideoMaxFramerate, 0); 176 kDefaultVideoMaxHeight, kDefaultVideoMaxFramerate, 0);
175 AddDefaultFeedbackParams(&codec); 177 AddDefaultFeedbackParams(&codec);
176 return codec; 178 return codec;
177 } 179 }
178 180
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 send_codec_ = rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>( 965 send_codec_ = rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>(
964 supported_codecs.front()); 966 supported_codecs.front());
965 967
966 rtc::CritScope stream_lock(&stream_crit_); 968 rtc::CritScope stream_lock(&stream_crit_);
967 LOG(LS_INFO) << "Change the send codec because SetSendCodecs has a different " 969 LOG(LS_INFO) << "Change the send codec because SetSendCodecs has a different "
968 "first supported codec."; 970 "first supported codec.";
969 for (auto& kv : send_streams_) { 971 for (auto& kv : send_streams_) {
970 RTC_DCHECK(kv.second != nullptr); 972 RTC_DCHECK(kv.second != nullptr);
971 kv.second->SetCodec(supported_codecs.front()); 973 kv.second->SetCodec(supported_codecs.front());
972 } 974 }
973 LOG(LS_INFO) << "SetNackAndRemb on all the receive streams because the send " 975 LOG(LS_INFO)
974 "codec has changed."; 976 << "SetFeedbackOptions on all the receive streams because the send "
977 "codec has changed.";
975 for (auto& kv : receive_streams_) { 978 for (auto& kv : receive_streams_) {
976 RTC_DCHECK(kv.second != nullptr); 979 RTC_DCHECK(kv.second != nullptr);
977 kv.second->SetNackAndRemb(HasNack(supported_codecs.front().codec), 980 kv.second->SetFeedbackOptions(
978 HasRemb(supported_codecs.front().codec)); 981 HasNack(supported_codecs.front().codec),
982 HasRemb(supported_codecs.front().codec),
983 HasTransportCcFeedback(supported_codecs.front().codec));
979 } 984 }
980 985
981 // TODO(holmer): Changing the codec parameters shouldn't necessarily mean that 986 // TODO(holmer): Changing the codec parameters shouldn't necessarily mean that
982 // we change the min/max of bandwidth estimation. Reevaluate this. 987 // we change the min/max of bandwidth estimation. Reevaluate this.
983 VideoCodec codec = supported_codecs.front().codec; 988 VideoCodec codec = supported_codecs.front().codec;
984 int bitrate_kbps; 989 int bitrate_kbps;
985 if (codec.GetParam(kCodecParamMinBitrate, &bitrate_kbps) && 990 if (codec.GetParam(kCodecParamMinBitrate, &bitrate_kbps) &&
986 bitrate_kbps > 0) { 991 bitrate_kbps > 0) {
987 bitrate_config_.min_bitrate_bps = bitrate_kbps * 1000; 992 bitrate_config_.min_bitrate_bps = bitrate_kbps * 1000;
988 } else { 993 } else {
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 for (uint32_t used_ssrc : sp.ssrcs) 1223 for (uint32_t used_ssrc : sp.ssrcs)
1219 receive_ssrcs_.insert(used_ssrc); 1224 receive_ssrcs_.insert(used_ssrc);
1220 1225
1221 webrtc::VideoReceiveStream::Config config(this); 1226 webrtc::VideoReceiveStream::Config config(this);
1222 ConfigureReceiverRtp(&config, sp); 1227 ConfigureReceiverRtp(&config, sp);
1223 1228
1224 // Set up A/V sync group based on sync label. 1229 // Set up A/V sync group based on sync label.
1225 config.sync_group = sp.sync_label; 1230 config.sync_group = sp.sync_label;
1226 1231
1227 config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false; 1232 config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false;
1233 config.rtp.transport_cc_feedback =
pthatcher 2015/11/19 00:19:20 transport_cc would be more consistent with other n
stefan-webrtc 2015/11/20 16:58:48 Done.
1234 send_codec_ ? HasTransportCcFeedback(send_codec_->codec) : false;
1228 1235
1229 receive_streams_[ssrc] = new WebRtcVideoReceiveStream( 1236 receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
1230 call_, sp, config, external_decoder_factory_, default_stream, 1237 call_, sp, config, external_decoder_factory_, default_stream,
1231 recv_codecs_); 1238 recv_codecs_);
1232 1239
1233 return true; 1240 return true;
1234 } 1241 }
1235 1242
1236 void WebRtcVideoChannel2::ConfigureReceiverRtp( 1243 void WebRtcVideoChannel2::ConfigureReceiverRtp(
1237 webrtc::VideoReceiveStream::Config* config, 1244 webrtc::VideoReceiveStream::Config* config,
(...skipping 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after
2466 return; 2473 return;
2467 } 2474 }
2468 2475
2469 config_.rtp.local_ssrc = local_ssrc; 2476 config_.rtp.local_ssrc = local_ssrc;
2470 LOG(LS_INFO) 2477 LOG(LS_INFO)
2471 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc=" 2478 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc="
2472 << local_ssrc; 2479 << local_ssrc;
2473 RecreateWebRtcStream(); 2480 RecreateWebRtcStream();
2474 } 2481 }
2475 2482
2476 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetNackAndRemb( 2483 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFeedbackOptions(
2477 bool nack_enabled, bool remb_enabled) { 2484 bool nack_enabled,
2485 bool remb_enabled,
2486 bool transport_cc_enabled) {
2478 int nack_history_ms = nack_enabled ? kNackHistoryMs : 0; 2487 int nack_history_ms = nack_enabled ? kNackHistoryMs : 0;
2479 if (config_.rtp.nack.rtp_history_ms == nack_history_ms && 2488 if (config_.rtp.nack.rtp_history_ms == nack_history_ms &&
2480 config_.rtp.remb == remb_enabled) { 2489 config_.rtp.remb == remb_enabled &&
2481 LOG(LS_INFO) << "Ignoring call to SetNackAndRemb because parameters are " 2490 config_.rtp.transport_cc_feedback == transport_cc_enabled) {
2482 "unchanged; nack=" << nack_enabled 2491 LOG(LS_INFO)
2483 << ", remb=" << remb_enabled; 2492 << "Ignoring call to SetFeedbackOptions because parameters are "
2493 "unchanged; nack="
2494 << nack_enabled << ", remb=" << remb_enabled
2495 << ", transport_cc=" << transport_cc_enabled;
2484 return; 2496 return;
2485 } 2497 }
2486 config_.rtp.remb = remb_enabled; 2498 config_.rtp.remb = remb_enabled;
2487 config_.rtp.nack.rtp_history_ms = nack_history_ms; 2499 config_.rtp.nack.rtp_history_ms = nack_history_ms;
2488 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetNackAndRemb; nack=" 2500 config_.rtp.transport_cc_feedback = transport_cc_enabled;
2489 << nack_enabled << ", remb=" << remb_enabled; 2501 LOG(LS_INFO)
2502 << "RecreateWebRtcStream (recv) because of SetFeedbackOptions; nack="
2503 << nack_enabled << ", remb=" << remb_enabled
2504 << ", transport_cc=" << transport_cc_enabled;
2490 RecreateWebRtcStream(); 2505 RecreateWebRtcStream();
2491 } 2506 }
2492 2507
2493 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRtpExtensions( 2508 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRtpExtensions(
2494 const std::vector<webrtc::RtpExtension>& extensions) { 2509 const std::vector<webrtc::RtpExtension>& extensions) {
2495 config_.rtp.extensions = extensions; 2510 config_.rtp.extensions = extensions;
2496 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRtpExtensions"; 2511 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRtpExtensions";
2497 RecreateWebRtcStream(); 2512 RecreateWebRtcStream();
2498 } 2513 }
2499 2514
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
2742 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2757 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2743 } 2758 }
2744 } 2759 }
2745 2760
2746 return video_codecs; 2761 return video_codecs;
2747 } 2762 }
2748 2763
2749 } // namespace cricket 2764 } // namespace cricket
2750 2765
2751 #endif // HAVE_WEBRTC_VIDEO 2766 #endif // HAVE_WEBRTC_VIDEO
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698