Dans cette série de blogs en trois parties, nous abordons le VP9, l'évolutivité et le nouveau codec VP9 de Vidyo, plus performant. Dans la première partie, nous avons abordé l'évolutivité temporelle ; aujourd'hui, nous allons nous pencher sur l'évolutivité spatiale.
Lire la suite - Améliorer VP9 sans le changer - Partie 1
La deuxième dimension de l'évolutivité est l'évolutivité spatiale, et elle est un peu plus complexe. Supposons, par exemple, que nous encodions un flux vidéo à 720p (c'est-à-dire que chaque image a 1280×720 pixels). Le codage évolutif signifie que nous pouvons non seulement représenter la vidéo à la résolution maximale de 1280×720, mais aussi à des résolutions inférieures, par exemple 640×360 ou 320×180. Remarquez que dans cet exemple, les résolutions sont réduites par des puissances de 2 dans chaque dimension. Bien qu'il ne s'agisse pas d'une exigence, des rapports de 2:1 ou de 1,5:1 sont typiques de l'extensibilité spatiale. La résolution la plus basse est appelée couche de base, et les données nécessaires pour construire chaque résolution supérieure sont appelées couches d'amélioration.
La terminologie utilisée dans ce cas reflète la manière dont les données codées sont construites. Lors du codage d'une image, le codeur réduit l'image originale à la résolution de la couche de base. Il la code ensuite et utilise l'image reconstruite (celle qui sera disponible au décodeur) comme référence pour coder l'image de plus haute résolution.

Figure 3 : Une vidéo encodée avec deux couches spatiales et une couche temporelle
Figure 3 montre comment fonctionne la structure de l'image à l'aide d'un exemple comportant deux couches spatiales et aucune évolutivité temporelle (il n'y a qu'une seule couche temporelle). L'ensemble inférieur est constitué des images à faible résolution (la couche de base) qui sont codées à l'aide de la structure IPPP de Figure 1. En outre, nous avons la couche d'amélioration spatiale (S), dans laquelle les images ne sont pas seulement prédites à partir des images de la couche d'amélioration précédente, mais aussi à partir de l'image de la couche de base correspondante. Cette dépendance entre les couches est très importante à la fois pour améliorer l'efficacité de la compression (la version basse résolution d'une image est un excellent prédicteur pour la plupart des parties de l'image haute résolution) et pour améliorer la résistance aux erreurs (vous pouvez toujours utiliser la version basse résolution si la haute résolution est endommagée ou perdue).
Nous pouvons maintenant combiner les concepts d'extensibilité spatiale et temporelle dans une seule conception, permettant ainsi toute combinaison de résolutions spatiales et de fréquences d'images. En conservant notre exemple de deux couches spatiales et de trois couches temporelles, Figure 4 montre à quoi ressemble la structure de l'image.

Figure 4 : Extensibilité combinée : deux couches spatiales et trois couches temporelles
Dans l'hypothèse d'une source originale 720p 30fps, cette structure nous permet d'obtenir des ensembles de couches qui peuvent fournir n'importe quelle combinaison de 720p ou 360p et 30, 15 et 7,5 fps. Plus important encore, il est possible de passer du décodage d'un point de qualité à un autre sans avoir à informer le codeur ou à effectuer un quelconque traitement du signal.
L'adaptabilité offerte par le codage évolutif est un élément clé de la mise en œuvre de la vidéo multipoint à l'aide de l'architecture SFU (Selective Forwarding Unit) brevetée de Vidyo. La SFU peut manipuler la vidéo en transmettant sélectivement les données de la couche en fonction des besoins de l'utilisateur, du réseau ou de l'application. L'évolutivité (à la fois spatiale et temporelle) est également importante pour accroître la résistance aux erreurs. Pour plus de détails sur les principes de conception technique, voir mon billet BlogGeek.me.
Si la manipulation d'un flux utilisant la scalabilité spatiale et temporelle est très simple, il n'en va pas de même pour sa création. Si l'on considère Figure 4Chaque flèche qui relie deux images ou deux couches cache des milliers de décisions individuelles qui doivent être prises par le codeur. La tâche du décodeur est beaucoup plus simple, puisqu'il ne doit agir que sur les instructions du codeur.
On peut considérer l'encodeur comme le compositeur de musique et le décodeur comme le synthétiseur qui reproduit la musique selon la partition créée par le compositeur. Contrairement aux 88 touches d'un clavier, les paramètres d'un encodeur ressemblent davantage au cockpit d'un avion de ligne (voir figure 5) - des milliers de paramètres individuels doivent être réglés de manière coordonnée pour que les choses fonctionnent bien.

Figure 5 : Cockpit de l'A380-800 (extrait du site web de Lufthansa)
Revenez bientôt pour la troisième partie, où nous nous pencherons sur les comparaisons de performances et plus encore.