ES2826425T3 - Instrucción de codificación aritmética dedicada - Google Patents

Instrucción de codificación aritmética dedicada Download PDF

Info

Publication number
ES2826425T3
ES2826425T3 ES15724831T ES15724831T ES2826425T3 ES 2826425 T3 ES2826425 T3 ES 2826425T3 ES 15724831 T ES15724831 T ES 15724831T ES 15724831 T ES15724831 T ES 15724831T ES 2826425 T3 ES2826425 T3 ES 2826425T3
Authority
ES
Spain
Prior art keywords
cabac
input
amplitude
value
processor
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
Application number
ES15724831T
Other languages
English (en)
Inventor
Bo Zhou
Mao Zeng
Erich James Plondke
Lucian Codrescu
Shu Xiao
Junchen Du
Suhail Jalil
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2826425T3 publication Critical patent/ES2826425T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4006Conversion to or from arithmetic code
    • H03M7/4012Binary arithmetic codes
    • H03M7/4018Context adapative binary arithmetic codes [CABAC]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Un aparato (100) adaptado para codificar flujos de vídeo usando un esquema de codificación de codificación aritmética binaria adaptativa al contexto, CABAC, que comprende: una memoria (120); un registro de predicación (340) configurado para almacenar un valor de intervalo de entrada (350); y un procesador (110) acoplado a la memoria, el procesador configurado para: ejecutar una instrucción dedicada de codificación aritmética binaria adaptativa al contexto, CABAC, (202, 222), en la que la instrucción de codificación CABAC se configura para aceptar una pluralidad de entradas que incluyen una primera amplitud (304), un primer desplazamiento (305) y un primer estado (301) y para producir una o más salidas en base a la pluralidad de entradas, y en las que un valor de al menos una salida de la una o más salidas se calcula en base al valor de intervalo de entrada (350); haciendo la instrucción de codificación CABAC que el procesador: determine, en un comparador (414), un primer valor de salida de comparador en base a una comparación entre un primer valor de entrada de comparador y un segundo valor de entrada de comparador, en el que el primer valor de entrada de comparador se basa en un bit de símbolo más probable, MPS, de entrada (302) almacenado en un primer par de registros de entrada (310), y en el que el segundo valor de entrada de comparador se basa en el valor de intervalo de entrada (350); realice una nueva normalización en la primera amplitud y el primer desplazamiento para generar uno o más valores de la primera amplitud que sean mayores que o iguales a un umbral; y en base a la una o más salidas de la instrucción de codificación CABAC, incluyendo la salida del comparador, la instrucción de codificación CABAC hace que el procesador: almacene un segundo estado (308); realinee la primera amplitud para producir una segunda amplitud (306); realinee el primer desplazamiento para producir un segundo desplazamiento (309).

Description

DESCRIPCIÓN
Instrucción de codificación aritmética dedicada
CAMPO
[0001] La presente divulgación se refiere en general a las instrucciones del microprocesador.
DESCRIPCIÓN DE LA TÉCNICA RELACIONADA
[0002] Los avances en la tecnología han dado como resultado dispositivos informáticos más pequeños y más potentes. Por ejemplo, existe actualmente una variedad de dispositivos informáticos personales portátiles, incluyendo dispositivos informáticos inalámbricos, tales como teléfonos inalámbricos portátiles, asistentes digitales personales (PDA) y dispositivos de paginación que son pequeños, ligeros y fáciles de transportar por los usuarios. Más específicamente, los teléfonos inalámbricos portátiles, tales como los teléfonos móviles y los teléfonos de protocolo de Internet (IP), pueden comunicar paquetes de voz y datos sobre redes inalámbricas. Además, muchos de dichos teléfonos inalámbricos incluyen otros tipos de dispositivos que están incorporados en los mismos. Por ejemplo, un teléfono inalámbrico también puede incluir una cámara fotográfica digital, una cámara de vídeo digital, un grabador digital y un reproductor de archivos de audio. Además, dichos teléfonos inalámbricos pueden procesar instrucciones ejecutables, incluyendo aplicaciones de software, tales como una aplicación de navegador web, que se pueden usar para acceder a Internet. Como tales, estos teléfonos inalámbricos pueden incluir capacidades informáticas significativas.
Para lograr una transferencia de datos eficaz, se puede codificar un flujo de bits de vídeo que representa un archivo de vídeo antes de la transmisión a dispositivos informáticos tales como teléfonos inalámbricos. La codificación aritmética binaria adaptativa basada en el contexto (CABAC) se puede usar para codificar en serie el archivo de vídeo. Se pueden usar instrucciones de propósito general durante la codificación CABAC para codificar intervalos (bins) (por ejemplo, bits). Sin embargo, las instrucciones de propósito general pueden ser ineficaces debido a los tiempos de procesamiento relativamente largos. La publicación de solicitud de patente internacional n.° WO 2011/063362 A1 se refiere a una instrucción de descodificación CABAC dedicada. La publicación de solicitud de patente de EE. UU. n.° US 2007/285286 A1 se refiere a la descodificación de códigos aritméticos binarios adaptativa al contexto en el núcleo computacional de la unidad de procesamiento de gráficos programables. La literatura distinta de patente de Marpe D et al. 2003, se refiere a la codificación aritmética binaria adaptativa basada en el contexto en la norma de compresión de vídeo H.264/AVC.
BREVE EXPLICACIÓN
[0003] Se divulgan aparatos y procedimientos para codificar flujos de vídeo. Codificar un bit (por ejemplo, un "intervalo") usando un esquema de codificación de codificación aritmética binaria adaptativa al contexto (CABAC) incluye actualizar recursivamente una "amplitud" y un "desplazamiento" de un intervalo de código "actual". La amplitud puede incluir un primer subintervalo (por ejemplo, un símbolo menos probable (LPS)) y un segundo subintervalo (por ejemplo, un símbolo más probable (MPS)). Si el intervalo se codifica como un MPS (por ejemplo, un "1" lógico), la amplitud puede ser igual a una amplitud del MPS (por ejemplo, rMPS) y el desplazamiento, que se puede indicar como "bajo", y puede permanecer constante (por ejemplo, bajonuevo = bajo). De forma alternativa, si el intervalo se codifica como un LPS (por ejemplo, un "0" lógico), la amplitud puede ser igual a una amplitud del LPS (por ejemplo, rLPS) y el desplazamiento puede ser igual a la suma del desplazamiento y la amplitud del MPS (por ejemplo, bajonuevo = bajo rMPS). El desplazamiento es un flujo de bits codificado.
[0004] De acuerdo con las técnicas descritas, una instrucción de codificación aritmética dedicada, tal como una instrucción de CABAC dedicada, para codificar un flujo de vídeo usando CABAC es ejecutable por un procesador. El procesador se puede configurar para ejecutar instrucciones de propósito general y ejecutar la instrucción de codificación aritmética dedicada. Por ejemplo, la instrucción de codificación aritmética dedicada acepta como entrada una primera amplitud, un primer desplazamiento y un primer estado. El procesador puede almacenar un segundo estado, realinear la primera amplitud para producir una segunda amplitud y realinear el primer desplazamiento para producir un segundo desplazamiento en base a una o más salidas de la instrucción de codificación aritmética dedicada.
[0005] Por ejemplo, durante la ejecución de la instrucción de codificación aritmética dedicada, la primera amplitud (por ejemplo, 9 bits) se puede almacenar en un primer registro (por ejemplo, un registro de 32 bits) y el primer desplazamiento (por ejemplo, 10 bits) se puede almacenar en un segundo registro (por ejemplo, un registro de 32 bits). El primer registro puede incluir ceros iniciales, la primera amplitud (por ejemplo, 9 bits) y ceros finales. Una posición de bit (por ejemplo, "bitpos") puede indicar el número de ceros iniciales en el primer registro y se puede obtener usando una instrucción de recuento de cero inicial (CLZ). Por tanto, en un ejemplo particular, el número de ceros finales es (32-9-bitpos) = (23-bitpos). El/los bit(s) se puede(n) extraer del primer registro y usarse como un índice para encontrar un valor de la amplitud del LPS en una tabla de consulta. El valor de la amplitud del LPS se puede desplazar a la izquierda en el número de ceros finales para alinear el valor de la amplitud del LPS con la primera amplitud (por ejemplo, 9 bits) en el primer registro. Después de cada iteración de codificación, los intervalos del primer registro se pueden volver a normalizar de modo que un bit más significativo (MSB) de la primera amplitud (por ejemplo, 9 bits) usado en la siguiente iteración sea igual a 1.
[0006] Durante la nueva normalización, se pueden proporcionar (por ejemplo, emitir) octetos particulares del segundo registro al flujo de bits. Por ejemplo, cuando el MSB de la amplitud es menor que 1 (correspondiente a un incremento en el desplazamiento), el primer y segundo octetos del segundo registro se pueden proporcionar al flujo de bits, el tercer octeto del segundo registro se puede desplazar a la izquierda a la primera posición de octeto y el cuarto octeto del segundo registro se puede borrar para volver a normalizar el segundo registro (por ejemplo, el desplazamiento) y el primer registro (por ejemplo, la amplitud).
[0007] El uso de la instrucción de codificación aritmética dedicada (por ejemplo, una única instrucción) para codificar un intervalo puede incrementar la velocidad de codificación en comparación con el uso de múltiples instrucciones de propósito general. Por ejemplo, el uso de una instrucción de codificación aritmética dedicada reduce el tiempo para generar un bit de flujo de vídeo codificado a partir de múltiples ciclos de ejecución del procesador (es decir, > 2 ciclos) (usando instrucciones de propósito general) a 2 ciclos de ejecución del procesador.
[0008] En un aspecto particular, un aparato incluye una memoria y un procesador acoplados a la memoria. El procesador se configura para ejecutar una instrucción de codificación aritmética dedicada. La instrucción de codificación aritmética dedicada acepta una pluralidad de entradas que incluyen una primera amplitud, un primer desplazamiento y un primer estado y produce una o más salidas en base a la pluralidad de entradas. En base a la una o más salidas de la instrucción de codificación aritmética dedicada, el procesador se configura para almacenar un segundo estado, realinear la primera amplitud para producir una segunda amplitud y realinear el primer desplazamiento para producir un segundo desplazamiento.
[0009] En otro aspecto particular, un procedimiento incluye ejecutar, en un procesador, una instrucción de codificación aritmética dedicada. La instrucción de codificación aritmética dedicada acepta una pluralidad de entradas que incluyen una primera amplitud, un primer desplazamiento y un primer estado y produce una o más salidas en base a la pluralidad de entradas. El procedimiento también incluye, en base a la una o más salidas de la instrucción de codificación aritmética dedicada, almacenar un segundo estado, realinear la primera amplitud para producir una segunda amplitud y realinear el primer desplazamiento para producir un segundo desplazamiento.
[0010] En otro aspecto particular, un medio no transitorio legible por ordenador incluye una instrucción de codificación aritmética binaria adaptativa al contexto (CABAC) dedicada que acepta una pluralidad de entradas que incluyen una primera amplitud, un primer desplazamiento y un primer estado y produce una o más salidas en base a la pluralidad de entradas. La instrucción de codificación CABAC dedicada se ejecuta por un procesador. La instrucción de codificación CABAC dedicada hace que el procesador almacene un segundo estado, vuelva a alinear la primera amplitud para producir una segunda amplitud y vuelva a alinear el primer desplazamiento para producir un segundo desplazamiento.
[0011] En otro aspecto particular, un aparato incluye medios para almacenar instrucciones de propósito general y una instrucción de codificación aritmética dedicada. El aparato también incluye medios para ejecutar las instrucciones de propósito general recuperadas de los medios de almacenamiento. El aparato incluye además medios para ejecutar la instrucción de codificación aritmética dedicada recuperada de los medios de almacenamiento. La instrucción de codificación aritmética dedicada acepta una pluralidad de entradas que incluyen una primera amplitud, un primer desplazamiento y un primer estado. La instrucción de codificación aritmética dedicada se ejecuta para producir una o más salidas en base a la pluralidad de entradas. En base a la una o más salidas, se almacena un segundo estado, la primera amplitud se vuelve a alinear para producir una segunda amplitud y el primer desplazamiento se vuelve a alinear para producir un segundo desplazamiento.
[0012] Una ventaja particular proporcionada por al menos uno de los aspectos divulgados es la capacidad de programar y ejecutar una instrucción de codificación aritmética dedicada en un microprocesador. El uso de instrucciones de codificación aritmética dedicadas puede reducir el número de ciclos de ejecución del procesador para codificar un flujo de bits de vídeo codificado en entropía (por ejemplo, un flujo de bits de vídeo CABAC H.264 o un flujo de bits de vídeo CABAC H.265). Otros aspectos, ventajas y rasgos característicos de la presente divulgación resultarán evidentes después de revisar la solicitud completa, incluyendo las siguientes secciones: Breve descripción de los dibujos, Descripción detallada y Reivindicaciones.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
[0013]
La FIG. 1 es un diagrama de un aspecto ilustrativo particular de un sistema que es operable para ejecutar una instrucción de codificación aritmética dedicada;
la FIG. 2 es un aspecto ilustrativo de la modificación de amplitudes y desplazamientos de CABAC usando una instrucción de codificación aritmética dedicada;
la FIG. 3 es un diagrama de un aspecto ilustrativo particular de un procedimiento de almacenamiento de información en los registros de un procesador configurado para ejecutar una instrucción de codificación aritmética dedicada;
la FIG. 4 es un diagrama arquitectónico de un aspecto ilustrativo particular de la lógica para ejecutar una instrucción de codificación aritmética dedicada;
la FIG. 5 es un diagrama de flujo que ilustra un procedimiento para volver a normalizar una amplitud y un desplazamiento;
la FIG. 6 es un diagrama de flujo de un aspecto ilustrativo particular de un procedimiento para ejecutar una instrucción de codificación aritmética dedicada; y
la FIG. 7 es un diagrama de bloques de un dispositivo inalámbrico que incluye un conjunto de instrucciones que tiene instrucciones de propósito general y una instrucción de codificación aritmética dedicada.
DESCRIPCIÓN DETALLADA
[0014] En referencia a la FIG. 1, se muestra un aspecto ilustrativo particular de un sistema 100 que es operable para ejecutar una instrucción de codificación aritmética dedicada. El sistema 100 incluye un procesador 110 acoplado a una memoria 120.
[0015] El procesador 110 incluye la lógica de ejecución de instrucción de propósito general 112 configurada para ejecutar instrucciones de propósito general. Las instrucciones de propósito general pueden incluir instrucciones de procesador ejecutadas comúnmente, tales como CARGAR, ALMa Ce Na R, SALTAR, AÑADIR, INCREMENTAR, etc. La lógica de ejecución de instrucción de propósito general 112 puede incluir lógica de almacenamiento de carga de propósito general para ejecutar las instrucciones de propósito general. El procesador 110 también incluye lógica de ejecución de instrucción de codificación aritmética dedicada 114 configurada para ejecutar una instrucción de codificación aritmética dedicada. La instrucción de codificación aritmética dedicada es ejecutable por el procesador 110 para codificar un flujo de vídeo en base a un esquema de codificación por entropía, tal como el esquema de codificación aritmética binaria adaptativa al contexto (CABAC). En un aspecto particular, la instrucción de codificación aritmética dedicada se puede usar en la codificación de un flujo de vídeo de acuerdo con la norma doscientos sesenta y cuatro de sistemas audiovisuales y multimedia promulgada por la Unión Internacional de Telecomunicaciones (H.264, titulada "Codificación de vídeo avanzada para servicios audiovisuales genéricos"). En otro aspecto, la instrucción de codificación aritmética dedicada se puede usar en la codificación de un flujo de vídeo de acuerdo con la norma doscientos sesenta y cinco de sistemas audiovisuales y multimedia promulgada por la Unión Internacional de Telecomunicaciones (H.265, titulada "Serie H: sistemas audiovisuales y multimedia, infraestructura de servicios audiovisuales - codificación de vídeo en movimiento").
[0016] En un aspecto particular, las instrucciones de propósito general y la instrucción de codificación aritmética dedicada se ejecutan por una unidad de ejecución común del procesador 110. Por ejemplo, la unidad de ejecución común puede incluir tanto la lógica de ejecución de instrucción de propósito general 112 como la lógica de ejecución de instrucción de codificación aritmética dedicada 114. En un aspecto ilustrativo, la instrucción de codificación aritmética dedicada es una instrucción atómica que es ejecutable por el procesador 110 sin separar la instrucción de codificación aritmética dedicada en una o más instrucciones de propósito general que se van a ejecutar por la lógica de ejecución de instrucciones de propósito general 112. La instrucción de codificación aritmética dedicada puede ser una única instrucción de un conjunto de instrucciones del procesador 110 y se puede ejecutar en un pequeño número de ciclos (por ejemplo, menos de tres ciclos de ejecución) del procesador 110. En un aspecto particular, el procesador 110 es un procesador de palabra de instrucción muy larga (VLIW) de subprocesos múltiples en cadena.
[0017] La memoria 120 puede incluir memoria de acceso aleatorio (RAM), memoria de sólo lectura (ROM), memoria de registro o cualquier combinación de los mismos. Aunque la memoria 120 se ilustra en la FIG. 1 como separada del procesador 110, la memoria 120 puede ser en cambio una memoria incorporada (por ejemplo, caché) del procesador 110.
[0018] En funcionamiento, el procesador 110 se puede usar en la codificación de un flujo de vídeo. Mientras codifica un bit particular del flujo de vídeo, el procesador 110 puede recuperar una instrucción de codificación aritmética dedicada de la memoria 120 y la lógica 114 puede ejecutar la instrucción recuperada.
[0019] Se apreciará que el sistema 100 de la FIG. 1 puede posibilitar la ejecución de instrucciones de codificación aritmética dedicadas (por ejemplo, mientras se codifican flujos de vídeo). Los procesadores configurados para ejecutar instrucciones de codificación aritmética dedicadas (por ejemplo, el procesador 110) pueden codificar flujos de vídeo más rápido que los procesadores que ejecutan un algoritmo de codificación de vídeo usando múltiples instrucciones de propósito general. Por ejemplo, la capacidad de ejecutar instrucciones de codificación aritmética dedicadas puede posibilitar que un procesador realice operaciones de codificación complejas y que consumen mucho tiempo en menos ciclos de ejecución que usando instrucciones de propósito general, como se describe además en el presente documento.
[0020] En referencia a la FIG. 2, se divulgan los aspectos ilustrativos 200, 220 de la modificación de amplitudes y desplazamientos de CABAC usando una instrucción de codificación aritmética dedicada. CABAC es una forma de codificación aritmética binaria. En general, la codificación aritmética binaria se puede caracterizar por dos cantidades: una "amplitud" de intervalo actual y un "desplazamiento" actual en la amplitud de intervalo actual.
[0021] Para codificar un bit particular, la amplitud actual se subdivide en primer lugar en dos porciones en base a la probabilidad de un símbolo menos probable (LPS) y un símbolo más probable (MPS). Por ejemplo, el LPS puede ser un símbolo "cero", el MPS puede ser un símbolo "uno" y la amplitud actual puede ser la amplitud entre cero y uno. En general, si R es el ancho de la amplitud actual, rLPS es el ancho de la primera porción, rMPS es el ancho de la segunda porción, pLPS es la probabilidad de encontrar el símbolo menos probable y pMPS es la probabilidad de encontrar el símbolo más probable, entonces rLPS = R x pLPS y rMPS = R x pMPS = R - rLPS. Por tanto, cuando la probabilidad pLPS del símbolo menos probable es mayor que la probabilidad pMPS del símbolo más probable, la porción correspondiente al símbolo menos probable tendrá un ancho rLPS mayor que el ancho rMPS de la porción correspondiente al símbolo más probable. Es decir, cuando pLPS > pMPS, rLPS > rMPS. De forma similar, cuando pMPS > pLPS, rMPS > rLPS. Cada intervalo se puede codificar como un m Ps o un LPS, y el rLPS y rMPS se pueden actualizar de forma iterativa en base al intervalo codificado, como se explica a continuación.
[0022] Por ejemplo, como se ilustra en el primer aspecto 200 de la FIG. 2, se puede ejecutar una instrucción de codificación aritmética dedicada 202 para codificar un intervalo 204 como un MPS (por ejemplo, codificar el intervalo como un "1" lógico). En un aspecto particular, la instrucción de codificación aritmética dedicada 202 se puede ejecutar por la lógica de ejecución de instrucción de codificación aritmética dedicada 114 del procesador 110 de la FIG. 1. Una amplitud 206 y un bajo 208 (por ejemplo, un desplazamiento) pueden caracterizar el intervalo 204. La amplitud 206 puede ser igual a la suma de un rLPS 210 del intervalo 204 y un rMPS 212 del intervalo 204, como se muestra. La ejecución de la instrucción de codificación aritmética dedicada 202 para codificar el intervalo 204 como el MPS genera un intervalo codificado 214. Una amplitud 216 del intervalo codificado 214 equivale al rMPS 212 del intervalo 204, y un bajo 218 (por ejemplo, desplazamiento) del intervalo codificado 214 equivale al bajo 208 del intervalo 204.
[0023] Como otro ejemplo, como se ilustra en el segundo aspecto 220 de la FIG. 2, se puede ejecutar una instrucción de codificación aritmética dedicada 222 para codificar el intervalo 204 como un LPS (por ejemplo, codificar el intervalo como un "0" lógico). En un aspecto particular, la instrucción de codificación aritmética dedicada 222 se puede ejecutar por la lógica de ejecución de instrucción de codificación aritmética dedicada 114 del procesador 110 de la FIG. 1. La ejecución de la instrucción de codificación aritmética dedicada 222 para codificar el intervalo 204 como el LPS puede generar un intervalo codificado 234. Una amplitud 236 del intervalo codificado 234 equivale al rLPS 210 del intervalo 204, y un bajo (por ejemplo, desplazamiento) del intervalo codificado 234 equivale a la suma del bajo 208 del intervalo 204 y el rMPS 212 del intervalo 204. En un aspecto particular, la instrucción de codificación aritmética dedicada 202 y la instrucción de codificación aritmética dedicada 222 pueden ser la misma instrucción.
[0024] Con referencia a los aspectos 200, 220 representados en la FIG. 2, el desplazamiento (por ejemplo, el bajo 218, 238, respectivamente) se puede escribir en el flujo de bits (un intervalo codificado). Como se ilustra en la FIG. 2, la amplitud 216, 236 del intervalo codificado 214, 234 puede ser más pequeña que la amplitud 206 del intervalo 204 (por ejemplo, la amplitud puede disminuir con cada etapa de codificación). Por tanto, la amplitud y el bajo se pueden volver a normalizar después de codificar cada intervalo o cuando un valor de la amplitud desciende por debajo de un umbral. Por ejemplo, una amplitud representada por un número binario de 9 bits se puede volver a normalizar cuando un bit más significativo (MSB) de la amplitud es menor que uno (por ejemplo, MSB = 0). La nueva normalización se describe con mayor detalle con respecto a la FIG. 5.
[0025] La codificación CABAC de acuerdo con H.264 o H.265 es una operación dependiente del estado. Es decir, la codificación del flujo de vídeo puede incluir mantener información (por ejemplo, estado, posición de bit y bit de MPS) distinta de la amplitud y el desplazamiento. Para H.264 o H.265, la amplitud es una cantidad de 9 bits y el desplazamiento es una cantidad de al menos 9 bits. El cálculo de rLPS se puede aproximar por una tabla de búsqueda de 64x4 de 256 octetos que almacena constantes de CABAC y que está indexada por amplitud y estado. Debido a que los valores de la tabla de búsqueda son constantes definidas por la norma H.264 o la norma H.265, la tabla de búsqueda se puede codificar directamente. De forma alternativa, la tabla de búsqueda puede ser programable (por ejemplo, que se puede volver a escribir).
[0026] Una instrucción de codificación CABAC dedicada (por ejemplo, la instrucción de codificación aritmética dedicada 202, 222) puede volver a alinear la amplitud, volver a alinear el desplazamiento y buscar las constantes de CABAC como se describe en el presente documento. La instrucción de codificación CABAC dedicada puede aceptar como entrada bits de estado de CABAC, un bit de MPS de CABAC, bits de posición de bit (bitpos), nueve bits de amplitud de CABAC, al menos nueve bits de desplazamiento de CABAC y un bit de valor de entrada (por ejemplo, intervalo de valor de entrada). La instrucción de codificación de CABAC dedicada puede generar una salida que incluya nuevos bits de estado de CABAC, un nuevo bit de MPS de CABAC, nueve bits de amplitud de CABAC y al menos nueve bits de desplazamiento de CABAC. Como se explica anteriormente, el proceso de codificación se puede volver a normalizar después de determinadas iteraciones de modo que el valor del MSB del MPS sea 1. Por ejemplo, una instrucción de codificación de CABAC dedicada puede funcionar de acuerdo con el siguiente pseudocódigo:
state = Rtt.w[0][5:0];
valMPS = Rtt.w[0][8:8];
bitpos = Rtt.w[1][4:0];
range = Rss.w[0];
low = Rss.w[1];
bin = Pu[0];
range <<= bitpos range &= 0xFF800000U;
rLPS = rLPS_table_64x4[state][(range>>29)&3];
rLPS = rLPS<<23;
rMPS = range-rLPS;
if (bin == valMPS) {
Rdd = AC_next_state_MPS_64[state];//(state<62)?(state+1):state;
Rdd[8:8] = valMPS;
Rdd[31:23] = rMPS>>23;
Rdd.w[1] = low;
} else {
Rdd = AC_next_state_LPS_64[state];
Rdd[8:8] = !state?(1-valMPS):valMPS;
Rdd[31:23] = rLPS>>23;
Rdd.w[1] = low+(rMPS>>bitpos);
}
[0027] Cabe destacar que aunque muchas de las ecuaciones y expresiones como se expone en el presente documento usan una sintaxis similar al lenguaje de programación C o C++, las expresiones son para propósitos ilustrativos y se pueden expresar en cambio en otros lenguajes de programación con diferentes sintaxis.
[0028] El pseudocódigo anterior se puede encapsular en una función ENCBIN( ) (ilustrada a continuación) y un bit de vídeo H.264 o H.265 codificado se puede generar en dos ciclos de procesador.
cabac_encode_bin:
{
R1:0 = ENCBIN(R1:0,R3:2,P0)//[encode one bin]
//[R0[5:0]: state]
//[R0[8]: valMPS]
//[R0[31:23]: range]
//[R1: low]
R6 = ASL(R5,R2) //[0x100<<bitpos]
}
{
MEMH(R4+#0) = R0 //[store context]
P1 = CMP.GTU(R6,R0) //[0x100>range?]
R0 = LSR(R0,R2) //[re-align range]
IF (!P1.NEW) JUMPR:T LR //[return]
}
[0029] En un aspecto particular, el uso de una instrucción de codificación CABAC dedicada reduce el tiempo para generar un bit de flujo de vídeo codificado a partir de múltiples ciclos de ejecución del procesador (es decir, > 2 ciclos) (usando instrucciones de propósito general) a 2 ciclos de ejecución del procesador.
[0030] En referencia a la FIG. 3, se divulga un diagrama de un aspecto ilustrativo particular de un procedimiento de almacenamiento de información en los registros de un procesador configurado para ejecutar una instrucción de codificación aritmética dedicada 360. En un aspecto ilustrativo, la instrucción de codificación aritmética dedicada 360 es una instrucción de codificación de CABAC H.264. En otro aspecto ilustrativo, la instrucción de codificación aritmética dedicada 360 es una instrucción de codificación de CABAC H.265. En un aspecto particular, la instrucción de codificación aritmética dedicada 360 puede corresponder a una de las instrucciones de codificación aritmética dedicadas 202, 222 de la FIG. 2.
[0031] Durante la ejecución de la instrucción de codificación aritmética dedicada 360, un intervalo 350 (por ejemplo, un bit de valor de entrada 350 de la instrucción de codificación CABAC dedicada 360) se puede almacenar en un registro de predicación 340. El intervalo 350 almacenado en el registro de predicación 340 se puede usar en una decisión o en un algoritmo de codificación de vídeo. El procesador 110 puede cargar y almacenar los datos usados para ejecutar la instrucción de codificación aritmética dedicada 360 en dos pares de registros de entrada 310 y 320. En un aspecto particular, los pares de registros 310 y 320 son pares de registros de 32 bits.
[0032] Un procesador puede almacenar los datos generados durante la ejecución de la instrucción de codificación aritmética dedicada en un par de registro de salida 330. En un aspecto particular, el par de registros de salida 330 es un par de registros de 32 bits.
[0033] Un primer registro Rtt.wO 311 del primer par de registros de entrada 310 puede almacenar un estado de entrada 301 y un bit de MPS de entrada 302. En un aspecto particular, los bits de cero a cinco de Rtt.wO 311, indicados como Rtt.w0[0:5], almacenan el estado de entrada 301 y Rtt.w0[8] almacena el bit de MPS de entrada 302. Un segundo registro Rtt.w1 312 del primer par de registros de entrada 310 puede almacenar una bitpos de entrada 303. Por ejemplo, Rtt.w1[0:4] puede almacenar la bitpos de entrada 303.
[0034] Un primer registro Rss.wO 321 del segundo par de registros de entrada 320 puede almacenar una amplitud de entrada 304. Por ejemplo, Rss.w0[0:8] puede almacenar los nueve bits de la amplitud de entrada 304. Un segundo registro Rss.wl 322 del segundo par de registros de entrada 320 puede almacenar un desplazamiento de entrada 305. En un aspecto particular, Rss.w1[0:8] almacena los nueve bits del desplazamiento de entrada 305.
[0035] Un primer registro Rdd.wO 331 del par de registros de salida 330 puede almacenar un estado de salida 308, un bit de MPS de salida 307 y una amplitud de salida 306. Por ejemplo, Rdd.w0[0:5] puede almacenar el estado de salida de 6 bits 308, Rdd.w0[8] puede almacenar el bit de MPS de salida 307 y Rdd.w0[23:31] puede almacenar la amplitud de salida 306. Un segundo registro Rdd.wl 332 del par de registros de salida 331 puede almacenar un desplazamiento de salida 309 de manera normalizada.
[0036] Se apreciará que un procesador puede "empaquetar" los datos de salida para una instrucción de codificación de CABAC dedicada en dos pares de registro de entrada. Cabe destacar que, aunque la instrucción de codificación de CABAC dedicada 360 se ha explicado en el presente documento con referencia a la norma de compresión de vídeo H.264 y/o a la norma de compresión de vídeo H.265, la instrucción de codificación de CABAC dedicada 360 se puede usar en la codificación de otros flujos de bits codificados aritméticamente. Por ejemplo, la instrucción de codificación de CABAC dedicada 360 se puede usar en la codificación de flujos de bits codificados de acuerdo con la norma de compresión de imágenes del Joint Photographic Experts Group 3000 (JPEG3000). Cabe destacar que aunque la FIG.
3 ilustra un registro de predicación, dos pares de registros de entrada y un par de registros de salida, la instrucción de codificación de CABAC dedicada 360 se puede realizar de forma alternativa usando un número y combinación cualesquiera de registros de entrada y salida. Cabe destacar además que aunque la instrucción de codificación CABAC dedicada 360 como se describe en el presente documento utiliza una amplitud de 9 bits y un desplazamiento de 9 bits, dichas longitudes de bits son solo para propósitos ilustrativos. Otros algoritmos de codificación aritmética pueden usar otras longitudes de bits, y las instrucciones de codificación aritmética dedicadas como se describe en el presente documento pueden aceptar como entrada y generar como salida datos de cualquier longitud de bits.
[0037] En referencia a la FIG. 4, se muestra un diagrama de arquitectura de un aspecto ilustrativo particular de la lógica 400 para ejecutar una instrucción de codificación aritmética dedicada. En un aspecto ilustrativo, la instrucción de codificación aritmética dedicada es una instrucción de codificación CABAC H.264. En otro aspecto ilustrativo, la instrucción de codificación aritmética dedicada es una instrucción de codificación CABAC H.265.
[0038] Seis variables de entrada se pueden recuperar y proporcionar a la lógica 400. Por ejemplo, el estado de entrada 301 se puede recuperar a partir del primer registro Rtt.wO 311 del primer par de registros de entrada 310, el bit de MPS de entrada 302 se puede recuperar a partir del primer registro Rtt.wO 311 del primer par de registros de entrada 310, la bitpos de entrada 303 se puede recuperar a partir del segundo registro Rtt.w1 312 del primer par de registros de entrada 310, la amplitud de entrada 304 se puede recuperar a partir del primer registro Rss.wO 321 del segundo par de registros de entrada 320, el desplazamiento de entrada 305 (por ejemplo, bajo) se puede recuperar a partir del segundo registro Rss.wl 322 del segundo par de registros de entrada 320 y el intervalo de entrada 350 se puede recuperar a partir del registro de predicación 340.
[0039] La bitpos de entrada 303 y la amplitud de entrada 304 se pueden proporcionar a un desplazador a la izquierda 443. El desplazador a la izquierda 443 se puede configurar para desplazar la amplitud de entrada 304 en la bitpos de entrada 303. El desplazamiento de la amplitud de entrada 304 en la bitpos de entrada 303 puede generar una amplitud desplazada 445. El estado de entrada 301 se usa como índice en una tabla de búsqueda de constantes de H.264/H.265 de CABAC 422. Se producen cuatro constantes de CABAC 423 como resultado de la operación de índice y se introducen en un multiplexor 4 a 1424 que emite una constante de CABAC seleccionada en base a la amplitud desplazada 445. La constante de CABAC seleccionada puede corresponder a un ancho del LPS (por ejemplo, rLPS 427). La amplitud desplazada 445 y el rLPS 427 se pueden proporcionar a un sustractor 412. El sustractor 412 puede restar el rLPS 427 de la amplitud desplazada 445 (por ejemplo, amplitud - rLPS) para generar un ancho del MPS (por ejemplo, rMPS 448).
[0040] La tabla de búsqueda de constantes de H.264/H.265 de CABAC 422 también puede producir una nueva constante de estado de LPS 425 y una nueva constante de estado de MPS 426. La nueva constante de estado de LPS 425 y la nueva constante de estado de MPS 426 se pueden proporcionar a un multiplexor 2 a 1474. El intervalo de entrada 350 y el bit de MPS de entrada 302 se pueden proporcionar a un comparador 414. El comparador 414 puede determinar si el intervalo de entrada 350 y el bit de MPS de entrada 302 son iguales. En respuesta a una determinación de que el intervalo de entrada 350 y el bit de MPS de entrada 302 son iguales, el comparador 414 genera una señal lógica de alta tensión (por ejemplo, un "1" lógico). En respuesta a una determinación de que el intervalo de entrada 350 y el bit de MPS de entrada 302 no son iguales, el comparador 414 genera una señal lógica de baja tensión (por ejemplo, un "0" lógico). La salida del comparador 414 se proporciona a una puerta lógica Y (AND) 418, a una entrada de control de un multiplexor 2 a 1470, a una entrada de control del multiplexor 2 a 1474 y a la entrada de control de un multiplexor 2 a 1476.
[0041] El desplazamiento de entrada 305 ("bajo") se puede proporcionar al multiplexor 2 a 1470 y a un sumador 449. El rMPS 448 también se puede proporcionar al sumador 449. El sumador 449 se configura para añadir el rMPS 448 con el desplazamiento de entrada 305 y para proporcionar el resultado (por ejemplo, la suma) al multiplexor 2 a 1470. En base a la salida del comparador 414, el multiplexor 2 a 1470 puede emitir el desplazamiento de entrada 305 como el desplazamiento de salida 309 o emitir la suma del desplazamiento de entrada 305 y rMPS 448 como el desplazamiento de salida 309. Por ejemplo, cuando el intervalo de entrada 350 se codifica como un LPS (por ejemplo, el intervalo de entrada 350 no es igual al bit de MPS de entrada 302), el comparador 414 puede proporcionar una señal lógica de alta tensión a la entrada de control del multiplexor 2 a 1470. En respuesta a recibir la señal lógica de alta tensión, el multiplexor 2 a 1470 puede emitir la suma del desplazamiento de entrada 305 y rMPS 448 como el desplazamiento de salida 309 como el desplazamiento de salida 309. Cuando el intervalo de entrada 350 se codifica como un MPS (por ejemplo, el intervalo de entrada 350 es igual al bit de MPS de entrada 302), el comparador 414 puede proporcionar una señal lógica de baja tensión a la entrada de control del multiplexor 2 a 1470. En respuesta a recibir la señal lógica de baja tensión, el multiplexor 2 a 1470 puede emitir el desplazamiento de entrada 305 como el desplazamiento de salida 309.
[0042] El estado de salida 308 puede ser dependiente de la salida del comparador 414. Por ejemplo, cuando el intervalo de entrada 350 se codifica como un LPS (por ejemplo, el intervalo de entrada 350 no es igual al bit de MPS de entrada 302), el comparador 414 puede proporcionar la señal lógica de alta tensión a la entrada de control del multiplexor 2 a 1474. En respuesta a recibir la señal lógica de alta tensión, el multiplexor 2 a 1474 puede emitir la nueva constante de estado de LPS 425 como el estado de salida 308. Cuando el intervalo de entrada 350 se codifica como un MPS (por ejemplo, el intervalo de entrada 350 es igual al bit de MPS de entrada 302), el comparador 414 puede proporcionar la señal lógica de baja tensión a la entrada de control del multiplexor 2 a 1474. En respuesta a recibir la señal lógica de baja tensión, el multiplexor 2 a 1474 puede emitir la nueva constante de estado de MPS 426 como el estado de salida 308.
[0043] La amplitud de salida 306 puede ser dependiente de la salida del comparador 414. Por ejemplo, cuando el intervalo de entrada 350 se codifica como un LPS (por ejemplo, el intervalo de entrada 350 no es igual al bit de MPS de entrada 302), el comparador 414 puede proporcionar la señal lógica de alta tensión a la entrada de control del multiplexor 2 a 1476. En respuesta a recibir la señal lógica de alta tensión, el multiplexor 2 a 1476 puede emitir rLPS 427 como la amplitud de salida 306. Cuando el intervalo de entrada 350 se codifica como un MPS (por ejemplo, el intervalo de entrada 350 es igual al bit de MPS de entrada 302), el comparador 414 puede proporcionar una señal lógica de baja tensión a la entrada de control del multiplexor 2 a 1476. En respuesta a recibir la señal lógica de baja tensión, el multiplexor 2 a 1476 puede emitir rMPS 448 como la amplitud de salida 306.
[0044] El estado de entrada 301 también se puede proporcionar a un inversor 420. El inversor 420 se puede configurar para invertir el estado de entrada 301 y proporcionar el resultado a la puerta lógica Y 418. Cuando la salida del comparador 414 y la salida del inversor 420 corresponden a señales lógicas de alta tensión (por ejemplo, cuando el intervalo de entrada 350 equivale al bit de MPS de entrada 302 y el estado de entrada 301 es un "0" lógico), la puerta lógica Y 418 puede proporcionar una señal lógica de alta tensión a la entrada de control del multiplexor 2 a 1472. El estado de entrada 301 ilustrado en la FIG. 4 es un "0" lógico (por ejemplo, "==0"). Sin embargo, el estado de entrada 301 también puede ser un "1" lógico (por ejemplo, "==1"). Si el intervalo de entrada 350 no equivale al bit de MPS de entrada y/o si el estado de entrada 301 es un "1" lógico, la puerta lógica Y 418 puede proporcionar una señal lógica de baja tensión a la entrada de control del multiplexor 2 a 1472.
[0045] El bit de MPS de entrada 302 se puede proporcionar al multiplexor 2 a 1472. El bit de MPS de entrada 302 también se puede invertir por un inversor 416. La salida del inversor (por ejemplo, el bit de MPS de entrada invertido) se puede proporcionar al multiplexor 2 a 1472. El bit de MPS de salida 307 puede depender de la salida de la puerta lógica Y 418. Por ejemplo, cuando la puerta lógica Y 418 proporciona la señal lógica de alta tensión a la entrada de control del multiplexor 2 a 1472 (por ejemplo, cuando el intervalo de entrada 350 equivale al bit de MPS de entrada 302 y el estado de entrada 301 es un "0" lógico), el multiplexor 2 a 1472 emite el bit de MPS de entrada invertido como el bit de MPS de salida 302. De otro modo, el multiplexor 2 a 1472 emite el bit de MPS de entrada 302 como el bit de MPS de salida 307.
[0046] Se apreciará que debido a que muchos procesadores incluyen un desplazador, la lógica 400 de la FIG. 4 se puede implementar en dichos procesadores almacenando la tabla de búsqueda de constantes 422 y añadiendo unos pocos elementos de circuito, tales como comparadores, sumadores, inversores y multiplexores. Por tanto, se puede configurar un procesador para ejecutar una instrucción de codificación aritmética dedicada implementando la lógica 400 de la FIG. 4 sin requerir cambios sustanciales en el procesador.
[0047] En referencia a la FIG. 5, un diagrama de flujo 500 ilustra un procedimiento para volver a normalizar una amplitud y un desplazamiento. El desplazamiento puede corresponder a bits en el segundo registro Rdd.wl 332 del par de registros de salida 331. Por ejemplo, el segundo registro Rdd.wl 332 puede almacenar ocho bits (por ejemplo, un primer octeto low.ub[0]) en una primera porción ub[0], almacenar un segundo octeto low.ub[1] en una segunda porción ub[1], almacenar un tercer octeto low.ub[2] en una tercera porción ub[2] y almacenar un cuarto octeto low.ub[3] en una cuarta porción ub[3]. Los octetos almacenados en el segundo registro Rdd.wl 332 pueden corresponder al desplazamiento de salida 309.
[0048] Como se explica con respecto a la FIG. 2, la amplitud y el desplazamiento se pueden volver a normalizar cuando un valor de la amplitud desciende por debajo de un umbral. Por ejemplo, una amplitud representada por un número binario de 9 bits se puede volver a normalizar cuando un bit más significativo (MSB) de la amplitud es cero (por ejemplo, la amplitud es menor que el "100000000" binario). En referencia a la FIG. 5, un procesador (por ejemplo, el procesador 110 de la FIG. 1) puede determinar si la amplitud de salida 306 es menor que el valor hexadecimal 0x100 (por ejemplo, menos de 256), en 502. Si la amplitud de salida 306 no es menor que el valor hexadecimal 0x100, no es necesario que el desplazamiento de salida 309 y la amplitud de salida 309 se vuelvan a normalizar y el proceso finaliza, en 504.
[0049] Si la amplitud de salida 306 es menor que el valor hexadecimal 0x100, el procesador puede determinar si el segundo octeto low.ub[1] almacenado en la segunda porción ub[1] del tercer registro Rdd.wl 332 es igual al valor hexadecimal 0xFF (por ejemplo, 255), en 506. Por ejemplo, el procesador puede determinar si cada bit del segundo octeto low.ub[1] es un bit "1" lógico. En respuesta a una determinación de que el segundo octeto low.ub[1] es igual al valor hexadecimal 0xFF, se puede incrementar el número de octetos almacenados en búfer (por ejemplo, octetos que se van a escribir en un flujo de bits de salida), en 508. A continuación, el procesador puede desplazar el primer octeto low.ub[0] a la segunda porción ub[1], cargar el valor hexadecimal 0x00 en la primera porción ub[0] y desplazar la amplitud de salida 306 a la izquierda en ocho bits, en 510. El procedimiento puede terminar en 504.
[0050] En respuesta a una determinación, en 506, de que el segundo octeto low.ub[1] no es igual al valor hexadecimal 0xFF, el procesador puede determinar si el número de octetos almacenados en búfer es mayor que cero, en 512. En respuesta a una determinación de que el número de octetos almacenados en búfer es mayor que cero, el procesador puede introducir el cuarto octeto low.ub[3] en el flujo de bits, en 518. Por ejemplo, el procesador puede transmitir el cuarto octeto low.ub[3] a un descodificador como un flujo de bits codificado. El procesador puede determinar si el número de octetos almacenados en búfer es mayor que uno, en 520. En respuesta a una determinación de que el número de octetos almacenados en búfer es mayor que uno, el procesador puede introducir el tercer octeto low.ub[2] en el flujo de bits, en 522, y puede disminuir el número de octetos almacenados en búfer, en 524. Las operaciones en 520-524 pueden continuar mientras el número de octetos almacenados en búfer sea mayor que uno. En respuesta a una determinación de que el número de octetos almacenados en búfer no es mayor que uno, en 520, el procesador puede desplazar el segundo octeto low.ub[1] a la cuarta porción ub[3] y desplazar el valor hexadecimal 0xFF a la tercera porción ub[2], en 516. A continuación, el procesador puede desplazar el primer octeto low.ub[0] a la segunda porción ub[1], cargar el valor hexadecimal 0x00 en la primera porción ub[0] y desplazar la amplitud de salida 306 a la izquierda en ocho bits, en 510. Después de esto, el procedimiento puede terminar, en 504.
[0051] En respuesta a una determinación, en 512, de que el número de octetos almacenados en búfer no es mayor que cero, el procesador puede establecer el número de octetos almacenados en búfer en uno, en 514. Seguidamente, el procesador puede desplazar el segundo octeto low.ub[1 ] a la cuarta porción ub[3] y desplazar el valor hexadecimal 0xFF a la tercera porción ub[2], en 516. A continuación, el procesador puede desplazar el primer octeto low.ub[0] a la segunda porción ub[1], cargar el valor hexadecimal 0x00 en la primera porción ub[0] y desplazar la amplitud de salida 306 a la izquierda en ocho bits (por ejemplo, un octeto), en 510. El procedimiento puede terminar en 504.
[0052] El diagrama de flujo 500 de la FIG. 5 puede evitar la necesidad de verificar el bit portador del desplazamiento de salida 309 y la necesidad de derivar si se debe escribir un "0" lógico o un "1" lógico en el flujo de bits. Por ejemplo, si hay algún portador que se genera cuando se actualiza el desplazamiento de salida 309 durante la ejecución de la instrucción de codificación aritmética dedicada 360, el portador se puede propagar automáticamente al cuarto octeto low.ub[3] (por ejemplo, el octeto más significativo) por medio del tercer octeto low.ub[2]. El diagrama de flujo 500 también puede reducir una tasa de recurrencia de nueva normalización introduciendo selectivamente (por ejemplo, escribiendo) múltiples octetos en el flujo de bits en base a un número de octetos almacenados en búfer.
[0053] En referencia a la FIG. 6, se muestra un diagrama de flujo de un aspecto ilustrativo particular de un procedimiento 600 de ejecución de una instrucción de codificación aritmética dedicada. En un aspecto ilustrativo, el procedimiento 600 se puede realizar por el procesador 110 de la FIG. 1 o por la lógica 400 de la FIG. 4.
[0054] El procedimiento 600 incluye ejecutar, en un procesador, una instrucción de codificación aritmética binaria adaptativa al contexto (CABAC) dedicada, en 602. Por ejemplo, el procesador 110 puede ejecutar una o más instrucciones de codificación aritmética dedicadas, tales como la instrucción de codificación aritmética dedicada 202, 222 o la instrucción de codificación aritmética dedicada 360. Las instrucciones de codificación aritmética dedicadas 202, 222, 360 pueden aceptar como entrada el estado de entrada 301 (por ejemplo, una primera etapa), el bit de MPS de entrada 302, la posición de bit (bitpos) de entrada 303, la amplitud de entrada 304 (por ejemplo, una primera amplitud), el desplazamiento de entrada 305 (por ejemplo, un primer desplazamiento) y el intervalo de entrada 350.
[0055] El procedimiento 600 también puede incluir, en base a una o más salidas de la instrucción de codificación CABAC dedicada, almacenar un segundo estado, realinear la primera amplitud para producir una segunda amplitud y realinear el primer desplazamiento para producir un segundo desplazamiento, en 604. Por ejemplo, la ejecución de la instrucción de codificación aritmética dedicada puede generar el desplazamiento de salida 309 (por ejemplo, el segundo desplazamiento), el bit de MPS de salida 307, el estado de salida 308 (por ejemplo, el segundo estado) y la amplitud de salida 306 (por ejemplo, la segunda amplitud). En referencia a la FIG. 3, el bit de MPS de salida 307 se puede almacenar en el primer registro Rdd.wO 331 del par de registros de salida 330, la amplitud de entrada 304 en el primer registro Rss.wO 321 del segundo par de registros de entrada 320 se puede realinear en el primer registro Rdd.wO 331 del par de registros de salida 330, y el desplazamiento de entrada 305 en el segundo registro Rss.wl 322 del segundo par de registros de entrada 320 se puede realinear en el segundo registro Rdd.wl 332 del par de registros de salida 330.
[0056] El procedimiento 600 de la FIG. 6 puede posibilitar la ejecución de instrucciones de codificación aritmética dedicadas (por ejemplo, mientras se codifican flujos de vídeo). Los procesadores configurados para ejecutar instrucciones de codificación aritmética dedicadas (por ejemplo, el procesador 110) pueden codificar flujos de vídeo más rápido que los procesadores que ejecutan un algoritmo de codificación de vídeo (por ejemplo, CABAC) usando múltiples instrucciones de propósito general. Por ejemplo, la capacidad de ejecutar una instrucción de codificación aritmética dedicada puede posibilitar que un procesador realice operaciones de codificación complejas y que consumen mucho tiempo en menos ciclos de ejecución que usando instrucciones de propósito general.
[0057] La FIG. 7 es un diagrama de bloques de un dispositivo inalámbrico 700. Una memoria 732 dentro del dispositivo inalámbrico 700 incluye instrucciones de propósito general 752 y una instrucción de codificación aritmética dedicada 754. El dispositivo inalámbrico 700 incluye un procesador 710, tal como un procesador de señales digitales, acoplado a la memoria 732. En un aspecto ilustrativo, el procesador 710 puede incluir el procesador 110 de la FIG. 1, y la memoria 732 puede incluir la memoria 120 de la FIG. 1. La memoria 732 puede ser un medio de almacenamiento legible por ordenador.
[0058] En un aspecto particular, las instrucciones de propósito general 752 y la instrucción de codificación aritmética dedicada 754 se usan en una aplicación de codificación o algún otro software de codificación que se almacena en la memoria 732. Por ejemplo, las instrucciones de propósito general 752 y la instrucción de codificación aritmética dedicada 754 se pueden usar en una aplicación de codificación CABAC que se usa para codificar vídeo. El dispositivo inalámbrico 700 también incluye lógica 712 para ejecutar la instrucción de codificación aritmética dedicada 754. En un aspecto ilustrativo, la lógica 712 incluye la lógica 400 de la FIG.4. En un aspecto particular, la lógica 712 es una unidad de ejecución del procesador 710 que se configura para ejecutar instrucciones de propósito general 752 y la instrucción de codificación aritmética dedicada 754.
[0059] En un aspecto particular, la instrucción de codificación aritmética dedicada 754 es una única instrucción. En un aspecto particular, las instrucciones de propósito general 752 y la instrucción de codificación aritmética dedicada 754 posibilitan que el dispositivo inalámbrico 700 codifique un flujo de vídeo codificado con CABAC compatible con H.264 o un flujo de vídeo codificado con CABAC compatible con H.265. La lógica 712 se emplea por el procesador 710 para ejecutar la instrucción de codificación aritmética dedicada 754. En un aspecto particular, ejecutar la instrucción de codificación aritmética dedicada 754 incluye recuperar, procesar y almacenar datos como se describe en el presente documento con respecto a la FIG. 4.
[0060] La FIG. 7 también muestra un controlador de pantalla 726 opcional que está acoplado al procesador 710 y a una pantalla 728. También se puede acoplar un codificador/descodificador (CÓDEC) 734 al procesador de señales digitales 710. Se pueden acoplar un altavoz 736 y un micrófono 738 al CÓDEC 734. La FIG. 7 también indica que se puede acoplar un controlador inalámbrico 740 al procesador 710 y a una antena 742. En un aspecto particular, el procesador 710, el controlador de pantalla 726, la memoria 732, el CÓDEC 734 y el controlador inalámbrico 740 están incluidos en un dispositivo de sistema en paquete o de sistema en chip 722. En un aspecto particular, un dispositivo de entrada 730 y una fuente de alimentación 744 están acoplados al dispositivo de sistema en chip 722. Además, en un aspecto particular, como se ilustra en la FIG. 7, la pantalla 728, el dispositivo de entrada 730, el altavoz 736, el micrófono 738, la antena 742 y la fuente de alimentación 744 son externos al dispositivo de sistema en chip 722. Sin embargo, cada uno se puede acoplar a un componente del dispositivo de sistema en chip 722, tal como por medio de una interfaz o un controlador. En un aspecto ilustrativo, el dispositivo inalámbrico 700 es un teléfono móvil, un teléfono inteligente o un asistente digital personal (PDA). Por tanto, el dispositivo inalámbrico 700 puede codificar un flujo de vídeo y transmitir el flujo de vídeo codificado por medio de la antena 742. El flujo de vídeo se puede codificar usando las instrucciones de propósito general 752 y una o más de las instrucciones de codificación aritmética dedicadas 754 ejecutadas por la lógica 712 del procesador 710.
[0061] Cabe destacar que, aunque la FIG. 7 representa el dispositivo inalámbrico 700, la lógica 712, las instrucciones de propósito general 752 y la instrucción de codificación aritmética dedicada 754 se pueden incluir de forma alternativa en otros dispositivos, tales como un descodificador, un reproductor de música, un reproductor de vídeo, una unidad de entretenimiento, un dispositivo de navegación, un dispositivo de comunicaciones, una unidad de datos de localización fija o un ordenador.
[0062] En relación con los aspectos descritos, se divulga un aparato que incluye medios para almacenar instrucciones de propósito general y una instrucción de codificación aritmética dedicada. Por ejemplo, los medios para almacenar pueden incluir la memoria 120 de la FIG. 1, la memoria 732 de la FIG. 7, uno o más de otros dispositivos, circuitos o módulos para almacenar instrucciones de propósito general y una instrucción de codificación aritmética dedicada, o cualquier combinación de los mismos.
[0063] El aparato también puede incluir medios para ejecutar las instrucciones de propósito general y la instrucción de codificación aritmética dedicada. Por ejemplo, los medios para ejecutar pueden incluir el procesador 110 de la FIG.
1, la lógica de ejecución de instrucción de propósito general 112 de la FIG. 1, la lógica de ejecución de instrucción de codificación aritmética dedicada 114 de la FIG. 1, el registro de predicación 340 de la FIG. 3, el primer par de registros de entrada 310 de la FIG. 3, el segundo par de registros de entrada 320 de la FIG. 3, el par de registros de salida 330 de la FIG. 3, la lógica 400 de la FIG. 4, el procesador 710 de la FIG. 7, la lógica 712 para ejecutar instrucciones de codificación aritmética dedicadas 754 de la FIG. 7, uno o más de otros dispositivos, circuitos o módulos para ejecutar las instrucciones de propósito general y la instrucción de codificación aritmética dedicada, o cualquier combinación de los mismos.
[0064] Los expertos apreciarán además que los diversos bloques lógicos, configuraciones, módulos, circuitos y etapas de algoritmo ilustrativos descritos en relación con los aspectos divulgados en el presente documento se pueden implementar como hardware electrónico, software informático ejecutado por un procesador o combinaciones de ambos. Se han descrito anteriormente diversos componentes, bloques, configuraciones, módulos, circuitos y etapas ilustrativos, en general en términos de su funcionalidad. Que dicha funcionalidad se implemente como hardware o instrucciones ejecutables por procesador depende de la aplicación particular y de las restricciones de diseño impuestas al sistema global. Los expertos pueden implementar la funcionalidad descrita de formas variadas para cada aplicación particular, pero no se debe interpretar que dichas decisiones de implementación suponen apartarse del alcance de la presente divulgación.
[0065] Las etapas de un procedimiento o algoritmo descritas en relación con los aspectos divulgados en el presente documento se pueden realizar directamente en hardware, en un módulo de software ejecutado por un procesador o en una combinación de los dos. Un módulo de software puede residir en una memoria de acceso aleatorio (RAM), memoria flash, memoria de solo lectura (ROM), memoria de solo lectura programable (PROM), memoria de solo lectura programable y borrable (EPROM), memoria de solo lectura programable y borrable eléctricamente (EEPROM), registros, un disco duro, un disco extraíble, un disco compacto con memoria de solo lectura (CD-ROM) o en cualquier otra forma de medio de almacenamiento no transitorio conocido en la técnica. Un medio de almacenamiento ejemplar está acoplado al procesador de modo que el procesador puede leer información de, y escribir información en, el medio de almacenamiento. Como alternativa, el medio de almacenamiento puede estar integrado en el procesador. El procesador y el medio de almacenamiento pueden residir en un circuito integrado específico de la aplicación (ASIC). El ASIC puede residir en un dispositivo informático o en un terminal de usuario. Como alternativa, el procesador y el medio de almacenamiento pueden residir como componentes discretos en un dispositivo informático o en un terminal de usuario.
[0066] La descripción previa de los aspectos divulgados se proporciona para posibilitar que una persona experta en la técnica haga o use los aspectos divulgados. Diversas modificaciones a estos aspectos resultarán evidentes para los expertos en la técnica, y los principios definidos en el presente documento se pueden aplicar a otros aspectos sin apartarse del alcance de las siguientes reivindicaciones.

Claims (15)

REIVINDICACIONES
1. Un aparato (100) adaptado para codificar flujos de vídeo usando un esquema de codificación de codificación aritmética binaria adaptativa al contexto, CABAc , que comprende:
una memoria (120);
un registro de predicación (340) configurado para almacenar un valor de intervalo de entrada (350); y un procesador (110) acoplado a la memoria,
el procesador configurado para:
ejecutar una instrucción dedicada de codificación aritmética binaria adaptativa al contexto, CABAC, (202, 222), en la que la instrucción de codificación CABAC se configura para aceptar una pluralidad de entradas que incluyen una primera amplitud (304), un primer desplazamiento (305) y un primer estado (301) y para producir una o más salidas en base a la pluralidad de entradas, y en las que un valor de al menos una salida de la una o más salidas se calcula en base al valor de intervalo de entrada (350);
haciendo la instrucción de codificación CABAC que el procesador:
determine, en un comparador (414), un primer valor de salida de comparador en base a una comparación entre un primer valor de entrada de comparador y un segundo valor de entrada de comparador, en el que el primer valor de entrada de comparador se basa en un bit de símbolo más probable, MPS, de entrada (302) almacenado en un primer par de registros de entrada (310), y en el que el segundo valor de entrada de comparador se basa en el valor de intervalo de entrada (350); realice una nueva normalización en la primera amplitud y el primer desplazamiento para generar uno o más valores de la primera amplitud que sean mayores que o iguales a un umbral; y en base a la una o más salidas de la instrucción de codificación CABAC, incluyendo la salida del comparador, la instrucción de codificación CABAC hace que el procesador:
almacene un segundo estado (308);
realinee la primera amplitud para producir una segunda amplitud (306);
realinee el primer desplazamiento para producir un segundo desplazamiento (309).
2. El aparato de la reivindicación 1, en el que la instrucción de codificación CABAC es ejecutable por el procesador para codificar un flujo de vídeo usando un esquema de codificación de entropía, y en el que el esquema de codificación por entropía es CABAC.
3. El aparato de la reivindicación 2, en el que el primer estado incluye bits de estado de CABAC, en el que la primera amplitud incluye bits de amplitud de CABAC, en el que el primer desplazamiento incluye bits de desplazamiento de CABAC, en el que la pluralidad de entradas incluye además un bit de MPS de CABAc , posición de bit, bitpos, de CABAC, bits y un valor de intervalo de entrada, y que comprende además un primer par de registros de entrada y un segundo par de registros de entrada, en el que el procesador se configura además para:
recuperar bits de estado de CABAC y el bit de MPS de CABAC a partir de un primer registro del primer par de registros de entrada;
recuperar los bits de bitpos de CABAC a partir de un segundo registro del primer par de registros de entrada; recuperar los bits de amplitud de CABAC a partir de un tercer registro del segundo par de registros de entrada; recuperar los bits de desplazamiento de CABAC a partir de un cuarto registro del segundo par de registros de entrada; y
recuperar el valor de intervalo de entrada a partir del registro de predicación.
4. El aparato de la reivindicación 2, en el que el segundo estado incluye bits de estado de CABAC, en el que la segunda amplitud incluye bits de amplitud de CABAC, en el que el segundo desplazamiento incluye bits de desplazamiento de CABAC, en el que la instrucción de codificación de CABAC genera un bit de MPS de CABAC y comprende además un par de registros de salida, en el que el procesador se configura además para: almacenar los bits de estado de CABAC, el bit de MPS de CABAC y los bits de amplitud de CABAC en un primer registro del par de registros de salida; y
almacenar los bits de desplazamiento de CABAC de manera normalizada en un segundo registro del par de registros de salida.
5. El aparato de la reivindicación 1, en el que la instrucción de codificación de CABAC es ejecutable por el procesador sin separar la instrucción de codificación de CABAC en una o más instrucciones de propósito general, y en el que la lógica configurada para ejecutar la una o más instrucciones de propósito general y la lógica configurada para ejecutar la instrucción de codificación CABAC corresponden a una unidad de ejecución común del procesador.
6. El aparato de la reivindicación 1, en el que la instrucción de codificación CABAC es una única instrucción de un conjunto de instrucciones del procesador que se puede ejecutar en menos de tres ciclos de ejecución, y en el que el procesador comprende un procesador de palabra de instrucción muy larga, VLIW, de subprocesos múltiples en cadena.
7. Un procedimiento para codificar flujos de vídeo usando un esquema de codificación de codificación aritmética binaria adaptativa al contexto, CABAC, que comprende:
almacenar un valor de intervalo de entrada (350) en un registro de predicación (340);
ejecutar, en un procesador (110), una instrucción dedicada de codificación aritmética binaria adaptativa al contexto, CABAC, (202, 222), en la que la instrucción de codificación CABAC acepta una pluralidad de entradas que incluyen una primera amplitud (304), un primer desplazamiento (305) y un primer estado (301) y produce una o más salidas en base a la pluralidad de entradas, y en el que un valor de al menos una salida de la una o más salidas se calcula en base al valor de intervalo de entrada (350);
haciendo la instrucción de codificación CABAC que el procesador:
determine, en un comparador (414), un primer valor de salida de comparador en base a una comparación entre un primer valor de entrada de comparador (302) y un segundo valor de entrada de comparador (350), en el que el primer valor de entrada de comparador se basa en un bit de símbolo más probable, MPS, de codificación aritmética binaria adaptativa al contexto, CABAC, almacenado en un primer par de registros de entrada (310), y en el que el segundo valor de entrada de comparador se basa en el valor de intervalo de entrada; realice una nueva normalización en la primera amplitud (304) y el primer desplazamiento (305) para generar uno o más valores de la primera amplitud que sean mayores que o iguales a un umbral; y
en base a la una o más salidas de la instrucción de codificación CABAC que incluye la salida de comparador, almacene un segundo estado (308), realinee la primera amplitud vuelta a normalizar para producir una segunda amplitud (306) y realinee el primer desplazamiento vuelto a normalizar para producir un segundo desplazamiento (309).
8. El procedimiento de la reivindicación 7, en el que ejecutar la instrucción de codificación CABAC comprende: proporcionar la primera amplitud a un desplazador; y
usar el primer estado como un valor de búsqueda de índice para una tabla de búsqueda de aritmética binaria adaptativa al contexto (CABAC), en la que la tabla de búsqueda de CABAC se codifica directamente o se puede volver a escribir.
9. El procedimiento de la reivindicación 7, que comprende además:
realizar una nueva normalización en el segundo desplazamiento independientemente de un bit portador del segundo desplazamiento;
introducir múltiples octetos del segundo desplazamiento en un flujo de bits; y
transmitir el flujo de bits a un descodificador.
10. Un medio no transitorio legible por ordenador que comprende una instrucción de codificación aritmética binaria adaptativa al contexto, CABAC, dedicada (202, 222) que cuando se ejecuta en un aparato de acuerdo con cualquiera de las reivindicaciones 1-6, 11-15 lleva a cabo un procedimiento de acuerdo con cualquiera de las reivindicaciones 7-9.
11. El aparato de la reivindicación 1, que comprende además:
un primer par de registros de entrada configurado para almacenar el primer estado, un bit de MPS de CABAC, posición de bit, bitpos, de CABAC, bits o una combinación de los mismos; y
un segundo par de registros de entrada configurado para almacenar la primera amplitud, el primer desplazamiento o una combinación de los mismos, en el que el primer estado incluye bits de estado de CABAC, la primera amplitud incluye bits de amplitud de CABAC y el primer desplazamiento incluye bits de desplazamiento de CABAC.
12. El aparato de la reivindicación 1, en el que el comparador se configura además para:
recibir el primer valor de entrada de comparador, basado el primer valor de entrada de comparador en el bit de MPS de CABAC almacenado en el primer par de registros de entrada; y
recibir el segundo valor de entrada de comparador.
13. El aparato de la reivindicación 12, que comprende además un inversor configurado para:
recibir un valor de entrada de inversor, basado el valor de entrada de inversor en los bits de estado de CABAC del primer par de registros de entrada; y
generar un primer valor de salida de inversor en base al valor de entrada de inversor.
14. El aparato de la reivindicación 1, que comprende además una puerta lógica configurada para:
recibir el primer valor de salida de comparador desde un comparador;
recibir un primer valor de salida de inversor desde un inversor, basado el primer valor de salida de inversor en el primer estado; y
determinar un valor de salida de puerta lógica en base al primer valor de salida de comparador y el primer valor de salida de inversor.
15. El aparato de la reivindicación 1, que comprende además una puerta lógica configurada para determinar un valor de salida de puerta lógica en base al primer valor de salida de comparador y un primer valor de salida de inversor, en el que el primer valor de salida de comparador se basa en la comparación entre el primer valor de entrada de comparador y el segundo valor de entrada de comparador, y en el que el primer valor de salida de inversor se basa en el primer estado.
ES15724831T 2014-05-27 2015-04-30 Instrucción de codificación aritmética dedicada Active ES2826425T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/288,018 US9455743B2 (en) 2014-05-27 2014-05-27 Dedicated arithmetic encoding instruction
PCT/US2015/028443 WO2015183462A1 (en) 2014-05-27 2015-04-30 Dedicated arithmetic encoding instruction

Publications (1)

Publication Number Publication Date
ES2826425T3 true ES2826425T3 (es) 2021-05-18

Family

ID=53267582

Family Applications (1)

Application Number Title Priority Date Filing Date
ES15724831T Active ES2826425T3 (es) 2014-05-27 2015-04-30 Instrucción de codificación aritmética dedicada

Country Status (10)

Country Link
US (1) US9455743B2 (es)
EP (1) EP3149947B1 (es)
JP (1) JP6695813B2 (es)
KR (1) KR102296153B1 (es)
CN (1) CN106415484B (es)
BR (1) BR112016027558B1 (es)
CA (1) CA2947856A1 (es)
ES (1) ES2826425T3 (es)
TW (1) TWI669945B (es)
WO (1) WO2015183462A1 (es)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104394418B (zh) * 2014-09-23 2018-06-05 清华大学 一种视频数据编码、解码的方法及装置

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0586057B1 (en) * 1992-08-31 2000-03-01 Sun Microsystems, Inc. Rapid instruction (pre)fetching and dispatching using prior (pre)fetch predictive annotations
US7769088B2 (en) * 2003-05-28 2010-08-03 Broadcom Corporation Context adaptive binary arithmetic code decoding engine
US7061410B1 (en) * 2005-07-18 2006-06-13 Lsi Logic Corporation Method and/or apparatus for transcoding between H.264 CABAC and CAVLC entropy coding modes
CN100466739C (zh) * 2005-10-12 2009-03-04 华为技术有限公司 Cabac解码系统及方法
US7656326B2 (en) 2006-06-08 2010-02-02 Via Technologies, Inc. Decoding of context adaptive binary arithmetic codes in computational core of programmable graphics processing unit
TWI348653B (en) * 2006-06-08 2011-09-11 Via Tech Inc Decoding of context adaptive binary arithmetic codes in computational core of programmable graphics processing unit
US8749409B2 (en) 2006-08-25 2014-06-10 Sony Computer Entertainment Inc. Entropy decoding methods and apparatus using most probable and least probable signal cases
US7561082B2 (en) 2006-12-29 2009-07-14 Intel Corporation High performance renormalization for binary arithmetic video coding
CN100531386C (zh) * 2007-06-15 2009-08-19 上海富瀚微电子有限公司 一种上下文自适应二进制算术编码器及其方法
US7839311B2 (en) * 2007-08-31 2010-11-23 Qualcomm Incorporated Architecture for multi-stage decoding of a CABAC bitstream
US8782379B2 (en) * 2007-09-27 2014-07-15 Qualcomm Incorporated H.264 video decoder CABAC core optimization techniques
US7777654B2 (en) * 2007-10-16 2010-08-17 Industrial Technology Research Institute System and method for context-based adaptive binary arithematic encoding and decoding
US7932843B2 (en) * 2008-10-17 2011-04-26 Texas Instruments Incorporated Parallel CABAC decoding for video decompression
US7982641B1 (en) 2008-11-06 2011-07-19 Marvell International Ltd. Context-based adaptive binary arithmetic coding engine
US8638850B2 (en) * 2009-05-06 2014-01-28 Advanced Micro Devices, Inc. Execution units for context adaptive binary arithmetic coding (CABAC)
US20110125987A1 (en) 2009-11-20 2011-05-26 Qualcomm Incorporated Dedicated Arithmetic Decoding Instruction
US8913662B2 (en) * 2011-01-06 2014-12-16 Qualcomm Incorporated Indicating intra-prediction mode selection for video coding using CABAC
WO2013050612A1 (en) 2011-10-06 2013-04-11 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Entropy coding buffer arrangement
US10289412B2 (en) * 2012-02-09 2019-05-14 Qualcomm Incorporated Floating point constant generation instruction

Also Published As

Publication number Publication date
EP3149947B1 (en) 2020-07-22
TW201607294A (zh) 2016-02-16
JP2017525005A (ja) 2017-08-31
JP6695813B2 (ja) 2020-05-20
TWI669945B (zh) 2019-08-21
EP3149947A1 (en) 2017-04-05
WO2015183462A1 (en) 2015-12-03
US20150349796A1 (en) 2015-12-03
BR112016027558A2 (es) 2017-08-15
KR20170013222A (ko) 2017-02-06
US9455743B2 (en) 2016-09-27
CN106415484A (zh) 2017-02-15
CN106415484B (zh) 2019-02-01
KR102296153B1 (ko) 2021-08-30
BR112016027558B1 (pt) 2023-03-14
CA2947856A1 (en) 2015-12-03

Similar Documents

Publication Publication Date Title
JP5006451B2 (ja) 最適cabac復号器
JP5313362B2 (ja) 可変長固定長コードの高速パーシング
JP4976553B2 (ja) Cabacビットストリームの多段復号のためのアーキテクチャ
KR102280943B1 (ko) 오디오/비디오 샘플 벡터의 피라미드 벡터 양자화 인덱싱 및 디인덱싱을 위한 방법 및 장치
US10187081B1 (en) Dictionary preload for data compression
US8094048B2 (en) Method of decoding syntax element in context-based adaptive binary arithmetic coding decoder and decoding device therefor
TWI360956B (en) Cabac decoding apparatus and decoding method there
JP2021527376A (ja) データ圧縮
Collet RFC 8878: Zstandard Compression and the'application/zstd'Media Type
ES2826425T3 (es) Instrucción de codificación aritmética dedicada
US20110125987A1 (en) Dedicated Arithmetic Decoding Instruction
KR101030726B1 (ko) 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치
WO2020095706A1 (ja) 符号化装置、復号装置、符号列のデータ構造、符号化方法、復号方法、符号化プログラム、復号プログラム
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
US20130042091A1 (en) BIT Splitting Instruction
TW201440046A (zh) 解壓縮電路與相關的壓縮方法與解壓縮方法
KR100686354B1 (ko) 가변 트리를 이용한 허프만 복호화 방법 및 장치
TW202418807A (zh) 非疊代的熵編碼
JP2021064900A (ja) 情報処理装置、情報処理方法及びプログラム
Zhao Lossless audio data compression
BRPI0806178A2 (pt) método e aparato para compressão e descompressão de sinais digitais