summaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
authorMkvAutoSubset <[email protected]>2021-10-17 20:17:58 +0800
committerKurenai <[email protected]>2021-10-17 20:17:58 +0800
commitc0f88cb080950879bc8af5cf498ac3aa8a8c68fb (patch)
treecaa193ee7f100a1b22d5fa7fa8dfe1120f7ae757 /c
parent70a7c4edba281122c05ef46e9efffe5309ef8448 (diff)
Bump to 3.1.3
- 增加C函数导出 - 增加python调用的demo
Diffstat (limited to 'c')
-rw-r--r--c/exports.go87
-rw-r--r--c/go.mod18
-rw-r--r--c/main.go3
-rw-r--r--c/sdk.py35
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)
+