Description
===========

MVTools is a set of filters for motion estimation and compensation.

This is a port of version 2.5.11.3 of the Avisynth plugin (the latest from http://avisynth.org.ru/mvtools/mvtools2.html).

Some changes from version 2.5.11.9 of the SVP fork have been incorporated as well (http://www.svp-team.com/wiki/Download).


Differences
===========

* All:
    * Free multithreading, courtesy of VapourSynth.

    * Parameters are all lowercase now.

    * YUY2 is not supported.

    * Grayscale, 4:2:0, 4:2:2, 4:4:0, and 4:4:4 are supported.

    * Up to 16 bits per sample are supported.

    * The audio is definitely not killed.

    * No "planar" parameter.

* Analyse:
    * No "temporal" parameter, as it's sort of incompatible with multithreading.

    * No "outfile" parameter.

    * No "sadx264" parameter. If isse is True, the best functions imported from x264 will be selected automatically. Otherwise, only C functions will be used.

    * New parameters "fields" and "tff".

    * The optimised SAD, SATD, and SSD functions from x264 have been updated to the latest versions (as of September 2014).

* Recalculate:
    * Same as Analyse.

* Compensate:
    * No "recursion" parameter. It was dodgy.

    * New parameter "tff".

* Mask:
    * No "isse" parameter, because there is no asm in Mask anymore.

* SCDetection:
    * No "ysc" parameter. The input frames are returned unchanged, with the ``_SceneChangePrev`` or ``_SceneChangeNext`` property attached.

    * No "isse" parameter. It wasn't used.


Usage
=====
::

    mv.Super(clip clip[, int hpad=8, int vpad=8, int pel=2, int levels=0, bint chroma=True, int sharp=2, int rfilter=2, clip pelclip=None, bint isse=True])

    mv.Analyse(clip super[, int blksize=8, int blksizev=blksize, int levels=0, int search=4, int searchparam=2, int pelsearch=0, bint isb=False, int lambda, bint chroma=True, int delta=1, bint truemotion=True, int lsad, int plevel, int global, int pnew, int pzero=pnew, int pglobal=0, int overlap=0, int overlapv=overlap, bint divide=False, int badsad=10000, int badrange=24, bint isse=True, bint meander=True, bint trymany=False, bint fields=False, bint tff, int search_coarse=3, int dct=0])

    mv.Recalculate(clip super, clip vectors[, int blksize=8, int blksizev=blksize, int search=4, int searchparam=2, int lambda, bint chroma=True, bint truemotion=True, int pnew, int overlap=0, int overlapv=overlap, bint divide=False, bint isse=True, bint meander=True, bint fields=False, bint tff, int dct=0])

    mv.Compensate(clip clip, clip super, clip vectors[, int scbehavior=1, int thsad=10000, bint fields=False, int thscd1=400, int thscd2=130, bint isse=True, bint tff])

    mv.Degrain1(clip clip, clip super, clip mvbw, clip mvfw[, int thsad=400, int thsadc=thsad, int plane=4, int limit=255, int limitc=limit, int thscd1=400, int thscd2=130, bint isse=True])

    mv.Degrain2(clip clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2[, int thsad=400, int thsadc=thsad, int plane=4, int limit=255, int limitc=limit, int thscd1=400, int thscd2=130, bint isse=True])

    mv.Degrain3(clip clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2, clip mvbw3, clip mvfw3[, int thsad=400, int thsadc=thsad, int plane=4, int limit=255, int limitc=limit, int thscd1=400, int thscd2=130, bint isse=True])

    mv.Mask(clip clip, clip vectors[, float ml=100.0, float gamma=1.0, int kind=0, int ysc=0, int thscd1=400, int thscd2=130])

    mv.Finest(clip super[, bint isse=True])

    mv.FlowBlur(clip clip, clip super, clip mvbw, clip mvfw[, float blur=50.0, int prec=1, int thscd1=400, int thscd2=130, bint isse=True])

    mv.FlowInter(clip clip, clip super, clip mvbw, clip mvfw[, float time=50.0, float ml=100.0, bint blend=True, int thscd1=400, int thscd2=130, bint isse=True])

    mv.FlowFPS(clip clip, clip super, clip mvbw, clip mvfw[, int num=25, int den=1, int mask=2, float ml=100.0, bint blend=True, int thscd1=400, int thscd2=130, bint isse=True])

    mv.BlockFPS(clip clip, clip super, clip mvbw, clip mvfw[, int num=25, int den=1, int mode=0, int thres, bint blend=True, int thscd1=400, int thscd2=130, bint isse=True])

    mv.SCDetection(clip clip, clip vectors[, int thscd1=400, int thscd2=130])


If *fields* is True, it is assumed that the clip named *clip* first went through std.SeparateFields.

For information about the other parameters, consult the Avisynth plugin's documentation at http://avisynth.org.ru/mvtools/mvtools2.html. This will not be necessary in the future.


Things that may happen soon™
============================

  * Possibly lower memory usage


Compilation
===========

FFTW3 configured for 32 bit floats is required ("fftw3f").

::

   ./autogen.sh
   ./configure
   make


License
=======

GPL 2, like the Avisynth plugin.
