diff --git a/pkg/sfu/videolayerselector/dependencydescriptor.go b/pkg/sfu/videolayerselector/dependencydescriptor.go index f458928d8..3c091160e 100644 --- a/pkg/sfu/videolayerselector/dependencydescriptor.go +++ b/pkg/sfu/videolayerselector/dependencydescriptor.go @@ -404,7 +404,7 @@ func (d *DependencyDescriptor) invalidateKeyFrame() { func (d *DependencyDescriptor) CheckSync() (locked bool, layer int32) { layer = d.GetRequestSpatial() - if !d.currentLayer.IsValid() { + if !d.currentLayer.IsValid() || !d.keyFrameValid { // always declare not locked when trying to resume from nothing return false, layer } @@ -412,7 +412,7 @@ func (d *DependencyDescriptor) CheckSync() (locked bool, layer int32) { d.decodeTargetsLock.RLock() defer d.decodeTargetsLock.RUnlock() for _, dt := range d.decodeTargets { - if dt.Active() && dt.Layer.Spatial <= d.GetTarget().Spatial && dt.Valid() { + if dt.Active() && dt.Layer.Spatial == layer && 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 863c6755f..2b346dedb 100644 --- a/pkg/sfu/videolayerselector/dependencydescriptor_test.go +++ b/pkg/sfu/videolayerselector/dependencydescriptor_test.go @@ -253,11 +253,15 @@ func TestDependencyDescriptor(t *testing.T) { } require.True(t, switchToLower) - // sync with requested layer + // not sync with requested layer ddSelector.SetRequestSpatial(targetLayer.Spatial) locked, layer := ddSelector.CheckSync() - require.True(t, locked) + 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) // should drop frame that relies on a keyframe is not present in current selection framesPrevious := createDDFrames(buffer.VideoLayer{Spatial: 2, Temporal: 2}, 1000)