# FFT3DGPU

## Общая информация

Автор: Tonny Petersen aka tsp
Версия: 0.6.4
Загрузка: http://www.avisynth.org/tsp/
Категория: Разнообразные другие плагины (Misc Plugins)
Требования: Цветовое пространство YV12, Графическая плата Directx 9
Лицензия: GPL

## Инструкция

`FFT3DGPU` - это GPU версия фильтра Fizick'а `FFT3DFilter`, т.е. алгоритм (Быстрое Преобразование Фурье, шумодав) по большей части тот же. К настоящему времени не реализована поддержка для чересстрочного видео, цветового пространства YUY2 и метод образца шума

В текущей версии, для оптимизации, `FFT3DGPU` запрашивает у AVISynth'а следующий кадр, пока работает GPU. Это означает, что фильтры идущие в тексте до `FFT3DGPU` работают параллельно с ним.

### Установка:

Для использования данного фильтра необходим DirectX 9.0c или новее, а также нужна графическая плата, аппаратно поддерживающая DirectX 9. Это как минимум ATI Radeon 95xx или nVidia GeForce FX 5xxx. Рекомендуется GeForce 6xxx или лучше. Если Вы скачали Установщик (прим. пер.: исполняемый EXE-файл), просто запустите его и он всё сделает за Вас, иначе скопируйте fft3dgpu.hlsl и fft3dgpu.dll в одну и ту же директорию. Также скопируйте d3dx9_27.dll в папку c:\windows\system32.
В старых версиях есть fft3dgpu9b.dll (в данное время не поддерживается) для Directx 9.0b (НЕ копируйте обе dll в папку автозагрузки плагинов.)
Возможно DirectX 9.0c быстрее на платах nVidia GeForce 6xxx поскольку там добавлена поддержка PixelShader 3.0 Если У Вас нет последней версии DirectX (октябрь 2005) Вы можете скачать её тут или распаковать файл d3dx9_27.dll в папку c:\Windows\System32. Установщик сам копирует d3dx9_27.dll нужное место, это означает, что его не надо копировать, если у Вас уже установлен Directx 9c.

### Синтаксис:

`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" )

### Параметры функции:

clip: фильтруемый клип. Должен быть YV12.

sigma и beta имеет те же значение как в `FFT3DFilter`. По умолчанию = 1.

bw,bh: ширина и высота блока. Должны быть степенью 2-ки, т.е. правильные величины 4,8,16,32,64,128,256,512. (Заметьте, что bw,bh должно быть больше, чем 4 для наилучшего результата). По умолчанию = 32

bt: способ фильтрации.
bt=-1 только повышение резкости,
bt=0 режим фильтра Кальмана,
bt=1 пространственный 2D фильтр Винера,
bt=2 используются предыдущий и текущий кадры.
bt=3 используются предыдущий, текущий и следующий кадры,
bt=4 используются два предыдущих, текущий и следующий кадры.
По умолчанию = 1

sharpen: положительные величины - степень повышения резкости, отрицательные - уменьшают резкость. 0 - отключает изменение резкости. По умолчанию = 0.

plane: 0 - обрабатывать только канал яркости,
1,2 и 3 - синонимы, обрабатываются каналы цветности (оба - U и V).
4 - яркость и обе цветоразности.
По умолчанию = 0.

mode: 0 - перекрытие 1:1. Это самый быстрый способ но с высокими величинами сигмы возможны артефакты.
mode=1 режим полного перекрытия 2:1. Это самый медленный но с меньшими артефактами.
mode=2 опять перекрытие 1:1, но с дополнительной границей. Это уменьшает граничные артефакты видимые при mode=0. Скорость между mode = 0 и 1.
Фильтр Кальмана (bt=0) работает с mode=0. По умолчанию 1

bordersize: используется только с mode=2. Определяет размер границы. По умолчанию 1.

precision: 0: используется 16 битная вещественная арифметика (половинная точность),
1: используются 32 битная вещественная арифметика (одинарная точность) для преобразования Фурье (FFT) и 16 битная для фильтр Винера/Кальмана и повышения резкости.
2: всегда использует 32 битную арифметику.
Использование 16 битной арифметику увеличивает скорость исполнения, но уменьшает точность. На GeForce 6800 precision=0 примерно в 3 раза быстрее precision=2, и precision=1 быстрее 1.33 раза, чем precision=2. По умолчанию 0.

NVPerf: Включает поддержку NVPerfHUD. По умолчанию = false.

degrid: снижение сеточности. Работает только когда mode=1. Не работает с фильтром Кальмана (но работает для повышения резкости (если включено) после фильтра Кальмана). По умолчанию 1.0 для mode=1 и 0.0 для mode = 0 или 2

scutoff, svr, smin, smax:то же самое, что для `FFT3DFilter`. Управляет режимом повышения резкости. По умолчанию scutoff=0.3, svr=1.0, smin=4.0, smax=20.0

kratio: Как и в `FFT3DFilter`. Порог сброса фильтра Кальмана. По умолчанию 2.0

ow,oh: работает только при mode=1. Определяет величину перекрытие между блоками. Размер перекрытия должен быть меньше или равный половине размера блока. По умолчанию ow=bw/2 ,oh=bh/2

wintype: Изменяет тип окна анализа и синтеза. Аналогично `FFT3DFilter`

### ЧаВО:

#### В: Что означает, когда я получаю в отдельном окне сообщение о неожиданной ошибке с кодом: D3DERR_OUTOFVIDEOMEMORY.

О: Это означает, что для `FFT3DGPU` нужно больше памяти чем доступно на графической плате. Короче, или Вы должны модернизировать видео плату, или пробовать уменьшить разрешение, bt,bh,bw,ow,oh, или использовать precision=0, или mode=0 или 2

#### В: Какие настройки дают тот же результат как `FFT3DFilter`?

О: `FFT3DGPU`(mode=1,precision=2) подобно `FFT3DFilter()`, но пожалуйста заметьте, что bw,ow,bh,ow имеют другие значение по умолчанию.

#### В: Какие ещё существуют различия между `FFT3DFilter` и `FFT3DGPU`?

О: Некоторые параметры из `FFT3DFilter` до сих пор отсутствуют.

#### В: Почему `FFT3DGPU` медленнее по сравнению с `FFT3DFilter`?

О: Или у вас медленная графическая карта подобно GeForce FX 5200, или Вы не сильно используете CPU, например тяжелый кодек (подобно XviD/DivX)

#### В: Как мне использовать NVPerfHUD?

О: Установите NVperf=true и используя командную строку или создав ярлык для запуска:
"Путь к NVPerfHUD\NVPerfHUD.exe" "Путь к VIRTUALDUBMOD\virtualdubmod.exe" "Путь к AVS\test.avs"
и включите (разрешите) "force NON PURE device"

#### В: Я получаю сообщение об ошибке: "Only pixelshader 2.0 or greater supported"

О: Это потому, что Вам нужна графическая плата с аппаратной поддержкой DirectX 9.

#### Следующие видеокарты не поддерживаются:

    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
    может быть Parhelia

#### А эти должны работать:

    Nvidia:
    GeForce FX 5xxx
    GeForce 6xxx
    GeForce 7xxx

    ATI:
    Radeon 9500
    Radeon 9550
    Radeon 9600
    Radeon 9700
    Radeon 9800
    Radeon Xxxx

    где x - любая цифра.

### Поддержка:

В этой ветке на форуме doom9 или мой email адрес (tsp (coбaкa) person.dk).

### Планы на будущее:

Чересстрочное видео, YUY2, поддержка нескольких сигм и (может быть) поддержка метода образца шума. Устранение всех глупых ошибок. Снова добавить версию для DirectX 9.0b.

### История изменений:

- 0.1 Первый выпуск. Глюкавый и использовал (библиотеку) Brook
- 0.2 sigma должна сейчас работать аналогично `FFT3DFilter`
- 0.3 Переписан код, непосредственно использующий DirectX 9.0 и поддержка 16 битной вещественной арифметики, увеличилась и стабильность.
- 0.31 Исправление ошибки, вызывающее сеточность краёв.
- 0.4 Добавлены sharpen, mode = 1 и 2, reduceCPU и параллельная обработка.
- 0.41 Исправлена ошибка при расчете PSD.
- 0.42 Исправлена утечка памяти при перезагрузке.
- 0.43 Исправлена ошибка, которая вызвала искажения на картах GeForce FX и возможно утечки памяти. Добавлено больше комментариев в текст кода и небольшое улучшение фоновой работы. Также добавлена поддержка DirectX 9.0b
- 0.44 `FFT3DGPU` теперь может перезагружать видеопроцессор при потере его работоспособности и продолжать работу. Версия для Direcx 9.0b должна теперь работать.
- 0.45 Исправление ошибки при фильтрации каналов цветности и mode=0 или 2 выводившие фильтр из строя.
- 0.46 Исправление блокировки в hyperthread машинах (надеюсь полностью). Также исправлен бесконечный цикл при закрытии WMP 6.4.
- 0.46.1 Исправление которе при nvperf=true вызывало блокировку `FFT3DGPU`. Добавлен раздел ЧаВО в этот файл.
- 0.47 Исправлена ошибка с плохими кадрами после перезагрузки повисшего видеопроцессора. Переименовано readme.txt в fft3dgpu.txt. Используйте обновленную версию DirectX 9.0c, также пожалуйста читайте инструкцию по установке!!!
- 0.5 Добавлен фильтра Кальмана, повышение резкости, bt=4 и degrid из `FFT3DFilter`. Переименован ps.hlsl в fft3dgpu.hlsl. Переписана часть кода. Добавлены новые ошибки.
- 0.5a Исправлена ошибка с bt=2. Изменения коснулись только файла fft3dgpu.hlsl
- 0.51 Исправлена ошибка с параметрами после того, как NVPerf был перемещен. т.е. degrid=scutoff, scutoff=svr. Улучшенная скорость загрузки из GPU. На GeForce FX 5xxx теперь работает фильтр Кальмана.
- 0.6 Добавлены wintypes, plane=4 и переменный размер перекрытия (ow,ох). Изменен параметр useFloat16 на precision. Изменено значение по умолчанию для mode на 1
- 0.6.1 теперь переменное перекрытие работает и на GeForce FX 5xxx. Значение по умолчанию для mode=1 наконец.
- 0.6.2 Исправления: улучшена работа Degrid и убрана вертикальная полосатость при mode=1. Исчезли артефакты с правого края при ширине не кратной 8 и plane>0.
- 0.6.3 Переписан FFT. Должно быть быстрее на больших блоках и высокой точности precision=2 (вплоть до 70%). Исправлен глюк с HC 0.17. Новая html документация (спасибо Fizick'у за создание).
- 0.6.4 Новый FFT код теперь должен работать и на ATI картах.

Исходный текст, документация и перевод выпущены под лицензией GPL, смотри copying.txt

`$English Date: 2006/06/11 17:25:07 $`
`Русский перевод 26.12.2005-08.06.2006 AI`