Bug 1253499 - Forward maxBitrate and scaleResolutionDownBy straight to the VideoConduit. r?bwc draft
authorAndreas Pehrson <pehrsons@gmail.com>
Tue, 30 May 2017 17:46:05 +0200
changeset 591075 5448b279e805fda80eda9c7fa16812293bdcfa25
parent 591074 d076bfb77cd40c8d4754aad3ac13740d82956496
child 591076 e32bd25e220ea3aaaa89fa444226432b51d6aaa0
push id62944
push userbmo:pehrsons+bugzilla@gmail.com
push dateThu, 08 Jun 2017 16:06:05 +0000
reviewersbwc
bugs1253499
milestone55.0a1
Bug 1253499 - Forward maxBitrate and scaleResolutionDownBy straight to the VideoConduit. r?bwc MozReview-Commit-ID: IDJ6TulpCp9
media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp
--- 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);