FR 2783661 A1 20000324 FR 9811627 A 19980917 L'invention concerne un procédé de codage et de décodage en temps reel de données graphiques et un codeur/décodeur (codec) graphique temps réel. Elle s'applique plus particulièrement au codage/décodage de données d'affichage pour écrans, plus connu sous l'appellation anglaise On Screen Display ou OSD. Ce type d'affichage est exploité dans les décodeurs vidéo, téléviseurs, magnétoscopes et, d'une manière générale, dans tout type d'appareils vidéo. L'affichage OSD est utilisé pour l'identification des chaînes, les menus de réglages d'un appareil, menus du guide électronique des programmes (Programme Guide), mais également pour des applications plus complexes telles que la visualisation d'un fond de carte météo. Il peut s'agir de la seule visualisation de ces données sur l'écran, d'incrustations ou de superpositions aux images vidéo. Les données relatives à cet affichage OSD peuvent être des données résidentes, c'est à dire logées à demeure dans des mémoires de l'appareil vidéo utilisant ce type d'affichage, soit qu'il s'agit d'informations installées lors de la fabrication du matériel ou bien d'informations téléchargées. Ces données peuvent également être transmises à distance avec le flux de données vidéo. Il s'agit par exemple des décodeurs numériques. Dans le cas des décodeurs numériques vidéo de type MPEG, acronyme de l'anglais Motion Picture Expert Group, qui traitent des flux de données vidéo codées (video bitstreams en anglais) selon cette norme MPEG, les images vidéo sont reçues sous forme comprimées, exploitant en particulier la redondance spatiale et temporelle des séquences vidéo grâce à l'estimation de mouvement et à la transformée cosinus discrète. Les données OSD ne sont pas liées à ce traitement et sont intégrées au flux de données MPEG sous une forme non comprimée et sont mémorisées dans le décodeur sous cette forme pour leur exploitation en temps reel. Les applications exploitant l'affichage OSD deviennent de plus en plus complexes, nécessitant un nombre toujours plus important de données à mémoriser. Les mémoires vives RAM allouées aux données OSD, pour des raisons de coût, limitent donc de telles applications ou bien obligent à réduire la résolution des images ou motifs générés ou bien restreignent la diversité des menus et des applications. La présente invention a pour but de pallier les inconvénients précités. 2 2783661 Elle a pour objet un procédé de compression de données graphiques pour le codage d'images en mode points dites palettisées, données constituées d'une succession d'adresses d'une table de conversion appelées symboles S (données "bitmap"), caractérisé en ce qu'il comprend les étapes suivantes: - un codage par plage des symboles pour donner, pour chaque plage de symboles successifs identiques, un nombre L correspondant au nombre de symboles identiques, associé au symbole S, - un codage à résolution binaire variable de L en fonction de la valeur de L. Elle a également pour objet un procédé de compression de données graphiques pour le codage d'images en mode points dites palettisées, données constituées d'une succession d'adresses d'une table de conversion appelées symboles S (données "bitmap"), caractérisé en ce qu'il comprend les étapes suivantes: - un stockage des symboles différents dans un dictionnaire, - un codage du symbole à partir de son adresse dans le dictionnaire, - un codage à résolution binaire variable de l'adresse dans le dictionnaire servant à coder le symbole. L'invention concerne également un dispositif de compression de données graphiques pour le codage d'images en mode points, données constituées d'une succession d'adresses d'une table de conversion appelées symboles S (données "bitmap") sous forme d'un flux de données, caractérisé en ce qu'il comprend un codeur par plage qui reçoit le flux de données pour fournir, pour chaque plage, un nombre L associé à un symbole S, un codeur à résolution binaire variable pour le codage de L, un circuit de codage de S comprenant un dictionnaire pour la mémorisation des symboles différents et un codeur à résolution binaire variable de l'adresse dans le dictionnaire pour le codage de S. L'invention concerne aussi un dispositif de décompression de données graphiques comprimées selon le procédé décrit précédemment, caractérisé en ce qu'il comprend une mémoire pour la mémorisation du dictionnaire, un circuit d'identification de champ recevant le flux de données comprimées pour la détection de la résolution binaire de L et S et l'extraction des valeurs codées de L et S, un circuit d'extraction de symbole S pour le décodage de la valeur codée de S, le circuit d'extraction de symbole étant relié à la mémoire pour transmettre la valeur codée de S en tant qu'adresse et 3 2783661 récupérer le contenu de l'adresse, un circuit de décodage par plage pour le décodage de la valeur codée de L, un circuit de génération de la séquence de symboles recevant la valeur décodée de plage L pour le symbole S et la valeur décodée du symbole S pour transmettre, dans le flux, L fois la valeur S. Les valeurs à comprimer concernent généralement les données de type "bitmap". Ce sont des adresses des valeurs des pixels effectifs, c'est à dire des valeurs luminance et/ou chrominance des pixels visualisés sur l'écran, stockées dans une palette de couleurs dite palette. Les images sont alors dites palettisées. Les deux étapes essentielles de la compression sont donc: - un codage à résolution variable de la longueur de toute séquence de symboles identiques appelée plage. Pour chaque plage de symboles successifs identiques, de longueur L, on code la longueur L de chaque séquence répétitive détectée, avec une résolution variable en fonction de sa classe d'appartenance qui dépend de la valeur de la plage L. Le codage par classe permet d'attribuer un code optimal (minimal) variable en fonction de la classe d'appartenance de L. Ces classes sont définies statistiquement en se basant sur une large population d'images graphiques. - un codage à résolution binaire variable du symbole lui même en fonction de son ordre d'occurrence dans un dictionnaire adaptatif. Cela est réalisé par un stockage des symboles différents rencontrés au fur et à mesure dans un dictionnaire et un codage du symbole à partir de son adresse effective dans le dictionnaire, ce qui correspond à un codage binaire variable qui augmente avec le nombre de couleurs rencontrées. Par adresse effective, il faut comprendre la non prise en compte, pour les mots d'adresse, des bits de plus ort poids à zéro non activés. Une caractéristique de l'invention est de comprimer ces informations OSD avant de les stocker ou bien de stocker des informations comprimées lorsqu'il s'agit de données résidentes. L'algorithme de compression utilisé est simple, permettant des applications temps reel tout en donnant un taux de compression élevé grâce au codage graphique utilisé pour l'affichage OSD. En effet, d'une part le nombre de couleurs utilisé lors d'un tel codage est limité en soi pour réduire le nombre de données à transmettre au décodeur vidéo ou à stocker dans ce décodeur. D'autre part, les affichages OSD présentent généralement des zones de couleurs uniformes et des motifs répétitifs. 4 2783661 Cet algorithme réalise donc une combinaison de deux types de codages: le codage par plage ou Run Length Coding (RLC) en anglais et le codage à résolution binaire variable (variable binary resolution coding en anglais) aussi bien pour le codage des plages que pour le codage des symboles, c'est à dire des adresses. Grâce à l'invention, les besoins en mémoire vive des décodeurs, récepteurs de télévision, magnétoscopes... sont réduits. Le coût de réalisation des matériels est réduit ou bien, pour un coût donné, les applications liées à l'affichage sur écran (OSD) sont plus performantes et/ou les affichages sont de meilleure qualité. Les caractéristiques et avantages de la présente invention ressortiront mieux de la description suivante, donnée à titre d'exemple et en référence aux figures annexées o: - la figure 1 représente un codeur des données " bitmap " selon I'invention, - la figure 2 représente un codeur par classe pour le codage de L - la figure 3 représente un codeur de symbole S - la figure 4 représente un organigramme du procédé de codage des données "bitmap" - la figure 5 montre un exemple de codage d'un flux de données "bitmap" -la figure 6 représente un décodeur des données codées "bitmap", - la figure 7 représente un organigramme du procédé de décodage des données codées "bitmap", - la figure 8 montre un exemple de décodage d'un flux de données codées "bitmap", - la figure 9 représente un codec. Il existe aujourd'hui de nombreuses solutions quand à la définition de I'affichage OSD, la mémorisation et l'exploitation des données correspondantes. D'une manière générale, les données OSD sont mémorisées sous la forme de cartes "bitmap", appellation anglaise courante signifiant que l'image est codée en mode points, c'est à dire à partir de données (luminance, chrominance) décrivant l'affichage (l'image) en termes de pixels. Des mémoires ou registres de palettes de couleurs contiennent les différentes couleurs nécessaires à la génération des symboles et graphiques. Un adressage vectoriel de ces couleurs est réalisé en définissant ces couleurs non par leur 2783661 codage propre mais par leur adresse dans un registre de palettes, Ce registre de palettes est aussi appelé table de conversion couleurs ou Color Look Up Table en anglais (CLUT). Les informations OSD sont généralement réparties en régions ou zones sur une image, zones définies par des coordonnées. Pour chaque région, I'ensemble des couleurs nécessaires au codage des pixels appartenant à cette région correspond à une palette de couleurs pour cette région. Pour chaque région, une carte "bitmap" affecte à chaque pixel de la région, une adresse dans la table de conversion renfermant les informations de luminance et chrominance de ces pixels soit Y, U, V. Un exemple de stockage des données reçues par un décodeur MPEG dans une mémoire vive RAM de ce décodeur, selon l'art antérieur, est décrit ci- après. Une première partie de la mémoire RAM mémorise le flux de données comprimées MPEG, une deuxième partie mémorise les données spécifiques à l'affichage OSD (données OSD) et une troisième partie mémorise par exemple les données vidéo des images décompressées qui seront nécessaire par exemple pour le réordonnancement des images selon la norme MPEG. D'une manière plus détaillée, la mémorisation des données OSD est elle-même organisée en 3 zones, une première zone correspondant aux coordonnées, une deuxième zone correspondant à la palette des couleurs et une troisième zone correspondant au données "bitmap". Dans la première zone de la mémoire affectée aux données d'une région déterminée OSD sont ainsi mémorisées les coordonnées permettant de définir l'endroit d'affichage de cette région sur l'écran. Dans la deuxième zone est mémorisée la palette des couleurs nécessaire à la représentation de cette région ou table de conversion CLUT puis, dans la troisième zone, pour chaque pixel, I'adresse dans la table de conversion (CLUT) correspondant au codage de ce pixel en luminance et chrominance. Ce sont les données dans cette troisième zone qui sont appelées données "bitmap". La figure 1 représente un codeur 1 mettant en oeuvre le procédé de codage et de compression des données OSD avant mémorisation dans les mémoires RAM, par exemple les mémoires d'un décodeur MPEG. Les données OSD concernées sont en fait les données "bitmap". Ces données "bitmap" qui, comme décrit précédemment, représentent une succession d'adresses que l'on appellera symboles S sont reçues en entree du codeur 1 représenté en traits 6 2783661 pointillés sur la figure et qui regroupe les circuits 2 à 5. Ces données sont transmises à un codeur par plage à résolution binaire fixe 2. Ce codeur fournit sur une première sortie une information L et sur une deuxième sortie une information S correspondant, pour chaque plage, au nombre L de symboles identiques successifs S reçus en entrée. La sortie fournissant la valeur L est transmise à l'entrée d'un codeur par classe à résolution binaire variable 3 pour le codage de cette valeur L selon sa classe d'appartenance et la sortie fournissant la valeur S est transmise à l'entrée d'un codeur de symbole à résolution binaire variable 4. Les sorties des codeurs 3 et 4 fournissent respectivement les valeurs codées L et S de L et S et sont reliées aux entrées d'un multiplexeur 5 dont la sortie est la sortie du codeur 1. Le codeur par plage 2 exploite le procédé de codage par plage, plus connu sous l'appellation anglaise de Run Length Coding ou RLC. Le principe du codage par plage consiste à calculer les Lk répétitions successives d'un k ième symbole Sk et de remplacer la séquence de répétition de ce symbole par le couple Vk=(Lk,Sk). Lk correspond au nombre de répétitions du même symbole Sk. Chaque valeur du couple est ensuite codée séparément à l'aide d'un encodage spécifique décrit ci-après. Le codage de la valeur L s'effectue en fonction de sa classe d'appartenance, par le codeur par classe à résolution binaire variable 3. Le principe de codage mis en oeuvre par ce codeur est représenté à la figure 2. L'information à coder L provenant du codeur par plage 2 est transmise simultanément à un circuit de détection de classe 6 et un circuit de codage à résolution variable 7, ce dernier fournissant la valeur codée de L, L, transmise en sortie du codeur 3. Le circuit de détection de classe est, dans notre exemple, compose de 5 comparateurs 8 spécifiques à chacune des classes et recevant en parallèle les informations transmises à l'entrée du codeur 3, c'est à dire la valeur L (codée en binaire). Chaque comparateur possède trois sorties correspondant respectivement à une information en entrée du comparateur inférieure aux limites, supérieure aux limites ou dans les limites de la classe (ou intervalle) spécifique à ce comparateur. Les sorties des comparateurs sont reliées à un circuit logique 9 qui regroupe toutes les informations provenant des comparateurs. Il possède 5 sorties, qui sont également les sorties du circuit de détection de classe 6, une sortie pour chaque classe, reliées à cinq entrées du circuit de codage à résolution binaire variable 7. Ce circuit de codage 7 est composé d'un transcodeur 10 qui reçoit en entrée l'information correspondant à 7 2783661 la valeur L (codée en binaire) et les cinq entrées indiquant à quelle classe appartient cette valeur. Les cinq sorties du transcodeur sont reliées à cinq entrées d'un multiplexeur 11 dont la sortie est la sortie du codeur 3. Cette sortie fournit un flux de données codées L correspondant au flux des données d'entrée L. Avant de détailler le fonctionnement du circuit, décrivons le principe de codage à résolution binaire variable appliqué au codage par classe. Une zone dans laquelle peut évoluer la valeur L est prédéfinie à partir d'une valeur m tel que 2 2m-1 corresponde à la valeur maximum possible de codage de L (nombre maximum de répétition du symbole). Cette zone est décomposée en m+1 intervalles de valeurs, chaque intervalle étant délimité par les valeurs 22n et 22n+2-1, n variant de 0 à m, un intervalle correspondant à une classe. Le principe de codage par classe à résolution binaire variable consiste à attribuer à chaque classe une résolution différente. Cette résolution binaire correspond au nombre de bits pour le codage de L et dépend donc de la classe à laquelle la valeur L appartient. Il s'agit en fait de ne prendre en compte, dans le mot binaire L, que les bits "efficaces" de codage, c'est à dire d'ignorer les bits de plus fort poids à zéro, sachant que la non transmission de ces bits correspondra à la valeur zéro. Le codage est à faible résolution binaire pour des valeurs de L faibles (n=O, 1) et à plus forte résolution binaire pour des valeurs plus élevées (n=2, 3, 4). Les différentes classes sont identifiées par l'intermédiaire d'un code particulier appelé code d'identification (le mot binaire pour le codage de L, sans tenir compte des bits d'identification sera représenté par le symbole ). Ce code, qui est un nombre de zéros transmis avant le mot de codage , permet donc d'identifier le nombre de bits sur lequel est codée la valeur de la plage L qui suit immédiatement. Les mots de codage de L, représentés par le symbole L, sont donc composés de deux parties: une première partie constituée de zero et permettant d'identifier la classe à laquelle appartient la valeur L et une deuxième partie codant en base 2 cette valeur, avec le nombre minimum de bits nécessaires à ce codage. Un exemple est indiqué dans le tableau ci-après pour une valeur de m égale à 4, L pouvant alors avoir pour valeur maximale 1023: Classe codage par classe ( ) code d'identification résolution 1-3 01-11 - 2 4-15 0100-1111 00 6 8 2783661 16-63 010000-111111 0000 10 64-255 01000000-11111111 000000 14 256-1023 0100000000-1111111111 00000000 18 Les différentes classes de codage R,=22", 22n+2-1 sont 1-3, 4-15, 16- 63, 64-255, 256-1023. La colonne "codage par classe" concerne le mot binaire utilisé pour le codage de la valeur L représentant le nombre de répétitions du symbole S. La colonne "code d'identification" représente les bits d'identification de la classe. La colonne "résolution" indique le nombre de bits nécessaire au codage de L (il s'agit du mot de codage complet L regroupant le code d'identification et le mot de codage ). Par exemple, une valeur L= 5 est codée par un mot binaire de 6 bits (00.0101) alors que la valeur 49 est codée par un mot binaire de 10 bits (0000.110001). Le point est simplement une indication de la juxtaposition de deux codes différents, le code d'identification suivi du codage . Comme il n'existe pas de valeur L correspondant à un mot de codage commençant par deux zéros (L est au moins égal à 1), l'identification de chacune des parties ou plus exactement la détection du code d'identification ne pose pas de problème au niveau du décodage. Revenons au fonctionnement du dispositif représenté à la figure 2. Cinq comparateurs 8 correspondant à chacune des cinq classes reçoivent en parallèle l'information L sur leur entrée. Chaque comparateur possède trois sorties et active la première, deuxième ou troisième sortie selon que la valeur reçue en entrée est inférieure, dans l'intervalle ou supérieure à l'intervalle correspondant à la classe attribuée à ce comparateur. Ces informations sont transmises au circuit logique 9 qui active la sortie correspondant à la classe à laquelle appartient l'information L (il s'agit bien sûr d'un exemple de réalisation et il pourrait tout aussi bien être envisagé de transmettre directement en sortie du circuit 6, les deuxièmes sorties de chaque comparateur). Le circuit de détection de classe transmet donc vers le circuit de codage à résolution variable 7, sur une de ses cinq sorties, une information correspondant à la classe à laquelle appartient la valeur L. Cette information est reçue par le circuit 10 pour chaque valeur L reçue en entrée du circuit de codage 7. Le transcodage effectué par le circuit de transcodage 10 consiste d'abord à obtenir en effectuant une troncature du mot binaire de codage de L reçu par le codeur 3 et composé à l'origine de 10 bits pour le codage des 9 2783661 valeurs 1 à 1023. Cette troncature permet de conserver les 2, 4, 6, 8 ou 10 bits de plus faible poids de ce mot de codage, selon que l'information de classe correspondante est respectivement la 1ère, 2ème, 3ème, 4ème ou 5ème classe. Il consiste ensuite à rajouter le code d'identification devant le mot binaire ainsi obtenu, à savoir 0, 2, 4, 6 ou 8 bits de valeur zéro selon que l'information de classe correspondante est respectivement la 1ère, 2ème, 3ème, 4ème ou 5ème classe, donnant des mots de codage L sur 2, 6, 10, 14 ou 18 bits. Les mots binaires transcodés sont transmis sur une des entrées du multiplexeur 11 qui fournit en sa sortie, le codage L de l'information L présentée à l'entrée. Le codeur 3 délivre ainsi en sortie une succession de mots de codage L correspondant aux valeurs de L reçues en entrée. Le codage de la valeur du symbole S est effectué par le codeur de symbole 4. Le principe de codage de la valeur S est détaillé à la figure 3. L'entrée du codeur 4 est reliée à l'entrée d'un circuit de génération du dictionnaire 12 et reçoit la valeur binaire du symbole S. Les 7 sorties de ce circuit sont reliées à 7 entrées d'un circuit de transcodage 13 dont la sortie est la sortie du codeur de symbole 4. L'entrée du codeur 4 est reliée à une première entrée d'un comparateur 14 et à une première entrée d'une mémoire vive appelée dictionnaire 15. La sortie du comparateur est reliée à l'entrée horloge d'un compteur 8 bits 16. La sortie de ce compteur est reliée à l'entrée adresses de la mémoire vive 15. Elle est également reliée à une première entrée d'un circuit logique 18 et à l'entrée d'un circuit de mémorisation 17, la sortie duquel est reliée à la deuxième entrée du circuit logique 18. Ce circuit logique possède 7 sorties qui sont les sorties du circuit de génération du dictionnaire 12. Elles sont reliées à 7 entrées d'un circuit de transcodage 13 qui fournit en sa sortie le codage du symbole S, soit 3. La procédure de codage est basée essentiellement sur l'attribution d'une adresse dans le dictionnaire. Ainsi, chaque fois qu'un symbole est reçu par le circuit de génération du dictionnaire 12, sa valeur binaire est comparée à toutes les valeurs mémorisées dans le dictionnaire 12 par l'intermédiaire du comparateur 14. Pour ce faire, un circuit de gestion, non représenté sur la figure, commande le compteur qui fait défiler les adresses en entrée du dictionnaire 15 à chaque arrivée d'un nouveau symbole et chaque valeur mémorisée correspondant à ces adresses est comparée à la valeur binaire du symbole reçu. Lorsque le résultat de la comparaison est négatif, le compteur 8 bits est incrémenté par rapport à l'adresse du dernier symbole mémorisé et le 2783661 nouveau symbole est mémorisé à cette nouvelle adresse et est ajouté au dictionnaire. Le circuit 17 mémorise l'adresse la plus haute utilisée pour la mémorisation d'un symbole dans le dictionnaire et en particulier le nombre t de bits "significatifs" sur lequel est codé cette adresse, c'est à dire le nombre minimum t tel que 2t-1 est supérieur ou égal à la valeur binaire de l'adresse la plus haute, la valeur minimale de t étant prise égale à 2 (la valeur t ne peut donc diminuer). Il transmet au circuit 18 la valeur de t de manière à ce que ce dernier ne transmette qu'un nombre de bits, ceux de plus faible poids, correspondant au nombre t de bits significatifs codant l'adresse du dernier symbole mémorisé. A chaque valeur de t, t étant compris entre 2 et 8 pour une mémorisation possible de 256 valeurs dans le dictionnaire, une sortie de ce circuit logique est affectée. Les sorties sont reliées au circuit de codage 13 qui effectue les transcodages suivants. L'information binaire reçue sur la première entrée et donc sur deux bits est transmise telle quelle en sortie. Lorsque l'information binaire commute sur la deuxième entrée, indiquant un codage de l'adresse du dictionnaire sur 3 bits, une série de 10 bits à la valeur zéro précède le codage de ce premier mot binaire reçu codé sur 3 bits. A chaque fois que l'information binaire commute d'une entrée à l'autre, indiquant un codage sur un nombre de bits plus élevé, une série de 10 bits à la valeur zéro est rajoutée devant le premier mot binaire reçu sur cette entrée. Le dictionnaire code une adresse (un symbole) par une nouvelle adresse. Il contient uniquement les symboles utiles, c'est à dire les adresses correspondant aux couleurs exploitées dans la palette des couleurs pour le codage OSD. Par exemple, une région pour laquelle le symbole est codé sur 8 bits a une palette de 256 couleurs. Si seulement 64 couleurs différentes parmi les 256 sont utilisées dans cette région, le dictionnaire contient alors 64 symboles. Le codage de chaque symbole se fait donc à partir de sa propre adresse dans le dictionnaire. Il exploite un codage à résolution binaire variable, l'information concernant cette résolution étant fournie par l'adjonction de zéros. Dans l'exemple précédent, il y a 64 couleurs et les symboles codés ont une résolution binaire de 6 bits au lieu de 8 bits. Par cette seule opération, un gain de 25 % est obtenu. En fait, beaucoup de région OSD utilisent moins de 256 couleurs, rendant ce codage efficace. Donnons ci-après un exemple de fonctionnement: 11 2783661 Au début du cycle de lecture séquentielle du symbole, à partir des données bitmap, il est supposé que la région OSD a moins de 4 couleurs différentes, le premier symbole codé ayant ainsi une résolution de 2 bits. Chaque fois qu'un nouveau symbole non déjà codé, c'est à dire non existant dans le dictionnaire apparaît, il est mémorisé dans le dictionnaire et l'adresse est incrémentée. Le premier symbole est mémorisé à l'adresse 0 et son code est donc la valeur 00 quelle que soit la valeur de ce premier symbole. Lorsqu'un nouveau symbole est lu, il est mémorisé à l'adresse 01, son code est par conséquent 01. Le quatrième nouveau symbole est traité de la même manière et son code est 11. Si les autres valeurs lues sont celles mémorisées dans le dictionnaire, leur code sera l'adresse comprise entre 00 et 11. La résolution binaire est alors de 2 bits au lieu des 8 bits sur lesquels sont codés les symboles reçus. Ceci jusqu'à ce qu'un nouveau symbole différent des quatre mémorisés dans le dictionnaire soit reçu. Alors, la résolution est incrémentée et passe à 3 bits pour tous les autres symboles rencontrés. Si un 6 ème symbole lu existe déjà dans le dictionnaire à l'adresse 01, son code sera maintenant 001. Le procédé continue jusqu'à ce que le dictionnaire contienne plus de 128 couleurs. A partir de cette étape, tous les symboles ont une résolution de 8 bits. Afin d'effectuer un décodage sans ambiguïté du symbole, un code spécial est donc généré chaque fois que la résolution de l'adresse du dictionnaire est incrémentée. Dans le pire cas, ce code sera généré 6 fois. Ce code est une séquence de 10 zéros. En effet, seuls 9 zéros consécutifs (dont 8 pour le code d'identification) sont nécessaires pour le codage par plage L, pour des valeurs supérieures à 255. L'algorithme de codage du symbole S est représenté à la figure 4. L'étape 20 consiste en l'initialisation des différents paramètres. Un dictionnaire D est crée, avec, à l'origine, aucune donnée mémorisée. Notations: Le symbole S est codé sous la forme c ou z.c. z est le code d'identification correspondant à 10 zéros. c correspond a l'adresse binaire à laquelle est mémorisée le symbole (nombre de bits variable). t est le nombre de bits utilisé pour le codage de c. i est l'index ou l'adresse du dictionnaire D à laquelle est mémorisé ou retrouvé le symbole reçu en entrée du codeur. 12 2783661 n est le nombre de symboles (ou couleurs) mémorisés dans le dictionnaire. A l'initialisation, la valeur t est forcée à 2, l'index i est positionné à l'adresse 1 (forme binaire 01). Lors de la réception du premier symbole a, sa valeur est mémorisée à l'adresse 1 du dictionnaire. D(1) = a, n= 1. Un nouveau symbole est lu à l'étape suivante 21. L'étape 22 vérifie si ce symbole appartient déjà au dictionnaire D. Dans l'affirmative, l'étape 23 est déroulée qui va chercher la valeur de l'adresse i dans le dictionnaire pour laquelle le mot mémorisé correspond à ce symbole. L'étape suivante 24 code le symbole S avec la valeur binaire de i. c = forme binaire de l'adresse i. Si le symbole n'appartient pas au dictionnaire, l'étape 25 est déroulée après l'étape 22. Cette étape incrémente la valeur n et le nouveau symbole est mémorisé à l'adresse i = n. L'étape suivante 26 vérifie si la nouvelle valeur n nécessite un bit de codage supplémentaire. Ainsi, si n est supérieur à la valeur 2', t étant le nombre de bits sur lequel est codée l'adresse du dernier symbole entré dans le dictionnaire, I'étape 27 est effectuée. La valeur t est incrémentée puisque la nouvelle adresse est codée sur un bit supplémentaire. La résolution binaire de c est incrémentée en conséquence et un code z d'identification de 10 zéros précède cette valeur c. Les opérations suivantes sont effectuées à cette étape 27: génération de 10 zéros t = t+1 résolution binaire de c = t L'étape 28 succède à l'étape 27, étape dans laquelle la valeur n est donnée à l'indice i et le symbole a est mémorisé dans le dictionnaire à l'adresse i. i=n D(i) = a Si,à l'étape 26, il est constaté que n est inférieur ou égal à la valeur 2t, l'étape suivante est directement l'étape 28. L'étape succédant à l'étape 28 est l'étape 24 qui code donc la valeur du symbole par la valeur binaire de l'adresse i, précédée de 10 zéros si l'on est passé par l'étape 27. 13 2783661 La figure 5 montre un exemple de codage à partir d'un flux de données "bitmap" à coder référencé 30 sur la figure. L correspond au nombre de répétitions du symbole et S correspond à la valeur du symbole. est le mot binaire de codage du symbole S. Au fur et a mesure du codage du flux de données "bitmap" 30, le dictionnaire D se remplit des valeurs des symboles S et les adresses de mémorisation sont utilisées pour le codage de ces symboles. La valeur à coder 32 est la cinquième valeur différente des précédentes, à mémoriser dans le dictionnaire. A partir de cette valeur dans le flux de données, le mot binaire de codage S est donc un mot d'au moins 3 bits. L est le mot binaire de codage de la valeur L. Lorsque la valeur de L est dans l'intervalle 1-3, le mot binaire de codage L est un mot de 2 bits. Lorsque la valeur de L est dans l'intervalle 4-15, le mot binaire de codage L est un mot de 6 bits, les deux premiers bits à zéro pour indiquer la résolution du codage, ici sur quatre bits. Le flux de données comprimé, référencé 31, est représenté en bas de la figure. Il correspond à la succession des mots binaires L et S pour chaque plage. Chaque fois qu'une nouvelle valeur de S est rencontrée dans le flux de données 30, un nouveau couple L, S est codé. Lors du codage du symbole de valeur 32, la résolution binaire est incrémentée, le codage se faisant à partir de ce point sur 3 bits. En conséquence, dans le flux binaire, une succession de 10 zéros est transmise juste avant le codage du couple L, S correspondant. Les procédés et circuits de décodage sont décrits ci-après. Les données "bitmap" codées, disponibles en sortie du codeur OSD précédemment décrit, sont stockées dans une mémoire RAM du décodeur vidéo, mémoire accessible par le codeur OSD et le décodeur OSD intégrés dans ce décodeur vidéo comme décrit plus loin. Les informations stockées dans cette mémoire sont également la palette des couleurs, les coordonnées définissant les zones OSD telles que reçues par le décodeur vidéo, et également le dictionnaire construit par le codeur OSD et transféré dans la RAM. Le dispositif de décodage 32 selon l'invention est représenté à la figure 6. Le bus associé à la mémoire RAM du décodeur vidéo est relié à une mémoire FIFO 33 et à une mémoire ou table de conversion 35 de capacité celle du dictionnaire précédemment décrit. Les données en sortie de la mémoire FIFO sont transmises à un circuit d'identification de champs 34. Une 14 2783661 première sortie de ce circuit est transmise à un circuit de décodage par plage 37. Une deuxième sortie est reliée à une première entrée d'un circuit d'extraction de symbole 36. La mémoire 35, qui reçoit également les informations provenant du bus de la mémoire RAM, est reliée à une deuxième entrée du circuit d'extraction de symboles 36. La sortie de ce dernier circuit est reliée à une deuxième entrée d'un circuit de génération de la séquence de symboles 38. La sortie du circuit de décodage par plage 37 est reliée à la première entrée de ce circuit dont la sortie est la sortie du décodeur 32 représenté en pointillés. Ainsi, dans un premier temps, les données du dictionnaire créé au codeur lors du codage des données OSD et mémorisées dans la mémoire RAM sous forme de table de conversion sont transférées, via le bus mémoire RAM, vers la mémoire 32 afin de permettre au décodeur d'exploiter ces informations directement à partir de cette mémoire lors du calcul des symboles, c'est à dire sans nécessiter des accès à la mémoire RAM. Le flux de données en mode point codées (bitmap encoded bitstream ou BEB selon l'appellation anglaise), ou données "bitmap" codées, mémorisées dans la RAM du décodeur vidéo, est transmis à la mémoire FIFO. Cette mémoire, qui a un rôle de régulation, transmet ce flux de données vers le circuit d'identification de champs 31. Ce circuit permet de détecter les séquences de zéros et d'identifier les champs de codage. La mémoire FIFO fournit un flux de données constitué de trois parties successives, selon le protocole de compression décrit précédemment: - un champ de code - un champ longueur de plage. - un champ symbole Ces champs sont de taille variable. Le champ de code qui a une taille maximum de 19 bits correspond à la séquence de 10 zéros insérée pour indiquer la changement de résolution binaire de c (codage de S) suivie du code d'identification de la classe (8+1 zéros au maximum) indiquant la résolution binaire de (codage de L). Il permet donc de déterminer le nombre de bits n1 sur lequel est codé la valeur de L et celui ns sur lequel est codé l'adresse du symbole. Lorsque le nombre de zéros dans le champ de code est inférieur à 10, la séquence de zéros correspondant, par exemple p zéros, est uniquement relative au codage de L. Lorsque ce nombre est supérieur à 10, les 10 premiers 2783661 zéros indiquent que la résolution binaire de c est incrémentée et le nombre p de zéros restant de la séquence est relatif au codage de L. La valeur de p indique le nombre de bits n. sur lequel est codé la longueur de plage: - si p est pair, n. = p + 2 - si p est impair, ni = p. Une fois les valeurs de ni et ns calculées, les champs symbole et longueur de plage peuvent être identifiés. Les valeurs correspondant à ces champs peuvent alors être extraites. Ainsi, le circuit d'identification de champs 34 extrait les mots binaires codés du flux correspondant au codage de la plage pour les transmettre sur une première sortie, vers le circuit de décodage par plage 37 et les mots binaires codés du flux correspondant au codage du symbole pour les transmettre sur une deuxième sortie, vers le circuit d'extraction du symbole 36. Le circuit de décodage par plage fournit en sa sortie la valeur L. Le circuit d'extraction de symboles va chercher, à partir de l'adresse reçue du circuit d'identification de champs 34, la valeur binaire du symbole S mémorisée à cette adresse dans la mémoire 35. Le circuit de génération de la séquence de symboles 38 reçoit ces valeurs L et S et donne sur sa sortie le flux de données correspondant à chaque valeur de S répétée L fois. Un algorithme de décodage mis en oeuvre par ce décodeur OSD est représenté à la figure 7. Une première étape 40 consiste en la lecture et le transfert du dictionnaire mémorisé dans la mémoire RAM du décodeur vidéo vers la mémoire 32 du décodeur OSD. Le nombre de bits t pour le codage du symbole c est initialisé à 2. L'étape suivante 41 détecte la séquence de zeros dans le flux de données transmis par la mémoire FIFO et mémorise le nombre n de zéros successifs tant que ce nombre est inférieur à 10. Dés que ce nombre est égal à 10 ou dés que la sequence de zéros est terminée, l'étape 42 est déclenchée qui va distinguer ces deux cas: -si n a atteint la valeur 10, l'étape suivante 43 incrémente la valeur de t utilisée pour le codage de c puis l'étape 41 est poursuivie et mesure le nouveau nombre de zéros n restant après les 10 premiers zéros détectés. -si n est inférieur à 10, l'étape 44 effectue le décodage par plage. Pour ce faire, le nombre de zéros inférieur à 10 ou le nombre de zeros restant si l'on est passé par l'étape 43, nombre appelé p précédemment, est exploité 16 2783661 pour déterminer le nombre de bits, successifs à ces zéros, à prendre en compte pour le décodage de L, ce nombre étant fonction de la parité de p comme précédemment indiqué. Après le décodage de la valeur de la plage L, I'étape suivante 45 lit le nombre de bits t qui succède aux bits de codage de la plage pour déterminer la valeur c. L'étape 46 va rechercher ensuite dans la mémoire 32 le contenu de l'adresse c qui est la valeur de S. La figure 8 donne un exemple de décodage d'un flux de données codé selon l'invention, flux de données référencé 47 sur la figure. Au départ, la valeur ns est initialisée à 2. Le champ de code correspond à un seul zéro. En conséquence, la valeur de ns reste égale à 2 et la valeur de n. est égale à 1 (p =1). Le champ longueur de plage contient la valeur 1 et le champ symbole contient la valeur 00. En conséquence, la valeur de L est égale à 1 et la valeur de S est le contenu du dictionnaire à l'adresse 00 soit 6. Le champ de code suivant contient une seule valeur zéro, les longueurs des champs sont donc inchangées et la valeur du symbole se trouve à l'adresse 01 du dictionnaire. Lorsqu'une succession de zéros supérieure ou égale à 10 est rencontrée, la résolution binaire pour le codage de L change. Dans notre exemple apparaît une succession de 13 zéros. Ainsi, ns est incrémenté et S se lit sur 3 bits. Les 3 zéros succédant aux 10 bits à zéro indiquent que le champ longueur de plage à une dimension de 3 bits. L est donc codée par les 3 bits 101 et S par les 3 bits suivants 100. Ainsi, la valeur 32 trouvée à l'adresse 100 est répétée 5 fois. Le flux de données décodé ainsi obtenu est représenté en bas de la figure sous la référence 48. Il correspond à la succession des mots binaires S tels que reçus par le décodeur vidéo, c'est à dire avant codage OSD et mémorisation dans la mémoire RAM. La figure 9 donne un exemple de configuration d'un codec constitué d'un codeur OSD et d'un décodeur OSD implanté dans un décodeur vidéo. Le codec 50 représenté sur la figure en pointillés est relié à la mémoire RAM 49 du décodeur vidéo par un bus mémoire. Les données "bitmap", les coordonnées des régions OSD et la palette de couleurs, données reçues par le décodeur vidéo et relatives aux informations OSD, sont transmises sur une entrée du codec OSD, par exemple par l'intermédiaire d'une interface d'un microcontrôleur du décodeur vidéo, non représentée sur la figure. Cette entrée est reliée a l'entrée d'un circuit 17 2783661 contrôleur de bus 51 et ces informations OSD traversent le circuit contrôleur de bus 51 qui dirige, par une première sortie, les données "bitmap" vers le codeur OSD 52 et par une deuxième sortie, la palette des couleurs et les coordonnées OSD vers une première entrée d'un circuit d'entrée/sortie 53. La sortie du codeur OSD 52 est reliée à une deuxième entrée du circuit d'entrée/sortie 53. Ce circuit 53 échange, par l'intermédiaire d'une liaison bidirectionnelle, les données avec l'extérieur du codec, en particulier la mémoire RAM. Le circuit 53 est relié, par une première sortie, au décodeur OSD 54 et par une deuxième sortie, vers une première sortie du codec 50. La sortie du décodeur OSD 54 est reliée à une deuxième sortie du codec 50. La première sortie de ce codec 50 est reliée à une première entrée d'une mémoire 55 du décodeur vidéo. La deuxième sortie de ce codec 50 est reliée à une deuxième entrée de la mémoire 55. Enfin, cette mémoire 55 est reliée à un circuit de génération des signaux de luminance et de chrominance 56 qui fournit en sortie les informations Y U, V. Ainsi, les données "bitmap" reçues par le décodeur vidéo sont transmises vers le codeur OSD 52 via le contrôleur de bus 51 et les données codées en sortie de ce codeur sont transmises, via le circuit d'entrées/sorties 53 vers la mémoire RAM du décodeur vidéo pour y être stockées. Les autres données OSD concernant la palette et les coordonnées sont également transmises vers la mémoire RAM via le contrôleur de bus et l'interface d'entrées/sorties pour y être stockées dans des zones mémoire. Le dictionnaire qui a été créé dans le codeur est également transféré vers la mémoire RAM. Toutes ces informations, comprimées pour les données "bitmap", non comprimées pour la palette, les coordonnées et le contenu du dictionnaire, sont exploitées par le décodeur OSD 54. Celui-ci reçoit, via l'interface d'entrées/sorties 53, le flux de données "bitmap" codées ou BEB (bitmap encoded bitstream en anglais) ainsi que le dictionnaire. Ces données sont décodées par ce décodeur OSD 54 qui transmet en sortie, vers la mémoire CLUT 55 et pour chaque pixel i, une adresse (maintenant non codée) qui est l'adresse de la palette contenant la couleur correspondant à ce pixel. Cette palette, mémorisée dans la RAM, a, préalablement au décodage des données "bitmap", été transmise, via l'interface d'entrées/sorties 53 vers cette mémoire 55. Les données numériques de luminance et chrominance sont transmises en sortie de la mémoire 55 vers le circuit d'affichage (Display Unit) 56 qui reçoit par ailleurs les informations vidéo. 18 2783661 Il a été décrit un codec dans le cas ou les informations OSD sont transmises vers le décodeur. Dans le cas ou ces informations sont résidentes, les données "bitmap" résidentes peuvent être des données "bitmap" codées par ailleurs et il n'est donc pas nécessaire d'implanter un codeur OSD dans le décodeur vidéo. Alors seul le décodeur OSD est nécessaire dans le décodeur vidéo pour le fonctionnement de l'invention. L'invention a été décrite dans le cadre d'un décodeur vidéo de type MPEG II. Il s'agit bien sûr d'un exemple de réalisation et toute implantation d'un tel codec dans un quelconque décodeur, téléviseur, magnétoscope ou autre ne sortirait pas du domaine de l'invention. 19 2783661 REVENDICATIONS 1 Procédé de compression de données graphiques pour le codage d'images en mode points, données constituées d'une succession d'adresses d'une table de conversion appelées symboles S (données "bitmap"), caractérisé en ce qu'il comprend les étapes suivantes: - un codage par plage (2) des symboles pour donner, pour chaque plage de symboles successifs identiques, un nombre L correspondant au nombre de symboles identiques, associé au symbole S, - un codage à résolution binaire variable de L (3) en fonction de la valeur de L. 2 Procédé de compression de données graphiques pour le codage d'images en mode points, données constituées d'une succession d'adresses d'une table de conversion appelées symboles S (données "bitmap"), caractérisé en ce qu'il comprend les étapes suivantes: - un stockage des symboles différents dans un dictionnaire (16), - un codage du symbole à partir de son adresse dans le dictionnaire (16), - un codage à résolution binaire variable (13) de l'adresse dans le dictionnaire servant à coder le symbole. 3 Procédé de compression selon la revendication 1, caractérisé en ce qu'il comprend également les étapes suivantes: - un stockage des symboles différents dans un dictionnaire (16), - un codage du symbole à partir de son adresse dans le dictionnaire (16), - un codage à résolution binaire variable (13) de l'adresse dans le dictionnaire servant à coder le symbole. 4 Procédé selon l'une des revendications précédentes, caractérisé en ce que les données graphiques sont des données OSD et en ce que les images sont des images palettisees. 5 Procédé selon la revendication 3, caractérisé en ce que la compression des données "bitmap" réalise un flux de données codées comportant: 2783661 - un champ de code de dimension variable constitué d'un premier champ définissant la dimension d'un champ longueur de plage et un deuxième champ définissant la dimension d'un champ symbole, -un champ longueur de plage pour le codage de L dont la dimension correspond à la résolution binaire pour le codage de L, - un champ symbole pour le codage de S dont la dimension correspond à la résolution binaire pour le codage de S. 6 Procédé selon la revendication 5, caractérisé en ce que: - la résolution binaire pour le codage de L est définie par la transmission, avant les bits de codage de L, de zéros dont le nombre est fonction du nombre de bits sur lequel est codée cette valeur L, - le changement de résolution binaire pour le codage du symbole à partir de l'adresse dans le dictionnaire est défini par la transmission, avant les bits de codage de l'adresse, d'un nombre prédéfini de zéros (27) dont la valeur est supérieure au nombre maximum de zéros successifs utilisés pour le codage de L 7 Dispositif de compression de données graphiques pour le codage d'images en mode points, données constituées d'une succession d'adresses d'une table de conversion appelées symboles S (données "bitmap") sous forme d'un flux de données, caractérisé en ce qu'il comprend un codeur par plage (2) qui reçoit le flux de données pour fournir, pour chaque plage, un nombre L associé à un symbole S, un codeur par classe à résolution binaire variable (3) pour le codage de L, un codeur de symbole à résolution binaire variable (4) comprenant un dictionnaire (15) pour la mémorisation des symboles différents et un codeur a résolution binaire variable (13) de l'adresse dans le dictionnaire, pour le codage de S. 8 Dispositif de décompression de données graphiques comprimées selon le procédé décrit à la revendication 3, caractérisé en ce qu'il comprend une mémoire (35) pour la mémorisation du dictionnaire, un circuit d'identification de champ (34) recevant le flux de données comprimées pour la détection de la résolution binaire de L et S et l'extraction des valeurs codées de L et S, un circuit d'extraction de symbole S (36) pour le décodage de la valeur codée de S, le circuit d'extraction de symbole étant relié à la mémoire (35) pour transmettre la valeur codée de S en tant qu'adresse et récupérer le contenu de 21 2783661 l'adresse, un circuit de décodage par plage (37) pour le décodage de la valeur codée de L, un circuit de génération de la séquence de symboles (38) recevant la valeur décodée de plage L pour le symbole S et la valeur décodée du symbole S pour transmettre, dans le flux, L fois la valeur S. 9 Décodeur vidéo numérique, caractérisé en ce qu'il comporte un dispositif de compression des données graphiques (1) selon la revendication 3 et un dispositif de décompression des données graphiques (32) selon la revendication 8. Décodeur vidéo numérique, caractérisé en ce qu'il comporte un dispositif de décompression des données graphiques selon la revendication 8 et en ce qu'il comporte une mémoire RAM dans laquelle sont stockées les données "bitmap" comprimées selon le procédé de la revendication 3.