# MPEG2Dec3

## Résumé

auteurs: MarcFD, Nic, trbarry, Sh0dan et d'autres
version: 1.10.1
catégorie: Plugins (source) décodeurs MPEG
téléchargement: http://www.avisynth.org/warpenterprises/
outils nécessaires:

## Description

Ce filtre renvoie une sortie dans les formats de couleur RGB, YUY2 et YV12.
C'est un décodeur MPEG-2 capable de décoder tout flux MPEG-2 lu par DVD2AVI 1.76 / 1.77.3 / 1.83x (et d'autres). Il supporte également les flux HDTV, mais seulement avec DVD2AVI 1.83.5. (C'est une version modifiée de MPEG2Dec2). Les fonctions supplémentaires sont par exemple le support des sorties YV12, YUY2 et RGB32 (bien qu'il soit recommandé d'utiliser les routines de conversion de format de couleur d'AviSynth), contrôle de l'entrelacement, post processing intégré, filtrage sur la luminance, etc...

## Exemples d'utilisation de l'ensemble de filtre de MPEG2Dec3:

Tout les script ci dessous sont seulement des exemples.
Vous devez tout d'abord ajouter cette ligne dans votre script AviSynth:

    LoadPlugin ("MPEG2Dec3.dll")

### Utilisation simple de MPEG2Dec3

Pour faire du décodage en YV12.

    MPEG2Source("dvd.d2v")

Pour utiliser le post processing (post traitement), ici du deblocking (atténuation de l'effet de blocs) seulement.

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

C'est mieux d'utiliser un post traitement basé sur les champs dans le cas de sources entrelacées.

    MPEG2Source("dvd.d2v", cpu=4, iPP=true)

Si vous avez un intel Pentium 4, vous pouvez forcer l'utilisation du sse2 pour l'idct.

    MPEG2Source("dvd.d2v", idct=5)

Pour utiliser un post traitement personnalisé, ici seulement du deringing (atténuation de l'effet baveux des contours).

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

### Conversions d'espaces de couleurs

Pour convertir en YUY2.

    MPEG2Source("dvd.d2v")
    YV12toYUY2()

Pour convertir une source YV12 en YUY2 progressif.

    MPEG2Source("dvd.d2v")
    YV12toYUY2(interlaced=false)

Pour convertir en RGB24.

    MPEG2Source("dvd.d2v")
    YV12toRGB24()
    FlipVertical() #YV12->BGR24 cette conversion retourne nativement l'image

Pour convertir une source YV12 en RGB24 progressif.

    MPEG2Source("dvd.d2v")
    YV12toRGB24(interlaced=false)
    FlipVertical() #YV12->BGR24 cette conversion retourne nativement l'image

### Filtres YV12 supplémentaires

Pour diminuer la luminosité.

    LumaFilter(-10, 0.9)

Pour augmenter la luminosité.

    LumaFilter(+10, 1.1)

Vous pouvez bien sûr paramétrer avec les valeurs que vous voulez.
Voir la partie Syntaxe pour plus d'information.

## Syntaxe des filtres de MPEG2Dec3:

### MPEG2Source

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

d2v :
Votre fichier projet DVD2AVI. (*.d2v)

cpu : de 0 à 6.
Paramètres CPU similaires à ceux trouvés dans le décodeur de DivX.
- 0 : Pas de 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
(Y=luma C=chroma, H=horizontal, V=vertical)
Par défaut : 0

idct : de 1 à 5.
iDCT : algorithme iDCT utilisé.
0 : Valeur par défaut (dans le fichier .d2v)
1 : 32 bit MMX
2 : 32 bit SSEMMX
3 : 64 bit FPU
4 : 64 bit IEEE-1180 Reference
5 : 32 bit SSE2 (pour P4)
6 : Skal's SSEMMX iDCT (la plus rapide)
7 : SimpleiDCT (iDCT très précise issue du projet XviD)
par défaut : 0

iPP :
Pour utiliser un post traitement basé sur les champs de la video. Convient mieux si vous voulez désentrelacer.
- True : Basé sur les champs
- False : Basé sur les images (par défaut)

moderate_h, moderate_v :
Ajustement précis de la force du post traitement.
Les valeurs plus faibles donnent un deblocking plus fort. A utiliser avec précautions.
Par défaut : moderate_h=20, moderate_v=40

showQ :
Pour voir le quantificateur de chaque MB (MacroBlock).
Assez amusant à utiliser ^^
Par défaut : false

fastMC :
Code de compensation de mouvement plus rapide de Vlad.
Très faible gain de vitesse, et la précision est diminuée. Ce paramètre est là pour test, et sera probablement supprimé dans les prochaines versions. Pour cpu ssemmx seulement.
Par défaut : false

cpu2 :
Paramètre de post traitement personnalisables. Vous devez entrer une chaîne de 6 caractères. Chaque croix (x) activera le post traitement correspondant:

    exemple :
    "oxoxox"
    123456
    activera le post traitement chroma seulement

1 : deblocking horizontal sur luma
2 : deblocking vertical sur luma
3 : deblocking horizontal sur chroma
4 : deblocking vertical sur chroma
5 : deringing horizontal sur luma
6 : deringing horizontal sur chroma
Par défaut : " " (désactivé)

### LumaFilter

`LumaFilter` (clip, integer "lumoff", float "lumgain")

La transformation est effectuée de la manière suivante: yy = (y*lumgain)+lumoff

lumoff :
Décalage de luminosité.
Par défaut = -2 (pour iago ^^)

lumgain :
Gain de luminosité..
Par défaut = 1

### YV12toRGB24

`YV12toRGB24` (clip, bool "interlaced", bool "TVscale")

YV12->BGR24 cette conversion renverse l'image nativement. Utilisez FlipVertical après.

interlaced :
Mettez ce paramètre sur true (vrai) quand votre source est entrelacée; ceci pour que l'entrelacement de chroma soit correct.
Pour un flux progressif, utiliser false (faux) donnera des couleurs plus précises et plus réelles.
Par défaut : true

TVscale :
La même option que dans DVD2AVI. Elle peut être inversée. Essayez avec et sans et conserver votre favoris.
Par défaut : false

### YV12toYUY2

`YV12toYUY2` (clip, bool "interlaced", bool "tff")

interlaced :
Mettez ce paramètre sur true (vrai) quand votre source est entrelacée; ceci pour que l'entrelacement de chroma soit correct.
Pour un flux progressif, utiliser false (faux) donnera des couleurs plus précises et plus réelles.
Par défaut : true

tff :
Top Field First (champs du dessus en premier). Mettez ce paramètre sur False si vous avez une source Bottom Field First (champ du bas en premier).
Par défaut : true

### BlindPP

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

Pour le deblocking et le deringing de n'importe quel type de source se basant sur une compression DCT. Bien sûr, il est moins précis que le post traitement du décodeur mais il est cependant très efficace. Il nécessite une entrée en YV12.

quant :
Quantificateur émulé. Utilisez une valeur élevée pour augmenter l'agressivité. En utilisant une valeur proche de votre source, vous obtiendrez un post traitement très précis.
Par défaut : 2

cpu, cpu2, iPP, moderate_h, moderate_v :
Même paramètres que pour le post traitement de MPEG2Source.
Par défaut : cpu=6, cpu2="", iPP=false, moderate_h=20, moderate_v=40

## Historique

basé sur MPEG2Dec2 (save-oe CVS 28.09.2002)

- betas versions (de 1 à 6)
  - Ajout du post traitement basé sur les champs par Nic
  - Hiérarchise le choix des filtre 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 debugage showQ.
  - Ajout du nouveau code de Vlad pour la compensation de mouvement (3dnow/ssemmx) / reé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 du 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 bug connus
- v 1.01 (inconnu) - 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
  - Support 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

- v 1.10.1 (23.05.05)
  - Kassandro: suppression de la supposition "luma pitch = luma width". Nécessaire pour AviSynth v2.57 et ultérieurs.

## Remerciements

Chia-chen Kuo, auteur de DVD2AVI
Peter Gubanov, auteur de MMX/SSEMMX iDCT
Dmitry Rozhdestvensky, auteur de SSE2 iDCT
Miha Peternel, auteur de Floating Point iDCT et de Reference iDCT
Mathias Born, auteur de MPEG2Dec

Remerciement spécial à Nic, pous les fonctions de post traitement qui ont rendu MPEG2Dec3 possible.

1.01 et ultérieures: Nic, trbarry, sh0dan
Remerciement à Skal pour l'utilisation de son algorithme iDCT (http://skal.planet-d.net)

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