In questa serie di blog in tre parti, ci occupiamo di VP9, scalabilità e del nuovo codec VP9 di Vidyo a più alte prestazioni. Nella prima parte abbiamo parlato di scalabilità temporale; oggi ci occuperemo di scalabilità spaziale.
Per saperne di più - Migliorare VP9 senza modificarlo - Parte 1
La seconda dimensione della scalabilità è la scalabilità spaziale ed è un po' più complessa. Supponiamo ad esempio di codificare un flusso video a 720p (cioè ogni fotogramma ha 1280×720 pixel). Codificare in modo scalabile significa che oltre a poter rappresentare il video alla massima risoluzione di 1280×720, possiamo anche rappresentarlo a risoluzioni inferiori, ad esempio 640×360 o 320×180. Si noti che in questo esempio le risoluzioni scendono di potenze di 2 in ciascuna dimensione. Anche se non è un requisito, rapporti di 2:1 o 1,5:1 sono tipici della scalabilità spaziale. La risoluzione più bassa è chiamata livello di base, mentre i dati necessari per costruire ogni risoluzione superiore sono chiamati livelli di miglioramento.
La terminologia in questo caso riflette il modo in cui vengono costruiti i dati codificati. Quando codifica un'immagine, il codificatore riduce l'immagine originale alla risoluzione del livello base. Quindi la codifica e utilizza l'immagine ricostruita (la stessa che sarà disponibile al decodificatore) come riferimento per codificare l'immagine a risoluzione superiore.

Figura 3: Un video codificato con due strati spaziali e uno temporale
Figura 3 mostra come funziona la struttura delle immagini utilizzando un esempio con due livelli spaziali e nessuna scalabilità temporale (c'è solo un singolo livello temporale). L'insieme inferiore è costituito dalle immagini a bassa risoluzione (il livello di base) che sono codificate utilizzando la struttura IPPP di Figura 1. Inoltre, abbiamo il livello di miglioramento spaziale (S), in cui le immagini non sono solo previste dalle precedenti immagini del livello di miglioramento, ma anche dalla corrispondente immagine del livello base. Questa dipendenza tra i livelli è molto importante sia per migliorare l'efficienza della compressione (la versione a bassa risoluzione di un'immagine è un eccellente predittore per la maggior parte delle parti dell'immagine ad alta risoluzione) sia per migliorare la robustezza degli errori (è sempre possibile utilizzare la versione a bassa risoluzione se quella ad alta risoluzione viene danneggiata o persa).
Ora possiamo combinare i concetti di scalabilità spaziale e temporale in un unico progetto, consentendo così qualsiasi combinazione di risoluzioni spaziali e frame rate. Mantenendo il nostro esempio di due strati spaziali e tre strati temporali, Figura 4 mostra l'aspetto della struttura dell'immagine.

Figura 4: Scalabilità combinata: due strati spaziali e tre strati temporali
Assumendo una sorgente originale a 720p 30 fps, questa struttura ci permette di ottenere set di livelli che possono fornire qualsiasi combinazione di 720p o 360p e 30, 15 e 7,5 fps. Soprattutto, è possibile passare dalla decodifica di un punto di qualità all'altro senza dover informare il codificatore o eseguire un'elaborazione del segnale.
L'adattabilità fornita dalla codifica scalabile è una parte fondamentale nell'implementazione di video multipoint utilizzando l'architettura Selective Forwarding Unit (SFU) brevettata da Vidyo. L'SFU può manipolare il video inoltrando selettivamente i dati di livello in base alle esigenze dell'utente, della rete o dell'applicazione. La scalabilità (sia spaziale che temporale) è importante anche per fornire una maggiore robustezza agli errori. Per ulteriori dettagli sui principi di progettazione ingegneristica, consultare il documento il mio post su BlogGeek.me.
Mentre la manipolazione di un flusso che utilizza la scalabilità spaziale e temporale è molto semplice, la sua creazione non lo è affatto. Se si guarda a Figura 4Ogni freccia che collega due immagini o livelli nasconde migliaia di decisioni individuali che devono essere prese dall'encoder. Il compito del decodificatore è molto più semplice, poiché deve solo agire sulle istruzioni del codificatore.
Si può pensare all'encoder come al compositore di musica e al decoder come al sintetizzatore che riproduce la musica secondo la partitura creata dal compositore. A differenza degli 88 tasti di una tastiera, tuttavia, i parametri di un encoder assomigliano più alla cabina di pilotaggio di un aereo di linea (vedi Figura 5) - migliaia di parametri individuali devono essere impostati in modo coordinato perché le cose funzionino bene.

Figura 5: cabina di pilotaggio dell'A380-800 (dal sito web di Lufthansa)
Tornate a trovarci presto per la terza parte, in cui ci occuperemo del confronto delle prestazioni e di altro ancora.
