Lien de la note Hackmd
Que faire ?
Identifier les repetitions
- Spatiales
- Temporelles
Optimiser leur codage de rouce
Dessiner le moins possible
2x les memes dessins pour chaque oeil
On va decimer ce qui n’est pas important
- Spatialement ?
- Temporellement ?
Detruire selectivement:
- En fonction de l’application: TV, DVD/BD, streaming
- Compromis qualite <=> debit
Compression entropique (compromis qualite)
- Huffman (CAVLC)
- Arithmetique (CABAC)
Codec Image
JPEG
Le veteran: Join Photographic Experts Group (1992)
- Limitations de la vision humaine
- HF
- Chroma
- Decoupage en blocs $8\times 8$
- Transformation DCT
- Quantification des coefficients
- Lecture Zig-Zag
- Huffman
- Decoupage en blocs $8\times 8$
- Transformation DCT
- Quantification des coefficients
Exemple
Bloc DCT
Parcours Zig zag
- Codage RLE: paires {Valeur, Nombre}
- $79; 0; -2; {-1;3}; {0;2}; -1;$ EOB
- Image animee:
- Motion JPEG
- DV
Codec Video
MPEG-1
Le pere fondateur
- Motion Pictures Experts Group (1993)
- Base sur JPEDG et H.261 (NetMeeting, PSX FMV)
CF. JDG les jeux FMVs
- Support:
- Stockage numerique: VCD
- Reseaux fiables
- En pratique
- $352\times 240$ (“NTSC”) / $352\times288$ (“PAL”)
- 30 i/s
- YUV $4:2:0$ MPEG-1
- $1, 5 Mbs$
Blocs, Macroblocs
- Bloc: matrice de pixels $8\times 8$
- Aggregation en macroblocs
- MB-Luma: 4 blocs $\times 8=16\times 16$
- MB-Chroma: $1$ bloc U $8\times 8$ + 1 bloc V $8\times 8$
- => 1Mb complet = 4 blocs de Luma + 2 blocs Chroma
Slices
- Suite de macroblcos
- Sans recouvrement
- => Partition de l’image
- Multiusage
- Facteur de quantification individuel
- Synchronisation (start codes)
Pictures
- Suite de slices
- Start code
- Prediction full / half pel
- Types: I, B, P, D
“Intra”: I
- Quasi-JPEG
- Reference: elle-meme
- Quantification par defaut (“intra”) surchargeable
- Macroblocs intra, codage
- DC: DPCM
- AC: Huffman
Difference entre images
Le lapin apparait d’une image a l’autres
Image 1
- Traitement par blocs
- Recherche de mouvement
- Calcul des residus
Image 2
- Vecteurs de mouvement (pixel, demi-pixel)
- balle
- Residus
- Lapins
- Yeux
- Quantification nonintra
- uniforme
Exemple: Big Buck Bunny
Vecteurs de mouvements
Prediction IP
On a des images qui dependent les unes des autres
Avantages:
- Debit(P) < Debit(i)
- Aucune latence
Inconvenients:
- Decoder une P => conserver la I et les P precedents
- Prediction + quantification => $\color{red}{\text{propagation d’erreur}}$
Prediction IBP
Avantages
- Debit(B) « Debit(P)
- “Lisse les erreurs” entre I et P
- B bidirectionnelle => moyenne des reconstructions
Inconvenients:
- Decoder une B: garder les I et P apparentees $\color{red}{\Rightarrow RAM}$
- Ordre de decodage $\neq$ ordre affichage
- $\Rightarrow$ Latence
- Zapper: besoin d’intercaler des $I$ frequemment
- $\Rightarrow$ “Group Of Pictures”
- Suite d’image avec au moins une $I$
- Parametres:
- $M$: distance entre une $I$ et une $P$
- $N$: distance entre deux $I$
Ordre affichage vs decodage
- DO: Display Order - CO: Coding Order
- A cause des B, $CO\neq DO$
- Supposons ces images en DO:
- L’ordre des GOP correspondant est (en CO):
Sequence Header
- Resolution
- PAR
- Frame rate
En resume
Encodeur MPEG-1
Convoyer du son et de la video en meme temps
MPEG Program stream
- Fichier composite contenat:
- 1+ flux audio elementaire
- 1+ flux video elementaire
MPEG PES
Packetized Elementary Stream
PES:
- Flux elementaire decoupe
- Stream ID
- $\color{red}{PTS/DTS}$
- CRC
MPEG Program Stream
- Sequence:
- Pack header
- System Clock Reference
- = Horloge createur PS (pour synchro PTS)
- Pack: Suite de PES
- Pack header
- Convient pour un support fiable (VCD, DVD)
- Pas adapte a la diffusion de chaines de TV (broadcast)
- Peu resistant au BER
- Une seule base de temps (SCR)
MPEG-2: Le premier codec video
- Objectif: polyvalence applicative
- Broadcast DTV SD, HD (DVB, ATSC)
- Home video (DVD, PVR)
- Videoconf
- Differences avec MPEG-1
- Profils et niveaux (7)
- Entrelacement
- Scalabilite (pseudo-HLS)
- Plusieurs vues
Profils et niveaux MPEG-2
- SDTV, DVD, MP@ML
- SDTV Studio: HP@ML
- HDTV: MP@H14
Entrelacement MPEG-2
- Frame entrelacee
- + Topness bit
- Field individuels
C’etait bizarre et ca fait chier
- Ordre arbitraire
- Peu commode
Codecs et applications
Convoyer plusieurs chaines: MPEG-2 Transport Stream
- Decoupage PES en paquets de 188 bits
- Multiplexage pour broadcast
- Packet IDentifier (PID)
- Program Specific Information (PSI)
- Program Allocation Table (PAT)
- Program Management Table (PMT)
- Horloge: Program Clock Reference (PCR)
MPEG-2 TS
Transport Stream
- Decoupage PES en paquets de 188 bits
- Multiplexage pour broadcast
- Packet Identifier (PID)
- Program Specific Information (PSI)
- Program Allocation Table (PAT)
- Program Management Table (PMT)
- Horloge: Program Clock Reference (PCR)
Demultiplexage MPEG2-TS
- PSI (PAT + PMTs) repetes regulierement
- Choix d’une chaine
- Choix d’un PID de PMT and la PAT
- Recuperation de la PMT correspondante
- Filtrage des PIDs decrits dans la PMT
- Assemblage PES correspondants
- Extraction ES + PT
- PTS : TS Image
PCR
- Distinguer PCR de PTS
- PTS: TS image
- Cadence d’affichage des images
- PCR: “heure de l’encodeur”
- Synchronise le decodeur (STC) avec l’encodeur
- En longevite (Heures)
- Indispensable pour du streaming realtime (DVB-S/C/T)
- Comparable a SCR pour un MPEG-PS (CVD, DVD)
- PTS: TS image
Streaming
- Streaming implique:
- Producteur
- Consommateur
- Fifos
- Realtime implique:
- Flux tendu
- Fifo limitees (faible buffering)
- Synchronisation producteur et consommateur
STC VS PCR FIGHT
Pas de synchro STC $\leftrightarrow$ PCR ?
- STC $\gt$ PCR
- Decodeur consomme plus vite que prevu
- Que se passe-t-il ?
- Drainage des FIFOs A/V
- $\Rightarrow$ Video: saccades / ralentissements
- $\Rightarrow$ Audio: micro-silences / repetitions
- STC $\lt$ PCR
- Decodeur consomme plus lentement que prevu
- Que se passe-t-il ?
- Buffering limite $\Rightarrow$ blocage impossible
- $\Rightarrow$ Depassement des FIFOs
- $\Rightarrow$ Perte de paquets
- $\Rightarrow$ Flux elementaires discontinus
- $\Rightarrow$ Audio: blips, squeals, silences
- $\Rightarrow$ Video: mosaiques, prediction surrealistes
Synchronisation STC PCR
- Besoin d’asservir STC a PCR
- VCXO: Voltage COntrol Xtal Oscillator
- Mesurer diff = STC - PCR
- Asservir les cloks A/V correspondantes
- Audio:
- Reguler la vitess du decodeur
- Controle du remplissage de la fifo de samples
- Video
- Reguler la vitesse du decodeur
- Controle de la vitesse de production des pixels pour l’affichage
- $\color{orange}{\text{Variations Pixel Clock de sortie}}$
- $\color{orange}{\text{Tolerance en analogique (“effet de volant”)}}$
- $\color{red}{\text{TOUCHY en HDMI !}}$
H.264 Le champion
Objectifs
Reprendre les applications de MPEG-2
Couvrir tous les nouveaux usages:
- Disques optiques avances (BD, HD-DVD)
- Streaming actif (VOD, VCONF)
- Enregistreurs embarques
- Stereoscopie
Nouveautes
Nouveau protocole: Network Abstraction Layer
- Limite les repetitions
- S’adapte aux moyens de transmission
Nouveaux outils d’analyse d’image
- Macroblocs plus fins
- Predictions plus elaborees
- Filtrage a l’encodage des MV
Nouveaux compresseurs entropiques
- CABAC:
- Codage arithmetique binaire
- Intervalles adaptatifs par modeles statistiques
- CAVLC
- VLC type Huffman
- Dictionnaire adapatatif par rapport aux blocs voisins
Historique
- 1998: Initiative VCEG H26L
- 2001: MPEG + VCEG = Joint Video Team
- 2003: Finalisation premiere ebauche
- 2005: Fidelity Range Extension
- $4:2:2$
- $4:4:4$
- bit depth > 8
- 2007: Scalable Video Coding
- 2009: Multiview Video Coding
Arithmetique
- Integer DCT
- Calculs entiers
- Plus simples (que MPEG-2)
- Entierements specifies
- $\Rightarrow$ Reconstruction exacte
NAL
Network Abstrasction Layer
- NAL: Objets semantiques du flux video
- VCL: Video Coding Layer
- NAL VCL: images, macroblocs, MVs, coefficients IDCT
- NAL Non-VCL: parametres, metas
- Changent rarement
- Decouplage NAL vs mode d’envoi:
- Byte-Stream : signalisation par start codes (~MPEG-2)
- Packer-Transport
- Pour reseaux (RTP)
- Le protocole sous-jacent sait quel NAL il envoie/recoit
Exemples
Quelques NAL
- IDR: Instant Decoder Refresh (VCL)
- Contient seulement une nouvelle image
- synchronisation du decodeur avec parsing minimal
- Besoin prealable de metas non-VCL
- SPS: Sequence Parameter Set (non-VCL)
- Profil, niveau, resolution, cadence
- ~ MEPG-2 Sequence Header
- PPS: Picture Parameter Set
- Codage entropique, mode de prediction, groupe et ordre des slices, filtrage de blocs
En resume
ASO
Arbitrary Slice Order
- Les slices peuvent etre envoyees dans le desordre
- non continument dans le temps
- Avantages
- Limite l’impact
FMO
Flexible Macroblock Ordering
- Partition des MB par motifs
- Type 0: Interlaced: Lignes
- Type 1: Dispersed
- En sequnces
- Type 3: Foreground: par zones (ROI)
- Explicitement par l’encodage
Avantages
- Forme de segmentation
- Adaptation a la nature du contenu
- $\color{green}{\text{Resout des cas difficiles}}$
- $\color{green}{\text{Dispersion des impacts BER}}$
Inconvenients
- Pas dans tous les profils
Prediction Inter
Partitions de MB et sous-MB
References multiples:
- 16 en theorie
- 5 a 6 en pratique
- $\color{green}{\Rightarrow\text{Moins de residus}}$
- Ponderations possibles (fdes)
Motion Vectors au quart de pixel pres:
Prediction Intra
- Prediction spatiale:
- INTRA $4\times 4$
- 9 directions de recherche
- Pour sous-blocs $4\times 4$
- INTRA $16\times 16$
- Pour regions plus lisses / BF
Filtrage in-loop
In-loop deblocking filter
- Filtrage frontieres Luma $8\times 8$ ou $4\times 4$
- (resp. Chroma % sampling mode)
- $\color{red}{\text{Pendant l’encodage des MV}}$
- $\color{red}{\text{Obligatoire}}$
- Filtrage depend de la structure du bloc:
- Plusieurs references ? F++
- Frontieres intra et/ou inter ? F++
- Frontieres de MB ? F++!!
- Contours ? F–
Avantages
- Encodeur et decodeur fournissent la meme image (pas un post)
- Meilleurs MV
- $\color{green}{\Rightarrow \text{Residus –}}$
- $\color{green}{\text{Qualite perceptuelle +++}}$
PSNR identique ?!
Inconvenients
- $\color{red}{\text{Complexite}}$
- En baisse vu le benefice
PAFF
Picture Adaptative Frame/Field
Frame Mode (MPEG-2)
Field mode: l’un sous l’autre
MBAFF
Macro Block Adaptative..
Paire de MBs: $16\times 32$
- Mode frame: $32$ lignes progressives
- Mode field: $2\times 16$ lignes entrelacees
Entrelance par parties
Avantages
- Integrite spatiale maximum
- Prediction MV TOP BOT possible pour une paire de MBs en mode field
- $\color{green}{\text{Precision}++}$
- Pas de MV TOP BOT pour une paire de MBs en mode frame
- $\color{green}{\text{Frugalite}++(16\%)}$
- Indices de mouvement
- $\color{green}{\text{Desentrelacement}++}$ (c)
H. 265 / HVEC
Objectifs
Ceux de H. 264
- Debit /= 2
- Scalabilite des calculs
- Simplification
- Parallalisation
- 4K, 8K, 120 i/s
- Free Viewpoint (VR)
- 10/12 bpc (HDR)
- Simule la sensation d’eblouissement
Historique
- 2007-2009: Rivalites MPEG - VCEG
- Rivalites MPEG - VCEG
- MPEG HPC : mauvais resultats
- Union JVT VC
- Rivalites MPEG - VCEG
- 2010:
- Janvier: Appel a propositions
- Avril: tests, Nommage HEVC
- Octobre: Premiere ebauche
- 2013:
- Janvier: Ebauche finale
- Avril: Standard ITU
- 2014:
- Avril: Ebauche V2
- MV-HEVC, Rext, Scalability
- Octobre: V2 approuvee
- Avril: Ebauche V2
- 2015:
- Janvier: Publication officielle
- Avril: V3 approuvee
- Puis definition Screen Contents: ACT, AMVR, IntraBC, Palette
- 2016:
- Juin: V4 refusee
- Decembre: V4 approuvee (Extension Screen Contents)
Principes
Decouplage enCodage Prediction Transformation
- CTU: Coding Tree Unit
- “Macrobloc” haut niveau
- $16\times 16$, $32\times 32$, $64\times 64$
CU
Partition carree d’une CTU
PU
Partition de la CU
Uniquement la prediction
Intra:
- CU == PU
- Sauf au dernier
TU
Transformation Unit
- Parition de la CU
Uniquement les residus
- Independante de la partition PU
Ressemble a …
Une TU peut couvrir plusieurs PU
Ou une partie de PU
Ou plusieurs parties de PU
Outils
- 33 Modes de prediction intra
- 9 pour H.264
- Most Probable Modes
- Indexation dynamique
- $\color{green}{\text{Moins de prefixe (2b vs 5b)}}$
- IDCT:
- $4\times4$, $16\times 16$, etc.
- ~IDST $4\times 4 possible$
Slices et Tiles
- Slices
- Comme H.264
- Headers individuels
- $\color{green}{\text{Limitations de l’erreur}}$
- $\color{red}{\text{Jonctions imparfaites}}$
- Comme H.264
- Tiles
- Partition rectangulaire de l’image
- Header/sequence
- $\color{green}{\text{Decodage parallelisable}}$
- $\color{green}{\text{ROI/VCONF}}$
- Slices in Tiles, Tiles in slices: Video Split
- Wavefront parallel processing
- Slices divisees en lignes de CTU
- Pipeline multithreadable
- $\color{green}{\text{Efficace}}$
- $\color{red}{\text{Intensif}}$
Strategie de parallelisation
Filtrage
- Deblocking Filter
- Plus simple que H.264
- Grille $8\times 8$
- $\color{green}{\text{Parallelisable}}$
- Plus simple que H.264
- SAO: Sample Adaptative Offset
- Filtre non-lineaire post-DBF
- Reduit les distorsions locales
- Categorie des samples selon voisinage
- Moyenne, contour, min, max
- LUT / index d’offset
Reduction des effets d’aplats (banding)
SAO
Original:
$\color{red}{\text{SANS}}$
$\color{green}{\text{AVEC}}$
Epilogue
Autres CODECS
- MPEG/VCEG/JVT: Versatile Video Codec
- ITU Universite Industriels
- Evolution de H.265
- Debit $\sim 40\%$
- Finalise 07/2020
- Encodeurs dispo (09/2021)
- Licences, royalties… comme HEVC
- Alliance for Open Media: AV1
- Amazon, Google, Samsung, ARM
- Temps d’encodage »> VVC
- S’ameliore avec ML (Google)
- En deploiement:
- Netflix: depuis 2018
- Android TV 10: obligatoire
- Twitch: 2022
Evolution du marche
- Changer de code $\Rightarrow$ $
- Nouveau HW + SW
- Nouvelle conso (W)
- Nouvelles box utilisateur
- Bandes passantes plus importantes
- Fibre, 4G, 5G, 802.11ax
- $\Rightarrow$ taux de compression en second plan (cf H.264)
- Nouveau
- Netflix, Hulu, Amazon, Apple TV…
- Veulent le code “magique”
- Pour toutes les box
- Dont la licence est la moins chere (cf AV1)
Evolution du streaming
- Trivia
- $60\%$ du trafic internet
- $\color{green}{\text{Netflix}: \sim$ 2.25 B / an}$
- 2018: +50\%, 2019: + 59\%, 2020: +47\%
- 300 MT $CO_2$/an (~Espagne)
- $1\%$ des emissions $CO_2$ mondiales
- Questions financieres et sociales evidentes