FR 3023046 A1 20160101 FR 1456030 A 20140627 SYSTEME DE CODAGE DE SEQUENCE VIDEO COMPRENANT UN MECANISME DE REPARTITION DE LA CHARGE DE CALCUL L'invention concerne un système et un procédé de codage de 5 séquence vidéo comprenant un mécanisme de répartition de la charge de calcul et s'applique au domaine de la compression vidéo. La norme de compression HEVC (High Efficiency Video Coding) permet d'obtenir une amélioration du taux de compression vidéo par rapport à la norme actuelle AVC (Advanced Video Coding) pouvant aller jusqu'à 10 cinquante pourcents, au prix d'une complexité de calcul plus importante. En effet, pour conserver une qualité vidéo équivalente, le volume de calcul est multiplié par quatre. Il est aussi à noter que la fréquence d'affichage a doublé pour atteindre soixante images par seconde. Par ailleurs, le format d'affichage UHD (Ultra High Definition) 15 comprenant quatre fois plus de pixels que le format HD (High Definition) est supporté par la norme HEVC. Les innovations apportées dans les normes de codage de nouvelle génération telles que HEVC et VP9 induisent des volumes de calcul significatifs devant être supportés par les systèmes de codage. 20 Un découpage spatial de l'image peut être mis en oeuvre afin de tenir compte du fait que les ressources de calcul du système de codage (processeurs, mémoires) sont limitées. Cette technique consiste à découper les images en plusieurs partitions afin de répartir les calculs sur plusieurs 25 modules de calcul, un module de calcul étant responsable du traitement d'au moins une partition. A titre d'exemple, la compression vidéo selon la norme HEVC inclut un découpage des images en plusieurs partitions rectangulaires indépendantes désignées par le mot anglais « tile ». C'est également le cas 30 dans le cadre de la norme AVC dans laquelle une partition correspond à une tranche d'image désignée par le mot anglais « slices ». Dans la suite de la description, l'ensemble des paramètres permettant de définir les partitions de découpe d'une image est désigné par l'expression découpe d'image. La complexité d'une image vidéo n'est pas homogène sur toute sa surface. En effet, certaines zones d'une image contenant des parties statiques et uniformes comme du gazon seront plus rapidement encodées alors que des zones complexes et en mouvement comme par exemple un ensemble de danseurs seront plus longues à encoder. Dans un système de codage vidéo traitant des découpes d'images 10 comprenant N partitions de tailles prédéfinies, la complexité du contenu de chacune des partitions varie dans le temps. Ainsi, les architectures de serveurs ayant pour objectif de coder des séquences vidéo en s'appuyant sur une découpe d'images pour laquelle une unité de codage est allouée pour chaque partition de la découpe d'image 15 sont habituellement surdimensionnées. En effet, une unité de traitement doit être capable de coder une partition de faible complexité mais aussi de la complexité la plus haute. Un des buts de l'invention est de remédier à des insuffisances et 20 inconvénients de l'état de la technique et d'y apporter des améliorations. A cet effet l'invention a pour objet un système de codage d'au moins une séquence vidéo composée d'une suite d'images. Ce système comprend : N modules de codage, un module de codage étant configuré 25 pour encoder une partition d'image, lesdits modules étant configurés pour déterminer le temps requis pour coder la partition leur étant associée; un module de sélection d'une découpe d'image, une découpe d'image comprenant N partitions permettant de découper les 30 images de la séquence vidéo avant leur codage, les tailles des partitions de la découpe d'image à appliquer pour le codage de l'image courante étant déterminées en fonction des temps requis pour le codage des N partitions de l'image précédent l'image courante à coder de manière à ce que la charge de calcul requise pour le codage de l'image suivante soit sensiblement la même pour les N modules de codage ; un module de découpage des images de la séquence vidéo configuré pour mettre en oeuvre la découpe d'image sélectionnée par le module de sélection. La sélection de la découpe d'images est par exemple mise à jour pour 10 chaque nouvelle image de la séquence vidéo. La découpe d'images peut être mise à jour périodiquement, une période PM étant équivalente à un nombre prédéfini d'images successives de la séquence vidéo. Selon un aspect de l'invention, la période PM est égale à la période de 15 renouvellement des images de type INTRA de la séquence vidéo à coder. Selon un aspect de l'invention, la taille de la partition associée à un module de codage donné pour une période PM peut être déterminée en estimant le temps moyen de codage d'un macrobloc T_MB par ce module pendant la période précédente PM-1, la taille des partitions à utiliser pour la 20 période PM étant égale à la taille de la partition qui a été appliquée pendant la période PM-1 multipliée par le rapport entre le temps de codage de la dernière partition codée pendant la période PM-1 et le temps moyen de codage par macrobloc T_MB estimé pour cette période. Les temps requis pour le codage des N partitions de l'image précédent 25 l'image courante à coder sont par exemple estimés par les modules de codage. Dans un mode de réalisation, une première unité centrale de traitement met en oeuvre le module de sélection, le module de découpage, et au moins un module de codage, les modules de codage restant étant mis en oeuvre 30 par au moins une deuxième unité centrale de traitement CPU. L'invention a aussi pour objet un procédé de codage d'au moins une séquence vidéo composée d'une suite d'images, lesdites images découpées en N partitions avant leur codage par N modules de codage, comprenant les étapes suivantes: détermination du temps de codage ayant été requis pour coder chaque partitions de la dernière image vidéo codée ; sélection d'une nouvelle découpe d'image, une découpe d'image correspondant à un ensemble de N partitions définissant la manière dont les images du flux sont découpées avant d'être codées, les tailles des partitions de la découpe d'image à appliquer pour le codage d'une image courante étant déterminées en fonction des temps de codage par partition estimés par les modules de codage pour la dernière image codée de manière à ce que la charge de calcul soit sensiblement la même pour les N modules de codage ; découpage de l'image courante selon la découpe d'image sélectionnée ; codage des N partitions de l'image courante par les N modules de codage. Dans un mode de réalisation, le procédé comprend une étape de détermination de la taille de la partition associée à chaque module de codage pour une période PM en estimant le temps moyen de codage d'un macrobloc T_MB par module pendant la période précédente PM-1, la taille des partitions à utiliser pour la période PM étant égale à la taille de la partition qui a été utilisée pendant la période précédente PM-1 multipliée par le rapport entre le temps de codage de la dernière partition codée pendant la période PM-1 et le temps moyen de codage par macrobloc T_MB estimé pour cette période. L'invention a aussi pour objet un programme d'ordinateur comportant des instructions pour l'exécution du procédé de codage décrit précédemment, lorsque le programme est exécuté par un module de traitement de données. D'autres caractéristiques et avantages de l'invention apparaîtront à l'aide de la description qui suit donnée à titre illustratif et non limitatif, faite en regard des dessins annexés parmi lesquels : la figure 1 donne un exemple de système de codage selon l'invention ; la figure 2A donne un exemple illustrant les différents temps de codage requis pour des partitions P1-P6 d'une découpe d'image donnée lorsqu'elles ont la même taille ; la figure 2B illustre le l'intérêt de l'équilibrage des temps de codage entre modules de codage ; la figure 3 présente un exemple d'une partition de découpe d'image dont les dimensions peuvent varier; la figure 4 donne un exemple de découpe d'image comprenant six partitions ; la figure 5 donne un exemple d'implémentation du système selon l'invention ; la figure 6 donne un exemple de codage de séquence vidéo comprenant un mécanisme de répartition de la charge de calcul. La figure 1 donne un exemple de système de codage selon l'invention. Le système 110 est composé d'un ensemble de modules. Dans cette description, un module est un bloc fonctionnel. En d'autres termes, un module correspond à l'ensemble des moyens matériels et/ou logiciels permettant la mise en oeuvre d'une ou plusieurs fonctions. Dans ce mode de réalisation, le système de codage reçoit en entrée une séquence vidéo 106 composée d'une suite d'images et comprend un module de sélection de découpe d'image 100, un module de découpage 101, un ensemble de modules de codage 102-104. Le système 110 peut également comprendre un module 107 permettant de construire un flux de sortie 108. Le module de sélection 100 a pour objectif de déterminer et de mettre à jour la découpe d'image utilisée. Comme explicité précédemment, une découpe d'image correspond à un ensemble de paramètres définissant un ensemble d'au moins deux partitions permettant de découper les images de la séquence vidéo 106 avant leur codage. Un aspect essentiel de l'invention est que la découpe d'image est choisie par le module de sélection 100 de manière à homogénéiser la charge de calcul supportée par les différents modules de codage 102-104 tout en garantissant un codage temps réel de la séquence vidéo. Lorsqu'une image de la séquence vidéo est encodée par le système, les temps de calcul qu'a nécessité le codage des partitions par chaque module de codage est estimé. Ce temps de calcul peut être estimé par chaque module de calcul ou bien par le module de sélection 100. L'estimation du temps de calcul qu'a nécessité le codage d'une partition par un module de codage donné peut être effectuée de différentes manières. Dans un mode de réalisation, chaque module de codage indique 131-133 la date à laquelle le codage de la partition se termine. Si le module de sélection 100 connaît à la fois la date de début du codage d'une image et la date de fin de codage de chacune des partitions par les différents modules de codage 102-104, il est capable de déterminer simplement le temps de calcul qui a été requis pour le codage de chaque partition. L'estimation des temps utilisés par les différents modules 102-104 pour coder les partitions de la ou des images précédentes est ensuite utilisée pour déterminer la taille des partitions de la découpe de l'image suivante, et ce dans le but de répartir équitablement la charge de calcul entre les différents modules de codage. Les figures 2A et 2B illustrent l'intérêt de la répartition de charge de calcul entre différents modules de codage. La taille des six partitions P1-P6 de la découpe d'image est exprimée en nombre de macroblocs 201 et le temps de codage d'une partition donnée est exprimé en millisecondes 200. La figure 2A donne un exemple illustrant les différents temps de codage requis pour des partitions P1-P6 d'une découpe d'image donnée lorsqu'elles ont la même taille. Dans cet exemple, la partition P4 est plus complexe que la partition P3 et requiert donc un temps de codage plus important, soit 15 millisecondes pour P4 et 9 millisecondes pour P3. La figure 2B illustre l'intérêt de l'équilibrage des temps de codage entre modules de codage. Les temps de codage sont égaux à 10 millisecondes pour chacune des six partitions P1-P6 de la découpe d'image. Pour cela, la taille des partitions a été modifiée en utilisant la technique décrite précédemment. A titre d'exemple, la taille de la partition associée à un module de codage donné pour une période temporelle PM peut être déterminée en estimant le temps moyen de codage d'un macrolbloc T_MB par ce module pendant la période précédente PM-1, la taille des partitions à utiliser pour la période PM étant égale à la taille de la partition qui a été appliquée pendant la période PM-1 multipliée par le rapport entre le temps de codage de la dernière partition de la période PM-1 et le temps moyen de codage par macrolbloc estimé pour cette période. Cela peut être résumé par l'expression suivante : Taille(PM) = Taille(PM-1)xT_der/T_MB dans laquelle : Taille(PM) désigne la taille de la partition associée à un module de codage donné pour la période temporelle PM ; Taille(PM-1) désigne la taille de la partition associée à ce même module de codage pour la période temporelle PM-1 ; T_der désigne le temps de codage de la dernière partition de la période PM1, T _ MB le temps moyen de codage par macrolbloc estimé pour la période PM1. La période PM de mise à jour de la découpe d'image peut être choisie par exemple égale à deux secondes, les temps de codage par module de codage étant dans ce cas moyennés sur l'ensemble des images codées entre deux mises à jour. La découpe d'image peut également être mise à jour pour chaque image de la séquence vidéo. La période PM peut également correspondre à la période de renouvellement des images INTRA ou PREDICTIVE de la séquence vidéo à coder. Alternativement, la découpe d'image peut être mise à jour régulièrement mais sans période prédéfinie de manière à ce que la durée Dmaj(n) entre deux instants successifs de mises à jours Tmaj(n-1) et Tmaj(n) soit comprise dans une plage de valeurs [Dmin ; Dmax]. Dans cet exemple, Dmin représente la durée minimum acceptable entre deux instants successifs de mise à jour et Dmax représente la durée maximum acceptable entre deux instants successifs de mise à jour. Dans un mode de réalisation, Dmin peut être choisie égale à une seconde et Dmax égale à trois secondes. Avantageusement, le tirage aléatoire d'une valeur de Dmaj permet d'ajouter une composante aléatoire sur le positionnement des frontières. Dans un mode de réalisation, les deux découpes d'image sélectionnées par le module 101 à deux instants successifs de mise à jour Tmaj(n-1) et Tmaj(n) sont choisies de manière à ce que toutes les frontières entre partitions soient déplacées. Pour cela, la découpe d'image peut être modifiée en faisant varier la dimension et/ou le nombre des partitions la composant. Un avantage supplémentaire de l'invention est que les frontières entre partitions sont moins visibles du fait de leur variation d'une mise à jour à l'autre de la découpe d'image. Les différentes découpes d'image sélectionnées par le module 100 5 sont composées d'un nombre N constant de partitions correspondant au nombre de modules de codage 102-104 utilisés. C'est donc la taille desdites partitions qui varie d'une mise à jour à l'autre. A titre d'exemple et comme cela est illustré avec la figure 3, les dimensions horizontales et verticales de toutes ou partie des partitions 303 de la découpe d'image peuvent varier 300, 10 301 d'un instant de mise à jour à l'autre. Dans une autre alternative, la découpe d'image peut être sélectionnée en tenant compte du contenu vidéo. Ainsi, une frontière de partition peut être déplacée de manière à éviter une forme donnée, pour ne pas couper en deux un visage par exemple. A titre d'exemple, un filtre de Sobel peut être 15 utilisé pour cela, ce filtre permettant la mise en oeuvre d'une détection de contours. Le système comprend également un module de découpage 101 des images de la séquence vidéo 106 mettant en oeuvre la découpe d'image sélectionnée par le module de sélection 100. Ce module 101 utilise 20 notamment comme données d'entrées les images du flux vidéo à coder 106 et la découpe d'images 111 choisie par le module de sélection 100. Le résultat de cette découpe correspond à un ensemble de partitions 112-114. Les partitions 112-114 sont ensuite transmises à un ensemble d'au moins un module de codage 102-104. Un module de codage a pour fonction 25 d'encoder l'une des N partitions de l'image courante selon la découpe d'image sélectionnée. Les partitions encodées peuvent ensuite être transmises à un module de génération de flux 107. Ce module a par exemple pour fonction de multiplexer N flux correspondant aux partitions encodées ainsi qu'un flux 109 30 de syntaxe permettant au décodeur de séparer les flux associés à chaque partition pour les décoder. Dans cet exemple, c'est le premier module de codage 102 qui génère le flux de syntaxe. L'homme du métier peut déterminer sans effort particulier d'autres configurations possibles pour générer le flux de syntaxe. La figure 4 donne un exemple de découpe d'image comprenant six partitions 410-415. La figure 5 donne un exemple d'implémentation du système selon l'invention. Dans cet exemple, le système comprend N unités centrales de 10 traitement (CPU) 501-503. Une première unité centrale de traitement 501 met en oeuvre le module de sélection 100, le module de découpage 101 et un premier module de codage 102 en charge par exemple de coder la première partition de la découpe d'image sélectionnée. Le système comprend également N-1 unités 15 centrales de traitement CPU 502-503, chacune de ces unités de traitement étant responsable du codage de l'une des partitions (autre que la première qui est traitée par la première unité CPU 501). Les unités CPU peuvent communiquer entre elles par exemple via un bus de communication 500 ou par réseau IP (Internet Protocol). 20 L'homme du métier peut sans effort se rendre compte que d'autres architectures peuvent être envisagées, en utilisant par exemple des composants électroniques dédiés de type ASIC (Application-Specific Integrated Circuit), des composant programmable de type FPGA (Field-Programmable Gate Array) ou d'autres types de composants dont le nombre 25 et l'utilisation peut varier d'une mise en oeuvre à l'autre. La figure 6 donne un exemple de procédé de codage d'au moins une séquence vidéo composée d'une suite d'images. Les images de la séquence sont découpées en N partitions avant leur codage par N modules de codage. Le procédé comprend une étape 600 de détermination du temps de codage ayant été requis pour coder chaque partition de la dernière image vidéo codée. Le procédé comprend aussi une étape 601 de sélection d'une 5 nouvelle découpe d'image. Comme explicité précédemment, une découpe d'image correspond à un ensemble de N partitions définissant la manière dont les images du flux sont découpées avant d'être codées. Les tailles des partitions de la découpe d'image à appliquer pour le codage d'une image courante sont déterminées en fonction des temps de codage par partition 10 estimés par les modules de codage pour la dernière image codée de manière à ce que la charge de calcul soit sensiblement la même pour les N modules de codage. Le procédé comprend aussi une étape 602 de découpage de l'image courante selon la découpe d'image sélectionnée. 15 Enfin, une étape 603 encode les N partitions de l'image courante en utilisant les N modules de codage. Si une autre image 604 de la séquence vidéo doit être codée, les étapes 600-603 sont réappliquées. REVENDICATIONS1- Système de codage d'au moins une séquence vidéo composée d'une suite d'images, le système comprenant : N modules de codage (102-104), un module de codage étant configuré pour encoder une partition d'image, lesdits modules étant configurés pour déterminer le temps requis pour coder la partition leur étant associée; un module de sélection (100) d'une découpe d'image, une découpe d'image comprenant N partitions permettant de découper les images de la séquence vidéo avant leur codage, les tailles des partitions de la découpe d'image à appliquer pour le codage de l'image courante étant déterminées en fonction des temps requis pour le codage des N partitions de l'image précédent l'image courante à coder de manière à ce que la charge de calcul requise pour le codage de l'image suivante soit sensiblement la même pour les N modules de codage ; un module de découpage (101) des images de la séquence vidéo configuré pour mettre en oeuvre la découpe d'image sélectionnée par le module de sélection. 2- Système de codage selon la revendication 1 dans lequel le module de sélection (100) d'une découpe d'images est configuré pour mettre à jour la sélection de la découpe d'image pour chaque nouvelle image de la séquence vidéo. 3- Système de codage selon la revendication 1 dans lequel le module de sélection (100) d'une découpe d'images est configurée pour mettre à jour périodiquement la découpe d'images, une période PM étant équivalente à un nombre prédéfini d'images successives de la séquence vidéo. 4- Système de codage selon la revendication 3 dans lequel le module de sélection (100) d'une découpe d'images est configuré pour que la période PM soit égale à la période de renouvellement des images de type INTRA de la séquence vidéo à coder. 5- Système de codage selon l'une des revendications 3 ou 4 dans lequel le module de sélection (100) d'une découpe d'image est configuré pour que la taille de la partition associée à un module de codage donné pour une période PM soit déterminée en estimant le temps moyen de codage d'un macrobloc T_MB par ce module pendant la période précédente PM-1, la taille des partitions à utiliser pour la période PM étant égale à la taille de la partition qui a été appliquée pendant la période PM-1 multipliée par le rapport entre le temps de codage de la dernière partition codée pendant la période PM-1 et le temps moyen de codage par macrolbloc T_MB estimé pour cette période. 6- Système de codage selon l'une des revendications précédentes dans lequel les modules de codage (102-104) sont configurés pour estimer les temps requis pour le codage des N partitions de l'image précédent l'image courante à coder. 7- Système de codage selon l'une des revendications précédentes dans lequel une première unité centrale de traitement (501) est configurée pour mettre en oeuvre le module de sélection, le module de découpage, et au moins un module de codage, et au moins une deuxième unité centrale de traitement CPU (502) est configurée pour mettre en oeuvre les modules de codage restants.30 8- Procédé de codage d'au moins une séquence vidéo composée d'une suite d'images, lesdites images découpées en N partitions avant leur codage par N modules de codage, comprenant les étapes suivantes: - détermination (600) du temps de codage ayant été requis pour coder chaque partition de la dernière image vidéo codée ; sélection (601) d'une nouvelle découpe d'image, une découpe d'image correspondant à un ensemble de N partitions définissant la manière dont les images du flux sont découpées avant d'être codées, les tailles des partitions de la découpe d'image à appliquer pour le codage d'une image courante étant déterminées en fonction des temps de codage par partition estimés par les modules de codage (102-104) pour la dernière image codée de manière à ce que la charge de calcul soit sensiblement la même pour les N modules de codage ; - découpage (602) de l'image courante selon la découpe d'image sélectionnée ; codage (603) des N partitions de l'image courante par les N modules de codage. 9- Procédé de codage selon la revendication 8 comprenant une étape de détermination de la taille de la partition associée à chaque module de codage pour une période PM en estimant le temps moyen de codage d'un macrolbloc T_MB par module pendant la période précédente PM1, la taille des partitions à utiliser pour la période PM étant égale à la taille de la partition qui a été utilisée pendant la période précédente PM-1 multipliée par le rapport entre le temps de codage de la dernière partition codée pendant la période PM-1 et le temps moyen de codage par macrolbloc T_MB estimé pour cette période. 10- Programme d'ordinateur comportant des instructions pour l'exécution du procédé de codage selon la revendication 8, lorsque le programme est exécuté par un module de traitement de données.