Plugins
Raffriff42 (Talk | contribs) m (→Plugin Autoload and Conflicting Function Names: one more touch-up) |
Raffriff42 (Talk | contribs) (corrected function signatures) |
||
Line 3: | Line 3: | ||
__TOC__ | __TOC__ | ||
− | ===LoadPlugin=== | + | ====LoadPlugin==== |
− | Loads one or more standard (C++) AviSynth plugins. | + | Loads one or more [[Filter_SDK|standard (C++)]] AviSynth plugins. |
− | + | ||
− | + | {{FuncDef | |
− | + | |LoadPlugin(string ''filename'' [, string ''filename''...]) | |
− | + | }} | |
+ | :{{Par2|filename|string|}} | ||
+ | ::The path of the '''.DLL''' file(s). | ||
− | ===LoadCPlugin=== | + | ====LoadCPlugin==== |
− | Loads so-called AviSynth ''C-plugins''. C-plugins are created in pure C (unlike | + | Loads so-called AviSynth ''C-plugins''. C-plugins are created in pure [[wikipedia:C_(programming_language)|'''C''']] (unlike most Avisynth plugins, which are created with [[wikipedia:Visual_C%2B%2B|MS C++]]), use a special [[Filter_SDK/C_API|'''C API''']], and must be loaded with '''LoadCPlugin'''. |
− | + | ||
− | + | {{Func2Def | |
− | + | |LoadCPlugin(string ''filename'') | |
− | + | |Load_Stdcall_Plugin(string ''filename'') | |
− | + | }} | |
+ | :{{Par2|filename|string|}} | ||
+ | ::The path of the '''.DLL''' file. | ||
*The plugin's documentation should advise you if '''LoadCPlugin''' is needed. | *The plugin's documentation should advise you if '''LoadCPlugin''' is needed. | ||
*'''Load_Stdcall_Plugin''' is merely an ''alias'' or alternate name. | *'''Load_Stdcall_Plugin''' is merely an ''alias'' or alternate name. | ||
Line 23: | Line 27: | ||
− | ===LoadVirtualDubPlugin === | + | ====LoadVirtualDubPlugin ==== |
Loads a plugin written for [[VirtualDub]]. These are distributed as special DLLs with the file extension '''.VDF'''. | Loads a plugin written for [[VirtualDub]]. These are distributed as special DLLs with the file extension '''.VDF'''. | ||
− | + | ||
− | + | {{FuncDef | |
− | + | |LoadVirtualDubPlugin (string ''filename'', string ''filtername'' [, int ''preroll'']) | |
− | + | }} | |
− | + | :{{Par2|filename|string|}} | |
− | + | ::The path of the '''.VDF''' file. | |
+ | :{{Par2|filtername|string|}} | ||
+ | ::The name to be given to the plugin function after loading in AviSynth. | ||
+ | :{{Par2|preroll|int|0}} | ||
+ | ::Some filters' output depends on previous frames; for these, {{FuncArg|preroll}} should be set to a suitable number. | ||
*VirtualDub filters support only [[RGB32]]. | *VirtualDub filters support only [[RGB32]]. | ||
*Usage example ([http://trevlac.us/colorCorrection/ ColorTools]) – see [http://forum.doom9.org/showthread.php?t=72634 '''here'''] (doom9). | *Usage example ([http://trevlac.us/colorCorrection/ ColorTools]) – see [http://forum.doom9.org/showthread.php?t=72634 '''here'''] (doom9). | ||
Line 36: | Line 44: | ||
− | ===LoadVFAPIPlugin=== | + | ====LoadVFAPIPlugin==== |
Loads [[Vfapi|VFAPI]] plugins (''eg'', [[TMPGEnc]] import plugins). | Loads [[Vfapi|VFAPI]] plugins (''eg'', [[TMPGEnc]] import plugins). | ||
− | + | ||
− | + | {{FuncDef | |
− | + | |LoadVFAPIPlugin (string ''filename'', string ''filtername'') | |
− | + | }} | |
− | + | :{{Par2|filename|string|}} | |
+ | ::The path of the '''.DLL''' file. | ||
+ | :{{Par2|filtername|string|}} | ||
+ | ::The name to be given to the plugin function after loading in AviSynth. | ||
*The plugin's documentation should advise you if '''LoadVFAPIPlugin''' is needed. | *The plugin's documentation should advise you if '''LoadVFAPIPlugin''' is needed. | ||
</div> | </div> | ||
− | === Plugin Autoload and Name Precedence === | + | ==== Plugin Autoload and Name Precedence ==== |
<div style="max-width:62em" > | <div style="max-width:62em" > | ||
It is possible to put all plugins and script files with [[User_defined_script_functions|user-defined functions]] or (global) [[Script_variables|variables]] in an ''autoload directory'', from which all files with the extension '''.AVSI''' and '''.DLL''' are loaded [[The_script_execution_model/Sequence_of_events|at startup]], then unloaded and reloaded dynamically as the script needs them. | It is possible to put all plugins and script files with [[User_defined_script_functions|user-defined functions]] or (global) [[Script_variables|variables]] in an ''autoload directory'', from which all files with the extension '''.AVSI''' and '''.DLL''' are loaded [[The_script_execution_model/Sequence_of_events|at startup]], then unloaded and reloaded dynamically as the script needs them. | ||
Line 70: | Line 81: | ||
</div> | </div> | ||
− | === Plugin Autoload and Conflicting Function Names === | + | ==== Plugin Autoload and Conflicting Function Names ==== |
<div style="max-width:62em" > | <div style="max-width:62em" > | ||
A problem that may arise when multiple plugins have functions with the same name. You won't know which function will be called in your script, as this will depend on loading order. To call a particular function in this situation, AviSynth's <tt>DLLName_function()</tt> feature automatically creates ''prefix aliases''; so for example, '''foo.dll''''s <tt>bar()</tt> function may be called as <tt>foo_bar()</tt>. This works both for auto-loaded plugins and for plugins loaded with [[LoadPlugin]]. | A problem that may arise when multiple plugins have functions with the same name. You won't know which function will be called in your script, as this will depend on loading order. To call a particular function in this situation, AviSynth's <tt>DLLName_function()</tt> feature automatically creates ''prefix aliases''; so for example, '''foo.dll''''s <tt>bar()</tt> function may be called as <tt>foo_bar()</tt>. This works both for auto-loaded plugins and for plugins loaded with [[LoadPlugin]]. |
Revision as of 17:37, 13 March 2016
With these functions you can add external filters (DLLs) to the AviSynth script environment.
Contents |
LoadPlugin
Loads one or more standard (C++) AviSynth plugins.
LoadPlugin(string filename [, string filename...])
- string filename =
- The path of the .DLL file(s).
LoadCPlugin
Loads so-called AviSynth C-plugins. C-plugins are created in pure C (unlike most Avisynth plugins, which are created with MS C++), use a special C API, and must be loaded with LoadCPlugin.
LoadCPlugin(string filename)
Load_Stdcall_Plugin(string filename)
- string filename =
- The path of the .DLL file.
- The plugin's documentation should advise you if LoadCPlugin is needed.
- Load_Stdcall_Plugin is merely an alias or alternate name.
- Advice: keep these plugins outside your autoload directory to prevent crashes.
LoadVirtualDubPlugin
Loads a plugin written for VirtualDub. These are distributed as special DLLs with the file extension .VDF.
LoadVirtualDubPlugin (string filename, string filtername [, int preroll])
- string filename =
- The path of the .VDF file.
- string filtername =
- The name to be given to the plugin function after loading in AviSynth.
- int preroll = 0
- Some filters' output depends on previous frames; for these, preroll should be set to a suitable number.
- VirtualDub filters support only RGB32.
- Usage example (ColorTools) – see here (doom9).
- See FAQ using Virtualdub plugins for more information.
LoadVFAPIPlugin
Loads VFAPI plugins (eg, TMPGEnc import plugins).
LoadVFAPIPlugin (string filename, string filtername)
- string filename =
- The path of the .DLL file.
- string filtername =
- The name to be given to the plugin function after loading in AviSynth.
- The plugin's documentation should advise you if LoadVFAPIPlugin is needed.
Plugin Autoload and Name Precedence
It is possible to put all plugins and script files with user-defined functions or (global) variables in an autoload directory, from which all files with the extension .AVSI and .DLL are loaded at startup, then unloaded and reloaded dynamically as the script needs them.
.AVSI scripts in this directory should only contain function definitions and global variables; they should not have a main processing section (else strange errors may occur). It also is not recommended to put other files in that directory.
The directory is stored in the registry. You can use double-clicking a .REG-file with the following lines to set the path (of course inserting your actual path):
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Avisynth] "plugindir2_5"="c:\\program files\\avisynth 2.5\\plugins"
The order in which function names take precedence is as follows:
- User-defined function (always have the highest priority)
- Plugin (external) function (higher priority than built-in)
- Built-in (internal) function
Inside those groups the function loaded last takes precedence; there is no error in a namespace conflict.
It follows that there is no harm in loading the same plugin more than once.[dubious – discuss]
Plugin Autoload and Conflicting Function Names
A problem that may arise when multiple plugins have functions with the same name. You won't know which function will be called in your script, as this will depend on loading order. To call a particular function in this situation, AviSynth's DLLName_function() feature automatically creates prefix aliases; so for example, foo.dll's bar() function may be called as foo_bar(). This works both for auto-loaded plugins and for plugins loaded with LoadPlugin.
Suppose you have the plugins mpeg2dec.dll and mpeg2dec3.dll in your autoload directory; if you call
mpeg2source("F:\From_hell\from_hell.d2v")
you won't know which plugin will be used in your script, as both have an mpeg2source function.
To load the file with mpeg2dec.dll (which outputs YUY2), call
mpeg2dec_mpeg2source("F:\From_hell\from_hell.d2v")
or to load the file with mpeg2dec3.dll (which outputs YV12), call
mpeg2dec3_mpeg2source("F:\From_hell\from_hell.d2v")
Back to AviSynth Syntax.