From c9cfb0d362d56e83c72064e5313f102bd2548de0 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Fri, 11 Feb 2022 14:04:47 +0530 Subject: [PATCH] Need to return delta the new provisional layer takes. (#433) --- pkg/sfu/forwarder.go | 4 ++-- pkg/sfu/forwarder_test.go | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/sfu/forwarder.go b/pkg/sfu/forwarder.go index 4e8b7c54f..6afd88958 100644 --- a/pkg/sfu/forwarder.go +++ b/pkg/sfu/forwarder.go @@ -550,13 +550,13 @@ func (f *Forwarder) ProvisionalAllocate(availableChannelCapacity int64, layers V if requiredBitrate <= (availableChannelCapacity + alreadyAllocatedBitrate) { f.provisional.layers = layers - return requiredBitrate + return requiredBitrate - alreadyAllocatedBitrate } // when pause is disallowed, pick the layer if none allocated already or something lower is available if !allowPause && (f.provisional.layers == InvalidLayers || !layers.GreaterThan(f.provisional.layers)) { f.provisional.layers = layers - return requiredBitrate + return requiredBitrate - alreadyAllocatedBitrate } return 0 diff --git a/pkg/sfu/forwarder_test.go b/pkg/sfu/forwarder_test.go index 2ec522bf3..841b3fba6 100644 --- a/pkg/sfu/forwarder_test.go +++ b/pkg/sfu/forwarder_test.go @@ -362,8 +362,14 @@ func TestForwarderProvisionalAllocate(t *testing.T) { usedBitrate := f.ProvisionalAllocate(bitrates[2][3], VideoLayers{spatial: 0, temporal: 0}, true) require.Equal(t, bitrates[0][0], usedBitrate) + usedBitrate = f.ProvisionalAllocate(bitrates[2][3], VideoLayers{spatial: 2, temporal: 3}, true) + require.Equal(t, bitrates[2][3]-bitrates[0][0], usedBitrate) + + usedBitrate = f.ProvisionalAllocate(bitrates[2][3], VideoLayers{spatial: 0, temporal: 3}, true) + require.Equal(t, bitrates[0][3]-bitrates[2][3], usedBitrate) + usedBitrate = f.ProvisionalAllocate(bitrates[2][3], VideoLayers{spatial: 1, temporal: 2}, true) - require.Equal(t, bitrates[1][2], usedBitrate) + require.Equal(t, bitrates[1][2]-bitrates[0][3], usedBitrate) // available not enough to reach (2, 2), allocating at (2, 2) should not succeed usedBitrate = f.ProvisionalAllocate(bitrates[2][2]-bitrates[1][2]-1, VideoLayers{spatial: 2, temporal: 2}, true)