搜索 社区服务 统计排行 帮助
  • 7649阅读
  • 66回复

[原创]EP特效压制插件。。。

楼层直达
级别: 新手上路
注册时间:
2005-04-05
在线时间:
3小时
发帖:
216
联动:http://popgo.net/bbs/showthread.php?s=&threadid=505380

为了压制某EP特效而弄出来的东西。。。算是第一个.Net AVS插件吧。。。

基本原理是在VSFilter的内存占用过高的时候重新加载之,只能算是临时解决方案。。。治本要等VSFilter修复内存泄漏的bug。。。不过不知道要等到何年何月了。。。orz

下载和使用方法见:
http://www.sapikachu.net/post/2009/02/12/eptextsub.aspx

(谜之声:这明显是广告。。。




级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 66楼 发表于: 2009-02-17
引用
最初由 马克思没死 发布
不知道用了插件看到这个伟大的特效了么。。。。技术帖咱就不排队形了= =要是看到了记得给咱见识一下|||


不用那个插件我也看到了...算了还是不评论了
级别: 新手上路
注册时间:
2008-12-15
在线时间:
0小时
发帖:
59
只看该作者 65楼 发表于: 2009-02-17
不知道用了插件看到这个伟大的特效了么。。。。技术帖咱就不排队形了= =要是看到了记得给咱见识一下|||

今天好开心呀-->摘自表妹日记
级别: 骑士
注册时间:
2003-06-05
在线时间:
0小时
发帖:
1041
只看该作者 64楼 发表于: 2009-02-16
王牌大大SAPikachu翻开了EP压制历史上崭新的一页

继续保持队形
级别: 新手上路
注册时间:
2005-04-05
在线时间:
3小时
发帖:
216
只看该作者 63楼 发表于: 2009-02-16
引用
最初由 roozhou 发布

.net写这种东西性能不行
还是C比较好,C++的话要避免用M$的东东


<---C苦手。。。

建议提交到sourceforge。。。造福万民啊。。。




级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 62楼 发表于: 2009-02-16
不太完美的解决方案,只是降低了内存泄漏的速度,楼主的那个14M的可以放了,但绿叶的那个180M的还是不行。我会在下次dshow2raw更新时加入修正的vsfilter。

附补丁(guliverkli2)

Index: src/subtitles/RTS.cpp
===================================================================
--- src/subtitles/RTS.cpp (revision 97)
+++ src/subtitles/RTS.cpp (working copy)
@@ -1386,18 +1386,20 @@

int nTags = 0, nUnrecognizedTags = 0;

+ CStringW cmd;
+ CAtlArray params;
+ CStringW param;
+ CStringW s;
+ CStringW p;
for(int i = 0, j; (j = str.Find('\\', i)) >= 0; i = j)
{
-CStringW cmd;
for(WCHAR c = str[++j]; c && c != '(' && c != '\\'; cmd += c, c = str[++j]);
cmd.Trim();
if(cmd.IsEmpty()) continue;

-CAtlArray params;

if(str[j] == '(')
{
- CStringW param;
for(WCHAR c = str[++j]; c && c != ')'; param += c, c = str[++j]);
param.Trim();

@@ -1407,7 +1409,7 @@

if(i >= 0 && (j < 0 || i < j))
{
- CStringW s = param.Left(i).Trim();
+ s = param.Left(i).Trim();
if(!s.IsEmpty()) params.Add(s);
param = i+1 < param.GetLength() ? param.Mid(i+1) : L"";
}
@@ -1442,7 +1444,7 @@
;
else if(!cmd.Find(L"c"))
params.Add(cmd.Mid(1).Trim(L"&H")), cmd = cmd.Left(1);
-else if(!cmd.Find(L"fade"))
+else if(!cmd.Find(L"fade"))
;
else if(!cmd.Find(L"fe"))
params.Add(cmd.Mid(2)), cmd = cmd.Left(2);
@@ -1507,7 +1509,7 @@

// TODO: call ParseStyleModifier(cmd, params, ..) and move the rest there

-CStringW p = params.GetCount() > 0 ? params[0] : L"";
+p = params.GetCount() > 0 ? params[0] : L"";

if(cmd == "1c" || cmd == L"2c" || cmd == L"3c" || cmd == L"4c")
{
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 61楼 发表于: 2009-02-16
引用
最初由 SAPikachu 发布
BS+1
还是.net好。。。

.net写这种东西性能不行
还是C比较好,C++的话要避免用M$的东东
级别: 新手上路
注册时间:
2005-04-05
在线时间:
3小时
发帖:
216
只看该作者 60楼 发表于: 2009-02-16
BS+1
还是.net好。。。




级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 59楼 发表于: 2009-02-16
今天继续调试vsfilter,发现两个问题:
1)ParseSSATag内有递归
2)内存泄露来自CString和CStringW,所有CString定义或赋值语句执行后,内存占用都会增加。我把ParseSSATag内所有CString的定义从循环内部移到函数开头后,内存泄露从每帧80M下降到3M。

P.S. 对MFC这种垃圾也顺便鄙视一下
级别: 精灵王
注册时间:
2008-04-08
在线时间:
44小时
发帖:
2855
只看该作者 58楼 发表于: 2009-02-16
引用
最初由 MeteorRain 发布

你要打开【虚拟内存占用】栏,那个才是真的。最小化会把内存里不用的数据全丢进虚拟内存,然后如果要调用数据的话再一点点取回来。


我的交换文件是关闭的,windows不可能把已经用过的内存扔掉的
级别: 工作组
注册时间:
2007-08-23
在线时间:
0小时
发帖:
683
只看该作者 57楼 发表于: 2009-02-13
王牌大大SAPikachu翻开了EP压制历史上崭新的一页
级别: 新手上路
注册时间:
2005-04-05
在线时间:
3小时
发帖:
216
只看该作者 56楼 发表于: 2009-02-13
刚把那程序搞下来。。。看了一下代码。。。和其它所谓优化程序一样的原理。。。还是把内存数据转到页面文件而已。。。




级别: 新手上路
注册时间:
2004-08-01
在线时间:
4小时
发帖:
480
只看该作者 55楼 发表于: 2009-02-13
引用
最初由 SAPikachu 发布
呃。。。所谓的内存优化软件都是骗人的吧。。。

反正这个软件并不是通过把内存中的内容转存到页面文件来优化内存的~而且确实可以看到内存占用率下降。不过没用avs测试过,不过是CS编写的可以考虑借鉴它的代码来优化你写的那个程序。嘛都是瞎猜,能不能用就不清楚了。

überm Sternenzelt richtet Gott, wie wir gerichtet.

Girls
Usually
Need
Diamond
And
Money
级别: 新手上路
注册时间:
2005-04-05
在线时间:
3小时
发帖:
216
只看该作者 54楼 发表于: 2009-02-13
呃。。。所谓的内存优化软件都是骗人的吧。。。




级别: 新手上路
注册时间:
2004-08-01
在线时间:
4小时
发帖:
480
只看该作者 53楼 发表于: 2009-02-13
据说有一个很强的CSharp写的内存优化软件minimem,不知道对vsfilter有效没有~

überm Sternenzelt richtet Gott, wie wir gerichtet.

Girls
Usually
Need
Diamond
And
Money
快速回复

限150 字节
上一个 下一个