# Ordenació arbitrària de slices

L'ordenació arbitrària de slices (ASO) és un algorisme per a la prevenció de pèrdues. S'utilitza per reestructurar la representació de les regions fonamentals (macroblocs) d'una imatge. Aquest tipus d'algorisme evita la necessitat d'esperar a un conjunt complet d'imatges per arribar a totes les fonts. Es tracta com un mecanisme de resistència addicional d'error. Aquest tipus d'algorisme està inclòs com a eina al perfil bàsic (Baseline Profile) del codificador MPEG-4 H.264/AVC juntament amb Slices I, Slices P, codificació adaptativa segons el context de longitud variable (CAVLC), agrupació de Slices (SG) i Slices redundants.

## Aplicacions

Es fa servir àmpliament en videoconferències i aplicacions mòbils executades en dispositius amb potència computacional limitada. L'ASO imposa que tots els macroblocs han de ser ordenats en la descodificació, i d'aquesta manera millorar la flexibilitat per poder disminuir l'important retard que sol haver a les videoconferències i en els usos interactius d'internet.

## Problemes

Si utilitzem ASO en imatges amb el sistema AVC (Codi Avançat de Vídeo) sorgeix un greu problema: trossos de diferents imatges s'intercalen. Una possible manera de resoldre-ho seria limitar la ASO dins d'un quadre i d'aquesta manera no s'entrellaçarien trossos de diferents imatges. No obstant això, fins i tot si limitem ASO a una imatge, augmentem la complexitat del descodificador, perquè l'ordenació flexible dels macroblocs (FMO) amplia el concepte de talls, permetent a macroblocs no consecutius pertànyer a la mateixa secció.

## Tipus de descodificació ASO
### Associació de macroblocs a Slice

    L'exemple mostra l'impacte del sistema ASO en la complexitat del descodificador AVC.
Un exemple de com macroblocs es poden associar a slices es mostra a la Figura 1. Quan la ASO és compatible, les quatre slices d'aquest exemple poden ser rebuts pel descodificador en un ordre aleatori. La Figura 2 mostra l'ordre de recepció de: slice #4, slice #3, slice #1, i slice #2. A la mateixa figura es presenten els blocs del descodificador AVC necessaris per donar suport a la descodificació ASO.
Figura 1: Un exemple d'assignació de macroblocs a quatre slices. Cada segment està representat per una textura diferent.
Figura 2: Els blocs del descodificador AVC necessaris per donar suport a la descodificació d'ASO.
Per a cada tram, la longitud d'slice i la direcció del primer macrobloque (és a dir, índex pel que fa a l'ordre d'escaneig de trama) del primer macrobloque (MB) de l'slice són extrets pel slice parser (analitzador de slices, a la Figura 2). Aquesta informació, juntament amb el mateix slice, s'emmagatzema en la memòria (que apareix com DRAM). A més, una llista de punters (a la figura 2, un punter per a cada sector, i cada una apuntant a la ubicació de memòria on s'emmagatzema el slice), ha de ser generada. La llista dels punters, juntament amb la direcció del primer macrobloque del slice, s'utilitza per navegar a través de l'ordre de slices. La longitud del tram serà utilitzat per transferir les dades del slice de la DRAM a la memòria interna del descodificador.
Davant la necessitat de descodificar l'ordre de slices, un descodificador podrà:
* 1) Esperar que arribin tots els slices de la mateixa imatge abans de començar la descodificació i obertura de la imatge
* 2) Desxifrar els slices en l'ordre en que arriben al descodificador.
El primer mètode augmenta la latència, però permet la realització de descodificació i obertura en paral·lel. No obstant això, la gestió d'un gran nombre de punters (en el pitjor dels casos, un punter per a cada macrobloque) i l'augment de la intel·ligència de la unitat d'accés de DRAM fan que hi hagi un augment de la complexitat del descodificador. El segon mètode perjudica significativament el rendiment del descodificador. A més, mitjançant la realització de l'obertura en un segon pas, s'augmenta l'amplada de banda de memòria DRAM de processador.
La descodificació de slices, en l'ordre en què es reben, pot provocar un consum de memòria addicional o imposar requisits més alts de rendiment en el descodificador i la memòria local per executar a una velocitat de rellotge més altes.

### Associació de macroblocs a slices i de slices a grups de slices

    L'exemple mostra l'impacte del sistema ASO i FMO en la complexitat del descodificador AVC.
Un exemple de com slices també associats a grups de slices diferents es mostra a la Figura 3. Quan la ASO i FMO són compatibles, les quatreslicesd'aquest exemple poden ser rebuts pel descodificador en un ordre aleatori. La Figura 4 mostra el següent ordre: slice #4, slice #2, slice #1, i slice #3. A la mateixa figura es presenten els blocs del descodificador AVC necessaris per donar suport a la descodificació ASO i FMO.
Figura 3: Un exemple d'assignació de macroblocs a quatre slices i dos grups de slices (SG a la figura). Cada segment està representat per una textura diferent, i cada un de SG està representat per un color diferent.
Figura 4: Els blocs del descodificador AVC necessaris per donar suport a la ASO i descodificació de FMO.
A més de la longitud del tram i la direcció del primer macrobloque de la secció, l'analitzador de slice (Figura 4) necessita extreure del grup de slices (SG) cada slice. Aquestes informacions, juntament amb el mateix slice, s'emmagatzemen en la memòria DRAM. Com en el cas d'ASO, la llista de punters (figura 4) ha de ser generada.
La llista d'indicadors, juntament amb la direcció del primer macrobloque del slice, el Slice Group (SG), i el mb_allocation_map (emmagatzemada en la memòria local del processador), s'utilitzaran per navegar per les seccions. La longitud del tram serà utilitzada per transferir les dades de slice de la DRAM al processador de memòria local.
Com en el cas d'ASO, en el cas d'ASO i FMO combinats, el descodificador podrà:
* 1) Esperar que arribin tots els slices de la mateixa imatge abans de començar la descodificació i obertura de la imatge
* 2) Desxifrar els slices en l'ordre en què va arribant al descodificador.
El primer cas és el preferit. A causa de FMO, la descodificació de macroblocs escanejant la trama pot requerir canviar entre diferents slices i / o grups d'slices. Per accelerar l'accés de la DRAM, s'ha d'utilitzar un buffer per a cada Slice Group (SG) (Figura 4). Aquesta intel·ligència addicional de la unitat d'accés DRAM augmenta encara més la complexitat del descodificador. D'altra banda, el canvi entre diferents slices i / o grups d'slices requereix el canvi de la informació de l'estat del Descodificador Entròpic (ED). En el pitjor dels casos, l'intercanvi es produeix després de la descodificació de cada macrobloque. Si tota la informació de l'estat és massa gran per a ser emmagatzemat a la memòria del processador local, cada estat del Descodificador Entròpic (ED) necessita ser carregat i emmagatzemat des de memòries DRAM, incrementant amb això l'amplada de banda de memòria DRAM del processador (figura 4).

## Referències

* Iole Moccagatta, LSI Logic (2002). «Arbitrary Slice Order and Flexible Macroblock Order Impact of AVC Compliance and Implementation Complexity»

## Vegeu també

* Còdec de vídeo