------------------------------------------------------------------------ ------------------------------------------------------------------------ -- INTRODUCTION -------------------------------------------------------- ------------------------------------------------------------------------ ------------------------------------------------------------------------ - Dans un but pédagogique, c'est le principe de l'encodeur qui sera décrit dans la suite, même si on utilise un décodeur dans le projet VideoLAN (http://www.videolan.org) - La norme MPEG2 est en fait décrite par plusieurs documents, dont les trois principaux sont la norme système, la norme vidéo, et la norme audio. Pour connaître les détails de la norme dont le principe est décrit ici, la norme est ton amie (enfin... ;p). ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- I) CODAGE D'IMAGES ANIMEES ------------------------------------------ ------------------------------------------------------------------------ ------------------------------------------------------------------------ ------------------------------------------------------------ -- A) MATERIAU DE BASE ------------------------------------- ------------------------------------------------------------ On part d'images RGB, c'est-à-dire d'images digitalisées, dont chaque pixel est décrit par 3 couleurs (Rouge, Vert, Bleu) chacune codée sur un octet. Un format courant est celui d'images de 576x542 pixels, ce qui représente 576x542 x 3 couleurs x 25 images = environ 22 MO/s, d'où la nécessité de compresser les données pour les transmettre par exemple sur un réseau. Il existe 2 types de compression : - les compressions non destructives, de type zip, où aucune information n'est perdue pendant le processus de compression, qui est ainsi complètement réversible. - les compressions destructives de type mpeg, où une part de l'information est perdue pendant le processus et ne peut donc être récupérée au décodage. Le choix des informations que l'on va négliger est basée sur un modèle psychique, qui décrit quelles sont les informations auxquelles le cerveau humain est sensible et donc quelles sont les informations importantes. ------------------------------------------------------------ -- B) UNITES ELEMENTAIRES ---------------------------------- ------------------------------------------------------------ On travaille dans toute la suite sur des petits blocs définis comme suit : 1) MACROBLOC ____________ -> région de 16x16 pixels Une tranche est alors définie comme l'ensemble des macroblocs formant une ligne complète. 2) BLOC _______ -> ensemble de 8x8 _COEFFICIENTS_ de luminance ou de chrominance. Donc un macrobloc est divisé en 6 blocs (VOIR LE PARAGRAPHE C)1)) : - 4 blocs de luminance (un macrobloc = 16x16 coefficients de luminance) - 2 blocs de chrominance (8x8 coefficients de chrominance rouge et 8x8 coefficients de chrominance bleue) 3) ROLES ________ Tranche = unité élémentaire de resynchronisation Macrobloc = unité utilisée pour la prédiction de mouvement Bloc = unité utilisée dans la compression de chaque image fixe (compression de type JPEG) ------------------------------------------------------------ -- C) CODAGE DES IMAGES FIXES------------------------------- ------------------------------------------------------------ 1) CHANGEMENT D'ESPACE DE COULEUR _________________________________ MODELE PSYCHIQUE : l'oeil est beaucoup moins sensible à la chrominance (couleur) qu'à la luminance (intensité lumineuse) On va donc changer de base pour décrire les images afin de profiter de cette particularité. On passe ainsi pour chaque pixel d'une description RGB à une description YUV (Y=luminance, U=chrominance rouge, V=chrominance bleue) au moyen de la matrice de changement de base suivante (sous réserve) : /Y\ / 0,2125 0,7154 0,0721\ /R\ |U| = |-0,115 -0,386 0,5 | |G| \V/ \ 0,5 -0,454 -0,046 / \B/ Dans cette nouvelle base : - on garde les informations de luminance pour chaque pixel - mais on moyenne la chrominance de chaque bloc de 4 pixels, et on ne conserve que cette moyenne. ex. sur un bloc de 4 pixels : X X X X X = information de luminance O O O = informations de chrominance commune X X X X => COMPRESSION DESTRUCTIVE (FLUX DIVISE PAR 2) 2) TRANSFORMATION EN COSINUS DISCRETE _____________________________________ C'est-à-dire pour simplifier une sorte de transformation de Fourier. Le but est donc de passer d'une représentation spatiale à une représentation fréquentielle. Chaque bloc est transformé en un fondamental et une suite d'harmoniques. Le fondamental est appelé coefficient DC et les harmoniques coefficients AC. Les harmoniques sont de plus en plus faibles avec leur rang. => PAS DE COMPRESSION (même nombre de coefficients, mais plus petits) 3) QUANTIFICATION _________________ On divise chaque coefficient par une constante dépendant de son rang, donc de sa grandeur d'après la remarque précédente, et donc de son importance dans la perception de l'image résultante. => MODELE PSYCHIQUE => PERTE DE DONNEES (à cause des arrondis) => PAS DE COMPRESSION 4) BALAYAGE ___________ Le but est de transformer les matrices (blocs) en vecteurs (suites liniéaires de nombres). On utilise un algorithme en "zig-zag", destiné à regrouper les zéros, .En effet les zéros sont nombreux dans le triangle inférieur droit de la matrice, partie qui a été sérieusement attaquée à la quantification (car moins perceptible). ex. : /-------------\ | 1 2 3 4 | | 5 6 7 8 | | 9 10 11 12 | | 13 14 15 16 | \-------------/ => 1, 2, 5, 9, 6, 3, 4, 7, 10, 13, 14, 11, 8, 12, 15, 16 => PAS DE COMPRESSION => PAS DE PERTE DE DONNEES 5) CODAGE RLE (Run Length Encode) _________________________________ Cela concerne les coefficients AC uniquement. Le codage consiste à remplacer les coefficients par des paires {valeur d'un coefficient non nul, nombre de coefficients nuls précédant ce caractère non nul}. ex. : 12,14,0,0,0,23,0,34 sera codé par {12,0},{14,0},{23,3},{34,1} Etant donné que l'on a tout fait auparavant pour obtenir un maximum de zéros, il y a généralement compression. => COMPRESSION => PAS DE PERTE DE DONNEES 6) CODAGE DPCM (Differential Pulse Code Modulation) ___________________________________________________ Celui-ci concerne les coefficients DC. On fait l'hypothèse que chaque bloc ressemble au précédent. On n'encode alors que la différence. C'est-à-dire que l'on enregistre "coefficient DC - prédicteur", où "coefficient DC" est le coefficient DC du bloc à encoder et "prédicteur" le coefficient DC du bloc précédent. Cela permet de stocker le coefficient DC dans une structure plus petite. => COMPRESSION => PAS DE PERTE DE DONNEES 7) CODAGE VLC (Variable Length Coding) ______________________________________ C'est en fait une variante du codage de Huffman avec une table fixe. Le principe est le suivant : à chaque paire RLE, on associe selon un tableau prédéfini un code de longueur variable (jusqu'à 11 bits). Le tableau a été construit de façon à ce que, statistiquement, les paires RLE les plus fréquentes aient les codes les plus courts. Si jamais la valeur de la paire RLE n'a pas été prédéfinie, il existe une valeur d'échappement qui permet de stocker la paire sous forme littérale. => COMPRESSION => PAS DE PERTE DE DONNEES ------------------------------------------------------------ -- D) CODAGE DES IMAGES ANIMEES ---------------------------- ------------------------------------------------------------ Jusqu'ici, on a suivi le même principe que pour les images JPEG, c'est-à-dire une compression adaptée aux images fixes. Le taux de compression dépend principalement des valeurs utilisées pour la quantification, c'est-à-dire de la précision avec laquelle on conserve les coefficients AC. On va maintenant se préoccuper de la spécificité du codage d'images animées, en faisant l'hypothèse que 2 images consécutives se ressemblent. 1) NOTION DE VECTEUR DE MOUVEMENT _________________________________ Pour chaque région de 16x16 pixels de l'image à coder, on va chercher la région de 16x16 pixels de l'image précédente qui lui ressemble le plus. Il ne reste donc plus qu'à stocker : - le vecteur de déplacement. Pour retrouver la nouvelle région, il suffira alors au décodage de copier la région source à l'emplacement destination. - la différence pixel par pixel entre la région à coder et la région de référence. Cette différence est elle-même compressée avec les techniques décrites précédemment. 2) SUCCESSION D'IMAGES I,P et B _______________________________ Images I (intra) : ce sont les images de référence, elles sont entièrement codées. Images P (predicted) : elles sont calculées par différence avec l'image P ou I (et non B) précédente, selon la technique du paragraphe précédent. Images B (bidirectionnal) : elles sont calculées par différence avec à la fois l'image P ou I (et non B) précédente ET l'image P ou I (et non B) suivante. Le but est d'améliorer l'encodage de scènes où des objets apparaissent mais seront présents dans les images suivantes (par exemple un ballon qui apparaît en sortant de derrière un mur). On peut théoriquement avoir n'importe quelle succession d'images I, P et B. En pratique, les encodeurs suivent un rythme parfaitement régulier. ex. : IBBPBBPBBPBBI.... Comme le décodeur aura besoin de l'image P ou I qui suit les images B pour pouvoir les décoder, on inverse leur ordre pour la transmission, en transmettant d'abord les images I et P de référence et ensuite les images B. L'ordre de décodage diffèrera donc de l'ordre d'affichage. Cela donne sur l'exemple précédent (pour la transmission uniquement) : IPBBPBBPBBIBBPBBPBB..... ------------------------------------------------------------ -- E) LE FLUX ELEMENTAIRE ES (Elementary Stream) VIDEO ----- ------------------------------------------------------------ Il est composé des éléments suivants : - un sequence header (commençant par l'entier prédéfini 0x1B3) - un picture header (commençant par l'entier prédéfini 0x100) - un slice header (commençant par l'entier prédéfini 0x1xx, où xx est le numéro de la tranche en commençant à 1) - une suite de macroblocs encodés (i.e. vecteurs de mouvement et blocs codés) ------------------------------------------------------------ -- F) SPECIFICITES DU MPEG2 -------------------------------- ------------------------------------------------------------ Les principes d'encodage précédents sont en fait plus ou moins ceux du MPEG1. Le MPEG2 y rajoute certaines techniques : - les profils et niveaux (DVD et satellite == Main Profile @ Main Level (MP@ML)) - l'échelonnabilité : par exemple, le flux est découpé en deux, un décodeur lent pouvant ainsi ne décoder que la moitié des informations sans en perdre la totalité. - les images entrelacées : les lignes paires sont codées séparément et envoyées avec un décalage dans le temps par rapport aux lignes impaires. Cela permet l'affichage sur les téléviseurs classiques. ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- II) CODAGE DE L'AUDIO ----------------------------------------------- ------------------------------------------------------------------------ ------------------------------------------------------------------------ Les principes décrits ci-dessous concernent les layers 1 et 2 du codage MPEG pour le son. ------------------------------------------------------------ -- A) MATERIAU DE BASE ------------------------------------- ------------------------------------------------------------ On part des échantillons temporels sous forme PCM (Pulse Code Modulation). C'est-à-dire que l'on représente le son par la valeur de l'amplitude du signal électrique enregistré par un micro à intervalle de temps régulier pour chaque canal audio. ------------------------------------------------------------ -- B) CODAGE ----------------------------------------------- ------------------------------------------------------------ 1) FILTRE EN SOUS-BANDES ________________________ La première étape consiste à passer du domaine temporel au domaine fréquentiel. Ce domaine fréquentiel de largeur Fs est découpé en 32 sous-bandes de bande passante Fs/32. 2) AFFECTATION BINAIRE ______________________ MODELE PSYCHOACOUSTIQUE : On calcule le niveau de bruit perceptible par l'oreille humaine pour chaque sous-bande en fonction notamment des bandes adjacentes (fréquences masquées par d'autres, fréquences inaudibles, ...). Selon les résultats du modèle psychoacoustique, on attribue entre 0 et 15 bits à chaque sous-bande pour coder son contenu. 3) FORMATAGE ____________ On quantifie les valeurs des harmoniques, c'est-à-dire qu'on les arrondit à un "facteur d'échelle" près. ------------------------------------------------------------ -- C) FLUX ELEMENTAIRE AUDIO ------------------------------- ------------------------------------------------------------ Une trame est constituée des éléments suivants : - un entier de synchronisation (0xFFF) - un en-tête - la description du nombre de bits alloués à chaque sous-bande - le facteur d'échelle pour chacune des 32 sous-bandes - les échantillons de chaque sous-bande ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- III) COUCHES SYSTEMES ----------------------------------------------- ------------------------------------------------------------------------ ------------------------------------------------------------------------ Le but est d'obtenir un seul fichier ou flux contenant l'image, le son, et éventuellement d'autres éléments tels que les sous-titres... Il est donc nécessaire de multiplexer ces éléments. ------------------------------------------------------------ -- A) MATERIAU DE BASE ------------------------------------- ------------------------------------------------------------ On part des flux ES audio et vidéo. ------------------------------------------------------------ -- B) PREMIER NIVEAU : PES (Packetized ES) ----------------- ------------------------------------------------------------ Il s'agit de découper, a priori de façon arbitraire, des ES. En pratique, un PES correspond souvent à une unité logique, parce qu'un PES peut être daté : c'est donc le niveau où s'effectue la synchronisation entre les ES. On trouve un numéro de flux dans l'en-tête, permettant de savoir si le PES contient de la vidéo, de l'audio, des sous-titres, ... Il y a également une date permettant de les réordonner. ------------------------------------------------------------ -- C) DEUXIEME NIVEAU : PS ou TS --------------------------- ------------------------------------------------------------ 1) PROGRAM STREAM (PS) ______________________ Il s'agit en fait de rassembler les PES en vrac, en ajoutant seulement un pack header (commançant par 0x1BA), qui contient des informations de lecture et une horloge de référence pour la synchronisation, et un system header (commençant par 0x1BB). Dans le cas des DVDs uniquement, on trouve un paquet tous les 2048 octets. Plus précisément, on a un startcode 0x1xx (xx >= 0xB9) à chaque début de secteur, soit 2048 octets sur un DVD. 2) TRANSPORT STREAM (TS) ________________________ Dans le cas d'une diffusion sur un réseau, l'alternative plus adaptée consiste à présenter le flux sous forme TS. Dans ce cas, le flux est découpé en paquets de taille FIXE de 188 octets contenant un en-tête TS et un bout de PES. ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- SYNTHESE : STRUCTURE DU DECODEUR ------------------------------------ ------------------------------------------------------------------------ ------------------------------------------------------------------------ /---------------------------------\ |Services Kernel (fichiers/réseau)| \---------------------------------/ || /-----------------------||---------------------------------------------\ | INPUT || | | \/ | | /------------\ | | |Démux | -> TS/PS/DVD (couche transport) | | \------------/ | | || | | \/ | | /------------\ | | |Gestion PES | -> couche synchro | | \------------/ | | | | /------------\ /------------\ /------------\ /------------\ | | |FIFO PES | |FIFO PES | |FIFO PES | |FIFO PES | | | \------------/ \------------/ \------------/ \------------/ | \-------||----------------||----------------||----------------||-------/ /-------||-------\/-------\/-------\/-------||-------\/-------\/-------\ | VIDEO || || SPU || AUDIO || || AC3 | | PARSER|| || DECODER || DECODER| || DECODER | | \/ || || \/ || | | /------------\ || || /------------\ || | | |Décodage | || || |Parsage | || | | |VLC/RLE/DPCM| || || |affectation | || | | \------------/ || || \------------/ || | | || || || || || | | \/ || || \/ || | | /------------\ || || /------------\ || | | |Balayage | || || |Parsage | || | | \------------/ || || |facteurs | || | | || || || |d'échelle | || | | \/ || || \------------/ || | | /------------\ || || || || | | |Quantifica- | || || \/ || | | |tion inverse| || || /------------\ || | | \------------/ || || |Parsage | || | | || || || |échantillons| || | | \/ || || \------------/ || | | /------------\ || || || || | | |Saturation/ | || || \/ || | | |Contrôle | || || /------------\ || | | |d'adaptation| || || |Reconstitu- | || | | \------------/ || || |tion PCM/ | || | \----------------/| || |IDCT | || | /----------------\| || \------------/ || | | VIDEO || || || | | DECODER || || || | | || || || | | /------------\ || || || | | |IDCT | || || || | | \------------/ || || || | | || || || || | | \/ || || || | | /------------\ || || || | | |Prédiction | || || || | | |de mouvement| || || || | | \------------/ || || || | \---||------/\---/\-------||-------/\-------||-------/\-------||-------/ /---||------||------------||-------\/-------||----------------||-------\ | || || VIDEO || || || AUDIO || | | || || OUTPUT || || || OUTPUT || | | \/ || || || \/ \/ | | /------------\ || || /------------------------------\ | | |Réordonnan- | || || |Rééchantillonnage | | | |cement d' | || || \------------------------------/ | | |images | || || || | | \-----||-----/ || || \/ | | \/ \/ || /------------------------------\ | | /------------------------------\ || |Présentation | | | |Affichage, incluant : | || \------------------------------/ | | |- conversion YUV | || | | |- redimensionnement | || | | \------------------------------/ || | \----------------------------------/\----------------------------------/ Enfin, l'INTERFACE, non représentée sur ce schéma, agit sur l'INPUT, l'OUTPUT VIDEO et l'OUTPUT AUDIO. -- Formation MPEG du 8 février 2001 par Christophe Massiot Compte-rendu par Boris "Babal" Dorès