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

87 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", "-muxers")
outputBytes, err := cmd.Output()
must(err)
code := `package formats
var (
`
bufreader := bufio.NewScanner(bytes.NewReader(outputBytes))
/*File formats:
D. = Demuxing supported
.E = Muxing supported
--
E 3g2 3GP2 (3GPP2 file format)
E 3gp 3GP (3GPP file format)*/
waitingForList := true
for bufreader.Scan() && waitingForList {
text := bufreader.Text()
if text == " --" {
waitingForList = false
}
}
for bufreader.Scan() {
text := bufreader.Text()
demuxingSupported := text[1] == 'D'
muxingSupported := text[2] == 'E'
text = text[4:]
cols := strings.Fields(text)
ids := strings.Split(cols[0], ",")
name := strings.Join(cols[1:], " ")
for _, id := range ids {
code += fmt.Sprintf(`
// %s
Format_%s = %q
`, name, strings.ToUpper(id), id)
if demuxingSupported {
code += fmt.Sprintf(` // %s
Demux_Format_%s = Format_%s
`, name, strings.ToUpper(id), strings.ToUpper(id))
}
if muxingSupported {
code += fmt.Sprintf(` // %s
Mux_Format_%s = Format_%s
`, name, strings.ToUpper(id), strings.ToUpper(id))
}
}
}
code += `
)
`
codeBytes, err := format.Source([]byte(code))
must(err)
f, err := os.Create("gen_formats.go")
must(err)
defer f.Close()
_, err = f.Write(codeBytes)
must(err)
}