Bug 1253499 - Forward maxBitrate and scaleResolutionDownBy straight to the VideoConduit. r?bwc
MozReview-Commit-ID: IDJ6TulpCp9
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp
@@ -2682,18 +2682,43 @@ PeerConnectionImpl::SetParameters(
const std::vector<JsepTrack::JsConstraints>& aConstraints)
{
std::string trackId = PeerConnectionImpl::GetTrackId(aTrack);
RefPtr<LocalSourceStreamInfo> info = media()->GetLocalStreamByTrackId(trackId);
if (!info) {
CSFLogError(logTag, "%s: Unknown stream", __FUNCTION__);
return NS_ERROR_INVALID_ARG;
}
+
+ RefPtr<MediaPipeline> existingPipe = info->GetPipelineByTrackId_m(trackId);
+ if (existingPipe &&
+ existingPipe->direction() == MediaPipeline::TRANSMIT) {
+ RefPtr<MediaSessionConduit> conduit = existingPipe->Conduit();
+ // AudioConduit doesn't support setting maxBitrate.
+ if (conduit && conduit->type() == MediaSessionConduit::VIDEO) {
+ auto video = static_cast<VideoSessionConduit*>(conduit.get());
+ nsAutoPtr<VideoCodecConfig> config;
+ if (video->CurrentSendCodecConfig(&config) == kMediaConduitNoError) {
+ for (auto& constraint : aConstraints) {
+ for (auto& encoding : config->mSimulcastEncodings) {
+ if (constraint.rid != encoding.rid) {
+ continue;
+ }
+ encoding.constraints.maxBr =
+ constraint.constraints.maxBr;
+ encoding.constraints.scaleDownBy =
+ constraint.constraints.scaleDownBy;
+ }
+ }
+ video->ConfigureSendMediaCodec(config);
+ }
+ }
+ }
+
std::string streamId = info->GetId();
-
return mJsepSession->SetParameters(streamId, trackId, aConstraints);
}
NS_IMETHODIMP
PeerConnectionImpl::GetParameters(MediaStreamTrack& aTrack,
RTCRtpParameters& aOutParameters) {
PC_AUTO_ENTER_API_CALL(true);