mirror of
https://github.com/jech/galene.git
synced 2024-11-22 16:45:58 +01:00
Add spatial scalability support.
Only used as a last-resort fallback.
This commit is contained in:
parent
efb298f002
commit
dd4dbeaee5
1 changed files with 12 additions and 1 deletions
|
@ -304,21 +304,32 @@ func (t *rtpDownTrack) GetMaxBitrate() (uint64, int, int) {
|
||||||
return r, int(layer.sid), int(layer.tid)
|
return r, int(layer.sid), int(layer.tid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// adjustLayer checks the allowable bitrate reported for a down track and
|
||||||
|
// adjusts the layer by one step. It prefers temporal layers, and only
|
||||||
|
// uses spatial layers as a last resort.
|
||||||
func (t *rtpDownTrack) adjustLayer() {
|
func (t *rtpDownTrack) adjustLayer() {
|
||||||
max, _, _ := t.GetMaxBitrate()
|
max, _, _ := t.GetMaxBitrate()
|
||||||
r, _ := t.rate.Estimate()
|
r, _ := t.rate.Estimate()
|
||||||
rate := uint64(r) * 8
|
rate := uint64(r) * 8
|
||||||
if rate < max*7/8 {
|
if rate < max*7/8 {
|
||||||
|
// switch up
|
||||||
layer := t.getLayerInfo()
|
layer := t.getLayerInfo()
|
||||||
if layer.tid < layer.maxTid {
|
if layer.sid < layer.maxSid {
|
||||||
|
layer.wantedSid = layer.sid + 1
|
||||||
|
t.setLayerInfo(layer)
|
||||||
|
} else if layer.tid < layer.maxTid {
|
||||||
layer.wantedTid = layer.tid + 1
|
layer.wantedTid = layer.tid + 1
|
||||||
t.setLayerInfo(layer)
|
t.setLayerInfo(layer)
|
||||||
}
|
}
|
||||||
} else if rate > max*3/2 {
|
} else if rate > max*3/2 {
|
||||||
|
// switch down
|
||||||
layer := t.getLayerInfo()
|
layer := t.getLayerInfo()
|
||||||
if layer.tid > 0 {
|
if layer.tid > 0 {
|
||||||
layer.wantedTid = layer.tid - 1
|
layer.wantedTid = layer.tid - 1
|
||||||
t.setLayerInfo(layer)
|
t.setLayerInfo(layer)
|
||||||
|
} else if layer.sid > 0 {
|
||||||
|
layer.wantedSid = layer.sid - 1
|
||||||
|
t.setLayerInfo(layer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue