FR 2930059 A1 20091016 FR 0852374 A 20080409 TRAITEMENT D'UNE SEQUENCE VIDEO DANS UNE MEMOIRE CACHE L'invention se rapporte au traitement d'une séquence vidéo numérique à l'aide d'une mémoire cache, par exemple à des fins d'encodage. Les procédés de traitement d'image peuvent utiliser une segmentation des images en macroblocs de par exemple 16x16 pixels. Typiquement, il est connu de rechercher des vecteurs de mouvement associant un macrobloc d'une première image à un ensemble de pixels d'une deuxième image. Les valeurs de ces pixels peuvent être lues, et ce à des fins variées. Par exemple, dans le cadre d'un procédé d'encodage, on peut chercher à déterminer des vecteurs de mouvement obtenus à partir d'images sous- échantillonnées, dites images de niveau inférieur, afin d'orienter le choix des vecteurs de mouvement pour les macroblocs d'images de niveau supérieur, comme l'illustre la figure 1. Pour un macrobloc B1 de niveau inférieur N donné, on peut choisir comme vecteur candidat pour le macrobloc B11 de niveau supérieur N-1 le vecteur de mouvement V1,N_1 partant du centre du macrobloc B11 et de longueur déterminée en multipliant les coefficients du vecteur de mouvement V1,N correspondant au macrobloc B1 par des constantes respectives. Ces constantes correspondent au sous-échantillonnage effectué. Dans l'exemple représenté sur la figure 1, l'image de niveau N est obtenue en filtrant par un filtrage passe-bas le signal vidéo dans les directions horizontales et verticales, puis en supprimant un pixel sur deux dans la direction horizontale, et un pixel sur deux dans la direction verticale, de sorte que les constantes sont de 2 en horizontal et de 2 en vertical. Le vecteur candidat V1,N_1 définit un ensemble de pixels, dont les valeurs sont lues à des fins de comparaisons aux pixels du macrobloc B11 de niveau supérieur. Un vecteur de mouvement définitif est estimé à partir des résultats de ces comparaisons. De façon similaire, le vecteur V1,N permet de déterminer les vecteurs candidats et les ensembles de pixels pour les blocs B12, B13 et B14. Selon un autre exemple, on peut chercher à déterminer des vecteurs de mouvement à des fins de prises de décisions quant aux types des macroblocs, par exemple type I (comme � Intra � en anglais) ou type P (comme � Predicted � en anglais). Les valeurs de pixels à lire sont mémorisées dans une mémoire de blocs, structurée en zones mémoire. Chaque zone mémoire est apte à stocker les valeurs de pixels d'un bloc mémoire de la deuxième image. Pour lire une valeur d'un pixel donné, il peut être nécessaire de lire toutes les valeurs de pixels des pixels du bloc mémoire auquel appartient le pixel donné. Aussi, pour un macrobloc donné, l'ensemble de pixels associé à ce macrobloc par le vecteur de mouvement correspondant, correspond en fait à un ensemble de blocs mémoire. Lors de la lecture des valeurs de pixels associées à un macrobloc donné, il est donc nécessaire de lire toutes les valeurs de pixels de l'ensemble de blocs mémoire correspondant à ces valeurs de pixels. La lecture des valeurs de pixels des blocs mémoire dans la mémoire de blocs peut être relativement longue. II est connu d'utiliser une mémoire cache afin d'accélérer les requêtes de lecture. Lorsque les valeurs de pixels d'un bloc mémoire donné sont lues pour la première fois dans la mémoire de bloc, ces valeurs peuvent être recopiées dans la mémoire cache, afin de permettre une lecture ultérieure de ces valeurs plus rapide. Toutefois, les mémoires caches étant relativement onéreuses, la taille de ces mémoires est en général limitée. II est en conséquence souhaitable d'optimiser le choix des blocs 25 mémoire à conserver dans la mémoire cache, afin de permettre un traitement globalement plus rapide. Selon un premier aspect, l'invention a pour objet un procédé de traitement d'une séquence vidéo d'images subdivisées en macroblocs de pixels, dans lequel : 30 - un champ de vecteurs de mouvement est reçu, chaque vecteur de mouvement associant par adressage un macrobloc de pixels d'une première image à un ensemble de blocs mémoire d'une deuxième image, cet ensemble comprenant au moins un bloc mémoire, 3 - pour au moins un macrobloc, les valeurs de pixels des blocs mémoire de l'ensemble de blocs mémoire associé sont lues en utilisant une mémoire cache. Le procédé comporte les étapes consistant à : - pour au moins un bloc mémoire de la deuxième image, mémoriser dans une étiquette correspondant à ce bloc mémoire un comptage du nombre de macroblocs dont les ensembles de blocs mémoire associés comportent ce bloc mémoire, et - lors d'une lecture des valeurs de pixels d'un bloc mémoire donné dans une mémoire de blocs distincte de la mémoire cache, décider de l'emplacement d'écriture de ces valeurs de pixels de ce bloc mémoire donné, parmi un jeu d'emplacements de la mémoire cache correspondant à ce bloc mémoire donné, à partir des étiquettes des blocs mémoire stockés à ces emplacements. Ainsi, l'information fournie par le champ de vecteurs est utilisée afin de mieux gérer les écritures de la mémoire cache, et ce de façon relativement simple à mettre en oeuvre. La prise en compte du nombre de macroblocs pour lesquels un bloc mémoire est sollicité permet une optimisation relative de la gestion de la mémoire cache. Le procédé est relativement rapide à mettre en oeuvre. Les macroblocs et les blocs mémoire peuvent être de taille 16x16 pixels, 8x8 pixels, 16x32 pixels, 32x32 pixels, ou autre. Les macroblocs peuvent avoir, ou ne pas avoir, les mêmes dimensions que les blocs mémoire. La lecture des valeurs de pixels des blocs associés à un macrobloc peut être effectuée pour chaque macrobloc, ou alternativement pour une partie seulement des macroblocs. La mémorisation du comptage du nombre de macroblocs correspondant à un bloc mémoire peut être effectuée pour chaque bloc mémoire, ou alternativement pour une partie seulement des blocs mémoire, par exemple ceux pour lesquels cette valeur dépasse ou est en dessous d'un certain seuil. La mémoire cache peut par exemple comprendre une MRAM (de l'anglais � Magnetic Random Access Memory �), ou autre. La mémoire de blocs peut comprendre une SDRAM (de l'anglais � Synchronous Dynamic Random Access Memory �), ou autre. Les valeurs de pixels peuvent par exemple comprendre des valeurs de composantes RGB (de l'anglais � Red Green Blue �), des valeurs de composantes YUV, ou autre. Chaque vecteur de mouvement peut associer directement un macrobloc à un ensemble de blocs mémoire. Alternativement, chaque vecteur de mouvement peut associer à un macrobloc un ensemble de pixels, les vecteurs de mouvement étant ainsi relativement précis. Chaque ensemble de pixels peut correspondre à un ensemble de blocs mémoire, la mémoire stockant les valeurs de pixels étant structurée en blocs mémoire. L'ensemble de blocs mémoire peut comprendre un ou plusieurs bloc(s) mémoire. Avantageusement, pour au moins un bloc mémoire, on décrémente la valeur de comptage à chaque requête en lecture des valeurs de pixels de ce bloc mémoire. Ainsi, il est tenu compte, pour le choix de l'emplacement de la mémoire cache, du nombre de macroblocs à traiter, pour lesquels une lecture des valeurs de pixels du bloc mémoire sera nécessaire, et non des macroblocs pour lesquels cette lecture a déjà été effectuée. Cette décrémentation peut être effectuée pour tous les blocs mémoire, ou pour une partie seulement d'entre eux. Alternativement, il n'est pas effectué de décrémentation de la valeur de comptage, de sorte que cette valeur reste constante lors du traitement d'une image. Avantageusement, pour chaque bloc mémoire, on mémorise dans l'étiquette correspondante un identifiant d'un macrobloc dont l'ensemble de blocs mémoire associé comporte ce bloc mémoire. Ainsi, on prend en compte la localisation du macrobloc dans la première image pour gérer la mémoire cache. Par exemple, lors du traitement de macroblocs en haut à gauche de la première image, on pourra choisir d'écraser dans la mémoire cache les valeurs de pixels de blocs mémoire associés à un macrobloc en bas à droite de la première image. Ainsi, le macrobloc le plus pertinent parmi les macroblocs associés à un bloc mémoire donné serait le prochain macrobloc, selon un ordre de 5 traitement des macroblocs, à solliciter le bloc mémoire donné. Lors du traitement d'un macrobloc en haut à gauche de la première image, on pourra choisir de conserver dans la mémoire cache les valeurs de pixels de blocs mémoire dont on sait qu'ils seront prochainement sollicités par des macroblocs également en haut à gauche de la première image. Avantageusement, pour chaque bloc mémoire, le macrobloc dont l'identifiant est mémorisé est le dernier macrobloc, selon un ordre de traitement des macroblocs, dont l'ensemble de blocs mémoire associé comporte ce bloc mémoire. Le choix du dernier macrobloc offre un compromis entre simplicité de mise en oeuvre du procédé et pertinence du macrobloc dont l'identifiant est mémorisé. L'invention n'est en rien limitée par ces améliorations. On peut prévoir de se contenter du comptage, pour chaque bloc mémoire, du nombre de macroblocs sollicitant ce bloc mémoire. Avantageusement, le procédé comprend en outre les étapes consistant à estimer un paramètre de cohérence de mouvement à partir du champ de vecteurs de mouvement reçu, choisir un degré d'associativité de la mémoire cache à partir de la valeur estimée du paramètre de cohérence de mouvement, et attribuer à chaque bloc mémoire un nombre d'emplacements de la mémoire cache égal au degré d'associativité choisi. Ainsi, le degré d'associativité de la mémoire cache est choisi en fonction de la cohérence du champ de vecteurs. Par exemple, si les déplacements entre deux images sont relativement peu cohérents, on peut choisir un degré d'associativité égal à 1 ou 2. Lors de l'écriture de valeurs de pixels d'un bloc mémoire donné, le nombre d'emplacements du jeu d'emplacements correspondant audit bloc mémoire donné est relativement faible. En effet, les déplacements étant relativement peu corrélés entre eux, il ets plus efficace d'avoir une associativité relativement faible. Si les 6 mouvements ne sont pas du tout corrélés entre eux, un degré d'associativité de 1 peut être le plus efficace. Le paramètre de cohérence peut être une variance du champ de vecteurs par exemple, ou bien un autre paramètre. La variance peut être obtenue à partir des orientations des vecteurs et/ou des modules des vecteurs. Le procédé selon un aspect de l'invention trouve des applications variées. Par exemple, l'étape de lecture des valeurs de pixels d'un ou plusieurs bloc(s) mémoire associé(s) à un macrobloc donné peut être suivie d'une étape de recherche d'un vecteur de mouvement définitif pour ce macrobloc donné. Dans ce cas, le vecteur de mouvement reçu pour le macrobloc donné peut être un vecteur candidat indiquant un ensemble de pixels à partir 15 desquels déterminer le vecteur de mouvement définitif. En particulier, on peut prévoir de déterminer, préalablement à l'étape de réception du champ de vecteurs, un champ de vecteurs préliminaires associant chacun un macrobloc de pixels d'une image obtenue par sous-échantillonnage de la première image à des pixels d'une image obtenue par 20 sous-échantillonnage de la deuxième image. La première et la deuxième images peuvent être elles-mêmes obtenues par sous-échantillonnages(s) de deux images de la séquence vidéo, ou bien être deux images de la séquence vidéo. Le champ de vecteurs est estimé à partir du champ de vecteurs préliminaires, par exemple en multipliant les coefficients des vecteurs 25 préliminaires par des constantes respectives, les valeurs de ces constantes dépendant du sous-échantillonnage effectué. Le champ de vecteurs est ainsi obtenu de manière hiérarchique. Les valeurs de pixels des blocs mémoire lues peuvent en particulier être utilisées pour rechercher un vecteur de mouvement définitif, les vecteurs du champ de vecteurs étant considérés 30 comme des vecteurs candidats. Le procédé selon un aspect de l'invention peut ainsi être utilisé dans un procédé de recherche hiérarchique de vecteurs de mouvement. Selon un autre exemple, la première et la deuxième image étant deux images de la séquence vidéo, on peut prévoir que pour chaque macrobloc, suite à l'étape de lecture, les valeurs de pixels du macrobloc soient comparées à au moins une partie des valeurs de pixels lues. A partir du résultat de la comparaison, une décision peut être prise quant au type d'encodage pour ce macrobloc, par exemple un type de codage I comme � Intra � ou P comme � Predicted � en anglais. L'invention n'est bien entendu pas limitée par ces applications. Selon un autre aspect, l'invention a pour objet un programme d'ordinateur destiné à être stocké dans une mémoire d'un dispositif de traitement de séquence vidéo, et/ou stocké sur un support mémoire destiné à coopérer avec un lecteur dudit dispositif et/ou téléchargé via un réseau de télécommunication. Ce programme comporte des instructions pour la mise en oeuvre du procédé selon un aspect de l'invention, lorsque ces instructions sont exécutées par un processeur du dispositif de traitement de séquence vidéo. Selon encore un autre aspect, l'invention a pour objet un dispositif de traitement de séquence vidéo d'images subdivisées en macroblocs de pixels, comprenant des moyens d'estimation d'un champ de vecteurs de mouvement, chaque vecteur de mouvement associant par adressage un macrobloc de pixels d'une première image à un ensemble de blocs mémoire d'une deuxième image, cet ensemble comprenant au moins un bloc mémoire. Des moyens d'accès permettent, pour au moins un macrobloc, de lire les valeurs de pixels des blocs mémoire de l'ensemble de blocs mémoire associé à ce macrobloc, ces moyens d'accès comprenant une mémoire cache. Pour au moins un bloc mémoire de la deuxième image, une étiquette correspondant à ce bloc mémoire est prévue. Cette étiquette est destinée à mémoriser un comptage du nombre de macroblocs dont les ensembles de blocs mémoire associés comportent ce bloc mémoire. Des moyens de calcul permettent de, lors d'une lecture des valeurs de pixels d'un bloc mémoire donné dans une mémoire de blocs distincte de la mémoire cache, décider de l'emplacement parmi un jeu d'emplacements de la mémoire cache correspondant à ce bloc mémoire donné, d'écriture de ces valeurs de pixels de ce bloc mémoire donné, ces moyens de calcul utilisant les contenus des étiquettes des blocs mémoire stockés à ces emplacements. Ce dispositif peut être par exemple un ordinateur, un serveur, un terminal, un dispositif d'encodage vidéo, ou autre. Selon encore un autre aspect, l'invention a pour objet une mémoire comprenant une pluralité de zones mémoire, chaque zone mémoire comportant un champ de données, apte à mémoriser les valeurs de pixels d'un bloc mémoire d'une image, et une étiquette. Cette étiquette permet de mémoriser un nombre de macroblocs d'une autre image associés par des vecteurs de mouvement respectifs au bloc mémoire dont les valeurs de pixels sont mémorisées dans le champ de données. Cette mémoire peut être une mémoire de blocs ou bien une mémoire cache. Dans ce dernier cas, les zones mémoire peuvent être dites lignes de cache. D'autres particularités et avantages de la présente invention apparaîtront dans la description ci-après. La figure 1, déjà commentée, illustre un exemple de procédé d'estimation de vecteurs de mouvement hiérarchique. La figure 2 illustre un exemple de vecteur de mouvement associant un 20 macrobloc à un ensemble de blocs mémoire. La figure 3 montre un exemple de dispositif de traitement de séquence vidéo selon un mode de réalisation de l'invention. Les figures 4A et 4B montrent un exemple d'organigramme selon un mode de réalisation de l'invention. 25 La figure 5 montre un exemple d'organigramme selon un autre mode de réalisation de l'invention. Des références identiques sont utilisées pour désigner des objets identiques ou similaires. Est représentée sur la figure 2 une portion d'image 22. 30 Les valeurs des pixels de l'image 22 sont stockées dans une mémoire de blocs (non représentée sur la figure 2), structurée en zones. Sont représentés sous la référence B;,i des blocs mémoire de l'image, les valeurs 9 des pixels d'un même bloc mémoire étant stockées dans une même zone de la mémoire de blocs. Un vecteur de mouvement V permet d'associer un macrobloc d'une autre image MB,,,, représenté ici en pointillés, à un ensemble de pixels 20. Pour lire les valeurs de pixels de cet ensemble de pixels, il est nécessaire de lire les valeurs de pixels de l'ensemble 21, du fait de l'accès par blocs à la mémoire de blocs. Par exemple, tous les pixels du bloc B;o,io doivent être lus, même si une partie seulement de ces pixels est utilisée par la suite. Le vecteur de mouvement V associe donc un ensemble de blocs 21 d'une image à un macrobloc MB,,, d'une autre image. La figure 3 montre un exemple de dispositif 34 selon un mode de réalisation de l'invention. Ce dispositif peut par exemple comprendre ou faire partie d'un serveur d'encodage vidéo. Ce dispositif de traitement de séquence vidéo 34 comporte une mémoire de blocs 32 structurée en zones mémoire 351, 352,..., 35p,... Cette mémoire 32 peut par exemple être une mémoire RAM (de l'anglais � Random Access Memory �), une SDRAM, ou autre. Chaque zone 351, 352,..., 35p,... est apte à mémoriser les valeurs de pixels d'un bloc mémoire, et comporte à cet effet comprend un champ de données 371, 372,..., 37p,,... Chaque champ de données 371, 372,..., 37p,,... permet de mémoriser les valeurs des pixels data_1_1, data_1_2,..., data_io_jo,... correspondant respectivement à des blocs mémoire. Par exemple, le champ de données 37p est destiné à mémoriser les valeurs pixels data_io_jo du bloc mémoire B;o,io sur la figure 2. Chaque zone mémoire 351, 352,..., 35p,... comprend en outre une étiquette 361, 362,..., 36p,... pour mémoriser une adresse &1,1, &1,2,..., du bloc correspondant, une valeur de comptage C1,1, C122,..., et un identifiant MBdm(1'1), MBdrr,(12)MBdm(io,io)L'adresse &1,1, &1,2,..., peut par exemple comprendre les valeurs de deux indices i, j permettant d'identifier les pixels du bloc correspondant à la zone mémoire respective, ou n'importe qu'elle autre adresse permettant d'identifier les pixels du bloc. 10 Pour une zone mémoire donnée 35p, la valeur de comptage Cio,io est un nombre de macroblocs associés à des ensembles de blocs mémoire comprenant le bloc mémoire B;o,io correspondant à cette zone 35p. Ces valeurs de comptage peuvent être déterminées en parcourant les macroblocs, par exemple de gauche à droite et de bas en haut : pour chaque macrobloc, on incrémente de 1 les valeurs de comptage des blocs mémoire associés à ce macrobloc par le vecteur de mouvement correspondant. En cours de traitement, lorsque des lectures des valeurs de pixels des blocs mémoire sont effectuées, la valeur de comptage correspondant à un bloc mémoire donné est décrémentée à chaque accès aux valeurs de pixels de ce bloc mémoire donné, que la lecture soit effectuée sur la mémoire cache ou sur la mémoire de blocs. La valeur de comptage Cio,io donne donc une indication du nombre de lectures de la zone mémoire 35p à prévoir. Ainsi, lorsque tous les accès nécessaires à un bloc mémoire donné sont effectués, la valeur de comptage de ce macrobloc est nulle. Pour une zone mémoire donnée 35p, l'identifiant MBdmr''°) comprend un identifiant, par exemple une adresse, du dernier macrobloc, selon l'ordre de traitement des macroblocs, associé au bloc mémoire B;o,io correspondant à cette zone 35p. L'ordre de traitement des macroblocs peut par exemple être de bas en haut, et de gauche à droite. L'adresse de macrobloc peut comprendre deux indices de macroblocs par exemple. Le dispositif 34 comprend en outre une mémoire cache 31. Dans cet exemple la mémoire cache 31 est K fois associative, K étant dans cet exemple égal à 4. La mémoire cache 31 comporte donc K=4 sous-caches 301, 302, 303, 304, et à chaque zone mémoire 35p de la mémoire de bloc 32 correspondent K=4 zones ou emplacements 381,p, 382,p, 383,p, 384,p de la mémoire cache 31. Chacun de ces emplacements 381,p, 382,p, 383,p, 384,p, dits également lignes de cache, appartient à un sous-cache respectif 301, 302, 303, 304. Le contenu d'une zone mémoire donnée 35p peut être écrit dans 4 lignes de caches correspondantes 381,p, 382,p, 383,p, 384,p. Par ailleurs, chaque ligne de cache correspond à plus d'une zone mémoire. Typiquement, chaque ligne de cache 381,p, 382,p, 383,p, 384,p correspond aux zones mémoire 35p_4, 35p, 35p+4, 35p+8, etc. c'est-à-dire aux zones mémoire 35p mod(K). Chaque ligne de cache 381,p, 382,p, 383,p, 384,p comporte un champ de données 391,p, 392,p, 393,p, 394,p et une étiquette 401,p, 402,p, 403,p, 404,p. Chaque champ de données 391,p, 392,p, 393,p, 394,p est destiné à stocker des valeurs de pixels data_ii ji, data_i2j2, data_i3j3, data_i4j4 d'un bloc mémoire également stocké dans la mémoire de blocs 32. Chaque étiquette 401,p, 402,p, 403,p, 404,p est destinée à stocker : - un identifiant ou une adresse &il,n, &j2p, &j3,]3, &j4j4 du bloc mémoire dont les valeurs de pixels sont stockées dans le champ de données 391,p, 392,p, 393,p, 394,p correspondant, - un nombre de macroblocs C;l,il, C;2,i2, C;3p, Ci4,i4 associés à ce bloc mémoire, et - un identifiant du dernier macrobloc MBdm('''''), MBdm02' 2>, MBdm(13''3), MBdm('4''4) selon l'ordre de traitement des macroblocs, associé à ce bloc mémoire. En cours de traitement, lorsqu'une lecture des valeurs de pixels d'un bloc mémoire est effectuée sur la mémoire cache, le nombre de macroblocs stocké en mémoire cache et associé à ce bloc mémoire donné est décrémenté. Si la lecture est effectuée sur la mémoire de blocs, la valeur du nombre de macrobloc recopiée en mémoire cache est également décrémentée de façon à prendre en compte cette lecture. Le dispositif comporte en outre des moyens de traitement 33, par exemple un processeur, un DSP (de l'anglais � Digital Signal Processor �) ou autre. Le processeur 33 comporte des moyens d'estimation de champs de vecteur permettant d'estimer un champ de vecteurs de mouvement. Chaque vecteur associe un macrobloc d'une première image à un ensemble de blocs mémoire d'une deuxième image, comme illustré par la figure 2. Pour un macrobloc donné MBm, le processeur 33 effectue une lecture des valeurs de pixel des blocs mémoire B;o,io, Bi0+4,i0+3 dans la mémoire de blocs 32, en utilisant des moyens d'accès, ici deux bus 41, 42 et la mémoire cache 31. Lorsque la mémoire cache 31 reçoit par le bus 41 une requête en lecture des pixels d'une zone mémoire 35p, la mémoire cache vérifie si ces valeurs de pixels sont mémorisées dans la mémoire cache. La cas échéant, les valeurs de pixels sont fournies au processeur 33 (succès de cache ou � cache hit � en anglais). Si au contraire la mémoire cache 31 ne dispose pas de ces valeurs de pixels (défaut de cache ou � cache miss � en anglais), la mémoire cache 31 effectue une lecture de la zone 35p de la mémoire de blocs 32, via le bus 42. Le contenu de la zone 35p est alors recopié dans la mémoire cache 31, et également transmis au processeur 33. Or, le cache étant K=4 fois associatif, le contenu d'une zone mémoire donnée 35p peut être écrit dans K=4 lignes de caches correspondantes 381,p, 382,p, 383,p, 384,p. Des moyens de calculs, ici intégrés dans le processeur 33, décident de la ligne de cache à choisir parmi ces K=4 lignes de cache. Le processeur utilise à cet effet les contenus des étiquettes des lignes de caches 381,p, 382,p, 383,p, 384,p. Pour chaque ligne de cache 38k,p, k courant de 1 à K, est calculé une densité d'utilisation locale : Clk Jk A+diSt(MBm,MBd /' ) Où A est une constante strictement positive, par exemple A=1. La distance estimée dist(MB,MBdm'k) entre le macrobloc courant MB,,, et le macrobloc dont l'identifiant MBdm'k est stocké dans l'étiquette 40k,p peut être n'importe quelle distance, par exemple une distance euclidienne. On choisira de préférence une distance relativement rapide à estimer, comme une distance de Manhattan. La distance peut être estimée à partir de coordonnées de blocs, ou de coordonnées de pixels par exemple. Ainsi, la densité d'utilisation locale Dk pour une ligne de cache 40k,p croît avec le nombre Clk,%k de macroblocs sollicitant le bloc mémoire correspondant, et décroît avec la distance entre le macrobloc courant MB,,, et 30 le macrobloc dont l'identifiant MBdm'k est stocké dans l'étiquette 40k,p. Dk = 13 Pour une ligne de cache 40k,p, la densité d'utilisation locale donne donc une indication de la probabilité pour que le contenu de cette ligne de cache soit prochainement lu par le processeur 33. Le processeur 33 choisit d'écrire le contenu de la zone mémoire donnée 35p dans la ligne de cache 40k,p pour laquelle la densité d'utilisation Dk est la plus faible. Ce procédé permet de préserver dans la mémoire cache les données utiles dans un futur proche, et ainsi de diminuer significativement le nombre de défauts de cache par rapport à une gestion de cache LRU (de l'anglais � Last Recently Used �), pour une même séquence vidéo. Les figures 4A et 4B illustrent un exemple de procédé de traitement de séquence vidéo selon un mode de réalisation de l'invention. L'algorithme représenté est adapté à une paire d'images, mais il est bien entendu adaptable à une séquence vidéo comportant un nombre quelconque d'images. Deux images Im_1, Im_2 d'une séquence vidéo sont reçues lors d'une étape 400. Ces deux images peuvent se succéder immédiatement, ou bien être séparées l'une de l'autre par une ou plusieurs images dans la séquence vidéo. Ces deux images sont mémorisées comme images de niveau zéro Im_1 (°), Im_2(°), lors d'une étape 401. Puis ces images subissent des sous-échantillonnages successifs. Une boucle indicée par la variable I est exécutée, avec les étapes classiques d'initialisation, de test et d'incrémentation. Lors de chaque boucle, deux images de niveau I Im_1 (1), Im_2WWW sont obtenues par sous-échantillonnage de deux images respectives Im_1 (1-1), Im_20-1) elles-mêmes obtenues à la boucle précédente. Après avoir obtenu un nombre prédéterminé L de paires d'images sous-échantillonnées, il est procédé à une recherche de champs de vecteurs de mouvements {Vm,Lfinall entre les deux images les plus sous-échantillonnées Im_1 (L), Im_2(L), lors d'une étape 403. La variable m indice les macroblocs d'une image Im_1 (1). Cette recherche peut être effectuée en ayant recours à un procédé classique de recherche de vecteurs de mouvement. Par exemple, pour chaque macrobloc MB,,, de l'image Im_1 (L), on compare les pixels de ce macrobloc aux pixels d'une zone de recherche de l'image Im_2(L). La zone de recherche peut par exemple être choisie autour de l'emplacement correspondant au macrobloc dans l'image Im_2(L). Ces comparaisons conduisent à sélectionner un groupe de pixels de l'image Im_2(L) comme ayant des valeurs relativement proches des valeurs des pixels du MB,,, de l'image Im_1 (L) On choisit comme vecteur de mouvement Vm,Lfinal le vecteur associant le macrobloc MBm à ce groupe de pixels. Ce jeu de vecteurs de mouvement entre les deux images les plus sous-échantillonnées Im_1 (L), Im_2(L) est ensuite utilisé pour estimer des jeux de vecteurs de mouvements entre deux images Im_10), Im_20), l'indice I variant entre L-1 et O. Aussi une boucle sur cet indice I est mise en place, avec des étapes classiques d'initialisation, de test et de décrémentation. Pour deux images Im_10), Im_20) de niveau I données, on estime lors d'une étape 404 un champ de vecteurs de mouvements {Vm,i} à partir du jeu de vecteurs de mouvements définitifs pour les images de niveau 1+1 Im_10+1) et Im_20+1). Ces vecteurs de mouvements définitifs Vm,1+1fina' pour les images de niveau 1+1 sont dits préliminaires lors du traitement des images de niveau 1. Comme l'illustre la figure 1, un vecteur Vm,i peut être obtenu en multipliant par une constante un vecteur obtenu pour les images Im_1 0+'), Im_20+1). Si par exemple, chaque sous-échantillonnage de l'étape 402 est un sous-échantillonnage d'un facteur 2, cette constante est de 2. On notera que la notation fO, utilisée à plusieurs reprises sur les figures 4A, 4B et 5, ne correspond pas à une fonction particulière, mais sert seulement à indiquer que certaines données sont obtenues à partir d'autres données. Lors d'une étape 450, on détermine un jeu de vecteurs de mouvements définitifs {Vm,i final} à partir du jeu de vecteurs de mouvements {Vm,i}. Cette étape est détaillée sur la figure 4B. La recherche de vecteurs de mouvement est ainsi menée de façon hiérarchique, par des boucles indicées par I. Lors de l'exécution de la dernière boucle, I = 0, et les images pour lesquelles le champ de vecteurs définitifs est estimé sont les images de la séquence vidéo Im_1, Im_2. Ce champ de vecteurs peut être transmis vers un module d'encodage vidéo par exemple, et/ou à un module de décision de type de bloc, lors d'une étape 411. La figure 4B montre de façon plus détaillée le procédé permettant de déterminer jeu de vecteurs de mouvements définitifs {Vm,I final} de l'étape 450. A partir du jeu de vecteurs de mouvements {Vm,,}, on détermine un jeu de valeurs de comptage {C;,i} lors d'une étape 452. Chaque valeur de comptage Cz ,jcorrespond à un bloc mémoire Bq et indique un nombre de gg macroblocs dont les ensembles de blocs mémoire associés comportent ce bloc mémoire Bq. Les valeurs de comptage C;,i sont mémorisées dans la 15 mémoire de blocs. Egalement, pour chaque bloc mémoire Bq, on mémorise lors d'une étape 453 un identifiant du dernier macrobloc MBdm'j'), selon un ordre de traitement des macroblocs, dont l'ensemble de blocs mémoire associé comporte ce bloc mémoire. 20 Suit une boucle parcourant les différents macroblocs de l'image Im_1 (1). Cette boucle est indicée par m variant entre 1 et M(I), le nombre M(') de macroblocs d'une image étant variable selon le niveau de cette image. Cette boucle comporte les étapes classiques d'initialisation, de test et d'incrémentation. 25 On peut prévoir que la variable m permette de parcourir tous les macroblocs de l'image Im_10), par exemple de bas en haut et de gauche à droite. Pour un macrobloc MBm donné, lors d'une étape 412, on détermine à partir du vecteur de mouvement correspondant Vm,' un ensemble de blocs 30 mémoire {Bq} associés à ce macrobloc donné MBm. La variable q indice les blocs mémoire de cet ensemble. Cet indice varie entre 1 et une valeur el) cette valeur Q(m'I) étant susceptible de varier selon l'ensemble associé. Pour chaque bloc mémoire Bq, une lecture des valeurs des pixels de ce bloc mémoire Bq est effectuée. Est donc exécutée une boucle 405 parcourant les différents blocs mémoire de l'ensemble {Bq}, avec les étapes classiques d'initialisation, de test, et d'incrémentation. Il est d'abord procédé à un test 406 quant au stockage des valeurs des pixels du bloc mémoire Bq dans une mémoire cache. Si ces valeurs sont déjà stockées en mémoire cache, la lecture est rapide. Dans le cas contraire, il est procédé à une lecture de ces valeurs dans une zone correspondante d'une mémoire RAM. Puis les valeurs lues sont copiées dans la mémoire cache, en prévision d'une prochaine lecture de ces valeurs. Dans le cas d'une mémoire cache K fois associative, ces valeurs sont susceptibles d'être copiées dans K emplacements de caches. Pour déterminer quel emplacement de cache choisir, on calcule une valeur de densité d'utilisation locale Dk pour chaque emplacement de cache, lors d'une étape 407. Une boucle est effectuée pour parcourir les K emplacements de cache correspondant au bloc mémoire Bq. Cette boucle est indicée par k variant entre 1 et K et comporte les étapes classiques d'initialisation, d'incrémentation et de test. Puis lors d'une étape 408 est sélectionné l'emplacement, indicé ko, dont la valeur de densité d'utilisation locale Dk est la plus faible. Les valeurs de pixels du bloc mémoire Bq sont recopiées dans cet emplacement de cache, depuis la mémoire de blocs, lors d'une étape 409. Sont également recopié sur la mémoire cache une adresse de ce bloc mémoire Bq, l'identifiant de macrobloc MBdm'j') et la valeur de comptage Cz correspondant à ce bloc mémoire Bq. gg Quels que soient les résultats du test 406, c'est-à-dire que la lecture des valeurs de pixels du bloc mémoire Bq aie été effectuée sur la mémoire cache ou sur la mémoire de blocs, la valeur de comptage CZ 1 correspondant gg au bloc mémoire Bq est décrémentée lors d'une étape 451. Cette décrémentation affecte aussi bien la valeur de comptage mémorisée dans la mémoire de blocs que la valeur de comptage mémorisée dans la mémoire cache. Après avoir lu toutes les valeurs des pixels de l'ensemble de blocs {Bq}, des comparaisons sont effectuées entre les valeurs de pixels du macrobloc MB,,, et des valeurs de pixels correspondant à des parties de l'ensemble de blocs {Bq}. Ces comparaisons permettent de déterminer un vecteur de mouvement définitif Vm'lfinal pour ce macrobloc MBm de l'image Im_1 WWW, lors d'une étape 410. Sont déterminés de la même façon les vecteurs de mouvement définitifs des autres macroblocs de l'image Im_1 (1). Comme expliqué plus haut en référence à la figure 4A, ce jeu de vecteurs de mouvement définitifs {Vm,lfinal} pour les images Im_1 0W, Im_2~1~ permet de déterminer lors de l'étape 404 un jeu de vecteurs de mouvement {N/m,,_1} pour les images de niveau I-1 Im_1 0-') Lors de l'exécution de la dernière boucle, I = 0, et les images pour lesquelles le champ de vecteurs définitifs est estimé sont les images de la séquence vidéo Im_1, Im_2. Ce champ de vecteurs définitif {Vm,ofinal} peut être transmis vers un module d'encodage vidéo par exemple, et/ou à un module de décision de type de bloc, lors de l'étape 411. Le module de décision de type de bloc peut également implémenter un procédé selon un mode de réalisation de l'invention. La figure 5 montre un exemple d'organigramme susceptible d'être exécuté par un tel module de décision de type de bloc. Ce module, les moyens de calcul, les moyens d'estimation de champ de vecteur, etc. peuvent être intégrés dans un même processeur ou bien dans des processeurs distincts. Une étape 500 de réception d'un champ de vecteurs de mouvement {Vm,ofinal} est mise en oeuvre. Dans cet exemple, ce champ de vecteurs est reçu des moyens d'estimation de vecteurs mettant en oeuvre un procédé selon un mode de réalisation de l'invention, mais il peut bien entendu en être autrement. Par exemple, le champ de vecteurs de mouvement peut avoir été déterminé de 18 façon connue de l'homme du métier, par exemple en testant pour chaque macrobloc les vecteurs selon toutes les directions, ou bien les vecteurs autour d'un vecteur déterminé pour un macrobloc précédent de l'image. Est également reçu et mémorisé un jeu de valeurs de comptage {Ci,} lors d'une étape 501 et un jeu d'identifiants de dernier macrobloc {MBdm')} lors d'une étape 502. Chaque valeur de comptage C1 correspond à un bloc mémoire Bq et gg indique un nombre de macroblocs dont les ensembles de blocs mémoire associés comportent ce bloc mémoire Bq. Pour chaque bloc mémoire Bq, l'identifiant de macrobloc MBdm'j') correspondant indique le dernier macrobloc, selon un ordre de traitement des macroblocs, dont l'ensemble de blocs mémoire associé comporte ce bloc mémoire. Le jeu de valeurs de comptage initiales et/ou le jeu d'identifiants de 15 dernier macrobloc {MBdm')} peuvent avoir été déterminés antérieurement, par exemple lors d'une étape similaire à l'étape 452 et/ou 453 de la figure 4B, et ce(s) même(s) jeu(x) est ou sont utilisé(s) par le module de décision de type de bloc. Dans ce cas, on peut prévoir que ce sont des copies de ces valeurs de comptage qui sont décrémentées à chaque lecture du bloc 20 correspondant, lors d'une étape similaire à l'étape 451 de la figure 4B. Alternativement, le jeu de valeurs de comptage {Ci,i} et/ou le jeu d'identifiants de dernier macrobloc {MBdm')} sont déterminés par le module de décision de type de bloc, à partir du champ de vecteurs de mouvement {Vm,final o }. 25 Suit une étape 509 de détermination d'un degré d'associativité K' d'une mémoire cache éventuellement distincte de la mémoire cache décrite en référence aux figures 4A et 4B. Est tout d'abord estimée lors d'une étape 503 une variance a du champ de vecteurs de mouvement {vm,Ofinal} 30 Cette variance a est comparée à des seuils S1, S2, lors d'étapes de tests 504, 507, et la valeur attribuée à la variable K' dépend du résultat de ces tests (voir les étapes 505, 506, 508). 19 Ainsi, si la variance a est faible, ce qui serait le cas si les vecteurs du champ {Vm,ofinal} sont relativement semblables les uns au autres, le degré d'associativité du cache K' est relativement élevé. Lors de la lecture de valeurs de pixels d'un bloc mémoire dans la mémoire de blocs, les calculs pour déterminer la ligne de cache dans laquelle écrire ces nouvelles valeurs de pixels sont relativement longs, du fait de la valeur élevée du nombre K' de lignes de cache susceptibles d'accueillir ces nouvelles valeurs. Néanmoins, la variance étant faible, on peut espérer lire dans la mémoire cache bon nombre de valeurs de pixels de blocs mémoire, de sorte que ces calculs resteraient relativement rares. Suit une boucle portant sur les macroblocs, et indicée par la variable m, avec les étapes classiques d'initialisation, de test et d'incrémentation. Pour un macrobloc MBm donné, lors d'une étape 512, on détermine à partir du vecteur de mouvement correspondant Vm,o final un ensemble de blocs mémoire {Bq,} associés à ce macrobloc donné MBm. La variable q' indice les blocs mémoire de cet ensemble. Cet ensemble peut être différent de l'ensemble {Bq} de la figure 4B. L'indice q' varie entre 1 et une valeur maximale susceptible de varier selon l'ensemble associé. Puis les valeurs de pixels de l'ensemble {Bq,} sont lues lors d'une étape 513. Cette lecture met en oeuvre la mémoire cache pour laquelle le degré d'associativité K' a été déterminé lors de l'étape 509. L'étape 513 peut être effectuée de façon relativement similaire à l'étape 405 de la figure 4B. Cette lecture des valeurs de pixels permet d'effectuer divers calculs, par exemple des interpolations subpixelliques, des comparaisons d'au moins une partie des valeurs de pixels lues avec les valeurs de pixels du macrobloc MBm, ou autre. Ces calculs, représentés par l'étape 514, permettent de déterminer le type de codage à utiliser pour ce macrobloc.30 REVENDICATIONS1. Procédé de traitement d'une séquence vidéo d'images subdivisées en macroblocs de pixels, comprenant les étapes consistant à : recevoir (404) un champ de vecteurs de mouvement ({Vm,,}), chaque vecteur de mouvement associant par adressage un macrobloc de pixels (MBm) d'une première image (Im_1 W) à un ensemble ({Bq}) de blocs mémoire d'une deuxième image (Im_2W), ledit ensemble comprenant au moins un bloc mémoire, et pour au moins un macrobloc, lire (405) les valeurs de pixels des blocs mémoire de l'ensemble de blocs mémoire associé, en utilisant une mémoire 10 cache, caractérisé en ce que le procédé comporte en outre les étapes consistant à pour au moins un bloc mémoire de la deuxième image, mémoriser (452) dans une étiquette correspondant audit bloc mémoire un comptage 15 (C;,i) du nombre de macroblocs dont les ensembles de blocs mémoire associés comportent ledit bloc mémoire, et lors d'une lecture des valeurs de pixels d'un bloc mémoire donné dans une mémoire de blocs distincte de la mémoire cache, décider (408) de l'emplacement d'écriture des dites valeurs de pixels dudit bloc mémoire 20 donné, parmi un jeu d'emplacements de la mémoire cache, ledit jeu d'emplacements correspondant audit bloc mémoire donné, à partir des étiquettes des blocs mémoire stockés aux dits emplacements. 2. Procédé de traitement d'une séquence vidéo selon la revendication 1, 25 le procédé comprenant, pour au moins un bloc mémoire (Bq), une étape de décrémentation (451) du comptage (CZg,1) du nombre de macroblocs dont les ensembles de blocs mémoire associés comportent ledit bloc mémoire,ladite étape étant effectuée à chaque requête en lecture (405) des valeurs de pixels dudit bloc mémoire. 3. Procédé de traitement d'une séquence vidéo selon l'une des revendications 1 ou 2, le procédé comprenant une étape consistant à pour chaque bloc mémoire (B;o,jo), mémoriser dans l'étiquette correspondante (36p) un identifiant (MBdm(10'j°)) d'un macrobloc dont l'ensemble de blocs mémoire associé comporte ledit bloc mémoire. 4. Procédé de traitement d'une séquence vidéo selon la revendication 3 dans lequel pour chaque bloc mémoire (B;o,jo), le macrobloc dont l'identifiant (MBdm('o'o)) est mémorisé est le dernier macrobloc, selon un ordre de traitement des macroblocs, dont l'ensemble de blocs mémoire associé comporte ledit bloc mémoire. 5. Procédé de traitement d'une séquence vidéo selon l'une des revendications 3 ou 4, comprenant en outre, lors de la lecture des valeurs de pixels d'un bloc mémoire donné (B;o,jo), les étapes consistant à pour chaque emplacement du jeu d'emplacements (381,p, 382,p, 383,p, 384,p) correspondant audit bloc mémoire donné, calculer une densité d'utilisation locale (Dk) à partir du comptage (Cil Vil, C212 ,C313 , Ci414) du nombre de macroblocs mémorisé dans l'étiquette (401,p, 402,p, 403,p, 404,p) correspondant à l'emplacement, de l'identifiant de macrobloc (MBdm(i"), MBdm('2,i2), MBdm03,j3> MBdm(i4,j4)) mémorisé dans l'étiquette, et d'un identifiant du macrobloc (MBm) associé au bloc mémoire donné, et pour lequel les valeurs de pixels du bloc mémoire donné sont lues, choisir l'emplacement correspondant à la densité d'utilisation la plus faible pour écrire les valeurs de pixels du bloc mémoire donné. 6. Procédé de traitement d'une séquence vidéo selon la revendication 5, dans lequel, lors de la lecture des valeurs de pixels d'un bloc mémoire donné (Bio,io), pour chaque emplacement du jeu d'emplacements (381,p, 382,p, 383,p, 384,p) correspondant audit bloc mémoire donné, la densité d'utilisation locale vérifie : C. ' %k A + dist(MB, MBdm'k ) Clk,.%k est le comptage du nombre de macroblocs mémorisé dans l'étiquette (40k,p) correspondant audit emplacement (38k,p), 10 A est strictement positif, et dist(MB,MBdm'k)est une distance estimée entre le macrobloc pour lequel les valeurs de pixels du bloc mémoire donné sont lues, et le macrobloc dont l'identifiant (MBdm'k) est stocké dans l'étiquette (40k,p) correspondant audit emplacement. 15 7. Procédé de traitement d'une séquence vidéo selon l'une quelconque des revendications 1 à 6, comprenant en outre les étapes consistant à estimer (503) un paramètre de cohérence de mouvement à partir du champ de vecteurs de mouvement reçu, 20 choisir (505, 506, 508) un degré d'associativité (K') de la mémoire cache à partir de la valeur estimée du paramètre de cohérence de mouvement, dans lequel le nombre d'emplacements de la mémoire cache attribué à chaque bloc mémoire est égal au degré d'associativité choisi. 25 8. Procédé de traitement d'une séquence vidéo selon l'une quelconque des revendications 1 à 7, comprenant les étapes consistant à préalablement à l'étape de réception du champ de vecteurs, déterminer (403, 450) un champ de vecteurs préliminaires ({Vm,1+1final}) 30 chaque vecteur préliminaire associant un macrobloc de pixels d'une image Dk = où 23 obtenue par sous-échantillonnage de la première image à des pixels d'une image obtenue par sous-échantillonnage de la deuxième image, et estimer (404) le champ de vecteurs ({Vm,l}) à partir du champ de vecteurs préliminaires, et suite à l'étape de lecture, pour chaque macrobloc, utiliser (410) les valeurs de pixels des blocs mémoire lues pour rechercher un vecteur de mouvement définitif (Vm,lfinal) 9. Procédé de traitement d'une séquence vidéo selon l'une quelconque des revendications 1 à 7, dans lequel la première image et la deuxième image sont deux images (Im_1, Im2) de la séquence vidéo, le procédé comprenant en outre des étapes consistant à, pour chaque macrobloc, suite à l'étape de lecture, comparer (514) les valeurs de pixels du macrobloc à au moins une partie des valeurs de pixels lues, et prendre (514) une décision quant au type d'encodage pour ledit macrobloc à partir du résultat de la comparaison. 10. Programme d'ordinateur destiné à être stocké dans une mémoire d'un dispositif de traitement de séquence vidéo, et/ou stocké sur un support mémoire destiné à coopérer avec un lecteur dudit dispositif et/ou téléchargé via un réseau de télécommunication, caractérisé en ce qu'il comporte des instructions pour la mise en oeuvre du procédé selon l'une des revendications précédentes, lorsque lesdites instructions sont exécutées par un processeur dudit dispositif de traitement de séquence vidéo. 11. Dispositif de traitement de séquence vidéo d'images subdivisées en 30 macroblocs de pixels, comprenant des moyens d'estimation (33) d'un champ de vecteurs de mouvement, chaque vecteur de mouvement associant par adressage un macrobloc depixels d'une première image à un ensemble de blocs mémoire d'une deuxième image, ledit ensemble comprenant au moins un bloc mémoire, et des moyens d'accès (41, 31, 42) aptes à, pour au moins un macrobloc, lire les valeurs de pixels des blocs mémoire de l'ensemble de blocs mémoire associé audit macrobloc, lesdits moyens d'accès comprenant une mémoire cache (31), caractérisé en ce que le dispositif comporte en outre pour au moins un bloc mémoire de la deuxième image, une étiquette (361, 362, 36p, 401,p, 402,p, 403,p, 404,p) correspondant audit bloc mémoire, ladite étiquette étant destinée à mémoriser un comptage du nombre de macroblocs (Cil, C1,2, C;oe), C;l,jl, Ci2,j2, C;3p, C;4j4) dont les ensembles de blocs mémoire associés comportent ledit bloc mémoire, et des moyens de calcul (33) aptes à, lors d'une lecture des valeurs de pixels d'un bloc mémoire donné (35p) dans une mémoire de blocs distincte de la mémoire cache, décider de l'emplacement d'écriture des dites valeurs de pixels dudit bloc mémoire donné parmi un jeu d'emplacements de la mémoire cache (381,p, 382,p, 383,p, 384,p) correspondant audit bloc mémoire donné, lesdits moyens de calcul utilisant les contenus des étiquettes (401,p, 402,p, 403,p, 404,p) des blocs mémoire stockés aux dits emplacements. 12. Mémoire (31 ; 32) comprenant une pluralité de zones mémoire (351, 352, 35p ; 381,p, 382,p, 383,p, 384,p ) chaque zone mémoire comportant un champ de données (371, 372, 37p ; 391,p, 392,p, 393,p, 394,p) apte à mémoriser les valeurs de pixels d'un bloc mémoire d'une image, et une étiquette (361, 362, 36p ; 401,p, 402,p, 403,p, 404,p), ladite étiquette permettant de mémoriser un nombre de macroblocs d'une autre image associés par des vecteurs de mouvement respectifs au bloc mémoire dont les valeurs de pixels sont mémorisées dans le champ de données.30