diff options
| author | MkvAutoSubset <[email protected]> | 2021-10-17 20:17:58 +0800 |
|---|---|---|
| committer | Kurenai <[email protected]> | 2021-10-17 20:17:58 +0800 |
| commit | c0f88cb080950879bc8af5cf498ac3aa8a8c68fb (patch) | |
| tree | caa193ee7f100a1b22d5fa7fa8dfe1120f7ae757 /c | |
| parent | 70a7c4edba281122c05ef46e9efffe5309ef8448 (diff) | |
Bump to 3.1.3
- 增加C函数导出
- 增加python调用的demo
Diffstat (limited to 'c')
| -rw-r--r-- | c/exports.go | 87 | ||||
| -rw-r--r-- | c/go.mod | 18 | ||||
| -rw-r--r-- | c/main.go | 3 | ||||
| -rw-r--r-- | c/sdk.py | 35 |
4 files changed, 143 insertions, 0 deletions
diff --git a/c/exports.go b/c/exports.go new file mode 100644 index 0000000..60b823a --- /dev/null +++ b/c/exports.go @@ -0,0 +1,87 @@ +package main + +import ( + "C" + "encoding/json" + "mkvlib" +) + +var _instance = mkvlib.GetInstance() + +//export CheckInstance +func CheckInstance() bool { + return _instance != nil +} + +//export GetMKVInfo +func GetMKVInfo(file *C.char) *C.char { + if !CheckInstance() { + return cs("") + } + obj := _instance.GetMKVInfo(gs(file)) + data, _ := json.Marshal(obj) + return cs(string(data)) +} + +//export DumpMKV +func DumpMKV(file, output *C.char, subset bool) bool { + if !CheckInstance() { + return false + } + return _instance.DumpMKV(gs(file), gs(output), subset) +} + +type checkSubset_R struct { + Subseted bool `json:"subseted"` + Error bool `json:"error"` +} + +//export CheckSubset +func CheckSubset(file *C.char) *C.char { + if !CheckInstance() { + return cs("") + } + a, b := _instance.CheckSubset(gs(file)) + data, _ := json.Marshal(checkSubset_R{a, b}) + return cs(string(data)) +} + +//export CreateMKV +func CreateMKV(file, tracks, attachments, output, slang, stitle *C.char, clean bool) bool { + if !CheckInstance() { + return false + } + a := make([]string, 0) + b := make([]string, 0) + err := json.Unmarshal([]byte(gs(tracks)), &a) + if err == nil { + _tracks := a + err = json.Unmarshal([]byte(gs(attachments)), &b) + if err == nil { + _attachments := b + return _instance.CreateMKV(gs(file), _tracks, _attachments, gs(output), gs(slang), gs(stitle), clean) + } + } + return false +} + +//export ASSFontSubset +func ASSFontSubset(files, fonts, output *C.char, dirSafe bool) bool { + if !CheckInstance() { + return false + } + obj := make([]string, 0) + if json.Unmarshal([]byte(gs(files)), &obj) == nil { + _files := obj + return _instance.ASSFontSubset(_files, gs(fonts), gs(output), dirSafe) + } + return false +} + +func cs(gs string) *C.char { + return C.CString(gs) +} + +func gs(cs *C.char) string { + return C.GoString(cs) +} diff --git a/c/go.mod b/c/go.mod new file mode 100644 index 0000000..1c0e378 --- /dev/null +++ b/c/go.mod @@ -0,0 +1,18 @@ +module mkvlib/c + +go 1.17 + +require mkvlib v0.0.0 + +require ( + github.com/antchfx/xmlquery v1.3.8 // indirect + github.com/antchfx/xpath v1.2.0 // indirect + github.com/asticode/go-astikit v0.20.0 // indirect + github.com/asticode/go-astisub v0.19.0 // indirect + github.com/asticode/go-astits v1.8.0 // indirect + github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect + golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect + golang.org/x/text v0.3.2 // indirect +) + +replace mkvlib => ../lib diff --git a/c/main.go b/c/main.go new file mode 100644 index 0000000..38dd16d --- /dev/null +++ b/c/main.go @@ -0,0 +1,3 @@ +package main + +func main() {} diff --git a/c/sdk.py b/c/sdk.py new file mode 100644 index 0000000..a48a55e --- /dev/null +++ b/c/sdk.py @@ -0,0 +1,35 @@ +from ctypes import * +from json import * + +libpath="./mkvlib.so" +lib=CDLL(libpath) + +def checkInstance(): + call=lib.CheckInstance + return call() + +def getMKVInfo(file): + call=lib.GetMKVInfo + call.restype=c_char_p + return call(file.encode()) + +def dumpMKV(file,output,subset,dirSafe): + call=lib.DumpMKV + return call(file.encode(),output.encode(),subset,dirSafe) + +def checkSubset(file): + call=lib.CheckSubset + call.restype=c_char_p + return call(file.encode()) + +def createMKV(file,tracks,attachments,output,slang,stitle,clean): + call=lib.CreateMKV + _tracks=dumps(tracks) + _attachments=dumps(attachments) + return call(file.encode(),_tracks.encode(),_attachments.encode(),output.encode(),slang.encode(),stitle.encode(),clean) + +def assFontSubset(files,fonts,output,dirSafe): + call=lib.ASSFontSubset + _files=dumps(files) + return call(_files.encode(),fonts.encode(),output.encode(),dirSafe) + |
