ES2348686T3 - Codificaciã“n de video con escalabilidad granular fina mediante fragmentos alineados con ciclos. - Google Patents
Codificaciã“n de video con escalabilidad granular fina mediante fragmentos alineados con ciclos. Download PDFInfo
- Publication number
- ES2348686T3 ES2348686T3 ES07799529T ES07799529T ES2348686T3 ES 2348686 T3 ES2348686 T3 ES 2348686T3 ES 07799529 T ES07799529 T ES 07799529T ES 07799529 T ES07799529 T ES 07799529T ES 2348686 T3 ES2348686 T3 ES 2348686T3
- Authority
- ES
- Spain
- Prior art keywords
- cycles
- fragments
- fgs
- coding
- video
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Un procedimiento de codificación de vídeo que comprende: codificar (86) bloques de datos de vídeo de escalabilidad granular fina (FGS) en ciclos que se caracteriza por la encapsulación (88) de los ciclos en una pluralidad de fragmentos, de modo que un inicio de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
Description
La presente solicitud reivindica la prioridad de la solicitud provisional estadounidense n.º 60/830.891 presentada el 13 de julio de 2006, la solicitud provisional estadounidense n.º 60/866.999, presentada el 22 de noviembre de 2006 y la solicitud provisional estadounidense n.º 60/917.542, presentada el 11 de mayo de 2007.
La presente revelación se refiere a la codificación de vídeo y, más concretamente, a la codificación escalable de vídeo digital.
Las posibilidades del vídeo digital se pueden incorporar a una amplia selección de dispositivos, incluyendo televisiones digitales, sistemas de radiodifusión directa digital, dispositivos de comunicación inalámbricos, asistentes personales digitales (PDA), ordenadores portátiles, ordenadores de mesa, cámaras digitales, dispositivos de grabación digital, radioteléfonos celulares o por satélite, y similares. Los dispositivos de vídeo digital pueden proporcionar mejoras significativas frente a los sistemas convencionales de vídeo analógico en la creación, modificación, transmisión, almacenamiento, grabación y ejecución de manera eficaz de secuencias de vídeo de movimiento.
La escalabilidad granular fina (FGS) se refiere, en general, a la capacidad para truncar arbitrariamente un flujo de bits de vídeo con el fin de conseguir una degradación ligera de la calidad de vídeo dentro de un intervalo dado de velocidades binarias. Un flujo de bits de vídeo codificado con FGS incluye una capa base de una calidad especificada y una o más capas de mejora que están conectadas a la capa base. Las capas de mejora incluyen datos adicionales para mejorar la calidad de la capa base. A medida que se reciba y se descodifique más flujo de bits de FGS, a través de una o más capas de mejora, mejor será la calidad del vídeo descodificado.
Cabe destacar el documento de RIDGE J., BAO Y et al., “Cyclical block coding for FGS”, VIDEO STANDARDS AND DRAFTS, M11509, 13 de enero de 2005, XP030040270. Este documento se refiere a la codificación de bloques cíclicos para bloques de datos de vídeo de escalabilidad granular fina (FGS).
Según la presente invención, se proporcionan un procedimiento de codificación de vídeo según lo expuesto en la reivindicación 1, un codificador de vídeo según lo expuesto en la reivindicación 11, un procedimiento de descodificación de vídeo según lo expuesto en la reivindicación 12 y un descodificador de vídeo según lo expuesto en la reivindicación 14. En las reivindicaciones dependientes, se reivindican más realizaciones.
En general, la revelación se dirige a técnicas de codificación de vídeo con FGS que hacen uso de fragmentos alineados con ciclos (CAF). Las técnicas de codificación de vídeo con FGS pueden realizar una codificación basada en ciclos de los coeficientes y los elementos sintácticos de los bloques de datos de vídeo de FGS y encapsular los ciclos de codificación resultantes en fragmentos para la transmisión a través de unidades de transmisión de red, tales como las unidades de la capa de abstracción de red (NAL). Según esta revelación, los fragmentos pueden estar alineados con ciclos, de modo que un inicio de cada uno de los fragmentos coincida sustancialmente con un inicio de uno de los ciclos. De esta manera, es posible acceder fácilmente a los ciclos de codificación a través de fragmentos individuales.
Cada uno de los ciclos puede representar al menos una porción de un escaneado en zigzag de uno o más bloques para transformar coeficientes. Al menos algunos de los ciclos pueden abarcar coeficientes de codificación asociados a una pluralidad de bloques. Los bloques de datos de vídeo de FGS pueden formar parte de un segmento de FGS de los datos de vídeo. En algunos aspectos, el segmento de FGS puede ser un segmento de mejora progresiva (PR), aunque la revelación no se limita a este aspecto. Al menos algunos de los ciclos pueden ser controlados con un comando de modo vectorial para escanear hasta una posición de escaneado predefinida de cada uno de los bloques antes de pasar a otro de los bloques. De este modo, es posible reducir el número de ciclos necesario para atravesar los bloques, dando como resultado un número reducido de fragmentos y una menor cabecera.
Los fragmentos pueden ser codificados por entropía independientemente uno de otro usando contextos de codificación separados, de modo que sea posible descodificar simultáneamente múltiples fragmentos. La codificación entrópica usada para cada uno de los fragmentos se puede reiniciar antes de codificar por entropía el siguiente fragmento, de modo que cada uno de los fragmentos se codifique por entropía independientemente del resto de los fragmentos. Por ejemplo, se puede descargar un codificador entrópico y reiniciar los contextos de codificación usados por el codificador entrópico tras codificar por entropía cada uno de los fragmentos. La codificación entrópica independiente de los fragmentos puede permitir la descodificación paralela y el procesamiento independiente de diferentes fragmentos y de los ciclos de los fragmentos, de modo que sea posible, si fuera necesario, descodificar simultáneamente múltiples fragmentos.
En un aspecto, la revelación proporciona un procedimiento de codificación de vídeo que comprende codificar bloques de datos de vídeo de escalabilidad granular fina (FGS) en ciclos y encapsular los ciclos en una pluralidad de fragmentos, de modo que un inicio de cada uno de los fragmentos coincida sustancialmente con un inicio de uno de los ciclos.
En otro aspecto, la revelación proporciona un codificador de vídeo que comprende un módulo de codificación basada en ciclos que codifica bloques de datos de vídeo de escalabilidad granular fina (FGS) en ciclos y un módulo de fragmentación que encapsula los ciclos en una pluralidad de fragmentos, de modo que un inicio de cada uno de los fragmentos coincida sustancialmente con un inicio de uno de los ciclos.
En un aspecto más, la revelación proporciona un procedimiento de descodificación de vídeo que comprende recibir fragmentos que incluyen ciclos de codificación que codifican bloques de datos de vídeo de escalabilidad granular fina (FGS) y descodificar al menos porciones de al menos algunos de los fragmentos simultáneamente, en el que un inicio de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
En otro aspecto más, la revelación proporciona un descodificador de vídeo que comprende un módulo de descodificación basada en ciclos que recibe fragmentos que incluyen ciclos de codificación que codifican bloques de datos de vídeo de escalabilidad granular fina (FGS) y descodifica al menos porciones de al menos algunos de los fragmentos simultáneamente, en el que un inicio de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
Las técnicas descritas en esta revelación se pueden implementar en un soporte físico, soporte lógico, soporte lógico inalterable, o cualquier combinación de los mismos. Si se implementan en un soporte lógico, el soporte lógico puede ser ejecutado en uno o más procesadores, tales como un microprocesador o un procesador digital de señales (DSP). El soporte lógico que ejecuta las técnicas puede ser almacenado inicialmente en un medio legible por ordenador, y cargado y ejecutado en el procesador. Por consiguiente, esta revelación también contempla un medio legible por ordenador que comprende instrucciones para realizar técnicas según lo descrito en esta revelación.
Los detalles de uno o más aspectos de la revelación se exponen en las figuras anexas y en la descripción que figura a continuación. Hay otras características, objetos y ventajas de la revelación que resultarán evidentes a partir de la descripción y de las figuras, así como de las reivindicaciones.
La FIG. 1 es un diagrama de bloques que ilustra un sistema de codificación y descodificación de vídeo.
La FIG. 2 es un diagrama que ilustra la codificación FGS de múltiples capas de un flujo de
bits de vídeo.
La FIG. 3 es un diagrama que ilustra el escaneado en zigzag de coeficientes de bloques para la codificación FGS de un fotograma.
La FIG. 4 es un diagrama que ilustra un ejemplo de codificación basada en ciclos de coeficientes de un segmento de FGS para bloques de vídeo dispuestos en un orden de escaneado en zigzag.
La FIG. 5 es un diagrama que ilustra un ejemplo de codificación basada en ciclos de coeficientes de un segmento de FGS para bloques de vídeo dispuestos por orden de transmisión.
La FIG. 6 es un diagrama que ilustra la encapsulación de ciclos de codificación en fragmentos normales para la transmisión a través de unidades de la capa de abstracción de red (NAL).
La FIG. 7 es un diagrama que ilustra la encapsulación de ciclos de codificación en fragmentos alineados con ciclos (CAF) para la transmisión a través de unidades de la capa de abstracción de red (NAL).
La FIG. 8 es un diagrama de bloques que ilustra un codificador de segmentos de FGS que encapsula ciclos de codificación en CAF.
La FIG. 9 es un diagrama de bloques que ilustra un descodificador de segmentos de FGS que descodifica ciclos de codificación encapsulados en CAF.
La FIG. 10 es un diagrama de flujo que ilustra la encapsulación de ciclos de codificación en CAF.
La FIG. 11 es un diagrama de flujo que ilustra la encapsulación de ciclos de codificación en CAF más detalladamente.
La FIG. 12 es un diagrama de flujo que ilustra la descodificación de ciclos en CAF.
La FIG. 13 es un diagrama de flujo que ilustra la descodificación de ciclos en CAF más detalladamente.
La FIG. 14 es un diagrama que ilustra los efectos del error de paquetes en los fragmentos normales y en los CAF.
En general, la revelación se dirige a técnicas de codificación de vídeo con FGS que hacen uso de fragmentos alineados con ciclos (CAF). Las técnicas de codificación de vídeo con FGS pueden realizar una codificación basada en ciclos de los coeficientes y los elementos sintácticos de los bloques de datos de vídeo de FGS y encapsular los ciclos de codificación resultantes en fragmentos para la transmisión a través de unidades de transmisión de red, tales como las unidades de la capa de abstracción de red (NAL). Según esta revelación, los fragmentos pueden estar alineados con ciclos, de modo que un inicio de cada uno de los fragmentos coincida sustancialmente con un inicio de uno de los ciclos. De esta manera, es posible acceder fácilmente a los ciclos de codificación a través de fragmentos individuales.
Cada uno de los ciclos puede representar al menos una porción de un escaneado en zigzag de uno o más bloques para transformar coeficientes. Al menos algunos de los ciclos pueden abarcar coeficientes de codificación asociados a una pluralidad de bloques. Los bloques de datos de vídeo de FGS pueden formar parte de un segmento de FGS de los datos de vídeo. En algunos aspectos, el segmento de FGS puede ser un segmento de mejora progresiva (PR), aunque las técnicas descritas en esta revelación no se limitan necesariamente a segmentos de PR. Al menos algunos de los ciclos pueden ser controlados con un comando de modo vectorial para escanear hasta una posición de escaneado predefinida de cada uno de los bloques antes de pasar a otro de los bloques. De este modo, es posible reducir el número de ciclos necesario para atravesar los bloques, dando como resultado un número reducido de fragmentos y una menor cabecera.
Los fragmentos se pueden codificar por entropía de modo que se pueda descodificar un fragmento sin finalizar la descodificación de otros fragmentos. En algunos casos, si fuera necesario, se pueden descodificar simultáneamente múltiples fragmentos. Como ejemplo, es posible reiniciar la codificación entrópica para cada uno de los fragmentos antes de codificar por entropía el siguiente fragmento, de modo que cada uno de los fragmentos tenga contextos de codificación entrópica que sean independientes de los contextos de codificación entrópica del resto de los fragmentos. Por ejemplo, se puede descargar un codificador entrópico y reiniciar los contextos de codificación usados por el codificador entrópico tras codificar por entropía cada uno de los fragmentos. La codificación entrópica independiente de los fragmentos puede permitir la descodificación paralela y el procesamiento de diferentes fragmentos y de los ciclos de los fragmentos. Por consiguiente, se pueden descodificar simultáneamente al menos porciones de al menos algunos fragmentos, p. ej., a la vez o sin esperar a la finalización de la descodificación de otros fragmentos.
Puede que algunos fragmentos no sean completamente independientes entre sí. Por ejemplo, si un bloque A ha sido descodificado por completo en un fragmento 0, no habría información por descodificar para el bloque A en otros fragmentos. En este caso, la descodificación de la información para el bloque A en un fragmento 1 posterior puede depender del resultado de la descodificación del fragmento 0 para el mismo bloque. Sin embargo, se pueden mantener independientes otros contextos de codificación. Por ejemplo, la descodificación del fragmento 1 no cambia si el fragmento 0 es completamente descodificado antes de descodificar el fragmento 1 o si el fragmento 0 y el fragmento 1 son descodificados simultáneamente. Por consiguiente, se pueden descodificar simultáneamente al menos algunos fragmentos con al menos porciones de otros fragmentos, de manera que no sea necesario esperar a la finalización de la descodificación de otros fragmentos. En cambio, según lo tratado anteriormente, se pueden descodificar a la vez al menos algunos fragmentos en paralelo con la descodificación de al menos una porción de otros fragmentos, p. ej., sin esperar a la finalización de la descodificación de otros fragmentos.
La FIG. 1 es un diagrama de bloques que ilustra un sistema de codificación y descodificación de vídeo 10. Como se muestra en la FIG. 1, el sistema 10 incluye un dispositivo de origen 12 que trasmite vídeo codificado a un dispositivo de destino 14 por un canal de transmisión 16. El dispositivo de origen 12 puede incluir un dispositivo de origen de vídeo 18 y un codificador de vídeo 20. El dispositivo de destino 14 puede incluir un descodificador de vídeo 22 y un dispositivo de visualización de vídeo 24. El canal de transmisión 16 puede ser un medio de comunicación cableado o inalámbrico, o cualquier combinación de medios cableados o inalámbricos. El dispositivo de origen 12 genera vídeo para la transmisión al dispositivo de destino 14. Sin embargo, en algunos casos, los dispositivos 12 y 14 pueden funcionar de un modo sustancialmente simétrico. Por ejemplo, cada uno de los dispositivos 12 y 14 puede incluir componentes de codificación y descodificación de vídeo. Por consiguiente, el sistema 10 puede admitir una transmisión de vídeo uni– o bidireccional entre los dispositivos de vídeo 12 y 14, p. ej., para la emisión de vídeo en tiempo real, la radiodifusión de vídeo o vídeotelefonía.
La fuente de vídeo 18 puede incluir un dispositivo de captura de vídeo, tal como una o más cámaras de vídeo, un archivo de vídeo que contiene vídeo capturado previamente o una imagen de vídeo en vivo desde un proveedor de contenido de vídeo. Como otra alternativa más, la fuente de vídeo 18 puede generar datos basados en gráficos informáticos como el vídeo de origen, o una combinación de vídeo en vivo y vídeo generado por ordenador. En cada caso, el vídeo capturado, capturado previamente o generado por ordenador puede ser codificado por un codificador de vídeo 20 para la transmisión desde el dispositivo de origen 12 de vídeo al dispositivo de destino 14 de vídeo por el canal de transmisión 16. El dispositivo de visualización 24 puede incluir cualquiera de una variedad de dispositivos de visualización, tales como una pantalla de cristal líquido (LCD), una pantalla de plasma o una pantalla de diodos orgánicos emisores de luz (OLED).
El codificador de vídeo 20 y el descodificador de vídeo 22 pueden estar configurados para admitir una codificación de vídeo con escalabilidad (FGS) con una relación señal–ruido. Por ejemplo, el codificador 20 y el descodificador 26 pueden admitir diversos grados de escalabilidad mediante la codificación, la transmisión y la descodificación de capas de mejora escalables en un formato FGS. Para la codificación escalable, una capa base porta datos de vídeo con un nivel de calidad mínimo. Una o más capas de mejora portan un flujo de bits adicional para admitir niveles de calidad superiores. Por consiguiente, se puede proporcionar información de las capas de mejora para admitir una escalabilidad con una relación señal–ruido (SNR). Además, en algunos casos, un flujo de bits adicional portado por una o más capas de mejora puede admitir una mayor escalabilidad espacial y/o una mayor escalabilidad temporal.
El codificador de vídeo 20 y el descodificador de vídeo 26 pueden funcionar según un estándar de compresión de vídeo, tal como MPEG–2, MPEG–4, H.263 de la ITU–T o la codificación de vídeo avanzada (AVC) H.264/MPEG–4 de la ITU–T. Más concretamente, el codificador de vídeo 20 y el descodificador de vídeo 26 pueden estar configurados para poner en práctica ampliaciones de tales estándares para la codificación de vídeo escalable (SVC). Aunque no se muestra en la FIG. 1, en algunos aspectos, el codificador de vídeo 20 y el descodificador de vídeo 22 pueden llevar integrados un codificador y descodificador de audio, respectivamente, e incluir unidades MUX–DEMUX apropiadas, u otro soporte físico y soporte lógico, para procesar la codificación tanto de audio como de vídeo en un flujo de datos común o flujos de datos separados. En caso pertinente, las unidades MUX–DEMUX pueden ajustarse al protocolo de multiplexación H.223 de la ITU o a otros protocolos tales como el protocolo de datagramas de usuario (UDP).
El estándar H.264/MPEG–4 (AVC) fue formulado por el Grupo de Expertos de Codificación de Vídeo (VCEG) de la ITU–T junto con el Grupo de Expertos de Imágenes en Movimiento (MPEG) de la ISO/IE como resultado de una sociedad colectiva conocida como el Equipo Conjunto de Vídeo (JVT). En algunos aspectos, las técnicas descritas en esta revelación se pueden aplicar para implementar ampliaciones de la escalabilidad de vídeo de baja complejidad para dispositivos que, de otro modo, se ajustan al estándar H.264. Por ejemplo, las ampliaciones de la escalabilidad de vídeo pueden representar posibles modificaciones para futuras versiones y ampliaciones del estándar H.264 o de otros estándares. El estándar H.264 se describe la Recomendación H.264 de la ITU–T, codificación de vídeo avanzada para servicios audiovisuales genéricos, por el grupo de estudio de la ITU–T, con fecha de marzo de 2005, que puede ser denominada en la presente memoria estándar H.264 o memoria H.264, o estándar o memoria H.264/AVC.
El Equipo Conjunto de Vídeo (JVT) continúa trabajando en una ampliación de la codificación de vídeo escalable (SVC) a H.264/MPEG–4 AVC. La memoria tanto de H.264/MPEG–4AVC como de la ampliación en desarrollo de la SVC está en forma de un Borrador Conjunto (JD). El Modelo de Vídeo Conjunto Escalable (JSVM) creado por el JVT pone en práctica las herramientas para su uso en el vídeo escalable, que se puede usar en el sistema 10 para diversas tareas de codificación descritas en esta revelación. Se puede encontrar información detallada relativa a un ejemplo de un sistema de codificación con escalabilidad granular fina (FGS) con SNR en los borradores conjuntos, y concretamente, en el Borrador Conjunto 6 (JD6), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz, y Mathias Wien, "Joint Draft 6: Scalable Video Coding", JVT–S 201, Equipo Conjunto de Vídeo (JVT) del MPEG de la ISO/IEC y del VCEG de la ITU–T, abril de 2006, Génova; y el Borrador Conjunto 9 (SVC JD9), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz y Mathias Wien, "Joint Draft 9 of SVC Amendment", JVT–V 201, Equipo Conjunto de Vídeo (JVT) del MPEG de la ISO/IEC y del VCEG de la ITU–T, enero de 2007, Marrakech, Marruecos.
El codificador de vídeo 20 puede estar configurado para generar segmentos de FGS, p. ej., según los borradores JD de la ampliación de la SVC del estándar H.264/MPEG–4 AVC. En algunos aspectos, los segmentos de FGS pueden ser segmentos de mejora progresiva (PR). Un segmento de FGS puede estar truncado casi arbitrariamente. A medida que el descodificador de vídeo 22 recibe y descodifica más bits del segmento de FGS, puede producir una mejor calidad de vídeo. La codificación con FGS del JSVM ha sido diseñada de modo que la mejora de la calidad de vídeo se extiende uniformemente por un fotograma entero, a diferencia de estar concentrada sólo en un determinado espacio del fotograma. La complejidad de la codificación y la descodificación de un segmento de FGS puede ser elevada en términos de requisitos de programación y memoria. Además, el procedimiento de descodificación para un segmento de FGS, según lo especificado en los borradores JD, puede ser complejo.
En algunos aspectos, para la radiodifusión de vídeo, esta revelación contempla la aplicación a una codificación de vídeo H.264 mejorada para enviar servicios de vídeo en tiempo real en sistemas de multidifusión multimedia (TM3) móviles terrestres usando la memoria de la interfaz aérea FLO (Forward Link Only), "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast", para ser publicada como el estándar técnico TIA–1099 (la “memoria FLO”). La memoria FLO incluye ejemplos que definen la sintaxis y al semántica del flujo de bits, y los procedimientos de descodificación adecuados para la interfaz aérea FLO. Alternativamente, es posible radiodifundir el vídeo según otros estándares, tales como DVB–H (Digital Video Broadcast–Handheld), ISDB–T (integrated services digital broadcast – terrestrial) o DMB (digital media broadcast). Por consiguiente, el dispositivo de origen 12 puede ser un terminal inalámbrico móvil, tal como un radioteléfono inalámbrico móvil, un servidor de vídeo en tiempo real o un servidor de radiodifusión de vídeo. Sin embargo, las técnicas descritas en esta revelación no se limitan a un tipo en particular de sistema de radiodifusión, multidifusión o de punto a punto.
El codificador de vídeo 20 y el descodificador de vídeo 22 pueden ser implementados como uno o más microprocesadores, procesadores digitales de señales, circuitos integrados específicos de una aplicación (ASIC), antenajes de puerta de campo programable (FPGA), lógica discreta, soporte lógico, soporte físico, soporte lógico inalterable o cualquier combinación de los mismos. El codificador de vídeo 20 y el descodificador de vídeo 22 pueden estar incluidos en uno
- o más codificadores o descodificadores, pudiendo estar cualquiera de ellos integrado como parte de un codificador/descodificador combinado (CODEC) en un respectivo dispositivo del abonado, dispositivo de radiodifusión, servidor, o similares. Además, el dispositivo de origen de vídeo 12 y el dispositivo de destino de vídeo 14 pueden incluir componentes apropiados de modulación, desmodulación, conversión de la frecuencia, filtración y amplificación para la transmisión y la recepción de vídeo codificado, según proceda, incluyendo antenas y componentes inalámbricos de radiofrecuencia (RF). Sin embargo, para facilitar la ilustración, en la FIG. 1 no se muestran tales componentes.
Una secuencia de vídeo incluye una serie de fotogramas. El codificador de vídeo 20 funciona en bloques de píxeles dentro de fotogramas individuales para codificar los datos de vídeo. Los bloques de vídeo pueden tener tamaños fijos o variables y pueden diferir en el tamaño según un estándar de codificación especificado. Como ejemplo, el estándar H.264 de la ITU–T admite una intra–predicción en diversos tamaños de bloques, tales como en 16 por 16, 8 por 8, 4 por 4 para el componente luma y de 8 x 8 para el componente croma, así como la inter– predicción en diversos tamaños de bloque, tales como en 16 por 16, 16 por 8, 8 por 16, 8 por 8, 8 por 4, 4 por 8 y 4 por 4 para el componente luma y los correspondientes tamaños a escala para el componente croma. Los bloques de vídeo más pequeños pueden proporcionar una mejor resolución y se pueden usar para ubicaciones de un fotograma que incluyen niveles superiores de detalle. Tras la predicción, se puede realizar una transformación en el bloque residual de 8 x 8
- o en el bloque residual de 4 x 4, siendo posible aplicar una transformación adicional a los coeficientes DC de los bloques de 4 x 4 para los componentes croma o los componentes luma si se usa el modo de intra–predicción 16 x 16.
La FIG. 2 es un diagrama que ilustra la codificación FGS de múltiples capas de un flujo de bits de vídeo. Como se muestra en la FIG. 2, la codificación FGS de un flujo de bits de vídeo da como resultado una capa base 30 y una o más capas de mejora 32A–32N (conjuntamente, capas 32). La capa base 30 incluye una serie de marcos 34A–34N que codifican el flujo de bits de vídeo con un nivel de calidad mínimo para una velocidad binaria dada. Cada una de las capas de mejora 32 proporciona una información del flujo de bits de vídeo adicional que puede ser usada por un descodificador 26 para aumentar progresivamente la calidad inicial proporcionada por la capa base 30. El número de capas de mejora 32 procesadas por el descodificador de vídeo 22 depende del número de capas de mejora transmitido por el dispositivo de origen 12 y recibido por el dispositivo de destino 14, p. ej., condiciones de un canal dado u otras limitaciones.
En general, cada capa de mejora respectiva 32A–32N, o parte de la misma, que el descodificador 22 procesa se suma en incrementos a la calidad del vídeo obtenida a partir de la capa base 30, en términos de SNR, según esta revelación. También se pueden aprovechar las capas de mejora 32A–32N para una escalabilidad espacial y/o temporal. En lugar de procesar cada capa de mejora 32A–32N en su totalidad como una capa de mejora diferenciada, el sistema 10 puede permitir la codificación, transmisión y procesamiento de las capas de mejora de la escalabilidad con el uso de un enfoque de FGS generalizada. De este modo, la SNR se puede ampliar con la granularidad fina, ofreciendo mejoras de calidad significativas tras la descodificación parcial de las capas de mejora. Las capas de mejora 32A–32N pueden ser jerárquicas en el sentido de que las capas ofrecen un aumento progresivo de la calidad a medida que son descodificadas. La descodificación de todas las capas de mejora, por ejemplo, producirá la calidad máxima, mientras que la descodificación de sólo la primera capa de mejora producirá un aumento en incrementos de la calidad con respecto a la descodificación única de la capa base.
La FIG. 3 es un diagrama que ilustra el escaneado en zigzag de coeficientes de bloques en los bloques 46A–46C para la codificación FGS de un fotograma. Se puede generar un segmento de FGS, tal como un segmento de PR, en SVC usando una codificación basada en ciclos en lugar de una codificación basada en bloques de los coeficientes de transformación. La codificación basada en ciclos a través de bloques reduce la concentración espacial de las mejoras de la SNR en un fotograma. En cada ciclo, el codificador de vídeo 20 configurado con FGS codifica como máximo un coeficiente distinto de cero en un bloque de coeficientes de transformación y pasa al siguiente bloque. Como se muestra en las FIG. 3 y 4, en el ciclo 0, el codificador de vídeo 20 codifica primero un indicador de bloque codificado (CBF) en el primer bloque 46A, i.e., bloque 0. Si el bloque 0 contiene coeficientes distintos de cero relevantes, el codificador de vídeo 20 codifica uno o más coeficientes del mismo bloque hasta que termina la codificación del primer coeficiente relevante en el orden de escaneado en zig–zag ilustrado en la FIG. 3. Este procedimiento continúa hasta que todos los bloques, p. ej., de dentro de un fotograma o una parte de un fotograma, hayan sido escaneados. El codificador de vídeo 20 se introduce en el siguiente ciclo de codificación, ciclo 1. Si un coeficiente de la posición de escaneado de un ciclo es un coeficiente de mejora, el codificador de vídeo 20 sólo codificará el coeficiente de mejora y pasará al siguiente bloque.
En el ejemplo de la FIG. 3, se supone que los bloques 46A, 46B y 46C son los tres primeros bloques de un segmento de FGS de una capa de mejora de un fotograma. En este ejemplo, cada bloque 46A, 46B, 46C está representado como un bloque de 4 por 4 de coeficientes de transformación. Los bloques 46A, 46B y 46C se representan en el dominio de transformación. Por consiguiente, cada número o variable de un bloque 46A, 46B, 46C es un coeficiente cuantificado que será codificado mediante un procedimiento de codificación entrópica sin pérdidas. Un coeficiente con una etiqueta que comienza con la letra “S”, p. ej., como el indicado por el número de referencia 41 en el bloque 46A, es un coeficiente distinto de cero relevante. Debido a que este bloque 46A está en una capa de mejora de escalabilidad FGS con SNR, para cada coeficiente de un bloque, existe su correspondiente coeficiente en la capa base.
Para un coeficiente distinto de cero relevante, su valor es distinto de cero y su correspondiente coeficiente de la capa base es cero. Por ejemplo, un coeficiente “S0, 1” corresponde a un coeficiente distinto de cero relevante del bloque “0” a un índice de escaneado en zig–zag “1”. Un coeficiente marcado como “0” es un coeficiente igual a cero y su coeficiente correspondiente de la capa base también es cero. Un coeficiente con una etiqueta que comienza con la letra “R”, p. ej., como el indicado por el número de referencia 43 en el bloque 46A, es un coeficiente de mejora con un coeficiente de la capa base correspondiente que es distinto de cero, i.e., que es relevante. El valor del coeficiente de mejora puede ser cero o distinto de cero. Por ejemplo, un coeficiente “R2, 2”, como el indicado por el número de referencia 43, es un coeficiente de mejora del bloque “2” a un índice de escaneado en zig–zag “2”. En la clasificación de los coeficientes de los segmentos de FGS de las capas de mejora, a menudo se usa un mapa de relevancia. Este mapa indica las ubicaciones de los coeficientes que se han vuelto relevantes ya en la capa base. Los coeficientes de estas ubicaciones de la capa de mejora son coeficientes de mejora.
El codificador de vídeo 20, como el descrito en la presente memoria, puede verse cuando se proporciona una ampliación a un codificador entrópico usado en la codificación de la capa base, p. ej., tal como el codificador entrópico contemplado por el estándar H.264 de la ITU–T. En concreto, la división, la transformación y la cuantificación de bloques usadas por el codificador de vídeo 20 en la capa de mejora son similares a las usadas en la capa base. Para codificar los ceros más eficazmente, se pueden usar elementos de sintaxis tales como el indicador de bloque codificado (CBF) y el final de bloque (EOB). También se pueden usar elementos sintácticos similares en la codificación de la capa base. Se envía un CBF una vez por cada bloque e indica la presencia de un coeficiente distinto de cero relevante en el bloque. Si el CBF es 0, no hay coeficiente distinto de cero relevante; de lo contrario, hay al menos un coeficiente distinto de cero relevante. El indicador EOB se usa para indicar si el coeficiente distinto de cero relevante que acaba de ser codificado es el último coeficiente distinto de cero relevante en el orden de escaneado.
Una diferencia entre la codificación de la capa base y la codificación de la capa de mejora por el codificador de vídeo 20 está en la separación de los coeficientes de mejora del resto de coeficientes de la capa de FGS y el orden de codificación. En algunos aspectos, el codificador de vídeo 20 puede incluir módulos de codificación de la capa base y de codificación de las capas de mejora separados. En la capa base, un bloque es codificado por completo antes de codificar el siguiente bloque, los que proporciona una codificación basada en bloques. Sin embargo, para la codificación de la capa de mejora, los coeficientes de diferentes bloques están intercalados entre sí en ciclos, lo que proporciona una codificación basada en ciclos. En cada ciclo, según lo tratado anteriormente, sólo se codifican algunos coeficientes de un bloque dado. De nuevo, de este modo, el codificador de vídeo 20 garantiza que la mejora de la calidad de vídeo sea más uniforme espacialmente por un fotograma una vez truncado el flujo de bits.
La FIG. 4 es un diagrama que ilustra un ejemplo de codificación basada en ciclos de coeficientes y elementos sintácticos de un segmento de FGS para los bloques de vídeo 46A–46C dispuestos en un orden de escaneado en zigzag. En algunos aspectos de esta revelación, el segmento de FGS puede ser un segmento de PR, aunque las técnicas descritas en esta revelación no se limitan a segmentos de PR. La FIG. 5 es un diagrama que ilustra la codificación basada en ciclos de coeficientes y elementos sintácticos de un segmento de FGS para bloques de vídeo dispuestos por orden de transmisión. La FIG. 5 representa una redistribución de la FIG. 4, de modo que los elementos sintácticos y los coeficientes codificados en un ciclo están dispuestos en la misma línea. Cada coeficiente está representado en las FIG. 4 y 5 por un recuadro. En el ejemplo de las FIG. 4 y 5, como máximo hay codificado un coeficiente distinto de cero para un bloque dado en un solo ciclo, y el índice del ciclo es el mismo que el índice del escaneado en zig–zag. En diferentes implementaciones de la FGS, puede que no sea necesario que un coeficiente distinto de cero tenga que estar codificado en un ciclo. Además, los coeficientes de mejora se pueden tratar del mismo modo que los coeficientes relevantes.
Como se muestra en la FIG.4, para el ciclo 0, se envía una vez un CBF (CBF0, CBF1, CBF2) por cada bloque 46A, 46B, 46B, e indica que hay un coeficiente distinto de cero relevante en el bloque. Por ejemplo, CBF0/1 corresponde al primer bloque 0 e indica que hay un coeficiente distinto de cero relevante en el bloque. Además, se envían un coeficiente igual a cero “0” y un coeficiente distinto de cero “S0, 1” del bloque 0, que corresponde a un coeficiente distinto de cero relevante del bloque “0” a un índice de escaneado en zig–zag “1”, en el ciclo 0. Sin embargo, CBF1/0 corresponde al segundo bloque (bloque 1) e indica que no hay coeficientes distintos de cero relevantes en el bloque. Por consiguiente, no hay coeficientes enviados para el bloque 1 en los ciclos posteriores. El ciclo 0 incluye además CBF2/1, que indica que el bloque 2 incluye un coeficiente distinto de cero relevante S2,0 y el propio coeficiente S2,0
El ciclo 1 incluye un indicador EOB (EOB2/0) para el bloque 2 que indica que el coeficiente distinto de cero relevante que acaba de ser codificado en el ciclo 0, que es el S2,0, no es el último coeficiente distinto de cero relevante en el orden de escaneado. En el resto de ciclos, la codificación de bloques prosigue siguiendo el orden de escaneado en zig–zag e incluye elementos sintácticos tales como CBF y EOB, según proceda. El procedimiento continúa para los ciclos 2–15 en el orden de escaneado en zig–zag, en el que cada ciclo corresponde a una flecha de transición en la FIG. 4. Los ejemplos de las FIG. 3, 4 y 5 pertenecen a los tres primeros bloques de 4 x 4 de una capa de mejora de un fotograma a efectos ilustrativos. Sin embargo, el esquema general ilustrado en las FIG. 4–6 se puede aplicar a bloques de mayores tamaños, así como a mayores números de bloques que abarcan un fotograma o una parte de un fotograma.
La complejidad de la codificación y la descodificación de un segmento de FGS puede ser elevada en términos de requisitos programación y memoria. Además, el procedimiento de descodificación para un segmento de FGS, según lo especificado en el borrador JD, puede ser complejo. Por ejemplo, la codificación FGS de un segmento de FGS puede requerir una gran cantidad de memoria para almacenar información del estado de codificación intermedio, tal como la posición del último coeficiente codificado en cada bloque en un ciclo de codificación anterior. Además, la codificación FGS puede requerir una gran cantidad de accesos a memoria, pues el codificador de vídeo 20 con frecuencia cruza bloques durante el procedimiento de codificación basado en ciclos. El almacenamiento de los coeficientes en sub–bandas puede ser eficiente. En este caso, los coeficientes de la misma banda de frecuencia se pueden almacenar contiguos entre sí. Sin embargo, el almacenamiento de los coeficientes en sub–bandas puede ser incompatible con la transformación de los bloques, que puede acceder a coeficientes de diferentes frecuencias.
Si se pudiera acceder directamente a los flujos de bits de diferentes ciclos, se podría descodificar un bloque por completo y posteriormente procesarlo de una manera similar al procesamiento basado en bloques en la capa base. Por consiguiente, la capacidad de acceder fácilmente a los flujos de bits de diferentes ciclos podría ser útil para reducir la complejidad de los procedimientos de codificación de segmentos de FGS. Según un aspecto ejemplar de esta revelación, el codificador de vídeo 20 puede estar configurado para realizar una codificación basada en ciclos de los coeficientes de los bloques de datos de vídeo de FGS y encapsular los ciclos de codificación resultantes en fragmentos para la transmisión a través de unidades de transmisión de red, tales como las unidades de la capa de abstracción de red (NAL). Para permitir el fácil acceso a los flujos de bits de diferentes ciclos, los fragmentos pueden ser alineados con ciclos, de modo que un inicio de cada uno de los fragmentos coincida sustancialmente con un inicio de uno de los ciclos. De este modo, se puede acceder fácilmente a los flujos de bits asociados a ciclos de codificación individuales a través de los fragmentos.
El borrador conjunto de la ampliación de la SVC al estándar H.264/MPEG–4 AVC define una unidad de datos denominada “fragmento” que contiene una capa de FGS parcial. Los fragmentos se pueden usar como un modo de encapsular un flujo de FGS desechable. En cuanto a la codificación, por ejemplo, el codificador de vídeo 20 acogerse a un procedimiento de codificación FGS normal para generar el flujo de bits de una capa de FGS. Una vez generado el flujo de bits de la capa de FGS, el codificador de vídeo 20 puede aplicar la fragmentación del flujo de bits. En cuanto a la descodificación, el descodificador 22 concatena fragmentos adyacentes y descodifica el flujo de bits fusionado como si el flujo de bits no estuviera fragmentado. Por consiguiente, el procesamiento de un fragmento habitualmente requiere la finalización del procesamiento de un fragmento anterior. En otras palabras, los fragmentos normales no se pueden descodificar simultáneamente. En cambio, deben estar concatenados antes de la descodificación.
Según esta revelación, se pueden modificar y aprovechar los fragmentos para proporcionar un acceso directo a partes del flujo de bits asociado a determinados ciclos de codificación de FGS. En concreto, en lugar de encapsular arbitrariamente el flujo de bits codificado en una serie de fragmentos, el codificador de vídeo 20 controla la fragmentación de modo que los fragmentos sean alineados con los ciclos de codificación de FGS. La alineación, en general, puede hacer referencia a la formulación del fragmento de modo que un inicio del fragmento coincida sustancialmente con un inicio de uno de los ciclos. De este modo, es posible acceder al inicio de un flujo de bits asociado a un ciclo identificando el inicio del fragmento. Un fragmento puede incluir una cabecera que preceda a una carga útil del fragmento. La cabecera puede llevar información administrativa, tal como información que identifique a un fragmento. La carga útil del fragmento puede referirse, en general, a una parte del contenido del fragmento que puede llevar datos de los ciclos de codificación, y puede estar precedida por la información de la cabecera. Según diversos aspectos de esta revelación, los ciclos pueden estar encapsulados en una pluralidad de fragmentos, de modo que un inicio de cada uno de los fragmentos coincida sustancialmente con un inicio de uno de los ciclos. Por consiguiente, la coincidencia sustancial puede referirse a la encapsulación, de modo que un inicio de una carga útil de cada uno de los fragmentos, p. ej., la que sigue a la información de la cabecera, coincida sustancialmente con un inicio de uno de los ciclos. En general, con respecto o no a la información de la cabecera, el inicio de cada fragmento puede estar sustancialmente alineado con el inicio de un ciclo, de modo que se pueda acceder fácilmente a los ciclos de codificación a través de los respectivos fragmentos, lo que permite la descodificación simultánea de al menos porciones de al menos algunos fragmentos.
Un fragmento alineado con un ciclo (CAF) difiere de un fragmento normal en que el inicio del fragmento puede corresponder a cualquier punto desconocido del flujo de bits. En cambio, el CAF está alineado con el ciclo de modo que es posible acceder sustancialmente al inicio del flujo de bits en el inicio del fragmento. Además, en algunos aspectos, el codificador de vídeo 20 puede controlar la fragmentación de modo que cada ciclo esté contenido en un solo fragmento, posiblemente con otros ciclos, en lugar de extenderse por porciones de fragmentos sucesivos. La generación de los CAF puede reducir la complejidad del procesamiento y permitir el procesamiento en paralelo de fragmentos sucesivos en lugar de un procesamiento secuencial de fragmentos sucesivos.
Para hacer posible la descodificación de un fragmento alineado con un ciclo (CAF) sin esperar a la finalización de la descodificación de un fragmento anterior, el codificador de vídeo 20 puede codificar cada CAF sin usar la información que sólo está disponible una vez descodificado el fragmento anterior. Por ejemplo, una vez terminado un primer fragmento, el descodificador de vídeo 20 puede descargar el codificador entrópico usado para codificar por entropía el fragmento. Además, el codificador de vídeo 20 puede reiniciar contextos de codificación asociados a la codificación entrópica antes de que el siguiente fragmento sea codificado. Mediante el reinicio de los contextos de codificación y la descarga del descodificador entrópico, el codificador de vídeo 20 genera los CAF a los que se puede acceder fácilmente y se pueden descodificar sin esperar a la descodificación de otros fragmentos, lo que permite el procesamiento simultáneo en paralelo de los CAF. Por ejemplo, la descodificación puede ser simultánea en el sentido de que la descodificación de un CAF se puede realizar a la vez que la descodificación de al menos una parte de otro CAF. De este modo, un CAF puede ser descodificable sin esperar a la finalización de la descodificación de un fragmento anterior. Esto difiere de los fragmentos normales, que habitualmente tendrían que ser reensamblados antes de la descodificación.
El codificador de vídeo 20 puede implementar la codificación entrópica como una codificación adaptable al contexto de longitud variable (CAVLC) o una codificación aritmética binaria adaptable al contexto (CABAC). En comparación con un fragmento normal, un CAF puede presentar algo de cabecera debido a la operación de descarga y reinicio de los contextos de codificación asociados a la codificación entrópica. La CAVLC sólo se ve afectada por la operación de descarga, lo que puede dar como resultado aproximadamente medio byte más de cabecera como media. Para la CABAC, los CAF presentan una penalización adicional debida a un reinicio de los contextos de codificación. La cabecera necesaria para los encabezamientos adicionales de las NAL y los encabezamientos del fragmento es generalmente la misma para los fragmentos normales y los CAF.
Si todos los ciclos están codificados como CAF, el tamaño del fragmento puede disminuir rápidamente al aumentar el índice del ciclo, porque la longitud de cada ciclo tiende a disminuir. Por esta razón, puede ser deseable agrupar algunos ciclos para reducir la cabecera total. En concreto, si se agrupan algunos ciclos, la cabecera asociada al fragmento puede ser compartida por los ciclos. Si los ciclos no están agrupados, numerosos ciclos serían portados en sus propios fragmentos, creando una cabecera de fragmento por cada ciclo. En efecto, el agrupamiento de ciclos en un fragmento común se puede realizar, por ejemplo, usando un modo vectorial, p. ej., como el introducido recientemente en el borrador conjunto 6 (JD6) por el JVT.
En el JD6, se introdujo un modo vectorial para reducir la complejidad del codificador de FGS. En el modo vectorial, el codificador de FGS procesará un bloque en un ciclo dado hasta que llega a una posición de escaneado preprogramada antes de pasar al siguiente bloque. En otras palabras, en lugar de pasar al siguiente bloque tras codificar el primer coeficiente relevante, un ciclo continuará en un bloque hasta el punto en el que se alcance la posición de escaneado preprogramada. Con el modo vectorial, se aumenta la profundidad de escaneado de un ciclo dado dentro del bloque. Por consiguiente, se puede reducir el número medio de veces que un codificador de FGS escanea un bloque. El modo vectorial puede definir una longitud vectorial que determine el número de coeficientes que se vayan a escanear en un ciclo dado. Si la longitud vectorial es 1, el modo vectorial no tiene efecto y el codificador de FGS funciona con normalidad. Si la longitud vectorial es igual al número de coeficientes de un bloque, el codificador de FGS se degenera en un codificador basado en bloques normal.
El modo vectorial no cambia el hecho de que el codificador de FGS visite un bloque múltiples veces. Sin embargo, puede reducir la complejidad de la codificación basada en ciclos hasta un cierto punto reduciendo el número de veces que el codificador de FGS visita un bloque y reduciendo el número de ciclos de codificación. Cuando se usa con fragmentos alineados con ciclos, se puede usar un modo vectorial modificado para generar fragmentos de tamaños similares, reduciendo así la cabecera de la fragmentación. En lugar de numerosos fragmentos con tamaños de ciclo muy pequeños, se puede usar el modo vectorial para reducir el número de ciclos y aumentar la profundidad de cada ciclo, de modo que se reduzca el número de fragmentos necesario para alojar a los ciclos. Con un número reducido de fragmentos, existe un número reducido de ejemplos de cabecera de los fragmentos, lo que resulta en una mayor eficacia.
En el modo vectorial descrito en el JD6, las longitudes vectoriales se definen en un conjunto de parámetros secuenciales. En un modo vectorial modificado, como el descrito en esta revelación, las longitudes vectoriales se pueden especificar en una cabecera de segmento en lugar de en el conjunto de parámetros secuenciales. Con el uso de longitudes vectoriales, el codificador de vídeo 22 aumenta la profundidad de escaneado de los ciclos individuales para codificar más coeficientes en un ciclo dado, dando como resultado un número reducido de fragmentos. Como ejemplo, las longitudes vectoriales específicas se pueden fijar o ajustar dinámicamente en base al contenido, a las condiciones del canal, a la carga de procesamiento o a otros factores. Las longitudes vectoriales pueden ser las mismas para todos los ciclos, diferentes para ciclos seleccionados o cambiar progresivamente del primer ciclo al último ciclo.
La FIG. 6 es un diagrama que ilustra la encapsulación de ciclos en fragmentos normales para la transmisión a través de unidades de la capa de abstracción de red (NAL). Como se muestra en la FIG. 6, el flujo de bits llevado por los ciclos sucesivos 50A–50C se divide entre los fragmentos sucesivos 52A–52C independientemente de los límites de los ciclos. Como resultado de ello, cada fragmento 52 dado contiene una parte del flujo de bits asociado a uno o más ciclos 50 y no señala el inicio del flujo de bits de un ciclo dado. Más bien, diferentes porciones de un ciclo dado 50 pueden estar distribuidas más allá de los límites 56A–56C de fragmentos sucesivos
52. Además, cada fragmento 52 puede comenzar en un punto desconocido, generalmente arbitrario, del flujo de bits de un ciclo 50, de modo que no se pueda acceder directamente a esos ciclos a través de un fragmento.
Con el flujo de bits de un ciclo 50 que abarque fragmentos sucesivos 52, es necesario procesar fragmentos sucesivos de un modo dependiente. En concreto, las porciones arbitrarias del flujo de bits llevado por los fragmentos sucesivos 52 son concatenadas por el descodificador de vídeo 22 para reproducir el flujo de bits de los ciclos. Si el primer y segundo fragmento 52A y 52B lleva porciones del CICLO 1 (50A), por ejemplo, ambos fragmentos son procesados y concatenados para reproducir el flujo de bits del Ciclo 1. Para admitir la concatenación, el fragmento 52A (FRAG 1) debe ser descodificado y procesado (54A) antes de que el siguiente fragmento 52B (FRAG 2) pueda ser descodificado o procesado.
Por consiguiente, un fragmento normal 52B no puede ser descodificado y procesado simultáneamente. Además, un fragmento 52B posterior dependerá normalmente de la codificación entrópica de fragmentos 52A anteriores. Por consiguiente, el fragmento 52B debe esperar a la finalización de la descodificación y del procesamiento del fragmento anterior 52A. Por lo tanto, la disposición de las operaciones de procesamiento 54A, 54B, 54C en la FIG. 6 representa la descodificación y el procesamiento dependientes secuenciales de fragmentos 52 posteriores basados en el procesamiento completo de los fragmentos anteriores. El procesamiento secuencial de los fragmentos 52, como se muestra en el ejemplo de la FIG. 6, puede presentar una complejidad computacional considerable en términos de los requisitos de programación y memoria.
La FIG. 7 es un diagrama que ilustra la encapsulación de ciclos en fragmentos alineados con ciclos (CAF), según un aspecto de esta revelación, para la transmisión a través de unidades de la capa de abstracción de red (NAL). En el ejemplo de la FIG. 7, el codificador de vídeo 20 controla la fragmentación de modo que cada fragmento es un fragmento alineado con un ciclo 58A–58C que comienza con el inicio de un ciclo 50A–50E. Además, como una opción, los ciclos 50 del ejemplo de la FIG. 7 se pueden formular usando un modo vectorial, de modo que las longitudes de al menos alguno de los ciclos son ampliadas, reduciendo el número total de fragmentos y la cabecera asociada, necesarios para llevar los ciclos.
En general, cada CAF 58 lleva un ciclo 50 que comienza sustancialmente en el inicio del CAF. Por ejemplo, el codificador de vídeo 20 puede encapsular los ciclos en una pluralidad de CAF 58, de modo que un inicio de cada uno de los fragmentos, p. ej., un inicio de una carga útil de cada uno de los fragmentos, coincida sustancialmente con un inicio de uno de los ciclos. En algunos casos, el inicio de la carga útil puede estar precedido por un encabezamiento que ocupe espacio dentro del fragmento 58. Alineando sustancialmente el inicio de un ciclo 50 con el inicio de un fragmento 58, se puede determinar fácilmente el inicio del flujo de bits asociado a un ciclo 50, lo que permite el acceso a los ciclos individuales. Debido a que cada CAF 58 lleva un ciclo 50 al que se puede acceder directamente, no es necesario, para la concatenación de fragmentos sucesivos, reproducir el flujo de bits asociado a un ciclo 50. En cambio, el descodificador de vídeo 22 puede estar configurado para descodificar y procesar simultáneamente fragmentos 58, p. ej., en paralelo, según lo representado por las operaciones de procesamiento 62A–62C. De nuevo, es posible descodificar y procesar a la vez un fragmento 58 en paralelo con al menos una parte de la descodificación y el procesamiento de uno o más fragmentos distintos. Sin embargo, algunos fragmentos 58 pueden seguir siendo descodificados y procesados consecutivamente.
Para crear un CAF descodificable sin esperar a terminar el fragmento anterior, el codificador de vídeo 20 puede codificar el CAF sin usar la información que sólo está disponible una vez descodificado el fragmento anterior. Por consiguiente, además de alinear el inicio del ciclo con el inicio del fragmento, el codificador de vídeo 20 puede reiniciar contextos de codificación asociados a la codificación entrópica entre fragmentos codificados sucesivamente. En concreto, una vez terminada la codificación entrópica de un primer fragmento, el codificador de vídeo 20 descarga el codificador antrópico de CAVLC o CABAC y reinicia los contextos de codificación. De este modo, el fragmento alineado con un ciclo no depende de ninguna información de codificación procedente de un fragmento codificado anteriormente, y puede ser descodificado y procesado en paralelo con otros fragmentos.
La FIG. 8 es un diagrama de bloques que ilustra un codificador de segmentos de FGS 64 que encapsula ciclos en fragmentos alineados con ciclos. El codificador de segmentos de FGS 64 puede formar parte de un codificador de vídeo digital, tal como el codificador de vídeo 20 de la FIG. 1. Como se muestra en la FIG. 8, el codificador de segmentos de FGS 64 puede incluir un módulo de transformación 66, un módulo de cuantificación 68, un módulo de codificación basada en ciclos 70, un módulo de fragmentación alineada con ciclos 72 y un módulo de codificación entrópica 74. El módulo de transformación 66 aplica una transformación espacial al residuo de vídeo de origen del segmento de FGS producido por el codificador de vídeo 22 para producir bloques de coeficientes de transformación. El módulo de cuantificación 68 cuantifica los coeficientes de transformación resultantes. El módulo de codificación basada en ciclos 70 escanea los bloques de coeficientes de transformación para producir ciclos de codificación, p. ej., de un manera similar a la ilustrada en las FIG. 3–5.
A lo largo de esta revelación, la representación de las diferentes características como módulos, bloques o componentes pretende destacar diferentes aspectos funcionales del codificador de vídeo 20 o del descodificador de vídeo 22, y no implica necesariamente que tales módulos deban ser realizados mediante componentes de soporte físico y/o soporte lógico separados. Más bien, la funcionalidad asociada a uno o más módulos, tales como el módulo de transformación 66, el módulo de cuantificación 68, el módulo de codificación basada en ciclos 70, el módulo de fragmentación alineada con ciclos 72 y el módulo de codificación entrópica 74, puede estar integrada en componentes de soporte físico y/o soporte lógico comunes o separados. En algunos casos, tales características pueden ser realizadas mediante un soporte lógico o módulos de soporte lógico comunes o separados, que incluyen el código configurado para hacer que un ordenador ejecute las funciones atribuidas a tales características.
El módulo de fragmentación alineada con ciclos 72 corta el flujo de bits asociado a los ciclos de codificación en fragmentos. Cada fragmento encapsula un ciclo, de modo que el inicio del flujo de bits del ciclo coincida sustancialmente con el inicio de la carga útil llevada por el fragmento. El módulo de fragmentación alineada con ciclos 72 se puede configurar para que analice el flujo de bits y detecte los límites de los ciclos para producir la fragmentación alineada con los ciclos. El módulo de codificación entrópica 74 aplica una codificación entrópica, tal como una codificación CAVLC o CABAC, a cada uno de los fragmentos producidos por el módulo de fragmentación alineada con ciclos 72. Particularmente, para eliminar la interdependencia entre fragmentos sucesivos, el módulo de codificación entrópica 74 puede descargar sus datos estadísticos anteriores y reiniciar sus contextos de codificación una vez que cada fragmento haya sido codificado por entropía. De este modo, al menos algunos de los fragmentos sucesivos pueden ser descodificados y procesados simultáneamente. Los fragmentos codificados por entropía se pueden colocar en unidades de transmisión de red, tales como las unidades de la capa de abstracción de red (NAL), para la transmisión desde el dispositivo de origen 12 al dispositivo de destino 14.
La FIG. 9 es un diagrama de bloques que ilustra un descodificador de segmentos de FGS 75 que descodifica los ciclos encapsulados en fragmentos alineados con ciclos (CAF). El descodificador de segmentos de FGS 75 puede formar parte de un descodificador de vídeo, tal como el descodificador de vídeo 22 de la FIG. 1. Como se muestra en la FIG. 9, el descodificador de segmentos de FGS 75 puede incluir un módulo de descodificación entrópica 76, un módulo de desfragmentación alineada con ciclos 80, un módulo de descodificación basada en ciclos 80, un módulo de cuantificación inversa 82 y un módulo de transformación inversa 84. El módulo de descodificación entrópica 76 aplica la descodificación entrópica a los fragmentos de vídeo codificados. Particularmente, los fragmentos CAF de vídeo codificados se pueden descodificar por entropía en paralelo, porque los CAF no se codifican usando los mismos contextos de codificación que en otros CAF, y cada CAF proporciona un acceso directo al flujo de bits de un determinado ciclo.
El módulo de desfragmentación alineada con ciclos 78 procesa los fragmentos descodificados por entropía para generar el flujo de bits de vídeo codificado. El módulo de descodificación basada en ciclos 80 escanea el flujo de bits de vídeo para producir coeficientes de transformación cuantificados. El módulo de cuantificación inversa 82 descuantifica los coeficientes de transformación. El módulo de transformación inversa 84 aplica una transformación inversa a los coeficientes de transformación descuantificados para reproducir el residuo. Con los CAF, es posible simplificar el procedimiento de descodificación de los segmentos de FGS para que sea muy similar al de una capa diferenciada. Como ejemplo, en algunos aspectos, los segmentos de FGS pueden ser segmentos de PR. Los CAF también pueden simplificar significativamente la especificación de la sintaxis del segmento de FGS, según lo descrito en esta revelación.
La FIG. 10 es un diagrama de flujo que ilustra la encapsulación de ciclos en fragmentos alineados con ciclos (CAF) según lo descrito en esta revelación. La generación de los CAF se puede realizar en un codificador de segmentos de FGS asociado al codificador de vídeo 20, tal como el codificador de segmentos de FGS 64 de la FIG. 8. En algunos aspectos, el codificador de segmentos de FGS 64 puede ser un codificador de segmentos de PR. Como se muestra en la FIG. 10, el codificador de segmentos de FGS 64 codifica bloques de datos de vídeo de FGS en ciclos (86), encapsula los ciclos en fragmentos alineados con ciclos (88) y codifica por entropía los fragmentos (90). Según lo descrito en esta revelación, los fragmentos están alineados con ciclos en el sentido de que el inicio del flujo de bits asociado a un ciclo coincide sustancialmente con el inicio de la carga útil del fragmento pertinente usado para encapsular el ciclo.
La FIG. 11 es un diagrama de flujo que ilustra la encapsulación de ciclos en fragmentos alineados con ciclos más detalladamente. De nuevo, la generación de los CAF se puede realizar en un codificador de segmentos de FGS asociado al codificador de vídeo 20, tal como el codificador de segmentos de FGS 64 de la FIG. 8. Como se muestra en la FIG. 11, el codificador de segmentos de FGS 64 obtiene coeficientes de transformación para los bloques de vídeo residuales (92) y escanea en zig–zag los coeficientes de transformación de un ciclo a través de los bloques (94). El codificador de segmentos de FGS 64 genera un fragmento, alinea el inicio de la carga útil del fragmento con el inicio del ciclo (96) y coloca el ciclo en el fragmento (98). El codificador de segmentos de FGS 64 codifica por entropía el fragmento (100) y luego descarga los datos estadísticos del codificador entrópico y reinicia los contextos de codificación (102) asociados a la codificación entrópica una vez codificado por entropía el fragmento. De este modo, el siguiente fragmento que se vaya a codificar por entropía no requiere ninguna información que sólo esté disponible una vez completada la descodificación de un fragmento anterior. Por consiguiente, se pueden descodificar múltiples fragmentos simultáneamente en paralelo mediante el descodificador de segmentos de FGS 75, de modo que la descodificación de al menos partes de los mismos fragmentos sea al menos parcialmente a la vez que la descodificación de al menos partes de uno o más fragmentos distintos.
Si hay más ciclos por codificar (104), el codificador de segmentos de FGS 64 sigue escaneando los coeficientes a través de los bloques residuales (94) y repite las operaciones 96, 98, 100 y 102. Si se termina la codificación basada en ciclos, el codificador de segmentos de FGS 64 obtiene coeficientes de transformación para más bloques residuales, p. ej., de otra parte de un fotograma o de un fotograma posterior, y repite las operaciones 96, 98, 100 y 102. A lo largo del procedimiento, el codificador de segmentos de FGS 64 genera CAF, de modo que los fragmentos se pueden procesar simultáneamente y es posible acceder directamente al flujo de bits asociado a los ciclos de los fragmentos. La generación de CAF puede dar como resultado un procesamiento simplificado, y una menor cabecera de programación y memoria.
La FIG. 12 es un diagrama de flujo que ilustra la descodificación de ciclos en fragmentos alineados con ciclos (CAF). La descodificación de ciclos en CAF se puede realizar en un descodificador de segmentos de FGS asociado al codificador de vídeo 22, tal como el codificador de segmentos de FGS 75 de la FIG. 9. En el ejemplo de la FIG. 12, el descodificador de segmentos de FGS 75 recibe los CAF (106) con el vídeo entrante transmitido por el canal 16. El descodificador de segmentos de FGS 106 descodifica por entropía los CAF (108) y descodifica simultáneamente al menos partes de al menos alguno de los CAF (110), i.e., sin la información que sólo está disponible una vez finalizada la descodificación de otros CAF. De este modo, el descodificador de segmentos de FGS 75 descodifica y procesa los CAF en paralelo. Por consiguiente, se pueden procesar y descodificar simultáneamente múltiples CAF en paralelo en lugar de hacerlo consecutivamente. Puede que algunos CAF sean completamente independientes entre sí. En otros casos, la descodificación de la información para un bloque en un CAF posterior puede depender de la descodificación de un CAF anterior para el mismo bloque. Sin embargo, en este caso, se pueden mantener independientes otros contextos de codificación para los CAF, de modo que la descodificación de un CAF posterior sea la misma si un CAF anterior ya ha sido descodificado o si el CAF anterior es descodificado simultáneamente con el CAF posterior.
La FIG. 13 es un diagrama de flujo que ilustra la descodificación de ciclos en CAF más detalladamente. Como se muestra en la FIG. 13, el descodificador de segmentos de FGS 106 puede obtener un CAF (112) y descodificar por entropía el CAF (114). El descodificador de segmentos de FGS 75 puede acceder directamente al flujo de bits asociado al ciclo llevado por el CAF (116) y descodificar el flujo de bits del ciclo (118) para generar los correspondientes datos de vídeo residuales. Si hay más CAF disponibles (120), el descodificador de segmentos de FGS 75 obtiene el siguiente CAF (112) y repite las operaciones de la FIG. 13, i.e., las operaciones 114, 116 y 118.
La FIG. 14 es un diagrama que ilustra los efectos del error de paquetes para los fragmentos normales y los fragmentos alineados con ciclos (CAF). El uso de CAF, según esta revelación, puede mejorar significativamente la resiliencia a los errores de la capa de FGS, además de simplificar el procesamiento, y reducir los requisitos de programación y memoria. La FIG. 14 muestra una serie de fragmentos normales (FRAG 0, FRAG 1, FRAG 2) y una serie de CAF (CAF 0, CAF 1, CAF 2). Cuando está corrupto parte de un primer fragmento normal FRAG 0, como se indica por la X, la corrupción inutiliza por completo los fragmentos posteriores FRAG 1 y FRAG 2. En otras palabras, cualquier cantidad de corrupción del FRAG 0 codificado anteriormente puede dar como resultado la corrupción total del FRAG 1 y FRAG 2 codificados posteriormente. Para los fragmentos normales, el FRAG 0 anterior y los fragmentos posteriores FRAG 1 y FRAG 2 se generan, en realidad, a partir de la misma pasada de codificación. Por consiguiente, el error del final del FRAG 0 normal corrompe toda la información del FRAG 1 y FRAG 2, porque dependen del FRAG 0 a efectos de la codificación entrópica y pueden contener diferentes partes de un flujo de bits de un ciclo común.
Por el contrario, para los CAF, la corrupción de un fragmento no corromperá totalmente otros fragmentos. Si hay un error al final del CAF 0, por ejemplo, el error sólo afectará a las partes correspondientes del CAF1 y el CAF 2. Los CAF pueden ser codificados simultáneamente y llevar flujos de bits para ciclos de codificación separados. Por consiguiente, ninguno de los CAF necesita información de otro CAF para la descodificación entrópica. Además, la pérdida de información en el final de un ciclo de codificación, p. ej., para un determinado bloque de coeficientes de transformación, sólo afectará a la información de escaneado posterior para ese bloque. Por consiguiente, los flujos de bits asociados a los escaneados posteriores de un conjunto de bloques, distintos de los bloques corruptos, permanecerán intactos, pudiendo ser accedidos directamente y descodificados correctamente; por consiguiente, el uso de los CAF según lo descrito en esta revelación puede promover la resiliencia a errores en el vídeo codificado.
Pueden ser deseables y necesarias otras modificaciones para el esquema de codificación FGS concreto explicado anteriormente para que admita CAF. Por ejemplo, según el JD6, se usa una variable “chromaStartCycle” para retrasar la transmisión de los coeficientes croma con respecto a la transmisión de los coeficientes luma. En la implementación actual del JSVM, el valor de chromaStartCycle se calcula en base a los datos estadísticos recogidos de un primer ciclo de codificación. Entonces, el codificador de segmentos de FGS envía el valor chromaStartCycle resultante del final del primer ciclo de codificación. Si se descodifican simultáneamente múltiples CAF, puede ser deseable enviar el valor chromaStartCycle del encabezamiento del segmento del primer fragmento. Por consiguiente, el codificador de vídeo 22 puede estar además configurado para enviar el valor chromaStartCycle del encabezamiento del segmento del primer fragmento.
Otra posible modificación también se refiere a la transmisión de coeficientes croma. En el JSVM original, es posible que el último ciclo de codificación AC de croma no se solape con el último ciclo de codificación de luma. Por esta razón, el codificador de vídeo 22 puede estar configurado para imponer una limitación, de manera que los coeficientes croma no sean transmitidos después de los coeficientes luma. De esta manera, el codificador de vídeo 22 puede garantizar que el último ciclo de codificación AC se solape con el último ciclo de codificación de luma.
Como otra mejora, es posible ajustar la codificación entrópica en el codificador de vídeo
22. Se puede usar un esquema de codificación VLC basada en el contexto para la codificación entrópica en la generación del flujo de bits de FGS. Para desacoplar los CAF lo más posible, se puede usar un índice de escaneado actual para recuperar los parámetros VLC. La primera repetición puede ser una excepción, pues no hay un símbolo correspondiente a EOB como en otras repeticiones de codificación. Si los coeficientes de mejora son codificados por separado a partir del coeficiente relevante y hay algunos coeficientes de mejora en la primera y en varias primeras posiciones de escaneado, la ejecución del primer cero puede comenzar con una posición de escaneado distinta de cero.
Se pueden usar diferentes enfoques para manejar esta situación. Según un primer enfoque, se puede asignar un bin separado en el codificador de vídeo 22 para que siempre se encargue de la primera repetición para un bloque. Según un segundo enfoque, el codificador de vídeo 22 puede usar un índice de escaneado para recuperar los parámetros VLC, pero aprovechar el conocimiento de que la primera repetición no tiene EOB, de manera que el conjunto de símbolos no tenga un EOB insertado. Según un tercer enfoque, el indicador de bloque codificado (CBF) de la primera repetición puede ser tratado como un EOB por el codificador de vídeo 22. Si el CBF es 1, el EOB de valor 0 es enviado para la primera repetición. De lo contrario, se envía un EOB de valor 1 para la primera repetición. Con el uso de este tercer enfoque, puede existir poca diferencia entre la primera repetición y otras repeticiones.
Se pueden proporcionar otras técnicas para mejorar el rendimiento de la codificación FGS. Como se explica anteriormente, puede ser deseable codificar el CBF antes de que cualquier coeficiente relevante sea codificado, porque el CBF indica si hay algún coeficiente relevante en el bloque pertinente. En algunos casos, el bloque puede tener algunos coeficientes de mejora importantes. Por ejemplo, si justo el primer coeficiente es un coeficiente de mejora y los coeficientes de mejora son codificados por separado a partir de los coeficientes relevantes, el CBF para el bloque puede ser enviado una vez enviado el primer coeficiente de mejora. Como resultado de ello, el CBF puede no ser siempre codificado en el primer ciclo de codificación. Si el CBF no es codificado, la implementación del CAF con un codificador entrópico CABAC puede crear algunos problemas. En la codificación entrópica CABAC, el CBF es codificado en el contexto basado en el valor de los CBF de los bloques vecinos. Además, se usan diferentes contextos para la codificación de los CBF de diferentes tipos de bloques, tales como un bloque de luma 4 x 4, un bloque AC de croma, un bloque DC de croma y similares. En un sistema de codificación FGS de baja complejidad, como el descrito en esta revelación, todos los indicadores de bloque codificado de un fragmento alineado con un ciclo pueden ser codificados por el codificador de vídeo 22 en un solo contexto adicional si son codificados después de algunos coeficientes de mejora en el mismo bloque.
Como ejemplo, se supone que hay un coeficiente de mejora en un bloque y que el coeficiente de mejora está en la primera posición de escaneado. Además, se supone que también hay algunos coeficientes relevantes adicionales en el bloque. En este caso, el codificador de vídeo 22 puede estar configurado para codificar el coeficiente de mejora primero, siguiendo con la codificación del CBF del bloque. El CBF puede ser codificado en el contexto recién definido. Entonces, se codifican los coeficientes relevantes en el bloque.
Otro problema que puede surgir en una implementación basada en CABAC de los CAF también se refiere a la definición del contexto. La codificación entrópica CABAC codifica los indicadores de relevancia y los últimos indicadores de relevancia usando el contexto definido en base a la posición de escaneado. Con la implementación simplificada de los CAF, puede ser deseable mantener conjuntos contextuales similares por separado para cada fragmento en el codificador de vídeo 22. El mantenimiento de diferentes conjuntos contextuales separados puede incurrir en un mayor coste de la implementación. Sin embargo, si se usan más contextos de codificación para la codificación de la misma cantidad de coeficientes que cuando no hay un fragmento alineado con un ciclo, puede haber un problema con la dilución contextual que da como resultado un rendimiento de codificación menor. En el codificador de segmentos de FGS del codificador de vídeo 22, se pueden agrupar los contextos de codificación para múltiples indicadores de relevancia.
Por ejemplo, si la posición de escaneado inicial del ciclo es 3 y la longitud del vector es 3 para un fragmento, se usan los contextos de codificación de relevancia originales para las posiciones de escaneado 3, 4 y 5. Más allá de la posición de escaneado 5, los contextos de codificación para los indicadores de relevancia se pueden agrupar de diversos modos. Un ejemplo es fijar un umbral C ≥ 6. Si la posición de escaneado está antes o en C, se puede usar un contexto separado para la codificación del indicador de relevancia. Entonces todos los indicadores de relevancia correspondientes a las posiciones de escaneado posteriores a C pueden ser codificados en un solo contexto. Se puede usar un procedimiento similar para definir el contexto de codificación adicional para la codificación del último indicador de coeficiente de relevancia. En otro ejemplo, el escaneado puede estar limitado dentro del especificado por la longitud del vector, en lugar de la posición de los siguientes coeficientes distintos de cero.
A continuación, en la Tabla 1, se expone un ejemplo de las modificaciones sintácticas que se pueden implementar para admitir CAF según algunos aspectos de esta revelación. Las modificaciones sintácticas se pueden hacer con respecto a la sintaxis aplicable expuesta en el borrador conjunto 6 (JD6) de la ampliación de la SVC del estándar H.264/MPEG–4 AVC, o a la sintaxis presentada de otro modo en el JVSM. Para ese esquema de codificación FGS concreto, el segmento de FGS también se puede denominar segmento de PR (de mejora progresiva).
En las diversas tablas de esta revelación, todos los elementos sintácticos pueden tener la sintaxis y la semántica pertinentes indicadas en el estándar H.264 de la ITU–T, o la ampliación de la SVC, p. ej., según la realización del JVSM o del JD6, en la medida en que tales elementos sintácticos estén descritos en el estándar H.264, a no ser que se especifique lo contrario. En general, los elementos sintácticos y semánticos no descritos en el estándar H.264 o en el JD6 se describen en esta revelación.
En las diversas tablas de esta revelación, en la columna marcada con una "C” figuran las categorías de los elementos sintácticos que pueden estar presentes en la unidad NAL, que pueden ajustarse a las categorías del estándar H.264. Además, puede haber elementos sintácticos con la categoría sintáctica “Todo”, según lo determinado por la sintaxis y la semántica de la estructura de datos RBSP (Raw Byte Sequence Payload) contenida en la unidad NAL del segmento de FGS.
La presencia o la ausencia de cualquier elemento sintáctico de una determinada categoría enumerada se determinan a partir de la sintaxis y la semántica de la estructura de datos RBSP asociada. La columna de descriptor especifica un descriptor, p. ej., f(n), u(n), b(n), ue(v), se(v), me(v), ce(v), que en general puede ajustarse a los descriptores especificados en el estándar
H.264 o en el JD6, a no ser que se especifique lo contrario en esta revelación.
TABLA 1 Modificación de la sintaxis para admitir fragmentos alineados con ciclos
TABLA 1, continuación
Ahora, se describirá un ejemplo de la semántica de los elementos sintácticos nuevos o modificados presentados en la Tabla 1. Los elementos sintácticos del conjunto de parámetros de la secuencia, que es enviado con menor frecuencia, se describen de la siguiente manera.
El elemento sintáctico pr_info_present_flag especifica la presencia de elementos sintácticos usados en la descodificación de segmentos de FGS, tal como la descodificación de segmentos de PR. Cuando pr_info_present_flag es igual a 0, no hay presentes más elementos sintácticos usados en la descodificación de segmentos de FGS en el conjunto de parámetros de la secuencia. Cuando pr_info_present_flag es igual a 1, los elementos sintácticos que especifican el uso de parámetros del modo vectorial de CAF y PR están presentes en el conjunto de parámetros de la secuencia. Cuando pr_info_present_flag no está presente, se puede inferir que es igual a 0.
El elemento sintáctico pr_cycle_aligned_fragment_flag especifica si se debería utilizar la descodificación basada en bloques con el uso de fragmentos CAF para la descodificación de segmentos de FGS. Cuando el valor de pr_cycle_aligned_fragment_flag es igual a 1, se utilizará la descodificación basada en bloques con el uso de CAF. Cuando pr_info_present_flag no está presente, se inferirá que es igual a 1.
El elemento sintáctico num_pr_vector_modes_minus1 especifica el tamaño el tamaño de la matriz de los parámetros del modo vectorial presentes en el conjunto de parámetros de la secuencia. Los parámetros del modo vectorial proceden de elementos sintácticos posteriores y se almacenan en la matriz bidimensional ScanPosVectSet, en la que cada matriz unidimensional ScanPosVectSet[ i ] almacena los parámetros relativos al modo vectorial i–th, para i = 0, 1, ...num_pr_vector_modes_minus1.
La variable NumPrVectorModes se puede obtener de la siguiente manera. Si está presente el elemento sintáctico num_pr_vector_modes_minus1, se programa NumPrVectorModes para que sea igual a (num_pr_vector_modes_minus 1 + 1). De lo contrario, NumPrVectorModes es igual a 1.
El elemento sintáctico pr_coding_mode[ i ] especifica qué elemento sintáctico se usa para proporcionar la matriz ScanPosVectSet [ i ]. Cuando pr_coding_mode[ i ] es igual a 0, los parámetros del modo vectorial de la matriz ScanPosVectSet [ i ] se obtienen usando el elemento sintáctico grouping _size_minus1[ i ]. Cuando pr_coding_mode[ i ] es igual a 1, los parámetros del modo vectorial de la matriz ScanPosVectSet[ i ] se obtienen usando la matriz reverse_pr_vector_len_minus1[ i ][k], k = 0, ..., NumPosVector[ i ] – 1. Si num_pr_vector_modes_minus1 no está presente, se programa pr_coding_mode[ 0 ] para que sea igual a 0.
El elemento sintáctico grouping_size_minus1 [ i ] especifica el número de posiciones de escaneado agrupadas en cada vector, menos 1. Si no está presente num–pr _vector_modes_minus1, grouping _size_minus][ 0 ] se programa para que sea igual a 15.
El elemento sintáctico reverse_pr_vector_len_minus][i] [k] especifica la longitud del vector entre ScanPosVectSet [i][NumPosVector[ i ] – 1 – k] y ScanPosVectSet[i][NumPosVector[i] – k], menos 1. El elemento sintáctico reversey_pr_vector_len_minus][i] [k] será descodificado como un valor sin asignar usando ceil( log(remVectorLen –1 ) bits.
La matriz ScanPosVectSet se puede obtener de la siguiente manera:
Los elementos sintácticos correspondientes del encabezamiento del segmento se pueden
proporcionar de la siguiente manera:
El elemento sintáctico pr_vector_mode_idx especifica el índice en la matriz ScanPosVectSet que almacena los parámetros del modo vectorial. El valor de pr_vector_mode_idx estará en el intervalo de 0 y (NumPrVectorModes – 1), inclusive. ScanPosVectSet [pr_vector_mode_idx] y NumPosVector[pr_vector_mode_idx] se usan en la
5 obtención de los siguientes parámetros para la descodificación del segmento actual de mejora progresiva:
NumPrCycles,
ScanPosVectLuma[ cycleldx ], cycleldx = 0, ..., NumPrCycles,
10 ScanPosVectLuma8x8[ cycleldx ], cycleldx = 0, ..., NumPrCycles, ScanPosVectChromaDC[ cycleldx ], cycleldx = 0, ..., NumPrCycles, ScanPosVectChromaAC[ cycleldx ], cycleldx = 0, ..., NumPrCycles.
Estos parámetros se pueden obtener de la siguiente manera:
15 ScanPosVectLuma [ 0 ] = 0 ScanPosVectLuma8x8 [ 0 ] = 0 ScanPosVectChromaAC[ 0 ] = 1 ScanPosVectChromaDC[ 0 ] = 0
NumPrCycles = NumPosVector[ pr_vector_mode_idx ] + ((tuma_chroma_sep_flag = = 1 )
? 1 : 0);
ScanPosVectLuma [ NumPrCycles ] = 16;
ScanPosVectLuma8x8 [ NumPrCycles ] = 64;
5 ScanPosVectChromaDC[ NumPrCycles ] = 4
ScanPosVectChromaAC[ NumPrCycles ] = 16;
El elemento sintáctico ScanPosVectLuma[ i ] proporciona la posición inicial de escaneado en el ciclo de codificación del índice i para los bloques de luma 4x4. ScanPosVectLuma8x8[ i ]
10 proporciona la posición inicial de escaneado en el ciclo de codificación del índice i para los bloques de luma de 8 x 8. ScanPosVectChromaDC[ i ] proporciona la posición inicial de escaneado en el ciclo de codificación del índice i para los bloques de DC de croma. ScanPosVectChromaAC[ i ] proporciona la posición inicial de escaneado en el ciclo de codificación del índice i para los bloques de AC de croma.
15 En el encabezamiento del segmento, también puede estar la señalización de una configuración diferente del modo vectorial, como se ilustra a continuación en la Tabla 2. Por consiguiente, en este modo vectorial modificado, las longitudes vectoriales se pueden especificar en el encabezamiento de un segmento en lugar de hacerlo en el conjunto de parámetros de la secuencia. Este enfoque puede implicar el uso de un indicador de anulación de automatismo
20 para generar un nuevo conjunto de vectores de escaneado. Las longitudes de los vectores también se pueden señalizar usando otros enfoques con diferentes equilibrios entre la complejidad y la cantidad de cabecera. Por consiguiente, la revelación contempla cualquiera de una variedad de técnicas para la señalización de un modo vectorial, en la que la información se codifica para señalizar un modo vectorial, incluyendo el ejemplo de técnica de señalización de un
25 encabezamiento de segmento ilustrado en la Tabla 2.
30
TABLA 2
SEÑALIZACIÓN DE CONFIGURACIONES DIFERENTES DEL MODO VECTORIAL
A continuación, se describirá la definición del encabezamiento de los macrobloques del segmento de FGS. En el modelo JSVM, se diseñó la estructura del flujo de bits de un segmento progresivo de un modo que los elementos sintácticos que no contribuyen directamente a la mejora de la calidad del vídeo reconstruido sean enviados lo más tarde posible. Si el flujo de bits está parcialmente truncado, el vídeo reconstruido puede tener una calidad máxima. La siguiente Tabla 3 proporciona un segmento de pseudo–código que proporciona la estructura básica del
flujo de bits de un segmento de FGS. La siguiente Tabla 4 ilustra ejemplos de elementos sintácticos para la definición del encabezamiento de los macrobloques de un segmento de FGS.
TABLA 3
ESTRUCTURA DEL FLUJO DE BITS DEL SEGMENTO DE FGS
Como ejemplo, se puede enviar el valor CBP del croma inmediatamente antes de los coeficientes del croma, pero después de los coeficientes del luma del primer ciclo de codificación en el mismo macrobloque, mientras que en la capa base de AVC, el CBP del croma se puede enviar en el encabezamiento del macrobloque. Otro ejemplo es la transmisión del delta QP. Si un macrobloque de la capa de mejora no tiene ningún coeficiente del luma distinto de cero ni ningún coeficiente de DC del croma distinto de cero, pero tiene algún coeficiente de AC del croma distinto de cero y el CBP del macrobloque de la capa base es cero, se puede enviar el delta QP inmediatamente antes de que los coeficientes de AC del croma sean codificados. Este enfoque es muy diferente del modo en el que estos elementos sintácticos son comúnmente enviados en la capa base de AVC.
5 El apartado del pseudo–código presentado anteriormente en la Tabla 3 proporciona la estructura básica del flujo de bits de un segmento de FGS. Sin embargo, mediante la realización de un simple análisis del orden de codificación real, el retraso de transmitir estos elementos sintácticos, en realidad, no puede proporcionar mucho beneficio.
Se pueden usar dos indicadores relacionados con el croma, allow _chroma_dc y allow
10 _chroma_ac en el codificador de vídeo 20 para controlar la velocidad de transmisión de los coeficientes del croma con respecto a la velocidad de transmisión de los coeficientes del luma. En el ciclo de codificación 0, estos dos indicadores se pueden programar siempre como 1, de modo que todos los elementos sintácticos mencionados anteriormente serán transmitidos en el primer ciclo. Los bits tras enviar estos elementos sintácticos serán retardados, pero pueden
15 seguir siendo transmitidos en el primer ciclo de codificación de un macrobloque. Esta reorganización menor de los bits no debería tener mucho impacto en el rendimiento de la codificación si el flujo de bits está truncado.
El encabezamiento de los MB para un segmento de FGS se puede definir según lo indicado en la siguiente Tabla 4. Particularmente, este ejemplo concreto de encabezamiento de 20 MB puede tener una estructura similar a la de una capa de escalabilidad granular gruesa (CGS)
con SNR.
25
30
DEFINICIÓN DEL ENCABEZAMIENTO DE LOS MACROBLOQUES DE UN SEGMENTO DE
FGS
Con los CAF y las técnicas de codificación asociadas, según lo descrito en esta revelación, el procedimiento de descodificación para un segmento de FGS se puede simplificar significativamente, pudiendo ser similar al procedimiento de descodificación de una capa de mejora diferenciada. Los CAF y las técnicas asociadas también pueden simplificar significativamente la especificación de la sintaxis del segmento de FGS. En la siguiente Tabla 5, se expone un ejemplo del flujo de descodificación, p. ej., en un descodificador de vídeo 22, cuando se usan un CAF y un encabezamiento de los macrobloques asociado, según lo descrito en esta revelación. Algunas funciones no enumeradas pueden ser similares a las funciones usadas en el JD de la SVC, a excepción de que se pueden usar las mejoras o las modificaciones explicadas anteriormente en esta revelación. Los CAF también pueden funcionar con diferentes esquemas de codificación FGS.
La conmutación de los datos de entrada, i.e., los datos de un fragmento, se puede realizar en la función de descodificación residual_block. El coste de la conmutación de las memorias intermedias de entrada es mucho menor que el coste asociado al procedimiento de descodificación basado en marcos.
TABLA 5
DATOS DE LOS SEGMENTOS DE FGS EN UNA SINTAXIS DE AMPLIACIÓN ESCALABLE
TABLA 5, continuación
20 La siguiente Tabla 6 ilustra un ejemplo de sintaxis para los datos de los bloques residuales de los segmentos de FGS en la ampliación escalable.
TABLA 6 DATOS DE LOS BLOQUES RESIDUALES DE LOS SEGMENTOS DE FGS EN UNA SINTAXIS 25 DE AMPLIACIÓN ESCALABLE
TABLA 6, continuación
La siguiente Tabla 7 ilustra un ejemplo de sintaxis para el coeficiente relevante y la 30 ejecución de la sintaxis de la codificación CABAC de los datos de los segmentos de FGS.
TABLA 7
COEFICIENTE RELEVANTE Y EJECUCIÓN DE LA SINTAXIS DE LA CABAC DE LOS DATOS
DE LOS SEGMENTOS DE FGS
- 10
- La siguiente Tabla 8 ilustra un ejemplo de sintaxis para el coeficiente relevante y la ejecución de la sintaxis de la codificación CAVLC de los datos de los segmentos de FGS.
- 15
- 20
- 25
- 30
TABLA 8
COEFICIENTE RELEVANTE Y EJECUCIÓN DE LA SINTAXIS DE LA CAVLC DE LOS DATOS
DE LOS SEGMENTOS DE FGS
Cualquier dispositivo descrito en esta revelación puede representar diversos tipos de dispositivos, tales como un teléfono inalámbrico, un teléfono celular, un ordenador portátil, un dispositivo multimedia inalámbrico, una tarjeta de ordenador personal (PC) de comunicación inalámbrico, un asistente personal digital (PDA), un módem externo o interno, un dispositivo de juego o cualquier dispositivo multimedia que se comunique a través de un canal por cable o inalámbrico. Tal dispositivo puede tener diversos nombres, tales como terminal de acceso (AT), unidad de acceso, unidad de abonado, estación móvil, dispositivo móvil, unidad móvil, teléfono móvil, móvil, estación remota, terminal remoto, unidad remota, dispositivo de usuario, equipo de usuario, dispositivo portátil y similares.
Las técnicas descritas en la presente memoria se pueden implementar en un soporte físico, soporte lógico, soporte lógico inalterable, o cualquier combinación de los mismos. Si se implementan en un soporte lógico, las técnicas se pueden realizar, al menos en parte, mediante uno o más códigos o instrucciones almacenados o transmitidos en un medio legible por ordenador de un programa informático que haga realizar a un procesador tales técnicas. Los medios legibles por ordenador pueden incluir medios de almacenamiento informáticos, medios de comunicación, o ambos, y pueden incluir cualquier medio que facilite la transferencia de un programa informático de un lugar a otro. Un medio de almacenamiento puede ser cualquier medio disponible al que se pueda acceder por un ordenador.
A modo de ejemplo, y sin que suponga una limitación, tal medio legible por ordenador puede comprender un medio de almacenamiento de datos, tal como una memoria RAM, una memoria dinámica de acceso aleatorio sincronizada (SDRAM), una memoria de sólo lectura (ROM), una memoria de acceso aleatorio no volátil (NVRAM), ROM, memoria de sólo lectura programable borrable por medios electrónicos (EEPROM), EEPROM, memoria FLASH, CD– ROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético u otros dispositivos de almacenamiento magnéticos, o cualquier otro medio de almacenamiento de datos legible por ordenador que se pueda usar para transportar o almacenar el código de un programa deseado en forma de instrucciones o de estructuras de datos, y al que se pueda acceder por un ordenador.
Además, es adecuado denominar cualquier conexión como un medio legible por ordenador. Por ejemplo, si el soporte lógico se transmite desde un sitio Web, un servidor u otra fuente remota por medio de un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital (DSL) o tecnologías inalámbricas, tales como infrarrojo, radio y microondas, entonces el cable coaxial, el cable de fibra óptica, el par trenzado, la DSL o las tecnologías inalámbricas tales como infrarrojo, radio y microondas se incluyen en la definición de medio. Disquete o disco, como se usan en la presente memoria, incluyen disco compacto (CD), disco láser, disco óptico, disco versátil digital (DVD), disco flexible o disquete y disco blu–ray, de manera que los disquetes habitualmente reproducen datos magnéticamente, mientras que los discos reproducen los datos ópticamente, p. ej., con lásers. También se deberían incluir combinaciones de lo anterior dentro de los medios legibles por ordenador.
El código asociado a un medio legible por ordenador de un programa informático puede
ser ejecutado por un ordenador, p. ej., mediante uno o más procesadores, tal como uno o más procesadores de señales digitales (DSP), microprocesadores de propósito general, circuitos integrados específicos de una aplicación (ASIC), antenajes lógicos de campo programables (FPLA) u otros circuitos lógicos integrados o diferenciados equivalentes. En algunos aspectos, es
5 posible proporcionar la funcionalidad descrita en la presente memoria en módulos de soporte lógico o módulos de soporte físico dedicados configurados para la codificación y la descodificación, o incorporados en un codificador–descodificador de vídeo combinado (CODEC).
Se han descrito diversos aspectos de la revelación. Éstos y otros aspectos están comprendidos en el ámbito de las siguientes reivindicaciones.
10
Claims (14)
- REIVINDICACIONES1. Un procedimiento de codificación de vídeo que comprende: codificar (86) bloques de datos de vídeo de escalabilidad granular fina (FGS) en ciclos que se caracteriza por la encapsulación (88) de los ciclos en una pluralidad de fragmentos, de modo que un inicio de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
-
- 2.
- El procedimiento de la reivindicación 1, en el que la encapsulación (88) comprende encapsular los ciclos en una pluralidad de fragmentos, de modo que un inicio de una carga útil de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
-
- 3.
- El procedimiento de la reivindicación 1, en el que los bloques de datos de vídeo de FGS comprenden bloques de coeficientes de transformación, y la codificación de los bloques de datos de vídeo de FGS incluye codificar los coeficientes asociados a los bloques de datos de vídeo de FGS en los ciclos.
-
- 4.
- El procedimiento de la reivindicación 1, en el que los bloques de datos de vídeo de FGS comprenden bloques de coeficientes de transformación, y en el que al menos algunos de los ciclos abarcan coeficientes de transformación asociados a una pluralidad de bloques de datos de vídeo de FGS.
-
- 5.
- El procedimiento de la reivindicación 1, en el que los bloques de datos de vídeo de FGS corresponden a un segmento de mejora progresiva (PR) de datos de vídeo.
-
- 6.
- El procedimiento de la reivindicación 1, que comprende además: aplicar codificación entrópica (90) a los fragmentos; y reiniciar los contextos de codificación asociados a la codificación entrópica para cada uno de los fragmentos.
-
- 7.
- El procedimiento de la reivindicación 6, en el que la reiniciación de la codificación
entrópica comprende: descargar un codificador entrópico usado para aplicar la codificación entrópica tras codificar cada uno de los fragmentos por entropía; y reiniciar los contextos de codificación usados por el codificador entrópico tras codificar cada uno de los fragmentos por entropía. -
- 8.
- El procedimiento de la reivindicación 1, que comprende además controlar uno o más de los ciclos con un modo vectorial para escanear hasta una posición de escaneado predefinida dentro de cada uno de los bloques antes de pasar a otro de los bloques.
-
- 9.
- El procedimiento de la reivindicación 8, que comprende además codificar información para señalizar el modo vectorial.
-
- 10.
- El procedimiento de la reivindicación 1, en el que cada uno de los ciclos representa al menos una parte de un escaneado en zig–zag de uno o más de los bloques.
- 11. Un codificador de vídeo (20) que comprende: medios para codificar bloques de datos de vídeo de escalabilidad granular fina5 (FGS) en ciclos caracterizado por medios para encapsular los ciclos en una pluralidad de fragmentos, de modo que un inicio de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
- 12. Un procedimiento de descodificación de vídeo que comprende:10 recibir (106) fragmentos que incluyen ciclos de codificación que codifican bloques de datos de vídeo de escalabilidad granular fina (FGS) caracterizado por descodificar (108) al menos partes de al menos algunos de los fragmentos simultáneamente, en el que un inicio de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.15 13. El procedimiento de la reivindicación 12, en el que un inicio de una carga útil de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
- 14. Un descodificador de vídeo (22) que comprende: medios para recibir fragmentos que incluyen ciclos de codificación que codifican bloques de datos de vídeo de escalabilidad granular fina (FGS)20 caracterizado por medios para descodificar al menos partes de al menos algunos de los fragmentos simultáneamente, en el que un inicio de cada uno de los fragmentos coincide sustancialmente con un inicio de uno de los ciclos.
- 15. Un medio legible por ordenador que comprende instrucciones para hacer que un 25 procesador lleve a cabo las etapas de cualquiera de las reivindicaciones 1 a 10 ó 12, 13.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US83089106P | 2006-07-13 | 2006-07-13 | |
US830891P | 2006-07-13 | ||
US866999P | 2006-11-22 | ||
US917542P | 2007-05-11 |
Publications (1)
Publication Number | Publication Date |
---|---|
ES2348686T3 true ES2348686T3 (es) | 2010-12-10 |
Family
ID=40892190
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES07799529T Active ES2348686T3 (es) | 2006-07-13 | 2007-07-12 | Codificaciã“n de video con escalabilidad granular fina mediante fragmentos alineados con ciclos. |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101491097B (es) |
ES (1) | ES2348686T3 (es) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8737825B2 (en) * | 2009-09-10 | 2014-05-27 | Apple Inc. | Video format for digital video recorder |
FR2972588A1 (fr) | 2011-03-07 | 2012-09-14 | France Telecom | Procede de codage et decodage d'images, dispositif de codage et decodage et programmes d'ordinateur correspondants |
FR2977111A1 (fr) | 2011-06-24 | 2012-12-28 | France Telecom | Procede de codage et decodage d'images, dispositif de codage et decodage et programmes d'ordinateur correspondants |
BR112013033899B1 (pt) * | 2011-07-01 | 2019-08-20 | Samsung Electronics Co., Ltd. | Método de decodificação de vídeo |
PL2842313T3 (pl) | 2012-04-13 | 2017-06-30 | Ge Video Compression, Llc | Skalowalny strumień danych i obiekt sieciowy |
CA3214600A1 (en) * | 2012-06-29 | 2014-01-03 | Ge Video Compression, Llc | Video data stream concept |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006510302A (ja) * | 2002-12-16 | 2006-03-23 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | Fine−granularityスケーラブル(fgs)ビデオストリームのビットプレーン・デコードを行うシステム及び方法 |
US20040179606A1 (en) * | 2003-02-21 | 2004-09-16 | Jian Zhou | Method for transcoding fine-granular-scalability enhancement layer of video to minimized spatial variations |
-
2007
- 2007-07-12 ES ES07799529T patent/ES2348686T3/es active Active
- 2007-07-12 CN CN200780025915.6A patent/CN101491097B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101491097B (zh) | 2011-12-14 |
CN101491097A (zh) | 2009-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2041977B1 (en) | Video coding with fine granularity scalability using cycle-aligned fragments | |
ES2952775T3 (es) | Indicación de uso de un procesamiento paralelo de frente de onda en una codificación de vídeo | |
US20230016033A1 (en) | Video intra prediction using hybrid recursive filters | |
ES2892341T3 (es) | Codificación de vídeo con unidades de capa de abstracción de red que incluyen múltiples particiones de imagen codificada | |
KR101589851B1 (ko) | 코딩된 슬라이스 nal 유닛들에서의 세그먼트들의 패딩 | |
ES2348686T3 (es) | Codificaciã“n de video con escalabilidad granular fina mediante fragmentos alineados con ciclos. | |
CN107079176B (zh) | 用于hevc延伸承载的数据流的hrd描述符及缓冲器模型的设计 | |
JP5307017B2 (ja) | リファインメント係数符号化のためのビデオブロックに基づいた可変長符号化テーブル選択 | |
ES2561609T3 (es) | Agrupación de elementos sintácticos codificados por circunvalación en la codificación de vídeo | |
US8848789B2 (en) | Method and system for coding and decoding information associated with video compression | |
ES2775068T3 (es) | Codificación de vídeo usando transformadas mayores que 4x4 y 8x8 | |
ES2767933T3 (es) | Capa de sectores en códec de vídeo | |
JP5313362B2 (ja) | 可変長固定長コードの高速パーシング | |
TWI452908B (zh) | 用於視訊編碼及解碼之系統及方法 | |
TWI481223B (zh) | 用於樣本自適應偏移語法元素之旁路寫碼位元子的分組 | |
KR101068428B1 (ko) | Svc cgs 향상 계층 코딩을 위한 cavlc 향상 | |
BRPI0709280A2 (pt) | métodos e sistemas para codificação de coeficiente de significáncia em compressão de vìdeo | |
RU2407218C2 (ru) | Видеокодирование с высокодетализированной масштабируемостью с использованием выровненных с циклом фрагментов |