From 7350e9933107ecdea4ada8f8bcb0d6ca78b3f8f7 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Tue, 25 Feb 2025 23:31:14 +0530 Subject: [PATCH] transfer from non-null for codec change (#3464) --- pkg/sfu/forwarder.go | 6 ++-- .../dependencydescriptor.go | 29 +++++++++++++++---- pkg/sfu/videolayerselector/simulcast.go | 1 + pkg/sfu/videolayerselector/vp9.go | 27 +++++++++++++++-- 4 files changed, 52 insertions(+), 11 deletions(-) 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 } }