# DGDecode

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

авторы: MarcFD, Nic, trbarry, Sh0dan, Graft и другие
версия: 1.4.7
категория: MPEG декодеры (источники)
загрузка: http://neuron2.net/dgmpgdec/dgmpgdec.html
требования:
лицензия: GPL

## Содержание

- Описание
- Синтаксис фильтра
  - MPEG2Source()
  - LumaYV12()
  - BlindPP()
  - Deblock()
- Примеры использования
  - Примеры LoadPlugin()
  - Примеры MPEG2Source()
  - Примеры LumaYV12()
  - Примеры BlindPP()
  - Примеры Deblock()
- Приложение A: BlindPP() описание
- Приложение B: iDCT описание алгоритма
- Приложение C: SIMD инструкции
- История версий
- Участники

## Описание

DGDecode, часть пакета DGMPGDec, являющаяся MPEG-1/2 декодером выполненного в виде плагина для AviSynth v2.5 или выше. Он позволяет декодировать любой MPEG-1 или MPEG-2 поток, прочитанный программой DGIndex. Возможности: YV12, I420, или YUY2 выходное цветовое пространство (и RGB24 через DGVfapi), оптимизированные iDCTs, пост-обработка (деблокинг и дерингинг), яркостный фильтр, и многое другое!
(Прим. ред.: здесь деблокинг - подавление блочности, дерингинг - подавление волновой окантовки, звона в блоках изображения при сжатии).

DGDecode основан на MPEG2Dec3 v1.10, который в свою очередь основан на MPEG2Dec2 из проекта "save-oe" на SourceForge.

Важное замечание: Этот фильтр был переименован в DGDecode во избежание проблем с названиями и чтобы явно связать с версией DVD2AVI neuron2'а, названной DGIndex. Neuron2 очень сильно хочет подтвердить происхождение DGDECODE, как описал MarcFD в тексте ниже! Да, neuron2 продолжил развитие и исправлял DGDECODE, но он стоял на плечах гигантов, указанных в секции "Авторы".

Вы можете взять последние откомпилированные программы и исходные коды DGMPGDec на http://neuron2.net/dgmpgdec/dgmpgdec.html

Это программное обеспечение распространяется свободно под лицензией GNU GPL v2.

## Синтаксис фильтра

### MPEG2Source()

`MPEG2Source` (string "d2v", int "idct", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", str "cpu2", bool "upConv", int "iCC", bool "i420", int "info", bool "showQ", bool "fastMC")

Хотя DGDecode сейчас может декодировать MPEG-1 и MPEG-2, эта функция до сих пор называется MPEG2Source() для совместимости с имеющимися скриптами. Вы можете использовать её для MPEG-1 и MPEG-2 потоков.

d2v: "[ПУТЬ\]project.d2v"

Файл проекта DGIndex.
Необходимые параметры!
Замечание 1: ПУТЬ можно не писать, если файл "project.d2v" в той же папке, что и Ваш AviSynth (*.avs) скрипт.

idct: 0 to 7 (по умолчанию: 0)

Алгоритм iDCT.
Для большей информации об iDCT читайте Приложение B.
Смотрите Приложение C для списка поддерживаемых процессоров.
- 0: Использует значение, указанное в DGIndex (6 и 7 недоступны в DGIndex)
- 1: 32-bit MMX
- 2: 32-bit SSEMMX
- 3: 64-bit SSE2MMX
- 4: 32-bit Числа с плавающей запятой
- 5: 64-bit рекомендуемый IEEE-1180
- 6: 32-bit SSEMMX (Skal)
- 7: 32-bit Simple MMX (XviD)

cpu: 0 to 6 (по умолчанию: 0)

Предустановленные значения для пост-обработки.
(Y=яркость , C= цветность , H=горизонтально, V=вертикально)
- 0: Пост-обработка отключена
- 1: DEBLOCK_Y_H
- 2: DEBLOCK_Y_H, DEBLOCK_Y_V
- 3: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H
- 4: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V
- 5: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y
- 6: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y, DERING_C

Здесь обозначены части комбинации:
DEBLOCK_Y_H: Деблокинг яркости по-горизонтали,
DEBLOCK_Y_V: Деблокинг яркости по-вертикали
DEBLOCK_C_H: Деблокинг цветности по-горизонтали
DEBLOCK_C_V: Деблокинг цветности по-вертикали
DERING_Y: Дерингинг яркости
DERING_C: Дерингинг цветности

iPP: true/false (по умолчанию: auto)

Пост-обработка, основанная на полях.
DGDecode автоматически использует флаг прогрессивного кадра (PROGRESSIVE_FRAME) для переключения между основанной на поле/кадре пост-обработке на покадровую (per-frame-basis).
Вы можете установить параметр iPP, только если хотите чтобы DGDecode использовал конкретный режим пост-обработки.
- true: Использовать пост-обработку по полям (чересстрочного)
- false: Использовать пост-обработку по кадрам (прогрессивного)

moderate_h, moderate_v: 0 to 255 (по умолчанию: moderate_h=20, moderate_v=40)

Чувствительность определения блочности.
(moderate_h=horizontal, moderate_v=vertical)
Чем меньше значения, тем сильней, используйте осторожно.

cpu2: (default: "")

Выборочная пост-обработка.
Проставьте "x" или "o" во всех шести пунктах перечисленных ниже. (нечуствительно к регистру)
Каждый "x" включает соответствующую опцию пост-обработки, "o" - выключает.
первый символ: Деблокинг яркости по-горизонтали
второй символ: Деблокинг яркости по-вертикали
третий символ: Деблокинг цветности по-горизонтали
четвёртый символ: Деблокинг цветности по-вертикали
пятый символ: Дерингинг яркости
шестой символ: Дерингинг цвета

Например, чтобы включить только обработку цветности, используйте:

    MPEG2Source("project.d2v", cpu2="ooxxox")

upConv: true/false (по умолчанию: false)

Делает YUY2 (4:2:2) из YV12 (4:2:0), основываясь на флаге прогрессивного кадра.
Игнорируется, если источник не YV12 (4:2:0)
Используйте фильтр для AviSynth, если хотите постоянный режим интерполяции отсчетов (upsampling) (цветности - прим ред.) YUY2->YV12.
- true: Выполняет интерполяцию если есть флаг PROGRESSIVE_FRAME
- false: Не выполняет интерполяцию

i420: true/false (по умолчанию: false)

Выводить в цветовом пространстве I420.
Требуется для совместимости с некоторыми приложениями.
Игнорируется, если источник не YV12 (4:2:0), или если upConv=true.
- true: Выводит в I420
- false: Выводит в YV12

info: 0 to 3 (по умолчанию: 0)

Отладочная информация.
- 0: Не генерировать отладочную
- 1: Отладочная информация выводится на видео через оверлей
- 2: Отладочная информация выводится через OutputDebugString()
- 3: Отладочная информация выводится на видео в виде подсказок - hints (как указано в utilities.cpp/utilities.h)

showQ: true/false (по умолчанию: false)

Показывать квантизеры (quantizer - параметр потерь деталей) макроблоков.
- true: Показывать квантизеры
- false: Не показывать.

fastMC: true/false (по умолчанию: false)

Компенсация быстрого движения Vlad'а.
Маленькая прибавка скорости, но значительное понижение точности декодирования.
Предназначена для тестирования, и может быть удалена в будущих версиях.
Требует SSE или 3DNow!, смотрите поддерживаемые процессоры в Приложении C.

### LumaYV12()

`LumaYV12` (clip, int "lumoff", float "lumgain")

Эта функция не связана с яркостным фильтром из DGIndex'а.
Это преобразование: Y = (y * lumgain) + lumoff

LumaYV12() выдаёт диапазон 0->255 YUV, а не CCIR-601 16->235. Используйте встроенный в Avisynth фильтр ColorYUV(), если хотите изменить диапазон до 16->235. Функциональность LumaYV12() может быть получена использованием ColorYUV(), который более функционален, но LumaYV12() оптимизирован по скорости для корректировки яркостной составляющей.

lumoff: -255 to 255 (по умолчанию: 0)

Яркостный отступ.
Изменить яркость всех пикселей на заданную величину.

lumgain: 0.0 to 2.0 (по умолчанию: 1.0)

Увеличение яркости.
Изменить яркость всех пикселей на пропорциональную величину.

### BlindPP()

`BlindPP` (clip, int "quant", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", string "cpu2")

Деблокинг и/или дерингинг любого видео источника.
Требует YUY2 или YV12 входное цветовое пространство.
Читайте Приложение A для пояснений использования.

quant: 0 to 31 (по умолчанию: 2)

Имитирует квантизер (quatizer).
Устанавливает силу устранения блочности.

cpu: 0 to 6 (по умолчанию: 6)

Такая же функция как и в MPEG2Source(), но с другими значениями по умолчанию.

iPP: true/false (по умолчанию: false)

Такая же функция как и в MPEG2Source(), но с другими значениями по умолчанию.

Автоматический режим ОТСУТСТВУЕТ.

moderate_h, moderate_v, cpu2: (по умолчанию: moderate_h=20, moderate_v=40, cpu2="")

Такая же функция как и в MPEG2Source(), но с другими значениями по умолчанию.

### DeBlock()

`Deblock` (clip, int "quant", int "aOffset", int "bOffset", bool "mmx", bool "isse")

Фильтр устранения блочности H.264 от Manao. (v0.9.5)
Требует источник в YV12.
Оба (quant + aOffset) И (quant + bOffset) должны быть >= 16 иначе фильтр не имеет смысла.

quant: 0 to 51 (по умолчанию: 25)

Имитирует квантизер.
Устанавливает силу устранения блочности.

aOffset: (по умолчанию: 0)

Изменяет порог определения блочности.
Высокие значения означают, что больше краёв будет смазано.

bOffset: (по умолчанию: 0)

Модификатор определения блочности и силы её устранения.
И снова чем больше значение, тем сильней.

mmx: true/false (по умолчанию: true)

Автоматически выключается, если процессор не поддерживает набор комманд MMX
- true: Включает оптимизацию под MMX
- false: Отключает MMX

isse: true/false (по умолчанию: true)

Автоматически выключается, если процессор не поддерживает набор комманд SSE
Читайте Приложение C для списка поддерживаемых процессоров.
- true: Включает SSE оптимизации
- false: Не использует SSE оптимизации

## Примеры использования

### Пример LoadPlugin() из avisynth

AviSynth команда LoadPlugin() должна вызываться перед использованием любой функции DGDecode.
Чтобы проделать это, добавьте эту строчку в начало Вашего AviSynth (*.avs) скрипта:

    LoadPlugin("[ПУТЬ\]DGDecode.dll")

Замечание: ПУТЬ может быть опущен, если DGDecode.dll находится в директории по умолчанию для плагинов AviSynth, иначе ПУТЬ должен быть указан.

### Примеры MPEG2Source()

MPEG2Source() должен использоваться для MPEG-1 и MPEG-2 источников видео.

Чтобы только декодировать в YV12:

    MPEG2Source("[ПУТЬ\]project.d2v")

Замечание: ПУТЬ может быть опущен, если DGDecode.dll находится в директории по умолчанию для плагинов AviSynth, иначе ПУТЬ должен быть указан.

Чтобы сделать только деблокинг:

    MPEG2Source("project.d2v", cpu=4)

Чтобы сделать деблокинг на чересстрочном источнике с повышенной вертикальной чувствительностью:

    MPEG2Source("project.d2v", cpu=4, iPP=true, moderate_v=20)

Чтобы делать только дерингинг:

    MPEG2Source("project.d2v", cpu2="ooooxx")

Выбрать 32-bit SSE2 iDCT и установить выходное цветовое пространство I420 можно так:

    MPEG2Source("project.d2v", idct=5, i420=true)

Изменить цветовое пространство в YUY2 исходя из флага прогрессивного кадра:

    MPEG2Source("project.d2v", upConv=true)

Отобразить на экране информацию о видео:

    MPEG2Source("project.d2v", info=1)

### Примеры LumaYV12()

Приведённые примеры LumaYV12() конечно же субъективны и должны подбираться индивидуально.
Используйте их как Вам будет угодно.

Сделать темней:

    MPEG2Source("project.d2v")
    LumaYV12(lumoff=-10, lumgain=0.9)

Сделать светлей:

    MPEG2Source("project.d2v")
    LumaYV12(lumoff=10, lumgain=1.1)

### Примеры BlindPP()

BlindPP() не должен использоваться, если видео открыто функцией
MPEG2Source(), потому что её пост-обработка работает лучше. Обычно BlindPP() используется, если видео открывается AviSynth'вским AviSource() или DirectShowSource().

Значения по умолчанию для деблокинга и дерингинга:

    AVISource("my_video.avi")
    BlindPP()

Только деблокинг:

    AVISource("my_video.avi")
    BlindPP(cpu=4)

Чтобы сделать деблокинг на чересстрочном источнике с повышенной горизонтальной чувствительностью:

    AVISource("my_video.avi")
    BlindPP(cpu=4, iPP=true, moderate_h=10)

Более сильный деблокинг и дерингинг:

    DirectShowSource("my_video.mpg")
    BlindPP(quant=12)

Только дерингинг:

    DirectShowSource("my_video.mpg")
    BlindPP(cpu2="ooooxx")

### Примеры Deblock()

Deblock() не должен использоваться на MPEG-2 видео источнике.
Обычно он используется при открытие через функции AviSynth'а AviSource() или DirectShowSource().

Деблокинг по умолчанию:

    AVISource("my_video.avi")
    Deblock()

Сделать сильный деблокинг с повышенной чувствительностью:

    DirectShowSource("my_video.mpg")
    Deblock(quant=32, aOffset=16, bOffset=24)

## Приложение A: описание BlindPP()

Блочность получается вследствие 8x8-пиксельного дискретное косинусное преобразование (далее DCT) используемого MPEG кодировщиком. Вы должны быть уверены что блоки, от которых Вы хотите избавиться имеют стороны по 8 пикселей. Это означает, что перед применением BlindPP() не нужно делать изменение размеров или обрезание картинки. Если источник закодирован с чередованием полей (чересстрочно), установите iPP=true, если же он прогрессивный, то значение по умолчанию - правильно (iPP=false).

Параметры: quant, cpu2, moderate_h, and moderate_v.

quant определяет общую силу с которой нужно убирать блоки.

Установите cpu2 в "xxxxoo" для горизонтального и вертикального деблокинга цветности и яркостной состовляющих, в "xooxoo" для горизонтального яркости и вертикального деблокинга цветности, и т.д. Идею Вы получили.

moderate_h и moderate_v означают горизонтальную и вертикальную чувствительность, определяющую зону, где будет выполняться деблокинг, а где нет. Эти значения регулируют чувствительность распознания наличия блочности.

quant=2, moderate_h=35-45, moderate_v=45-55 будет произведено очень мягкое сглаживание очень больших блоков. Это сохранит очень много деталей и резкости, но также не избавит от "слабых" блоков, и не уберёт полностью более сильные.

quant=16, moderate_h=15-20, moderate_v=20-30 будет произведено очень грубое удаление всего, что было блоками, а также это сгладит картинку и потеряются детали и резкость.

Выбирать Вам в зависимости от Вашего вкуса и видео источника.

Ещё один пример... Так как замечательный шумодав PixieDust() сам иногда вызывает появление блоков в движущихся областях, я решил с этим что-нибудь сделать:

    PixieDust(2)
    BlindPP(quant=8, cpu2="xxxxoo", moderate_h=45, moderate_v=55)

Этого удаляет значительную долю наиболее видимой блочности, если только действительно PixieDust() произвёл его. В оставшихся 99.8% случаев, когда PixieDust() не производит блоков, эта функция почти ничего не делает, как и желательно.

## Приложение B: описание алгоритма iDCT

Файл readme из FlasKMPEG содержит замечательное техническое описание работы iDCTs. В нём излагается:

> "Видео информация внутри MPEG файла хранится в частотном представлении, а не в пространственном представлении (те изображения, которые мы видим). Это делает информацию компактней и эту компактность мы можем использовать чтобы сжать (снизить) количество информации, которое мы должны послать по передающим каналам. (Прим перев.: Это позволяет алгоритму сжатия отбросить те элементы изображения, которые наименее важны для восприятия картинки человеческим глазом, степень сжатия, в итоге, и зависит от количества отбрасываемой информации). MPEG использует дискретное косинусное преобразование (DCT) чтобы перевести пространственную информацию в частотную. Чтобы вернуть обратно пространственную информацию из MPEG потока, мы должны применить iDCT, что означает обратное дискретное косинусное преобразование, которое обращает DCT, которое мы использовали при кодировании."

> "Хотя MPEG жестко задает почти все почти полностью определяет все возможности (при данном MPEG потоке, выход должен быть идентичен для всех декодеров), но стандарт позволяет использовать разные iDCT (Прим. перев: например, для ускорения работы декодера). Поэтому декодер может быть легко реализован в зависимости от используемой аппаратуры. Стандарт требует от декодера, чтобы iDCT соответствовало IEEE-1180, иначе говоря чтобы ошибки iDCT не были бОльшими, чем это определено в IEEE-1180."

Какой iDCT Вы будете использовать зависит в основном от Вашего процессора и степени того, насколько точное iDCT Вы хотите. Большинство людей не способны сказать о разнице этих алгоритмов, но она может быть легко исследована комбининацией AviSynth фильтров Subtract() и Levels(). Все доступные опции совместимы с IEEE-1180, кроме SSE/MMX (Skal).

По качеству: IEEE-1180 Reference > 64-bit Floating Point > Simple MMX (XviD) > остальные iDCTs.

По скорости: SSE2/MMX и SSE/MMX (Skal) как правило самые быстрые. IEEE-1180 Reference - самый простой и медленный.

## Приложение C: SIMD инструкции

SIMD расшифровывается как Single Instruction, Multiple Data(Одна инструкция, много данных). Это означает передачу набору команд большого кол-ва данных для эффективной параллельной обработки. Такой метод даёт большой прирост производительности в приложениях по обработке аудио и видео файлов. Это обычно требует повторения последовательности команд, которые будут выполняться теперь за один такт.

Существует семь разных наборов SIMD инструкций доступных в процессорах Intel и AMD, но не каждая модель процессора поддерживает все эти продвинутые наборы инструкций. Вот почему многие функции DGDecode снабжены опциями для определения, используемого набора комманд. Таблица ниже содержит SIMD инструкции, поддерживаемые DGDecode, и процессоры, требуемые для их использования.

Table 1: SIMD инструкции, поддерживаемые DGDecode
| MMX | 3DNow! | SSE | SSE2
--- | --- | --- | --- | ---
Требует процессор Intel | Все Intel CPUs | Не поддерживаются Intel | Pentium 3, Pentium 4 | Pentium 4
Требует процессор AMD | Все AMD CPUs | Все AMD CPUs | Athlon XP, Athlon 64 | Athlon 64

## История версий

Основан на MPEG2Dec2 (выгрузка из CVS от 28.09.2002), переработан до MPEG2Dec3 (MarcFD).

- бета версии (с 1 по 6)
  - Добавлена пост обработка Nic'а, основанная на поле PP
  - подавленный iDCT / вариант яркостной фильтрации
  - Исправлен код MMX в яркостном фильтре (всего три ошибки)
  - YV12->YUY2 конвертация оптимизирована (быстрей +10%)
  - Исправлена ошибка в пост-обработке. Теперь немного медленней.
  - Добавлена SSE2 оптимизация trbarry.
  - Добавлен переключатель showQ
  - добавлена новое компенсация движения vlad'а (3dnow/ssemmx) / переписан ssemmx
  - Добавлена передача памяти (через MMX) для поиска (+3% скорость)
  - Добавлена поддержка чересстрочного апсэмплинга
- v 0.9 (09.11.02)
  - сильная чистка кода
  - изменён интерфейс работы с Avisynth
  - поддержка YV12
  - поддержка RGB24
  - много других мелочей
- v 0.91 (10.11.02)
  - немного почищен код
  - Добавлен MPEG2Dec3.def в загрузку по умолчанию (как преобладающий фильтр)
  - В SeparateFieldsYV12() первое поле нижнее (bff)
- v 0.92 (17.11.02)
  - Издан код
  - Появился blindPP
- v 0.93 (25.11.02)
  - полный переход на YV12...
  - ...кто исправил ошибки YV12
  - стал требовать меньше памяти
  - быстрое MMX копирование (ускорился поиск)
- v 0.94 (08.12.02)
  - незначительные исправления
- v 1.00 (19.01.03)
  - финальная версия
  - я исправил все, известные ошибки
- v 1.01 (unknown) - trbarry
  - Исправлена ошибка HDTV (0x21 PID неизменяемый)
- v 1.02 (12.05.03) - Nic
  - выполнено выравнивание разницы malloc'а (aligned malloc done different !!!)
- v 1.03 (12.05.03) - Nic
  - Теперь поддерживаются DVD2AVI 1.77.3 и 1.76 D2V файлы.
- v 1.04 (12.05.03) - Nic
  - Исправлена утечка памяти, небольшое ускорение
- v 1.05a (12.05.03) - trbarry
  - Тестовая версия trbarry для скоростных оптимизаций
- v 1.06 (24.05.03)
  - Nic: Добавлены два новых iDCT: Skal's (самый быстрый, idct=6) & SimpleiDCT (очень точный, idct=7)
  - Nic: Поддерживает внешнее использование MPEG2Dec3.dll без AviSynth
    (Смотрите файлы example.zip и GetPic example)
  - trbarry: Добавлен новая оптимизация Add_Block также хороша как Block Decoding для процессоров с SSE2
  - sh0dan: Используется AviSynth'овская быстрая функция BitBlt для копирования в памяти, где это возможно
  - Nic: Общая оптимизация :) Стал быстрей работать на всех протестированных компьютерах.
- v 1.07 (6.06.03)
  - Nic & Sh0dan: Исправления ошибок, улучшена стабильность на битых потоках
- v 1.08 (8.06.03)
  - trbarry: Оптимизирован алгоритм Simple_iDCT, значительно быстрей теперь :)
  - Nic: Добавлен CPUCheck, забыл исправить Lumafilter в последний раз (спасибо ARDA!), robUx4 помог мне сделать simple_idct в быстром вызове
- v 1.09 (26.07.03)
  - Nic: Новый Sparse iDCT skal'а теперь используется вместо idct=6 (самый быстрый!)
  - Nic: Добавлен Luminance_Filter (фильтр цвета) из DVD2AVI 1.77.3, в котором Luminance_Filter использовался в .d2v

- v 1.10 (28.07.03)

- Nic: Чёрт! Опять проблемы с этим фильтром яркости и файлами D2V версии 1.77.3. Исправлено!

Переиздано как DGDecode (neuron2)

- v 1.0.13 (8.06.04)
  - DG: Исправлено игнорирование DGDecode'ом B-кадров перед первым P-кадром.
  - DG: Исправлено безоговорочное уменьшение счета кол-ва кадров на два.
  - DG: Переписан код для декодирования и случайного поиска для правильной работы с D2V файлами созданными исправленными версиями DGIndex.
  - DG: Исправлен DGDecode (надеюсь) для прекращения падений VirtualDub'а на выходе, когда последний кадр битый.
  - DG: Исправлен iDCT, выбираемый не глобально в DGDecode.
- v 1.1.0 (21.01.05)
  - DG: Добавлена возможность открытия битых потоков (теперь не падает на них).
  - DG: Добавлена правка файлов, у которых меняется матрица квантования на лету.
  - tritical: Исправлен DC режим назначения деблокинга при пост-обработке.
  - tritical: Добавлена опция "info" в mpeg2source() для вывода информации о потоке на экран.
  - tritical: iPP изменён на "auto" по умолчанию. "auto" использует флаг прогрессивного кадра для переключения между пост-обработкой поля/кадра.
  - tritical: Добавлена поддержка цветового формата 4:2:2 на входе.
  - tritical: Добавлена опция "upConv" в mpeg2source() для интерполяции отсчетов до 4:2:2 из 4:2:0, основываясь на флаге прогрессивного кадра.
  - tritical: BlindPP теперь поддерживает цветовое пространство YUY2.
  - tritical: Исправлена ошибка в BlindPP - различия регистров. (x - не X!)
  - tritical: Исправлена маленькая ошибка в showQ.
  - tritical: Исправлена утечека памяти, когда FrameList/GOPList не был пуст.
  - tritical: Исправлена ошибка в вертикальном цветовом деблокинге пост-обработки QP, переходный указатель, был неправильный для 4:2:0.
  - tritical: Быстрое MMX преобразование 4:2:2, упакованного в YUY2, и YUY2 в плоскостное (planar) 4:2:2.
  - tritical: Исправлен вывод "info", работавшего неправильно, если temporal_reference был не нулевым в начале GOP'а.
- v 1.2.0 (17.02.05)
  - DG: Переработан параметр "info".
  - DG: Исправлена ошибка в пост-обработке - дерингинге.
  - DG: Исправлены проблемы падений BlindPP() при входном YUY2.
- v 1.2.1 (22.02.05)
  - DG: Исправлена ошибка вызывавшая крушение BlindPP().
  - DG: Исправлена неправильная пост-обработка для YUY2.
  - DG: Изменён DGDecode для приёма YV12 по умолчанию.
  - DG: добавлен параметр i420 в DGDecode.
  - Manao: Добавлен фильтр слепого деблокинга Deblock(), как в H.264.
- v 1.3.0 (01.05.05)
  - DG: Добавлен перехват исключения, из-за которого DGDecode не должен рушиться при битой картинке.
  - DG: Изменён метод интерполяции отсчетов VFAPI ("_P" перед расширением D2V в имени файла форсирует прогрессивный пересчет; иначе используется чересстрочный).
- v 1.4.0 (15.06.05)
  - DG: Добавлена возможность стандартного вызова функций из dgdecode.dll для использования в VB, и т.п. Такие как: getRGBFrame_SC().
  - DG: Исправлена ошибка слайсового восстановления, становившаяся причиной (очень редко) ошибок декодирования картинки.
  - DG: Программные потоки с ID видео потоков, отличных от 0xE0 теперь поддерживаются.
  - DG: Исправлены ошибки декодирования, из потоков ранее не поддававшихся восстановлению.
  - DG: Добавлена поддержка MPEG1 файлов.
  - DG: Исправлена ошибка при разборе (parsing) транспортного потока (TS), вызывавшая несоответствия между линейным декодированием и поиском случайного кадра.
  - DG: Удалены YV12toYUY2() и YV12toRGB24() т.к являлись дубликатами встроенных фильтров Avisynth'а.
  - ARDA: Заменён ошибочный LumaFilter() на надёжный и оптимизированный LumaYV12().
  - jackei: Исправлен Рекомендуемый (Reference) iDCT (№ 4).
  - tritical: Исправлено присвоение pitch=width, позволяющее теперь нормально работать с версиями Avisynth, которые изменяют правила выравнивания.
  - tritical: DGVfapi теперь поддерживает множество инсталяций и может так же открывать AVS скрипт также хорошо как и D2V.

## Участники

Mathias Born, автор MPEG2Dec
Donald Graft ("neuron2"), исправление потерянного кадра, точное индексирование, поддержка PVA, и многое другое
Peter Gubanov, автор MMX/SSEMMX iDCT
Chia-chen Kuo ("jackei"), автор DVD2AVI
"MarcFD", ввёл поддержку YV12 и многое другое
"Nic", пост обработка и многое другое
Miha Peternel, автор Floating Point и Reference iDCT
Dmitry Rozhdestvensky, автор SSE2 iDCT
"sh0dan", оптимизация кода
"Skal", for his SSEMMX iDCT
"trbarry", разбор (parsing) TS, и оптимизация кода
"tritical", интеполяция отсчетов, информация через оверлей, улучшения VFAPI, и много исправленных ошибок
"Manao", за фильтр Deblock()
"ARDA", за фильтр LumaYV12()
"Didйe", за приложение A: описание использование BlindPP()
"Cyberia", за приложения B и C, и усовершенствование пользовательской инструкции

`$English Date: 2007/09/22 21:28:24 $
Русский перевод 16.05.2006 SCIF scif@iatp.festu.ru $`
Редакция 18.05.2006-23.09.2007 Fizick