summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorb5f0d6c3 <[email protected]>2022-03-23 10:05:46 +0800
committerb5f0d6c3 <[email protected]>2022-03-23 10:05:46 +0800
commit825aa89ea0f6ca70daaf4e51421cb7b9d20d7eb4 (patch)
treec2bb280ad18cd41d21e3d1fe8b487f8c3f0bd9f2
parent342b29b8767d8ea2f4c84e3ba6a2e33c413e1ef3 (diff)
update sdks
-rw-r--r--mkvlib/c/README.md54
-rw-r--r--mkvlib/c/exports.go26
-rw-r--r--mkvlib/c/sdk.cs28
-rw-r--r--mkvlib/c/sdk.py16
4 files changed, 111 insertions, 13 deletions
diff --git a/mkvlib/c/README.md b/mkvlib/c/README.md
index 3d9a00b..bff23f4 100644
--- a/mkvlib/c/README.md
+++ b/mkvlib/c/README.md
@@ -1,6 +1,7 @@
# C导出函数说明
## 2022.03新增的ASS转PGS说明
+
- ```c
void A2P(bool a2p, bool apc, int pr, int pf);
//启用ass转pgs(win64专属,且应在执行工作流之前调用.)
@@ -11,17 +12,19 @@
```
## 日志回调
+
- 原型
```c
void (*logCallback)(char* str);
//str: UTF-8编码的指针,并约定所有"char*"数据类型的参数或返回值都为此.
```
- 一些说明
- - 几乎所有导出的方法都有这个参数(在最后),当出现错误时会进行调用,可以用来判断执行过程是否出错,错在哪.
- - 虽然可以为NULL,但并不建议这样做.
- - 以下名为"lcb"的参数均为日志回调,不再赘述.
+ - 几乎所有导出的方法都有这个参数(在最后),当出现错误时会进行调用,可以用来判断执行过程是否出错,错在哪.
+ - 虽然可以为NULL,但并不建议这样做.
+ - 以下名为"lcb"的参数均为日志回调,不再赘述.
## 初始化实例
+
- ```c
bool InitInstance(logCallbac lcb);
//return: 是否初始化成功
@@ -30,7 +33,30 @@
- 会检测依赖,如果不满足会返回false.
- 如果在**未**或**未成功**调用本函数的情况下调用其他函数会永远返回失败状态.
+### 缓存相关
+
+- ```c
+ void Cache(char* p);
+ //设置字体缓存(应在执行工作流之前调用)
+ //p: 缓存文件路径
+ ```
+- ```c
+ char* CreateFontsCache(char* dir, char* output, logCallback lcb);
+ //从字体目录创建缓存
+ //dir: 字体文件目录
+ //output: 缓存文件保存路径
+ //return: 缓存失败字体的json格式的数组
+ ```
+- ```c
+ char* CopyFontsFromCache(char* subs, char* dist, logCallback lcb);
+ //从缓存复制字幕所需的字体
+ //subs: 字体文件目录
+ //dist: 字体文件保存目录
+ //return: 是否全部导出
+ ```
+
### 查询相关
+
- ```c
char* GetMKVInfo(char* file);
//查询一个mkv文件内封的字幕和字体信息
@@ -49,7 +75,9 @@
//dir: 文件夹路径
//return: 需要子集化的mkv文件路径数组
```
+
### MKV相关
+
- ```c
bool DumpMKV(char* file, char* output, bool subset, logCallback lcb);
//抽取一个mkv文件里的字幕和字体并顺便进行子集化(可选)
@@ -66,7 +94,8 @@
//subset: 是否进行子集化
//return: 是否全程无错
```
- - 输出文件夹的目录结构请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#mkvtool-%E5%8A%9F%E8%83%BD%E5%8F%8A%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B)
+ -
+ 输出文件夹的目录结构请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#mkvtool-%E5%8A%9F%E8%83%BD%E5%8F%8A%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B)
- ```c
bool CreateMKV(char* file, char* tracks, char* attachments, char* output, char* slang, char* stitle, bool clean);
//将字幕和字体封进mkv文件
@@ -79,7 +108,7 @@
//clean: 是否清除源mkv原有的字幕和字体
//return: 是否全程无错
```
- - 关于字幕的命名方式请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#%E4%B8%80%E4%BA%9B%E7%A2%8E%E7%A2%8E%E5%BF%B5)
+ - 关于字幕的命名方式请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#%E4%B8%80%E4%BA%9B%E7%A2%8E%E7%A2%8E%E5%BF%B5)
- ```c
bool CreateMKVs(char* vDir, char* sDir, char* fDir, char* tDir, char* oDir, char* slang, char* stitle, bool clean, logCallback lcb);
//从一组文件夹获得情报自动生成一组mkv并自动进行子集化操作
@@ -93,7 +122,7 @@
//clean: 是否清除源mkv原有的字幕和字体
//return: 是否全程无错
```
- - 关于字幕的命名方式请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#%E4%B8%80%E4%BA%9B%E7%A2%8E%E7%A2%8E%E5%BF%B5)
+ - 关于字幕的命名方式请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#%E4%B8%80%E4%BA%9B%E7%A2%8E%E7%A2%8E%E5%BF%B5)
- ```c
bool MakeMKVs(char* dir, char* data, char* output, char* slang, char* stitle, logCallback lcb);
//用子集化后的数据目录替代原有的字幕和字体
@@ -104,10 +133,13 @@
//stitle: 默认字幕标题
//return: 是否全程无错
```
- - 输出文件夹的目录结构请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#mkvtool-%E5%8A%9F%E8%83%BD%E5%8F%8A%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B)
- - 关于字幕的命名方式请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#%E4%B8%80%E4%BA%9B%E7%A2%8E%E7%A2%8E%E5%BF%B5)
+ -
+ 输出文件夹的目录结构请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#mkvtool-%E5%8A%9F%E8%83%BD%E5%8F%8A%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B)
+ - 关于字幕的命名方式请参考[这里](https://github.com/KurenaiRyu/MkvAutoSubset#%E4%B8%80%E4%BA%9B%E7%A2%8E%E7%A2%8E%E5%BF%B5)
+
### 字幕相关
- - ```c
+
+- ```c
bool ASSFontSubset(char* files, char* fonts, char* output, bool dirSafe, logCallback lcb);
//对字幕和字体进行子集化操作
//files: 字幕文件路径数组的json化文本
@@ -116,8 +148,8 @@
//dirSafe: 是否把成品输出到"${output}/subsetted"文件夹里(为了安全建议设置为true)
//return: 是否全程无错
```
- - ```c
- char* CreateMKVs(char* dir, logCallback lcb);
+- ```c
+ char* GetFontsList(char* dir, logCallback lcb);
//取得指定目录内所有字幕需要的全部字体
//dir: 字幕文件所在的目录
//return: json格式的数组
diff --git a/mkvlib/c/exports.go b/mkvlib/c/exports.go
index c79431e..2729ff5 100644
--- a/mkvlib/c/exports.go
+++ b/mkvlib/c/exports.go
@@ -141,6 +141,32 @@ func GetFontsList(dir *C.char, lcb C.logCallback) *C.char {
return cs(string(data))
}
+//export CreateFontsCache
+func CreateFontsCache(dir, output *C.char, lcb C.logCallback) *C.char {
+ if !checkInstance() {
+ return cs("")
+ }
+ list := getter.GetProcessorInstance().CreateFontsCache(gs(dir), gs(output), _lcb(lcb))
+ data, _ := json.Marshal(list)
+ return cs(string(data))
+}
+
+//export CopyFontsFromCache
+func CopyFontsFromCache(subs, dist *C.char, lcb C.logCallback) bool {
+ if !checkInstance() {
+ return false
+ }
+ return getter.GetProcessorInstance().CopyFontsFromCache(gs(subs), gs(dist), _lcb(lcb))
+}
+
+//export Cache
+func Cache(p *C.char) {
+ if !checkInstance() {
+ return
+ }
+ getter.GetProcessorInstance().Cache(gs(p))
+}
+
func cs(gs string) *C.char {
return C.CString(gs)
}
diff --git a/mkvlib/c/sdk.cs b/mkvlib/c/sdk.cs
index 18aff8c..4699b1d 100644
--- a/mkvlib/c/sdk.cs
+++ b/mkvlib/c/sdk.cs
@@ -41,7 +41,16 @@ public static class mkvlib
static extern bool A2P(bool a2p, bool apc, int pr, int pf);
[DllImport("mkvlib.so")]
- static extern bool GetFontsList(IntPtr dir, logCallback lcb);
+ static extern IntPtr GetFontsList(IntPtr dir, logCallback lcb);
+
+ [DllImport("mkvlib.so")]
+ static extern void Cache(IntPtr p);
+
+ [DllImport("mkvlib.so")]
+ static extern IntPtr CreateFontsCache(IntPtr dir, IntPtr output, logCallback lcb);
+
+ [DllImport("mkvlib.so")]
+ static extern bool CopyFontsFromCache(IntPtr subs, IntPtr dist, logCallback lcb);
#endregion
@@ -109,12 +118,27 @@ public static class mkvlib
A2P(a2p, apc, pr, pf);
}
- public string[] GetFontsList(string dir, Action<string> lcb)
+ public static string[] GetFontsList(string dir, Action<string> lcb)
{
string result = css(GetFontsList(cs(dir), _lcb(lcb)));
return JsonSerializer.Deserialize<string[]>(result);
}
+ public static void Cache(string p)
+ {
+ Cache(cs(p));
+ }
+
+ public static string[] CreateFontsCache(string dir, string output, Action<string> lcb)
+ {
+ string result = css(CreateFontsCache(cs(dir), cs(output), _lcb(lcb)));
+ return JsonSerializer.Deserialize<string[]>(result);
+ }
+
+ public static bool CopyFontsFromCache(string subs, string dist, Action<string> lcb)
+ {
+ return CopyFontsFromCache(cs(subs), cs(dist), _lcb(lcb));
+ }
delegate void logCallback(IntPtr ptr);
static logCallback _lcb(Action<string> lcb)
diff --git a/mkvlib/c/sdk.py b/mkvlib/c/sdk.py
index 4568cb7..5a67caf 100644
--- a/mkvlib/c/sdk.py
+++ b/mkvlib/c/sdk.py
@@ -77,3 +77,19 @@ def getFontsList(dir, lcb):
call = lib.GetFontsList
call.restype = c_char_p
return loads(call(dir.encode(), lcb).decode())
+
+
+def cache(p):
+ call = lib.Cache
+ return call(p.encode())
+
+
+def createFontsCache(dir, output, lcb):
+ call = lib.CreateFontsCache
+ call.restype = c_char_p
+ return loads(call(dir.encode(), output.encode(), lcb).decode())
+
+
+def copyFontsFromCache(subs, dist, lcb):
+ call = lib.CopyFontsFromCache
+ return call(subs.encode(), dist.encode(), lcb)