mirror of
https://github.com/livekit/livekit.git
synced 2026-05-26 05:25:26 +00:00
Proto clone VideoLayer (#756)
Otherwise, there are warnings about copying locks.
This commit is contained in:
@@ -30,7 +30,7 @@ type ConnectionStatsParams struct {
|
||||
GetQualityParams func() *buffer.ConnectionQualityParams
|
||||
GetIsReducedQuality func() bool
|
||||
GetLayerDimension func(int32) (uint32, uint32)
|
||||
GetMaxExpectedLayer func() livekit.VideoLayer
|
||||
GetMaxExpectedLayer func() *livekit.VideoLayer
|
||||
Logger logger.Logger
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ func (cs *ConnectionStats) updateScore(streams []*livekit.AnalyticsStream, itera
|
||||
} else {
|
||||
// get tracks expected max layer and dimensions
|
||||
expectedLayer := cs.params.GetMaxExpectedLayer()
|
||||
if utils.SpatialLayerForQuality(expectedLayer.Quality) == buffer.InvalidLayerSpatial {
|
||||
if expectedLayer == nil || utils.SpatialLayerForQuality(expectedLayer.Quality) == buffer.InvalidLayerSpatial {
|
||||
return cs.score
|
||||
}
|
||||
|
||||
@@ -129,9 +129,6 @@ func (cs *ConnectionStats) updateScore(streams []*livekit.AnalyticsStream, itera
|
||||
|
||||
cs.score = VideoConnectionScore(interval, int64(totalBytes), int64(totalFrames), &qualityParam, cs.params.CodecName,
|
||||
int32(expectedLayer.Height), int32(expectedLayer.Width), int32(actualHeight), int32(actualWidth))
|
||||
//logger.Infow("VideoScoreScore", "score", cs.score, "expectedLayer", expectedLayer.Quality, "maxLayer", maxLayer,
|
||||
// "expectedWidth", expectedLayer.Width, "actualWidth", actualWidth, "expectedHeight", expectedLayer.Height, "actualHeight", actualHeight)
|
||||
|
||||
}
|
||||
|
||||
return cs.score
|
||||
|
||||
@@ -234,10 +234,10 @@ func NewDownTrack(
|
||||
}
|
||||
return 0, 0
|
||||
},
|
||||
GetMaxExpectedLayer: func() livekit.VideoLayer {
|
||||
GetMaxExpectedLayer: func() *livekit.VideoLayer {
|
||||
quality := d.forwarder.MaxLayers().Spatial
|
||||
width, height := d.receiver.GetLayerDimension(quality)
|
||||
return livekit.VideoLayer{Quality: livekit.VideoQuality(quality), Width: width, Height: height}
|
||||
return &livekit.VideoLayer{Quality: livekit.VideoQuality(quality), Width: width, Height: height}
|
||||
},
|
||||
Logger: d.logger,
|
||||
CodecName: getCodecNameFromMime(codecs[0].MimeType),
|
||||
|
||||
+6
-5
@@ -11,6 +11,7 @@ import (
|
||||
"github.com/pion/rtcp"
|
||||
"github.com/pion/webrtc/v3"
|
||||
"go.uber.org/atomic"
|
||||
"google.golang.org/protobuf/proto"
|
||||
|
||||
"github.com/livekit/livekit-server/pkg/utils"
|
||||
"github.com/livekit/protocol/livekit"
|
||||
@@ -208,9 +209,9 @@ func NewWebRTCReceiver(
|
||||
GetLayerDimension: func(quality int32) (uint32, uint32) {
|
||||
return w.GetLayerDimension(quality)
|
||||
},
|
||||
GetMaxExpectedLayer: func() livekit.VideoLayer {
|
||||
var expectedLayer livekit.VideoLayer
|
||||
var maxPublishedLayer livekit.VideoLayer
|
||||
GetMaxExpectedLayer: func() *livekit.VideoLayer {
|
||||
var expectedLayer *livekit.VideoLayer
|
||||
var maxPublishedLayer *livekit.VideoLayer
|
||||
// find min of <expected, published> layer
|
||||
expectedQuality := w.streamTrackerManager.GetMaxExpectedLayer()
|
||||
maxPublishedQuality := InvalidLayerSpatial
|
||||
@@ -220,11 +221,11 @@ func NewWebRTCReceiver(
|
||||
continue
|
||||
}
|
||||
if expectedQuality == utils.SpatialLayerForQuality(layer.Quality) {
|
||||
expectedLayer = *layer
|
||||
expectedLayer = proto.Clone(layer).(*livekit.VideoLayer)
|
||||
}
|
||||
if utils.SpatialLayerForQuality(layer.Quality) > maxPublishedQuality {
|
||||
maxPublishedQuality = int32(layer.Quality)
|
||||
maxPublishedLayer = *layer
|
||||
maxPublishedLayer = proto.Clone(layer).(*livekit.VideoLayer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user