# H.264/MPEG-4 AVC

H.264, o MPEG-4 part 10, és un còdec digital d'alta compressió estàndard desenvolupat durant quatre anys per l'ITU-T Video Coding Experts Group (VCEG) juntament amb l'ISO/IEC Moving Picture Experts Group (MPEG). La intenció del projecte H.264/AVC va ser la de crear un estàndard que fos capaç de desenvolupar una bona qualitat d'imatge amb bit rates substancialment menors que els estàndards anteriors (MPEG-2, H.263 o MPEG-4 part 2). A més a més de no incrementar la complexitat en el seu disseny.

## Història

Per tenir un progrés ràpid, la ITU-T i l'ISO/IEC van acordar unir-se per tal de desenvolupar conjuntament la següent generació de còdecs de vídeo. L'Equip Conjunt de Vídeo (JVT) estava format per experts en VCEG i MPEG i va néixer el desembre de 2001 amb l'objectiu de completar el desenvolupament tècnic de l'estàndard cap al 2003. La ITU-T va planejar adoptar l'estàndard sota el nom de H 264 de ITU-T i ISO/IEC sota el nom de MPEG-4 part 10 Còdec de Vídeo Avançat (AVC) i d'aquí va sorgir el nom híbrid de H.264/MPEG-4 AVC. Per tal de començar a programar el codi del nou estàndard van adoptar les següents premisses:
* L'estructura DCT per a la compensació de moviment de les versions anteriors era superior a altres estàndards i per això no hi havia cap necessitat de fer canvis fonamentals en l'estructura.
* Algunes formes de codificació de vídeo que havien sigut excloses en el passat degut a la seva complexitat i el seu alt cost d'implementació es tornarien a examinar per a la seva inclusió, ja que la tecnologia VLSI (Circuit integrat a molt gran escala) havia sofert un avenç considerable i una baixada de costos d'implementació.
* Per permetre una llibertat màxima de millora en la codificació la sintaxi s'hauria de canviar de manera que no fos compatible amb normes anteriors.

## Característiques

L'ús inicial del MPEG-4 AVC va estar enfocat cap al vídeo de qualitat baixa per videoconferència i aplicacions per Internet basades en 8 bits/mostra i amb un mostreig ortogonal de 4:2:0. Llavors això no donava sortida a l'ús d'aquest còdec en ambients professionals que exigeixen resolucions més elevades que necessitaven més de 8 bits/mostra i un mostratge de 4:4:4 o 4:2:2, funcions per a la mescla d'escenes, bit rates més elevats, poder representar algunes parts de vídeo sense pèrdues i utilitzar el sistema de color per components RGB. Per aquest motiu va sorgir la necessitat de programar unes extensions que suportessin aquesta demanda. Després d'un any de treball intens van sorgir les "extensions de gamma de fidelitat" (FRExt) que incloïen:
* Suport per una mida de bloc adaptable a la freqüència residual de la transformada.
* Suport per una quantificació amb matrius escalades.
* Suport per una representació eficient sense pèrdues de regions específiques.
Aquest conjunt d'extensions anomenades de "perfil alt" són:
* L'extensió High que suporta 4:2:0 fins a 8 bits/mostra
* L'extensió High-10 que suporta 4:2:0 fins a 10 bits/mostra
* L'extensió High 4:2:2 que suporta fins a 4:2:2 i 10 bits/mostra
* L'extensió High 4:4:4 que suporta fins a 4:4:4 i 12 bits/mostra i la codificació de regions sense pèrdues.
A continuació podem veure una taula amb més especificacions sobre aquests perfils enfront del perfil original:
| | Original | High | High 10 | High 4:2:2 | High 4:4:4 |
| slices I i P | SI | SI | SI | SI | SI |
| slices B | NO | SI | SI | SI | SI |
| slices SI i SP | NO | NO | NO | NO | NO |
| imatges de referència múltiples | SI | SI | SI | SI | SI |
| Filtre "deblocking" | SI | SI | SI | SI | SI |
| codificació CAVLC | SI | SI | SI | SI | SI |
| codificació CABAC | NO | SI | SI | SI | SI |
| ordenació flexible de macroblocs (FMO) | SI | NO | NO | NO | NO |
| ordenació arbitrària de slices (ASO) | SI | NO | NO | NO | NO |
| slices redundants (RS) | SI | NO | NO | NO | NO |
| partició de dades (DP) | NO | NO | NO | NO | NO |
| codificació entrellaçada | NO | SI | SI | SI | SI |
| format 4:2:0 | SI | SI | SI | SI | SI |
| format monocrom (4:0:0) | NO | SI | SI | SI | SI |
| format 4:2:2 | NO | NO | NO | SI | SI |
| format 4:4:4 | NO | NO | NO | NO | SI |
| 8 Bits/píxel | SI | SI | SI | SI | SI |
| 9 i 10 Bits/píxel | NO | NO | SI | SI | SI |
| 11 i 12 Bits/píxel | NO | NO | NO | NO(2v) | SI |
| transformada 8x8 | NO | SI | SI | SI | SI |
| matrius de quantificació | NO | SI | SI | SI | SI |
| quantificació Cb i Cr separades | NO | SI | SI | SI | SI |
| codificació sense pèrdues | NO | NO | NO | NO | SI |
| | Original | High | High 10 | High 4:2:2 | High 4:4:4 |

## Noves especificacions

H.264/MPEG-4 AVC no aporta ruptura tecnològica amb relació a les normes de codificació de vídeo anteriors. Les diferències les poden trobar en un escala petita sobre el principi general de codificació (predicció, transformada, quantificació, etc.).

### Tipus d'imatges

Podem trobar les mateixes imatges que les normes precedents (Imatges I, P i B) i dues noves, la SP (Switching P) i la SI (Switching I) que serveixen per codificar la transició entre dos fluxos de vídeo. Permeten, sense enviar imatges intra molt costoses en temps de processament, passar d'un vídeo a un altre utilitzant predicció temporal o espacial com abans, però amb l'avantatge que permeten la reconstrucció de valors específics exactes de la mostra tot i utilitzar imatges de referència diferents o un nombre diferent d'imatges de referència en el procés de predicció.

### Compensació de moviment

El procés de compensació de moviment és diferent de les normes precedents, ja que proposa una gran varietat de formes i de particions de blocs. Cada macrobloc és dividit en subblocs per a l'estimació de moviment i poden tenir set mides diferents(16x16, 16x8, 8x16, 8x8, 8x4, 4x8 i 4x4). Abans l'estàndard més nou introduïa particions de 8x8. Aquesta varietat de particions proporciona més exactitud per a l'estimació amb una precisió que pot arribar fins a un quart de píxel.

### Transformada

Té les mateixes propietats que la DCT clàssica però contràriament a altres estàndards que utilitzen blocs de 8x8 aquesta ho fa sobre blocs 4x4. La transformada inversa és definida de manera exacta per tal d'evitar errors d'arrodoniment. Els nous perfils alts FRExt incorporen una transformada de mida 8x8.

### Quantificació

Els passos de quantificació s'incrementen un 12,5% i el rang dinàmic augmenta, ja que els valors van d'1 a 52. Els macroblocs es quantifiquen utilitzant un paràmetre de control que pot canviar adaptant-se al bloc en qüestió. Si utilitzem FRExt tindrem un rang dinàmic que es multiplicarà per 6 per cada bit addicional(partint de 8 bits, 52 passos). A més a més, per tal d'aconseguir els millors resultats visuals, la quantificació de crominància és més acurada que la de luminància.

### Filtre "deblocking"

H.264 també integra un filtre d'arrissat que millora l'eficàcia de compressió i la qualitat visual de les seqüències de vídeo eliminant efectes indesitjables de la codificació, com ara els efectes de bloc.

### Exploració de dades

Hi ha dos modes d'exploració de coeficients transformats: "zig-zag" i "zig-zag invers". El segon mode d'exploració autoritza particularment la lectura del macrobloc en sentit oposat per tal de funcionar amb la codificació entròpica adaptativa.

### Codificació entròpica

La codificació entròpica es pot realitzar de tres formes diferents. Un primer mètode utilitzat és el conegut UVLC (Unified Variable Lenght Coding). Aquest tipus de codificació és utilitzat per codificar la gran majoria dels elements de sincronització i capçaleres. Els altres dos mètodes són utilitzats per codificar bona part de la resta d'elements sintàctics (coeficients, vectors de moviment). Les codificacions utilitzades per aquesta tasca estan basades en VLC (Variable Length Coding) de forma adaptativa, d'aquest concepte neix el CAVLC (Context Adaptative Variable Length Coding) i el CABAC (Context Adaptative Binary Arithmetic Coding).

### Adaptació a la xarxa

Conceptualment els algoritmes estan dividits en dues capes: una primera capa de codificació de vídeo VCL (Video Coding Layer) que s'ocupa de representar eficaçment el contingut de vídeo i una capa d'adaptació a la xarxa NAL (Network Adaptación Layer) que està adreçada més particularment a adaptar el format de dades de vídeo al suport de transmissió.

### Algoritmes per a la prevenció de pèrdues
#### FMO i ASO

L'ordenació flexible de macroblocs (FMO) i l'ordenació arbitrària de slices (ASO) són tècniques per tal de reestructurar la representació de les regions fonamentals (macroblocs) tot i que també poden ser utilitzats per altres objectius.

#### DP

La partició de dades proporciona la capacitat de separar els elements de sintaxi més importants dels menys importants en paquets de dades diferents tot permetent l'ús de protecció d'error desigual (UEP).

#### RS

L'algoritme de slices redundants permet a un codificador enviar una representació suplementària d'una regió d'imatge que pot ser usat si la representació primària és corrompuda o perduda.

## Enllaços externs

* Tutorial de compresión de video MPEG-4 AVC en anglès
* Tutorial de MPEG-4 de OKI Arxivat 2007-09-27 a Wayback Machine. en anglès
* Noticia sobre MPEG-4 AVC Arxivat 2007-09-30 a Wayback Machine. en francès
* Submostreig de la Croma en català