From 7578f9cbf5c9cd7de7bfbffc730289f023cc7a94 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Mon, 30 Oct 2023 00:34:17 +0530 Subject: [PATCH] Mark packet relevant only when current layer is valid. (#2200) * Mark packet relevant only when current layer is valid. Else, it introduces a large sequence number gap. * fix tests --- pkg/sfu/videolayerselector/dependencydescriptor.go | 8 ++++++-- pkg/sfu/videolayerselector/dependencydescriptor_test.go | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/sfu/videolayerselector/dependencydescriptor.go b/pkg/sfu/videolayerselector/dependencydescriptor.go index 63ba36f76..f03f78c6c 100644 --- a/pkg/sfu/videolayerselector/dependencydescriptor.go +++ b/pkg/sfu/videolayerselector/dependencydescriptor.go @@ -58,7 +58,9 @@ func (d *DependencyDescriptor) IsOvershootOkay() bool { func (d *DependencyDescriptor) Select(extPkt *buffer.ExtPacket, _layer int32) (result VideoLayerSelectorResult) { // a packet is always relevant for the svc codec - result.IsRelevant = true + if d.currentLayer.IsValid() { + result.IsRelevant = true + } ddwdt := extPkt.DependencyDescriptor if ddwdt == nil { @@ -92,7 +94,7 @@ func (d *DependencyDescriptor) Select(extPkt *buffer.ExtPacket, _layer int32) (r switch sd { case selectorDecisionDropped: // a packet of an alreadty dropped frame, maintain decision - d.logger.Debugw(fmt.Sprintf("drop packet already dropped, incoming %v, fn: %d/%d, sm: %d", + d.logger.Debugw(fmt.Sprintf("drop packet already dropped, incoming %v, fn: %d/%d, sn: %d", incomingLayer, dd.FrameNumber, extFrameNum, @@ -243,6 +245,8 @@ func (d *DependencyDescriptor) Select(extPkt *buffer.ExtPacket, _layer int32) (r "sn", extPkt.Packet.SequenceNumber, "isKeyFrame", extPkt.KeyFrame, ) + + result.IsRelevant = true } ddExtension := &dede.DependencyDescriptorExtension{ diff --git a/pkg/sfu/videolayerselector/dependencydescriptor_test.go b/pkg/sfu/videolayerselector/dependencydescriptor_test.go index ce3825c8a..c013e46af 100644 --- a/pkg/sfu/videolayerselector/dependencydescriptor_test.go +++ b/pkg/sfu/videolayerselector/dependencydescriptor_test.go @@ -139,7 +139,7 @@ func TestDependencyDescriptor(t *testing.T) { // no dd ext, dropped ret := ddSelector.Select(&buffer.ExtPacket{Packet: &rtp.Packet{}}, 0) require.False(t, ret.IsSelected) - require.True(t, ret.IsRelevant) + require.False(t, ret.IsRelevant) // non key frame, dropped ret = ddSelector.Select(&buffer.ExtPacket{ @@ -156,7 +156,7 @@ func TestDependencyDescriptor(t *testing.T) { Packet: &rtp.Packet{}, }, 0) require.False(t, ret.IsSelected) - require.True(t, ret.IsRelevant) + require.False(t, ret.IsRelevant) frames := createDDFrames(buffer.VideoLayer{Spatial: 2, Temporal: 2}, 3) // key frame, update structure and decode targets