# Flexible Macroblock Ordering

H.264/MPEG-4 AVC es el nuevo estándar de compresión de vídeo digital desarrollado conjuntamente por Grupo de Expertos en Codificación de Vídeo (VCEG) de la UIT-T y Grupo de Expertos en Imágenes en Movimiento (MPEG) de la ISO/IEC. Además de utilizar algoritmos de codificación eficientes, las especificaciones del H.264/AVC definen varias herramientas para combatir los errores en el canal de transmisión. Una de las más innovadoras es la de Ordenación flexible de los macrobloques (FMO, Flexible Macroblock Ordering) que se describe a continuación.

## Descripción

Una de las nuevas características del estándar H.264/AVC es la posibilidad de dividir la imagen en regiones llamadas grupos de slices. Cada grupo de slices se puede dividir a su vez en varias slices; así pues, tenemos que definir el término slice como una secuencia de macrobloques dentro del mismo grupo de slices que se procesa en orden de escaneado (de izquierda a derecha y de arriba abajo) dentro del conjunto de macrobloques del grupo. Una slice siempre se puede decodificar de forma independiente.
El FMO consiste en decidir a qué slice pertenece cada macrobloque de la imagen. Todos los macrobloques se asignan libremente a un grupo de slices a través de un MBAmap (mapa de situación de los macrobloques) que consiste en un número de identificación para cada macrobloque de la imagen que especifica a qué grupo de slices pertenece dicho macrobloque. El número de grupos de slices para cada imagen está limitado a 8 para no complicar excesivamente los esquemas de situación de macrobloques.
Si desactivamos el FMO, las imágenes estarán formadas por una sola slice con los macrobloques en orden de escaneado. El uso de FMO es compatible con cualquier tipo de predicción inter-frame.
Esta técnica nos permite corregir errores con mucha facilidad explotando la redundancia espacial de las imágenes. Una buena idea es escoger los grupos de slices de forma que ningún macrobloque y su vecino sean del mismo grupo. De esta forma, si una slice se pierde durante la transmisión, es mucho más fácil reconstruir los bloques perdidos con la información de los bloques vecinos. Debemos tener en cuenta las características de transmisión de los slices: cada slice se transmite independientemente en unidades llamadas paquetes, y cada paquete contiene en su cabecera la información necesaria para decodificarse independientemente de los otros paquetes (se debe tener en cuenta que las imágenes utilizadas como referencia son iguales en el codificador y en el decodificador). El uso de FMO conjuntamente con métodos avanzados de correcciones de errores, podemos mantener la calidad visual y tener al mismo tiempo tasas de pérdida de paquetes de hasta el 10%.

## Tipos

Al utilizar FMO, la imagen se puede dividir en diferentes pautas de escaneado de macrobloques. Hay siete tipos diferentes de FMO, etiquetados como Type 0 hasta Type 6. El Type 6 es el único que permite ordenar los macrobloques de forma aleatoria, proporcionando mucha flexibilidad al usuario. La información sobre qué tipo de FMO estamos utilizando viene incorporada en la cabecera de los paquetes.
A continuación se describen las pautas de los FMO no aleatorios:
* Type 0: utiliza tiras de macrobloques que se repiten hasta llenar toda la imagen. Para reconstruir el MBAmap solo se debe conocer la longitud de las tiras.
* Type 1: utiliza una función matemática, conocida por el codificador y el decodificador, para repartir los macrobloques. La distribución de la figura, en la que los macrobloques se distribuyen en forma de tablero de ajedrez, es muy utilizada (ver Aplicaciones).
* Type 2: se utiliza para marcar áreas rectangulares conocidas como áreas de interés. En este caso se guarden en los MBAmaps las coordenadas superior-izquierda e inferior-derecha de los rectángulos.
* Type 3-5: son tipos dinámicos que dejan crecer o encoger de forma cíclica los grupos de slices de las diferentes imágenes consecutivas. Así pues, solo se tiene que enviar la dirección, la tasa de crecimiento y la posición en el ciclo para tener bien definidos los grupos de slices.
Nota: Cada color representa un grupo de slices

## Aplicaciones

En este apartado se describen algunas de las posibles aplicaciones del FMO:
* El Type 1 es útil para mantener la privacidad de las videoconferencias. La imagen se divide en 2 grupos de slices con los macrobloques distribuidos como un tablero de ajedrez y cada grupo de slices se envía con un paquete diferente. De esta forma, si alguien quiere decodificar la videoconferencia, deberá saber exactamente en qué dos paquetes se está enviando la información.
* El Type 1 también se puede utilizar en medios de transmisión con una alta tasa de pérdida de paquetes (ejemplo en el apartado Resultados experimentales).
* El Type 2 también puede ser muy útil. Imaginemos que queremos transmitir un telediario con una tasa de bits muy baja. Si codificamos la imagen con la tasa de bits distribuida homogéneamente en toda la imagen, tendremos unos malos resultados. Las personas somos particularmente sensibles a los errores de imagen en las caras, así que podemos marcar la región de la cara del presentador de televisión para que sea codificada con más bits. Así pues, el fondo del plató será codificado con menos bits y el presentador con más (manteniendo la misma tasa total de bits del principio). De esta forma, la calidad visual subjetiva habrá aumentado significativamente.

## Resultados experimentales

Para realizar estos resultados se ha utilizado un software de referencia del estándar H.264/AVC [1]. En estas imágenes se pueden ver dos frames de la secuencia Stefan.yuv, en un caso sin aplicar FMO y en el otro utilizando un FMO del Type 1:
Vemos claramente en la parte inferior derecha de la imagen como se han perdido paquetes (sin FMO los macrobloques se envían en el orden de escaneado) y no se han podido decodificar los macrobloques de la imagen. Al utilizar FMO Type 1, en cambio, tenemos dos tipos de grupos de slices dividiendo la imagen como un tablero de ajedrez. Así, cuando se pierde un trozo del paquete del grupo de slices 0 podemos recuperar el trozo de imagen interpolando los macrobloques vecinos que no se han perdido porque se habían enviado por separado en el grupo de slices 1.

## Conclusiones

Viendo los resultados experimentales de aplicación de FMO, podemos decir que es una técnica muy útil para corregir errores. Su uso mejora la calidad visual subjetiva y objetiva (SNR o MSE) cuando los paquetes se ven sometidos a una cierta tasa de pérdida. Aunque se ven claramente las ventajas del FMO, también debemos analizar su principal inconveniente. Se debe enviar la información sobre el tipo de FMO que estamos utilizando a la cabecera del paquete. Eso se traduce en un claro incremento de los bits a enviar y, por lo tanto, el uso de FMO se aconseja solo en medios de transmisión donde se estima que haya cierta tasa de pérdida de paquetes.