Brevet FR2894739A1 — publié le 20070615

L'invention concerne un dispositif et un procédé de codage et de décodage de données vidéo. Le développement des standards de compression a aujourd'hui conduit à la complexité des algorithmes de codage. Dès lors, il devient important de pouvoir tester les équipements de codage, surtout lorsqu'ils doivent être conformes à des standards de codage. Notamment, dans le cadre du standard de compression H264, les algorithmes de compression utilisés sont très complexes. Lorsque les algorithmes de compression sont réalisés par des circuits intégrés, il devient difficile de comprendre à quel niveau de l'encodage une erreur peut s'être produite, lorsqu'un problème est détecté au niveau du décodeur lors de la phase de décodage. Le codage des images étant, pour la plupart des images, dépendant du codage d'autres images, il est également difficile de déterminer sur quelle image le problème apparaît. Lors de l'encodage, il devient alors important de trouver des mécanismes permettant de marquer à l'aide d'information supplémentaire le procédé de décodage afin de déceler à quel niveau de codage ou de décodage le problème est survenu. La détection des problèmes d'encodage est souhaitable pour la validation des circuits intégrés et également pour la détection à distance de problèmes chez un client. L'invention propose de résoudre au moins un des problèmes précités. A cet effet, l'invention propose un dispositif de codage de données vidéo comprenant des moyens de coder les images en groupes de données. Selon l'invention, le dispositif comprend des moyens d'insérer, dans les groupes de données codées, un message comprenant des paramètres issus du codage du groupe et permettant lors d'un décodage ultérieur, une reconstruction des données en cas d'erreur lors du codage ou lors du décodage. Selon un mode de réalisation préféré, les moyens de coder les images en groupes de données comprennent des moyens de codage entropique, les paramètres issus du codage étant relatifs au codage entropique. Selon un mode de réalisation préféré, - les moyens de coder les images en groupes de données codent chaque image en tranche, - les moyens d'insérer dans les groupes de données codées le message insèrent un message relatif à chaque tranche avant chaque tranche. Préférentiellement, - les moyens de coder les images en groupes de données codent chaque tranche en macroblocs de pixels, - les paramètres de codage relatifs à chaque tranche comprennent des paramètres relatifs à chaque macrobloc. 15 Selon une caractéristique avantageuse, le message comprend un message correcteur d'erreur calculé sur les données non codées. Selon une autre caractéristique avantageuse, les moyens d'insérer dans les groupes de données codées le message insèrent un message relatif 20 à chaque tranche avant chaque tranche et le message correcteur d'erreur pour chaque image. Selon un autre aspect, l'invention concerne également un dispositif de décodage de données comprenant des moyens de décoder des données en 25 groupes, chaque groupe de données comprenant au moins un message comprenant des paramètres issus du codage dudit groupe et permettant lors du décodage une reconstruction desdites données en cas d'erreur lors du codage ou lors du décodage. Selon l'invention, le dispositif de décodage comprend - des moyens d'extraire le message, - des moyens de comparer le message à des paramètres de décodage, - des moyens de détecter une erreur lors du décodage ou lors du codage en fonction de la comparaison. 10 30 De manière préférée, le dispositif de décodage comprend des moyens de décodage entropique des données, le message comprenant des paramètres relatifs au codage entropique des groupes de données, les moyens de comparer le message à des paramètres de décodage comparent le message à des paramètres de décodage entropique. Selon un autre aspect, l'invention concerne également un procédé de codage de données vidéo comprenant une étape de codage des images en groupes de données. Selon l'invention, le procédé de codage comprend une étape d'insertion, dans les groupes de données codées, d'un message comprenant des paramètres issus du codage du groupe et permettant lors d'un décodage ultérieur, une reconstruction des données en cas d'erreur lors du codage ou lors du décodage. Selon un autre aspect, l'invention concerne un procédé de décodage de données vidéo comprenant une étape de décodage des données en groupes, chaque groupe de données comprenant au moins un message comprenant des paramètres issus du codage du groupe et permettant lors du décodage une reconstruction des données en cas d'erreur lors du codage ou lors du décodage. Selon l'invention, le procédé de décodage comprend : - une étape d'extraction dudit message, - une étape de comparaison dudit message à des paramètres de décodage, - une étape de détection d'erreur lors du décodage ou lors du codage en fonction de ladite comparaison. L'invention sera mieux comprise et illustrée au moyen d'exemples 30 de modes de réalisation et de mise en ceuvre avantageux, nullement limitatifs, en référence aux figures annexées sur lesquelles : - la figure 1 représente la structure du flux codé selon un mode de réalisation préféré de l'invention, - la figure 2 représente un dispositif de codage selon un mode de réalisation préféré l'invention, - la figure 3 représente un dispositif de décodage selon un mode de réalisation préféré de l'invention. Les modules représentés sur les différentes figures sont des unités fonctionnelles, qui peuvent ou non correspondre à des unités physiquement distinguables. Par exemple, ces modules ou certains d'entre eux peuvent être regroupés dans un unique composant, ou constituer des fonctionnalités d'un même logiciel. A contrario, certains modules peuvent éventuellement être composés d'entités physiques séparées. La description ci-dessous est basée sur un codage de données conforme à la norme H264. Cet exemple d'implémentation n'est pas limitatif à un codage de ce type. L'invention concerne effectivement tout type de codage dans lequel des informations sont insérées dans le flux afin de faciliter son utilisation ultérieure. Par groupe de données, on peut entendre toute décomposition en ensemble de données. On peut notamment comprendre groupe d'image (GOP, acronyme anglais de Group of Pictures ), on peut également comprendre les tranches d'images ( slice en anglais). La figure 1 représente la structure du flux codé selon un mode de réalisation préféré de l'invention. Les images sont codées de manière découpée. Chaque image est découpée en tranches, mieux connues sous l'acronyme anglais de slice . Le découpage en tranches est décidé lors du codage. Ce découpage en tranches est fait par les utilisateurs du dispositif de codage et notamment par les diffuseurs de programmes. Selon ce mode de réalisation, un message SEI est inséré avant 30 chaque tranche d'image. Le message SEI étant référencé sur la figure 1 par SEI CRC CABAC_MES. Ce message SEI comprend des informations relatives au codage et permettant lors du décodage de la tranche auquel il se réfère de vérifier que le décodage est correct et si ce décodage n'est pas correct de pouvoir le détecter pour l'analyser. Lorsqu'une erreur est détectée, on peut par exemple remplacer la partie de l'image qui est erronée par l'image précédemment décodée. A ces fins, le message SEI contient des informations relatives au codage de type entropique réalisé par le dispositif de codage. La nature de ces informations est précisée ultérieurement. Dans le flux de données, le message SEI peut se référer soit à la tranche précédente soit à la tranche suivante, selon l'implémentation faite dans le codeur. Dans le mode de réalisation préféré, il se réfère à la tranche qui le suit dans le flux, la tranche étant mémorisée avant d'être transmise. La figure 2 représente un dispositif de codage selon le mode de réalisation préféré de l'invention. Une trame Fn courante est présentée en entrée du codeur pour y être codée. Cette trame est codée sous forme de tranches, c'est-à-dire qu'elle est découpée en sous-unités qui contiennent chacune un certain nombre de macro-blocs correspondant à des groupes de 1616 pixels. Chaque macrobloc est codé en mode intra ou inter. Que ce soit en mode intra ou en mode inter, un macrobloc est codé en se basant sur une trame reconstruite. Un module 109 décide du mode de codage en mode intra de l'image courante, en fonction du contenu de l'image. En mode Intra, P (représentée sur la figure 2) est composée d'échantillons de la trame courante Fn qui ont été précédemment encodés, décodés et reconstruits (uF'n sur la figure 2, u signifiant non filtré). En mode inter, P est constitué à partir d'une estimation de mouvement basée sur une ou plusieurs trames F'n-1. Un module d'estimation de mouvement 101 établit une estimation de mouvement entre la trame courante Fn et au moins une trame précédente F'n-l. A partir de cette estimation de mouvement, un module 102 de compensation de mouvement produit une trame P lorsque l'image courante Fn doit être codée en mode inter. Un soustracteur 103 produit un signal Dn, différence entre l'image Fn à coder et l'image P. Ensuite cette image est transformée par une transformation DCT dans un module 104. L'image transformée est ensuite quantifiée par un module 105 de quantification. Ensuite, les images sont réorganisées par un module 111. Un module de codage entropique 112 de type CABAC (acronyme anglais de Context-based Adaptive Binary Arithmetic Coding ) encode ensuite chaque image. Des modules 106 et 107 respectivement de quantification et de transformation inverses permettent de reconstituer une différence D'n après transformation et quantification puis quantification inverse et transformation inverse. Lorsque l'image est codée en mode intra, selon le module 109, un module 108 de prédiction intra code l'image. Une image uF'n est obtenue en sortie d'un additionneur 114, comme la somme du signal D'n et du signal P Ce module 108 reçoit également en entrée l'image F'n reconstruite non filtrée. Un module 110 de filtrage permet d'obtenir l'image F'n reconstruite filtrée à partir de l'image uF'n. Le module 112 de décodage entropique transmet les tranches codées encapsulées dans des unités de type NAL. Les NAL contiennent, outre les tranches, des informations relatives aux en-têtes par exemple. Les unités de type NAL sont transmises à un module 113. Le module 113 insère un message SEI avant l'envoi des différentes tranches d'images codées vers un réseau de transmission. Un message SEI est inséré afin d'obtenir un flux comme indiqué en figure 1. Ce message comporte en outre, des informations relatives au codage entropique réalisé par le module 112. Le module de codage entropique 112 utilise un algorithme de codage de type cabac . Les paramètres codlLow et codelRange sont des paramètres définis dans la norme H264. Ces paramètres sont calculés par le module de codage entropique 112 pour chaque tranche. Le message SEI inclue donc les valeurs codlLow et codelRange relatives au codage de chaque tranche. Le tableau ci-dessous illustre la partie payload d'un message SEI, utilisant un type de payload de type 6, correspondant dans la norme H264 à un payload de type user data_unregistered , représenté dans le tableau ci-dessous. user data unregistered( payloadSize) { Descriptor uuid_iso_iec_11578 u(128) for( i = 16; i Les valeurs de CodlRange et CodlLow sont chacune codées sur 9 bits. Outre ces données relatives au codage entropique, le message SEI contient une information de type code correcteur d'erreur (en anglais CRC pour cycle redundancy check ). Ce code correcteur d'erreur est calculé à partir des données non codées. Ce code correcteur d'erreur est calculé en utilisant des méthodes connues de l'homme du métier et notamment en utilisant des polynômes générateurs. Avantageusement, on insère un CRC pour chaque slice. La valeur de CRC est alors codée avec les valeurs de CodlLow et CodlRange. La figure 3 représente un dispositif de décodage selon l'invention. Un module 209 reçoit en entrée les messages SEI. Il extrait les différents messages SEI et les transmet à un module 210 de comparaison des valeurs relatives au décodage entropique et à un module 211 de comparaison de CRC les valeurs relatives au CRC. Les NALs de données utiles sont transmises à un module 201 de décodage entropique. Le module 210 mémorise le message SEI rentrant et compare les valeurs des CodelRange et CodelLow de la tranche reçue avec les valeurs obtenues lors du décodage arithmétique effectué par le module 201 de décodage entropique. Le module 201 de décodage entropique effectue l'opération inverse du module 112 de la figure 2. Si les valeurs CodelRange et CodelLow de la tranche reçue sont différentes des valeurs obtenues lors du décodage, alors une erreur s'est produite. Cette erreur s'est produite au niveau du décodage CABAC si l'on est sûr que la couche transport est fiable, ou au niveau du codage CABAC. Dans le cas de test, on peut notamment s'assurer que la couche transport est fiable. Ceci permet donc avantageusement de vérifier, soit un codeur, soit un décodeur lorsque l'on sait que le décodeur, respectivement le codeur, est fiable. Le module de décodage entropique essaye alors de reconstruire la tranche erronée grâce aux valeurs de CodelLow et CodelRange reçues et mémorisées dans le module 210. Lors du décodage entropique, les valeurs du décodeur arithmétique CodlLow et CodlRange sont transmises au module 210 de comparaison. Ensuite, les données sont transmises à un module 202 de ré ordonnancement de manière à obtenir un ensemble de coefficients. Ces coefficients subissent alors une quantification inverse dans le module 203 et une transformation DCT inverse dans le module 204 en sortie duquel on obtient les macro blocs D'n, D'n étant une version déformée de Dn. Un bloc prédictif P est ajouté à D'n, par un additionneur 205, pour reconstruire un macrobloc uF'n. Le bloc P est obtenu après compensation de mouvement, effectuée par un module 208, de la trame décodée précédente, lors d'un codage en mode inter ou après prédiction intra du macrobloc uF'n, par un module 207, dans le cas d'un codage en mode intra. Un filtre 206 est appliqué sur le signal uF'n pour réduire les effets de la distorsion et la trame F'n reconstruite est crée à partir d'une série de macroblocs. Un module 211 reçoit en entrée une valeur de code de redondance cyclique (CRC) extrait du message SEI reçu et relatif à la tranche courante. Le CRC est relatif à la tranche non codée. Le module 211 calcule donc le CRC relatif à la tranche qui vient d'être décodée et compare cette valeur calculée à la valeur reçue du module 209. Si cette comparaison montre une différence entre les deux valeurs, alors on sait qu'il y a une erreur lors du décodage, si la couche transport est fiable. Selon un autre mode de réalisation, le message SEI inséré comprend les valeurs codelRange et CodelLow du module arithmétique CABAC pour chaque macrobloc de la tranche et non seulement pour chaque tranche comme dans le mode de réalisation préféré. CodlRange et CodlLow sont codés chacun sur 9 bits, il reste donc 14 bits pour coder, sur 32 bits, le numéro de bloc. En format HD (haute définition), on utilise 8160 Macroblocs par image. On obtient alors, par exemple, comme message SEI le message suivant. Numéro de MB CodlRange (9 bits), valeur CodlLow (9 bits), valeur après décodage eos après décodage eos 0 Cir=Oxl eO Cio=0xl Oe 1 Cir=Oxl 80 Cio=OxObe 2 Cir=Oxl b0 Cio=0x022 3 Cir=Oxl cO Cio=0x006 Ceci permet avantageusement, en cas de mauvais décodage, de définir le macrobloc qui est erroné et de le récupérer. Une telles granularité est donc particulièrement efficace mais nécessite de mémoriser les valeurs de CodelRange et CodelLow pour chaque macrobloc d'une même tranche avant de les transmettre simultanément dans le même message SEI. Dans d'autres modes de réalisation, il est bien entendu possible d'insérer un CRC par GOP ou par image mais la granularité est moins fine et 25 la détection des erreurs est donc rendue plus difficile. Lorsqu'un CRC est inséré par image, il est par exemple inséré dans le message SEI relatif à la dernière tranche de l'image. Lorsqu'un CRC est inséré par groupe d'image (GOP), il est par exemple inséré dans le message SEI relatif à la dernière tranche de la dernière image codée du GOP. Revendications 1. Dispositif de codage de données vidéo comprenant des moyens de coder les images en groupes de données, caractérisé en ce qu'il comprend des moyens (113) d'insérer, dans les groupes de données codées, un message (SEI_CRC_CABAC_MES) comprenant des paramètres (CodlRange, CodlLow) issus du codage dudit groupe et permettant lors d'un décodage ultérieur, une reconstruction desdites données en cas d'erreur lors du codage ou lors du décodage. 2. Dispositif selon la revendication 1 caractérisé en ce que les moyens de coder les images en groupes de données comprennent des moyens (112) de codage entropique, lesdits paramètres (CodlRange, CodlLow) issus du codage étant relatifs audit codage entropique. 3. Dispositif selon l'une des revendications 1 ou 2 caractérisé en ce que - les moyens de coder les images en groupes de données codent chaque image en tranche (slice), - les moyens (113) d'insérer dans les groupes de données codées ledit message (SEI_CRC_CABAC_MES) insèrent un message relatif à chaque tranche (slice) avant chaque tranche (slice). 4. Dispositif selon la revendication 3 caractérisé en ce que - les moyens de coder les images en groupes de données codent chaque tranche en macroblocs de pixels, - les paramètres de codage relatifs à chaque tranche comprennent des paramètres (CodlRange, CodlLow) relatifs à chaque macrobloc. 5. Dispositif selon l'une des revendications précédentes caractérisé en ce que ledit message (SEI_CRC_CABAC_MES) comprend un message correcteur d'erreur (CRC) calculé sur les données non codées. 6. Dispositif selon la revendication 5 caractérisé en ce que les moyens (113) d'insérer dans les groupes de données codées ledit message (SEI CRC CABAC MES) inserent un message (SEI CRC CABAC MES) relatif à chaque tranche avant chaque tranche et ledit message correcteur d'erreur (CRC) pour chaque image. 7. Dispositif de décodage de données comprenant des moyens de décoder des données en groupes, chaque groupe de données comprenant au moins un message comprenant des paramètres issus du codage dudit groupe et permettant lors du décodage une reconstruction desdites données en cas d'erreur lors du codage ou lors du décodage, caractérisé en ce qu'il comprend - des moyens d'extraire ledit message (SEI_CRC_CABAC_MES) - des moyens de comparer ledit message (SEI CRC CABAC MES) à des paramètres de décodage (CodlRange, CodlLow) , - des moyens de détecter une erreur lors du décodage ou lors du codage en fonction de ladite comparaison. 8. Dispositif de décodage selon la revendication 7 caractérisé en ce qu'il comprend des moyens (201) de décodage entropique des données, ledit message (SEI_CRC_CABAC_MES) comprenant des paramètres (CodlRange, CodlLow) relatifs au codage entropique desdits groupes de données, lesdits moyens de comparer ledit message à des paramètres de décodage comparent ledit message (SEI CRC CABAC MES) à des paramètres de décodage entropique (CodlRange, CodlLow). 9. Procédé de codage de données vidéo comprenant une étape de codage des images en groupes de données, caractérisé en ce qu'il comprend une étape d'insertion, dans les groupes de données codées, d'un message (SEI_CRC_CABAC_MES) comprenant des paramètres (CodlRange, CodlLow) issus du codage dudit groupe et permettant lorsd'un décodage ultérieur, une reconstruction desdites données en cas d'erreur lors du codage ou lors du décodage. 10. Procédé de décodage de données vidéo comprenant une étape de décodage des données en groupes, chaque groupe de données comprenant au moins un message (SEI_CRC_CABAC_MES) comprenant des paramètres (CodlRange, CodlLow) issus du codage dudit groupe et permettant lors du décodage une reconstruction desdites données en cas d'erreur lors du codage ou lors du décodage, caractérisé en ce qu'il comprend - une étape d'extraction dudit message (SEI CRC CABAC MES) - une étape de comparaison dudit message (SEI CRC CABAC MES) à des paramètres de décodage (CodlRange, CodlLow), - une étape de détection d'erreur lors du décodage ou lors du codage en fonction de ladite comparaison.