BR112015025478B1 - Métodos e aparelhos de codificação e de decodificação de dados, aparelho de armazenamento e/ou exibição, transmissão, captura de dados de vídeo, e, meio de armazenamento não transitório legível por computador - Google Patents

Métodos e aparelhos de codificação e de decodificação de dados, aparelho de armazenamento e/ou exibição, transmissão, captura de dados de vídeo, e, meio de armazenamento não transitório legível por computador Download PDF

Info

Publication number
BR112015025478B1
BR112015025478B1 BR112015025478-0A BR112015025478A BR112015025478B1 BR 112015025478 B1 BR112015025478 B1 BR 112015025478B1 BR 112015025478 A BR112015025478 A BR 112015025478A BR 112015025478 B1 BR112015025478 B1 BR 112015025478B1
Authority
BR
Brazil
Prior art keywords
data
value
significant
values
encoding
Prior art date
Application number
BR112015025478-0A
Other languages
English (en)
Other versions
BR112015025478A2 (pt
Inventor
David Berry
James Alexander Gamei
Nicholas Ian Saunders
Karl James Sharman
Original Assignee
Sony Corporation
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 Sony Corporation filed Critical Sony Corporation
Publication of BR112015025478A2 publication Critical patent/BR112015025478A2/pt
Publication of BR112015025478B1 publication Critical patent/BR112015025478B1/pt

Links

Images

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/3068Precoding preceding compression, e.g. Burrows-Wheeler transformation
    • 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]
    • 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/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • 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/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • 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/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4068Parameterized codes
    • 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/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4081Static prefix coding
    • 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/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4087Encoding of a tuple of symbols
    • 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/124Quantisation
    • 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/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/18Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a set of transform coefficients
    • 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/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
    • 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/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/625Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • H04N19/64Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets characterised by ordering of coefficients or of bits for transmission
    • H04N19/647Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets characterised by ordering of coefficients or of bits for transmission using significance based coding, e.g. Embedded Zerotrees of Wavelets [EZW] or Set Partitioning in Hierarchical Trees [SPIHT]
    • 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
    • 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
    • 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/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
    • 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]
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • H04N19/463Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
    • 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/93Run-length coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Image Processing (AREA)

Abstract

MÉTODOS E APARELHOS DE CODIFICAÇÃO E DE DECODIFICAÇÃO DE DADOS, APARELHO DE ARMAZENAMENTO E/OU EXIBIÇÃO, TRANSMISSÃO, CAPTURA DE DADOS DE VÍDEO, E, MEIO DE ARMAZENAMENTO NÃO TRANSITÓRIO LEGÍVEL POR COMPUTADOR. Método de codificação de dados para codificar um arranjo de valores de dados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape compreendendo uma porção codificada unária e uma porção codificada não unária compreende as etapas de: estabelecer um parâmetro de codificação definindo um número mínimo de bits de uma porção codificada não unária, o parâmetro de codificação estando entre 0 e um limite superior predeterminado; adicionar um valor de compensação de 1 ou mais para o parâmetro de codificação de modo a definir um tamanho mínimo de porção de dados menos significantes; gerar um ou mais conjuntos de dados indicativos de posições, relativo ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a codificar o valor de pelo menos um bit menos significante de cada valor de dados; gerar, de pelo menos a parte de cada valor de dados não codificados por pelo um ou mais conjuntos de dados, respectivas porções (...).

Description

Campo da Invenção
[001] Esta descrição se refere à codificação e decodificação de dados.
Descrição da Técnica Relacionada
[002] A descrição de "fundamento" provida aqui é para o propósito de apresentar geralmente o contexto da descrição. Trabalho dos inventores agora nomeados, à extensão que é descrito nesta seção de fundamento, como também aspectos da descrição que pode caso contrário não qualificar como técnica anterior na hora de depósito, é expressamente ou implicitamente não admitido como técnica anterior contra a descrição presente.
[003] Há vários sistemas de compressão e descompressão de dados de vídeo que envolvem transformar dados de vídeo em uma representação de domínio de frequência, quantizar os coeficientes de domínio de frequência e então aplicar alguma forma de codificação de entropia aos coeficientes quantizados.
[004] Entropia, no contexto presente, pode ser considerada como representando o conteúdo de informação de um símbolo de dados ou série de símbolos. A meta de codificação de entropia é codificar uma série de símbolos de dados de uma maneira sem perda usando (idealmente) o menor número de bits de dados codificados que são necessários para representar o conteúdo de informação dessa série de símbolos de dados. Na prática, codificação de entropia é usada para codificar os coeficientes quantizados tal que os dados codificados sejam menores (em termos de seu número de bits) do que o tamanho de dados dos coeficientes quantizados originais. Um processo de codificação de entropia mais eficiente dá um tamanho de dados de saída menor para o mesmo tamanho de dados de entrada.
[005] Uma técnica para codificar em entropia dados de vídeo é a denominada técnica de CABAC (codificação binária aritmética adaptável a contexto).
Sumário
[006] Esta descrição provê um método de codificação de dados de acordo com a reivindicação 1.
[007] Aspectos e características respectivas adicionais estão definidas nas reivindicações anexas.
[008] É para ser entendido que ambas a descrição geral precedente e a descrição detalhada seguinte são exemplares, mas não restritivas da descrição presente.
Descrição Breve dos Desenhos
[009] Uma apreciação mais completa da descrição e muitas das vantagens decorrentes dela serão obtidas prontamente quando a mesma é entendida melhor por referência à descrição detalhada seguinte de modalidades, quando considerada com relação aos desenhos acompanhantes, em que:
[0010] Figura 1 ilustra esquematicamente um sistema de transmissão e recepção de dados de áudio/vídeo (A/V) usando compressão e descompressão de dados de vídeo;
[0011] Figura 2 ilustra esquematicamente um sistema de exibição de vídeo usando descompressão de dados de vídeo;
[0012] Figura 3 ilustra esquematicamente um sistema de armazenamento de áudio/vídeo usando compressão e descompressão de dados de vídeo;
[0013] Figura 4 ilustra esquematicamente uma câmera de vídeo usando compressão de dados de vídeo;
[0014] Figura 5 provê um panorama esquemático de um aparelho de compressão e descompressão de dados de vídeo;
[0015] Figura 6 ilustra esquematicamente a geração de imagens preditas;
[0016] Figura 7 ilustra esquematicamente uma unidade de codificação maior (LCU);
[0017] Figura 8 ilustra esquematicamente um conjunto de quatro unidades de codificação (CU);
[0018] Figuras 9 e 10 ilustram esquematicamente as unidades de codificação da Figura 8 subdivididas em unidades de codificação menores;
[0019] Figura 11 ilustra esquematicamente um arranjo de unidades de predição (PU);
[0020] Figura 12 ilustra esquematicamente um arranjo de unidades de transformada (TU);
[0021] Figura 13 ilustra esquematicamente uma imagem codificada parcialmente;
[0022] Figura 14 ilustra esquematicamente um conjunto de possíveis direções de predição;
[0023] Figura 15 ilustra esquematicamente um conjunto de modos de predição;
[0024] Figura 16 ilustra esquematicamente uma varredura de ziguezague;
[0025] Figura 17 ilustra esquematicamente um codificador de entropia de CABAC;
[0026] Figuras 18A a 18D ilustram esquematicamente aspectos de uma operação de codificação e decodificação de CABAC;
[0027] Figura 19 ilustra esquematicamente um codificador de CABAC;
[0028] Figura 20 ilustra esquematicamente um decodificador de CABAC;
[0029] Figura 21 é um diagrama esquemático mostrando um panorama de um sistema de codificação;
[0030] Figura 22 é um gráfico de taxa de bit contra parâmetro de quantização (QP);
[0031] Figura 23 é um gráfico de taxa de bit contra canal verde PSNR para seis profundidades de bit teste, com um modo de salto de transformada habilitado;
[0032] Figura 24 é um gráfico de taxa de bit contra canal verde PSNR para seis profundidades de bit teste, com um modo de salto de transformada desabilitado;
[0033] Figura 25 é um gráfico de taxa de bit contra canal verde PSNR para seis profundidades de bit teste, com matrizes de transformada de 14 bits;
[0034] Figura 26 é um gráfico de PSNR contra taxa de bit para uma sequência de teste comparando várias matrizes de DCT de precisão;
[0035] Figura 27 é um gráfico de PSNR contra taxa de bit para uma sequência de teste mostrando o uso de codificação de bit fixo de desvio;
[0036] Figura 28 é uma tabela provendo exemplos de perfis de codificação;
[0037] Figuras 29 a 31 são fluxogramas esquemáticos ilustrando respectivamente versões de parte de um processo de CABAC;
[0038] Figuras 32A-F são diagramas esquemáticos ilustrando esquemas de alinhamento de CABAC diferentes;
[0039] Figuras 33 a 35 são fluxogramas esquemáticos ilustrando respectivamente versões de um estágio de terminação de um processo de CABAC;
[0040] Figura 36 é um fluxograma ilustrando esquematicamente uma técnica de codificação;
[0041] Figura 37 é um fluxograma ilustrando esquematicamente uma técnica de adaptação; e
[0042] Figuras 38 e 39 são fluxogramas esquemáticos ilustrando um processo para selecionar gama dinâmica de transformada e parâmetros de precisão de dados.
Descrição das Modalidades
[0043] Se referindo agora aos desenhos, Figuras 1-4 são providas para dar ilustrações esquemáticas de aparelho ou sistemas fazendo uso do aparelho de compressão e/ou descompressão a ser descrito abaixo com relação às modalidades.
[0044] Tudo do aparelho de compressão e/ou descompressão de dados que é para ser descritos abaixo pode ser implementado em hardware, em software correndo em um aparelho de processamento de dados de propósito geral tal como um computador de propósito geral, como hardware programável tal como um circuito integrado específico de aplicação (ASIC) ou arranjo de portas programáveis em campo (FPGA) ou como combinações destes. Em casos onde as modalidades são implementadas através de software e/ou firmware, será apreciado que tal software e/ou firmware, e mídias de armazenamento de dados legíveis por máquina não transitórias pelas quais tal software e/ou firmware é armazenado ou caso contrário provido, são consideradas como modalidades.
[0045] Figura 1 ilustra esquematicamente um sistema de transmissão e recepção de dados de áudio/vídeo usando compressão e descompressão de dados de vídeo.
[0046] Um sinal de áudio/vídeo de entrada 10 é provido a um aparelho de compressão de dados de vídeo 20 que comprime pelo menos o componente de vídeo do sinal de áudio/vídeo 10 para transmissão ao longo de uma rota de transmissão 30 tal como um cabo, uma fibra óptica, uma ligação sem fios ou similar. O sinal comprimido é processado por um aparelho de descompressão 40 para prover um sinal de áudio/vídeo de saída 50. Para o caminho de retorno, um aparelho de compressão 60 comprime um sinal de áudio/vídeo para transmissão ao longo da rota de transmissão 30 para um aparelho de descompressão 70.
[0047] A aparelho de compressão 20 e aparelho de descompressão 70 podem, portanto, formar um nó de uma ligação de transmissão. O aparelho de descompressão 40 e aparelho de descompressão 60 podem formar outro nó da ligação de transmissão. Certamente, em casos onde a ligação de transmissão é unidirecional, um dos nós requereria um aparelho de compressão e o outro nó só requereria um aparelho de descompressão.
[0048] Figura 2 ilustra esquematicamente um sistema de exibição de vídeo usando descompressão de dados de vídeo. Em particular, um sinal de áudio/vídeo comprimido 100 é processado por um aparelho de descompressão 110 para prover um sinal descomprimido que pode ser exibido em um visor 120. O aparelho de descompressão 110 poderia ser implementado como uma parte integrante do visor 120, por exemplo sendo provido dentro do mesmo invólucro como o dispositivo de exibição. Alternativamente, o aparelho de descompressão 110 poderia ser provido como (por exemplo) uma denominada 'set top box' (STB), notando que a expressão "set top" não implica uma exigência para a caixa estar situada em qualquer orientação ou posicionamento particular com respeito ao visor 120; é simplesmente um termo usado na técnica para indicar um dispositivo que é conectável a um visor como um dispositivo periférico.
[0049] Figura 3 ilustra esquematicamente um sistema de armazenamento de áudio/vídeo usando compressão e descompressão de dados de vídeo. Um sinal de áudio/vídeo de entrada 130 é provido a um aparelho de compressão 140 que gera um sinal comprimido para armazenar por um dispositivo de armazenamento 150 tal como um dispositivo de disco magnético, um dispositivo de disco óptico, um dispositivo de fita magnética, um dispositivo de armazenamento de estado sólido tal como uma memória de semicondutor ou outro dispositivo de armazenamento. Para repetição, dados comprimidos são lidos do dispositivo de armazenamento 150 e passados a um aparelho de descompressão 160 para descompressão para prover um sinal de áudio/vídeo de saída 170.
[0050] Será apreciado que o sinal comprimido ou codificado, e um meio de armazenamento ou portador de dados armazenando esse sinal, são considerados como modalidades.
[0051] Figura 4 ilustra esquematicamente uma câmera de vídeo usando compressão de dados de vídeo. Na Figura 4, um dispositivo de captura de imagem 180, tal como um sensor de imagem de dispositivo acoplado por carga (CCD) e controle associado e eletrônica de extração, gera um sinal de vídeo que é passado a um aparelho de compressão 190. Um microfone (ou vários microfones) 200 gera um sinal de áudio a ser passado ao aparelho de compressão 190. O aparelho de compressão 190 gera um sinal de áudio/vídeo comprimido 210 a ser armazenado e/ou transmitido (mostrado genericamente como um estágio esquemático 220).
[0052] As técnicas a serem descritas abaixo relacionam-se principalmente à compressão de dados de vídeo. Será apreciado que muitas técnicas existentes podem ser usadas para compressão de dados de áudio junto com as técnicas de compressão de dados de vídeo que serão descritas, para gerar um sinal de áudio/vídeo comprimido. Por conseguinte, uma discussão separada de compressão de dados de áudio não será provida. Também será apreciado que a taxa de dados associada com dados de vídeo, em particular dados de vídeo de qualidade de radiodifusão, é geralmente muito mais alta do que a taxa de dados associada com dados de áudio (se comprimidos ou descomprimidos). Será, portanto, apreciado que dados de áudio descomprimidos poderiam acompanhar dados de vídeo comprimidos para formar um sinal de áudio/vídeo comprimido. Será apreciado ademais que embora os exemplos presentes (mostrados nas Figuras 1-4) relacionem-se a dados de áudio/vídeo, as técnicas a serem descritas abaixo podem achar uso em um sistema que lida simplesmente (quer dizer, comprime, descomprime, armazena, exibe e/ou transmite) dados de vídeo. Quer dizer, as modalidades podem aplicar à compressão de dados de vídeo sem necessariamente ter quaisquer dados de áudio associados operando de modo algum.
[0053] Figura 5 provê um panorama esquemático de um aparelho de compressão e descompressão de dados de vídeo.
[0054] Imagens sucessivas de um sinal de vídeo de entrada 300 são providas a um somador 310 e a uma preditor de imagem 320. O preditor de imagem 320 será descrito abaixo em mais detalhe com referência à Figura 6. O somador 310 na realidade executa uma operação de subtração (adição negativa), visto que recebe o sinal de vídeo de entrada 300 em uma entrada "+" e a saída do preditor de imagem 320 em uma entrada "-", de forma que a imagem predita seja subtraída da imagem de entrada. O resultado é gerar um denominado sinal de imagem residual 330 representando a diferença entre as imagens real e projetada.
[0055] Uma razão por que um sinal de imagem residual é gerado é como segue. As técnicas de codificação de dados a serem descritas, quer dizer as técnicas que serão aplicadas ao sinal de imagem residual, tendem a trabalhar mais eficientemente quando há menos "energia" na imagem a ser codificada. Aqui, o termo "eficientemente" se refere à geração de uma quantidade pequena de dados codificados; para um nível de qualidade de imagem particular, é desejável (e considerado "eficiente") gerar dados tão poucos quanto é praticamente possível. A referência à "energia" na imagem residual se refere à quantidade de informação contida na imagem residual. Se a imagem predita fosse para ser idêntica à imagem real, a diferença entre as duas (quer dizer, a imagem residual) conteria informação zero (energia zero) e seria muito fácil de codificar em uma quantidade pequena de dados codificados. Em geral, se o processo de predição pode ser feito trabalhar razoavelmente bem, a expectativa é que os dados de imagem residuais conterão menos informação (menos energia) do que a imagem de entrada e assim será mais fácil codificar em uma quantidade pequena de dados codificados.
[0056] Os dados de imagem residual 330 são providos a uma unidade de transformada 340 que gera uma representação de transformada de co-seno discreta (DCT) dos dados de imagem residual. A própria técnica de DCT é bem conhecida e não será descrita aqui em detalhes. Há, porém, aspectos das técnicas usadas no aparelho presente que serão descritos em mais detalhe abaixo, em particular relativo à seleção de blocos diferentes de dados aos quais a operação de DCT é aplicada. Estes serão discutidos com referência às Figuras 7-12 abaixo.
[0057] Note que em algumas modalidades, uma transformada de seno discreta (DST) é usada em vez de uma DCT. Em outras modalidades, nenhuma transformada poderia ser usada. Isto pode ser feito seletivamente, de forma que o estágio de transformada seja, em efeito, desviado, por exemplo sob o controle de um comando ou modo de "salto de transformada".
[0058] A saída da unidade de transformada 340, quer dizer, um conjunto de coeficientes de transformada para cada bloco transformado de dados de imagem, é provida a um quantizador 350. Várias técnicas de quantização são conhecidas no campo de compressão de dados de vídeo, variando de uma multiplicação simples por um fator de graduação de quantização à aplicação de tabelas de consulta complicadas sob o controle de um parâmetro de quantização. A meta geral é dupla. Primeiramente, o processo de quantização reduz o número de possíveis valores dos dados transformados. Secundariamente, o processo de quantização pode aumentar a probabilidade que valores dos dados transformados sejam zero. Ambos destes podem fazer o processo de codificação de entropia, a ser descrito abaixo, trabalhar mais eficientemente em gerar quantidades pequenas de dados de vídeo comprimidos.
[0059] Um processo de varredura de dados é aplicado por uma unidade de varredura 360. O propósito do processo de varredura é reordenar os dados transformados quantizados para juntar tanto quanto possível dos coeficientes transformados quantizados não zero juntos, e certamente, portanto juntar tanto quanto possível dos coeficientes zero juntos. Estas características podem permitir denominada codificação de comprimento corrido ou técnicas semelhantes serem aplicadas eficientemente. Assim, o processo de varredura envolve selecionar coeficientes dos dados transformados quantizados, e em particular de um bloco de coeficientes correspondendo a um bloco de dados de imagem que foram transformados e quantizados, de acordo com uma "ordem de varredura" de forma que (a) todos os coeficientes sejam selecionados uma vez como parte da varredura, e (b) a varredura tenda a prover a reordenação desejada. Técnicas para selecionar uma ordem de varredura serão descritas abaixo. Uma ordem de varredura exemplo que pode tender a dar resultados úteis é uma denominada ordem de varredura em ziguezague.
[0060] Os coeficientes varridos são então passados a um codificador de entropia (EE) 370. Novamente, vários tipos de codificação de entropia podem ser usados. Dois exemplos que serão descritos abaixo são variantes do denominado sistema de CABAC (Codificação Binária Aritmética Adaptável a Contexto) e variantes do denominado sistema de CAVLC (Codificação de Comprimento Variável Adaptável a Contexto). Em termos gerais, CABAC é considerado prover uma eficiência melhor, e em alguns estudos foi mostrado prover uma redução de 10-20% na quantidade de dados de saída codificados para uma qualidade de imagem comparável comparada a CAVLC. Porém, CAVLC é considerado representar um nível de complexidade muito mais baixo (em termos de sua implementação) do que CABAC. A técnica de CABAC será discutida com referência à Figura 17 abaixo, e a técnica de CAVLC será discutida com referência às Figuras 18 e 19 abaixo.
[0061] Note que o processo de varredura e o processo de codificação de entropia são mostrados como processos separados, mas na realidade podem ser combinados ou tratados juntos. Quer dizer, a leitura de dados no codificador de entropia pode acontecer na ordem de varredura. Considerações correspondentes se aplicam aos processos inversos respectivos a serem descritos abaixo.
[0062] A saída do codificador de entropia 370, junto com dados adicionais (mencionados acima e/ou discutidos abaixo), por exemplo definindo a maneira na qual o preditor 320 gerava a imagem predita, provê um sinal de vídeo de saída comprimido 380.
[0063] Porém, um caminho de retorno também é provido porque a operação do próprio preditor 320 depende de uma versão descomprimida dos dados de saída comprimidos.
[0064] A razão para esta característica é como segue. No estágio apropriado no processo de descompressão (a ser descrito abaixo), uma versão descomprimida dos dados residuais é gerada. Estes dados residuais descomprimidos têm que ser adicionados a uma imagem predita para gerar uma imagem de saída (porque os dados residuais originais eram a diferença entre a imagem de entrada e uma imagem predita). A fim de que este processo seja comparável, como entre o lado de compressão e o lado de descompressão, as imagens preditas geradas pelo preditor 320 deveriam ser as mesmas durante o processo de compressão e durante o processo de descompressão. Certamente, na descompressão, o aparelho não tem acesso às imagens de entrada originais, mas só às imagens descomprimidas. Portanto, na compressão, o preditor 320 baseia sua predição (pelo menos, para codificação inter-imagem) em versões descomprimidas das imagens comprimidas.
[0065] O processo de codificação de entropia executado pelo codificador de entropia 370 é considerado ser "sem perda", que é dizer que pode ser invertido para chegar exatamente aos mesmos dados que foram providos primeiro ao codificador de entropia 370. Assim, o caminho de retorno pode ser implementado antes do estágio de codificação de entropia. Realmente, o processo de varredura executado pela unidade de varredura 360 também é considerado sem perda, mas na modalidade presente, o caminho de retorno 390 é da saída do quantizador 350 à entrada de um quantizador inverso complementar 420.
[0066] Em termos gerais, um decodificador de entropia 410, a unidade de varredura inversa 400, um quantizador inverso 420 e uma unidade de transformada inversa 430 provê as funções inversas respectivas do codificador de entropia 370, da unidade de varredura 360, do quantizador 350 e da unidade de transformada 340. Para agora, a discussão continuará pelo processo de compressão; o processo para descomprimir um sinal de vídeo comprimido de entrada será discutido separadamente abaixo.
[0067] No processo de compressão, os coeficientes varridos são passados pelo caminho de retorno 390 do quantizador 350 para o quantizador inverso 420 que executa a operação inversa da unidade de varredura 360. Um processo de quantização inversa e transformação inversa são executados pelas unidades 420, 430 para gerar um sinal de imagem residual comprimida- descomprimida 440.
[0068] O sinal de imagem 440 é somado, a um somador 450, à saída do preditor 320 para gerar uma imagem de saída reconstruída 460. Isto forma uma entrada ao preditor de imagem 320, como será descrito abaixo.
[0069] Voltando agora ao processo aplicado a um sinal de vídeo comprimido recebido 470, o sinal é provido ao decodificador de entropia 410 e de lá para a cadeia de unidade de varredura inversa 400, o quantizador inverso 420 e a unidade de transformada inversa 430 antes de ser adicionado à saída do preditor de imagem 320 pelo somador 450. Em termos diretos, a saída 460 do somador 450 forma o sinal de vídeo descomprimido de saída 480. Na prática, filtragem adicional pode ser aplicada antes que o sinal seja produzido.
[0070] Figura 6 ilustra esquematicamente a geração de imagens preditas, e em particular a operação do preditor de imagem 320.
[0071] Há dois modos básicos de predição: denominada predição intra-imagem e denominada predição inter-imagem, ou compensada em movimento (MC).
[0072] Predição intra-imagem se baseia em uma predição do conteúdo de um bloco da imagem em dados dentro da mesma imagem. Isto corresponde à denominada codificação de quadro I em outras técnicas de compressão de vídeo. Em contraste à codificação de quadro I, onde a imagem inteira é intra- codificada, nas modalidades presentes, a escolha entre intra e inter- codificação pode ser feita em uma base de bloco por bloco, entretanto em outras modalidades, a escolha ainda é feita em uma base de imagem por imagem.
[0073] Predição compensada em movimento faz uso de informação de movimento que tenta definir a fonte, em outra imagem adjacente ou perto, de detalhe de imagem a ser codificado na imagem atual. Por conseguinte, em um exemplo ideal, os conteúdos de um bloco de dados de imagem na imagem predita podem ser codificados muito simplesmente como uma referência (um vetor de movimento) apontando para um bloco correspondente na mesma ou uma posição ligeiramente diferente em uma imagem adjacente.
[0074] Retornando à Figura 6, dois arranjos de predição de imagem (correspondendo à predição intra- e inter-imagem) são mostrados, os resultados de quais são selecionados por um multiplexador 500 sob o controle de um sinal de modo 510 para prover blocos da imagem predita para provisão aos somadores 310 e 450. A escolha é feita em dependência de qual seleção dá a "energia" mais baixa (que, como discutido acima, pode ser considerado como conteúdo de informação requerendo codificação), e a escolha é sinalizada ao codificador dentro da transferência de dados de saída codificado. Energia de imagem, neste contexto, pode ser detectada, por exemplo, executando uma subtração de ensaio de uma área das duas versões da imagem predita da imagem de entrada, quadrando cada valor de pixel da imagem de diferença, somando os valores quadrados, e identificando qual das duas versões dá origem ao valor quadrado médio mais baixo da imagem de diferença relativo àquela área de imagem.
[0075] A predição atual, no sistema de intra-codificação, é feita na base de blocos de imagem recebidos como parte do sinal 460, quer dizer, a predição é baseada nos blocos de imagem codificados-decodificados a fim de que exatamente a mesma predição possa ser feita a um aparelho de descompressão. Porém, dados podem ser derivados do sinal de vídeo de entrada 300 por um seletor de intra-modo 520 para controlar a operação do preditor de intra-imagem 530.
[0076] Para predição inter-imagem, um preditor compensado em movimento (MC) 540 usa informação de movimento tais como vetores de movimento derivados por um estimador de movimento 550 do sinal de vídeo de entrada 300. Esses vetores de movimento são aplicados a uma versão processada da imagem reconstruída 460 pelo preditor compensado em movimento 540 para gerar blocos da predição inter-imagem.
[0077] O processamento aplicado ao sinal 460 será descrito agora. Primeiramente, o sinal é filtrado por uma unidade de filtro 560. Isto envolve aplicar um filtro de "deblocking" (desbloqueio) para remover ou pelo menos tender a reduzir os efeitos do processamento baseado em bloco executado pela unidade de transformada 340 e operações subsequentes. Também, um filtro de malha adaptável é aplicado usando coeficientes derivados processando o sinal reconstruído 460 e o sinal de vídeo de entrada 300. O filtro de malha adaptável é um tipo de filtro que, usando técnicas conhecidas, aplica coeficientes de filtro adaptáveis aos dados a serem filtrados. Quer dizer, os coeficientes de filtro podem variar em dependência de vários fatores. Dados definindo quais coeficientes de filtro usar são incluídos como parte da transferência de dados de saída codificados.
[0078] A saída filtrada da unidade de filtro 560 na realidade forma o sinal de vídeo de saída 480. Também é armazenado em um ou mais armazenamentos de imagem 570; o armazenamento de imagens sucessivas é uma exigência de processamento de predição compensada em movimento, e em particular a geração de vetores de movimento. Para economizar em exigências de armazenamento, as imagens armazenadas nos armazenamentos de imagem 570 podem ser contidas em uma forma comprimida e então descomprimidas para uso em gerar vetores de movimento. Para este propósito particular, qualquer sistema de compressão/descompressão conhecido pode ser usado. As imagens armazenadas são passadas a um filtro de interpolação 580 que gera uma versão de resolução mais alta das imagens armazenadas; neste exemplo, amostras intermediárias (sub-amostras) são geradas tal que a resolução da imagem interpolada produzida pelo filtro de interpolação 580 seja 8 vezes (em cada dimensão) aquela das imagens armazenadas nos armazenamentos de imagem 570. As imagens interpoladas são passadas como uma entrada ao estimador de movimento 550 e também ao preditor compensado em movimento 540.
[0079] Em modalidades, um estágio opcional adicional é provido, que é para multiplicar os valores de dados do sinal de vídeo de entrada por um fator de quatro usando um multiplicador 600 (efetivamente apenas deslocando os valores de dados à esquerda por dois bits), e aplicar uma operação de divisão correspondente (deslocamento à direita por dois bits) na saída do aparelho usando um divisor ou deslocador à direita 610. Assim, o deslocamento à esquerda deslocamento à direita mudam os dados puramente para a operação interna do aparelho. Esta medida pode prover precisão de cálculo mais alta dentro do aparelho, como o efeito de qualquer erro de arredondamento de dados é reduzido.
[0080] O modo no qual uma imagem é dividida por processamento de compressão será descrito agora. A um nível básico, e imagem a ser comprimida é considerada como um arranjo de blocos de amostras. Para os propósitos da discussão presente, o tal bloco maior sob consideração é uma denominada unidade de codificação maior (LCU) 700 (Figura 7), que representa um arranjo quadrado de 64 x 64 amostras. Aqui, a discussão se refere a amostras de luminância. Dependendo do modo de crominância, tal como 4:4:4, 4:2:2, 4:2:0 ou 4:4:4:4 (GBR mais dados de chave), haverá números diferentes de amostras crominância correspondentes, correspondendo ao bloco de luminância.
[0081] Três tipos básicos de blocos serão descritos: unidades de codificação, unidades de predição e unidades de transformada. Em termos gerais, a subdivisão recursiva das LCUs permite a um quadro de entrada ser dividido de tal modo que ambos os tamanhos de bloco o e os parâmetros de codificação de bloco (tais como modos de predição ou codificação residual) possam ser estabelecidos de acordo com as características específicas da imagem a ser codificada.
[0082] A LCU pode ser subdividida em denominadas unidades de codificação (CU). Unidades de codificação são sempre quadradas e têm um tamanho entre amostras 8x8 e o tamanho completo da LCU 700. As unidades de codificação podem ser arranjadas como um tipo de estrutura de árvore, de forma que uma primeira subdivisão possa acontecer como mostrado na Figura 8, dando para unidades de codificação 710 de 32x32 amostras; subdivisões subsequentes podem então acontecer em uma base seletiva para dar algumas unidades de codificação 720 de 16x16 amostras (Figura 9) e potencialmente algumas unidades de codificação 730 de amostras 8x8 (Figura 10). Globalmente, este processo pode prover uma estrutura de árvore de codificação de adaptação a conteúdo de blocos de CU, cada um dos quais pode ser tão grande quanto a LCU ou tão pequeno quanto amostras 8x8. Codificação dos dados de vídeo de saída acontece na base da estrutura de unidade de codificação.
[0083] Figura 11 ilustra esquematicamente um arranjo de unidades de predição (PU). Uma unidade de predição é uma unidade básica para levar informação relativa aos processos de predição de imagem, ou em outras palavras, os dados adicionais adicionados aos dados de imagem residuais codificados em entropia para formar o sinal de vídeo de saída do aparelho da Figura 5. Em geral, unidades de predição não estão restringidas a serem quadradas em forma. Elas podem levar outras formas, em particular formas retangulares formando a metade de uma das unidades de codificação quadradas, contanto que a unidade de codificação seja maior do que o tamanho mínimo (8x8). A meta é permitir ao limite de unidades de predição adjacentes casar (tão de perto quanto possível) com o limite de objetos reais no quadro, de forma que parâmetros de predição diferentes possam ser aplicados a objetos reais diferentes. Cada unidade de codificação pode conter uma ou mais unidades de predição.
[0084] Figura 12 ilustra esquematicamente um arranjo de unidades de transformada (TU). Uma unidade de transformada é uma unidade básica do processo de transformada e quantização. Unidade de transformadas são sempre quadradas e podem levar um tamanho de 4x4 até amostras 32x32. Cada unidade de codificação pode conter uma ou mais unidades de transformada. O acrônimo SDIP-P na Figura 12 significa uma denominada partição de intra-predição de distância curta. Neste arranjo, só transformadas unidimensionais são usadas, assim um bloco 4xN é passado por N transformadas com dados de entrada para a transformada sendo baseados nos blocos vizinhos previamente decodificados e nas linhas vizinhas previamente decodificadas dentro do SDIP-P atual.
[0085] O processo de intra-predição será discutido agora. Em termos gerais, intra-predição envolve gerar uma predição de um bloco atual (uma unidade de predição) de amostras de amostras codificadas previamente e decodificadas na mesma imagem. Figura 13 ilustra esquematicamente uma imagem parcialmente codificada 800. Aqui, a imagem está sendo codificada de topo-esquerdo para fundo-direito em uma base de LCU. Uma LCU de exemplo codificada parcialmente pela manipulação da imagem inteira é mostrada como um bloco 810. Uma região sombreada 820 acima e à esquerda do bloco 810 já foi codificada. A predição intra-imagem dos conteúdos do bloco 810 pode fazer uso de qualquer da área sombreada 820, mas não pode fazer uso da área não sombreada debaixo disso.
[0086] O bloco 810 representa uma LCU; como discutido acima, para os propósitos de processamento de predição intra-imagem, isto pode ser subdividido em um conjunto de unidades de predição menores. Um exemplo de uma unidade de predição 830 é mostrado dentro da LCU 810.
[0087] A predição intra-imagem leva em conta amostras acima e/ou à esquerda da LCU 810 atual. Amostras de fonte, de quais as amostras exigidas são preditas, podem estar localizadas a posições ou direções diferentes relativas a uma unidade de predição atual dentro da LCU 810. Para decidir qual direção é apropriada para uma unidade de predição atual, os resultados de uma predição de ensaio são comparados baseado em cada direção de candidato a fim de ver qual direção de candidato dá um resultado que está mais perto do bloco correspondente da imagem de entrada. A direção de candidato dando o resultado mais perto é selecionada como a direção de predição para aquela unidade de predição.
[0088] O quadro também pode ser codificado em uma base de "fatia". Em um exemplo, uma fatia é um grupo horizontalmente adjacente de LCUs. Mas em termos mais gerais, a imagem residual inteira poderia formar uma fatia, ou uma fatia poderia ser uma única LCU, ou uma fatia poderia ser uma fila de LCUs, e assim por diante. Fatias podem dar alguma resiliência a erros como elas são codificadas como unidades independentes. Os estados de codificador e decodificador são reajustados completamente a um limite de fatia. Por exemplo, intra-predição não é executada por limites de fatia; limites de fatia são tratados como limites de imagem para este propósito.
[0089] Figura 14 ilustra esquematicamente um conjunto de possíveis (candidatas) direções de predição. O conjunto completo de 34 direções de candidato está disponível a uma unidade de predição de amostras 8x8, 16x16 ou 32x32. Os casos especiais de tamanhos de unidade de predição de amostras 4x4 e 64x64 têm um conjunto reduzido de direções de candidato disponíveis para eles (17 direções de candidato e 5 direções de candidato, respectivamente). As direções são determinadas através de deslocamento horizontal e vertical relativo a uma posição de bloco atual, mas são codificadas como "modos" de predição, um conjunto de qual é mostrado na Figura 15. Note que o denominado modo de CC representa uma média aritmética simples das amostras superiores e à esquerda circunvizinhas.
[0090] Figura 16 ilustra esquematicamente uma varredura de ziguezague, sendo um padrão de varredura que pode ser aplicado pela unidade de varredura 360. Na Figura 16, o padrão é mostrado para um bloco de exemplo de coeficientes de transformada 8x8, com o coeficiente de CC estando posicionado na posição esquerda de topo 840 do bloco, e frequências espaciais horizontais e verticais crescentes sendo representadas por coeficientes a distâncias crescentes para baixo e à direita da posição de topo- esquerdo 840.
[0091] Note que em algumas modalidades, os coeficientes podem ser varridos em uma ordem inversa (fundo direito para topo esquerdo usando a notação de ordenação da Figura 16). Também deveria ser notado que em algumas modalidades, a varredura pode passar de esquerda para direita por algumas (por exemplo, entre uma e três) filas horizontais superiores, antes de executar um zig-zag dos coeficientes restantes.
[0092] Figura 17 ilustra esquematicamente a operação de um codificador de entropia de CABAC.
[0093] Em codificação adaptável a contexto desta natureza e de acordo com modalidades, um bit de dados pode ser codificado com respeito a um modelo de probabilidade, ou contexto, representando uma expectativa ou predição de quão provável é que o bit de dados será um 1 ou um zero. Para fazer isto, um bit de dados de entrada é nomeado um valor de código dentro de uma selecionada de duas (ou mais geralmente, uma pluralidade de) subgamas complementares de uma gama de valores de código, com os tamanhos respectivos das sub-gamas (em modalidades, as proporções respectivas das sub-gamas relativas ao conjunto de valores de código) estando definido pelo contexto (que em troca está definido por uma variável de contexto associada com ou caso contrário pertinente àquele valor de entrada). Uma próxima etapa é modificar a gama global, quer dizer, o conjunto de valores de código (para uso em relação a um próximo bit de dados de entrada ou valor) em resposta ao valor de código nomeado e o tamanho atual da sub-gama selecionada. Se a gama modificada for então menor do que um limiar representando um tamanho mínimo predeterminado (por exemplo, metade de um tamanho de gama original), então é aumentada em tamanho, por exemplo dobrando (deslocando à esquerda) a gama modificada, qual processo de dobra pode ser executado sucessivamente (mais de uma vez) se requerido, até que a gama tenha pelo menos o tamanho mínimo predeterminado. Neste ponto, um bit de dados codificado de saída é gerado para indicar que uma (ou cada, se mais de uma) operação de dobra ou aumento de tamanho aconteceu. Uma etapa adicional é modificar o contexto (quer dizer, em modalidades, modificar a variável de contexto) para uso com ou em relação ao próximo bit de dados de entrada ou valor (ou, em algumas modalidades, em relação a um próximo grupo de bits de dados ou valores a ser codificado). Isto pode ser executado usando o contexto atual e a identidade do "símbolo mais provável" atual (tanto um ou zero, qualquer que seja indicado pelo contexto para ter atualmente uma probabilidade maior que 0,5) como um índice em uma tabela de consulta de novos valores de contexto, ou como entradas para uma fórmula matemática apropriada da qual uma nova variável de contexto pode ser derivada. A modificação da variável de contexto pode, em modalidades, aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual.
[0094] O codificador de CABAC opera em relação a dados binários, quer dizer, dados representados por só os dois símbolos 0 e 1. O codificador faz uso de um denominado processo de modelagem de contexto que seleciona um "contexto" ou modelo de probabilidade para dados subsequentes na base de dados previamente codificados. A seleção do contexto é executada de um modo determinístico de forma que a mesma determinação, na base de dados previamente decodificados, possa ser executada no decodificador sem a necessidade por dados adicionais (especificando o contexto) a serem adicionados à transferência de dados codificados passado ao decodificador.
[0095] Se referindo à Figura 17, dados de entrada a serem codificados podem ser passados a um conversor binário 900 se já não estiverem em uma forma binária; se os dados já estiverem em forma binária, o conversor 900 é desviado (por uma chave esquemática 910). Nas modalidades presentes, conversão para uma forma binária é executada de fato expressando os dados de coeficiente de transformada quantizados como uma série de "mapas" binários que serão descritos ademais abaixo.
[0096] Os dados binários podem então ser operados por um de dois caminhos de processamento, um caminho "regular" e um "desvio" (que são mostrados esquematicamente como caminhos separados, mas que, em modalidades discutidas abaixo, poderiam na realidade ser implementados pelos mesmos estágios de processamento, apenas usando parâmetros ligeiramente diferentes). O caminho de desvio emprega um denominado codificador de desvio 920 que não faz necessariamente uso de modelagem de contexto na mesma forma como o caminho regular. Em alguns exemplos de codificação de CABAC, este caminho de desvio pode ser selecionado se houver uma necessidade por processamento particularmente rápido de um lote de dados, mas nas modalidades presentes, duas características de denominados dados de "desvio" são notadas: primeiramente, os dados de desvio são operados pelo codificador de CABAC (950, 960), apenas usando um modelo de contexto fixo representando uma probabilidade de 50%; e secundariamente, os dados de desvio relacionam-se a certas categorias de dados, um exemplo particular sendo dados de sinal de coeficiente. Caso contrário, o caminho regular é selecionado por chaves esquemáticas 930, 940. Isto envolve os dados serem processados por um modelador de contexto 950 seguido por um motor de codificação 960.
[0097] O codificador de entropia mostrado na Figura 17 codifica um bloco de dados (quer dizer, por exemplo, dados correspondendo a um bloco de coeficientes relativos a um bloco da imagem residual) como um único valor se o bloco for formado completamente de dados de valor zero. Para cada bloco que não cai nesta categoria, quer dizer, um bloco que contém pelo menos alguns dados não zero, um "mapa de significação" é preparado. O mapa de significação indica se, para cada posição em um bloco de dados a ser codificado, o coeficiente correspondente no bloco é não zero. Os dados de mapa de significação, estando em forma binária, são eles mesmos codificados em CABAC. O uso do mapa de significação ajuda com compressão porque nenhum dado precisa ser codificado para um coeficiente com uma magnitude que o mapa de significação indica ser zero. Também, o mapa de significação pode incluir um código especial para indicar o coeficiente não zero final no bloco, de forma que todos os coeficientes de alta frequência final/zero possam ser omitidos da codificação. O mapa de significação é seguido, na transferência de bits codificado, por dados definindo os valores dos coeficientes não zero especificados pelo mapa de significação.
[0098] Níveis adicionais de dados de mapa também são preparados e são codificados em CABAC. Um exemplo é um mapa que define, como um valor binário (1 = sim, 0 = não) se os dados de coeficiente a uma posição de mapa que o mapa de significação indicou ser "não zero" de fato tem o valor de "um". Outro mapa especifica se os dados de coeficiente a uma posição de mapa que o mapa de significação indicou ser "não zero" de fato tem o valor de "dois". Um mapa adicional indica, para essas posições de mapa onde o mapa de significação indicou que os dados de coeficiente são "não zero", se os dados têm um valor "maior que dois". Outro mapa indica, novamente para dados identificados como "não zero", o sinal do valor de dados (usando uma notação binária predeterminada tal como 1 para +, 0 para -, ou certamente ao contrário).
[0099] Em modalidades, o mapa de significação e outros mapas são gerados dos coeficientes de transformada quantizados, por exemplo pela unidade de varredura 360, e são sujeitos a um processo de varredura em ziguezague (ou um processo de varredura selecionado de ziguezague, varredura de quadrícula horizontal e quadrícula vertical de acordo com o modo de intra-predição) antes de ser sujeito à codificação de CABAC.
[00100] Em algumas modalidades, o codificador de entropia de HEVC CABAC codifica elementos de sintaxe usando os processos seguintes:
[00101] O local do último coeficiente significante (em ordem de varredura) na TU é codificado.
[00102] Para cada grupo de coeficiente 4x4 (grupos são processados em ordem de varredura inversa), uma bandeira de grupo de coeficiente significante é codificada, indicando se ou não o grupo contém coeficientes não zero. Isto não é requerido para o grupo contendo o último coeficiente significante e é assumido ser 1 para o grupo de topo-esquerdo (contendo o coeficiente de CC). Se a bandeira for 1, então os elementos de sintaxe seguintes pertencendo ao grupo são codificados imediatamente seguindo isto: Mapa de significação:
[00103] Para cada coeficiente no grupo, uma bandeira é codificada indicando se ou não o coeficiente é significante (tem um valor não zero). Nenhuma bandeira é necessária para o coeficiente indicado pela posição último significante.
Mapa maior que um:
[00104] Para até oito coeficientes com valor de mapa de significação 1 (contado para trás do fim do grupo), isto indica se a magnitude é maior que 1. Bandeira maior que dois:
[00105] Para até um coeficiente com um valor de mapa maior que um 1 (o mais próximo ao fim do grupo), isto indica se a magnitude é maior que 2. Bits de sinal:
[00106] Para todos os coeficientes não zero, bits de sinal são codificados como caixas de CABAC equiprováveis, com o último bit de sinal (em ordem de varredura inversa) sendo possivelmente ao invés deduzido de paridade quando ocultação bit de sinal é usada.
Códigos de escape:
[00107] Para qualquer coeficiente cuja magnitude não foi descrita completamente por um elemento de sintaxe anterior, o resto é codificado como um código de escape.
[00108] Em termos gerais, codificação de CABAC envolve predizer um contexto, ou um modelo de probabilidade, para um próximo bit a ser codificado, baseado em outros dados previamente codificados. Se o próximo bit for igual ao bit identificado como "mais provável" pelo modelo de probabilidade, então a codificação da informação que "o próximo bit concorda com o modelo de probabilidade" pode ser codificada com grande eficiência. É menos eficiente codificar que "o próximo bit não concorda com o modelo de probabilidade", assim a derivação dos dados de contexto é importante para boa operação do codificador. O termo "adaptável" significa que o contexto ou modelos de probabilidade são adaptados, ou variados durante codificação, em uma tentativa para prover um bom casamento para os (como ainda não codificados) próximos dados.
[00109] Usando uma analogia simples, no idioma inglês escrito, a letra "U" é relativamente incomum. Mas em uma posição de letra imediatamente depois da letra "Q", é realmente muito comum. Assim, um modelo de probabilidade poderia estabelecer a probabilidade de um "U" como um valor muito baixo, mas se a letra atual for um "Q", o modelo de probabilidade para um "U" como a próxima letra poderia ser estabelecido a um valor de probabilidade muito alto.
[00110] Codificação de CABAC é usada, nos arranjos presentes, para pelo menos o mapa de significação e os mapas indicando se os valores não zero são um ou dois. Processamento de desvio - que nestas modalidades é idêntico à codificação de CABAC, mas para o fato que o modelo de probabilidade é estabelecido a uma distribuição de probabilidade igual (0,5:0,5) de 1s e 0s, é usado para pelo menos os dados de sinal e o mapa indicando se um valor é > 2. Para essas posições de dados identificadas como > 2, uma denominada codificação de dados de escape separada pode ser usada para codificar o valor real dos dados. Isto pode incluir uma técnica de codificação de Golomb-Rice.
[00111] O processo de modelagem de contexto e codificação de CABAC é descrito em mais detalhe em WD4: Minuta de Trabalho 4 de 'Codificação de Vídeo de Alta Eficiência', JCTVC-F803_d5, Minuta ISO/IEC 23008-HEVC; 201x(E) 28/10/2011.
[00112] O processo de CABAC será descrito agora em um detalhe menor.
[00113] CABAC, pelo menos até onde é usado no sistema de HEVC proposto, envolve derivar um "contexto" ou modelo de probabilidade em relação a um próximo bit a ser codificado. O contexto, definido por uma variável de contexto ou CV, então influencia como o bit é codificado. Em termos gerais, se o próximo bit for igual ao valor que a CV define como o valor mais provável esperado, então há vantagens em termos de reduzir o número de bits de saída precisado para definir esse bit de dados.
[00114] O processo de codificação envolve mapear um bit a ser codificado sobre uma posição dentro de uma gama de valores de código. A gama de valores de código é mostrada esquematicamente na Figura 18A como uma série de números inteiros adjacentes se estendendo de um limite inferior, m_Low, a um limite superior, m_high. A diferença entre estes dois limites é m_range, onde m_range = m_high - m_Low. Através de várias técnicas a serem descritas abaixo, em um sistema de CABAC básico, m_range é constrangido para se achar entre 128 e 254; em outra modalidade usando um número maior de bits para representar m_range, m_range pode se achar entre 256 e 510. m_Low pode ser qualquer valor. Pode começar a (digamos) zero, mas pode variar como parte do processo de codificação a ser descrito.
[00115] A gama de valores de código, m_range, é dividida em duas sub-gamas, por um limite 1100 definido com respeito à variável de contexto como:limite = m_Low + (CV * m_range)
[00116] Assim, a variável de contexto divide a gama total em duas subgamas complementares ou sub-porções do conjunto de valores de código, as proporções do conjunto nomeado a cada sub-gama sendo determinadas pela variável CV, uma sub-gama estando associada com um valor (de um próximo bit de dados) de zero, e a outra estando associada com um valor (do próximo bit de dados) de um. A divisão da gama representa as probabilidades assumidas pela geração da CV dos dois valores de bit para o próximo bit a ser codificado. Assim, se a sub-gama associada com o valor zero for menos que meia da gama total, isto significa que um zero é considerado menos provável, como o próximo símbolo, do que um 1.
[00117] Várias possibilidades diferentes existem para definir qual modo aplicar as sub-gamas aos possíveis valores de bit de dados. Em um exemplo, uma região inferior da gama (quer dizer, de m_Low ao limite) está por convenção definida como estando associada com o valor de bit de dados de zero.
[00118] Se mais que um bit estivesse sendo codificado a uma única operação, mais de duas sub-gamas poderiam ser providas para dar uma subgama correspondendo a cada possível valor dos dados de entrada a serem codificados.
[00119] O codificador e decodificador mantêm um registro de qual valor de bit de dados é o menos provável (frequentemente chamado o "símbolo menos provável" ou LPS). A CV se refere aos LPS, assim a CV sempre representa um valor entre 0 e 0,5.
[00120] Um próximo bit é mapeado agora à gama m_range, como dividida pelo limite. Isto é executado deterministicamente ambos no codificador e no decodificador usando uma técnica a ser descrita em mais detalhe abaixo. Se o próximo bit for um 0, um valor de código particular, representando uma posição dentro da sub-gama de m_Low ao limite, é nomeado àquele bit. Se o próximo bit for um 1, um valor de código particular na sub-gama do limite 1100 para m_high é nomeado àquele bit. Isto representa um exemplo de uma técnica pela qual modalidades podem selecionar uma da pluralidade de sub-gamas do conjunto de valores de código de acordo com o valor do bit de dados de entrada atual, e também um exemplo de uma técnica pela qual modalidades podem nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada.
[00121] O limite inferior m_Low e a gama m_range são então redefinidos para modificar o conjunto de valores de código em dependência do valor de código nomeado (por exemplo, em qual sub-gama o valor de código nomeado caiu) e o tamanho da sub-gama selecionada. Se o bit recém codificado for um zero, então m_Low está inalterada, mas m_range é redefinida para igualar m_range * CV. Se o bit recém codificado for então um 1, m_Low é movida à posição de limite (m_Low + (CV * m_range)) e m_range é redefinida como a diferença entre o limite e m_high (quer dizer, (1 - CV) * m_range).
[00122] Depois de tal modificação, uma detecção é feita sobre se o conjunto de valores de código é menos que um tamanho mínimo predeterminado (por exemplo, é m_range pelo menos 128).
[00123] Estas alternativas são ilustradas esquematicamente nas Figuras 18B e 18C.
[00124] Na Figura 18B, o bit de dados era um 1 e assim m_Low foi movida até a posição de limite prévio. Isto provê um conjunto revisado ou modificado de valores de código para uso em uma próxima sequência de codificação de bit. Note que em algumas modalidades, o valor de CV é mudado para a próxima codificação de bit, pelo menos em parte no valor do bit recém codificado. Isto é por que a técnica se refere a "contextos adaptáveis". O valor revisado de CV é usado para gerar um novo limite 1100'.
[00125] Na Figura 18C, um valor de 0 foi codificado, e assim m_Low permaneceu inalterada, mas m_high foi movida à posição de limite prévia. O valor de m_range é redefinido ou modificado como os novos valores de m_high - m_Low.
[00126] Neste exemplo, isto resultou em m_range cair abaixo de seu valor permissível mínimo (tal como 128). Quando este resultado é detectado, valor m_range é renormalizado ou aumentado em tamanho - que nas modalidades presentes é representado por m_range sendo dobrado, isso é, deslocado à esquerda por um bit, tantas vezes quanto é necessário para restabelecer m_range à gama exigida de 128 a 256. Um exemplo disto é ilustrado na Figura 18D, que representa a gama da Figura 18C, dobrada para obedecer aos constrangimentos exigidos. Um novo limite 1100'' é derivado do próximo valor de CV e a m_range revisada. Note que m_Low é semelhantemente renormalizada ou aumentada em tamanho sempre que m_range é renormalizada. Isto é feito a fim de manter a mesma relação entre m_Low e m_range.
[00127] Sempre que a gama tem que ser multiplicada por dois deste modo, um bit de dados de saída codificado é gerado, uma para cada estágio de renormalização.
[00128] Deste modo, o intervalo m_range e o limite inferior m_Low são modificados e renormalizados sucessivamente em dependência da adaptação dos valores de CV (que podem ser reproduzidos no decodificador) e da transferência de bits codificado. Depois que uma série de bits foi codificada, o intervalo resultante e o número de estágio de renormalização definem exclusivamente a transferência de bit codificada. Um decodificador que conhece um tal intervalo final poderia em princípio reconstruir os dados codificados. Porém, a matemática subjacente demonstra que não é realmente necessário definir o intervalo para o decodificador, mas só definir uma posição dentro desse intervalo. Este é o propósito do valor de código nomeado, que é mantido no codificador e passado ao decodificador na terminação de codificar os dados.
[00129] Para dar um exemplo simplificado, considere um espaço de probabilidade dividido em 100 intervalos. Neste caso, m_Low representaria o fundo de um espaço de probabilidade, e 0 e m_Range representariam seu tamanho, (100). Assuma para os propósitos deste exemplo que a variável de contexto está estabelecida a 0,5 (como está em relação ao caminho de desvio), assim o espaço de probabilidade é para ser usado para codificar bits binários com probabilidade fixa de 50%. Porém, os mesmos princípios se aplicam se valores adaptáveis da variável de contexto forem usados, tal que o mesmo processo de adaptação aconteça no codificador e no decodificador.
[00130] Para o primeiro bit, cada símbolo (0 ou 1) teria uma gama de símbolo de 50, com o símbolo de entrada 0 sendo nomeado (digamos) aos valores 0 a 49 inclusivo e o símbolo de entrada 1 sendo nomeado (digamos) aos valores 50 a 99 inclusivo. Se um 1 for para ser o primeiro bit a ser codificado, então o valor final da transferência deve se achar na gama de 50 a 99, consequentemente m_Low se torna 50 e m_Range se torna 50.
[00131] Para codificar o segundo bit, a gama é ademais subdividida em gamas de símbolo de 25, com um símbolo de entrada de 0 levando os valores 50 a 74 e um símbolo de entrada de 1 levando os valores 75 a 99. Como pode ser visto, seja qual for o símbolo codificado como o segundo bit, o valor final ainda está entre 50 e 99, preservando o primeiro bit, mas agora um segundo bit foi codificado no mesmo número. Igualmente se o segundo bit fosse usar um modelo de probabilidade diferente para o primeiro, ainda não afetaria a codificação do primeiro bit porque a gama sendo subdividida é ainda 50 a 99.
[00132] Este processo continua no lado de codificador para cada bit de entrada, renormalizando (por exemplo, dobrando) m_Range e m_Low onde quer que necessário, por exemplo em resposta a m_Range caindo abaixo de 50. Ao final do processo de codificação (quando a transferência é terminada), o valor final foi escrito à transferência.
[00133] No lado de decodificador, o valor final é lido da transferência (consequentemente o nome m_Value) - digamos por exemplo, o valor é 68. O decodificador aplica a mesma gama de símbolo dividida ao espaço de probabilidade inicial e compara seu valor para ver em qual gama de símbolo se acha. Vendo que 68 se acha na gama de 50 a 99, decodifica um 1 como o símbolo para seu primeiro bit. Aplicando a segunda gama dividida da mesma maneira como o codificador, vê que 68 se acha na gama de 50 a 74 e decodifica 0 como o segundo bit, e assim por diante.
[00134] Em uma implementação real, o decodificador pode evitar ter que manter m_Low como o codificador faz subtraindo o valor de fundo de cada gama do símbolo decodificado de m_Value (neste caso, 50 é subtraído de m_Value para deixar 18). As gamas de símbolo são então sempre subdivisões do 0 a gama (m_range - 1) (assim, a gama de 50 a 74 se torna 0 a 24).
[00135] É importante notar que, se só dois bits fossem para serem codificados deste modo, o codificador poderia escolher algum valor final dentro da gama de 50 a 74 e eles todos decodificariam aos mesmos dois bits "10" (um seguido por zero). Mais precisão só é precisada se bits adicionais forem para serem codificados e na prática, o codificador de HEVC escolheria sempre 50, o fundo da gama. As modalidades discutidas na aplicação presente buscam fazer uso dessa nova gama achando certos bits que, quando estabelecidos apropriadamente, garantem o valor final decodificará corretamente indiferente quais valores dos bits restantes são, livrando esses bits restantes para levar outra informação. Por exemplo, na codificação de amostra dada acima, se o primeiro dígito fosse estabelecido a 6 (ou 5), então o valor final sempre estaria na gama de 50 a 74 indiferente do valor do segundo dígito; consequentemente, o segundo dígito pode ser usado para levar outra informação.
[00136] Como pode ser visto, uma transferência infinita de bits pode ser codificada usando a mesma gama de probabilidade (dadas frações de precisão infinita) subdividindo-a repetidamente. Na prática, porém, precisão infinita é impossível e números não inteiros são para serem evitados. Para este propósito, renormalização é usada. Se a gama de 50 a 74 fosse para ser usada para codificar um terceiro bit, as gamas de símbolo teriam ordinariamente que ser 12,5 intervalos cada uma, mas ao invés, m_Range e m_Low podem ser dobradas (ou caso contrário multiplicadas por um fator comum) para 50 e 100 respectivamente e as gamas de símbolo seriam agora subdivisões da gama de 100 a 149, isto é, 25 intervalos cada uma. Esta operação é equivalente a dobrar retroativamente o tamanho do espaço de probabilidade inicial de 100 a 200. Desde que o decodificador mantém a mesma m_Range, ele pode aplicar renormalização nos mesmos momentos como o codificador.
[00137] A variável de contexto CV está definida como tendo (em uma modalidade de exemplo) 64 possíveis estados que indicam sucessivamente probabilidades diferentes de um limite inferior (tal como 1%) a CV = 63 por uma probabilidade de 50% a CV = 0.
[00138] Em um sistema adaptativo, CV é mudada ou modificada de um bit ao próximo de acordo com vários fatores conhecidos, que podem ser diferentes dependendo do tamanho de bloco de dados a ser codificado. Em alguns casos, o estado de vizinhança e blocos de imagem prévios pode ser levado em conta. Assim, as técnicas descritas aqui são exemplos de modificar a variável de contexto, para uso em relação a um próximo valor de dados de entrada, de modo a aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual.
[00139] As funções de selecionar uma sub-gama, nomeando o bit atual a um valor de código, modificar o conjunto de valores de código, detectar se o conjunto é menos que um tamanho mínimo, e modificar a variável de contexto pode tudo ser executado pelo modelador de contexto 950 e o motor de codificação 960, atuando juntos. Assim, embora eles sejam desenhados como itens separados na Figura 17 para clareza da explicação, eles atuam juntos para prover uma função de modelagem e codificação de contexto. Porém, para clareza adicional, referência é feita à Figura 19, que ilustra estas operações e funcionalidades em mais detalhe.
[00140] O valor de código nomeado é gerado de uma tabela que define, para cada possível valor de CV e cada possível valor de bits 6 e 7 de m_range (notando que bit 8 de m_range é sempre 1 por causa do constrangimento no tamanho de m_range), uma posição ou grupo de posições às quais um bit recentemente codificado deveria ser alocado um valor de código na sub-gama pertinente.
[00141] Figura 19 ilustra esquematicamente um codificador de CABAC usando as técnicas descritas acima.
[00142] A CV é iniciada (no caso da primeira CV) ou modificada (no caso de CVs subsequentes) por uma unidade de derivação de CV 1120. Um gerador de código 1130 divide a m_range atual de acordo com CV, seleciona uma sub-gama e gera um código de dados nomeado dentro da sub_range apropriada, por exemplo usando a tabela mencionada acima. Uma unidade de reajuste de gama 1140 reajusta m_range àquela da sub-gama selecionada para modificar o conjunto de valores de código como descrito acima. Um normalizador 1150 detecta se o valor resultante de m_range está abaixo do valor permissível mínimo e, se necessário, renormaliza a m_range uma ou mais vezes, emitindo um bit de dados codificado de saída para cada tal operação de renormalização. Como mencionado, ao término do processo, o valor de código nomeado é também produzido.
[00143] Em um decodificador, mostrado esquematicamente na Figura 20, a CV é iniciada (no caso da primeira CV) ou modificada (no caso de CVs subsequentes) por uma unidade de derivação de CV 1220 que opera da mesma maneira como a unidade 1120 no codificador. Uma unidade de aplicação de código 1230 divide a m_range atual de acordo com CV e detecta em qual sub-gama o código de dados se acha. Uma unidade de reajuste de gama 1240 reajusta m_range àquela da sub-gama selecionada de modo a modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada. Se necessário, um normalizador 1250 renormaliza a m_range em resposta a um bit de dados recebido.
[00144] Modalidades proveem uma técnica para terminar uma transferência de CABAC. As modalidades serão descritas no contexto de um sistema de exemplo no qual a gama de valor de código tem um valor de máximo de 512 (em vez de 128 como descrito acima) e assim é constrangida para se achar dentro da metade superior desta gama, isso é, de 256 a 510.
[00145] A técnica pode produzir uma perda em média de 1,5 bits (quer dizer, uma perda muito menor que técnicas de terminação de transferência prévias causaram). Um segundo método alternativo também é apresentado que pode produzir uma perda média de 1 bit. Aplicações destas técnicas foram sugeridas para incluir terminação da transferência de CABAC antes de enviar dados de IPCM (sem frequência separada), e terminação da transferência para fila por fatia. A técnica está baseada no reconhecimento de que a variável de CABAC pode ser estabelecida a qualquer valor dentro da gama correta na hora de terminação. Assim, a variável de CABAC é estabelecida a um valor que tem vários zeros (bit menos significante), de forma que quando o valor seja liberado à transferência de dados, os zeros possam ser ignorados efetivamente.
[00146] Em técnicas atuais, terminar uma transferência de CABAC faz 8 bits serem liberados à transferência de dados (quer dizer, perdidos ou desperdiçados). A técnica é ilustrada com um exemplo onde intra-quadros são terminados depois de cada LCU ou fatia de imagem (quer dizer, depois de codificar um grupo de valores de dados representando valores de dados relativos a uma sub-área de imagem respectiva particular), permitindo aos dados de desvio de coeficiente (bits de sinal/códigos de escape) serem colocados na transferência de bits em um formato bruto.
[00147] Um processo para terminar a transferência de CABAC é aplicado ao término de cada fatia e antes de dados de IPCM. Em modalidades, este processo assume (para os propósitos desta discussão) que a probabilidade que a transferência é para ser terminada é estabelecida a 0,54% em média. (Quando um valor de dados (1 ou 0) é codificado, a m_range atual é subdividida em duas gamas de símbolo, representando a probabilidade de 1 ou 0, respectivamente. Para o valor de "bandeira de fim de transferência" especial, a gama de símbolo para 1 sempre é 2. Consequentemente, a probabilidade do valor de dados ser 1 é dependente do valor da m_range atual. Em algumas modalidades, como discutido acima, m_range pode variar entre 256 e 510, assim a probabilidade de terminação, portanto, varia entre 2/510 = 0,3922% e 2/256 = 0,7813%).
[00148] Para o codificador, este processo é:• se a transferência não for para ser terminada, a gama de CABAC m_range é decrementada por 2, e o motor de CABAC é for renormalizada por 1 lugar se preciso (quer dizer, m_Low e m_range são renormalizadas); processamento na transferência de CABAC atual continua.• se a transferência for para ser terminada, o m_Low de CABAC' é incrementado por 'a gama menos 2', a gama é estabelecida a 2, e o motor de CABAC é renormalizada por 7 lugares, seguido pela emissão de um '1' binário adicional. Este processo é equivalente a uma renormalização de 8 lugares, onde o valor sendo renormalizado foi forçado a ser um número ímpar.
[00149] Pode haver ocasiões onde o processo anterior não é ideal - isto é, onde a probabilidade da transferência é variável, ou estabelecida a uma porcentagem mais alta, ou até mesmo uma certeza (probabilidade de 1).
[00150] Modalidades podem prover um método por meio do qual a transferência de CABAC pode ser terminada imediatamente com apenas 2 renormalizações, com uma perda de 1,5 bits (em média) e impacto desprezível na complexidade de decodificador e codificador. Um método alternativo também é indicado que pode reduzir os dados complementares a apenas 1 bit, mas às custas de um aumento em complexidade de decodificador de CABAC. Ambos os métodos podem então ser usados juntos com uma variável de contexto adaptável padrão se houver uma probabilidade variável de terminação, ou junto com um mecanismo de porcentagem fixa (semelhante a uma variável de contexto não adaptável).
[00151] Note que como discutido acima, m_Low e m_Range são renormalizadas juntas. • Algoritmo • Método
[00152] As etapas do codificador são como segue: m_Low=(m_Low+128)&~127 {ou m_Low=(m_Low+127)&~127} Force 2 estágios de renormalização de m_Low e chame test_write_out () [escreva o valor ao fluxo] Antes de codificar próxima transferência de CABAC, fixe m_Range=510, m_Low=0.
[00153] Notação: & é uma operação E, e ~ significa o inverso binário (assim ~127 é o inverso binário do valor binário correspondendo à decimal 127, de forma que uma operação E com o inverso binário de um número tal como decimal 127 (que tem uma pluralidade de bits menos significantes ou LSBs igual a 1) é equivalente a estabelecer esse número de LSBs do valor resultante a zero). A função test_write_out () verifica se qualquer bit ao topo (fim de MSB) de m_Low é elegível para ser enviado à transferência de saída, escrevendo-os nesse caso. No contexto do pseudocódigo mostrado acima, os bits novos criados pela "renormalização forçada" serão escritos por esta operação. As etapas do decodificador são como segue: Retroceda a transferência de entrada por 7 bits (isto é, mova posição lida atrás por 7 bits). Antes de decodificar próxima transferência de CABAC, fixe m_Range=0, e leia m_value da transferência de bits.
[00154] Este método tem um baixo impacto de processamento no decodificador e codificador.
[00155] Em relação a m_Low, note que o codificador gera uma transferência adicionando repetidamente a m_Low. O decodificador lê essa transferência começando com o resultado final do codificador e subtraindo repetidamente disto. O decodificador chama os bits lidos da transferência "m_uiValue" (ou m_value na notação desta descrição) em lugar de m_Low e é isto que deveria ser lido da transferência de bits. Isto é pertinente neste caso onde algumas modalidades requerem que o decodificador mantenha m_Low como também m_uiValue assim sabe o que o codificador está fazendo. Nesse caso, m_Low é gerado no decodificador exatamente do mesmo modo como m_Low do codificador.
Método alternativo
[00156] Este método aumenta a complexidade de decodificadores atuais como requer que o decodificador mantenha m_Low. Se manutenção de m_Low for requerida por outras propostas, então esta complexidade adicional é novamente mínima.
[00157] As etapas do codificador são como segue: Deixe test256=(m_Low+255)&~255 Se (test256+256 < m_Low+m_Range) m_Low=m_test256 Force 1estágio de renormalização de m_Low e chame test_write_out (). Senão (como antes) m_Low=(m_Low+128)&~127 {ou m_Low=(m_Low+127)&~127} Force 2 estágios de renormalização de m_Low e chame test_write_out (). Antes de codificar próxima transferência de CABAC, fixe m_Range=510, m_Low=0.
[00158] As etapas do decodificador são como segue: Deixe test256=(m_Low+255)&~255 Se (test256+256 < m_Low+m_Range) Retroceda a transferência por 8 bits Senão (como antes) Retroceda a transferência por 7 bits Antes de decodificar próxima transferência de CABAC, fixe m_Range=0, fixe m_Low = 0 e leia m_value da transferência de bits.
Teoria
[00159] Para o codificador de CABAC, os dados escritos à transferência (ou armazenados temporariamente) são concatenados com m_Low é um valor de n bit baixo indicando o valor mais baixo que a saída final pode ser. O valor mais alto, alto, é a soma de baixo e m_Range, uma variável mantida pelo codificador para estar dentro da gama de 256 (inclusivo) a 511 (exclusivo). Ao término da transferência, qualquer valor entre baixo (inclusivo) e alto (exclusivo) pode ser selecionado como o valor de saída final, sem afetar a decodificação. Se a decodificação poderia ocorrer sem ser dependente dos n LSBs do valor, então os n LSBs poderiam ser substituídos com dados da próxima seção da transferência de bits.
[00160] Deixe v ser um valor entre baixo e alto, onde n LSBs são 0, e onde se os últimos n LSBs fossem 1, o valor resultante V ainda seria menos que alto. Desde que "alto - baixo" é pelo menos 256, então sempre haverá um valor v entre baixo e alto que tem pelo menos 7 LSBs que são 0. Isto é, o valor v é o primeiro valor entre baixo e alto que é divisível por 128 sem um resto.
[00161] A maneira mais simples para alcançar isto é uma rotina de alinhamento de potência de 2 padrão, isto é:v=(low+127)&~127
[00162] Porém, desde que a gama é pelo menos 256, então:v=(low+128)&~127 também é suficiente (e resulta em um codificador ligeiramente menor).
[00163] Para a parte atual da transferência de bits, o codificador produziria o valor 'v', exceto para os 7 bits de fundo, isto é alcançado renormalizando m_Low por 2 lugares. Ao término da transferência de bits, o decodificador teria lido 7 bits da próxima seção da transferência de bits, e, portanto, teria que 'rebobinar' a transferência de bits por 7 bits.
[00164] Há casos onde os 8bits de fundo não são exigidos decodificar completamente o fluxo, com a ilustração mais simples sendo onde "m_Low = 0", e estes são explorados pelo algoritmo alternativo. Neste algoritmo alternativo, o valor v entre baixo e alto com 8 LSBs de 0é calculado, e então um teste é aplicado para verificar se há um valor correspondente V. O processo de decisão requer testes em baixo e alto, e desde que o decodificador também deve tomar a mesma decisão, o decodificador precisaria rastrear m_Low.
[00165] Em ambas as versões do algoritmo de codificador, há uma escolha para o caminho de 7 bits, que resultará em uma transferência de bits diferente, mas será decodificável pelo mesmo decodificador.
[00166] Com referência à Figura 19 descrita acima, as unidades 1120 e 1130 representam modalidades de um seletor para selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código, e uma unidade de nomeação de dados para nomear o valor de entrada atual a um valor de código. A unidade 1140 representa uma modalidade de uma unidade de modificação de dados. A unidade 1150 representa uma modalidade de um detector para detectar se o conjunto de valores de código é menos que um tamanho mínimo e executar as outras funções daquele detector, por conseguinte. A unidade 1150 também representa uma modalidade de um terminador de dados executando a funcionalidade de terminação de dados descrita acima e aquela descrita abaixo, e em particular tomando a decisão sobre quando terminar o fluxo.
[00167] Com referência à Figura 20 descrita acima, as unidades 1220, 1230, 1240 e 1250 representam coletivamente modalidades de controlador de ponteiro e uma unidade de colocação, visto que elas são operáveis para executar a funcionalidade descrita acima em relação a estas unidades.
Aplicações
[00168] Possíveis aplicações para isto incluem: 1. Terminação para a última LCU codificada para uma fatia, especialmente em uma configuração de estilo de 'fila por fatia', onde a probabilidade pode ser significativamente mais alta que 0,54%; neste arranjo, modalidades podem prover um método de codificação de dados para codificar valores de dados de entrada sucessivos representando dados de vídeo, o método incluindo as etapas de: selecionar uma de uma pluralidade de subgamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual, as proporções das sub-gamas relativas ao conjunto de valores de código estando definidas por uma variável de contexto associada com aquele valor de dados de entrada; nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada; modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; detectar se o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente o tamanho do conjunto de valores de código até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; modificar a variável de contexto, para uso em relação a um próximo bit ou valor dados de entrada, para aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual; e depois de codificar um grupo de valor de dados de entrada correspondendo a um conjunto de blocos de dados de vídeo dentro de uma fatia dos dados de vídeo que são codificados sem referência a outros dados de vídeo, terminar os dados de saída: estabelecendo um valor definindo um fim do conjunto de valores de código a um valor tendo uma pluralidade de bits menos significantes igual a zero; aumentando o tamanho do conjunto de valores de código; e escrevendo o valor definindo o fim do conjunto de valores de código aos dados de saída. 2. Terminação para a última possível LCU para uma fatia, como terminação depois que a última possível LCU de uma fatia é uma certeza; neste arranjo, modalidades podem prover um método de codificação de dados para codificar valores de dados de entrada sucessivos representando dados de vídeo, o método incluindo as etapas de: selecionar uma de uma pluralidade de sub-gama complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual, as proporções das sub-gamas relativas ao conjunto de valores de código estando definidas por uma variável de contexto associada com aquele valor de dados de entrada; nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada; modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; detectar se o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente o tamanho do conjunto de valores de código até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; modificar a variável de contexto, para uso em relação a um próximo bit ou valor dados de entrada, para aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual; e depois de codificar um grupo de valor de dados de entrada representando o todo de uma fatia de dados de vídeo que são codificados sem referência a outros dados de vídeo, terminar os dados de saída: estabelecendo um valor definindo um fim do conjunto de valores de código a um valor tendo uma pluralidade de bits menos significantes igual a zero; aumentando o tamanho do conjunto de valores de código; e escrevendo o valor definindo o fim do conjunto de valores de código aos dados de saída. 3. Terminação antes de dados de IPCM, possivelmente junto com uma variável de contexto; neste arranjo, modalidades podem prover um método de codificação de dados para codificar valores de dados de entrada sucessivos representando dados de vídeo separados em frequência, o método incluindo as etapas de: selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual, as proporções das sub-gamas relativas ao conjunto de valores de código estando definida por uma variável de contexto associada com aquele valor de dados de entrada; nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada; modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; detectar se o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente o tamanho do conjunto de valores de código até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; modificar a variável de contexto, para uso em relação a um próximo bit ou valor dados de entrada, para aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual; e depois de codificar um grupo de valores de dados de entrada tal que um próximo grupo de valores de dados a ser codificado represente dados de vídeo não separados em frequência, terminar os dados de saída: estabelecendo um valor definindo um fim do conjunto de valores de código a um valor tendo uma pluralidade de bits menos significantes igual a zero; aumentando o tamanho do conjunto de valores de código; e escrevendo o valor definindo o fim do conjunto de valores de código aos dados de saída. 4. Terminação da transferência para prevenir o mecanismo de "bits pendentes" ficar longo demais; neste arranjo, modalidades podem prover um método de codificação de dados para codificar valores de dados de entrada sucessivos, o método incluindo as etapas de: selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual, as proporções das sub-gamas relativas ao conjunto de valores de código estando definidas por uma variável de contexto associada com aquele valor de dados de entrada; nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada; modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; detectar se o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar o tamanho do conjunto de valores de código sucessivamente até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; modificar a variável de contexto, para uso em relação a um próximo bit ou valor dados de entrada, para aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual; detectar se um conjunto de valores de dados a ser codificado por uma técnica de codificação diferente excede um tamanho predeterminado, e nesse caso, terminar os dados de saída: estabelecendo um valor definindo um fim do conjunto de valores de código a um valor tendo uma pluralidade de bits menos significantes igual a zero; aumentando o tamanho do conjunto de valores de código; e escrevendo o valor definindo o fim do conjunto de valores de código aos dados de saída.
[00169] A parte seguinte da descrição está relacionada a estender a operação de codificadores e decodificadores tais como aqueles descritos acima para operação a resoluções de vídeo mais altas e QPs correspondentemente baixos (inclusivo negativos). QPs operacionais baixos podem ser precisados se o codec for para suportar verdadeiramente profundidades de bit altas. Possíveis fontes de erros que podem ser causados por limitações de precisão interna presentes em codificadores e decodificadores tais como aqueles definidos por HEVC serão discutidas. Algumas mudanças para essas precisões podem mitigar os erros e por esse meio estender a gama operacional de HEVC. Além disso, mudanças à codificação de entropia são apresentadas.
[00170] Na hora de depositar o pedido presente, HEVC Versão 1 descreve um codec de 8 e 10 bits; Versão 2 é para incluir operação de 12 e 14 bits. Embora o teste ou software de demonstração tenha sido escrito para permitir dados profundidades de bit de entrada até 14, a habilidade do codec para codificar 14 bits não corresponde necessariamente ao modo que o codec opera dados de resolução de 8 ou 10 bits. Em alguns casos, o processamento interno pode introduzir ruído, que pode conduzir a uma perda efetiva de resolução. Por exemplo, se a relação de sinal de pico para ruído (PSNR) para dados de entrada de 14 bits for tão baixa que os dois bits menos significantes são reduzidos efetivamente a ruído, então o codec está só operando efetivamente à resolução de 12 bits. É, portanto, apropriado apontar para um sistema tendo funções operacionais internas que permitem dados de entrada de resolução mais alta serem usados (por exemplo, dados de entrada de resolução de 12 ou 14 bits) sem introduzir muito ruído, erros ou outros artefatos de modo a reduzir a resolução efetiva (útil) dos dados de saída por uma quantidade significante.
[00171] O termo "profundidade de bit" e a variável bitDepth são usados aqui para indicar a resolução dos dados de entrada e/ou (de acordo com o contexto textual) do processamento de dados executado dentro do codec (o último também sendo conhecido como "profundidade de bit interna" usando terminologia de modelo de demonstração de software de HEVC). Por exemplo, para processamento de dados de 14 bits, bitDepth = 14.
[00172] No contexto do codec de 8 e 10 bits, parâmetros de quantização (QPs) na gama positiva (QP > 0) são discutidos. Porém, para cada bit adicional (mais de 8 bits) na resolução dos dados de entrada, o QP permissível mínimo (minQP) pode ser 6 mais baixo que 0, ou em outras palavras:minQP = -6*(bitDepth-8)
[00173] A variável "PSNR ", ou SNR de pico, está definida como uma função de erro médio quadrado (MSE) e profundidade de bit:PSNR=10 * log10(((2bitDepth)-1)2 / MSE)
[00174] Como pode ser visto na Figura 23, a ser discutida abaixo, não importa qual valor da profundidade de bit de processamento interno da implementação de codec de exemplo, a tendência geral é que as curvas de PSNR tenham pico ao redor 90 dB; para QPs mais negativos (do que o QP correspondendo ao pico da curva de PSNR), o desempenho de PSNR na verdade degrada.
[00175] Usando a equação para PSNR, a tabela seguinte de PSNRs para dadas profundidades de bit e MSE pode ser derivada:
Figure img0001
[00176] Se um codec de 14 bits só for capaz de alcançar uma PSNR de 72,2 dB, então cada valor de saída só é preciso dentro da gama de ±4 do valor original correspondente. Os dois bits menos significantes são, portanto, efetivamente ruído, assim o codec é realmente equivalente a um codec de 12 bits com dois bits aleatórios adicionais adicionados à saída. (É importante notar que esta análise está baseada em médias, e que de fato em algumas partes do quadro, qualidade melhor ou pior que esta média pode ser alcançada).
[00177] Estendendo este argumento, ao comparar PSNRs deste modo puramente numérico, poderia ser pensado que o melhor sistema seria, portanto na realidade um sistema de 8 bits com codificação sem perda, alcançando uma PSNR infinita (MSE=0). Porém, isto não leva inicialmente em conta a perda em arredondar ou truncar o vídeo de n bits (onde n é originalmente mais alto que 8) até 8 bits. Esta abordagem pode ser generalizada de acordo com os exemplos seguintes: • Se um sistema sem perda de (n-1) bits estivesse disponível para codificar os dados de n bits, então na saída, o MSE de n bits observado seria (0 + 12)/2=0,5. • Se um sistema sem perda de (n-2) bits estivesse disponível para codificar os dados de n bits, então na saída, o MSE de n bits observado seria (0 + 12+ 22+ 12)/4=1,5. • Se um sistema sem perda de (n-3) bits estivesse disponível para codificar os dados de n bits, então na saída, o MSE de n bits observado seria (0 + 12 + 22 + 32 + 42+ 32+ 22 + 12)/8=5,5. • Se um sistema sem perda de (n-4) bits estivesse disponível para codificar os dados de n bits, então na saída, o MSE de n bits observado seria: • 0 + 12 + 22 + 32 + 42 + 52 + 62 + 72 + 82 + 72 + 62 + 52 + 42 + 32 +22 + 12)/16=21,5.
[00178] Portanto, retornando ao exemplo específico, se o sistema de 14 bits não alcançar um MSE de 21,5 ou menos (equivalente a 71,0 dB) e se a taxa de bit de um sistema sem perda de 10 bits fosse semelhante, então numericamente falando, só 10 bits estão sendo efetivamente codificados.
[00179] Considere um sistema com perda, de baixa profundidade de bit de (n-r) bits com MSE de 'm'. Se este sistema for usado para codificar dados de n bits de profundidade de bit mais alta, seu MSE portanto será dado por (2r)2m.
[00180] Por exemplo, para um sistema com perda de (n-1) bits, MSE em um sistema de n bits seria 4m; para um sistema com perda de (n-2) bits, MSE em um sistema de n bits seria 16m; para um sistema com perda de (n-3) bits, MSE em um sistema de n bits seria 64m; e para um sistema com perda de (n-4) bits, MSE em um sistema de n bits seria 256m.
[00181] Portanto, para o caso onde com sistemas de profundidade de bit mais baixa com perda codificam dados de profundidade de bit (n bits) mais alta, sua perda é geralmente o contribuinte principal para o MSE observado no domínio de n bits, assim figuras de PSNR simples podem ser usadas como comparações diretas de qualidade.
[00182] Uma implementação de um codificador de HEVC (na hora de depositar o pedido) tem pico a 90 dB (como mostrado na Figura 23); isto pode ser considerado satisfatório para codificar dados de 11 bits, mas a este ponto operacional, o assunto de se qualquer melhoria adicional pode ser ganha será discutido abaixo.
[00183] Primeiro, as fontes potenciais de erro serão discutidas.
[00184] O sistema de núcleo de HEVC (versão 1) foi projetado para operação de 8 e 10 bits. Quando o número de bits aumenta, as precisões internas de partes do sistema podem ficar relevantes como fontes potenciais de erro, ruído ou artefatos conduzindo a uma perda efetiva de resolução global.
[00185] Um diagrama esquemático simplificado ilustrando uma transferência de dados por um codificador dos tipos discutido acima, tal como um codificador de HEVC, é mostrado na Figura 21. Um propósito de resumir o processo na forma mostrada na Figura 21 é indicar as limitações potenciais em resolução operacional dentro do sistema. Note que por esta razão, nem toda a funcionalidade de codificador é mostrada na Figura 21. Também note que a Figura 21 provê um exemplo de um aparelho para codificar valores de dados de entrada de um conjunto de dados (que pode ser valores de dados de vídeo). Ademais, note que (como discutido acima) técnicas usadas em um caminho de codificação dianteiro como aquele mostrado na Figura 21 também podem ser usadas no caminho de decodificação inverso complementar do codificador e também podem ser usadas em um caminho de decodificação dianteiro de um decodificador.
[00186] Dados de entrada 1300 de uma certa profundidade de bit são providos a um estágio de predição 1310 que executa tanto intra - ou inter- predição e subtrai a versão predita da imagem de entrada real, gerando dados residuais 1320 de uma certa profundidade de bit. Assim, o estágio 1300 corresponde geralmente aos itens 320 e 310 da Figura 5.
[00187] Os dados residuais 1320 são transformados em frequência por um estágio de transformada 1330 que envolve múltiplos estágios de processamento de transformada (rotulados como estágio 1 e estágio 2), correspondendo a multiplicações de métrica esquerda e direita na equação de transformada 2D, e opera de acordo com um ou mais conjuntos de matrizes de transformada 1340 (as transformadas podem ser implementadas por um processo de multiplicação de matriz) tendo uma certa resolução. Uma gama dinâmica máxima 1350 do processo de transformada, chamada MAX_TR_DYNAMIC_RANGE, se aplica aos cálculos usados neste processo. A saída do estágio de transformada é um conjunto de coeficientes de transformada 1360 de acordo com a MAX_TR_DYNAMIC_RANGE. O estágio de transformada 1330 corresponde geralmente à unidade de transformada 340 da Figura 5.
[00188] Os coeficientes 1360 são então passados a um estágio de quantização 1370 correspondendo geralmente ao quantizador 350 da Figura 5. O estágio de quantização pode usar um mecanismo de multiplicar por deslocamento sob o controle de coeficientes de quantização e listas de graduação 1380, incluindo corte à gama dinâmica máxima ENTROPY_CODING_DYNAMIC_RANGE (isso é, em modalidades, igual a MAX_TR_DYNAMIC_RANGE). A saída do estágio de quantização é um conjunto 1390 de coeficientes quantizados de acordo com ENTROPY_CODING_DYNAMIC_RANGE, que é então (no codificador completo, não mostrado aqui) passado a um estágio de codificação de entropia tal como aquele representado pela unidade de varredura 360 e codificador de entropia 370 da Figura 5.
[00189] Usando a notação introduzida em relação à Figura 21, as fontes principais de ruído de cálculo, ignorando (para os propósitos desta discussão) formação de ruído causado pelas várias predições e a RQT ('quad-tree' residual) e processos de decisão de RDOQ (quantização otimizada de distorção de taxa), em HEVC são discutidos abaixo.
Valores de coeficiente de matriz de transformada
[00190] Idealmente, a transformada inversa aplicada a coeficientes transformados reproduzirá os valores de entrada originais. Porém, isto está limitado pela natureza inteira dos cálculos. Em HEVC, os coeficientes de matriz de transformada têm 6 bits fracionários (isto é, eles têm um deslocamento à esquerda inerente de 6).
Resultados de deslocamento para MAX_TR_DYNAMIC_RANGE depois de cada estágio da transformada
[00191] A transformada dianteira resultará em valores que são bitDepth+log2(size) bits em tamanho. Depois do primeiro estágio da transformada, a largura dos coeficientes em bits deveria ser pelo menos bitDepth+log2(size) (entretanto bits adicionais ajudarão a manter mais precisão). Porém, em HEVC, estes intermediários são deslocados na transformada dianteira (codificador somente) de forma que eles nunca excedam MAX_TR_DYNAMIC_RANGE; semelhantemente para o segundo estágio. Na transformada inversa, os valores na saída de cada estágio são cortados a MAX_TR_DYNAMIC_RANGE.
[00192] Se MAX_TR_DYNAMIC_RANGE for menos que bitDepth+log2(size), então os valores fora da transformada dianteira na verdade serão deslocados à esquerda (em vez de direita) no estágio de quantização, e então cortados a 15 bits (ENTROPY_CODING_DYNAMIC_RANGE). De fato, se ENTROPY_CODING_DYNAMIC_RANGE for menos que bitDepth+log2(size)+1, corte ocorrerá quando QP é menos que (4 - (6 * (bitDepth - 8))).
[00193] Em HEVC, MAX_TR_DYNAMIC_RANGE (e ENTROPY_CODING_DYNAMIC_RANGE de 15 é usado para operação até 10 bits, embora coeficientes em blocos 32x32 possam ser cortados para QP < -8. Além disso, a falta de espaço para precisão interna também pode introduzir erros para baixos QPs.
Ruído adicionado durante quantização
[00194] Embora o quantizador e quantizador inverso de um codificador e decodificador adicionarão ruído ao quantizar, ruído adicional pode ser adicionado inadvertidamente quando as listas de graduação são aplicadas, e porque os coeficientes de quantização definidos nos arranjos 'quantScales' e 'invQuantScales' não são necessariamente recíprocos perfeitos.
[00195] Os efeitos de precisão de matriz de transformada e MAX_TR_DYNAMIC_RANGE são discutidos abaixo.
[00196] Dados empíricos foram obtidos por análise (sob o denominado perfil de intra-codificação) da codificação de cinco sequências de vídeo do denominado conjunto de teste de SVT (1920x1080 50p a 16 bits, reduzido de vídeo de 4K). Destas sequências, só os primeiros 150 quadros foram usados nos testes. Uma sexta sequência, chamada Traffic_RGB (2560x1600 30p a 12 bits) está definida pelas condições de teste de Extensão de Gama padrão aplicáveis a HEVC na hora de depositar o pedido presente.
[00197] Nos testes empíricos, se a profundidade de bit de arquivo (dados de entrada) era menos que a profundidade de bit interna sendo testada (a profundidade de bit de entrada do codec), então as amostras eram enchidas (com os LSBs estabelecidos a 0); se a profundidade de bit de arquivo era mais que a profundidade de bit interna, as amostras eram graduadas e arredondadas.
[00198] Na discussão abaixo, bitDepth é usado para descrever a profundidade de bit interna em lugar de a profundidade de bit dos dados de entrada. Sistemas com profundidade de bit interna (bitDepth) até 16 são considerados.
[00199] Figura 22 é um gráfico de taxa de bit contra parâmetro de quantização (QP) que ilustra esquematicamente o desempenho empírico do sistema de codificador da Figura 21 a várias profundidades de bit internas. Figura 23 é um gráfico de PSNR para o canal verde (na base que é mais fácil obter dados empíricos para um canal, e verde é o canal que contribui mais à percepção do espectador do vídeo de saída), contra QP. Os gráficos da Figura 22 são formados de uma combinação de dados para processamento de 16 bits (QP -48 a -26), 14 bits (QP -24 a -14), 12 bits (QP -12 a -2), 10 bits (QP 0 a 10) e 8 bits (QP 12 a 22). Filas verticais 1400 indicam esquematicamente os pontos aos quais a profundidade de bit muda. As múltiplas curvas na Figura 22 correspondem a resultados obtidos com sequências de teste respectivas diferentes.
[00200] Figura 22 mostra que a taxa de bit muda geralmente monotonicamente com QP.
[00201] Se referindo à Figura 23, a PSNR para bitDepth = 8 e bitDepth = 10 aumenta nitidamente a QPs de 4 e abaixo de (três pontos de dados mais à direita em cada curva). A QP 4, o divisor de quantização para 8 bits é 1 (QP - 8 para 10 bits), deixando o descasamento entre a DCT e IDCT e entre os coeficientes de quantização e desquantização como as únicas fontes prováveis de erro. Como o sistema tende para processamento sem perda, o MSE chega a zero e a SNR tem pico para cima. Figura 24 é um gráfico de PSNR contra taxa de bit para uma sequência de teste a uma série de profundidades de bit internas diferentes (8, 10, 12, 14, 16). As cinco curvas cobrem uma a outra quase exatamente para a maioria da sua gama e assim não podem ser distinguidas facilmente.
[00202] Um sistema de 10 bits no mesmo ponto operacional tem erros principalmente nos dois bits menos significantes, significando também que se aproxima de processamento sem perda ao considerar só precisão de 8 bits, mas como indicado em outro lugar nesta descrição, o ato de converter vídeo de 10 bits para vídeo de 8 bits também deve ser considerado. Isto adicionará um MSE de 1,5, que está oculto (quer dizer, não mostrado explicitamente como resultado nestes testes empíricos, mas ainda resultando em uma SNR global mais alta) ao considerar uma precisão mais baixa.
[00203] Em sistemas que não estão limitados por precisão interna a uma SNR de pico, este aumento para processamento sem perda pode ser visto para cada bitDepth quando QP cai abaixo de (4 - (6 * (bitDepth - 8))). Isto é mostrado na Figura 25, que é um gráfico de PSNR de canal verde contra taxa de bit para uma gama de profundidades de bit (8, 10, 12, 14, 16) com MAX_TR_DYNAMIC_RANGE = 21, ENTROIPY_CODING_DYNAMIC_RANGE = 21 e matrizes de transformada de 14 bits, com RDOQ desabilitado e salto de transformada desabilitado. As cinco curvas cobrem uma a outra, exceto para porções 1420 (da curva de 8 bits), 1430 (da curva de 10 bits), 1440 (da curva de 12 bits), 1450 (da curva de 14 bits) e 1460 (da curva de 16 bits). Pode ser visto que, para o mesmo número de bits, SNRs significativamente mais altas são alcançáveis que aquelas mostradas na Figura 24.
[00204] Os resultados empíricos mostraram que em modalidades da descrição presente, a precisão de matriz de transformada deveria ser pelo menos bitDepth-2. Figura 26 é um gráfico de PSNR contra taxa de bit para o canal verde de uma sequência de teste com bitDepth = 10 e MAX_TR_DYNAMIC_RANGE = 17, comparando várias matrizes de DCT de precisão.
[00205] Em modalidades, MAX_TR_DYNAMIC_RANGE deveria ser pelo menos 5 (que é o valor mínimo de log2(size)) mais que bitDepth. Precisão adicional foi mostrada ademais melhorar a eficiência de codificação.
[00206] Em modalidades,ENTROPY_CODING_DYNAMIC_RANGE deveria ser pelo menos 6 mais que a bitDepth (1 para o fator de "quantização" aplicado por QPs menos que (4 - (6 * (bitDepth - 8))) mais 5 para o valor máximo de log2(size)). Em outras modalidades, onde o corte para os valores de QP mais baixos não é uma preocupação, então a ENTROPY_CODING_DYNAMIC_RANGE deveria ser pelo menos 5 (o valor mínimo de log2(size)) mais que bitDepth.
[00207] Para o sistema de 16 bits, a precisão de matriz de transformada deveria ser estabelecida a 14, MAX_TR_DYNAMIC_RANGE deveria ser estabelecida a 21, e ENTROPY_CODING_DYNAMIC_RANGE deveria ser estabelecida a 22. Desde que ter mais precisão interna é raramente considerado prejudicial, estes parâmetros também foram testados a bitDepths diferentes, produzido resultados que demonstram que, para o mesmo número de bits, SNRs significativamente mais altas são alcançáveis, e que o sistema de precisão aumentada tem pontos operacionais de PSNR/MSE que são satisfatórios para bitDepths de até 16.
[00208] Se Extensões de Gama forem pretendidas para produzir um único novo perfil para todas as profundidades de bit, então o sistema descrito acima é satisfatório. Porém, se perfis diferentes são para serem descritos para bitDepths máximas diferentes, então ter valores de parâmetro diferentes pode ser útil para reduzir a complexidade de hardware em sistemas que não requerem os perfis mais altos. Em algumas modalidades, os perfis diferentes podem definir valores diferentes para precisão de matriz de transformada, MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE.
[00209] Em outras modalidades, o perfil permitiria aos valores de alguma ou toda de precisão de matriz de transformada, MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE serem escolhidos de uma lista de valores permissíveis pelo codificador (com o custo de implementação sendo um critério de seleção), ou uma função de informação lateral tal como o bitDepth. Porém, isto pode requerer múltiplos conjuntos de matrizes de transformada se a precisão de matriz de transformada for para ser variada e por esta razão, em modalidades adicionais só uma precisão de matriz de transformada está definida para um perfil, com essa precisão de matriz de transformada correspondendo ao valor recomendado para a máxima profundidade de bit para qual o perfil está projetado. Um conjunto de possíveis perfis é proposto abaixo com referência à Figura 28.
[00210] Valores de exemplos de precisão de matriz de transformada são mostrados, MAX_TR_DYNAMIC_RANGE, ENTROPY_CODING_DYNAMIC_RANGE e bitDepth na tabela seguinte:
Figure img0002
[00211] Na tabela, valores marcados com um '*' estão cortados a um mínimo de 15, em linha com a descrição atual de HEVC. Os valores marcados com t e $ são maiores que aqueles especificados para a descrição atual de HEVC, esses sendo 15 e 6 respectivamente.
[00212] Se perfis diferentes forem para serem usados, então em modalidades da descrição, estas especificações podem ser usadas como mínimos (notando que o sistema de 10 bits de HEVC versão 1 não cumpre totalmente estes objetivos). Usar valores menores que estes mínimos indicados é possível, embora isto degradará a PSNR para taxas de bit mais altas (QPs mais baixas).
[00213] Por conseguinte, a tabela acima dá um exemplo de um arranjo no qual a precisão e/ou gama dinâmica de um ou mais estágios de codificação (e decodificação complementar) é estabelecida de acordo com a profundidade de bit dos dados de vídeo.
[00214] Em algumas modalidades, porém, os dados de luma e croma podem ter profundidades de bit diferentes.
[00215] Por conseguinte, em tais situações, embora a precisão e/ou valores de gama dinâmica poderiam ser estabelecidos diferentemente (como entre dados de luma e croma), de forma que um conjunto de valores seja adotado para dados de luma e outros, conjunto de valores potencialmente diferente é adotado para dados de croma, modalidades da descrição presente operam este assunto de um modo diferente.
[00216] Algumas modalidades reconhecem que pode ser vantajoso, do ponto de vista de eficiência de implementação, usar a mesma precisão e/ou valores de gama dinâmica para ambos dados de luma e croma, enquanto ainda mantendo a habilidade para variar esses valores de acordo com profundidade de bit. O uso dos mesmos parâmetros entre os dados de luma e croma permite um único caminho de codificação ser estabelecido para dados de luma e croma, evitando a necessidade para instalar (tanto em uma implementação de software ou um hardware) dois caminhos diferentes, programáveis ou controláveis separadamente.
[00217] A seleção de qual conjunto de parâmetros usar pode estar de acordo com uma regra predeterminada. Por exemplo, os parâmetros relativos aos dados de luma podem ser selecionados. Alternativamente, e dando flexibilidade de operação melhorada, os parâmetros de acordo com esse componente de vídeo (por exemplo, luma, croma) tendo a maior profundidade de bit dos componentes de vídeo podem ser selecionados. Assim, por exemplo, usando a tabela acima, se a profundidade de bit de luma fosse (digamos) 16 e a profundidade de bit de croma fosse (digamos) 14, então a coluna de parâmetros relativos à profundidade de bit de 16 seria usada para processamento de luma e croma.
[00218] A profundidade de bit e/ou a relação da profundidade de bit para os parâmetros discutidos acima e/ou um índice em uma tabela de parâmetros tal como aquela mostrada acima pode ser definida por um ou mais "conjuntos de parâmetros" dos dados de vídeo. Ao nível mais alto está um conjunto de parâmetros de vídeo (VPS), seguido por (em nível decrescente, correspondendo a mais granularidade) um conjunto de parâmetros de sequência (SPS), onde uma sequência contém um ou mais quadros, um conjunto de parâmetros de quadro (PPS), e um conjunto de parâmetros de fatia, onde um quadro contém uma ou mais fatias. As relações ou profundidades de bit ou precisão e/ou valores de gama dinâmica podem ser definidas por quaisquer destes, mas em algumas modalidades eles são definidos pelo SPS.
[00219] Por conseguinte, nas modalidades recém descritas, a precisão e/ou valores de gama dinâmica para um ou mais estágios de codificação estão arranjados para variar de acordo com a profundidade de bit de vídeo, tal que se a profundidade de bit diferir entre componentes de vídeo (por exemplo, entre dados de luma e croma), então uma regra predeterminada seja usada para selecionar um único conjunto de precisão e/ou valores de gama dinâmica para uso com todos os componentes de vídeo. Considerações semelhantes se aplicam em relação a dados de imagem (em lugar de dados de vídeo). Princípios semelhantes se aplicam ao codificador e decodificador. Por conseguinte, estes arranjos também podem prover um exemplo de um arranjo no qual, para dados de imagem de entrada ou saída tendo componentes de imagem de profundidades de bit diferentes, um único conjunto da máxima gama dinâmica e/ou a precisão de dados das matrizes de transformada é selecionado para uso com todos os componentes de imagem.
[00220] Em algumas modalidades, o único conjunto da máxima gama dinâmica e/ou a precisão de dados das matrizes de transformada é selecionado como aqueles valores relativos àquele dos componentes de imagem tendo a maior profundidade de bit.
[00221] Note que no lado de decodificador, e no caminho inverso do codificador, em algumas modalidades, a mesma (ou uma ou ambas da mesma) máxima gama dinâmica e/ou a precisão de dados das matrizes de transformada pode ser usada como aquelas usadas no lado de codificador. Em outras modalidades, a precisão de dados das matrizes de transformada inversa (lado de decodificador) é estabelecida a um valor predeterminado tal como 6.
[00222] Exemplos destes arranjos serão descritos ademais abaixo com respeito às Figuras 38 e 39.
[00223] Voltando agora ao sistema de CABAC, como discutido acima, isto provê um exemplo de uma técnica de codificação envolvendo selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual, o conjunto de valores de código estando definido por uma variável de gama, nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada, modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada, e detectar se a variável de gama definindo o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente a variável de gama para aumentar o tamanho do conjunto de valores de código até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente. Em modalidades, as proporções das sub-gamas relativas ao conjunto de valores de código estão definidas por uma variável de contexto associada com o valor de dados de entrada. Modalidades do arranjo de CABAC envolvem: seguir a codificação de um valor de dados de entrada, modificar a variável de contexto, para uso em relação a um próximo valor de dados de entrada, de modo a aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados de entrada atual.
[00224] Também como discutido acima, em algumas modalidades, o codificador de entropia de HEVC CABAC codifica elementos de sintaxe usando os processos seguintes:
[00225] O local do último coeficiente significante (em ordem de varredura) na TU é codificado.
[00226] Para cada grupo de coeficiente 4x4 (grupos são processados em ordem de varredura inversa), uma bandeira de grupo de coeficiente significante é codificada, indicando se ou não o grupo contém coeficientes não zero. Isto não é requerido para o grupo contendo o último coeficiente significante e é assumido ser 1 para o grupo de topo-esquerdo (contendo o coeficiente de CC). Se a bandeira for 1, então os elementos de sintaxe seguintes pertencendo ao grupo são codificados imediatamente seguindo isto: Mapa de significação; Mapa maior que um; Bandeira maior que dois; Bits de sinal; e Códigos de escape.
[00227] Este arranjo é ilustrado esquematicamente na Figura 29. A uma etapa 1500, o codificador de CABAC verifica se um grupo atual contém o último coeficiente significante. Nesse caso, o processo termina. Se não, o processo procede a uma etapa 1510, à qual o codificador verifica se o grupo atual é o grupo de topo-esquerdo contendo o coeficiente de CC. Nesse caso, controle passa a uma etapa 1530. Se não, a uma etapa 1520, o codificador detecta se o grupo atual contém coeficientes não zero. Se não, o processo termina. Nesse caso, então na etapa 1530, um mapa de significação é gerado. A uma etapa 1540, um mapa > 1 é gerado que indica, para até 8 coeficientes com mapa de significação valor 1, contado para trás do fim do grupo, se a magnitude é maior que 1. A uma etapa 1550, um mapa > 2 é gerado. Para até 1 coeficiente com valor de mapa > 1 de 1 (o mais próximo ao fim do grupo), isto indica se a magnitude é maior que 2. A uma etapa 1560, bits de sinal são gerados e na etapa 1570, códigos de escape são gerados para qualquer coeficiente cuja magnitude não foi descrita completamente por um elemento de sintaxe anterior (quer dizer, dados gerados em quaisquer das etapas 1530-1560).
[00228] Para um sistema de 16 bits, 14 bits ou até mesmo 12 bits no ponto operacional onde o MSE é menos que 1 (tipicamente a QPs -34, -22 e - 10, respectivamente), o sistema tipicamente produz muito pouca compressão (para 16 bits, na verdade incha os dados de fonte). Os coeficientes são números geralmente grandes, e, portanto, são quase sempre codificados em escape. Por essa razão, duas mudanças propostas foram feitas ao codificador de entropia para permitir profundidades de bit mais altas colocando um número fixo de LSBs, BF, na transferência de bits para cada coeficiente. Em essência, os esquemas permitem ao codificador de entropia de HEVC CABAC atual, que foi desenvolvido para operação de 8 e 10 bits, operar na bitDepth original para qual foi projetado, convertendo efetivamente um sistema de bit alto, tal como 16 bits, em um sistema de bit mais baixo, tal como 10 bits, com um caminho alternativo para a precisão adicional. A efetividade do método de divisão empregado é ajudada desde que os valores de sistema de bit mais baixo são significativamente mais previsíveis e, portanto, satisfatórios para codificar com esquemas de codificação mais complexos, enquanto a precisão adicional requerida pelo sistema de bit alto é menos previsível e, portanto, menos compressível e esquemas de codificação complexos são menos efetivos. Por exemplo, um sistema de 16 bits poderia configurar BF para ser 8.
[00229] O uso dos esquemas de bits fixos é indicado na transferência de bits pelo codificador, e quando um esquema é usado, o meio para determinar o número de bits fixos seria indicado pelo codificador ao decodificador. Esse meio tanto seria codificar o número diretamente, ou indicar como derivar o valor BF de parâmetros presentes na transferência de bits (incluindo QP, profundidade de bit e/ou perfil) já codificado na transferência de bits, ou uma combinação disso. O codificador também teria a opção para indicar valores de BF diferentes para Quadros diferentes, Fatias e CUs, usando o mesmo meio, ou indicando valores de delta ao valor de BF derivado para a sequência, quadro, fatia ou CU precedente. O valor de BF também pode ser configurado para ser diferente para os tamanhos de bloco de unidade de transformada diferentes, os tipos de predição diferentes (inter/intra), e canal de cor diferente, onde a natureza do vídeo de fonte guiaria o codificador em escolher parâmetros diferentes.
[00230] Uma derivação de exemplo para BF baseada em QP é como segue: BF = max(0, int(QP / -6))
[00231] Uma derivação de exemplo para BF baseada na profundidade de bit é como segue: BF = bitDepth-8
[00232] Uma derivação de exemplo para BF baseada no tamanho de bloco de unidade de transformada e QP: BF = max(0, int(QP / -6) +2-log2(size))
[00233] Os vários valores de BF poderiam ser determinados em um codificador usando um arranjo de pré-codificador (tentativa), ou poderia ser configurado para seguir regras predeterminadas.
Modalidade de Codificação de Entropia 1
[00234] Para permitir processar a profundidades de bit mais altas, o processo do codificador de entropia de HEVC é mudado ao seguinte para um número de bits fixos BF menos que bitDepth:
[00235] O local do último coeficiente significante (em ordem de varredura) na TU é codificado.
[00236] Para cada grupo de coeficiente 4x4 (grupos são processados em ordem de varredura inversa), cada coeficiente C é dividido em uma parte mais significante CMSB e uma parte menos significante CLSB, onde CMSB = abs(C) >> BF CLSB = abs(C) - (CMSB << BF) e BF é o número de bits fixos para usar, como determinado da transferência de bits.
[00237] A geração de CMSB e CLSB como discutido provê um exemplo (em relação a uma técnica para codificar uma sequência de valores de dados) de gerar, dos valores de dados de entrada, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente uma pluralidade dos bits mais significantes desse valor, e a respectiva porção de dados menos significantes represente os bits menos significantes restantes desse valor.
[00238] Uma bandeira de grupo de coeficiente significante é codificada, indicando se ou não o grupo contém valores não zero de CMSB. Isto é requerido para o grupo contendo o último coeficiente significante e é assumido ser 1 para o grupo de topo-esquerdo (contendo o coeficiente de CC). Se a bandeira for 1, então os elementos de sintaxe seguintes pertencendo ao grupo são codificados imediatamente seguindo isto:Mapa de significação:
[00239] Para cada coeficiente no grupo, uma bandeira é codificada indicando se ou não o valor de CMSB é significante (tem um valor não zero). A bandeira é codificada para o coeficiente indicado pela posição última significante.Mapa maio que um:
[00240] Para até oito coeficientes com valor de mapa de significação 1 (contado para trás do fim do grupo), isto indica se CMSB é maior que 1.Bandeira maior que dois:
[00241] Para até um coeficiente com um valor de mapa 1 (o mais próximo ao fim do grupo), isto indica se CMSB é maior que 2.Bits fixos:
[00242] Para cada coeficiente no grupo, o valor de CLSB é codificado como dados de desvio usando caixas de CABAC equiprováveis.Bits de sinal:
[00243] Para todos os coeficientes não zero, bits de sinal são codificados como caixas de CABAC equiprováveis, com o último bit de sinal (em ordem de varredura inversa) sendo possivelmente deduzido ao invés de paridade quando ocultação de bit de sinal é usada.Códigos de escape:
[00244] Para qualquer coeficiente cuja magnitude não foi descrita completamente por um elemento de sintaxe anterior, o resto é codificado como um código de escape.
[00245] Porém, onde a bandeira de grupo de coeficiente significante é um 0, então os elementos de sintaxe seguintes pertencendo ao grupo são codificados imediatamente seguindo isto:Bits fixos:
[00246] Para cada coeficiente no grupo, o valor de CLSB é codificado como caixas de CABAC equiprováveis.Bits de sinal:
[00247] Para todos os coeficientes não zero, bits de sinal são codificados como caixas de CABAC equiprováveis, com o último bit de sinal (em ordem de varredura inversa) sendo deduzido ao invés possivelmente de paridade quando ocultação de bit de sinal é usada.
[00248] A geração de um ou mais destes mapas e bandeiras provê um exemplo de gerar um ou mais conjuntos de dados indicativos de posições, relativas ao arranjo dos valores, de porções de dados mais significantes de magnitudes predeterminadas. A codificação de um ou mais mapas usando CABAC provê um exemplo de codificar os conjuntos de dados a uma transferência de dados de saída usando codificação binária. A codificação de outros dados usando caixas de CABAC equiprováveis provê um exemplo de incluir dados definindo as porções menos significantes na transferência de dados de saída, ou (usando outra terminologia) um exemplo de incluir dados definindo as porções de dados menos significantes na transferência de dados de saída inclui codificar as porções de dados menos significantes usando codificação aritmética na qual símbolos representando as porções de dados menos significantes são codificados de acordo com proporções respectivas de uma gama de valor de codificação, em que as proporções respectivas da gama de valor de codificação para cada um dos símbolos que descrevem as porções de dados menos significantes são de tamanho igual. Como uma alternativa à codificação de CABAC equiprovável, porém, a etapa de incluir dados definindo as porções menos significantes na transferência de dados de saída pode compreender incluir diretamente as porções de dados menos significantes na transferência de dados de saída como dados brutos.
[00249] Uma modalidade desta descrição muda a interpretação da bandeira de grupo de coeficiente significante para indicar se quaisquer dos coeficientes é não zero (não só suas contrapartes de CMSB). Neste caso, o grupo de coeficiente contendo o último coeficiente na ordem de varredura inversa não precisaria ser indicado (como seria 1), e elementos de sintaxe adicionais não seriam precisados ser codificados quando a bandeira de significante coeficiente grupo é um 0. Isto provê um exemplo de qual o mapa de significação incluindo uma bandeira de dados indicativa da posição, de acordo com uma ordenação predeterminada do arranjo de valores, da última das porções de dados mais significantes tendo um valor não zero.
[00250] Este arranjo anterior é ilustrado esquematicamente na Figura 30, que corresponde em muitos aspectos à Figura 29. Comparando os dois desenhos, será visto que a Figura 30 não tem nenhum equivalente da etapa 1500 da Figura 29, correspondendo ao fato que o processo acontece até mesmo para o grupo contendo o último coeficiente significante. Etapas 1610 e 1620 correspondem geralmente às etapas 1510 e 1520 da Figura 29. A uma etapa 1625 recentemente introduzida, os coeficientes são divididos em porções de MSB e LSB como discutido acima. Etapas 1630, 1640 e 1650 correspondem geralmente às etapas respectivas 1530, 1540 e 1550 da Figura 29, exceto que elas só atuam na porção de MSB dos coeficientes divididos. Uma etapa 1655 recentemente introduzida envolve codificar as porções de LSB dos coeficientes divididos como bits fixos como discutido acima. Etapas 1660 e 1670 correspondem geralmente às etapas 1560 e 1570 da Figura 29.
[00251] Esta modificação pode produzir efetivamente um sistema onde o codificador de entropia de CABAC está operando na bitDepth original para qual foi projetado, selecionando BF de forma que vários MSBs igual à profundidade de bit de projeto do codificador sejam passados pela codificação de CABAC, com os LSBs de profundidade de bit mais alta (que são os menos previsíveis e, portanto, menos compressíveis) sendo codificados em desvio. Por exemplo, se o codificador for um codificador de profundidade de 8 ou 10 bits, BF poderia igualar 8 ou 10. Isto provê um exemplo de um sistema no qual a sequência de valores de dados representa dados de imagem tendo uma profundidade de bit de dados de imagem; e o método inclui estabelecer o número de bits a ser usado como a pluralidade dos bits mais significantes em cada porção de dados mais significantes para ser igual à profundidade de bit de dados de imagem.
[00252] Como discutido, as técnicas podem (em algumas modalidades) ser aplicadas a arranjos nos quais a sequência de valores de dados inclui uma sequência de coeficientes de imagem transformados em frequência. Porém, outros tipos de dados (tais como áudio ou dados simplesmente numéricos) poderiam ser usados. Os resultados para esta proposta podem ser vistos na Figura 27, que é um gráfico de PSNR contra QP para uma sequência de teste com a precisão de matriz de DCT e MAX_TR_DYNAMIC_RANGE estabelecida de acordo com profundidade de bit, mostrando operações equivalentes com (a curva 1680) e sem (a curva 1690) codificação de bit fixo de desvio. A economia em taxa de bit para o sistema com bits fixos (relativo ao sistema sem bits fixos) varia de 5% a QP 0 até 37% a QP -48. O melhor valor de BF será dependente de sequência. Um exemplo de BF é 8 ou 10 como discutido acima.
Modalidade de Codificação de Entropia 2
[00253] Um esquema semelhante sob outras modalidades aplica muitas das mesmas etapas de processamento, mas retém a funcionalidade original do mapa de significação - onde um valor de bandeira de 0 indica um valor de coeficiente de 0 (em lugar de - como na Modalidade de Codificação de Entropia 1 - um valor de 0 para a porção de MSB do coeficiente). Isto pode ser mais útil ao considerar (tipicamente suavizar) vídeo gerado por computador (onde zeros são esperados serem mais comuns). Esta Modalidade de Codificação de Entropia inclui as etapas de processamento seguintes para vários bits fixos BF menos que bitDepth:
[00254] O local do último coeficiente significante (em ordem de varredura) na TU é codificado.
[00255] Para cada grupo de coeficiente 4x4 (grupos são processados em ordem de varredura inversa), uma bandeira de grupo de coeficiente significante é codificada, indicando se ou não o grupo contém coeficientes não zero. Isto não é requerido para o grupo contendo o último coeficiente significante e é assumido ser 1 para o grupo de topo-esquerdo (contendo o coeficiente de CC). Se a bandeira for 1, então cada coeficiente C é dividido em uma parte mais significante CMSB e uma parte menos significante CLSB, onde CMSB = (abs(C) - 1) >> BF e CLSB = (abs(C) - 1) - (CMSB << BF)
[00256] A geração de CMSB e CLSB como discutido provê um exemplo (em relação a uma técnica para codificar uma sequência de valores de dados) de gerar, do valor de dados de entrada, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente uma pluralidade dos bits mais significantes desse valor, e a respectiva porção de dados menos significantes represente o bits menos significantes restantes desse valor.
[00257] Os elementos de sintaxe seguintes pertencendo ao grupo são codificados imediatamente seguindo isto:Mapa de significação:
[00258] Para cada coeficiente no grupo, uma bandeira é codificada indicando se ou não o coeficiente C é significante (tem um valor não zero). Nenhuma bandeira é necessária para o coeficiente indicado pela posição última significante.Mapa maior que um:
[00259] Para até oito coeficientes com valor de mapa de significação 1 (contado para trás do fim do grupo), isto indica se CMSB é maior ou igual a 1. Bandeira maior que dois:
[00260] Para até um coeficiente com um valor de mapa maior que um 1 (o mais próximo ao fim do grupo), isto indica se CMSB é maior ou igual a 2. Bits de sinal:
[00261] Para todos os coeficientes não zero, bits de sinal são codificados como caixas de CABAC equiprováveis, com o último bit de sinal (em ordem de varredura inversa) sendo possivelmente deduzido ao invés de paridade quando ocultação de bit de sinal é usada.Bits fixos:
[00262] Para cada coeficiente não zero no grupo, o valor de CLSB é codificado. Códigos de escape:
[00263] Para qualquer coeficiente cuja magnitude não foi descrita completamente por um elemento de sintaxe anterior, o resto é codificado como um código de escape.
[00264] A geração de uma ou mais destas mapas e bandeiras provê um exemplo de gerar um ou mais conjuntos de dados indicativos de posições, relativas ao arranjo dos valores, de porções de dados mais significantes de magnitudes predeterminadas. A codificação de um ou mais mapas usando CABAC provê um exemplo de codificar os conjuntos de dados a uma transferência de dados de saída usando codificação binária. A codificação de outros dados usando caixas de CABAC equiprováveis provê um exemplo de incluir dados definindo as porções menos significantes na transferência de dados de saída.
[00265] Note que há várias opções para a ordem destes vários componentes dos dados na transferência de saída. Por exemplo, com referência aos bits de sinal, bits fixos e códigos de escape, a ordem para um grupo de (digamos) n coeficientes (onde n poderia ser 16, por exemplo) poderia ser: n x bits de sinal, então n x conjuntos de bits fixos, então n x códigos de escape; ou n x bits de sinal, então n x (código de escape e bit fixo para um coeficiente).
[00266] Este arranjo é ilustrado esquematicamente no fluxograma da Figura 31. Aqui, as etapas 1700.. .1770 correspondem às etapas respectivas das Figuras 31 e 32 do modo seguinte, a menos que uma diferença seja identificada. Note que a etapa 1755 segue a etapa 1760 na Figura 31 (a etapa semelhante 1655 precedeu a etapa 1660 na Figura 30).
[00267] A etapa 1700 corresponde geralmente à etapa 1500 da Figura 29. Se este não for o grupo contendo o último coeficiente significante, controle passa à etapa 1710. As etapas 1710 e 1720 correspondem às etapas 1610 e 1620 da Figura 30. Os coeficientes são divididos nas etapas 1725 correspondendo à etapa 1625 da Figura 30. Porém, na etapa 1730, em contraste com o arranjo da etapa 1630 discutido anteriormente, o coeficiente inteiro (ignorando, por enquanto, a divisão executada na etapa 1725) é usado na derivação do mapa de significação. As etapas 1740 e 1750 atuam só nas porções de MSB dos coeficientes divididos e correspondem em função às etapas 1640 e 1650. À parte do fato que a ordenação das etapas é ilustrada (por meio de exemplo) ligeiramente diferentemente entre Figuras 32 e 33, as etapas 1755, 1760 e 1770 correspondem à funcionalidade das etapas 1655, 1660 e 1670.
[00268] Resultados comparando estas duas Modalidades de Codificação de Entropia podem ser vistos na Figura 28. Figura 28 é um gráfico ilustrando, para cada uma de seis sequências de teste, uma melhoria de porcentagem de taxa de bit para a Modalidade de Codificação de Entropia 2 relativa aos resultados alcançados (com caso contrário parâmetros idênticos) para a Modalidade de Codificação de Entropia 1.
[00269] A Modalidade de Codificação de Entropia 2 foi mostrada ser 1% menos eficiente em média para algum material de fonte do que a Modalidade de Codificação de Entropia 1 para QPs negativos, subindo a aproximadamente 3% para QPs positivos. Porém, para algum material de fonte mais suave, o oposto é observado, devido à presença aumentada de zeros nos coeficientes. Em uma modalidade, o codificador poderia escolher qualquer método de codificação de entropia e sinalizar ao decodificador a escolha.
[00270] Desde que a economia para QPs positivos é pequena comparada à economia para QPs negativos, as modificações de codificação de entropia só poderiam ser habilitadas quando QP é negativo. Considerando que a Modalidade de Codificação de Entropia 1 mostra economias de bit de até 37% para QPs negativos, há pequena diferença entre as duas Modalidades de Codificação de Entropia a estes pontos operacionais quando comparada a um sistema sem modificações de codificação de entropia.
[00271] Por conseguinte, em modalidades de exemplo nas quais os coeficientes de imagem de entrada transformados em frequência são coeficientes de imagem de entrada transformados em frequência quantizados de acordo com um parâmetro de quantização variável selecionado de uma gama de parâmetros de quantização disponíveis, as técnicas podem incluir codificar o arranjo de coeficientes de imagem de entrada transformados em frequência de acordo com as porções de dados mais significantes e as porções de dados menos significantes para coeficientes produzidos usando um parâmetro de quantização em uma primeira sub-gama predeterminada da gama de parâmetros de quantização disponíveis; e para coeficientes produzidos usando um parâmetro de quantização não na primeira sub-gama predeterminada da gama de parâmetros de quantização disponíveis, codificar o arranjo de coeficientes de imagem de entrada transformados em frequência tal que o número de bits em cada porção de dados mais significante iguale o número de bits daquele coeficiente e a respectiva porção de dados menos significantes não contenha nenhum bit.
[00272] Desde que a quantidade de dados sendo codificados é um pouco mais alta que observada para pontos de operacionais de HEVC versão 1 padrão, um estágio adicional é ou pode ser aplicável a ambos os sistemas propostos, e realmente um sistema onde os sistemas propostos previamente não podem ser ou não estão habilitados será discutido agora com relação às modalidades adicionais da descrição.
[00273] Este estágio adicional faz a transferência de CABAC ser alinhado em bit antes de codificar os dados de desvio para cada grupo de coeficiente. Isto permite decodificação mais rápida (e em paralelo) dos dados de desvio, desde que os valores podem agora ser extraídos diretamente da transferência, removendo a exigência para divisão longa ao decodificar caixas de desvio.
[00274] Um mecanismo para alcançar isto é aplicar o método de terminação de CABAC apresentado previamente acima.
[00275] Porém, na modalidade agora descrita, em vez de terminar a transferência de bits, o estado de CABAC é alinhado a um limite de bit.
[00276] Em modalidades, o conjunto de valores de código de CABAC inclui valores de 0 a um valor superior definido pela variável de gama, o valor superior estando entre o tamanho mínimo predeterminado (por exemplo, 256) e um segundo valor predeterminado (por exemplo, 510).
[00277] Para alinhar em bit a transferência, m_Range é estabelecida simplesmente a 256 entre ambos o codificador e decodificador. Isto simplifica significativamente o processo de codificação e decodificação, permitindo aos dados binários serem extraídos diretamente de m_Value em forma bruta, e, portanto, muitos bits de cada vez podem ser processados simultaneamente pelo decodificador.
[00278] Note que o ato de estabelecer m_Range a 256 incorre uma perda de, em média, 0,5 bits (se m_Range já era 256, não há nenhuma perda; se m_Range era 510, então aproximadamente 1 bit será perdido; a média através de valores todos válidos de m_Range é portanto 0,5 bits).
[00279] Vários métodos podem ser usados para mitigar a perda, ou custo potencial, incorrido por estas técnicas. Figuras 33 a 35 são fluxogramas esquemáticos ilustrando respectivamente versões de um estágio de terminação de um processo de CABAC como executado pelo codificador de CABAC.
[00280] De acordo com a Figura 33, se ou não alinhamento de bit poderia ser selecionado dependendo de uma estimativa da quantidade esperada de dados codificados em desvio (por exemplo, baseado no número de bandeiras maior que um igual a 1). Se poucos dados codificados em desvio são esperados, alinhamento de bit é caro (como desperdiça em média 0,5 bits por alinhamento), e também desnecessário desde a taxa de bit é provável ser mais baixa. Por conseguinte, na Figura 33, uma etapa 1800 envolve detectar a quantidade estimada de dados codificados em desvio detectando o número de bandeiras > 1 que foram estabelecidas, e comparando esse número a um valor de limiar Thr. Se a estimativa exceder o limiar Thr, então controle passa a uma etapa 1810, na qual o modo de alinhar bit é selecionado. Caso contrário, controle passa a uma etapa 1820, na qual o modo de não alinhar bit é selecionado. As etapas da Figura 33 podem ser repetidas cada sub-grupo em cada TU, por exemplo. Isto provê um exemplo de codificar dados representando coeficientes que não são representados um conjunto de dados como dados de desvio; detectar a quantidade de dados de desvio associada com um arranjo atual; e aplicar a etapa de estabelecimento se a quantidade de dados de desvio exceder uma quantidade limiar, mas não aplicar a etapa de estabelecimento, caso contrário.
[00281] Se referindo à Figura 34, em lugar de codificar dados de desvio ao término de cada grupo de coeficiente, todos os dados de desvio para uma TU podem ser codificados juntos depois dos dados de caixa de CABAC para a TU. A perda é, portanto 0,5 bits por TU codificada, em lugar de 0,5 bits por grupo de coeficiente. Por conseguinte, a uma etapa 1830 na Figura 34, um teste é aplicado para detectar se o grupo atual está ao término de codificar uma TU. Se não, então alinhamento de bit não é aplicado (indicado esquematicamente como uma etapa 1840) e controle retorna à etapa 1830. Mas nesse caso, então alinhamento de bit é aplicado a uma etapa 1850. Isto provê um exemplo de um arranjo no qual os valores de dados de entrada representam dados de imagem; e em que os dados de imagem são codificados como unidades de transformada incluindo uma pluralidade de arranjos de coeficientes, o método incluindo aplicar a etapa de estabelecimento ao término de codificar uma unidade de transformada.
[00282] Este mecanismo de alinhamento também pode ser usado antes de outro ou todos os dados na transferência que são codificados com um mecanismo equiprovável, que embora possa diminuir a eficiência, pode simplificar a codificação da transferência.
[00283] Como um alinhamento alternativo, se referindo à Figura 35, m_Range pode ser estabelecida a um de um número N de valores predeterminados em lugar de simplesmente 256 (384, por exemplo, alinharia a um meio-bit). Desde que o valor de alinhamento deve ser menos que ou igual ao valor original de m_Range (como gama não pode ser aumentada diferente de por renormalização), a perda por alinhamento é então (0,5/N) para valores espaçados regularmente. Este método ainda requereria divisão para valores diferentes de 256, mas o denominador seria conhecido com antecedência e assim a divisão poderia ser avaliada usando uma tabela de consulta. Por conseguinte, a uma etapa 1860 (que aplica em situação de alinhamento de bit) o valor de m_range é detectado, e a uma etapa 1870, um valor alinhado é selecionado de acordo com m_range para uso no processo de alinhamento de bit.
[00284] Como um refinamento adicional para este método de alinhamento alternativo, a caixa (ou caixas) seguindo imediatamente o alinhamento pode ser codificada usando gamas de símbolo (desiguais) que são potências de dois. Deste modo, todas as exigências para divisão para caixas subsequentes podem ser removidas sem qualquer perda adicional sobre (0,5/N) em eficiência de bit.
[00285] Por exemplo, ao alinhar a 384, a gama de símbolo para [0,1] para a caixa subsequente pode ser [256, 128]:
[00286] Se um 0 for codificado, m_Range é estabelecida a 256, fazendo o custo para codificar a caixa 0,5 bits.
[00287] Se um 1 for codificado, m_Range é estabelecida a 128 (e 256 é adicionado a m_Value) e o sistema é renormalizado (novamente, m_Range se torna 256), fazendo o custo para codificar a caixa 1,5 bits.
[00288] Desde que 0 e 1 são esperados com probabilidade igual, o custo médio para codificar a caixa seguindo imediatamente alinhamento ainda é 1 bit. Para o caso onde N=2, e os dois pontos de alinhamento são 256 e 384, o método seria escolher o ponto de alinhamento maior que é menos que ou igual à m_Range atual. Se esse ponto de alinhamento for 256, então m_Range é estabelecida a 256 para alinhar o motor de CABAC; se o ponto de alinhamento for 384, então o processo anterior é requerido, que requereria a codificação de um símbolo.
[00289] Isto é mostrado nas Figuras 32A e B, e um exemplo adicional com N=4 é mostrado nas Figuras 32C a 32F.
[00290] Para ilustrar as vantagens de alinhar o motor de CABAC, o método para decodificar uma caixa equiprovável (EP) sem este estágio de alinhamento poderia ser expresso como segue: se (m_Value >= m_Range/2) o valor de EP decodificado é um 1. Decremente M_Value de por Range/2 senão o valor de EP decodificado é um 0. então, leia próximo bit da transferência de bits: m_Value=(m_Value*2) + next_bit_in_stream
[00291] Um exemplo trabalhado disto é então: deixe m_Range=458 e m_Value=303 e assuma que os próximos dois bits na transferência de bits são 1 ciclo 1: m_Value >= 229, assim o próximo valor de EP codificado é 1. m_Value = 74 então, leia o próximo bit da transferência de bits: m_Value=74*2 + 1 = 149 ciclo 2: m_Value < 229, assim o valor de EP é 0 (m_Value inalterado) então, leia o próximo bit da transferência de bits: m_Value=149*2 + 1 = 299
[00292] As caixas equiprováveis decodificadas são equivalentes a um estágio de divisão longa, e aritmética seria exigida para testar a desigualdade. Para decodificar duas caixas, então este processo de exemplo seria usado duas vezes, implementando um processo de divisão longa de dois estágios.
[00293] Porém, se o estágio de alinhamento for aplicado, resultando em m_Range sendo a potência válida maior de 2 (tal como 256 para o codificador de entropia de HEVC CABAC de 9 bits), então o processo anterior é simplificado, o valor de EP codificado é o bit mais significante de m_Value.
[00294] Atualize m_Value, tratando-o como um registro de deslocamento, deslocando no próximo bit na transferência para a posição menos significante.
[00295] Consequentemente, m_Value se torna essencialmente um registro de deslocamento, e as caixas de EP são lidas da posição mais significante, enquanto a transferência de bits é deslocada para a posição menos significante. Portanto, múltiplos bits de EP podem ser lidos simplesmente deslocando mais bits fora do topo de m_Value.
[00296] Um exemplo trabalhado deste caso alinhado é: Deixe m_Range=256, m_Value=189 e os próximos dois bits na transferência de bits são 1 ciclo 1: Próximo valor de EP codificado é bit 7 de m_Value, que é um 1. Atualize m_Value deslocando fora bit 7, e deslocando em 1 da transferência de bits para a posição menos significante: m_Value se torna 123. ciclo 2: Próximo valor de EP codificado é bit 7 de m_Value, que é um 0. Atualize m_Value deslocando fora bit 7, e deslocando em 1 da transferência de bits para a posição menos significante: m_Value se torna 247.
[00297] O número de pontos de alinhamento, N, que é selecionado pode ser visto como um compromisso entre complexidade de implementação e o custo de alinhamento de bit. Para um ponto operacional onde há muitas caixas de EP por ponto de alinhamento, então a perda é menos significante, e um sistema de alinhamento com menos pontos pode bastar. Reciprocamente, para um ponto operacional onde há menos caixas de EP por ponto de alinhamento, então a perda é mais significante, e um sistema de alinhamento com mais pontos pode ser preferível; para alguns pontos operacionais desabilitando o algoritmo de alinhamento completamente pode ser preferível. O codificador, e, portanto, transferência de bits, poderia indicar o número de pontos de alinhamento que são para serem usados pelo decodificador, que pode ser escolhido de acordo com o ponto operacional para aquela seção da transferência de dados. Este número indicado pode alternativamente ser deduzido de outra informação presente na transferência de bits, tal como um perfil ou nível.
[00298] Usando múltiplas posições de alinhamento, em um caso simples, onde as posições de alinhamento são apenas 256 e 384: Para alinhar, se m_Range < 384, apenas fixe m_Range=256, e veja exemplo trabalhado acima para decodificar. senão fixe m_Range=384, e o processo seguinte é usado para codificar a próxima caixa de EP: m_Range=384=256+128. Nomeie a gama de símbolo de 256 ao valor de 0 e 128 ao valor de 1 para a próxima caixa de EP a ser codificada. Se m_Value >= 256, então (uma operação de teste bit de MSB) o próximo valor de EP é um 1. m_Value-=256 (de fato é uma operação de apagar bit) m_Range=128. Renormalize (porque m_Range < 256): m_Range=256 m_Value=(m_Value*2) + next_bit_in_stream senão o próximo valor de EP é um 0. m_Range = 256.
[00299] Então, m_Range=256, e o processo simples anterior pode ser usado para todas as caixas de EP subsequentes.
[00300] Os resultados para Modalidade de Codificação de Entropia 1 com os mecanismos de alinhamento de bit de CABAC recém discutidos são mostrados na Figura 29, que é um gráfico de diferença de taxa de bit contra QP para seis sequências com e sem os mecanismos de alinhamento de bit para N=1. Uma diferença de taxa de bit positiva (no eixo vertical) indica que o sistema com alinhamento de bit gera uma taxa de bit mais alta do que o esquema sem o mecanismo de alinhamento de bit. A diferença de taxa de bit para cada sequência é aproximadamente 0,5 vezes o número de mil grupos de coeficiente por segundo (Tráfego é 2560x1600 30p = 11520, todos os outros são 1920x1080 50p = 9720).
[00301] As técnicas de alinhamento discutidas acima são exemplos de: depois de codificar um grupo de valor de dados de entrada, estabelecer a variável de gama a um valor selecionado de um subconjunto predeterminado de valores de variável de gama disponível, cada valor no subconjunto tendo pelo menos um bit menos significante igual a zero. O subconjunto pode incluir o tamanho mínimo (exemplo, 256). O subconjunto pode incluir dois ou mais valores entre o tamanho mínimo predeterminado (tal como 256) e o segundo valor predeterminado (tal como 510). Um valor pode ser selecionado de acordo com um valor atual da variável de gama. Modalidades envolvem selecionar um valor particular do subconjunto se o valor atual da variável de gama estiver entre esse valor particular e um menos que um valor mais alto próximo no subconjunto (como mostrado, por exemplo, nas Figuras 32A- 32F). Em um exemplo particular, o subconjunto de valores disponíveis inclui um conjunto consistindo em 256, 320, 384 e 448; a etapa de estabelecer a variável de gama inclui selecionar um valor do subconjunto de acordo com um valor atual da variável de gama, de forma que a variável de gama seja estabelecida a 256 se o valor atual da variável de gama estiver entre 256 e 319, a variável de gama seja estabelecida a 320 se o valor atual da variável de gama estiver entre 320 e 383, a variável de gama seja estabelecida a 384 se o valor atual da variável de gama estiver entre 384 e 447, e a variável de gama seja estabelecida a 448 se o valor atual da variável de gama estiver entre 448 e 510. Em outro exemplo, a etapa de estabelecer a variável de gama inclui selecionar um valor do subconjunto de acordo com um valor atual da variável de gama, de forma que a variável de gama seja estabelecida a 256 se o valor atual da variável de gama estiver entre 256 e 383, e a variável de gama seja estabelecida a 384 se o valor atual da variável de gama estiver entre 384 e 510.
[00302] As opções deixadas na Figura 30 são propostas como perfis.
[00303] Se os perfis (Alto) forem só exigidos suportar bitDepths de até 14, então a precisão de coeficiente de matriz de transformada, MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE são propostos serem estabelecidos a 12, 19 e 20, respectivamente.
[00304] Além destes perfis, perfis só intra Principal/Estendido poderiam ser definidos, mas desde que um decodificador só intra é significativamente menos complexo do que um decodificador de intra/inter, só um perfil de intra Alto foi descrito aqui.
[00305] Em um modo semelhante, perfis Estendido/Alto para codificar quadros parados em vários formatos de croma poderiam ser definidos.
[00306] Perfis mais baixos poderiam precisar usar a mesma Precisão de matriz, MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE como usada outro pelos perfis mais altos, senão os fluxos de bit produzidos pelos dois Perfis não casariam.
[00307] Várias opções serão discutidas agora:Opção 1
Figure img0003
[00308] Nesta opção, a profundidade de bit ditará a precisão de matriz de transformada, MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE. Isto significa que um decodificador que precisaria suportar profundidade de bits até 16 precisaria processar dados de 13 bits com um conjunto diferente de matrizes, e a precisão interna seria limitada a só 18 bits para MAX_TR_DYNAMIC_RANGE, embora o decodificador teria a habilidade para suportar até 21. Porém, dados de 12 bits codificados usando o perfil alto poderiam ser decodificados por um decodificador complacente a um perfil mais baixo. Opção 2
Figure img0004
[00309] Nesta opção, os parâmetros de bit para as profundidades de bit sobrepostas são determinados pelo perfil mais baixo, por esse meio fazendo decodificar dados de 12 bits codificados usando o perfil alto decodificável usando um decodificador complacente para o perfil estendido. Além disso, a precisão interna de dados de 13 bits seria igual para os dados de 16 bits. Além disso, poucas precisões de matriz precisariam ser suportadas que em Opção 1.
[00310] No contexto presente, um único conjunto de valores de matriz de transformada poderia ser armazenado, e todos os outros valores derivados disto.
[00311] Note que se as matrizes de transformada tiverem uma precisão inicial de 14 bits, geralmente as precisões mais baixas poderiam ser derivadas dividindo por dois e arredondando.
[00312] Usando esta regra geral para derivar as matrizes de precisão mais baixa de matrizes de precisão mais alta conduziria a: Exemplo 1 Opção 1: Alto 4:4:4 Defina precisão de matriz de transformada = 14 Derive precisão de matriz de transformada = 13... de 14 Ext 4:4:4 Defina precisão de matriz de transformada = 14 Derive precisão de matriz de transformada = 10 ... de 14 isto é, Armazene à precisão "Alta". Exemplo 2 Opção 1: Alto 4:4:4 Defina precisão de matriz de transformada = 10 Derive precisão de matriz de transformada = 14... de 10 Ext 4:4:4 Defina precisão de matriz de transformada = 1 Derive precisão de matriz de transformada = 10 ... de 14 isto é, Armazene à precisão "Estendida".
[00313] Para qualidade melhor "Exemplo 1" é preferido. Porém, Exemplo 2 pode conduzir a exigências de armazenamento reduzidas.
[00314] Note - Uma alternativa é certamente armazenar um conjunto de matriz de transformada para cada precisão. Regras de "Exemplo 1" e" Exemplo 2" também podem ser usadas para "Opção 2".
[00315] Como uma meta é aumentar a qualidade e também dividir em perfis, haverá erros de graduação se cada conjunto de matriz de transformada for derivado de um único conjunto a uma precisão.
[00316] No caso de "Exemplo 1", o sistema está graduando abaixo as matrizes de transformada de 14 bits, e no caso de "Exemplo 2", o sistema está graduando acima e graduando abaixo as matrizes de transformada de 10 bits. Opção 3
Figure img0005
isto é, Profundidades de bit de Vídeo de 12 bits podem ser codificadas tanto como "Alto 4:4:4" ou "Ext 4:4:4", embora só um decodificador alto 4:4:4 poderia decodificar fluxos codificados usando o esquema alto 4:4:4. Opção 4
Figure img0006
isto é, Perfil "Alto 4:4:4" tem que suportar o "Perfil Ext 4:4:4" mais baixo, com esta "Opção 4" há só uma escolha sobre como codificar vídeo de 12 bits. Opção 5
Figure img0007
[00317] Nesta opção, as precisões de matriz estão limitadas a só 1 valor por perfil, reduzindo o custo indireto para um codificador. Além disso, MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE são ditadas pela profundidade de bit, e, portanto, um codificador que só requer codificar dados de 13 bits não precisaria incluir o custo de implementação de usar precisão de cálculo interna adicional.Opção 6
Figure img0008
[00318] Opção 6 é semelhante à Opção 5, mas onde só os perfis estendidos estão definidos para codificar dados de 12 bits.
[00319] Em resumo, as mudanças propostas de acordo com várias modalidades da descrição presente são:
[00320] Use pelo menos um conjunto de matriz de transformada adicional para precisão mais alta.
[00321] É preferível ter um único conjunto para todas as precisões mais altas, para simplificar codificadores/decodificadores de multi-perfil.
[00322] Matrizes de transformada propostas são providas para precisões de matriz de transformada 7 a 14 - veja a descrição abaixo.
[00323] É sugerido usar as matrizes de transformada de precisão de 14 bits como estas se ajustarão dentro tipos de dados de 16 bits para software, e proverão precisão suficiente para permitir extensão futura para vídeo de 16 bits.
[00324] A escolha de precisão de matriz de transformada poderia ser configurada pela profundidade de bit dos dados de entrada e o perfil, ou alternadamente determinada por parâmetros especificados ao nível de sequência, quadro ou fatia.
[00325] MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE (quer dizer, uma ou ambos delas) podem ser mudadas para precisão mais alta.
[00326] Valores múltiplos de MAX_TR_DYNAMIC_RANGE e ENTROPY_CODING_DYNAMIC_RANGE não deveriam apresentar um problema para codificadores/decodificadores de multi-perfil.
[00327] É sugerido derivar MAX_TR_DYNAMIC_RANGE = bitDepth + 5 e ENTROPY_CODING_DYNAMIC_RANGE = bitDepth + 6.
[00328] O uso de MAX_TR_DYNAMIC_RANGE = bitDepth + 5 pode ser apropriado para muitas situações e tipos de material de vídeo. Porém, uma possível necessidade para uma variação disto será discutida agora.
[00329] Testes empíricos mostraram que em alguns casos, para um subconjunto de sequências de vídeo, particularmente algumas sequências de vídeo tendo um baixo conteúdo de ruído, o uso de MAX_TR_DYNAMIC_RANGE = bitDepth + 5 dá origem a uma curva de resposta (dando a relação entre taxa de bit de saída e parâmetro de quantização) que não é monotônica.
[00330] Normalmente uma tal curva de resposta é monotônica como entre taxa de bit de saída e parâmetro de quantização, de forma que uma quantização mais severa dá uma taxa de bit de saída mais baixa, e um quantização menos severa dá uma taxa de bit de saída mais alta. Esta relação monotônica forma a base de algoritmos de controle de taxa, de forma que o sistema de controle de taxa ajuste o parâmetro de quantização para manter a taxa de bit de saída dentro de uma gama desejada ou abaixo de um limiar desejado.
[00331] Mas em alguns casos do uso de MAX_TR_DYNAMIC_RANGE = bitDepth + 5, a relação monotônica foi achada decompor, de forma que, por exemplo, uma mudança para uma quantização menos severa pode na realidade dar origem a uma taxa de bit de saída mais baixa, ou até mesmo que pode haver dois possíveis valores de SNR de quadro para uma taxa de bit de saída particular. Estas aberrações podem fazer o algoritmo de controle de taxa debater-se ou até mesmo falhar para chegar a uma taxa de bit desejada.
[00332] Em testes empíricos foi achado que tais problemas podem ser superados usando MAX_TR_DYNAMIC_RANGE = bitDepth + 6. Por conseguinte, em algumas modalidades, esta relação entre MAX_TR_DYNAMIC_RANGE e bitDepth é usada.
[00333] Em um exemplo particular de uma matriz de DCT 32 x 32, o processo de DCT tenderá a requerer log2(32) bits de precisão sobre bitDepth, que é como o valor de bitDepth + 5 é derivado. Porém, o processo de quantização pode adicionar o equivalente de outro bit de precisão. Resultados significativamente melhores podem ser obtidos, pelo menos para algum material de vídeo, se este bit adicional for provido como precisão extra no processo de DCT.
[00334] Porém, também foi achado em testes empíricos que este problema, e, por conseguinte a solução de usar MAX_TR_DYNAMIC_RANGE = bitDepth + 6, são só pertinentes a tamanhos de matriz de DCT maiores. Uma vantagem de permitir relações diferentes entre MAX_TR_DYNAMIC_RANGE e bitDepth pode ser que isto evita custo de processamento desnecessário em casos onde a precisão adicional não é requerida.
[00335] Em particular, nos exemplos presentes, o problema esboçado acima, e a solução proposta, são particularmente pertinentes a tamanhos de matriz de DCT 32 x 32. Para matrizes menores, a relação MAX_TR_DYNAMIC_RANGE = bitDepth + 5 pode ser usada.
[00336] Mais geralmente, uma variação adaptável da relação entre MAX_TR_DYNAMIC_RANGE e bitDepth pode ser usada, de forma que a compensação (o valor que é adicionado a bitDepth para gerar MAX_TR_DYNAMIC_RANGE) seja variado de acordo com o tamanho de matriz. Assim, MAX_TR_DYNAMIC_RANGE = bitDepth + offset, onde compensação é uma função de tamanho de matriz. Em um exemplo, os valores de compensação poderiam ser selecionados como segue:
Figure img0009
[00337] Em outro exemplo, uma relação progressiva poderia ser usada para reconhecer a necessidade por mais precisão com os tamanhos de matriz mais altos, enquanto uma precisão mais baixa pode ser usada com um tamanho de matriz menor:
Figure img0010
[00338] A relação entre compensação e tamanho de matriz deveria ser a mesma, como entre o caminho inverso do codificador (decodificação), e o caminho de decodificação de um decodificador. Há, portanto, uma necessidade para estabelecer ou comunicar a relação, como entre estas três áreas da tecnologia.
[00339] Em um exemplo, a relação pode ser estabelecida como uma relação predeterminada, codificada firme no codificador e decodificador.
[00340] Em outro exemplo, a relação pode ser comunicada explicitamente como parte (ou em associação com) dos dados de vídeo codificados.
[00341] Em outro exemplo, a relação pode ser deduzida ambos no codificador e decodificador da identidade de um "perfil" associado com os dados de vídeo codificados. Aqui, como discutido em outro lugar nesta descrição, um perfil é uma identificação de um conjunto de parâmetros usados para codificar ou decodificar os dados de vídeo. O mapeamento entre uma identificação de perfil e os parâmetros atuais estabelecidos por essa identificação de perfil é pré-armazenado ambos no codificador e decodificador. A identificação de perfil pode ser levada como parte dos dados codificados, por exemplo.
[00342] Em geral, porém, o valor de compensação (referido em alguns exemplos como uma segunda compensação) é dependente do tamanho de matriz das matrizes de transformada.
[00343] Como com a precisão de matriz de transformada, a escolha de MAX_TR_DYNAMIC_RANGE e/ou ENTROPY_CODING_DYNAMIC_RANGE poderia ser configurada pela profundidade de bit dos dados de entrada e o perfil, ou alternadamente determinada por parâmetros especificados ao nível de sequência, quadro ou fatia (possivelmente os mesmos parâmetros como aqueles que selecionam as matrizes de DCT).
[00344] Estes arranjos proveem exemplos de dados de imagem de entrada de transformação em frequência para gerar um arranjo de coeficientes de imagem de entrada transformados em frequência por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usando matrizes de transformada tendo uma precisão de dados; e selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com o profundidade de bit dos dados de imagem de entrada.
[00345] Em modalidades, a precisão de dados das matrizes de transformada pode ser estabelecida a um primeiro número de compensação de bits (tal como 2) menos que a profundidade de bit dos dados de imagem de entrada; e a gama dinâmica máxima dos dados transformados pode ser estabelecida a um segundo número de compensação de bits (tal como 5) maior que a profundidade de bit dos dados de imagem de entrada.
[00346] A codificação de entropia pode ser mudada para incluir algum processamento de bit fixo (veja Modalidades de Codificação de Entropia 1 e 2) para aumentar compressão a baixos QPs.
[00347] A presença de bits fixos poderia ser configurada ao nível de sequência.
[00348] O número de bits fixos BF poderia ser configurado ao nível de sequência, quadro (embora isto seja difícil desde que o conjunto de parâmetros de quadro não conheça colocações de sequência), fatia ou CU (possivelmente sinalizando um delta do número de bits fixos para a sequência/quadro/fatia/CU prévia, entidade pai ou definição de perfil).
[00349] A codificação de entropia pode ser mudada para incluir alinhamento de bit de CABAC para permitir a bits de desvio serem extraídos da transferência sem o uso de divisão longa (também pode ser preferível aplicar um ou mais dos métodos de mitigação de perda de bit acima mencionados).
[00350] Modalidades da descrição presente, portanto proveem que precisões internas sejam aumentadas para acomodar a exigência no mandato de Extensões de Gama para permitir profundidades de bit mais altas por HEVC. As várias fontes de erro foram estudadas e recomendações foram feitas. Além disso, mudanças para melhorar a eficiência de codificação foram apresentadas, e também mudanças para melhorar o processamento foram apresentadas.
Matrizes de Transformada de Precisão Aumentada
[00351] Esta parte da descrição detalha as matrizes de transformada a vários níveis de precisão. 4x4 DST
[00352] A matriz de transformada é da forma:
Figure img0011
onde os valores na grade estão definidos pela precisão de coeficiente de matriz de acordo com a tabela seguinte (valores de matriz de HEVC versão 1 de 6 bits incluídos para comparação):
Figure img0012
Matriz de DCT Combinada
[00353] Para facilidade de implementação, uma única matriz de DCT 32x32 M32 pode ser descrita, de qual cada matriz de DCT NxN menor MN é derivada por sub-amostragem (como um exemplo de derivar matrizes de transformada a uma precisão de dados exigida de matrizes de transformada de fonte respectiva a uma precisão de dados diferente) de acordo com o seguinte: MN[x][y] = M32[x][(2(5-log2(N))) y] para x,y = 0.. ( N-1).
[00354] A matriz combinada M32 é da forma:
Figure img0013
com os valores na grade definidos pela precisão de coeficiente de matriz de acordo com a tabela seguinte (valores de matriz de HEVC versão 1 de 6 bits incluídos para comparação):
Figure img0014
[00355] Para informação, as matrizes de DCT menores derivadas da matriz 32x32 são apresentadas aqui. Os valores em cada grade estão definidos pela precisão de coeficiente de matriz de acordo com a tabela anterior.DCT 4x4
[00356] A matriz M4 está definida como os primeiros 4 coeficientes de toda 8a fila da matriz combinada M32.
Figure img0015
[00357] A matriz M8 está definida como os primeiros 8 coeficientes de toda 4a fila da matriz combinada M32.
Figure img0016
[00358] A matriz M16 está definida como os primeiros 16 coeficientes de toda fila par da matriz combinada M32.
Figure img0017
[00359] Técnicas adicionais relativas a modalidades de codificação de bit fixo ou técnicas relacionadas serão discutidas com referência às Figuras 36 e 37.
[00360] Primeiro, porém, técnicas usadas para codificar códigos de escape serão discutidas.
[00361] Denominada codificação de Golomb-Rice codifica um valor, v, como um prefixo codificado unário (um número variável de 1s seguido por um 0, ou vice-versa) seguido por k bits de sufixo.
[00362] Deixe prefix_length ser o número total de 1s no prefixo codificado unário. Deixe K ser o valor dos k bits menos significantes.v = (prefix_length << k) + K (onde << n significa um deslocamento à esquerda por n bits; uma notação semelhante >> n representa um deslocamento à direita por n bits).
[00363] O número total de bits iguala prefix_length +1+k.
[00364] A seguir, denominados códigos de Golomb exponenciais de ordem k serão discutidos. Em tais códigos, um número a ser codificado é dividido em um prefixo codificado unário de comprimento variável e um sufixo de comprimento variável. O número de bits de sufixo = prefix_length + k. Aqui, prefix_length é uma vez mais o número de 1s no código unário.
[00365] O número total de bits no código = prefix_length +1+ prefix_length + k.
[00366] Deixe K ser o valor dos últimos k bits.
[00367] Quando prefix_length é 0, v será igual a K.
[00368] Quando prefix_length é 1, v estará entre (1 << k)+K e (3 << k)+K e (exclusivo).
[00369] Quando prefix_length é 2, v estará entre (3 << k)+K e (7 << k)+K e (exclusivo).
[00370] Quando prefix_length é 3, v estará entre (7 << k)+K e (15 << k)+K e (exclusivo).
[00371] Portanto, v = ((2Aprefix_length)-1) << k) + sufixo.
[00372] Em HEVC, ambos os códigos de Golomb-Rice e Golomb Exponencial são usados. Se prefix_length for menos que três, o código é interpretado como um código de Golomb-Rice. Porém, se o prefix_length for maior ou igual a 3, o código é interpretado como um código de Golomb exponencial de ordem k.
[00373] O prefixo (em qualquer sistema) é um exemplo de um código unário. O sufixo é um exemplo de um código não unário. Os dois sistemas são exemplos de um código de comprimento variável de duas partes.
[00374] Neste caso, o valor de prefix_length usado para decodificar o código de Golomb exponencial está reduzido por 3, e o valor resultando da operação de decodificação é aumentado por (3 << k), desde que este é o valor menor que não pode ser representado usando o código de Golomb-Rice.
[00375] O valor "k" usado para os códigos de Escape de HEVC e Escape-escape varia. Para cada grupo de 16 coeficientes, o valor k começa a 0, e é aumentado sempre que a magnitude de um valor de coeficiente é maior que 3 << k. Em resposta a esta situação, k é incrementado (quer dizer, em resposta a uma magnitude de um valor de dados atual), para um máximo de 4.Note que a discussão se refere a magnitudes de coeficiente, como um bit de sinal representando o sinal de um coeficiente é enviado separadamente.
[00376] Figura 36 é um fluxograma esquemático ilustrando um processo para gerar códigos de escape como discutido acima. Várias das etapas de fluxograma são semelhantes àquelas discutidas previamente e não serão descritas novamente em detalhes.
[00377] O método é operável com respeito a um grupo de valores de dados incluindo (por exemplo) uma sequência de coeficientes de imagem transformados em frequência, ou os componentes não zero dessa sequência ou os componentes não zero dessa sequência, onde a magnitude de cada valor de dados foi reduzida por 1 (neste último caso, um mapa de significação pode ser gerado primeiro, de forma que cada coeficiente seja reduzido por 1 antes de processamento adicional porque o mapa de significação responde pelo valor de 1).
[00378] A uma etapa 2000, um valor inicial de k é estabelecido. Em um sistema de HEVC normal, k é estabelecido inicialmente a 0. Etapas 2010, 2020, 2030, 2040, 2050 e 2060 correspondem às etapas semelhantes nos fluxogramas das Figuras 29-31 e não serão discutidas aqui ademais. Note que nas Figuras 29-31 como também na Figura 36, em algumas implementações de exemplo de HEVC, nem todos os mapas precisam ser gerados para cada coeficiente. Por exemplo, dentro de um grupo de (digamos) 16 coeficientes, pode haver um ou mais coeficientes para quais alguns mapas não são gerados.
[00379] A uma etapa 2070, se um código de escape for precisado, ele é gerado baseado em um valor atual de k usando as técnicas recém descritas. Em particular, um coeficiente que requer o uso de um código de escape é primeiro operado usando o mapa de significação e opcionalmente um ou mais dos outros mapas. Note que no caso de um coeficiente que precisa de código de escape, qualquer dos mapas de significação >1 e >2 que são usados serão sinalizados como "1". Isto é porque qualquer coeficiente que requer codificação de escape é por definição maior do que um valor que pode ser codificado usando seja qual for os mapas estão disponíveis em relação àquele coeficiente.
[00380] Um código de escape é precisado se o valor de dados atual não foi codificado completamente. Aqui, o termo codificado "completamente" significa que o valor de dados, menos os valores já codificados (pelos mapas, ou pelos mapas mais os bits fixos, por exemplo) é zero. Em outras palavras, um valor de dados está codificado completamente por componentes já gerados se a quantidade residual desse valor de dados, levando em conta esses componentes, for zero.
[00381] Assim, assumindo que para um coeficiente de exemplo, um mapa de significação e mapas >1 e >2 estão disponíveis, cada um destes será sinalizado como "significante", " >1" e " >2" em relação àquele coeficiente.
[00382] Isto significa (neste exemplo) que o coeficiente deve ser pelo menos 3.
[00383] Portanto, o valor de 3 pode ser subtraído do coeficiente antes de codificação de escape, sem perda de informação. O valor de 3 (ou mais geralmente, uma variável base_level que indica a gama numérica que está definida pelos mapas que se aplicam àquele coeficiente) é reintegrada na decodificação.
[00384] Tomando um valor de coeficiente de 15 decimal (1111 binário) como um exemplo, o mapa de significação é "1", o mapa >1 é "1" e o mapa >2 é "1". O valor base_level é 3. Base_level é subtraído do valor de coeficiente para dar um valor de 12 decimal (1100 binário), que é passado para codificação de escape.
[00385] O valor k (veja acima) agora define o número de bits de sufixo. Os bits de sufixo são tomados dos bits menos significantes do valor de coeficiente depois da subtração de base_level. Se (por exemplo) k=2, então os dois bits menos significantes do valor restante 1100 são tratados como bits de sufixo, quer dizer que os bits de sufixo neste exemplo são 00. Os bits restantes (11 neste exemplo) são operados codificados como um prefixo.
[00386] Assim em resumo, o processamento associado com um código de escape envolve: gerar um ou mais mapas definindo um ou mais bits menos significantes de um coeficiente de forma que (se um código de escape for requerido) o coeficiente deva ter um valor de pelo menos base_level; subtrair base_level do coeficiente; codificar os k bits menos significantes da parte restante do coeficiente como bits de sufixo; e codificar os bits mais significantes restantes da parte restante do coeficiente como um prefixo.
[00387] Então, usando o teste descrito acima, se o valor de k precisar ser mudado, a mudança é implementada a uma etapa 2080 e o novo valor de k é provido para a próxima operação da etapa 2070.
[00388] Uma modificação para a técnica de código de escape que pode prover um efeito semelhante ao usuário de bits fixos (Figura 30 e 31) é aplicar uma compensação ao valor k definindo o número de bits de sufixo usado em um código de escape.
[00389] Por exemplo, o valor k em um sistema de HEVC tem uma gama de 0 a 4, e a transição (em relação a um grupo de coeficientes) de um ponto de partida de 0 até um valor máximo de 4. Em modalidades da técnica presente, uma compensação é adicionada a este valor de k. Por exemplo, a compensação pode ser predeterminada como um valor param_offset, tal como 3, de forma que a técnica existente para variar k no curso de codificar um grupo de coeficientes, em vez de variar k de k=0 a k=4, variará isto de k=param_offset a k = 4 + param_offset.
[00390] O valor param_offset pode ser predeterminado como entre codificador e decodificador.
[00391] Ou o valor param_offset pode ser comunicado do codificador e decodificador, por exemplo como parte de uma transferência, quadro, cabeçalho de fatia ou bloco (tal como TU).
[00392] Ou o valor param_offset pode ser derivado no codificador e no decodificador como uma função predeterminada da profundidade de bit dos dados de vídeo, tal como (por exemplo): para bit_depth < 10, param_offset = 0 para bit_depth > 10, param_offset = bit_depth -10
[00393] Ou o valor param_offset pode ser derivado no codificador e no decodificador como uma função predeterminada do grau de quantização (Qp) aplicável a um bloco ou grupo de coeficientes;
[00394] Ou o valor param_offset pode ser dependente (por exemplo, de uma maneira predeterminada) de um ou mais de qual componente de vídeo está sendo codificado, de tamanho de bloco, de modo (por exemplo, sem perda ou com perda), de tipo de quadro e assim por diante.
[00395] Ou o valor param_offset pode ser derivado no codificador e no decodificador em uma base adaptável, tomando um ponto de partida predeterminado, ou um ponto de partida comunicado em um cabeçalho, ou um ponto de partida derivado de (por exemplo) bit_depth. Um exemplo de um tal processo adaptável será discutido abaixo com referência à Figura 37.
[00396] Ou mais que um destes critérios poderia se aplicar. Em particular, onde o valor param_offset é dependente de outro parâmetro (tal como bloco tamanho) e é variado adaptavelmente como na Figura 37 abaixo, então a variação adaptável poderia ser aplicada separadamente a cada possível valor de param_offset (quer dizer, separadamente para cada tamanho de bloco).
[00397] Note que qualquer ou todas estas dependências poderiam se aplicar em relação ao número de bits fixos usados nos arranjos da Figura 30 e 31.
[00398] Comparando esta técnica modificada e as técnicas de bits fixos discutidas acima com relação às Figuras 30 e 31, pode ser visto que: a) na técnica de bits fixos das Figuras 30 e 31, um coeficiente é dividido em porções mais significantes e menos significantes antes da geração de quaisquer dos mapas, um ou mais mapas são então gerados da porção mais significante, e a porção menos significante é codificada diretamente (ou caso contrário tratada como discutido acima); mas b) ) na geração de códigos de escape usando param_offset, o um ou mais mapas são gerados primeiro, e então a parte restante do valor de coeficiente (menos o valor base_level) é operada tanto como um sufixo ou um prefixo, com o limite entre sufixo e prefixo dependendo de k + param_offset, e com o sufixo representando os bits menos significantes da porção restante.
[00399] Em qualquer caso, os parâmetros associados com a codificação de bit fixo, ou o valor param_offset, podem ser variados de uma maneira adaptável. Um exemplo de como isto pode ser alcançado será discutido agora com referência à Figura 37. Na Figura 37, técnicas semelhantes podem se aplicar tanto ao número de bits fixos (chamado "NFB" na Figura 37, e denotando o número de bits da porção menos significante derivada na etapa 1625 ou 1725 das Figuras 30 e 31 respectivamente) ou o valor param_offset (encurtado para "compensação" na Figura 37) da discussão acima.
[00400] Na discussão seguinte de um arranjo de exemplo, é assumido que a adaptação da compensação ou valor de NFB é executada em uma base de fatia por fatia. Note que uma fatia pode ser definida dentro da família de HEVC de sistemas como qualquer coisa de uma LCU até um quadro inteiro, mas uma característica fundamental de uma fatia é que sua codificação é independente da codificação aplicada a qualquer outra fatia, de forma que uma fatia individual possa ser decodificada sem referência a outra fatia. Certamente, porém, a adaptação poderia acontecer em uma base de bloco por bloco ou de quadro por quadro.
[00401] Note que o processo da Figura 37 acontece no codificador e também, em uma forma de decodificação complementar, acontece no decodificador, de forma que o valor da variável de compensação/NFB rastreie identicamente como entre o codificador e o decodificador.
[00402] A uma etapa 2100, é começado o processamento de uma fatia.
[00403] A uma etapa 2110, o valor de compensação/NFB é reajustado.Isto poderia envolver reajustar o valor a um valor fixo tal como 0. Em um arranjo alternativo, o valor poderia ser reajustado a um valor de partida derivado do valor final da variável de compensação/NFB em relação a um ou mais fatias prévias. Em um tal caso, a fim de manter a habilidade para decodificar cada fatia independentemente, modalidades da tecnologia presente proveem uma indicação do valor de partida da variável de compensação/NFB no cabeçalho de fatia. Note que várias técnicas diferentes para obter um tal valor de partida estão disponíveis. Por exemplo, o valor de partida da variável de compensação/NFB poderia ser estabelecido a 0 se o valor final dessa variável para a fatia prévia não excedeu 2, e poderia ser estabelecido a 1 caso contrário. Um arranjo semelhante poderia ser aplicado a um valor final médio da variável obtida de todas as fatias relativas a um quadro precedente. A pessoa qualificada apreciará que várias outras possibilidades estão disponíveis. Certamente, se um valor de partida predeterminado for usado, então tanto este pode ser aceito com antecedência por uma definição padrão aplicável ao codificador e ao decodificador, ou o valor de partida predeterminado pode ser especificado em uma transferência ou cabeçalho de quadro.
[00404] Com respeito a dados de cabeçalho, uma bandeira pode ser incluída dentro de uma transferência, quadro ou cabeçalho de fatia para indicar se o processo de adaptação da Figura 37 é para acontecer em relação àquela transferência, quadro ou fatia.
[00405] A uma etapa 2120, processamento da primeira unidade de transformada (TU) é começado. O processamento de uma fatia procede em uma base de TU por TU como discutido mais cedo.
[00406] A uma etapa 2130, mais três variáveis são reajustadas, esta vez a 0. Estas variáveis são chamadas abaixo, acima e total. O propósito destas variáveis será discutido abaixo.
[00407] Dentro de uma TU, cada coeficiente é codificado por sua vez. A uma etapa 2140, um próximo coeficiente é codificado. A codificação do coeficiente pode seguir o fluxograma das Figuras 30/31 ou o fluxograma da Figura 36, em cada caso fazendo uso da compensação ou valor de NFB aplicável nesse estágio no processo. Certamente, para o primeiro coeficiente a ser codificado, o valor de compensação/NFB é igual àquele estabelecido na etapa 2110. Para coeficientes posteriores, o valor atual de compensação/NFB é usado.
[00408] Um teste é aplicado em relação ao resultado da codificação da etapa 2140. Dependendo do resultado do teste, controle passa a uma etapa 2150, 2160 ou 2170 ou diretamente a uma etapa 2180. Primeiro, o teste será descrito. Note que o teste é ligeiramente diferente dependendo de se o sistema de bits fixos das Figuras 30/31 ou o sistema de param_offset da Figura 37 e discussão acompanhante é usado.
Teste de Bits Fixos
[00409] No caso do sistema de bits fixos, sempre que um conjunto de bits fixos é codificado (sempre que a etapa 1655 ou a etapa 1755 é executada), então a variável "total" é incrementada. Por conseguinte, a variável "total" se refere ao número de ocasiões, desde que a variável foi reajustada por último, a qual bits fixos foram codificados.
[00410] O teste então deriva uma variável remaining_magnitude, que está definida como a parte da magnitude de coeficiente que não está sendo codificada como bits fixos, de forma que:remaining_magnitude = (magnitude -1) >> NFB
[00411] Outro valor, base_level, está definido (como discutido acima) como a magnitude mais alta que poderia ser descrita sem o uso de um código de escape. Aqui, é notado que um coeficiente particular pode ter uma, duas ou três bandeiras ou entradas de mapa codificadas em relação àquele coeficiente. Assim:se o coeficiente tivesse uma bandeira >2, base_level = 3; senão se o coeficiente tivesse uma bandeira >1, base_level = 2; senão base_level = 1
[00412] O valor remaining_magnitude é então testado contra base_level.
[00413] Se ((remaining_magnitude >> 1) > base_level) então a variável "abaixo" é incrementada. Na Figura 37, isto corresponde à etapa 2150. O significado subjacente desta etapa é que uma denominada subestimativa foi detectada tal que o número de bits fixos (NFB) não era bastante para codificar o coeficiente atual. A significação do deslocamento à direita (>> 1) no teste é que a subestimativa só é sinalizada como uma subestimativa notável se a variável NFB for insuficiente por dois ou mais bits.
[00414] Semelhantemente, se ((NFB > 0) E ((remaining_magnitude << 1) < 0)), então a variável "acima" é incrementada. Na Figura 37, isto corresponde à etapa 2160. O significado subjacente desta etapa é que uma ultrapassagem é detectada se, até mesmo com um menor bit fixo (detectado pelo deslocamento << 1 na expressão dada acima), o componente de bit fixo teria sido capaz de codificar a magnitude inteira do coeficiente. Em outras palavras, o número de bits fixos está significativamente em excesso do número exigido para codificar esse coeficiente.
[00415] Será entendido que os vários parâmetros usados nestes testes, em particular o número de deslocamentos de bit aplicados, podem ser variados de acordo com a habilidade de projeto da pessoa qualificada intelectual.
[00416] Se nem a subestimativa nem o teste de ultrapassagem for cumprido, mas bits fixos forem codificados, então controle passa à etapa 2170, à qual só a variável total é incrementada.
[00417] Para perfeição, é notado que controla passa diretamente à etapa 2180 da Figura 37, onde operação de bit fixo não é habilitada, de forma que nenhuma mudança seja feita a quaisquer das variáveis: abaixo, acima e total.
Teste de Param_Offset
[00418] No caso de um sistema baseado em param_offset, os princípios subjacentes são semelhantes, mas alguns dos detalhes são pouco diferentes àqueles discutidos acima.
[00419] A variável "total" é incrementada sempre que um valor de escape é codificado.
[00420] O valor de coeficiente é testado contra o parâmetro k que, como discutido acima, está definido de modo a levar em conta o efeito da compensação param_offset.
[00421] Se (coeficiente > (3 << k)), então a variável "abaixo" é incrementada. Isto corresponde à etapa 2150 da Figura 37 e indica uma situação de subestimativa como discutido acima. Em outras palavras, a variável k, levando em conta param_offset, era insuficiente para codificar o código de escape como um sufixo.
[00422] Caso contrário, se ((coeficiente *3) < (1 << k)), então a variável "acima" é incrementada. Isto corresponde à etapa 2160 da Figura 37. Isto representa uma situação de ultrapassagem na qual a variável k, levando em conta param_offset, proveu mais bits de sufixo que eram exigidos para codificar o código de escape.
[00423] Se nem o teste de subestimativa nem o teste de ultrapassagem for cumprido, mas um código de escape for codificado, então controle passa à etapa 2170, à qual só a variável total é incrementada.
[00424] Novamente, é notado que controla passa diretamente à etapa 2180 da Figura 37, onde um código de escape não é codificado, de forma que nenhuma mudança seja feita a quaisquer das variáveis: abaixo, acima e total.
[00425] Note que em qualquer conjunto de testes, é verificado se a subestimativa ou ultrapassagem é significante verificando se a subestimativa ou ultrapassagem teria acontecido se NFB ou param_offset tinha sido até mesmo mais alto ou até mais baixo, respectivamente. Mas, esta margem extra não é requerida - os testes poderiam simplesmente ser "um tiro abaixo (acima) aconteceu?"
[00426] A uma etapa 2180, se houver outro coeficiente disponível para codificar nessa TU, então controle retorna à etapa 2140. Caso contrário, controle passa a uma etapa 2190, que é executada ao término de cada TU, mas antes que a próxima TU seja codificada. Nesta etapa 2190, a variável de compensação/NFB é potencialmente mudada adaptavelmente de acordo com as variáveis abaixo, acima e total. Aqui, a mesma adaptação se aplica tanto ao valor de compensação ou ao valor de NFB, de forma que: se ((abaixo * 4) > total, o valor de compensação/NFB é incrementado (por 1); e se ((acima * 2) > total, o valor de compensação/NFB é decrementado (por 1) sujeito a um valor mínimo de 0.
[00427] Note que se ambos os testes forem passados em relação a uma única TU, então o valor de NFB ou param_offset permanecerá o mesmo.
[00428] Note que a divisão por fatias e então por TUs não é essencial - qualquer grupo de valores (que pode até não ser valores de dados de vídeo) pode ser tratado deste modo, e subdividido em subconjuntos em lugar da divisão de TU nesta descrição.
[00429] Isto é equivalente a incrementar a compensação/NFB se mais que 25% de subestimativas forem experimentadas, mas decrementar o valor de compensação/NFB se houver mais que 50% de ultrapassagens. Assim, a proporção usada para o teste de subestimativas é mais baixa que a proporção usada para o teste de ultrapassagens. Uma razão para esta assimetria é que subestimativas geram mais ineficiência do que ultrapassagens por causa da natureza dos métodos de codificação de escape usados no caso de subestimativas. Será apreciado, porém que os mesmos limiares poderiam ser usados, ou valores diferentes poderiam ser usados.
[00430] Finalmente, a uma etapa 2200, se houver outra TU na fatia, então controle retorna à etapa 2120. Se não houver nenhuma TU adicional na fatia, então controle retorna à etapa 2100. Note que, como discutido acima, opcionalmente o ponto de partida para compensação/NFB poderia ser estabelecido (para uso no próximo caso da etapa 2120, para a próxima ou uma fatia futura) baseado nos resultados obtidos durante o processo de codificação que há pouco completou.
[00431] Etapas complementares são executadas no lado de decodificação (ou no caminho de decodificação de um codificador). Por exemplo, um método de decodificação pode incluir decodificar uma primeira porção de cada valor de dados de um ou mais conjuntos de dados indicativos de primeiras porções de gama de magnitude predeterminada e codificado a uma transferência de dados de entrada usando codificação binária; decodificar uma segunda porção de pelo menos esses valores de dados não codificados completamente pelos conjuntos de dados, o número de bits da segunda porção dependendo de um valor n, onde n é um inteiro, dados definindo a segunda porção sendo incluída na transferência de dados de entrada, e, se um valor de dados não foi decodificado completamente pelas respectivas primeira e segunda porções, decodificar uma terceira porção restante do valor de dados da transferência de dados de entrada; detectar, para um subconjunto de dois ou mais dos valores de dados, (i) um número de casos de valores de dados para quais uma terceira porção foi codificada e ainda foi requerida tinha um valor mais alto de n sido usado, e (ii) um número de casos de valores de dados para quais uma segunda porção foi codificada, mas o valor de n era tal que o valor de dados poderia ter sido codificado completamente por primeira e segunda porções usando um valor mais baixo de n; e depois de decodificar o subconjunto dos valores de dados, variar n para uso em relação a valores de dados subsequentes de acordo com os resultados da etapa de detecção.
[00432] As etapas descritas acima podem ser executadas pelo codificador de entropia 370 e pelo decodificador de entropia 410 (no caso de um processo de codificação) ou apenas pelo decodificador de entropia 410 (no caso de um processo de decodificação). Os processos podem ser implementados em hardware, software, hardware programável ou similar. Note que o codificador de entropia 370 pode, portanto, atuar como um codificador, um gerador, um detector e um processador para implementar as técnicas de codificação. O decodificador de entropia 410 pode, por conseguinte atuar como um ou mais decodificadores, um detector, e um processador para implementar as técnicas de decodificação descritas aqui.
[00433] Por conseguinte, os arranjos descritos acima representam exemplos de um método de decodificação de dados para decodificar um grupo (por exemplo, uma fatia) de valores de dados (por exemplo, dados de imagem), o método incluindo as etapas de:decodificar uma primeira porção de cada valor de dados de um ou mais conjuntos de dados (por exemplo, mapas) indicativos de primeiras porções de gama de magnitude predeterminada e codificados a uma transferência de dados de entrada usando codificação binária; decodificar uma segunda porção de pelo menos aqueles valores de dados não codificado completamente pelos conjuntos de dados, o número de bits da segunda porção dependendo de um valor n, onde n é um inteiro, dados definindo a segunda porção sendo incluídos na transferência de dados de entrada , se um valor de dados não foi decodificado completamente pelas respectivas primeira e segunda porções, decodificar uma terceira porção restante do valor de dados da transferência de dados de entrada (aqui, por exemplo, a segunda porção pode representar os bits fixos ou uma porção de sufixo; o valor n pode representar o número de bits fixos ou o comprimento de sufixo (em codificação de Golomb-Rice) ou a ordem da codificação de Golomb exponencial como discutido acima; a terceira porção pode representar um prefixo nos sistemas de Golomb-Rice ou Golomb exponencial, ou um código de escape no exemplo de bits fixos); detectar, para um subconjunto de dois ou mais dos valores de dados, (i) um número (por exemplo, a variável "abaixo") de casos de valores de dados para quais uma terceira porção foi codificada e ainda foi requerido um valor mais alto de n foi usado, e (ii) um número (por exemplo, a variável "abaixo") de casos de valores de dados para quais uma segunda porção foi codificada, mas o valor de n era tal que o valor de dados poderia ter sido codificado completamente por primeira e segunda porções usando um valor mais baixo de n; e depois de decodificar o subconjunto dos dados valor, variar (por exemplo, incrementar ou decrementar) n para uso em relação a valores de dados subsequentes de acordo com os resultados da etapa de detecção.
[00434] A variável "total" representa um exemplo de um número total detectado de casos, em relação àquele subconjunto de valores de dados, para qual uma segunda porção foi codificada.
[00435] As modalidades anteriores também representam um exemplo de um método de codificação de dados para codificar um arranjo de valores de dados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape incluindo uma porção codificada unária e uma porção codificada não unária, o método incluindo as etapas de:estabelecer um parâmetro de codificação (param_offset, por exemplo) definindo um número mínimo de bits de uma porção codificada não unária (em Golomb-Rice ou Golomb exponencial, k define um comprimento de sufixo mínimo ou ordem), o parâmetro de codificação estando entre 0 e um limite superior predeterminado; adicionar um valor de compensação (param_offset nos exemplos) de 1 ou mais ao parâmetro de codificação para definir um tamanho mínimo de porção de dados menos significantes; gerar um ou mais conjuntos de dados (por exemplo, o mapa de significação, conjuntos >1, >2) indicativos de posições, relativa à ordem de valores de dados, de valores de dados de gamas de magnitude predeterminadas, de modo a codificar o valor de pelo menos um bit menos significante de cada valor de dados; gerar, de pelo menos a parte de cada valor de dados não codificada pelo um ou mais conjuntos de dados, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente zero ou bits mais significantes daquela porção, e a porção de dados menos significante respectiva é dependente de vários bits menos significantes daquela parte, o número de bits menos significantes sendo maior ou igual ao tamanho mínimo de porção de dados menos significantes; codificar os conjuntos de dados a uma transferência de dados de saída (por exemplo, como dados codificados binários); codificar as porções de dados mais significantes à transferência de dados de saída (por exemplo, como um prefixo); e codificar as porções menos significantes à transferência de dados de saída (por exemplo, como um sufixo).
[00436] Note que os processos anteriores podem ser executados (em algumas modalidades) depois da geração do mapa de significação, de forma que os valores de dados (em que o processo é executado) podem ser gerados de valores de entrada respectivos: gerando um conjunto de dados adicional, o conjunto de dados adicional sendo um mapa de significação indicativo de posições, relativas à ordem de valores de entrada, de valor de entrada não zero; e subtraindo 1 de cada valor de entrada para gerar um valor de dados respectivo.
[00437] Figuras 38 e 39 são fluxogramas esquemáticos ilustrando um processo para selecionar gama dinâmica de transformada e parâmetros de precisão de dados.
[00438] Se referindo à Figura 38, e como descrito acima, a uma etapa 2410, parâmetros tais como a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada são selecionadas de acordo com a profundidade de bit de cada imagem ou componente de vídeo. A uma etapa 2410, para dados de imagem de entrada ou saída tendo componentes de imagem ou vídeo de profundidades de bit diferentes, um único conjunto da gama dinâmica máxima e/ou da precisão de dados das matrizes de transformada é selecionado para uso com todos os componentes de imagem ou vídeo.
[00439] Se referindo à Figura 39, uma etapa 2420 é semelhante à etapa 2410, mas inclui as características adicionais que o único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada é selecionado como aqueles valores relativos àquele dos componentes de imagem ou vídeo tendo a maior profundidade de bit.
[00440] Modalidades da descrição podem operar com respeito a uma sequência de valores de dados de entrada dependentes de um arranjo de coeficientes de imagem de entrada transformados em frequência.
[00441] Modalidades como discutidas acima estão definidas pelas cláusulas numeradas seguintes: 1. Um método de codificação de dados para codificar uma sequência de valores de dados, o método incluindo as etapas de: gerar, dos valores de dados de entrada, porções de dados mais significantes complementares respectivos e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente uma pluralidade de bits mais significantes daquele valor, e a porção de dados menos significante respectiva represente os bits menos significantes restantes daquele valor; gerar um ou mais conjuntos de dados indicativos de posições, relativas ao arranjo dos valores, de porções de dados mais significantes de magnitudes predeterminadas; codificar os conjuntos de dados a uma transferência de dados de saída usando codificação binária; e incluir dados definindo as porções menos significantes na transferência de dados de saída. 2. Um método de acordo com cláusula 1, em que um dos conjuntos de dados é um mapa de significação indicativo de posições, relativas a um arranjo dos valores de dados, de porções de dados mais significantes que são não zero. 3. Um método de acordo com cláusula 2, em que o mapa de significação inclui uma bandeira de dados indicativa da posição, de acordo com uma ordenação predeterminada do arranjo de valores, da última das porções de dados mais significantes tendo um valor não zero. 4. Um método de acordo com cláusula 2 ou cláusula 3, em que os conjuntos de dados incluem: um mapa maior que um indicativo de posições, relativas ao arranjo dos valores, de porções de dados mais significantes que são maiores que 1; e um mapa maior que dois indicativos de posições, relativas ao arranjo dos valores, de porções de dados mais significantes que são maiores que 2. 5. Um método de acordo com cláusula 1, em que os conjuntos de dados incluem: um mapa maior que um indicativo de posições, relativas a um arranjo dos valores, de porções de dados mais significantes que são maiores que ou iguais a 1; e um mapa maior que dois indicativos de posições, relativas ao arranjo dos valores, de porções de dados mais significantes que são maiores que ou iguais a 2. 6. Um método de acordo com cláusula 5, incluindo a etapa de gerar um conjunto de dados adicional, o conjunto de dados adicional sendo um mapa de significação indicativo de posições, relativas ao arranjo dos valores, de valores não zero. 7. Um método de acordo com cláusula 6, em que o mapa de significação inclui uma bandeira de dados indicativa da posição, de acordo com uma ordenação predeterminada do arranjo de valores, do último dos valores tendo um valor não zero. 8. Um método de acordo com qualquer uma das cláusulas precedentes, em que a etapa de incluir dados definindo as porções de dados menos significantes na transferência de dados de saída inclui codificar as porções de dados menos significantes usando codificação aritmética na qual símbolos representando as porções de dados menos significantes são codificados de acordo com proporções respectivas de uma gama de valor de codificação, em que as proporções respectivas da gama de valor de codificação para cada um dos símbolos que descrevem a porção de dados menos significante são de tamanho igual. 9. Um método de acordo com qualquer uma cláusula 1 a 7, em que a etapa de incluir dados definindo as porções menos significantes na transferência de dados de saída inclui diretamente incluir as porções de dados menos significantes na transferência de dados de saída como dados brutos. 10. Um método de acordo com qualquer uma das cláusulas precedentes, em que: a sequência de valores de dados representa dados de imagem tendo uma profundidade de bit de dados de imagem; e o método inclui colocar o número de bits a ser usado como a pluralidade de bits mais significantes em cada porção de dados mais significantes para ser igual à profundidade de bit de dados de imagem. 11. Um método de acordo com qualquer uma das cláusulas precedentes, em que a sequência de valores de dados inclui uma sequência de coeficientes de imagem transformados em frequência. 12. Um método de acordo com cláusula 11, em que os coeficientes de imagem de entrada transformados em frequência são coeficientes de imagem de entrada transformados em frequência quantizados de acordo com um parâmetro de quantização de variável selecionado de uma gama de parâmetros de quantização disponíveis, o método incluindo: codificar o arranjo de coeficientes de imagem de entrada transformados em frequência de acordo com as porções de dados mais significantes e as porções de dados menos significantes para coeficientes produzidos usando um parâmetro de quantização em uma primeira sub-gama predeterminada da gama de parâmetros de quantização disponíveis; e para coeficientes produzidos usando um parâmetro de quantização não na primeira sub-gama predeterminada da gama de parâmetros de quantização disponíveis, codificar o arranjo de coeficientes de imagem de entrada transformados em frequência tal que o número de bits em cada porção de dados mais significantes iguale o número de bits daquele coeficiente e a respectiva porção de dados menos significantes não contenha nenhum bit. 13. Um método de acordo com cláusula 11 ou cláusula 12, incluindo as etapas de: transformar em frequência dados de imagem de entrada para gerar um arranjo de coeficientes de imagem de entrada transformados em frequência por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes transformadas tendo uma precisão de dados; e selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de entrada. 14. Um método de acordo com cláusula 13, em que a etapa de seleção inclui: estabelecer a precisão de dados das matrizes de transformada a um primeiro número de compensação de bits menos que a profundidade de bit dos dados de imagem de entrada; e estabelecer a gama dinâmica máxima dos dados transformados a um segundo número de compensação de bits maior que a profundidade de bit dos dados de imagem de entrada. 15. Um método de acordo com cláusula 14, em que o primeiro número de compensação de bits é igual a 2 e o segundo número de compensação de bits é igual a 5. 16. Um método de acordo com qualquer uma de cláusulas 13 a 15, incluindo a etapa de: derivar matrizes transformadas a uma precisão de dados exigida de matrizes de transformada de fonte respectivas a uma precisão de dados diferente. 17. Um método de acordo com qualquer uma das cláusulas precedentes, em que a etapa de codificação inclui: selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual de um conjunto de dados para codificação, o conjunto de valores de código estando definido por uma variável de gama; nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada; modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; detectar se a variável de gama definindo o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente a variável de gama de modo a aumentar o tamanho do conjunto de valores de código até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; e depois de codificar um grupo de valor de dados de entrada, estabelecer a variável de gama a um valor selecionado de um subconjunto predeterminado de valores de variável de gama disponível, cada valor no subconjunto tendo pelo menos um bit menos significante igual a zero. 18. Um método de acordo com cláusula 17, em que: as proporções das sub-gamas relativas ao conjunto de valores de código estão definidas por uma variável de contexto associada com o valor de dados de entrada. 19. Um método de acordo com cláusula 18, incluindo a etapa de: seguindo a codificação de um valor de dados, modificar a variável de contexto, para uso em relação a um próximo valor de dados de entrada, de modo a aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual. 20. Um método de acordo com qualquer uma de cláusulas 17 a 19, em que: o conjunto de valores de código inclui valores de 0 para um valor superior definido pela variável de gama, o valor superior estando entre 256 e 510. 21. Um método de acordo com cláusula 20, em que: o subconjunto de valores disponíveis da variável de gama inclui o valor 256. 22. Um método de acordo com cláusula 20, em que: o subconjunto de valores disponíveis inclui um conjunto consistindo em 256 e 384; a etapa de estabelecer a variável de gama inclui selecionar um valor do subconjunto de acordo com um valor atual da variável de gama, de forma que a variável de gama seja estabelecida a 256 se o valor atual da variável de gama estiver entre 256 e 383, e a variável de gama seja estabelecida a 384 se o valor atual da variável de gama estiver entre 384 e 510. 23. Um método de acordo com cláusula 20, em que: o subconjunto de valores disponíveis inclui um conjunto consistindo em 256, 320, 384 e 448; a etapa de estabelecer a variável de gama inclui selecionar um valor do subconjunto de acordo com um valor atual da variável de gama, de forma que a variável de gama seja estabelecida a 256 se o valor atual da variável de gama estiver entre 256 e 319, a variável de gama seja estabelecida a 320 se o valor atual da variável de gama estiver entre 320 e 383, a variável de gama seja estabelecida a 384 se o valor atual da variável de gama estiver entre 384 e 447, e a variável de gama seja estabelecida a 448 se o valor atual da variável de gama estiver entre 448 e 510. 24. Um método de acordo com qualquer uma de cláusulas 17 a 23, incluindo: codificar dados representando valores que não são representados em um conjunto de dados como dados de desvio; detectar a quantidade de dados de desvio associada com um arranjo atual; e aplicar a etapa de estabelecimento se a quantidade de dados de desvio exceder uma quantidade limiar, mas não aplicar a etapa de estabelecimento caso contrário. 25. Um método de acordo com qualquer uma de cláusulas 17 a 24, em que os dados são codificados como unidades de transformada incluindo uma pluralidade de arranjos de valores de dados, o método incluindo aplicar a etapa de estabelecimento ao término de codificar uma unidade de transformada. 26. Um método de codificar dados de imagem, incluindo as etapas de: transformar em frequência dados de imagem de entrada para gerar um arranjo de coeficientes de imagem de entrada transformados em frequência por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes de transformada tendo uma precisão de dados; e selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes transformadas de acordo com a profundidade de bit dos dados de imagem de entrada. 27. Dados de imagem codificados pelo método de codificação de qualquer uma das cláusulas precedentes. 28. Um portador de dados armazenando dados de vídeo de acordo com cláusula 17. 29. Um método de decodificação de dados para decodificar dados para prover um arranjo de valores de dados, o método incluindo as etapas de: separar, de uma transferência de dados de entrada, porções de dados menos significantes dos valores de dados e um ou mais conjuntos de dados codificados; decodificar os conjuntos de dados para gerar porções de dados mais significantes dos valores de dados usando decodificação binária; e combinar as porções de dados mais significantes e as porções de dados menos significantes para formar os valores de dados, tal que, para um valor de dados, a respectiva porção de dados mais significantes represente uma pluralidade dos bits mais significantes daquele valor de dados, e a porção de dados menos significante respectiva represente os bits menos significantes restantes daquele valor de dados. 30. Um método de decodificar dados de imagem, incluindo as etapas de: transformar em frequência dados de imagem transformados em frequência de entrada para gerar um arranjo de dados de imagem de saída por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes transformadas tendo uma precisão de dados; e selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de saída. 31. Software de computador que, quando executado por um computador, faz o computador executar o método de qualquer uma das cláusulas precedentes. 32. Um meio de armazenamento legível por máquina não transitório no qual software de computador de acordo com cláusula 31 está armazenado. 33. Aparelho de codificação de dados para codificar uma sequência de valores de dados, o aparelho incluindo: um gerador configurado para gerar, dos valores de dados de entrada, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente uma pluralidade dos bits mais significantes daquele valor, e a porção de dados menos significante respectiva represente os bits menos significantes restantes daquele valor e configurado para gerar um ou mais conjuntos de dados indicativos de posições, relativas ao arranjo dos valores, de porções de dados mais significantes de magnitudes predeterminadas; e um codificador configurado para codificar os conjuntos de dados a uma transferência de dados de saída usando codificação binária e incluir dados definindo as porções menos significantes na transferência de dados de saída. 34. Aparelho de codificação de dados para codificar dados de imagem, o aparelho incluindo: um transformador de frequência configurado para transformar em frequência dados de imagem de entrada para gerar um arranjo de coeficientes de imagem de entrada transformados em frequência por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes de transformada tendo uma precisão de dados; e um seletor configurado para selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de entrada. 35. Aparelho de decodificação de dados para decodificar dados para prover um arranjo de valores de dados, o aparelho incluindo as etapas de: um separador de dados configurado para separar, de uma transferência de dados de entrada, porções de dados menos significantes dos valores de dados e um ou mais conjuntos de dados codificados; um decodificador configurado para decodificar os conjuntos de dados para gerar porções de dados mais significantes dos valores de dados usando decodificação binária; e um combinador configurado para combinar as porções de dados mais significantes e as porções de dados menos significantes para formar o valor de dados, tal que, para um valor de dados, a respectiva porção de dados mais significantes represente uma pluralidade dos bits mais significantes daquele valor de dados, e a respectiva porção de dados menos significantes represente os bits menos significantes restantes daquele valor de dados. 36. Aparelho de decodificação de dados de imagem incluindo: uma frequência transformada configurada para transformar em frequência dados de imagem transformados em frequência de entrada para gerar arranjo de dados de imagem de saída por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes de transformada tendo uma precisão de dados; e um seletor configurado para selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de saída. 37. Aparelho de captura, transmissão, exibição e/ou armazenamento de dados de vídeo incluindo aparelho de acordo com qualquer uma de cláusulas 33 a 36.
[00442] Modalidades adicionais estão definidas pelas cláusulas numeradas seguintes: 38. Um método de codificar valores de dados de entrada de um conjunto de dados para codificar, o método incluindo as etapas de: selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual, o conjunto de valores de código estando definido por uma variável de gama; nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada; modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; detectar se a variável de gama definindo o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente a variável de gama de modo a aumentar o tamanho do conjunto de valores de código até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; e depois de codificar um grupo de valor de dados de entrada, estabelecer a variável de gama a um valor selecionado de um subconjunto predeterminado de valores de variável de gama disponível, cada valor no subconjunto tendo pelo menos um bit menos significante igual a zero. 39. Um método de acordo com cláusula 1, em que: as proporções da sub-gama relativa ao conjunto de valores de código estão definidas por uma variável de contexto associada com o valor de dados de entrada. 40. Um método de acordo com cláusula 2, incluindo a etapa de: seguindo a codificação de um valor de dados de entrada, modificar a variável de contexto, para uso em relação a um próximo valor de dados de entrada, de modo a aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados de entrada atual. 41. Um método de acordo com qualquer uma de cláusulas 1 a 3, em que: o conjunto de valores de código inclui valores de 0 para um valor superior definido pela variável de gama, o valor superior estando entre o tamanho mínimo predeterminado e um segundo valor predeterminado. 42. Um método de acordo com cláusula 4, em que o tamanho mínimo predeterminado é 256 e o segundo valor predeterminado é 510. 43. Um método de acordo com qualquer uma de cláusulas 1 a 5, em que: o subconjunto de valores disponíveis da variável de gama inclui o tamanho mínimo predeterminado. 44. Um método de acordo com qualquer uma de cláusulas 1 a 5, em que o subconjunto inclui dois ou mais valores entre o tamanho mínimo predeterminado e o segundo valor predeterminado. 45. Um método de acordo com cláusula 7, em que a etapa de estabelecimento inclui selecionar um valor do subconjunto de acordo com um valor atual da variável de gama. 46. Um método de acordo com cláusula 8, em que a etapa de estabelecimento inclui selecionar um valor particular do subconjunto se o valor atual da variável de gama estiver entre aquele valor particular e um menos que um valor próximo mais alto no subconjunto. 47. Um método de acordo com qualquer uma das cláusulas precedentes, incluindo: codificar dados representando coeficientes que não são representados em um conjunto de dados como dados de desvio; detectar a quantidade de dados de desvio associada com um arranjo atual; e aplicar a etapa de estabelecimento se a quantidade de dados de desvio exceder uma quantidade limiar, mas não aplicar a etapa de estabelecimento caso contrário. 48. Um método de acordo com qualquer uma das cláusulas precedentes, em que: os valores de dados de entrada representam dados de imagem; os dados de imagem são codificados como unidades de transformada incluindo uma pluralidade de arranjos de coeficientes, o método incluindo aplicar a etapa de estabelecimento ao término de codificar uma unidade de transformada. 49. Dados codificados pelo método de codificação de qualquer uma das cláusulas precedentes. 50. Um portador de dados armazenando dados de vídeo de acordo com cláusula 12. 51. Aparelho de codificação de dados para codificar valores de dados de entrada de um conjunto de dados para codificação, o aparelho incluindo: um seletor configurado para selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual, o conjunto de valores de código estando definido por uma variável de gama e nomear o valor de dados de entrada atual a um valor de código dentro da subgama selecionada; um modificador configurado para modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; um detector configurado para detectar se a variável de gama definindo o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente a variável de gama de modo a aumentar o tamanho do conjunto de valores de código até que tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; e um colocador de variável de gama configurado, depois de codificar um grupo de valores de dados de entrada, para estabelecer a variável de gama a um valor selecionado de um subconjunto predeterminado de valores de variável de gama disponível, cada valor no subconjunto tendo pelo menos um bit menos significante igual a zero. 52. Aparelho de captura, transmissão e/ou armazenamento de dados de vídeo incluindo aparelho de acordo com cláusula 14. Modalidades adicionais estão definidas pelas cláusulas numeradas seguintes: 53. Um método de codificação de dados para codificar um arranjo de valores de dados, o método incluindo as etapas de: gerar, dos valores de dados de entrada, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente uma pluralidade dos bits mais significantes daquele valor, e a porção de dados menos significante respectiva seja dependente dos bits menos significantes restantes daquele valor; gerar um ou mais conjuntos de dados indicativos de posições, relativas ao arranjo dos valores, de porções de dados mais significantes de gamas de magnitude predeterminadas; codificar os conjuntos de dados a uma transferência de dados de saída usando codificação binária; e incluir dados definindo as porções menos significantes na transferência de dados de saída. 54. Um método de acordo com cláusula 1, em que um dos conjuntos de dados é um mapa de significação indicativo de posições, relativo a um arranjo do valor de dados, de porções de dados mais significantes que são não zero. 55. Um método de acordo com cláusula 2, em que o mapa de significação inclui uma bandeira de dados indicativa da posição, de acordo com uma ordenação predeterminada do arranjo de valores de dados, da última da porção de dados mais significantes tendo um valor não zero. 56. Um método de acordo com cláusula 2 ou cláusula 3, em que os conjuntos de dados incluem: um mapa maior que um indicativo de posições, relativo ao arranjo dos valores de dados, de porções de dados mais significantes que são maiores que 1; e um mapa maior que dois indicativos de posições, relativo ao arranjo do valor de dados, de porções de dados mais significantes que são maiores que 2. 57. Um método de acordo com cláusula 1, em que os conjuntos de dados incluem: um mapa maior que um indicativo de posições, relativo a um arranjo dos valores de dados, de porções de dados mais significantes que são maiores que ou igual a 1; e um mapa maior que dois indicativos de posições, relativo ao arranjo do valor de dados, de porções de dados mais significantes que são maiores que ou igual a 2. 58. Um método de acordo com cláusula 5, incluindo a etapa de gerar os valores de dados de valores de entrada respectivos: gerando um conjunto de dados adicional, o conjunto de dados adicional sendo um mapa de significação indicativo de posições, relativo ao arranjo de valores de entrada, de valor de entrada não zero; e subtraindo 1 de cada valor de entrada para gerar um valor de dados respectivo. 59. Um método de acordo com cláusula 5 ou cláusula 6, em que o mapa de significação inclui uma bandeira de dados indicativa da posição, de acordo com uma ordenação predeterminada do arranjo de valores de entrada, do último dos valores de entrada tendo um valor não zero. 60. Um método de acordo com qualquer uma das cláusulas precedentes, em que a etapa de incluir dados definindo as porções de dados menos significantes na transferência de dados de saída inclui codificar a porção de dados menos significantes usando codificação aritmética na qual símbolos representando as porções de dados menos significantes são codificados de acordo com proporções respectivas de uma gama de valor de codificação, em que as proporções respectivas da gama de valor de codificação para cada um dos símbolos que descrevem a porção de dados menos significantes são de tamanho igual. 61. Um método de acordo com qualquer uma de cláusulas 1 a 8, em que a etapa de incluir dados definindo as porções menos significantes na transferência de dados de saída inclui incluir diretamente as porções de dados menos significantes na transferência de dados de saída como dados brutos. 62. Um método de acordo com qualquer uma das cláusulas precedentes, em que: a sequência de valores de dados representa dados de imagem tendo uma profundidade de bit de dados de imagem; e o método inclui colocar o número de bits a ser usado como a pluralidade de bits mais significantes em cada porção de dados mais significantes para ser igual à profundidade de bit de dados de imagem. 63. Um método de acordo com qualquer uma das cláusulas precedentes, em que a sequência de valores de dados representa uma sequência de coeficientes de imagem transformados em frequência. 64. Um método de acordo com cláusula 11, em que os coeficientes de imagem de entrada transformados em frequência são coeficientes de imagem de entrada transformados em frequência quantizados de acordo com um parâmetro de quantização variável selecionado de uma gama de parâmetros de quantização disponíveis, o método incluindo: codificar o arranjo de coeficientes de imagem de entrada transformados em frequência de acordo com as porções de dados mais significantes e as porções de dados menos significantes para coeficientes produzidos usando um parâmetro de quantização em uma primeira sub-gama predeterminada da gama de parâmetros de quantização disponíveis; e para coeficientes produzidos usando um parâmetro de quantização não na primeira sub-gama predeterminada da gama de parâmetros de quantização disponíveis, codificar o arranjo de coeficientes de imagem de entrada transformados em frequência tal que o número de bits em cada porção de dados mais significantes iguale o número de bits daquele coeficiente e a respectiva porção de dados menos significantes não contenha nenhum bit. 65. Um método de acordo com cláusula 11, incluindo as etapas de: transformar em frequência dados de imagem de entrada para gerar um arranjo de coeficientes de imagem de entrada transformados em frequência por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes de transformada tendo uma precisão de dados; e selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de entrada. 66. Um método de acordo com cláusula 13, em que a etapa de seleção inclui: estabelecer a precisão de dados das matrizes de transformada a um primeiro número de compensação de bits menos que a profundidade de bit dos dados de imagem de entrada; e estabelecer a gama dinâmica máxima dos dados transformados a um segundo número de compensação de bits maior que a profundidade de bit dos dados de imagem de entrada. 67. Um método de acordo com cláusula 14, em que o primeiro número de compensação de bits é igual a 2 e o segundo número de compensação de bits é igual a 5. 68. Um método de acordo com cláusula 14, em que o primeiro número de compensação de bits é igual a 2 e o segundo número de compensação de bits é igual a 6. 69. Um método de acordo com cláusula 14, em que o segundo número de compensação é dependente do tamanho de matriz das matrizes de transformada. 70. Um método de acordo com qualquer uma de cláusulas 13 a 17, incluindo a etapa de: derivar matrizes de transformada a uma precisão de dados exigida de matrizes de transformada de fonte respectivas a uma precisão de dados diferente. 71. Um método de codificação de dados para codificar um arranjo de valores de dados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape incluindo uma porção codificada unária e uma porção codificada não unária, o método incluindo as etapas de: estabelecer um parâmetro de codificação definindo um número mínimo de bits de uma porção codificada não unária, o parâmetro de codificação estando entre 0 e um limite superior predeterminado; adicionar um valor de compensação de 1 ou mais ao parâmetro de codificação para definir um tamanho mínimo de porção de dados menos significantes; gerar um ou mais conjuntos de dados indicativos de posições, relativo ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminadas, de modo a codificar o valor de pelo menos um bit menos significante de cada valor de dados; gerar, de pelo menos a parte de cada valor de dados não codificados pelo um ou mais conjuntos de dados, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente zero ou bits mais significantes daquela porção, e a respectiva porção de dados menos significantes represente vários bits menos significantes daquela parte, o número de bits menos significantes sendo maior ou igual ao tamanho mínimo de porção de dados menos significantes; codificar os conjuntos de dados a uma transferência de dados de saída; codificar as porções de dados mais significantes à transferência de dados de saída; e codificar as porções menos significantes à transferência de dados de saída. 72. Um método de acordo com cláusula 19, em que: a etapa de codificar as porções dos dados mais significantes à transferência de dados de saída inclui codificar as porções de dados mais significantes à transferência de dados de saída usando um código unário; e a etapa de codificar as porções menos significantes à transferência de dados de saída inclui codificar as porções menos significantes à transferência de dados de saída usando um código não unário. 73. Um método de acordo com cláusula 19 ou cláusula 20, em que a etapa de codificar os conjuntos de dados a uma transferência de dados de saída inclui codificar os conjuntos de dados a uma transferência de dados de saída usando um código binário. 74. Um método de acordo com qualquer uma de cláusulas 19 a 21, em que a etapa de estabelecimento inclui incrementar o parâmetro de codificação em dependência da magnitude de um valor de dados atual no arranjo. 75. Um método de acordo com qualquer uma de cláusulas 20 a 22, em que as etapas de codificar a porção de dados mais significantes e a porção de dados menos significantes incluem codificar a porção de dados mais significantes e a porção de dados menos significantes usando um código de Golomb-Rice ou um código de Golomb exponencial. 76. Um método de acordo com cláusula 23, em que: o comprimento de sufixo do código de Golomb-Rice é igual ao tamanho mínimo de porção de dados menos significantes; e o código de Golomb exponencial tem uma ordem igual ao tamanho mínimo de porção de dados menos significantes. 77. Um método de acordo com qualquer uma de cláusulas 19 a 24, incluindo a etapa de gerar o valor de compensação em dependência de um parâmetro do arranjo de valores de dados. 78. Um método de acordo com cláusula 25, em que o parâmetro do arranjo de valores de dados inclui um ou mais selecionado da lista consistindo: no número de valores de dados no arranjo; em um tipo de dados representados pelos valores de dados; em um parâmetro de quantização aplicável ao arranjo de valores de dados; e em um modo de codificação. 79. Um método de acordo com qualquer uma de cláusulas 19 a 26, incluindo a etapa de incluir dados em um cabeçalho de dados definindo o valor de compensação. 80. Um método de acordo com cláusula 1, em que a etapa de codificação inclui: selecionar uma de uma pluralidade de sub-gamas complementares de um conjunto de valores de código de acordo com o valor de um valor de dados de entrada atual de um conjunto de dados para codificação, o conjunto de valores de código estando definido por uma variável de gama; nomear o valor de dados de entrada atual a um valor de código dentro da sub-gama selecionada; modificar o conjunto de valores de código em dependência do valor de código nomeado e do tamanho da sub-gama selecionada; detectar se a variável de gama definindo o conjunto de valores de código é menos que um tamanho mínimo predeterminado, e nesse caso, aumentar sucessivamente a variável de gama de modo a aumentar o tamanho do conjunto de valores de código até tenha pelo menos o tamanho mínimo predeterminado; e emitir um bit de dados codificado em resposta a cada tal operação de tamanho crescente; e depois de codificar um grupo de valores de dados de entrada, estabelecer a variável de gama a um valor selecionado de um subconjunto predeterminado de valores de variável de gama disponível, cada valor no subconjunto tendo pelo menos um bit menos significante igual a zero. 81. Um método de acordo com cláusula 28, em que: as proporções das sub-gamas relativas ao conjunto de valores de código estão definidas por uma variável de contexto associada com o valor de dados de entrada. 82. Um método de acordo com cláusula 29, incluindo a etapa de: seguindo a codificação de um valor de dados, modificar a variável de contexto, para uso em relação a um próximo valor de dados de entrada, de modo a aumentar a proporção do conjunto de valores de código na sub-gama que foi selecionada para o valor de dados atual. 83. Um método de acordo com qualquer uma de cláusulas 28 a 30, em que: o conjunto de valores de código inclui valores de 0 a um valor superior definido pela variável de gama, o valor superior estando entre 256 e 510. 84. Um método de acordo com cláusula 31, em que: o subconjunto de valores disponíveis da variável de gama inclui o valor 256. 85. Um método de acordo com cláusula 31, em que: o subconjunto de valores disponíveis inclui um conjunto consistindo em 256 e 384; a etapa de estabelecer a variável de gama inclui selecionar um valor do subconjunto de acordo com um valor atual da variável de gama, de forma que a variável de gama seja estabelecida a 256 se o valor atual da variável de gama estiver entre 256 e 383, e a variável de gama seja estabelecida a 384 se o valor atual da variável de gama estiver entre 384 e 510. 86. Um método de acordo com cláusula 31, em que: o subconjunto de valores disponíveis inclui um conjunto consistindo em 256, 320, 384 e 448; a etapa de estabelecer a variável de gama inclui selecionar um valor do subconjunto de acordo com um valor atual da variável de gama, de forma que a variável de gama seja estabelecida a 256 se o valor atual da variável de gama estiver entre 256 e 319, a variável de gama seja estabelecida a 320 se o valor atual da variável de gama está entre 320 e 383, a variável de gama seja estabelecida a 384 se o valor atual da variável de gama estiver entre 384 e 447, e a variável de gama seja estabelecida a 448 se o valor atual da variável de gama estiver entre 448 e 510. 87. Um método de acordo com qualquer uma de cláusulas 28 a 34, incluindo: codificar dados representando valores que não são representados em um conjunto de dados como dados de desvio; detectar a quantidade de dados de desvio associada com um arranjo atual; e aplicar a etapa de estabelecimento se a quantidade de dados de desvio exceder uma quantidade limiar, mas não aplicar a etapa de estabelecimento caso contrário. 88. Um método de acordo com qualquer uma de cláusulas 28 a 35, em que os dados são codificados como unidades de transformada incluindo uma pluralidade de arranjos de valores de dados, o método incluindo aplicar a etapa de estabelecimento ao término de codificar uma unidade de transformada. 89. Um método de codificar dados de imagem, incluindo as etapas de: transformar em frequência dados de imagem de entrada para gerar um arranjo de coeficientes de imagem de entrada transformados em frequência por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes de transformada tendo uma precisão de dados; e selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de entrada. 90. Um método de acordo com cláusula 37, em que, para dados de imagem de entrada tendo componentes de imagem de profundidades de bit diferentes, a etapa de seleção inclui selecionar um único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada para uso com todos os componentes de imagem. 91. Um método de acordo com cláusula 38, em que a etapa de seleção inclui selecionar, como o único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada, aqueles valores relativos àquele um dos componentes de imagem tendo a maior profundidade de bit. 92. Dados de imagem codificados pelo método de codificação de qualquer uma das cláusulas precedentes. 93. Um portador de dados armazenando dados de imagem de acordo com cláusula 40. 94. Um método de decodificação de dados para decodificar dados para prover um arranjo de valores de dados, o método incluindo as etapas de: separar, de uma transferência de dados de entrada, porções de dados menos significantes dos valores de dados e um ou mais conjuntos de dados codificados; decodificar os conjuntos de dados para gerar porções de dados mais significantes dos valores de dados usando decodificação binária; e combinar as porções de dados mais significantes e as porções de dados menos significantes para formar o valor de dados, tal que, para um valor de dados, a respectiva porção de dados mais significantes represente uma pluralidade de bits mais significantes daquele valor de dados, e a respectiva porção de dados menos significantes seja dependente dos bits menos significantes restantes daquele valor de dados. 95. Um método de decodificação de dados para decodificar dados de entrada para prover um arranjo de valores de dados, os dados de entrada sendo codificados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape incluindo uma porção codificada unária e uma porção codificada não unária, o método incluindo as etapas de: estabelecer um parâmetro de codificação definindo um número mínimo de bits de uma porção codificada não unária, o parâmetro de codificação estando entre 0 e um limite superior predeterminado; adicionar um valor de compensação de 1 ou mais ao parâmetro de codificação de modo a definir um tamanho mínimo de porção de dados menos significantes; decodificar um ou mais conjuntos de dados indicativos de posições, relativo ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a decodificar o valor de pelo menos um bit menos significante de cada valor de dados; decodificar pelo menos a parte de cada valor de dados não codificado pelo um ou mais conjuntos de dados da porção codificada unária e a porção codificada não unária respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente zero ou bits mais significantes daquela porção, e a respectiva porção de dados menos significantes represente vários bits menos significantes daquela parte, o número de bits menos significantes sendo maior ou igual ao tamanho mínimo de porção de dados menos significantes. 96. Um método de decodificar dados de imagem, incluindo as etapas de: transformar em frequência dados de imagem de entrada transformados em frequência para gerar um arranjo de dados de imagem de saída por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes de transformada tendo uma precisão de dados; e selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de saída. 97. Um método de acordo com cláusula 44 em que, para dados de imagem de entrada tendo componentes de imagem de profundidades de bit diferentes, a etapa de seleção inclui selecionar um único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada para uso com todos os componentes de imagem. 98. Um método de acordo com cláusula 45, em que a etapa de seleção inclui selecionar, como o único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada, aqueles valores relativos àquele um dos componentes de imagem tendo a maior profundidade de bit. 99. Software de computador que, quando executado por um computador, faz o computador executar o método de qualquer uma de cláusulas 1 a 39 e 42 a 46. 100. Um meio de armazenamento legível por máquina não transitório em que software de computador de acordo com cláusula 47 está armazenado. 101. Aparelho de codificação de dados para codificar uma sequência de valores de dados, o aparelho incluindo: um gerador configurado para gerar, dos valores de dados de entrada, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente uma pluralidade dos bits mais significantes daquele valor, e a respectiva porção de dados menos significantes seja dependente dos bits menos significantes restantes daquele valor e configurado para gerar um ou mais conjuntos de dados indicativos de posições, relativo ao arranjo dos valores, de porções de dados mais significantes de gama de magnitude predeterminada; e um codificador configurado para codificar os conjuntos de dados a uma transferência de dados de saída usando codificação binária e incluir dados definindo as porções menos significantes na transferência de dados de saída. 102. Aparelho de codificação de dados para codificar um arranjo de valores de dados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape incluindo uma porção codificada unária e uma porção codificada não unária, o aparelho incluindo: um processador configurado para: estabelecer um parâmetro de codificação definindo um número mínimo de bits de uma porção codificada não unária, o parâmetro de codificação estando entre 0 e um limite superior predeterminado; adicionar um valor de compensação de 1 ou mais ao parâmetro de codificação de modo a definir um tamanho mínimo de porção de dados menos significantes; gerar um ou mais conjuntos de dados indicativos de posições, relativo ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a codificar o valor de pelo menos um bit menos significante de cada valor de dados; e gerar, de pelo menos a parte de cada valor de dados não codificado pelo um ou mais conjuntos de dados, respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente zero ou bits mais significantes daquela porção, e a porção de dados menos significante respectiva represente vários bits menos significantes daquela parte, o número de bits menos significantes sendo maior ou igual ao tamanho mínimo de porção de dados menos significantes; e um codificador configurado para: codificar os conjuntos de dados a uma transferência de dados de saída; codificar as porções de dados mais significantes à transferência de dados de saída; e codificar as porções menos significantes à transferência de dados de saída. 103. Aparelho de codificação de dados para codificar dados de imagem, o aparelho incluindo: um transformador de frequência configurado para transformar em frequência dados de imagem de entrada para gerar um arranjo de coeficientes de imagem de entrada transformados em frequência por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes transformadas tendo uma precisão de dados; e um seletor configurado para selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de entrada. 104. Aparelho de acordo com cláusula 51 em que, para dados de imagem de entrada tendo componentes de imagem de profundidades de bit diferentes, o seletor está configurado para selecionar um único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada para uso com todos os componentes de imagem. 105. Aparelho de acordo com cláusula 52, em que o seletor está configurado para selecionar, como o único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada, aqueles valores relativos àquele um dos componentes de imagem tendo a maior profundidade de bit. 106. Aparelho de decodificação de dados para decodificar dados para prover um arranjo de valores de dados, o aparelho incluindo as etapas de: um separador de dados configurado para separar, de uma transferência de dados de entrada, porções de dados menos significantes dos valores de dados e um ou mais conjuntos de dados codificados; um decodificador configurado para decodificar os conjuntos de dados para gerar porções de dados mais significantes dos valores de dados usando decodificação binária; e um combinador configurado para combinar as porções de dados mais significantes e as porções de dados menos significantes para formar os valores de dados, tal que, para um valor de dados, a porção de dados mais significantes respectivos represente uma pluralidade dos bits mais significantes daquele valor de dados, e a respectiva porção de dados menos significantes represente o bits menos significantes restantes daquele valor de dados. 107. Aparelho de decodificação de dados para decodificar dados de entrada para prover um arranjo de valores de dados, os dados de entrada sendo codificados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape incluindo uma porção codificada unária e uma porção codificada não unária, o aparelho incluindo: um processador operável para estabelecer um parâmetro de codificação definindo um número mínimo de bits de uma porção codificada não unária, o parâmetro de codificação estando entre 0 e um limite superior predeterminado; adicionar um valor de compensação de 1 ou mais ao parâmetro de codificação para definir um tamanho mínimo de porção de dados menos significantes; decodificar um ou mais conjuntos de dados indicativo de posições, relativo ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a decodificar o valor de pelo menos um menos bit significante de cada valor de dados; e decodificar pelo menos a parte de cada valor de dados não codificado pelo um ou mais conjuntos de dados da porção codificada unária e a porção codificada não unária respectivas porções de dados mais significantes complementares e porções de dados menos significantes, tal que a porção de dados mais significantes de um valor represente zero ou bits mais significantes daquela porção, e a respectiva porção de dados menos significantes represente vários bits menos significantes daquela parte, o número de bits menos significantes sendo maior ou igual ao tamanho mínimo de porção de dados menos significantes. 108. Aparelho de decodificação de dados de imagem incluindo: uma frequência transformada configurada para transformar em frequência dados de imagem de entrada transformados em frequência para gerar um arranjo de dados de imagem de saída por um processo de multiplicação de matriz, de acordo com uma gama dinâmica máxima dos dados transformados e usar matrizes de transformada tendo uma precisão de dados; e um seletor configurado para selecionar a gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada de acordo com a profundidade de bit dos dados de imagem de saída. 109. Aparelho de acordo com cláusula 56 em que, para dados de imagem de entrada tendo componentes de imagem de profundidades de bit diferentes, o seletor está configurado para selecionar um único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada para uso com todos os componentes de imagem. 110. Aparelho de acordo com cláusula 57, em que o seletor está configurado para selecionar, como o único conjunto da gama dinâmica máxima e/ou a precisão de dados das matrizes de transformada, aqueles valores relativos àquele um dos componentes de imagem tendo a maior profundidade de bit. 111. Aparelho de captura, transmissão, exibição e/ou armazenamento de dados de vídeo incluindo aparelho de acordo com qualquer uma de cláusulas 49 a 58.
[00443] Como discutido anteriormente, será apreciado que características de aparelho da cláusula anterior podem ser implementadas por características respectivas do codificador ou decodificador como discutido anteriormente.

Claims (14)

1. Método de codificação de dados para codificar um arranjo de valores de dados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape compreendendo uma porção codificada unária e uma porção codificada não unária, o método sendo caracterizado pelo fato de que compreende as etapas de: gerar (2030, 2040, 2050) um ou mais conjuntos de dados sendo indicativos de posições, em relação ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a codificar o valor de pelo menos um bit menos significante de cada valor de dados; gerar (2070) códigos de escape a partir de pelo menos a parte de cada valor de dados não codificado por dito(s) um ou mais conjuntos de dados, em que a etapa de gerar códigos de escape compreende: gerar respectivas porções de dados mais significantes e porções de dados menos significantes complementares, tal que a porção de dados mais significante de um valor represente zero ou mais bits mais significantes daquela porção, e a respectiva porção de dados menos significante seja dependente de um número de bits menos significantes daquela parte, o número de bits menos significantes sendo maior do que ou igual a um tamanho mínimo de porção de dados menos significante que é obtido ao se estabelecer (2000) um parâmetro de codificação definindo um número mínimo de bits da porção codificada não unária, o parâmetro de codificação estando entre 0 (zero) e um limite superior predeterminado, e adicionar um valor de compensação de 1 (um) ou mais ao parâmetro de codificação de modo a definir o tamanho mínimo de porção de dados menos significante; codificar os conjuntos de dados para uma transferência de dados de saída; codificar as porções de dados mais significantes para a referida transferência de dados de saída; e codificar as porções menos significantes para a transferência de dados de saída.
2. Método de acordo com a reivindicação 1, caracterizado pelo fato de que: a etapa de codificar as porções de dados mais significantes para a transferência de dados de saída compreende codificar as porções de dados mais significantes para a transferência de dados de saída usando um código unário; e a etapa de codificar aquelas porções menos significantes para a transferência de dados de saída compreende codificar aquelas porções menos significantes para a transferência de dados de saída usando um código não unário.
3. Método de acordo com a reivindicação 1, caracterizado pelo fato de que a etapa de codificar os conjuntos de dados para uma transferência de dados de saída compreende codificar os conjuntos de dados para uma transferência de dados de saída usando um código binário.
4. Método de acordo com a reivindicação 1, caracterizado pelo fato de que a etapa de estabelecer compreende incrementar aquele parâmetro de codificação em dependência da magnitude de um valor de dados atual em dito arranjo.
5. Método de acordo com a reivindicação 2, caracterizado pelo fato de que as etapas de codificar a porção de dados mais significante e a porção de dados menos significante compreendem codificação da porção de dados mais significante e da porção de dados menos significante utilizando um código de Golomb-Rice ou um código de Golomb exponencial.
6. Método de acordo com a reivindicação 5, caracterizado pelo fato de que: o comprimento de sufixo do código de Golomb-Rice é igual ao tamanho mínimo de porção de dados menos significante; e o código de Golomb exponencial apresenta uma ordem igual ao tamanho mínimo de porção de dados menos significante.
7. Método de acordo com a reivindicação 1, caracterizado pelo fato de compreender a etapa de gerar o valor de compensação em dependência de um parâmetro do arranjo de valores de dados.
8. Método de acordo com a reivindicação 7, caracterizado pelo fato de que o parâmetro do arranjo de valores de dados compreende um ou mais selecionados da lista consistindo de: o número de valores de dados no arranjo; um tipo de dados representado pelos valores de dados; um parâmetro de quantização aplicável ao arranjo de valores de dados; e um modo de codificação.
9. Método de acordo com a reivindicação 1, caracterizado pelo fato de compreender a etapa de incluir dados em um cabeçalho de dados que define o valor de compensação.
10. Método de decodificação de dados para decodificar dados de entrada para prover um arranjo de valores de dados, os dados de entrada sendo codificados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape compreendendo uma porção codificada unária e uma porção codificada não unária, o método sendo caracterizado pelo fato de que compreende as etapas de: decodificar um ou mais conjuntos de dados que são indicativos de posições, em relação ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a decodificar o valor de pelo menos um bit menos significante de cada valor de dados; decodificar códigos de escape a partir da parte de cada valor de dados não codificado por dito(s) um ou mais conjuntos de dados, em que a etapa de decodificar códigos de escape compreende: decodificar da porção codificada unária e da porção codificada não unária respectivas porções de dados mais significantes e porções de dados menos significantes complementares, tal que a porção de dados mais significante de um valor represente zero ou mais bits mais significantes daquela porção, e a respectiva porção de dados menos significante represente um número de bits menos significantes daquela parte, o número de bits menos significantes sendo maior do que ou igual a tamanho mínimo de porção de dados menos significante obtido ao se estabelecer um parâmetro de codificação que define um número mínimo de bits da porção codificada não unária, dito parâmetro de codificação estando entre 0 (zero) e um limite superior predeterminado, e adicionar um valor de compensação de 1 (um) ou mais ao parâmetro de codificação de modo a definir o tamanho mínimo de porção de dados menos significante.
11. Aparelho de codificação de dados configurado para codificar um arranjo de valores de dados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape compreendendo uma porção codificada unária e uma porção codificada não unária, o aparelho caracterizado pelo fato de que compreende: um processador configurado para: gerar um ou mais conjuntos de dados indicativos de posições, em relação ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a codificar o valor de pelo menos um bit menos significante de cada valor de dados; gerar códigos de escape a partir de pelo menos a parte de cada valor de dados não codificado por dito(s) um ou mais conjuntos de dados, em que o processador é ainda configurado para gerar os códigos de escape mediante geração de respectivas porções de dados mais significantes e porções de dados menos significantes complementares, tal que a porção de dados mais significante de um valor represente zero ou mais bits mais significantes daquela porção, e a respectiva porção de dados menos significante seja dependente de um número de bits menos significantes daquela parte, o número de bits menos significantes sendo maior do que ou igual a um tamanho mínimo de porção de dados menos significante obtido ao se estabelecer um parâmetro de codificação definindo um número mínimo de bits da porção codificada não unária, o referido parâmetro de codificação estando entre 0 (zero) e um limite superior predeterminado, e adicionar um valor de compensação de 1 (um) ou mais ao parâmetro de codificação de modo a definir o tamanho mínimo de porção de dados menos significante; e um codificador configurado para: codificar os conjuntos de dados para uma transferência de dados de saída; codificar as porções de dados mais significantes para a referida transferência de dados de saída; e codificar as porções menos significantes para a transferência de dados de saída.
12. Aparelho de decodificação de dados sendo configurado para decodificar dados de entrada para prover um arranjo de valores de dados, os dados de entrada citados sendo codificados como conjuntos de dados e códigos de escape para valores não codificados pelos conjuntos de dados, um código de escape compreendendo uma porção codificada unária e uma porção codificada não unária, o aparelho caracterizado pelo fato de que compreende: um processador operável para decodificar um ou mais conjuntos de dados indicativos de posições, em relação ao arranjo de valores de dados, de valores de dados de gamas de magnitude predeterminada, de modo a decodificar o valor de pelo menos um bit menos significante de cada valor de dados, para decodificar os códigos de escape a partir da parte de cada valor de dados não codificado por dito(s) um ou mais conjuntos de dados, em que o processador é adicionalmente configurado para decodificar da porção codificada unária e da porção codificada não unária respectivas porções de dados mais significantes e porções de dados menos significantes complementares, tal que a porção de dados mais significante de um valor represente zero ou mais bits mais significantes daquela porção, e a respectiva porção de dados menos significante represente um número de bits menos significantes daquela parte, o número de bits menos significantes sendo maior do que ou igual a um tamanho mínimo de porção de dados menos significante obtido ao se estabelecer um parâmetro de codificação que define um número mínimo de bits da porção codificada não unária, o dito parâmetro de codificação estando entre 0 e um limite superior predeterminado, e adicionar um valor de compensação de 1 ou mais ao parâmetro de codificação de modo a definir o tamanho mínimo de porção de dados menos significante.
13. Aparelho de armazenamento e/ou de exibição, transmissão, captura de dados de vídeo, caracterizado pelo fato de compreender o aparelho como definido na reivindicação 11 ou 12.
14. Meio de armazenamento não transitório legível por computador, caracterizado pelo fato de que compreende instruções legíveis por computador que, quando executadas por um computador, fazem com que o computador execute o método conforme definido na reivindicação 1 ou 10.
BR112015025478-0A 2013-04-08 2014-04-04 Métodos e aparelhos de codificação e de decodificação de dados, aparelho de armazenamento e/ou exibição, transmissão, captura de dados de vídeo, e, meio de armazenamento não transitório legível por computador BR112015025478B1 (pt)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
GB1306335.9A GB2513111A (en) 2013-04-08 2013-04-08 Data encoding and decoding
GB1306335.9 2013-04-08
GB1307121.2A GB2513186A (en) 2013-04-08 2013-04-19 Data encoding and decoding
GB1307121.2 2013-04-19
GB1312330.2 2013-07-09
GB1312330.2A GB2512955A (en) 2013-04-08 2013-07-09 Data encoding and decoding
GB1320775.8A GB2512966A (en) 2013-04-08 2013-11-25 Data encoding and decoding
GB1320775.8 2013-11-25
PCT/GB2014/051065 WO2014167298A1 (en) 2013-04-08 2014-04-04 Encoding and decoding of significant coefficients in dependence upon a parameter of the significant coefficients

Publications (2)

Publication Number Publication Date
BR112015025478A2 BR112015025478A2 (pt) 2017-07-18
BR112015025478B1 true BR112015025478B1 (pt) 2022-12-06

Family

ID=48483538

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112015025478-0A BR112015025478B1 (pt) 2013-04-08 2014-04-04 Métodos e aparelhos de codificação e de decodificação de dados, aparelho de armazenamento e/ou exibição, transmissão, captura de dados de vídeo, e, meio de armazenamento não transitório legível por computador

Country Status (12)

Country Link
US (4) US10136136B2 (pt)
EP (2) EP2984828B1 (pt)
JP (3) JP6134055B2 (pt)
CN (3) CN109889835B (pt)
AU (1) AU2014252876B2 (pt)
BR (1) BR112015025478B1 (pt)
CA (2) CA2908301C (pt)
GB (5) GB2513111A (pt)
MX (1) MX352879B (pt)
RU (2) RU2751570C2 (pt)
TW (2) TWI685245B (pt)
WO (2) WO2014167297A1 (pt)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2517416A (en) * 2013-08-15 2015-02-25 Sony Corp Data encoding and decoding
US9521423B2 (en) 2014-06-26 2016-12-13 Sony Corporation Data encoding and decoding apparatus, method and storage medium
CN105592313B (zh) * 2014-10-21 2018-11-13 广东中星电子有限公司 一种分组自适应熵编码压缩方法
FR3029333A1 (fr) * 2014-11-27 2016-06-03 Orange Procede de codage et decodage d'images, dispositif de codage et decodage et programmes d'ordinateur correspondants
TW201711475A (zh) * 2015-09-02 2017-03-16 矽創電子股份有限公司 哥倫布-萊斯編碼電路與解碼電路
US11223852B2 (en) 2016-03-21 2022-01-11 Qualcomm Incorporated Coding video data using a two-level multi-type-tree framework
EP4300968A1 (en) * 2016-05-13 2024-01-03 Sony Group Corporation Image processing device and method
US9705521B1 (en) * 2016-07-27 2017-07-11 Silicon Laboratories Inc. Noise shaping signed digital-to-analog converter
CN107801033B (zh) * 2016-09-06 2021-05-11 联发科技股份有限公司 应用于数字音视频编解码技术标准系统的解码方法及解码装置
US10848788B2 (en) * 2017-01-06 2020-11-24 Qualcomm Incorporated Multi-type-tree framework for video coding
DE102017204946A1 (de) * 2017-03-23 2018-09-27 Volkswagen Aktiengesellschaft Verfahren zur Bestimmung eines Wertes einer Integer-Skalierung in einer Verknüpfung von Eingangsmengen zu Ausgangsmengen und Computerprogrammprodukt
CN107181963B (zh) * 2017-03-31 2019-10-22 武汉斗鱼网络科技有限公司 一种视频压缩方法及装置
CN107094022B (zh) * 2017-04-25 2023-02-10 福州大学 一种用于VLSI设计的Huffman编码系统的实现方法
KR102395669B1 (ko) * 2017-12-05 2022-05-09 한국전자통신연구원 오류 벡터 크기 계산을 기반으로 한 데이터 압축 및 복원 장치와 그 방법
GB2570710B (en) * 2018-02-05 2022-10-12 Sony Corp Data encoding and decoding
GB2570711B (en) * 2018-02-05 2023-04-05 Sony Corp Data encoding and decoding
JP7235030B2 (ja) * 2018-02-14 2023-03-08 ソニーグループ株式会社 画像処理装置および方法
US10812102B2 (en) * 2018-06-29 2020-10-20 Apple Inc. Efficient data encoding
TWI714153B (zh) * 2018-06-29 2020-12-21 大陸商北京字節跳動網絡技術有限公司 零單元的定義
US10922026B2 (en) * 2018-11-01 2021-02-16 Fungible, Inc. Data processing unit having hardware-based range encoding and decoding
US10880354B2 (en) 2018-11-28 2020-12-29 Netflix, Inc. Techniques for encoding a media title while constraining quality variations
US10841356B2 (en) * 2018-11-28 2020-11-17 Netflix, Inc. Techniques for encoding a media title while constraining bitrate variations
US10606775B1 (en) 2018-12-28 2020-03-31 Micron Technology, Inc. Computing tile
US11477486B2 (en) * 2019-01-02 2022-10-18 Qualcomm Incorporated Escape coding for coefficient levels
US11012701B2 (en) * 2019-02-22 2021-05-18 Tencent America LLC Residual coding for transform skip mode and block differential pulse-code modulation
KR20210135502A (ko) 2019-03-08 2021-11-15 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 비디오 처리에서 변형 정보의 시그널링
US10587286B1 (en) * 2019-03-18 2020-03-10 Blackberry Limited Methods and devices for handling equiprobable symbols in entropy coding
CN110109615B (zh) * 2019-03-28 2022-08-30 西南电子技术研究所(中国电子科技集团公司第十研究所) 字节流转义字符硬件处理方法
CN110110535B (zh) * 2019-04-24 2021-01-01 湖北工业大学 一种基于像素矩阵的低失真隐写方法
CN113994697A (zh) 2019-06-22 2022-01-28 北京字节跳动网络技术有限公司 色度残差缩放的语法元素
GB2585044A (en) * 2019-06-25 2020-12-30 Sony Corp Image data encoding and decoding
US11218700B2 (en) * 2019-07-01 2022-01-04 Qualcomm Incorporated Minimum allowed quantization parameter for transform skip mode and palette mode in video coding
JP7460748B2 (ja) 2019-07-07 2024-04-02 北京字節跳動網絡技術有限公司 クロマ残差スケーリングのシグナリング
GB2589066B (en) * 2019-10-24 2023-06-28 Advanced Risc Mach Ltd Encoding data arrays
CN115104305A (zh) * 2020-02-12 2022-09-23 谷歌有限责任公司 用于图压缩的多上下文熵编码
JP2021150788A (ja) * 2020-03-18 2021-09-27 キヤノン株式会社 画像符号化装置、画像符号化方法及びプログラム、画像復号装置、画像復号方法及びプログラム
GB2593778A (en) * 2020-04-03 2021-10-06 Sony Group Corp Video data encoding and decoding
US11523137B2 (en) * 2020-06-09 2022-12-06 FG Innovation Company Limited Device and method for decoding video data using general constraints information
CN111681192B (zh) * 2020-06-09 2022-08-02 天津大学 一种基于残差图像条件生成对抗网络的比特深度增强方法
GB2599447A (en) * 2020-10-05 2022-04-06 Sony Group Corp Data encoding and decoding
US20220086445A1 (en) * 2020-12-03 2022-03-17 Intel Corporation Methods, apparatus, and articles of manufacture for multi-symbol equiprobable mode entropy coding
EP4324201A1 (en) * 2021-04-26 2024-02-21 Innopeak Technology, Inc. Bypass alignment in video coding
US11818353B2 (en) * 2021-05-13 2023-11-14 Qualcomm Incorporated Reduced complexity transforms for high bit-depth video coding
US20230101542A1 (en) * 2021-09-29 2023-03-30 Tencent America LLC Techniques for constraint flag signaling for range extension with coding for last significant coefficient
CN115002461B (zh) * 2022-08-03 2023-08-11 杭州微帧信息科技有限公司 一种视频编码量化方法、装置、电子设备和存储介质
CN117498873B (zh) * 2023-11-07 2024-03-29 东莞市杜氏诚发精密弹簧有限公司 一种血管栓塞弹簧组件智能加工系统

Family Cites Families (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7095783B1 (en) * 1992-06-30 2006-08-22 Discovision Associates Multistandard video decoder and decompression system for processing encoded bit streams including start codes and methods relating thereto
US5842033A (en) * 1992-06-30 1998-11-24 Discovision Associates Padding apparatus for passing an arbitrary number of bits through a buffer in a pipeline system
IL129725A (en) 1999-05-02 2011-06-30 Nds Ltd Watermark system
US6396422B1 (en) * 1999-06-09 2002-05-28 Creoscitex Corporation Ltd. Methods for quantizing and compressing digital image data
JP2001298739A (ja) * 2000-04-14 2001-10-26 Canon Inc 符号化装置及びその方法
JP4086424B2 (ja) * 1999-08-31 2008-05-14 キヤノン株式会社 符号化装置
GB0007781D0 (en) * 2000-03-30 2000-05-17 Sony Uk Ltd Data compression
US7185037B2 (en) * 2001-08-23 2007-02-27 Texas Instruments Incorporated Video block transform
US6744387B2 (en) * 2002-07-10 2004-06-01 Lsi Logic Corporation Method and system for symbol binarization
WO2006004847A2 (en) * 2004-06-30 2006-01-12 Comet Video Technology Method of data compression including compression of video data
US7620103B2 (en) * 2004-12-10 2009-11-17 Lsi Corporation Programmable quantization dead zone and threshold for standard-based H.264 and/or VC1 video encoding
JP2008530835A (ja) 2005-02-08 2008-08-07 テレフオンアクチーボラゲット エル エム エリクソン(パブル) パケット交換ネットワーク上のオンデマンドマルチチャネルストリーミングセッション
JP4468858B2 (ja) * 2005-06-01 2010-05-26 オリンパスイメージング株式会社 データ符号化装置、データ符号化方法、プログラム
GB0524983D0 (en) * 2005-12-07 2006-01-18 Imagination Tech Ltd Recompression and decompression of a data stream for rate smoothing
US7778472B2 (en) * 2006-03-27 2010-08-17 Qualcomm Incorporated Methods and systems for significance coefficient coding in video compression
US7884742B2 (en) * 2006-06-08 2011-02-08 Nvidia Corporation System and method for efficient compression of digital data
KR100831959B1 (ko) 2006-07-31 2008-05-23 티유미디어 주식회사 채널 전환 화면을 제공하는 디지털 방송 시스템 및 그 방법
US7885473B2 (en) * 2007-04-26 2011-02-08 Texas Instruments Incorporated Method of CABAC coefficient magnitude and sign decoding suitable for use on VLIW data processors
CN101127910B (zh) * 2007-10-08 2013-01-02 威盛电子股份有限公司 编码图块标志参数运算方法和装置
TWI388218B (zh) * 2007-10-30 2013-03-01 Nippon Telegraph & Telephone 影像編碼方法與解碼方法、其程式及記錄有程式的記錄媒體
EP2266322A2 (en) * 2008-04-25 2010-12-29 Thomson Licensing Coding of depth signal
JP4918103B2 (ja) * 2009-01-09 2012-04-18 日本電信電話株式会社 符号化方法、復号方法、それらの装置、プログラム及び記録媒体
KR20100136890A (ko) * 2009-06-19 2010-12-29 삼성전자주식회사 컨텍스트 기반의 산술 부호화 장치 및 방법과 산술 복호화 장치 및 방법
US8615043B2 (en) * 2010-03-04 2013-12-24 Texas Instruments Incorporated Fixed length coding based image data compression
JP2011193335A (ja) * 2010-03-16 2011-09-29 Sony Corp 画像符号化装置および方法、画像復号化装置および方法、並びにプログラム
US9100661B2 (en) * 2010-04-05 2015-08-04 Samsung Electronics Co., Ltd. Method and apparatus for encoding video by using dynamic-range transformation, and method and apparatus for decoding video by using dynamic-range transformation
US9049450B2 (en) * 2010-04-05 2015-06-02 Samsung Electronics Co., Ltd. Method and apparatus for encoding video based on internal bit depth increment, and method and apparatus for decoding video based on internal bit depth increment
KR101885258B1 (ko) * 2010-05-14 2018-08-06 삼성전자주식회사 비디오 신호의 부호화 방법과 그 장치, 및 비디오 복호화 방법과 그 장치
EP2445214A1 (en) * 2010-10-19 2012-04-25 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Video coding using temporally coherent dynamic range mapping
JP2012129827A (ja) 2010-12-15 2012-07-05 Sony Corp 送信装置、送信方法、受信装置および受信方法
US8437581B2 (en) * 2011-03-04 2013-05-07 General Instrument Corporation Method and system for interpolating fractional video pixels
CN107517384B (zh) 2011-06-16 2020-06-30 Ge视频压缩有限责任公司 解码器、编码器、解码方法、编码方法以及存储介质
US9491469B2 (en) 2011-06-28 2016-11-08 Qualcomm Incorporated Coding of last significant transform coefficient
PT2728866T (pt) * 2011-06-28 2019-02-21 Samsung Electronics Co Ltd Método e aparelho para codificar vídeo e método e aparelho para descodificar vídeo acompanhado com codificação aritmética
US9055304B2 (en) * 2011-07-01 2015-06-09 Qualcomm Incorporated Reduced resolution pixel interpolation
US20130016789A1 (en) * 2011-07-15 2013-01-17 General Instrument Corporation Context modeling techniques for transform coefficient level coding
AP3992A (en) * 2011-07-15 2017-01-08 Ge Video Compression Llc Sample array coding for low-delay
US9363535B2 (en) * 2011-07-22 2016-06-07 Qualcomm Incorporated Coding motion depth maps with depth range variation
CN103907343B (zh) 2011-10-20 2017-05-03 杜比实验室特许公司 用于视频均衡的方法和系统
EP2779646A4 (en) * 2011-11-07 2015-08-19 Samsung Electronics Co Ltd INVERSE TRANSFORM METHOD FOR REVERSE QUANTIFICATION DATA STRETCHING, REVERSE TRANSFORMATION DURING VIDEO DECODING STEP AND CORRESPONDING DEVICE
GB201119180D0 (en) 2011-11-07 2011-12-21 Sony Corp Data encoding and decoding
GB2496201A (en) 2011-11-07 2013-05-08 Sony Corp Context adaptive data encoding and decoding
CN107197284B (zh) * 2011-11-07 2020-03-27 太阳专利托管公司 图像编码解码装置
US9154792B2 (en) * 2011-11-08 2015-10-06 Qualcomm Incorporated Progressive coding of position of last significant coefficient
US9357185B2 (en) * 2011-11-08 2016-05-31 Qualcomm Incorporated Context optimization for last significant coefficient position coding
CN104185991B (zh) * 2011-11-09 2018-07-06 弗劳恩霍夫应用研究促进协会 不同动态采样值范围的层之间的层间预测
US9749633B2 (en) * 2012-01-19 2017-08-29 Vid Scale, Inc. System and method of video coding quantization and dynamic range control
US9743116B2 (en) * 2012-01-19 2017-08-22 Huawei Technologies Co., Ltd. High throughput coding for CABAC in HEVC
US9036710B2 (en) * 2012-03-08 2015-05-19 Blackberry Limited Unified transform coefficient encoding and decoding
US9584802B2 (en) * 2012-04-13 2017-02-28 Texas Instruments Incorporated Reducing context coded and bypass coded bins to improve context adaptive binary arithmetic coding (CABAC) throughput
GB2501535A (en) 2012-04-26 2013-10-30 Sony Corp Chrominance Processing in High Efficiency Video Codecs
CN102801974B (zh) * 2012-07-19 2014-08-20 西安电子科技大学 基于cabac的图像压缩熵编码器
GB2521828A (en) * 2013-12-23 2015-07-08 Sony Corp Data encoding and decoding
US10241715B2 (en) * 2014-01-31 2019-03-26 Hewlett Packard Enterprise Development Lp Rendering data invalid in a memory array
JP5836424B2 (ja) 2014-04-14 2015-12-24 ソニー株式会社 送信装置、送信方法、受信装置および受信方法
CN106416216B (zh) 2014-05-16 2019-07-12 松下知识产权经营株式会社 变换方法及变换装置
JP2015217628A (ja) * 2014-05-20 2015-12-07 セイコーエプソン株式会社 液体噴射装置
US9942551B2 (en) * 2015-01-30 2018-04-10 Qualcomm Incorporated Palette index grouping for video coding

Also Published As

Publication number Publication date
US11039142B2 (en) 2021-06-15
CA2908301C (en) 2020-10-27
CN109889835B (zh) 2021-10-29
RU2017141156A3 (pt) 2020-10-23
JP2017184239A (ja) 2017-10-05
CA3096273A1 (en) 2014-10-16
GB2513111A (en) 2014-10-22
US10136136B2 (en) 2018-11-20
TW201511480A (zh) 2015-03-16
CN109889835A (zh) 2019-06-14
GB201320767D0 (en) 2014-01-08
US11463698B2 (en) 2022-10-04
US20160050427A1 (en) 2016-02-18
WO2014167298A1 (en) 2014-10-16
TW201505423A (zh) 2015-02-01
CN105103548A (zh) 2015-11-25
BR112015025478A2 (pt) 2017-07-18
EP2984829A1 (en) 2016-02-17
GB2512965A (en) 2014-10-15
EP2984828B1 (en) 2021-06-16
JP2016519514A (ja) 2016-06-30
US20190014322A1 (en) 2019-01-10
CN105103548B (zh) 2019-03-15
JP6636909B2 (ja) 2020-01-29
TWI658702B (zh) 2019-05-01
US20190089959A1 (en) 2019-03-21
AU2014252876B2 (en) 2016-09-22
CN105103549B (zh) 2019-03-12
GB2513186A (en) 2014-10-22
GB201312330D0 (en) 2013-08-21
JP2016519515A (ja) 2016-06-30
RU2637879C2 (ru) 2017-12-07
RU2751570C2 (ru) 2021-07-15
GB2512955A (en) 2014-10-15
US10097834B2 (en) 2018-10-09
RU2015147886A (ru) 2017-05-15
WO2014167297A1 (en) 2014-10-16
GB201320775D0 (en) 2014-01-08
TWI685245B (zh) 2020-02-11
EP2984829B1 (en) 2019-10-30
CN105103549A (zh) 2015-11-25
JP6655579B2 (ja) 2020-02-26
JP6134055B2 (ja) 2017-05-24
GB2512966A (en) 2014-10-15
CA2908301A1 (en) 2014-10-16
MX352879B (es) 2017-12-13
MX2015014134A (es) 2016-04-07
GB201307121D0 (en) 2013-05-29
EP2984828A1 (en) 2016-02-17
US20160353109A1 (en) 2016-12-01
GB201306335D0 (en) 2013-05-22
RU2017141156A (ru) 2019-02-13
AU2014252876A1 (en) 2015-09-10

Similar Documents

Publication Publication Date Title
US11671599B2 (en) Data encoding and decoding
US11039142B2 (en) Encoding and decoding of significant coefficients in dependence upon a parameter of the significant coefficients
BR112015032982B1 (pt) Métodos de decodificação e de codificação de dados, meio de armazenamento legível por máquina não transitório, e, aparelhos de decodificação e de codificação de dados, e de captura, transmissão, exibição e/ou armazenamento de dados de vídeo
US9544599B2 (en) Context adaptive data encoding
WO2013068732A1 (en) Context adaptive data encoding

Legal Events

Date Code Title Description
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B15K Others concerning applications: alteration of classification

Free format text: AS CLASSIFICACOES ANTERIORES ERAM: H04N 19/13 , H04N 19/18 , H04N 19/136

Ipc: H04N 19/13 (2014.01), H04N 19/136 (2014.01), H04N

B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 04/04/2014, OBSERVADAS AS CONDICOES LEGAIS