Brevet FR2932637A1 — publié le 20091218

La présente invention concerne un procédé et un dispositif de codage d'une séquence d'images. Elle s'applique, notamment au codage vidéo et, plus particulièrement au codage conforme au standard de compression vidéo SVC (acronyme de Scalable Video Coding pour codage vidéo adaptable). Le standard de compression vidéo SVC introduit des fonctionnalités d'adaptabilité aussi appelée �scalabilité � au-dessus du standard H264/AVC (acronyme de Advanced Video Coding pour codage vidéo avancé). Une séquence vidéo peut être codée en introduisant différents niveaux spatiaux, temporels et de qualité dans le même train ou flux binaire (en anglais � bitstream �). Le logiciel de référence SVC, appelé JSVM (acronyme de Joint Scalable Video Model pour modèle vidéo adaptable joint) comprend notamment un codeur SVC. Ce codeur est spécifié de telle manière qu'une quantité importante de mémoire soit allouée au codage d'un flux SVC avec plusieurs couches de scalabilité. La consommation de mémoire du codeur JSVM est telle qu'il est impossible de coder un flux SVC avec au moins deux couches de résolution spatiale � 4CIF � (de résolution 704 x 576) et des groupes d'images longs de 32 images sur un ordinateur personnel courant disposant de deux giga-octets de mémoire vive. Cette consommation de mémoire élevée est due aux nombreuses mémoires tampons (� buffers �) d'images allouées par le codeur avant de commencer à coder des images. En effet, le codeur de référence a été conçu de façon à coder conjointement toutes les couches de scalabilité du flux. Pour ce faire, un objet appelé � LayerEncoder� est instancié pour chaque couche de scalabilité spatiale et chaque couche de qualité. Chaque objet de type LayerEncoder est dédié au codage d'une couche de scalabilté et travaille sur une base de groupe d'images. En pratique, cela mène, pour chaque couche, à l'allocation d'au moins 407 buffers d'images dont la taille correspond à la résolution spatiale de la couche considérée. Pour une couche de résolution 4CIF, cela implique une allocation de 660 Méga-octets par couche. Par conséquent, lorsqu'on essaie de coder deux couches de résolution 4CIF dans le même flux SVC, plus de 1,3 giga-octets sont alloués au commencement du programme de compression vidéo, ce qui bloque le processus de codage. Ce problème de consommation de mémoire excessive est inhérent au JSVM, mais existe de façon plus générale pour tout codeur vidéo SVC qui tenterait de coder simultanément toutes les couches de scalabilité d'un flux SVC, en travaillant sur des groupes d'images. On connait le document US 2007/0230914 qui propose une méthode pour coder un flux vidéo scalable comprenant une couche de base compatible MPEG-2 et une couche de raffinement au-dessus de la couche de base. Le codage de la couche de raffinement inclut une étape de classification des blocs de la couche de base en fonction de leur texture. On connait aussi le document US 2001/0024470, qui divulgue une méthode de codage d'un flux vidéo scalable comprenant une couche de base (codée avec des techniques de prédiction temporelle) et une couche de raffinement à granularité fine. Dans chacun de ces documents, la prédiction inter-couche est effectuée via un décodage et une reconstruction complète de la couche de base puis un sur-échantillonnage spatial (pour la scalabilité spatiale) appliqués sur les images de la couche de base. Ces méthodes impliquent donc des images complètement décodées et reconstruites et donc une consommation de mémoire conséquente. La présente invention vise à remédier à ces inconvénients. A cet effet, la présente invention vise, selon un premier aspect, un procédé de codage d'une séquence d'images comportant au moins un groupe d'une pluralité d'images originales, en plusieurs couches d'adaptabilité, caractérisé en ce qu'il comporte, pour coder ledit groupe d'images originales, une étape de codage d'au moins une couche de base en fonction du groupe d'images originales à coder pour constituer un flux de données intermédiaire, une étape de stockage du flux intermédiaire dans un espace de stockage d'une mémoire de masse et, de manière itérative, pour chaque autre couche d'adaptabilité à coder : - une étape d'obtention de données de prédiction de la couche à coder, issues d'au moins une couche déjà codée, - une étape de codage de la couche à coder en mettant en oeuvre lesdites données de prédiction et le groupe d'images originales et - une étape d'ajout, dans l'espace de stockage, de la couche codée au flux intermédiaire. Ainsi, le flux intermédiaire est enrichi d'une couche d'adaptabilité à chaque itération de l'étape élémentaire de codage d'une couche d'adaptabilité. Cette étape élémentaire de codage d'une couche d'adaptabilité est ainsi successivement invoquée jusqu'à ce que le flux intermédiaire contienne l'ensemble des couches d'adaptabilité à coder et devienne le flux de données final. Par exemple, dans le cas de l'utilisation de l'objet �LayerEncoder�, puisqu'une seule couche d'adaptabilité est codée à la fois et que le résultat intermédiaire est stocké dans une mémoire de masse, un seul objet de type LayerEncoder est instancié à la fois. La modification d'architecture du codeur JSVM ainsi proposée réduit donc la consommation de mémoire vive nécessaire pour l'exécution du codage par rapport aux codeurs de l'art antérieur. La présente invention fournit ainsi une nouvelle architecture de codeur traitant une séquence d'images, couche par couche, en sauvegardant, entre les codages successifs de deux couches, un flux de données intermédiaire, jusqu'à ce que toutes les couches d'adaptabilité soient codées. Dans le cas de l'utilisation de l'objet � LayerEncoder �, les avantages de la présente invention comportent que : - la consommation mémoire est limitée en comparaison avec le codeur JSVM et - on peut coder un flux SVC avec plusieurs couches de scalabilité de résolution spatiale supérieure ou égale à 704 x 576, avec une taille de GOP (Group Of Pictures, pour groupe d'images) supérieure ou égale à 32 images en utilisant moins de deux giga-octets de mémoire vive. Selon des caractéristiques particulières, l'étape d'obtention de données de prédiction comporte une étape de sélection d'une couche codée déjà représentée par le flux intermédiaire, les données de prédiction étant obtenues depuis ladite couche sélectionnée. Ainsi, la couche sélectionnée constitue une couche de référence pour la couche à coder. Selon des caractéristiques particulières, l'étape d'obtention de données de prédiction comporte une étape de décodage partiel du flux de données intermédiaire sans compensation en mouvement. Les données de prédiction fournies par ce décodage partiel consistent, par exemple, en des macroblocs INTRA reconstruits, des modes de codage de macroblocs, des partitions de macroblocs, des vecteurs de mouvements, des résidus temporels, ainsi que des indices d'images de référence pour la prédiction temporelle. Selon des caractéristiques particulières, le procédé objet de la présente invention, tel que succinctement exposé ci-dessus comporte, en outre, pour au moins une couche d'adaptabilité, une étape de stockage dans l'espace de stockage d'une mémoire de masse de données de prédiction non codées et, pour au moins une autre couche d'adaptabilité, au cours de l'étape d'obtention de données de prédiction, on lit lesdites données de prédiction. Ainsi, on évite de décoder les données de prédiction et on augmente donc la rapidité de codage de la séquence d'images. Selon les caractéristiques des deux derniers paragraphes ci-dessus, les données de prédictions sont stockées dans l'espace de stockage d'une mémoire de masse. L'avantage en est que lors du codage de la couche d'adaptabilité en fonction des données de prédiction, seules les données de prédiction concernant l'image en cours de codage sont lues depuis l'espace de stockage de la mémoire de masses. La consommation de mémoire vive liée à l'allocation de ces données de prédiction est donc limitée. Selon des caractéristiques particulières, au cours de l'étape de codage de la couche d'adaptabilité en fonction des données de prédiction obtenues et du groupe d'images originales, on réalise une boucle de prédiction temporelle compensée en mouvement sur chaque groupe d'images originales à coder, puis on code des vecteurs de mouvement estimés et des résidus temporels et spatiaux. Selon des caractéristiques particulières, au cours de l'étape de codage de la couche d'adaptabilité en fonction des données de prédiction obtenues et du groupe d'images originales, on code les vecteurs de mouvement estimés et les résidus temporels et spatiaux comme des données de raffinement, en utilisant une prédiction inter-couches basée sur les données de prédiction obtenues au cours de l'étape d'obtention. Selon des caractéristiques particulières, le procédé objet de la présente invention réalise le codage de la même couche d'adaptabilité pour chaque groupe d'images de la séquence d'images avant le codage d'une autre couche d'adaptabilité. Selon un deuxième aspect, la présente invention vise un dispositif de codage d'une séquence d'images comportant au moins un groupe d'une pluralité d'images originales, en plusieurs couches d'adaptabilité, caractérisé en ce qu'il comporte un moyen de codage d'au moins une couche de base en fonction d'un groupe d'images originales à coder adapté à constituer un flux de données intermédiaire, un moyen de stockage du flux intermédiaire dans un espace de stockage d'une mémoire de masse et des moyens de traitement adaptés, de manière itérative, pour chaque autre couche d'adaptabilité à coder et pour ledit groupe d'images originales : - à obtenir des données de prédiction de la couche à coder, issues d'au moins une couche déjà codée, - à coder la couche à coder en mettant en oeuvre lesdites données 25 de prédiction et ledit groupe d'images originales et - à ajouter, dans l'espace de stockage, la couche codée au flux intermédiaire. Selon un troisième aspect, la présente invention vise un programme d'ordinateur chargeable dans un système informatique, ledit programme 30 contenant des instructions permettant la mise en oeuvre d'un procédé objet de la présente invention tel que succinctement exposé ci-dessus. Selon un quatrième aspect, la présente invention vise un support d'informations lisibles par un ordinateur ou un microprocesseur, amovible ou non, conservant des instructions d'un programme informatique, caractérisé en ce qu'il permet la mise en oeuvre d'un procédé objet de la présente invention tel que succinctement exposé ci-dessus. Les avantages, buts et caractéristiques particulières de ce dispositif, de ce programme et de ce support d'information étant similaires à ceux du procédé objet de la présente invention, tel que succinctement exposé ci-dessus, ils ne sont pas rappelés ici. D'autres avantages, buts et caractéristiques particulières de la présente invention ressortiront de la description qui va suivre, faite, dans un but explicatif et nullement limitatif, en regard des dessins annexes, dans lesquels : - la figure 1 représente, schématiquement, un mode de réalisation particulier du dispositif objet de la présente invention, - la figure 2 représente, sous forme d'un schéma fonctionnel, un codeur vidéo SVC connu dans l'art antérieur, - les figures 3a et 3b illustrent des séquences d'images SVC et des relations entre leurs images, - la figure 4 illustre, sous forme d'un logigramme, des étapes mises 20 en oeuvre dans un mode de réalisation particulier du procédé de codage objet de la présente invention et - les figures 5 et 6 illustrent, sous forme de logigrammes, des étapes mises en oeuvre dans des étapes illustrées en figure 4. Dans toute la description, on utilise indifféremment les termes 25 � adaptabilité � et � scalabilité � et les termes � train binaire � ou � flux de données �. On observe, en figure 1, que, dans un mode de réalisation particulier, le dispositif objet de la présente invention, prend la forme d'un micro-ordinateur 100 muni d'un logiciel implémentant le procédé objet de la présente invention et 30 de différents périphériques. Le dispositif est constitué ici d'un serveur adapté à transmettre des images codées à des clients (non représentés). Le micro-ordinateur 100 est connecté à différents périphériques, par exemple un moyen d'acquisition ou de stockage d'images 107, par exemple une caméra numérique ou un scanner, relié à une carte graphique (non représentée) et fournissant des informations d'image à coder et à transmettre. Le micro-ordinateur 100 comporte une interface de communication 118 reliée à un réseau 134 apte à recevoir des données numériques à coder et à transmettre des données codées par le micro-ordinateur. Le micro-ordinateur 100 comporte également un moyen de stockage de type mémoire de masse 112 tel que, par exemple, un disque dur. Le micro-ordinateur 100 comporte aussi un lecteur de mémoire externe 114. Une mémoire de masse externe, ou � clé � comportant une mémoire (par exemple une clé dite � USB � par référence à son port de communication) 116, comme le moyen de stockage de masse 112, peuvent contenir des données à traiter. La mémoire externe 116 peut aussi contenir des instructions d'un logiciel implémentant le procédé objet de la présente invention, instructions qui, une fois lues par le micro-ordinateur 100, sont stocké dans le moyen de stockage de masse 112. Selon une variante, le programme permettant au dispositif de mettre en oeuvre la présente invention est stocké en mémoire morte 104 (appelée � ROM �, acronyme de read only memory, en figure 1), qui est également une mémoire de masse. En seconde variante, le programme est reçu par l'intermédiaire du réseau de communication 134 et est stocké dans le moyen de stockage 112. Le micro-ordinateur 100 est relié à un micro 124 par l'intermédiaire de la carte d'entrée/sortie 122. Le micro-ordinateur 100 possède un écran 108 permettant de visualiser les données à coder ou de servir d'interface avec l'utilisateur, à l'aide d'un clavier 110 ou de tout autre moyen (souris par exemple). Bien entendu, la mémoire de masse externe 116 peut être remplacée par tout support d'information tel que CD-ROM (acronyme de compact disc û read only memory pour mémoire en lecture seule en disque compact) ou une carte mémoire. De manière plus générale, un moyen de stockage d'information, lisible par un ordinateur ou par un microprocesseur, intégré ou non au dispositif, éventuellement amovible, mémorise un programme mettant en oeuvre le procédé objet de la présente invention. Une unité centrale 120 (appelée � CPU �, acronyme de central processing unit, en figure 1) exécute les instructions du logiciel implémentant le procédé objet de la présente invention. Lors de la mise sous tension, les programmes permettant l'implémentation du procédé objet de la présente invention stockés dans une mémoire non volatile, par exemple la ROM 104, sont transférés dans la mémoire vive RAM 106 qui contient alors les instructions de ce logiciel ainsi que des registres pour mémoriser les variables nécessaires à la mise en oeuvre de l'invention. Un bus de communication 102 permet la communication entre les différents éléments du micro-ordinateur 100 ou reliés à lui. La représentation du bus 102 n'est pas limitative. Notamment, l'unité centrale 120 est susceptible de communiquer des instructions à tout élément du dispositif directement ou par l'intermédiaire d'un autre élément du dispositif. La figure 2 fournit un schéma bloc d'un codeur vidéo SVC générant trois couches de scalabilité. Ce schéma est organisé en trois étages 205, 240 et 275, respectivement dédiés au codage de chacune des couches de scalabilité générées. Chaque étage prend, en entrée, la séquence originale à coder, éventuellement sous-échantillonnée à la résolution spatiale de la couche de scalabilité codée par l'étage considéré, comme c'est le cas du premier étage 205 codant la couche de base. Au sein de chaque étage est mise en oeuvre une boucle de prédiction temporelle compensée en mouvement. Le premier étage 205 correspond au schéma de prédiction temporelle et spatiale d'un codeur vidéo non scalable H.264/AVC et est connu de l'homme du métier. Il réalise successivement les étapes suivantes pour coder la couche de base compatible H.264/AVC. Une image courante à coder, reçue en entrée du codeur, est découpée en macroblocs de taille 16 x 16 pixels par le module 207. Chaque macrobloc subit d'abord une étape d'estimation de mouvement, par le module 209 qui tente de trouver parmi des images de références stockées dans une mémoire tampon, des blocs de référence permettant de prédire au mieux le macrobloc courant. Cette étape d'estimation de mouvement fournit un ou deux indices d'images de référence contenant les blocs de référence trouvés, ainsi que les vecteurs de mouvement correspondants. Un module de compensation en mouvement 211 applique les vecteurs de mouvement estimés sur les blocs de référence trouvés et copie les blocs ainsi obtenus dans une image de prédiction temporelle. Par ailleurs, un module de prédiction � infra � 213 détermine le mode de prédiction spatiale du macrobloc courant qui fournirait les meilleures performances pour le codage du macrobloc courant en INTRA. Ensuite, un module 215 de choix de mode détermine le mode de codage, parmi les prédictions temporelle et spatiale, qui fournit le meilleur compromis débit distorsion dans le codage du macrobloc courant. La différence entre le macrobloc courant et le macrobloc de prédiction ainsi sélectionné est calculée par le module 217, fournissant un résidu (temporel ou spatial) à coder. Ce macrobloc résiduel subit alors des modules de transformation (DCT, acronyme de � Discrete Cosine Transform � pour transformation en cosinus discrète) et de quantification 219. Un module de codage entropique des échantillons ainsi quantifiés est alors mis en oeuvre et fournit les données de texture codées du macrobloc courant. Enfin, le macrobloc courant est reconstruit via un module 221 de quantification inverse, une transformation inverse, et une addition 222 du résidu après transformation inverse et du macrobloc de prédiction du macrobloc courant. Une fois l'image courante ainsi reconstruite, celle-ci est stockée dans le une mémoire tampon 223 pour servir, par l'intermédiaire d'un module adapté à enlever les effets de blocs (� deblocking �) 225, de référence à la prédiction temporelle de prochaines images à coder. Le deuxième étage 240 de la figure 2 illustre le codage de la première couche de raffinement du flux SVC. Cette couche apporte un raffinement en résolution spatiale par rapport à la couche de base. Le schéma de codage de cette couche est également connu de l'homme du métier. Comme l'indique la figure 2, il est analogue au schéma de codage de la couche de base 205, à ceci près que, pour chaque macrobloc d'une image courante en cours de codage, un mode de prédiction additionnel par rapport au codage de la couche de base peut être choisi par le module fonctionnel 245 de sélection de mode de codage. Ce mode de prédiction est appelé prédiction � inter couche � (� inter-layer prediction � en anglais). Il consiste à réutiliser les données codées dans une couche inférieure à la couche de raffinement en cours de codage comme données de prédiction du macrobloc courant. Cette couche inférieure est appelée la � couche de référence � pour la prédiction inter couche de la couche de raffinement. Dans le cas où la couche de référence contient une image qui coïncide temporellement avec l'image courante, alors appelée � image de base � de l'image courante, le macrobloc co-localisé (ayant la même position spatiale) du macrobloc courant qui a été codé dans la couche de base peut servir de référence pour prédire le macrobloc courant. Plus précisément, il peut servir pour prédire le mode de codage, la partition de macrobloc, les données de mouvement (si présentes) ainsi que les données de texture (résidu dans le cas d'un macrobloc prédit temporellement, texture reconstruite dans le cas d'un macrobloc codé en INTRA). Dans le cas d'une couche de raffinement spatial, des opérations de sur-échantillonnage des données de texture et de mouvement de la couche de référence sont effectuées. En dehors de cette technique de prédiction inter couche utilisée dans l'extension �SVC � du standard H.264/AVC, le codage d'une couche de scalabilité SVC met en oeuvre une boucle de prédiction temporelle compensée en mouvement, similaire à celle utilisée pour le codage de la couche de base compatible H.264/AVC. Enfin, comme l'indique la figure 2, le codage d'une troisième couche (deuxième couche de raffinement) met en oeuvre un schéma fonctionnel 275 de codage identique à celui de la première couche de raffinement. On comprend, en regard de la figure 2 que, pour coder un flux SVC avec plusieurs couches de scalabilité, on met en cascade plusieurs processus de codage correspondant à l'étage 240 de la figure 2 et on les fait fonctionner simultanément. Concernant l'architecture du codeur SVC de référence appelé � JSVM � (Joint Scalable Video Model), un objet appelé �LayerEncoder � est dédié au codage d'une couche de scalabilité, et réalise précisément les opérations décrites ci-dessus et correspondant à un étage de la figure 2. Lorsque plusieurs couches de scalabilité sont désirées, plusieurs objets de type LayerEncoder sont instanciés (un par couche à coder) dans le JSVM et chacun réalise le codage de la couche de scalabilité qui le concerne. Toutes les couches de scalabilité sont donc codées en même temps dans le codeur JSVM. Il s'ensuit une forte consommation mémoire du codeur JSVM, qui provient précisément de l'allocation des multiples objets de type � LayerEncoder � qui est effectuée lorsque plusieurs couches doivent être codées. En effet, chacun des ces objets LayerEncoder doit, entre autres, allouer des buffers d'images de référence utiles à la prédiction temporelle dans chacune des couches. La figure 3a illustre la structuration en groupes d'image (appelés GOPs, pour � Group Of Pictures �) 305 et 310 effectuée dans la séquence vidéo à coder, au sein de chaque couche de scalabilité. Un groupe d'image correspond aux images d'un intervalle de temps dans une séquence d'images. Un groupe d'images est délimité par deux images d'ancrage de type I ou P. Ces images ont la particularité de posséder un indice de niveau temporel égal à 0. A l'intérieur d'un GOP se trouvent des images � B � hiérarchiques 315. Les images B hiérarchiques constituent un moyen de fournir la fonctionnalité de scalabilité temporelle de SVC. Elles sont notées Bi, où i > 1 représente le niveau temporel de l'image Bi, et suivent la règle suivante: une image de type Bi peut être prédite temporellement à partir des images d'ancrage I ou P l'entourant, ainsi que des images Bj, j Ceci est notamment le cas dans le JSVM, codeur de référence du standard SVC. En effet, étant donné l'ordre de codage des images imposé par l'organisation des groupes d'images dans chaque couche SVC, chaque objet de type � LayerEncoder � maintient en mémoire plusieurs ensembles (ou tableaux) d'images. La longueur de ces ensembles correspond à la longueur des groupes d'images utilisés dans le codage des couches de scalabilité. Ces différents ensembles stockent notamment les images suivantes: - les images originales à coder. Elles sont lues dans la séquence originale et chargées en mémoire par chaque objet de type � LayerEncoder �, par groupe d'images, - les images reconstruites après codage puis décodage sans filtre de réduction des effets de bloc des images du GOP courant, utiles pour la prédiction de couches supérieures, - les images de résidus temporels spatiaux décodés après codage/décodage des textures résiduelles des images du GOP courant, - les images reconstruites dans la couche maximale, lorsque l'estimation de mouvement se fait par rapport aux images reconstruites de la couche de scalabilité la plus haute et - les images reconstruites après filtre de réduction des effets de bloc dans les niveaux de qualité différents du niveau maximal lorsque la prédiction entre niveaux spatiaux s'opère en référence à des niveaux de qualité intermédiaires du niveau spatial inférieur. En plus des tableaux de buffers d'images listés ci-dessus, d'autres buffers d'images sont également alloués par chaque objet � LayerEncoder �. Par conséquent, dans les couches SVC où la taille des images est significative (par exemple supérieure ou égale au format 4CIF), la quantité de mémoire allouée par chaque objet � LayerEncoder � est très importante (plus de 660 Méga-octets par couche pour des groupes d'images au format 4CIF de longueur 32). Il devient alors impossible de coder un flux SVC avec au moins deux couches de scalabilité de résolution spatiale supérieure ou égale à 4CIF et avec des longueurs de GOPs de 32 images, sur un ordinateur personnel muni de deux giga-octets de mémoire vive. La figure 4 présente des étapes de codage d'une séquence d'images originales en mettant en oeuvre le procédé de codage d'un groupe d'images objet de la présente invention. Ces étapes correspondent à une architecture de codeur SVC codant une séquence d'images, une couche après l'autre. Plus précisément, une couche de scalabilité donnée est codée sur la durée complète de la séquence d'images, avant de commencer à coder la prochaine couche de scalabilité. Tout d'abord, la couche de base du flux SVC à générer est codée, au cours d'une étape 400. Cette première étape prend en entrée la séquence d'images originales ré-échantillonnées à la résolution spatiale de la couche de base voulue notée � Orig[O] �. Ceci fournit un premier flux vidéo compatible H.264/AVC, qui est sauvegardé dans un fichier temporaire stocké dans un espace de stockage d'une mémoire de masse, au cours d'une étape 405. En variante, au cours de l'étape 400, on code plusieurs couches de base. Par exemple, on met en oeuvre un codage connu dans l'art antérieur jusqu'à avoir utilisé une proportion prédéterminée de la mémoire vive. On note que cette variante peut avoir comme conséquence que la mise en oeuvre du procédé objet de la présente invention ne soit déclenchée, après une phase de codage de type connu, qu'en cas de dépassement d'un certain seuil d'occupation de la mémoire vive disponible pour l'application de codage. Selon des sous-variantes, au cours de l'étape 405, on sauvegarde, dans l'espace de stockage de la mémoire de masse, une ou plusieurs des couches de base codées au cours de la variante de l'étape 400. Ainsi, au moins une couche de base constitue le flux intermédiaire mis en oeuvre dans les étapes suivantes. Puis, au cours d'une étape 410, on sélectionne une couche de scalabilité dans le flux temporaire codé, pour fournir une couche de référence pour prédire la prochaine couche de scalabilité à coder. Au cours d'une étape 415, on obtient les données de prédiction utiles pour coder de façon prédictive une couche de raffinement (spatial ou en qualité) au-dessus de la couche de base codée au cours de l'étape 400. Selon le mode de mise en oeuvre détaillé ici, cette étape 415 met en oeuvre un décodage partiel du train binaire temporaire précédemment formé. Ce décodage partiel réalise le décodage SVC en omettant l'étape de compensation en mouvement. En effet, le décodage standard d'un flux SVC comprend notamment une étape de prédiction temporelle compensée en mouvement, effectuée dans la couche de scalabilité la plus haute contenue dans le flux, de façon à réaliser les opérations réciproques du processus de codage illustré en figure 2. Cependant, dans le décodage SVC, pour effectuer la prédiction inter couche, un décodage seulement partiel des couches intermédiaires, sans compensation de mouvement, est effectué dans les couches autres que la couche décodée la plus haute. Ce décodage partiel fournit notamment les modes de codages des macroblocs, les macroblocs INTRA reconstruits, les données de mouvements, les résidus temporels. Ces données correspondent précisément aux éléments qui sont prédits dans le cadre de la prédiction entre couches de scalabilité SVC. L'étape 415 effectue donc ce décodage partiel du bitstream SVC sans faire la compensation en mouvement traditionnellement appliquée à la couche supérieure, et sauvegarde les données de prédiction citées ci-dessus, dans un fichier dédié. Dans un mode de mise en oeuvre alternatif, les données de prédiction sont stockées dans un espace mémoire de la mémoire vive RAM 106. Ces données de prédiction incluent notamment les paramètres suivants : - les modes de macroblocs (modes de codage et partitions de macroblocs), - les paramètres de mouvement (vecteurs de mouvement, indices d'images de référence), - les macroblocs INTRA reconstruits et - les résidus temporels décodés. L'algorithme de l'étape 415 de la figure 4 est détaillé par la figure 5. On note qu'en variante, on ne fait pas de décodage partiel du flux SVC temporaire pour obtenir les données de prédiction, mais on sauvegarde ces données dans un fichier au moment où elles sont déterminées au cours de l'étape de codage du flux temporaire qui précède. Le résultat de l'étape 415 est donc un fichier contenant les données de prédiction indiquées ci-dessus. Au cours d'une étape 420, on code une couche de scalabilité SVC au-dessus des couches déjà présentes dans le train binaire SVC temporaire en cours de construction, et on ajoute la nouvelle couche aux couches déjà codées dans le fichier temporaire stocké dans un espace de stockage d'une mémoire de masse. L'algorithme précis correspondant à cette étape 420 est exposé en regard de la figure 6. Le résultat de cette quatrième étape consiste en un nouveau train binaire SVC temporaire contenant une couche de scalabilité supplémentaire par rapport au flux temporaire précédent. On a donc enrichi, au cours de l'étape 420, le flux SVC en cours de construction sauvegardé dans un fichier temporaire stocké dans un espace de stockage d'une mémoire de masse d'une couche additionnelle. Au cours d'une étape 425, on détermine s'il reste au moins une couche à coder. Si oui, on réitère les étapes 410 à 425. Sinon, le flux SVC enrichi obtenu contient toutes les couches initialement demandées. L'algorithme de la figure 4 prend alors fin. Dans une variante (non représentée), pour au moins une couche d'adaptabilité, on réalise, parallèlement aux étapes 400 et 405, une étape de sauvegarde de données de prédiction non codées provenant de la couche en cours de codage et, pour au moins une autre couche d'adaptabilité, à la place de l'étape 415, on obtient les données de prédiction en lisant lesdites données de prédiction sauvegardées pour la couche sélectionnée au cours de l'étape 410. Ainsi, on évite de décoder les données de prédiction et on augmente donc la rapidité de codage de la séquence d'images. La figure 5 explicite l'étape de décodage partiel 415 de la figure 4. L'algorithme de la figure 5 prend, en entrée, le train binaire SVC intermédiaire en cours de construction progressive par l'algorithme de la figure 4 ainsi que la couche de référence sélectionnée pour effectuer la prédiction inter-couches de la prochaine couche de scalabilité à coder. L'algorithme effectue un parcours de toutes les NAL units contenues dans le flux SVC temporaire. Une NAL unit constitue l'unité élémentaire d'un train binaire H.264/AVC ou SVC, et est constituée d'un en-tête et d'un corps. L'en-tête contient des paramètres relatifs aux données contenues dans le corps. Il indique notamment le type de données contenues dans le corps (données d'image codée, paramètres de codage de la séquence ou d'une ou plusieurs images, ...), et identifie la couche de scalabilité SVC à laquelle contribue la NAL unit. Cette couche de scalabilité est identifiée via le niveau spatial (appelé également � dependency id �) et le niveau de qualité (appelé également � quality level �) respectivement codés dans des champs notés � dependency_id � et � quality_id � de l'en-tête de NAL unit. Après s'être positionné sur la première NAL unit, comme NAL unit courante, au cours d'une étape 505, au cours d'une étape 510, le décodage de l'en-tête de la NAL unit courante fournit les valeurs des champs dependency_id et quality_id de la NAL unit. Au cours d'une étape 515, on détermine si la NAL unit appartient à une couche de scalabilité inférieure ou égale à la couche de référence sélectionnée. Si c'est le cas, au cours d'une étape 520, le corps de la NAL unit courante est décodé sans faire de compensation en mouvement. Cela fournit, dans le cas de NAL units contenant des données d'image codée, les modes des macroblocs codés contenus dans la NAL unit, les données de mouvement des macroblocs prédits temporellement, les résidus temporels décodés pour les macroblocs prédits temporellement, et la texture reconstruite des macroblocs INTRA. Puis, au cours d'une étape 525, on détermine si la NAL unit courante appartient à la couche de scalabilité qui a été sélectionnée comme couche de référence pour la prédiction de la prochaine couche de scalabilité à coder. Si c'est le cas, au cours d'une étape 530, les données fournies par le décodage de la NAL unit courante sont sauvegardées dans le fichier de sortie de l'algorithme de la figure 5. Puis, au cours d'une étape 535, on détermine s'il reste des NAL units dans le flux SVC temporaire en cours de décodage partiel. Si oui, au cours d'une étape 540, on passe à la prochaine NAL unit contenue dans ce flux et on retourne à l'étape 510. Dans le cas où la fin du flux temporaire a été atteinte, l'algorithme de la figure 5 prend fin. Si le résultat de l'une des étapes 515 ou 525 est négatif, on passe à l'étape 535. En sortie des étapes illustrées en figure 5, est fourni un fichier contenant des données de prédiction utiles à coder, via les techniques de prédiction inter couche propres au standard SVC, la prochaine couche de scalabilité à ajouter au flux SVC temporaire en cours de construction. La figure 6 détaille l'étape 420 de codage d'une couche de raffinement SVC additionnelle et de son écriture dans un nouveau flux SVC temporaire enrichi. L'algorithme de la figure 6 prend, en entrée, les éléments suivants : - l'indice de la nouvelle couche de scalabilité à coder noté � currLayer �, - la séquence d'images originales à coder, notée Orig[currLayer], dans sa version échantillonnée à la résolution spatiale de la couche courante à coder currLayer, - le fichier issu de l'étape 415 de décodage partiel du flux SVC temporaire à augmenter, - le flux SVC temporaire que l'on souhaite augmenter de la nouvelle couche de scalabilité currLayer. L'algorithme de la figure 6 débute, au cours d'une étape 605, par l'instanciation de objet de type � LayerEncoder � adapté à coder la nouvelle couche de scalabilité, et noté � LayerEncoder[currLayer] �. Cet objet est donc similaire aux multiples objets de type � LayerEncoder � mentionnés précédemment en référence à la figure 2. La différence est qu'ici on n'instancie qu'un seul objet de ce type. Puis, au cours d'une étape 610, on se positionne au début de la séquence d'images originales à coder Orig[currLayer]. On procède, au cours des étapes 615 à 655, au codage de la séquence d'images, GOP par GOP, en codant successivement les images contenues dans chaque GOP. Au cours d'une étape 615, on charge donc les images originale de Orig[currLayer] appartenant au GOP courant dans des buffers de l'objet LayerEncoder[currLayer] prévus à cet effet. On parcourt ensuite, au cours des étapes 620 à 645, les �access unit � appartenant au GOP courant par ordre de codage. Une access unit, ou unité d'accès d'un flux SVC, contient l'ensemble de toutes les données d'images correspondant à une même image décodée. Par exemple, en référence à la figure 3b, la première access unit du premier GOP illustré contient à la fois des données de la couche de base (première image de la couche de base) et des données de raffinement dans la couche de raffinement spatial (première image de la couche haute). En revanche, la deuxième access unit, par ordre d'affichage, ne contient que des données dans la couche de raffinement. En effet, comme la fréquence d'images de la couche de base est deux fois plus basse que celle de la couche haute, une image sur deux de la couche haute ne possède pas d'image temporellement coïncidente dans la couche de base. L'ordre de codage utilisé consiste à coder d'abord les images de niveau temporel 0, puis à coder les images par ordre croissant de niveau temporel. Au sein d'un même niveau temporel, les images sont codées par leur ordre d'apparition dans la séquence originale. Pour chaque access unit du GOP courant à coder, au cours d'une étape 625, on lit, dans le fichier issu du décodage partiel, les données de prédiction utiles à prédire l'access unit courante dans la couche de scalabilité currLayer, comme exposé en regard de la figure 5. Ces données de prédiction sont chargées dans les buffers adaptés à cet effet dans l'objet LayerEncoder[currLayer]. On invoque au cours d'une étape 630, le processus de codage le l'image courante, c'est à dire la contribution de la couche de scalabilité en cours de codage currLayer à l'access unit courante notée � currAU � en figure 6. Ce codage fournit alors une NAL unit qui contient les données d'images qui viennent d'être codées. Cette NAL unit est alors inscrite dans le nouveau fichier intermédiaire SVC en cours de construction, au cours d'une étape 635. Pour ce faire, toutes les NAL units appartenant à l'access unit currAU et qui étaient déjà présentes dans le flux temporaire en entrée de l'algorithme sont d'abord copiées dans le flux SVC de sortie de l'algorithme. La NAL unit qui vient d'être codée est alors écrite à la suite de ces NAL units copiées dans le flux SVC temporaire en cours de formation. Au cours d'une étape 640, on détermine si on a traité la dernière access unit du GOP courant. Si oui, on passe à une étape 650. Sinon, au cours d'une étape 645, on passe à la prochaine access unit à coder du GOP courant et on retourne à l'étape 625. Au cours de l'étape 650, on détermine si le dernier GOP a été traité. Sinon, au cours d'une étape 655, on passe au GOP suivant et on retourne à 20 l'étape 615. Enfin, l'algorithme de la figure 6 prend fin lorsque tous les GOP de la séquence Orig[currLayer] ont été traités. L'algorithme de la figure 6 fournit en sortie un nouveau flux SVC enrichi par rapport au flux SVC temporaire fourni en entrée de cet algorithme, ce flux enrichi étant stocké dans un espace de 25 stockage d'une mémoire de masse. REVENDICATIONS1. Procédé de codage d'une séquence d'images comportant au moins un groupe d'une pluralité d'images originales, en plusieurs couches d'adaptabilité, caractérisé en ce qu'il comporte, pour coder ledit groupe d'images originale, une étape (400) de codage d'au moins une couche de base en fonction du groupe d'images originales à coder pour constituer un flux de données intermédiaire, une étape de stockage du flux intermédiaire dans un espace de stockage d'une mémoire de masse et, de manière itérative, pour chaque autre couche d'adaptabilité à coder : - une étape (410, 415) d'obtention de données de prédiction de la couche à coder, issues d'au moins une couche déjà codée, - une étape (420) de codage de la couche à coder en mettant en oeuvre lesdites données de prédiction et le groupe d'images originales et - une étape (420) d'ajout, dans l'espace de stockage, de la couche codée au flux intermédiaire. 2. Procédé selon la revendication 1, caractérisé en ce que l'étape d'obtention de données de prédiction comporte une étape de sélection d'une couche codée déjà représentée par le flux intermédiaire, les données de prédiction étant obtenues depuis ladite couche sélectionnée. 3. Procédé selon l'une quelconque des revendications 1 ou 2, caractérisé en ce que l'étape d'obtention de données de prédiction comporte une étape de décodage partiel du flux de données intermédiaire sans compensation en mouvement. 4. Procédé selon l'une quelconque des revendications 1 ou 2, caractérisé en ce qu'il comporte en outre, pour au moins une couche d'adaptabilité, une étape de stockage dans un espace de stockage d'une mémoire de masse des données de prédiction non codées et, pour au moins une autre couche d'adaptabilité, au cours de l'étape d'obtention de données de prédiction, on lit lesdites données de prédiction. 5. Procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce que, au cours de l'étape de codage de la couche d'adaptabilité en fonction des données de prédiction obtenues et du groupe d'images originales, on réalise une boucle de prédiction temporelle compensée en mouvement sur le groupe d'images originales à coder, puis on code des vecteurs de mouvement estimés et des résidus temporels et spatiaux. 6. Procédé selon la revendication 5, caractérisé en ce que, au cours de l'étape de codage de la couche d'adaptabilité en fonction des données de prédiction obtenues et du groupe d'images originales, on code les vecteurs de mouvement estimés et les résidus temporels et spatiaux comme des données de raffinement, en utilisant une prédiction inter-couches basée sur les données de prédiction obtenues au cours de l'étape d'obtention. 7. Procédé selon l'une quelconque des revendications 1 à 6, caractérisé en ce qu'il réalise le codage de la même couche d'adaptabilité pour chaque groupe d'images de la séquence d'image avant le codage d'une autre couche d'adaptabilité. 8. Dispositif de codage d'une séquence d'images comportant au moins un groupe d'une pluralité d'images originales, en plusieurs couches d'adaptabilité, caractérisé en ce qu'il comporte un moyen de codage d'au moins une couche de base en fonction d'un groupe d'images originales à coder adapté à constituer un flux de données intermédiaire, un moyen de stockage du flux intermédiaire dans un espace de stockage d'une mémoire de masse et des moyens de traitement adaptés, de manière itérative, pour chaque autre couche d'adaptabilité à coder et pour ledit groupe d'images originales : - à obtenir des données de prédiction de la couche à coder, issues d'au moins une couche déjà codée, - à coder la couche à coder en mettant en oeuvre lesdites données de prédiction et ledit groupe d'images originales et - à ajouter, dans l'espace de stockage, la couche codée au flux 30 intermédiaire. 9. Programme d'ordinateur chargeable dans un système informatique, ledit programme contenant des instructions permettant la mise en oeuvre du procédé selon l'une quelconque des revendications 1 à 7. 10. Support d'informations lisibles par un ordinateur ou un microprocesseur, amovible ou non, conservant des instructions d'un programme informatique, caractérisé en ce qu'il permet la mise en oeuvre du procédé selon l'une quelconque des revendications 1 à 7.