mirror of
https://github.com/livekit/livekit.git
synced 2026-03-30 22:05:39 +00:00
Check request layer for DD selector sync (#2219)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user