84 lines
1.5 KiB
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)
|
||
|
}
|