diff options
| -rw-r--r-- | mkvlib/ass2pgs.go | 32 | ||||
| -rw-r--r-- | mkvlib/ass2pgs_windows.go | 68 | ||||
| -rw-r--r-- | mkvlib/mkv.go | 22 | ||||
| -rw-r--r-- | mkvlib/shared.go | 11 |
4 files changed, 44 insertions, 89 deletions
diff --git a/mkvlib/ass2pgs.go b/mkvlib/ass2pgs.go index 08ea305..fd5b438 100644 --- a/mkvlib/ass2pgs.go +++ b/mkvlib/ass2pgs.go @@ -1,8 +1,30 @@ -//go:build !windows || (windows && !amd64) - package mkvlib -func ass2Pgs(input []string, resolution, frameRate int, fontsDir string, output string, lcb logCallback) bool { - printLog(lcb, "Only work in win64.") - return false +import ( + "fmt" + "path" +) + +func ass2Pgs(input []string, resolution, frameRate, fontsDir, output string, lcb logCallback) bool { + r := false + for _, item := range input { + _, _, _, _f := splitPath(item) + fn := path.Join(output, _f+".pgs") + args := make([]string, 0) + args = append(args, "-a1", "-p1") + args = append(args, "-z0", "-u0", "-b0") + args = append(args, "-g", fontsDir) + args = append(args, "-v", resolution) + args = append(args, "-f", frameRate) + args = append(args, "-o", fn) + args = append(args, item) + if p, err := newProcess(nil, nil, nil, "", ass2bdnxml, args...); err == nil { + s, err := p.Wait() + r = err == nil && s.ExitCode() == 0 + if !r { + printLog(lcb, fmt.Sprintf(`Failed to Ass2Pgs:"%s"`, item)) + } + } + } + return r } diff --git a/mkvlib/ass2pgs_windows.go b/mkvlib/ass2pgs_windows.go deleted file mode 100644 index 8068e31..0000000 --- a/mkvlib/ass2pgs_windows.go +++ /dev/null @@ -1,68 +0,0 @@ -//go:build windows && amd64 - -package mkvlib - -import ( - "fmt" - "path" - "strconv" - "syscall" - "unsafe" -) - -func ass2Pgs(input []string, resolution, frameRate int, fontsDir string, output string, lcb logCallback) bool { - fonts := findFonts(fontsDir) - r := addFontResource(fonts, lcb) - if r { - for _, item := range input { - _, _, _, _f := splitPath(item) - fn := path.Join(output, _f+".pgs") - args := make([]string, 0) - args = append(args, "-x0") - args = append(args, "-v144") - args = append(args, "-s", strconv.Itoa(resolution)) - args = append(args, "-r", strconv.Itoa(frameRate)) - args = append(args, "-i", item) - args = append(args, fn) - if p, err := newProcess(nil, nil, nil, "", spp2pgs, args...); err == nil { - s, err := p.Wait() - r = err == nil && s.ExitCode() == 1 - if !r { - printLog(lcb, fmt.Sprintf(`Failed to Ass2Pgs:"%s"`, item)) - } - } - } - } - removeFontResource(fonts, lcb) - return r -} - -var gdi32 = syscall.NewLazyDLL("gdi32.dll") -var addFontResourceW = gdi32.NewProc("AddFontResourceW") -var removeFontResourceW = gdi32.NewProc("RemoveFontResourceW") - -func addFontResource(fonts []string, lcb logCallback) bool { - ec := 0 - for _, item := range fonts { - p, _ := syscall.UTF16FromString(item) - r, _, _ := addFontResourceW.Call(uintptr(unsafe.Pointer(&p[0]))) - if r == 0 { - printLog(lcb, fmt.Sprintf(`Failed to load font:"%s"`, item)) - ec++ - } - } - return ec == 0 -} - -func removeFontResource(fonts []string, lcb logCallback) bool { - ec := 0 - for _, item := range fonts { - p, _ := syscall.UTF16FromString(item) - r, _, _ := removeFontResourceW.Call(uintptr(unsafe.Pointer(&p[0]))) - if r == 0 { - printLog(lcb, fmt.Sprintf(`Failed to unload font:"%s"`, item)) - ec++ - } - } - return ec == 0 -} diff --git a/mkvlib/mkv.go b/mkvlib/mkv.go index af04ce3..e195722 100644 --- a/mkvlib/mkv.go +++ b/mkvlib/mkv.go @@ -7,14 +7,13 @@ import ( "os" "path" "regexp" - "runtime" "strings" ) const ( mkvmerge = `mkvmerge` mkvextract = `mkvextract` - spp2pgs = `spp2pgs` + ass2bdnxml = `ass2bdnxml` ) type mkvInfo struct { @@ -36,12 +35,13 @@ type mkvInfo struct { } type mkvProcessor struct { - a2p bool - apc bool - mks bool - pr int - pf int - cache string + a2p bool + apc bool + mks bool + pr string + pf string + cache string + ass2bdnxml bool } func (self *mkvProcessor) GetMKVInfo(file string) *mkvInfo { @@ -327,14 +327,14 @@ func (self *mkvProcessor) ASSFontSubset(files []string, fonts, output string, di return r } -func (self *mkvProcessor) A2P(a2p, apc bool, pr, pf int) { - self.a2p = runtime.GOOS == "windows" && runtime.GOARCH == "amd64" && a2p +func (self *mkvProcessor) A2P(a2p, apc bool, pr, pf string) { + self.a2p = self.ass2bdnxml && a2p self.apc = apc self.pr = pr self.pf = pf } -func (self *mkvProcessor) ass2Pgs(input []string, resolution, frameRate int, fontsDir string, output string, lcb logCallback) bool { +func (self *mkvProcessor) ass2Pgs(input []string, resolution, frameRate, fontsDir, output string, lcb logCallback) bool { return self.a2p && ass2Pgs(input, resolution, frameRate, fontsDir, output, lcb) } diff --git a/mkvlib/shared.go b/mkvlib/shared.go index 71e47d0..7d136da 100644 --- a/mkvlib/shared.go +++ b/mkvlib/shared.go @@ -11,7 +11,7 @@ import ( ) const libName = "mkvlib" -const libVer = "v1.5.4" +const libVer = "v1.5.5" const LibFName = libName + " " + libVer @@ -51,7 +51,7 @@ func (self *processorGetter) InitProcessorInstance(lcb logCallback) bool { _, _pyftsubset := exec.LookPath(pyftsubset) _, _mkvextract := exec.LookPath(mkvextract) _, _mkvmerge := exec.LookPath(mkvmerge) - _, _spp2pgs := exec.LookPath(spp2pgs) + _, _ass2bdnxml := exec.LookPath(ass2bdnxml) if _ttx != nil || _pyftsubset != nil { printLog(lcb, `Missing dependency: fonttools (need "%s" & "%s").`, ttx, pyftsubset) ec++ @@ -61,15 +61,16 @@ func (self *processorGetter) InitProcessorInstance(lcb logCallback) bool { ec++ } - if runtime.GOOS == "windows" && runtime.GOARCH == "amd64" && _spp2pgs != nil { - printLog(lcb, `Missing dependency: spp2pgs.`) - ec++ + if _ass2bdnxml != nil { + printLog(lcb, `Missing dependency: ass2bdnxml.`) + //ec++ } r := ec == 0 if r { self.checked = true self.instance = new(mkvProcessor) + self.instance.ass2bdnxml = _ass2bdnxml == nil } return r |
