BR112021001807A2 - codificação de entropia para codificação de aprimoramento de sinal - Google Patents

codificação de entropia para codificação de aprimoramento de sinal Download PDF

Info

Publication number
BR112021001807A2
BR112021001807A2 BR112021001807-7A BR112021001807A BR112021001807A2 BR 112021001807 A2 BR112021001807 A2 BR 112021001807A2 BR 112021001807 A BR112021001807 A BR 112021001807A BR 112021001807 A2 BR112021001807 A2 BR 112021001807A2
Authority
BR
Brazil
Prior art keywords
symbol
data
encoded
length
type
Prior art date
Application number
BR112021001807-7A
Other languages
English (en)
Inventor
Guido Meardi
Original Assignee
V-Nova International Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from GBGB1812709.2A external-priority patent/GB201812709D0/en
Priority claimed from GBGB1812710.0A external-priority patent/GB201812710D0/en
Priority claimed from GBGB1812708.4A external-priority patent/GB201812708D0/en
Priority claimed from GBGB1903844.7A external-priority patent/GB201903844D0/en
Priority claimed from GBGB1904014.6A external-priority patent/GB201904014D0/en
Priority claimed from GBGB1904492.4A external-priority patent/GB201904492D0/en
Priority claimed from GBGB1905325.5A external-priority patent/GB201905325D0/en
Application filed by V-Nova International Ltd filed Critical V-Nova International Ltd
Publication of BR112021001807A2 publication Critical patent/BR112021001807A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • H04N19/33Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the spatial domain
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • H04N19/36Scalability techniques involving formatting the layers as a function of picture distortion after decoding, e.g. signal-to-noise [SNR] scalability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding

Landscapes

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

Abstract

CODIFICAÇÃO DE ENTROPIA PARA CODIFICAÇÃO DE APRIMORAMENTO DE SINAL. A presente invenção refere-se a um método para codificar um sinal de vídeo, o método que compreende: receber um quadro de entrada; processar o quadro de entrada para gerar pelo menos um conjunto de dados residuais, os dados residuais que permitem que um decodificador reconstrua o quadro de entrada a partir de um quadro reconstruído de referência; e aplicar uma operação de codificação run-length ao conjunto de dados residuais, em que a operação de codificação run-length compreende gerar um fluxo de bytes codificado run-length que compreende um conjunto de símbolos que representa os valores de dados não zero dos dados residuais definidos e contagens de valores zero consecutivos dos dados residuais é definido. Em certas modalidades, o método compreende aplicar uma operação de codificação de Huffman ao conjunto de símbolos. Um método para decodificar também é fornecido, bem como aparelhos e um meio legível por computador.

Description

Relatório Descritivo da Patente de Invenção para “CODIFICAÇÃO DE ENTROPIA PARA CODIFICAÇÃO DE APRIMORAMENTO DE SINAL”. Antecedentes
[001] Uma tecnologia de codificação híbrida de regressão compatível foi proposta anteriormente, por exemplo, no WO 2014/170819 e no WO 2018/046940, os conteúdos dos quais são aqui incorporados a título de referência.
[002] Um método é proposto aqui que analisa um fluxo de dados em primeira parte de dados codificados e segunda parte de dados codificados; implementa um primeiro decodificador para decodificar a primeira parte de dados codificados em uma primeira representação de um sinal; implementa um segundo decodificador para decodificar a segunda parte de dados codificados em dados de reconstrução, os dados de reconstrução que especifica como alterar a primeira representação do sinal; e aplica os dados de reconstrução à primeira representação do sinal para produzir um segundo representação do sinal.
[003] Um acréscimo é proposto ainda no qual um conjunto de elementos residuais é utilizado para reconstruir uma representação de uma primeira amostra de tempo de um sinal. Um conjunto de elementos de correlação espaço-temporal associado à primeira amostra de tempo é gerado. O conjunto de elementos de correlação espaço-temporal é indicativo de uma extensão de correlação espacial entre uma pluralidade de elementos residuais e uma extensão de correlação temporal entre os primeiro dado de referência com base na representação e o segundo dado de referência com base em uma representação de uma segunda amostra de tempo do sinal. O conjunto de elementos de correlação espaço-temporal é usado para gerar os dados de saída.
[004] As tecnologias típicas de codificação de vídeo envolvem aplicar uma operação de codificação de entropia aos dados de saída. Há uma necessidade de um esquema de codificação de entropia de baixa complexidade, simples e rápido para aplicar a compressão de dados aos dados de reconstrução ou elementos residuais das tecnologias propostas acima ou outros dados residuais similares. Sumário da Invenção
[005] De acordo com os aspectos da invenção apresenta-se um método para codificação de entropia ou decodificação de dados residuais, onde os dados residuais podem ser usados para corrigir ou aprimorar os dados de um fluxo de base, por exemplo, um quadro de um vídeo codificado com o uso de uma tecnologia de codificação de vídeo herdada.
[006] De acordo com um aspecto da invenção apresenta-se um método para codificar um sinal de vídeo. O método compreende: receber um quadro de entrada; processar o quadro de entrada para gerar os dados residuais, os dados residuais que permitem que um decodificador reconstrua o quadro de entrada a partir de um quadro reconstruído de referência; e aplicar uma operação de codificação run- length aos dados residuais, em que a operação de codificação run- length compreende gerar um fluxo de bytes codificado run-length que compreende um conjunto de símbolos que representa os valores de dados não zero dos dados residuais e contagens de valores zero consecutivos dos dados residuais.
[007] Dessa maneira, o método para codificar fornece uma solução de baixa complexidade, simples e rápida à compressão de dados dos dados residuais. A solução aproveita as características únicas dos dados residuais, como a ocorrência relativa de valores zero, o agrupamento provável dos valores zero com base em uma ordem de varredura de um processo de transformada de geração de dados residuais (se uma transformada for usada) e a variedade relativa dos valores dos dados, mas sua frequência/infrequência relativa potencial nos dados residuais.
[008] O conjunto de símbolos pode ser sequencial no fluxo de bytes codificado. As contagens de valores zero consecutivos também podem ser ditas como uma sequência de zeros. Os dados residuais sobre os quais a operação de codificação run-length é realizada podem representar os dados residuais quantizados, de preferência, um conjunto de coeficientes de transformada quantizados. Os dados residuais sobre os quais a operação de codificação run-length é realizada podem representar dados residuais quantizados, de preferência um conjunto quantizado de coeficientes de transformada. O conjunto quantizado de coeficientes de transformada pode ser ordenado por camada, ou seja, por conjuntos de coeficientes do mesmo tipo, por plano, por nível de qualidade ou por superfície. Esses termos são descritos e definidos posteriormente. Os símbolos podem ser sequenciais em uma ordem de varredura correspondente da operação de transformada, de modo que os dados residuais possam ser facilmente correspondidos a um quadro reconstruído de referência.
[009] De preferência, a operação de codificação run-length compreende: codificar os valores de dados não zero dos dados residuais em pelo menos um primeiro tipo de símbolo; e codificar as contagens de valores zero consecutivos em um segundo tipo de símbolo, de modo que os dados residuais são codificados como uma sequência de símbolos de diferentes tipos. Assim, os dados residuais podem ser codificados como uma sequência de símbolos que compreende um tipo de valor de dados e uma sequência de zeros. Os tipos facilitam a velocidade e a facilidade de decodificar no decodificador, mas também facilitam ainda a operação de codificação de entropia, como elaborado abaixo. A estruturação dos dados em um conjunto de códigos de diferentes tipos de comprimento fixo minimizado é benéfica para as etapas subsequentes.
[010] Em certas modalidades, a operação de codificação run- length compreende: codificar os valores de dados dos dados residuais em um primeiro tipo de símbolo e um terceiro tipo de símbolo, os primeiro e terceiro tipos de símbolo que compreendem, cada um, uma parte de um valor de dados, de modo que as partes podem ser combinadas em um decodificador para reconstruir o valor de dados. Cada tipo de símbolo pode ter um tamanho fixo e pode ter um byte. Os valores de dados maiores que um limite ou maiores que um tamanho disponível em um tipo de símbolo podem ser facilmente transmitidos ou armazenados com o uso de fluxo de bytes. Estruturar os dados em bytes ou símbolos não apenas facilita a decodificação, mas também facilita a codificação de entropia de símbolos de comprimento fixo, como estabelecido abaixo. A introdução do terceiro tipo de símbolo permite que três tipos de símbolos sejam facilmente distinguidos uns dos outros no lado do decodificador. Onde se refere aos tipos de símbolos, os termos blocos, bytes (onde o símbolo é um byte), contextos ou tipos podem ser usados.
[011] A operação de codificação run-length pode compreender: comparar um tamanho de cada valor de dados dos dados residuais a ser codificado a um limite; e codificar cada valor de dados no primeiro tipo de símbolo se o tamanho estiver abaixo do limite e codificar uma parte de cada valor de dados no primeiro tipo de símbolo e uma parte de cada valor de dados no terceiro tipo de símbolo se o tamanho estiver acima do limite.
[012] Se o tamanho estiver acima do limite, o método pode compreender configurar uma sinalização no símbolo do primeiro tipo de símbolo que indica que uma parte do valor de dados representado é codificada em um símbolo adicional do terceiro tipo de símbolo. A sinalização pode ser uma sinalização de sobrecarga ou bit de bit de sobrecarga e pode, em certos exemplos, ser a parte menos significativa do símbolo ou byte. Onde o bit menos significativo do símbolo é uma sinalização, o valor de dados ou parte do valor de dados pode estar compreendido nos bits restantes do byte. Confirmar o bit de sobrecarga como o bit menos significativo facilita a combinação com os símbolos subsequentes.
[013] O método pode ainda compreender inserir uma sinalização em cada símbolo que indica um tipo de símbolo codificado próximo no fluxo de bytes codificado run-length. A sinalização pode ser um bit de sobrecarga como descrito acima ou pode ainda ser uma sinalização de sequência ou bit de sequência que indica se o próximo símbolo compreende ou não uma sequência de zeros ou um valor de dados ou uma parte de um valor de dados. Onde a sinalização representa se o próximo símbolo compreende uma sequência (ou uma contagem de zeros consecutivos) a sinalização pode ser um bit do símbolo, de preferência, um bit mais significativo do símbolo. A contagem de zeros consecutivos ou o valor de dados podem estar compreendidos nos bits restantes do símbolo. Assim, a “sequência de zeros” ou o segundo tipo de símbolo compreende 7 bits disponíveis do byte para uma contagem ou os “dados” ou o primeiro tipo de símbolo compreende 6 bits disponíveis para um valor de dados onde o bit de sobrecarga não é definido e 7 bits disponíveis para um valor de dados onde o bit de sobrecarga é definido.
[014] Em suma, a sinalização pode ser diferente para cada tipo de símbolo e pode indicar o próximo tipo de símbolo no fluxo.
[015] Nas modalidades pditas do aspecto acima, o método compreende ainda aplicar um operação de codificação de entropia adicional ao conjunto de símbolos produzido pela operação codificada run-length. Assim, os símbolos de comprimento fixo produzidos deliberadamente pela estrutura da operação de codificação run-length podem ser convertidos em códigos de comprimento variável para reduzir o tamanho geral dos dados. A estrutura de codificação run- length é desenvolvida a fim de criar símbolos de comprimento fixo da alta frequência para facilitar uma operação de codificação de entropia ainda aprimorada e uma redução geral no tamanho de dados. A operação de codificação de entropia adicional tem a vantagem da probabilidade ou frequência de um símbolo que ocorre no fluxo de bytes criado pela operação de codificação run-length.
[016] Em um exemplo preferido, a operação de codificação de entropia adicional é uma operação de codificação de Huffman ou uma operação de codificação aritmética. De preferência, o método compreende ainda aplicar uma operação de codificação de Huffman ao conjunto de símbolos para gerar os dados codificados de Huffman que compreendem um conjunto de códigos que representa o fluxo de bytes codificado run-length. A operação de codificação de Huffman recebe os símbolos de entrada do fluxo de bytes codificados run-length e emite uma pluralidade de códigos de comprimento variável em um fluxo de bits. A codificação de Huffman é uma técnica de codificação que pode reduzir de maneira eficaz os códigos de comprimento fixo. A estrutura dos bytes codificados run-length significa que os símbolos dos dois tipos são altamente prováveis de ser replicados com frequência, o que significa que apenas alguns bits serão necessários para cada símbolo refluxo. Em um plano, é provável que o mesmo valor de dados seja replicado (particularmente onde os resíduos são quantizados) e, portanto, o código de comprimento variável pode ser pequeno (mas repetido).
[017] A codificação de Huffman também é otimizada para a implementação de software (conforme antecipado aqui) e é computacionalmente eficiente. Ela usa memória mínima e tem decodificação mais rápida em comparação a outras técnicas de codificação de entropia, já que as etapas de processamento envolvem apenas passar por uma árvore. Os benefícios computacionais surgem da forma e profundidade da árvore criada pela operação de codificação run-length projetada especificamente.
[018] As operações de codificação podem ser realizadas em um grupo de coeficientes, ou seja, uma camada, em um plano de um quadro, em um nível de qualidade, ou em toda uma superfície ou quadro. Ou seja, as estatísticas ou parâmetros de cada operação podem ser determinados com base no grupo de valores de dados e valores de dados zero a serem codificados ou os símbolos que representam esses valores.
[019] A operação de codificação de Huffman pode ser uma operação de codificação de Huffman canônica, de modo que os dados codificados de Huffman compreendem um comprimento de código para cada símbolo único do conjunto de símbolos, o comprimento de código que representa um comprimento de um código usado para encode um símbolo correspondente. A codificação de Huffman canônica facilita uma redução nos parâmetros de codificação que precisam ser sinalizados entre o codificador e o decodificador nos metadados ao garantir que os comprimentos de código idênticos sejam fixos aos símbolos de maneira sequencial. O livro-código para o decodificador pode ser inferido e apenas os comprimentos de código precisam ser enviados. Assim, o codificador de Huffman canônico é particularmente eficiente para as árvores rasas, em que há um número de diferentes valores de dados.
[020] Em determinados exemplos, o método compreende ainda comparar um tamanho de dados de pelo menos uma parte do fluxo de bytes codificado run-length a um tamanho de dados de pelo menos uma parte dos dados codificados de Huffman; e emitir o fluxo de bytes codificado run-length ou os dados codificados de Huffman em um fluxo de bits de saída com base na comparação. Cada bloco ou seção dos dados de entrada é, portanto, enviado seletivamente para reduzir o tamanho geral dos dados, garantindo que o decodificador possa diferenciar facilmente entre os tipos de codificação. A diferença pode estar dentro de um limite ou tolerância de modo que, embora um esquema possa resultar em dados menores, as eficiências computacionais podem significar que um esquema é preferido.
[021] Para distinguir entre os esquemas, o método pode compreender ainda adicionar uma sinalização aos metadados de configuração que acompanham o fluxo de bits de saída, indicando se o fluxo de bits representa o fluxo de bytes codificado run-length ou os dados codificados de Huffman. Essa é uma forma de sinalização rápida e eficiente. Em alternativa, o decodificador pode identificar o esquema usado a partir da estrutura dos dados, por exemplo, os dados codificados de Huffman podem ter uma parte de cabeçalho e uma parte de dados, enquanto os dados codificados run-length podem compreender apenas uma parte de dados e, portanto, o decodificador pode ser capaz de distinguir entre os dois esquemas.
[022] A operação de codificação de Huffman pode compreender a geração de uma tabela de frequência separada para símbolos do primeiro tipo de símbolo e símbolos do segundo tipo de símbolo. Além disso, uma operação de codificação de Huffman separada pode ser aplicada para cada tipo de símbolo. Esses conceitos facilitam a eficiência particular do esquema de codificação de comprimento variável. Por exemplo, onde o mesmo valor de dados é replicado em um plano, como é provável na codificação de vídeo onde uma cena pode ter cores ou erros/aprimoramentos semelhantes, apenas alguns códigos podem ser necessários para esses valores (onde os códigos não são distorcidos pelo tipo de símbolo de “sequência de zeros”). Assim, essa modalidade da invenção é particularmente vantajosa para uso em conjunto com a operação de codificação run-length acima. Conforme observado acima, onde os valores são quantizados, os símbolos podem ser replicados e não podem haver muitos valores diferentes dentro do mesmo quadro ou grupo de coeficientes.
[023] Usar uma tabela de frequência diferente para cada tipo de símbolo fornece um benefício específico na operação de codificação de Huffman seguindo a operação de codificação run-length especificamente desenvolvida.
[024] O método pode assim compreender identificar um tipo de símbolo a ser codificado a seguir, selecionar uma tabela de frequência com base no tipo de próximo símbolo, decodificar o próximo símbolo com o uso da tabela de frequência selecionada e emitir o símbolo codificado na sequência. A tabela de frequência pode corresponder a um livro-código único.
[025] O método pode compreender gerar um cabeçalho de fluxo que pode compreender uma indicação da pluralidade de comprimentos de código, de modo que um decodificador pode derivar os comprimentos de código e os respectivos símbolos correspondentes para a operação canônica de decodificação de Huffman. Os comprimentos de código podem ser, por exemplo, o comprimento de cada código usado para encode um particular símbolo. Portanto, o comprimento de código tem um código correspondente e um símbolo correspondente. O cabeçalho de fluxo pode ter um primeiro tipo de cabeçalho de fluxo e compreende ainda uma indicação do símbolo associado a um respectivo comprimento de código da pluralidade de comprimentos de código. Em alternativa, o cabeçalho de fluxo pode ter um segundo tipo de cabeçalho de fluxo e o método pode ainda compreender ordenar a pluralidade de comprimentos de código no cabeçalho de fluxo com base em uma ordem predeterminada de símbolos que correspondem a cada um dos comprimentos de código, de modo que os comprimentos de código podem ser associados a um símbolo correspondente no decodificador. Cada tipo fornecerá uma sinalização eficiente dos parâmetros de codificação, dependendo dos símbolos e comprimentos a serem decodificados. Os comprimentos de código podem ser sinalizados como uma diferença entre o comprimento e outro comprimento, de preferência, um comprimento de código mínimo sinalizado.
[026] O segundo tipo de cabeçalho de fluxo pode ainda compreender uma sinalização que indica que um símbolo na ordem predeterminada do possível conjunto de símbolos não existe no conjunto de símbolos no fluxo de bytes codificado run-length. Dessa maneira, apenas os comprimentos necessários precisam ser incluídos no cabeçalho.
[027] O método pode ainda compreender comparar um número de códigos únicos nos dados codificados de Huffman a um limite e gerar o primeiro tipo de cabeçalho de fluxo ou o segundo tipo de cabeçalho de fluxo com base na comparação.
[028] O método pode ainda compreender comparar um número de símbolos não zero ou símbolos de dados a um limite e gerar o primeiro tipo de cabeçalho de fluxo ou o segundo tipo de cabeçalho de fluxo com base na comparação.
[029] De acordo com um aspecto adicional da invenção pode ser fornecido um método para decodificar um sinal de vídeo, o método que compreende: recuperar um fluxo de bits codificado; decodificar o fluxo de bits codificado para gerar os dados residuais, e reconstruir um quadro original do sinal de vídeo a partir dos dados residuais e um quadro reconstruído de referência, em que a etapa de decodificar o fluxo de bits codificado compreende: aplicar uma operação de codificação run-length para gerar os dados residuais, em que a operação de codificação run-length compreende identificar um conjunto de símbolos que representa os valores de dados não zero dos dados residuais e um conjunto de símbolos que representa as contagens de valores zero consecutivos dos dados residuais; analisar o conjunto de símbolos para derivar os valores de dados não zero dos dados residuais e as contagens de valores zero consecutivos; e gerar os dados residuais a partir dos valores de dados não zero e das contagens de valores zero consecutivos.
[030] A operação de codificação run-length pode compreender: identificar os símbolos de um primeiro tipo de símbolo que representa os valores de dados não zero dos dados residuais; identificar os símbolos de um segundo tipo de símbolo que representa as contagens de valores zero consecutivos, de modo que uma sequência de símbolos de diferentes tipos é decodificada para gerar os dados residuais; e analisar o conjunto de símbolos de acordo com o respectivo tipo de cada símbolo.
[031] A operação de codificação run-length pode compreender identificar os símbolos de um primeiro tipo de símbolo e símbolos de um terceiro tipo de símbolo, os primeiro e terceiro tipos de símbolo cada que representa uma parte de um valor de dados; analisar um símbolo do primeiro tipo de símbolo e um símbolo do terceiro tipo de símbolo para derivar partes de um valor de dados; e combinar as partes derivadas do valor de dados em um valor de dados.
[032] O método pode ainda compreender: recuperar uma sinalização de sobrecarga a partir de um símbolo do primeiro tipo de símbolo que indica se uma parte de um valor de dados do símbolo do primeiro tipo de símbolo é compreendida em um terceiro tipo de símbolo subsequente.
[033] O método pode ainda compreender recuperar uma sinalização de cada símbolo que indica um tipo de símbolo subsequente a ser considerado no conjunto de símbolos.
[034] Um símbolo inicial pode ser considerado ser primeiro tipo de símbolo, de modo que o símbolo inicial é analisado para derivar pelo menos uma parte de um valor de dados.
[035] A etapa de decodificar o fluxo de bits codificado pode compreender aplicar uma operação de codificação de Huffman ao fluxo de bits codificado para gerar o conjunto de símbolos que representa os valores de dados não zero dos dados residuais e o conjunto de símbolos que representa as contagens de valores zero consecutivos dos dados residuais, em que a etapa de aplicar uma operação de codificação run- length para gerar os dados residuais é realizada nos conjuntos de símbolos.
[036] A operação de codificação de Huffman pode ser uma operação de codificação de Huffman canônica.
[037] O método pode ainda compreender recuperar uma sinalização a partir da configuração de metadados que acompanham o fluxo de bits codificado que indica se o fluxo de bits codificado compreende um fluxo de bytes codificado run-length ou dados codificados de Huffman; e aplicar de maneira seletiva a operação de codificação de Huffman com base na sinalização.
[038] O método pode ainda compreender: identificar um símbolo de tipo inicial considerado ser derivado no fluxo de bits codificado; aplicar a operação de codificação de Huffman ao fluxo de bits codificado para derivar um símbolo inicial com base em um conjunto de parâmetros de codificação associado ao tipo de símbolo inicial considerado; recuperar uma sinalização a partir do símbolo inicial que indica um tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits; e aplicar ainda a operação de codificação de Huffman ao fluxo de bits para derivar um símbolo subsequente com base em um conjunto de parâmetros de codificação associado ao tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits.
[039] O método pode ainda compreender recuperar de maneira iterativa uma sinalização a partir de um símbolo decodificado que indica um tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits e aplicar a operação de codificação de Huffman ao fluxo de bits para derivar um símbolo subsequente com base em um conjunto de parâmetros de codificação associado ao tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits.
[040] Assim, o método pode compreender as etapas de decodificar um símbolo com o uso de uma operação de codificação de Huffman, decodificar um símbolo com o uso de uma operação de codificação run- length, identificar um tipo de símbolo considerado próximo a partir da operação de codificação run-length e decodificar um próximo símbolo com o uso de uma operação de codificação de Huffman.
[041] O método pode ainda compreender: recuperar um cabeçalho de fluxo que compreende uma indicação de uma pluralidade de comprimentos de código a ser usada para a operação de codificação de Huffman canônica; associar cada comprimento de código a um respectivo símbolo de acordo com a operação de codificação de Huffman canônica; e identificar um código associado a cada símbolo com base em os comprimentos de código de acordo com a operação de codificação de Huffman canônica. Assim, os códigos podem ser associados aos símbolos sequenciais em que os comprimentos de código são idênticos.
[042] O cabeçalho de fluxo pode compreender uma indicação de um símbolo associado a um respectivo comprimento de código da pluralidade de comprimentos de código e a etapa de associar cada comprimento de código a um símbolo compreende associar cada comprimento de código ao símbolo correspondente no cabeçalho de fluxo.
[043] A etapa de associar cada comprimento de código a um respectivo símbolo compreende associar cada comprimento de código a um símbolo de um conjunto de símbolos predeterminados de acordo com uma ordem na qual cada comprimento de código foi recuperado.
[044] O método pode ainda compreender não associar um símbolo do conjunto de símbolos predeterminados a um respectivo comprimento de código onde uma sinalização do cabeçalho de fluxo indica que não há comprimento de código no cabeçalho de fluxo para aquele símbolo.
[045] De acordo com um aspecto da invenção apresenta-se um método para codificar um sinal de vídeo. O método compreende: receber um quadro de entrada; processar o quadro de entrada para gerar os dados residuais, os dados residuais que permitem que um decodificador reconstrua o quadro de entrada a partir de um quadro reconstruído de referência; e aplicar uma operação de codificação de Huffman aos dados residuais, em que a operação Huffman compreende gerar um fluxo de bits codificado que compreende um conjunto de códigos codificar um conjunto de símbolos que representa os dados residuais.
[046] De acordo com um aspecto adicional da invenção pode ser fornecido um método para decodificar um sinal de vídeo, o método que compreende: recuperar um fluxo de bits codificado; decodificar o fluxo de bits codificado para gerar os dados residuais, e reconstruir um quadro original do sinal de vídeo a partir dos dados residuais e um quadro reconstruído de referência, em que a etapa de decodificar o fluxo de bits codificado compreende: aplicar uma operação de codificação de Huffman para gerar os dados residuais, em que a operação de codificação de Huffman compreende gerar um conjunto de símbolos que representa os dados residuais ao comparar o fluxo de bits codificado de um código de mapeamento de referência a um símbolo correspondente e gerar os dados residuais a partir dos valores de dados não zero e das contagens de valores zero consecutivos.
[047] De acordo com um aspecto adicional pode ser fornecido um aparelho para codificar um conjunto de dados em um conjunto de dados codificados. O aparelho configurado para codificar um vídeo de entrada de acordo com as etapas acima. O aparelho pode compreender um processador configurado para realizar o método para qualquer um dos aspectos acima.
[048] De acordo com um aspecto adicional pode ser fornecido um aparelho para decodificar um conjunto de dados em um vídeo reconstruído a partir de um conjunto de dados. O aparelho configurado para decodificar um vídeo de saída de acordo com as etapas acima. O aparelho pode compreender um processador configurado para realizar o método para qualquer um dos aspectos acimas.
[049] Um codificador e decodificador também podem ser fornecidos.
[050] De acordo com outros aspectos da invenção, podem ser fornecidos meios legíveis por computador que, quando executados por um processador, fazem com que o processador execute qualquer um dos métodos dos aspectos acima. Descrição Detalhada
[051] Os exemplos de sistemas e métodos de acordo com a invenção serão agora descritos com referência aos desenhos anexos, nos quais:
[052] a figura 1 mostra um esquema de alto nível de um processo de codificação;
[053] a figura 2 mostra um esquema de alto nível de um processo de decodificação;
[054] a figura 3 mostra um esquema de alto nível de um processo de criação de dados residuais;
[055] a figura 4 mostra um esquema de alto nível de um processo de criação de dados residuais adicionais em um nível diferente de qualidade;
[056] a figura 5 mostra um esquema de alto nível de um processo para reconstruir um quadro de dados residuais;
[057] a figura 6 mostra um estrutura de dados hierárquica;
[058] a figura 7 mostra um estrutura de dados hierárquica adicional;
[059] a figura 8 mostra um exemplo de processo de codificação;
[060] a figura 9 mostra um exemplo de processo de decodificação;
[061] a figura 10 mostra uma estrutura de um primeiro símbolo de dados;
[062] a figura 11 mostra uma estrutura de um segundo símbolo de dados;
[063] a figura 12 mostra uma estrutura de um símbolo de sequência;
[064] a figura 13 mostra uma estrutura de um primeiro cabeçalho de fluxo;
[065] a figura 14 mostra uma estrutura de um segundo cabeçalho de fluxo;
[066] a figura 15 mostra uma estrutura de um terceiro cabeçalho de fluxo;
[067] a figura 16 mostra uma estrutura de um quarto cabeçalho de fluxo;
[068] as figuras 17A-17E mostram árvores de Huffman; e
[069] a figura 18 mostra uma máquina de estado de codificação run-length.
[070] A presente invenção refere-se aos métodos. Em particular, a presente invenção se refere a métodos para codificar e decodificar sinais. O processamento de dados pode incluir, mas não está limitado a, obter, derivar, enviar, receber e reconstruir dados.
[071] A tecnologia de codificação aqui discutida é um formato de codificação flexível, adaptável, altamente eficiente e computacionalmente barata que combina um formato de codificação de vídeo, um codec de base (por exemplo, AVC, HEVC ou qualquer outro codec presente ou futuro) com um nível de aprimoramento de dados codificados, codificados com o uso de uma técnica diferente.
[072] A tecnologia usa um sinal de origem com amostragem reduzida codificado com o uso de um codec de base para formar um fluxo de base. Um fluxo de aprimoramento é formado com o uso de um conjunto codificado de resíduos que corrigem ou aprimoram o fluxo de base, por exemplo, aumentando a resolução ou aumentando a taxa de quadros. Pode haver vários níveis de dados de aprimoramento em uma estrutura hierárquica. É importante notar que normalmente espera-se que o fluxo de base seja decodificável por um decodificador de hardware, enquanto o fluxo de aprimoramento deve ser adequado para implementação de processamento de software com consumo de energia adequado.
[073] Os métodos e sistemas para transmitir e armazenar com eficiência as informações codificadas de aprimoramento são necessários.
[074] É importante que qualquer operação de codificação de entropia usada na nova tecnologia de codificação seja feita sob medida para os requisitos ou restrições específicos do fluxo de aprimoramento e seja de baixa complexidade. Tais requisitos ou restrições incluem: a redução potencial na capacidade computacional resultante da necessidade de decodificação de software do fluxo de aprimoramento; a necessidade de combinação de um conjunto decodificado de resíduos com um quadro decodificado; a estrutura provável dos dados residuais, isto é, a proporção relativamente alta de valores zero com valores de dados altamente variáveis em uma ampla faixa; as nuances do bloco quantizado de entrada de coeficientes; e a estrutura do fluxo de aprimoramento sendo um conjunto de quadros residuais discretos separados em planos, camadas, etc. A codificação de entropia também deve ser adequada para vários níveis de aprimoramento dentro do fluxo de aprimoramento.
[075] A investigação pelos inventores estabeleceu que os esquemas de codificação de entropia contemporâneos usados em vídeo, como codificação aritmética binária adaptativa baseada em contexto (CABAC) ou codificação de comprimento variável adaptável ao contexto (CAVLC), são improváveis de ser adequados. Por exemplo, os mecanismos preditivos podem ser desnecessários ou podem não produzir benefícios suficientes para compensar seus encargos computacionais, dada a estrutura dos dados de entrada. Além disso, a codificação aritmética é geralmente cara em termos computacionais e a implementação em software é frequentemente indesejável.
[076] Observa-se que as restrições colocadas no fluxo de aprimoramento significam que uma operação de codificação de entropia simples e rápida é essencial para permitir que o fluxo de aprimoramento corrija ou aprimore quadros individuais do vídeo decodificado de base. Observe que, em alguns cenários, o fluxo de base também está sendo decodificado substancialmente simultaneamente antes da combinação, sobrecarregando os recursos.
[077] O presente documento cumpre preferência às exigências dos documentos ISO/IEC a seguir: “Call for Proposals for Low Complexity Video Coding Enhancements” ISO/IEC JTC1/SC29/WG11 N17944, Macao, CN, outubro de 2018 e “Requirements for Low Complexity Video Coding Enhancements” ISO/IEC JTC1/SC29/WG11 N18098, Macao, CN, outubro de 2018. Além disso, as abordagens descritas neste documento podem ser incorporadas nos produtos PERSEUS®, como fornecido por V-Nova International Ltd.
[078] A estrutura geral do esquema de codificação proposto, no qual as técnicas aqui descritas podem ser aplicadas, usa um sinal de origem reduzido codificado com um codec de base, adiciona um primeiro nível de dados de correção à saída decodificada do codec de base para gerar uma imagem corrigida e, em seguida, adiciona um nível adicional de dados de aprimoramento a uma versão elevada da imagem corrigida.
[079] Assim, os fluxos são considerados um fluxo de base e um fluxo de aprimoramento. É importante observar que normalmente espera-se que o fluxo de base seja decodificável por um decodificador de hardware, enquanto o fluxo de aprimoramento deve ser adequado para a implementação de processamento de software com consumo de energia adequado.
[080] Essa estrutura cria uma pluralidade de graus de liberdade que permitem grande flexibilidade e capacidade de adaptação a muitas situações, tornando o formato de codificação adequado para muitos casos de uso, incluindo transmissão Over-The-Top (OTT), streaming ao vivo, transmissão ao vivo definição ultra-alta (UHD) e assim por diante.
[081] Embora a saída decodificada do codec de base não seja para visualização, é um vídeo totalmente decodificado em uma resolução inferior, tornando a saída compatível com os decodificadores existentes e, quando considerado adequado, também utilizável como uma saída de resolução inferior.
[082] Os resíduos gerais referem-se a uma diferença entre um valor de uma matriz de referência ou quadro de referência e uma matriz real ou quadro de dados. Deve-se observar que esse exemplo generalizado é agnóstico quanto às operações de codificação realizadas e a natureza do sinal de entrada. A referência a “dados residuais”, conforme usado neste documento, refere-se aos dados derivados de um conjunto de resíduos, por exemplo, um conjunto dos próprios resíduos ou uma saída de um conjunto de operações de processamento de dados que são realizadas no conjunto de resíduos.
[083] Em certos exemplos aqui descritos, inúmeros fluxos codificados podem ser gerados e enviados de forma independente para um decodificador. Ou seja, nos métodos de exemplo de codificação de um sinal, o sinal pode ser codificado com o uso de pelo menos dois níveis de codificação. Um primeiro nível de codificação pode ser realizado com o uso de um primeiro algoritmo de codificação e um segundo nível pode ser codificado com o uso de um segundo algoritmo de codificação. O método pode compreender: obter uma primeira parte de um fluxo de bits ao codificar o primeiro nível do sinal; obter uma segunda parte de um fluxo de bits ao codificar o segundo nível do sinal; e enviar a primeira parte do fluxo de bits e a segunda parte do fluxo de bytes como dois fluxos de bits independentes.
[084] Deve-se observar que a técnica de codificação de entropia aqui proposta não se limita aos múltiplos LoQs propostos nas figuras, mas fornece utilidade em quaisquer dados residuais utilizados para proporcionar um aprimoramento ou correção a um quadro de um vídeo reconstruído a partir de um fluxo codificado, codificado com o uso de uma tecnologia de codificação de vídeo herdado, como HEVC. Por exemplo, a utilidade da técnica de codificação na codificação de dados residuais de diferentes LoQs é particularmente benéfica.
[085] Observa-se que, foram fornecidos exemplos de codificação e decodificação nas figuras 1 a 5 de esquemas nos quais as técnicas de codificação de entropia fornecidas neste documento podem fornecer utilidade, mas será entendido que a técnica de codificação pode ser geralmente utilizada para codificar dados residuais.
[086] Certos exemplos aqui descritos referem-se a um processo de codificação e decodificação generalizado que fornece uma tecnologia de codificação hierárquica, gradual e flexível. A primeira parte de um fluxo de bits ou primeiro fluxo de bits independente pode ser decodificado com o uso de um primeiro algoritmo de decodificação e a segunda parte do fluxo de bits ou segundo fluxo de bits independente pode ser decodificado com o uso de um segundo algoritmo de decodificação. O primeiro algoritmo de decodificação é capaz de ser decodificado por um decodificador herdado com o uso de um hardware herdado.
[087] Voltando para o processo inicial descrito acima que fornece um fluxo de base e dois níveis de aprimoramento dentro de um fluxo de aprimoramento, um exemplo de um processo de codificação generalizado é ilustrado no diagrama de blocos da figura 1. Um vídeo de entrada de resolução total 100 é processado para gerar vários fluxos codificados 101, 102, 103. Um primeiro fluxo codificado (fluxo de base codificado) é produzido ao alimentar um codec de base (por exemplo, AVC, HEVC ou qualquer outro codec) com uma versão de amostra reduzida do vídeo de entrada. O fluxo de base codificado pode ser dito como a camada de base ou nível de base. Um segundo fluxo codificado (fluxo codificado de nível 1) é produzido ao processar os resíduos obtidos tomando a diferença entre o vídeo codec de base reconstruído e a versão de amostra reduzida do vídeo de entrada. Um terceiro fluxo codificado (fluxo codificado de nível 0) é produzido ao processar os resíduos obtidos considerando a diferença entre uma versão de amostra elevada de uma versão corrigida do vídeo codificado de base reconstruído e o vídeo de entrada.
[088] Uma operação de amostragem reduzida pode ser aplicada ao vídeo de entrada para produzir um vídeo de amostra reduzida a ser codificado por um codec de base. A amostragem reduzida pode ser feita tanto na direção vertical quanto na horizontal ou, alternativamente, apenas na direção horizontal.
[089] Cada processo de codificação de fluxo de aprimoramento pode não necessariamente incluir uma etapa de amostragem elevada. Na figura 1, por exemplo, o primeiro fluxo de aprimoramento é conceitualmente um fluxo de correção, enquanto o segundo fluxo de aprimoramento é de amostra elevada para fornecer um nível de aprimoramento.
[090] Olhando para o processo de geração de fluxos de aprimoramento em mais detalhes, para gerar o fluxo codificado de nível 1, o fluxo de base codificado é decodificado 114 (isto é, uma operação de decodificação é aplicada ao fluxo de base codificado para gerar um fluxo de base decodificado). A diferença entre o fluxo de base decodificado e o vídeo de entrada de amostragem reduzida é então criada 110 (isto é, uma operação de subtração é aplicada ao vídeo de entrada de amostragem reduzida e ao fluxo de base decodificado para gerar um primeiro conjunto de resíduos).
[091] Aqui, o termo resíduos é usado da mesma maneira que o conhecido na técnica, ou seja, o erro entre um quadro de referência e um quadro desejado. Aqui, o quadro de referência é o fluxo de base decodificado e o quadro desejado é o vídeo de entrada de amostra reduzida. Assim, os resíduos usados no primeiro nível de aprimoramento podem ser considerados como um vídeo corrigido, uma vez que “corrigem” o fluxo de base decodificado para o vídeo de entrada de amostra reduzida que foi usado na operação de codificação de base.
[092] Novamente, a operação de codificação de entropia descrita posteriormente é adequada para quaisquer dados residuais, por exemplo, quaisquer dados associados a um conjunto de residuais.
[093] A diferença é então codificada 115 para gerar o fluxo de nível 1 codificado 102, (isto é, uma operação de codificação é aplicada ao primeiro conjunto de resíduos para gerar um primeiro fluxo de aprimoramento).
[094] Como observado acima, o fluxo de aprimoramento pode compreender um primeiro nível de aprimoramento 102 e um segundo nível de aprimoramento 103. O primeiro nível de aprimoramento 102 pode ser considerado um fluxo corrigido. O segundo nível de aprimoramento 103 pode ser considerado como um nível adicional de aprimoramento que converte o fluxo corrigido no vídeo de entrada original.
[095] O nível adicional de aprimoramento 103 é criado pela codificação de um conjunto adicional de resíduos que são a diferença 119 entre uma versão 117 de uma amostra elevada de um fluxo de nível 1 decodificado 118 e o vídeo de entrada 100.
[096] Conforme observado, um fluxo de amostra elevada é comparado ao vídeo de entrada que cria um conjunto adicional de resíduos (ou seja, uma operação de diferença é aplicada ao fluxo recriado de amostra elevada para gerar um conjunto adicional de residuais). O conjunto adicional de resíduos é então codificado 121 como o fluxo de aprimoramento de nível 0 codificado (ou seja, uma operação de codificação é, em seguida, aplicada ao conjunto adicional de resíduos para gerar um fluxo de aprimoramento adicional codificado).
[097] Assim, como ilustrado na figura 1 e descrito acima, a saída do processo de codificação é um fluxo de base 101 e um ou mais fluxos de aprimoramento 102, 103 que compreendem, de preferência, um primeiro nível de aprimoramento e outro nível de aprimoramento.
[098] Um processo de decodificação generalizado correspondente é representado no diagrama de blocos da figura 2. O decodificador recebe os três fluxos 101, 102, 103 gerados pelo codificador junto com cabeçalhos contendo informações adicionais de decodificação. O fluxo de base codificado é decodificado por um decodificador de base correspondente ao codec de base usado no codificador e sua saída é combinada com os resíduos decodificados obtidos a partir do fluxo de nível 1 codificado. O vídeo combinado é de amostra elevada e posteriormente combinado com os resíduos decodificados obtidos a partir do fluxo de nível 0 codificado.
[099] No processo de decodificação, o decodificador pode analisar os cabeçalhos (configuração global, configuração de imagem, bloco de dados) e configurar o decodificador com base nesses cabeçalhos. A fim de recriar o vídeo de entrada, o decodificador pode decodificar cada um do fluxo de base, o primeiro fluxo de aprimoramento e o fluxo de aprimoramento adicional. Os quadros do fluxo podem ser sincronizados e então combinados para derivar o vídeo decodificado.
[0100] Em cada uma das figuras 1 e 2, as operações de codificação de nível 0 e de nível 1 podem incluir as etapas de transformada, quantização e codificação de entropia. Da mesma forma, no estágio de decodificação, os resíduos podem ser passados por um decodificador de entropia, um dequantizador e um módulo de transformada inversa. Qualquer codificação adequada e a operação de decodificação correspondente pode ser usada. De preferência, no entanto, as etapas de codificação de nível 0 e nível 1 podem ser realizadas em software.
[0101] Em suma, os métodos e aparelhos neste documento são baseados em um algoritmo geral que é construído sobre uma codificação existente e/ou algoritmo de decodificação (como padrões MPEG, como AVC/H.264, HEVC/H.265, etc. também como algoritmo não padrão, como VP9, AV1 e outros), que funciona como uma linha de base para uma camada de aprimoramento que funciona de acordo com uma codificação diferente e/ou algoritmo de decodificação. A ideia por detrás do algoritmo global é codificar/decodificar de maneira hierárquica o quadro de vídeo, em oposição às abordagens baseadas em bloco de uso como utilizados na família MPEG de algoritmos. A codificação hierárquica de um quadro inclui a geração de resíduos para o quadro completo e, em seguida, um quadro em decimal e assim por diante.
[0102] Os dados residuais de compressão de vídeo para o quadro de vídeo de tamanho completo podem ser ditos como LoQ-0 (por exemplo, 1920 x 1080 para um quadro de vídeo HD), enquanto os do quadro em decimal podem ser ditos como LoQ-x, onde x indica o número de dizimações hierárquicas. Nos exemplos descritos das figuras 1 e 2, a variável x tem um valor máximo de 1 e, portanto, existem 2 níveis hierárquicos para os quais os resíduos de compressão serão gerados.
[0103] A figura 3 ilustra um exemplo de como LoQ-1 pode ser gerado em um dispositivo de codificação. Na presente figura, o algoritmo geral e os métodos são descritos com o uso de um algoritmo de codificação/decodificação AVC/H.264 como algoritmo de linha de base, mas entende-se que outros algoritmos de codificação/decodificação podem ser usados como algoritmos de linha de base sem qualquer impacto na forma como o algoritmo geral funciona.
[0104] Naturalmente, será entendido que os blocos da figura 3 são meramente exemplos de como os conceitos amplos poderiam ser implementados.
[0105] O diagrama da figura 3 mostra o processo de geração de dados residuais codificados por entropia para o nível herdado LoQ-1. No exemplo, a primeira etapa é transformar em decimal o vídeo não compactado de entrada por um fator de 2. Este quadro em decimal é então passado por um algoritmo de codificação de base (neste caso, um algoritmo de codificação AVC/H.264) onde um quadro de referência de entropia codificada é então gerado e armazenado. Uma versão decodificada do quadro de referência codificado é então gerada, e a diferença entre o quadro de referência decodificado e o quadro em decimal (resíduos LoQ-1) formará a entrada para o bloco de transformada.
[0106] A transformada (por exemplo, uma transformada baseada em Hadamard neste exemplo ilustrado) converte essa diferença em 4 componentes (ou planos), ou seja, A (média), H (horizontal), V (vertical) e D (diagonal). Esses componentes são, em seguida, quantizados por meio do uso de variáveis chamadas “larguras do degrau” (por exemplo, um valor residual pode ser dividido pela largura do degrau e o valor inteiro mais próximo selecionado). Um processo de codificação de entropia adequado é o assunto desta divulgação e descrito em detalhes abaixo. Esses resíduos quantizados são, em seguida, codificados por entropia para remover qualquer informação redundante. Os coeficientes ou componentes codificados quantizados (Ae, He, Ve e De) são então colocados dentro de um fluxo serial com pacotes de definição inseridos no início do fluxo, este estágio final é realizado com o uso de uma rotina de serialização de arquivos. Os dados de pacote podem incluir tal informação, como a especificação do codificador, o tipo de amostragem elevada a ser utilizado, ou se os planos A e D são descartados ou não, e outras informações para permitir que um decodificador decodifique os fluxos.
[0107] Ambos os dados de referência (quadro codificado de entropia de linha de base com metade do tamanho) e os dados residuais LoQ-1 codificados por entropia podem ser armazenados em buffer, transmitidos ou armazenados para uso pelo decodificador durante o processo de reconstrução.
[0108] A fim de produzir dados residuais LoQ-0, a saída quantizada é ramificada e os processos de quantização e transformada reversa são realizados a fim de reconstruir os resíduos LoQ-1, que são então adicionados aos dados de referência decodificados (codificados e decodificados) a fim de obter de volta um quadro de vídeo semelhante ao quadro de entrada originalmente em decimal.
[0109] Este processo idealmente imita o processo de decodificação e, portanto, o quadro originalmente em decimais não é utilizado.
[0110] A figura 4 ilustra um exemplo de como LoQ-0 pode ser gerado em um dispositivo de codificação. A fim de derivar os resíduos LoQ-0, o quadro reconstruído do tamanho LoQ-1 é derivado conforme descrito na seção anterior.
[0111] A próxima etapa é o de realizar uma amostragem elevada do quadro reconstruído para o tamanho completo (por 2). Neste ponto, vários algoritmos podem ser usados para aprimorar o processo de amostragem elevada, como algoritmos mais próximos, bilineares, agudos ou cúbicos. Esse quadro reconstruído em tamanho real denominado quadro “previsto” é, em seguida, subtraído da entrada de vídeo original não compactada, o que cria alguns resíduos (resíduos LoQ-1).
[0112] Semelhante ao processo LoQ-1, a diferença é, em seguida, transformada, quantizada, codificada por entropia e serializada em arquivo que, em seguida, forma o terceiro e último dado. Isso pode ser armazenado em buffer, transmitido ou armazenado para uso posterior pelo decodificador. Como pode ser visto, um componente chamado “média prevista” (descrito abaixo) pode ser derivado com o uso do processo de amostragem elevada e usado no lugar do componente A (média) para aprimorar ainda mais a eficiência do algoritmo de codificação.
[0113] A figura 5 mostra de maneira esquemática como o processo de decodificação pode ser realizado em um exemplo específico. Os dados codificados por entropia, os dados residuais codificados por entropia LoQ-1 e os dados residuais codificados por entropia LoQ-0 por exemplo, como dados codificados serializados em arquivo). Os dados codificados por entropia incluem a base codificada de tamanho reduzido (por exemplo, meio tamanho, ou seja, com dimensões W/2 e H/2 em relação ao quadro completo com dimensões W e H).
[0114] Os dados codificados por entropia são então decodificados com o uso do algoritmo de decodificação que corresponde ao algoritmo que foi usado para codificar esses dados (no exemplo, um algoritmo de decodificação AVC/H.264). No final desta etapa, um quadro de vídeo decodificado, que tem um tamanho reduzido (por exemplo, metade do tamanho) é produzido (indicado no presente exemplo como um vídeo AVC/H.264).
[0115] Em paralelo, os dados residuais codificados pela entropia LoQ-1 são decodificados. Como discutido acima, os resíduos LoQ-1 são codificados usando quatro coeficientes ou componentes (A, V, H e D) que, como mostrado na figura, têm uma dimensão de um quarto da dimensão de quadro completo, ou seja, W/4 e H/4. Isso ocorre porque, conforme discutido nos pedidos de patente anteriores US 13/893.669 e PCT/EP2013/059847, cujos conteúdos são aqui incorporados a título de referência, os quatro componentes contêm todas as informações relativas aos resíduos e são gerados pela aplicação de uma transformada kernel 2x2 aos resíduos, cuja dimensão, para LoQ-1, seria W/2 e H/2, ou seja, a mesma dimensão dos dados codificados por entropia de tamanho reduzido. Os quatro componentes são decodificados por entropia, então de-quantizados e finalmente transformados de volta nos resíduos LoQ-1 originais com o uso de uma transformada inversa (neste caso, uma transformada inversa de Hadamard 2x2).
[0116] Os resíduos LoQ-1 decodificados são então adicionados ao quadro de vídeo decodificado para produzir um quadro de vídeo reconstruído em tamanho reduzido (neste caso, tamanho médio), identificado como reconstrução de tamanho metade-2D.
[0117] Este quadro de vídeo reconstruído é, em seguida, de amostra elevada para trazê-lo à resolução total (então, neste exemplo, de meia largura (W/2) e meia altura (H/2) para largura total (W) e altura total (H)) com o uso de um filtro de amostragem elevada como bilinear,
bicúbico, agudo, etc. O quadro de vídeo reconstruído de amostra elevada será um quadro previsto (tamanho total, W x H) ao qual os resíduos decodificados LoQ-0 são então adicionados.
[0118] Em particular, os dados residuais codificados com LoQ-0 são decodificados. Como discutido acima, os resíduos LoQ-0 são codificados com o uso de quatro coeficientes ou componentes (A, V, H e D) que, como mostrado nesta figura, têm uma dimensão de metade da dimensão do quadro completo, ou seja, W/2 e H/2. Isso ocorre porque, conforme discutido nos pedidos de patente anteriores US 13/893.669 e PCT/EP2013/059847, cujos conteúdos são aqui incorporados a título de referência, os quatro componentes contêm todas as informações relativas aos resíduos e são gerados pela aplicação de uma transformada kernel 2x2 aos resíduos cuja dimensão, para LoQ-0, seria W e H, ou seja, a mesma dimensão do quadro completo. Os quatro componentes são decodificados por entropia (veja o processo abaixo), em seguida, de-quantizados e, por fim, transformados de volta nos resíduos LoQ-0 originais com o uso de uma transformada inversa (neste caso, uma transformada inversa de Hadamard 2x2).
[0119] Os resíduos LoQ-0 decodificados são então adicionados ao quadro previsto para produzir um quadro de vídeo completo reconstruído – o quadro de saída.
[0120] A estrutura de dados é representada de forma exemplar na figura 6. Conforme discutido, a descrição acima foi feita com referência a tamanhos específicos e algoritmos de linha de base, mas os métodos acima se aplicam a outros tamanhos e/ou algoritmos de linha de base, e a descrição acima é dada apenas a título de exemplo dos conceitos mais gerais descritos.
[0121] No algoritmo de codificação/decodificação descrito acima, existem normalmente 3 planos (por exemplo, YUV ou RGB), com dois níveis de qualidades LoQs que são descritos como LoQ-0 (ou nível superior, resolução total) e LoQ-1 (ou nível inferior, resolução de tamanho reduzido, como meia resolução) em todos os planos. Cada plano pode representar um componente de cor diferente para um sinal de vídeo.
[0122] Cada LoQ contém quatro componentes ou camadas, nomeadamente A, H, V e D. Isso dá um total de 3x2x4 = 24 superfícies, das quais 12 são de tamanho real (por exemplo, WxH) e 12 são de tamanho reduzido (por exemplo, W/2xH/2). Cada camada pode compreender valores de coeficiente para um dos componentes em particular, por exemplo, a camada A pode compreender um valor de coeficiente A superior esquerdo para cada bloco 2x2 da imagem ou quadro de entrada.
[0123] A figura 7 ilustra uma visão alternativa de uma estrutura de dados hierárquica proposta. Os dados codificados podem ser separados em blocos. Cada carga útil pode ser ordenada hierarquicamente em blocos. Ou seja, cada carga útil é agrupada em planos, em seguida, dentro de cada plano, cada nível é agrupado em camadas e cada camada compreende um conjunto de blocos para essa camada. O nível representa cada nível de aprimoramento (primeiro ou posterior) e a camada representa um conjunto de coeficientes de transformada.
[0124] O método pode compreender a recuperação de blocos para dois níveis de aprimoramento para cada plano. O método pode compreender a recuperação de 16 camadas para cada nível (por exemplo, se uma transformada 4x4 for usada). Assim, cada carga útil é ordenada em um conjunto de blocos para todas as camadas em cada nível e, em seguida, o conjunto de blocos para todas as camadas no próximo nível do plano. Então, a carga útil compreende o conjunto de pedaços para as camadas do primeiro nível do próximo plano e assim por diante.
[0125] Assim, o método pode decodificar cabeçalhos e coeficientes codificados de entropia de saída agrupados por plano, níveis e camadas pertencentes ao aprimoramento da imagem sendo decodificada. Assim, a saída pode ser superfícies de matriz (nPlanes)x(nLevel)x(nLayer) com superfícies de elementos [nPlanes][nLevel][nLayer].
[0126] Observa-se que as técnicas de codificação de entropia aqui fornecidas podem ser realizadas em cada grupo, isto é, podem ser realizadas por superfície, por plano, por nível (LoQ), ou por camada. Observa-se que a codificação de entropia pode ser realizada em quaisquer dados residuais e não necessariamente coeficientes quantizados e/ou transformados.
[0127] Como mostrado nas figuras 4 e 5, as operações de codificação e decodificação propostas incluem um estágio ou operação de codificação de entropia. É proposto a seguir que a operação de codificação de entropia compreenda um ou mais de um componente de codificação run-length (RLE) e um componente de codificação de Huffman. Esses dois componentes podem se relacionar para fornecer benefícios adicionais.
[0128] Conforme observado e ilustrado na figura 8, a entrada do codificador de entropia é uma superfície (por exemplo, dados residuais derivados de um conjunto quantizado de resíduos como ilustrado neste exemplo) e a saída do processo é uma versão codificada de entropia dos resíduos (Ae, He, Ve, De). No entanto, como acima, deve ser observado que a codificação de entropia pode ser realizada em quaisquer dados residuais e não necessariamente quantizados e/ou coeficientes transformados. A figura 9 ilustra um decodificador de alto nível correspondente com entradas e saídas inversas. Ou seja, o decodificador de entropia considera como entradas, os resíduos codificados por entropia (Ae, He, Ve, De) e fornece dados residuais (por exemplo, resíduos quantizados neste exemplo ilustrado).
[0129] Observa-se que a figura 8, geralmente introduz decodificação RLE antes da decodificação de Huffman, mas como será evidente ao longo do presente pedido, tal ordem não é limitante e as fases podem ser intermutáveis, inter-relacionadas ou em qualquer ordem.
[0130] Da mesma forma, observa-se que a codificação run-length pode ser fornecida sem a codificação de Huffman e em casos comparativos a codificação run-length e a codificação de Huffman não podem ser realizadas (seja substituída por codificação de entropia sem perdas alternativas ou nenhuma codificação de entropia realizada). Por exemplo, em um exemplo de produção com ênfase reduzida na compressão de dados, um pipeline de codificação pode não compreender a codificação de entropia, mas os benefícios dos resíduos podem residir no armazenamento em camadas para distribuição.
[0131] Um codificador run-length comparativo (RLE) pode compactar os dados ao codificar as sequências do mesmo valor de dados como um único valor de dados e uma contagem desse valor de dados. Por exemplo, a sequência 555500022 pode ser codificada como (4, 5) (3,0) (2,2). Ou seja, há uma sequência de quatro 5s, uma sequência de três 0s seguida por uma sequência de dois 2s.
[0132] Para codificar os dados residuais, é proposta uma operação de codificação RLE modificada. Para ter vantagem na estrutura dos dados residuais, propõe-se codificar apenas sequências de zeros. Ou seja, cada valor é enviado como um valor e cada zero é enviado como uma sequência de zeros. As operações de codificação RLE modificadas aqui descritas podem ser usadas, por exemplo, para fornecer codificação e/ou decodificação de entropia em uma ou mais camadas LoQ, por exemplo, como mostrado nas figuras 1 a 5.
[0133] Assim, a operação de codificação de entropia compreende analisar os dados residuais e codificar valores zero como uma sequência de zeros consecutivos.
[0134] Conforme observado acima, para fornecer um nível adicional de compressão de dados (que pode ser sem perdas), a operação de codificação de entropia aplica ainda uma operação de codificação de Huffman aos dados codificados run-length.
[0135] A codificação de Huffman e a codificação run-length foram previamente combinadas, por exemplo, na codificação fac-símile (ex. ITU Recomendações T.4 e T.45) e o formato de intercâmbio de arquivo JPEG, mas foram substituídas ao longo dos últimos 30 anos. A presente descrição propõe técnicas e métodos para aplicar a codificação de Huffman em associação com a codificação RLE, técnicas e os métodos para trocar de forma eficiente os dados e metadados entre um codificador e decodificador, e técnicas e métodos para reduzir o tamanho geral de dados de tal combinação, quando usados para codificar dados residuais.
[0136] Um código de Huffman é um código de prefixo ideal que é usado para compressão de dados (por exemplo, compressão sem perdas). Um código de prefixo é um sistema de código para o qual não há código de trabalho no sistema que seja o prefixo de qualquer outro código. Ou seja, uma operação de codificação de Huffman pega um conjunto de símbolos de entrada e converte cada símbolo de entrada em um código correspondente. O código escolhido é baseado na frequência com que cada símbolo aparece no conjunto de dados original. Desse modo, os códigos menores podem ser associados aos símbolos que ocorrem com mais frequência, de modo a reduzir o tamanho geral dos dados.
[0137] Para facilitar a codificação de Huffman, os dados de entrada são, de preferência, estruturados como símbolos. A saída da operação de codificação run-length é estruturada, de preferência, para ser um fluxo de bytes de dados codificados.
[0138] Em um exemplo, a operação de codificação run-length produz dois tipos de bytes ou símbolos. Um primeiro tipo de símbolo é um valor de um pixel diferente de zero e um segundo tipo de símbolo é uma sequência de valores zero consecutivos. Ou seja, uma quantidade de valores zero que ocorrem consecutivamente no conjunto de dados original.
[0139] Em outro exemplo, para codificar certos valores de dados, dois bytes ou símbolos podem ser combinados. Isto é, por exemplo, quando um valor de pixel é maior do que um valor limite, dois bytes ou símbolos podem ser usados para codificar o valor de dados em um símbolo. Esses dois símbolos podem ser combinados no decodificador para recriar o valor de dados original do pixel.
[0140] Cada símbolo ou byte pode incluir 6 ou 7 bits de dados e um ou mais sinalizadores ou bits indicando o tipo de símbolo.
[0141] Em um exemplo de implementação, os dados codificados run-length podem ser codificados de forma eficiente, inserindo, em cada símbolo, uma ou mais sinalizações indicando o próximo símbolo a ser esperado no fluxo de bytes.
[0142] Para facilitar a sincronização entre o codificador e o decodificador, o primeiro byte do fluxo de dados codificados run-length pode ser um tipo de símbolo de valor de dados. Este byte pode então indicar o próximo tipo de byte que foi codificado.
[0143] Em certas modalidades, a sinalização que indica o próximo byte pode ser diferente dependendo do tipo de símbolo. Por exemplo, a sinalização ou bit pode estar localizada no início ou no final do byte ou em ambos. Por exemplo, no início do byte, o bit pode indicar que o próximo símbolo pode ser uma sequência de zeros. No final do byte, o bite pode ser um bit de sobrecarga, que indica que o próximo símbolo contém uma parte do valor dos dados a ser combinado com o valor dos dados no símbolo atual.
[0144] O seguinte descreve um exemplo de implementação específico de uma operação de codificação run-length. O RLE tem três contextos: RLC_RESIDUAL_LSB, RLC_ RESIDUAL_MSB e RLC_ZERO_RUN. A estrutura desses bytes é ilustrada nas figuras 10, 11 e 12.
[0145] Em um primeiro tipo de símbolo, RLC_RESIDUAL_LSB, ilustrada na figura 1 0, os 6 bits menos significativos de um pixel diferente de zero são codificados. Um bit de sequência pode ser fornecido para indicar que o próximo byte está codificando a contagem de uma sequência de zeros. Um bit de sobrecarga pode ser definido se o valor do pixel não couber em 6 bits de dados. Quando o bit de sobrecarga é definido, o contexto do próximo byte será do tipo RLC_RESIDUAL_MSB. Ou seja, o próximo símbolo irá compreender um byte de dados que pode ser combinado com os bits do símbolo atual para codificar um valor de dados. Onde o bit de sobrecarga é definido, o próximo contexto não pode ser uma sequência de zeros e, portanto, o símbolo pode ser usado para codificar os dados.
[0146] A figura 10 indica um exemplo desse tipo de símbolo. Se o valor de dados a ser codificado for maior do que um valor limite de 64, ou o valor de pixel não se ajustar a 6 bits de dados, o bit de sobrecarga pode ser definido pelo processo de codificação. Se um bit de sobrecarga for definido como o bit menos significativo do byte, os bits restantes do byte podem codificar os dados. Se o valor do pixel couber em 6 bits, o bit de sobrecarga não pode ser definido e um bit de sequência pode ser incluído que indica se o próximo símbolo é ou não um valor de dados ou uma sequência de zeros.
[0147] Um segundo tipo de símbolo, RLC_RESIDUAL_MSB, ilustrado na figura 11, codifica bits de 7 a 13 de valores de pixels que não se encaixam dentro de 6 bits de dados. O bit 7 deste tipo de símbolo codifica se o próximo byte é ou não uma sequência de zeros.
[0148] Um terceiro tipo de símbolo, RLC_ZERO_RUN, ilustrado na figura 12, codifica 7 bits de uma contagem de sequência de zeros. Ou seja, o símbolo compreende o número de zeros consecutivos nos dados residuais. O bit de sequência do símbolo é alto se mais bits forem necessários para codificar a contagem. O bit de sequência pode ser o bit mais significativo do byte. Ou seja, onde há um número de zeros consecutivos que requer mais do que 7 bits disponíveis, 178 ou 255, digamos, o bit de sequência indica que o próximo bit indicará uma nova sequência de zeros.
[0149] Opcionalmente, o símbolo adicional pode compreender uma segunda sequência de zeros que pode ser combinada com a primeira execução ou pode compreender um conjunto de bits de um valor que pode ser combinado com os bits do primeiro símbolo no decodificador para indicar a contagem.
[0150] Conforme indicado acima, para que o decodificador comece em um contexto conhecido, o primeiro símbolo no fluxo codificado pode ser um tipo de símbolo de valor de dados residual, ou seja, pode ser um tipo RLC_RESIDUAL_LSB.
[0151] Em um exemplo específico, os dados RLE podem ser organizados em blocos. Cada bloco pode ter uma capacidade de saída de 4096 bytes. RLE pode mudar para um novo bloco nos seguintes casos:
[0152] - o bloco atual está cheio;
[0153] - os dados RLE atuais são uma sequência e há menos de 5 bytes restantes no bloco atual; e/ou
[0154] - os dados RLE atuais são levados a um par LSB/MSB e há menos de 2 bytes restantes no bloco atual.
[0155] Em suma, uma operação de codificação run-length pode ser realizada nos dados residuais da nova tecnologia de codificação que compreende a codificação em um fluxo de um conjunto de valores de dados e uma contagem de valores de zeros consecutivos. Em uma implementação específica, a saída da operação de codificação run- length pode ser um fluxo de bytes ou símbolos, onde cada byte é um de três tipos ou contextos. O byte indica o próximo tipo de byte esperado no fluxo de bytes.
[0156] Deve-se observar que essas estruturas são fornecidas como um exemplo e que diferentes esquemas de codificação de bits podem ser aplicados, ao mesmo tempo em que os ensinamentos funcionais descritos neste documento são seguidos. Por exemplo, a codificação dos bits menos significativos e mais significativos pode ser trocada e/ou diferentes comprimentos de bit podem ser executados. Além disso, os bits de sinalizador podem estar localizados em diferentes posições predefinidas dentro de um byte.
[0157] Conforme indicado acima, uma operação de codificação de Huffman pode ser aplicada ao fluxo de bytes para reduzir ainda mais o tamanho dos dados. O processo pode criar uma tabela de frequência da ocorrência relativa de cada símbolo no fluxo. A partir da tabela de frequência, o processo pode gerar uma árvore de Huffman. Um código de Huffman para cada símbolo pode ser gerado percorrendo a árvore desde a raiz até que o símbolo seja alcançado, atribuindo um pouco do código para cada ramificação obtida.
[0158] Em uma implementação pdita para uso com as especificações dos símbolos codificados run-length dos resíduos quantizados (isto é, os dados residuais), uma operação de codificação de Huffman canônica pode ser aplicada. Os códigos Huffman canônicos podem reduzir os requisitos de armazenamento de um conjunto de códigos, dependendo da estrutura dos dados de entrada. Um procedimento de Huffman canônico fornece uma maneira de gerar um código que contém implicitamente as informações de qual palavra-
código se aplica a qual símbolo. Os códigos de Huffman podem ser definidos com um conjunto de condições, por exemplo, todos os códigos de um determinado comprimento podem ter valores lexicograficamente consecutivos na mesma ordem dos símbolos que representam e códigos mais curtos precedem lexicograficamente códigos mais longos. Em uma implementação de codificação de Huffman canônica, apenas as palavras-código e os comprimentos de cada código precisam ser transmitidos para que o decodificador seja capaz de replicar cada símbolo.
[0159] Após a aplicação da operação de codificação de Huffman canônica, o tamanho dos dados de saída pode ser comparado ao tamanho dos dados após a operação de codificação run-length. Se o tamanho dos dados for menor, os dados menores podem ser transmitidos ou armazenados. A comparação do tamanho dos dados pode ser realizada com base no tamanho de um bloco de dados, no tamanho de uma camada, plano ou superfície ou no tamanho geral do quadro ou vídeo. Para sinalizar ao decodificador como os dados foram codificados, um sinalizador pode ser transmitido em um cabeçalho dos dados de que os dados são codificados usando a codificação de Huffman, a codificação RLE ou ambas. Em uma implementação alternativa, o decodificador pode ser capaz de identificar a partir das características dos dados que os dados foram codificados com o uso de uma operação de codificação particular. Por exemplo, conforme indicado abaixo, os dados podem ser divididos em um cabeçalho e parte de dados onde a codificação de Huffman canônica é usada de modo a sinalizar os comprimentos de código dos símbolos codificados.
[0160] Os dados codificados de Huffman canônicos compreendem uma parte que sinaliza para o decodificador os comprimentos do código usado para cada símbolo e uma parte que compreende um fluxo de bits que representa os dados codificados. Em uma implementação específica aqui proposta, os comprimentos de código podem ser sinalizados em uma parte do cabeçalho e os dados sinalizados em uma parte dos dados. De preferência, uma parte do cabeçalho será sinalizada para cada superfície, mas pode ser sinalizada para cada bloco ou outra subdivisão dependendo da configuração.
[0161] Em um exemplo proposto, o cabeçalho pode ser diferente dependendo da quantidade de códigos diferentes de zero a serem codificados. A quantidade de códigos diferentes de zero a serem codificados (para cada superfície ou bloco, por exemplo) pode ser comparada a um valor limite e um cabeçalho usado com base na comparação. Por exemplo, onde existem mais de 31 códigos diferentes de zero, o cabeçalho pode indicar sequencialmente todos os símbolos, começando por um sinal predeterminado como 0. Em ordem, o comprimento de cada símbolo pode ser sinalizado. Onde houver menos de 31 códigos diferentes de zero, cada valor de símbolo pode ser sinalizado no cabeçalho com um comprimento de código correspondente para esse símbolo.
[0162] As figuras 13 a 16 ilustram uma implementação específica dos formatos de cabeçalho e como os comprimentos de código podem ser escritos em um cabeçalho de fluxo dependendo da quantidade de códigos diferentes de zero.
[0163] A figura 13 ilustra uma situação em que pode haver mais de 31 valores diferentes de zero nos dados. O cabeçalho inclui um comprimento mínimo de código e um comprimento máximo de código. O comprimento do código para cada símbolo é enviado sequencialmente. Uma sinalização indica que o comprimento do símbolo não é zero. Os bits do comprimento do código são então enviados como uma diferença entre o comprimento do código e o comprimento mínimo sinalizado. Isso reduz o tamanho geral do cabeçalho.
[0164] A figura 14 ilustra um cabeçalho semelhante à figura 13, mas usado onde há menos de 31 códigos diferentes de zero. O cabeçalho inclui ainda o número de símbolos nos dados, seguido por um valor de símbolo e o comprimento da palavra-código para esse símbolo, novamente enviado como uma diferença.
[0165] As figuras 15 e 16 ilustram outros cabeçalhos a serem enviados em casos remotos. Por exemplo, onde as frequências são todas zero, o cabeçalho de fluxo pode ser como ilustrado na figura 14 indicando dois valores de 31 nos campos de comprimento mínimo e máximo para indicar uma situação especial. Quando houver apenas um código na árvore de Huffman, o cabeçalho de fluxo pode ser, como indicado na figura 16 com o uso de um valor de 0 nos campos de comprimento mínimo e máximo para indicar uma situação especial e, em seguida, seguido pelo valor do símbolo a ser usado.
[0166] Neste último exemplo, onde há apenas um valor de símbolo, isso pode indicar que há apenas um valor de dados nos dados residuais.
[0167] O processo de codificação pode, portanto, ser resumido da seguinte forma:
[0168] analisar os dados residuais para identificar os valores dos dados e contagens consecutivas de valores zero;
[0169] gerar um conjunto de símbolos onde cada símbolo é um byte e cada byte compreende um valor de dados ou uma sequência de zeros, bem como uma indicação do próximo símbolo no conjunto de símbolos. Os símbolos podem incluir um bit de sobrecarga que indica que o próximo símbolo inclui uma parte do valor de dados incluído no símbolo atual ou um bit de sequência que indica que o próximo símbolo é uma sequência de zeros;
[0170] converter cada símbolo de comprimento fixo em um código variável usando a codificação de Huffman canônica. A codificação canônica de Huffman analisa os símbolos para identificar a frequência com que cada símbolo ocorre no conjunto de símbolos e atribui um código ao símbolo com base na frequência e no valor do símbolo (para comprimentos de código idênticos);
[0171] gerar e produzir um conjunto de comprimentos de código, cada um associado a um símbolo. Os comprimentos do código são o comprimento de cada código atribuído a cada símbolo;
[0172] combinar os códigos de comprimento variável em um fluxo de bits;
[0173] enviar o fluxo de bits codificado.
[0174] Na implementação específica descrita, é indicado que o comprimento máximo do código depende do número de símbolos codificados e do número de amostras usadas para derivar a tabela de frequência de Huffman. Para N símbolos, o comprimento máximo do código é N-1. No entanto, para que um símbolo tenha um código de Huffman de k-bit, o número de amostras usadas para derivar a tabela de frequência deve ser pelo menos: S = F em que Fi é o i° número de Fibonacci.
[0175] Por exemplo, símbolos de 8 bits, o comprimento máximo teórico do código é 255. No entanto, para um vídeo HD 1080p, o número máximo de amostras usadas para derivar a tabela de frequência para um contexto RLE de um residual é 1920*1080/4 = 518 400, que está entre S26 e S27. Portanto, nenhum símbolo pode ter um código de Huffman maior do que 26 bits para este exemplo. Para 4K, esse número aumenta para 29 bits.
[0176] Para completar, usando a figura 17, fornecemos um exemplo de codificação de Huffman de um conjunto de símbolos, neste exemplo os símbolos são alfanuméricos. Como observado acima, um código de Huffman é um código de prefixo ideal que pode ser usado para compactação de dados sem perdas. Um código de prefixo é um sistema de código para o qual não existe uma palavra de código no sistema que seja o prefixo de qualquer outro código.
[0177] Para encontrar um código de Huffman para um determinado conjunto de símbolos, uma árvore de Huffman precisa ser criada. Primeiro, os símbolos são classificados por frequência, por exemplo: Símbolo Frequência A 3 B 8 C 10 D 15 E 20 F 43
[0178] Os dois elementos mais baixos são removidos da lista e transformados em folhas, com um nó pai que tem uma frequência a soma das frequências dos dois elementos mais baixos. A árvore parcial é ilustrada na figura 17a.
[0179] A nova lista de frequência classificada é: Símbolo Frequência C 10 * 11 D 15 E 20 F 43
[0180] Em seguida, o ciclo é repetido, combinando os dois elementos mais baixos, tal como ilustrado na figura 17b.
[0181] A nova lista é:
Símbolo Frequência D 15 E 20 * 21 F 43
[0182] Isso é repetido até que só reste apenas um elemento na lista como ilustrado nas figuras 17c, 17d, 17e e as tabelas correspondentes a seguir. Símbolo Frequência * 21 * 35 F 43 Símbolo Frequência F 43 * 56 Símbolo Frequência * 99
[0183] Uma vez que a árvore é construída, para gerar o código de Huffman para um símbolo, a árvore é percorrida da raiz até esse símbolo, gerando um 0 cada vez que um ramo esquerdo é obtido e 1 cada vez que um ramo direito é obtido. No exemplo acima, isso fornece o seguinte código: Símbolo Código Comprimento do código A 1010 3 B 1011 3 C 100 2 D 110 2 E 111 2 F 0 0
[0184] O comprimento do código de um símbolo é o comprimento do código correspondente.
[0185] Para decodificar um código de Huffman, a árvore é percorrida começando na raiz, considerando um caminho para a esquerda se um 0 for lido e um caminho para a direita se um 1 for lido. O símbolo é encontrado ao esbarrar em uma folha.
[0186] Conforme descrito acima, os símbolos RLE podem ser codificados usando a codificação de Huffman. Em um exemplo preferido, é usada a codificação de Huffman canônica. Em uma implementação de codificação de Huffman canônica, um procedimento de codificação de Huffman pode ser usado e o código produzido transformado em códigos Huffman canônicos. Ou seja, a tabela é reorganizada de modo que comprimentos idênticos são sequenciais na mesma ordem como os símbolos que representam e que o último código mais tarde será sempre maior em valor do que um anterior. Quando os símbolos são alfabéticos, eles podem ser reorganizados em ordem alfabética. Onde os símbolos são valores, eles podem estar em ordem de valor sequencial e as palavras-código correspondentes alteradas para atender às restrições acima. A codificação de Huffman canônica e/ou outras abordagens de codificação de Huffman aqui descritas podem diferir do exemplo básico das figuras 17a a 17e.
[0187] Nos exemplos descritos acima, uma operação de codificação de Huffman pode ser aplicada para os símbolos de dados codificados com o uso de uma operação de codificação run-length modificada. É ainda proposto criar uma tabela de frequência para cada contexto ou estado RLE. Para cada tipo de símbolo codificado pela operação de codificação RLE, pode haver um conjunto diferente de códigos Huffman. Em uma implementação, pode haver um codificador Huffman diferente para cada contexto ou estado RLE.
[0188] Observa-se que um cabeçalho de fluxo pode ser enviado para cada contexto RLE ou tipo de símbolo, isto é, uma pluralidade de cabeçalhos de fluxo pode indicar os comprimentos de código para cada conjunto de códigos, isto é, para cada codificador Huffman ou cada tabela de frequência.
[0189] O seguinte descreve um exemplo de etapas de implementação específicas do codificador. Em uma implementação, a codificação dos dados emitidos por RLE é feita em três etapas principais:
[0190] 1. Iniciar os codificadores (por exemplo, por uma função InitialiseEncode):
[0191] a. Iniciar cada codificador (um por estado RLE) com a tabela de frequência correspondente gerada pelo RLE;
[0192] b. criar a árvore Huffman;
[0193] c. calcular o comprimento do código de cada símbolo; e
[0194] d. determinar os comprimentos mínimo e máximo do código.
[0195] 2. Gravar o comprimento do código e a tabela de códigos no cabeçalho do fluxo (por exemplo, por uma função WriteCodeLengths) para cada codificador:
[0196] a. atribuir os códigos aos símbolos (por exemplo, com o uso de uma função AssignCodes). Observe que a função usada para atribuir códigos ao símbolo é um pouco diferente do exemplo das figuras 19a a 19e acima, pois garante que todos os códigos de um determinado comprimento sejam sequenciais, ou seja, usa a codificação de Huffman canônica;
[0197] b. gravar os comprimentos mínimo e máximo do código no cabeçalho do fluxo; e
[0198] c. gravar os comprimentos de código de cada símbolo para o fluxo.
[0199] 3. Codificar os dados RLE:
[0200] a. definir o contexto atual RLE para RLC_RESIDUAL_LSB;
[0201] b. codificar o símbolo atual no fluxo de entrada com o codificador correspondente ao contexto atual;
[0202] c. usar a máquina de estado RLE para obter o próximo contexto (consulte a figura 20). Se esse não for último símbolo do fluxo, ir para b; e
[0203] d. se os dados RLE forem apenas um bloco e o fluxo codificado for maior do que o RLE, armazenar o fluxo codificado RLE em vez do fluxo codificado de Huffman.
[0204] Para cada bloco RLE, os codificadores de Huffman criam uma parte codificada de Huffman correspondente.
[0205] A saída do processo de codificação aqui descrito é, portanto, um fluxo de bits codificado por Huffman ou um fluxo de bytes codificado run-length. Um decodificador correspondente, portanto, utiliza uma operação de decodificação de Huffman correspondente de uma maneira inversa à operação de codificação. No entanto, existem nuances para a operação de decodificação descrita abaixo para aprimorar a eficiência e se adaptar à especificidade da operação de codificação descrita acima.
[0206] Quando o codificador sinaliza em um cabeçalho ou outros metadados de configuração que uma operação de codificação RLE ou Huffman foi usada, o decodificador pode primeiro identificar que uma operação de decodificação de Huffman deve ser aplicada ao fluxo. Da mesma forma, da maneira descrita acima, o decodificador pode identificar a partir do fluxo de dados se a codificação de Huffman foi ou não usada, identificando o número de partes do fluxo. Se houver uma parte do cabeçalho e uma parte dos dados, uma operação de decodificação de Huffman deve ser aplicada. Se houver apenas uma parte de dados no fluxo, apenas uma parte de decodificação RLE pode ser aplicada.
[0207] O decodificador de entropia realiza as transformações reversas do decodificador. No presente exemplo, a decodificação de
Huffman seguida pela decodificação run-length.
[0208] O exemplo a seguir descreve um processo de decodificação no qual o fluxo de bits foi codificado com o uso de uma operação de codificação de Huffman canônica e uma operação de codificação run- length conforme descrito acima no exemplo do fluxo de codificação. No entanto, será entendido que as operações de codificação de Huffman e as operações de codificação run-length podem ser aplicadas separadamente para decodificar fluxos codificados de uma maneira diferente.
[0209] A entrada para o processo é um fluxo de bits codificado. O fluxo de bits pode ser recuperado de um arquivo armazenado ou transmitido, local ou remotamente. O fluxo de bits codificado é uma série de bits sequenciais sem uma estrutura imediatamente discernível. Somente quando a operação de codificação de Huffman é aplicada ao fluxo de bits é que uma série de símbolos pode ser deduzida.
[0210] Assim, o processo primeiro aplica uma operação de codificação de Huffman ao fluxo de bits.
[0211] Presume-se que o primeiro símbolo codificado seja um tipo de símbolo de valor de dados. Dessa maneira, onde a operação de codificação de Huffman usa diferentes tabelas de frequência ou parâmetros, a operação de codificação de Huffman pode usar um livro- código correto para um tipo de símbolo.
[0212] A operação de codificação de Huffman canônica deve primeiro recuperar os parâmetros de codificação adequados ou metadados para facilitar a decodificação do fluxo de bits. No exemplo aqui, os parâmetros são um conjunto de comprimentos de código recuperados de um cabeçalho de fluxo. Para simplificar, descreve-se um conjunto de comprimentos de código sendo trocado entre o codificador e o decodificador, mas não e que, como acima, vários conjuntos de comprimentos de código podem ser sinalizados de modo que a operação de codificação pode usar parâmetros diferentes para cada tipo de símbolo que deve estar decodificando.
[0213] A operação de codificação atribuirá os comprimentos de código recebidos no cabeçalho do fluxo a um símbolo correspondente. Conforme observado acima, o cabeçalho do fluxo pode ser enviado em diferentes tipos. Onde o cabeçalho do fluxo inclui um conjunto de comprimentos de código com símbolos correspondentes, cada comprimento de código pode ser associado a um valor de símbolo correspondente. Onde os comprimentos de código são enviados sequencialmente, o decodificador pode associar cada comprimento de código recebido com um símbolo em uma ordem predeterminada. Por exemplo, os comprimentos de código podem ser recuperados em uma ordem 3, 4, 6, 2, etc. O processo de codificação pode então associar cada comprimento com um símbolo correspondente. Aqui, a ordem é sequencial - (símbolo, comprimento) - (0, 3) (1,4) (3,6) (4,2).
[0214] Conforme ilustrado na figura 15, alguns símbolos podem não ser enviados, mas uma sinalização pode indicar que o símbolo tem um comprimento de código zero correspondente, ou seja, que o símbolo não existe no fluxo de bits a ser decodificado (ou não é usado).
[0215] A operação de codificação de Huffman canônica é então capaz de atribuir um código a cada símbolo com base no comprimento do código. Por exemplo, onde o comprimento do código é 2, o código para esse símbolo será “1x”. Onde x indica que o valor não é importante. Em implementações específicas, o código será “10”.
[0216] Onde os comprimentos são idênticos, a operação de codificação de Huffman canônica atribui códigos com base em uma ordem sequencial dos símbolos. Cada código é atribuído de forma que, à medida que o fluxo de bits é analisado, o decodificador pode continuar verificando o próximo bit até que exista apenas um código possível. Por exemplo, um primeiro símbolo sequencial de comprimento 4 pode ser atribuído a um código 1110 e um segundo símbolo sequencial de comprimento 4 pode ser atribuído a um código 1111. Assim, analisando o fluxo de bits, se os primeiros bits do fluxo de bits são 1110x, é apenas possível para o fluxo de bits ter codificado o primeiro símbolo sequencial de comprimento 4.
[0217] Consequentemente, uma vez que a operação de codificação tenha estabelecido um conjunto de códigos associados a cada símbolo, a operação de codificação pode passar a analisar o fluxo de bits. Em certas modalidades, a operação de codificação construirá uma árvore de modo a estabelecer o símbolo associado ao código do fluxo de bits. Ou seja, a operação de codificação pegará cada bit do fluxo de bits e percorrerá uma árvore de acordo com o valor do bit no fluxo de bits até que uma folha seja encontrada. Assim que uma folha for encontrada, o símbolo associado à folha será reproduzido. O processo continua na raiz da árvore com o próximo bit do fluxo de bits. Desta maneira, a operação de codificação pode produzir um conjunto de símbolos derivados de um conjunto de códigos armazenados no fluxo de bits codificado. Em modalidades pditas, os símbolos são cada um byte, como descrito em outro lugar neste documento.
[0218] O conjunto de símbolos pode então ser passado para uma operação de codificação de extensão. A operação de codificação run- length identifica o tipo de símbolo e analisa o símbolo para extrair um valor de dados ou uma sequência de zeros. A partir dos valores dos dados e sequências de zeros, a operação pode recriar os dados residuais originais que foram codificados.
[0219] A saída da codificação de Huffman é, conforme observado acima, provavelmente um conjunto de símbolos. O desafio para a próxima etapa de decodificação é extrair desses símbolos as informações relevantes, observando que cada símbolo compreende dados em um formato diferente e cada símbolo irá representar informações diferentes, embora a informação não seja imediatamente discernível a partir do símbolo ou byte.
[0220] Em exemplos preferidos, a operação de codificação consulta uma máquina de estado, conforme ilustrado na figura 18. Em suma, a operação de codificação primeiro assume que o primeiro símbolo é um tipo de valor de dados (o valor de dados pode, é claro, ser 0). A partir disso, a operação de codificação pode identificar se o byte inclui um sinalizador de sobrecarga ou um sinalizador de execução. A sinalização de sobrecarga e sequência é descrita acima e ilustrada na figura 10.
[0221] A operação de codificação pode primeiro verificar o bit menos significativo do símbolo (ou byte). Aqui, esta é a sinalização de sobrecarga (ou bit). Se o bit menos significativo for definido, a operação de codificação identifica que o próximo símbolo também será um valor de dados e do tipo RLC_RESIDUAL_MSB. Os bits restantes do símbolo serão os bits menos significativos de um valor de dados.
[0222] O processo de codificação continua para analisar o próximo símbolo e extrair os bits menos significativos como a parte restante do valor dos dados. Os bits do primeiro símbolo podem ser combinados com os bits do segundo símbolo para reconstruir o valor dos dados.
[0223] Neste símbolo atual, ilustrada na figura 11, haverá também uma sinalização prazo, aqui o bit mais significativo. Se for definido, o próximo símbolo será um símbolo de sequência e não um símbolo de dados.
[0224] No símbolo de sequência, ilustrado na figura 12, a operação de codificação verifica o bit mais significativo para indicar se o próximo símbolo é um símbolo de sequência ou um símbolo de dados e extrai os bits restantes como a sequência de zeros. Ou seja, uma sequência máxima de 127 zeros.
[0225] Se o símbolo de dados indica que não há sobrecarga (no sinalizador de sobrecarga, aqui o bit menos significativo), então o símbolo também conterá no bit mais significativo um bit de sequência e a operação de codificação será capaz de identificar a partir deste bit que o próximo O símbolo no conjunto é um símbolo de sequência ou um símbolo de dados. A operação de codificação pode, portanto, extrair o valor dos dados dos bits 6-1. Aqui, há 31 valores de dados disponíveis sem sobrecarga.
[0226] Conforme observado, a máquina de estado da figura 18 ilustra o processo de forma simples.
[0227] Começando em um símbolo RLC_RESIDUAL_ LSB, se o bit de sobrecarga = 0 e o bit de sequência = 0, então, o próximo símbolo será um símbolo RLC_RESIDUAL_LSB. Se o bit de sobrecarga = 1, o próximo símbolo será um RLC_RESIDUAL_MSB. Se o bit de sobrecarga = 1, não haverá um bit de sequência. Se o bit de sequência = 1 e o bit de sobrecarga = 0, o próximo bit será um símbolo RLC_ZERO_RUN.
[0228] No RLC R LC_RESIDUAL_MSB, se o bit de sequência = 0, o próximo símbolo será um símbolo RLC_RESID UAL_LSB. Se o bit de sequência = 1, o próximo símbolo será um símbolo RLC_ZERO_RUN.
[0229] No símbolo RLC_ZERO_RUN, se o bit de sequência = 0, o próximo bit será um símbolo RLC_RESID UAL_LSB. Se o bit de sequência = 1, o próximo bit será um símbolo RLC_ZERO_RUN.
[0230] Os bits podem naturalmente ser invertidos (0/1, 1/0, etc.), sem perda de funcionalidade. Da mesma forma, as localizações dentro dos símbolos ou bytes das sinalizações são meramente ilustrativas.
[0231] A operação de codificação run-length pode identificar o próximo símbolo no conjunto de símbolos e extrair um valor de dados ou uma sequência de zeros. A operação de codificação pode então combinar esses valores e zeros para recriar os dados residuais. O pedido pode ser na ordem extraída ou, alternativamente, em alguma ordem predeterminada.
[0232] A operação de codificação pode, assim, produzir dados residuais que foram codificados no fluxo de bytes.
[0233] Foi descrito acima como vários metadados ou parâmetros de codificação podem ser usados no processo de codificação. No lado da decodificação, a operação de codificação pode incluir um feedback entre as operações. Ou seja, o próximo símbolo esperado pode ser extraído do símbolo atual (por exemplo, usando os bits de sobrecarga e run) e o próximo símbolo esperado dado à operação de codificação de Huffman.
[0234] A operação de codificação de Huffman pode opcionalmente gerar um livro-código separado para cada tipo de símbolo (e recuperar múltiplos cabeçalhos de fluxo ou construir uma tabela de múltiplos códigos e símbolos).
[0235] Assumindo que o primeiro símbolo será um valor de dados, a operação de codificação de Huffman decodificará o primeiro código para corresponder a um símbolo desse tipo. A partir do símbolo combinado, a operação de codificação pode identificar um bit de sobrecarga e/ou um bit de sequência e identificar o próximo tipo de símbolo. A operação de codificação de Huffman pode então usar um livro-código correspondente para esse tipo de símbolo para extrair o próximo código no fluxo de bits. O processo é executado de maneira iterativa com o uso do símbolo atualmente decodificado para extrair uma indicação do próximo símbolo e alterar os livros-código em conformidade.
[0236] Foi descrito acima como uma operação de decodificação pode combinar uma operação de codificação de Huffman, de preferência, uma operação de codificação de Huffman canônica, e uma operação de codificação run-length para recriar dados residuais de um fluxo de bits codificado. Será entendido que as técnicas da operação de codificação run-length podem ser aplicadas a um fluxo de bytes que não foi codificado com o uso de uma operação de codificação de Huffman. Da mesma forma, a operação de codificação de Huffman pode ser aplicada sem a etapa subsequente da operação de codificação run- length.
[0237] A seguir, descreve-se um exemplo de etapas de implementação específicas do decodificador. Na implementação de exemplo, se o fluxo tiver mais de uma parte, as etapas a seguir são realizadas:
[0238] 1. Ler os comprimentos de código do cabeçalho de fluxo (por exemplo, com o uso de uma função ReadCodeLengths):
[0239] a. definir os comprimentos de código para cada símbolo;
[0240] b. atribuir códigos aos símbolos de comprimentos de código (por exemplo, com o uso de uma função AssignCodes); e
[0241] c. gerar uma tabela para pesquisar os subconjuntos de códigos com comprimentos idênticos. Cada elemento da tabela registra o primeiro índice de um determinado comprimento e o código correspondente (firstIdx, firstCode).
[0242] 2. decodificar os dados RLE:
[0243] a. definir o contexto RLE para RLC_RESIDUAL_LSB.
[0244] b. decodificar o código atual procurando pelo comprimento correto do código na tabela gerada e indexando na matriz de código com: firstIdx – (current_code - firstCode). Isso funciona porque todos os códigos de um determinado comprimento são sequenciais pela construção da árvore de Huffman.
[0245] c. Usar a máquina de estado RLE para obter o próximo contexto (consulte a figura 18). Se o fluxo não estiver vazio, ir para b.
[0246] O decodificador run-length lê os dados codificados run- length byte a byte. Por construção, o contexto do primeiro byte de dados é garantido como RLC_RESIDUAL_LSB. O decodificador usa a máquina de estado mostrada na figura 18 para determinar o contexto do próximo byte de dados. O contexto informa ao decodificador como interpretar o byte atual de dados conforme descrito acima.
[0247] Observa-se que, neste exemplo de implementação específico, a máquina de estado run-length também é usada pelo processo de codificação e decodificação de Huffman para saber qual código de Huffman usar para o símbolo ou palavra de código atual.
[0248] Tanto no codificador quanto no decodificador, por exemplo, implementado em um servidor de streaming ou dispositivo cliente ou decodificação de dispositivo cliente de um armazenamento de dados, os métodos e processos descritos neste documento podem ser incorporados como código (por exemplo, código de software) e/ou dados. O codificador e o decodificador podem ser implementados em hardware ou software como é bem conhecido na técnica de compressão de dados. Por exemplo, a aceleração de hardware com o uso de uma unidade de processamento gráfico (GPU) especificamente programada ou uma matriz de porta programável em campo (FPGA) projetada especificamente pode fornecer certas eficiências. Para completar, esse código e dados podem ser armazenados em uma ou mais mídias legíveis por computador, que podem incluir qualquer dispositivo ou meio que pode armazenar código e/ou dados para uso por um sistema de computador. Quando um sistema de computador lê e executa o código e/ou dados armazenados em um meio legível por computador, o sistema de computador executa os métodos e processos incorporados como estruturas de dados e código armazenado dentro do meio de armazenamento legível por computador. Em certas modalidades, uma ou mais das etapas dos métodos e processos descritos neste documento podem ser realizados por um processador (por exemplo, um processador de um sistema de computador ou sistema de armazenamento de dados).
[0249] Em geral, qualquer uma das funcionalidades descritas neste texto ou ilustradas nas figuras podem ser implementadas usando software, firmware (por exemplo, circuitos de lógica fixa), hardware programável ou não programável ou uma combinação dessas implementações. Os termos “componente” ou “função”, conforme usados neste documento, geralmente representam software, firmware, hardware ou uma combinação desses. Por exemplo, no caso de uma implementação de software, os termos “componente” ou “função” podem se referir ao código do programa que executa tarefas especificadas quando executado em um dispositivo ou dispositivos de processamento. A separação ilustrada de componentes e funções em unidades distintas pode refletir qualquer agrupamento físico real ou conceitual e alocação de tal software e/ou hardware e tarefas.
[0250] No presente pedido, foi descrito um método para codificar e decodificar um sinal, em particular um sinal de vídeo e/ou um sinal de imagem.
[0251] Em particular, é descrito um método de codificação de um sinal, o método compreendendo receber um quadro de entrada e processar o quadro de entrada para gerar pelo menos um primeiro conjunto de dados residuais, os ditos dados residuais permitindo que um decodificador reconstrua o quadro original a partir de um quadro reconstruído de referência.
[0252] Em uma modalidade, o método compreende obter o quadro reconstruído a partir de um quadro decodificado obtido a partir de um módulo de decodificação, em que o módulo de decodificação é configurado para gerar o dito quadro decodificado pela decodificação de um primeiro quadro codificado, que foi codificado de acordo com um primeiro método de codificação. O método compreende ainda a amostragem reduzida do quadro de entrada para obter um quadro de amostra reduzida e passar o dito quadro de amostra reduzida para um módulo de codificação configurado para codificar o dito quadro de amostra reduzida de acordo com o primeiro método de codificação a fim de gerar o primeiro quadro codificado. A obtenção do quadro reconstruído pode ainda compreender a amostragem do quadro decodificado para gerar o quadro reconstruído.
[0253] Em outra modalidade, o método compreende obter o quadro reconstruído a partir de uma combinação de um segundo conjunto de dados residuais e um quadro decodificado obtido a partir de um módulo de decodificação, em que o módulo de decodificação é configurado para gerar o dito quadro decodificado pela decodificação de um primeiro quadro codificado que tem foi codificado de acordo com um primeiro método de codificação. O método compreende ainda a amostragem reduzida do quadro de entrada para obter um quadro de amostra reduzida e passar o dito quadro de amostra reduzida para um módulo de codificação configurado para codificar o dito quadro de amostra reduzida de acordo com o primeiro método de codificação a fim de gerar o primeiro quadro codificado. O método compreende ainda gerar o dito segundo conjunto de dados residuais tomando uma diferença entre o quadro decodificado e o quadro de amostra reduzida. O método compreende ainda a codificação do dito segundo conjunto de dados residuais para gerar um primeiro conjunto de dados residuais codificados. A codificação do dito segundo conjunto de dados residuais pode ser realizada de acordo com um segundo método de codificação. O segundo método de codificação compreende transformar o segundo conjunto de dados residuais em um segundo conjunto transformado de dados residuais. A transformada do segundo conjunto de dados residuais compreende selecionar um subconjunto do segundo conjunto de dados residuais e aplicar uma transformada ao dito subconjunto para gerar um subconjunto correspondente do segundo conjunto transformado de dados residuais. Um do subconjunto do segundo conjunto transformado de dados residuais pode ser obtido pela média do subconjunto do segundo conjunto de dados residuais. A obtenção do quadro reconstruído pode compreender ainda a amostragem elevada da combinação do segundo conjunto de dados residuais e um quadro decodificado para gerar o quadro reconstruído.
[0254] Em uma modalidade, gerar pelo menos um conjunto de dados residuais compreende tomar uma diferença entre o quadro reconstruído de referência e o quadro de entrada. O método compreende ainda a codificação do dito primeiro conjunto de dados residuais para gerar um primeiro conjunto de dados residuais codificados. A codificação do dito primeiro conjunto de dados residuais pode ser realizada de acordo com um terceiro método de codificação. O terceiro método de codificação compreende transformar o primeiro conjunto de dados residuais em um primeiro conjunto transformado de dados residuais. A transformada do primeiro conjunto de dados residuais compreende selecionar um subconjunto do primeiro conjunto de dados residuais e aplicar uma transformada ao dito subconjunto para gerar um subconjunto correspondente do primeiro conjunto transformado de dados residuais. Um dos subconjuntos do primeiro conjunto transformado de dados residuais pode ser obtido pela diferença entre uma média de um subconjunto do quadro de entrada e um elemento correspondente da combinação do segundo conjunto de dados residuais e o quadro decodificado.
[0255] Em particular, é descrito um método de decodificação de um sinal, o método que compreende receber um quadro codificado e pelo menos um conjunto de dados residuais codificados. O primeiro quadro codificado pode ser codificado com o uso de um primeiro método de codificação.
[0256] O pelo menos um conjunto de dados residuais pode ser codificado com o uso de um segundo e/ou terceiro método de codificação.
[0257] O método compreende ainda passar o primeiro quadro codificado para um módulo de decodificação, em que o módulo de decodificação é configurado para gerar um quadro decodificado pela decodificação do quadro codificado que foi codificado de acordo com um primeiro método de codificação.
[0258] O método pode compreender ainda a decodificação de pelo menos um conjunto de dados residuais codificados de acordo com o respectivo método de codificação usado para codificá-los.
[0259] Em uma modalidade, um primeiro conjunto de dados residuais codificados é decodificado pela aplicação de um segundo método de decodificação correspondente ao dito segundo método de codificação para obter um primeiro conjunto de dados residuais decodificados. O método compreende ainda combinar o primeiro conjunto de dados residuais com o quadro decodificado para obter um quadro combinado. O método compreende ainda a amostragem do quadro combinado para obter um quadro decodificado de referência.
[0260] O método compreende ainda a decodificação de um segundo conjunto de dados residuais codificados pela aplicação de um terceiro método de decodificação correspondente ao dito terceiro método de codificação para obter um segundo conjunto de dados residuais decodificados. O método compreende ainda combinar o segundo conjunto de dados residuais decodificados com o quadro decodificado de referência para obter um quadro reconstruído.
[0261] Em outra modalidade, o método compreende a amostragem do quadro decodificado para obter um quadro decodificado de referência.
[0262] O método compreende ainda a decodificação de um conjunto de dados residuais codificados aplicando um segundo ou terceiro método de decodificação correspondente ao dito segundo ou terceiro método de codificação para obter um conjunto de dados residuais decodificados. O método compreende ainda combinar o conjunto de dados residuais decodificados com o quadro decodificado de referência para obter um quadro reconstruído.
[0263] As afirmações a seguir descrevem os aspectos de exemplo ou preferidos descritos e ilustrados aqui.
[0264] Um método para codificar um vídeo de entrada em uma pluralidade de fluxos codificados, de modo que os fluxos codificados possam ser combinados para reconstruir o vídeo de entrada, o método em que compreende:
[0265] receber um vídeo de entrada de resolução total;
[0266] realizar amostragem reduzida de entrada de resolução total para criar um vídeo de amostra reduzida;
[0267] codificar o vídeo de amostra reduzida com o uso de um primeiro codec para criar um fluxo codificado de base;
[0268] reconstruir um vídeo a partir do vídeo codificado para gerar um vídeo reconstruído;
[0269] comparar o vídeo reconstruído com o vídeo de entrada; e,
[0270] criar um ou mais fluxos codificados adicionais com base na comparação.
[0271] O vídeo de entrada em comparação com o vídeo reconstruído pode ser o vídeo de amostra reduzida.
[0272] De acordo com um método de exemplo, comparar o vídeo reconstruído ao vídeo de entrada compreende:
[0273] comparar o vídeo reconstruído com o vídeo de amostra reduzida para criar um primeiro conjunto de resíduos e em que a criação de um ou mais fluxos codificados compreende codificar o primeiro conjunto de resíduos para criar um fluxo codificado de primeiro nível.
[0274] O vídeo de entrada em comparação com o vídeo reconstruído pode ser o vídeo de entrada de resolução total e o vídeo reconstruído pode ser de amostra elevada.
[0275] De acordo com um método de exemplo, comparar o vídeo reconstruído ao vídeo de entrada compreende:
[0276] realizar a amostragem elevada do vídeo reconstruído para gerar um vídeo reconstruído de amostra elevada; e
[0277] comparar o vídeo reconstruído de amostra elevada ao vídeo de entrada de resolução total para criar um segundo conjunto de resíduos e em que a criação de um ou mais fluxos codificados adicionais compreende codificar a segunda diferença para criar um fluxo codificado de segundo nível.
[0278] Por conseguinte, em um exemplo, o método pode gerar um fluxo codificado de base, um fluxo codificado de primeiro nível e um fluxo codificado de segundo nível de acordo com os métodos de exemplo definidos acima. Cada um do fluxo codificado de primeiro nível e do fluxo codificado de segundo nível pode conter dados de aprimoramento usados por um decodificador para aprimorar o fluxo de base codificado.
[0279] Os resíduos podem ser uma diferença entre dois vídeos ou quadros.
[0280] Os fluxos codificados podem ser acompanhados por um ou mais cabeçalhos que incluem os parâmetros que indicam aspectos do processo de codificação para facilitar a decodificação. Por exemplo, os cabeçalhos podem incluir o codec usado, a transformada aplicada, a quantização aplicada e/ou outros parâmetros de decodificação.
[0281] Foi descrito acima como uma etapa de classificação e seleção pode ser aplicada aos dados residuais, uma etapa de subtração de coeficientes temporais pode ser realizada e também a quantização pode ser adaptada. Cada uma dessas etapas pode ser predeterminada e aplicada seletivamente ou pode ser aplicada com base na análise do vídeo de entrada, vídeo de amostra reduzida, vídeo reconstruído, vídeo de amostra elevada ou qualquer combinação desses para aprimorar o desempenho geral do codificador. As etapas podem ser aplicadas seletivamente com base em um conjunto predeterminado de regras ou aplicadas de forma determinante com base na análise ou feedback do desempenho.
[0282] Um método de exemplo compreende ainda:
[0283] enviar o fluxo codificado de base.
[0284] Um método de exemplo compreende ainda:
[0285] enviar o fluxo codificado de primeiro nível.
[0286] Um método de exemplo compreende ainda:
[0287] enviar o fluxo codificado de segundo nível.
[0288] De acordo com outro aspecto da presente divulgação, é fornecido um método de decodificação.
[0289] O método para decodificar uma pluralidade de fluxos codificados em um vídeo de saída reconstruído, o método que compreende:
[0290] receber um primeiro fluxo codificado de base;
[0291] decodificar o primeiro fluxo codificado de base de acordo com um primeiro codec para gerar um primeiro vídeo de saída;
[0292] receber um ou mais fluxos codificados adicionais;
[0293] decodificar os um ou mais fluxos codificados adicionais para gerar um conjunto de resíduos; e,
[0294] combinar o conjunto de resíduos com o primeiro vídeo para gerar um vídeo decodificado.
[0295] Em um exemplo, o método compreende recuperar uma pluralidade de parâmetros de decodificação de um cabeçalho. Os parâmetros de decodificação podem indicar quais etapas do procedimento foram incluídas no processo de codificação.
[0296] Em um exemplo, o método pode compreender receber um fluxo codificado de primeiro nível e receber um fluxo codificado de segundo nível. Neste exemplo, a etapa de decodificação de um ou mais fluxos codificados adicionais para gerar um conjunto de resíduos compreende:
[0297] decodificar o fluxo codificado de primeiro nível para derivar um primeiro conjunto de resíduos;
[0298] em que a etapa de combinar o conjunto de resíduos com o primeiro vídeo para gerar um vídeo decodificado compreende:
[0299] combinar o primeiro conjunto de resíduos com o primeiro vídeo de saída para gerar um segundo vídeo de saída;
[0300] aumentar a amostragem do segundo vídeo de saída para gerar um segundo vídeo de saída de amostra;
[0301] decodificar o fluxo codificado de segundo nível para derivar um segundo conjunto de resíduos; e
[0302] combinar o segundo conjunto de resíduos com o segundo vídeo de saída para gerar um vídeo de saída reconstruído.
[0303] O método pode compreender ainda exibir ou enviar a saída reconstruída.

Claims (34)

REIVINDICAÇÕES
1. Método para codificar um sinal de vídeo, caracterizado pelo fato de que compreende: receber um quadro de entrada; processar o quadro de entrada para gerar os dados residuais, os dados residuais que permitem que um decodificador para reconstruir o quadro de entrada a partir de um quadro reconstruído de referência; e, aplicar uma operação de codificação run-length aos dados residuais, em que a operação de codificação run-length compreende gerar um fluxo de bytes codificado run-length que compreende um conjunto de símbolos que representa os valores de dados não zero dos dados residuais e contagens de valores zero consecutivos de dados residuais.
2. Método de acordo com a reivindicação 1, caracterizado pelo fato de que a operação de codificação run-length compreende: codificar os valores de dados não zero dos dados residuais em pelo menos um primeiro tipo de símbolo; e codificar as contagens de valores zero consecutivos em um segundo tipo de símbolo, de modo que os dados residuais são codificados como uma sequência de símbolos de diferentes tipos.
3. Método, de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que a operação de codificação run-length compreende: codificar os valores de dados dos dados residuais em um primeiro tipo de símbolo e um terceiro tipo de símbolo, os primeiro e terceiro tipos de símbolo que compreendem, cada um, uma parte de um valor de dados, de modo que as partes podem ser combinadas em um decodificador para reconstruir o valor de dados.
4. Método, de acordo com a reivindicação 3, caracterizado pelo fato de que a operação de codificação run-length compreende: comparar um tamanho de cada valor de dados dos dados residuais a ser codificado a um limite; e codificar cada valor de dados no primeiro tipo de símbolo se o tamanho estiver abaixo do limite e codificar uma parte de cada valor de dados no primeiro tipo de símbolo e uma parte de cada valor de dados no terceiro tipo de símbolo se o tamanho estiver acima do limite.
5. Método, de acordo com a reivindicação 4, caracterizado pelo fato de que compreende: se o tamanho estiver acima do limite, configurar uma sinalização no símbolo do primeiro tipo de símbolo que indica que uma parte do valor de dados representado é codificada em um símbolo adicional do terceiro tipo de símbolo.
6. Método, de acordo com qualquer uma das reivindicações 2 a 5, caracterizado pelo fato de que compreende: inserir uma sinalização em cada símbolo que indica um tipo de símbolo codificado próximo no fluxo de bytes codificado run-length.
7. Método, de acordo com qualquer uma das reivindicações precedentes, caracterizado pelo fato de que compreende: aplicar uma operação de codificação de Huffman ao conjunto de símbolos para gerar os dados codificados de Huffman que compreendem um conjunto de códigos que representa o fluxo de bytes codificado run-length.
8. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que a operação de codificação de Huffman é uma operação de codificação de Huffman canônica, de modo que os dados codificados de Huffman compreende um comprimento de código para cada símbolo único do conjunto de símbolos, o comprimento de código que representa um comprimento de um código usado para codificar um símbolo correspondente.
9. Método, de acordo com a reivindicação 7 ou 8, caracterizado pelo fato de que compreende: comparar um tamanho de dados de pelo menos uma parte do fluxo de bytes codificado run-length a um tamanho de dados de pelo menos uma parte dos dados codificados de Huffman; e emitir o fluxo de bytes codificado run-length ou os dados codificados de Huffman em um fluxo de bits de saída com base na comparação.
10. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que compreende: adicionar uma sinalização para a configuração de metadados que acompanha o fluxo de bits de saída que indica se o fluxo de bits representa o fluxo de bytes codificado run-length ou os dados codificados de Huffman.
11. Método, de acordo com a reivindicação 2, e de acordo com a reivindicação 7 ou 10, caracterizado pelo fato de que a operação de codificação de Huffman compreende: gerar uma tabela de frequência separada para os símbolos do primeiro tipo de símbolo e símbolos do segundo tipo de símbolo.
12. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que compreende: gerar um cabeçalho de fluxo que compreende uma indicação da pluralidade de comprimentos de código, de modo que um decodificador pode derivar os comprimentos de código e os respectivos símbolos correspondentes para a operação canônica de decodificação de Huffman.
13. Método, de acordo com a reivindicação 12, caracterizado pelo fato de que o cabeçalho de fluxo é um primeiro tipo de cabeçalho de fluxo que compreende ainda uma indicação do símbolo associado ao respectivo comprimento de código da pluralidade de comprimentos de código.
14. Método, de acordo com a reivindicação 12, caracterizado pelo fato de que o cabeçalho de fluxo é um segundo tipo de cabeçalho de fluxo e o método compreende ainda ordenar a pluralidade de comprimentos de código no cabeçalho de fluxo com base em uma ordem predeterminada de símbolos que correspondem a cada um dos comprimentos de código, de modo que os comprimentos de código podem ser associados a um símbolo correspondente no decodificador.
15. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que o segundo tipo de cabeçalho de fluxo compreende ainda uma sinalização que indica que um símbolo na ordem predeterminada do possível conjunto de símbolos não existe no conjunto de símbolos no fluxo de bytes codificado run-length.
16. Método, de acordo com qualquer uma das reivindicações 13 a 15, caracterizado pelo fato de que compreende: comparar um número de códigos únicos nos dados codificados de Huffman a um limite e gerar o primeiro tipo de cabeçalho de fluxo ou o segundo tipo de cabeçalho de fluxo com base na comparação.
17. Método para decodificar um sinal de vídeo, caracterizado pelo fato de que método compreende: recuperar um fluxo de bits codificado; decodificar o fluxo de bits codificado para gerar os dados residuais; e reconstruir um quadro original do sinal de vídeo a partir dos dados residuais e um quadro reconstruído de referência; em que a etapa de decodificar o fluxo de bits codificado compreende: aplicar uma operação de codificação run-length para gerar os dados residuais; em que a operação de codificação run-length compreende: identificar um conjunto de símbolos que representa os valores de dados não zero dos dados residuais e um conjunto de símbolos que representa as contagens de valores zero consecutivos dos dados residuais; analisar o conjunto de símbolos para derivar os valores de dados não zero dos dados residuais e as contagens de valores zero consecutivos; e gerar os dados residuais a partir dos valores de dados não zero e as contagens de valores zero consecutivos.
18. Método, de acordo com a reivindicação 17, caracterizado pelo fato de que a operação de codificação run-length compreende: identificar os símbolos de um primeiro tipo de símbolo que representa os valores de dados não zero dos dados residuais; identificar os símbolos de um segundo tipo de símbolo que representa as contagens de valores zero consecutivos, de modo que uma sequência de símbolos de diferentes tipos é decodificada para gerar os dados residuais; e analisar o conjunto de símbolos de acordo com o respectivo tipo de cada símbolo.
19. Método, de acordo com a reivindicação 17 ou 18, caracterizado pelo fato de que a operação de codificação run-length compreende: identificar os símbolos de um primeiro tipo de símbolo e símbolos de um terceiro tipo de símbolo, os primeiro e terceiro tipos de símbolo cada que representa uma parte de um valor de dados; analisar um símbolo do primeiro tipo de símbolo e um símbolo do terceiro tipo de símbolo para derivar partes de um valor de dados; e combinar as partes derivadas do valor de dados em um valor de dados.
20. Método, de acordo com a reivindicação 19, caracterizado pelo fato de que compreende: recuperar uma sinalização de sobrecarga a partir de um símbolo do primeiro tipo de símbolo que indica se uma parte de um valor de dados do símbolo do primeiro tipo de símbolo é compreendida em um terceiro tipo de símbolo subsequente.
21. Método, de acordo com qualquer uma das reivindicações 18 a 20, caracterizado pelo fato de que compreende: recuperar uma sinalização a partir de cada símbolo que indica um tipo de símbolo subsequente a ser considerado no conjunto de símbolos.
22. Método, de acordo com qualquer uma das reivindicações 18 a 21, caracterizado pelo fato de que um símbolo inicial é considerado ser o primeiro tipo de símbolo, de modo que o símbolo inicial é analisado para derivar pelo menos uma parte de um valor de dados.
23. Método, de acordo com qualquer uma das reivindicações 17 a 22, caracterizado pelo fato de que a etapa de decodificar o fluxo de bits codificado compreende: aplicar uma operação de codificação de Huffman ao fluxo de bits codificado para gerar o conjunto de símbolos que representa os valores de dados não zero dos dados residuais e o conjunto de símbolos que representa as contagens de valores zero consecutivos dos dados residuais, em que a etapa de aplicar uma operação de codificação run- length para gerar os dados residuais é realizada nos conjuntos de símbolos.
24. Método, de acordo com a reivindicação 23, caracterizado pelo fato de que a operação de codificação de Huffman é uma operação de codificação de Huffman canônica.
25. Método, de acordo com a reivindicação 23 ou 24, caracterizado pelo fato de que compreende: recuperar uma sinalização a partir da configuração de metadados que acompanham o fluxo de bits codificado que indica se o fluxo de bits codificado compreende um fluxo de bytes codificado run- length ou dados codificados de Huffman; e aplicar de maneira seletiva a operação de codificação de Huffman com base na sinalização.
26. Método, de acordo com qualquer uma das reivindicações 23 a 25, caracterizado pelo fato de que compreende ainda: identificar um símbolo de tipo inicial considerado ser derivado no fluxo de bits codificado; aplicar a operação de codificação de Huffman ao fluxo de bits codificado para derivar um símbolo inicial com base em um conjunto de parâmetros de codificação associado ao tipo de símbolo inicial considerado; recuperar uma sinalização a partir do símbolo inicial que indica um tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits; e, aplicar ainda a operação de codificação de Huffman ao fluxo de bits para derivar um símbolo subsequente com base em um conjunto de parâmetros de codificação associado ao tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits.
27. Método, de acordo com a reivindicação 26, caracterizado pelo fato de que compreende recuperar de maneira iterativa uma sinalização a partir de um símbolo decodificado que indica um tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits e aplicar a operação de codificação de Huffman ao fluxo de bits para derivar um símbolo subsequente com base em um conjunto de parâmetros de codificação associado ao tipo de símbolo subsequente considerado ser derivado a partir do fluxo de bits.
28. Método, de acordo com a reivindicação 24, caracterizado pelo fato de que compreende: recuperar um cabeçalho de fluxo que compreende uma indicação de uma pluralidade de comprimentos de código a ser usada para a operação de codificação de Huffman canônica; associar cada comprimento de código a um respectivo símbolo de acordo com a operação de codificação de Huffman canônica; e identificar um código associado a cada símbolo com base em os comprimentos de código de acordo com a operação de codificação de Huffman canônica.
29. Método, de acordo com a reivindicação 28, caracterizado pelo fato de que o cabeçalho de fluxo compreende uma indicação de um símbolo associado a um respectivo comprimento de código da pluralidade de comprimentos de código e a etapa de associar cada comprimento de código a um símbolo compreende associar cada comprimento de código ao símbolo correspondente no cabeçalho de fluxo.
30. Método, de acordo com a reivindicação 28, caracterizado pelo fato de que a etapa de associar cada comprimento de código a um respectivo símbolo compreende associar cada comprimento de código a um símbolo de um conjunto de símbolos predeterminados de acordo com uma ordem na qual cada comprimento de código foi recuperado.
31. Método, de acordo com a reivindicação 30, caracterizado pelo fato de que compreende não associar um símbolo do conjunto de símbolos predeterminados a um respectivo comprimento de código onde uma sinalização do cabeçalho de fluxo indica que não existe comprimento de código no cabeçalho de fluxo para aquele símbolo.
32. Aparelho de codificação, caracterizado pelo fato de que é configurado para realizar o método, como definido em qualquer uma das reivindicações 1 a 16.
33. Aparelho de decodificação, caracterizado pelo fato de que é configurado para realizar o método, como definido em qualquer uma das reivindicações 17 a 32.
34. Meio legível por computador, caracterizado pelo fato de que compreende instruções que quando executadas por um processador faz com que o processador execute o método, como definido em qualquer uma das reivindicações 1 a 31.
BR112021001807-7A 2018-08-03 2019-08-01 codificação de entropia para codificação de aprimoramento de sinal BR112021001807A2 (pt)

Applications Claiming Priority (15)

Application Number Priority Date Filing Date Title
GBGB1812709.2A GB201812709D0 (en) 2018-08-03 2018-08-03 Encoding and Decoding methods and Apparatuses
GBGB1812710.0A GB201812710D0 (en) 2018-08-03 2018-08-03 Encoding and Decoding methods and apparatuses
GB1812709.2 2018-08-03
GBGB1812708.4A GB201812708D0 (en) 2018-08-03 2018-08-03 Encoding and Decoding methods and apparatuses
GB1812708.4 2018-08-03
GB1812710.0 2018-08-03
GBGB1903844.7A GB201903844D0 (en) 2019-03-20 2019-03-20 A method of encoding and decoding a video
GB1903844.7 2019-03-20
GBGB1904014.6A GB201904014D0 (en) 2019-03-23 2019-03-23 Video coding technology
GB1904014.6 2019-03-23
GB1904492.4 2019-03-29
GBGB1904492.4A GB201904492D0 (en) 2019-03-29 2019-03-29 Video coding technology
GBGB1905325.5A GB201905325D0 (en) 2019-04-15 2019-04-15 Video coding technology
GB1905325.5 2019-04-15
PCT/GB2019/052166 WO2020025964A1 (en) 2018-08-03 2019-08-01 Entropy coding for signal enhancement coding

Publications (1)

Publication Number Publication Date
BR112021001807A2 true BR112021001807A2 (pt) 2021-04-27

Family

ID=67551571

Family Applications (2)

Application Number Title Priority Date Filing Date
BR112021001807-7A BR112021001807A2 (pt) 2018-08-03 2019-08-01 codificação de entropia para codificação de aprimoramento de sinal
BR112021001958-8A BR112021001958A2 (pt) 2018-08-03 2019-08-01 transformações para codificação de intensificação de sinal

Family Applications After (1)

Application Number Title Priority Date Filing Date
BR112021001958-8A BR112021001958A2 (pt) 2018-08-03 2019-08-01 transformações para codificação de intensificação de sinal

Country Status (9)

Country Link
US (7) US11570473B2 (pt)
EP (5) EP4376418A2 (pt)
CN (4) CN112771868B (pt)
AU (3) AU2019315029A1 (pt)
BR (2) BR112021001807A2 (pt)
CA (2) CA3108454A1 (pt)
MX (2) MX2021001341A (pt)
WO (4) WO2020025955A1 (pt)
ZA (1) ZA202101059B (pt)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230021638A (ko) * 2020-04-14 2023-02-14 브이-노바 인터내셔널 리미티드 엔트로피 코딩을 위한 변환 계수 순서화
US11863318B2 (en) * 2020-08-31 2024-01-02 Frontiir Pte Ltd. Error correction for network packets
US20220383554A1 (en) * 2021-05-18 2022-12-01 Tencent America LLC Substitutional quality factor learning for quality-adaptive neural network-based loop filter
WO2023135410A1 (en) 2022-01-11 2023-07-20 V-Nova International Ltd Integrating a decoder for hierarchical video coding
WO2023167502A1 (ko) * 2022-03-02 2023-09-07 엘지전자 주식회사 피쳐 부호화/복호화 방법, 장치, 비트스트림을 저장한 기록 매체 및 비트스트림 전송 방법
CN116193113A (zh) * 2022-12-07 2023-05-30 辉羲智能科技(上海)有限公司 数据解压和压缩方法及装置

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR0162197B1 (ko) * 1992-05-30 1998-12-15 강진구 영상데이타의 가변장부호와/복호화방법 및 장치
JP3242788B2 (ja) * 1994-03-29 2001-12-25 三菱電機株式会社 信号処理装置及び信号処理方法
US5654702A (en) * 1994-12-16 1997-08-05 National Semiconductor Corp. Syntax-based arithmetic coding for low bit rate videophone
US6014694A (en) * 1997-06-26 2000-01-11 Citrix Systems, Inc. System for adaptive video/audio transport over a network
US6674479B2 (en) * 2000-01-07 2004-01-06 Intel Corporation Method and apparatus for implementing 4:2:0 to 4:2:2 and 4:2:2 to 4:2:0 color space conversion
AUPR192700A0 (en) * 2000-12-06 2001-01-04 Canon Kabushiki Kaisha Storing coding image data in storage of fixed memory size
US7016547B1 (en) * 2002-06-28 2006-03-21 Microsoft Corporation Adaptive entropy encoding/decoding for screen capture content
US6781528B1 (en) * 2002-10-24 2004-08-24 Apple Computer, Inc. Vector handling capable processor and run length encoding
US7483577B2 (en) * 2004-03-02 2009-01-27 Mitsubishi Electric Research Laboratories, Inc. System and method for joint de-interlacing and down-sampling using adaptive frame and field filtering
KR100679022B1 (ko) * 2004-10-18 2007-02-05 삼성전자주식회사 계층간 필터링을 이용한 비디오 코딩 및 디코딩방법과,비디오 인코더 및 디코더
WO2006080797A1 (en) * 2005-01-27 2006-08-03 Samsung Electronics Co., Ltd. Multilayer video encoding/decoding method using residual re-estimation and apparatus using the same
KR20070012201A (ko) 2005-07-21 2007-01-25 엘지전자 주식회사 영상 신호의 인코딩 및 디코딩 방법
US8340179B2 (en) * 2006-03-21 2012-12-25 Canon Kabushiki Kaisha Methods and devices for coding and decoding moving images, a telecommunication system comprising such a device and a program implementing such a method
US8170101B2 (en) * 2006-10-27 2012-05-01 Sharp Laboratories Of America, Inc. Methods and systems for low-complexity data compression
FR2913163A1 (fr) * 2007-02-27 2008-08-29 Canon Kk Procede et dispositif de transmission de donnees video
CN101702963A (zh) * 2007-03-15 2010-05-05 诺基亚公司 用于为视频编码中的空间可伸缩性提供改进的残差预测的系统和方法
US8848787B2 (en) * 2007-10-15 2014-09-30 Qualcomm Incorporated Enhancement layer coding for scalable video coding
US8179974B2 (en) * 2008-05-02 2012-05-15 Microsoft Corporation Multi-level representation of reordered transform coefficients
ATE540383T1 (de) * 2008-05-27 2012-01-15 Ericsson Telefon Ab L M Indexbasierte pixelblock-verarbeitung
US9571856B2 (en) * 2008-08-25 2017-02-14 Microsoft Technology Licensing, Llc Conversion operations in scalable video encoding and decoding
CN101742324A (zh) * 2008-11-14 2010-06-16 北京中星微电子有限公司 视频编解码方法、视频编解码系统及编解码器
JP2010239288A (ja) * 2009-03-30 2010-10-21 Sony Corp 情報処理装置および方法
JP5504336B2 (ja) * 2009-05-05 2014-05-28 テレフオンアクチーボラゲット エル エム エリクソン(パブル) スケーラブルビデオ符号化方法、符号器及びコンピュータプログラム
US8325186B2 (en) * 2009-05-21 2012-12-04 Sony Computer Entertainment America Llc Method and apparatus for rendering shadows
US9069713B2 (en) * 2009-06-05 2015-06-30 Qualcomm Incorporated 4X4 transform for media coding
CN102196256B (zh) * 2010-03-11 2013-03-27 中国科学院微电子研究所 一种视频编码方法及装置
US8913040B2 (en) * 2010-11-05 2014-12-16 Apple Inc. Downsampling data for crosstalk compensation
EP2479994B1 (en) * 2011-01-19 2017-03-15 BlackBerry Limited Method and device for improved multi-layer data compression
US20120230418A1 (en) * 2011-03-08 2012-09-13 Qualcomm Incorporated Coding of transform coefficients for video coding
US8948248B2 (en) * 2011-07-21 2015-02-03 Luca Rossato Tiered signal decoding and signal reconstruction
CA2873496A1 (en) * 2012-05-14 2013-11-21 Luca Rossato Encoding and decoding based on blending of sequences of samples along time
US9838688B2 (en) * 2012-06-22 2017-12-05 Mediatek Inc. Method and apparatus of adaptive intra prediction for inter-layer and inter-view coding
TWI720543B (zh) 2012-08-06 2021-03-01 美商Vid衡器股份有限公司 用於多層視訊編碼與解碼的方法、裝置、系統及非暫時性電腦可讀媒體
PL2941872T3 (pl) * 2013-01-02 2019-03-29 Dolby Laboratories Licensing Corporation Kompatybilne wstecznie kodowanie dla sygnałów wideo o ultra wysokiej rozdzielczości z rozszerzonym zakresem dynamicznym
US11146803B2 (en) * 2013-03-11 2021-10-12 Dolby Laboratories Licensing Corporation Distribution of multi-format high dynamic range video using layered coding
EP2974313B1 (en) * 2013-03-12 2018-07-11 HFI Innovation Inc. Inter-layer motion vector scaling for scalable video coding
EA035886B1 (ru) * 2013-04-15 2020-08-27 В-Нова Интернэшнл Лтд. Гибридное обратно совместимое кодирование и декодирование сигналов
EP2816805B1 (en) 2013-05-29 2020-12-30 BlackBerry Limited Lossy data compression with conditional reconstruction reinfinement
US9143797B2 (en) * 2013-05-29 2015-09-22 Blackberry Limited Lossy data compression with conditional reconstruction refinement
US10244223B2 (en) * 2014-01-10 2019-03-26 Ostendo Technologies, Inc. Methods for full parallax compressed light field 3D imaging systems
WO2016047897A1 (ko) * 2014-09-26 2016-03-31 엘지전자(주) 기하 요소를 이용하여 그래프 기반의 신호를 처리하는 방법 및 장치
US20170064298A1 (en) * 2015-09-02 2017-03-02 Blackberry Limited Video coding with delayed reconstruction
US10616583B2 (en) * 2016-06-30 2020-04-07 Sony Interactive Entertainment Inc. Encoding/decoding digital frames by down-sampling/up-sampling with enhancement information
WO2018041843A1 (en) * 2016-08-29 2018-03-08 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Encoder for Encoding, and Decoder for Decoding, a Digital Image Representation into a Data Stream using Indicating a Number of Leading Zero Bit Planes
WO2018042388A1 (en) * 2016-09-02 2018-03-08 Artomatix Ltd. Systems and methods for providing convolutional neural network based image synthesis using stable and controllable parametric models, a multiscale synthesis framework and novel network architectures
GB2553556B (en) * 2016-09-08 2022-06-29 V Nova Int Ltd Data processing apparatuses, methods, computer programs and computer-readable media
US10855997B2 (en) * 2017-04-14 2020-12-01 Mediatek Inc. Secondary transform kernel size selection
US10560723B2 (en) * 2017-05-08 2020-02-11 Qualcomm Incorporated Context modeling for transform coefficient coding
US10291925B2 (en) * 2017-07-28 2019-05-14 Intel Corporation Techniques for hardware video encoding
EP3489901A1 (en) * 2017-11-24 2019-05-29 V-Nova International Limited Signal encoding
US10855986B2 (en) * 2018-05-29 2020-12-01 Qualcomm Incorporated Bandwidth compression for neural network systems
WO2020009556A1 (ko) * 2018-07-06 2020-01-09 엘지전자 주식회사 변환에 기반한 영상 코딩 방법 및 그 장치

Also Published As

Publication number Publication date
US20210329246A1 (en) 2021-10-21
EP3831065B1 (en) 2024-04-10
CN112771868B (zh) 2024-04-05
US11570473B2 (en) 2023-01-31
WO2020025954A1 (en) 2020-02-06
US11611777B2 (en) 2023-03-21
US11546634B2 (en) 2023-01-03
CN112771868A (zh) 2021-05-07
EP4376418A2 (en) 2024-05-29
US20210235120A1 (en) 2021-07-29
MX2021001341A (es) 2021-05-27
WO2020025964A1 (en) 2020-02-06
WO2020025957A1 (en) 2020-02-06
US20230239505A1 (en) 2023-07-27
BR112021001958A2 (pt) 2021-04-27
AU2019315029A1 (en) 2021-03-11
US20210329244A1 (en) 2021-10-21
AU2019315758A1 (en) 2021-02-25
CN113228668A (zh) 2021-08-06
EP3831067A1 (en) 2021-06-09
US20230171430A1 (en) 2023-06-01
EP3831068A1 (en) 2021-06-09
WO2020025955A1 (en) 2020-02-06
AU2023204360A1 (en) 2023-07-27
CN112703738A (zh) 2021-04-23
US20210306676A1 (en) 2021-09-30
US20230421815A1 (en) 2023-12-28
CA3108402A1 (en) 2020-02-06
EP3831066A1 (en) 2021-06-09
ZA202101059B (en) 2022-09-28
CA3108454A1 (en) 2020-02-06
MX2021001370A (es) 2021-09-10
CN112789857A (zh) 2021-05-11
AU2019315758B2 (en) 2023-04-06
EP3831065A1 (en) 2021-06-09

Similar Documents

Publication Publication Date Title
BR112021001807A2 (pt) codificação de entropia para codificação de aprimoramento de sinal
US8942502B2 (en) Parallelization of variable length decoding
US11638007B2 (en) Codebook generation for cloud-based video applications
KR101737294B1 (ko) 심볼 압축을 수반하는 데이터의 소스 코딩 및 디코딩을 위한 방법들 및 디바이스들
US8578058B2 (en) Real-time multi-block lossless recompression
RU2417518C2 (ru) Эффективное кодирование и декодирование блоков преобразования
US11074723B2 (en) Lossless compression of fragmented image data
JP5162708B2 (ja) 整数値データのストリームを圧縮するシステム及び方法
JP5733935B2 (ja) デジタルコンテンツ符号器、復号器、検索装置、符号化方法、検索方法および記憶装置
CN112584155B (zh) 一种视频数据处理方法和装置
KR20170075759A (ko) 대용량 병렬 처리를 위해 비디오 신호를 엔트로피 인코딩 또는 엔트로피 디코딩하는 방법 및 장치
BR112020000415B1 (pt) Método para compactar, método para descompactar, conjunto de dados compactados correspondente a um conjunto de dados não compactados, dispositivo para compactar, e dispositivo para descompactar
EP1734738A2 (en) Image encoding and decoding method and apparatus, and computer-readable recording medium storing program for executing the method
CN111656784A (zh) 解码方法、解码器和解码系统
EA044215B1 (ru) Энтропийное кодирование усиления сигнала
WO2012111315A1 (ja) ストリーム生成装置、ストリーム生成方法、ストリーム処理装置、およびストリーム処理方法
CN111699687A (zh) 编码方法、编码器和编码系统