# FFT3DGPU

## Přehled

autor: Tonny Petersen aka tsp
verze: 0.8.2
stáhnout: http://www.avisynth.org/tsp/, http://avisynth.org/warpenterprises/ kategorie: Různé pluginy
požadavky: YV12 nebo YUY2 Barevné prostředí, Directx 9 graphické karty
license: GPL

## Úvod

FFT3dGPU je GPU verze filtru FFT3DFilter jehož autorem je Fizick. Algoritmus (Rychlá Fourierova Transformace, odšumění) je většinou stejný. V současnosti není implementován následující: podpora pro model šumu.

V této verzi je zpracováván následující snímek zatímco se čeká na GPU až skončí svou práci. To znamená, že filtry před fft3dGPU pracují paralelně s ním.

### Instalace:

Pro použití tohoto filtru potřebujete directx 9.0c nebo lepší a grafickou kartu podporující directx 9 v hardware. To je přinejmenším ATI Radeon 95xx nebo Nvidia Geforce fx 5xxx. Doporučuje se Geforce 6xxx nebo lepší. Pokud jste stáhli instalátor, prostě ho spusťte a máte hotovo, jinak zkopírujte fft3dgpu.hlsl a FFT3dGPU.dll do stejné složky z 7-zip archivu, také nainstalujte poslední verzi directx (duben 2006 nebo pozdější). Můžete ho získat zde nebo rozbalit soubor d3dx9_30.dll (nezahrnutý v archivu, ale zahrnutý v instalátoru) do složky c:\windows\system32 . Instalátor nakopíruje d3dx9_30.dll na správné místo, což znamená že by nemělo být nezbytné instalovat directx pokud už máte Directx 9c nainstalovaný.

### Syntaxe

`FFT3DGPU`(clip, float "sigma", float "beta", int "bw", int "bh", int "bt", float "sharpen", int "plane", int "mode", int "bordersize", int "precision", bool "NVPerf", float "degrid", float "scutoff", float "svr", float "smin", float "smax", float "kratio", int "ow", int "oh", int "wintype" , int "interlaced", float "sigma2", float "sigma3", float "sigma4", bool "oldfft" )

### Parametry funkcí:

clip: klip, který má být filtrován. Klip musí být YV12 nebo YUY2.

sigma a beta mají stejný význam jako ve fft3dfilter. Výchozí=2.

sigma2, sigma3, sigma4 Pokud jsou zadány, ovládají hodnotu sigma pro nejvyšší (sigma) až nejnižší frekvenci (sigma4). Výchozí=sigma

bw,bh: šířka bloku a výška bloku. Měly by být mocninou čísla 2 t.j. platné hodnoty jsou 4,8,16,32,64,128,256,512 (všimněte si, že pro nejlepší výsledek by bw mělo být větší než 4). Výchozí=32

bt: režim bt=-1 jen zostřuje, bt=0 kalman filtrování, bt=1 je 2d filtrování, bt=2 používá aktuální a předchozí snímek, bt=3 používá předchozí aktuální a následující snímek, bt=4 používá dva předchozí snímky, aktuální a následující snímek. Výchozí=3

sharpen: kladné hodnoty zostřují obraz, záporné hodnoty rozmazávají obraz. 0 vypíná zostřování. Výchozí=0.

plane: 0 filtruje jas-luma, 1,2 a 3 jsou stejné a filtrují barevnost-chroma (jak U tak V). 4 filtruje jak jas tak barevnost. Default 0.

mode: 0 překrytí jen 1:1. Toto je rychlejší, ale vytváří artefakty při vysokých hodnotách sigma.
mode=1 překrytí bloků 2:1. Toto je pomalejší, ale vytváří méně artefaktů.
mode=2 znovu 1:1 překrytí, ale s přídavným pruhem. To snižuje hraniční (pruhové) artefakty viditelné při mode=0. Rychlost je mezi režimy 0 a 1.
Kalman(bt=0) pracuje dobře při mode=0. Výchozí 1

bordersize: použito jen v režimu 2. Definuje velikost pruhu. Výchozí je 1.

precision: 0: používá se 16 bitová desetinná přesnost (poloviční přesnost),
1: používá se 32 bitová desetinná (celá přesnost) pro fft a 16 bitová desetinná pro wienner/kalman a zostřování.
2: vždy se používá 32 bitová desetinná.
Použití 16 bitové desetinné zvyšuje výkon, ale snižuje přesnost. U Geforce 7800GT precision=0 je ~1.5 krát rychlejší než u přesnosti 2. Výchozí=0.

NVPerf: Zapíná podporu pro NVPerfHUD (http://developer.nvidia.com/object/nvperfhud_home.html). Výchozí false.

degrid: Zapíná redukci mřížek. Dobře pracuje jen v mode=1. Neredukuje mřížkovitost u Kalman filtru (ale redukuje mřížky u zostřování (pokud je zapnutý) po kalman filtru). Výchozí 1.0 pro mode=1, 0.0 pro mode=0 nebo 2

scutoff, svr, smin, smax:Stejný význam jako u fft3dfilter. Ovládá zostřování. Výchozí scutoff=0.3, svr=1.0, smin=4.0, smax=20.0

kratio: stejné jako u fft3dfilter. Ovládá prahovou hodnotu pro resetování Kalman filtru. Výchozí 2.0

ow,oh: toto pracuje jen v režimu mode=1. Zadává jak velké je překrytí mezi bloky. Velikost překrytí musí být menší nebo rovno polovině velikosi bloku. Ow musí být sudé. Výchozí: ow=bw/2 ,oh=bh/2

wintype: Mění typ okna funkcí analýzy a syntézy. Stejné jako v fft3dfilter.

interlaced: Nastavte na true pro oddělené filtrování každého pole. Výchozí=false.

oldfft: Nastavte na true pro použití starého kódu fft (použitého ve verzi 0.6.2 a nižších), false pro použití nového kódu fft. Pokud je nedefinováno, fft3dgpu použije nejrychlejší kód.

### FAQ - často kladené otázky:

#### Q: Co znamená, když mi vyskočí nepředpokládaná chyba (Unexpected error) oznamující Error Code: D3DERR_OUTOFVIDEOMEMORY.

A: To znamená, že fft3dgpu potřebuje více paměti grafické karty než je dostupné. Takže buď musíte koupit lepší nebo zkusit snížit rozlišení, přesnost, bt,bh,bw,ow,oh nebo použít usefloat16=true nebo mode 0 nebo 2

#### Q: Filtr mi pořád nechce pracovat

A: Zkuste aktualizovat na novější ovladače (ati radeon nebo nvidia geforce). Zkontrolujte jestli je vaše karta podporována (viz níže). Pokud to nevede k řešení problému, napište mi zprávu o chybách (bug report) (viz podpora) kam zapište i použitý skript, použitý program a typ GPU, verzi ovladače, verzi windows a verzi directx kterou používáte.

#### Q: Jaké nastavení dá stejný výsledek jako fft3dfilter?

A:fft3dGPU(mode=1,precision=2) je podobné jako fft3dfilter() ale všimněte si prosím odlišných výchozích hodnot pro bw,ow,bh,ow

#### Q: Jsou nějaké rozdíly mezi fft3dfilter a fft3dgpu?

A: Některé funkce z fft3dfilter ještě stále chybí v fft3dGPU.

#### Q: Proč je fft3dGPU tak pomalý ve srovnání s fft3dfilter?

A: buď máte pomalou grafickou kartu jako Geforce FX 5200 nebo ji nevyužíváte v době, kdy cpu provádí těžké enkódování (jako XviD/DivX)

#### Q: Jak mám použít NVPerfHUD?

A: nastavte NVperf=true a použijte tento příkaz příkazového řádku nebo vytvořte zástupce pro jeho spuštění: "CESTA K NVPerfHUD\NVPerfHUD.exe" "CESTA K VIRTUALDUB\virtualdub.exe" "CESTA K AVS\test.avs" a zapněte "force NON PURE device"

#### Q: Dostávám tuto chybovou zprávu: "Only pixelshader 2.0 or greater supported"

A: Je to proto, že potřebujete grafickou kartu, která má hardwarovou podporu pro Directx 9.

#### Následující karty nebudou pracovat:

    Nvidia:
    TNT
    TNT2
    Geforce 256
    GeForce2 Ultra, Ti, Pro,MX,Go and GTS
    Geforce3 Ti 200, Ti 500
    GeForce4 Ti, MX, Go

    Ati:
    Radeon 7xxx
    Radeon 8xxx
    Radeon 90xx
    Radeon 92xx

    Matrox:
    G2xx
    G4xx
    G5xx
    možná Parhelia

#### Následující by měli pracovat:

     Nvidia:

    Geforce FX 5xxx
    Geforce 6xxx
    Geforce 7xxx

    Ati:
    Radeon 9500
    Radeon 9550
    Radeon 9600
    Radeon 9700
    Radeon 9800
    Radeon Xxxx
    Radeon X1xxx

    kde x znamená jakákoli cifra.

### Podpora:

Toto vlákno na fóru doom9 nebo moje emailová adresa (tsp (zavináč) person.dk).

### Na dopracování:

(možná) podpora modelu šumu. Oprava všech hloupých chyb. Přidání verze directx 9.0b .

### Seznam změn:

- 0.1 first release. Buggy and used Brook
- 0.2 sigma should now work like fft3dfilter
- 0.3 Rewrote the code to use Directx 9.0 directly and support for 16 bit float increasing performance and stability.
- 0.31 Fixed bug causing aliased edges.
- 0.4 Added sharpen, mode 1,2, reduceCPU and multithreading
- 0.41 Fixed bug when calculating PSD.
- 0.42 Fixed memory leak when reloading
- 0.43 Fixed bug that caused coruptions on the Geforce FX cards and some more memory leaks. Added more comments to the sourcecode and small performance improvement in the shaders. Also added support for directx 9.0b
- 0.44 fft3dgpu can now reset a lost device and continue work. The direcx 9.0b version should work now.
- 0.45 fixed bug when filtering the chromaplane and mode=0 or 2 crashed the filter.
- 0.46 fixed lockups on hyperthread enabled machines(hopefull). Also fixed infinite loop when closing WMP 6.4.
- 0.46.1 fixed issue with nvperf=true causing fft3dgpu to lock up. Added a FAQ section to this file.
- 0.47 fixed bug with corrupted frames after reseting a lost device. Renamed the readme.txt to fft3dgpu.txt. Uses a newer version of DirectX 9.0c so please _read the install instructions_!!!
- 0.5 Added Kalman, sharpening, bt=4, degrid from fft3dfilter. Renamed ps.hlsl to fft3dgpu.hlsl. Rewrote some of the code. Added new bugs.
- 0.5a fixed bug with bt=2. Only file changed is fft3dgpu.hlsl
- 0.51FixedbugwithparametersafterNVPerfwasshifted.iedegrid=scutoff,scutoff=svr. Improved download speed from GPU. Geforce fx 5xxx now works with Kalman filter.
- 0.6 Added wintypes, plane=4 and variable overlap size (ow,oh). Change useFloat16 to precision. Changed default value for mode to 1
- 0.6.1 variable overlap now works on the geforce fx 5xxx. Default value for mode is 1 now.
- 0.6.2 bugfix: Degrid works better and vertical banding is gone when using mode 1. Right edge artifacts gone when using non mod 8 width and plane>0.
- 0.6.3 New fft code. Should improve performance when using larger blocksize and precision= 2(by up to 70%). Fixed bug with HC 0.17 crashing. New html doc(thanks Fizicks for creating this).
- 0.6.4 new fft code should now work with ati cards.
- 0.7 Added sigma2,sigma3 and sigma4 and support for interlaced filtering. Uses the fastest fft code now.
- 0.8 Added support for YUY2 colorspace. If not enough GPU memory is available the least used texture will be swapped to system memory.
- 0.8.1 Fixed crash when recovering lost device with plane=4 (thanks Fizick). Changed default for bt to 3 as ff3dfilter
- 0.8.2 Fixed crash when recovering lost device with interlaced=true (thanks Fizick) and recovering lost device with bt=0 and sigma2,3,4 =sigma.

Zdrojový kód vydán pod GPL - viz copying.txt

`$English Date: 2006/08/25 02:18:25 $`

`Český překlad:20.4.2009`