Skip to content

Commit bcf9cdb

Browse files
Wakeful-Cloudcorny
authored andcommitted
Added audio track default sorting support
1 parent ad4281f commit bcf9cdb

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

format_list.go

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func (list FormatList) Sort() {
8686
}
8787

8888
// sortFormat sorts video by resolution, FPS, codec (av01, vp9, avc1), bitrate
89-
// sorts audio by codec (mp4, opus), channels, bitrate, sample rate
89+
// sorts audio by default, codec (mp4, opus), channels, bitrate, sample rate
9090
func sortFormat(i int, j int, formats FormatList) bool {
9191

9292
// Sort by Width
@@ -104,28 +104,34 @@ func sortFormat(i int, j int, formats FormatList) bool {
104104
if formats[i].FPS == formats[j].FPS {
105105
if formats[i].FPS == 0 && formats[i].AudioChannels > 0 && formats[j].AudioChannels > 0 {
106106
// Audio
107-
// Sort by codec
108-
codec := map[int]int{}
109-
for _, index := range []int{i, j} {
110-
if strings.Contains(formats[index].MimeType, "mp4") {
111-
codec[index] = 1
112-
} else if strings.Contains(formats[index].MimeType, "opus") {
113-
codec[index] = 2
107+
// Sort by default
108+
if (formats[i].AudioTrack == nil && formats[j].AudioTrack == nil) || (formats[i].AudioTrack != nil && formats[j].AudioTrack != nil && formats[i].AudioTrack.AudioIsDefault == formats[j].AudioTrack.AudioIsDefault) {
109+
// Sort by codec
110+
codec := map[int]int{}
111+
for _, index := range []int{i, j} {
112+
if strings.Contains(formats[index].MimeType, "mp4") {
113+
codec[index] = 1
114+
} else if strings.Contains(formats[index].MimeType, "opus") {
115+
codec[index] = 2
116+
}
114117
}
115-
}
116-
if codec[i] == codec[j] {
117-
// Sort by Audio Channel
118-
if formats[i].AudioChannels == formats[j].AudioChannels {
119-
// Sort by Audio Bitrate
120-
if formats[i].Bitrate == formats[j].Bitrate {
121-
// Sort by Audio Sample Rate
122-
return formats[i].AudioSampleRate > formats[j].AudioSampleRate
118+
if codec[i] == codec[j] {
119+
// Sort by Audio Channel
120+
if formats[i].AudioChannels == formats[j].AudioChannels {
121+
// Sort by Audio Bitrate
122+
if formats[i].Bitrate == formats[j].Bitrate {
123+
// Sort by Audio Sample Rate
124+
return formats[i].AudioSampleRate > formats[j].AudioSampleRate
125+
}
126+
return formats[i].Bitrate > formats[j].Bitrate
123127
}
124-
return formats[i].Bitrate > formats[j].Bitrate
128+
return formats[i].AudioChannels > formats[j].AudioChannels
125129
}
126-
return formats[i].AudioChannels > formats[j].AudioChannels
130+
return codec[i] < codec[j]
131+
} else if formats[i].AudioTrack != nil && formats[i].AudioTrack.AudioIsDefault {
132+
return true
127133
}
128-
return codec[i] < codec[j]
134+
return false
129135
}
130136
// Video
131137
// Sort by codec

0 commit comments

Comments
 (0)