Check request layer for DD selector sync (#2219)

This commit is contained in:
cnderrauber
2023-11-03 18:40:36 +08:00
committed by GitHub
parent f247b68ed6
commit f5047ab653
2 changed files with 8 additions and 4 deletions

View File

@@ -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
}

View File

@@ -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)