AvisynthNeo (Avisynth+ r2666ベース)
https://github.com/nekopanda/AviSynthPlus

Avisynth+をベースにCUDA対応などの拡張をしたAvisynthです。

- インストール

AviSynth.dll以外はオリジナルAviSynth+と同一バイナリなので、
AviSynth+がインストール済みならAviSynth.dllだけ置き換えればOKです。
そうでない場合はまずAviSynth+をインストールしてください。

System32とかに入れるのではなく、
使うexe（AvsPmodとかffmpegとかavs2pipemodとかmpc-hcとか？）のあるフォルダに
置いて読み込ませてもOK。これなら消せばすぐに元の環境に戻せます。

- ドキュメント
https://github.com/nekopanda/AviSynthPlus/wiki
（まだあまり整理できてないです）

- CUDAフィルタの使い方

CUDAフィルタはOnCPUとOnCUDAで囲います。

---------- サンプルスクリプト ------------
srcfile="..."
LWLibavVideoSource(srcfile)
OnCPU(2)
KNNEDI3(field=-2)
OnCUDA(2)
------------------------------------------

OnCPUとOnCUDAでGPUとCPU間のデータ転送が行われます。
OnCPUは「OnCPUの前までをCPUで動かす」という意味です。
OnCPUより「後」じゃなくて「前」です。OnCUDAも同様です。

最後のOnCUDAを忘れると酷いことになるので気をつけてください。


- CUDA版で追加された関数

OnCPU(clip c, int "num_prefetch")
	c
		このクリップはCPUで処理されます。つまり、これより前の処理がCPUで処理されます。

	num_prefetch
		ここでプリフェッチするフレーム数を指定します。
		ほとんどの場合、2を指定すれば性能は十分でます。
		CUDAなどのデバイスとCPUでの処理を並列化するためのプリフェッチなので、
		Prefetchと違ってスレッドは1つだけです。
		0を指定するとスレッドを使わず同期呼び出しになります。

OnCUDA(clip c, int "num_prefetch", int "device_index")
	c
		このクリップはCUDAで処理されます。つまり、これより前の処理がCUDAで処理されます。
		CUDA処理に対応していないフィルタはエラーになります。
		現状、内部フィルタはほとんど対応していないので、
		使えるのは専用に作られた外部フィルタだけです。

	num_prefetch
		OnCPUのプリフェッチと同じです。

	device_index
		実行するGPUを指定します。GPUが1つしかない場合は0しか使えません。
		GPUが2つあれば0か1が指定できます。数の制限とかはありません。
		（でも、テストは一切してないから多分使えないだろうなぁｗ）

SetMemoryMax(int max, int "type", int "index")
	元からある関数ですが、GPUなどのデバイス用に引数が追加されています。
	GPUなどのデバイスは個別にメモリ使用量が管理されています。

	max
		デバイス（CPU含む）のメモリ上限(MB)

	type
		デバイスのタイプ。DEV_TYPE_CPU or DEV_TYPE_CUDA
		省略した場合は、DEV_TYPE_CPU つまりCPUデバイスになります（つまり、今までと同じ）。

	index
		デバイスの番号。OnCUDAのdevice_indexと同じ。DEV_TYPE_CPUの場合は0のみ

- MT改良

Prefetch(clip c, int threads, int "frames")
	オリジナルのPlusでは、Prefetchが１つしか使えませんでしたが、CUDA版はいくつでも使えます。
	また、プリフェッチするフレーム数を指定する引数が追加されています。
	Prefetch(1,4) # 1スレッド立てて4フレーム先読みさせる
	のようにすれば、パイプライン的な並列化ができたりと、柔軟な並列化構成が可能です。

	threads
			スレッド数。0だと何もしないで素通りします。

	frames
			プリフェッチするフレーム数。
			これも、0だと何もしないで素通りします。


- DumpFilterGraph
専用Readmeを見てください。


- CUDAフィルタの開発方法

サンプルを見てください。
https://github.com/nekopanda/AviSynthPlusCUDASample


- 更新履歴

※ 2019-06-26 r2827
  - 一部のフィルタでデッドロックすることがあったのを修正
※ 2018-11-24 r2822
  - 内部処理を改善
※ 2018-09-24 r2818
  - AviSynth+ r2739をマージ
※ 2018-07-08 r2741
  - SVPで動かなったので修正
※ 2018-06-24 r2739
  - Prefetch/OnCPU/OnCUDAのキャッシュの無制限な増大を修正
  - OnCPU/OnCUDAで例外が正常に処理されないのを修正
  - メモリ再確保抑制オプションを追加
※ 2018-06-03 r2735
  - WriteFileStart/Endを以前の仕様に戻した
※ 2018-05-31 r2734
  - APIを刷新
    - IScriptEnvironmentとIScriptEnvironment2を統合して新しいAPIを追加したINeoEnvを追加しました。
    - （重要）Avisynth+CUDAとは互換性がありません。
      - Avisynth+CUDA用に書かれたフィルタは更新してください。
    - Avisynth+とは互換性が維持されています（バグってなければ・・・）
  - スクリプトに関数オブジェクトを導入 など

以下、Avisynth+CUDA
※ 2018-03-26 r2533
  - scriptclip系を使うとデッドロックしていたのを修正
※ 2018-03-25 r2531
  - conditionalfilterを使うと解放時に落ちてたのを修正
※ 2017-11-12 r2528
  - バグ修正（CUDAがないと起動できないとか）
  - AVSMapの仕様変更
※ 2017-10-01 r2519
  - 初期公開バージョン
