PT2664070T - Esquema de codificação e descodificação entrópica - Google Patents
Esquema de codificação e descodificação entrópica Download PDFInfo
- Publication number
- PT2664070T PT2664070T PT127003291T PT12700329T PT2664070T PT 2664070 T PT2664070 T PT 2664070T PT 127003291 T PT127003291 T PT 127003291T PT 12700329 T PT12700329 T PT 12700329T PT 2664070 T PT2664070 T PT 2664070T
- Authority
- PT
- Portugal
- Prior art keywords
- bins
- symbols
- buffer
- bin
- sequence
- Prior art date
Links
- 238000005192 partition Methods 0.000 claims description 129
- 238000000034 method Methods 0.000 claims description 80
- 230000001419 dependent effect Effects 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 9
- 239000000203 mixture Substances 0.000 claims description 8
- 239000000872 buffer Substances 0.000 description 569
- 230000009466 transformation Effects 0.000 description 93
- 230000036961 partial effect Effects 0.000 description 86
- 238000013507 mapping Methods 0.000 description 64
- 238000009826 distribution Methods 0.000 description 54
- 230000008569 process Effects 0.000 description 42
- 238000004422 calculation algorithm Methods 0.000 description 39
- 238000010586 diagram Methods 0.000 description 24
- 230000007246 mechanism Effects 0.000 description 22
- 230000002441 reversible effect Effects 0.000 description 16
- 238000000638 solvent extraction Methods 0.000 description 16
- 230000006978 adaptation Effects 0.000 description 13
- 238000000354 decomposition reaction Methods 0.000 description 12
- 238000013461 design Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 12
- 230000033001 locomotion Effects 0.000 description 12
- 238000013459 approach Methods 0.000 description 11
- 230000004044 response Effects 0.000 description 11
- 230000008901 benefit Effects 0.000 description 10
- 238000007906 compression Methods 0.000 description 10
- 230000006835 compression Effects 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 230000003044 adaptive effect Effects 0.000 description 8
- 238000011002 quantification Methods 0.000 description 8
- 238000013139 quantization Methods 0.000 description 8
- 230000001960 triggered effect Effects 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 230000002123 temporal effect Effects 0.000 description 7
- 239000013598 vector Substances 0.000 description 7
- 230000002829 reductive effect Effects 0.000 description 6
- 238000003860 storage Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000006872 improvement Effects 0.000 description 5
- 238000005259 measurement Methods 0.000 description 5
- 230000003247 decreasing effect Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 238000011156 evaluation Methods 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 108091026890 Coding region Proteins 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000009795 derivation Methods 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 239000011230 binding agent Substances 0.000 description 2
- 230000000052 comparative effect Effects 0.000 description 2
- 239000012141 concentrate Substances 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013144 data compression Methods 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000002349 favourable effect Effects 0.000 description 2
- 239000000543 intermediate Substances 0.000 description 2
- 230000010363 phase shift Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000009897 systematic effect Effects 0.000 description 2
- 101100518501 Mus musculus Spp1 gene Proteins 0.000 description 1
- 108010076504 Protein Sorting Signals Proteins 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001364 causal effect Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000005304 joining Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000003595 spectral effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/13—Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/46—Conversion 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
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/55—Compression Theory, e.g. compression of random number, repeated compression
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/119—Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/129—Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/18—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods 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/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Description
DESCRIÇÃO
Esquema de codificação e descodificação entrópica A presente invenção relaciona-se com esquemas de codificação e descodificação entrópica e pode ser usada em aplicações, como por exemplo na compressão de video e áudio.
De uma forma geral, a codificação entrópica, pode ser considerada como a forma mais genérica de compressão de dados sem perdas. A compressão sem perdas tem como objetivo representar dados discretos com menos bits do que o necessário para a representação de dados originais mas com menos perda de informação. Os dados discretos podem ser fornecidos em forma de texto, gráficos, imagens, video, áudio, fala, fax, dados médicos, dados meteorológicos, dados financeiros ou qualquer outro tipo de dados em formato digital.
Na codificação de entropia, as caracteristicas especificas de alto nivel da fonte de dados discreta subjacente são frequentemente negligenciadas. Consequentemente, qualquer fonte de dados é considerada como sendo dada como uma sequência de símbolos de origem que leva valores num dado alfabeto m-ario e que é caraterizado pela correspondente distribuição (discreta) de probabilidades {pl, pm}. Nestas configurações abstratas, o limite inferior de qualquer método de codificação de entropia, em termos de comprimento de palavra de código esperado em bits por símbolo, é dado pela entropia
Os códigos de Huffman e os códigos aritméticos são exemplos bem conhecidos de códigos práticos capazes de aproximar o limite de entropia (num certo sentido). Para uma distribuição de probabilidade fixa, os códigos de Huffman são relativamente fáceis de construir. A propriedade mais atraente dos códigos Huffman é que sua implementação pode ser eficientemente realizada pelo uso de tabelas de código de comprimento variável (VLC) . No entanto, quando se lida com estatísticas de fonte variáveis no tempo, isto é, a alteração das probabilidades de símbolos, a adaptação do código de Huffman e das suas tabelas VLC correspondentes é bastante exigente, tanto em termos de complexidade algorítmica como em termos de custos de implementação. Além disso, no caso de ter um valor de alfabeto dominante com pk> 0,5, a redundância do código Huffman correspondente (sem utilizar qualquer extensão de alfabeto tal como a codificação de comprimento de execução) pode ser bastante substancial. Outra deficiência dos códigos de Huffman é dada pelo fato de que, no caso de lidar com modelagem de probabilidade de ordem superior, podem ser necessários vários conjuntos de tabelas VLC. A codificação aritmética, por outro lado, embora substancialmente mais complexa do que a VLC, oferece a vantagem de uma manipulação mais consistente e adequada ao lidar com a modelagem de probabilidade adaptativa e de ordem mais alta, bem como com o caso de distribuições de probabilidade altamente distorcidas. Na verdade, esta característica resulta basicamente do fato de que a codificação aritmética fornece um mecanismo, pelo menos conceitualmente, para mapear qualquer valor dado da estimativa de probabilidade de uma maneira mais ou menos direta para uma porção da palavra de código resultante. Sendo fornecida com tal interface, a codificação aritmética permite uma separação limpa entre as tarefas de modelagem de probabilidade e estimativa de probabilidade, por um lado, e a codificação de entropia real, isto é, mapeamento de símbolos para palavras de código, por outro lado. A codificação PIPE é uma alternativa à codificação aritmética e à codificação VLC. Para ser mais preciso, na codificação PIPE, o intervalo unitário é dividido num pequeno conjunto de intervalos de probabilidade disjuntos para efetuar o pipeline do processamento de codificação ao longo das estimativas de probabilidade de variáveis de símbolos aleatórios. De acordo com esta partição, pode ser mapeada uma sequência de entrada de símbolos de fonte discreta com tamanhos de alfabeto arbitrários para uma sequência de símbolos de alfabeto e cada um dos símbolos de alfabeto é atribuído a um intervalo de probabilidade particular que é, por sua vez, codificado por um processo de codificação de entropia especialmente dedicado para o efeito. Com cada um dos intervalos sendo representados por uma probabilidade fixa, o processo de codificação de entropia de partição de intervalo de probabilidade (PIPE) pode basear-se na conceção e aplicação de códigos de comprimento simples de variável a variável. A modelagem de probabilidade pode ser fixa ou adaptativa. No entanto, embora a codificação PIPE seja significativamente menos complexa do que a codificação aritmética, ela ainda tem uma complexidade maior do que a codificação VLC.
Por conseguinte, seria desejável ter um sistema de codificação de entropia que permita alcançar um melhor equilíbrio entre a complexidade de codificação por um lado, e a eficiência de compressão por outro lado, mesmo quando comparado com a codificação PIPE, a qual já combina as vantagens tanto da codificação aritmética e codificação VLC. A WO 2008/129021 A2 refere-se à compressão em escala de sequências de rede 3D consistentes no tempo. Em relação à codificação de quantificação e entropia, o documento descreve que os erros de previsão dos vetores de rede são comprimidos componente por componente. Em particular, os componentes são mapeados para a quantidade de números inteiros, i.e. com sinal, e um máximo para a quantidade, i.e. imax, é usado para definir um intervalo dentro da quantidade de números inteiros para os quais componentes que caem dentro deste intervalo são codificados entropicamente. A quantidade residual, isto é, a distância à extremidade mais próxima do intervalo, é codificada utilizando códigos de Golomb.
Além disso, em geral, seria desejável ter um sistema de codificação de entropia que permita alcançar uma melhor eficiência de compressão per se, a uma complexidade de codificação moderada. É um objetivo da presente invenção proporcionar um conceito de codificação de entropia que satisfaça a procura acima identificada, isto é, que permita obter uma melhor compensação entre a complexidade de codificação por um lado, e a eficiência de compressão por outro lado.
Este objetivo é alcançado pela matéria das reivindicações independentes. A presente invenção baseia-se na ideia de que a decomposição de um intervalo de valores dos respetivos elementos de sintaxe numa sequência de n partições com codificação das componentes dos valores de elementos de sintaxe z colocados separadamente nas respetivas partições com pelo menos uma por codificação VLC e com Pelo menos uma por codificação aritmética. Assim, e de acordo com formas de realização da presente invenção, os elementos de sintaxe são decompostos num número respetivo n de símbolos de fonte Si com i = l...n, sendo o respetivo número n de símbolos de fonte dependendo de como uma sequência de n partições (140i-3) , na qual uma gama de valores dos respetivos elementos de sintaxe está subdividida, um valor z dos respetivos elementos de sintaxe cai se enquadra, de modo que uma soma de valores do número respetivo de símbolos de fonte si produz z e, quando n>l para todos os i = l...n-l, o valor de si corresponde a um intervalo de partição de iesimo.
Aspetos preferidos da presente invenção são o objeto das reivindicações dependentes aqui incluídas.
As formas de realização preferenciais da presente invenção são descritas a seguir com referência às figuras. Estas formas de realização representam exemplos, na medida em que não utilizam codificação aritmética próxima dos de codificação VLC. Entre as figuras,
Fig. apresenta um diagrama de blocos de um aparelho de la codificação entrópica;
Fig. apresenta um diagrama esquemático ilustrando uma lb possível decomposição de elementos de sintaxe em símbolos fonte;
Fig. apresenta um diagrama de fluxo ilustrando um modo de lc funcionamento possível de decompositor da Fig. la na decomposição de elementos de sintaxe em símbolos fonte;
Fig. apresenta um diagrama de blocos de um aparelho de 2a descodificação entrópica;
Fig. apresenta um diagrama de fluxo ilustrando um modo de 2b funcionamento possível do compositor da Fig. 2a na composição de elementos de sintaxe em símbolos fonte;
Fig. apresenta um diagrama de blocos de um codificador PIPE 3 de acordo com uma forma de realização comparativa, o qual pode ser usado na Fig.l;
Fig. apresenta um diagrama de blocos de um descodificador 4 PIPE adequado para a descodificação de um fluxo de bits gerado pelo codificador PIPE da Fig. 3, de acordo com uma forma de realização comparativa, o qual pode ser usado na Fig.2;
Fig. apresenta um diagrama esquemático ilustrativo de um 5 pacote de dados com multiplex de fluxo de bits parcial;
Fig. apresenta um diagrama esquemático ilustrativo da um 6 pacote de dados com uma segmentação alternativa usando segmentos de dimensão fixada;
Fig. apresenta um diagrama de blocos de um codificador PIPE 7 utilizando intercalação parcial de fluxo de bits;
Fig. apresenta esquemas de exemplos ilustrativos para o 8 estado de um buffer de palavras de código, no lado do codificador da Fig. 7;
Fig. apresenta um diagrama de blocos de um descodificador 9 PIPE utilizando intercalação parcial de fluxo de bits;
Fig. apresenta um diagrama de blocos de um descodificador 10 PIPE utilizando intercalação de palavras de código de grupo único de palavras de código;
Fig. apresenta um diagrama de blocos de um codificador PIPE 11 utilizando intercalação de comprimento fixado de sequências de bits;
Fig. Apresenta esquemas de exemplos ilustrativos do estado 12 de um buffer de bits global no lado do codificador da Fig. 11;
Fig. apresenta um diagrama de blocos de um descodificador 13 PIPE utilizando intercalação de comprimento fixado de sequências de bits;
Fig. apresenta um gráfico para ilustrar uma discretização 14 de intervalo de probabilidade ótimo em K = 4 intervalos, assumindo uma distribuição de probabilidade uniforme em [0, 0,5];
Fig. apresenta um diagrama esquemático ilustrando uma
15 árvore de eventos binários para uma probabilidade LPB de P = 0,38 e um código de comprimento variável associado obtido pelo algoritmo de Huffman;
Fig. apresenta um gráfico a partir do qual a taxa de bits 16 relativa aumenta p(p,C) para códigos ótimos de C dado um número máximo das entradas da tabela Lm que podem ser reunidas;
Fig. apresenta um gráfico que ilustra o aumento da taxa 17 para o intervalo de probabilidade teoricamente ótimo particionando em intervalos de K = 12 e um desenho real com códigos V2V com um número máximo de Lm = 65 entradas de tabela;
Fig. apresenta um diagrama esquemático ilustrando um 18 exemplo para a conversão de uma árvore de escolha ternária em árvore de escolha de binário completo;
Fig. apresenta um diagrama de blocos de um sistema que 19 compreende um codificador (parte esquerda) e um descodificador (parte direita);
Fig. apresenta um diagrama de blocos de um aparelho de 20 codificação entrópica;
Fig. apresenta um diagrama de blocos de um aparelho de 21 descodificação entrópica;
Fig. apresenta um diagrama de blocos de um aparelho de 22 codificação entrópica;
Fig. apresenta um diagrama esquemático ilustrando exemplos 23 de estado de um buffer de bits global no lado do codificador da Fig. 22;
Fig. apresenta um diagrama de blocos de um aparelho de 24 descodificação entrópica;
Antes de serem descritas a seguir várias formas de realização da presente invenção, com respeito às figuras, faz-se notar que são utilizados sinais iguais de referência ao longo das figuras para indicar elementos iguais ou equivalentes nestas figuras, sendo a descrição desses elementos, apresentada com qualquer um dos números anteriores, também se aplica a qualquer uma das seguintes figuras, desde que a descrição anterior não entre em conflito com a descrição das figuras atuais. A Fig. la mostra um aparelho de codificação de entropia. 0 aparelho compreende um subdivisor 100, um codificador VLC 102 e um codificador PIPE 104. O subdivisor 100 é configurado para subdividir uma sequência de símbolos de fonte 106 numa primeira subsequência 108 de símbolos de fonte e uma segunda subsequência 110 de símbolos de fonte. O codificador VLC 102 tem a respetiva entrada ligada a uma primeira saída do subdivisor 100 e está configurado para converter, em função da palavra de código, os símbolos de fonte da primeira subsequência 108 em palavras de código formando um primeiro fluxo de bits 112. O codificador VLC 102 pode
compreender uma tabela de consulta e usar, individualmente, os símbolos de fonte como um índice para procurar, por símbolo de fonte, uma respetiva palavra de código na tabela de consulta. O codificador VLC emite a última palavra de código e prossegue com o seguinte símbolo de fonte em subsequência 110 para produzir uma sequência de palavras de código em que cada palavra de código está associada com, exatamente, um dos símbolos de origem na subsequência 110. As palavras de código podem ter comprimentos diferentes e podem ser definidas de forma que nenhuma palavra de código forme um prefixo com qualquer uma das outras palavras de código. Além disso, a tabela de consulta pode ser estática. O codificador PIPE 104 tem a respetiva entrada ligada a uma segunda saída do subdivisor 100 e está configurado para codificar a segunda subsequência 110 de símbolos de fonte, representada na forma de uma sequência de símbolos alfabéticos. O codificador compreende ainda um atribuidor 114, configurado para atribuir uma medida para uma estimativa de uma distribuição de probabilidade, entre os valores possíveis que os respetivos símbolos do alfabeto podem assumir, para cada símbolo de alfabeto da sequência de símbolos do alfabeto, baseados em informação contida nos símbolos do alfabeto anteriores da sequência de símbolos do alfabeto, uma pluralidade de codificadores de entropia 116, estando cada um dos quais configurado para converter os símbolos de alfabeto enviados para o respetivo codificador entrópico, num segundo fluxo de bits 118, e um seletor 120 configurado para encaminhar cada símbolo de alfabeto, da segunda subsequência 110, para um codificador selecionado da pluralidade de codificadores de entropia 116. Esta seleção depende da medida acima mencionada para a estimativa da distribuição de probabilidade atribuída ao respetivo símbolo do alfabeto. A associação entre símbolos de fonte e símbolos de alfabeto pode ser tal que cada símbolo de alfabeto é associado de forma única com exatamente um símbolo de fonte de subsequência 110, de forma a representar este símbolo fonte, juntamente com outros possíveis símbolos de alfabeto da sequência de símbolos de alfabeto, os quais podem seguir, de imediato, uns aos outros.
Tal como se descreve adiante com mais detalhe, a sequência 106 de símbolos de fonte pode ser uma sequência de elementos de sintaxe de um fluxo de bits parsivo. O fluxo de bits parsivo pode, por exemplo, representar conteúdo de vídeo e / ou áudio, de uma forma escalável ou não escalável, com os elementos de sintaxe representando, por exemplo, níveis de coeficientes de transformação, vetores de movimento, índices de referência de imagens de movimento, fatores de escala, valores de energia de envelope áudio ou similares. Os elementos de sintaxe podem, em particular, ser de tipo ou de categoria diferente com elementos de sintaxe do mesmo tipo, por exemplo, ter o mesmo significado no fluxo de bits parsivo, mas, em relação a diferentes porções do mesmo, tais como imagens diferentes, macroblocos diferentes, componentes espectrais diferentes ou similares, enquanto elementos de sintaxe de diferentes tipos podem ter um significado diferente, no fluxo de bits, tal como um vetor de movimento tem um significado diferente do de um elemento de sintaxe, que representa um nível de coeficiente de transformação, representando o residual de previsão de movimento. O subdivisor 100 pode ser configurado para executar a subdivisão dependendo do tipo dos elementos de sintaxe. Ou seja, o subdivisor 100 pode encaminhar elementos de sintaxe, de um primeiro grupo de tipos, para a primeira subsequência 108 e encaminhar elementos de sintaxe, de um segundo grupo de tipos distintos do primeiro grupo, para a segunda subsequência 110. A subdivisão realizada pelo subdivisor 110 pode ser concebida de modo que os símbolos estatísticos dos elementos de sintaxe, na subsequência 108, são adequados a ser codificados por VLC pelo codificador VLC 102, i.e. resulta num mínimo de entropia possível, apesar do uso da codificação VLC e respetiva restrição, no que respeita à sua aptidão para certos símbolos estatísticos, como já foi referido anteriormente, na parte introdutória do presente pedido. Por outro lado, o subdivisor 100 pode encaminhar todos os outros elementos de sintaxe para a segunda subsequência 110, de modo que estes elementos de sintaxe, símbolos estatísticos, não sendo adequados para codificação de VLC, sejam codificados pelo mais complexo, mas mais eficiente - em termos de taxa de compressão - Codificador PIPE 104.
Como também é o caso, em relação às figuras seguintes com mais detalhe, o codificador PIPE 104 pode compreender um simbolizador 122, configurado para mapear individualmente cada elemento de sintaxe da segunda subsequência 110 na respetiva sequência parcial de símbolos de alfabeto, formando em conjunto a sequência acima mencionada 124 de símbolos de alfabeto. Por outras palavras, o simbolizador 122 pode não estar presente se, por exemplo, o símbolo de fonte da subsequência 110 já estiver representado como nas respetivas sequências parciais de símbolos de alfabeto. O simbolizador 122 é vantajoso, por exemplo, no caso dos símbolos de fonte, dentro da subsequência 110, serem de alfabetos diferentes, e especialmente, de alfabetos que utilizam números diferentes de símbolos de alfabeto possíveis. Nomeadamente, neste caso, o simbolizador 122 é capaz de harmonizar os alfabetos dos símbolos que chegam dentro do sub-fluxo 110. 0 simbolizador 122 pode, por exemplo, ser incorporado como um binarizador configurado para binarizar os símbolos que chegam com a subsequência 110.
Como mencionado anteriormente, os elementos de sintaxe podem ser de tipo diferente. Isso também pode ser verdade para os elementos de sintaxe dentro do sub-fluxo 110. O simbolizador 122 pode então ser configurado para executar o mapeamento individual dos elementos de sintaxe da subsequência 110 utilizando um esquema de mapeamento de simbolização, tal como um esquema de binarização, diferente para elementos de sintaxe de tipo diferente. Exemplos de esquemas de binarização específicos são apresentados na descrição que se segue, tal como um esquema de binarização unário, um esquema de binarização de exp-Golomb de ordem 0 ou ordem 1, por exemplo, ou um esquema de binarização unário truncado, um esquema de binarização de exp-Golomb de ordem 0 truncado e reordenado, ou ainda um esquema de binarização não-sistemático.
Consequentemente, os codificadores de entropia 116 podem ser configurados para operarem num alfabeto binário. Finalmente, deve notar-se que o simbolizador 122 pode ser considerado como sendo parte do codificador PIPE 104, propriamente dito, como mostrado na Fig. la. Alternativamente, no entanto, o binarizador pode ser considerado como sendo externo ao codificador PIPE.
Semelhante a este último, deve notar-se que o atribuidor 114, embora mostrado para ser ligado em série entre o simbolizador 122 e o seletor 120, pode alternativamente ser considerado como estando ligado entre uma saída do simbolizador 124 e uma primeira entrada do seletor 120, com uma saída do atribuidor 114 estando conectada a outra entrada do seletor 120, como descrito mais adiante em relação à Fig. 3. Com efeito, o atribuidor 114 acompanha cada símbolo do alfabeto com a medida acima mencionada para uma estimativa da distribuição de probabilidade.
No que diz respeito à saída do aparelho de codificação de entropia da Fig. la, esta é composta pela primeira saída de fluxo de bits 112 pelo codificador VLC 102 e pela pluralidade de segundas correntes de bits 118 produzidas pela pluralidade de codificadores de entropia 116. Conforme descrito adiante, todos estes fluxos de bits podem ser transmitidos em paralelo. Alternativamente, podem ser intercalados num fluxo de bits comum 126, através da utilização de um intercalador 128. As Figs. 22 a 24 mostram exemplos com essa intercalação de fluxo de bits.
Conforme ilustrado adicionalmente na Fig. 1, o próprio codificador PIPE 104 pode compreender o seu próprio intercalador 130 para intercalar a pluralidade de segundos fluxos de bits 118 num fluxo de bits comum codificado por PIPE 132. As possibilidades para esse intercalador 130 são derivadas da descrição das Figs. 5 a 13. O fluxo de bits 132 e o fluxo de bits 112 podem, numa configuração paralela, representar a saída do aparelho de codificação de entropia da Fig. la. Alternativamente, outro intercalador 134 pode intercalar ambos os fluxos de bits, em que, neste caso, o intercalador 130 e 134 formarão duas etapas de um intercalador de duas fases 128.
Como foi descrito acima, o subdivisor 100 pode realizar a subdivisão lógica de sintaxe-elemento, isto é, os símbolos de fonte em que o subdivisor 100 opera podem ser elementos de sintaxe inteiros, ou alternativamente falando, o subdivisor 100 pode operar em unidades de elementos de sintaxe.
No entanto, o aparelho de codificação de entropia da Fig. la pode compreender o decompositor 136 a fim de decompor elementos de sintaxe dentro de um fluxo de bits parsivo 138 individualmente em um ou mais dos símbolos de origem da sequência de símbolos de fonte 106 que entram no subdivisor 100. Em particular, o decompositor 136 pode ser configurado para converter a sequência 138 de elementos de sintaxe na sequência 106 de símbolos de fonte, por decomposição individual de cada elemento de sintaxe num respetivo número inteiro de símbolos de fonte. O número inteiro pode variar entre os elementos de sintaxe.
Em particular, alguns dos elementos de sintaxe podem mesmo ser deixados inalterados pelo decompositor 136, enquanto outros elementos de sintaxe são decompostos em exatamente dois, ou pelo menos dois, símbolos de fonte. O subdivisor 100 pode ser configurado para encaminhar um dos símbolos de fonte, de tais elementos de sintaxe decompostos, para a primeira subsequência 108 de símbolos de fonte, e outro dos símbolos de origem, do mesmo elemento de sintaxe decomposto, para a segunda subsequência 110 de símbolos de fonte. Como mencionado acima, os elementos de sintaxe, dentro do fluxo de bits 138, podem ser de tipo diferente, podendo o decompositor 136 ser configurado para executar a decomposição individual dependendo do tipo do elemento de sintaxe. O decompositor 136 executa preferencialmente a decomposição individual dos elementos de sintaxe de modo que, um mapeamento reverso exclusivo predeterminado, mais tarde usado na decodificação, a partir do número inteiro de símbolos de origem, para o respetivo elemento de sintaxe, comum para todos os elementos de sintaxe existentes.
Por exemplo, o decompositor 136 pode ser configurado para decompor os elementos de sintaxe z no fluxo de bits parsivo 138, em dois símbolos de origem x e y de modo que z = x + y, z = x -y, z = x . y ou z = x : y. Através desta medida, o subdivisor 100 pode decompor os elementos de sintaxe em dois componentes, nomeadamente símbolos de fonte do fluxo de símbolos de fonte 106, um dos quais é adequado para ser codificado por VLC, em termos de eficiência de compressão, tal como x, e o outro é não é adequado para a codificação de VLC e é, portanto, transmitido ao segundo sub-fluxo 110, em vez do primeiro sub-fluxo 108, tal como y. Não é preciso que a decomposição utilizada pelo decompositor 136 seja bijetiva. Contudo, tal como mencionado anteriormente, deve existir um mapeamento inverso que permita uma recuperação única dos elementos de sintaxe das possíveis decomposições entre as quais o decompositor 136 pode escolher se a decomposição não é bijetiva.
Até agora, foram descritas diferentes possibilidades para o tratamento de diferentes elementos de sintaxe. Quanto a se tais elementos de sintaxe ou casos existem, é opcional. A descrição adiante, no entanto, concentra-se em elementos de sintaxe que são decompostos pelo decompositor 136 de acordo com o seguinte princípio.
Conforme mostrado na Fig. lb, o decompositor 136 é configurado para decompor em etapas certos elementos de sintaxe z no fluxo de bits parsivo 138. Podem existir duas ou mais etapas. As etapas servem para dividir a gama de valores do elemento de sintaxe z em dois ou mais sub-intervalos adjacentes ou sub- intervalos, tal como mostrado na Fig. lc. 0 intervalo de valores do elemento de sintaxe pode ter dois pontos de extremidade infinitos, apenas um ou pode ter pontos de extremidade definidos. Na Fig. lc, o intervalo de valores do elemento de sintaxe, como é exemplificado, foi subdividido em três partições 140i_3. Conforme ilustrado na Fig. lb, se o elemento de sintaxe for maior ou igual que o limite 142 da primeira partição 140i, ou seja, o limite superior que separa as divisórias 140i e 1402, então o elemento de sintaxe é subtraído pelo limitei ligado da primeira partição 140i e z é novamente verificado se é mesmo maior ou igual que o limite Ligado 144 da segunda partição 1402, i.e. o limite superior que separa as divisórias 1402 e 1403. Se z' for maior ou igual ao limite 144, então z' é subtraído pelo limite2 ligado da segunda partição 1402 resultando em z''. No primeiro caso em que z é menor do que o limitei, o elemento de sintaxe z é enviado para o subdivisor 100 como tal. No caso de z estar entre o limitei e o limite2, o elemento de sintaxe z é enviado para o subdivisor 100 como uma tupla (limitl, z') com z = limitei + z' e, no caso de z estar acima do limite2, o elemento de sintaxe z é enviada ao subdivisor 100 como um tripleto (limitei, limite2-limitel, z ') com z = limitei + Limite2 + z' . 0 primeiro (ou único) componente, isto é, z ou limite 1, forma um primeiro símbolo de fonte a ser codificado pelo subdivisor 100, se presente, o segundo componente, isto é, z' ou limite2-limitel, forma um segundo símbolo de fonte a ser codificado pelo subdivisor 100, se presente, e o terceiro componente, isto é, z'' forma um terceiro símbolo de fonte a ser codificado pelo subdivisor 100, se presente. Assim, de acordo com a Fig. lb e lc, o elemento de sintaxe é mapeado para qualquer um de 1 a 3 símbolos de fonte, mas generalizações sobre um número menor ou maior e máximo de símbolos de fonte é prontamente derivável a partir da descrição acima, e tais alternativas serão também descritas no seguinte.
Em qualquer dos casos, todos estes diferentes componentes ou símbolos de fonte resultantes encontram-se de acordo com as formas de realização abaixo indicadas, codificados com as diferentes alternativas de codificação. Pelo menos um deles é encaminhado por subdivisor para o codificador PIPE 104 e, por fim, outro correspondente é enviado para o codificador 102 de VLC.
Formas de realização particularmente vantajosas são apresentadas abaixo com maior detalhe.
Depois de ter sido acima descrito um aparelho de codificação de entropia, é descrito agora, com respeito à Fig. 2a, um aparelho de descodificação de entropia. O aparelho de descodificação de entropia da Fig. 2a compreende um descodificador VLC 200 e um descodificador PIPE 202. O descodificador VLC 200 é configurado para reconstruir, em função da palavra de código, os símbolos de origem de uma primeira subsequência 204 a partir de palavras de código de um primeiro fluxo de bits 206. O primeiro fluxo de bits 206 é igual ao fluxo de bits 112 da Fig. 1, e o mesmo se aplica à subsequência 204 até à subsequência 108 da fig. la. O descodificador de PIPE 202 é configurado para reconstruir uma segunda subsequência 208 de símbolos de fonte, representada na forma de uma sequência de símbolos de alfabeto, e compreende uma pluralidade de descodificadores de entropia 210, um atribuidor 212 e um seletor 214. A pluralidade de descodif icadores de entropia 210 são configurados para converter uma respetiva ou segunda dos fluxos de bits 216 em símbolos de alfabeto da sequência de símbolos do alfabeto. O atribuidor 212 é configurado para atribuir uma medida de uma estimativa de uma distribuição de probabilidade entre os valores possíveis que os respetivos símbolos de alfabeto podem assumir, a cada símbolo de alfabeto da sequência de símbolos de alfabeto que representa a segunda subsequência 208 de símbolos de fonte a reconstruir, com base em informação contida dentro de símbolos de alfabeto previamente reconstruídos da sequência de símbolos de alfabeto. Para este fim, o atribuidor 212 pode ser ligado em série entre uma saída do seletor 214 e uma entrada correspondente, enquanto outras entradas do seletor 214 têm saídas dos descodificadores de entropia 210 respetivamente ligados a ele. O seletor 214 está configurado para recuperar cada símbolo de alfabeto da sequência de símbolos de alfabeto a partir de um descodificador de entropia selecionado da pluralidade de descodificadores 210, dependendo a seleção da medida atribuída ao respetivo símbolo de alfabeto. Por outras palavras, o seletor 214 juntamente com o atribuidor 212 é operativo para recuperar os símbolos de alfabeto obtidos pelos descodificadores de entropia 210, numa ordem de entre os descodificadores de entropia 210 obtidos através da pesquisa de informação contida nos símbolos de alfabeto anteriores da sequência de símbolos de alfabeto. Noutras palavras, o atribuidor 212 e o seletor 214 são capazes de reconstruir a ordem original dos símbolos de alfabeto, a partir do símbolo de alfabeto para o símbolo de alfabeto. Em conjunto com a previsão do símbolo de alfabeto seguinte, o atribuidor 212 é capaz de determinar a medida acima mencionada da estimativa da distribuição de probabilidade para o respetivo símbolo de alfabeto e, através da utilização deste, o seletor 214 seleciona entre os descodificadores de entropia 210 para recuperar o valor real deste símbolo de alfabeto. Para ser ainda mais preciso, como será descrito em mais pormenor abaixo, o descodificador PIPE 202 pode ser configurado para reconstruir a subsequência 208 de símbolos de fonte, representada na forma da sequência de símbolos de alfabeto, que responde a pedidos de símbolo de alfabeto solicitando sequencialmente os símbolos do alfabeto, e o atribuidor 212 podem ser configurados para atribuir a cada pedido um simbolo do alfabeto da sequência de símbolos do alfabeto, representando a segunda subsequência (208) de símbolos de fonte a ser reconstruída, a medida acima mencionada de uma estimativa de uma distribuição de probabilidade de entre os possíveis valores que o respetivo símbolo alfabético pode assumir. Em conformidade, o seletor 214 pode ser configurado para recuperar, para cada pedido de um símbolo de alfabeto da sequência de símbolos do alfabeto, que representa a segunda subsequência (208) de símbolos de fonte a serem reconstruídos, o respetivo símbolo de alfabeto da sequência de símbolos de alfabeto de um descodificador de entropia selecionado da pluralidade de descodificadores 210, dependendo essa seleção da medida atribuída à respetiva solicitação para o respetivo símbolo do alfabeto. A concordância entre pedidos no lado de descodificação, por um lado, e o fluxo de dados ou codificação, no lado de codificação, por outro lado, será explicada com mais pormenor em relação à Fig. 4.
Como a primeira subsequência 214 de símbolos de fonte e a segunda subsequência 208 de símbolos de fonte formam usualmente uma sequência comum 210 de símbolos de fonte, o aparelho de descodificação de entropia da Fig. 2a pode, opcionalmente, compreender um recombinador 220 configurado para recombinar a primeira subsequência 204 e a segunda subsequência 208 para obter a sequência comum 218 de símbolos de fonte. Esta sequência comum 208 de símbolos de origem produz uma reconstrução da sequência 106 da Fig. la.
De acordo com a descrição acima apresentada em relação à Fig. 1, os símbolos de origem da primeira subsequência e da segunda subsequência 204 e 208 podem ser elementos de sintaxe de um fluxo de bits parsivo. Neste caso, o recombinador 220 pode ser configurado para reconstruir este fluxo de bits parsivo, da sequência 218 de elementos de sintaxe, intercalando os símbolos de origem que chegam através de primeira e segunda subsequências 204 e 208 numa ordem prescrita por alguma regra parsiva gue define uma ordem entre os elementos de sintaxe. Em particular, os elementos de sintaxe podem ser, como descrito acima, de tipo diferente, e o recombinador 220 pode ser configurado para recuperar ou solicitar elementos de sintaxe de um primeiro grupo, de tipos a partir do descodificador VLC 200 via sub-fluxo 204, e elementos de sintaxe de um segundo a partir do descodificador PIPE 202 via sub-fluxo 208. Por conseguinte, sempre que a regra de análise anteriormente mencionada indica que um elemento de sintaxe, de um tipo dentro do primeiro grupo, é o seguinte na linha, o recombinador 202 insere um simbolo de fonte real da subsequência 204 na sequência comum 218, e da subsequência 208 de outra forma.
Do mesmo modo, o descodificador PIPE 202 pode compreender um dessimbolizador 222 ligado entre a saida do seletor 214 e uma entrada do recombinador 220. De forma semelhante à descrição acima, em relação à Fig. 1, o dessimbolizador 222 pode ser considerado como sendo externo ao descodificador PIPE 202 e pode ser colocado mesmo atrás do recombinador 202, i.e. em alternativa no lado de saida do recombinador 220. O dessimbolizador 222 pode ser configurado para remapear, em unidades de sequências parciais de símbolos de alfabeto, a sequência de símbolos de alfabeto 224, extraídos pelo seletor 214, para os símbolos de fonte, isto é, elementos de sintaxe da subsequência 208. Semelhante ao recombinador 220, o dessimbolizador 222 conhece a construção de possíveis sequências parciais de símbolos do alfabeto. Em particular, o dessimbolizador 222 pode analisar símbolos de alfabeto recentemente recebidos do seletor 214, a fim de verificar se estes símbolos de alfabeto recentemente recebidos produzem uma de uma sequência parcial válida de símbolos de alfabeto associados a um respetivo valor do respetivo elemento de sintaxe, ou, se este não é o caso, qual é símbolo de alfabeto a seguir e em falta. Noutras palavras, o simbolizador 222 sabe, a qualquer momento, se outros símbolos de alfabeto têm de ser recebidos, a partir do seletor 214, para terminar a receção de um elemento de sintaxe respetivo ou não e, consequentemente, para qual elemento de sintaxe um respetivo elemento de sintaxe pertence um dos símbolos de alfabeto emitidos pelo seletor 214. Para este fim, o dessimbolizador 222 pode utilizar um esquema de mapeamento (de) de simbolização diferente para elementos de sintaxe de tipo diferente. De modo semelhante, o atribuidor 212 conhece a associação de um símbolo de alfabeto atual a ser recuperado, a partir de qualquer dos descodificadores de entropia 210 pelo seletor 214, para um respetivo dos elementos de sintaxe e pode definir a medida de estimativa acima mencionada de uma distribuição de probabilidade deste símbolo de alfabeto em conformidade, isto é, dependendo do tipo de elemento de sintaxe associado. Adicionalmente, o atribuidor 212 pode diferenciar entre símbolos de alfabeto diferentes, pertencentes à mesma sequência parcial de um símbolo de alfabeto atual, e pode definir a medida de estimativa de distribuição de probabilidade de forma diferente para estes símbolos de alfabeto. Detalhes a este respeito são descritos em mais abaixo. Conforme descrito neste documento, o atribuidor 212 pode ser configurado para atribuir contextos aos símbolos do alfabeto. A atribuição pode ser dependente do tipo de elemento de sintaxe e/ou da posição dentro da sequência parcial de símbolos alfabéticos do elemento de sintaxe atual. Logo que o atribuidor 212 tenha atribuído um contexto a um símbolo de alfabeto atual, a ser recuperado a partir de qualquer um dos descodificadores de entropia 210 pelo seletor 214, o símbolo de alfabeto pode inerentemente ter a medida de estimativa de distribuição de probabilidade associada, uma vez que cada contexto tem a sua medida de estimativa correspondente associada. Além disso, o contexto e a sua medida associada de estimativa da distribuição de probabilidade podem ser adaptados, de acordo com as estatísticas reais dos símbolos de alfabeto do respetivo contexto, tendo sido, até então, recuperados dos descodificadores de entropia 210. Detalhes a este respeito são apresentados em mais abaixo.
Semelhante à discussão acima sobre a Fig. 1, é possível que a correspondência entre os símbolos de fonte acima mencionados, das subsequências 204 e 208, em elementos de sintaxe não seja uma correspondência de um para um. Em vez disso, os elementos de sintaxe podem ter sido decompostos em um número inteiro de símbolos de fontes com o número, eventualmente, variando entre os elementos de sintaxe, mas sendo, em qualquer caso, maior do que um pelo menos para um elemento de sintaxe. Conforme mencionado acima, a descrição a seguir foca-se no tratamento desses tipos de elementos de sintaxe e elementos de sintaxe de outros tipos podem mesmo não estar presentes.
Para tratar os elementos de sintaxe acima mencionados, o aparelho de descodificação de entropia da Fig. 2a pode compreender um compositor 224 configurado para refazer a decomposição realizada pelo decompositor 136 da Fig. la. Em particular, o compositor 224 pode ser configurado para compor a sequência 226 de elementos de sintaxe, a partir dos símbolos de origem da sequência 218 ou, se o recombinador 220 estiver em falta, para compor as subsequências 204 e 208, compondo individualmente cada elemento de sintaxe a partir de um respetivo número inteiro de símbolos de origem com um dos símbolos de origem do número inteiro de símbolos de fonte, pertencente à primeira subsequência 204, e outro dos símbolos de fonte do número inteiro de símbolos de fonte do mesmo elemento de sintaxe pertencente à segunda subsequência 208. Através desta medida, certos elementos de sintaxe podem ter sido decompostos no lado do codificador de modo a separar componentes adequados para a descodificação de VLC a partir de um componente remanescente que tem de ser passado através do caminho de descodificação de PIPE. Semelhante à discussão acima, o elemento de sintaxe pode ser de tipo diferente e o compositor 224 pode ser configurado para executar a composição individual dependendo do tipo dos elementos de sintaxe. Em particular, o compositor 224 pode ser configurado para obter os respetivos elementos de sintaxe combinando logicamente ou matematicamente o número inteiro de símbolos de fonte do respetivo elemento de sintaxe. Por exemplo, o compositor 224 pode ser configurado, para cada elemento de sintaxe, aplicar +, -, : ou · ao primeiro e segundo símbolos de fonte de um elemento de sintaxe.
Conforme o anteriormente mencionado, as formas de realização aqui descritas, contudo, concentram-se em elementos de sintaxe que são decompostos pelo decompositor 136, de acordo com a Fig. lb e lc, e as alternativas descritas a este respeito. A FIG. 2a mostra como o compositor 224 pode funcionar para reconstruir estes elementos de sintaxe a partir dos seus símbolos de fonte 218 .
Conforme mostrado na Fig. 2b, o compositor 224 está configurado para compor os referidos elementos de sintaxe z em etapas, a partir de símbolos de fonte de entrada si a sx, com x sendo qualquer algarismo de 1 a 3 no presente exemplo. Podem existir duas ou mais etapas. Conforme ilustrado na Fig. 2b, o compositor 224 define previamente z como sendo o primeiro símbolo Si e verifica se z é igual ao primeiro limitei. Se este não for o caso, z foi encontrado. Caso contrário, o compositor 224 adiciona o próximo símbolo de fonte S2, do fluxo de símbolos de fonte 218, a z e verifica novamente se este z é igual a limite2. Se não, z foi encontrado. Caso contrário, o compositor 224 adiciona o próximo símbolo de fonte S3, do fluxo de símbolos de fonte 218, a z para obter z na sua forma final. As generalizações para um número menor ou maior ou máximo de símbolos de fonte são prontamente deriváveis a partir da descrição acima, e tais alternativas também serão descritas a seguir.
Em qualquer caso, todos estes diferentes componentes ou símbolos de fonte resultantes encontram-se de acordo com a descrição abaixo, codificada com alternativas de entre codificação. Pelo menos um deles é encaminhado por subdivisor para o codificador PIPE 104 e, finalmente, outro é enviado para o codificador 102 de VLC.
Os detalhes particularmente vantajosos são apresentados abaixo em maior detalhe. Estes detalhes concentram-se em possibilidades favoráveis de dividir a gama de valores dos elementos de sintaxe e os esquemas de codificação VLC e PIPE de entropia que podem ser utilizados para codificar os símbolos de origem.
Além disso, como também foi acima descrito em relação à Fig. 1, o aparelho de descodificação de entropia da Fig. 2a pode ser configurado para receber o primeiro fluxo de bits 206, bem como uma pluralidade de segundos fluxos de bits 216, separadamente ou de forma intercalada através de um fluxo de bits intercalado 228. Neste último caso, o aparelho de descodificação de entropia da Fig. 2a pode compreender um desintercalador 230 configurado para desintercalar o fluxo de bits intercalado 228, de forma a obter o primeiro fluxo de bits 206 por um lado, e a pluralidade de segundos fluxos de bits 216 por outro lado. Semelhante à discussão anterior relativa à Fig. 1, o desintercalador 230 pode ser subdividido em duas etapas, nomeadamente um desintercalador 232, para desintercalar o fluxo de bits intercalado 228 em duas partes, nomeadamente o fluxo de bits 206, por um lado, e uma forma intercalada 234 do segundo fluxo de bits 216, por outro lado, e um desintercalador 236 para desintercalar o último fluxo de bits 234 de forma a se obter os fluxos de bits individuais 216.
Assim, a Fig. la e Fig. 2a mostra um aparelho de codificação de entropia, por um lado, e um aparelho de descodificação de entropia, adequado para descodificar o resultado de codificação obtido pelo aparelho de codificação de entropia da Fig. 1, por outro lado. Detalhes relativos a muitos dos elementos mostrados nas Fig. la e Fig.2 são descritos em maior detalhe, em relação às figuras seguintes. Consequentemente, faz-se referência a estes pormenores na descrição a seguir, e estes são considerados como igualmente aplicáveis, de forma individual, à Fig. la e à Fig. 2, na medida em que os mencionados detalhes são implementáveis separadamente nos codificadores e descodificadores descritos acima. Apenas no que diz respeito aos intercaladores e desintercaladores 132 e 234, aqui é feita uma observação adicional. Em particular, a intercalação dos fluxos de bits 112 e 118 pode ser favorável, no caso de os fluxos de bits terem de ser multiplexados num canal para poderem serem transmitidos. Neste caso, pode ser favorável intercalar o fluxo de bits de LC 112, por um lado, e as correntes de bits de codificação PIPE 118, por outro lado, de modo a obedecer certas condições a serem cumpridas, tais como obedecer algum desfasamento de descodificação máximo. Em outras palavras, pode ser necessário que o deslocamento temporal relativo entre os tempos em que os elementos de sintaxe e os símbolos de fonte, respetivamente, são recuperáveis no lado de descodificação, por um lado, e o deslocamento temporal relativo, de acordo com a sua posição no fluxo de bits parsivo, por outro lado, não exceda um certo desfasamento máximo. Várias alternativas são descritas abaixo de forma a para resolver este problema. Uma destas
possibilidades envolve os codificadores de entropia 116, para configuração de um tipo de codificador de comprimento variável para mapear sequências de símbolos de alfabeto para palavras de código, e os descodificadores de entropia 210 para fazer o mapeamento inverso. As palavras de código do fluxo de bits VLC 112 e dos fluxos de bits PIPE 118 podem ser, mas não obrigatoriamente, selecionadas de modo a que nenhuma palavra de código de qualquer destes fluxos de bits seja prefixo de qualquer palavra de código de qualquer dos outros fluxos de bits, de forma que os limites das palavras de código permaneçam somente determináveis no lado do descodificador. Em qualquer caso, o intercalador 128 pode ser configurado para reservar e armazenar em buffer uma sequência de entradas de palavra de código, para a palavra de código dentro do primeiro fluxo de bits 112 e do segundo fluxo de bits 118, numa ordem sequencial dependendo de uma ordem em que os símbolos de alfabeto da sequência 124 de símbolos de alfabeto reencaminhados pelo seletor 120 para a pluralidade de codificadores de entropia 116, resultam num início de uma nova sequência de símbolos de alfabeto a serem mapeados para uma respetiva palavra de código no respetivo codificador de entropia 116, e um novo símbolo de fonte do segundo sub-fluxo 108 é mapeado pelo codificador VLC 102, respetivamente. Por outras palavras, o intercalador 128 insere as palavras de código do fluxo de bits 112, no fluxo de bits comum 12 6, na ordem dos símbolos de origem dos quais foram obtidos por codificação de VLC, na sua ordem dentro do fluxo de bits 108 e do fluxo de símbolo de fonte 106, respetivamente. As palavras de código dadas pelos codificadores de entropia 116 são inseridas no fluxo de bits comum 126 entre as sucessivas palavras de código do fluxo de bits VLC 112. Devido à categorização de codificação PIPE dos símbolos de alfabeto pelo atribuidor 114 e pelo seletor 120, respetivamente, cada uma das palavras de código dos codificadores de entropia 116 tem símbolos de alfabeto de símbolos de fonte diferentes do sub-fluxo 110 nele codificados. A posição das palavras de código dos fluxos de bits codificados por PIPE 118, no interior do fluxo de bits comum 126, entre si e em relação à palavra de código VLC do fluxo de bits 112, é determinada pelo primeiro símbolo de alfabeto codificado em cada palavra de código, respetivamente, isto é, o mais antigo no tempo. A ordem destes símbolos de alfabeto primário codificados nas palavras de código dos fluxos de bits 118, no fluxo de símbolos do alfabeto 124, determina a ordem das palavras de código dos fluxos de bits 118, no interior do fluxo de bits comum 12 6 entre si, em relação às palavras de código VLC do fluxo de bits 112 O símbolo de fonte, ao qual estes símbolos de alfabeto primário codificados nas palavras de código de fluxos de bits 118 pertencem, determinam entre quais as palavras de código consecutivas, do fluxo de bits 112, deve ser posicionada a respetiva palavra de código de qualquer uma das correntes de bits 118. Em particular, as palavras de código VLC consecutivas entre as quais a respetiva palavra de código, de qualquer um dos fluxos de bits 118, deve ser posicionada, são aquelas entre as quais o símbolo de fonte de sub-fluxo 110 está posicionado, de acordo com a ordem original do fluxo de símbolo de fonte não subdividido 106, para o qual pertence o respetivo símbolo de alfabeto primário codificado na respetiva palavra-chave dos fluxos de bits 118. 0 intercalador 128 pode ser configurado para remover as palavras de código introduzidas, nas entradas de palavra de código acima mencionadas, em ordem sequencial para obter o fluxo de bits comum 12 6 de palavras de código intercaladas. Como já foi acima descrito, os codificadores de entropia 116 podem ser configurados para inserir sequencialmente as suas palavras de código nas entradas de palavras de código reservadas ao respetivo codificador de entropia 116, e o seletor 120 pode ser configurado para reencaminhar os símbolos alfabéticos que representam os símbolos de origem do segundo sub-fluxo 110, numa ordem, mantendo uma ordem, na qual os símbolos de fonte do primeiro sub-fluxo 108 e do segundo sub-fluxo 110 foram intercalados, dentro da sequência 106 de símbolos de fonte.
Podem ser previstas medidas adicionais para fazer face a situações nas quais, alguns dos codificadores de entropia 116 são selecionados tão raramente, que resulta em longos tempos para obtenção de uma palavra de código válida, dentro desse mesmo codificador de entropia 116. Exemplos de tais medidas são descritos abaixo em maior detalhe. Em particular, o intercalador 128, juntamente com o codificador de entropia 116 pode, neste caso, ser configurado para descarregar os seus símbolos de alfabeto, recolhidos até então, e palavras de código introduzidas nas entradas de palavra de código acima mencionadas, respetivamente, de modo que o tempo deste procedimento de descarga possa ser prevista ou emulada no lado de descodificação.
No lado de descodificação, o desintercalador 230 pode atuar no sentido inverso: sempre que, de acordo com o esquema parsivo acima mencionado, o símbolo de fonte seguinte a ser descodificado, é um símbolo codificado por VLC, é considerada uma palavra de código atual, no fluxo de bits comum 228, como uma palavra de código VLC, e é encaminhada, dentro do fluxo de bits 206, para o descodificador VLC 200. Por outro lado, sempre que qualquer um dos símbolos de alfabeto pertencentes a qualquer um dos símbolos codificados por PIPE, do sub-fluxo 208, é um símbolo de alfabeto primário, i.e. necessita de um novo mapeamento de uma palavra de código de um dos fluxos de bits 216 correspondentes, para uma respetiva sequência de símbolos de alfabeto, pelo respetivo descodificador de entropia 210, sendo a palavra de código atual do fluxo de bits comum 228 considerada como uma palavra de código codificada por PIPE e encaminhado para o respetivo descodificador de entropia 210. A deteção do limite de palavra de código seguinte, ou seja, a deteção da extensão da palavra de código seguinte, a partir da extremidade da palavra de código que foi agora enviada para qualquer um dos descodificadores 200 e 202, respetivamente, até à sua extremidade e dentro do fluxo de bits de intercalação 228, pode ser diferida e realizada sob conhecimento do descodificador 200 e 202, sendo o destinatário dedicado desta palavra de código seguinte, de acordo com a regra acima descrita. Com base neste conhecimento, o livro de códigos, utilizado pelo descodificador do destinatário, é conhecido e a respetiva palavra de código detetável. Se, por outro lado, os livros de código fossem concebidos de tal modo que os limites de palavras de código fossem detetáveis, sem o conhecimento a priori do descodificador de destinatários 200 e 202, então a separação de palavras de código poderia ser realizada em paralelo. Em qualquer caso, devido à intercalação, os símbolos de origem estão disponíveis no descodificador numa forma descodificada por entropia, isto é, como símbolos de origem, na sua ordem correta a um desfasamento razoável.
Depois de se ter descrito as formas de realização acima relativas a um aparelho de codificação de entropia e ao respetivo aparelho de descodificação de entropia, são descritos a seguir mais detalhes relativos aos codificadores PIPE e aos descodificadores PIPE acima mencionados.
Um codificador PIPE é ilustrado na Fig. 3. 0 mesmo pode ser usado como o codificador PIPE na Fig. la. 0 codificador PIPE converte sem perdas um fluxo de símbolos de fonte 1 num conjunto de dois ou mais fluxos de bits parciais 12. Cada símbolo de fonte 1 pode ser associado a uma categoria ou tipo de um conjunto de uma ou mais categorias ou tipos. Como exemplo, as categorias podem especificar o tipo do símbolo de fonte. No contexto da codificação híbrida de vídeo, uma categoria separada pode estar associada a modos de codificação de macroblocos, modos de codificação de bloco, índices de imagem de referência, diferenças de vetor de movimento, bandeiras de subdivisão, bandeiras de bloco codificados, parâmetros de quantização, níveis de coeficientes de transformação, etc. Noutras áreas de aplicação, como áudio, fala, texto, documento ou codificação de dados gerais, são possíveis diferentes categorizações de símbolos de origem.
Em geral, cada símbolo de fonte pode ter um valor de um conjunto infinito de valores finitos ou contáveis, onde o conjunto de possíveis valores de símbolo de fonte pode diferir em diferentes categorias de símbolos de origem. Para reduzir a complexidade do algoritmo de codificação e descodificação, e para permitir uma conceção geral de codificação e descodificação para diferentes símbolos de fonte e categorias de símbolos de fonte, os símbolos de fonte 1 são convertidos em conjuntos ordenados de decisões binárias e estas decisões binárias são então processadas por algoritmos de codificação binários simples. Assim, o binarizador 2 bijetivamente mapeia o valor de cada símbolo de fonte 1 numa sequência (ou cadeia) de bins 3. A sequência de bins 3 representa um conjunto de decisões binárias ordenadas. Cada bin 3, ou decisão binária, pode tomar um valor de um conjunto de dois valores, ex. um dos valores 0 e 1. 0 esquema de binarização pode ser diferente para diferentes categorias de símbolos de origem. 0 esquema de binarização, para uma categoria específica de símbolo de fonte, pode depender do conjunto de valores de símbolo de fonte possíveis e/ou de outras propriedades dos símbolos de origem para a essa categoria específica. A Tabela 1 ilustra três exemplos de esquemas de binarização para conjuntos infinitos contáveis. Os esquemas de binarização para conjuntos infinitos contáveis podem também ser aplicados a conjuntos finitos de valores de símbolo. Em especial, para grandes conjuntos finitos de valores de símbolos, a ineficiência (resultante de sequências de bins não utilizadas) pode ser negligenciável, mas a universalidade de tais esquemas de binarização proporciona uma vantagem em termos de requisitos de complexidade e memória. Para pequenos conjuntos finitos de valores de símbolos, é frequentemente preferível (em termos de eficiência de codificação) adaptar o esquema de binarização ao número de valores de símbolos possíveis. A Tabela 2 ilustra três exemplos de esquemas de binarização para conjuntos finitos de 8 valores. Esquemas de binarização, para conjuntos finitos, podem ser derivados dos esquemas de binarização universal para conjuntos infinitos contáveis, modificando algumas sequências de bins de forma que os conjuntos finitos de sequências de bins representem um código livre de redundância (e potencialmente reordenando as sequências de bins). Como exemplo, o esquema de binarização unário truncado, da Tabela 2, foi criado por modificação da sequência de bin para o símbolo de fonte 7 da binarização unária universal (ver Tabela 1) . A binarização de
Exp-Golomb truncada e reordenada de ordem 0, da Tabela 2, foi criada pela modificação da sequência de bin para o símbolo fonte 7 da binarização universal de ordem 0 de Exp-Golomb (ver Tabela 1) e pela reordenação das sequências bin (a sequência de bin truncada para o símbolo 7 foi atribuída ao símbolo 1) . Para conjuntos finitos de símbolos, também é possível usar esquemas de binarização não-sistemáticos / não-universais, como exemplificado na última coluna da Tabela 2.
Tabela 1: Exemplos de binarização para conjuntos infinitos contáveis (ou conjuntos finitos grandes)
Tabela 2: Exemplos de binarização para conjuntos finitos
Cada bin 3 da sequência de bins criada pelo binarizador 2 é introduzido no atribuidor de parâmetros 4 em ordem sequencial. 0 atribuidor de parâmetro atribui um conjunto de um ou mais parâmetros a cada bin 3 e envia o bin com o conjunto associado de parâmetros 5. 0 conjunto de parâmetros é determinado exatamente da mesma maneira no codificador e no descodificador. 0 conjunto de parâmetros pode consistir num ou mais dos seguintes parâmetros: - uma medida para uma estimativa da probabilidade de um dos dois possíveis valores bin para o bin atual, - uma medida para uma estimativa da probabilidade para os valores de bins menos provável ou mais provável para o bin atual, - um identificador que especifique uma estimativa para qual dos dois valores bin possíveis representa o valor de bin mais provável ou mais provável para o bin atual, - a categoria do símbolo da fonte associada, - uma medida para a importância do símbolo da fonte associada, - uma medida para a localização do símbolo associado (por exemplo, em conjuntos de dados temporais, espaciais ou volumétricos), - um identificador que especifique a proteção do código de canal para o bin ou o símbolo de fonte associado, - um identificador que especifique o esquema de encriptação para o bin ou o símbolo de fonte associado, - um identificador que especifica uma classe para o símbolo associado, - o número do bin na sequência de bins para o símbolo da fonte associada. 0 atributo de parâmetro 4 pode associar cada bin 3,5 a uma medida para uma estimativa da probabilidade de um dos dois valores de bin possíveis para o bin atual. 0 atributo de parâmetro 4 associa cada bin 3,5 com uma medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável para o bin atual e um identificador especifica uma estimativa para qual dos dois valores bin possíveis representa o valor de bin menos provável ou mais provável para o bin atual. Deve notar-se que a probabilidade para o valor de bin menos provável ou mais provável e o identificador que especifica qual dos dois valores de bin possíveis representa o valor de bin menos provável ou mais provável são medidas equivalentes para a probabilidade de um dos dois valores de bin possíveis. 0 atribuidor de parâmetros 4 pode associar cada bin 3,5 a uma medida para uma estimativa da probabilidade de um dos dois valores de bins possíveis para o bin atual e um ou mais parâmetros adicionais (que podem ser um ou mais dos parâmetros listados acima). Além disso, o atributo de parâmetro 4 pode associar cada bin 3,5 a uma medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável para o bin atual, um identificador que especifica uma estimativa para qual dos dois valores bin possíveis representa o valor de bin mais provável ou mais provável para o bin atual, e um ou mais parâmetros adicionais (que podem ser um ou mais dos parâmetros listados acima). 0 atributo de parâmetro 4 pode determinar uma ou mais das medidas de probabilidade acima mencionadas (medida para uma estimativa da probabilidade de um dos dois valores de bin possíveis para o bin atual, medida para uma estimativa da probabilidade para o menos provável ou mais provável bin para o bin atual, o identificador que especifica uma estimativa para qual dos dois valores bin possíveis representa o valor de bin mais provável ou mais provável para o bin atual) com base num conjunto de um ou mais símbolos já codificados. Os símbolos codificados, que são usados para determinar a probabilidade das medidas, podem incluir um ou mais símbolos já codificados da mesma categoria de símbolos, um ou mais símbolos já codificados da mesma categoria de símbolos, que correspondem a conjuntos de dados (tais como blocos ou grupos de amostras) de locais espaciais e / ou temporais vizinhos (em relação ao conjunto de dados associado ao símbolo de fonte atual), ou um ou mais símbolos já codificados de diferentes categorias de símbolos, que correspondem a conjuntos de dados das mesmas e / ou locais espaciais e / ou temporais vizinhas (em relação ao conjunto de dados associado Com o símbolo da fonte atual).
Cada bin com um conjunto associado de parâmetros 5, que é saído do atribuidor de parâmetro 4, é conduzido para um seletor de buffer de bins 6. 0 seletor de buffer de bins 6 modifica potencialmente o valor do bin de entrada 5, com base no valor do bin de entrada e dos parâmetros associados 5, e regula o bin de saída 7, com um valor potencialmente modificado, num dos dois ou mais buffers de bin 8. 0 buffer de bins 8, para o qual o bin de saída 7 é enviado, é determinado com base no valor do bin de entrada 5 e / ou o valor dos parâmetros associados 5. 0 seletor de buffer de bins 6 não pode modificar o valor de bin, i.e. o bin de saída 7 tem sempre o mesmo valor que o bin de entrada 5. 0 seletor de buffer de bins 6 pode determinar o valor de bin de saída 7 com base no valor de bin de entrada 5 e a medida associada para uma estimativa da probabilidade de um dos dois valores de bin possíveis para o bin atual. 0 valor do bin de saída 7 pode ser definido como sendo igual ao valor do bin de entrada 5, se a medida para a probabilidade de um dos dois valores de bin possíveis para o bin atual for inferior a (ou menor que ou igual a) um limiar particular. Se a medida para a probabilidade de um dos dois valores bin possíveis para o bin atual for maior ou igual a (ou maior que) um limiar particular, o valor do bin de saída 7 é modificado (isto é, é ajustado para o oposto do valor do bin de entrada) . 0 valor do bin de saída 7 pode ser definido como sendo igual ao valor do bin de entrada 5, se a medida para a probabilidade de um dos dois valores de bin possíveis para o bin atual for superior (ou superior ou igual a) um limiar particular. Se a medida para a probabilidade de um dos dois valores de bin possíveis para o bin atual for menor ou igual a (ou menor que) um determinado limite, o valor do bin de saída 7 é modificado (isto é, é ajustado para o oposto do valor do bin de entrada) . 0 valor do limiar pode corresponder a um valor de 0,5 para a probabilidade estimada para ambos os valores bin possíveis. O seletor de buffer de bins 6 pode determinar o valor do bin de saída 7 com base no valor do bin de entrada 5 e o identificador associado, que especifica uma estimativa para qual dos dois valores bin possíveis representa o valor de bin mais provável ou mais provável para o bin atual. O valor do bin de saída 7 pode ser definido como sendo igual ao valor do bin de entrada 5, se o identificador especificar que o primeiro dos dois valores de bin possíveis representa o valor do bin menos provável (ou mais provável) para o bin atual, e o valor do bin de saída 7 É modificado (isto é, é definido para o oposto do valor de bin de entrada), se identificador especificar que o segundo dos dois possíveis valores de bin representa o menos provável (ou mais provável) valor de para o bin atual. O seletor de buffer de bins 6 pode determinar o buffer de bins 8 à qual o bin de saída 7 é enviado com base na medida associada para uma estimativa da probabilidade de um dos dois valores bin possíveis para o bin atual. O conjunto de valores possíveis para a medida para uma estimativa da probabilidade de um dos dois valores bin possíveis pode ser finito e o seletor de buffer de bins 6 contém uma tabela que associa exatamente um buffer de bins 8 a cada valor possível para a estimativa do valor da probabilidade para um dos dois valores bin possíveis, onde valores diferentes para a medida de estimativa da probabilidade de um dos dois possíveis valores bin pode ser associado com o mesmo buffer de bins 8. Adicionalmente, o intervalo de valores possíveis para a medida de uma estimativa da probabilidade, para um dos dois valores de bin possíveis, pode ser dividido num número de intervalos, determinando o seletor de buffer de bins 6 o índice de intervalo para a medida atual para uma estimativa da probabilidade para um dos dois valores bin possíveis. 0 seletor 6 de buffer de bins contém uma tabela que associa exatamente um buffer de bins 8 a cada valor possível para o índice de intervalo, em que valores diferentes para o índice de intervalo podem ser associados com o mesmo buffer de bins 8. Os bins de entrada 5, com medidas opostas para uma estimativa da probabilidade de um dos dois valores bin possíveis (medida oposta são aquelas que representam estimativas de probabilidade P e 1 - P) , podem ser introduzidas no mesmo buffer de bins 8.
Além disso, a associação da medida para uma estimativa da probabilidade de um dos dois valores bin possíveis, para o bin atual com um buffer de bins específico, adaptada ao longo do tempo, i.e. de modo a garantir que os fluxos de bits parciais criados tenham taxas de bits semelhantes. 0 seletor de buffer de bins 6 pode determinar o buffer de bins 8, ao qual o bin de saída 7 é enviado, com base na medida associada para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável para o bin atual. 0 conjunto de valores possíveis para a medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável pode ser finito e o seletor de buffer de bins 6 contém uma tabela que associa exatamente um buffer de bins 8 a cada valor possível da estimativa da probabilidade para o valor de bin menos provável ou mais provável, onde valores diferentes para a medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável, podem ser associados com o mesmo buffer de bins 8. Além disso, o intervalo de valores possíveis para a medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável pode ser dividido num número de intervalos, determinando o seletor de buffer de bins 6 o índice de intervalo para a medida atual para uma estimativa da probabilidade para o bin menos provável ou mais provável. 0 seletor de buffer de bins 6 contém uma tabela que associa exatamente um buffer de bins 8 a cada valor possível para o índice de intervalo, em que valores diferentes para o índice de intervalo podem ser associados com o mesmo buffer de bins 8. A associação da medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável para o bin atual com um buffer de bins específico, pode ser adaptada ao longo do tempo, de modo a garantir que os fluxos de bits parciais criados tenham taxas de bits semelhantes.
Cada uma dos dois ou mais buffers de bin está ligado exatamente a um codificador bin 10 e cada codificador bin está apenas ligado a um buffer de bins 8. Cada codificador bin 10 lê os buffers de bin binário associado 8 e converte uma sequência de bins 9 numa palavra de código 11, que representa uma sequência de bits. Os buffers de bin 8 representam buffers primeiro a entrar - primeiro a sair. Os bins que são introduzidos mais tarde (em ordem sequencial) num buffer de bins 8 não são codificados antes de bins que são introduzidos anteriormente (em ordem sequencial) no buffer de bins. As palavras de código 11 que são emitidas por um codificador de bins 10 específico são escritas para um fluxo de bits parcial específico 12. O algoritmo de codificação geral converte os símbolos de fonte 1 em dois ou mais fluxos de bits parciais 12, onde o número de fluxos de bits parciais é igual ao número de buffers de bins de e codificadores de bin. Um codificador de bin 10 pode converter um número variável de bins 9 numa palavra de código 11 de um número variável de bits. Uma vantagem da codificação PIPE, anteriormente e a seguir descrita, é que a codificação de bins pode ser feita em paralelo (por exemplo, para diferentes grupos de medidas de probabilidade), o que reduz o tempo de processamento para várias implementações.
Outra vantagem da codificação PIPE é que a codificação bin, que é feita pelos codificadores bin 10, pode ser especificamente concebida para diferentes conjuntos de parâmetros 5. Em particular, a codificação e codificação bin pode ser otimizada (em termos de eficiência de codificação e / ou complexidade) para diferentes grupos de probabilidades estimadas. Por um lado, isto permite uma redução da complexidade de codificação / descodificação em relação aos algoritmos de codificação aritmética com uma eficiência de codificação semelhante. Por outro lado, permite uma melhoria da eficiência de codificação em relação aos algoritmos de codificação VLC com complexidade de codificação / descodificação semelhante. Os codificadores bin 10 podem implementar diferentes algoritmos de codificação (isto é, mapeamento de sequências bin em palavras de código) para diferentes grupos de medidas para uma estimativa da probabilidade de um dos dois valores bin possíveis 5 para o bin atual. Os codificadores bin 10 podem implementar diferentes algoritmos de codificação para diferentes grupos de medidas para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável para o bin atual. Alternativamente, os codificadores bin 10 podem implementar algoritmos de codificação diferentes para códigos de proteção de canal diferentes. Os codificadores bin 10 podem implementar algoritmos de codificação diferentes para esquemas de encriptação diferentes. Os codificadores bin 10 podem implementar diferentes algoritmos de codificação para diferentes combinações de códigos de proteção de canal e grupos de medidas para uma estimativa da probabilidade de um dos dois valores bin possíveis 5 para o bin atual. Os codificadores bin 10 implementam diferentes algoritmos de codificação para diferentes combinações de códigos de proteção de canal e grupos de medidas para uma estimativa da probabilidade para o valor de bin 5 menos provável ou mais provável para o bin atual. Os codificadores bin 10 podem implementar algoritmos de codificação diferentes para combinações diferentes de esquemas de criptografia e grupos de medidas para uma estimativa da probabilidade de um dos dois valores bin possíveis 5 para o bin atual. Os codificadores bin 10 podem implementar diferentes algoritmos de codificação para diferentes combinações de esquemas de criptografia e grupos de medidas para uma estimativa da probabilidade para o valor de bin 5 menos provável ou mais provável para o bin atual.
Os codificadores bin 10 - ou um ou mais codificadores bin - podem representar motores de codificação de aritmética binária. Um ou mais dos codificadores de bin pode representar um ao motor de codificação de aritmética binária, em que o mapeamento da probabilidade LPS / LPB p LPS representativa de um dado buffer de bins, para uma largura de intervalo de código correspondente f?Lps - isto é, a subdivisão de intervalo do estado interno do binário do mecanismo de codificação aritmética, que é definido pela largura R do intervalo atual e o deslocamento L do intervalo atual, identificando, por exemplo, o limite inferior do intervalo de código - é realizado usando uma tabela de pesquisa. Para cada ao motor de codificação de aritmética binária, baseado em tabela, associado a um dado buffer de bins, valores K de largura de intervalo representativos {Qor ···, Qk-i} podem ser usados para representar Rlps/ com a escolha de K e os valores de largura de intervalo representativos {Qo, . .., Qk-iI sendo dependente do buffer de bins. Para uma escolha de K> 1, a codificação aritmética de um bin pode envolver os subpassos de mapeamento da largura R de intervalo atual para um índice de quantificação q com valores em {0, . . . , K-l} e executando a subdivisão de intervalo através da verificação do valor de largura de intervalo parcial correspondente Qq de uma tabela de pesquisa usando q como um índice. Para uma escolha de K = 1, isto é, para o caso em que é dado apenas um valor de largura de intervalo representativo Qq, este valor Q0 pode ser escolhido como uma potência de dois para permitir a descodificação de múltiplos valores de MPS / MPB entrando no buffer de bins correspondente dentro de um único ciclo de renormalização. As palavras de código resultantes, de cada ao motor de codificação de aritmética, podem ser transmitidas separadamente, empacotadas, ou armazenadas, ou podem ser intercaladas para efeitos de transmissão ou armazenamento como descrito a seguir.
Ou seja, um motor de codificação aritmética binária 10 pode executar as seguintes etapas, na codificação dos bins no seu buffer de bins 8: 1. Receber valLPS, bin do buffer de bins (relembra-se: o respetivo motor de codificação de aritmética binária 10, aqui considerado, tinha sido escolhido para receber "bin" uma vez que (ou, em outras palavras, "bin" estava associado com o respetivo motor de codificação de aritmética binária 10) a estimativa de distribuição de probabilidade, como p_state [bin], foi associada ao motor de codificação de aritmética binária 10) 2. Quantificação de R:
(ou qualquer outra forma de quantificação) 3. Determinação de RLps e R: RLps = Rtab [q_index] (note que o p_state não é mencionado aqui, uma vez que é fixo para o motor de codificação de aritmética binária 10 considerado, ou seja, p_state [encoder] e Rtab armazenou valores pré-calculados para [p_state [encoder]] · Q [q_index] R = R -Rlps [ou seja, R é previamente pré-atualizado como se "bin" fosse MPS] 4. Cálculo do novo intervalo parcial: if (bin = I - valMPS) then
L <- L + R R <- RLPS 5. Renormalização de L e R dos bits de escrita, em que, g_index Descreve o indice de um valor de quantização lido em Qtab, p state Descreve o estado atual (fixo para o mecanismo de codificação de aritmética binária 10),
Rlps Descreve a largura de intervalo correspondente ao LPS, e valMPS Descreve o valor do bit correspondente ao MPS.
Consequentemente, um motor de descodificação aritmética binária 22 poderia executar as seguintes etapas, na descodificação das bins de saida para o buffer de bins 20: 1. Receber pedido para bin (relembra-se: o respetivo motor de descodificação de aritmética binária 22, aqui considerado, tinha sido escolhido para descodificar "bin" uma vez que (ou, em outras palavras, "bin" estava associado com o respetivo um motor de descodificação de aritmética binária 22) a estimativa de distribuição de probabilidade, como p state[bin], foi associada ao motor de descodificação de aritmética binária 22) 2. Quantificação de R:
(ou qualquer outra forma de quantificação) 3. Determinação de RLps e de R:
(note-se que p_state não é mencionado aqui, uma vez que é fixado para o motor de descodificação de aritmética binária
22 considerado, i.e. p_state[encoder] e Rtab armazenou valores pré-calculados para p (p state[encoder]] · Q
[q_index] R = R -RLps [ou seja, R é preliminarmente pré-atualizado como se "bin" fosse MPS] 4. Determinação de bin dependendo da posição do intervalo parcial: if (V á R) then bin <- 1 - valMPS (bin é descodificado como LPS; o seletor de buffer de bins 18 obtém o valor de bin atual através do utilização da informação deste bin e de valMPS) V <- V - R R 4- RLPS else bin <- valMPS (bin é descodificado como MPS; o seletor de buffer de bins 18 obtém o valor de bin atual através do utilização da informação deste bin e de valMPS) 5. Renormalização de R, de um bit de escrita e atualização de V, em que, g_index Descreve o indice de um valor de quantização lido em Qtab, p_state Descreve o estado atual (fixo para o motor de descodificação de aritmética binária 22),
Rlps Descreve a largura de intervalo correspondente ao LPS, e valMPS Descreve o valor do bit correspondente ao MPS e V descreve o valor a partir do interior do intervalo parcial atual.
Os codificadores de bin 10, ou um ou mais dos codificadores de bin, podem representar codificadores de entropia que mapeiam diretamente sequências de bins de entrada 9 em palavras de código 10. Tais mapeamentos podem ser implementados de forma eficiente e não requerem um mecanismo de codificação aritmético complexo. O mapeamento inverso de palavras de código em sequências de bin (como feito no descodificador) deve ser original para garantir uma descodificação perfeita da sequência de entrada, mas o mapeamento das sequências bin 9 para ss palavras de código 10 não têm necessariamente de ser originais, isto é, é possível que uma determinada sequência de bins possa ser mapeada em mais de uma sequência de palavras de código. O mapeamento de sequências de bins de entrada 9 em palavras de código 10 também pode ser bijetivo. Preferencialmente, os codificadores de bin 10, ou um ou mais codificadores de bin, podem representar codificadores de entropia que mapeiam diretamente sequências de comprimento variável de bins de entrada 9 em palavras de código de comprimento variável 10. As palavras de código de saída podem representar códigos sem redundância, tais como códigos Huffman gerais ou códigos Huffman canónicos.
Dois exemplos de mapeamento bijetivo de sequências bin para códigos livres de redundância estão ilustrados na Tabela 3. As palavras de código de saída podem representar códigos redundantes adequados para a deteção de erro e recuperação de erros. As palavras de código de saída podem representar códigos de encriptação adequados para encriptar os símbolos de fonte.
Tabela 3: Exemplos de mapeamentos entre sequências de bin e palavras de código
Os codificadores bin 10, ou um ou mais dos codificadores de bin, podem representar codificadores de entropia que mapeiam diretamente sequências de comprimento variável de bins de entrada 9 em palavras de códiqo de comprimento fixo 10. Os codificadores bin 10, ou um ou mais codificadores de bin, representam codificadores de entropia que mapeiam diretamente sequências de comprimento fixo de bins de entrada 9 em palavras de códiqo de comprimento variável 10. O descodificador PIPE é ilustrado na Figura 4. O descodificador executa basicamente as operações inversas do codificador da Fig. 3, de modo que a sequência (previamente codificada) de símbolos de fonte 27 é descodificada a partir de um conjunto de dois ou mais fluxos de bits parciais 24. O descodificador inclui dois fluxos de processo diferentes: um fluxo para solicitações de dados, que replica o fluxo de dados do codificador, e um fluxo de dados, que representa o inverso do fluxo de dados do codificador. Na ilustração da Fig. 4, as setas tracejadas representam o fluxo de solicitação de dados, enquanto as setas sólidas representam o fluxo de dados. Os blocos de construção do descodificador basicamente replicam os blocos de construção do codificador, mas implementam as operações inversas. A descodificação de um símbolo de fonte é acionada por uma solicitação para um novo símbolo de fonte descodificado 13 que é enviado para o binarizador 14. Cada pedido de um novo símbolo de fonte descodificado 13 pode estar associado a uma categoria de um conjunto de uma ou mais categorias. A categoria que está associada a uma solicitação de um símbolo de fonte é igual à categoria que foi associada com o símbolo de fonte correspondente durante a codificação. 0 binarizador 14 mapeia a solicitação de um símbolo de fonte 13 numa ou mais solicitações de um bin que são enviadas para o atribuidor de parâmetro 16. Como resposta final a uma solicitação para um bin que é enviado para o atribuidor de parâmetro 16, pelo binarizador 14, o binarizador 14 recebe um bin descodificado 26 a partir do seletor de buffer de bins 18. 0 binarizador 14 compara a sequência de bins descodificados 26 recebida com as sequências bin de um esquema de binarização específico para o símbolo de fonte pedido e, se a sequência de bins decodificados 26 recebida corresponde à binarização de um símbolo de fonte, o binarizador esvazia o seu buffer de bins e emite o símbolo de fonte descodificado como resposta final à solicitação de um novo símbolo descodificado. Se a sequência de bins descodificados já recebida não corresponde a nenhuma das sequências de bins para o esquema de binarização para o símbolo de fonte pedido, o binarizador envia outro pedido de bin, para o atribuidor de parâmetros, até que a sequência de bins descodificadas corresponda a uma das sequências bin do esquema de binarização para o símbolo da fonte solicitada. Para cada pedido de um símbolo de fonte, o descodificador utiliza o mesmo esquema de binarização que foi utilizado para codificar o símbolo de fonte correspondente. 0 esquema de binarização pode ser diferente para diferentes categorias de símbolos de fonte. 0 esquema de binarização, para uma categoria de símbolo de fonte específica, pode depender do conjunto de valores de símbolo de fonte possíveis e / ou outras propriedades dos símbolos de fonte para a essa categoria específica. 0 atribuidor de parâmetros atribui um conjunto de um ou mais parâmetros a cada solicitação para um bin e envia essa a solicitação para um bin com o conjunto de parâmetros associado ao seletor de buffer de bins. 0 conjunto de parâmetros, que são atribuídos a um bin pedido pelo atribuidor de parâmetros, é o mesmo que foi atribuído ao bin correspondente durante a codificação. 0 conjunto de parâmetros pode consistir em um ou mais dos parâmetros que são mencionados na descrição do codificador. 0 atribuidor de parâmetros 16 pode associar cada pedido de bin a uma medida para uma estimativa da probabilidade de um dos dois valores de bin possíveis para o bin pedido atual. Em particular, o atribuidor de parâmetros 16 pode associar cada pedido de bin a uma medida para uma estimativa da probabilidade, para o valor de bin menos provável ou mais provável, ao bin do pedido atual e um identificador que especifica uma estimativa para qual dos dois bin representa o valor de bin menos provável ou mais provável para o bin pedido atual. 0 atribuidor de parâmetros 16 pode associar cada pedido de bin 15, 17 a uma medida para uma estimativa da probabilidade de um dos dois valores de bin possíveis, ao bin do pedido atual, bem como um ou mais parâmetros adicionais. 0 atribuidor de parâmetros 16 pode associar cada pedido de bin 15,17 a uma medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável ao bin de pedido atual, a um identificador que especifica uma estimativa para qual dos dois valores de bin representa o valor de bin menos provável ou mais provável para o bin do pedido atual, e um ou mais parâmetros adicionais (que podem um ou mais dos parâmetros listados acima). 0 atribuidor de parâmetros 16 pode determinar uma ou mais das medidas de probabilidade acima mencionadas (medida para uma estimativa da probabilidade de um dos dois valores de bin possíveis para o bin pedido atual, medida para uma estimativa da probabilidade para o menos provável ou mais valor de bin mais provável para o bin atual solicitado, identificador especificando uma estimativa para qual dos dois valores de bin possíveis representa o valor de bin menos provável ou mais provável para o bin atual solicitado) com base em um conjunto de um ou mais símbolos já descodificados. A determinação da probabilidade de medidas para uma solicitação específica de um bin replica o processo no codificador para o correspondente bin. Os símbolos descodificados, que são usados para determinar as medidas de probabilidade, podem incluir um ou mais símbolos já descodificados da mesma categoria de símbolos, um ou mais símbolos já descodificados da mesma categoria de símbolos, que correspondem a conjuntos de dados (tais como blocos ou grupos de amostras) de localizações espaciais e / ou temporais vizinhas (em relação ao conjunto de dados associado à solicitação atual para um símbolo de fonte), ou um ou mais símbolos já descodifiçados de diferentes categorias de símbolos, que correspondem a conjuntos de dados das mesmas e / ou localizações espaciais e / ou temporais vizinhas (em relação ao conjunto de dados associado com a solicitação corrente para um símbolo de fonte) .
Cada pedido de bin com um conjunto associado de parâmetros 17, que é saído do atribuidor de parâmetros 16, é alimentado para um seletor de buffer de bins 18. Com base no conjunto associado de parâmetros 17, o seletor de buffer de bins 18 envia um pedido para bin 19 para um de dois ou mais buffers de bin 20 e recebe um bin descodificado 25 a partir do buffer de bins selecionado 20. 0 bin de entrada 25 descodificado é potencialmente modificado e o bin de saida 26 descodificado, com um valor potencialmente modificado, é enviado para o binarizador 14 como resposta final à solicitação de bin associado a um conjunto de parâmetros 17. O buffer de bins 20, para o qual é encaminhada a solicitação de bin, é selecionado da mesma maneira que o buffer de bins para o qual o bin de saida do seletor de buffer de bins, no lado do codificador, foi enviado. O seletor de buffer de bins 18 pode determinar o buffer de bins 20, para o qual é enviado o pedido de bin 19, com base na medida associada para uma estimativa da probabilidade de um dos dois valores de bin possíveis para o pedido de bin atual. O conjunto de valores possíveis para a medida para uma estimativa da probabilidade de um dos dois valores bin possíveis pode ser finito e o seletor 18 de buffer de bins contém uma tabela que associa exatamente um buffer de bins 20 a cada valor possível da estimativa do valor de probabilidade para um dos dois valores bin possíveis, onde valores diferentes, para a medida para uma estimativa da probabilidade para um dos dois possíveis valores de bin, podem ser associados com o mesmo buffer 20 de bin. O intervalo de valores possíveis, para a medida para uma estimativa da probabilidade para um dos dois valores bin possíveis, pode ser particionado num número de intervalos, determinando o seletor de buffer de bins 18 o índice de intervalo para a medida atual para uma estimativa da probabilidade para um dos dois valores de bin possíveis. O seletor de buffer de bins 18 contém uma tabela que associa exatamente um buffer de bins 20 a cada valor possível para o índice de intervalo, em que valores diferentes para esse índice de intervalo pode ser associado com o mesmo buffer de bins 20. Os pedidos para bin 17, com medidas opostas para uma estimativa da probabilidade de um dos dois valores bin possíveis (medida oposta são aquelas que representam estimativas de probabilidade P e 1 - P) , podem ser encaminhadas para o mesmo buffer de bins 20. Além disso, a associação da medida para uma estimativa da probabilidade de um dos dois valores bin possíveis, para a solicitação de bin atual, a um buffer de bins específico pode ser adaptada ao longo do tempo. O seletor de buffer de bins 18 pode determinar o buffer de bins 20, para o qual é enviado pedido de bin 19, com base na medida associada para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável para o bin atual pedido. O conjunto de valores possíveis, para a medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável, pode ser finito e o seletor de buffer de bins 18 pode conter uma tabela que associa exatamente um buffer de bins 2 0 a cada valor possível da estimativa da probabilidade para o valor de bin menos provável ou mais provável, onde valores diferentes, para a medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável, podem ser associados ao mesmo buffer de bins 20. O intervalo de valores possíveis para a medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável pode ser dividido num número de intervalos, determinando o seletor de buffer de bins 18 o índice de intervalo para a medida atual para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável. O seletor de buffer de bins 18 contém uma tabela que associa exatamente um buffer de bins 20 a cada valor possível para o índice de intervalo, em que valores diferentes para o índice de intervalo podem ser associados com o mesmo buffer 20. A associação da medida para uma estimativa da probabilidade para o valor de bin menos provável ou mais provável, para o pedido de bin atual a um buffer de bins específico é adaptada ao longo do tempo.
Após a receção de um bin descodificado 25, a partir do buffer de bins selecionado 20, o seletor de buffer de bins 18 modifica potencialmente o bin de entrada 25 e envia o bin de saída 26, com um valor potencialmente modificado, para o binarizador 14. 0 bin de entrada / saida de mapeamento do seletor de buffer de bins 18 é o inverso do mapeamento de bin de entrada / saída do seletor de buffer de bins no codificador. 0 seletor de buffer de bins 18 pode ser configurado para não modificar o valor do bin, isto é, o bin de saída 26 tem sempre o mesmo valor que o bin de entrada 25. 0 seletor de buffer de bins 18 pode determinar o valor de bin de saída 26 com base no valor de bin de entrada 25 e a medida para uma estimativa da probabilidade de um dos dois valores de bin possíveis para o pedido de bin atual que está associado com o pedido de bin 17. 0 valor do bin de saída 26 pode ser definido como sendo igual ao valor do bin de entrada 25, se a medida para a probabilidade de um dos dois valores de bins possíveis para o pedido de bin atual for inferior a (ou menor ou igual a) um limiar específico. Se a medida para a probabilidade de um dos dois valores bin possíveis, para o pedido de bin atual for superior ou igual a (ou maior que) um determinado limiar, o valor de bin 26 de saída é modificado (isto é, é definido para o oposto do valor do bin de entrada) . 0 valor do bin de saída 2 6 pode ser definido como sendo igual ao valor de bin de entrada 25 se a medida para a probabilidade de um dos dois valores de bin possíveis, para o pedido de bin atual, for maior do que (ou maior ou igual a) um determinado limiar. Se a medida para a probabilidade de um dos dois valores bin possíveis para o pedido de bin atual for menor ou igual a (ou menor que) um limiar determinado, o valor de bin 26 de saída é modificado (i.e. é definido como sendo o oposto do valor do bin de entrada) . 0 valor do limiar pode corresponder a um valor de 0,5 para a probabilidade estimada para ambos os valores bin possíveis. O seletor de buffer de bins 18 pode determinar o valor de bin de saída 2 6 com base no valor de bin de entrada 25 e o identificador, especificando uma estimativa para qual dos dois valores de bin possíveis representa o valor de bin menos provável ou mais provável para a solicitação de binário atual, está associado ao pedido de bin 17. 0 valor do bin de saída 26 pode ser definido como sendo igual ao valor do bin de entrada 25 se o identificador especificar que o primeiro dos dois valores de bin possíveis representa o valor de bin menos provável (ou mais provável) para o pedido de bin atual e o valor de bin de saída 26 é modificado (isto é, é definido para ser o oposto do valor de bin de entrada) se identificador especifica que o segundo dos dois possíveis valores de representa o menos provável (ou mais provável) valor de bin para o pedido de bin atual.
Conforme o acima descrito, o seletor de buffer de bins envia um pedido de bin 19 para um dos dois ou mais buffers de bin 20. Os buffers de bin 20 representam buffers first-in-first-out (primeiro a entrar - primeiro a sair), que são alimentados com sequências de bins descodificadas 21 a partir dos descodificadores de bin 22 associados. Como resposta a um pedido de bin 19, que é enviado para um buffer de bin 2 0 do seletor de buffer de bins 18, o buffer de bins 2 0 remove o bin do seu conteúdo, que foi primeiro alimentado para o buffer de bins 20 e envia-o para o seletor de buffer de bins 18. Os bins que são enviados mais cedo para o buffer de bins 2 0 são previamente removidos e enviados para o seletor de buffers de bins 18.
Cada um dos dois ou mais buffers de bins 20 está ligado a exatamente um descodificador de bins 22 e cada descodificador de bins está apenas ligado a um buffer de bins 20. Cada descodificador de bins 22 lê palavras de código 23, que representam sequências de bits, a partir de um fluxo de bits parcial separado 24. O descodificador de bins converte uma palavra de código 23 numa sequência de bins 21 que é enviada para o buffer de bins associado 20. O algoritmo de descodificação geral converte dois ou mais fluxos de bits parciais 24 num número de símbolos de fonte descodificados, no qual o número de fluxos de bits parciais é igual ao número de buffers de bins e de descodif icadores de bins, e a descodificação de símbolos de fonte é ativada por pedidos de novos símbolos de fonte. Um descodif icador de bins 22 pode converter palavras de código 23, de um número variável de bits numa sequência de um número variável de bins 21. Uma vantagem da configuração PIPE acima descrita é que a descodificação de bins, a partir de dois ou mais fluxos de bits parciais, pode ser feita em paralelo (por exemplo, para diferentes grupos de medidas de probabilidade) , o que reduz o tempo de processamento para várias implementações.
Outra vantagem da descodificação PIPE acima descrita é que a descodificação bin, que é feita pelos descodificadores bin 22, pode ser especificamente concebida para diferentes conjuntos de parâmetros 17. Em particular, a codificação e descodificação bin pode ser otimizada, em termos de eficiência de codificação e / ou de complexidade, para diferentes grupos de probabilidades estimadas. Por um lado, isto permite uma redução da complexidade de codificação / descodificação em relação aos algoritmos de codificação aritmética com uma eficiência de codificação semelhante. Por outro lado, permite uma melhoria da eficiência de codificação em relação aos algoritmos de codificação VLC com uma complexidade de codificação / descodificação semelhante. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação, i.e., de mapeamento de sequências de bins em palavras de código, para diferentes grupos de medidas para uma estimativa da probabilidade de um dos dois valores de bin possíveis 17 para o pedido de bin atual. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação para diferentes grupos de medidas para uma estimativa da probabilidade para o valor de bin mais provável ou mais provável para o pedido de bin atual. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação para diferentes códigos de proteção de canal. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação para diferentes esquemas de encriptação. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação para diferentes combinações de códigos de proteção de canal e grupos de medidas para uma estimativa da probabilidade de um dos dois valores de bin possíveis 17 para o pedido de bin atual. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação para diferentes combinações de códigos de proteção de canal e grupos de medidas para uma estimativa da probabilidade para o valor de bin 17 menos provável ou mais provável para o pedido de bin atual. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação para diferentes combinações de esquemas de encriptação e grupos de medidas para uma estimativa da probabilidade de um dos dois valores de bin possíveis 17 para o pedido de bin atual. Os descodificadores de bins 22 podem implementar diferentes algoritmos de descodificação para diferentes combinações de esquemas de encriptação e grupos de medidas para uma estimativa da probabilidade para o valor de bin 17 menos provável ou mais provável para o pedido de bin atual.
Os descodificadores de bins 22 fazem o mapeamento inverso dos codificadores de bins correspondentes no lado do codificador.
Os descodif icadores de bins 22, ou um ou mais dos descodificadores de bins, podem representar motores de descodificação aritmética binária.
Os descodif icadores de bins 22, ou um ou mais dos descodificadores de bins, podem representar descodificadores de entropia que mapeiam diretamente as palavras de código 23 em sequências de bins 21.Tais mapeamentos podem ser implementados de forma eficiente e não requerem um mecanismo de codificação aritmético complexo. 0 mapeamento de palavras de código em sequências de bins tem que ser único. 0 mapeamento de palavras de código 23 em sequências de bins 21 pode ser bijetivo. Os descodificadores d bins 10, ou um ou mais dos descodificadores de bins, podem representar descodificadores de entropia que mapeiam diretamente as palavras de código de comprimento variável 23 em sequências de bins 21 de comprimento variável. As palavras de código de entrada podem representar códigos livres de redundância, tais como códigos Huffman gerais ou códigos de Huffman canónicos. Dois exemplos de mapeamento bijetivo de códigos livres de redundância para sequências de bins são ilustrados na Tabela 3. As palavras de código de entrada podem representar códigos redundantes adequados para deteção de erros e para a recuperação de erros. As palavras-chave de entrada podem representam códigos de encriptação.
Os descodif icadores de bins 22, ou um ou mais dos descodificadores de bins, podem representar descodificadores de entropia que mapeiam diretamente as palavras de código de comprimento fixo 23 em sequências de bins 21 de comprimento variável. Em alternativa, os descodif icadores de bins 22, ou um ou mais dos descodificadores de bins, representam descodificadores de entropia que mapeiam diretamente palavras de código de comprimento variável 23 em sequências de bins 21 de comprimento fixo.
Assim, a Fig. 3 e 4 mostra um codificador PIPE para codificar uma sequência de símbolos de fonte 1 e um descodificador PIPE para reconstrução da mesma. Isto é, o codificador PIPE da Fig. 3 pode ser utilizado como o codificador PIPE 104 na Fig. Ia, com o binarizador 2 atuando como simbolizador 122, o atribuidor de parâmetros 4 atuando como atribuidor 114, o seletor de buffer de bins 6 atuando como seletor 120 e o par de buffers de bins 8, ligado em série, e o codificador de bins 10 atuando respetivamente como codificadores de entropia 116, saindo de cada um destes fluxos de bits 12 correspondentes aos fluxos de bits 118 da Fig. la. Como se depreende da comparação da Fig. 3 e da Fig. 1, o atribuidor 114 da Fig. la pode ter, alternativamente, a sua entrada ligada ao lado da entrada do simbolizador 122 em vez de ao lado da saida deste último. De modo semelhante, o descodif icador PIPE, da Fig. 4, pode ser utilizado como descodificador PIPE 202 na Fig. 2a, com correntes de bits parciais 24 correspondentes às correntes de bits 216 na Fig. 2, sendo os pares de buffers 20 ligados em série e o descodificador de bins 22 correspondentes aos descodificadores de entropia individuais 210, seletor de buffers de bins 18 atuando como seletor 214, o atribuidor de parâmetros 16 atuando como atribuidor 212 e o binarizador 14 atuando como dessimbolizador 222. Mais uma vez, a comparação entre a Fig. 2a e a Fig. 4 torna claro que a interligação entre o dessimbolizador 222, o atribuidor 212 e o seletor 214 pode ser configurada de modo diferente, de modo que alternativamente, as ligações da Fig. 2a sejam alteradas para corresponder às apresentadas na Fig. 4. O codificador PIPE da Fig. 3 compreende um atribuidor 4
configurado para atribuir um número de parâmetros 5 a cada símbolo de alfabeto da sequência de símbolos alfabéticos 3. A atribuição é baseada em informações contidas nos símbolos do alfabeto anterior da sequência de símbolos de alfabeto, como a categoria do elemento de sintaxe 1 para a representação (como a binarização) do qual o símbolo de alfabeto atual pertence e que, de acordo com a estrutura de sintaxe dos elementos de sintaxe 1, é de esperar, por sua vez, que expectativa seja deduzível a partir do histórico de elementos de sintaxe 1 anteriores e símbolos de alfabeto 3. Para além disso, o codificador compreende uma pluralidade de codificadores de entropia 10, cada um dos quais está configurado para converter os símbolos de alfabeto 3, encaminhados para o respetivo codificador de entropia, num respetivo fluxo de bits 12 e um seletor 6, configurado para encaminhar cada símbolo de alfabeto 3 para um codificador selecionado da pluralidade de codificadores de entropia 10, sendo o número de parâmetros 5 atribuídos ao respetivo símbolo de alfabeto 3. O descodificador PIPE da Fig. 4 compreende uma pluralidade de descodificadores de entropia 22, cada um dos quais está configurado para converter o respetivo fluxo de bits 23 em símbolos de alfabeto 21; Um atribuidor 16 está configurado para atribuir um número de parâmetros 17 a cada símbolo de alfabeto 15 de uma sequência de símbolos de alfabeto a ser reconstruída com base na informação contida dentro de símbolos de alfabeto previamente reconstruídos da sequência de símbolos de alfabeto (ver 26 e 27 na Fig. 4); E um seletor 18 está configurado para recuperar cada símbolo do alfabeto da sequência de símbolos do alfabeto a ser reconstruída a partir de uma sequência selecionada a partir de uma pluralidade de descodificadores de entropia 22, dependendo esta seleção do número de parâmetros definidos para o respetivo símbolo do alfabeto. O atribuidor 16 pode ser configurado de tal modo que o número de parâmetros atribuídos a cada símbolo de alfabeto compreenda, ou seja, uma medida para uma estimativa de uma probabilidade de distribuição, de entre os possíveis valores de símbolos de alfabeto, que o respetivo símbolo de alfabeto possa assumir. A sequência de símbolos de alfabeto a ser reconstruída pode ser de um alfabeto binário e o atribuidor 16 pode ser configurado de tal modo que a estimativa da distribuição de probabilidade consiste numa medida para uma estimativa de uma probabilidade de um valor de bin menos provável ou mais provável dos dois valores de bin possíveis do alfabeto binário, e um identificador especificando uma estimativa para a qual os dois possíveis valores de bin representa o menor ou mais provável valor de bin. O atribuidor 16 pode ainda ser configurado para atribuir internamente um contexto a cada símbolo de alfabeto da sequência de símbolos alfabéticos 15 a ser reconstruída com base nas informações contidas nos símbolos de alfabeto, previamente reconstruídos da sequência de símbolos de alfabeto a serem reconstruídos, com cada contexto tendo uma respetiva estimativa de distribuição de probabilidade associada e, para adaptar a estimativa de distribuição de probabilidade a cada contexto a uma estatística de símbolo atual, baseada em valores de símbolos de símbolos de alfabeto previamente reconstruídos, ao qual o respetivo contexto é atribuído. 0 contexto pode levar em conta uma relação espacial ou vizinhança de posições às quais os elementos de sintaxe pertencem, como na codificação de vídeo ou imaqem, ou mesmo em tabelas, em caso de aplicações financeiras. Em seguida, a medida para a estimativa da distribuição de probabilidade para cada símbolo de alfabeto pode ser determinada com base na estimativa de distribuição de probabilidade associada ao contexto atribuído ao respetivo símbolo de alfabeto, por exemplo quantificando a estimativa de distribuição de probabilidade associada ao contexto atribuído ao respetivo símbolo de alfabeto para um, de uma pluralidade de representantes de estimativa de distribuição de probabilidade, a fim de obter a medida para a estimativa da distribuição de probabilidade. 0 seletor pode ser confiqurado de tal modo que uma associação surjetiva seja definida entre a pluralidade de codificadores de entropia e a pluralidade de representantes de estimativa de distribuição de probabilidade, isto é, cada codificador de entropia tem pelo menos uma estimativa de distribuição de probabilidade representativa associada a ela, mas mais de uma estimativa de distribuição de probabilidade representativa podem estar associadas a um codificador de entropia. A associação pode até ser bijetiva. 0 seletor 18 pode ser confiqurado para alterar um mapeamento de quantificação a partir de um intervalo das estimativas de distribuição de probabilidade, para a pluralidade de representantes de estimativa de distribuição de probabilidade, de uma forma predeterminada pré-determinada dependendo de símbolos de alfabeto previamente reconstruídos da sequência de símbolos alfabéticos ao lonqo do tempo. Ou seja, o seletor 18 pode alterar os tamanhos dos passos de quantificação, isto é, os intervalos de distribuições de probabilidade mapeados nos índices de probabilidade individuais que, por sua vez, podem estar associados de forma surjetiva com os descodificadores de entropia individuais. A pluralidade de descodificadores de entropia 22, por sua vez, pode ser configurada para adaptar, à sua maneira de converter símbolos alfabéticos em fluxos de bits, que respondem a uma alteração no mapeamento de quantificação. Por exemplo, cada descodificador de entropia 22 pode ser otimizado para, isto é, pode ter uma taxa de compressão ótima, para uma certa estimativa de distribuição de probabilidade dentro do respetivo intervalo de quantificação de estimativa de distribuição de probabilidade, e pode alterar o seu mapeamento de sequência de código / símbolo de modo a adaptar a posição desta determinada estimativa de distribuição de probabilidade, dentro da respetiva probabilidade de intervalo de quantificação da estimativa de distribuição, após uma alteração deste último, de modo a ser otimizado. 0 seletor pode ser configurado para alterar o mapeamento de quantificação, de forma que as taxas, pelas quais os símbolos de alfabeto são recuperados a partir da pluralidade de descodificadores de entropia, são feitos menos dispersos. Com respeito ao binarizador 14, é notado que o mesmo pode ser deixado de fora, se os elementos de sintaxe já são binários. Para além disso, dependendo do tipo de descodificador 22, a existência dos buffers 20 não é necessária.
Adicionalmente, os buffers podem ser integrados nos descodificadores.
Até agora, foram descritos detalhes para o codificador PIPE 104 e o descodif icador PIPE 202 na Fig. la e 2, em relação à Fig. 3 e Fig. 4, os quais, se forem como tal implementados nos aparelhos da Fig. la e Fig. 2, conduzem a uma saída paralela de fluxo de bits, na qual os fluxos de bits parciais VLC e PIPE são conduzidos em paralelo. Em seguida, são descritas possibilidades de como combinar os fluxos de bits parciais PIPE para serem, então, transmitidos ao longo do fluxo de bits VLC em paralelo, ou com intercalação secundária de ambos os fluxos de bits, isto é, o fluxo de bits VLC e o fluxo de bits PIPE intercalado.
Terminação de sequências de simbolos de fonte finitas
Nos descodificadores e codificadores PIPE, a codificação e decodificação pode ser feita para um conjunto finito de simbolos de origem. Muitas vezes é codificada uma certa quantidade de dados, como uma imagem fixa, um quadro ou campo de uma sequência de video, uma faixa de uma imagem, uma faixa de um quadro ou um campo de uma sequência de video, ou um conjunto de sucessivas amostras de áudio, etc. Em geral, para conjuntos finitos de simbolos de fonte, os fluxos de bits parciais, que são criados no lado do codificador, têm de ser terminados, isto é, tem de ser assegurado que todos os simbolos de fonte possam ser descodificados a partir dos fluxos de bits parciais, transmitidos ou armazenados. Depois do último bin ser inserido no correspondente buffer de bins 8, o codificador de bins 10 tem de assegurar que uma palavra de código completa é escrita no fluxo de bits parcial 12. Se o codificador bin 10 representa um motor de codificação de aritmética binária, a palavra codificada aritmética tem de ser terminada. Se o codificador bin 10 representa um codificador de entropia, que implementa um mapeamento direto de sequências de bin em palavras de código, a sequência de bins que é armazenada no buffer de bins, depois de escrever o último bin para o buffer de bins, pode não representar uma sequência de bins que está associada a uma palavra de código, i.e., pode representar um prefixo de duas ou mais sequências de bins que estão associadas a palavras de código. Nesse caso, qualquer uma das palavras de código associadas a uma sequência de bins, que contenha a sequência de bins no buffer de bins como prefixo, tem de ser escrita no fluxo de bits parcial (o buffer de bins tem de ser esvaziado) . Isso pode ser feito inserindo bins, com um valor particular ou arbitrário, no buffer de bins até que uma palavra de código seja escrita. 0 codificador de bins pode selecionar uma das palavras de código com um comprimento mínimo (para além da propriedade que a sequência de bins associada deve conter a sequência de bins, no buffer de bins, tem como prefixo). No lado do descodificador, o descodificador de bins 22 pode decodificar mais bins, num fluxo de bins parcial, do que o necessário para a última palavra de código. Estes bins não solicitados pelo seletor de buffer de bins 18 e são descartadas e ignoradas. A descodificação do conjunto finito de símbolos é controlada por pedidos de símbolos de fonte descodificados. Se nenhum outro símbolo de fonte for pedido, para uma quantidade, de dados, a descodificação é terminada.
Transmissão e multiplexing de fluxos de bits parciais
Os fluxos de bits parciais 12, que são criados pelo codificador PIPE, podem ser transmitidos separadamente, ou podem ser multiplexados num único fluxo de bits, ou as palavras de código dos fluxos de bits parciais podem ser intercaladas num único fluxo de bits.
Cada fluxo de bits parcial, para uma determinada quantidade de dados, pode ser escrito num pacote de dados. A quantidade de dados pode ser um conjunto arbitrário de símbolos de fonte, tais como uma imagem fixa, um campo ou um quadro de uma sequência de vídeo, uma faixa de uma imagem fixa, uma faixa de um campo ou de um quadro de uma sequência de vídeo ou um quadro de amostras de áudio, etc.
Dois ou mais dos fluxos de bits parciais, para uma determinada quantidade de dados, ou todos os fluxos de bits parciais, para uma quantidade de dados, podem ser multiplexados num pacote de dados. A estrutura de um pacote de dados, que contém fluxos de bits parciais multiplexados, é ilustrada na Figura 5. Ou seja, o pacote de dados mostrado na Fig. 5, pode fazer parte do fluxo intermediário intercalado 132 e 234, respetivamente. 0 pacote de dados 300 consiste num cabeçalho e numa partição para os dados de cada fluxo de bits parcial (para a quantidade de dados considerada). O cabeçalho 300 do pacote de dados contém indicações para o particionamento do (restante do) pacote de dados em segmentos de dados de fluxo de bits 302. Para além das indicações para o particionamento, o cabeçalho pode conter informações adicionais. As indicações para a partição do pacote de dados podem ser as localizações do inicio dos segmentos de dados em unidades de bits ou bytes ou de múltiplos de bits ou de múltiplos de bytes. As localizações do inicio dos segmentos de dados podem ser codificadas como valores absolutos no cabeçalho do pacote de dados, quer relativamente ao inicio do pacote de dados, relativamente ao fim do cabeçalho ou relativamente ao inicio do pacote de dados anterior. As localizações do inicio dos segmentos de dados podem ser codificadas diferencialmente, isto é, apenas é codificada a diferença entre o inicio de um segmento de dados atual e uma previsão para o inicio do segmento de dados. A previsão pode ser derivada com base em informações já conhecidas ou transmitidas, tais como o tamanho global do pacote de dados, o tamanho do cabeçalho, o número de segmentos de dados no pacote de dados ou a localização do inicio dos segmentos de dados precedentes. A localização do inicio do primeiro pacote de dados pode não ser codificada, mas inferida com base no tamanho do cabeçalho do pacote de dados. No lado do descodificador, as indicações de partição que são transmitidas são utilizadas para derivar o começo dos segmentos de dados. Os segmentos de dados são então utilizados como fluxos de bits parciais e os dados contidos nos segmentos de dados são introduzidos nos correspondentes descodificadores de bins numa ordem sequencial.
Existem várias alternativas para multiplexar os fluxos de bits parciais 12 num pacote de dados. Uma alternativa, que pode reduzir as informações secundárias requeridas, em particular para casos em que as dimensões dos fluxos de bits parciais são muito semelhantes, é ilustrada na Fig. 6. A carga útil do pacote de dados, isto é, o pacote de dados 310 sem o seu cabeçalho 311, é dividida em segmentos 312 de um modo predefinido. Como exemplo, a carga útil do pacote de dados pode ser dividida em segmentos da mesma dimensão. Em seguida, cada segmento é associado a um fluxo de bits parcial ou à primeira parte de um fluxo de bits parcial 313. Se um fluxo de bits parcial for maior do que o segmento de dados associado, o seu restante 314 é colocado no espaço não utilizado na extremidade de outros segmentos de dados. Isso pode ser feito de forma que a parte restante de um fluxo de bits é inserida na ordem inversa (a partir do final do segmento de dados), o que reduz a informação secundária. A associação dos remanescentes dos fluxos de bits parciais aos segmentos de dados e, quando mais de um desses remanescentes é adicionado a um segmento de dados, o ponto de inicio para um ou mais dos remanescentes tem de ser sinalizado no interior do fluxo de bits, ex. no cabeçalho do pacote de dados.
Intercalação de palavras de código de comprimento variável
Para algumas aplicações, a multiplexação acima descrita, sobre as correntes de bits parciais 12 (para uma quantidade de símbolos de fonte) num pacote de dados pode ter as seguintes desvantagens: Por um lado, para pacotes de dados pequenos, o número de bits para a informação secundária, que é necessário para sinalizar o particionamento, pode tornar-se significativo em relação aos dados atuais nos fluxos de bits parciais, o que finalmente reduz a eficiência de codificação. Por outro lado, a multiplexagem pode não ser adequada para aplicações que requerem um baixo desfasamento (por exemplo, para aplicações de videoconferência). Com a multiplexagem acima descrita, o codificador PIPE não pode iniciar a transmissão de um pacote de dados antes que os fluxos de bits parciais tenham sido completamente criados, uma vez que as localizações do início das partições não são conhecidas antes. Além disso, em geral, o descodificador PIPE tem de esperar até receber o inicio do último segmento de dados antes de poder iniciar a descodificação de um pacote de dados. Para aplicações como sistemas de videoconferência, estes desfasamentos podem acumular-se a um desfasamento global adicional do sistema de várias imagens de video (em particular para taxas de bits gue estão perto da taxa de transmissão de bits e para codificadores / descodificadores que requerem quase o intervalo de tempo entre duas imagens para codificar / decodificar uma imagem) , o que é critico para tais aplicações. Para superar as desvantagens de certas aplicações, o codificador PIPE pode ser configurado de uma forma que as palavras de código que são geradas pelos dois ou mais codificadores de bins são intercaladas num único fluxo de bits. 0 fluxo de bits, com as palavras de código intercaladas, pode ser enviado diretamente para o descodificador (quando se negligencia um pequeno desfasamento do buffer, ver abaixo). No lado do descodificador PIPE, os dois ou mais descodificadores de bins leem as palavras de código diretamente a partir do fluxo de bits na ordem de descodificação. A descodificação pode ser iniciada com o primeiro bit recebido. Além disso, não é necessária nenhuma informação secundária para sinalizar a multiplexação (ou intercalação) dos fluxos de bits parciais.
Na Fig. 7 é apresentada a estrutura básica de um codificador PIPE com intercalação de palavras de código. Os codificadores de bins 10 não escrevem as palavras de código diretamente para os fluxos de bits parciais, mas estão ligados a um único separador de palavras de código 29, a partir do qual as palavras de código são escritas, para o fluxo de bits 34, por ordem de codificação. Os codificadores de bins 10 enviam pedidos para uma ou mais entradas de buffer de palavras de código 28, para o buffer de palavras de código 29, e depois enviam as palavras de código 30 para o buffer de palavras de código 29, que são armazenadas nas entradas reservadas do buffer. As palavras de código (em geral de comprimento variável) 31, do buffer de palavras de código 29, são acedidas por um escritor de palavras de código 32, que grava os correspondentes bits 33 no fluxo de bits produzido 34. 0 buffer de palavras de código 29 funciona como um buffer de primeiro em entrar primeiro a sair. As entradas de palavras de código, que são reservadas anteriormente, são escritas anteriormente para o fluxo de bits.
Numa generalização adicional, são possíveis múltiplos buffers de código de código e fluxos de bits parciais 12, em que o número de buffers de palavras de código é inferior ao número de codificadores de bin. Um codificador de bins 10 reserva uma ou mais palavras de código no buffer de palavras de código 29, pelo que a reserva das uma ou mais palavras de código no buffer de palavras de código é ativada por certos eventos no buffer de bins 8 conectado. O buffer de palavras de código 2 9 pode ser operado de uma maneira que o descodif icador PIPE possa descodificar instantaneamente o fluxo de bits 34 que corresponde a 132 na Fig. la e 134 na Fig. 2, respetivamente. A ordem de codificação, na qual as palavras de código são escritas para o fluxo de bits, é a mesma que a ordem na qual as palavras de código correspondentes são reservadas no buffer de palavras de código. Cada codificador de bins 10 pode reservar uma palavra de código, sendo a reserva acionada por um determinado evento no buffer de bins conectado. Cada codificador de bins 10 pode reservar mais de uma palavra de código, sendo a reserva acionada por um determinado evento no buffer de bins conectado. Os codificadores de bins 10 podem reservar uma quantidade diferente de palavras de código, onde a quantidade de palavras de código que são reservadas por esse codificador de bins específico pode ser dependente do codificador de bins específico e / ou outras propriedades do buffer de bins / bin específico, à medida de probabilidade associada, o número de bits já escritos, etc.). 0 buffer de palavra de código pode operar da seguinte maneira: se um novo bin 7 é enviado para um buffer de bins específico 8, e o número de bins já armazenados no buffer de bins é zero, e não existe atualmente nenhuma palavra de código reservada no buffer de bins de palavras de código o codificador de bins que está ligado a esse buffer de bins específico, o codificador de bins 10 ligado envia um pedido para o buffer de palavras de código, pelo qual uma ou mais entradas de palavras de código são reservadas no buffer de palavras de código 29 para o codificador de bins específico. As entradas de palavras de código podem ter um número variável de bits; Um limite superior para o número de bits num buffer de entrada é conferido normalmente pelo tamanho máximo da palavra de código para o codificador de bin correspondente. A palavra de código seguinte, ou as palavras de código seguintes, que são produzidas pelo codificador de bins (para o qual a entrada de palavra de código ou as entradas de palavra de código foram reservadas) são armazenadas na entrada reservada ou entradas do buffer de palavras de código. Se todas as entradas reservadas de buffer, no buffer de palavras de código, para um determinado codificador de bins, são preenchidas com palavras de código e o próximo bin é enviado para o buffer de bins que está conectado com esse determinado codificador de bins, uma ou mais palavras de código novas são reservadas no buffer de palavras de código para o codificador de bins específico, etc. O buffer de palavras de código 29 representa, de certa forma, um buffer de primeiro a entrar - primeiro a sair. As entradas de buffer são reservadas em ordem sequencial. As palavras de código para as quais as entradas de buffer correspondentes foram reservadas anteriormente são gravadas anteriormente no fluxo de bits. O escritor de palavras de código 32 verifica o estado buffer de palavras de código 29, continuamente ou depois de uma palavra de código 30 ser escrita no buffer de palavras de código 29. Se a primeira entrada buffer contiver uma palavra de código completa (isto é, a entrada de buffer não é reservada, a palavra de código 31, correspondente e a entrada de buffer correspondente, é removida do buffer de palavras de código 20 e os bits da palavras de código 33 são escritos no fluxo de bits. Este processo é repetido até que a primeira entrada de buffer não contenha uma palavra de código (ou seja, é reservada ou livre). No final do processo de descodificação, isto é, se todos os símbolos de fonte da quantidade de dados considerada tiverem sido processados, o buffer de palavras de código tem de ser descarregado. Para esse processo de descarga, o seguinte é aplicado para cada buffer de bins / codificador de bins, como primeiro passo: Se o buffer de bins contém bins, um bin com um determinado valor ou de valor arbitrário é adicionado até que a sequência de bins resultante represente uma sequência de bins que está associada a uma palavra de código (como mencionado acima, uma maneira preferida de adicionar bins é adicionar esses valores de bin que produzem a palavra de código mais curta possível - ou uma destas - que está associada a uma sequência de bins que contenha o prefixo para o conteúdo original do buffer de bins), então a palavra de código é gravada na próxima entrada reservada para o codificador de bins correspondente (e o correspondente) buffer de bins é esvaziado. Se mais de uma entrada de buffer tiver sido reservada, para um ou mais codificadores de bins, o buffer de palavras de código ainda pode conter entradas de palavras de código reservadas. Nesse caso, estas entradas de palavra de código são preenchidas com palavras de código arbitrárias, mas válidas para os codificadores de bins correspondentes. De preferência, é inserida a palavra de código válida mais curta ou uma das palavras de código válidas mais curtas (se houver várias). Finalmente, todas as palavras de código restantes no buffer de palavras de código são gravadas no fluxo de bits.
Dois exemplos para o estado do buffer de palavras de código são ilustrados na Fig. 8. No exemplo (a), o buffer de palavras de código contém 2 entradas que são preenchidas com uma palavra de código e 5 entradas reservadas. Além disso, é marcada a próxima entrada livre do buffer. A primeira entrada é preenchida com uma palavra de código (isto é, o codificador de bins 2 apenas escreveu uma palavra de código para uma entrada previamente reservada). Na próxima etapa, essa palavra de código será removida do buffer de palavras de código e gravada no fluxo de bits. Em seguida, a primeira palavra de código reservada para o codificador de bins 3 é a primeira entrada do buffer, mas esta entrada não pode ser removida do buffer de palavras de código, uma vez que está apenas reservada, mas nenhuma palavra de código foi gravada nesta entrada. No exemplo (b), o buffer de palavras de código contém 3 entradas que são preenchidas com uma palavra de código e 4 entradas reservadas. A primeira entrada é marcada como reservada e, portanto, o escritor de palavras de código não pode escrever uma palavra de código para o fluxo de bits. Apesar de 3 palavras de código estarem contidas no buffer de palavras de código, o escritor de palavras de código tem que esperar até que uma palavra de código seja escrita na primeira entrada do buffer reservada para o codificador de bins 3. Note-se que as palavras de código devem ser escritas na ordem em que foram reservadas, a fim de poder inverter o processo no descodificador (ver abaixo) . A estrutura básica de um descodificador PIPE com intercalação de palavras de código é mostrada na Fig. 9. Os descodificadores de bins 10 não leem as palavras de código diretamente a partir de fluxos de bits parciais separados, mas estão ligados a um buffer de bits 38, a partir do qual as palavras de código 37 são lidas em ordem de codificação. Deve notar-se que o buffer de bits 38 não é necessariamente preciso, uma vez que as palavras de código também podem ser lidas diretamente a partir do fluxo de bits. O buffer de bits 38 é incluído principalmente na ilustração para diferentes aspetos da cadeia de processamento. Os bits 39 do fluxo de bits 40 com palavras de código intercaladas, que corresponde assim ao fluxo de bits 234 na Fig. 2, são sequencialmente inseridos no buffer de bits 38, o qual representa um buffer de primeira primeiro a entrar - primeiro a sair.
Se um descodificador de bins especifico 22 recebe um pedido para uma ou mais sequências de bins 35, o descodif icador de bins 22 lê uma ou mais palavras de código 37 a partir do buffer de bits 38 através de pedidos de bits 36. 0 descodif icador PIPE pode instantaneamente descodificar os símbolos de fonte. Note-se que o codificador PIPE (conforme descrito acima) deve assegurar que as palavras de código são escritas na mesma ordem, para o fluxo de bits para o qual eles são solicitados pelos descodificadores de bins, através da operação adequada do buffer de palavras de código. No descodificador PIPE, todo o processo de descodificação é acionado por pedidos de símbolos de fonte. Parâmetros, tais como o número de palavras de código que estão reservados no lado do codificador por um codificador de bins específico, e o número de palavras de código que são lidas pelo descodificador de bins correspondente, devem ser iguais. Numa outra generalização, são possíveis múltiplos buffers de palavras de código e de fluxos de bits parciais, em que o número de buffers de bits é menor do que o número de descodificadores bin. Um descodif icador de bins 22 lê uma ou mais palavras de código, a partir do buffer de bits 38, num instante de tempo, pelo que a leitura da uma ou mais palavras de código, a partir do buffer de bits, é ativada por certos eventos no buffer de bins 20 ligado. O descodif icador pode ser operado de maneira a que uma ou mais palavras de código sejam lidas, quando um pedido para um bin 19 é enviado para um buffer de bins específico 20, e o buffer de bins não contém quaisquer bins. Mas também é possível desencadear a leitura de palavras de código por outros eventos, ex. se o número de bins no buffer de bins estiver abaixo de um determinado limiar predefinido. Cada descodificador de bins 22 pode ler uma palavra de código, sendo a leitura acionada por um determinado evento no buffer de bins ligado. Alternativamente, cada descodif icador de bins 22 pode ler mais de uma palavra de código, sendo a leitura acionada por um determinado evento no buffer de bins binário ligado. Os descodificadores de bins 22 podem ser lidos a uma quantidade diferente de palavras de código, onde a quantidade de palavras de código que são lidas por um descodificador de bins especifico pode ser dependente do descodificador de bins especifico e / ou outras propriedades do buffer de bins / especifico bins binário (tal como a medida de probabilidade associada, o número de bits já lidos, etc.). A leitura das palavras de código a partir do buffer de bits pode ser operada da seguinte forma: se um novo pedido de bins 19 é enviado pelo seletor de buffer de bins 18 para um buffer de bins especifico 20, e o número de bins no buffer de bins é zero, o codificador de bins 22 conectado lê uma ou mais palavras de código 37 do buffer de bits 38, através do pedido 36 ao buffer de bits 38. O descodif icador de bins 22 converte as palavras de código de lidas 37 em sequências de bins 21 e armazena estas sequências de bins no buffer de bins ligado 20. Como resposta final ao pedido de um bin 19, o primeiro bin inserido é removido do buffer de bins 20 e enviado para o seletor de buffers de bins 18. Como resposta a outros pedidos de bins, os bins restantes no buffer de bins são removidos até que o buffer de bins esteja vazio. Um pedido adicional de bins aciona o descodificador de bins para leitura de uma ou mais novas palavras de código a partir do buffer de bits, etc. O buffer de bits 38 representa um buffer de primeiro a entrar-primeiro a sair de uma dimensão predefinida e é continuamente preenchido com bits 39 do fluxo de bits 40. De modo a assegurar que as palavras de código são escritas, para o fluxo de bits, da mesma maneira que são solicitadas, pelo processo de descodificação, o buffer de palavras de código, no lado do codificador, pode ser operado da maneira descrita acima.
Deste modo, cada um da pluralidade de descodificadores de entropia pode ser um descodificador de comprimento variável, configurado para mapear palavras de código de comprimentos fixos para sequências de símbolos, de comprimentos variáveis e, uma entrada de palavra de código, tal como a saída do buffer de palavras de código 43, pode ser proporcionada para receber um único fluxo de palavras de código intercaladas. A pluralidade de descodificadores de entropia 22 pode ser configurada para recuperar as palavras de código, da entrada de palavras de código, numa determinada ordem sequencial, dependendo da ordem em que os símbolos da sequência de símbolos a serem reconstruídos, como recuperados pelo seletor 18, a partir da pluralidade de descodificadores de entropia, resultam numa nova sequência de símbolos a ser mapeada, a partir de uma nova palavra de código, nos respetivos descodificadores de entropia.
Intercalação de palavras de código de comprimento variável com restrição de desfasamento baixa A intercalação de palavras de código descrita, para a codificação PIPE, não requer que qualquer informação de particionamento seja enviada como informação secundária. E, uma vez que as palavras de código são intercaladas no fluxo de bits, o desfasamento é geralmente pequeno. Contudo, não é garantido que uma determinada restrição de desfasamento (por exemplo, especificada por um número máximo de bits que são armazenados no buffer de palavras de código) é obedecido. Além disso, o tamanho do buffer requerido para o buffer de palavras de código pode, teoricamente, tornar-se muito grande. Quando se considera o exemplo na Fig. 8 (b) , pode ser acontecer que mais nenhum bin seja enviado para o buffer de bins 3, e portanto, o codificador de bins 3 não enviará nenhuma nova palavra de código para o buffer de palavras de código até que o processo de descarga, no final do pacote de dados seja aplicado. Então, todas as palavras de código, para codificadores de bins 1 e 2, teriam de esperar até o final dos pacotes de dados, antes que eles possam ser gravados no fluxo de bits. Esta desvantagem pode ser contornada pela adição de um mecanismo extra ao processo de codificação PIPE (e também ao processo de descodificação PIPE como descrito mais tarde). 0 conceito básico desse mecanismo adicional é que, se uma medida relacionada com o desfasamento, ou um limite superior do desfasamento (ver abaixo), excede o limiar especificado, a primeira entrada reservada de buffer é preenchida por limpeza do buffer de bins correspondente (usando um mecanismo similar no final de um pacote de dados). Através de tal mecanismo, o número de entradas em espera no buffer é reduzido até a medida de desfasamento associada ser inferior ao limiar especificado. No lado do descodif icador, os bins que foram inseridos no lado do codificador, para obedecer à restrição de desfasamento, devem ser descartados. Para esta remoção de bins pode-se usar basicamente o mesmo mecanismo tal como o no lado do codificador. Em sequida, são descritas duas possibilidades para tal controlo de desfasamento.
Numa das possibilidades, a medida para o desfasamento (ou um limite superior do desfasamento) é o número de entradas ativas no buffer de palavras de código, onde o número de entradas ativas no buffer é o número de entradas reservadas no buffer mais o número de entradas no buffer que contêm as palavras de código. Note-se que a primeira entrada no buffer é sempre uma entrada reservada nesse buffer ou uma entrada livre no buffer, uma vez que se a primeira entrada no buffer contém uma palavra de código, essa palavra de código é gravada no fluxo de bits. Se, por exemplo, o desfasamento máximo permitido no buffer (como determinado pela aplicação) é de D bits e o tamanho máximo de palavras de código para todos os codificadores de bins é L, um limite inferior, para o número máximo de palavras de código, que podem estar contidas no buffer de palavras de código, sem violar
a restrição de desfasamento, pode ser calculada por N = D / L. A medida de desfasamento D, em bits, não é requerida pelo sistema, mas o número máximo de palavras de código N deve ser conhecido, tanto para o codificador, como para o descodif icador. 0 número máximo de entradas de palavras de código N no buffer pode ser fixado pela aplicação. Alternativamente, o número máximo de entradas de palavras de código N no buffer pode ser sinalizado dentro da corrente de bits, por exemplo, no cabeçalho do pacote de dados (ou cabeçalho de faixa) ou num conjunto de parâmetros, que está incluído no fluxo de bits. Se um codificador de bins 10 envia uma solicitação para a reserva de uma ou mais entradas novas no buffer de palavras de código 29, o processo a seguir é executado antes de ser reservada uma nova entrada no buffer de palavras de código é reservada (isto é, é executada várias vezes se várias entradas no buffer de codificação forem reservados por um pedido): Se o número de entradas ativas no buffer atual mais 1 (levando em conta a entrada que será reservada em seguida) for maior que o número máximo de entradas N, no buffer de palavras de código, a primeira entrada no buffer (que é reservada) é removida pelo processo, descrito abaixo) até que o número de entradas ativas atuais mais 1 seja inferior ou igual ao valor máximo do número de entradas N no buffer de palavras de código. A remoção de uma entrada reservada, no buffer, é semelhante à remoção que se efetua no final de um pacote de dados: O codificador de bins 10, que reservou a correspondente primeira entrada no buffer, é descarregado pela adição de bins com valores específicos ou arbitrários, ao buffer de bins ligado 8, até que a sequência de bins resultante represente uma sequência de bins que está associada a uma palavra de código, sendo então a palavra de código escrita para a entrada reservada do buffer e é finalmente adicionada ao fluxo de bits (enquanto esvazia o buffer de bins e remove a entrada de buffer previamente reservada). Conforme mencionado acima, uma maneira preferida de adição de bins ao buffer de bins é adicionar esses bins, que produzem a palavra de código mais curta possível. No lado do descodificador, um processo semelhante é executado para descartar os bins que foram adicionados para obedecer à restrição de desfasamento. Portanto, o descodificador mantém um contador C, que conta as palavras de código que foram lidas a partir do buffer de bits (este contador pode ser mantido no buffer de bits). Este contador C é inicializado (por exemplo, com zero) no início da descodificação de um pacote de dados e é aumentado por um após uma palavra de código ser lida. Além disso, cada descodificador de bins 22 contém um contador Cx, que armazena o valor do contador de palavras de código C antes da última palavra de código ter sido lida pelo descodif icador de bins correspondente 22. Ou seja, quando um descodificador de bins 22 específico lê uma nova palavra de código, o seu contador Cx é definido para ser igual a C, como um primeiro passo, e então a palavra de código é lida a partir do buffer de bits. Quando uma solicitação para um binl9 é enviada para um buffer de bins específico 20, e a diferença (C - Cx) entre o contador de palavras de código geral C e o contador Cx do descodif icador de bins ligado 22 é maior do que o número máximo de entradas N, no buffer de palavras de código, todas os bins que estão atualmente armazenados no buffer de bins específico 20 são descartadas e Ignoradas. Para além desta etapa adicional, a descodificação é operada como o descrito acima. Se o buffer de bins 20, para a qual é enviada um pedido para um bin 19 está vazia (quer porque todas os bins já foram removidos ou porque o mecanismo de baixo desfasamento descartou todos os bins no primeiro passo, depois de ter sido recebida a solicitação do bin), o descodificador de bins ligado 22 lê uma ou mais novas palavras de código do buffer de bits 38, etc. A medida para o desfasamento (ou o limite superior do desfasamento) pode ser a soma dos comprimentos máximos de palavras de código para as entradas ativas no buffer de palavras de código, do buffer de palavras de código, em que o comprimento máximo das palavras de código, para uma entrada específica, depende do bin decodificado que está associado a essa entrada de buffer. Como ilustração, os comprimentos máximos de palavras de código para as entradas de buffer são indicados nos exemplos em 6. Note-se novamente que, a primeira entrada de buffer é sempre uma entrada de buffer reservada ou uma entrada de buffer livre, uma vez que, se a primeira entrada de buffer contém uma palavra de código, esta palavra de código é gravada no fluxo de bits. Estabelecer que o desfasamento de buffer máximo permitido (como determinado pela aplicação) é de D bits. Este desfasamento máximo D do buffer deve ser conhecido, tanto pelo codificador como pelo descodificador. 0 desfasamento máximo D, do buffer, pode ser fixado pela aplicação. 0 desfasamento máximo D do buffer pode ser sinalizado dentro do fluxo de bits, por exemplo, no cabeçalho do pacote de dados (ou cabeçalho de faixa), ou num conjunto de parâmetros, que está incluído no fluxo de bits. Pode ser sinalizado em unidades de bits, ou bytes, ou num múltiplo de bits, ou num múltiplo de bytes. Se um codificador de bins 10 envia uma solicitação para a reserva de uma ou mais entradas de buffer novas para o buffer de palavras de código 29, o processo a seguir é executado antes de uma nova entrada de buffer de palavras de código ser reservada (isto é, é executada várias vezes se várias entradas de buffer de codificação são reservados por um pedido).
Se a soma dos comprimentos máximos de palavras de código para todas as entradas ativas atuais, no buffer, mais o comprimento máximo de palavras de código para a entrada no buffer, que será reservada, é maior do que o desfasamento máximo D do buffer então, a primeira entrada no buffer (que é reservada), é removida, pelo processo acima descrito, até que a soma dos comprimentos máximos de palavras de código, para todas as entradas ativas no buffer, mais o comprimento máximo de palavras de código, que será reservada para entrada no buffer, seja inferior ou igual ao desfasamento máximo D do buffer. Como um exemplo, vamos considerar o exemplo na Fig. 8 (b) . A soma dos comprimentos máximos das palavras de código para todas as entradas de buffer atualmente ativas é 29. Vamos supor que o desfasamento máximo D do buffer é igual a 32. Se a entrada seguinte do buffer for reservada pelo codificador de bins 2, para que o comprimento máximo da palavra de código seja igual a
3, a primeira entrada de buffer não é removida, uma vez que 29 + 3 não é maior que 32. Mas, se a entrada sequinte do buffer, que é reservada pelo codificador de bins 1, tiver um comprimento máximo de palavras de códiqo iqual a 7, a primeira entrada do buffer é esvaziada, uma vez que 29 + 7 é maior do que 32. A limpeza da entrada reservada do buffer é feita como o acima descrito (adicionando bins com valores específicos ou arbitrários aos valores correspondentes no buffer de bins).
No lado do descodificador, é executado um processo semelhante para remoção dos bins que foram adicionados para obedecer à restrição de desfasamento. Por conseguinte, o descodificador mantém um contador C, que conta o comprimento máximo de palavras de código das palavras de código que foram lidas a partir do buffer de bits (este contador pode ser mantido no buffer de bits). Note-se que os comprimentos máximos das palavras de código que estão associadas a diferentes descodificadores de bins podem ser diferentes. 0 contador C é inicializado (por exemplo, com zero) no início da descodificação de um pacote de dados e é aumentado depois de uma palavra de código ser lida. Este contador não é aumentado pelo comprimento real das palavras-chave lidas, mas pelo seu comprimento máximo. Ou seja, se uma palavra de código é lida por um determinado descodificador de bins e o comprimento máximo da palavra de código, que está associado com a tabela de palavras de código utilizada pelo determinado descodificador de bins é Lx (um descodificador de bins diferente pode estar associado a um comprimento máximo de palavras de código diferente), C é aumentado por Lx. Além do contador geral C, cada descodificador de bins 22 contém um contador Cx, que armazena o valor do contador de palavras de código C antes da última palavra de código ter sido lida pelo correspondente descodificador de bins 22. Ou seja, quando um determinado descodificador de bins 22 lê uma nova palavra de código, o seu contador Cx é ajustado para ficar igual a C, num primeiro passo sendo, e em seguida, a palavra de código lida a partir do buffer de bits. Quando um pedido de bins 19 é enviado para um buffer de bins específico 20 e a diferença (C - Cx) entre o contador geral C e o contador Cx do descodif icador de bins ligado 22 é maior do que o valor máximo de desfasamento D, todos os bins, que estão atualmente armazenados nesse buffer de bins específico 20, são descartados e ignorados. Para além desta etapa adicional, a descodificação é operada como o descrito acima. Se é enviado um pedido de bins 19, ao buffer de bins 20, e este estiver vazio (porque todas os bins já foram removidos ou porque o mecanismo de baixo desfasamento descartou todas os bins na primeira etapa após o recebimento do pedido de bins), o descodificador de bins ligado 22 lê uma ou mais palavras de código novas a partir do buffer de bits 38, etc.
Deste modo, a pluralidade de descodificadores de entropia 22 e o seletor 18 podem ser configurados para remover intermitentemente sufixos de sequências de símbolos de modo a estas não participarem na formação da sequência de símbolos a reconstruir 29. A remoção intermitente pode ser realizada em eventos em que um determinado número de palavras de código, que tenha sido recuperado da entrada de palavras de código, pela pluralidade de descodificadores de entropia, entre duas recuperações consecutivas de palavras de código de um respetivo descodificador de entropia, a partir da entrada de palavras de código, cumpra um critério predeterminado. A pluralidade de codificadores de entropia e o buffer de palavras de código podem, por sua vez, ser configurados para estender, também de forma intermitente, as sequências de símbolos atualmente encaminhados mas ainda não mapeados, para sequências de símbolos válidas, através de símbolos de "ignorar" tendo os símbolos atualmente encaminhados mas não ainda mapeados como prefixo, mapear as sequências de símbolos, assim estendidas, em palavras de código, introduzir as palavras de código, assim obtidas, nas entradas de palavras de código reservadas e remover as entradas de palavra de código. A expansão intermitente, entrada e remoção, podem ter lugar em eventos onde um número de entradas de palavras de código reservadas, mais um número de entradas de palavras de código que têm palavras de código, neste introduzidas, cumprem um pré-determinado critério. Os critérios predeterminados podem ter em conta os comprimentos máximos de palavras de código da pluralidade de pares de codificador / descodificador.
Para alguns tipos de arquitetura, o modo acima descrito, de intercalação de palavras de código, pode resultar numa desvantagem, em termos da complexidade de descodificação. Conforme ilustrado na Fig. 9, todos os descodificadores de bins 22 leem palavras de código (no caso geral, palavras de código de comprimento variável), a partir de um único buffer de bits 38. A leitura das palavras de código não pode ser feita em paralelo, uma vez que as palavras de código devem ser lidas na ordem correta. Isso significa que um determinado descodificador de bins deve aguardar até que outros descodificadores de bins terminem a leitura das palavras de código. E quando a complexidade da leitura das palavras de código de comprimento variável é significativa, em relação ao restante do processo de descodificação (parcialmente paralelizado), esta verificação das palavras de código de comprimento variável, pode ser um problema para todo o processo de descodificação. Existem algumas variações, que podem ser utilizadas, para reduzir a complexidade da verificação a partir do buffer de bit único, alguns dos quais serão descritos a seguir. Existe, por exemplo, um único conjunto de palavras de código (representando, por exemplo, um código de prefixo livre de redundância) e em que o conjunto de palavras de código, que é utilizado para cada descodif icador de bins 22, é um subconjunto do único conjunto de palavras de código. Note-se que diferentes descodificadores de bins 22 podem utilizar subconjuntos diferentes do único conjunto de palavras de código. Mesmo que os conjuntos de palavras de código, que são utilizados por alguns dos descodificadores de bins 22 sejam os mesmos, a sua associação com as sequências bin é diferente para os diferentes descodificadores de bins 22. 0 mesmo conjunto de palavras de código pode ser utilizado para todos os descodificadores de bins 22. Se tivermos um único conjunto de palavras de código, que inclui os conjuntos de palavras de código para todos os descodificadores de bin, como subconjuntos, o parsing das palavras de código pode ser feito fora dos descodificadores de bins, o que pode reduzir a complexidade da verificação e acesso das palavras de código. 0 processo de codificação PIPE não é alterado em relação ao processo acima descrito. 0 processo de descodificação de PIPE modificado é ilustrado na Fig. 10. Um único leitor de palavras de código é alimentado com bits 46 a partir do fluxo de bits 40 e analisa parsivamente as palavras de código de comprimento variável de uma forma geral. As palavras de código de leitura 44 são inseridas num buffer de palavras de código 43, que representa um buffer de primeiro em entrar - primeiro a sair. Um descodif icador de bins 22 envia um pedido para uma ou mais palavras de código 41 para o buffer de palavras de código 43 e, como resposta a esta solicitação, as uma ou mais palavras de código são removidas do buffer de palavras de código (em ordem sequencial) e enviadas para o descodif icador de bins 22 correspondente. Note-se que, nesse caso, a análise parsiva de palavras de código, potencialmente complexa, pode ser feita num processo em segundo plano e não precisando assim de esperar pelos descodificadores de bins. Os descodificadores de bins avaliam as palavras de código já analisadas, uma vez que a análise parsiva de palavras de código, potencialmente complexa, já não forma parte de uma solicitação para o buffer geral. Em vez disso, as palavras de código já analisadas são enviadas para os descodificadores de bins, que também podem ser implementados de uma forma que apenas os indices de palavras de sejam enviados para os descodificadores de bins.
Intercalação de sequências de bits de comprimento fixo
Uma outra forma de reduzir a complexidade do descodificador de PIPE pode ser conseguida quando os descodificadores de bins 22 não leem as palavras de código de comprimento variável, a partir do buffer de bits geral 38, mas em vez disso, leem sequências de bits de comprimento fixo, a partir do buffer de bits geral 38, e adiciona estas sequências de bits de comprimento fixo a um buffer de bits local, no qual cada descodif icador de bins 22 está ligado a um buffer de bits local separado. As palavras de código de comprimento variável são então lidas a partir do buffer de bits local. Assim, o processamento de palavras de código de comprimento variável pode ser feito em paralelo, apenas a verificação e acesso de sequências de bits de comprimento fixo tem de ser feito de forma sincronizada, mas tal verificação, de sequências de bits de comprimento fixo, é normalmente muito rápido, de modo que a complexidade de descodificação geral pode ser reduzida, para alguns tipos de arquiteturas. 0 número fixo de bins que são enviados para um buffer de bits local especifico, pode ser diferente, para o buffer de bits local diferente, e também pode variar ao longo do tempo, dependendo de determinados parâmetros como eventos no descodificador de bins, buffer de bins ou buffer de bits. No entanto, o número de bits, que são lidos por um determinado processo de verificação, não depende dos bits atuais que são lidos durante a verificação especifica, que é a diferença importante para a leitura de palavras de código de comprimento variável. A leitura das sequências de bits de comprimento fixo é acionada por certos eventos nos buffers de bins, descodificadores de bins, ou buffers de bit local. Como exemplo, é possível solicitar a leitura de uma nova sequência de bits de comprimento fixo quando o número de bits, que estão presentes num buffer de bits ligado, cai abaixo de um limiar, predefinido, onde diferentes valores de limiar podem ser utilizados para diferentes buffers de bits. No codificador, tem de ser assegurado que as sequências de bins de comprimento fixo são inseridas na mesma ordem no fluxo de bits, no qual são lidas, a partir do fluxo de bits no lado do descodificador. Também é possível combinar esta intercalação de sequências de comprimento fixo com um controlo de desfasamento reduzido, semelhante aos explicados acima. A seguir, é descrita uma forma de intercalação de sequências de bits de comprimento fixo. A Fig. 11 mostra uma ilustração de uma estrutura de codificador PIPE que intercala sequências de bits de comprimento fixo para dois ou mais codificadores de bins. Em contraste com a Fig. 7, os codificadores de bins 10 não estão ligados a um único buffer de palavras de código. Em vez disso, cada codificador de bins 10 está ligado a um buffer de bits separado 48, que armazena bits para o fluxo de bits parcial correspondente. Todos os buffers de bits 48 estão ligados a um buffer de bits geral 51. O buffer de bits global 51 está ligado a um escritor de bits 53, o qual remove os bits 52 na ordem de codificação / descodificação do buffer de bits geral e escreve os bits removidos 54 para o fluxo de bits 55. Em certos eventos num buffer de bits específico 48, no codificador de bins 10 ligado ou buffer de bins 8, o buffer de bits 48 envia um pedido 49 para o buffer de bits geral 51, através da qual um certo número de bits está reservado no buffer de bits geral 51.
De um modo particular, os buffers de bits 48 e o buffer de bits geral 51 são operados como descrito a seguir. A quantidade de bits que é reservada por um buffer de bits específico 48 é indicada como Nx. Este número de bits Nx pode ser diferente para diferentes buffers de bits 48 e também pode variar ao longo do tempo. O número de bits Nx que são reservados por um buffer de bits específico 48 pode ser fixada ao longo do tempo. As reservas para um número fixo Nx de bits 49 são acionadas com base no número de bits Mx nos buffers de bits 4 8, o número de bits Nx para as solicitações de reserva e o comprimento máximo da palavra de código associada Lx. Note-se que cada codificador de bins 10 pode ser associado a um comprimento máximo diferente de palavra de código Lx. Se um bin 7 for enviado para um buffer de bins especifico 8, e esse buffer de bins especifico 8 está vazio, e não há mais de uma sequência de bits Nx reservada no buffer de bits geral para o buffer de bits 48 que está conectado com o buffer de bins especifico (através de um codificador de bins) , e a diferença Nx - Mx entre o número Nx de bits que são reservados por uma solicitação de reserva do buffer de bits 48 que está ligado (através de um codificador de bins) ao buffer de bins especifico 8 e o número de bits Mx que está atualmente presente neste buffer de bits 48 é menor do que o comprimento máximo da palavra de código Lx que está associada ao correspondente codificador de bins 10, o buffer de bits ligado 49 envia um pedido 49 para a reserva de Nx bits para o buffer de bits geral 51. O buffer de bits geral 51 reserva Nx bits para o buffer de bits especifico 48 e aumenta o seu marcador para a reserva seguinte. Após os bits Nx terem sido reservados no buffer de bits geral, o bin 7 é armazenado no buffer de bins 8. Se este bin único já representa uma sequência de bins, que está associada a uma palavra de código, o codificador de bins 10 remove este bin do buffer de bins 8 e escreve a palavra de código 47 correspondente para o buffer de bits 48 ligado. Caso contrário (este docs de bins único já representa uma sequência bin que está associada a uma palavra de código), mais bins 7 são aceites pelo buffer de bins especifico 8 até que o buffer de bins 8 contenha uma sequência de bins que está associada a uma palavra de código. Neste caso, o codificador de bins ligado 10 remove a sequência de bins 9 do buffer de bins 8 e grava a palavra de código 47 correspondente no buffer de bits 48 ligado. Se o número resultante de bits Mx no buffer de bits 48 é maior ou igual ao número de bits reservados Nx, os bits Nx, que foram escritos pela primeira vez para o buffer de bits 48, são inseridos no espaço anteriormente reservado no buffer de bits geral 51. O mesmo processo, tal como acima especificado, é executado para o próximo bin 7, que é enviado para o buffer de bins específico 8, i.e. verifica-se primeiro se um novo número de bits Nx deve ser reservado no buffer de bits geral (se Nx-Mx for inferior a Lx) e, em seguida, o bin é inserido no buffer de bins 8, etc. 0 escritor de bits escreve as seguências de bits de comprimento fixo, do buffer de bits geral, na ordem em que foram reservados. Se a primeira entrada de comprimento fixo, no buffer de bits geral 51 contiver uma sequência de bits de comprimento fixo, que tenha sido efetivamente inserida no buffer de bits geral (ou seja, não é apenas reservada), o escritor de bits 53 remove os bits, para esta sequência de bits 52, do buffer de bits geral 51 e grava os bits 54 no fluxo de bits. Este processo é repetido até que a primeira entrada de comprimento fixo no buffer de bits geral represente uma entrada reservada ou livre. Se a primeira entrada de comprimento fixo no buffer de bits geral representa uma entrada reservada, o escritor de bits 53 aguarda até esta entrada ser preenchida com bits atuais antes de escrever outros bits 54 para o fluxo de bits 55.
No final de um pacote de dados, os buffers de bins são removidos como o descrito acima. Além disso, os buffers de bits devem ser libertados através da adição de bits, com um determinado valor ou com um valor arbitrário, até que todas as entradas de buffer reservadas no buffer de bits geral sejam preenchidas e escritas no fluxo de bits.
Na fig. 12, são apresentados dois exemplos para o estado possível do buffer de bits geral 51. No exemplo (a), é apresentado um caso em que diferentes codificadores de bins / buffers de bins bits reservam um número diferente de bits. 0 buffer de bits geral contém 3 entradas com sequências de bits de comprimento fixa escritas e 4 entradas com sequências de bits de comprimento fixo reservadas. A primeira entrada de comprimento fixo já contém bits atuais (que devem ter sido inseridos apenas pelo buffer de bits / codificador de bins 2); Esta entrada (isto é, os 8 bits correspondentes) pode ser removida e escrita no fluxo de bits. A entrada seguinte reserva 10 bits para o codificador de bins 3, mas os bits atuais ainda não foram inseridos. Esta entrada não pode ser gravada no fluxo de bits; deve esperar até que os bits atuais sejam inseridos. No segundo exemplo (b) , todos os buffers de bits / codificadores de bins reservam o mesmo número de bits (8 bits). 0 buffer de bits geral contém 4 reservas para sequências de 8 bits e 3 sequências de 8 bits atualmente escritas. A primeira entrada contém uma reserva para 8 bits para o codificador de bins 3. Antes que quaisquer novos bits possam ser escritos, para o fluxo de bits, o escritor de bits tem de esperar até que o buffer de bits / codificador de bins 3 escreva os valores atuais dos 8 bits reservados nesta entrada. A Fig. 13 mostra uma ilustração de a estrutura de um descodificador PIPE que intercala sequências de bits de comprimento fixo. Em contraste com a Fig. 9, os descodificadores de bins 22 não estão ligados a um único buffer de bits. Em vez disso, cada descodificador de bins 22 está ligado a um buúfer de bits separado 58, que armazena bits do fluxo de bits parcial correspondente. Todos os buffers de bits 58 estão ligados a um buffer de bits geral 61. Os bits 62 do fluxo de bits 63 são inseridos no buffer de bits geral 61. Em certos eventos num determinado buffer de bits 58, no descodificador de bins ligado 22 ou no buffer de bins 20, o buffer de bits 58 envia uma solicitação 59 para o buffer de bits geral 61, através da qual é removida uma sequência de comprimento fixo de bits 60 do buffer de bits geral 61 e inserido no buffer de bits especifico 58. As solicitações, para as sequências de bits de comprimento fixo 59 são processadas em ordem sequencial. O buffer de bits geral 61 representa um buffer de primeiro a entrar - primeiro a sair; Os bits que foram inseridos anteriormente no buffer de bits geral são removidos primeiro. Deve notar-se que diferentes buffers de bits 58 podem pedir uma quantidade diferente de bits, os quais podem também variar ao longo do tempo com base em símbolos já descodificados; Mas o número de bits que são pedidos por uma solicitação específica é conhecido no momento em que a essa solicitação é enviada para o buffer de bits geral. Deve notar-se que o buffer de bits geral 61 não é necessariamente requerido, uma vez que as palavras de código também podem ser lidas diretamente a partir do fluxo de bits. 0 buffer de bits geral 61 é incluído na ilustração principalmente para separar claramente os diferentes aspetos da cadeia de processamento.
Os buffers de bits 58 e o buffer de bits geral 61 podem ser operados como descrito a seguir. A quantidade de bits que é solicitada e lida por um buffer de bits particular 58, reconhecido como Nx, e é igual à quantidade de bits que está escrita para o buffer de bits geral pelo buffer de bits correspondente no lado do codificador. Este número de bits Nx pode ser diferente para buffers de bits diferentes 58 e também pode variar ao longo do tempo. De preferência, o número de bits Nx, que é solicitados e lido por um buffer de bits específico 58, pode ser fixado ao longo do tempo. A leitura de um número fixo Nx de bits 60 é acionada com base no número de bits Mx no buffer de bits 58 e o comprimento máximo da palavra de código associada a Lx. Note-se que cada descodif icador de bins 22 pode ser associado a um comprimento máximo de palavra de código diferente Lx. Se uma solicitação para um bin 19 é enviada para um buffer de bins específico 20, e o buffer de bins específico 20 está vazio, e o número Mx de bits no buffer de bits 58, que está ligado (através de um descodificador de bins) ao buffer de bins específico 20 é menor do que o comprimento máximo de palavra de código Lx que está associado com ao correspondente descodif icador de bins 22, o buffer de bits ligado 58 envia uma solicitação 59 para novas sequências de bits Nx para o buffer de bits geral 61. Como resposta a esta solicitação, os primeiros bits Nx são removidos do buffer de bits geral 61 e esta sequência de bits Nx 60 é enviada para o buffer de bits 58, a partir do qual o pedido foi enviado. Finalmente, esta sequência de bits Nx é adicionada ao buffer de bits correspondente 58. Em seguida, a palavra de código seguinte 57 é lida a partir deste buffer de bits, e o descodificador de bins ligado 22 insere a sequência de bins associada 21 no buffer de bins ligado 20. Como resposta final ao pedido original de um bin 19, o primeiro bin é removido do buffer de bins 20 e este bin decodificado 25 é enviado para o seletor 18 de buffer de bins. Quando a próxima solicitação de bins 19 é enviada para o buffer de bins especifico 20 e o buffer de bins não está vazio, o bit seguinte é removido dado buffer de bins 20. Se o buffer de bins está vazio, mas o número Mx de bits, no buffer de bits ligado 58 é maior ou igual ao comprimento máximo da palavra de código associada Lx, a palavra de código seguinte é lida a partir do buffer de bits e uma nova sequência de bins é inserida no buffer de bins, a partir do qual o primeiro bit é removido e enviado para o seletor de buffers de bins. Se o buffer de bins está vazio e o número Mx de bits no buffer de bits ligado 58 é menor do que o comprimento máximo da palavra de código associada Lx, a sequência seguinte de Nx bits é lida a partir do buffer de bits geral 61 e inserida no buffer de bits local ligado 58, a palavra de código seguinte é lida a partir do buffer de bits, é inserida uma nova sequência de bins no buffer de bins e o primeiro bin, da sequência de bins, é removido e enviado para o seletor de buffers de bins. Este processo é repetido até que todos os símbolos de fonte sejam descodificados.
No final de um pacote de dados, podem ser inseridos, no buffer de bins ou no buffer de bits, mais bins e / ou bits do que o necessário para descodificar os símbolos de fonte solicitados. Os restantes bins, no buffer de bins e os restantes bits, no buffer de bits, são descartados e ignorados.
Intercalação de sequências de bits de comprimento fixo com restrição de baixo desfasamento 0 codificador PIPE e o descodificador com intercalação de sequências de bits de comprimento fixo podem também ser combinados com o esquema para controlar o desfasamento do buffer do codificador, que foi descrito acima. 0 conceito de codificação PIPE é o mesmo que, no caso acima descrito, envolvendo o controlo de desfasamento. Se uma medida relacionada com o desfasamento ou um limite superior do desfasamento (ver abaixo) exceder um limite especificado, a primeira entrada de buffer reservada é preenchida esvaziando o buffer de bins correspondente (usando um mecanismo similar como no final de um pacote de dados) e, potencialmente, escrevendo bits adicionais para preencher todos os bits da entrada reservada do buffer de comprimento fixo. Através de tal mecanismo, o número de entradas do buffer de espera é reduzido até que a medida de desfasamento associada seja menor do que o limite especificado. No lado do descodif icador, os bins e os bits, que foram inseridos no lado do codificador para obedecer à restrição de desfasamento, devem ser descartados. Para este descarte de bins e bits pode ser, basicamente, usado o mesmo mecanismo que no lado do codificador. A medida para o desfasamento (ou um limite superior do desfasamento) pode ser o número de bits nas entradas ativas do buffer, no buffer de bits geral, onde o número de entradas ativas no buffer é o número de entradas de comprimento fixo reservadas no buffer mais o número de entradas de comprimento fixo que contêm bits já escritos no buffer. Note-se que a primeira entrada de buffer é sempre uma entrada reservada de comprimento fixo no buffer ou uma entrada livre de buffer, uma vez que, se a primeira entrada de buffer contém bits escritos, esses bits são gravados no fluxo de bits. Suponha-se que o desfasamento máximo permitido no buffer é D bits (como determinado pela aplicação) . Este desfasamento máximo do buffer D deve ser conhecido tanto pelo codificador como pelo descodificador. 0 desfasamento máximo do buffer D pode ser fixado pela aplicação. 0 desfasamento máximo do buffer D pode ser sinalizado dentro do fluxo de bits, por exemplo, no cabeçalho do pacote de dados (ou cabeçalho de faixa) ou num conjunto de parâmetros, que está incluído no fluxo de bits. Pode ser sinalizado, em unidades de bits, ou bytes, ou num múltiplo de bits, ou num múltiplo de bytes. Se um codificador de bins 10 envia uma solicitação para a reserva de uma nova sequência de bits de comprimento fixo, para o buffer de bits qeral 51, o processo sequinte é executado antes de uma nova entrada de buffer de comprimento fixo ser reservada.
Se o número de bits nas entradas ativas do buffer, no buffer de bits qeral, mais o número de bits que serão reservados pelo pedido de reserva atual, for maior do que o desfasamento máximo do buffer D, a primeira entrada do buffer (que é reservada) é libertada pelo processo descrito a sequir, até que o número de bits nas entradas ativas do buffer, no buffer de bits geral, mais o número de bits que serão reservados pelo pedido de reserva atual, seja menor ou igual ao desfasamento máximo do buffer D. A libertação de uma entrada reservada de buffer de comprimento fixo é semelhante à descarga no final de um pacote de dados: O codificador de bins 10, que está ligado ao buffer de bits 48, que reservou a primeira entrada de buffer correspondente, é libertado pela adição de bins, com valores específicos ou arbitrários, ao buffer de bins ligado 8 até que a sequência de bins resultante represente uma sequência de bins que está associada a uma palavra de código, sendo essa palavra de código inserida no correspondente buffer de bits 48. Conforme mencionado acima, uma maneira preferida para adicionar bins ao buffer de bins é adicionar os bins que produzem a palavra de código mais curta possível. Se, após a escrita da palavra de código para o buffer de bits ligado e a inserção potencial de uma sequência de bits de comprimento fixo, no buffer de bits geral, ainda existem bits no buffer de bits (isto é, a palavra de código escrita não preencheu por completo a sequência de bits de comprimento fixo reservada), são adicionados, ao buffer de bits, mais bits com valores específicos ou com valores arbitrários, até que todos os bits sejam removidos do buffer de bits e gravados na entrada reservada do buffer. Assim, no final deste processo, entrada de buffer completada (a primeira entrada de comprimento fixo no buffer de bits geral) é removida do buffer de bits geral e escrita para o fluxo de bits.
No lado do descodificador, um processo similar é executado para descartar os bins e os bits que foram adicionados ao obedecer à restrição de desfasamento. Portanto, o descodificador mantém um contador C que conta os bits que foram lidos do buffer de bits global (este contador pode ser mantido no buffer de bit global). 0 contador C é inicializado (por exemplo, com zero) , no começo da descodificação de um pacote de dados, e é aumentado após a leitura de uma sequência de comprimento fixo. Se uma sequência de bits de comprimento fixo Nx é lida a partir do buffer de bits geral 61, o contador C é aumentado por Nx. Para além do contador geral C, cada buffer de bits 58 contém um contador Cx, que armazena o valor do contador de bits C antes da última sequência de bits de comprimento fixo ser lida para o buffer de bits correspondente 58. Quando um buffer de bits específico 58 lê uma nova sequência de bit de comprimento fixo, seu contador Cx é ajustado para ficar igual a C, num primeiro passo e só então a sequência de bits de comprimento fixo é lida a partir do buffer de bits geral 61. Quando uma solicitação de um bin 19 é enviada para um buffer de bins específico 20 e a diferença (C - Cx) , entre o contador geral C e o contador Cx do buffer de bits ligado 58, é maior do que o desfasamento máximo do buffer D, todos os bins que estão atualmente armazenados no buffer de bins específico 20 e todos os bits que são armazenados no buffer de bits ligado 58 são descartados e ignorados. Para além desta etapa adicional, a descodificação é operada como descrito acima.
Se o buffer de bins 20, para o qual é enviado um pedido para um bin 19, está vazio (quer porque todas os bins já foram removidas ou porque o mecanismo de baixo desfasamento removeu todos os bins na primeira etapa após o recebimento da solicitação bin), o descodificador de bins 22 ligado tenta ler uma nova palavra de código a partir do buffer de bits ligado 58. Se o número de bits no buffer de bits 58 é menor do que o comprimento máximo da palavra de código, então é lida uma nova sequência de bits de comprimento fixo, a partir do buffer de bits geral 61, antes da palavra de código ser lida, etc.
As Figs. 7 a 13 estão relacionadas com as possibilidades de se desenvolver um atalho entre o fluxo de bits intercalado e o codificador PIPE 104, por um lado, e o descodif icador PIPE 202, por outro lado. Tal como foi descrito acima, em relação às Figs. 1 e 2, os aparelhos de codificação e de descodificação de entropia podem ser ligados um ao outro por dois canais separados, um dos quais transporta o fluxo de bits VLC 112 e o outro que transporta o fluxo de bits codificado PIPE intercalado. No entanto, existem também possibilidades de intercalar tanto o fluxo de bits VLC 112, bem como fluxo de bits codificadas por PIPE 118, e tais possibilidades serão descritas mais tarde em relação às Figs. 20 a 24. No entanto, antes disso, é apresentada uma fundamentação matemática em relação ao esquema de codificação PIPE, bem como detalhes sobre como subdividir o intervalo de probabilidade, de forma ótima, com a atribuição dos intervalos parciais individuais resultantes aos codificadores de entropia 116 e descodificadores de entropia 210, respetivamente.
Como já observado, na codificação PIPE o espaço de eventos da sequência de entrada de símbolos discretos é mapeado num pequeno conjunto de intervalos de probabilidade binários. Os modelos de probabilidade, para os símbolos de fonte, podem ser fixos ou adaptativos, enquanto a codificação de entropia, usando os intervalos de probabilidade, permanece fixa e é desacoplada da fase de modelagem. Cada um dos intervalos de probabilidade pode ser codificado usando um código de entropia muito simples que tem o nivel de complexidade dos códigos de Huffman. A taxa de excesso do código de entropia de partição de intervalo de probabilidade (PIPE) é semelhante à da codificação aritmética pura.
De uma forma geral, a codificação de entropia pode ser considerada como a forma mais genérica de compressão de dados sem perdas. Compressão sem perdas visa representar dados discretos com menos bits do que o necessário para a representação de dados original, mas sem qualquer perda de informação. Os dados discretos podem ser dados sob a forma de texto, gráficos, imagens, video, áudio, voz, fac-simile, dados médicos, dados meteorológicos, dados financeiros ou qualquer outra forma de dados digitais. Em muitas aplicações de codificação, a fonte de dados de origem são primeiro mapeados para os chamados símbolos de codificação e estes símbolos de codificação são então codificados por entropia. 0 mapeamento em símbolos de codificação pode incluir quantificação, caso em que o esquema de codificação geral implica perdas. Um símbolo de codificação s pode tomar qualquer valor de um alfabeto M-^rio (M b 2), sendo A = {aO, ..., aM-1}. Para efeitos de codificação do símbolo s, o alfabeto está associado a uma função de massa de probabilidade estimada (pmf) {ps (a0) , . . . , ps (aM-i) } e todas as dependências entre símbolos de codificação que não são considerados neste pmf são negligenciadas. Para essas configurações abstratas, a entropia é o maior limite inferior de comprimento da palavra de código prevista, em bits por símbolo, para codificar os símbolos s, que pode ser alcançado com técnicas de codificação de entropia. Durante décadas, a codificação de Huffman e a codificação aritmética dominaram a codificação prática de entropia. São exemplos bem conhecidos de códigos práticos capazes de aproximar o limite de entropia (em certo sentido).
Para uma distribuição de probabilidade fixa, os códigos de Huffman são relativamente fáceis de construir. A propriedade mais atraente dos códigos de Huffman é gue sua implementação pode ser eficientemente realizada pelo uso de tabelas de código de comprimento variável (VLC). No entanto, quando se lida com estatísticas de fonte, que variam em função do tempo, isto é, com a alteração de probabilidades de símbolos, a adaptação do código de Huffman, e das suas correspondentes tabelas VLC, é bastante exigente, tanto em termos de complexidade algorítmica como em termos de custos de implementação. Além disso, no caso de ter um valor de alfabeto dominante com ps (ai) > 0,5, a redundância do código Huffman correspondente (sem utilizar qualquer extensão de alfabeto, tal como a codificação de comprimento de execução) pode ser bastante substancial. Outra deficiência dos códigos de Huffman é dada pelo fato de que, no caso de se lidar com modelagem de probabilidade de ordem superior, podem ser necessários vários conjuntos de tabelas VLC. A codificação aritmética, por outro lado, embora substancialmente mais complexa do que a VLC, oferece a vantagem de uma manipulação mais consistente e adequada ao lidar com a modelagem de probabilidade adaptativa e de ordem mais alta, bem como com os casos de distribuições de probabilidade altamente distorcidas. Na verdade, esta característica resulta basicamente do fato de que a codificação aritmética fornece um mecanismo, pelo menos conceitualmente, para mapear qualquer valor dado de estimativa de probabilidade, de uma maneira mais ou menos direta para uma parte da palavra de código resultante. Sendo fornecida com tal interface, a codificação aritmética permite uma separação limpa entre as tarefas de modelagem de probabilidade e de estimativa de probabilidade, por um lado, e a de codificação de entropia atual, isto é, mapeamento de símbolos para palavras de código, por outro lado.
Diferentemente dos esquemas de codificação de entropia convencionais discutidos anteriormente, a codificação PIPE utiliza particionamento de intervalo de probabilidade, cujo fundamento matemático é descrito abaixo em maior detalhe. Considere a sequência de símbolos de codificação {s0, . .., sN_i}.
Cada símbolo é extraído de um alfabeto Si £ Ai. Os alfabetos A± = {a1o, a1!,...} contém duas ou mais letras, as quais se encontram associadas com a estimativa de probabilidade ps(a1m). A estimativa de probabilidade ps(a1m) é conhecida pelo codificador e pelo descodificador podendo ser fixa ou variável. Assume-se que as probabilidades variáveis são estimadas simultaneamente no codificador e no descodificador. Os alfabetos Ai podem ser idênticos para a sequência de símbolos ou tipos de símbolos diferentes estão associados a alfabetos diferentes. Neste último caso, assume-se que o descodificador conhece o alfabeto de cada símbolo na sequência. Esta suposição é justificada porque as descrições práticas do codec de fonte contêm uma sintaxe que estipula a ordem dos símbolos e seus alfabetos.
As sequências de símbolos {so, . .., sN-i} são convertidas em sequência de símbolos binários, os quais são também referidos como bins. Para cada símbolo s± a binarização
Representa um mapeamento bijetivo das letras de alfabeto (a1m) em conjuntos de bins ordenados brjn. 0 mapeamento de binarização Γ1* pode ser diferente para símbolos s± ou para categorias de símbolos. Cada sequência de bins i para um símbolo s± específico consiste num ou mais bins bxx. No lado do descodif icador, o símbolo s± pode ser reconstruído por mapeamento inverso s± = (Y'b)'1 (b')dada a sequência de bins b1. A sequência de bins {bo-bs-i} é obtida como resultado da binarização, representando a sequência de símbolos de fonte {so, . .., sN-i}.
Todos os bins bj estão associados ao mesmo alfabeto binário B = {0,1}, mas os correspondentes pmfs binários {pJo, PJi} com pJi = pJo são usualmente diferentes. 0 binário pmf {pJ0, pJi} pode ser descrito como o valor de bin menos provável (LPB) b£pB sendo a sua probabilidade p£pb (com pjLPB £ 0,5) . Esta descrição de probabilidade binária {bjLPB, p\PB) pode ser diretamente derivada da estimativa de probabilidade ps(a1m) para o símbolo de alfabeto, dado um mapeamento de binarização Γ'*. É igualmente possível (e frequentemente preferível) estimar diretamente {bJLPB, p\PB} no lado do codificador e descodificador em simultâneo. Assim, os bins podem ser associados a um modelo de probabilidade, podendo ser a descrição dessa probabilidade {b\PB, p\PB} estimada com base nos valores dos bins que são codificados com o modelo de probabilidade. Encontra-se um exemplo desta modelação de probabilidade binária em CABAC de H.264.
Uma vez que a função de entropia binária é simétrica cerca de p = 0,5, pode se usar o mesmo codificador binário para a codificação de todos os bins que estão associados com a mesma probabilidade LPB pJLPB independente do valor de bJLPB. Desta forma, a sequência de bins {bo...bs-i} é convertida numa sequência de bins de codificação {bc0,...,bcB-1}. Para cada bin bj é especificado o correspondente mapeamento bijetivo YJc através de em que o símbolo ® representa o exclusivo ou operador. No lado do descodificador, os bins bj podem ser reconstruídos dado o código de bins bCj e correspondente valor bJLPB, através de mapeamento inverso
Um bin de codificação bCj = 0 especifica que o valor do correspondente bin bj é igual ao valor LPB bJ LPB e, um bin de codificação bCj = 1 especifica que o valor do correspondente bin bj é igual ao valor de bin mais provável (MPB) 1 - bJLPB. A sequência de bins de codificação {bco,-,bcB-i} representa de forma exclusiva a sequência de símbolos de fonte {s0, . sN-i} e, a correspondente estimativa de probabilidade, que pode ser usada para a codificação de entropia, são completamente descritas pelas probabilidades pj LPB (com p\PB < 0,5). Assim, apenas as probabilidades no intervalo meio aberto (0, 0,5] devem ser consideradas para o delineamento do codificador de entropia binário para bins de codificação bCj.
Para a codificação de entropia binária atual, a sequência de bins de codificação {bc0r...rbcB-1} é projetada num pequeno número de intervalos de probabilidade Ik. O intervalo de probabilidade LPB (0, 0,5] é particionado em intervalos K Ik = (pk,pk+i] O conjunto K de intervalos é caracterizado por K-l, limites de intervalos pk com k = 1,..., K-l. Sem se perder a generalização, assumimos que pk < pk+i para k = 0, ..., K. Os limites de intervalo externos são fixados e dados por p0 = 0 e pk = 0,5. É designado, para cada intervalo I* um codificador de entropia binária simples não-adaptativo. Todos os bins de codificação bCj, com probabilidades LPB associadas pJ LPB £ I* são atribuídas ao intervalo I* e são codificadas com o correspondente codificador de entropia fixo.
Na descrição seguinte todos os bins representam bins de codificação bCj e todas as probabilidades p são probabilidades P\pB ·
Para investigar o impacto da discretização do intervalo de probabilidade na eficiência de codificação, assumimos que podemos projetar um codificador de entropia ótimo, para uma probabilidade fixa, que atinge a entropia ligada. Cada intervalo de probabilidade Ik = (pk, pk+i] está associado a uma probabilidade representativa pIk G Ik e o correspondente codificador de entropia ótima deve atingir o limite de entropia para esta probabilidade representativa. De acordo com o assumido, a taxa de codificação de um bin, com probabilidade p usando o codificador de entropia ótimo para o intervalo pIk representativo é dada por: em que H(p) representa a função de entropia binária 3 e é a primeira derivada. Para além disso, assumimos que a distribuição das probabilidades no intervalo (0,0.5) é dada por / (p) , com
Assim, a taxa esperada, em bits por bin, para um dado conjunto de K intervalos {Ik} com probabilidades representativas correspondentes {pik} pode ser escrita como A primeira derivada parcial, com respeito a qualquer probabilidade representativa pIk, com k = 0, . . . , K-l, é dada por A equação tem uma solução única
Para a probabilidade representativa pIk dentro do domínio de definição Ik. A segunda derivada parcial para esta solução, é sempre maior do que zero se,
Portanto, se a condição B12 for satisfeita, o valor pIk dado na equação B10 é a probabilidade representativa para um intervalo Ik que minimiza a taxa global esperada R dada as fronteiras de intervalo pk e pk+i. Caso contrário, nenhum bin é projetado para o intervalo Ik e a probabilidade representativa pIk G Ik pode ser arbitrariamente escolhida sem qualquer impacto na taxa global R; Mas tal configuração deve ser evitada, uma vez que o intervalo Ik não seria empregado para a codificação de entropia.
Para encontrar uma condição para limites de intervalo ótimos, investigamos as primeiras derivadas da taxa global esperada R com respeito aos limites de intervalo pIk com k = 1, ..., K-l. Se / (p)> 0 para todo p G [plk-lf pIk), a equação tem uma solução única para a fronteira de intervalo pk dentro do domínio de definição [pIk-ír Pik) e a segunda derivada parcial para esta solução, é sempre maior que zero, de modo que pk é a fronteira de intervalo pk G [plk-lf pIk) , que minimiza a taxa global esperada R dada os representantes do intervalo plk-i e pik. Se existem probabilidades pk G [plk-lf pik) , com f (p) = 0, a equação tem múltiplas soluções, mas pkr tal como dado na equação B13, mantém-se o ótimo mesmo que existam outras soluções ótimas.
Dado o número de intervalos K e a distribuição de probabilidade / (p) , as fronteiras do intervalo pkr com k = 1, . .., K-1 e os representantes do intervalo pIk, com k = 0, ..., K- 1, que minimizam a taxa global esperada R pode ser obtida resolvendo o sistema de equações dado pelas eqs. BIO e B13 sujeitos às condições B12 para k = 0, . .., K-l. Isto pode ser conseguido com o seguinte algoritmo iterativo
Algoritmo 1: 1) Partição do intervalo (0, 0,5] em K intervalos arbitrários
Ik = (Pk, Pk+il com Po = 0, pK = 0,5 e pk < pk+1 para todo k = 0, ..·, K-l em Uma maneira que as condições B12 são obedecidas para todo k = 0, . .., K-l. 2) Atualizar os representantes pk com k = 0, ..., K-l, de acordo com a eq. B10. 3) Atualizar os limites de intervalo pk com k = 0, ..., K-l, de acordo com a eq. B13. 4) Repetir os passos anteriores até se alcançar a convergência. A Figura 14 mostra um exemplo de discretização de intervalo ótimo utilizando o algoritmo descrito. Para este exemplo, assumimos uma distribuição de probabilidade uniforme f (p) = 2 para Ο <p > 0,5 e dividimos o intervalo de probabilidade (0,0,5] em K = 4 intervalos. Pode-se ver que a discretização do
intervalo de probabilidade leva a uma aproximação linear por partes A (p) da função de entropia binária H (p) com A (p) > H (p) para todo p E (0, 0,5].
Como medida para o impacto da discretização do intervalo na eficiência de codificação, pode ser usado o aumento da taxa global esperada em relação ao limite de entropia
Para o exemplo especifico da Figura 14, o valor esperado de entropia é igual a 1/ (2ln2) bits por bin e a taxa sobrecarga p é igual a 1,01%. A tabela 4 lista as sobrecargas de taxa puni e pi±n para a distribuição de probabilidade uniforme e uma distribuição de probabilidade de aumento linear f (p) = 8p com p G (0, 0,5], respetivamente, para números selecionados de intervalos K.
Tabela 4: Sobrecarga de taxa vs. o número de intervalos de probabilidade para a distribuição de probabilidade uniforme e linear crescente
As investigações nesta seção mostraram que a discretização do intervalo de probabilidade LPB (0, 0,5] em um pequeno número de intervalos com uma probabilidade fixa (por exemplo, 8 a 10 intervalos) tem um impacto muito pequeno sobre a eficiência de codificação. A codificação de entropia acima discutida, para intervalos de probabilidade, permite assim codificadores individuais usarem probabilidades fixas. A seguir, mostramos primeiro como um código simples pode ser projetado para probabilidades fixas. Dado estes resultados, desenvolvemos um algoritmo que otimiza em conjunto o desenho do código e o particionamento do intervalo de probabilidade LPB (0, 0,5]. A codificação de entropia para probabilidades fixas p = pode ser feita utilizando codificação aritmética ou codificação de comprimento variável. Para este último caso, a abordagem a seguir parece ser simples e muito eficiente.
Consideramos um esquema de codificação de entropia binária pelo qual um número variável de bins é mapeado em palavras de código de comprimento variável. Para a descodificação única, o mapeamento inverso de uma palavra de código, para uma sequência bin, deve ser exclusivo. E uma vez que queremos projetar um código que se aproxime do limite de entropia, o mais próximo possível, limitamos nossas considerações aos mapeamentos bijetivos. Um tal mapeamento bijetivo pode ser representado por uma árvore binária onde todos os nós de folha estão associados a palavras de código, como representado na Figura 15. As margens da árvore representam eventos binários. No exemplo da Figura 15, as margens inferiores representam o valor do bin LPB e as margens superiores representam o valor do bin MPB. A árvore binária representa um código de prefixo para os bins se for uma árvore binária completa, isto é, se cada nó for uma folha ou tiver dois descendentes. Cada nó de folha está associado a uma probabilidade baseada numa dada probabilidade LPB (p) . O nó de raiz tem a probabilidade proot = 1. A probabilidade para todos os outros nós é obtida multiplicando a probabilidade do parente correspondente por p para os descendentes LPB e q = 1 - p para os descendentes MPB. Cada nó de folha Li é caracterizado pelo número de extremidades de LPB ai e o número de extremidades de MPB bi do nó de raiz para o nó de folha. Para uma determinada probabilidade LPB, a probabilidade pi para um nó de folha Li = {ai, bi } é igual a A árvore binária T é completamente caracterizada pelo número de nós de folha L e pares associados {alr bi } com I = 0,...L-1.
Dada uma árvore binária completa T e uma probabilidade LPB p, a atribuição ótima de palavras de código, para os nós de folha, pode ser obtida pelo algoritmo de Huffman. 0 número variável resultante de bits, para o mapeamento de palavras de código de comprimento variável (V2V) C é caracterizado pelo número de palavras de código L, que é idêntico ao número de nós de folha, e as tuplas {ai, bi, li} para 1=0. .., L-l), onde li representa o comprimento da palavra de código que está associado ao nó de folha correspondente li = {ai, bi} . Deve notar-se que existem múltiplas possibilidades para a atribuição de palavras de código, dado os comprimentos de palavras de código {li} e a atribuição de palavras de código atuais não é importante, desde que as palavras de código representem um código de prefixo descodificável de forma única. A taxa esperada R (p, C) em bits por bin, para um dado código C e uma probabilidade LPB p, é a razão entre o comprimento da palavra de código esperado e o número esperado de bins por palavra de código 0 delineamento do código é, muitas vezes, limitado por fatores como o número máximo de palavras de código L, o número máximo de bins por palavra de código ou o comprimento máximo de palavras de código, ou é restrito a códigos de estruturas particulares (por exemplo, para permitir a otimizada por parsing). Se assumimos que o conjunto Sc de códigos utilizáveis, para uma aplicação especifica, é dado, o código ótimo C * E Sc pode ser encontrado, para uma determinada probabilidade LP, minimizando a taxa esperada R (p, C)
Como alternativa mais rápida, a minimização também pode prosseguir sobre um dado conjunto de árvores binárias ST e, para cada árvore, é considerado apenas um código V2V C, que é obtido pelo algoritmo de Huffman. Como exemplo, desenhamos códigos V2V para várias probabilidades de LPB p considerando todas as árvores binárias T para as quais o número de nós de folhas L é menor ou igual a um máximo determinado Lm. Na Figura 16, é representado o aumento da taxa relativa p (p, C * (p)) = R (p, C * (p)) / N (p) sobre a probabilidade LPB p para os tamanhos de tabela máxima selecionados Lm. 0 aumento da taxa p (p) geralmente pode ser reduzido permitindo maiores tamanhos de tabela. Para maiores probabilidades de LPB, um pequeno tamanho de tabela L de 8 a 16 palavras de código, é geralmente suficiente para manter o aumento de taxa p (p) razoavelmente pequeno, mas para probabilidades de LPB menores (por exemplo, p <0,1), são necessários tamanhos de tabela L maiores.
Nas seções anteriores, considerou-se a discretização de probabilidade ótima assumindo códigos ótimos e o desenho de código para probabilidades de LPB fixas. Mas como, em geral, não podemos atingir o limite de entropia com códigos V2V reais de tamanhos de tabelas limitados, o delineamento do código e a partição do intervalo de probabilidade LPB (0, 0,5] devem ser considerados em conjunto para obter um delineamento de codificação de entropia otimizado.
Para um dado intervalo Ik = (pk, pk+ i] , um código Ck, de um dado conjunto Sc num código ótimo C*, se ele minimizar a taxa esperada para o intervalo dado.
Para delineamentos práticos, a minimização do integral na eq. B19 pode ser simplificado, com pequeno impacto, na eficiência de codificação, por se determinar primeiro a probabilidade representativa ótima, Pj* , para o intervalo Ik, de acordo com a eq. B10, e depois se escolher o código ótimo Ck/ de um dado conjunto Sc para a probabilidade representativa Pj*, de acordo com a eq. B18.
Os limites de intervalo ótimos pk, com k = 1, ..., K-1, dado o conjunto de códigos Ck, com k = 0, ..., K-1, podem ser obtidos minimizando a taxa global esperada
Definindo a primeira derivada, com respeito os limites de intervalo iguais a zero, para K = Ι,...Κ-l resulta
Da mesma forma que para eq. B13, pode-se mostrar que p* é sempre uma solução ótima, mas, dependendo da distribuição de probabilidade / (p) outras soluções ótimas podem existir.
Portanto, um limite de intervalo ótimo, entre dois intervalos Ik-i e Ikr com os códigos associados Ck-i e Ckl respetivamente, é o ponto de interseção das funções R (p, Ck-i) e R (p, Ck) . Consequentemente, o seguinte algoritmo interativo pode ser utilizado para derivar conjuntamente o intervalo de probabilidade de particionamento e os códigos associados, dados o número K de intervalos de probabilidade, o conjunto de códigos possíveis Sc e a distribuição de probabilidade / (p) , com p G (0, 0,5] .
Algoritmo 2: 1) Derivar os limites do intervalo de probabilidade inicial pkl com k = 0, . .., K, usando o algoritmo 1 especificado na seção 3 2) Derivar representantes pIk para os intervalos de probabilidade Ik, com k = 0, K-1, de acordo com a eq. B10 3) Derivar códigos Ck G Sc para os representantes do intervalo pIk, com k = 0, K-1, de acordo com a eq.
Bl 8 4) Atualizar os limites do intervalo pk, com k = 1, Κ Ι, de acordo com a eq. B21 5) Repita os três passos anteriores até que se alcance a convergência
Os passos 2 e 3, no algoritmo 2, também podem ser substituídos por uma derivação direta dos códigos Ck G Sc, com k = 0, ..., ΚΙ, com base nos intervalos pk, com k = 0, ..., K, de acordo com a eq. B19. E, como mencionado na see. 4.1, a minimização, no passo 3, também pode prosseguir sobre um dado conjunto de árvores binárias ST onde para cada árvore binária T apenas é considerado um código V2V Ck obtido pelo algoritmo de Huffman.
Como exemplo, dividimos conjuntamente a partição em K = 12 intervalos de probabilidade e códigos V2V correspondentes usando o algoritmo 2. Neste caso, a minimização, no passo 3 do algoritmo, foi substituída por uma minimização equivalente sobre um dado conjunto de árvores binárias ST, sendo o código C, avaliado para cada árvore T, obtido pelo algoritmo de Huffman. Consideramos árvores T com um número máximo Lm = 65, de nós de folhas e, portanto, os códigos C com até 65 entradas de tabela. Todas as árvores binárias T, com até 16 nós de folhas, foram avaliadas na minimização; Para árvores com mais de 16 nós de folhas, empregamos uma pesquisa sub-ótima, com os melhores resultados para árvores com menor número de nós de folhas.
Na Figura 17, o aumento esperado da taxa, em relação ao limite de entropia AR (p) = R (p) - H (p) para o exemplo de código
delineado, é representado graficamente sobre a probabilidade LPB p. Como comparação, também foi plotado o aumento da taxa esperada AR, para a discretização, teoricamente otimizada do intervalo de probabilidade (conforme desenvolvido no item 3) e a discretização de probabilidade, teoricamente ótima com a restrição adicional pIjt-1 = 0.5 dentro do diagrama. É possível observar-se que a discretização do intervalo de probabilidade conjunto e o delineamento do código V2V leva a um deslocamento dos limites dos intervalos (as fronteiras do intervalo pk, com k = 1, ..., ff— 1, são dadas pelos máximos locais das curvas AR (P)) . O aumento esperado da taxa global, relativa ao limite de entropia para o exemplo de projeto com códigos V2V reais, é p = 0,24%, ao assumir uma distribuição de probabilidade uniforme / (p). Os aumentos de taxa relativos correspondentes para a discretização, teoricamente otimizada do intervalo de probabilidade, e a discretização, teoricamente ótima com a restrição adicional pik-i = 0,5 são p = 0,12% e p = 0,13%, respetivamente. A terminação da palavra de código pode ser feita da seguinte maneira: Ao codificar uma sequência finita de símbolos {sO,
Sn-iI, cada um dos K codificadores binários processa uma sequência finita de bins de codificação b com K = Ο,...Κ-l.
Foi também assegurado que, para cada um dos codificadores binários K, podem ser reconstruídos todos os bins de codificação da sequência para uma dada palavra de código ou sequência de palavras de código, a partir da palavra de código ou sequência de palavras de código
Quando se emprega a codificação aritmética, a palavra de código aritmética para a sequência de bins de codificação tem de ser terminada de uma tal forma, que todos os bins de codificação possam ser descodificadas em função da palavra de código dada. Para os códigos V2V descritos acima, os bins no final da sequência bCk podem não representar uma sequência de bins que está associada a uma palavra de códiqo. Em tal caso, qualquer palavra de códiqo pode ser escrita, desde que contenha, como prefixo, a sequência de bins remanescente. A sobrecarqa pode ser minimizada se for escolhida a palavra de código correspondente, que tenha o comprimento mínimo (ou uma dessas palavras de código). No lado do descodificador, são rejeitados os bins adicionalmente lidos, no final da sequência de bins, que podem ser identificados tendo em conta a sintaxe de fluxo de bits e os esquemas de binarização.
Um exemplo simples de delineamento de código é apresentado abaixo. Para fins ilustrativos, consideramos o exemplo simples de uma fonte {s} com três letras e probabilidades associadas fixas de ps (ao) = 0-7, ps (ai) = 0.18 e ps (a.?) = 0.12. A árvore de escolha ternária, correspondente, pode ser convertida em uma árvore binária completa, como mostrado na Fig. 18.
Na Tab. 5 é dada uma binarização para a árvore binária completa da Fig. 18. O símbolo ternário pmf ps é convertido em dois pmfs binários pb0 = (0,7,0,3) e pbl = (0,6,0,4). Para cada símbolo s no fluxo de bits, está presente o bin £>0. Quando bo é igual a 0, também bi está presente. Note-se que a binarização dada na Tab. 2 é idêntica a um código ótimo de Huffman de letra única, para a fonte s.
Tabela 5: Binarização de uma fonte de três letras. As probabilidades LPB (pLPB) são de 0,3 para o primeiro bin e de 0,4 para o segundo bin.
A entropia para a fonte s é 0 comprimento médio das palavras de código do código de Huffman de letra única é dado como correspondendo a uma redundância de pHC = 0,1274 bit/simbolo ou à taxa de sobrecarga esperada de 10,87%. Para o exemplo de binarização especifico, com pmfs fixo, os bins bo e bi já representam bins de codificação, uma vez que, para ambos os bins, o valor LPB b^LPB é igual a 0. A distribuição f (s) das probabilidades LPB é discreta, com / (p) = 0 exceto para p = 0,3 e p = 0,4. Consequentemente, a discretização de probabilidade ótima leva a intervalos K = 2 com os representantes pro = 0,3 e Pu = 0,4. O limite de intervalo pi, entre esses intervalos, pode ser arbitrariamente escolhido em [0,3, 0,4).
Para codificar a fonte, a sequência de símbolos de fonte é binarizada numa sequência de bins. O bin bo é transmitido para cada símbolo de fonte. O bin bi é transmitido somente quando bo = 0. Os bins bo e bi são codificados separadamente com probabilidades LPB constantes de pPo = 0,3 e pn = 0,4, respetivamente. A codificação eficiente de um alfabeto binário, com probabilidade fixa, pode ser conseguida por um simples mapeamento V2V. Exemplos de mapeamentos V2V, com pequenas tabelas de codificação, para as probabilidades de LPB pLPB = 0,3 e pLPB = 0,4 são dados nas Tab. 6 e Tab. 7, respetivamente. O mapeamento V2V para pLPB = 0,3 produz uma redundância de 0, 0069 bit / bin ou 0, 7 88%. Para a probabilidade LPB de pLPB = 0,4, a redundância é 0,0053 bit / bin ou 0,548%.
Tabela 6: Árvore de bins e códigos para uma probabilidade LPB de Plpb = 0,3. A redundância deste código é de 0,788%
Tabela 7: Árvore de bins e códigos para uma probabilidade LPB de pLPB = 0,4. A redundância deste código é de 0,548%
A taxa geral esperada incorrida pelo novo método de codificação é A redundância global é de 0,73% em relação ao limite de entropia, o que representa uma melhoria significativa em comparação ao código Huffman de uma única letra.
Poderia argumentar-se que uma melhoria de eficiência de codificação semelhante poderia ser obtida criando um código de comprimento de execução. Para o exemplo acima, poderíamos construir um código de comprimento de execução, para o símbolo mais provável, considerando execuções de até dois símbolos. Cada um dos eventos {aoão, aoai, aoã2, ai, a2Í estaria associado a uma palavra de código separada. Tal código produz uma redundância de 1,34% em relação ao limite de entropia. Na verdade, os códigos V2V podem ser considerados como uma generalização de códigos de comprimento de execução para símbolos binários (o código V2V na Tab. 3 efetivamente representa um código de comprimento de execução) . Para um alfabeto de um único símbolo com probabilidades fixas, uma eficiência de codificação, semelhante à da abordagem apresentada, também pode ser conseguida criando-se um código que mapeia um número variável de símbolos de fonte para palavras de código de comprimento variável. A principal vantagem da abordagem apresentada é a sua flexibilidade no mapeamento de sequências arbitrárias de símbolos de fonte, com estimativas de probabilidade fixa ou adaptativa, para um pequeno número de codificadores binários simples, que são operados com probabilidades de LPB fixas. A seguir, é considerada uma forma de se conseguir uma descodificação única.
Com o esquema de codificação de entropia apresentado, a codificação de uma sequência de símbolos de fonte s = {so, ---, sN-i} consiste nos seguintes três passos básicos: • Binarização de símbolo b = {b0, ---, bs~i} = Yb (s) produzindo uma sequência de bins b = {bo, ......, bS-i} • Conversão das sequências de bins em sequências de bins de codificação bc = {bco, .... , bcB-i} = yc (b)
• Codificação de entropia binária da sequência de bins de codificação bc = {bco, .... , bcB-i} usando a discretização do intervalo de probabilidade e os codificadores binários fixos K A sequência de símbolos s = {so, ---, sN-i} é descodificável de forma única, se a sequência de bins de codificação b = {bo, . . . , bs-i] é descodif icável de forma única e os mapeamentos yb e yc forem invertíveis. ye notifica o mapeamento de codificação de uma sequência de um ou mais bins de codificação bc = {bco, ...., bcB-i} numa sequência de uma ou mais palavras de código c(bc) = {c0,...}
Para a descodificação única de uma sequência de bins de codificação bc, dada a sequência de palavras de código c(bc), o mapeamento de codificador ye deve ter a propriedade de atribuir uma palavra de código c(bc) única a cada sequência possível de bins de codificação bc:
(B26)
Esta propriedade é sempre preenchida quando são utilizados códigos aritméticos ou prefixos. É particularmente satisfeita para os códigos V2V descritos na see. 4.1 (incluindo a palavra de código, terminação descrita no ponto 4.3), uma vez que os códigos V2V representam códigos de prefixo para números variáveis de bins.
No entanto, na abordagem de codificação de entropia apresentada, a sequência de bins de codificação bc é dividida em K subsequências Ck com k = 0, ..., K-l, e, a cada uma das subsequências bck é atribuída uma sequência de palavras de código Ck(bkC), utilizando um mapeamento de codificação específico γ^β. Consequentemente, a condição na descodificação única tem de ser alargada. Uma sequência de bins de codificação bc é singularmente decodificável, dadas K sequências de palavras de código ck(bkc), com k = 0, ..., K-l, se cada subsequência de bins de codificação bck for unicamente descodificável, dada a palavra de código correspondente ck(bkc), e a regra de partição yp é conhecida pelo descodificador. A regra de particionamento yp é dada pela discretização do intervalo de probabilidade LPB {J*} e as probabilidades de LPB pjlpb, estando esse arco associadas aos bins de codificação bej, com j = 0, ...,
B-l. Assim, a discretização, do intervalo de probabilidade LPB {Ik}, tem de ser conhecida no lado do descodificador e a probabilidade de LPB pJlpb, para cada bin de codificação bej com j = 0, B-l, tem de derivar da mesma maneira no lado do codificador e do descodificador .
Para o mapeamento yc de uma sequência de bins numa sequência de bins de codificação c, cada bj único, com j = 0, B-l, é convertido pelo mapeamento binário
No lado do descodificador, a sequência de bins pode ser derivada pelo mapeamento binário com j = 0, ..., B-l. Se o valor de LPB b\PB, para cada bin bj for derivado da mesma forma, no lado do codificador e do descodificador, estes mapeamentos (ycjj_1 representam o inverso dos correspondentes mapeamentos de codificação ycJ uma vez que e assim, a conversão de yq de uma sequência de bins b numa sequência de bins de codificação invertivel bc.
Finalmente, investiqamos a inversibilidade da binarização b = yq (s) pela qual cada símbolo s±, com i = 0, ..., N-1, é mapeado para uma sequência de bins b1 = y^ (Si) . O símbolo Sj pode ser descodificado unicamente, dada a sequência de bins b1, se o mapeamento de binarização y2* atribuir uma sequência de bin diferente a cada letra aLm do alfabeto A± para o símbolo s±.
No entanto, esta condição não é suficiente, uma vez que a partição da sequência de bins b = {bo, bS-i} em sequências de bin b1, que correspondem aos símbolos s±, com i = 0, . .., N- 1, não é conhecida pelo descodificador. Uma condição suficiente é dada quando, para cada símbolo s±, as sequências bin que estão associadas às letras a1m do correspondente alfabeto A, formam um código de prefixo e os mapeamentos de binarização y^ para cada símbolo s±, com i = 0, . N- 1, são conhecidas no lado do descodificador.
As condições de descodificação única, para a abordagem de codificação de entropia apresentada, podem ser resumidas como se segue: • os mapeamentos de binarização y1* representam códigos de prefixo e são conhecidos pelo descodificador (na ordem de codificação de símbolos) • os modelos de probabilidade {pjLPB , bjLPB) , para os bins bj são derivados da mesma maneira, no lado do codificador e do descodificador
• a partição do intervalo de probabilidade LPB (0, 0,5] em K intervalos Ik, com k = 0, . .., K-l, é conhecida pelo descodificador • o mapeamento para cada intervalo de probabilidade Ip, com k = 0, ..., K-l, representa um código unicamente decodificável. A seguir, descrevemos mais detalhadamente exemplos para o delineamento geral do codificador e descodificador. Concentramo-nos em esquemas de codificação, nos quais os modelos de probabilidade {bLPB, Plfe) , para os bins, são estimados diretamente no lado do codificador e do descodif icador e os codificadores binários K usam os mapeamentos V2V descritos acima. Cada símbolo de fonte s deve ser associado a uma categoria de símbolo cs, que determina o tipo do símbolo, incluindo a sua gama de valores. A ordem dos símbolos, e das categorias de símbolos associadas, devem ser dadas pela sintaxe, que se presume conhecida no lado do codificador e do descodificador. O diagrama de blocos, para um exemplo de delineamento de um codificador PIPE e de um descodificador PIPE, é ilustrado na Figura 19. No lado do codificador, os símbolos s, com categorias de símbolos associadas cs, são introduzidos no binarizador, que converte cada símbolo s numa sequência de bins bs = yç cs(s> m 0 esquema de binarização utilizado é determinado com base na categoria de símbolos cs. Além disso, o binarizador associa cada bin b, de uma sequência de bins, com uma indicação de modelo de probabilidade cb, que especifica o modelo de probabilidade que é usado para codificar o bin b. A indicação do modelo de probabilidade cb pode ser derivada com base na categoria de símbolos cs, no número bin do bin atual no interior da sequência de bins s e / ou nos valores de bins e símbolos já codificados. 0 estimador e atribuidor de probabilidade mantêm modelos de probabilidade múltiplos, que são caracterizados por pares de valores {bLPB, Plpb} · Este recebe os bins b e as indicações de modelo de probabilidade associadas cb do binarizador, e encaminha o valor LPB bLP e a probabilidade LPB Plpb do, modelo de probabilidade indicado, para o derivador de bins de codificação e o quantificador de probabilidade, respetivamente. Em seguida, o modelo de probabilidade correspondente {bLPB, Plpb} é atualizado usando o valor do bin b recebido. 0 derivador de bins de codificação recebe os bins b e os valores de LPB associados bLP do binarizador, do estimador de probabilidade e do atribuidor, respetivamente, e envia os bins de codificação bc, que são derivadas por bc = b® Plpb, ao quantificador de probabilidade. 0 quantificador de probabilidade encaminha cada bin de codificação bc para um dos K codificadores binários. Este contém informações sobre a quantificação do intervalo de probabilidade LPB {J*}. A probabilidade LPB bc, que está associada a um bin bc de codificação, recebida a partir do estimador de probabilidade e atributo, é comparada com as fronteiras de intervalo {pb} e com o índice de intervalo de probabilidade k, para o qual Plpb £ J*, é derivado. Em seguida, o bin de codificação bc é encaminhado para o codificador binário associado.
Cada um dos codificadores binários K consiste em um buffer de bins e num codificador de bins. 0 buffer de bins recebe os bins de codificação bc do quantificador de probabilidade e armazena-os na ordem de codificação. 0 codificador de bins implementa um mapeamento especifico V2V e compara a sequência de bins do buffer de bins com as sequências de bins que estão associadas às palavras de códiqo. Se a sequência de bins do buffer de bins é iqual a uma dessas sequências de bins, o codificador de bins remove a sequência de bins {bc } do buffer de bins e grava a palavra de códiqo associada ({bc}) ao fluxo de palavra de códiqo correspondente. No final do processo de codificação, para uma sequência de símbolos, para todos os codificadores binários, para os quais buffers de bins não estão vazios, é escrita uma palavra de códiqo de terminação, tal como descrito no cap. 4.3.
Os K fluxos de palavras de código resultantes podem ser transmitidos, empacotados ou armazenados separadamente, ou podem ser intercalados (cp, see 6.2) para fins de transmissão ou armazenamento.
No lado do descodificador, cada um dos K descodificadores binários, consistindo num descodificador de bins e num buffer de bins, recebe um fluxo de palavra de código. 0 descodificador de bins lê as palavras de código ({bc}) do fluxo de palavras de código e insere a sequência de bins associada {bc} na ordem de codificação, no buffer de bins. A descodificação da sequência de símbolos é direcionada pela sintaxe subjacente. As solicitações de um símbolo s são enviadas, juntamente com a categoria de símbolos cs, para o binarizador. 0 binarizador converte essas solicitações de símbolo em pedidos de bins. UA solicitação de um bin está associada a uma indicação de modelo de probabilidade cb, que é derivada da mesma maneira que no codificador, e enviada para o estimador e atribuidor de probabilidade. 0 estimador e o atribuidor de probabilidade são operados de forma semelhante à sua contraparte no lado do codificador. Com base na indicação do modelo de probabilidade cb, este identifica um modelo de probabilidade e encaminha seu valor LPB bLPB e LPB probabilidade pLPB para o derivador de bins e para o quantif icador de probabilidade, respetivamente. 0 quantificador de probabilidade determina um dos K descodificadores binários, com base na probabilidade LPB pLPB, da mesma maneira que o codificador binário é determinado no lado do codificador, remove o primeiro bin de codificação bc, por ordem de codificação do buffer de bins correspondente e encaminha-lo para o derivador de bins. 0 derivador de bins recebe os bins de codificação bc e os valores de LPB associados bLPB, a partir do quantificador e estimador de probabilidade e atribuidor, respetivamente, e determina o valor de bin b = bc@bLPB. Como resposta final a uma solicitação bin, enviada pelo binarizador, o derivador de bins envia o valor de bin binário decodificado para o binarizador e o estimador e atributo de probabilidade.
No estimador de probabilidade e no atribuidor, o valor do bin descodificado b é usado para atualizar o modelo de probabilidade {bLPB, pLPB }, que foi escolhido pelo valor associado cb, da mesma maneira que no lado do codificador. Finalmente, o binarizador adiciona o bin recebido b à sequência de bins que já foi recebida para um pedido de símbolo e compara esta sequência bin com as sequências de bins que estão associadas a valores de símbolo pelo esquema de binarização yb cs. Se a sequência de bins s corresponde a uma dessas sequências de bins, o símbolo descodificado correspondente s é emitido como resposta final à solicitação de símbolo. Caso contrário, o binarizador envia pedidos de bin adicionais até que o símbolo s seja decodificado. A descodificação de uma sequência de símbolos é terminada se não forem recebidas mais solicitações de símbolos, que são movidas pela sintaxe. Os bins de codificação bc, que podem estar contidos nos buffers de bins no final do processo de descodificação de entropia (como resultado das palavras de código de terminação), são descartados.
Depois de se ter descrito certos codificadores PIPE e descodif icadores PIPE, em relação às Figs. 3 a 13, e tendo proporcionado um antecedente matemático relativamente à codificação PIPE em geral, em relação às Figs. 14 a 19, são agora descritos mais detalhes, em relação às Figs. 20 a 24, para dispositivos de codificação e decodificação de entropia. Os exemplos seguintes da Fig. 22 a 24, intercalam não apenas os fluxos de bits codificados PIPE entre si, mas também o fluxo de bits VLC e os fluxos de bits codificados PIPE. Em comparação a estes, os codificadores PIPE e descodificadores PIPE, com intercalação de fluxos de bits codificados PIPE, mostrados nas Figs. 7 a 13, apenas preveem a intercalação separada dos fluxos de bits codificados PIPE. Como já mencionado acima, mesmo o mesmo pode servir como base para a obtenção de um fluxo de bits completamente intercalado, através da utilização de um outro par de intercalador / desintercalador 134 e 228, respetivamente (ver Figuras 1 e 2), tal como, por exemplo, utilizando a intercalação do fluxo de bits como mostrado nas Figs. 5 e 6. No entanto, as possibilidades descritas a seguir realizam a intercalação de uma só vez, tanto no fluxo de bits VLC como nos fluxos de bits codificados com PIPE, utilizando, por outras palavras, o intercalador / desintercalador 128 e 230 de etapa única, respetivamente.
Antes de descrever em pormenor os casos em gue os símbolos codificados por VLC e PIPE são intercalados no interior de um fluxo de bits, para se conseguir um compromisso mais adeguado entre complexidade e eficiência de codificação, é descrita uma estrutura básica sem intercalação com respeito à Fig. 20 e 21. A estrutura do aparelho de codificação de entropia, da Fig. Ia, é mostrado na Fig. 20. O aparelho de codificação de entropia converte uma corrente de símbolos de fonte la, correspondente à combinação de símbolos de fonte codificados por VLC e símbolos de fonte codificados por PIPE, das Figs. 1 e 2, nomeadamente 106 e 218, respetivamente, num conjunto de dois ou mais fluxos de bits parciais 12, 12a, com o fluxo de bits 12a correspondente aos fluxos de bits 112 e 206 das Figs. 1 e 2.
Como já se referiu acima, cada símbolo de fonte la pode ter associado uma indicação que especifica se o símbolo de fonte é codificado utilizando códigos VLC padrão dentro do codificador VLC 22a, que corresponde ao codificador VLC 102 na Fig. 1, ou se 0 símbolo de fonte deve ser codificado com um conceito de codificação PIPE. Conforme já descrito acima em relação às Figs. 1 e 2, esta indicação pode não ser transmitida explicitamente para o lado de descodificação. Em vez disso, a indicação associada pode derivar do tipo ou categoria do próprio símbolo de fonte.
Os símbolos codificados VLC lb são codificados com códigos VLC padrão, os quais, por sua vez, podem depender da categoria de símbolo ou do tipo de símbolo anteriormente mencionado, utilizando um codificador VLC 22a. As palavras de código 11a correspondentes são escritas num fluxo de bits parcial distinto 12a. Os símbolos de código não VLC 1 são codificados utilizando a codificação PIPE como descrito acima em relação às Figs. 1 e 3, por exemplo, após serem obtidos múltiplos fluxos de bits parciais 12. Alguns dos símbolos de fonte la podem já ter sido binarizados de uma maneira em que a binarização consiste em duas partes, como já mencionado acima em relação à Fig. la. Uma destas partes pode ser codificada com a abordagem PIPE e gravada nos correspondentes fluxos de bits parciais 12. A outra parte da sequência de bins pode ser codificada com os códigos VLC padrão e escrita no fluxo de bits parcial correspondente 12a. 0 aparelho de descodificação de entropia básico, que se adapta à Fig. 20, é mostrado na Fig. 21. O descodificador executa basicamente as operações inversas do codificador da Fig. 20, de modo que a sequência previamente codificada de símbolos de fonte 27, 27a é descodificada a partir de um conjunto de dois ou mais fluxos de bits parciais (24, 24a) . O descodificador inclui dois fluxos de processo diferentes: Um fluxo para solicitações de dados, que replica o fluxo de dados do codificador, e um fluxo de dados, que representa o inverso do fluxo de dados do codificador. Na ilustração da Fig. 21, as setas tracejadas representam o fluxo de solicitação de dados, enquanto as setas sólidas representam o fluxo de dados. Os blocos de construção do descodificador basicamente replicam os blocos de construção do codificador, mas implementam as operações inversas.
Cada pedido de símbolo 13a pode ser associado a uma indicação que especifica se o símbolo de fonte é codificado, utilizando códigos VLC padrão, ou com o conceito de codificação PIPE. Como já mencionado acima, em relação à Fig. 20, esta indicação pode derivar das regras de parsing ou de sintaxe dos elementos de sintaxe representados pelo próprio símbolo de fonte. Por exemplo, relativamente às Figs. 1 e 2, foi descrito que diferentes tipos de elementos de sintaxe podem ser associados aos diferentes esquemas de codificação, nomeadamente codificação VLC ou codificação PIPE. O mesmo pode se aplicar a porções diferentes de binarizações, ou mais geralmente, a outras simbolizações dos elementos de sintaxe. Se um símbolo é codificado por VLC, a solicitação é passada para o descodif icador VLC 22a e uma palavra de código VCL 23a é lida a partir de um fluxo de bits parcial distinto 24a. O correspondente símbolo de descodificação 27a é emitido. Se um símbolo é codificado com PIPE, o símbolo 27 é descodificado a partir de um conjunto de fluxos de bits parciais 24, como descrito acima em relação à Fig. 4, por exemplo.
Alguns dos símbolos de fonte podem ser binarizados de uma forma em que essa binarização é realizada em duas partes. Uma destas partes é codificada com a abordagem PIPE é correspondentemente descodificada a partir das correntes de bits parciais associadas 24. A outra parte da sequência de bins é codificada com códigos VLC padrão e é descodificada com um descodificador VLC 22a, que lê as correspondentes palavras de código 23a, a partir de um fluxo de bits parcial distinto 24a.
Transmissão e multiplexing dos fluxos de bits parciais (codificação VLC e PIPE)
Os fluxos de bits parciais 12, 12a, que são criados pelo codificador podem ser transmitidos separadamente, ou podem ser multiplexados num único fluxo de bits, ou as palavras de código dos fluxos de bits parciais podem ser intercaladas num único fluxo de bits.
Cada fluxo de bits parcial, de uma quantidade de dados, pode ser escrito num pacote de dados. A quantidade de dados pode ser um conjunto arbitrário de símbolos de fonte, tais como uma imagem fixa, um campo ou quadro de uma sequência de vídeo, uma faixa de uma imagem fixa, uma faixa de um campo ou quadro de uma sequência de vídeo ou um quadro de amostras de áudio, etc.
Dois ou mais dos fluxos de bits parciais 12, 12a, para uma quantidade de dados, ou todos os fluxos de bits parciais, para uma quantidade de dados, podem ser multiplexadas num pacote de dados. A estrutura de um pacote de dados, que contém fluxos de bits parciais multiplexados, pode ser como ilustrado na Fig. 5. 0 pacote de dados 300 consiste num cabeçalho e numa partição para os dados de cada fluxo de bits parcial (para a quantidade de dados considerada). O cabeçalho 301 do pacote de dados contém indicações para o particionamento do (restante do) pacote de dados em segmentos de dados de fluxo de bits 302. Para além das indicações para a partição, o cabeçalho pode conter informações adicionais. As indicações para a partição do pacote de dados podem ser as localizações do inicio dos segmentos de dados em unidades de bits ou bytes ou múltiplos de bits ou múltiplos de bytes. As localizações do inicio dos segmentos de dados podem ser codificados como valores absolutos no cabeçalho do pacote de dados, quer relativamente ao inicio do pacote de dados ou relativamente ao fim do cabeçalho ou relativamente ao inicio do pacote de dados anterior. As localizações do inicio dos segmentos de dados podem ser codificadas diferencialmente, isto é, apenas a diferença entre o inicio de um segmento de dados e uma previsão para o inicio do segmento de dados é codificada. A previsão pode ser baseada em informações já conhecidas ou transmitidas, tais como o tamanho global do pacote de dados, o tamanho do cabeçalho, o número de segmentos de dados no pacote de dados, a localização do inicio dos segmentos de dados precedentes. A localização do inicio do primeiro pacote de dados pode não ser codificada, mas inferida com base no tamanho do pacote de dados do cabeçalho. No lado do descodif icador, as indicações de partição transmitidas são utilizadas para derivar o inicio dos segmentos de dados. Os segmentos de dados são então utilizados como fluxos de bits parciais 12, 12a e os dados contidos nos segmentos de dados são enviados, numa ordem sequencial, aos correspondentes descodificadores de bins e descodificadores VLC.
Intercalação de palavras de código (palavras de código VLC e PIPE)
Para algumas aplicações, a multiplexação acima descrita sobre os fluxos de bits parciais (para uma quantidade de símbolos de fonte) num pacote de dados, pode ter as seguintes desvantagens: Por um lado, para pequenos pacotes de dados, o número de bits para as informações secundárias que é necessário para sinalizar o particionamento, pode tornar-se significativo em relação aos dados reais nos fluxos de bits parciais, o que finalmente reduz a eficiência de codificação. Por outro lado, a multiplexação pode não ser adequada para aplicações que requerem um baixo desfasamento (por exemplo, para aplicações de videoconferência) . Com a multiplexagem descrita, o codificador não pode iniciar a transmissão de um pacote de dados antes dos fluxos de bits parciais terem sido completamente criados, uma vez que, as localizações do início das partições não são, de antemão, conhecidas. Além disso, em geral, o descodificador tem de esperar até receber o início do último segmento de dados antes de poder iniciar a descodificação de um pacote de dados. Para aplicações como sistemas de videoconferência, estes desfasamentos podem adicionar-se a um desfasamento global adicional do sistema de várias imagens de vídeo (em particular, para taxas de bits que estão perto da taxa de transmissão de bits e para codificadores / descodificadores que exigem quase o tempo Intervalo entre duas imagens para codificar / decodificar uma imagem), o que é crítico para tais aplicações. Para superar as desvantagens, para certas aplicações, o codificador o pode ser configurado de uma maneira que as palavras de código, que são geradas pelos dois ou mais codificadores de bins e o codificador VLC, são intercaladas num único fluxo de bits. 0 fluxo de bits, com as palavras de código intercaladas, pode ser enviado diretamente para o descodificador (quando se negligencia um pequeno desfasamento do buffer ver abaixo) . No lado do descodif icador, os dois ou mais descodificadores de bins, e o descodificador VLC leem as palavras de código diretamente a partir do fluxo de bits na ordem de descodificação; A descodificação pode ser iniciada com o primeiro bit recebido. Além disso, nenhuma informação secundária é necessária para sinalizar a multiplexação (ou intercalação) dos fluxos de bits parciais. A estrutura básica de um codificador com intercalação de palavras de código é mostrada na Fig. 22. Os codificadores de bins 10 e o codificador VLC 10a não escrevem as palavras de código diretamente para os fluxos de bits parciais, mas estão ligados a um único buffer de palavras de código 29, a partir do qual as palavras de código são escritas para o fluxo de bits 34 por ordem de codificação. Os codificadores de bins 10 enviam pedidos para uma nova, ou para mais entradas novas, de buffer de palavras de código 28, para o buffer de palavras de código 29 e depois enviam as palavras de código 30 para o buffer de palavras de código 29, que são armazenadas nas entradas reservadas do buffer. O codificador VLC 10a escreve diretamente as palavras de código VLC 30a para o buffer de palavras de código 29. As palavras de código (em geral de comprimento variável) 31, do buffer de palavras de código 29, são verificadas por um escritor de palavras de código 32, que grava os bits correspondentes 33 ao fluxo de bits produzido 34. O buffer de palavras de código 29 funciona como um buffer de primeiro a entrar - primeiro a sair: as entradas de palavra de código que são reservadas antes são gravadas também antes no fluxo de bits. O buffer de palavras de código pode ser operado da seguinte maneira: se um novo bin 7 é enviado para um buffer de bins especifico 8 e o número de bins já armazenados esse buffer de bins é zero e não existe atualmente nenhuma palavra de código reservada no buffer de palavras de código para o codificador de bins que está ligado um buffer de bins especifico, então o codificador de bins 10 envia um pedido para o buffer de palavras de código, pelo qual uma ou mais entradas de palavras de código são um buffer de palavras de código 2 9 para o codificador de bins específico 10. As entradas de palavras de código podem ter um número variável de bits; Um limite superior para o número de bits numa entrada de um buffer é normalmente dado pelo tamanho máximo de palavra de código para o codificador de bins correspondente. A palavra de código seguinte, ou as palavras de código seguintes, que são produzidas pelo codificador de bins (para o qual a entrada de palavras de código, ou as entradas de palavras de código foram reservadas), são armazenadas na entrada reservada ou entradas do buffer de palavras de código. Se todas as entradas de buffer reservadas no buffer de palavras de código, para um codificador de bins específico, são preenchidas com palavras de código e o próximo bin é enviado para o buffer de bins, que está conectado com o codificador de bins específico, uma ou mais palavras de código novas são reservadas no buffer de palavras de código no codificador de bins específico, etc. O codificador VLC 10a escreve diretamente as palavras de código VLC 30a para a entrada livre seguinte do buffer de palavras de código 29, isto é, para o codificador VLC, a reserva de palavras de código e a escrita da palavra de código é feita de uma só vez. O buffer de palavra de código 29 representa, de uma certa maneira, um buffer de primeiro a entrar - primeiro a sair. As entradas de buffer são reservadas em ordem sequencial. As palavras de código para as quais as entradas de buffer correspondentes foram reservadas anteriormente são gravadas anteriormente no fluxo de bits. O escritor de palavras de código 32 verifica o estado do buffer de palavras de código 29, continuamente ou depois de uma palavra de código 30 ter sido escrita no buffer de palavra de código 29. Se a primeira entrada de buffer contiver uma palavra de código completa (isto é, a entrada de buffer não está reservada, a correspondente palavra de código 31 e a entrada de buffer correspondente são removidas do buffer de palavras de código 2 0 e os bits da palavra de código 33 são escritos no fluxo de bits. Este processo é repetido até a primeira entrada de buffer não conter nenhuma palavra de código (ou seja, é reservado ou livre) . No final do processo de descodificação, isto é, se todos os símbolos de fonte da quantidade de dados considerada tiverem sido processados, o buffer de palavras de código tem de ser esvaziado. Para esse processo, o seguinte é aplicado para cada buffer de bins / codificador de bins, como primeiro passo: Se o buffer de bins contiver bins, é adicionado um bin com um determinado valor ou um bin com um valor arbitrário, até que a sequência de bins resultante represente uma sequência de bins, que está associada a uma palavra de código (como observado acima, uma maneira preferida de adicionar bins é adicionar tais valores de bins, que produzem a palavra de código mais curta possível - ou uma daquelas - que está associada a uma sequência de bins que contém, ao conteúdo original do buffer de bins como prefixo), então a palavra de código é gravada na próxima entrada de buffer reservada para o correspondente codificador de bins (e o correspondente) buffer de bins ser esvaziado. Se mais de uma entrada de buffer tiver sido reservada para um ou mais codificadores bin, o buffer de palavras de código ainda pode conter entradas de palavras de código reservadas. Nesse caso, estas entradas de palavras de código são preenchidas com palavras de código arbitrárias, mas válidas para os codificadores de bins correspondentes. Pode ser inserida a palavra de código válida mais curta ou uma das palavras de código válidas mais curtas (se houver múltiplos de arco) . 0 codificador VLC não requer qualquer tipo de terminação. Finalmente, todas as palavras de código restantes, no buffer de palavras de código, são gravadas no fluxo de bits. São ilustrados, na Fig. 23, dois exemplos para o estado do buffer de palavras de código. No exemplo (a), o buffer de palavras de código contém 4 entradas, que são preenchidas com uma palavra de código (duas delas são entradas VLC), e 3 entradas reservadas. Além disso, é marcada a próxima entrada livre do buffer. A primeira entrada é preenchida com uma palavra de código (isto é, o codificador bin 2 apenas escreveu uma palavra de código para uma entrada previamente reservada). Na próxima etapa, essa palavra de código será removida do buffer de palavras de código e gravada no fluxo de bits. Em seguida, a primeira palavra de código reservada, para o codificador de bins 3, é a primeira entrada do buffer, mas esta entrada não pode ser removida do buffer de palavras de código, uma vez que é reservada apenas, mas nenhuma palavra de código foi gravada ainda nesta entrada. No exemplo (b) , o buffer de palavra de código contém 4 entradas, que são preenchidas com uma palavra de código (uma delas é uma entrada de buffer VLC), e 4 entradas reservadas. A primeira entrada é marcada como reservada e, portanto, o escritor de palavras de código não pode escrever uma palavra de código para o fluxo de bits. Embora 4 palavras de código estejam contidas no buffer de palavras de código, o escritor de palavras de código tem que esperar até que uma palavra de código seja gravada na primeira entrada de buffer reservada para o codificador de bins 3. Note-se que as palavras de código devem ser escritas na ordem em que foram reservadas, de modo a poder inverter o processo no lado do descodif icador (ver abaixo) . Além disso, note-se que uma entrada de buffer VLC é sempre completada, uma vez que a reserva e a escrita da palavra de código é feita de uma vez. A estrutura básica de um descodificador com intercalação de palavras de código é mostrada na Fig. 24. Os descodificadores de bins 22 e o descodificador VLC 2a não leem as palavras de código diretamente a partir de fluxos de bits parciais separados, mas estão ligados a um buffer de bits 38, a partir dos quais as palavras de código 37, 37a são lidas por ordem de codificação.
Deve notar-se que o buffer de bits 38 não é obrigatoriamente requerido, uma vez que as palavras de código também podem ser lidas diretamente a partir do fluxo de bits. 0 buffer de bits 38 está incluído na ilustração, principalmente para separar, de uma forma clara, os diferentes aspetos da cadeia de processamento.
Os bits 39 do fluxo de bits 40, com intercalação das palavras de código, são sequencialmente inseridos no buffer de bits 38, que representa urn buffer de primeiro em entrar primeiro a sair. Se um descodificador de bins especifico 22 recebe uma solicitação para uma ou mais sequências de bins 35, o descodificador de bins 22 lê uma ou mais palavras de código 37, a partir do buffer de bits 38, através de solicitações de bits 36. O descodif icador pode descodificar instantaneamente os símbolos de fonte. Similarmente, Se o descodificador VLC 22a receber uma solicitação de um novo símbolo 19a lê a palavra de código VLC correspondente 37a, a partir do buffer de bits 38, e devolve o símbolo decodificado 27a. Note-se que o codificador (conforme descrito acima) deve assegurar, através de uma adequada operação do buffer de palavras de código, que as palavras de código são escritas na mesma ordem, para o fluxo de bits, no qual são solicitadas pelos descodificadores de bins. No descodificador, todo o processo de descodificação é acionado por solicitações de símbolos de fonte. Parâmetros, como o número de palavras de código reservadas no lado do codificador por um codificador de bins específico, e o número de palavras de código, que são lidas pelo descodificador de bins correspondente, deve ser o mesmo.
Intercalação de palavras de código de comprimento variável com restrição de baixo desfasamento A intercalação de palavras de código descrita não requer que qualquer informação de particionamento seja enviada como informação secundária. E uma vez que as palavras de código são intercaladas no fluxo de bits, o desfasamento é geralmente pequeno. No entanto, não é garantido que uma determinada restrição de desfasamento (por exemplo, especificada por um número máximo de bits que são armazenados no buffer de palavras de código) seja obedecido. Para além disso, o tamanho do buffer requerido, para o buffer de palavras de código, pode teoricamente tornar-se muito grande. Ao considerar o exemplo da
Fig. 23 (b), é possível que nenhum outro bin seja enviado para o buffer de bins 3 e, portanto, o codificador de bins 3 não enviará nenhuma nova palavra de código para o buffer de palavras de código, até que o processo de esvaziamento, no final do pacote de dados seja aplicado. Então, todas as palavras de código, para os codificadores de bins 1 e 2, teriam que esperar até o final do pacote de dados antes de poder ser gravado no fluxo de bits. Esta desvantagem pode ser contornada pela adição de um outro mecanismo à codificação (e também ao processo de descodificação, como descrito mais adiante) . 0 conceito básico desse mecanismo adicional é que, se uma medida relacionada com o desfasamento ou com um limite superior de desfasamento (ver abaixo) exceder um limite especificado, a primeira entrada de buffer reservada é preenchida limpando o buffer de bins correspondente (usando um mecanismo semelhante ao do pacote de dados). Através de tal mecanismo, o número de entradas do buffer de espera é reduzido, até que a medida de desfasamento associada seja inferior ao limite especificado. No lado do descodificador, os bins que foram inseridos, no lado do codificador para obedecer a restrição de desfasamento, deve ser descartada. Para este descarte de bins, pode ser usado, basicamente, o mesmo mecanismo que no lado do codificador.
Após se ter descrito, em pormenor, as possibilidades de intercalação dos fluxos de bits de codificação VLC e PIPE, a descrição volta a focar os elementos de sintaxe, já acima mencionados, decompostos em símbolos de fonte, como mencionado em relação à Fig. lb, lc e 2b. Para fins ilustrativos, a descrição seguinte assume que os elementos de sintaxe, assim decompostos, são o nível de coeficiente de transformação absoluto. No entanto, este é apenas um exemplo e outros tipos de elementos de sintaxe podem ser tratados da mesma forma. Em particular, a seguir, é descrita a codificação de níveis absolutos por particionamento e utilização de diferentes códigos de entropia em codificadores de imagem e video baseados em blocos.
Por exemplo, as imagens de uma sequência de vídeo são normalmente decompostas em blocos. Os blocos, ou as componentes de cor dos blocos, são previstos por previsão compensada por movimento ou por intra-previsão. Os blocos podem ter tamanhos diferentes e podem ser quadráticos ou retangulares. Todas as amostras de um bloco, ou de um componente de cor de um bloco, são previstas usando o mesmo conjunto de parâmetros de previsão, tais como índices de referência (identificando uma imagem de referência no conjunto de imagens já codificado), parâmetros de movimento (especificando uma medida para o movimento dos blocos entre uma imagem de referência e a imagem atual), parâmetros para especificar o filtro de interpolação, modos de intra-previsão, etc. Os parâmetros de movimento podem ser representados por vetores de deslocamento, com uma componente horizontal e vertical, ou por parâmetros de movimento de ordem superior, tais como parâmetros de movimento afins que consistem em 6 componentes. Também é possível que mais de um conjunto de parâmetros de previsão (tais como índices de referência e parâmetros de movimento) sejam associados a um único bloco. Nesse caso, para cada conjunto de parâmetros de previsão, um único sinal de previsão intermediário, para o bloco, ou para o componente de cor de um bloco é gerado, e o sinal de previsão final é construído por uma soma ponderada dos sinais de previsão intermediários. Os parâmetros de ponderação e potencialmente também um deslocamento constante (que é adicionado à soma ponderada) podem ser fixos para uma imagem, ou uma imagem de referência, ou um conjunto de imagens de referência, ou podem ser incluídos no conjunto de parâmetros de previsão para o bloco correspondente. Da mesma forma, as imagens fixas também são frequentemente decompostas em blocos, e os blocos são previstos por um método de intra-previsão (que pode ser um método de intra-previsão espacial ou um método de intra-previsão simples, que prevê a componente DC do bloco) . Num caso de canto, o sinal de previsão também pode ser zero. A diferença entre os blocos originais, ou as componentes de cor dos blocos originais, e os sinais de previsão correspondentes, também referido como o sinal residual, é normalmente transformado e quantificado. Uma transformação bidimensional é aplicada ao sinal residual e os coeficientes de transformação resultantes são quantificados. Para esta codificação de transformação, os blocos, ou as componentes de cor dos blocos, para os quais foi utilizado um conjunto particular de parâmetros de previsão, podem ser ainda divididos antes da aplicação da transformação. Os blocos de transformação podem ser iguais ou menores que os blocos que são usados para previsão. Também é possível que um bloco de transformação inclua mais de um dos blocos que são utilizados para a previsão. Diferentes blocos de transformação, numa imagem estática ou uma imagem de uma sequência de vídeo, podem ter tamanhos diferentes e os blocos de transformação podem representar blocos quadráticos ou retangulares.
Todos estes parâmetros de previsão e residual podem formar o fluxo de elementos de sintaxe 138 e 226, respetivamente.
Os coeficientes de transformação quantificados resultantes, também referidos como níveis de coeficientes de transformação, podem então ser transmitidos usando a codificação de entropia, por qualquer um dos esquemas de codificação acima descritos. Para este fim, um bloco de níveis de coeficientes de transformação pode ser mapeado num vetor (isto é, num conjunto ordenado) de valores de coeficiente de transformação utilizando uma varredura, em que diferentes varreduras podem ser utilizadas para blocos diferentes. Muitas vezes é usada uma varredura em zig-zag. Para blocos que contenham apenas amostras de um campo de um quadro entrelaçado (estes blocos podem ser blocos em campos codificados ou blocos de campo em quadros codificados), também é comum usar uma varredura diferente especificamente projetada para blocos de campo. Um possível esquema de codificação, para codificar a sequência ordenada resultante de coeficientes de transformação, é a codificação em nivel de execução. Um possível esquema de codificação, para codificar a sequência ordenada resultante de coeficientes de transformação, é a codificação em nível de execução. Geralmente, um grande número de níveis de coeficientes de transformação são zero e um conjunto de níveis de coeficientes de transformação sucessivos, que são iguais a zero, pode ser eficientemente representado codificando o número de níveis sucessivos de coeficientes de transformação que são iguais a zero (a execução) por um respetivo elemento de sintaxe. Para os restantes coeficientes de transformação (não nulo), o nível atual é codificado sob a forma de elementos de sintaxe respetivos. Existem várias alternativas de códigos de nível de execução. A execução, antes de um coeficiente não nulo, e o nível do coeficiente de transformação, diferente de zero, podem ser codificados em conjunto usando um único elemento de sintaxe. Muitas vezes, são incluídos elementos de sintaxe especiais para o bloco final, que é enviado após o último coeficiente de transformação diferente de zero. É também possível primeiro codificar o número de níveis de coeficientes de transformação não nulo e, dependendo deste número, são codificados os níveis e corridas.
Uma abordagem um pouco diferente é a usada na codificação de entropia CABAC altamente eficiente em H.264 / AVC. Aqui, a codificação dos níveis de coeficientes de transformação é dividida em três etapas. Na primeira etapa, um elemento de sintaxe binário coded_block_flag é transmitido para cada bloco de transformação, o qual sinaliza se o bloco de transformação contém níveis de coeficientes de transformação significativos (isto é, coeficientes de transformação que são não nulo) . Se este elemento de sintaxe indica que estão presentes níveis de coeficientes de transformação significativos, é codificado um mapa de significância de valor binário, que especifica qual dos níveis de coeficientes de transformação têm valores diferentes de zero. E então, numa ordem de varredura inversa, os valores dos níveis de coeficientes de transformação não nulos são codificados. 0 mapa de significância é codificado no fluxo de elementos de sintaxe 138 como se segue. Para cada coeficiente na ordem de varredura, é codificado um elemento de sintaxe binário significativo_coeff_flag, que especifica se o nível de coeficiente de transformação correspondente não é igual a zero. Se o bin significativo_coeff_flag for igual a um, isto é, se um nível de coeficiente de transformação diferente de zero existir nesta posição de varredura, um outro elemento de sintaxe binário last_significant_coeff_flag é codificado. Este bin indica se o nível de coeficiente de transformação significativo atual é o último nível de coeficiente de transformação significativo dentro do bloco ou se outros níveis de coeficientes de transformação significativos seguem na ordem de varredura. Se last_significant_coeff_flag indica que não há mais coeficientes de transformação significativos, nenhum outro elemento de sintaxe é codificado para especificar o mapa de significância para o bloco. Na etapa seguinte, os valores dos níveis de coeficientes de transformação significativos são codificados, cujas posições dentro do bloco já estão determinadas pelo mapa de significância. Os valores dos níveis de coeficientes de transformação significativos são codificados, em ordem de varredura inversa, usando os três elementos de sintaxe a seguir. 0 elemento de sintaxe binário coeff_abs_greater_one indica se o valor absoluto do nível de coeficiente de transformação significativo é maior que um. Se o elemento de sintaxe binário coeff_abs_greater_one indicar que o valor absoluto é maior que um, um outro elemento de sintaxe coeff_abs_level_minus_two é enviado, que especifica o valor absoluto do coeficiente de transformação menos dois. Este é o tipo de elemento de sintaxe cujo processamento pode ser realizado de acordo com a Fig. lb, lc e 2b. Finalmente, o elemento de sintaxe binário coeff sign flag, que especifica o sinal do valor do coeficiente de transformação, é codificado para cada nível de coeficiente de transformação significativo. Deve ser notado novamente que os elementos de sintaxe que estão relacionados com o mapa de significância são codificados em ordem de exploração, enquanto os elementos de sintaxe que estão relacionados com os valores reais dos níveis de coeficientes de transformação são codificados em ordem de exploração inversa permitindo a utilização de valores mais adequados de modelos de contexto. Também é possível que um padrão de varredura adaptativo seja usado para o mapa de signif icância como no primeiro Modelo de Teste de H.265 / HEVC. Outro conceito é utilizado para a codificação dos níveis de coeficientes de transformação absolutos, para blocos de transformação maiores que 4x4 no primeiro Modelo de Teste de H.265 / HEVC. No caso de blocos de transformação maiores que 4x4, o bloco de transformação maior é dividido em blocos 4x4 e os blocos 4x4 são codificados na ordem de varredura, enquanto para cada bloco 4x4 é usada a ordem de varredura inversa.
Na codificação de entropia CABAC em H.264 / AVC, todos os elementos de sintaxe, para os níveis de coeficientes de transformação, são codificados usando uma modelação de probabilidade binária. 0 elemento de sintaxe binário coeff_abs_level_minus_two, por exemplo, é primeiro binarizado, isto é, é mapeado em uma sequências de decisões binárias (bins), e esses bins são sequencialmente codificados. Os elementos de sintaxe binários significant_coeff_flag, last significant coeff flag, coeff abs greater one e coeff_sign_flag são codificados diretamente. Cada bin codificado (incluindo os elementos de sintaxe binários) está associado a um contexto. Um contexto representa um modelo de probabilidade para uma classe de bins codificados. Uma medida relacionada com a probabilidade de um dos dois possíveis valores de bin é estimada para cada contexto com base nos valores dos bins que já foram codificados com o contexto correspondente. Para vários bins relacionados com a codificação de transformação, o contexto que é usado para codificação é selecionado com base em elementos de sintaxe já transmitidos ou com base na posição dentro de um bloco.
Após a codificação do mapa de signif icância, o bloco é processado numa ordem de varredura inversa. Como mencionado anteriormente, outro conceito é usado no primeiro Modelo de Teste de H.265 / HEVC. Os blocos de transformação maiores que 4x4 são divididos em blocos 4x4 e os blocos 4x4 resultantes são processados em ordem de varredura, enquanto os coeficientes dos blocos 4x4 são codificados em ordem de varredura inversa. A descrição que se segue é válida para todos os blocos 4x4 no primeiro Modelo de Teste de H.265 / HEVC e H.264 / AVC e também para blocos 8x8 em H.264 / AVC e esta descrição também pode aplicar-se à construção do fluxo Dos elementos de sintaxe 138 e 226, respetivamente.
Se uma posição de varredura é significativa, isto é, o coeficiente é diferente de zero, o elemento de sintaxe binário coeff abs greater one é transmitido dentro do fluxo 138. Inicialmente (dentro de um bloco), o segundo modelo de contexto do correspondente modelo de contexto é selecionado para o coeff_abs_greater_one de elemento de sintaxe. Se o valor codificado de coeff_abs_greater_one de elemento de sintaxe, dentro do bloco, é igual a um (ou seja, o coeficiente absoluto é maior que 2), a modelação de contexto retorna ao primeiro modelo de contexto do conjunto e usa esse modelo de contexto até o final do bloco. Caso contrário (todos os valores codificados de coeff_abs_greater_one dentro do bloco são zero e os níveis de coeficientes absolutos correspondentes são iguais a um), o modelo de contexto é escolhido dependendo do número dos elementos de sintaxe coeff_abs_greater_one iguais a zero que já foram processados na verificação inversa Do bloco considerado. A seleção do modelo de contexto para o elemento de sintaxe coeff_abs_greater_one pode ser resumida pela seguinte equação, onde o índice de modelo de contexto atual C± + i, é selecionado com base no índice de modelo de contexto C anterior e o valor do elemento de sintaxe codificado anteriormente coeff_abs_greater_one, que é representado por bin na equação. Para o primeiro elemento de sintaxe coeff_abs_greater_one dentro de um bloco, é definido o índice de modelo de contexto como Cj = 1. 0 sequndo elemento de sintaxe, para codificar os níveis de coeficientes de transformação absolutos, coeff_abs_level_minus_two, é apenas codificado, quando o elemento de sintaxe coeff_abs_greater_one, para a mesma posição de varredura, é igual a um. 0 elemento de sintaxe binário coeff_abs_level_minus_two é binarizado numa sequência de bins e para o primeiro bin desta binarização; é selecionado um índice de modelo de contexto como descrito a seguir. Os restantes bins da binarização são codificadas com contextos fixos. 0 contexto para o primeiro bin da binarização é selecionado da seguinte maneira. Para o primeiro elemento de sintaxe coeff_abs_level_minus_two, o primeiro modelo de contexto do conjunto de modelos de contexto para o primeiro coeff_abs_level_minus_two de elemento de sintaxe é selecionado, o índice de modelo de contexto correspondente é definido igual a Cj = 0. Para cada primeiro bin do elemento de sintaxe coeff_abs_level_minus_two, a modelação de contexto muda para o próximo modelo de contexto no conjunto, onde o número de modelos de contexto no conjunto é limitado a 5. A seleção do modelo de contexto pode ser expressa pela seguinte fórmula, onde o índice de modelo de contexto atual Cr+i é selecionado com base no índice de modelo de contexto anterior Cr.
Como mencionado anteriormente, para o primeiro elemento de sintaxe coeff_abs_remain_minus_two dentro de um bloco, o índice de modelo de contexto é definido igual a Cr = 0. Note-se que diferentes conjuntos de modelos de contexto devem ser definidos para os elementos de sintaxe coeff_abs_greater_one e coeff_abs_remain_minus_two. Note-se também que, para o primeiro Modelo de Teste de H.265 / HEVC, blocos de transformação maiores que 4x4 podem ser divididos em blocos 4x4. Os blocos 4x4 particionados podem ser processados em ordem de varredura e, para cada bloco 4x4 particionado, um conjunto de contexto pode ser derivado com base no número de coeficientes maior do que um no bloco 4x4 anterior. Para o primeiro bloco 4x4 de um bloco de transformação maior que 4x4 e para os blocos de transformação 4x4 de origem, pode ser usado um conjunto de contexto separado.
Ou seja, sempre que na descrição que se segue a codificação baseada no contexto é utilizada para qualquer um dos símbolos de origem nos quais coeff_abs_greater_one e coeff abs remain minus two podem ser decompostos como se segue, então esta derivação de contexto pode ser utilizada pelo atribuidor 114 e 212 pelo codificador / descodificador VLC 102 e 202, por exemplo. A fim de reduzir a complexidade em termos de número de bins processados por CABAC ou PIPE, em comparação com as técnicas iniciais, e também em termos de complexidade de cálculo ou também para aumentar a eficiência de codificação, a explicação abaixo descreve uma abordagem para codificação de níveis absolutos utilizando diferentes códigos de comprimento variável para diferentes partições 140i a 1403 em codificadores e descodificadores de imagem e vídeo. A possibilidade descrita a seguir pode ser, contudo, aplicada a todos os tipos de níveis absolutos para codificadores de imagem e vídeo, como as diferenças de vetor de movimento ou coeficientes do filtro de loop adaptativo. Embora a codificação dos níveis de coeficientes de transformação seja realizada conforme descrito abaixo a codificação do mapa de significância pode permanecer como no primeiro Modelo de Teste de H.265 / HEVC ou como foi descrito acima, ou a codificação do mapa de significância também pode ser feito como em H.264 / AVC ou de outra forma.
Conforme descrito acima, a codificação dos níveis de transformação absolutos é realizada em múltiplas partições 140i-3. 0 esquema de codificação tem sido exemplificado ilustrado na Figura lb com três partições 140i_3. Os limites 142 e 144 do esquema são variáveis resultando em tamanhos de partição variáveis. 0 esquema de codificação é feito da seguinte forma.
Um primeiro código de entropia é usado para codificar o primeiro componente ou símbolo de fonte, isto é, o nível absoluto de coeficiente de transformação (z) no caso de ser mesmo menor do que o limite 1, ou o limite 1 no caso de o mesmo não ser. Se o nível de coeficiente de transformação absoluta for maior ou igual ao limite ligado 1 da primeira partição 140i, do que o limite ligado 1 (142) da primeira partição (1401) é subtraído do nível de coeficiente de transformação absoluta e o valor resultante z' é codificado com um segundo código de entropia. Se o nível de coeficiente de transformação absoluto restante z' for maior ou igual a um limite limite2-limitel para a segunda partição 1402, do que o limite limite2-limitel da segunda partição é novamente subtraído do nível absoluto de coeficiente de transformação z' e o valor resultante é codificado com um terceiro código de entropia. De um modo geral, quando o limite de uma partição é atingido, o código de entropia para a próxima partição para o limite é usado para codificar o valor resultante de níveis de coeficientes de transformação absolutos menos o limite da partição correspondente.
Os códigos de entropia podem ser códigos de comprimento variável simples, como códigos de comprimento de execução ou tabelas de consulta (por exemplo código Huffman) , ou códigos de entropia mais complexos que empregam modelos de probabilidade como CABAC ou PIPE. 0 número de partições e o limite das partições pode ser variável ou dependendo do elemento de sintaxe atual. 0 conceito de partição, ilustrado na Fig. lb, tem os seguintes benefícios. Em seguida, usamos os coeficientes de transformação absolutos como um exemplo, mas deve ser entendido que estes podem ser substituídos por qualquer outro elemento de sintaxe. Como exemplo, a distribuição de probabilidade dos níveis de coeficientes de transformação absolutos pode ser aproximadamente uma distribuição geométrica. Portanto, códigos de entropia otimizados para distribuições geométricas podem ser utilizados para codificar os níveis de coeficientes de transformação absolutos. Mas tal modelo nem sempre é ideal localmente, mesmo se forem empregues a modelação de contexto e a seleção de modelo de probabilidade. Por exemplo, para um bloco de transformação, os níveis de coeficientes de transformação absolutos locais seguem uma distribuição que não é geométrica em absoluto, se contém a mesma quantidade de níveis de coeficientes de transformação muito baixa e média gama, enquanto o modelo pode considerar verdade (com uma certa precisão) para uma quantidade específica de blocos em imagem ou vídeo devido à lei de grandes números. Para tal caso, a distribuição geométrica não é um modelo adequado. Além disso, quando se consideram níveis de coeficientes de transformação absolutos com valores grandes, a distribuição desses grandes valores é frequentemente uniforme. 0 conceito de particionamento permite diferentes modelos de probabilidade para diferentes níveis de coeficientes de transformação absolutos. Para valores absolutos mais baixos, códigos de entropia mais complexos podem ser aplicados para maior eficiência, enquanto para grandes níveis absolutos podem ser empregados códigos de entropia menos complexos para reduzir a complexidade.
Como mencionado anteriormente, são utilizados códigos de entropia adequados para as diferentes partições. Podem ser empregues três tipos de códigos de entropia. 0 primeiro código de entropia usa PIPE. No entanto, deve notar-se que, de acordo com uma alternativa, um método de codificação de entropia como CABAC ou qualquer outro codificador aritmético pode ser utilizado alternativamente. Isto é, os primeiros símbolos Si (ver Fig. 2b) podem ser codificados através do atalho de codificação PIPE. 0 subdivisor 100 e o recombinador 220 atuam em conformidade.
Para o segundo tipo, podem ser utilizados códigos de Golomb e algumas variantes truncadas incluindo subconjuntos (por exemplo, códigos de Golomb-Rice) . Isto é, os segundos símbolos S2 (ver Fig. 2b) podem ser codificados através de tais códigos VLC em codificador e descodificador VLC 102/202. O subdivisor 100 e o recombinador 220 atuam em conformidade.
Os códigos Exponential-Golomb são usados como o terceiro tipo. Isto é, os terceiros símbolos S3 (ver Fig. 2b) podem ser codificados através de tais códigos VLC em codificadores e descodificadores VLC 102/202. O subdivisor 100 e o recombinador 220 atuam em conformidade. Diferentes códigos VLC e diferentes combinações de VLC e PIPE ou VLC e códigos aritméticos são possíveis.
Embora o primeiro código seja mais complexo, mas produza um melhor desempenho de compressão, os códigos de segunda entropia representam um compromisso razoável entre complexidade e desempenho. Os últimos códigos de entropia, ex. códigos de Exponencial-Golomb, são de muito baixa complexidade. A seguir, é descrita a codificação das diferentes partições.
Se uma partição, tal como a partição 140i, tal como o simbolo Si, deve ser codificada por entropia utilizando um codificador de entropia, que emprega modelos de probabilidade como o codificador 104 de PIPE (novamente, CABAC ou qualquer outro codificador aritmético pode ser utilizado numa alternativa não aqui descrita mais adiante), o subdivisor 120 direciona o mesmo para o codificador PIPE 104. Em primeiro lugar, os níveis de coeficientes de transformação absolutos valorizados não binários, podem ser binarizados no simbolizador 122 utilizando um método de binarização. A binarização mapeia os níveis de coeficientes de transformação absolutos valorizados não binários para uma sequência de bins binários. Cada bin é codificado com um contexto escolhido pelo atribuidor 114. A modelação de contexto pode ser feita para o primeiro bin e fixada para os seguintes bins da sequência de bins como coeff_abs_level_minus_two em H.264 / AVC ou, pode ser usada para cada bin, uma modelação de contexto diferente do fluxo de bins. Note-se que a binarização pode ser um código de comprimento variável como códigos de Golomb ou códigos de Exponential-Golomb ou outros códigos de comprimento variável.
Em seguida, uma partição tal como a partição 1402 ou os símbolos S2 podem ser codificados com um código de Golomb, aqui no codificador VLC 102 e, respetivamente, descodificados no descodificador VLC. Os códigos de Golomb são um conjunto de códigos de entropia desenhados para a fonte distribuída geométrica. Se a ordem do código de Golomb for zero, o código de Golomb é também conhecido como código unário. O código unário está relacionado com a binarização de coeff_abs_level_minus_two em H.264 / AVC. Os códigos de Golomb são construídos como se segue. Para um parâmetro específico de Golomb k, o valor n é dividido pelo parâmetro de Golomb k usando divisão integral, sendo calculado o restante r.
Depois de derivar os parâmetros especificados pelas fórmulas acima, o valor n pode ser codificado em duas partes. A primeira parte, também referida como parte do prefixo, é um código unário. 0 valor resultante p + 1 especifica o número de uns e um zero de terminação ou vice-versa. 0 valor remanescente, também referido como parte remanescente e indicado por r, é representado com um código binário truncado. Os códigos de Golomb-Rice são utilizados para codificar os símbolos de fonte, tais como símbolos de fonte s2, sendo os códigos de Golomb-Rice um subconjunto de códigos de Golomb. Além disso, ao utilizar tais códigos de entropia para as partições 140i_3, contendo um limite, tal como a partição 1402, o alfabeto dos respetivos símbolos de fonte (tais como os símbolos de fonte s2) é limitado, e o código de Golomb-Rice pode ser modificado de modo que a eficiência de codificação possa ser melhorado. 0 parâmetro do código de Golomb-Rice pode ser fixo ou variável. Se o parâmetro for variável, o parâmetro pode ser estimado como parte da etapa de modelação de contexto. Por exemplo, se um símbolo de fonte s2 entra no codificador VLC 102, este último pode determinar o parâmetro do código de Golomb-Rice a partir de um contexto de s2. Os códigos de Golomb-Rice são códigos de Golomb com parâmetros com potência de dois. Assim, eles são baseados na divisão e multiplicação por dois e, portanto, eles podem ser implementados de forma eficiente em uma arquitetura binária com turnos e operações de adição. A relação entre o parâmetro de Golomb-Rice e o parâmetro de Golomb é, portanto, kqolomb = 2kRICE. No caso do código de Golomb-Rice, a parte restante é exatamente a representação binária do valor remanescente. Para o parâmetro de Golomb-Rice de zero, o código resultante é idêntico ao código unário e não tem parte restante. Para o parâmetro igual a um, a parte restante consiste num bin com dois símbolos de entrada compartilhando o mesmo prefixo unário. A seguir, são ilustradas algumas tabelas de exemplo para parâmetros de Golomb-Rice selecionados.
Dado o intervalo da partição, tal como, por exemplo o limit2-limitl, no caso da partição 1402, e o parâmetro do código de Golomb-Rice, o truncamento pode ser feito como se segue. O parâmetro de Golomb-Rice descreve o número de bins necessários para representar a parte restante e o dois à potência do valor do parâmetro descreve o número de valores que podem ser representados com o mesmo prefixo. Esses valores formam um grupo de prefixos. Por exemplo, para o parâmetro zero, apenas um prefixo pode representar um valor especifico, enquanto para o parâmetro três, oito valores de entrada compartilham o mesmo prefixo e, portanto, um grupo de prefixos contém oito valores para o parâmetro três. Para um alfabeto de fonte limitado e um dado código de Golomb-Rice, o último bin do prefixo pode ser deixado de fora, para valores no último grupo de prefixo, resultando num código de prefixo com comprimento fixo.
No caso de o intervalo ser nove e o parâmetro de Golomb-Rice ser dois, o número de valores que podem ser representados com um mesmo prefixo é de quatro. O valor máximo é nove, o que também indica que o limite é excedido e que o próximo código de entropia, da próxima partição, tem de ser usado. Neste caso de exemplo, os valores de 0 a 3 têm o prefixo 0, os valores de 4 -7 têm o prefixo 10 e 8 - 9 o prefixo 110. Como os valores 8-9 formaram o último grupo de prefixos, o seu zero remanescente pode ser deixado de fora, e os valores de 8 a 9 podem ser representados por 11. Noutras palavras, suponha-se que um símbolo de fonte S2 entrou no codificador VLC 102, com o número de valores possíveis de S2 sendo 9 (= limit2-limitl + 1) e sendo dois o parâmetro de Golomb-Rice, para esse símbolo de fonte. Em seguida, uma respetiva palavra de código de Golomb-Rice seria emitida pelo codificador VLC 102 para esse símbolo de fonte, que tem um prefixo como acabamos de descrever. Para a parte restante da palavra de código, o código truncado pode ser derivado, pelo codificador VLC 102,como se mostra a seguir. Normalmente, o parâmetro dos códigos de Golomb-Rice indica o número de bins da parte restante. Num caso truncado, nem todas os bins do remanescente necessitam de ser codificados. Para um caso truncado, todos os valores com prefixo fixo são contados (por exemplo, um bin do prefixo é deixado de fora) . Note-se que, uma vez que o código é truncado, o valor contado é sempre menor ou igual ao número máximo de valores para um prefixo. Se é possível o truncamento da parte restante, a derivação da parte do remanescente, truncada para o último grupo de prefixo, pode prosseguir com os seguintes passos. Primeiro, é derivado o maior número 1 para a potência de dois menor ou igual ao número contado. Depois, na segunda etapa, é derivado o menor número h, para a potência de dois maior do que o número contado. O primeiro valor 1 descreve o número de valores no grupo de prefixos com um restante h de bins. Todos os remanescentes desses valores começam com 0 seguido pela representação binária do remanescente, limitada ao número de valores no grupo restante. Para os valores remanescentes do último grupo de prefixos, agora tratado como um novo grupo de prefixos, é feito o mesmo procedimento, exceto para os valores resultantes que formaram o primeiro grupo restante, em que o restante começa com um 1. Esse procedimento é executado até que todos os remanescentes sejam derivados. Como exemplo, o intervalo é 14 e 0 parâmetro é três. O primeiro grupo de prefixos contém valores de 0 a 7 e os segundos valores de grupo de prefixos de 8 a 13. O segundo grupo de prefixos contém seis valores. Os parâmetros são 1 = 2 e h = 3. Assim, os quatro primeiros valores dos grupos de prefixo são representados por um remanescente com três bins (um zero à direita e a representação binária para distinguir os quatro valores). Para os dois últimos valores, é executado de novo o mesmo procedimento. Os parâmetros são 1 = 1 eh = 2. O remanescente dos dois últimos valores pode agora ser representado como 10 e 11. Outro exemplo, para demonstrar o método, é com um parâmetro de Golomb-Rice de quatro e um intervalo de dez. Para este exemplo, os parâmetros são 1 = 3 e h = 4. Com estes parâmetros, a parte remanescente truncada, para os primeiros oito valores, é representada por quatro bins. Os dois valores restantes têm a mesma parte remanescente que no exemplo anterior. Se o intervalo for nove, para o exemplo anterior, o parâmetro para a sequnda execução éi=0eh=l. A parte remanescente do único valor que permanece é 1. 0 terceiro tipo de códiqos de entropia podem ser códiqos de Exponential-Golomb. Podem ser empregues para distribuições prováveis iquais (por exemplo, com o parâmetro zero) tais como símbolos de fonte s 3. Ou seja, o par codificador / descodificador VLC pode ser responsável pela sua codificação. Conforme mencionado anteriormente, os níveis de coeficientes de transformação absolutos maiores são frequentemente uniformemente distribuídos. Mais precisamente, o códiqo de Exponential-Golomb de ordem zero pode ser usado para codificar a última partição 1403. 0 início e, portanto, o limite 144 para a partição anterior 1402 podem ser variáveis. A posição do limite 144 pode ser controlada pelo codificador / descodificador VLC 102/200 em dependência dos símbolos de fonte 106, 108 e / ou 110 codificados / decodificados de forma preditiva ou de elementos de sintaxe 138 (ou 218, 204 e / ou 208 ou elementos de sintaxe 226) .
Numa forma de realização preferida, o número de partições é três, como mostrado na Fiq. lb, e os limites 142 e 144 podem ser variáveis. Para a primeira partição 140i, a codificação PIPE pode ser utilizada como discutido acima. No entanto, alternativamente CABAC pode ser utilizado também. Nesse caso, o par codificador / descodificador PIPE seria substituído por um par codificador / descodificador aritmético binário. Os códiqos de Golomb-Rice truncados podem ser utilizados para a sequnda partição 1402 e o códiqo de Exponential-Golomb de ordem zero pode ser utilizado para a última partição I4O3.
Noutra forma de realização preferida, o número de partições 140i-3 é três e o primeiro limite 142 é fixo, enquanto o segundo limite 144 é variável. Para a primeira partição 140i, CABAC ou PIPE é empregue. Os códigos de Golomb-Rice truncados podem ser utilizados para a segunda partição 1402 e o código de Exponential-Golomb de ordem zero pode ser utilizado para a última partição 1403.
Noutra firma de realização preferida, o número de partições é igual a três enquanto ambos os limites 142 e 144 são variáveis. Por exemplo, para a primeira partição 140i, usa-se CABAC ou PIPE, enquanto na segunda partição 1402 se pode usar o código de Golomb-Rice truncado e na terceira partição 1403 usar-se o código de Exponential-Golomb de ordem zero. O limite 142 da primeira partição 140i, utilizando CABAC ou PIPE, que emprega modelos de probabilidade adaptativos, pode ser dois. A modelação de contexto, para o primeiro bin, pode ser feita como descrito para coeff_abs_greater_one, como descrito acima, e a modelação de contexto, para o segundo bin, pode ser feita como descrito para coeff abs level minus two em H.264 / AVC como também foi acima descrito. A determinação do último contexto seria realizada pelos atribuidores 114 e 212, respetivamente. A ligação 142 da primeira partição 140i usando a codificação de entropia que emprega a modelagem de probabilidade (por exemplo, PIPE ou CABAC) pode ser duas e a modelação de contexto para a primeira e para o segundo bin pode ser feita como descrito para coeff abs greater one em H.264 / AVC, como descrito acima. A avaliação do contexto definido Coeff_abs_greater_one pode ser feito separadamente para o segundo bin. O limite 142 da primeira partição 140i, que utiliza a codificação de entropia e a modelação de probabilidade (por exemplo, CABAC ou PIPE) , pode ser igual a um. Para o único bin (ou símbolo do alfabeto) do fluxo de bins, do respetivo símbolo de fonte, a modelação de contexto pode ser feita como descrito anteriormente para coeff abs greater one em H.264 / AVC. 0 limite 142 da primeira partição 140i que utiliza a codificação de entropia com modelação de probabilidade (por exemplo, CABAC ou PIPE) pode ser três. A modelação de contexto do primeiro e do segundo bin da sequência de bin do respetivo símbolo de fonte pode ser feita como coeff_abs_greater_one em H.264 / AVC. A modelação de contexto para o terceiro bin pode ser feita como coeff_abs_level_minus_two em H.264 / AVC. A avaliação do conjunto de contexto, como descrito para coeff_abs_greater_one, pode ser feita separadamente para o segundo bin.
Um conjunto de códigos de Golomb-Rice truncados pode ser utilizado como códigos de entropia da segunda partição 1402. O limite 144 da segunda partição, que especifica o inicio da terceira partição 1403, dependendo do parâmetro de código de entropia, pode ser variável. Além disso, o parâmetro de Golomb-Rice pode ser limitado a três e a seleção de parâmetros pode ser feita como a modelação de contexto para coeff_abs_level_minus_two em H.264 / AVC. O intervalo do limite limite2 pode ser variável e pode depender do parâmetro de Golomb-Rice. Se o parâmetro for zero, o intervalo é 8. Para o parâmetro um, o intervalo é 10. No caso do parâmetro dois, o intervalo é 12 e, para o parâmetro três, o intervalo é igual a 16. Neste exemplo, o parâmetro de Golomb-Rice pode ser definido como zero no inicio de um bloco de coeficientes de transformação. Para cada nivel de coeficiente de transformação, codificado no bloco maior ou igual ao primeiro limite, é usado o correspondente código de Golomb-Rice. Após a codificação (ou descodificação) de um nivel, é realizada a avaliação seguinte para atualizar o parâmetro de Golomb-Rice para codificação (ou descodificação) do próximo nivel, maior ou igual, do que o primeiro limite. Note-se que o parâmetro de Golomb-Rice não pode ser diminuído usando esta forma de adaptação. A regra de adaptação de parâmetros pode ser resumida como se segue, onde k± + j representa o parâmetro de Golomb-Rice a ser utilizado para a codificação do valor de nivel seguinte e valor indica o valor previamente codificado com o parâmetro de Golomb-Rice correspondente kj_
Numa concretização preferida, um conjunto de códigos de Golomb-Rice truncados pode ser utilizado como códigos de entropia da segunda partição 1402- O limite 144 da segunda partição 1402, especificando o inicio da terceira partição 1403, pode ser variável, dependendo do parâmetro de código de entropia. Também nesta forma de realização preferida, o parâmetro de Golomb-Rice pode ser limitado a três e a seleção de parâmetros pode ser feita como modelação de contexto para coeff_abs_level_minus_two em H.2 64 / AVC. O intervalo pode ser variável e depende do parâmetro de Golomb-Rice. Se o parâmetro for zero, o intervalo é 8. Para o parâmetro um, o intervalo é 10. No caso do parâmetro dois, o intervalo é 12 e para o parâmetro três, o intervalo é igual a 16. Nesta forma de realização preferida, o intervalo do parâmetro de Golomb-Rice é definido como zero no inicio do bloco. A adaptação do parâmetro de Golomb-Rice é realizada como descrito pela equação (QQ). Note-se que o parâmetro não pode ser diminuído usando esta forma de adaptação.
Numa outra forma de realização preferida, pode ser utilizado, como códigos de entropia da segunda partição 1402, um conjunto de códigos de Golomb-Rice truncados. O limite 144, da segunda partição 1402, especificando o início da terceira partição 1403, pode ser fixado, dependendo do parâmetro de código de entropia. Também nesta forma de realização preferida, o parâmetro de
Golomb-Rice pode ser limitado a três e a seleção de parâmetros pode ser feita como modelação de contexto para coeff_abs_level_minus_two em H.2 64 / AVC. 0 intervalo da segunda partição 1402pode ser fixado em 14. Nesta forma de realização preferida, o parâmetro de Golomb-Rice pode ser ajustado para zero no início do bloco. A adaptação do parâmetro de Golomb-Rice é realizada como descrito pela equação (QQ) . Note-se que o parâmetro não pode ser diminuído usando esta forma de adaptação.
Numa outra forma de realização preferida, pode ser utilizado um conjunto de códigos de Golomb-Rice truncados como códigos de entropia da segunda partição 1402. 0 limite 144 da segunda partição 1402, que especifica o início da terceira partição 1403, pode ser variável, dependendo do parâmetro de código de entropia. Também nesta forma de realização preferida, o parâmetro de Golomb-Rice pode ser limitado a três e a seleção de parâmetros pode ser feita como modelação de contexto para coeff_abs_level_minus_two em H.264 / AVC. O intervalo pode ser variável e depende do parâmetro de Golomb-Rice. Se o parâmetro for zero, o intervalo pode ser 8. Para o parâmetro um, o intervalo pode ser 10. No caso do parâmetro dois, o intervalo pode ser 12 e, para o parâmetro três, o intervalo pode ser igual a 16. Nesta forma de realização preferida, o parâmetro de
Golomb-Rice pode ser ajustado para zero no início do bloco. A adaptação do parâmetro de Golomb-Rice é realizada como descrito pela equação (QQ). Note-se que o parâmetro não pode ser diminuído usando esta forma de adaptação. Note também que é possível uma troca direta, ex. de zero a três. Nesta concretização preferida, a parte do prefixo dos códigos de Golomb-Rice é codificado com códigos de entropia empregando modelos de probabilidade. A modelação de contexto pode ser feita como para coeff_abs_level_minus_two em H.264 / AVC.
Noutra concretização preferida, é avaliado se a vizinhança já codificada (ou descodificada) , do índice de varrimento atual, contém níveis de coeficientes de transformação absolutos maiores do que o limite anterior. Para esta concretização preferida, o melhor parâmetro pode ser derivado utilizando vizinhança num molde causal local.
Assim, nas formas de realização acima descritas, um aparelho de codificação de entropia compreende um decompositor 136, configurado para converter uma sequência 138 de elementos de sintaxe numa sequência 106 de símbolos de fonte 106 por decomposição individual, de pelo menos um subgrupo dos elementos de sintaxe, num respetivo número n de símbolos de fonte s± com i = 1 ... n, sendo o respetivo número n de símbolos de fonte dependente de uma sequência de n partições 140i-3, na qual um intervalo de valores dos respetivos elementos de sintaxe está subdividido, um valor z dos respetivos elementos de sintaxe incluído, de modo que uma soma dos valores do respetivo número de símbolos de fonte s± produz z, e, se n> 1, para todo i = 1 ... η-1, correspondendo o valor de s± a um intervalo da iesima partição; Um subdivisor 100 configurado para subdividir a sequência 106 de símbolos de fonte numa primeira subsequência 108 de símbolos de fonte e uma segunda subsequência 110 de símbolos de fonte, de modo que todos os símbolos de fonte sxr com x sendo membro de um primeiro subconjunto de {1 ... n} estão contidos na primeira subsequência 108, e todos os símbolos de fonte sy , com y sendo membro de um segundo subconjunto de {1 ... n}, que sendo disjuntos com o primeiro subconjunto, estão contidos na segunda subsequência 110; Um codificador VLC 102 configurado para codificar de forma lógica os símbolos de fonte da primeira subsequência 108; E um PIPE, ou codificador aritmético 104, configurado para codificar a segunda subsequência 110 de símbolos de fonte.
Os valores z do subgrupo dos elementos de sintaxe podem ser valores absolutos. O segundo subconjunto pode ser {1} com a sequência de n partições sendo arranjadas de modo que uma partição pesima cubra os valores mais altos do intervalo de valores do que uma partição qesima para todo p, q £ {1. . n } com p> q. n pode ser 3. 0 primeiro subconjunto pode ser {2,3} com um codificador VLC (102) configurado para usar um código de Golomb-Rice para codificar de uma forma lógica os símbolos de fonte S2 e um código de Exp-Golomb para codificar de uma forma lógica os símbolos fonte S3. De um modo mais geral, 2 pode ser um elemento do primeiro subconjunto, com o codificador VLC (102) configurado para utilizar um código de Golomb-Rice para codificar os símbolos de fonte S2 de uma forma lógica e adaptar um parâmetro de Golomb-Rice, isto é, k do código de Golomb-Rice, de acordo com símbolos de fonte previamente codificados. O decompositor pode ser configurado para adaptar um ou mais dos limites entre as partições, de acordo com símbolos de fonte previamente codificados. Ambas as adaptações podem ser combinadas. Ou seja, as posições dos limites que limitam a segunda partição podem ser adaptadas de modo a estarem afastadas umas das outras de forma e a que o comprimento do código de Golomb-Rice, ou seja, o número de palavras de código correspondente, corresponda (ou prescreva) o comprimento da largura da segunda partição. O limite entre a separação da primeira partição e da segunda partição pode ser definido de outro modo, tal como ser fixado por definição ou ser adaptado de acordo com outra dependência do contexto em que, caso a adaptação de k possa definir a posição do limite que separa a segunda partição e a terceira partição, através do comprimento do código de Golomb-Rice e da largura da segunda partição, respetivamente. Ao juntar-se a adaptação de k, de modo que a largura da segunda partição corresponda ao comprimento do código de Golomb-Rice, a eficiência do código é usada de forma otimizada. A adaptação de k às estatísticas do elemento de sintaxe permite adaptar a largura da segunda partição, de tal modo que a terceira partição possa cobrir tanto quanto possível, de forma a reduzir a complexidade de codificação global, uma vez que, um código de complexidade inferior pode ter sido utilizado para a terceira partição, tal como o código de Exp-Golomb. Para além disso, o comprimento da primeira partição pode ser restrito a valores j E {1, 2, 3} de elementos de sintaxe possíveis, como os três níveis mais baixos. Os elementos de sintaxe, em consideração, podem ser codificados diferencialmente ou representar um residual de previsão, como é o caso dos níveis de coeficiente de transformação exemplificados acima, que representam um residual de previsão. Os primeiros símbolos de fonte Si podem ser simbolizados / dessimbolizados por utilização de um código unário truncado com os bins j resultantes, sendo -parcialmente ou todos - codificados, adaptativamente ou não, ao contexto tal como mencionado acima. 0 subgrupo dos elementos de sintaxe pode abranger os níveis de coeficientes de transformação absolutos de coeficientes de transformação absolutos de blocos de uma imagem com os níveis de coeficientes de transformação absolutos do respetivo bloco de transformação, sendo estes arranjados, dentro da sequência de elementos de sintaxe (138) de acordo com um percurso de varrimento pelos coeficientes de transformação absolutos dos respetivos blocos de transformação, em que o decompositor pode ser configurado para adaptar um ou mais dos limites, entre as partições, durante a decomposição dos níveis de coeficientes de transformação absolutos dos coeficientes de transformação absolutos do respetivo bloco de transformação, dependendo dos níveis de coeficientes de transformação absolutos já codificados dos coeficientes de transformação absolutos dos respetivos blocos de transformação, que precedendo na ordem de varrimento, ou dependendo de uma posição do nível de coeficiente de transformação absoluto, atualmente a ser decomposto na ordem de varrimento, ou com base numa avaliação dos níveis de coeficientes de transformação absolutos, já reconstruídos, dos coeficientes de transformação de vizinhança - quer espacialmente quer por ordem de varrimento - da posição do coeficiente de transformação absoluto atualmente a ser decomposto.
Além disso, as formas de realização acima mencionadas descrevem, inter alia, um aparelho de descodificação de entropia compreendendo um descodificador VLC 200 configurado para, reconstruir símbolos de fonte de uma primeira subsequência 204 de símbolos de fonte, a partir de palavras de código de um primeiro fluxo de bits 206; Um descodificador PIPE ou um descodificador aritmético 202, configurado para reconstruir uma segunda subsequência 208 de símbolos de fonte; Um compositor 224 configurado para compor uma sequência 226 de elementos de sintaxe da primeira subsequência 204 de símbolos de fonte e da segunda subsequência 208 de símbolos de fonte, através da composição individual de cada elemento de sintaxe, de um número respetivo de símbolos de fonte, em que o compositor está configurado para, determinar, para pelo menos um subgrupo dos elementos de sintaxe, o número respetivo n de símbolos de fonte Si com i = 1 ... n, dependendo de qual, de uma sequência de n partições 140i_3 , na qual um intervalo de valores dos respetivos elementos de sintaxe está subdividido, um valor z dos respetivos elementos de sintaxe incluído, somando-se os valores do respetivo número de símbolos de fonte s± de 1 a n, desde que o valor de s± corresponda a um intervalo da ±esima partição, de modo a se obter o valor do elemento de sintaxe z, em que o compositor 224 está configurado para recuperar todos os símbolos de fonte sx com x sendo membro de um primeiro subconjunto de {1 ... n} da primeira subsequência (204), e todos os símbolos de fonte sy com y sendo membro de um segundo subconjunto de {1 ... n}, sendo este disjunto com o primeiro subconjunto, a partir da segunda subsequência 20. Os valores de z do subgrupo dos elementos de sintaxe podem ser valores absolutos. O segundo subconjunto pode ser {1} com a sequência de n partições sendo estas dispostas de tal forma que uma partição pesima cobre valores mais altos do intervalo de valores do que uma partição qesima para todo p, q G {l..n} com p> q. n pode ser 3. O primeiro subconjunto pode ser {2,3}, com um descodif icador VLC 200 configurado para usar um código de Golomb-Rice, para reconstruir, em função da palavra de código, os símbolos de fonte S2, e um de código de Exp-Golomb, para reconstruir, em função da palavra de código, os símbolos de fonte S3. Mais genericamente, 2 pode ser um elemento do primeiro subconjunto com o descodificador VLC 102 sendo configurado para usar um código de Golomb-Rice, para codificar palavras de forma lógica - reconstruir os símbolos de fonte S2 e adaptar um parâmetro de Golomb-Rice, do código de Golomb-Rice, de acordo com símbolos de fonte previamente reconstruídos. O aparelho de descodificação de entropia pode ainda compreender um recombinador 220 configurado para recombinar a subsequência de símbolos de fonte para se obter a sequência 218 de símbolos de fonte. Os elementos de sintaxe podem ser de tipo diferente e o compositor pode ser configurado para executar a composição individual dependendo do tipo de elementos de sintaxe. O subgrupo dos elementos de sintaxe pode abranger os níveis de coeficientes de transformação absolutos, de coeficientes de transformação absolutos de blocos de transformação de uma imagem, sendo os níveis de coeficientes de transformação absolutos, de um bloco de transformação respetivo, dispostos na sequência 138 de elementos de sintaxe, de acordo com um percurso de varrimento, através dos coeficientes de transformação absolutos dos respetivos blocos de transformação, em que o compositor pode ser configurado para adaptar um ou mais limites, entre as partições, durante a composição dos níveis de coeficientes de transformação absolutos, dos coeficientes de transformação absolutos de um bloco de transformação respetivo, dependendo dos níveis de coeficientes de transformação absolutos já reconstruídos dos coeficientes de transformação absolutos, dos respetivos blocos de transformação, na ordem de varrimento ou, dependendo de uma posição do nível de coeficiente de transformação absoluta a ser composto atualmente, na ordem de varrimento, ou com base numa avaliação dos níveis de coeficientes de transformação absolutos já reconstruídos, de coeficientes de transformação vizinhos - espacialmente ou em ordem de varrimento - a posição do nivel de coeficiente de transformação absoluta atualmente a ser composto.
Em relação à combinação da codificação PIPE com a codificação VLC, utilizando a decomposição, de acordo com a Fig. lb, observa-se o seguinte para repetir alguns aspetos do mesmo em outras palavras.
Foi descrito o mapeamento de uma sequência de símbolos para um fluxo de bits, bem como o mapeamento inverso. Cada símbolo compreende o(s) parâmetro(s) a ele associado(s) , que são simultaneamente conhecidos no codificador e no descodificador. 0 codificador de entropia contém múltiplos buffers de primeiro a entrar - primeiro a sair (FIFO) sendo cada um deles atribuído a subconjuntos de parâmetro(s) que estão associados aos símbolos. Para um dado parâmetro(s) de um símbolo, o codificador atribui o símbolo ao correspondente buffer FIFO. Uma vez que a regra de atribuição do codificador é conhecida no lado do descodificador, o descodif icador lê a partir do buffer FIFO ao qual o codificador atribuiu o símbolo.
Alguns elementos de sintaxe são codificados usando códigos de comprimento variável padrão e são gravados em um buffer particular. Outros elementos de sintaxe são codificados usando o conceito de codificação de entropia de partição de intervalo de probabilidade (PIPE). Neste caso, os símbolos são primeiro binarizados e os bins resultantes são classificados com base nas estimativas de probabilidade associadas. A estimativa de probabilidade pode ser dada, ou derivada, a partir da medição, que pode ser realizada simultaneamente, no codificador e no descodificador. Um dado buffer FIFO contém símbolos com valores de probabilidade estimados, incluindo um subconjunto de probabilidades, que é selecionado, para que a codificação de entropia possa ser melhorada. A melhoria é conseguida através da combinação do conceito PIPE com VLC e representa uma redução de complexidade, enquanto ainda proporciona uma elevada eficiência de codificação. Símbolos, para os quais um códiqo VLC padrão é adequado, são codificados com a abordaqem VLC simples e de baixa complexidade, enquanto outros símbolos, para os quais a taxa de bits seria significativamente aumentada, quando codificados com um código VLC, são codificados com o conceito PIPE mais sofisticado.
Assim, a fim de reduzir ainda mais a complexidade da codificação de entropia, os símbolos foram divididos em duas categorias. Símbolos de uma primeira categoria podem ser representados com códigos VLC e não requerem a codificação PIPE mais complexa, enquanto símbolos de uma segunda categoria incluem aqueles que não podem ser representados eficientemente com códigos VLC e, para os quais, a codificação PIPE reduz significativamente a taxa de bits necessária.
Embora alguns aspetos tenham sido descritos no contexto de um aparelho, é claro que estes aspetos também representam uma descrição do método correspondente, em que um bloco ou dispositivo corresponde a um passo do método, ou uma característica de um passo do método. Analogamente, aspetos descritos no contexto de um passo de método também representam uma descrição de um bloco ou item ou caracterí stica correspondente de um aparelho correspondente. Algumas ou todas as etapas do método podem ser executadas por (ou utilizando) um aparelho de hardware, como por exemplo, um microprocessador, um computador programável ou um circuito eletrónico. Em algumas formas de realização, alguns ou mais dos passos de método mais importantes podem ser executados por um tal aparelho.
Os sinais codificados / comprimidos da invenção podem ser armazenados num meio de armazenamento digital ou podem ser transmitidos num meio de transmissão, tal como um meio de transmissão sem fios ou um meio de transmissão com fios, tal como a Internet.
Dependendo de certos requisitos de implementação, as concretizações do invento podem ser implementadas em hardware ou em software. A implementação pode ser realizada utilizando um meio de armazenamento digital, por exemplo uma disquete, um DVD, um Blue-Ray, um CD, um ROM, um PROM, um EPROM, um EEPROM ou uma memória FLASH, possuindo sinais de controlo eletronicamente legíveis armazenados, que cooperam (ou são capazes de cooperar) com um sistema de computador programável, de tal modo que o respetivo método é executado. Portanto, o meio de armazenamento digital pode ser legível por computador.
Algumas formas de realização, de acordo com a invenção, compreendem um suporte de dados com sinais de controlo eletronicamente legíveis, que são capazes de cooperar com um sistema de computador programável, de tal modo que um dos métodos aqui descritos é executado.
Geralmente, as concretizações do presente invento podem ser implementadas como um produto de programa de computador, com um código de programa, sendo o código de programa operativo para executar um dos métodos quando o produto de programa de computador é executado num computador. 0 código de programa pode, por exemplo, ser armazenado num suporte legível por máquina.
Outras formas de realização compreendem o programa de computador para executar um dos métodos aqui descritos, armazenado num suporte legível por máquina.
Em outras palavras, uma concretização do método da invenção é, portanto, um programa de computador, que tem um código de programa para executar um dos métodos aqui descritos, quando o programa de computador é executado num computador.
Uma outra concretização dos métodos inventivos é, portanto, um suporte de dados (ou um meio de armazenamento digital, ou um meio legível por computador) que compreende, gravado no mesmo, o programa de computador para executar um dos métodos aqui descritos.
Uma outra forma de realização do método inventivo é, portanto, um fluxo de dados ou uma sequência de sinais, representando o programa de computador para executar um dos métodos aqui descritos. 0 fluxo de dados, ou a sequência de sinais pode, por exemplo, ser configurado para ser transferido através de uma ligação de comunicação de dados, por exemplo, através da Internet.
Uma outra forma de realização compreende um meio de processamento, por exemplo, um computador, ou um dispositivo lógico programável, que é configurado para, ou adaptado para, executar um dos métodos aqui descritos.
Uma forma de realização adicional compreende um computador que tem instalado o programa de computador para executar um dos métodos aqui descritos.
Em algumas das concretizações, um dispositivo lógico programável (por exemplo uma matriz de portas programável em campo) pode ser utilizado para executar algumas, ou todas, as funcionalidades dos métodos aqui descritos. Em algumas das concretizações, uma matriz de campo programável pode cooperar com um microprocessador, de modo a realizar um dos métodos aqui descritos. Geralmente, os métodos são, de preferência, realizados por qualquer aparelho de hardware.
As formas de realização acima descritas são meramente ilustrativas dos princípios da presente invenção. Entende-se que as modificações e variações das disposições e dos pormenores aqui descritos serão evidentes para outros peritos na especialidade. Por conseguinte, a intenção é limitar-se apenas pelo âmbito de aplicação das reivindicações, desta patente, e não pelos detalhes específicos apresentados a título de descrição e explicação das concretizações aqui apresentadas.
Claims (6)
- REIVINDICAÇÕES1. Aparelho de codificação de entropia compreendendo: Um decompositor (136), configurado para converter uma sequência (138) de elementos de sintaxe, que apresentam um intervalo de valores subdividido numa sequência de N partições (140i_3), numa sequência (106) de símbolos de fonte (106), através da decomposição individual de, pelo menos um subgrupo dos elementos de sintaxe, num número respetivo n de símbolos de fonte s3, com i = 1 ... n, sendo o número respetivo n de símbolos de fonte dependente da sequência de N partições (140i_3), a qual inclui um valor z, dos respetivos elementos de sintaxe, de modo que uma soma de valores, do número respetivo de símbolos de fonte s3, produz z, e que se n> 1, para todos i = 1 ... n-1, o valor de s3 corresponde a um intervalo i-ésima da partição; Um subdivisor (100), configurado para subdividir a sequência (106) de símbolos de fonte numa primeira subsequência (108) de símbolos de fonte, e numa segunda subsequência (110) de símbolos de fonte, de forma que todos os símbolos de fonte sx, em que x é um elemento de um primeiro subconjunto de {1,...N}, estejam contidos na primeira subsequência (108) e que todos os símbolos de fonte sy, em que y é um elemento de um segundo subconjunto {Ι,.,.Ν}, disjunto do primeiro subconjunto, esteja contido na segunda subsequência (110); Um codificador VLC (102), configurado para codificar, por símbolo, os símbolos de fonte da primeira subsequência (108); e Um codificador aritmético, configurado para codificar a segunda subsequência (110) de símbolos de fonte, em que o segundo subconjunto é {1}, estando a sequência de N partições disposta de forma que uma p-ésima da partição cubra os valores mais elevados do intervalo de valores, que uma q-ésima partição, para todos p, q G {1..N},, em que p>q, caracterizado por N = 3, e em que o primeiro subconjunto é {2,3}, o codificador VLC (102) ser configurado para utilizar um código de Golomb-Rice, que codifica, por símbolo, os símbolo de fonte S2, e um código de Exp-Golomb para codificar por símbolo os símbolos de fonte s3, os valores de z do subgrupo dos elementos de sintaxe são valores absolutos, e 0 codificador VLC (102) está configurado para adaptar um parâmetro de Golomb-Rice, do código de Golomb-Rice, em função dos símbolos previamente codificados.
- 2. Aparelho de descodificação de entropia compreendendo: Um descodificador VLC (200), configurado para reconstruir, por palavra de código, os símbolos de fonte de uma primeira subsequência (204) de símbolos de fonte, a partir das palavras de código de um primeiro fluxo de bits (206); Um descodificador aritmético (202), configurado para reconstruir uma segunda subsequência (208) de símbolos de fonte; Um compositor (224), configurado para compor uma sequência (226) de elementos de sintaxe que apresentam um intervalo de valores que está subdividido numa sequência de N partições (140ιβ3), a partir da primeira subsequência (204), de símbolos de fonte, e da segunda subsequência (208), de símbolos de fonte, através da composição individual de cada elemento de sintaxe, a partir de um número respetivo de símbolos de fonte por, pelo menos, um subgrupo de elementos de sintaxe, determinando o respetivo número n de símbolos de fonte si, com 1 = l...n, sendo o número respetivo n de símbolos de fonte dependente da sequência de N partições (140i-3), na qual o intervalo de valores dos respetivos elementos de sintaxe se encontra subdividido, sendo o valor z dos respetivos elementos de sintaxe incluído, pela soma de valores do número respetivo de símbolos de fonte si, de 1 até n, desde que o valor de Si corresponda ao intervalo i-ésimo de partição, de modo a se obter o valor z de elemento de sintaxe, em que o compositor (224) está configurado para reconstruir todos os símbolos de fonte sx, com x sendo membro de um primeiro subconjunto de {1...N}, da primeira subsequência (204) e todos os símbolos de fonte sy, com y sendo membro de um segundo subconjunto de {1...N}, sendo este subconjunto disjunto do primeiro subconjunto, da segunda subsequência (208), em que o segundo subconjunto é {1}, com a sequência de N partições sendo disposta de tal forma que a partição p-ésima cobre os valores mais altos, do intervalo de valores, do que a partição q-ésima, para todos os p, q E {1..N}, em que p>q, caracterizado por N = 3, e em que o primeiro subconjunto é {2,3}, o descodificador VLC (200), configurado para utilizar um código de Golomb-Rice, para reconstruir, em função da palavra de código, os símbolos de fonte S2, e um código de Exp-Golomb para reconstruir, em função da palavra de código, os símbolos de fonte S3, os valores de z do subgrupo dos elementos de sintaxe são valores absolutos, e o descodificador VLC (102) está configurado para adaptar um parâmetro de Golomb-Rice, do código de Golomb-Rice, em função dos símbolos previamente reconstruídos.
- 3. Aparelho de descodificação de entropia, de acordo com a reivindicação 2, compreendendo ainda um recombinador (220), configurado para recombinar a primeira subsequência (204) de símbolos de fonte e a segunda subsequência de símbolos d fonte para obtenção da sequência (218) de símbolos de fonte.
- 4. Método de codificação de entropia que compreende os seguintes passos: Converter uma sequência (138) de elementos de sintaxe, que apresentam um intervalo de valores subdividido numa sequência de N partições (140i-3), numa sequência (106) de símbolos de fonte (106), através da decomposição individual de, pelo menos um subgrupo dos elementos de sintaxe, num número respetivo n de símbolos de fonte Si, com i = 1 ... n, sendo o número respetivo n de símbolos de fonte dependente da sequência de N partições (I4O1-3), a qual inclui um valor z, dos respetivos elementos de sintaxe, de modo que uma soma de valores, do número respetivo de símbolos de fonte Si, produz z, e que se n> 1, para todos i = 1 ... n-1, o valor de Si corresponde a um intervalo i-ésima da partição; Subdividir a sequência (106) de símbolos de fonte numa primeira subsequência (108) de símbolos de fonte, e numa segunda subsequência (110) de símbolos de fonte, de forma que todos os símbolos de fonte sx, em que x é um elemento de um primeiro subconjunto de {1,...N}, estejam contidos na primeira subsequência (108) e que todos os símbolos de fonte sy, em que y é um elemento de um segundo subconjunto {1,...N}, disjunto do primeiro subconjunto, esteja contido na segunda subsequência (110) ; Através de codificação VLC, codificando, por símbolo, os símbolos de fonte da primeira subsequência (108); e Por codificação aritmética, codificar a segunda subsequência (110) de símbolos de fonte, Em que o segundo subconjunto é {1}, estando a sequência de N partições disposta de forma que uma p-ésima da partição cubra os valores mais elevados do intervalo de valores, que uma q-ésima partição, para todos p, q G {1..N},, em que p>q, caracterizado por N = 3, e em que o primeiro subconjunto é {2,3}, o codificador VLC (102) ser configurado para utilizar um código de Golomb-Rice, que codifica, por símbolo, os símbolo de fonte S2, e um código de Exp-Golomb para codificar por símbolo os símbolos de fonte S3, os valores de z do subgrupo dos elementos de sintaxe são valores absolutos, e o codificador VLC (102) está configurado para adaptar um parâmetro de Golomb-Rice, do código de Golomb-Rice, em função dos símbolos previamente codificados.
- 5. Método de descodificação de entropia que compreende os seguintes passos: Através de descodificação VLC, reconstruir, por palavra de código, os símbolos de fonte de uma primeira subsequência (204) de símbolos de fonte, a partir das palavras de código de um primeiro fluxo de bits (206); Através de descodificação aritmética (202), reconstruir uma segunda subsequência (208) de símbolos de fonte; Compor uma sequência (226) de elementos de sintaxe a partir da primeira subsequência (204), de símbolos de fonte, e da segunda subsequência (208), de símbolos de fonte, através da composição individual de cada elemento de sintaxe, a partir de um número respetivo de símbolos de fonte por, pelo menos, um subgrupo de elementos de sintaxe, determinando o respetivo número n de símbolos de fonte Si, com i = l...n, sendo o número respetivo n de símbolos de fonte dependente da sequência de N partições (I4O1-3), na qual o intervalo de valores dos respetivos elementos de sintaxe se encontra subdividido, sendo o valor z dos respetivos elementos de sintaxe incluído, pela soma de valores do número respetivo de símbolos de fonte Si, de 1 até n, desde que o valor de Si corresponda ao intervalo i-ésimo de partição, de modo a se obter o valor z de elemento de sintaxe, em que a composição compreende a reconstrução de todos os símbolos de fonte sx, com x sendo membro de um primeiro subconjunto de {1...N}, da primeira subsequência (204) e todos os símbolos de fonte sy, com y sendo membro de um segundo subconjunto de {1...N}, sendo este subconjunto disjunto do primeiro subconjunto, da segunda subsequência (208), em que o segundo subconjunto é {1}, com a sequência de N partições sendo disposta de tal forma que a partição p-ésima cobre os valores mais altos, do intervalo de valores, do que a partição q-ésima, para todos os p, q G {1..N}, em que p>q, caracterizado por N = 3, e em que o primeiro subconjunto é {2,3}, o descodificador VLC (200), configurado para utilizar um código de Golomb-Rice, para reconstruir, em função da palavra de código, os símbolos de fonte s 2 / e um código de Exp-Golomb para reconstruir, em função da palavra de código, os símbolos de fonte S3, os valores de z do subgrupo dos elementos de sintaxe são valores absolutos, e o descodificador VLC (102) está configurado para adaptar um parâmetro de Golomb-Rice, do código de Golomb-Rice, em função dos símbolos previamente reconstruídos.
- 6. Um programa de computador compreendendo um código para executar, quando corrido num computador, o método de acordo com qualquer uma das reivindicações 4 ou 5.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201161432884P | 2011-01-14 | 2011-01-14 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| PT2664070T true PT2664070T (pt) | 2016-12-22 |
Family
ID=45491598
Family Applications (3)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PT181602764T PT3349360T (pt) | 2011-01-14 | 2012-01-12 | Esquema de codificação e descodificação de entropia |
| PT127003291T PT2664070T (pt) | 2011-01-14 | 2012-01-12 | Esquema de codificação e descodificação entrópica |
| PT141605121T PT2760138T (pt) | 2011-01-14 | 2012-01-12 | Esquema de codificação e descodificação entrópica |
Family Applications Before (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PT181602764T PT3349360T (pt) | 2011-01-14 | 2012-01-12 | Esquema de codificação e descodificação de entropia |
Family Applications After (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PT141605121T PT2760138T (pt) | 2011-01-14 | 2012-01-12 | Esquema de codificação e descodificação entrópica |
Country Status (14)
| Country | Link |
|---|---|
| US (18) | US9083374B2 (pt) |
| EP (7) | EP2768144B1 (pt) |
| JP (8) | JP5809292B2 (pt) |
| KR (13) | KR102815709B1 (pt) |
| CN (7) | CN107196662B (pt) |
| DK (5) | DK3349360T3 (pt) |
| ES (5) | ES2759513T3 (pt) |
| HU (5) | HUE037749T2 (pt) |
| NO (1) | NO2956175T3 (pt) |
| PL (5) | PL2768145T3 (pt) |
| PT (3) | PT3349360T (pt) |
| TR (1) | TR201807771T4 (pt) |
| TW (9) | TWI640169B (pt) |
| WO (1) | WO2012095488A2 (pt) |
Families Citing this family (112)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR101753273B1 (ko) * | 2010-03-10 | 2017-07-03 | 톰슨 라이센싱 | 변환 선택을 갖는 비디오 코딩 및 디코딩을 위한 제약 변환 방법 및 장치 |
| DK3349360T3 (da) * | 2011-01-14 | 2019-12-09 | Ge Video Compression Llc | Entropikodnings- og -afkodningssystem |
| CN103797803A (zh) * | 2011-06-28 | 2014-05-14 | 三星电子株式会社 | 用于熵编码/解码的方法和设备 |
| US20130083856A1 (en) * | 2011-06-29 | 2013-04-04 | Qualcomm Incorporated | Contexts for coefficient level coding in video compression |
| WO2013039692A1 (en) * | 2011-09-16 | 2013-03-21 | Mediatek Singapore Pte. Ltd. | Method and apparatus for prediction mode and partition mode syntax coding for coding units in hevc |
| EP2775713B1 (en) * | 2011-11-04 | 2021-06-16 | Sharp Kabushiki Kaisha | Arithmetic decoding device, image decoding device, arithmetic coding device, image coding device, and arithmetic decoding method |
| US9641835B2 (en) | 2011-11-08 | 2017-05-02 | Google Technology Holdings LLC | Method of determining binary codewords for transform coefficients |
| BR112014011150B1 (pt) | 2011-11-08 | 2022-08-09 | Google Technology Holdings LLC | Método de determinação de palavras de código binárias para coeficientes de transformada |
| EP2803190B1 (en) * | 2012-01-09 | 2017-10-25 | Dolby Laboratories Licensing Corporation | Hybrid reference picture reconstruction method for multiple layered video coding systems |
| CA2861951C (en) | 2012-01-20 | 2020-08-11 | Thomas Schierl | Coding concept allowing parallel processing, transport demultiplexer and video bitstream |
| EP2805419B1 (en) * | 2012-01-20 | 2017-05-24 | GE Video Compression, LLC | Transform coefficient coding and decoding |
| US9635358B2 (en) | 2012-01-21 | 2017-04-25 | Google Technology Holdings LLC | Method of determining binary codewords for transform coefficients |
| WO2013110000A1 (en) * | 2012-01-21 | 2013-07-25 | General Instrument Corporation | Method of determining binary codewords for transform coefficients |
| WO2013109997A1 (en) * | 2012-01-21 | 2013-07-25 | General Instrument Corporation | Method of determining binary codewords for transform coefficients |
| US9479780B2 (en) | 2012-02-01 | 2016-10-25 | Google Technology Holdings LLC | Simplification of significance map coding |
| CN104995919B (zh) | 2012-02-04 | 2019-08-09 | 谷歌技术控股有限责任公司 | 用于最末重要系数位置编码中的上下文减少的设备和方法 |
| US9167245B2 (en) | 2012-02-05 | 2015-10-20 | Google Technology Holdings LLC | Method of determining binary codewords for transform coefficients |
| US11039138B1 (en) | 2012-03-08 | 2021-06-15 | Google Llc | Adaptive coding of prediction modes using probability distributions |
| US9654777B2 (en) | 2013-04-05 | 2017-05-16 | Qualcomm Incorporated | Determining palette indices in palette-based video coding |
| WO2014186542A1 (en) * | 2013-05-15 | 2014-11-20 | Vid Scale, Inc. | Single loop decoding based inter layer prediction |
| US9558567B2 (en) * | 2013-07-12 | 2017-01-31 | Qualcomm Incorporated | Palette prediction in palette-based video coding |
| US10021419B2 (en) * | 2013-07-12 | 2018-07-10 | Qualcomm Incorported | Rice parameter initialization for coefficient level coding in video coding process |
| US9648330B2 (en) * | 2013-07-15 | 2017-05-09 | Qualcomm Incorporated | Inter-color component residual prediction |
| US9485222B2 (en) * | 2013-08-20 | 2016-11-01 | Hewlett-Packard Development Company, L.P. | Data stream traffic control |
| RU2654129C2 (ru) | 2013-10-14 | 2018-05-16 | МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи | Функциональные возможности режима внутреннего предсказания с блочным копированием для кодирования и декодирования видео и изображений |
| CA2925183C (en) | 2013-10-14 | 2020-03-10 | Microsoft Technology Licensing, Llc | Features of base color index map mode for video and image coding and decoding |
| CN105659602B (zh) | 2013-10-14 | 2019-10-08 | 微软技术许可有限责任公司 | 用于视频和图像编码的帧内块复制预测模式的编码器侧选项 |
| US10390034B2 (en) | 2014-01-03 | 2019-08-20 | Microsoft Technology Licensing, Llc | Innovations in block vector prediction and estimation of reconstructed sample values within an overlap area |
| RU2669005C2 (ru) | 2014-01-03 | 2018-10-05 | МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи | Предсказание вектора блока в кодировании/декодировании видео и изображений |
| US11284103B2 (en) | 2014-01-17 | 2022-03-22 | Microsoft Technology Licensing, Llc | Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning |
| US10542274B2 (en) | 2014-02-21 | 2020-01-21 | Microsoft Technology Licensing, Llc | Dictionary encoding and decoding of screen content |
| US10142636B2 (en) * | 2014-06-09 | 2018-11-27 | Sony Corporation | Communication system with coding mechanism and method of operation thereof |
| KR102311815B1 (ko) | 2014-06-19 | 2021-10-13 | 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 | 통합된 인트라 블록 카피 및 인터 예측 모드 |
| US10505826B2 (en) * | 2014-09-26 | 2019-12-10 | Oracle International Corporation | Statistical pattern correlation of events in cloud deployments using codebook approach |
| JP2017535145A (ja) | 2014-09-30 | 2017-11-24 | マイクロソフト テクノロジー ライセンシング,エルエルシー | 波面並列処理が可能にされた場合のピクチャ内予測モードに関する規則 |
| JP2017538338A (ja) | 2014-11-04 | 2017-12-21 | サムスン エレクトロニクス カンパニー リミテッド | 二進算術符号化/復号のための確率更新方法、及びそれを利用したエントロピー符号化/復号装置 |
| US9712848B2 (en) * | 2014-11-10 | 2017-07-18 | Vixs Systems Inc. | Frame buffer compression using separate aggregation of fixed-length and variable-length components of codewords |
| US9781424B2 (en) | 2015-01-19 | 2017-10-03 | Google Inc. | Efficient context handling in arithmetic coding |
| CA2979082C (en) * | 2015-03-10 | 2021-07-27 | Huawei Technologies Co., Ltd. | Picture processing using an affine motion model and a motion vector 2-tuple |
| EP3308540B1 (en) | 2015-06-09 | 2020-04-15 | Microsoft Technology Licensing, LLC | Robust encoding/decoding of escape-coded pixels in palette mode |
| GB2542707B (en) * | 2015-07-03 | 2020-02-12 | Sisp Tech Ltd | Data processing method and apparatus |
| CN112929659B (zh) * | 2015-10-13 | 2023-12-26 | 三星电子株式会社 | 用于对图像进行编码或解码的方法和设备 |
| US10098093B2 (en) * | 2015-12-15 | 2018-10-09 | Qualcomm Incorporated | Partitioned control channel techniques for time division duplexing subframe processing |
| US10142635B2 (en) * | 2015-12-18 | 2018-11-27 | Blackberry Limited | Adaptive binarizer selection for image and video coding |
| US11463113B2 (en) * | 2016-01-29 | 2022-10-04 | Massachusetts Institute Of Technology | Apparatus and method for multi-code distributed storage |
| US9792044B2 (en) * | 2016-02-12 | 2017-10-17 | Oracle International Corporation | Decompression history buffer read/write pipelines |
| EP3217307B1 (en) * | 2016-02-22 | 2018-11-07 | Eshard | Method of testing the resistance of a circuit to a side channel analysis of second order or more |
| WO2017216711A1 (en) * | 2016-06-13 | 2017-12-21 | KARTUN, Edmund Hilton | An electronic computer device and method for encoding a sequence of characters |
| US10536163B2 (en) | 2016-07-04 | 2020-01-14 | Sisp Technologies Ltd. | Data processing method and apparatus |
| JP6336524B2 (ja) | 2016-07-25 | 2018-06-06 | 株式会社高速屋 | データ圧縮符号化方法、その装置、及び、そのプログラム |
| CN106507111B (zh) * | 2016-11-17 | 2019-11-15 | 上海兆芯集成电路有限公司 | 使用残差补偿的视频编码方法以及使用该方法的装置 |
| KR20180089290A (ko) | 2017-01-31 | 2018-08-08 | 세종대학교산학협력단 | 영상의 부호화/복호화 방법 및 장치 |
| GB2559200A (en) | 2017-01-31 | 2018-08-01 | Nokia Technologies Oy | Stereo audio signal encoder |
| AU2018252853A1 (en) * | 2017-04-13 | 2019-12-05 | Lg Electronics Inc. | Image encoding/decoding method and device therefor |
| CN107483059B (zh) * | 2017-07-31 | 2020-06-12 | 广东工业大学 | 一种基于动态霍夫曼树的多路数据编解码方法及装置 |
| US11831910B2 (en) * | 2017-08-21 | 2023-11-28 | Electronics And Telecommunications Research Institute | Method and apparatus for encoding/decoding video, and recording medium storing bit stream |
| CN108062779B (zh) * | 2017-12-26 | 2021-11-23 | 杭州健培科技有限公司 | 一种用于胸部断层扫描放射影像的无损压缩方法 |
| US10986349B2 (en) | 2017-12-29 | 2021-04-20 | Microsoft Technology Licensing, Llc | Constraints on locations of reference blocks for intra block copy prediction |
| US10707996B2 (en) * | 2018-04-06 | 2020-07-07 | International Business Machines Corporation | Error correcting codes with bayes decoder and optimized codebook |
| CN108599931A (zh) * | 2018-04-12 | 2018-09-28 | 深圳市易迈数据技术有限公司 | 基于大数据的安全码生成方法及其校验方法 |
| US10630990B1 (en) * | 2018-05-01 | 2020-04-21 | Amazon Technologies, Inc. | Encoder output responsive to quality metric information |
| WO2019225346A1 (ja) * | 2018-05-22 | 2019-11-28 | パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ | 符号化装置、復号装置、符号化方法、復号方法及びピクチャ圧縮プログラム |
| KR102841953B1 (ko) * | 2018-06-06 | 2025-08-04 | 파나소닉 인텔렉츄얼 프로퍼티 코포레이션 오브 아메리카 | 삼차원 데이터 부호화 방법, 삼차원 데이터 복호 방법, 삼차원 데이터 부호화 장치, 및 삼차원 데이터 복호 장치 |
| US20220109455A1 (en) * | 2018-06-29 | 2022-04-07 | Zenotta Holding Ag | Apparatus and method for providing authentication, non-repudiation, governed access and twin resolution for data utilizing a data control signature |
| JP7320927B2 (ja) * | 2018-07-02 | 2023-08-04 | ルネサスエレクトロニクス株式会社 | 半導体装置及び通信システム |
| US10877835B2 (en) * | 2018-07-19 | 2020-12-29 | Micron Technology, Inc. | Write buffer management |
| US11616988B2 (en) | 2018-10-19 | 2023-03-28 | Samsung Electronics Co., Ltd. | Method and device for evaluating subjective quality of video |
| WO2020080765A1 (en) | 2018-10-19 | 2020-04-23 | Samsung Electronics Co., Ltd. | Apparatuses and methods for performing artificial intelligence encoding and artificial intelligence decoding on image |
| WO2020080827A1 (en) | 2018-10-19 | 2020-04-23 | Samsung Electronics Co., Ltd. | Ai encoding apparatus and operation method of the same, and ai decoding apparatus and operation method of the same |
| WO2020080623A1 (ko) | 2018-10-19 | 2020-04-23 | 삼성전자 주식회사 | 영상의 ai 부호화 및 ai 복호화 방법, 및 장치 |
| WO2020080873A1 (en) | 2018-10-19 | 2020-04-23 | Samsung Electronics Co., Ltd. | Method and apparatus for streaming data |
| KR102525576B1 (ko) | 2018-10-19 | 2023-04-26 | 삼성전자주식회사 | 영상의 ai 부호화 및 ai 복호화 방법, 및 장치 |
| KR102525578B1 (ko) | 2018-10-19 | 2023-04-26 | 삼성전자주식회사 | 부호화 방법 및 그 장치, 복호화 방법 및 그 장치 |
| US11720997B2 (en) | 2018-10-19 | 2023-08-08 | Samsung Electronics Co.. Ltd. | Artificial intelligence (AI) encoding device and operating method thereof and AI decoding device and operating method thereof |
| US10728555B1 (en) * | 2019-02-06 | 2020-07-28 | Sony Corporation | Embedded codec (EBC) circuitry for position dependent entropy coding of residual level data |
| US10587286B1 (en) * | 2019-03-18 | 2020-03-10 | Blackberry Limited | Methods and devices for handling equiprobable symbols in entropy coding |
| EP3734973B1 (en) * | 2019-05-02 | 2023-07-05 | Sick IVP AB | Method and encoder relating to encoding of pixel values to accomplish lossless compression of a digital image |
| US11070229B1 (en) * | 2019-05-19 | 2021-07-20 | Pliops | Codeword generator |
| US11461275B2 (en) * | 2019-05-31 | 2022-10-04 | Apple Inc. | Compression techniques for vertices of graphic models |
| CN110365346B (zh) * | 2019-07-22 | 2021-07-06 | 浙江大华技术股份有限公司 | 一种算术熵编码方法及系统 |
| KR102138892B1 (ko) * | 2019-09-24 | 2020-07-28 | 심인보 | 데이터 무손실 압축 장치 및 그 방법 |
| WO2021071187A1 (ko) * | 2019-10-07 | 2021-04-15 | 엘지전자 주식회사 | 비디오/영상 코딩 시스템에서 라이스 파라미터 도출 방법 및 장치 |
| WO2021071188A1 (ko) * | 2019-10-07 | 2021-04-15 | 엘지전자 주식회사 | 비디오/영상 코딩 시스템에서 엔트로피 코딩 방법 및 장치 |
| KR102436512B1 (ko) | 2019-10-29 | 2022-08-25 | 삼성전자주식회사 | 부호화 방법 및 그 장치, 복호화 방법 및 그 장치 |
| KR20210056179A (ko) | 2019-11-08 | 2021-05-18 | 삼성전자주식회사 | Ai 부호화 장치 및 그 동작방법, 및 ai 복호화 장치 및 그 동작방법 |
| US11095311B2 (en) * | 2019-11-27 | 2021-08-17 | Qualcomm Incorporated | Quantization codeword selection for low cost parity checking |
| US11468601B2 (en) | 2020-01-13 | 2022-10-11 | Samsung Display Co., Ltd. | Systems and methods for scalable throughput entropy coder |
| TWI741919B (zh) * | 2020-01-15 | 2021-10-01 | 瑞鼎科技股份有限公司 | 串流解壓縮電路 |
| KR102287942B1 (ko) | 2020-02-24 | 2021-08-09 | 삼성전자주식회사 | 전처리를 이용한 영상의 ai 부호화 및 ai 복호화 방법, 및 장치 |
| US10931303B1 (en) * | 2020-03-04 | 2021-02-23 | Arm Limited | Data processing system |
| CN111787326B (zh) * | 2020-07-31 | 2022-06-28 | 广州市百果园信息技术有限公司 | 一种熵编码及熵解码的方法和装置 |
| US11496289B2 (en) | 2020-08-05 | 2022-11-08 | Microsoft Technology Licensing, Llc | Cryptography using varying sized symbol sets |
| FR3114717B1 (fr) * | 2020-09-30 | 2023-10-13 | Fond B Com | Procédé et dispositif électronique de décodage d’un flux de données, programme d’ordinateur et flux de données associés |
| JP7521603B2 (ja) * | 2020-12-15 | 2024-07-24 | 日本電気株式会社 | 符号化装置、復号装置、符号化方法、復号方法およびプログラム |
| KR20220090887A (ko) | 2020-12-23 | 2022-06-30 | 삼성전자주식회사 | 이미지 처리 장치 및 이미지 처리 장치의 동작 방법 |
| WO2022182208A1 (ko) * | 2021-02-25 | 2022-09-01 | 주식회사 케이티 | 비디오 신호 부호화/복호화 방법 및 상기 부호화 방법에 의해 생성된 데이터 스트림을 저장하는 기록 매체 |
| WO2022192902A1 (en) * | 2021-03-11 | 2022-09-15 | Innopeak Technology, Inc. | Remaining level binarization for video coding |
| CN117242775A (zh) * | 2021-04-26 | 2023-12-15 | 华为技术有限公司 | 并行熵译码 |
| CN117356093A (zh) * | 2021-06-03 | 2024-01-05 | 创峰科技 | 视频编码中的量化等级二值化 |
| CN114039607B (zh) * | 2021-11-09 | 2025-10-28 | 山东云海国创云计算装备产业创新中心有限公司 | 一种多字符的有限熵编码方法、装置、设备及可读介质 |
| CA3242195A1 (en) | 2022-01-19 | 2023-07-27 | Governing Council Univ Toronto | System and method for off-chip data compression and decompression for machine learning networks |
| US12407836B2 (en) * | 2022-02-08 | 2025-09-02 | Synaptics Incorporated | Lossless compression for low-latency video transmission in resource-constrained encoding environment |
| CN117082257A (zh) * | 2022-05-10 | 2023-11-17 | 华为技术有限公司 | 子流交织方法 |
| WO2023236128A1 (en) * | 2022-06-09 | 2023-12-14 | Huawei Technologies Co., Ltd. | Apparatus and methods for source coding and channel coding of low entropy signals |
| CN114928747B (zh) * | 2022-07-20 | 2022-12-16 | 阿里巴巴(中国)有限公司 | 基于av1熵编码的上下文概率处理电路、方法及相关装置 |
| EP4569739A1 (en) * | 2022-08-09 | 2025-06-18 | Nokia Technologies Oy | Security key management in dual connectivity operation |
| CN115882867B (zh) * | 2023-03-01 | 2023-05-12 | 山东水发紫光大数据有限责任公司 | 一种基于大数据的数据压缩存储方法 |
| US12308037B2 (en) * | 2023-10-18 | 2025-05-20 | Cisco Technology, Inc. | Reduced multidimensional indices compression for audio codec system |
| US12380902B2 (en) | 2023-10-18 | 2025-08-05 | Cisco Technology, Inc. | Vector quantizer correction for audio codec system |
| CN118118033B (zh) * | 2024-01-22 | 2024-08-16 | 北京邮电大学 | 基于语义信源的算术编译码方法及相关设备 |
| WO2025177531A1 (ja) * | 2024-02-22 | 2025-08-28 | Ntt株式会社 | 復号装置、復号方法、プログラム |
| CN118518676A (zh) * | 2024-07-09 | 2024-08-20 | 深圳市鹏乐智能系统有限公司 | 基于人工智能的led芯片缺陷检测方法及系统 |
Family Cites Families (61)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0799812B2 (ja) * | 1990-03-26 | 1995-10-25 | 株式会社グラフイックス・コミュニケーション・テクノロジーズ | 信号符号化装置および信号復号化装置、並びに信号符号化復号化装置 |
| US5717394A (en) * | 1993-02-10 | 1998-02-10 | Ricoh Company Ltd. | Method and apparatus for encoding and decoding data |
| KR100287494B1 (ko) * | 1993-06-30 | 2001-04-16 | 이데이 노부유끼 | 디지탈신호의부호화방법및장치,복호화방법및장치와부호화시킨신호의기록매체 |
| JP3125543B2 (ja) * | 1993-11-29 | 2001-01-22 | ソニー株式会社 | 信号符号化方法及び装置、信号復号化方法及び装置、並びに記録媒体 |
| FR2722041B1 (fr) | 1994-06-30 | 1998-01-02 | Samsung Electronics Co Ltd | Decodeur de huffman |
| CA2156889C (en) * | 1994-09-30 | 1999-11-02 | Edward L. Schwartz | Method and apparatus for encoding and decoding data |
| US5473376A (en) | 1994-12-01 | 1995-12-05 | Motorola, Inc. | Method and apparatus for adaptive entropy encoding/decoding of quantized transform coefficients in a video compression system |
| US5796855A (en) * | 1995-10-05 | 1998-08-18 | Microsoft Corporation | Polygon block matching method |
| EP0777387B1 (en) | 1995-12-06 | 2003-08-13 | Harman/Becker Automotive Systems (XSYS Division) GmbH | Method and apparatus for encoding digital video signals |
| KR100196874B1 (ko) | 1995-12-23 | 1999-06-15 | 전주범 | 선택적 윤곽선 근사화 장치 |
| JP3346204B2 (ja) * | 1996-12-26 | 2002-11-18 | 富士ゼロックス株式会社 | 可変長符号復号装置 |
| CN1103911C (zh) | 1997-10-27 | 2003-03-26 | 刘北英 | 全“位置数和”等分定位装置的组合使用方法 |
| US6661839B1 (en) * | 1998-03-24 | 2003-12-09 | Advantest Corporation | Method and device for compressing and expanding data pattern |
| US6735249B1 (en) | 1999-08-11 | 2004-05-11 | Nokia Corporation | Apparatus, and associated method, for forming a compressed motion vector field utilizing predictive motion coding |
| US20020152436A1 (en) * | 2001-02-05 | 2002-10-17 | O'dea James Orrin | Digital error mapping circuit and method |
| US6650784B2 (en) * | 2001-07-02 | 2003-11-18 | Qualcomm, Incorporated | Lossless intraframe encoding using Golomb-Rice |
| EP3490154B1 (en) * | 2001-08-31 | 2021-03-17 | Panasonic Intellectual Property Corporation of America | Picture decoding method and decoding device |
| JP4125565B2 (ja) * | 2001-08-31 | 2008-07-30 | 松下電器産業株式会社 | 画像符号化方法、画像復号化方法及びその装置 |
| US6882685B2 (en) * | 2001-09-18 | 2005-04-19 | Microsoft Corporation | Block transform and quantization for image and video coding |
| US7436329B2 (en) * | 2003-04-17 | 2008-10-14 | Droplet Technology, Inc. | Multiple technique entropy coding system and method |
| EP1467491B1 (de) * | 2002-05-02 | 2007-01-24 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Arithmetische Codierung von Transformationskoeffizienten |
| US6825782B2 (en) * | 2002-09-20 | 2004-11-30 | Ntt Docomo, Inc. | Method and apparatus for arithmetic coding and termination |
| JP4240283B2 (ja) * | 2002-10-10 | 2009-03-18 | ソニー株式会社 | 復号装置及び復号方法 |
| CN1209925C (zh) * | 2003-01-10 | 2005-07-06 | 李春林 | 基于信源高阶熵的数据压缩方法 |
| JP2005130099A (ja) * | 2003-10-22 | 2005-05-19 | Matsushita Electric Ind Co Ltd | 算術復号装置、算術符号化装置、算術符号化・復号装置、携帯端末装置、動画像撮影装置、及び、動画像記録・再生装置 |
| CN100364235C (zh) * | 2004-09-17 | 2008-01-23 | 广州广晟数码技术有限公司 | 多声道数字音频编码设备及其方法 |
| DE102004056446A1 (de) * | 2004-11-23 | 2006-06-29 | Siemens Ag | Verfahren zur Transcodierung sowie Transcodiervorrichtung |
| KR100636229B1 (ko) * | 2005-01-14 | 2006-10-19 | 학교법인 성균관대학 | 신축형 부호화를 위한 적응적 엔트로피 부호화 및 복호화방법과 그 장치 |
| US7599840B2 (en) * | 2005-07-15 | 2009-10-06 | Microsoft Corporation | Selectively using multiple entropy models in adaptive coding and decoding |
| US7565018B2 (en) | 2005-08-12 | 2009-07-21 | Microsoft Corporation | Adaptive coding and decoding of wide-range coefficients |
| US7221296B2 (en) * | 2005-08-22 | 2007-05-22 | Streaming Networks (Pvt.) Ltd. | Method and system for fast context based adaptive binary arithmetic coding |
| JP4504291B2 (ja) * | 2005-09-27 | 2010-07-14 | 日本電信電話株式会社 | デブロッキング処理方法、デブロッキング処理装置、デブロッキング処理プログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体 |
| JP2007116501A (ja) * | 2005-10-21 | 2007-05-10 | Victor Co Of Japan Ltd | 算術符号復号化装置。 |
| KR100873636B1 (ko) * | 2005-11-14 | 2008-12-12 | 삼성전자주식회사 | 단일 부호화 모드를 이용하는 영상 부호화/복호화 방법 및장치 |
| GB0524983D0 (en) * | 2005-12-07 | 2006-01-18 | Imagination Tech Ltd | Recompression and decompression of a data stream for rate smoothing |
| WO2007149444A2 (en) * | 2006-06-16 | 2007-12-27 | Droplet Technology, Inc. | System, method and apparatus of video processing and applications |
| CN100596198C (zh) * | 2006-12-05 | 2010-03-24 | 华为技术有限公司 | 一种编码方法及编码器 |
| US7573405B2 (en) * | 2006-12-29 | 2009-08-11 | Texas Instruments Incorporated | System updating accumulated statistics coding variable values after multiple encodings |
| GB0706240D0 (en) | 2007-03-30 | 2007-05-09 | Concept 2 Manufacture Design O | A valve means for gas control devices |
| EP2147557B1 (en) * | 2007-04-18 | 2012-04-18 | Gottfried Wilhelm Leibniz Universität Hannover | Scalable compression of time-consistend 3d mesh sequences |
| JP2008289125A (ja) * | 2007-04-20 | 2008-11-27 | Panasonic Corp | 算術復号化装置及びその方法 |
| US8150172B2 (en) * | 2007-05-04 | 2012-04-03 | Qualcomm Incorporated | Video coding mode selection using estimated coding costs |
| EP2150061A4 (en) | 2007-05-21 | 2011-07-20 | Nec Corp | VIDEO CODING DEVICE, VIDEO CODING METHOD, AND VIDEO CODING PROGRAM |
| NO20074463A (no) * | 2007-09-03 | 2009-02-02 | Tandberg Telecom As | Metode for entropikoding av transformasjonskoeffisienter i videokomprimeringssystemer |
| US8483282B2 (en) | 2007-10-12 | 2013-07-09 | Qualcomm, Incorporated | Entropy coding of interleaved sub-blocks of a video block |
| KR101375668B1 (ko) * | 2008-03-17 | 2014-03-18 | 삼성전자주식회사 | 변환 계수의 부호화, 복호화 방법 및 장치 |
| US8634457B2 (en) * | 2008-09-26 | 2014-01-21 | Qualcomm Incorporated | Determining availability of video data units |
| EP2182732A1 (en) * | 2008-10-28 | 2010-05-05 | Panasonic Corporation | Switching between scans in image coding |
| US8892983B2 (en) * | 2008-11-04 | 2014-11-18 | Alcatel Lucent | Method and apparatus for error detection in a communication system |
| KR20110091000A (ko) * | 2008-11-07 | 2011-08-10 | 미쓰비시덴키 가부시키가이샤 | 화상 부호화 장치 및 화상 복호 장치 |
| JP5180782B2 (ja) * | 2008-11-11 | 2013-04-10 | 日本電信電話株式会社 | 並列分散情報源符号化システム及び並列分散情報源符号化・復号化方法 |
| JP5492206B2 (ja) * | 2009-07-27 | 2014-05-14 | 株式会社東芝 | 画像符号化方法および画像復号方法、ならびに、画像符号化装置および画像復号装置 |
| US8410959B2 (en) * | 2010-04-09 | 2013-04-02 | Qualcomm, Incorporated | Variable length codes for coding of video data |
| EP2614592B1 (en) * | 2010-09-09 | 2018-06-27 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Entropy encoding and decoding scheme |
| DK3349360T3 (da) * | 2011-01-14 | 2019-12-09 | Ge Video Compression Llc | Entropikodnings- og -afkodningssystem |
| US9871537B2 (en) * | 2011-10-27 | 2018-01-16 | Qualcomm Incorporated | Mapping states in binary arithmetic coder for video coding |
| KR101647244B1 (ko) * | 2012-01-30 | 2016-08-09 | 프라운호퍼 게젤샤프트 쭈르 푀르데룽 데어 안겐반텐 포르슝 에. 베. | 이진 산술 코딩 방식 |
| JP2014120615A (ja) * | 2012-12-17 | 2014-06-30 | Fujitsu Semiconductor Ltd | 容量素子、容量アレイおよびa/d変換器 |
| WO2015194187A1 (en) * | 2014-06-20 | 2015-12-23 | Sharp Kabushiki Kaisha | Harmonized palette coding |
| US10148961B2 (en) * | 2015-05-29 | 2018-12-04 | Qualcomm Incorporated | Arithmetic coder with multiple window sizes |
| US10826514B1 (en) * | 2019-10-15 | 2020-11-03 | Ciena Corporation | Noise-shaping enhanced gated ring oscillator based analog-to-digital converters |
-
2012
- 2012-01-12 DK DK18160276T patent/DK3349360T3/da active
- 2012-01-12 CN CN201710252914.0A patent/CN107196662B/zh active Active
- 2012-01-12 ES ES18160276T patent/ES2759513T3/es active Active
- 2012-01-12 DK DK14160512.1T patent/DK2760138T3/en active
- 2012-01-12 EP EP14160496.7A patent/EP2768144B1/en active Active
- 2012-01-12 PL PL14160511T patent/PL2768145T3/pl unknown
- 2012-01-12 ES ES14160496.7T patent/ES2566916T3/es active Active
- 2012-01-12 HU HUE14160512A patent/HUE037749T2/hu unknown
- 2012-01-12 KR KR1020237034117A patent/KR102815709B1/ko active Active
- 2012-01-12 ES ES14160511.3T patent/ES2566917T3/es active Active
- 2012-01-12 KR KR1020217005632A patent/KR102438562B1/ko active Active
- 2012-01-12 EP EP20155689.1A patent/EP3703263A1/en active Pending
- 2012-01-12 EP EP14160511.3A patent/EP2768145B1/en active Active
- 2012-01-12 KR KR1020137021228A patent/KR101741296B1/ko active Active
- 2012-01-12 EP EP18160276.4A patent/EP3349360B1/en active Active
- 2012-01-12 PL PL18160276T patent/PL3349360T3/pl unknown
- 2012-01-12 ES ES12700329.1T patent/ES2607982T3/es active Active
- 2012-01-12 PT PT181602764T patent/PT3349360T/pt unknown
- 2012-01-12 ES ES14160512.1T patent/ES2671482T3/es active Active
- 2012-01-12 KR KR1020207031576A patent/KR102393305B1/ko active Active
- 2012-01-12 WO PCT/EP2012/050431 patent/WO2012095488A2/en not_active Ceased
- 2012-01-12 CN CN201710255909.5A patent/CN107342770B/zh active Active
- 2012-01-12 CN CN201710252499.9A patent/CN107395212B/zh active Active
- 2012-01-12 CN CN201710252568.6A patent/CN107425855B/zh active Active
- 2012-01-12 EP EP12700329.1A patent/EP2664070B1/en active Active
- 2012-01-12 DK DK12700329.1T patent/DK2664070T3/en active
- 2012-01-12 KR KR1020227029644A patent/KR102588145B1/ko active Active
- 2012-01-12 KR KR1020207008051A patent/KR102175762B1/ko active Active
- 2012-01-12 PL PL14160496T patent/PL2768144T3/pl unknown
- 2012-01-12 HU HUE14160496A patent/HUE027907T2/en unknown
- 2012-01-12 KR KR1020177027820A patent/KR101955142B1/ko active Active
- 2012-01-12 KR KR1020177027822A patent/KR101955143B1/ko active Active
- 2012-01-12 PL PL14160512T patent/PL2760138T3/pl unknown
- 2012-01-12 KR KR1020207011867A patent/KR102222957B1/ko active Active
- 2012-01-12 PT PT127003291T patent/PT2664070T/pt unknown
- 2012-01-12 KR KR1020257017581A patent/KR20250079245A/ko active Pending
- 2012-01-12 HU HUE12700329A patent/HUE030952T2/en unknown
- 2012-01-12 CN CN201280011782.8A patent/CN103404035B/zh active Active
- 2012-01-12 KR KR1020197005616A patent/KR102095172B1/ko active Active
- 2012-01-12 EP EP14160512.1A patent/EP2760138B1/en active Active
- 2012-01-12 PT PT141605121T patent/PT2760138T/pt unknown
- 2012-01-12 HU HUE14160511A patent/HUE028417T2/en unknown
- 2012-01-12 KR KR1020177013696A patent/KR101785898B1/ko active Active
- 2012-01-12 HU HUE18160276A patent/HUE046377T2/hu unknown
- 2012-01-12 PL PL12700329T patent/PL2664070T3/pl unknown
- 2012-01-12 TR TR2018/07771T patent/TR201807771T4/tr unknown
- 2012-01-12 JP JP2013548843A patent/JP5809292B2/ja active Active
- 2012-01-12 KR KR1020157011376A patent/KR101648688B1/ko active Active
- 2012-01-12 DK DK14160496.7T patent/DK2768144T3/da active
- 2012-01-12 CN CN201710252475.3A patent/CN107317585B/zh active Active
- 2012-01-12 EP EP19195163.1A patent/EP3644516B1/en active Active
- 2012-01-12 CN CN201710252559.7A patent/CN107317586B/zh active Active
- 2012-01-12 DK DK14160511.3T patent/DK2768145T3/da active
- 2012-01-13 TW TW106101413A patent/TWI640169B/zh active
- 2012-01-13 TW TW110140378A patent/TWI789089B/zh active
- 2012-01-13 TW TW109116713A patent/TWI753434B/zh active
- 2012-01-13 TW TW101101443A patent/TWI505650B/zh active
- 2012-01-13 TW TW104129973A patent/TWI575886B/zh active
- 2012-01-13 TW TW111145784A patent/TWI849597B/zh active
- 2012-01-13 TW TW107132297A patent/TWI679878B/zh active
- 2012-01-13 TW TW108143729A patent/TWI747091B/zh active
- 2012-01-13 TW TW113123780A patent/TW202446063A/zh unknown
-
2013
- 2013-07-12 US US13/940,561 patent/US9083374B2/en active Active
-
2014
- 2014-02-14 NO NO14751227A patent/NO2956175T3/no unknown
-
2015
- 2015-06-09 US US14/734,407 patent/US9252806B2/en active Active
- 2015-09-10 JP JP2015178257A patent/JP6077615B2/ja active Active
- 2015-12-28 US US14/980,671 patent/US9473169B2/en active Active
-
2016
- 2016-06-28 US US15/195,696 patent/US9647683B2/en active Active
- 2016-09-06 US US15/257,606 patent/US9698818B2/en active Active
-
2017
- 2017-01-12 JP JP2017002986A patent/JP6479060B2/ja active Active
- 2017-04-05 US US15/479,787 patent/US9806738B2/en active Active
- 2017-09-27 US US15/717,579 patent/US10224953B2/en active Active
- 2017-09-27 US US15/717,427 patent/US10090856B2/en active Active
-
2018
- 2018-08-23 US US16/109,953 patent/US10419017B2/en active Active
- 2018-11-09 JP JP2018210993A patent/JP6676731B2/ja active Active
- 2018-11-21 US US16/198,338 patent/US10404272B2/en active Active
-
2019
- 2019-06-19 US US16/446,228 patent/US10581454B2/en active Active
- 2019-07-11 US US16/508,539 patent/US10644719B2/en active Active
-
2020
- 2020-02-03 US US16/779,851 patent/US10826524B2/en active Active
- 2020-02-10 JP JP2020020306A patent/JP6849835B2/ja active Active
- 2020-03-12 JP JP2020042519A patent/JP6990730B2/ja active Active
- 2020-03-31 US US16/836,191 patent/US10855309B2/en active Active
- 2020-09-30 US US17/039,204 patent/US11405050B2/en active Active
-
2021
- 2021-03-04 JP JP2021034013A patent/JP7247244B2/ja active Active
-
2022
- 2022-06-24 US US17/849,169 patent/US20220416810A1/en not_active Abandoned
-
2023
- 2023-03-15 JP JP2023041285A patent/JP2023063501A/ja active Pending
-
2024
- 2024-06-13 US US18/742,321 patent/US12375099B2/en active Active
-
2025
- 2025-06-17 US US19/240,252 patent/US20250373263A1/en active Pending
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| PT2664070T (pt) | Esquema de codificação e descodificação entrópica | |
| BR122020024986B1 (pt) | Codificação de entropia das diferenças do vetor de movimento | |
| WO2012031628A1 (en) | Entropy encoding and decoding scheme | |
| HK40036812A (en) | Entropy encoding and decoding scheme |