You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.1 KiB
49 lines
1.1 KiB
package config |
|
|
|
import ( |
|
"encoding/json" |
|
"sort" |
|
) |
|
|
|
func findHighestQuality(qualities []StreamQuality) int { |
|
type IndexedQuality struct { |
|
index int |
|
quality StreamQuality |
|
} |
|
|
|
if len(qualities) < 2 { |
|
return 0 |
|
} |
|
|
|
indexedQualities := make([]IndexedQuality, 0) |
|
for index, quality := range qualities { |
|
indexedQuality := IndexedQuality{index, quality} |
|
indexedQualities = append(indexedQualities, indexedQuality) |
|
} |
|
|
|
sort.Slice(indexedQualities, func(a, b int) bool { |
|
if indexedQualities[a].quality.IsVideoPassthrough && !indexedQualities[b].quality.IsVideoPassthrough { |
|
return true |
|
} |
|
|
|
if !indexedQualities[a].quality.IsVideoPassthrough && indexedQualities[b].quality.IsVideoPassthrough { |
|
return false |
|
} |
|
|
|
return indexedQualities[a].quality.VideoBitrate > indexedQualities[b].quality.VideoBitrate |
|
}) |
|
|
|
return indexedQualities[0].index |
|
} |
|
|
|
// MarshalJSON is a custom JSON marshal function for video stream qualities |
|
func (q *StreamQuality) MarshalJSON() ([]byte, error) { |
|
type Alias StreamQuality |
|
return json.Marshal(&struct { |
|
Framerate int `json:"framerate"` |
|
*Alias |
|
}{ |
|
Framerate: q.GetFramerate(), |
|
Alias: (*Alias)(q), |
|
}) |
|
}
|
|
|