summaryrefslogtreecommitdiff
path: root/mkvlib
diff options
context:
space:
mode:
authora1e7cb88 <[email protected]>2021-10-18 01:05:57 +0800
committera1e7cb88 <[email protected]>2021-10-18 01:05:57 +0800
commit1dbc72c60e4932e5b88ea608c668eea035ac7980 (patch)
treeca8eb66270ee5ffbbd75d730152f4b6b4fddc29c /mkvlib
parentf696fba48f3a05c08af71b9e2dceb72bb7c9c024 (diff)
update mod
Diffstat (limited to 'mkvlib')
-rw-r--r--mkvlib/c/exports.go87
-rw-r--r--mkvlib/c/main.go3
-rw-r--r--mkvlib/c/sdk.py35
3 files changed, 125 insertions, 0 deletions
diff --git a/mkvlib/c/exports.go b/mkvlib/c/exports.go
new file mode 100644
index 0000000..93d8321
--- /dev/null
+++ b/mkvlib/c/exports.go
@@ -0,0 +1,87 @@
+package main
+
+import (
+ "C"
+ "encoding/json"
+ "github.com/KurenaiRyu/MkvAutoSubset/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/mkvlib/c/main.go b/mkvlib/c/main.go
new file mode 100644
index 0000000..38dd16d
--- /dev/null
+++ b/mkvlib/c/main.go
@@ -0,0 +1,3 @@
+package main
+
+func main() {}
diff --git a/mkvlib/c/sdk.py b/mkvlib/c/sdk.py
new file mode 100644
index 0000000..a48a55e
--- /dev/null
+++ b/mkvlib/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)
+