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.
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%.
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:
Nota: Cada color representa un grupo de slices
En este apartado se describen algunas de las posibles aplicaciones del FMO:
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.
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.