Index: webrtc/pc/peerconnection.cc |
diff --git a/webrtc/pc/peerconnection.cc b/webrtc/pc/peerconnection.cc |
index 65203fdc731f1ef8e861e3971800d811fa2c61cc..a6f51230f94752aae627f90cfa0cc09796cd1479 100644 |
--- a/webrtc/pc/peerconnection.cc |
+++ b/webrtc/pc/peerconnection.cc |
@@ -1242,6 +1242,54 @@ void PeerConnection::RegisterUMAObserver(UMAObserver* observer) { |
} |
} |
+RTCError PeerConnection::SetBitrate(const BitrateParameters& bitrate) { |
+ rtc::Thread* worker_thread = factory_->worker_thread(); |
+ if (!worker_thread->IsCurrent()) { |
+ return worker_thread->Invoke<RTCError>( |
+ RTC_FROM_HERE, rtc::Bind(&PeerConnection::SetBitrate, this, bitrate)); |
+ } |
+ |
+ const bool has_min = static_cast<bool>(bitrate.min_bitrate_bps); |
+ const bool has_current = static_cast<bool>(bitrate.current_bitrate_bps); |
+ const bool has_max = static_cast<bool>(bitrate.max_bitrate_bps); |
+ if (has_min && *bitrate.min_bitrate_bps < 0) { |
+ LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER, |
+ "min_bitrate_bps <= 0"); |
+ } |
+ if (has_current) { |
+ if (has_min && *bitrate.current_bitrate_bps < *bitrate.min_bitrate_bps) { |
+ LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER, |
+ "current_bitrate_bps < min_bitrate_bps"); |
+ } else if (*bitrate.current_bitrate_bps < 0) { |
+ LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER, |
+ "curent_bitrate_bps < 0"); |
+ } |
+ } |
+ if (has_max) { |
+ if (has_current && |
+ *bitrate.max_bitrate_bps < *bitrate.current_bitrate_bps) { |
+ LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER, |
+ "max_bitrate_bps < current_bitrate_bps"); |
+ } else if (has_min && *bitrate.max_bitrate_bps < *bitrate.min_bitrate_bps) { |
+ LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER, |
+ "max_bitrate_bps < min_bitrate_bps"); |
+ } else if (*bitrate.max_bitrate_bps < 0) { |
+ LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER, |
+ "max_bitrate_bps < 0"); |
+ } |
+ } |
+ |
+ Call::Config::BitrateConfigMask mask; |
+ mask.min_bitrate_bps = bitrate.min_bitrate_bps; |
+ mask.start_bitrate_bps = bitrate.current_bitrate_bps; |
+ mask.max_bitrate_bps = bitrate.max_bitrate_bps; |
+ |
+ RTC_DCHECK(call_.get()); |
+ call_->SetBitrateConfigMask(mask); |
+ |
+ return RTCError::OK(); |
+} |
+ |
bool PeerConnection::StartRtcEventLog(rtc::PlatformFile file, |
int64_t max_size_bytes) { |
return factory_->worker_thread()->Invoke<bool>( |