• No se han encontrado resultados

Procesos de obtención de macrobloques, bloques y particiones adyacentes La subcláusula .1 especifica el proceso de obtención de macrobloques adyacentes

6 Formato de los datos fuente, codificados, decodificados y de salida, proceso de barrido y relaciones de adyacenciay relaciones de adyacencia

6.3 Subdivisión espacial de imágenes y sectores

6.4.7 Procesos de obtención de macrobloques, bloques y particiones adyacentes La subcláusula .1 especifica el proceso de obtención de macrobloques adyacentes

La subcláusula 6.4.7.2 especifica el proceso de obtención de bloques luma 8x8 adyacentes. La subcláusula 6.4.7.3 especifica el proceso de obtención de bloques luma 4x4 adyacentes. La subcláusula 6.4.7.4 especifica el proceso de obtención de bloques croma 4x4 adyacentes. La subcláusula 6.4.7.5 especifica el proceso de obtención de particiones adyacentes.

En el cuadro 6-2 se especifican los valores de la diferencia de posición luma ( xD, yD ) correspondientes al argumento y el valor de N en mbAddrN, mbPartIdxN, subMbPartIdxN, luma8x8BlkIdxN, luma4x4BlkIdxN, y chroma4x4BlkIdxN correspondientes al resultado. Estas asignaciones de argumento y resultado se utilizan en las subcláusulas 6.4.7.1 a 6.4.7.5. La variable predPartWidth se especifica cuando se hace referencia al cuadro 6-2.

Cuadro 6-2 – Especificación de las asignaciones de argumento y resultado que se utilizan en las subcláusulas 6.4.7.1 a 6.4.7.5

N xD yD

A –1 0

B 0 –1

C predPartWidth –1

D –1 –1

La figura 6-9 ilustra la posición relativa de los macrobloques, bloques o particiones A, B, C, y D adyacentes al macrobloque, partición, o bloque considerado, cuando el macrobloque, partición o bloque considerado está en modo codificación cuadro.

A B C D H.264_F6-9 Macrobloque, partición o bloque considerado

Figura 6-9 – Determinación de macrobloques, bloques y particiones adyacentes (informativo)

6.4.7.1 Proceso de obtención de macrobloques adyacentes Este proceso genera como resultado:

– mbAddrA: la dirección del macrobloque situado a la izquierda del macrobloque considerado y su estado de disponibilidad, y

– mbAddrB: dirección del macrobloque situado encima del macrobloque considerado y su estado de disponibilidad.

mbAddrN (siendo N = A o B) se obtiene del modo siguiente:

– La diferencia de posición luma ( xD, yD ) se fija de acuerdo con el cuadro 6-2.

– Se llama al proceso de obtención de posiciones adyacentes especificado en la subcláusula 6.4.8 para las posiciones luma ( xN, yN ) igual a ( xD, yD ), y el resultado se asigna a mbAddrN.

6.4.7.2 Proceso de obtención de bloques luma 8x8 adyacentes

Este proceso acepta como argumento un índice de bloque luma 8x8, luma8x8BlkIdx.

El luma8x8BlkIdx especifica los bloques luma 8x8 de un macrobloque en un barrido por filas. Este proceso genera como resultado:

– mbAddrA: cuyo valor es CurrMbAddr o la dirección del macrobloque situado a la izquierda del macrobloque considerado y su estado de disponibilidad;

– mbAddrB: cuyo valor es CurrMbAddr o la dirección del macrobloque situado encima del macrobloque considerado y su estado de disponibilidad;

– luma8x8BlkIdxB: índice del bloque luma 8x8 situado encima del bloque 8x8 con índice luma8x8BlkIdx y su estado de disponibilidad.

mbAddrN y luma8x8BlkIdxN (siendo N = A o B) se obtienen del modo siguiente: – La diferencia de posición luma ( xD, yD ) se fija de acuerdo con el cuadro 6-2. – La posición luma ( xN, yN ) se especifica mediante:

xN = ( luma8x8BlkIdx % 2 ) * 8 + xD (6-17)

yN = ( luma8x8BlkIdx / 2 ) * 8 + yD (6-18)

– Se llama al proceso de obtención de posiciones adyacentes descrito en la subcláusula 6.4.8, se le pasan como argumentos las posiciones luma ( xN, yN ) y el resultado se asigna a mbAddrN y ( xW, yW ).

– La variable luma8x8BlkIdxN se obtiene del siguiente modo:

– Si mbAddrN no está disponible, luma8x8BlkIdxN se marca como no disponible.

– De lo contrario (mbAddrN está disponible), se asigna a luma8x8BlkIdxN el bloque luma 8x8 en el macrobloque mbAddrN que abarca la posición luma ( xW, yW ).

6.4.7.3 Proceso de obtención de bloques luma 4x4 adyacentes

Este proceso acepta como argumento un índice de bloque luma 4x4, luma4x4BlkIdx. Este proceso genera como resultado:

– mbAddrA: cuyo valor es CurrMbAddr o la dirección del macrobloque situado a la izquierda del macrobloque considerado y su estado de disponibilidad;

– luma4x4BlkIdxA: índice del bloque luma 4x4 situado a la izquierda del bloque 4x4 con índice luma4x4BlkIdx y su estado de disponibilidad;

– mbAddrB: cuyo valor es CurrMbAddr o la dirección del macrobloque situado encima del macrobloque considerado y su estado de disponibilidad;

– luma4x4BlkIdxB: índice del bloque luma 4x4 situado encima del bloque 4x4 con índice luma4x4BlkIdx y su estado de disponibilidad.

mbAddrN y luma4x4BlkIdxN (siendo N = A o B) se obtienen del modo siguiente: – La diferencia de posición luma ( xD, yD ) se fija de acuerdo con el cuadro 6-2.

– Se llama al proceso de barrido inverso de bloques luma 4x4 descrito en la subcláusula 6.4.3, se le pasa como argumento luma4x4BlkIdx y el resultado es ( x, y ). – La posición luma ( xN, yN ) se especifica mediante:

xN = x + xD (6-19)

yN = y + yD (6-20)

– Se llama al proceso de obtención de posiciones adyacente descrito en la subcláusula 6.4.8, pasándole como argumentos las posiciones luma ( xN, yN ) y el resultado se asigna a mbAddrN y ( xW, yW ).

– La variable luma4x4BlkIdxN se obtiene del siguiente modo:

– Si mbAddrN no está disponible, se marca luma4x4BlkIdxN como no disponible.

– De lo contrario (mbAddrN está disponible), se asigna a luma4x4BlkIdxN el bloque luma 4x4 en el macrobloque mbAddrN que abarca la posición luma ( xW, yW ).

6.4.7.4 Proceso de obtención de bloques croma 4x4 adyacentes

Este proceso acepta como argumento un bloque croma 4x4, chroma4x4BlkIdx. Este proceso genera como resultado:

– mbAddrA: cuyo valor es CurrMbAddr o la dirección del macrobloque situado a la izquierda del macrobloque considerado y su estado de disponibilidad;

– croma4x4BlkIdxA: el índice del bloque croma 4x4 situado a la izquierda del bloque croma 4x4 con índice chroma4x4BlkIdx y su estado de disponibilidad;

– mbAddrB: es igual a CurrMbAddr o la dirección del macrobloque situado encima del macrobloque actual y su estado de disponibilidad;

– croma4x4BlkIdxB: el índice del bloque croma 4x4 situado encima del bloque croma 4x4 con índice croma4x4BlkIdx y su estado de disponibilidad.

Se llama al proceso de obtención de bloques luma 8x8 adyacentes, pasándole como argumento luma8x8BlkIdx = chroma4x4BlkIdx y el resultado es mbAddrA, chroma4x4BlkIdxA = luma8x8BlkIdxA, mbAddrB, y chroma4x4BlkIdxB = luma8x8BlkIdxB.

6.4.7.5 Proceso de obtención de particiones adyacentes Este proceso acepta como argumentos:

– un índice de partición macrobloque, mbPartIdx;

– un tipo de submacrobloque considerado, currSubMbType; – un índice de partición submacrobloque, subMbPartIdx. El proceso genera como resultado:

– mbAddrA\mbPartIdxA\subMbPartIdxA: especifica la partición macrobloque o submacrobloque situada a la izquierda del macrobloque considerado y su estado de disponibilidad, o la partición submacrobloque CurrMbAddr\mbPartIdx\subMbPartIdx y su estado de disponibilidad;

– mbAddrB\mbPartIdxB\subMbPartIdxB: especifica la partición macrobloque o submacrobloque situada encima del macrobloque considerado y su estado de disponibilidad, o la partición submacrobloque CurrMbAddr\mbPartIdx\subMbPartIdx y su estado de disponibilidad;

– mbAddrC\mbPartIdxC\subMbPartIdxC: especifica la partición macrobloque o submacrobloque situada arriba y a la derecha del macrobloque considerado y su estado de disponibilidad, o la partición submacrobloque CurrMbAddr\mbPartIdx\subMbPartIdx y su estado de disponibilidad,

– mbAddrD\mbPartIdxD\subMbPartIdxD: especifica la partición macrobloque o submacrobloque situada encima y a la izquierda del macrobloque considerado y su estado de disponibilidad, o la partición submacrobloque CurrMbAddr\mbPartIdx\subMbPartIdx y su estado de disponibilidad.

mbAddrN, mbPartIdxN, y subMbPartIdx (siendo N = A, B, C, o D) se obtienen del siguiente modo: – Se llama al proceso de barrido inverso de particiones macrobloque descrito en la

subcláusula 6.4.2.1, se le pasa como argumento mbPartIdx y el resultado es ( x, y ).

– La posición de la muestra luma superior izquierda dentro de la partición macrobloque ( xS, yS ) se obtiene del siguiente modo:

– Si mb_type es igual a P_8x8, P_8x8ref0 o B_8x8, se llama al proceso de barrido inverso de partición de submacrobloque descrito en la subcláusula 6.4.2.2, pasándole

– La variable predPartWidth del cuadro 6-2 se especifica del siguiente modo:

– Si mb_type es igual a P_Skip, B_Skip, o B_Direct_16x16, predPartWidth = 16. – De lo contrario, si mb_type es igual a B_8x8, se aplica lo siguiente.

– Si currSubMbType es igual a B_Direct_8x8, predPartWidth = 16.

NOTA – Cuando currSubMbType es igual a B_Direct_8x8 y direct_spatial_mv_pred_flag es igual a 1, el vector de movimiento predicho es el correspondiente al macrobloque completo.

– De lo contrario, predPartWidth = SubMbPartWidth( sub_mb_type[ mbPartIdx ] ). – De lo contrario, si mb_type es igual a P_8x8, o P_8x8ref0,

predPartWidth = SubMbPartWidth( sub_mb_type[ mbPartIdx ] ). – De lo contrario, predPartWidth = MbPartWidth( mb_type ).

– La diferencia de posición luma ( xD, yD ) se fija de conformidad con el cuadro 6-2. – La posición luma adyacente ( xN, yN ) viene dada por:

xN = x + xS + xD (6-21)

yN = y + yS + yD (6-22)

– Se llama al proceso de obtención de posiciones adyacentes descrito en las subcláusula 6.4.8, se le pasa como argumentos las posiciones luma ( xN, yN ) y el resultado se asigna a mbAddrN y ( xW, yW ).

– En función de mbAddrN, se aplica lo siguiente:

– Si mbAddrN no está disponible, la partición macrobloque o submacrobloque mbAddrN\mbPartIdxN\subMbPartIdxN se marca como no disponible.

– De lo contrario (mbAddrN está disponible), se aplica lo siguiente:

– Se asigna a mbPartIdxN la partición macrobloque en el macrobloque mbAddrN que abarca la posición luma ( xW, yW ) y se asigna a subMbPartIdxN la partición submacrobloque dentro de la partición macrobloque mbPartIdxN que abarca la muestra ( xW, yW ) en el macrobloque mbAddrN.

– Si la partición dada por mbPartIdxN y subMbPartIdxN todavía no está decodificada, la partición macrobloque mbPartIdxN y la partición submacrobloque subMbPartIdxN se marcan como no disponibles.

NOTA – La última condición se produce, cuando, por ejemplo, mbPartIdx = 2, subMbPartIdx = 3, xD = 4, yD = –1, es decir, cuando se solicita el C adyacente del último bloque luma de 4x4 del tercer submacrobloque.