<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.avisynth.nl/index.php?action=history&amp;feed=atom&amp;title=Wrapper</id>
	<title>Wrapper - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.avisynth.nl/index.php?action=history&amp;feed=atom&amp;title=Wrapper"/>
	<link rel="alternate" type="text/html" href="http://www.avisynth.nl/index.php?title=Wrapper&amp;action=history"/>
	<updated>2026-08-24T15:08:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>http://www.avisynth.nl/index.php?title=Wrapper&amp;diff=1272&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;Even if you know little to nothing about programming, you can write your own AviSynth functions to simplify your scripts.  Suppose that you wished that some of the parameters ...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.avisynth.nl/index.php?title=Wrapper&amp;diff=1272&amp;oldid=prev"/>
		<updated>2013-05-12T21:11:12Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Even if you know little to nothing about programming, you can write your own AviSynth functions to simplify your scripts.  Suppose that you wished that some of the parameters ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Even if you know little to nothing about programming, you can write your own AviSynth functions to simplify your scripts.&lt;br /&gt;
&lt;br /&gt;
Suppose that you wished that some of the parameters to your favorite filter were optional or that some of its parameters had different default values.&lt;br /&gt;
&lt;br /&gt;
For example, consider the [[Levels]] filter:&lt;br /&gt;
&lt;br /&gt;
    Levels(clip c,&lt;br /&gt;
           int input_low, float gamma, int input_high,&lt;br /&gt;
           int output_low, int output_high)&lt;br /&gt;
&lt;br /&gt;
I rarely adjust output_low or output_high. It might be convenient if they were optional and had default values of 0 and 255, respectively. We can write a wrapper function for it:&lt;br /&gt;
&lt;br /&gt;
    # MyLevels&lt;br /&gt;
    #&lt;br /&gt;
    #   A wrapper function to Levels with named, optional parameters.&lt;br /&gt;
    #&lt;br /&gt;
    # PARAMETERS:&lt;br /&gt;
    #   input_low   - (default: 0)&lt;br /&gt;
    #   gamma       - (default: 1.0)&lt;br /&gt;
    #   input_high  - (default: 255)&lt;br /&gt;
    #   output_low  - (default: 0)&lt;br /&gt;
    #   output_high - (default: 255)&lt;br /&gt;
    #&lt;br /&gt;
    # USAGE:&lt;br /&gt;
    #   MyLevels(0, 1.2, 255, 0, 255)&lt;br /&gt;
    #   MyLevels(0, 1.2, 255)&lt;br /&gt;
    #   MyLevels(gamma=1.2)&lt;br /&gt;
    #&lt;br /&gt;
    function MyLevels(clip c,&lt;br /&gt;
    \                 int &amp;quot;input_low&amp;quot;, float &amp;quot;gamma&amp;quot;, int &amp;quot;input_high&amp;quot;,&lt;br /&gt;
    \                 int &amp;quot;output_low&amp;quot;, int &amp;quot;output_high&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        return c.Levels(Default(input_low, 0),&lt;br /&gt;
        \               Default(gamma, 1.0),&lt;br /&gt;
        \               Default(input_high, 255),&lt;br /&gt;
        \               Default(output_low, 0),&lt;br /&gt;
        \               Default(output_high, 255))&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
As another example, suppose you would like your favorite filter to have presets like [Convolution3D]. Consider TemporalSoften:&lt;br /&gt;
&lt;br /&gt;
    TemporalSoften(clip c, int radius,&lt;br /&gt;
                   int luma_threshold, int chroma_threshold,&lt;br /&gt;
                   int &amp;quot;scenechange&amp;quot;, int &amp;quot;mode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
I can never remember what combination of values work well together, so I&amp;#039;d prefer to supply presets:&lt;br /&gt;
&lt;br /&gt;
    # TemporalSoftenPreset&lt;br /&gt;
    #&lt;br /&gt;
    #   A wrapper function to TemporalSoften to specify presets.&lt;br /&gt;
    #&lt;br /&gt;
    # PARAMETERS:&lt;br /&gt;
    #   preset - the preset name:&lt;br /&gt;
    #              { &amp;quot;default&amp;quot;, &amp;quot;sh0dan-soft&amp;quot;,&lt;br /&gt;
    #                &amp;quot;sh0dan-medium&amp;quot;, &amp;quot;sh0dan-heavy&amp;quot; }&lt;br /&gt;
    #            (default: &amp;quot;default&amp;quot;)&lt;br /&gt;
    #&lt;br /&gt;
    # USAGE:&lt;br /&gt;
    #   TemporalSoftenPreset(preset=&amp;quot;default&amp;quot;)&lt;br /&gt;
    #&lt;br /&gt;
    function TemporalSoftenPreset(clip c, string &amp;quot;preset&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        preset = Default(preset, &amp;quot;default&amp;quot;)&lt;br /&gt;
        s = SelectByString(preset,&lt;br /&gt;
        \                  &amp;quot;default&amp;quot;,       &amp;quot;c.TemporalSoften(4, 4, 8, 15, 2)&amp;quot;,&lt;br /&gt;
        \                  &amp;quot;sh0dan-soft&amp;quot;,   &amp;quot;c.TemporalSoften(2, 3, 3,  6, 2)&amp;quot;,&lt;br /&gt;
        \                  &amp;quot;sh0dan-medium&amp;quot;, &amp;quot;c.TemporalSoften(3, 5, 5, 10, 2)&amp;quot;,&lt;br /&gt;
        \                  &amp;quot;sh0dan-heavy&amp;quot;,  &amp;quot;c.TemporalSoften(4, 8, 8, 10, 2)&amp;quot;,&lt;br /&gt;
        \                  else=&amp;quot;&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
        Assert(s != &amp;quot;&amp;quot;, &amp;quot;TemporalSoftenPreset: invalid preset&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
        return Eval(s)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
[NOTE: The above function uses my [http://www.avisynth.org/stickboy/SelectByString.zip SelectByString] AviSynth plugin.]&lt;br /&gt;
Advanced&lt;br /&gt;
&lt;br /&gt;
Presets are nice, but what if we wanted to use presets and normal arguments? Ideally we&amp;#039;d want to use the preset&amp;#039;s default values and then to override some of those values with the normal parameters.&lt;br /&gt;
&lt;br /&gt;
Combining principles from the two examples above, we have:&lt;br /&gt;
&lt;br /&gt;
    # TemporalSoftenPreset2&lt;br /&gt;
    #&lt;br /&gt;
    #   A wrapper function to TemporalSoften to specify presets.&lt;br /&gt;
    #&lt;br /&gt;
    # PARAMETERS:&lt;br /&gt;
    #   radius&lt;br /&gt;
    #   luma_threshold&lt;br /&gt;
    #   chroma_threshold&lt;br /&gt;
    #   scenechange&lt;br /&gt;
    #   mode&lt;br /&gt;
    #   preset           - the preset name:&lt;br /&gt;
    #                        { &amp;quot;default&amp;quot;, &amp;quot;sh0dan-soft&amp;quot;,&lt;br /&gt;
    #                          &amp;quot;sh0dan-medium&amp;quot;, &amp;quot;sh0dan-heavy&amp;quot; }&lt;br /&gt;
    #                      (default: &amp;quot;default&amp;quot;)&lt;br /&gt;
    #&lt;br /&gt;
    # USAGE:&lt;br /&gt;
    #   TemporalSoftenPreset2(4, 4, 8, 15, 12)&lt;br /&gt;
    #   TemporalSoftenPreset2(preset=&amp;quot;default&amp;quot;)&lt;br /&gt;
    #   TemporalSoftenPreset2(preset=&amp;quot;default&amp;quot;, radius=2)&lt;br /&gt;
    #&lt;br /&gt;
    function TemporalSoftenPreset2(clip c, int &amp;quot;radius&amp;quot;,&lt;br /&gt;
    \                              int &amp;quot;luma_threshold&amp;quot;,&lt;br /&gt;
    \                              int &amp;quot;chroma_threshold&amp;quot;,&lt;br /&gt;
    \                              int &amp;quot;scenechange&amp;quot;, int &amp;quot;mode&amp;quot;,&lt;br /&gt;
    \                              string &amp;quot;preset&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        preset = Default(preset, &amp;quot;default&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
        # We can get Eval to assign multiple variables at once&lt;br /&gt;
        # by putting linebreaks in our strings.  Evil!&lt;br /&gt;
        s = SelectByString(preset,&lt;br /&gt;
        \                  &amp;quot;default&amp;quot;,       &amp;quot;r  =  4&lt;br /&gt;
                                             L  =  4&lt;br /&gt;
                                             ch =  8&lt;br /&gt;
                                             sc = 15&lt;br /&gt;
                                             m  =  2&amp;quot;,&lt;br /&gt;
        \                  &amp;quot;sh0dan-soft&amp;quot;,   &amp;quot;r  =  2&lt;br /&gt;
                                             L  =  3&lt;br /&gt;
                                             ch =  3&lt;br /&gt;
                                             sc =  6&lt;br /&gt;
                                             m  =  2&amp;quot;,&lt;br /&gt;
        \                  &amp;quot;sh0dan-medium&amp;quot;, &amp;quot;r  =  3&lt;br /&gt;
                                             L  =  5&lt;br /&gt;
                                             ch =  5&lt;br /&gt;
                                             sc = 10&lt;br /&gt;
                                             m  =  2&amp;quot;,&lt;br /&gt;
        \                  &amp;quot;sh0dan-heavy&amp;quot;,  &amp;quot;r  =  4&lt;br /&gt;
                                             L  =  8&lt;br /&gt;
                                             ch =  8&lt;br /&gt;
                                             sc = 10&lt;br /&gt;
                                             m  =  2&amp;quot;,&lt;br /&gt;
        \                  else=&amp;quot;&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
        Assert(s != &amp;quot;&amp;quot;, &amp;quot;TemporalSoftenPreset2: invalid preset&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
        Eval(s)&lt;br /&gt;
            &lt;br /&gt;
        radius = Default(radius, r)&lt;br /&gt;
        luma_threshold = Default(luma_threshold, L)&lt;br /&gt;
        chroma_threshold = Default(chroma_threshold, ch)&lt;br /&gt;
        scenechange = Default(scenechange, sc)&lt;br /&gt;
        mode = Default(mode, m)&lt;br /&gt;
 &lt;br /&gt;
        return c.TemporalSoften(radius, luma_threshold, chroma_threshold, &lt;br /&gt;
        \                       scenechange, mode)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
-- [stickboy]&lt;br /&gt;
&lt;br /&gt;
[[Category:Shared functions]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>