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
This commit is contained in:
Raja Subramanian
2023-10-30 00:34:17 +05:30
committed by GitHub
parent b5dd020ff7
commit 7578f9cbf5
2 changed files with 8 additions and 4 deletions
@@ -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{
@@ -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