# Ordenación arbitraria de slices

La ordenación arbitraria de slices (ASO) es un algoritmo para la prevención de pérdidas. Se utiliza para reestructurar la representación de las regiones fundamentales (macrobloques) de una imagen. Este tipo de algoritmo evita la necesidad de esperar a un conjunto completo de imágenes para llegar a todas las fuentes. Se trata como un mecanismo de resistencia adicional de error.
Este tipo de algoritmo está incluido como herramienta en el perfil básico (Baseline Profile) del codificador MPEG-4 H.264/AVC junto con Slices I, Slices P, codificación adaptativa según el contexto de longitud variable (CAVLC), agrupación de Slices (SG) y Slices Redundantes.

## Aplicaciones

Se utiliza ampliamente en videoconferencias y aplicaciones móviles ejecutadas en dispositivos con potencia computacional limitada. La ASO impone que todos los macrobloques deben ser ordenados en la decodificación, y de esta manera mejorar la flexibilidad para poder disminuir el importante retraso que suele haber en las videoconferencia y en los usos interactivos de internet.

## Problemas

Si utilizamos ASO en imágenes con el sistema AVC (Código Avanzado de Vídeo) surge un grave problema: trozos de diferentes imágenes se intercalan. Una posible manera de resolverlo sería limitar la ASO dentro de un cuadro y de esta manera no se entrelazarían trozos de diferentes imágenes. Sin embargo, incluso si limitamos ASO a una imagen, aumentamos la complejidad del descodificador, porque la ordenación flexible de los macrobloques (FMO) amplía el concepto de cortes, permitiendo a macrobloques no consecutivos pertenecer a la misma sección.

## Tipos de decodificación ASO
### Asociación de macrobloques a Slice

    Este ejemplo muestra el impacto del sistema ASO en la complejidad del descodificador AVC.
Un ejemplo de cómo macrobloques se pueden asociar a slices se muestra en la Figura 1. Cuando la ASO es compatible, las cuatro slices de este ejemplo pueden ser recibidos por el descodificador en un orden aleatorio. La Figura 2 muestra el siguiente orden de recepción de: slice #4, slice #3, slice #1, y slice #2. En la misma figura se presentan los bloques del descodificador AVC necesarios para apoyar la decodificación ASO.
Figura 1: Un ejemplo de asignación de macrobloques a cuatro slices. Cada segmento está representado por una textura diferente.
Figura 2: Los bloques del descodificador AVC necesarios para apoyar la decodificación de ASO.
Para cada tramo, la longitud de slice y la dirección del primer macrobloque (es decir, índice con respecto a la orden de escaneo de trama) del primer macrobloque (MB) del slice son extraídos por el slice parser (analizador de slices, en la Figura 2). Esta información, junto con el mismo slice, se almacena en la memoria (que aparece como DRAM). Además, una lista de punteros (en la figura 2, un puntero para cada sector, y cada una apuntando a la ubicación de memoria donde se almacena el slice), debe ser generada. La lista de los punteros, junto con la dirección del primer macrobloque del slice, se utiliza para navegar a través del orden de slices. La longitud del tramo será utilizado para transferir los datos del slice de la DRAM a la memoria interna del descodificador.
Ante la necesidad de descodificar el orden de slices, un descodificador podrá:
* 1) esperar a que lleguen todos los slices de la misma imagen antes de empezar la decodificación y apertura de la imagen
* 2) descifrar los slices en el orden en que llegan al descodificador.
El primer método aumenta la latencia, pero permite la realización de decodificación y apertura en paralelo. Sin embargo, la gestión de un gran número de punteros (en el peor de los casos, un puntero para cada macrobloque) y el aumento de la inteligencia de la unidad de acceso de DRAM hacen que haya un aumento de la complejidad del descodificador. El segundo método perjudica significativamente el rendimiento del descodificador. Además, mediante la realización de la apertura en un segundo paso, se aumenta el ancho de banda de memoria DRAM de procesador.
Decodificación de slices en el orden en que se reciben puede provocar un consumo de memoria adicional o imponer requisitos más altos de rendimiento en el descodificador y la memoria local para ejecutar a una velocidad de reloj más altas.

### Asociación de macrobloques a slices y de slices a grupos de slices

    Este ejemplo muestra el impacto del sistema ASO y FMO en la complejidad del descodificador AVC.
Un ejemplo de cómo slices pueden ser asociados a grupos de slices diferentes se muestra en la Figura 3. Cuando la ASO y FMO son compatibles, las cuatro slices de este ejemplo pueden ser recibidos por el descodificador en un orden aleatorio. La Figura 4 muestra el siguiente orden: slice #4, slice #2, slice #1, y slice #3. En la misma figura se presentan los bloques del descodificador AVC necesarios para apoyar la decodificación ASO y FMO.
Figura 3: Un ejemplo de asignación de macrobloques a cuatro slices y dos grupos de slices (SG en la figura). Cada segmento está representado por una textura diferente, y cada uno de SG está representado por un color diferente.
Figura 4: Los bloques del descodificador AVC necesarios para apoyar la ASO y decodificación de FMO.
Además de la longitud del tramo y la dirección del primer macrobloque de la sección, el analizador de slice (Figura 4) necesita extraer del grupo de slices (SG) cada slice. Estas informaciones, junto con el mismo slice, se almacenan en la memoria DRAM. Como en el caso de ASO, la lista de punteros (Figura 4) debe ser generada.
La lista de indicadores, junto con la dirección del primer macrobloque del slice, el Slice Group (SG), y el mb_allocation_map (almacenada en la memoria local del procesador), se utilizarán para navegar por las secciones. La longitud del tramo será utilizada para transferir los datos de slice de la DRAM al procesador de memoria local.
Al igual que en el caso de ASO, en el caso de ASO y FMO combinados, el descodificador podrá:
* 1) Esperar a que lleguen todos los slices de la misma imagen antes de empezar la decodificación y apertura de la imagen
* 2) Descifrar los slices en el orden en quevan llegando al descodificador.
El primer caso es el preferido. A causa de FMO, la decodificación de macrobloques escaneando la trama puede requerir cambiar entre diferentes slices y / o grupos de slices. Para acelerar el acceso de la DRAM, debe utilizarse un buffer para cada Slice Group(SG) (Figura 4). Esta inteligencia adicional de la unidad de acceso DRAM aumenta aún más la complejidad del descodificador. Por otra parte, el cambio entre diferentes slices y / o grupos de slices requiere el cambio de la información del estado del Descodificador Entrópico (ED). En el peor de los casos, el intercambio se produce después de la decodificación de cada macrobloque. Si toda la información del estado es demasiado grande para ser almacenado en la memoria del procesador local, cada estado del Descodificador Entrópico (ED) necesita ser cargado y almacenados desde memorias DRAM, incrementándose con ello el ancho de banda de memoria DRAM del procesador (Figura 4).