Filter SDK/SDK necessaries
What is necessary to create an AviSynth plugin?
Contents |
You must have some compatible development tool:
- Microsoft Visual C/C++ 6, 7, 7.1, or 8 (2005)
- Microsoft Visual C++ Toolkit 2003 (free, try search vctoolkitsetup.exe) with some IDE (e.g. free CodeBlocks)
- Microsoft Visual C++ 2005 Express edition
- Microsoft Visual C++ 2010 Express edition (free download [1])
- Intel ICL Compiler v7 (?) or above
Notes: Visual C/C++ 6, 7, 7.1 Standard Edition (and NET 1.1 SDK) lack in optimizing compiler (only expensive Professional or Enterprise Edition included it). As a partial workaround you can add free Visual C++ Toolkit 2003 optimizing compiler to your Standard Edition IDE (by setting directories properly) or use Visual C++ 2005 (any edition).
You also need in Microsoft Platform SDK (if it is not included with compiler).
Free download it from Microsoft site. The last SDK that will work with VC 6.0 was the February 2003 Edition.
For some very special plugins (GPU) you may need in DirectX SDK.
Finally, you must include small header file 'avisynth.h'.
You can get it with this FilterSDK, download with AviSynth source code, or take from some plugin source package. There are several versions of this header file from various AviSynth versions.
Header file avisynth.h from v1.0.x to v2.0.x have AVISYNTH_INTERFACE_VERSION = 1. Plugins compiled with them will be not (natively) compatible with AviSynth 2.5.x.
Header file avisynth.h from v2.5.0 to v2.5.5 have AVISYNTH_INTERFACE_VERSION = 2. Plugins compiled with them will (generally) work in AviSynth v2.5.0 to v2.5.7 (and above). But avisynth.h files from versions v2.5.0 - v2.5.5 (and betas) are not identical. We recommend to use avisynth.h from versions 2.5.5 or later. Previous versions of avisynth.h are obsolete and have some bugs.
Header file avisynth.h from v2.5.6 to v2.5.8 are almost identical and have AVISYNTH_INTERFACE_VERSION = 3. Plugins compiled with them will work in v2.5.6 and up, and v2.5.5 and below if you do not use new interface features and do not call env->CheckVersion function.
Now being developed, AviSynth version 2.6.x will use new header avisynth.h, currently with AVISYNTH_INTERFACE_VERSION = 5. Plugins compiled with AviSynth v2.5.x header will work in AviSynth 2.6.x too, but plugins compiled with new AviSynth v2.6.x header will probably not work in AviSynth v2.5.x.
Generally good start is to take some similar plugin source code as a draft for improving or own development. Attention: there are many old plugins source code packages with older avisynth.h included. (for example, SimpleSample zip file contains avisynth.h file from from AviSynth v2.5.4). Simply replace it by new one.
Compiling options
Plugin CPP source code must be compiled as Win32 DLL (multi-threaded or multi-threaded DLL) without MFC.
Notes. If you use Visual C++ Toolkit 2003 itself (without VC++ 7), you can not build plugin as multi-treaded DLL: the toolkit missed some libraries, in particular msvcrt.lib. You can get additional libs with MS .NET 1.1 SDK (free download) or simply use multi-treaded option (IMHO it is better - no need in MSVCRT71.DLL).
Of course, use Release build with optimization. Typical compiler switches are /MT /O2 and /dll /nologo for linker
See step by step compiling instructions.
Other compilers
Since v2.5.7, AviSynth includes an updated version of Kevin Atkinson's AviSynth C API you can use to create "C-Plugins" with compilers such as GNU C++, Visual Basic and Delphi.
You can NOT use the C++ API with compilers like GNU C++ to create plugins.
There is also Pascal conversion of avisynth_c.h by Myrsloik
Some info about Using in Visual Basic
PureBasic port of the Avisynth C Interface by Inc
There is also AvsFilterNet wrapper for Avisynth in .NET (any .NET language) by SAPikachu, see discussion