From eaaec0aae1469eb0e03f0b3e6efcc31da95a0e44 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Mon, 15 Aug 2022 17:29:52 +0530 Subject: [PATCH] Only change committed quality in update. (#917) --- pkg/rtc/dynacastmanager.go | 8 ++++---- pkg/rtc/dynacastquality.go | 22 +++++----------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/pkg/rtc/dynacastmanager.go b/pkg/rtc/dynacastmanager.go index 9f10b0678..edae91b11 100644 --- a/pkg/rtc/dynacastmanager.go +++ b/pkg/rtc/dynacastmanager.go @@ -58,13 +58,14 @@ func (d *DynacastManager) AddCodec(mime string) { } func (d *DynacastManager) Restart() { - d.lock.RLock() + d.lock.Lock() + d.committedMaxSubscribedQuality = make(map[string]livekit.VideoQuality) + dqs := d.getDynacastQualitiesLocked() - d.lock.RUnlock() + d.lock.Unlock() for _, dq := range dqs { dq.Restart() - d.committedMaxSubscribedQuality[dq.MimeType()] = dq.MaxSubscribedQuality() } } @@ -149,7 +150,6 @@ func (d *DynacastManager) getOrCreateDynacastQuality(mime string) *DynacastQuali dq.Start() d.dynacastQuality[mime] = dq - d.committedMaxSubscribedQuality[mime] = dq.MaxSubscribedQuality() return dq } diff --git a/pkg/rtc/dynacastquality.go b/pkg/rtc/dynacastquality.go index 059e468a9..cd0c183d2 100644 --- a/pkg/rtc/dynacastquality.go +++ b/pkg/rtc/dynacastquality.go @@ -57,17 +57,6 @@ func (d *DynacastQuality) OnSubscribedMaxQualityChange(f func(maxSubscribedQuali d.onSubscribedMaxQualityChange = f } -func (d *DynacastQuality) MimeType() string { - return d.params.MimeType -} - -func (d *DynacastQuality) MaxSubscribedQuality() livekit.VideoQuality { - d.lock.RLock() - defer d.lock.RUnlock() - - return d.maxSubscribedQuality -} - func (d *DynacastQuality) NotifySubscriberMaxQuality(subscriberID livekit.ParticipantID, quality livekit.VideoQuality) { d.lock.Lock() if quality == livekit.VideoQuality_OFF { @@ -77,7 +66,7 @@ func (d *DynacastQuality) NotifySubscriberMaxQuality(subscriberID livekit.Partic } d.lock.Unlock() - d.updateQualityChange() + d.updateQualityChange(false) } func (d *DynacastQuality) NotifySubscriberNodeMaxQuality(nodeID livekit.NodeID, quality livekit.VideoQuality) { @@ -89,19 +78,18 @@ func (d *DynacastQuality) NotifySubscriberNodeMaxQuality(nodeID livekit.NodeID, } d.lock.Unlock() - d.updateQualityChange() + d.updateQualityChange(false) } func (d *DynacastQuality) reset() { d.lock.Lock() d.initialized = false - d.maxSubscribedQuality = livekit.VideoQuality_HIGH d.lock.Unlock() d.startMaxQualityTimer() } -func (d *DynacastQuality) updateQualityChange() { +func (d *DynacastQuality) updateQualityChange(force bool) { d.lock.Lock() maxSubscribedQuality := livekit.VideoQuality_OFF for _, subQuality := range d.maxSubscriberQuality { @@ -115,7 +103,7 @@ func (d *DynacastQuality) updateQualityChange() { } } - if maxSubscribedQuality == d.maxSubscribedQuality && d.initialized { + if maxSubscribedQuality == d.maxSubscribedQuality && d.initialized && !force { d.lock.Unlock() return } @@ -147,7 +135,7 @@ func (d *DynacastQuality) startMaxQualityTimer() { d.maxQualityTimer = time.AfterFunc(initialQualityUpdateWait, func() { d.stopMaxQualityTimer() - d.updateQualityChange() + d.updateQualityChange(true) }) }