AE 插件开发-经验分享 (一) AE插件是什么
插件的本质
插件的本质就是一个动态库,只不过文件扩展名不是DLL而是aex;只要把做好的动态库放到AE指定的文件夹下(一般是AE安装文件夹下的Plug-ins),AE启动时就会找到插件并加载它。
入口点函数
DllExport
PF_Err
EntryPointFunc (
PF_Cmd cmd,
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output )
所有插件必需实现入口点函数,插件在使用过程中,入口点函数会被多次调用,不同时刻调用时可能有不同的参数,如果插件被加载时 cmd 的值就是 PF_Cmd_GLOBAL_SETUP,打开关于对话框时 cmd的值就是PF_Cmd_ABOUT。关于入口点函数的名称,上面用的是EntryPointFunc,这个名称是可以指定的,指定入口点函数名称是在资源文件中指定的。
资源文件
样本插件的源文件夹中都有一个扩展名为“.r”的文件,这个文件是一个文本文件,里面定义了许多插件需要的参数,比如入口点函数的名称,插件的类别,插件的名称,版本,待待一些参数,这些参数也是非常重要的,如果设置不正确可能插件也不能加载。这件文件编译是会用AE SDK中的专门编译工具PiPLtool.exe生成一个 .rc 的VC中的资源文件,最终编译链接后被放入DLL(aex)文件中。下面是一个样本插件中的 .r 文件,有些作用我也不太懂,有些知道的我注释在文件中了
#include "AEConfig.h"
#include "AE_EffectVers.h"
#ifndef AE_OS_WIN
#include "AE_General.r"
#endif
resource 'PiPL' (16000) {
{ /* array properties: 12 elements */
/* [1] */
Kind {
AEEffect /* 插件种类 有效果插件,输入输出插件,通用插件,等等*/
},
/* [2] */
Name {
"Checkout" /* 插件的名称,显示的名称 */
},
/* [3] */
Category {
"Sample Plug-ins" /* 分类,效果插件有些插件可以显示到一个分组里面 */
},
#ifdef AE_OS_WIN
#ifdef AE_PROC_INTELx64
CodeWin64X86 {"EntryPointFunc"}, /* 此处和以下就是入口点函数的定时,用宏定义区分了不同平台 */
#else
CodeWin32X86 {"EntryPointFunc"},
#endif
#else
#ifdef AE_OS_MAC
CodeMachOPowerPC {"EntryPointFunc"},
CodeMacIntel32 {"EntryPointFunc"},
CodeMacIntel64 {"EntryPointFunc"},
#endif
#endif /* 插件版本 */
AE_PiPL_Version {
2,
0
},
/* [7] */
AE_Effect_Spec_Version {
PF_PLUG_IN_VERSION,
PF_PLUG_IN_SUBVERS
},
/* [8] */
AE_Effect_Version {
1048576 /* 2.0 */
},
/* [9] */
AE_Effect_Info_Flags {
0
},
/* 全局输出参数,需要与代码中的值一致 */
AE_Effect_Global_OutFlags {
34
},
AE_Effect_Global_OutFlags_2 {
0
},
/* 我的理解是这个名字才是区别其它插件的标志,显示名可以不同 */
AE_Effect_Match_Name {
"ADBE Checkout"
},
/* [12] */
AE_Reserved_Info {
0
}
}
};
开发环境
VS 2013下载并安装好
AE_SDK下载需要注册一下好象才可以下载,开发包下载来以后,解压,内部有多个不同种类的样关插件,最省事的开发方式就是找一个相似的插件,在这个插件的基础上修改名称等等参数,把不必要的代码删除,添加自己的功能代码。这样的话开发环境的各种头文件包含和上边资源文件的生成等等所有事都省了。
这里我发现一个问题,VS 2013打开项目编译一切正常,但VS 2015编译 Release版本是不成功,我还没有找到原因。
2019.10.10 VS2017一切正常