# DGDecode

## Résumé

auteurs: MarcFD, Nic, trbarry, Sh0dan, Graft et d'autres
version: 1.4.0
catégorie: Plugins (source) décodeurs MPEG
téléchargement: http://neuron2.net/dgmpgdec/dgmpgdec.html
outils nécessaires:
licence: GPL

## Table des matières

- Description
- Syntaxe du filtre
  - MPEG2Source()
  - LumaYV12()
  - BlindPP()
  - Deblock()
- Exemples d'utilisation
  - LoadPlugin()
  - MPEG2Source()
  - LumaYV12()
  - BlindPP()
  - Deblock()
- Annexe A: Notes sur BlindPP()
- Annexe B: Notes sur l'algorithme iDCT
- Annexe C: Instructions SIMD
- Historique des versions
- Remerciements

## Description

DGDecode fait partie du package DGMPGDec. C'est un plugin de décodage MPEG-1/2 conçu pour AviSynth v2.5 et supérieures. Il est capable de décoder n'importe quel flux MPEG-1 ou MPEG-2 lu par DGIndex. Il dispose, entre autres, des fonctions suivantes: gère l'espace de couleurs de sortie YV12, I420 et YUY2 (ainsi que RGB24 via DGVfapi), des iDCT optimisés, un post traitement de type deblocking et deringing, filtrage sur la luminosité.
DGDecode est basé sur MPEG2Dec3 v1.10, qui était lui même basé sur MPEG2Dec2 issu du projet SourceForge "save-oe".

Note importante: Ce filtre fût renommé en DGDecode pour éviter les confusions et pour le mettre clairement en relation avec les versions de DVD2AVI de neuron2 renommées en DGIndex. Neuron2 fait beaucoup d'efforts pour que la reconnaissance aille également à ceux qui sont à l'origine de DGDecode. Neuron2 a fait évolué DVD2AVI et à corrigé des bugs, mais il se place dans la continuité des "géants" cités dans la section Remerciements de cette aide.

Vous pouvez obtenir la dernière version des exécutables et des sources sur la page suivantes: http://neuron2.net/dgmpgdec/dgmpgdec.html

Ce filtre est un logiciel libre distribué sous les termes de la licence GNU GPL v2. Vous devez être d'accord avec les termes de cette licence avant d'utiliser ce plugin ou son code source. Reportez vous à la section Licence pour plus de détails.

## Syntaxe du filtre

### MPEG2Source()

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

Bien que DGDecode décode maintenant aussi bien le MPEG-1 et le MPEG-2, la fonction s'appelle toujours MPEG2Source() pour des raisons de compatibilité avec les scripts existants. Vous pouvez l'utiliser pour décoder les flux MPEG-1 et MPEG-2.

d2v: "[CHEMIN\]project.d2v"

C'est le fichier de projet créé par DGIndex.
Paramètre obligatoire!
Note 1: CHEMIN peu être ignoré si le fichier "project.d2v" est dans le même répertoire que le fichier AviSynth (*.avs).

idct: de 0 à 7 (par défaut: 0)

C'est l'algorithme iDCT utilisé pour le décodage.
Pour plus d'informations sur l'iDCT, reportez vous à l'annexe B.
Reportez vous à l'annexe C pour connaitres les CPU supportés.
- 0: Utilise les valeurs indiquées par DGIndex (iDCTs 6 et 7 non disponibles dans DGIndex)
- 1: 32-bit MMX
- 2: 32-bit SSEMMX
- 3: 64-bit SSE2MMX
- 4: 32-bit Floating Point
- 5: 64-bit IEEE-1180 Reference
- 6: 32-bit SSEMMX (Skal)
- 7: 32-bit Simple MMX (XviD)

cpu: de 0 à 6 (par défaut: 0)

Paramètres de post-traitement rapides.
(Y=luma, C=chroma, H=horizontal, V=vertical)
- 0: DESACTIVE LE POST-TRAITEMENT
- 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

iPP: true/false (vrai/faux) (par défaut: auto)

Post-traitement basé sur les champs.
DGDecode utilise le drapeau PROGRESSIVE_FRAME pour changer entre les modes de post-traitement basées sur des champs ou sur des images, ceci pour chaque image.
Vous devez utiliser le paramètre iPP uniquement si vous souhaitez forcer DGDecode à utiliser un mode particulier de post-traitement.
- true: force le mode de post-traitement basé sur les champs (pour source entrelacées)
- false: force le mode de post-traitement basé sur les images (pour les sources progressives)

moderate_h, moderate_v: de 0 à 255 (par défaut: moderate_h=20, moderate_v=40)

Sensibilité de détection des blocs.
(moderate_h=horizontal, moderate_v=vertical)
Des valeurs plus faibles produisent un filtrage plus important. Utilisez ce paramètre avec précautions.

cpu2: (par défaut: "")

Paramètres de post-traitement personnalisés.
Indique une chaîne de six caractères de x et de o se référant à la liste suivante (sensible à la casse).
Chaque "x" active le paramètre de post-traitement correspondant.
Chaque "o" désactive le paramètre de post-traitement correspondant.
caractère 1: réduction de l'effet de bloc horizontalement sur la luminance
caractère 2: luma vertical deblocking (réduction de l'effet de bloc verticalement sur la luminance
caractère 3: réduction de l'effet de bloc horizontalement sur la chrominance
caractère 4: réduction de l'effet de bloc verticalement sur la chrominance
caractère 5: réduction de l'effet de fourmillement des contours (contours baveux) sur la luminance
caractère 6: réduction de l'effet de fourmillement des contours (contours baveux) sur la chrominance

Par exemple, pour activer un post traitement sur le paramètre chrominance seulement, utilisez:

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

upConv: true/false (vrai/faux) (par défaut: false)

Convertit une source YV12 (4:2:0) en YUY2 (4:2:2) en se basant sur le drapeau PROGRESSIVE_FRAME.
Ignoré si la source n'est pas en YV12 (4:2:0)
Utilisez les filtres de conversion AviSynth pour forcer un mode de reéchantillonnage constant.
- true: Effectue la conversion en se basant sur le drapeau PROGRESSIVE_FRAME
- false: N'effectue pas de conversion

i420: true/false (vrai/faux) (par défaut: false)

Renvoie une image dans l'espace de couleur I420.
Peut être utile pour des raisons de compatibilité avec certaines applications.
Ignoré si la source n'est pas en YV12 (4:2:0), ou si upConv=true.
- true: renvoie une image dans l'espace de couleur I420
- false: renvoie une image dans l'espace de couleur YV12

info: de 0 à 3 (par défaut: 0)

Informations de débugage.
- 0: Ne crée par d'infos de débugage.
- 1: Superpose les infos de débugage à la video.
- 2: Renvoie les infos de débugage avec OutputDebugString()
- 3: Renvoie des conseils sur la video (comme défini dans le fichier utilities.cpp/utilities.h)

showQ: true/false (vrai/faux) (par défaut: false)

Affiche les quantificateurs des macro blocs.
- true: Affiche les quantificateurs
- false: N'affiche pas les quantificateurs

fastMC: true/false (vrai/faux) (par défaut: false)

Compensation de mouvement rapide par Vlad.
Un léger gain de vitesse, mais avec une précision moindre.
A utiliser seulement pour des tests. Sera peut être supprimé dans des version ultérieures.
Nécessite SSE or 3DNow!, reportez vous à l'annexe C pour voir les CPUs supportés.

### LumaYV12()

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

Cette fonction n'a aucun lien avec le filtre de luminance de DGIndex.
La transformation appliquée est la suivante: Y = (y * lumgain) + lumoff avec lumgain=gain de luminance et lumoff=décalage de luminance.

LumaYV12() renvoie une image dans la plage de couleur YUV 0->255, et pas dans la plage 16->235 de la norme CCIR-601. Utilisez le filtre intégré à AviSynth ColorYUV() si vous souhaitez forcer l'utilisation de la plage de couleur 16->235. La fonction de LumaYV12() peut être obtenue par le filtre ColorYUV(), qui dispose de plus de fonctions. Mais LumaYV12() est optimisé pour la vitesse dans ses légères manipulations des informations de luminance.

lumoff: de -255 à 255 (par défaut: 0)

Décalage de luminance
Ajuste la luminance de tout les pixels d'une valeur donnée.

lumgain: de 0.0 à 2.0 (par défaut: 1.0)

Gain de luminance.
Ajuste la luminance de tout les pixels par une valeur proportionnelle.

### BlindPP()

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

Pour supprimer les effets de blocs et de contours baveux (deblocking et deringing) d'une video.
Nécessite une video d'entrée en YUY2 ou YV12.
Reportez vous à l'annexe A pour des explications sur son utilisation.

quant: de 0 à 31 (par défaut: 2)

Quantificateur émulé.
Indique la force du traitement d'atténuation des blocs.

cpu: de 0 à 6 (par défaut: 6)

Même fonction que dans MPEG2Source(), mais avec des valeurs par défaut différentes.

iPP: true/false (vrai/faux) (par défaut: false)

Même fonction que dans MPEG2Source(), mais avec des valeurs par défaut différentes.
Mode automatique NON disponible.

moderate_h, moderate_v, cpu2: (par défaut: moderate_h=20, moderate_v=40, cpu2="")

Même fonction que dans MPEG2Source(), mais avec des valeurs par défaut différentes.

### DeBlock()

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

Filtre d'atténuation de bloc H.264 de Manao. (v0.9.5)
Nécessite une entrée en YV12.
(quant + aOffset) ET (quant + bOffset) doivent tout les deux être >= 16 ou le filtre n'a aucune action.

quant: de 0 à 51 (par défaut: 25)

Quantificateur émulé.
Indique la force du traitement d'atténuation de blocs.

aOffset: (par défaut: 0)

Modifie la limite de détection des blocs.
Une valeur élevée signifie que plus de blocs seront traitées.

bOffset: (par défaut: 0)

Modifie la limite de détection des blocs ainsi que le force du processus d'atténuation des blocs.
De la même manière, une valeur élevée provoquera un filtrage fort.

mmx: true/false (vrai/faux) (par défaut: true)

Désactivée par défaut si le processeur ne supporte pas cette fonction.
- true: Active les optimisations MMX
- false: Désactive les optimisations MMX

isse: true/false (vrai/faux) (par défaut: true)

Désactivée par défaut si le processeur ne supporte pas cette fonction.
Reportez vous à l'annexe C pour voir les processeurs supportés.
- true: Active les optimisations SSE
- false: Désactive les optimisations SSE

## Exemples d'utilisation

### AviSynth LoadPlugin()

La fonctions LoadPlugin() d'AviSynth doit être invoquée avant que la fonction DGDecode ne puisse être utilisée.
Pour cela, rajoutez la ligne suivante au début de votre script AviSynth (*.avs):

    LoadPlugin("[PATH\]DGDecode.dll")

Note: PATH est facultatif si DGDecode.dll se trouve dans le répertoire de plugin par défaut d'AviSynth, sinon PATH doit être indiqué.

### MPEG2Source()

MPEG2Source() ne doit être utilisé que pour des sources MPEG-1 et MPEG-2.

Pour effectuer un décodage en YV12:

    MPEG2Source("[PATH\]project.d2v")

Note: PATH est facultatif si "project.d2v" se trouve dans le même répertoire que votre script AviSynth (*.avs).

Pour atténuer un effet de blocs sur une image (deblocking):

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

Pour atténuer un effet de blocs sur une source entrelacée, avec une sensibilité verticale accrue:

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

Pour atténuer les contours baveux d'une image (deringing):

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

Pour sélectionner l'iDCT optimisée 32bit SSE2 et renvoyer une image dans l'espace de couleur I420:

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

Pour convertir une source en YUY2 en se basant sur le drapeau PROGRESSIVE_FRAME:

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

Pour superposer sur l'image des informations à propos de la video:

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

### LumaYV12()

Les exemples suivant de LumaYV12() sont complètements subjectifs.
Ajustez les paramètres en fonction de vos besoins.

Pour assombrir la video:

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

Pour éclairer la video:

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

### BlindPP()

BlindPP() ne devrait pas être utilisé quand vous utilisez la fonction MPEG2Source(), parce que ses options de post-traitements sont meilleures. En principe, BlindPP() peut être utilisé quand vous ouvrez une video avec les filtres AviSource() ou DirectShowSource() qui ne dispose pas de paramètres de post-traitement.

Pour faire un deblocking et un deringing de base:

    AVISource("my_video.avi")
    BlindPP()

Pour faire du deblocking seulement:

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

Pour faire du deblocking avec une sensibilité horizontale accrue:

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

Pour faire un deblocking et un deringing plus fort:

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

Pour faire du deringing seulement:

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

### Deblock()

Deblock() ne devrait pas être utilisé avec des sources MPEG-2.
Il est plus souvent utiles quand on ouvre une video avec les filtres AviSource() ou DirectShowSource().

Pour faire un deblocking par défaut:

    AVISource("my_video.avi")
    Deblock()

Pour faire un deblocking fort avec une sensibilité accrue:

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

## ANNEXE A: Notes sur BlindPP()

Les blocs sont le résultat de la DCT de 8x8 pixels utilisée par les encodeur MPEG. Vous devez donc être sûr que les blocs que vous voulez supprimer sont encore alignés avec les bord de l'image. Cela veut dire que vous ne devez effectuer aucun découpage (crop) ni redimenssionnement (resize) avant d'appliquer BlindPP(). Si votre source est entrelacée, indiquez le paramètre iPP=true, si vous avez une source progressive, le paramètre par défaut est correct (iPP=false).

Les paramètres sont: quant, cpu2, moderate_h, et moderate_v.

quant indique la force à laquelle le processus d'atténuation de bloc (deblocking) doit être fait.

Paramétrez cpu2 à "xxxxoo" pour un deblocking horizontal et vertical sur la luminance et la chrominance, à "xooxoo" pour un deblocking horizontal sur la luminance et vertical sur la chromiannce, etc.

moderate_h et moderate_v indiquent les sensibilités horizontales et verticales, c'est à dire, où appliquer le deblocking, et où ne pas l'appliquer. Ils contrôle la sensibilité de détection d'un bloc.

quant=2, moderate_h=35-45, moderate_v=45-55 effectuera un deblocking léger sur les bloc clairement visibles seulement. Le clip conservera tout son détail et sa précision, mais laissera identiques les blocs peu visibles, et effacera seulement légèrement les blocs clairement visibles.

quant=16, moderate_h=15-20, moderate_v=20-30 effectuera un deblocking fort sur tout ce qui pourrait peut être être un bloc. Cela a pour effet de supprimer une grande quantité de détail et de précision.

Le reste dépend de ce que vous souhaitez obtenir et de votre source.

Un autre exemple. Puisque l'excellent débruiteur PixieDust() produit quelquefois des blocs dans les zones en mouvement, je fais quelquefois ceci:

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

Cela élimine une bonne partie des blocs visibles, si et seulement si PixieDust() en a ajouté. Sur les 99.8% où PixieDust() n'a pas produit de blocs, cela ne fera rien.

## ANNEXE B: Notes sur l'algorithme iDCT

Le fichier "Lisez-moi" de FlasKMPEG contient une excellente description technique de ce qu'est l'iDCTs. Il est écrit:

> " Les informations video à l'intérieur d'un fichier MPEG sont enregistrés dans le domaine de fréquence plutôt que dans le domaine spatial (les images que nous voyons). De cette manière, les informations sont compactées et ce compactage permet de compresser (réduire) la quantité d'information à transmettre par le canal de transmission. MPEG utilise la DCT (Discrete Cosine Transform - Transformée en cosinus discrète) pour transformer les informations spatiales en informations de fréquences. Pour ramener les informations spatiale d'un flux MPEG, il faut donc appliquer une iDCT, c'est à dire une Inverse Discrete Cosine Transform (Transformée en cosinus discrète inverse), qui défait la DCT qui à été faites pendant l'encodage."

> "Biens que MPEG soit déterministe (étant donnée un flux MPEG, la sortie doit être identique quelque soit le décodeur utilisé), le standard laisse un degré de liberté quant au choix de l'iDCT pour le décodage. De cette manière, un décodeur peut être plus facilement implémenté en fonction de l'équipement sur lequel il est utilisé. Ce que le standard exige, c'est que l'iDCT soit conforme au spécifications de la norme IEEE-1180. Cela signifie que l'erreur produite par l'iDCT ne doit pas dépasser les limites fixées par l'IEEE-1180."

L'iDCT que vous devez utiliser dépend principalement du CPU que vous utilisez et dans une moindre mesure de la précision de l'iDCT que vous souhaitez obtenir. La plupart des gens ne seront pas capable de faire la différence de qualité entre ces algorithmes mais on peut facilement mettre en évidences ces différences en combinant les filtres AviSynth Subtract() et Levels(). Toute les options proposées sont compatibles avec la norme IEEE-1180, à l'exception de SSE/MMX (Skal).

En terme de qualité: IEEE-1180 Reference > 64-bit Floating Point > Simple MMX (XviD) > les autres iDCT.

En terme de vitesse: SSE2/MMX et SSE/MMX (Skal) sont habituellement les plus rapides. L'iDCT IEEE-1180 Reference est de loin la plus lente.

## ANNEXE C: Instructions SIMD

SIMD est l'acronyme de Single Instruction, Multiple Data ( instruction unique, données multiples). C'est un terme qui se réfère à un ensemble d'opérations pour manipuler efficacement de grandes quantités de données en parallèle. Ceci est particulièrement efficace dans les applications ou la video et l'audio sont manipulées. Ce qui nécessite habituellement des répétitions et des successions d'instructions peut maintenant être effectuer en une seule instruction.

Il existe sept ensembles d'instructions SIMD disponibles pour les processeurs Intel et AMD, mais pas tout les processeurs ne supportent ces ensembles d'instructions. C'est pourquoi beaucoup de fonction de DGDecode fournissent une option qui permet de choisir le jeux d'instruction à utiliser. Le tableau suivant liste les instructions SIMD supportées par DGDecode, et les processeurs capables d'utiliser ces instructions.

Tableau 1: Instructions SIMD supportées par DGDecode
| MMX | 3DNow! | SSE | SSE2
--- | --- | --- | --- | ---
CPU Intel requis | Tout les CPUs Intel | Non supporté par le CPUs Intel | Pentium 3, Pentium 4 | Pentium 4
CPU AMD requis | Tout les CPUs AMD | Tout les CPUs AMD | Athlon XP, Athlon 64 | Athlon 64

## Historique des versions

Basé sur MPEG2Dec2 (save-oe CVS 28.09.2002), et sur MPEG2Dec3 (MarcFD).

- betas versions (de 1 à 6)
  - Ajout du post traitement basé sur les champs par Nic
  - Hiérarchise le choix des filtres iDCT / filtrage luma
  - Corrige le code MMX du filtrage luma (3 bugs au moins)
  - Optimisation de la conversion YV12->YUY2 (+10 % de vitesse)
  - Un bug du post traitement est corrigé. Un peu plus lent maintenant.
  - Désactivation des optimisations SSE2 de trbarry
  - Ajoute le paramètre de débugage showQ
  - Ajout du nouveau code de Vlad pour la compensation de mouvement (3dnow/ssemmx) / réécriture de ssemmx
  - Rend fonctionnel le transfert de mémoire MMX pour la recherche (+3% de gain de vitesse)
  - Ajoute le support du reéchantillonnage pour un clip entrelacé.
- v 0.9 (09.11.02)
  - gros nettoyage du code
  - nouvelle conception de l'interface AviSynth
  - Support du YV12
  - Support du RGB24
  - autres choses diverses
- v 0.91 (10.11.02)
  - nettoyage du code
  - ajout des paramètres de chargement par défaut dans le fichier MPEG2Dec3.def
  - mode bff dans SeparateFieldsYV12
- v 0.92 (17.11.02)
  - publication du code
  - implémentation de blindPP
- v 0.93 (25.11.02)
  - conversion total du code pour le YV12...
  - ...qui corrige les bugs YV12
  - moins de mémoire nécessaire
  - copie rapide MMX (recherche plus rapide)
- v 0.94 (08.12.02)
  - petite correction de bug
- v 1.00 (19.01.03)
  - version finale
  - élimination de tout les bugs connus
- v 1.01 (unknown) - trbarry
  - correction d'un bug avec HDTV (0x21 PID codé en dur)
- v 1.02 (12.05.03) - Nic
  - malloc alignée traitées différemment
- v 1.03 (12.05.03) - Nic
  - Supporte maintenant les fichiers D2V de DVD2AVI 1.77.3 et ceux de la version 1.76
- v 1.04 (12.05.03) - Nic
  - Suppression d'un fuite mémoire, un peu plus rapide
- v 1.05a (12.05.03) - trbarry
  - Version de test de trbarry pour optimisations
- v 1.06 (24.05.03)
  - Nic: ajout de 2 nouvelles iDCT: Skal (la plus rapide, idct=6) & SimpleiDCT (très précise, idct=7)
  - Nic: support pour une utilisation externe de MPEG2Dec3.dll sans AviSynth
    (Voir le code source pour example.zip et GetPic)
  - trbarry: ajout d'une optimisation Add_Block et optimisation du décodage des blocs pour machines SSE2
  - sh0dan: utilise la fonction rapide BitBlt d'AviSynth (quand cela est possible) pour les copies mémoire
  - Nic: optimisations générales :) Plus rapide sur toutes les machines testés.
- v 1.07 (6.06.03)
  - Nic & Sh0dan: correction de bugs, meilleure stabilité sur des flux endommagés
- v 1.08 (8.06.03)
  - trbarry: optimisation de Simple_iDCT, beaucoup plus rapide maintenant :)
  - Nic: ajout de CPUCheck, oublie de corriger Lumafilter la dernière fois (merci ARDA!), robUx4 m'a aidé à transformer simple_idct en un fastcall
- v 1.09 (26.07.03)
  - Nic: maintenant, skal's Sparse iDCT est utilisé à la place de idct=6 (la plus rapides)
  - Nic: ajout de Luminance_Filter de DVD2AVI 1.77.3, pour les fois où Luminance_Filter est utilisé dans le fichier .d2v

- v 1.10 (28.07.03)

- Nic: correction d'un problème avec Luminance_filter dans les fichiers D2V de la version 1.77.3

Renommé en DGDecode (neuron2)

- v 1.0.13 (8.06.04)
  - DG: Corrige DGDecode pour ne pas tronquer les B frames avant la première P frame.
  - DG: Correction d'un bug qui supprimait 2 images.
  - DG: Réécriture du code pour le décodage et l'accès aléatoire pour fonctionner correctement avec les fichiers D2V générés par DGIndex.
  - DG: Correction dans DGDecode pour qu'il ne plante pas à la fermeture de VirtualDub quand la dernière image est incomplète.
  - DG: Correction de la sélection de l'iDCT pour qu'elle ne soit plus globale dans DGDecode.
- v 1.1.0 (21.01.05)
  - DG: Ajout d'une correction pour résoudre des plantages dûs à des fichiers corrompus.
  - DG: Ajout d'une correction pour les fichiers qui changent de matrice de quantification à la volée.
  - tritical: Correction de la décision du mode de DC du deblocking (post traitement de type atténuation des blocs).
  - tritical: Ajout de l'option "info" à mpeg2source() pour afficher des infos sur les images.
  - tritical: iPP est maintenant par défaut sur "auto". "auto" utilise le drapeau PROGRESSIVE_FRAME pour alterner entre les post traitements basés sur les champs ou sur les images.
  - tritical: Ajout du support de l'espace de couleur 4:2:2 en entrée.
  - tritical: Ajout de l'option "upConv" à mpeg2source() pour convertir au format 4:2:2 à partir 4:2:0 en se basant sur le drapeau PROGRESSIVE_FRAME.
  - tritical: BlindPP supporte maintenant l'espace de couleur YUY2.
  - tritical: Correction d'un bug de syntaxe de BlindPP. (x vs X)
  - tritical: Correction d'un bug mineur avec l'option showQ.
  - tritical: Correction d'un petite fuite mémoire avec FrameList/GOPList qui n'étaient pas libérés.
  - tritical: Correction d'un bug avec le post traitement de deblocking vertical sur la chrominance. Le pointeur QP transmis était incorrect pour l'espace de couleur 4:2:0.
  - tritical: Conversion MMX plus rapides de 4:2:2 à YUY2 et de YUY2 à 4:2:2.
  - tritical: Correction de la sortie de l'option "info" qui ne marchait pas correctement si temporal_reference n'était pas basé sur zéro au début des GOPs.
- v 1.2.0 (17.02.05)
  - DG: Paramètre "info" modifié.
  - DG: Correction d'un bug dans le post traitement deringing.
  - DG: Correction d'un plantage avec BlindPP() pour les entrées en YUY2.
- v 1.2.1 (22.02.05)
  - DG: Correction d'un plantage avec BlindPP().
  - DG: Correction d'un mauvais post traitement dans l'espace YUY2.
  - DG: Changement dans DGDecode pour renvoyer du YV12 par défaut.
  - DG: Ajout du paramètre i420 dans DGDecode.
  - Manao: Ajout du filtre d'atténuation des blocs H.264 avec Deblock().
- v 1.3.0 (01.05.05)
  - DG: Ajout de la gestion des exceptions pour que DGDecode ne plante pas sur une image incomplète.
  - DG: Changement dans la méthode de rééchantillonnage de VFAPI ("_P" devant l'extension du fichier D2V force un rééchantillonnage progressif; sinon un mode entrelacé est utilisé).
- v 1.4.0 (15.06.05)
  - DG: Ajout de conteneur d'appels standards pour les fonctions d'accès de dgdecode.dll et leur utilisation avec VB, etc. Par Exemple: getRGBFrame_SC().
  - DG: Correction d'un bug de "slice error recovery" qui pouvait causer quelques (rares) erreurs de décodages.
  - DG: Les flux Program avec des IDs de flux video autres que 0xE0 sont maintenant supportés.
  - DG: Correction des erreurs de décodages dûs à une récupération incorrecte des flux de transport (transport streams) corrompus.
  - DG: Ajout du support des fichiers MPEG1.
  - DG: Correction d'un bug dans l'analyse des flux de transport (transport streams) qui pouvait causer une erreur de correspondance entre l'accès linéaire ou aléatoire à une image.
  - DG: Suppression des fonctions YV12toYUY2() et YV12toRGB24() puisqu'elle font doublon avec les filtres AviSynth natifs.
  - ARDA: Remplacement du filtre LumaFilter() buggé par une version utilisable et optimisée: LumaYV12().
  - jackei: Correction de Reference iDCT (type 4).
  - tritical: Correction de la supposition pitch=width (pas=largeur). Cela permet des opérations correctes dans les versions d'AviSynth qui modifient les règles d'alignement.
  - tritical: DGVfapi supporte maintenant des instances multiples et peut ouvrir aussi bien les scripts AVS que les fichiers D2V.

## Remerciements

Mathias Born, auteur de MPEG2Dec
Donald Graft ("neuron2"), correction pour les images perdues, indexage précis, support du PVA, ...
Peter Gubanov, auteur de l'iDCT MMX/SSEMMX
Chia-chen Kuo ("jackei"), auteur de DVD2AVI
"MarcFD", support du YV12 et autre
"Nic", post-traitement et autre
Miha Peternel, auteur de Floating Point iDCT et Reference iDCT
Dmitry Rozhdestvensky, auteur de l'iDCT SSE2
"sh0dan", optimisations du code
"Skal", pour l'iDCT SSEMMX
"trbarry", analyse des flux de transport (TS: transport streams), et optimisations du code
"tritical", rééchantillonnage, superposition des infos, améliorations de VFAPI, beaucoup de corrections de bug
"Manao", pour son filtre Deblock()
"ARDA", pour le filtre LumaYV12()
"Didée", pour l'annexe A: Notes sur l'utilisation de BlindPP()
"Cyberia", pour les annexes B et C, et la mise à jour de l'aide

`$English date: 2005/08/11 21:11:50 $
French translation: 2005/10/31 JasonFly macpaille@users.sourceforge.net`