diff --git a/pkg/sfu/videolayerselector/dependencydescriptor.go b/pkg/sfu/videolayerselector/dependencydescriptor.go index 1fc8e5f31..63ba36f76 100644 --- a/pkg/sfu/videolayerselector/dependencydescriptor.go +++ b/pkg/sfu/videolayerselector/dependencydescriptor.go @@ -332,21 +332,10 @@ func (d *DependencyDescriptor) CheckSync() (locked bool, layer int32) { return false, layer } - allBroken := true - for _, chain := range d.chains { - if !chain.Broken() { - allBroken = false - break - } - } - if allBroken { - return false, layer - } - d.decodeTargetsLock.RLock() defer d.decodeTargetsLock.RUnlock() for _, dt := range d.decodeTargets { - if dt.Active() && dt.Layer.Spatial == layer && dt.Valid() { + if dt.Active() && dt.Layer.Spatial <= d.GetTarget().Spatial && dt.Valid() { d.logger.Debugw(fmt.Sprintf("checking sync, matching decode target, layer: %d, dt: %s, dts: %+v", layer, dt, d.decodeTargets)) return true, layer } diff --git a/pkg/sfu/videolayerselector/dependencydescriptor_test.go b/pkg/sfu/videolayerselector/dependencydescriptor_test.go index a33f3b15f..ce3825c8a 100644 --- a/pkg/sfu/videolayerselector/dependencydescriptor_test.go +++ b/pkg/sfu/videolayerselector/dependencydescriptor_test.go @@ -253,16 +253,11 @@ func TestDependencyDescriptor(t *testing.T) { } require.True(t, switchToLower) - // not sync with requested layer + // sync with requested layer ddSelector.SetRequestSpatial(targetLayer.Spatial) locked, layer := ddSelector.CheckSync() - require.False(t, locked) - require.Equal(t, targetLayer.Spatial, layer) - - // request to current layer, sync - ddSelector.SetRequestSpatial(ddSelector.GetCurrent().Spatial) - locked, _ = ddSelector.CheckSync() require.True(t, locked) + require.Equal(t, targetLayer.Spatial, layer) } func createDDFrames(maxLayer buffer.VideoLayer, startFrameNumber uint16) []*buffer.ExtPacket {