uplink/app/media/codecs/internal/generator/main.go

84 lines
1.5 KiB
Go

package main
import (
"bufio"
"bytes"
"fmt"
"go/format"
"log"
"os"
"os/exec"
"strings"
)
func must(err error) {
if err == nil {
return
}
log.Fatal(err)
}
func main() {
cmd := exec.Command("ffmpeg", "-codecs")
outputBytes, err := cmd.Output()
must(err)
code := `package codecs
var (
`
bufreader := bufio.NewScanner(bytes.NewReader(outputBytes))
/*Encoders:
V..... = Video
A..... = Audio
S..... = Subtitle
.F.... = Frame-level multithreading
..S... = Slice-level multithreading
...X.. = Codec is experimental
....B. = Supports draw_horiz_band
.....D = Supports direct rendering method 1
------
V..... a64multi Multicolor charset for Commodore 64 (codec a64_multi)
V..... a64multi5 Multicolor charset for Commodore 64, extended with 5th color (colram) (codec a64_multi5)*/
waitingForList := true
for bufreader.Scan() && waitingForList {
text := bufreader.Text()
if text == " -------" {
waitingForList = false
}
}
for bufreader.Scan() {
text := bufreader.Text()
//isVideo := text[1] == 'V'
//isAudio := text[1] == 'A'
//isSubtitle := text[1] == 'S'
text = text[8:]
cols := strings.Fields(text)
id := cols[0]
name := strings.Join(cols[1:], " ")
code += fmt.Sprintf(`
// %s
Codec_%s = %q
`, name, strings.ToUpper(id), id)
}
code += `
)
`
codeBytes, err := format.Source([]byte(code))
must(err)
f, err := os.Create("gen_codecs.go")
must(err)
defer f.Close()
_, err = f.Write(codeBytes)
must(err)
}