diff --git a/pkg/sfu/forwarder.go b/pkg/sfu/forwarder.go index df8ba0a08..9aa39fece 100644 --- a/pkg/sfu/forwarder.go +++ b/pkg/sfu/forwarder.go @@ -344,13 +344,13 @@ func (f *Forwarder) DetermineCodec(codec webrtc.RTPCodecCapability, extensions [ isDDAvailable := ddAvailable(extensions) if isDDAvailable { if f.vls != nil { - f.vls = videolayerselector.NewDependencyDescriptorFromNull(f.vls) + f.vls = videolayerselector.NewDependencyDescriptorFromOther(f.vls) } else { f.vls = videolayerselector.NewDependencyDescriptor(f.logger) } } else { if f.vls != nil { - f.vls = videolayerselector.NewVP9FromNull(f.vls) + f.vls = videolayerselector.NewVP9FromOther(f.vls) } else { f.vls = videolayerselector.NewVP9(f.logger) } @@ -362,7 +362,7 @@ func (f *Forwarder) DetermineCodec(codec webrtc.RTPCodecCapability, extensions [ isDDAvailable := ddAvailable(extensions) if isDDAvailable { if f.vls != nil { - f.vls = videolayerselector.NewDependencyDescriptorFromNull(f.vls) + f.vls = videolayerselector.NewDependencyDescriptorFromOther(f.vls) } else { f.vls = videolayerselector.NewDependencyDescriptor(f.logger) } diff --git a/pkg/sfu/videolayerselector/dependencydescriptor.go b/pkg/sfu/videolayerselector/dependencydescriptor.go index b5b4e9d4a..d86a96e8f 100644 --- a/pkg/sfu/videolayerselector/dependencydescriptor.go +++ b/pkg/sfu/videolayerselector/dependencydescriptor.go @@ -50,11 +50,30 @@ func NewDependencyDescriptor(logger logger.Logger) *DependencyDescriptor { } } -func NewDependencyDescriptorFromNull(vls VideoLayerSelector) *DependencyDescriptor { - return &DependencyDescriptor{ - Base: vls.(*Null).Base, - decisions: NewSelectorDecisionCache(256, 80), - fnWrapper: FrameNumberWrapper{logger: vls.(*Null).logger}, +func NewDependencyDescriptorFromOther(vls VideoLayerSelector) *DependencyDescriptor { + switch vls := vls.(type) { + case *Null: + return &DependencyDescriptor{ + Base: vls.Base, + } + + case *Simulcast: + return &DependencyDescriptor{ + Base: vls.Base, + } + + case *DependencyDescriptor: + return &DependencyDescriptor{ + Base: vls.Base, + } + + case *VP9: + return &DependencyDescriptor{ + Base: vls.Base, + } + + default: + return nil } } diff --git a/pkg/sfu/videolayerselector/simulcast.go b/pkg/sfu/videolayerselector/simulcast.go index 83f0884b4..9720bbe47 100644 --- a/pkg/sfu/videolayerselector/simulcast.go +++ b/pkg/sfu/videolayerselector/simulcast.go @@ -35,6 +35,7 @@ func NewSimulcastFromOther(vls VideoLayerSelector) *Simulcast { return &Simulcast{ Base: vls.Base, } + case *Simulcast: return &Simulcast{ Base: vls.Base, diff --git a/pkg/sfu/videolayerselector/vp9.go b/pkg/sfu/videolayerselector/vp9.go index 62d5d35d9..a8793dfb3 100644 --- a/pkg/sfu/videolayerselector/vp9.go +++ b/pkg/sfu/videolayerselector/vp9.go @@ -30,9 +30,30 @@ func NewVP9(logger logger.Logger) *VP9 { } } -func NewVP9FromNull(vls VideoLayerSelector) *VP9 { - return &VP9{ - Base: vls.(*Null).Base, +func NewVP9FromOther(vls VideoLayerSelector) *VP9 { + switch vls := vls.(type) { + case *Null: + return &VP9{ + Base: vls.Base, + } + + case *Simulcast: + return &VP9{ + Base: vls.Base, + } + + case *DependencyDescriptor: + return &VP9{ + Base: vls.Base, + } + + case *VP9: + return &VP9{ + Base: vls.Base, + } + + default: + return nil } }