BR112017016341B1 - Codificação em modo paleta para codificação de vídeo - Google Patents

Codificação em modo paleta para codificação de vídeo Download PDF

Info

Publication number
BR112017016341B1
BR112017016341B1 BR112017016341-1A BR112017016341A BR112017016341B1 BR 112017016341 B1 BR112017016341 B1 BR 112017016341B1 BR 112017016341 A BR112017016341 A BR 112017016341A BR 112017016341 B1 BR112017016341 B1 BR 112017016341B1
Authority
BR
Brazil
Prior art keywords
palette
syntax element
video
block
encoded
Prior art date
Application number
BR112017016341-1A
Other languages
English (en)
Other versions
BR112017016341A2 (pt
Inventor
Wei Pu
Marta Karczewicz
Rajan Laxman Joshi
Feng Zou
Vadim SEREGIN
Original Assignee
Qualcomm Incorporated
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112017016341A2 publication Critical patent/BR112017016341A2/pt
Publication of BR112017016341B1 publication Critical patent/BR112017016341B1/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/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • 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/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • 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
    • 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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

codificação em modo paleta para codificação de vídeo. recepção de uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar um bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizadas no fluxo de bits de vídeo codificado, em que o primeiro elemento de sintaxe é codificado usando um ou mais códigos de golomb de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits, decodificação da pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe usando um ou mais códigos golomb, reconstrução da paleta com base na pluralidade decodificada de elementos de sintaxe e decodificação do bloco de dados de vídeo usando a paleta reconstruída.

Description

[001] Este pedido de patente reivindica o benefício do Pedido Provisório dos EUA No. 62/109.568 depositado em 29 de janeiro de 2015, cujos conteúdos integrais são aqui incorporados por referência.
CAMPO TÉCNICO
[002] Essa descrição se refere a codificação e decodificação de vídeo.
ANTECEDENTES DA INVENÇÃO
[003] As capacidades de vídeo digital podem ser incorporadas em uma ampla gama de dispositivos, incluindo televisores digitais, sistemas de transmissão digital direta, sistemas de transmissão sem fio, assistentes digitais pessoais (PDAs), computadores portáteis (laptop) ou de mesa, computadores tablet, leitores de e-books, câmeras digitais, dispositivos de gravação digital, players de mídia digital, dispositivos de videojogos, consoles de videogames, telefones de rádio celular ou via satélite, os chamados "telefones inteligentes", dispositivos de teleconferência de vídeo, dispositivos de transmissão de vídeo e outros. Os dispositivos de vídeo digital implementam técnicas de compressão de vídeo, como as descritas nos padrões definidos por MPEG-2, MPEG-4, UIT-T H.263, UIT-T H.264/ MPEG-4, Parte 10, Codificação Avançada de Vídeo ( AVC), o padrão HEVC (High Efficiency Video Coding) atualmente em desenvolvimento e extensões de tais padrões. Os dispositivos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital de forma mais eficiente ao implementar tais técnicas de compressão de vídeo.
[004] As técnicas de compressão de vídeo realizam uma predição espacial (ou intra-imagem) e/ou temporal (inter-imagem) para reduzir ou remover a redundância inerente nas sequências de vídeo. Para a codificação de vídeo baseada em bloco, um slice de vídeo (por exemplo, uma moldura de vídeo ou uma parte de um quadro de vídeo) pode ser particionada em blocos de vídeo. Os blocos de vídeo em um slice intra-codificado (I) de uma imagem são codificados usando a predição espacial em relação às amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em um slice inter- codificado (P ou B) de uma imagem podem usar a predição espacial em relação às amostras de referência em blocos vizinhos na mesma imagem ou predição temporal em relação a amostras de referência em outras imagens de referência. As imagens podem ser referidas como quadros, e as imagens de referência podem ser referidas como quadros de referência.
[005] A predição espacial ou temporal resulta em um bloco preditivo para um bloco a ser codificado. Os dados residuais representam as diferenças de pixels entre o bloco original a se codificar e o bloco preditivo. Um bloco inter-codificado é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência que formam o bloco preditivo, e os dados residuais indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco intra-codificado é codificado de acordo com um modo intra-codificador e os dados residuais. Para uma compressão adicional, os dados residuais podem ser transformados do domínio do pixel para um domínio de transformada, resultando em coeficientes residuais, os quais então podem ser quantificados. Os coeficientes quantificados, inicialmente dispostos em uma matriz bidimensional, podem ser escaneados para produzir um vetor unidimensional de coeficientes e a codificação por entropia pode ser aplicada para conseguir ainda mais compressão.
SUMÁRIO
[006] Esta descrição refere-se a técnicas de codificação e decodificação de vídeo. Em particular, esta descrição descreve técnicas para codificar e decodificar dados de vídeo com um modo de codificação baseado em paleta. Em um modo de codificação baseado em paleta, valores de pixel para um bloco de dados de vídeo podem ser codificados em relação a uma paleta de valores de cores associados ao bloco de dados de vídeo. A paleta de valores de cor pode ser determinada por um codificador de vídeo e pode conter os valores de cor que são mais comuns para um bloco particular. O codificador de vídeo pode atribuir um índice na paleta de valores de cor para cada pixel no bloco de dados de vídeo e sinalizar esse índice para um decodificador de vídeo em um fluxo de bits de vídeo codificado. O decodificador de vídeo pode então usar o índice na paleta para determinar o valor de cor a ser usado para um pixel particular no bloco.
[007] Além dos índices de sinalização na paleta, um codificador de vídeo também pode transmitir a própria paleta no fluxo de bits de vídeo codificado. As técnicas para transmitir a paleta podem incluir a sinalização direta dos valores da paleta, bem como a predição das entradas de paleta para um bloco atual de entradas de paleta de um ou mais blocos previamente codificados. Esta descrição descreve técnicas para codificar paletas, incluindo técnicas para codificar elementos de sintaxe relacionados à codificação de paleta e / ou predição de paleta.
[008] Em um exemplo da descrição, um método de decodificação de dados de vídeo compreende receber um bloco de dados de vídeo em um fluxo de bits de vídeo codificado, sendo o bloco de dados de vídeo codificado usando um modo de codificação baseado em paleta, recebendo uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica um número de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, em que o primeiro elemento de sintaxe é codificado usando um ou mais códigos de Golomb de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits, decodificando a pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe usando um ou mais códigos Golomb, reconstruindo a paleta com base na pluralidade decodificada de elementos de sintaxe e decodificando o bloco de dados de vídeo usando a paleta reconstruída.
[009] Em outro exemplo da descrição, um método de codificação de dados de vídeo compreende a codificação de um bloco de dados de vídeo usando um modo de codificação baseado em paleta e uma paleta, gerando uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe, incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizadas no fluxo de bits de vídeo codificado, codificando o primeiro elemento de sintaxe usando um ou mais códigos Golomb tais como qual o comprimento do primeiro elemento de sintaxe codificado é menor ou igual a um número máximo de bits predeterminado e que inclui a pluralidade de elementos de sintaxe em um fluxo de bits de vídeo codificado.
[010] Em outro exemplo da descrição, um aparelho configurado para decodificar dados de vídeo compreende uma memória configurada para armazenar um fluxo de bits de vídeo codificado e um decodificador de vídeo configurado para receber um bloco de dados de vídeo no fluxo de bits de vídeo codificado, o bloco de dados de vídeo tendo sido codificado usando um modo de codificação baseado em paleta, receber uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica um número de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, em que o primeiro elemento de sintaxe é codificado usando um ou mais códigos Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado é menor ou igual a um número máximo predeterminado de bits, decodificar a pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe usando um ou mais códigos Golomb, reconstruir a paleta com base na pluralidade decodificada de elementos de sintaxe e decodificar o bloco de dados de vídeo usando a paleta reconstruída.
[011] Em outro exemplo da descrição, um aparelho configurado para codificar dados de vídeo compreende uma memória configurada para armazenar um bloco de dados de vídeo e um codificador de vídeo configurado para codificar o bloco de dados de vídeo usando um modo de codificação baseado em paleta e uma paleta, gerar uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica um número de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, codificar o primeiro elemento de sintaxe usando um ou mais códigos Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits e inclua a pluralidade de elementos de sintaxe em um fluxo de bits de vídeo codificado.
[012] Em outro exemplo da descrição, um aparelho configurado para decodificar dados de vídeo compreende meios para receber um bloco de dados de vídeo em um fluxo de bits de vídeo codificado, o bloco de dados de vídeo codificado usando um modo de codificação baseado em paleta, meios para recepção de uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, em que o primeiro elemento de sintaxe é codificado usando um ou mais códigos Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits, meios para decodificar a pluralidade de elementos de sintaxe, incluindo decodificação do primeiro elemento de sintaxe usando um ou mais códigos Golomb, meios para reconstruir a paleta com base na pluralidade decodificada de elementos de sintaxe e meios para decodificação do bloco de dados de vídeo usando a paleta reconstruída.
[013] Em outro exemplo da descrição, um aparelho configurado para codificar dados de vídeo compreende meios para codificar um bloco de dados de vídeo usando um modo de codificação baseado em paleta e uma paleta, meios para gerar uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, meios para codificar o primeiro elemento de sintaxe usando um ou mais códigos Golomb de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits e meios para incluir a pluralidade de elementos de sintaxe em um fluxo de bits de vídeo codificado.
[014] Em outro exemplo, esta descrição descreve um meio de armazenamento legível por computador que armazena instruções que, quando executadas, fazem com que um ou mais processadores de um dispositivo configurado para decodificar dados de vídeo, recebam um bloco de dados de vídeo em um fluxo de bits de vídeo codificado, o bloqueio de dados de vídeo tendo sido codificado usando um modo de codificação baseado em paleta, recebam uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi utilizada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica um número de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, em que o primeiro elemento de sintaxe é codificado usando um ou mais códigos de Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número predeterminado máximo de bits, decodifiquem a pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe usando um ou mais códigos Golomb, reconstruam a paleta com base na pluralidade decodificada de elementos de sintaxe, e decodifique o bloco de dados de vídeo usando a paleta reconstruída.
[015] Em outro exemplo, esta descrição descreve um meio de armazenamento legível por computador que armazena instruções que, quando executadas, fazem com que um ou mais processadores de um dispositivo configurado para codificar dados de vídeo, codifiquem um bloco de dados de vídeo usando um modo de codificação baseado em paleta e uma paleta, gerem uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, codifiquem o primeiro elemento de sintaxe usando um ou mais códigos de Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo de bits predeterminado e incluam uma pluralidade de elementos de sintaxe em um fluxo de bits de vídeo codificado.
[016] Os detalhes de um ou mais exemplos constam nos desenhos anexos e na descrição abaixo. Outras características, objetos e vantagens serão evidentes a partir da descrição e desenhos, e das reivindicações.
BREVE DESCRIÇÃO DE DESENHOS
[017] A figura 1 é um diagrama de blocos que ilustra um exemplo de sistema de codificação de vídeo que pode utilizar as técnicas descritas nesta descrição.
[018] A figura 2 é um diagrama de blocos que ilustra um exemplo de codificador de vídeo que pode implementar as técnicas descritas nesta descrição.
[019] A figura 3 é um diagrama de blocos que ilustra um exemplo de decodificador de vídeo que pode implementar as técnicas descritas nesta descrição.
[020] A figura 4 é um diagrama de blocos que ilustra um exemplo de unidade de codificação baseada em paleta do codificador de vídeo da figura 2.
[021] A figura 5 é um diagrama conceitual que ilustra uma técnica de predição de paleta de exemplo de acordo com as técnicas da descrição.
[022] A figura 6 é um diagrama conceitual que ilustra um exemplo de técnica de codificação do vetor de predição binária de acordo com as técnicas da descrição.
[023] A figura 7 é um diagrama de blocos que ilustra um exemplo de unidade de decodificação baseada em paleta do codificador de vídeo da figura 3.
[024] A figura 8 é um fluxograma que ilustra um exemplo de método de codificação de vídeo de acordo com as técnicas da descrição.
[025] A figura 9 é um fluxograma que ilustra um exemplo de método de decodificação de vídeo de acordo com as técnicas da descrição.
DESCRIÇÃO DETALHADA
[026] Esta descrição está relacionada ao campo da codificação de vídeo, e mais particularmente à predição ou codificação de um bloco de dados de vídeo em modo de codificação baseado em paleta. Na codificação de vídeo tradicional, as imagens são assumidas como contínuas e espacialmente suaves. Com base nessas premissas, foram desenvolvidas várias ferramentas, como transformada baseada em bloco, filtragem, etc., e essas ferramentas mostraram um bom desempenho para vídeos de conteúdo natural. Em aplicações como desktop remoto, trabalho colaborativo e exibição sem fio, no entanto, o conteúdo da tela gerada por computador (por exemplo, como texto ou gráficos de computador) pode ser o conteúdo dominante a ser compactado. Este tipo de conteúdo tende a ter tom discreto e apresenta linhas nítidas e limites de objetos de alto contraste. A suposição de tom contínuo e suavidade pode não mais se aplicar ao conteúdo da tela e, portanto, as técnicas tradicionais de codificação de vídeo podem não ser eficientes para comprimir dados de vídeo, incluindo conteúdo de tela.
[027] Esta descrição descreve a codificação baseada em paleta, que pode ser particularmente adequada para a codificação do conteúdo da tela. Por exemplo, assumindo que uma área particular de dados de vídeo tem um número relativamente pequeno de cores, um codificador de vídeo (por exemplo, um codificador de vídeo ou um decodificador de vídeo) pode formar uma chamada "paleta" para representar os dados de vídeo da área específica . A paleta pode ser expressa como uma tabela de cores ou valores de pixels representando os dados de vídeo da área específica (por exemplo, um determinado bloco). Por exemplo, a paleta pode incluir os valores de pixel mais dominantes no bloco dado. Em alguns casos, os valores de pixel mais dominantes podem incluir um ou mais valores de pixels que ocorrem com maior freqüência dentro do bloco. Além disso, em alguns casos, um codificador de vídeo pode aplicar um valor valor limite para determinar se um valor de pixel deve ser incluído como um dos valores de pixel mais dominante no bloco. De acordo com vários aspectos da codificação baseada em paleta, o codificador de vídeo pode codificar valores de índice indicativos de um ou mais dos valores de pixels do bloco atual, em vez de codificar valores de pixel reais ou seus residuais para um bloco atual de dados de vídeo. No contexto da codificação baseada em paleta, os valores do índice indicam entradas respectivas na paleta que são usadas para representar valores de pixel individuais do bloco atual.
[028] Por exemplo, o codificador de vídeo pode codificar um bloco de dados de vídeo determinando a paleta para o bloco (por exemplo, codificando a paleta explicitamente, prevendo a paleta ou uma combinação dessas medidas), localizando uma entrada na paleta para representar um ou mais dos valores de pixel, e codificando o bloco com valores de índice que indicam a entrada na paleta usada para representar os valores de pixel do bloco. Em alguns exemplos, o codificador de vídeo pode sinalizar a paleta e / ou os valores de índice em um fluxo de bits codificado. Por sua vez, o decodificador de vídeo pode obter, a partir de um fluxo de bits codificado, uma paleta para um bloco, bem como valores de índice para os pixels individuais do bloco. O decodificador de vídeo pode relacionar os valores de índice dos pixels com as entradas da paleta para reconstruir os vários valores de pixel do bloco.
[029] De acordo com vários exemplos discutidos abaixo, esta descrição descreve técnicas para melhorar a eficiência de codificação ao codificar blocos de dados de vídeo com um modo de codificação baseado em paleta. Exemplos desta descrição incluem técnicas para codificar dados de vídeo usando um modo de codificação baseado em paleta e técnicas para codificar elementos de sintaxe relacionados ao modo de codificação baseado em paleta. Em alguns exemplos, as técnicas desta descrição referem-se a elementos de sintaxe de codificação utilizados por um decodificador de vídeo para determinar e / ou reconstruir uma paleta para um bloco de dados de video.
[030] Em alguns exemplos, as técnicas de codificação baseadas em paletas desta descrição podem ser configuradas para uso com um ou mais padrões de codificação de vídeo. Alguns exemplos de padrões de codificação de vídeo incluem ITU-T H.261, ISO / IEC MPEG-1 Visual, ITU-T H.262 ou ISO / IEC MPEG-2 Visual, ITU-T H.263, ISO / IEC MPEG-4 Visual E UIT-T H.264 (também conhecido como ISO / IEC MPEG-4 AVC), incluindo suas extensões de Codificação de Vídeo (SVC) e extensões Codificação de Vídeo Multi-Vista (MVC). Em outro exemplo, as técnicas de codificação baseadas em paletas podem ser configuradas para uso com a Codificação de Vídeo de Alta Eficiência (HEVC). HEVC é um novo padrão de codificação de vídeo desenvolvido pela Equipe de Colaboração Conjunta sobre Codificação de Vídeo (JCT-VC) do Grupo de Especialistas em Codificação de Vídeo ITU-T (VCEG) e ISO / IEC Grupo de Especialistas em Imagem com Movimento)(MPEG).
[031] Recentemente, o design do HEVC foi finalizado pela Equipe Conjunta de Colaboração em Codificação de Vídeo (JCT-VC) do Grupo de Especialistas em Codificação de Vídeo ITU-T (VCEG) e ISO / IEC Grupo de Especialistas em Imagem com Movimento (MPEG). A última especificação HEVC, referida como HEVC Versão 1 ou HEVCl a seguir, é descrita em "ITU-T H.265 (VI)", que a partir de 24 de março de 2015 está disponível em http://www.itu.int/ ITU-T / recommendations / rec.aspx? Rec = l 1885 & lang = en. Documento ITU-T H.265, SÉRIE H: SISTEMAS AUDIOVISUAIS E MULTIMÉDIA, Infraestrutura de Serviços Audiovisuais - Codificação de Vídeo em Movimento, "Codificação de Vídeo de Alta Eficiência", abril de 2013 também descreve o padrão HEVC. Uma especificação recente de extensões de alcance, referida como RExt a seguir, é descrita em "ITU-T H.265 (V2)", que, a partir de 24 de março de 2015, está disponível em http://www.itu.int/ITU- T / recommendations / rec.aspx? Rec = 12296 & lang = pt.
[032] Para fornecer uma codificação mais eficiente do conteúdo gerado pela tela, o JCT-VC está desenvolvendo uma extensão para o padrão HEVC, designado como padrão de codificação de conteúdo de tela HEVC (SCC). Um projeto de trabalho recente do padrão HEVC SCC, referido como "HEVC SCC Draft 2" ou "WD2", está descrito no documento JCTVC-S1005, R. Joshi e J. Xu, "HEVC screen contente coding draft text 2” " Equipe colaborativa conjunta sobre codificação de Vídeo (JCT-VC) da ITU-T SG 16 WP 3 e ISO / IEC JTC 1 / SC 29 / WG 11, 19a Encontro: Strasbourg, FR, 17-24 de outubro de 2014.
[033] A figura 1 é um diagrama de blocos que ilustra um exemplo de sistema de codificação de vídeo 10 que pode utilizar as técnicas desta descrição para codificação de vídeo baseada em paletas. Tal como aqui utilizado, o termo "codificador de vídeo" refere-se genericamente a codificadores de vídeo e decodificadores de vídeo. Nesta descrição, os termos "codificação de vídeo" ou "codificação" podem se referir genericamente à codificação de vídeo ou à decodificação de vídeo. O codificador de vídeo 20 e o decodificador de vídeo 30 do sistema de codificação de vídeo 10 representam exemplos de dispositivos que podem ser configurados para executar técnicas de codificação de vídeo baseadas em paletas de acordo com vários exemplos descritos nesta descrição. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar seletivamente vários blocos de dados de vídeo, tais como CUs ou PUs em codificação HEVC, usando codificação baseada em paleta ou codificação não baseada em paletas. Os modos de codificação baseados em paletas podem se referir a vários modos de codificação temporal inter-preditivos ou modos de codificação espaciais intra-preditivos, como os vários modos de codificação especificados pelo padrão HEVC. No entanto, deve entender-se que as técnicas dessa descrição podem ser usadas com quaisquer técnicas e / ou padrões de codificação de vídeo que utilizem um modo de codificação baseado em paleta.
[034] Conforme ilustrado na figura 1, o sistema de codificação de vídeo 10 inclui um dispositivo de fonte 12 e um dispositivo de destino 14. O dispositivo de fonte 12 gera dados de vídeo codificados. Consequentemente, o dispositivo de fonte 12 pode ser referido como um dispositivo de codificação de vídeo ou um aparelho de codificação de vídeo. O dispositivo de destino 14 pode decodificar os dados de vídeo codificados gerados pelo dispositivo de fonte 12. Consequentemente, o dispositivo de destino 14 pode ser referido como um dispositivo de decodificação de vídeo ou um aparelho de decodificação de vídeo. O dispositivo de fonte 12 e o dispositivo de destino 14 podem ser exemplos de dispositivos de codificação de vídeo ou aparelhos de codificação de vídeo.
[035] O dispositivo de fonte 12 e o dispositivo de destino 14 podem compreender uma ampla gama de dispositivos, incluindo computadores de mesa, dispositivos de computação móvel, computadores notebook (por exemplo, laptop), computadores tablet, conversores, aparelhos telefônicos, como os assim chamados "telefones inteligentes”, televisores, câmeras, dispositivos de exibição, players de mídia digital, consoles de jogos de vídeo, computadores in-car ou similares.
[036] O dispositivo de destino 14 pode receber dados de vídeo codificados do dispositivo de fonte 12 através de um canal 16. O canal 16 pode compreender um ou mais meios ou dispositivos capazes de mover os dados de vídeo codificados do dispositivo de fonte 12 para o dispositivo de destino 14. Em um exemplo, O canal 16 pode compreender um ou mais meios de comunicação que permitem que o dispositivo de origem 12 transmita dados de vídeo codificados diretamente para o dispositivo de destino 14 em tempo real. Neste exemplo, o dispositivo fonte 12 pode modular os dados de vídeo codificados de acordo com um padrão de comunicação, tal como um protocolo de comunicação sem fio, e pode transmitir os dados de vídeo modulados para o dispositivo de destino 14. Um ou mais meios de comunicação podem incluir dispositivos sem fio e / ou meios de comunicação com fio, como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão física. Um ou mais meios de comunicação podem fazer parte de uma rede baseada em pacotes, como uma rede de área local, uma rede de área ampla ou uma rede global (por exemplo, a Internet). Um ou mais meios de comunicação podem incluir roteadores, comutadores, estações base ou outro equipamento que facilitem a comunicação do dispositivo fonte 12 para o dispositivo de destino 14.
[037] Em outro exemplo, o canal 16 pode incluir um meio de armazenamento que armazena dados de vídeo codificados gerados pelo dispositivo de fonte 12. Neste exemplo, o dispositivo de destino 14 pode acessar o meio de armazenamento através do acesso ao disco ou do cartão. O meio de armazenamento pode incluir uma variedade de meios de armazenamento de dados acessados localmente, como discos Blu-ray, DVDs, CD-ROMs, memória flash ou outros meios de armazenamento digitais adequados para armazenar dados de vídeo codificados.
[038] Em um exemplo adicional, o canal 16 pode incluir um servidor de arquivos ou outro dispositivo de armazenamento intermediário que armazena dados de vídeo codificados gerados pelo dispositivo de fonte 12. Neste exemplo, o dispositivo de destino 14 pode acessar dados de vídeo codificados armazenados no servidor de arquivos ou outros dispositivos de armazenamento intermediários via transmissão contínua ou download. O servidor de arquivos pode ser um tipo de servidor capaz de armazenar dados de vídeo codificados e transmitir os dados de vídeo codificados para o dispositivo de destino 14. Os servidores de arquivos a título de exemplo incluem servidores web (por exemplo, para um site), servidores de protocolo de transferência de arquivos (FTP), dispositivos de armazenamento anexado à rede (NAS) e unidades de disco locais.
[039] O dispositivo de destino 14 pode acessar os dados de vídeo codificados através de uma conexão de dados padrão, como uma conexão à Internet. Os tipos de exemplo de conexões de dados podem incluir canais sem fio (por exemplo, conexões Wi-Fi), conexões com fio (por exemplo, DSL, modem a cabo, etc.) ou combinações de ambos que são adequadas para acessar dados de vídeo codificados armazenados em um servidor de arquivos. A transmissão de dados de vídeo codificados do servidor de arquivos pode ser uma transmissão de streaming (fluxo contínuo), uma transmissão de download ou uma combinação de ambos.
[040] As técnicas desta descrição para codificação de vídeo baseada em paletas não se limitam a aplicativos ou configurações sem fio. As técnicas podem ser aplicadas à codificação de vídeo em apoio a uma variedade de aplicações multimídia, como transmissões televisivas por sistema terrestre, transmissões televisivas por cabo, transmissões televisivas por satélite, transmissão de vídeo de fluxo, por exemplo, através da Internet, codificação de dados de vídeo para armazenamento em um meio de armazenamento de dados, decodificação de dados de vídeo armazenados em um meio de armazenamento de dados ou outras aplicações. Em alguns exemplos, o sistema de codificação de vídeo 10 pode ser configurado para suportar transmissão de vídeo de via unidirecional ou bidirecional para suportar aplicativos como transmissão de vídeo, reprodução de vídeo, transmissão de vídeo e / ou video-telefonia.
[041] O sistema de codificação de vídeo 10 ilustrado na figura 1 é apenas um exemplo. As técnicas desta descrição podem aplicar-se a casos de uso de codificação de vídeo (por exemplo, codificação de vídeo ou decodificação de vídeo) que não incluem necessariamente qualquer comunicação de dados entre os dispositivos de codificação e decodificação. Em outros exemplos, os dados são recuperados de uma memória local, transmitidos através de uma rede, ou outros. Um dispositivo de codificação de vídeo pode codificar e armazenar dados na memória, e / ou um dispositivo de decodificação de vídeo pode recuperar e decodificar dados da memória. Em muitos exemplos, a codificação e decodificação é realizada por dispositivos que não se comunicam entre si, mas simplesmente codificam dados na memória e / ou recuperam e decodificam dados da memória.
[042] No exemplo da figura 1, o dispositivo de fonte 12 inclui uma fonte de vídeo 18, um codificador de vídeo 20 e uma interface de saída 22. Em alguns exemplos, a interface de saída 22 pode incluir um modulador / desmodulador (modem) e / ou um transmissor. A fonte de vídeo 18 pode incluir um dispositivo de captura de vídeo, por exemplo, uma câmera de vídeo, um arquivo de vídeo contendo dados de vídeo capturados anteriormente, uma interface de feed de vídeo (transmissão de vídeo) para receber dados de vídeo de um provedor de conteúdo de vídeo e / ou um sistema de gráficos de computador para gerar dados de vídeo ou uma combinação de tais fontes de dados de vídeo.
[043] O codificador de vídeo 20 pode codificar dados de vídeo da fonte de vídeo 18. Em alguns exemplos, o dispositivo de fonte 12 transmite diretamente os dados de vídeo codificados para o dispositivo de destino 14 através da interface de saída 22. Em outros exemplos, os dados de vídeo codificados também podem ser armazenados em um meio de armazenamento ou um servidor de arquivos para acesso posterior pelo dispositivo de destino 14 para decodificação e / ou reprodução.
[044] No exemplo da figura 1, o dispositivo de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30 e um dispositivo de exibição 32. Em alguns exemplos, a interface de entrada 28 inclui um receptor e / ou um modem. A interface de entrada 28 pode receber dados de vídeo codificados através do canal 16. O dispositivo de exibição 32 pode ser integrado ou pode ser externo ao dispositivo de destino 14. Em geral, o dispositivo de exibição 32 exibe dados de vídeo decodificados. O dispositivo de exibição 32 pode compreender uma variedade de dispositivos de exibição, tais como um visor de cristal líquido (LCD), um visor de plasma, um visor de diodo emissor de luz orgânico (OLED) ou outro tipo de dispositivo de exibição.
[045] Esta descrição pode, em geral, referir- se ao codificador de vídeo 20 "sinalização" ou "transmissão" de certas informações a outro dispositivo, como o decodificador de vídeo 30. O termo "sinalização" ou "transmissão" pode geralmente referir-se à comunicação de elementos de sintaxe e / ou outros dados usados para decodificar os dados de vídeo compactados. Essa comunicação pode ocorrer em tempo real ou quase em tempo real. Alternativamente, essa comunicação pode ocorrer ao longo de um período de tempo, como pode ocorrer ao armazenar elementos de sintaxe em um meio de armazenamento legível por computador em um fluxo de bits codificado no momento da codificação, que pode ser recuperado por um dispositivo de decodificação a qualquer momento depois de ser armazenado neste meio. Assim, enquanto o decodificador de vídeo 30 pode ser referido como "recebendo" certas informações, a recepção de informação não ocorre necessariamente em tempo real ou quase em tempo real e pode ser recuperada de um meio em algum momento após o armazenamento.
[046] O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser implementados como qualquer um de uma variedade de circuitos adequados, tais como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados específicos da aplicação (ASICs), matrizes de portas de campo programável (FPGAs), lógica discreta, hardware ou qualquer combinação destes. Se as técnicas forem implementadas parcialmente no software, um dispositivo poderá armazenar instruções para o software em um meio de armazenamento adequado e não transitório legível por computador e poderá executar as instruções em hardware usando um ou mais processadores para executar as técnicas desta descrição. Qualquer um dos itens acima (incluindo hardware, software, uma combinação de hardware e software, etc.) pode ser considerado como sendo um ou mais processadores. Cada um dos codificadores de vídeo 20 e decodificador de vídeo 30 podem ser incluídos em um ou mais codificadores ou decodificadores, que podem ser integrados como parte de um codificador / decodificador combinado (CODEC) em um dispositivo respectivo.
[047] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 operam de acordo com um padrão de compressão de vídeo, tal como o padrão HEVC mencionado acima. Além do padrão HEVC básico, há esforços contínuos para produzir codificação de vídeo escalável, codificação de vídeo multi-vista e extensões de codificação 3D para HEVC. Além disso, podem ser proporcionados modos de codificação baseados em paletas, por exemplo, como descrito nesta descrição, para a extensão do padrão HEVC. Em alguns exemplos, as técnicas descritas nesta descrição para codificação baseada em paleta podem ser aplicadas a codificadores e decodificadores configurados para operação de acordo com outros padrões de codificação de vídeo. Conseqüentemente, a aplicação de um modo de codificação baseado em paleta para codificação de unidades de codificação (UCs) ou unidades de predição (PUs) em um codec HEVC é descrita para fins de exemplo.
[048] No HEVC e outros padrões de codificação de vídeo, uma sequência de vídeo normalmente inclui uma série de imagens. As imagens também podem ser referidas como "quadros". Uma imagem pode incluir três matrizes de amostras, denominadas SL, Scb, e Scr .SL é uma matriz bidimensional (por exemplo, um bloco) de amostras de luma. Scb é uma matriz bidimensional de amostras de crominância Cb. Scr é uma matriz bidimensional de amostras de crominância Cr. As amostras de crominância também podem ser aqui referidas como amostras de "croma". Em outros casos, uma imagem pode ser monocromática e pode incluir apenas uma série de amostras de luma.
[049] Para gerar uma representação codificada de uma imagem, em HEVC, o codificador de vídeo 20 pode gerar um conjunto de unidades de codificação em árvore (CTUs). Cada uma das CTUs pode ser um bloco de codificação em árvore de amostras de luma, dois blocos de codificação de em árvore correspondentes de amostras de croma e estruturas de sintaxe usadas para codificar as amostras dos blocos de codificação em árvore. Um bloco de codificação em árvore pode ser um bloco de amostras NxN. Uma CTU também pode ser referida como um "bloco em árvore" ou uma "maior unidade de codificação" (LCU). As CTUs do HEVC podem ser amplamente análogas aos macroblocos de outros padrões, como H.264 / AVC. No entanto, uma CTU não é necessariamente limitada a um tamanho específico e pode incluir uma ou mais unidades de codificação (UC). Um slice pode incluir um número inteiro de CTUs ordenadas consecutivamente na varredura rastreada. Um slice codificado pode incluir um cabeçalho de slice e dados de slice. O cabeçalho de slice de um slice pode ser uma estrutura de sintaxe que inclui elementos de sintaxe que fornecem informações sobre o slice. Os dados do slice podem incluir CTUs codificadas do slice.
[050] Esta descrição pode usar o termo "unidade de vídeo" ou "bloco de vídeo" ou "bloco" para se referir a um ou mais blocos de amostra e estruturas de sintaxe usadas para codificar amostras de um ou mais blocos de amostras. Os tipos de exemplo de unidades de vídeo ou blocos podem incluir CTUs, CUs, PUs, unidades de transformada (TUs), macroblocos, partições de macrobloco e assim por diante. Em alguns contextos, a discussão de PUs pode ser trocada com a discussão de macroblocos ou partições de macrobloco.
[051] Para gerar uma CTU codificada, o codificador de vídeo 20 pode executar de forma recursiva partição de quad-tree nos blocos em árvore de codificação de uma CTU para dividir os blocos em árvore de codificação em blocos de codificação, daí o nome "unidades de decodificação em árvore". Um bloco de codificação é um bloco NxN de amostras. Um CU pode ser um bloco de codificação de amostras de luma e dois blocos de codificação correspondentes de amostras de croma de uma imagem que possui uma matriz de amostra de luma, uma matriz de amostra de Cb e uma matriz de amostras de Cr e estruturas de sintaxe usadas para codificar as amostras dos blocos de codificação. O codificador de vídeo 20 pode dividir um bloco de codificação de um CU em um ou mais blocos de predição. Um bloco de predição pode ser um bloco de amostras retangular (por exemplo, quadrado ou não quadrado) em que a mesma predição é aplicada. Uma unidade de predição (PU) de uma CU pode ser um bloco de predição de amostras de luma, dois blocos de predição correspondentes de amostras de croma de uma imagem e estruturas de sintaxe usadas para prever as amostras do bloco de predição. O codificador de vídeo 20 pode gerar blocos de luma, Cb e Cr preditivos para blocos de predição luma, Cb e Cr de cada PU do CU.
[052] O codificador de vídeo 20 pode usar a intrapredição ou a interpredição para gerar os blocos preditivos para um PU. Se o codificador de vídeo 20 usar a intrapredição para gerar os blocos preditivos de um PU, o codificador de vídeo 20 poderá gerar os blocos preditivos do PU com base em amostras decodificadas da imagem associada ao PU.
[053] Se o codificador de vídeo 20 usar a inter predição para gerar os blocos preditivos de um PU, o codificador de vídeo 20 poderá gerar os blocos preditivos do PU com base em amostras decodificadas de uma ou mais imagens que não a imagem associada ao PU. O codificador de vídeo 20 pode usar uma pré-predição ou bi-predição para gerar os blocos preditivos de um PU. Quando o codificador de vídeo 20 usa uni-predição para gerar os blocos preditivos para um PU, o PU pode ter um vetor de movimento único (MV). Quando o codificador de vídeo 20 usa bi- predição para gerar os blocos preditivos para um PU, o PU pode ter dois MVs.
[054] Após o codificador de vídeo 20 gerar blocos preditivos (por exemplo, blocos luma, Cb e Cr preditivos) para uma ou mais PUs de um CU, o codificador de vídeo 20 pode gerar blocos residuais para o CU. Cada amostra em um bloco residual da CU pode indicar uma diferença entre uma amostra em um bloco preditivo de um PU da CU e uma amostra correspondente em um bloco de codificação da CU. Por exemplo, o codificador de vídeo 20 pode gerar um bloco residual de luma para o CU. Cada amostra no bloco residual de luma do CU indica uma diferença entre uma amostra de luma em um dos blocos de luma preditivos da CU e uma amostra correspondente no bloco de codificação luma original da CU. Além disso, o codificador de vídeo 20 pode gerar um bloco residual de Cb para o CU. Cada amostra no bloco residual Cb da CU pode indicar uma diferença entre uma amostra Cb em um dos blocos Cb preditivos da CU e uma amostra correspondente no bloco de codificação Cb original da CU. O codificador de vídeo 20 também pode gerar um bloco residual Cr para o CU. Cada amostra no bloco residual do CU's Cr pode indicar uma diferença entre uma amostra de Cr em um dos blocos Cr críticos da CU e uma amostra correspondente no bloco de codificação Cr original da CU.
[055] Além disso, o codificador de vídeo 20 pode usar particionamento quad-tree para decompor os blocos residuais (por exemplo, blocos residuais Luma, Cb e Cr) de um CU em um ou mais blocos de transformada (por exemplo, blocos de transformada luma, Cb e Cr). Um bloco de transformada pode ser um bloco retangular de amostras em que a mesma transformada é aplicada. Uma unidade de transformada (TU) de uma CU pode ser um bloco de transformada de amostras de luma, dois blocos de transformada correspondentes de amostras de croma e estruturas de sintaxe usadas para transformar as amostras do bloco de transformada. Assim, cada TU de uma CU pode estar associada a um bloco de transformada de luma, um bloco de transformada Cb e um bloco de transformada Cr. O bloco de transformada luma associado à TU pode ser um sub- bloco do bloco residual do luma da CU. O bloco de transformada de Cb pode ser um sub bloco do bloco residual Cb de CU's. O bloco de transformada Cr pode ser um sub bloco do bloco residual Cr de CU's.
[056] O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada para gerar um bloco de coeficientes para uma TU. Um bloco de coeficientes pode ser uma matriz bidimensional de coeficientes de transformada. Um coeficiente de transformada pode ser uma quantidade escalar. Por exemplo, o codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de luma de uma TU para gerar um bloco de coeficiente de luma para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada Cb de uma TU para gerar um bloco de coeficientes Cb para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada Cr de uma TU para gerar um bloco de coeficientes Cr para a TU.
[057] Depois de gerar um bloco de coeficientes (por exemplo, um bloco de coeficiente de luma, um bloco de coeficiente de Cb ou um bloco de coeficiente de Cr), o codificador de vídeo 20 pode quantificar o bloco de coeficientes. A quantificação geralmente se refere a um processo em que os coeficientes de transformada são quantificados para possivelmente reduzir a quantidade de dados usados para representar os coeficientes de transformada, proporcionando uma compressão adicional. Após o codificador de vídeo 20 quantificar um bloco de coeficientes, o codificador de vídeo 20 pode codificar por entropia os elementos de sintaxe de codificação que indicam os coeficientes de transformada quantificados. Por exemplo, o codificador de vídeo 20 pode executar Codificação Aritmética Binária Adaptativa de Contexto (CAB AC) nos elementos de sintaxe indicando os coeficientes de transformada quantificados. O codificador de vídeo 20 pode produzir os elementos de sintaxe codificados por entropia em um fluxo de bits. O fluxo de bits também pode incluir elementos de sintaxe que não são codificados por entropia.
[058] O codificador de vídeo 20 pode produzir um fluxo de bits que inclui os elementos de sintaxe codificados por entropia. O fluxo de bits pode incluir uma seqüência de bits que forma uma representação de imagens codificadas e dados associados. O fluxo de bits pode compreender uma seqüência de unidades de camada de abstração de rede (NAL). Cada uma das unidades NAL inclui um cabeçalho de unidade NAL e encapsula uma carga útil de seqüência de byte bruto (RBSP). O cabeçalho da unidade NAL pode incluir um elemento de sintaxe que indica um código de tipo de unidade NAL. O código do tipo de unidade NAL especificado pelo cabeçalho da unidade NAL de uma unidade NAL indica o tipo da unidade NAL. Um RBSP pode ser uma estrutura de sintaxe contendo um número inteiro de bytes encapsulados dentro de uma unidade NAL. Em alguns casos, um RBSP inclui zero bits.
[059] Diferentes tipos de unidades NAL podem encapsular diferentes tipos de RBSPs. Por exemplo, um primeiro tipo de unidade NAL pode encapsular um RBSP para um conjunto de parâmetros de imagem (PPS), um segundo tipo de unidade NAL pode encapsular um RBSP para Um slice codificado, um terceiro tipo de unidade NAL pode encapsular um RBSP para informação de aprimoramento suplementar (SEI), e assim por diante. As unidades NAL que encapsulam RBSPs para dados de codificação de vídeo (em oposição a RBSPs para conjuntos de parâmetros e mensagens SEI) podem ser referidas como unidades NAL de camada de codificação de vídeo (VCL).
[060] O decodificador de vídeo 30 pode receber um fluxo de bits gerado pelo codificador de vídeo 20. Além disso, o decodificador de vídeo 30 pode obter elementos de sintaxe do fluxo de bits. Por exemplo, o decodificador de vídeo 30 pode analisar o fluxo de bits para decodificar elementos de sintaxe do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base, pelo menos em parte, nos elementos de sintaxe obtidos (por exemplo, decodificados) do fluxo de bits. O processo para reconstruir os dados de vídeo pode ser geralmente recíproco para o processo realizado pelo codificador de vídeo 20. Por exemplo, o decodificador de vídeo 30 pode usar MVs de PUs para determinar blocos de amostra inter- preditivos (por exemplo, blocos inter-preditivos) para as PUs de um CU atual. Além disso, o decodificador de vídeo 30 pode inversamente quantificar blocos de coeficientes de transformada associados a TUs da CU atual. O decodificador de vídeo 30 pode executar transformadas inversas nos blocos de coeficientes de transformada para reconstruir blocos de transformada associados às TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de codificação da CU atual, adicionando as amostras dos blocos de amostra preditivos para PUs da CU corrente para amostras correspondentes dos blocos de transformada das TUs da UC atual. Ao reconstruir os blocos de codificação para cada CU de uma imagem, o decodificador de vídeo 30 pode reconstruir a imagem.
[061] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para executar a codificação baseada em paletas. Por exemplo, na codificação baseada em paletas, em vez de executar as técnicas de codificação intra-preditivas ou inter-preditivas descritas acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar uma paleta chamada como uma tabela de cores ou valores de pixels que representam os dados de vídeo de uma área específica (por exemplo, um determinado bloco). Desta forma, ao invés de codificar valores de pixel reais ou seus resíduos para um bloco atual de dados de vídeo, o codificador de vídeo pode codificar valores de índice para um ou mais dos valores de pixel do bloco atual, onde os valores de índice indicam entradas na paleta que são usados para representar os valores de pixel do bloco atual (por exemplo, o índice pode ser mapeado para um conjunto de valores Y, Cr e Cb ou para um conjunto de valores R, G e B).
[062] Por exemplo, o codificador de vídeo 20 pode codificar um bloco de dados de vídeo, determinando uma paleta para o bloco, localizando uma entrada na paleta com um valor representativo do valor de um ou mais pixels individuais do bloco e codificando o bloco com valores de índice que indicam a entrada na paleta usada para representar um ou mais valores de pixel individuais do bloco. Além disso, o codificador de vídeo 20 pode sinalizar os valores de índice em um fluxo de bits codificado. Por sua vez, um dispositivo de decodificação de vídeo (por exemplo, decodificador de vídeo 30) pode obter, a partir do fluxo de bits codificado, a paleta para um bloco, bem como valores de índice usados para determinar os vários pixels individuais do bloco usando a paleta. O decodificador de vídeo 30 pode coincidir com os valores de índice dos pixels individuais com as entradas da paleta para reconstruir os valores de pixel do bloco. Nos casos em que um valor de pixel de um pixel individual não for suficientemente próximo a qualquer um dos valores de pixel representados pela paleta correspondente para o bloco, o decodificador de vídeo 30 poderá identificar um pixel individual como um pixel de escape, para fins de codificação baseada em paleta. O valor de pixel de um pixel de escape pode ser codificado explicitamente ao invés de ser por via de um índice de paleta.
[063] Em outro exemplo, o codificador de vídeo 20 pode codificar um bloco de dados de vídeo de acordo com as seguintes operações. O codificador de vídeo 20 pode determinar valores residuais de predição para pixels individuais do bloco, determinar uma paleta para o bloco e localizar uma entrada (por exemplo, valor de índice) na paleta com um valor representativo do valor de um ou mais dos valores residuais de predição dos pixels individuais. Além disso, o codificador de vídeo 20 pode codificar o bloco com valores de índice que indicam a entrada na paleta usada para representar o valor residual de predição correspondente para cada pixel individual do bloco. O decodificador de vídeo 30 pode obter, a partir de um fluxo de bits codificado sinalizado pelo dispositivo de fonte 12, uma paleta para um bloco, bem como valores de índice para os valores residuais de predição correspondentes aos pixels individuais do bloco. Conforme descrito, os valores do índice podem corresponder a entradas na paleta associada ao bloco atual. Por sua vez, o decodificador de vídeo 30 pode relacionar os valores de índice dos valores residuais de predição para entradas da paleta para reconstruir os valores residuais de predição do bloco. Os valores residuais de predição podem ser adicionados aos valores de predição (por exemplo, obtidos usando a intra- ou inter- predição) para reconstruir os valores de pixels do bloco.
[064] Conforme descrito em mais detalhes abaixo, a idéia básica da codificação baseada em paleta é que, para um determinado bloco de dados de vídeo a ser codificado, o codificador de vídeo 20 possa derivar uma paleta que inclua os valores de pixel mais dominantes no bloco atual. Por exemplo, a paleta pode se referir a um número de valores de pixels que são determinados ou assumidos como sendo dominantes e / ou representativos da CU atual. O codificador de vídeo 20 pode primeiro transmitir o tamanho e os elementos da paleta para o decodificador de vídeo 30. Além disso, o codificador de vídeo 20 pode codificar os valores de pixel no bloco dado de acordo com uma certa ordem de varredura. Para cada pixel incluído no bloco dado, o codificador de vídeo 20 pode sinalizar o valor do índice que mapeia o valor do pixel para uma entrada correspondente na paleta. Se o valor do pixel não for suficientemente próximo ao valor de qualquer uma das entradas da paleta (por exemplo, próximo o suficiente em valor comparado com um limite predeterminado), esse pixel será definido como um "pixel de escape". De acordo com a codificação baseada em paleta, o codificador de vídeo 20 pode codificar e sinalizar um valor de índice que é reservado para um pixel de escape, isto é, para indicar que é um pixel de escape e não um pixel para o qual exista uma entrada na paleta. Em alguns exemplos, o codificador de vídeo 20 também pode codificar e sinalizar o valor de pixel ou um valor residual (ou suas versões quantificadas) para um pixel de escape incluído no bloco dado.
[065] Ao receber o fluxo de bits de vídeo codificado sinalizado pelo codificador de vídeo 20, o decodificador de vídeo 30 pode primeiro determinar a paleta com base na informação recebida do codificador de vídeo 20. O decodificador de vídeo 30 pode então mapear os valores de índice recebidos associados aos locais de pixel no dado bloco para entradas da paleta para reconstruir os valores de pixels do bloco dado. Em alguns casos, o decodificador de vídeo 30 pode determinar que um pixel de um bloco codificado por paleta é um pixel de escape, tal como determinando que o pixel é codificado por paletas com um valor de índice reservado para pixels de escape. Nos casos em que o decodificador de vídeo 30 identifica um pixel de escape em um bloco codificado por paleta, o decodificador de vídeo 30 pode receber o valor de pixel ou um valor residual (ou versões quantificadas) para um pixel de escape incluído no bloco dado. O decodificador de vídeo 30 pode reconstruir o bloco codificado por paletas, mapeando os valores de pixel individuais para as entradas de paleta correspondentes, e usando o valor de pixel ou o valor residual (ou suas versões quantificadas) para reconstruir quaisquer pixels de escape incluídos no bloco codificado por paleta.
[066] O codificador de vídeo 20 e / ou o decodificador de vídeo 30 podem ser configurados para operar de acordo com as técnicas descritas nesta descrição, como será descrito em mais detalhes abaixo. Em geral, o codificador de vídeo 20 e / ou o decodificador de vídeo 30 podem ser configurados para codificar e decodificar dados de vídeo usando um ou mais modos de codificação de paleta, em que os modos de codificação de paleta não incluem um modo de compartilhamento de paleta. As técnicas desta descrição incluem um dispositivo de codificação de vídeo, como o codificador de vídeo 20, sendo configurado para determinar um primeiro compartimento de um primeiro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. O codificador de vídeo 20 pode ser ainda configurado para codificar um fluxo de bits. O fluxo de bits pode incluir o primeiro elemento de sintaxe. O fluxo de bits também não pode incluir um segundo elemento de sintaxe que indique um modo de compartilhamento de paleta. Em alguns exemplos, determinar o primeiro compartimento do primeiro elemento de sintaxe compreende a determinação do primeiro compartimento do primeiro elemento de sintaxe usando uma codificação aritmética binária adaptável ao contexto. Em outros exemplos, determinar o primeiro bin do primeiro elemento de sintaxe compreende a determinação do primeiro compartimento do primeiro elemento de sintaxe usando um ou mais contextos. Em alguns exemplos de utilização de um ou mais contextos, um ou mais contextos podem ser baseados em pelo menos um de um número previsto de entradas de codificação de paleta ou um tamanho de bloco.
[067] Além disso, esta descrição descreve o codificador de vídeo 20 sendo configurado para determinar que um pixel de corrente é um primeiro pixel em uma linha em uma ordem de varredura. O codificador de vídeo 20 pode ainda determinar que um pixel vizinho situado acima do pixel atual está disponível. Em resposta à determinação de que o pixel atual é o primeiro pixel na linha na ordem de varredura e à determinação de que o pixel vizinho situado acima do pixel atual está disponível, o codificador de vídeo 20 pode ser ainda configurado para derivar a codificação de um primeiro elemento de sintaxe em um fluxo de bits, em que o primeiro elemento de sintaxe indica um tipo de execução e codifica um restante do fluxo de bits.
[068] Além disso, as técnicas desta descrição incluem o codificador de vídeo 20 sendo configurado para determinar um primeiro elemento de sintaxe que indica um tamanho de paleta máximo permitido e apresenta um valor mínimo de zero. O codificador de vídeo 20 também pode ser configurado para codificar um fluxo de bits que inclui o primeiro elemento de sintaxe. Em alguns exemplos, o fluxo de bits inclui ainda um segundo elemento de sintaxe que indica um tamanho de paleta preditivo máximo e apresenta um valor mínimo de zero. Em alguns exemplos, o primeiro elemento de sintaxe apresenta um valor máximo de 4096 e o segundo elemento de sintaxe apresenta um valor máximo de 8192. Em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo de 4095 e o segundo elemento de sintaxe possui um valor máximo de 4095. Em outros exemplos, o primeiro elemento de sintaxe apresenta um valor máximo de 4095 e o segundo elemento de sintaxe apresenta um valor máximo de 8191. Ainda em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo igual a um número de pixels em uma maior unidade de codificação e o segundo elemento de sintaxe apresenta um valor máximo igual a uma constante positiva, como 2, multiplicada pelo valor máximo do primeiro elemento de sintaxe. Em outros exemplos, o fluxo de bits inclui outro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. Em alguns exemplos disso, este elemento de sintaxe é representado por um código de Golomb Rice, um código de Golomb exponencial, um código de Rice Truncado ou um código unário. Em outros exemplos disso, este elemento de sintaxe é representado por um código de Golomb Rice truncado, um código de Golomb Exponencial truncado, um código de Rice Truncado, um código Unário truncado ou um código que também é usado para codificar um terceiro elemento de sintaxe incluído no fluxo de bits codificado que indica se um índice de paleta é copiado de um índice de paleta em uma linha acima de um pixel atual ou está explicitamente codificado no fluxo de bits codificado. Em alguns exemplos, este elemento de sintaxe é representado por um modo de Rice Truncado. Em alguns exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas apresenta um valor máximo que é igual ao número de pixels em um bloco atual dos dados de vídeo.
[069] Além disso, esta descrição descreve um dispositivo de codificação de vídeo, tal como o decodificador de vídeo 30, sendo configurado para receber um fluxo de bits codificado. O fluxo de bits codificado não inclui um primeiro elemento de sintaxe que indica um modo de compartilhamento de paleta. Além disso, o fluxo de bits codificado inclui um segundo elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. O decodificador de vídeo 30 pode ser ainda configurado para decodificar um primeiro bin do segundo elemento de sintaxe. Em alguns exemplos, a decodificação do primeiro compartimento do segundo elemento de sintaxe compreende decodificar o primeiro compartimento do segundo elemento de sintaxe usando um elemento de codificação aritmética binária adaptável ao contexto. Em outros exemplos, a decodificação do primeiro compartimento do segundo elemento de sintaxe compreende a decodificação do primeiro compartimento do segundo elemento de sintaxe usando um ou mais contextos. Em alguns exemplos de utilização de um ou mais contextos, um ou mais contextos podem ser baseados em pelo menos um de um número previsto de entradas de codificação de paleta ou um tamanho de bloco.
[070] Além disso, as técnicas desta descrição incluem o decodificador de vídeo 30 que está configurado para receber um fluxo de bits codificado. O fluxo de bits codificado pode incluir um primeiro elemento de sintaxe que indica um tipo de execução. O decodificador de vídeo 30 pode ainda ser configurado para determinar que um pixel atual é um primeiro pixel em uma linha em uma ordem de varredura. O decodificador de vídeo 30 pode ainda determinar que um pixel vizinho situado acima do pixel atual está disponível. Em resposta à determinação de que um pixel atual é um primeiro pixel em uma linha em uma ordem de varredura e à determinação de que um pixel vizinho situado acima do pixel atual está disponível, o decodificador de vídeo 30 pode ignorar a decodificação do primeiro elemento de sintaxe.
[071] Além disso, as técnicas desta descrição incluem o decodificador de vídeo 30 sendo configurado para receber um fluxo de bits codificado que inclui um primeiro elemento de sintaxe que indica um tamanho de paleta máximo permitido e apresenta um valor mínimo de zero. O decodificador de vídeo 30 pode ser ainda configurado para decodificar o fluxo de bits codificado. Em alguns exemplos, o fluxo de bits codificado inclui ainda um segundo elemento de sintaxe que indica um tamanho de paleta preditivo máximo e apresenta um valor mínimo de zero. Em alguns exemplos, o primeiro elemento de sintaxe apresenta um valor máximo de 4096 e o segundo elemento de sintaxe apresenta um valor máximo de 8192. Em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo de 4095 e o segundo elemento de sintaxe possui um valor máximo de 4095. Em outros exemplos, o primeiro elemento de sintaxe apresenta um valor máximo de 4095 e o segundo elemento de sintaxe apresenta um valor máximo de 8191. Ainda em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo igual a um número de pixels em uma maior unidade de codificação e o segundo elemento de sintaxe apresenta um valor máximo igual a uma constante positiva, como 2, multiplicada pelo valor máximo do primeiro elemento de sintaxe. Em outros exemplos, o fluxo de bits codificado inclui outro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. Em alguns exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas é representado por um código de Golomb Rice, um código de Golomb Exponencial, um código de Rice Truncado ou um código Unário. Em outros exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que é explicitamente sinalizada é representado por um código de Rice Golombo truncado, um código de Golombo Exponencial Truncado, um código de Rice Truncado, um código Unário truncado ou o mesmo código que é usado para codificar um elemento de sintaxe que indica se um índice de paleta é copiado de um índice de paleta em uma linha acima de um pixel atual ou está explicitamente codificado no fluxo de bits codificado. Em alguns exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas é representado por um modo de Rice Truncado. Em alguns exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas apresenta um valor máximo que é igual ao número de pixels em um bloco atual dos dados de vídeo.
[072] Em outro exemplo da descrição, o decodificador de vídeo 30 pode ser configurado para receber um bloco de dados de vídeo em um fluxo de bits de vídeo codificado, o bloco de dados de vídeo tendo sido codificado usando um modo de codificação baseado em paleta, receber uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, decodificar a pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe usando um ou mais códigos Golomb, reconstruir a paleta com base na pluralidade decodificada de elementos de sintaxe e decodificar o bloco de dados de vídeo usando a paleta reconstruída.
[073] Em um outro exemplo da descrição, o codificador de vídeo 20 pode ser configurado para codificar um bloco de dados de vídeo usando um modo de codificação baseado em paleta e uma paleta, gerar uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica um número de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, codificar o primeiro elemento de sintaxe usando um ou mais códigos Golomb, e incluir a pluralidade de elementos de sintaxe em um fluxo de bits de vídeo codificado.
[074] A figura 2 é um diagrama de blocos ilustrando um exemplo de codificador de vídeo 20 que pode implementar várias técnicas desta descrição. A figura 2 é fornecida para fins de explicação e não deve ser considerada como limitativa das técnicas, tal como exemplificado e descrito na presente descrição. Para fins de explicação, esta descrição descreve o codificador de vídeo 20 no contexto da codificação HEVC. No entanto, as técnicas desta descrição podem ser aplicáveis a outros padrões ou métodos de codificação.
[075] No exemplo da figura 2, o codificador de vídeo 20 inclui uma memória de dados de vídeo 98, uma unidade de processamento de predição 100, uma unidade de geração residual 102, uma unidade de processamento de transformada 104, uma unidade de quantificação 106, uma unidade de quantificação inversa 108, uma unidade de processamento de transformada inversa 110, uma unidade de reconstrução 112, uma unidade de filtro 114, uma memória intermediária de imagem decodificada 116 e uma unidade de codificação por entropia 118. A unidade de processamento de predição 100 inclui uma unidade de processamento de inter- predição 120 e uma unidade de processamento intra-predição 126. A unidade de processamento de predição interativa 120 inclui uma unidade de estimativa de movimento e uma unidade de compensação de movimento (não mostrada). O codificador de vídeo 20 também inclui uma unidade de codificação baseada em paleta 122 configurada para executar vários aspectos das técnicas de codificação baseadas em paletas descritas nesta descrição. Em outros exemplos, o codificador de vídeo 20 pode incluir mais, menos ou diferentes componentes estruturais.
[076] A memória de dados de vídeo 98 pode armazenar dados de vídeo a serem codificados pelos componentes do codificador de vídeo 20. Os dados de vídeo armazenados na memória de dados de vídeo 98 podem ser obtidos, por exemplo, a partir da fonte de vídeo 18 da figura 1. O armazenador intermediário (buffer) de imagem decodificada 116 pode ser uma memória de imagem de referência que armazena dados de vídeo de referência para uso na codificação de dados de vídeo pelo codificador de vídeo 20, por exemplo, em modos de intra ou inter- codificação. A memória de dados de vídeo 98 e o armazenador intermediário de imagem decodificada 116 podem ser formados por qualquer um de uma variedade de dispositivos de memória, tais como memória de acesso aleatório dinâmico (DRAM), incluindo DRAM síncrono (SDRAM), memória de acesso magnético aleatória (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 98 e o armazenador intermediário (buffer) de imagem decodificada 116 podem ser proporcionados pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 98 pode ser on-chip (em chip) com outros componentes do codificador de vídeo 20, ou off-chip (fora de chip) em relação a esses componentes.
[077] O codificador de vídeo 20 pode receber dados de vídeo. O codificador de vídeo 20 pode codificar cada CTU em um slice de uma imagem dos dados de vídeo. Cada uma das CTUs pode estar associada a blocos em árvore de codificação de luma de tamanho igual (CTBs) e CTBs correspondentes da imagem. Como parte da codificação de uma CTU, a unidade de processamento de predição 100 pode executar a partição quad-tree para dividir os CTBs da CTU em blocos progressivamente menores. O bloco menor pode ser a codificação de blocos de UCs. Por exemplo, a unidade de processamento de predição 100 pode dividir um CTB associado a uma CTU em quatro sub-blocos de tamanho igual, particionar um ou mais dos sub-blocos em quatro sub-sub- blocos de tamanho igual, e assim por diante.
[078] O codificador de vídeo 20 pode codificar CUs de uma CTU para gerar representações codificadas das CUs (por exemplo, CUs codificadas). Como parte da codificação de um CU, a unidade de processamento de predição 100 pode particionar os blocos de codificação associados à CU entre uma ou mais PUs da CU. Assim, cada PU pode estar associada a um bloco de predição de luma e a correspondentes blocos de predição de croma. O codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar PUs com vários tamanhos. Conforme indicado acima, o tamanho de uma CU pode se referir ao tamanho do bloco de codificação luma da CU e o tamanho de uma PU pode se referir ao tamanho de um bloco de predição de luma da PU. Supondo que o tamanho de uma CU específica seja 2Nx2N, o codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar tamanhos de PU de 2Nx2N ou NxN para a intra- predição e tamanhos de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN ou similares para a inter-predição. O codificador de vídeo 20 e o decodificador de vídeo 30 também podem suportar particionamento assimétrico para tamanhos de PU de 2NxnU, 2NxnD, nLx2N e nRx2N para a inter-predição.
[079] A unidade de processamento de predição interativa 120 pode gerar dados preditivos para uma PU executando a inter-predição em cada PU de uma CU. Os dados preditivos para a PU podem incluir um ou mais blocos de amostra preditivos da PU e informações de movimento para a PU. A unidade de processamento de pré-predição 120 pode executar operações diferentes para uma PU de uma CU dependendo se a PU estiver em um slice I, um slice P ou um slice B. Em um slice I, todas as PUs são intra- preditas. Portanto, se a PU estiver em um slice I, a unidade de processamento de interdição 90 não executará a inter-predição na PU. Assim, para blocos codificados no modo I, o bloco preditivo é formado usando a predição espacial de blocos vizinhos codificados anteriormente dentro do mesmo quadro.
[080] Se uma PU estiver em um slice P, a unidade de estimativa de movimento da unidade de processamento de inter-predição 120 poderá pesquisar as imagens de referência em uma lista de imagens de referência (por exemplo, "RefPicListO") para uma região de referência para a PU. A região de referência para a PU pode ser uma região, dentro de uma imagem de referência, que contém blocos de amostra que correspondem mais estreitamente aos blocos de amostra do PU. A unidade de estimativa de movimento pode gerar um índice de referência que indica uma posição em RefPicListO da imagem de referência que contém a região de referência para a PU. Além disso, a unidade de estimativa de movimento pode gerar um MV que indica um deslocamento espacial entre um bloco de codificação da PU e um local de referência associado à região de referência. Por exemplo, o MV pode ser um vetor bidimensional que fornece um deslocamento das coordenadas na imagem decodificada atual para coordenadas em uma imagem de referência. A unidade de estimativa de movimento pode produzir o índice de referência e o vetor de movimento (MV) como a informação de movimento da PU. A unidade de compensação de movimento da unidade de processamento de inter-predição 120 pode gerar os blocos de amostra preditivos da PU com base em amostras reais ou interpoladas no local de referência indicado pelo MV da PU.
[081] Se um PU estiver em um slice B, a unidade de estimativa de movimento pode executar uma predição ou uma bi-predição para a PU. Para realizar uma uni-predição para a PU, a unidade de estimativa de movimento pode pesquisar as imagens de referência de RefPicListO ou uma segunda lista de imagens de referência ("RefPicListl") para uma região de referência para a PU. A unidade de estimativa de movimento pode produzir, como sendo informação de movimento da PU, um índice de referência que indica uma posição em RefPicListO ou RefPicListl da imagem de referência que contém a região de referência, uma MV que indica um deslocamento espacial entre um bloco de amostra da PU e um local de referência associado à região de referência e um ou mais indicadores de direção de predição que indicam se a imagem de referência está em RefPicListO ou RefPicListl. A unidade de compensação de movimento da unidade de processamento de inter-predição 120 pode gerar os blocos de amostra preditivos da PU com base, pelo menos em parte, em amostras reais (ou seja, precisão de número inteiro) ou interpoladas (isto é, precisão de número fracionário) na região de referência indicada pelo vetor de movimento da PU.
[082] Para realizar uma inter-predição bidirecional para uma PU, a unidade de estimativa de movimento pode pesquisar as imagens de referência em RefPicListO para uma região de referência para a PU e também pode procurar as imagens de referência em RefPicListl para outra região de referência para a PU. A unidade de estimativa de movimento pode gerar índices de imagens de referência que indicam posições em RefPicListO e RefPicListl das imagens de referência que contêm as regiões de referência. Além disso, a unidade de estimativa de movimento pode gerar MVs que indicam deslocamentos espaciais entre o local de referência associado às regiões de referência e um bloco de amostra da PU. As informações de movimento da PU podem incluir os índices de referência e os MVs do PU. A unidade de compensação de movimento pode gerar os blocos de amostra preditivos da PU com base, pelo menos em parte, em amostras reais ou interpoladas na região de referência indicada pelo vetor de movimento do PU.
[083] De acordo com vários exemplos desta descrição, o codificador de vídeo 20 pode ser configurado para executar a codificação baseada em paletas. Com respeito à estrutura HEVC, como um exemplo, as técnicas de codificação baseadas em paletas podem ser configuradas para serem usadas como um modo CU. Em outros exemplos, as técnicas de codificação baseadas em paletas podem ser configuradas para serem usadas como um modo PU na estrutura de HEVC. Consequentemente, todos os processos descritos aqui apresentados (ao longo desta descrição) no contexto de um modo CU podem, adicionalmente ou alternativamente, aplicar-se a um modo PU. No entanto, esses exemplos baseados em HEVC não devem ser considerados como sendo uma restrição ou limitação das técnicas de codificação baseadas em paleta aqui descritas, pois tais técnicas podem ser aplicadas para trabalhar de forma independente ou como parte de outros sistemas / padrões existentes ou ainda a serem desenvolvidos. Nestes casos, a unidade para codificação de paleta pode ser blocos quadrados, blocos retangulares ou mesmo regiões de forma não retangular.
[084] A unidade de codificação baseada em paleta 122, por exemplo, pode executar codificação baseada em paleta quando é selecionado um modo de codificação baseado em paleta, por exemplo, para uma CU ou PU. Por exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para gerar uma paleta com entradas que indicam valores de pixel, selecionar valores de pixel em uma paleta para representar valores de pixel de pelo menos algumas posições de um bloco de dados de vídeo e informações de sinal, associando pelo menos algumas das posições do bloco de dados de vídeo a entradas na paleta correspondentes, respectivamente, aos valores de pixel selecionados. Embora várias funções sejam descritas como sendo realizadas por unidade de codificação baseada em paletas 122, algumas ou todas essas funções podem ser realizadas por outras unidades de processamento ou uma combinação de diferentes unidades de processamento.
[085] A unidade de codificação baseada em paleta 122 pode ser configurada para gerar qualquer um dos vários elementos de sintaxe aqui descritos relacionados com a codificação baseada em paleta. Consequentemente, o codificador de vídeo 20 pode ser configurado para codificar blocos de dados de vídeo usando modos de código baseados em paletas como descrito nesta descrição. O codificador de vídeo 20 pode codificar de forma seletiva um bloco de dados de vídeo usando um modo de codificação de paleta, ou codificar um bloco de dados de vídeo usando um modo diferente, por exemplo, um modo de codificação HEVC inter- preditivo ou intra-preditivo. O bloco de dados de vídeo pode ser, por exemplo, uma CU ou PU gerada de acordo com um processo de codificação HEVC. Um codificador de vídeo 20 pode codificar alguns blocos com inter-predição temporal ou modos de codificação espaciais intra-preditivos e decodificar outros blocos com o modo de codificação baseado em paleta.
[086] A unidade de processamento de intra- predição 126 pode gerar dados preditivos para uma PU executando a intra-predição na PU. Os dados preditivos para a PU podem incluir blocos de amostra preditivos para a PU e vários elementos de sintaxe. A unidade de processamento de intra-predição 126 pode realizar a intra-predição em PUs em slices I, slices P e slices B.
[087] Para realizar a intra-predição em uma PU, a unidade de processamento de intra-predição 126 pode usar múltiplos modos de intra-predição para gerar vários conjuntos de dados preditivos para a PU. Ao usar alguns modos de intra-predição para gerar um conjunto de dados preditivos para a PU, a unidade de processamento de intra- predição 126 pode estender os valores de amostras de blocos de amostras de UPs vizinhas nos blocos preditivos da PU para direções associadas aos modos de intra-predição. As PUs vizinhas podem estar acima, acima e à direita, acima e à esquerda, ou à esquerda da PU, assumindo uma ordem de codificação da esquerda para direita, de cima para baixo para PUs, CUs e CTUs. A unidade de processamento de intra- predição 126 pode usar qualquer um de vários modos de intra-predição diferentes, por exemplo, 33 modos direcionais de intra-predição. Em alguns exemplos, o número de modos de intra-predição pode depender do tamanho da região associada à PU.
[088] A unidade de processamento de predição 100 pode selecionar os dados preditivos para PUs de uma CU entre os dados preditivos gerados pela unidade de processamento de inter-predição 120 para as PUs ou os dados preditivos gerados pela unidade de processamento intra- predição 126 para as PUs. Em alguns exemplos, a unidade de processamento de predição 100 seleciona os dados preditivos para as PUs da CU com base em métricas de taxa / distorção dos conjuntos de dados preditivos. Os blocos de amostra preditiva dos dados preditivos selecionados podem ser referidos aqui como os blocos de amostra preditivos selecionados.
[089] A unidade de geração residual 102 pode gerar, com base nos blocos de codificação (por exemplo, blocos de codificação Luma, Cb e Cr) de um CU e os blocos de amostra preditivos selecionados (por exemplo, blocos luma, Cb e Cr preditivos) das PUs da CU, blocos residuais (p. ex., blocos residuais luma, Cb e Cr) da CU. Por exemplo, a unidade de geração residual 102 pode gerar os blocos residuais da CU, de modo que cada amostra nos blocos residuais tenha um valor igual a uma diferença entre uma amostra em um bloco de codificação da CU e uma amostra correspondente em um bloco de amostra preditiva selecionada correspondente de uma PU da CU.
[090] A unidade de processamento de transformada 104 pode executar particionamento quad-tree para particionar os blocos residuais associados a uma CU em blocos de transformada associados a TUs da CU. Assim, em alguns exemplos, uma TU pode estar associada a um bloco de transformada de luma e a dois blocos de transformada cromática. Os tamanhos e posições dos blocos de transformada luma e croma de TUs de uma CU podem ou não estar baseados nos tamanhos e posições dos blocos de predição das PUs da CU. Uma estrutura quad-tree conhecida como "quad-tree residual" (RQT) pode incluir nós associados a cada uma das regiões. As TUs de uma CU podem corresponder a nós terminais do RQT.
[091] A unidade de processamento de transformada 104 pode gerar blocos de coeficientes de transformada para cada TU de uma CU aplicando uma ou mais transformações nos blocos de transformada da TU. A unidade de processamento de transformada 104 pode aplicar várias transformadas a um bloco de transformada associado a uma TU. Por exemplo, a unidade de processamento de transformada 104 pode aplicar uma transformada de cosseno discreta (DCT), uma transformada direcional ou uma transformada conceitualmente semelhante a um bloco de transformada. Em alguns exemplos, a unidade de processamento de transformada 104 não aplica transformadas a um bloco de transformada. Em tais exemplos, o bloco de transformada pode ser tratado como um bloco de coeficiente de transformada.
[092] A unidade de quantificação 106 pode quantificar os coeficientes de transformada em um bloco de coeficientes. O processo de quantificação pode reduzir a profundidade de bits associada a alguns ou a todos os coeficientes de transformada. Por exemplo, um coeficiente de transformada de n-bits pode ser arredondado para baixo para um coeficiente de transformada m-bit durante a quantificação, onde n é maior que m. A unidade de quantificação 106 pode quantificar um bloco de coeficientes associado a uma TU de uma CU com base em um valor de parâmetro de quantificação (QP) associado à CU. O codificador de vídeo 20 pode ajustar o grau de quantificação aplicado aos blocos de coeficientes associados a uma CU ajustando o valor QP associado à CU. A quantificação pode introduzir perda de informação, portanto, os coeficientes de transformada quantificados podem ter menor precisão do que os originais.
[093] A unidade de quantificação inversa 108 e a unidade de processamento de transformada inversa 110 podem aplicar quantificação inversa e transformadas inversas a um bloco de coeficientes, respectivamente, para reconstruir um bloco residual do bloco de coeficientes. A unidade de reconstrução 112 pode adicionar o bloco residual reconstruído às amostras correspondentes de um ou mais blocos de amostra preditivos gerados pela unidade de processamento de predição 100 para produzir um bloco de transformada reconstruído associado a uma TU. Ao reconstruir blocos de transformada para cada TU de uma CU dessa maneira, o codificador de vídeo 20 pode reconstruir os blocos de codificação da CU.
[094] A unidade de filtro 114 pode executar uma ou mais operações de desagrupamento de blocos para reduzir os efeitos de bloco nos blocos de codificação associados a uma CU. O armazenador intermediário de imagem decodificada 116 pode armazenar os blocos de codificação reconstruídos depois que a unidade de filtro 114 executa uma ou mais operações de desagrupamento de blocos nos blocos de codificação reconstruídos. A unidade de processamento inter-predição 120 pode usar uma imagem de referência que contém os blocos de codificação reconstruídos para realizar a interpredição em PUs de outras imagens. Além disso, a unidade de processamento intra-predição 126 pode usar blocos de codificação reconstruídos no armazenador intermediário (buffer) de imagem decodificada 116 para realizar a intra-predição em outras PUs na mesma imagem que a CU.
[095] A unidade de codificação por entropia 118 pode receber dados de outros componentes funcionais do codificador de vídeo 20. Por exemplo, a unidade de codificação por entropia 118 pode receber blocos de coeficientes da unidade de quantificação 106 e pode receber elementos de sintaxe da unidade de processamento de predição 100. A unidade de codificação por entropia 118 pode executar uma ou mais operações de codificação por entropia nos dados para gerar dados codificados por entropia. Por exemplo, a unidade de codificação por entropia 118 pode executar uma operação CAB AC, uma operação de codificação de comprimento variável adaptável ao contexto (CAVLC), uma operação de codificação de comprimento de variável-a-variável (V2V), uma codificação aritmética binária adaptativa de contexto baseada em sintaxe (SB AC), uma operação de codificação por Entropia de Partição de Intervalo de Probabilidade (PIPE), uma operação de codificação Exponencial-Golomb ou outro tipo de operação de codificação por entropia nos dados. O codificador de vídeo 20 pode produzir um fluxo de bits que inclui dados codificados por entropia gerados pela unidade de codificação por entropia 118. Por exemplo, o fluxo de bits pode incluir dados que representam um RQT para uma CU.
[096] Em alguns exemplos, a codificação residual não é realizada com codificação de paleta. Consequentemente, o codificador de vídeo 20 pode não realizar transformada ou quantificação quando executa codificação utilizando um modo de codificação de paleta. Além disso, o codificador de vídeo 20 pode codificar por entropia dados gerados usando um modo de codificação de paleta separadamente de dados residuais.
[097] De acordo com uma ou mais das técnicas desta descrição, o codificador de vídeo 20 e, especificamente, a unidade de codificação baseada em paletas 122, podem executar a codificação de vídeo baseada em paletas de blocos de vídeo previstos. Conforme descrito acima, uma paleta gerada pelo codificador de vídeo 20 pode ser explicitamente codificada e enviada para o decodificador de vídeo 30, previsto a partir de entradas de paleta anteriores, predito a partir de valores de pixels anteriores ou uma combinação dos mesmos.
[098] De acordo com uma ou mais técnicas desta descrição, a unidade de codificação baseada em paletas 122 pode aplicar técnicas desta descrição para executar o valor da amostra para a conversão de índice para codificar dados de vídeo usando um ou mais modos de codificação de paleta, em que os modos de codificação de paleta não incluem um modo de compartilhamento de paleta. As técnicas desta descrição incluem a unidade de codificação baseada em paletas 122 do codificador de vídeo 20, sendo configurada para determinar um primeiro bin de um primeiro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. A unidade de codificação baseada em paleta 122 do codificador de vídeo 20 pode ser ainda configurada para codificar um fluxo de bits. O fluxo de bits pode incluir o primeiro elemento de sintaxe. O fluxo de bits também não pode incluir um segundo elemento de sintaxe que indique um modo de compartilhamento de paleta. Em alguns exemplos, a determinação do primeiro compartimento do primeiro elemento de sintaxe compreende a determinação do primeiro compartimento do primeiro elemento de sintaxe usando uma codificação aritmética binária adaptável ao contexto. Em outros exemplos, a determinação do primeiro bin do primeiro elemento de sintaxe compreende a determinação do primeiro compartimento do primeiro elemento de sintaxe usando um ou mais contextos. Em alguns exemplos de utilização de um ou mais contextos, um ou mais contextos podem ser baseados em pelo menos um de um número previsto de entradas de codificação de paleta ou um tamanho de bloco.
[099] Além disso, as técnicas desta descrição incluem a unidade de codificação baseada em paletas 122 do codificador de vídeo 20 sendo configurada para determinar que um pixel atual é um primeiro pixel em uma linha em uma ordem de varredura. A unidade de codificação baseada em paleta 122 do codificador de vídeo 20 pode ainda determinar que um pixel vizinho situado acima do pixel atual está disponível. Em resposta à determinação de que o pixel atual é o primeiro pixel na linha na ordem de varredura e à determinação de que o pixel vizinho situado acima do pixel atual está disponível, a unidade de codificação baseada em paletas 122 do codificador de vídeo 20 pode ainda ser configurada para derivar a codificação de um primeiro elemento de sintaxe em um fluxo de bits, em que o primeiro elemento de sintaxe indica um tipo de execução e codifica um restante do fluxo de bits.
[0100] Além disso, as técnicas desta descrição incluem a unidade de codificação baseada em paletas 122 do codificador de vídeo 20 sendo configurada para determinar um primeiro elemento de sintaxe que indica um tamanho de paleta máximo permitido e tem um valor mínimo de zero. A unidade de codificação baseada em paleta 122 do codificador de vídeo 20 também pode ser configurada para codificar um fluxo de bits que inclui o primeiro elemento de sintaxe. Em alguns exemplos, o fluxo de bits inclui ainda um segundo elemento de sintaxe que indica um tamanho de paleta preditivo máximo e tem um valor mínimo de zero. Em alguns exemplos, o primeiro elemento de sintaxe tem um valor máximo de 4096 e o segundo elemento de sintaxe tem um valor máximo de 8192. Em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo de 4095 e o segundo elemento de sintaxe possui um valor máximo de 4095. Em outros exemplos, o primeiro elemento de sintaxe tem um valor máximo de 4095 e o segundo elemento de sintaxe tem um valor máximo de 8191. Ainda em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo igual a um número de pixels em uma maior unidade de codificação e o segundo elemento de sintaxe tem um valor máximo igual a uma constante positiva, como 2, multiplicada pelo valor máximo do primeiro elemento de sintaxe. Em outros exemplos, o fluxo de bits inclui outro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. Em alguns exemplos dessa matéria, este elemento de sintaxe é representado por um código de Golomb Rice, um código de Golomb Exponencial, um código de Rice Truncado ou um código Unário. Em outros exemplos disso, este elemento de sintaxe é representado por um código de Rice Golomb truncado, um código de Golomb Exponencial truncado, um código de Rice Truncado, um código Unário truncado ou um código que também é usado para codificar um terceiro elemento de sintaxe incluído no fluxo de bits codificado que indica se um índice de paleta é copiado de um índice de paleta em uma linha acima de um pixel atual ou está explicitamente codificado no fluxo de bits codificado. Em alguns exemplos, este elemento de sintaxe é representado por um modo de Rice Truncado. Em alguns exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas tem um valor máximo que é igual ao número de pixels em um bloco atual dos dados de vídeo.
[0101] A figura 3 é um diagrama de blocos que ilustra um exemplo de decodificador de vídeo 30 que está configurado para implementar as técnicas desta divulgação. O decodificador de vídeo 30 pode funcionar de forma recíproca para o codificador de vídeo 20 descrito com referência à figura 2. A figura 3 é fornecida para fins de explicação e não está limitada às técnicas tão amplamente exemplificadas e descritas nesta descrição. Para fins de explicação, esta descrição descreve o decodificador de vídeo 30 no contexto da codificação HEVC. No entanto, as técnicas desta descrição podem ser aplicáveis a outros padrões ou métodos de codificação onde a codificação do modo paleta é usada.
[0102] No exemplo da figura 3, o decodificador de vídeo 30 inclui uma memória de dados de vídeo 148, uma unidade de decodificação por entropia 150, uma unidade de processamento de predição 152, uma unidade de quantificação inversa 154, uma unidade de processamento de transformada inversa 156, uma unidade de reconstrução 158, uma unidade de filtro 160 e um armazenador temporário de imagem decodificada 162. A unidade de processamento de predição 152 inclui uma unidade de compensação de movimento 164 e uma unidade de processamento intra-predição 166. O decodificador de vídeo 30 também inclui uma unidade de decodificação baseada em paleta 165 configurada para executar vários aspectos das técnicas de codificação baseada em paleta descritas nesta descrição. Em outros exemplos, o decodificador de vídeo 30 pode incluir mais, menos ou diferentes componentes estruturais.
[0103] A memória de dados de vídeo 148 pode armazenar dados de vídeo, tais como um fluxo de bits de vídeo codificado, a serem decodificados pelos componentes do decodificador de vídeo 30. Os dados de vídeo armazenados na memória de dados de vídeo 148 podem ser obtidos, por exemplo, a partir do canal 16, por exemplo, de uma fonte de vídeo local, como uma câmera, via comunicação de rede com ou sem fio de dados de vídeo ou acessando mídia de armazenamento de dados físicos. A memória de dados de vídeo 148 pode formar um armazenador temporário de imagem codificada (CPB) que armazena dados de vídeo codificados a partir de um fluxo de bits de vídeo codificado. O armazenador temporário de imagem decodificada 162 pode ser uma memória de imagem de referência que armazena dados de vídeo de referência para uso na decodificação de dados de vídeo pelo decodificador de vídeo 30, por exemplo, em modos intra ou inter-codificação. A memória de dados de vídeo 148 e o armazenador temporário de imagem decodificada 162 podem ser formados por qualquer um de uma variedade de dispositivos de memória, tais como memória de acesso aleatório dinâmico (DRAM), incluindo DRAM síncrona (SDRAM), RAM de acesso magnético aleatório (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 148 e o armazenador temporário de imagem decodificada 162 podem ser proporcionados pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 148 pode ser on-chip com outros componentes do decodificador de vídeo 30, ou off-chip em relação a esses componentes.
[0104] A memória de dados de vídeo 148, por exemplo, uma CPB, pode receber e armazenar dados de vídeo codificados (por exemplo, unidades NAL) de um fluxo de bits. A unidade de decodificação por entropia 150 pode receber dados de vídeo codificados (por exemplo, unidades NAL) a partir da memória de dados de vídeo 148 e pode analisar as unidades NAL para decodificar elementos de sintaxe. A unidade de decodificação por entropia 150 pode decodificar por entropia elementos de sintaxe codificados por entropia nas unidades NAL. A unidade de processamento de predição 152, a unidade de quantificação inversa 154, a unidade de processamento de transformada inversa 156, a unidade de reconstrução 158 e a unidade de filtro 160 podem gerar dados de vídeo decodificados com base nos elementos de sintaxe obtidos (por exemplo, extraídos) do fluxo de bits.
[0105] As unidades NAL do fluxo de bits podem incluir unidades NAL em slice codificadas. Como parte da decodificação do fluxo de bits, a unidade de decodificação por entropia 150 pode extrair e decodificar por entropia elementos de sintaxe das unidades NAL em slice codificadas. Cada um dos slices codificados pode incluir um cabeçalho de slice e dados de slice. O cabeçalho do slice pode conter elementos de sintaxe pertencentes a um slice. Os elementos de sintaxe no cabeçalho do slice podem incluir um elemento de sintaxe que identifica um PPS associado a uma imagem que contém um slice.
[0106] Além de decodificar elementos de sintaxe do fluxo de bits, o decodificador de vídeo 30 pode executar uma operação de reconstrução em uma CU não particionada. Para realizar a operação de reconstrução em uma CU não particionada, o decodificador de vídeo 30 pode realizar uma operação de reconstrução em cada TU da CU. Ao executar a operação de reconstrução para cada TU da CU, o decodificador de vídeo 30 pode reconstruir blocos residuais da CU.
[0107] Como parte da realização de uma operação de reconstrução em uma TU de uma CU, a unidade de quantificação inversa 154 pode quantificar inversamente, por exemplo, desquantificar, blocos de coeficiente associados à TU. A unidade de quantificação inversa 154 pode usar um valor de QP associado à CU da TU para determinar um grau de quantificação e, da mesma forma, aplicar um grau de quantificação inversa para a unidade de quantificação inversa 154. Ou seja, a razão de compressão, por exemplo, a razão do número de bits utilizado para representar a sequência original e uma sequência comprimida, pode ser controlada ajustando o valor do QP usado ao quantificar coeficientes de transformada. A taxa de compressão também pode depender do método de codificação por entropia empregada.
[0108] Após a unidade de quantificação inversa 154 quantificar inversamente um bloco de coeficientes, a unidade de processamento de transformada inversa 156 pode aplicar uma ou mais transformadas inversas ao bloco de coeficientes de modo a gerar um bloco residual associado à TU. Por exemplo, a unidade de processamento de transformada inversa 156 pode aplicar uma DCT inversa, uma transformada de número inteiro inversa, uma transformada inversa Karhunen-Loeve (KLT), uma transformada rotacional inversa, uma transformada direcional inversa ou outra transformada inversa para o bloco de coeficientes.
[0109] Se uma PU for codificada usando a intra- predição, a unidade de processamento de intra-predição 166 poderá realizar a intra-predição para gerar blocos preditivos para a PU. A unidade de processamento de Intra- predição 166 pode usar um modo de intra-predição para gerar os blocos de luma, Cb e Cr preditivos para a PU com base nos blocos de predição de PUs espacialmente vizinhas. A unidade de processamento de intra-predição 166 pode determinar o modo de intra-predição para a PU com base em um ou mais elementos de sintaxe decodificados do fluxo de bits.
[0110] A unidade de processamento de predição 152 pode construir uma primeira lista de imagens de referência (RefPicListO) e uma segunda lista de imagens de referência (RefPicListl) com base em elementos de sintaxe extraídos do fluxo de bits. Além disso, se uma PU for codificada usando a inter-predição, a unidade de decodificação por entropia 150 poderá extrair informações de movimento para a PU. A unidade de compensação de movimento 164 pode determinar, com base na informação de movimento do PU, uma ou mais regiões de referência para a PU. A unidade de compensação de movimento 164 pode gerar, com base em blocos de amostras em um ou mais blocos de referência para a PU, blocos preditivos (por exemplo, blocos luma, Cb e Cr preditivos) para a PU.
[0111] A unidade de reconstrução 158 pode usar os blocos de transformada (por exemplo, blocos de transformada Luma, Cb e Cr) associados a TUs de uma CU e os blocos preditivos (por exemplo, blocos luma, Cb e Cr) das PUs da CU, por exemplo, seja dados de intra-predição, seja dados de inter-predição, conforme aplicável, para reconstruir os blocos de codificação (por exemplo, blocos de codificação Luma, Cb e Cr) da UC. Por exemplo, a unidade de reconstrução 158 pode adicionar amostras dos blocos de transformada (por exemplo, blocos de transformada Luma, Cb e Cr) a amostras correspondentes dos blocos preditivos (por exemplo, blocos luma, Cb e Cr preditivos) para reconstruir os blocos de codificação (por exemplo, blocos de codificação Luma, Cb e Cr) da CU.
[0112] A unidade de filtro 160 pode realizar uma operação de desagrupamento de blocos para reduzir os efeitos de bloco associados aos blocos de codificação (por exemplo, blocos de codificação luma, Cb e Cr) da CU. O decodificador de vídeo 30 pode armazenar os blocos de codificação (por exemplo, blocos de codificação luma, Cb e Cr) do CU no armazenador intermediário de imagem decodificada 162. O armazenador intermediário de imagem decodificada 162 pode fornecer imagens de referência para a subseqüente compensação de movimento, a intra-predição e a apresentação em um dispositivo de exibição, tal como o dispositivo de exibição 32 da figura 1. Por exemplo, o decodificador de vídeo 30 pode executar, com base nos blocos (por exemplo, blocos luma, Cb e Cr) no armazenador intermediário de imagem decodificada 162, operações de intra-predição ou de inter-predição em PUs de outras CUs. Desta forma, o decodificador de vídeo 30 pode extrair, a partir do fluxo de bits, níveis de coeficiente de transformada de um bloco de coeficiente significativo, quantificação inversa dos níveis de coeficiente de transformada, aplicar uma transformada aos níveis de coeficientes de transformada para gerar um bloco de transformada, gerar, com base, pelo menos em parte, no bloco de transformada, um bloco de codificação e saída do bloco de codificação para exibição.
[0113] De acordo com vários exemplos desta descrição, o decodificador de vídeo 30 pode ser configurado para executar a codificação baseada em paletas. A unidade de decodificação baseada em paleta 165, por exemplo, pode executar decodificação baseada em paleta quando um modo de decodificação baseado em paleta é selecionado, por exemplo, para uma CU ou PU. Por exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para gerar uma paleta com entradas que indicam valores de pixel. Além disso, neste exemplo, a unidade de decodificação baseada em paleta 165 pode receber informações que associam pelo menos algumas posições de um bloco de dados de vídeo com entradas na paleta. Neste exemplo, a unidade de decodificação baseada em paleta 165 pode selecionar valores de pixel na paleta com base na informação. Além disso, neste exemplo, a unidade de decodificação baseada em paletas 165 pode reconstruir valores de pixel do bloco com base nos valores de pixel selecionados. Embora várias funções sejam descritas como sendo realizadas por unidade de decodificação baseada em paleta 165, algumas ou todas essas funções podem ser realizadas por outras unidades de processamento ou uma combinação de diferentes unidades de processamento.
[0114] De acordo com uma ou mais técnicas desta descrição, a unidade de decodificação baseada em paleta 165 pode receber informação do modo de codificação da paleta e executar as operações acima quando a informação do modo de codificação da paleta indica que o modo de codificação da paleta aplica-se ao bloco. Quando as informações do modo de codificação da paleta indicam que o modo de codificação da paleta não se aplica ao bloco, ou quando outra informação de modo indica o uso de um modo diferente, a unidade de decodificação baseada em paleta 165 decodifica o bloco de dados de vídeo usando uma base de modo de codificação não baseado em paleta, por exemplo, um modo de codificação inter-preditivo ou intra-preditivo HEVC, quando a informação do modo de codificação da paleta indica que o modo de codificação da paleta não se aplica ao bloco. O bloco de dados de vídeo pode ser, por exemplo, uma CU ou PU gerado de acordo com um processo de codificação HEVC. Um decodificador de vídeo 30 pode decodificar alguns blocos com predição temporal inter-preditiva ou modos de codificação espaciais intra-preditivos e decodificar outros blocos com o modo de codificação baseado em paleta. O modo de codificação baseado em paleta pode compreender um de uma pluralidade de modos de codificação baseados em paletas diferentes, ou pode haver um único modo de codificação baseado em paleta.
[0115] De acordo com uma ou mais das técnicas desta descrição, o decodificador de vídeo 30 e, especificamente, a unidade de decodificação baseada em paletas 165, podem executar decodificação de vídeo baseada em paletas de blocos de vídeo codificados por paleta. Conforme descrito acima, uma paleta decodificada pelo decodificador de vídeo 30 pode ser explicitamente codificada e sinalizada pelo codificador de vídeo 20, reconstruída pelo decodificador de vídeo 30 em relação a um bloco codificado de paleta recebida, predito a partir de entradas de paleta anteriores, preditas a partir de valores de pixels anteriores ou uma combinação dos mesmos.
[0116] A unidade de decodificação baseada em paleta 165 pode aplicar técnicas desta descrição para executar valor de amostra para indexar dados de vídeo de decodificação de conversão usando um ou mais modos de codificação de paleta, em que os modos de codificação de paleta não incluem um modo de compartilhamento de paleta. Além disso, as técnicas desta descrição incluem a unidade de decodificação baseada em paletas 165 do decodificador de vídeo 30 sendo configurada para receber um fluxo de bits codificado. Neste exemplo, o fluxo de bits codificado não inclui um primeiro elemento de sintaxe que indica um modo de compartilhamento de paleta. Além disso, o fluxo de bits codificado inclui um segundo elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. A unidade de decodificação baseada em paleta 165 do decodificador de vídeo 30 pode ser ainda configurada para decodificar um primeiro bin do segundo elemento de sintaxe. Em alguns exemplos, a decodificação do primeiro bin do segundo elemento de sintaxe compreende decodificar o primeiro bin do segundo elemento de sintaxe usando uma unidade de codificação aritmética binária adaptável ao contexto (CABAC). Em outros exemplos, a decodificação do primeiro bin do segundo elemento de sintaxe compreende a decodificação do primeiro bin do segundo elemento de sintaxe usando um ou mais contextos. Em alguns exemplos de utilização de um ou mais contextos, um ou mais contextos podem ser baseados em pelo menos um de um número previsto de entradas de codificação baseada em paleta ou um tamanho de bloco.
[0117] Além disso, as técnicas desta descrição incluem a unidade de decodificação baseada em paletas 165 do decodificador de vídeo 30 sendo configurada para receber um fluxo de bits codificado. O fluxo de bits codificado pode incluir um primeiro elemento de sintaxe que indica um tipo de execução. A unidade de decodificação baseada em paleta 165 do decodificador de vídeo 30 pode ainda ser configurada para determinar que um pixel atual é um primeiro pixel em uma linha em uma ordem de varredura. A unidade de decodificação baseada em paleta 165 do decodificador de vídeo 30 pode ainda determinar que um pixel vizinho situado acima do pixel atual está disponível. Em resposta à determinação de que um pixel atual é um primeiro pixel em uma linha em uma ordem de varredura e à determinação de que um pixel vizinho situado acima do pixel atual está disponível, a unidade de decodificação baseada em paleta 165 do decodificador de vídeo 30 pode derivar a decodificação do primeiro elemento de sintaxe.
[0118] Além disso, as técnicas desta descrição incluem a unidade de decodificação baseada em paleta 165 do decodificador de vídeo 30 sendo configurada para receber um fluxo de bits codificado que inclui um primeiro elemento de sintaxe que indica um tamanho de paleta máximo permitido e apresenta um valor mínimo de zero. A unidade de decodificação baseada em paleta 165 do decodificador de vídeo 30 pode ser adicionalmente configurada para decodificar o fluxo de bits codificado. Em alguns exemplos, o fluxo de bits codificado inclui ainda um segundo elemento de sintaxe que indica um tamanho de paleta preditivo máximo e apresenta um valor mínimo de zero. Em alguns exemplos, o primeiro elemento de sintaxe apresenta um valor máximo de 4096 e o segundo elemento de sintaxe apresenta um valor máximo de 8192. Em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo de 4095 e o segundo elemento de sintaxe possui um valor máximo de 4095. Em outros exemplos, o primeiro elemento de sintaxe apresenta um valor máximo de 4095 e o segundo elemento de sintaxe apresenta um valor máximo de 8191. Ainda em outros exemplos, o primeiro elemento de sintaxe possui um valor máximo igual a um número de pixels em uma maior unidade de codificação e o segundo elemento de sintaxe apresenta um valor máximo igual a uma constante positiva, como 2, multiplicada pelo valor máximo do primeiro elemento de sintaxe. Em outros exemplos, o fluxo de bits codificado inclui outro elemento de sintaxe, por exemplo, um terceiro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. Em alguns exemplos desta descrição, o elemento de sintaxe que indica um número de entradas em uma paleta atual que é explicitamente sinalizada é representado por um código de Golomb Rice, um código de Golomb Exponencial, um código de Rice Truncado ou um código Unário. Em outros exemplos desta descrição, o elemento de sintaxe que indica um número de entradas em uma paleta atual que é explicitamente sinalizada é representado por um código de Rice Golombo truncado, um código de Golombo Exponencial truncado, um código de Rice Truncado, um Código Unário truncado ou um código que também é usado para codificar um terceiro elemento de sintaxe incluído no fluxo de bits codificado que indica se um índice de paleta é copiado de um índice de paleta em uma linha acima de um pixel atual ou está explicitamente codificado no fluxo de bits codificado. Em alguns exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas é representado por um modo de Rice Truncado. Em alguns exemplos, o elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas apresenta um valor máximo que é igual ao número de pixels em um bloco atual dos dados de vídeo.
[0119] Verificou-se que, dependendo do exemplo, certos atos ou eventos de qualquer uma das técnicas aqui descritas podem ser realizados em uma seqüência diferente, podem ser adicionados, mesclados ou excluídos (por exemplo, nem todos os atos descritos ou eventos são necessários para a prática das técnicas). Além disso, em certos exemplos, atos ou eventos podem ser realizados simultaneamente, por exemplo, através de processamento multifilamentado, processamento de interrupções ou múltiplos processadores, em vez de sequencialmente. Além disso, embora certos aspectos desta descrição sejam descritos como sendo realizados por um único módulo ou unidade para fins de maior clareza, deve entender-se que as técnicas desta descrição podem ser realizadas por uma combinação de unidades ou módulos associados a um codificador de vídeo.
[0120] Determinados aspectos desta descrição foram descritos em relação ao padrão HEVC em desenvolvimento para fins de ilustração. No entanto, as técnicas descritas nesta descrição podem ser úteis para outros processos de codificação de vídeo, incluindo outros processos de codificação de vídeo padrão ou proprietário ainda não desenvolvidos.
[0121] As técnicas descritas acima podem ser realizadas pelo codificador de vídeo 20 (figuras 1 e 2) e / ou decodificador de vídeo 30 (figuras 1 e 3), que podem ser geralmente referidos como um codificador de vídeo. Da mesma forma, a codificação de vídeo pode referir-se a codificação de vídeo ou decodificação de vídeo, conforme seja aplicável.
[0122] Em alguns exemplos, as técnicas de codificação baseadas em paletas podem ser configuradas para uso em um ou mais modos de codificação do padrão HEVC ou o padrão HECC SCC. Em outros exemplos, as técnicas de codificação baseadas em paletas podem ser usadas de forma independente ou como parte de outros sistemas ou padrões existentes ou futuros. Em alguns exemplos, as técnicas de codificação baseada em paletas de dados de vídeo podem ser usadas com uma ou mais outras técnicas de codificação, como técnicas de codificação inter-preditiva ou codificação intra-preditiva de dados de vídeo. Por exemplo, como descrito em maior detalhe abaixo, um codificador ou decodificador, ou codificador-decodificador combinado (codec), pode ser configurado para executar a codificação inter e intra-preditiva, bem como a codificação baseada em paleta.
[0123] Em relação à estrutura HEVC, como exemplo, as técnicas de codificação baseadas em paletas podem ser configuradas para serem usadas como um modo de unidade de codificação (CU). Em outros exemplos, as técnicas de codificação baseadas em paletas podem ser configuradas para ser usadas como um modo de unidade de predição (PU) na estrutura de HEVC. Consequentemente, todos os seguintes processos descritos no contexto de um modo CU podem, adicionalmente ou alternativamente, aplicar-se à PU. No entanto, esses exemplos baseados em HEVC não devem ser considerados uma restrição ou limitação das técnicas de codificação baseadas em paletas descritas neste documento, uma vez que tais técnicas podem ser aplicadas para trabalhar de forma independente ou como parte de outros sistemas/padrões existentes ou ainda a serem desenvolvidos. Nestes casos, a unidade para codificação de paleta pode ser blocos quadrados, blocos retangulares ou mesmo regiões de forma não retangular.
[0124] A idéia básica da codificação baseada em paleta é que, para cada CU, uma paleta é derivada que que compreende (e pode consistir de) os valores de pixels mais dominantes na CU corrente. O tamanho e os elementos da paleta são transmitidos pela primeira vez de um codificador de vídeo para um decodificador de vídeo. O tamanho e/ou os elementos da paleta podem ser codificados diretamente ou codificados de forma preditiva usando o tamanho e/ou os elementos da paleta nas CUs vizinhas (por exemplo, CU com codificação acima e/ou esquerda). Depois disso, os valores de pixel na CU são codificados com base na paleta de acordo com uma determinada ordem de varredura. Para cada localização de pixel na CU, um sinalizador, por exemplo, um sinalizador de paleta, é transmitido pela primeira vez para indicar se o valor do pixel está incluído na paleta. Em alguns exemplos, esse indicador é chamado de copy_above_palette_indices_flag. Para aqueles valores de pixel que mapeiam para uma entrada na paleta, o índice de paleta associado a essa entrada é sinalizado para a localização de pixel dada na CU. Para aqueles valores de pixel que não existem na paleta, um índice especial pode ser atribuído ao pixel e o valor do pixel real (em alguns casos, um valor de pixel quantificado) é transmitido para a localização de pixels dada na CU. Esses pixels são referidos como "pixels de escape". Um pixel de escape pode ser codificado usando qualquer método de codificação por entropia existente, como codificação de comprimento fixo, codificação unária, etc.
[0125] Em outros exemplos, nenhum sinalizador é usado para indicar explicitamente se um pixel é um pixel de "escape". Em vez disso, um sinalizador ou outro elemento de sintaxe pode ser usado para indicar um tipo de execução. O elemento de sintaxe que indica o tipo de execução pode indicar se os seguintes índices são copiados da posição acima do pixel atual ou se há uma série de valores de índice sinalizado. Se o valor de índice derivado de um pixel particular corresponder a um "índice de escape" (por exemplo, um índice predeterminado na paleta que indica a utilização de um pixel de escape), o decodificador de vídeo 30 pode determinar que um pixel desse tipo é um pixel de escape.
[0126] Para melhorar a eficiência de codificação do conteúdo da tela, foram propostos vários métodos que estendem o modo de paleta. Por exemplo, tais métodos podem ser encontrados em JCTVC-S0114 (Kim, J., et al., "CE6-related: Enabling copy above mode prediction at the boundary of CU," Joint Collaborative Team on Video Coding (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 19th Meeting: Strasbourg, FR, 17-24 outubro de 2014); JCTVC-S0120 (Ye, J., et al., "Non-CE6: Copy previous mode," Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11, 19th Meeting: Strasbourg, FR, 17-24 outubro de 2014); e JCTVC- S0151 (Wang, W., et al., "Non-CE6: 2-D Index Map Coding of Palette Mode in HEVC SCC" Joint Collaborative Team on Video Coding (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 19th Meeting: Strasbourg, FR, 17-24 outubro de 2014).
[0127] O documento X. Guo e A. Saxena, "RCE4: Summary Report of HEVC Range Extension Core Experiments 4 (RCE4) on palette coding for screen contente,” JCTVC-P0035, San Jose, EUA, 9-17 de janeiro. 2014 descreve dois resultados de teste de modos baseados em paletas, que foram relatados para obter uma redução significativa da Taxa de Distorção de Bjontegaard (taxa de BD), especialmente para o conteúdo da tela. Os dois métodos são brevemente resumidos abaixo.
[0128] Em um exemplo de método, como descrito, por exemplo, no documento X. Guo, Y. Lu e S. Li, "RCE4: Test 1. Major-color-based screen contente coding”, JCTVC- P0108, San Jose, US, 9-17 de janeiro de 2014, um algoritmo baseado em histograma é usado para classificar os pixels. Em particular, os valores de pico N mais significativos em um histograma são selecionados como cores fundamentais para codificação. Os valores de pixels que são próximos de uma cor serão quantizados para a cor fundamental. Outros pixels que não pertencem a nenhum conjunto de cores principais são pixels de escape, que também são quantificados antes da codificação. Para codificação sem perda, não é utilizada quantização.
[0129] Ao usar a classificação, os pixels de uma unidade de codificação (CU) podem ser convertidos em índices de cores. Depois disso, o número e os valores das cores principais são codificados. Então, os índices de cores são codificados da seguinte maneira: - para cada linha de pixel, um sinalizador é sinalizado para indicar o modo de codificação. Existem três modos: modo horizontal, modo vertical e modo normal. - se o modo for o modo horizontal, a linha inteira (ou seja, todos os pixels da linha inteira) compartilha o mesmo índice de cores. Nesse caso, o índice de cores é transmitido, - se o modo for vertical, a linha inteira é a mesma com a linha acima. Neste caso, nada é transmitido. A linha atual copia os índices de cores da linha acima, - se o modo for normal, um sinalizador é sinalizado para cada posição de pixel para indicar se é o mesmo com um dos pixels esquerdo e superior. Caso contrário, o próprio índice é transmitido. Além disso, se o pixel for pixel de escape, o valor do pixel será transmitido.
[0130] Em outro método de exemplo, como descrito, por exemplo, no documento L. Guo, W. Pu, M. Karczewicz, J. Sole, R. Joshi e F. Zou, "RCE4: Results of Test 2 on Palette Mode for Screen Content Coding”, "JCTVC- P0198, San Jose, US, 9-17 de janeiro de 2014, um modo de codificação baseado em paleta está incluído como modo CU. O processo de codificação do segundo método pode incluir o seguinte, • Transmissão da paleta: um esquema de predição de entrada é usado para codificar a paleta atual com base na paleta da CU esquerda (a vizinhança CU próxima da CU atualmente codificada para a esquerda). Depois disso, as entradas não previstas da paleta são transmitidas. • Transmissão de valores de pixel: os pixels na CU são codificados em uma ordem de varredura rasterizada usando os três modos a seguir: - "modo de execução": um primeiro índice de paleta é sinalizado, seguido de "execução de paleta" (M). Os seguintes índices de paleta M são os mesmos que o índice de paleta sinalizado primeiro sinalizado. - "modo acima de cópia": um valor "execução de cópia " (N) é transmitido para indicar que, para os seguintes índices de paleta N são os mesmos que os seus vizinhos acima, respectivamente, - "modo de pixel": um primeiro sinal de predição é transmitido. O valor do indicador igual a 1 indica a predição residual usando o pixel vizinho reconstruído superior de predição é transmitido. Se o valor desse sinalizador for 0, o valor do pixel será transmitido sem predição.
[0131] A paleta pode constituir uma porção relativamente significativa dos bits para um bloco codificado por paleta (por exemplo, CU). Consequentemente, o codificador de vídeo pode prever uma ou mais entradas da paleta com base em uma ou mais entradas de uma paleta previamente codificada (por exemplo, como mencionado acima em relação à "transmissão da paleta").
[0132] Em alguns exemplos, o codificador de vídeo pode gerar uma lista de preditores de paleta ao prever entradas de paleta. Por exemplo, o documento C. Gisquet, G. Laroche e P. Onno, "AhGlO: Ruptura do preditor de paleta", JCTVC-Q0063 descreve um exemplo de processo para determinar preditores de paleta. Em alguns exemplos, o codificador de vídeo pode usar um vetor booleano para indicar se cada item em uma lista de preditores de paleta é usado (ou não usado) para prever uma ou mais entradas na paleta para o bloco atualmente codificado.
[0133] Em alguns exemplos, todos os itens na lista de preditores de paleta são derivados da paleta previamente codificada (por exemplo, a paleta codificada com o bloco previamente codificado). No entanto, essas paletas podem estar espacialmente distantes da atual CU, o que pode tornar a correlação da paleta relativamente fraca. Em geral, expandir a tabela de preditores de paleta pode ser útil (por exemplo, pode fornecer preditores mais precisos, o que pode resultar em um ganho de eficiência). No entanto, determinar e usar uma tabela de preditores de paletas relativamente grande resulta em um vetor booleano relativamente mais longo.
[0134] Em um exemplo de codificação de paleta, o codificador de vídeo 20 pode gerar um elemento de sintaxe, como um sinalizador "Sinalizador do modo PLT", que indica se um modo de codificação baseado em paleta é ou não usado para uma região particular de um quadro de vídeo. Por exemplo, o sinalizador do modo PLT pode ser gerado no nível do slice, o nível CU, o nível PU ou qualquer outro nível de um quadro de vídeo. Por exemplo, o codificador de vídeo 20 pode gerar o sinalizador do modo PLT no nível CU e sinalizar o sinalizador do modo PLT em um fluxo de bits de vídeo codificado. O decodificador de vídeo 30 pode então analisar o sinalizador do modo PLT ao decodificar o fluxo de bits de vídeo codificado. Neste exemplo, um valor desse sinalizador de modo PLT igual a 1 especifica que a CU atual está codificada usando um modo de paleta. Neste caso, o decodificador de vídeo 30 pode aplicar o modo de codificação baseado em paleta para decodificar a CU. Em alguns exemplos, um elemento de sintaxe pode indicar um de uma pluralidade de modos de paleta diferentes para a CU.
[0135] Um valor deste indicador de modo PLT igual a 0 especifica que a CU atual está codificada usando um modo diferente do modo de paleta. Por exemplo, qualquer um de uma variedade de modos de codificação inter- preditiva, intra-preditiva ou outros podem ser usados. Quando um valor do sinalizador do Modo PLT é 0, podem ser transmitidas informações adicionais ao sinal, cujo modo específico é usado para codificar a CU respectiva, onde esse modo específico, tipicamente, pode ser um modo de codificação HEVC (por exemplo, intra- ou inter- codificação). O uso do sinalizador modo PLT é descrito para fins de exemplo. Em outros exemplos, no entanto, outros elementos de sintaxe, como códigos de múltiplos bits, podem ser usados para indicar se o modo de codificação baseado em paleta deve ser usado para uma CU (ou PU em outros exemplos) ou para indicar qual de uma pluralidade de modos deverá ser usado.
[0136] O sinalizador de modo PLT ou outro elemento de sintaxe também pode ser transmitido em um nível superior. Por exemplo, o sinalizador do modo PLT pode ser transmitido no nível do slice . Neste caso, um valor do indicador igual a 1 implica que todas as CUs na slice serão codificadas usando o modo de paleta (o que significa que nenhuma informação do modo, por exemplo, para o modo de paleta ou outros modos, precisa ser transmitida ao nível da CU). Da mesma forma, este indicador pode ser sinalizado no conjunto de parâmetros de imagem (PPS), no conjunto de parâmetros de seqüência (SPS) ou no nível de conjunto de parâmetros de vídeo (VPS). Além disso, um sinalizador pode ser enviado em um desses níveis especificando se o modo de paleta for habilitado ou desativado para a imagem específica, slice , etc., enquanto a indicação do Modo PLT indica se o modo de codificação baseado em paleta é usado para cada CU. Nesse caso, se um sinalizador ou outro elemento de sintaxe enviado no nível do slice , PPS, SPS ou VPS indicar que o modo de codificação da paleta está desabilitado, em alguns exemplos, pode não haver necessidade de sinalizar o sinalizador do modo PLT para cada CU. Alternativamente, se um sinalizador ou outro elemento de sintaxe enviado no slice , PPS, SPS ou nível VPS indicar que o modo de codificação de paleta está habilitado, o sinalizador do modo PLT poderá ser ainda sinalizado para indicar se o modo de codificação baseado em paleta deve ser usado para cada CU. Novamente, como mencionado acima, a aplicação dessas técnicas para indicar a codificação baseada em paleta de uma CU pode, adicionalmente ou alternativamente, ser usada para indicar a codificação baseada em paleta de uma PU.
[0137] Um sinalizador, como o sinalizador do modo PLT, também pode ser alternativamente ou condicionalmente transmitido ou inferido. As condições para transmitir o PLT_Mode_flag ou inferir o sinalizador podem ser um ou mais, a título de exemplo, do tamanho da CU, do tipo de quadro, do espaço de cores, do componente de cor, do tamanho do quadro, da taxa de quadros, da camada Id na codificação de vídeo escalável ou do ID da visualização na codificação multi-vista.
[0138] Técnicas para a geração e transmissão de uma paleta serão agora discutidas. O codificador de vídeo 20 pode ser configurado para gerar e sinalizar um ou mais elementos de sintaxe e valores que podem ser usados pelo decodificador de vídeo 30 para construir e / ou reconstruir a paleta usada pelo codificador de vídeo 20 para codificar um nível particular da moldura de vídeo (por exemplo, uma CU). Em alguns exemplos, o codificador de vídeo 20 pode indicar ou de outra forma sinalizar uma paleta para cada CU. Em outros exemplos, o codificador de vídeo 20 pode indicar ou de outra forma sinalizar uma paleta que pode ser compartilhada entre várias CUs.
[0139] O tamanho da paleta, por exemplo, em termos do número de valores de pixel incluídos, pode ser um valor fixo ou pode ser sinalizado pelo codificador de vídeo 20 em um fluxo de bits de vídeo codificado. O decodificador de vídeo 30 pode receber e decodificar a indicação do tamanho da paleta a partir do fluxo de bits de vídeo codificado. A sinalização pode ser separada para diferentes componentes ou um único tamanho pode ser sinalizado para todos os componentes. Os diferentes componentes podem ser, por exemplo, componentes luma e croma. A sinalização pode usar códigos unários ou códigos unários truncados (por exemplo, que trunca no limite máximo do tamanho da paleta). Podem também ser utilizados códigos Golomb exponenciais ou Rice-Golomb. Em alguns exemplos, a sinalização do tamanho pode ser feita da seguinte maneira: depois de sinalizar uma entrada na paleta, um sinalizador "pare" é sinalizado. Um valor desse sinalizador igual a 1 especifica que a entrada atual é a última na paleta; um valor desse sinalizador igual a 0 especifica que há mais entradas na paleta. O sinalizador "pare" não pode ser transmitido pelo codificador se a paleta já construída atingir o limite máximo do tamanho da paleta. Em alguns exemplos, o tamanho da paleta também pode ser condicionalmente transmitido ou inferido com base em informações laterais da mesma maneira descrita acima para "Transmissão do sinalizador PLT_Mode_flag”".
[0140] A paleta pode ser transmitida separadamente para cada componente de cor na CU. Por exemplo, pode haver uma paleta para o componente Y desta CU, outra paleta para o componente U desta CU, e ainda outra paleta para o componente V desta CU. Para a paleta Y, a entrada pode (supostamente) ser um valor Y representativo nesta CU. O mesmo se aplica aos componentes U e V. Também é possível que a paleta possa ser transmitida para todos os componentes de cor da CU. Neste exemplo, a entrada i-ésima na paleta é uma entrada tripla (Yi, Ui, Vi). Nesse caso, a paleta inclui valores para cada um dos componentes.
[0141] A predição de uma paleta é uma abordagem alternativa à "transmissão de paleta" descrita acima. Em alguns exemplos, técnicas de predição de paleta podem ser usadas em conjunto com técnicas de sinalização de paleta. Isto é, o codificador de vídeo 20 pode ser configurado para sinalizar elementos de sintaxe que podem ser usados pelo decodificador de vídeo 30 para prever uma porção do número total de entradas de paleta. Além disso, o codificador de vídeo 20 pode ser configurado para assinalar explicitamente outra porção das entradas da paleta.
[0142] Em um exemplo de uma abordagem de predição de paleta, para cada CU, um sinalizador "pred_palette_flag" é transmitido. Um valor desse sinalizador igual a 1 especifica que a paleta para a CU atual será prevista a partir de dados passados e, portanto, não há necessidade de a paleta ser transmitida. Um valor desse sinalizador igual a 0 significa que a paleta da CU atual precisa ser transmitida. O indicador pode ser separado para diferentes componentes de cores (por exemplo, para que 3 indicadores precisem ser transmitidos para uma CU no vídeo YUV), ou um único indicador pode ser sinalizado para todos os componentes de cores. Por exemplo, um único indicador pode indicar se as paletas são transmitidas para todos os componentes ou se as paletas para todos os componentes serão preditas.
[0143] Em alguns exemplos, a predição pode ser realizada da seguinte maneira. Se o valor do sinalizador de predição for igual a 1, para a atual CU, o codificador de vídeo 20 copia a paleta de uma ou mais das UC já codificadas. A paleta das CU já codificadas pode ter sido transmitida ou predita. Por exemplo, a UC vizinha copiada pode ser a UC vizinha esquerda. No caso de a paleta da CU esquerda não estar disponível (como no caso em que a CU esquerda não está codificada usando o modo de paleta ou a CU atual está na primeira coluna da imagem), a cópia da paleta pode ser da CU acima da CU atual. A paleta copiada também pode ser uma combinação das paletas de um número de CUs vizinhas. Por exemplo, uma ou mais fórmulas, funções, regras ou similares podem ser aplicadas para gerar uma paleta baseada em paletas de uma ou uma combinação de uma pluralidade de CUs vizinhas.
[0144] Também é possível que uma lista de candidatos possa ser construída e um índice seja transmitido pelo codificador de vídeo 20 para indicar a CU candidata a partir da qual a CU atual copia a paleta. O decodificador de vídeo 30 pode construir a mesma lista de candidatos e, em seguida, usar o índice para selecionar a paleta da CU correspondente para uso com a CU atual. Por exemplo, a lista de candidatos pode incluir uma CU acima e uma CU à esquerda, em relação à CU atual, a ser codificada dentro de um slice ou imagem. Neste exemplo, um sinalizador ou outro elemento de sintaxe pode ser sinalizado para indicar a seleção do candidato. Por exemplo, um sinalizador transmitido igual a 0 significa que a cópia é da CU esquerda e um sinalizador transmitido igual a 1 significa que a cópia é da CU superior. O decodificador de vídeo 30 seleciona a paleta a ser copiada da CU vizinha correspondente e a copia para uso na decodificação da CU atual. A predição também pode ser derivada usando os valores de amostra mais freqüentes nos vizinhos causais da CU atual.
[0145] A predição de paletas também pode ser tipo entrada. Para cada entrada na paleta, o codificador de vídeo 20 gera e sinaliza um sinalizador. Um valor de um sinalizador igual a 1 para uma determinada entrada especifica que um valor previsto (por exemplo, a entrada correspondente de uma CU candidata selecionada como a CU esquerda) é usado como o valor dessa entrada. Um valor de um sinalizador igual a 0 especifica que esta entrada não está predita e seu valor será transmitido ao decodificador de vídeo 30 do codificador de vídeo 20, por exemplo, sinalizado em um fluxo de bits codificado pelo codificador de vídeo 20 para decodificação posterior pelo decodificador de vídeo 30.
[0146] O valor de "pred_palette_flag", a CU candidata cuja paleta é usada para prever a paleta da CU atual ou as regras para a construção dos candidatos, também pode ser condicionalmente transmitido ou inferido com base em informações laterais da mesma maneira como descrito acima para "Transmissão do sinalizador PLT_Mode_flag".
[0147] Em seguida, o codificador de vídeo 20 pode gerar e sinalizar um mapa que indica qual a respectiva entrada de paleta está associada a cada pixel em uma CU. A entrada i-ésima no mapa corresponde à posição i-ésima na CU. Um valor da entrada i-ésima igual a 1 especifica que o valor de pixel nesta localização i-ésima na CU é um dos valores na paleta e um índice de paleta é ainda transmitido de modo que o decodificador de vídeo 30 possa reconstruir o valor de pixel (no caso de haver apenas uma entrada na paleta, a transmissão do índice da paleta pode ser derivada). Um valor da entrada i-ésima igual a 0 especifica que o valor do pixel na posição i-ésima na CU não está na paleta e, portanto, o valor do pixel será transmitido explicitamente ao decodificador de vídeo 30.
[0148] Se o valor de pixel em uma posição na CU for um valor na paleta, observa-se que há uma alta probabilidade de que as posições vizinhas na CU tenham o mesmo valor de pixel. Assim, depois de codificar um índice de paleta (digamos j, que corresponde aos valores de pixel s) para uma posição, o codificador de vídeo 20 pode transmitir um elemento de sintaxe "executar" para indicar o número de valores consecutivos do mesmo valor de pixels na CU antes que a varredura atinja um valor de pixel diferente. Por exemplo, se o índice próximo imediato apresentar um valor diferente de s, então será transmitido execução = 0. Se o próximo índice for s, mas o seguinte não for s, então será transmitido execução = 1.
[0149] No caso em que uma execução não é transmitida (por exemplo, derivação de execução implícita), o valor da execução pode ser uma constante, por exemplo, 4, 8, 16, etc., ou o valor da execução também pode ser dependente de informações laterais. Por exemplo, o valor da execução pode depender do tamanho do bloco, por exemplo, a execução é igual à largura do bloco atual, ou a altura do bloco atual, ou a meia largura (ou meia altura) do bloco corrente, ou uma fração da largura e altura do bloco, ou um múltiplo da altura / largura do bloco. O valor da execução também pode ser dependente do QP, tipo de quadro, componente de cor, formato de cor (por exemplo, 444, 422, 420) e / ou espaço de cores (por exemplo, YUV, RGB). O valor da execução também pode depender da direção da varredura. Em outros exemplos, o valor da execução pode depender de outros tipos de informações laterais. O valor da execução também pode ser sinalizado usando sintaxe de alto nível (por exemplo, PPS, SPS).
[0150] Em alguns exemplos, o mapa pode não precisar ser transmitido. A execução só pode começar em determinados locais. Por exemplo, a execução só pode começar no início de cada linha ou no início de cada N linhas. O local inicial pode ser diferente para diferentes direções de varredura. Por exemplo, se a varredura vertical for usada, a execução só pode começar no início de uma coluna ou no início de cada N colunas. O local de início pode depender de informações laterais. Por exemplo, o local de início pode ser o ponto médio de cada linha, ou cada coluna, ou 1 / n, 2 / n, ... (n-l) / n (isto é, frações) de cada linha / coluna. A localização de início também pode depender do QP, do tipo de quadro, componente de cor, formato de cor (por exemplo, 444, 422, 420) e / ou espaço de cores (por exemplo, YUV, RGB). Em outros exemplos, a posição de início da execução pode depender de outros tipos de informações laterais. A posição de início também pode ser sinalizada usando sintaxe de alto nível (por exemplo, PPS, SPS, etc.).
[0151] Também é possível que a derivação implícita da posição inicial e a derivação de execução implícita sejam combinadas. Por exemplo, a execução é igual à distância entre duas posições iniciais vizinhas. No caso de o ponto de início ser o início (ou seja, a primeira posição) de cada linha, o comprimento da execução será uma linha.
[0152] A direção da varredura pode ser vertical ou horizontal. É possível que um sinalizador seja transmitido para cada CU para indicar a direção da varredura. Os indicadores podem ser transmitidos separadamente para cada componente ou um único sinalizador pode ser transmitido e a direção de varredura indicada se aplica a todos os componentes de cores. Também é possível que outras direções de varredura, como 45 graus ou 135 graus, sejam usadas. A ordem de varredura pode ser corrigida ou pode depender de informações laterais da mesma maneira descrita acima para "Transmissão do sinalizador PLT_Mode_flag ".
[0153] Acima, explica-se como transmitir uma paleta. Uma alternativa aos exemplos acima descritos é a construção da paleta em tempo real. Neste caso, no início da CU, não há entrada na paleta, e como o codificador de vídeo 20 sinaliza novos valores dos pixels para as posições na CU, esses valores estão incluídos na paleta. Ou seja, o codificador de vídeo 20 adiciona valores de pixel à paleta à medida que eles são gerados e transmitidos para posições na CU. Em seguida, posições posteriores na CU que apresentam os mesmos valores podem se referir a valores de pixels na paleta, por exemplo, com valores de índice, ao invés do codificador de vídeo 20 transmitir os valores de pixel. Da mesma forma, quando o decodificador de vídeo 30 recebe um novo valor de pixel (por exemplo, sinalizado pelo codificador) para uma posição na CU, ele inclui o valor de pixel na paleta construída pelo decodificador de vídeo 30. Quando posições posteriores na CU têm valores de pixel que foram adicionados à paleta, o decodificador de vídeo 30 pode receber informações como, por exemplo, valores de índice, que identificam os valores de pixels correspondentes na paleta para reconstrução dos valores de pixel na CU.
[0154] Se o tamanho máximo da paleta for atingido, por exemplo, à medida que a paleta é construída de forma dinâmica em tempo real, o codificador e o decodificador compartilharão o mesmo mecanismo para remover uma entrada da paleta. Um método é remover a entrada mais antiga na paleta (fila FIFO). Outro método é remover a entrada menos utilizada na paleta. Outra é o peso de ambos os métodos (tempo na paleta e freqüência de uso) para decidir a substituição da entrada. Como um exemplo, se uma entrada de valor de pixel for removida da paleta e o valor do pixel ocorrer novamente em uma posição posterior na paleta, o codificador poderá transmitir o valor do pixel em vez de incluir uma entrada na paleta. Além disso, ou, alternativamente, é possível que um tal valor de pixel possa ser reintroduzido na paleta depois de ter sido removido, por exemplo, à medida que o codificador e o decodificador varrerem as posições na CU.
[0155] Esta descrição também considera a combinação de uma sinalização de paleta inicial com a derivação em tempo real da paleta. Em um exemplo, a paleta inicial seria atualizada com a codificação dos pixels. Por exemplo, ao transmitir a paleta inicial, o codificador de vídeo 20 pode adicionar valores à paleta inicial ou alterar valores na paleta inicial, uma vez que os valores de pixel de locais adicionais na CU são digitalizados. Da mesma forma, ao receber uma paleta inicial, o decodificador de vídeo 30 pode adicionar valores à paleta inicial ou alterar valores na paleta inicial à medida que os valores de pixel de locais adicionais na CU são varridos. De igual modo, o codificador pode indicar se a CU atual usa a transmissão de toda a paleta ou a geração de paleta em tempo real, ou uma combinação de transmissão de uma paleta inicial com atualização da paleta inicial por derivação em tempo real. Em alguns exemplos, a paleta inicial pode ser uma paleta completa no tamanho máximo da paleta, caso em que os valores na paleta inicial podem ser alterados ou uma paleta de tamanho reduzido, nos quais os valores são adicionados à paleta inicial e, opcionalmente, valores na paleta inicial são alterados.
[0156] Acima, foi descrito como transmitir o mapa identificando o valor do pixel. Através do método descrito acima, a transmissão do mapa pode ser feita através da sinalização de cópia de linha. Em um exemplo, a cópia de linha é sinalizada pelo codificador de vídeo 20, de modo que o valor de pixel para uma entrada é igual ao valor de pixel da entrada de uma linha acima (ou na coluna à esquerda se a varredura for vertical). Então, a "execução" das entradas que são copiadas da linha pode ser sinalizada. Além disso, a linha a partir da qual é copiada pode ser indicada; várias linhas acima podem ser armazenadas para este fim. Por exemplo, as quatro filas anteriores são armazenadas e cuja fila é copiada pode ser sinalizada com um código unário truncado ou outros códigos e, em seguida, quantos itens dessa fila são copiados, ou seja, a execução pode ser sinalizada. Assim, em alguns exemplos, o valor de pixel para uma entrada pode ser sinalizado para ser igual a um valor de pixel de uma entrada em uma fila imediatamente acima ou duas ou mais filas acima da linha atual.
[0157] No caso em que nenhuma execução é sinalizada, o valor da execução pode ser constante / fixo ou pode ser dependente de informações laterais (e derivadas pelo decodificador) usando o método descrito acima.
[0158] Também é possível que o mapa não precise ser transmitido. Por exemplo, a execução pode começar apenas em determinadas posições. A posição de início pode ser corrigida ou pode depender de informações laterais (e derivadas pelo decodificador), de modo que a sinalização da posição inicial pode ser ignorada. Em vez disso, uma ou mais técnicas descritas acima podem ser aplicadas. A derivação de posição de início implícita e a derivação de execução implícita também podem ser combinadas usando o mesmo método conforme descrito acima.
[0159] Se ambos os métodos de transmissão de mapa forem usados, um sinalizador ou outro elemento de sintaxe poderá indicar se o pixel é obtido a partir da paleta ou das linhas anteriores e, em seguida, um índice indica a entrada na paleta ou a fila, e finalmente, a "execução".
[0160] Esta descrição descreve métodos, dispositivos e técnicas para simplificar a codificação do modo de paleta e / ou para melhorar a eficiência de codificação baseada em paleta. As técnicas desta descrição podem ser usadas conjuntamente ou separadamente para melhorar a eficiência de codificação e / ou reduzir a complexidade do codec. Em geral, de acordo com as técnicas desta descrição, um dispositivo de codificação de vídeo pode ser configurado para codificar e decodificar dados de vídeo usando um ou mais modos de codificação de paleta, em que os modos de codificação de paleta não incluem um modo de compartilhamento de paleta.
[0161] Em um modo de paleta de exemplo, um sinalizador, como o sinalizador de compartilhamento de paleta, pode ser sinalizado no fluxo de bits para indicar que a paleta para ou mais blocos de dados de vídeo são compartilhados ou mesclados a partir da paleta de outro bloco de dados de vídeo. O bloco de dados de vídeo a partir do qual obter a paleta compartilhada pode basear-se em regras predeterminadas (por exemplo, usar a paleta do bloco para a esquerda ou acima do bloco atual) ou pode ser indicado de outra forma no fluxo de bits de vídeo codificado. Conforme descrito em R. Joshi e J. Xu, "High eficcient vídeo coding (HEVC) screeen content coding: Draft 2," JCTVC-S1005, seção 7.4.9.6 ", a semântica do indicador de compartilhamento de paleta é declarada como" palette_share_flag [xO ] [YO] igual a 1 especifica que a paleta para a unidade de codificação atual é derivada copiando as primeiras entradas do PreviousPaletteSize da paleta do preditor. A variável PreviousPaletteSize é derivada conforme especificado na subcláusula 8.4.5.2.8. Sinalizador de compartilhamento de paleta [x0] [y0] igual a 0 especifica que a paleta para a unidade de codificação atual é especificada como uma combinação de entradas de paleta de unidades de codificação anteriores e novas entradas de paleta que são explicitamente sinalizadas.”
[0162] Em um exemplo, quando o valor do sinalizador palette_share_ é igual a 1, o sinalizador palette_share_ indica que o bloco atual pode reutilizar a última paleta codificada do bloco previamente codificado. Esse método também é conhecido como compartilhamento de paletas. No entanto, os novos resultados da pesquisa indicam que este sinalizador, juntamente com o método de compartilhamento de paleta que representa, não é eficaz para melhorar a eficiência de codificação, ao mesmo tempo que introduz uma complexidade adicional de análise e decodificação.
[0163] Além disso, algumas redundâncias são identificadas no processo de sinalização para um elemento de sintaxe que indica um tipo de execução, como o sinalizador do tipo de execução de paletas. Especificamente, quando o pixel atual é o primeiro pixel em uma linha em uma ordem de varredura, e um pixel vizinho ao pixel atual e acima do pixel atual está disponível, o pixel atual não pode estar no modo "copiar acima". O termo "pixel acima está disponível" significa que o vizinho acima está dentro do bloco atual para a varredura horizontal ou o vizinho esquerdo está dentro do bloco para a ordem de varredura vertical se os métodos "copiar de fora" não estiverem ativados. Quando os métodos "copiar de fora" estão habilitados, o "pixel acima" pode estar sempre disponível para cada pixel dentro do bloco. Os métodos de exemplo "copiar de fora" estão descritos em Y.-C. Sun, J. Kim, T.-D. Chuang, Y.-W. Chen, S. Liu, Y.-W. Huang e S. Lei, "Não-CE6: Cross-CU palette colour index prediction ", JCTVC-S0079 e J. Kim, Y.-C. Sun, S. Liu, T.-D. Chuang, Y.- W. Chen, Y.-W. Huang e S. Lei " CE6-related:Enabling copy above mode prediction at the boundary of CU", JCTVC-SOl 14.
[0164] Se o pixel atual for codificado de acordo com o modo "copiar acima", o índice de pixels atual será igual ao índice do vizinho acima do pixel atual. Em contrapartida, devido à regra de que o modo "copiar acima" não pode ser seguido imediatamente por outro modo "copiar acima", o vizinho acima deve ser o fim de uma execução de "índice de cópia". Portanto, o "índice de cópia" do vizinho anterior pode ser estendido em pelo menos 1, adicionando o pixel atual ao "índice de cópia", em vez de considerar o pixel atual o primeiro pixel de uma execução "copiar acima". Assim, é possível desativar normativamente o modo "copiar acima", se o pixel atual for o primeiro pixel em uma linha em uma ordem de varredura. Isso resulta em economia de bits uma vez que, para esse pixel, o tipo de execução pode ser inferido como "índice de cópia", eliminando assim a necessidade de sinalizar esse índice.
[0165] Além disso, a binarização atual para entradas sinalizadas de paleta de elementos de sintaxe está em código unário truncado. O elemento de sintaxe das entradas sinalizadas do número de paleta indica o número de entradas na paleta atual (por exemplo, uma paleta a ser usada para codificar o bloco atual de dados de vídeo) que são explicitamente sinalizadas. O número de amostras que são explicitamente sinalizadas pode ser determinado pela diferença entre o número de entradas na paleta subtraída do número de entradas na paleta que são previstas a partir da paleta de outro bloco de dados de vídeo (incluindo quaisquer entradas de paleta que indicam o uso de uma amostra de escape). Em alguns exemplos, o elemento de sintaxe das entradas sinalizadas do número de paleta pode ser denominado elemento em uma sintaxe _palette_entries sinalizada.
[0166] Em alguns exemplos, a palavra de código usada para codificar o valor do elemento de sintaxe das entradas sinalizadas da paleta não pode ser indesejável, o que pode resultar em palavras de código de comprimento superior a 32. Por exemplo, em HEVC1, todas as palavras de código são de comprimento 32 ou menos. A mesma situação também pode ocorrer ao codificar o valor do elemento de sintaxe palette_predictor_run. O elemento de sintaxe palette_predictor_run especifica o número de zeros que precedem uma entrada não-zero no indicador de reutilização de entrada jDalette do preditor de matriz. O preditor _palette_entry_reuse_flag indica se uma determinada paleta de uma ou mais paletas usadas anteriormente é reutilizada para a paleta atual. O valor de paleta _predictor_run pode variar de 0 para o tamanho máximo do preditor de paleta, inclusive.
[0167] Em vista desses inconvenientes, em um exemplo da descrição, esta descrição propõe que o codificador de vídeo 20 e o decodificador de vídeo 30 sejam configurados para executar um modo de codificação baseado em paleta sem técnicas de compartilhamento de paleta. Mais especificamente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para executar codificação baseada em paleta sem usar o elemento de sintaxe palette_share_flag [xO] [yO], conforme indicado abaixo:
[0168] Em vez de usar técnicas de compartilhamento de paleta, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar uma paleta para uso com mais um bloco de dados de vídeo usando outras técnicas, como técnicas de predição de paleta descritas acima. Em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para executar a predição da paleta usando as seguintes técnicas.
[0169] A figura 4 é um diagrama de blocos que mostra a unidade de codificação baseada em paletas 122 do codificador de vídeo 20 com mais detalhes. A unidade de codificação baseada em paleta 122 pode ser configurada para executar uma ou mais das técnicas de exemplo desta descrição para codificação de vídeo baseada em paleta.
[0170] Como descrito acima, a unidade de codificação baseada em paleta 122 pode ser configurada para codificar um bloco de dados de vídeo (por exemplo, uma CU ou PU) com um modo de codificação baseado em paleta. Em um modo de codificação baseado em paleta, uma paleta pode incluir entradas numeradas por um índice e representando valores de componentes de cores (por exemplo, RGB, YUV etc.) ou intensidades que podem ser usadas para indicar valores de pixels. A unidade de geração de paleta 203 pode ser configurada para receber os valores de pixel 212 para um bloco atual de dados de vídeo e gerar uma paleta de valores de cor para o atual bloco de dados de vídeo. A unidade de geração de paleta 203 pode usar qualquer técnica para gerar uma paleta para um bloco atual de dados de vídeo, incluindo as técnicas baseadas em histograma discutidas acima. A unidade de geração de paleta 203 pode ser configurada para gerar uma paleta de qualquer tamanho. Em um exemplo, a unidade de geração de paleta 203 pode ser configurada para gerar 32 entradas de paleta, em que cada entrada de paleta inclui valores de pixel para os componentes Y, Cr e Cb de um pixel. No exemplo anterior, assume-se que cada entrada de paleta especifica os valores de todos os componentes de cores de uma amostra (pixel). No entanto, os conceitos descritos neste documento são aplicáveis ao uso de uma paleta separada para cada componente de cor.
[0171] Uma vez que uma paleta é gerada pela unidade de geração de paleta 203, a unidade de mapa 204 pode gerar um mapa para o bloco atual de dados de vídeo que indica se um pixel particular no bloco atual de dados de vídeo pode ser representado por uma entrada na paleta gerada pela unidade de geração de paleta 203. A unidade de mapa 204 pode produzir um mapa 214 que inclui elementos de sintaxe que indicam como cada pixel usa (ou não usa) entradas da paleta. Conforme discutido acima, em alguns exemplos, os pixels de escape não são sinalizados com um elemento de sintaxe separado, mas sim podem ser indicados com um índice reservado predeterminado em uma paleta. Se o valor para um pixel no bloco atual de dados de vídeo não for encontrado na paleta, a unidade de mapa 204 pode indicar o uso de um pixel de escape com o índice reservado na paleta e transmitir explicitamente um valor de pixel para esse pixel particular. Em alguns exemplos, a unidade de mapa 204 pode prever o valor de pixel explícito de uma das entradas encontradas na paleta. Em alguns outros exemplos, a unidade de mapa 204 pode quantificar o pixel e transmitir os valores quantificados.
[0172] Além dos elementos de sintaxe de sinalização que indicam os valores de cor utilizados para cada um dos pixels em um bloco, a unidade de codificação baseada em paleta 122 também pode ser configurada para sinalizar a paleta que deve ser usada para um bloco atual de dados de vídeo. De acordo com as técnicas desta descrição, a unidade de codificação baseada em paletas 122 pode ser configurada para empregar técnicas de predição de paleta para reduzir a quantidade de dados que é sinalizada para indicar os valores de uma paleta para um determinado bloco de dados de vídeo.
[0173] Como um exemplo de predição de paleta, conforme descrito em JCTVC-Q0094, que está disponível a partir de 20 de junho de 2014 em http://phenix.int- evry.fr/jct/doc_end_user/documents/17_Valencia/wgl l/ JCTVC-Q0094-vl .zip, uma paleta pode incluir entradas que são copiadas de uma paleta preditora. Uma paleta de preditores pode incluir entradas de paleta de blocos previamente codificados que usam o modo de paleta ou de outras amostras reconstruídas. Como mostrado na figura 4, a unidade de codificação baseada em paleta 122 pode incluir um armazenador temporário de paleta de preditores 210. O armazenador temporário de paleta de preditores 210 pode ser configurado para armazenar um número de entradas de paleta previamente utilizadas a partir de blocos previamente codificados. Como um exemplo, o armazenador temporário de paleta preditor 210 pode ser configurado como um armazenador temporário first-in-first-out (FIFO) de um tamanho predeterminado. O armazenador temporário 210 de paleta do preditor pode ser de qualquer tamanho. Em um exemplo, o armazenador temporário de paleta de preditores 210 inclui até 64 entradas de paleta previamente utilizadas.
[0174] Em alguns exemplos, a unidade de codificação baseada em paletas 122 pode ser configurada para cortar as entradas no armazenador temporário de paleta preditor 210 de tal modo que todas as entradas de paleta no armazenador temporário de paleta preditor 210 sejam únicas. Ou seja, para cada nova entrada de paleta a ser adicionada ao armazenador temporário de paleta preditor 210, a unidade de codificação baseada em paleta 122 pode ser configurada para verificar primeiro que não existem outras entradas idênticas já armazenadas no armazenador temporário de paleta preditor 210. Se não houver entradas idênticas, a nova entrada da paleta é adicionada ao armazenador temporário de paleta preditor 210. Se a nova entrada for uma duplicata de uma entrada existente, a nova entrada da paleta será adicionada ao armazenador temporário de paleta preditor 210 e as entradas duplicadas serão removidas do armazenador temporário de paleta preditor 210.
[0175] A unidade de codificação baseada em paleta 122 pode incluir uma unidade de geração de vetor de predição binária 206 que está configurada para gerar e sinalizar um sinalizador binário (por exemplo, o preditor _palette_entry_reuse_flag), para cada entrada em uma paleta para um bloco de dados de vídeo atual gerado pela unidade de geração de paleta 203, para indicar se uma entrada de paleta no armazenador temporário de paleta preditor 210 é copiada (ou reutilizada) para uma das entradas na paleta para o bloco atual de dados de vídeo (por exemplo, indicado por flag = 1). Ou seja, um sinalizador com um valor de 1 no vetor preditor binário indica que a entrada correspondente no armazenador temporário de paleta preditor 210 é reutilizada para a paleta para o bloco atual, enquanto um sinalizador com um valor de 0 no vetor de predição binário indica que a entrada correspondente no armazenador temporário de paleta preditor 210 não é reutilizada para a paleta para o bloco atua. Adicionalmente, a unidade de codificação baseada em paleta 122 pode ser configurada para indicar explicitamente alguns valores para a paleta atual que não podem ser copiados a partir de entradas no armazenador temporário de paleta preditor 210. O número de novas entradas também pode ser sinalizado. A este respeito, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para sinalizar o número de entradas de paleta explicadas de forma explícita utilizando o elemento de sintaxe palette_num_signalled_entries.
[0176] Ao usar um modo de codificação baseado em paleta que usa técnicas de predição de paleta, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar, entre outros elementos de sintaxe, um elemento de sintaxe que indica o número de entradas de paleta que são explicitamente sinalizadas para uma paleta atual para ser usada para codificar o bloco atual de dados de vídeo (por exemplo, entradas sinalizadas de paleta). Esta descrição propõe técnicas para melhorar a eficiência de codificação ou restringir o comprimento da palavra de código ao codificar esse elemento de sintaxe.
[0177] Em um exemplo da descrição, a unidade de codificação baseada em paleta 122 pode ser configurada para codificar o primeiro bin de um elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas, tal como elemento de sintaxe de entradas sinalizadas de paleta, usando um contexto CAB AC. A unidade de codificação baseada em paleta 122 pode codificar outros bins das entradas sinalizadas de paletas com outras técnicas de codificação. Em outro exemplo da descrição, a unidade de codificação baseada em paletas 122 pode ser configurada para usar mais do que um contexto para codificar o primeiro bin do elemento de sintaxe das entradas sinalizadas na paleta. Em um exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para determinar os contextos com base em um tamanho de bloco do bloco de vídeo atual sendo codificado e / ou com base no valor de outros elementos de sintaxe.
[0178] De acordo com um exemplo da descrição, a unidade de codificação baseada em paletas 122 pode ser configurada para determinar um primeiro bin de um primeiro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. O codificador de vídeo 20 pode ainda ser configurado para codificar um fluxo de bits que inclui o primeiro elemento de sintaxe. O fluxo de bits também não pode incluir um segundo elemento de sintaxe que indique um modo bin de paleta. Em alguns exemplos, a unidade de codificação baseada em paletas 122 pode ser configurada para codificar o primeiro compartimento do primeiro elemento de sintaxe usando uma codificação aritmética binária adaptável ao contexto. Em outros exemplos, a unidade de codificação baseada em paleta 122 pode ser configurada para codificar a primeira lixeira do primeiro elemento de sintaxe usando um ou mais contextos. Em alguns exemplos de utilização de um ou mais contextos, um ou mais contextos podem ser baseados em pelo menos um de um número previsto de entradas de codificação baseada em paleta ou um tamanho de bloco.
[0179] Em outro exemplo da descrição, para evitar que o comprimento da palavra de código das entradas sinalizadas de paleta para aumente para mais de 32 bits, propõe-se que as mudanças semânticas normativas sejam feitas para as técnicas atuais de codificação de paleta (por exemplo, R. Joshi e J. Xu, "High eficiente vídeo coding (HEVC) screen conten coding: Draft 2," JCTVC-S1005). Por exemplo, os valores viáveis de um elemento de sintaxe que especifica o tamanho de paleta máximo , tal como palette_max_predictor_size, podem ser limitados por um valor limite. Um tal valor limite pode ser predeterminado e armazenado em uma memória (por exemplo, memória de dados de vídeo 98 na figura 2 ou memória de dados de vídeo 148 na figura 3) que é acessível por unidade de codificação baseada em paletas 122. Especificamente, para palette_max_size, o valor pode ser qualquer valor de 0 a Tl, inclusive, onde Tl é o limite. Quando não está presente, a unidade de codificação baseada em paleta 122 pode ser configurada para inferir o valor do tamanho máximo da paleta a ser 0. Além disso, para palette_max_predictor_size, o valor pode ser qualquer valor de 0 a T2, inclusive, onde T2 é o limite. Quando não está presente, a unidade de codificação baseada em paleta 122 pode ser configurada para inferir o valor de palette_max_predictor_size para ser 0.
[0180] Em um exemplo, Tl é igual a 4096 e T2 é igual a 8192. Em outro exemplo, Tl é igual a 4095 e T2 é igual a 4095. Ainda em outro exemplo, Tl é igual a 4095 e T2 é igual a 8191.
[0181] Como outro exemplo, esta descrição propõe que o valor do tamanho máximo da paleta seja igual ao número de pixels na unidade de codificação de maior tamanho. Esse valor pode ser predeterminado e armazenado em uma memória acessível por unidade de codificação baseada em paletas 122. Em alguns exemplos, o valor da palette_max_predictor_size pode ser menor ou igual ao tamanho máximo da paleta K *, onde K é uma constante positiva. Em alguns exemplos, K = 2.
[0182] Em outro exemplo, a unidade de codificação baseada em paletas 122 (por exemplo, usando a unidade de compressão de vetor binário 209 ou outro componente estrutural do codificador de vídeo 20, tal como a unidade de codificação por entropia 118) pode ser configurada para codificar o valor do número de elemento de sintaxe da palett_num_signalled_entries usando uma ou mais técnicas de codificação da família do código Golomb (por exemplo, código Golomb-Rice, código Golomb Exponencial, código de Rice truncado, código Unário, etc.). Em um exemplo da descrição, a unidade de codificação baseada em paletas 122 é configurada para codificar o valor do elemento de sintaxe de entradas sinalizadas na paleta em um código de ordem exponencial de Golomb 0. Em outro exemplo da descrição, a unidade de codificação baseada em paletas 122 é configurada para codificar o valor do elemento de sintaxe da palette_num_signalled_entries usando uma concatenação de um código de Rice Truncado (TR) e um código exponencial de Golomb, como o usado na codificação de coeficientes para codificar o elemento de sintaxe remanescente de nível de coeff abs em HEVC1.
[0183] Um exemplo de uma concatenação de um código TR e um código exponencial de Golomb para o parâmetro Golomb Rice de 0 é mostrado abaixo: Aqui, x pode ter um valor de 0 ou 1. Da mesma forma, a tabela abaixo mostra um exemplo de uma binarização concatenada usada na codificação do elemento de sintaxe paletteRun. Esta é uma concatenação de Rice truncado e um código de ordem Golombo exponencial truncado 0 para um valor de execução máximo de 7.Aqui x pode ter um valor de 0 ou 1
[0184] Usando um ou mais códigos de Golomb (por exemplo, como um código exponencial de Golomb ou uma concatenação de código TR e um código exponencial de Golomb) para codificar o elemento de sintaxe de palett_num_signalled_entries fornece um benefício em comparação com técnicas anteriores para codificação do valor do elemento de sintaxe das palette_signalled_entries. As técnicas anteriores para codificar o valor do elemento de sintaxe das palette_num_signalled_entries usaram um código unário. O uso de um código unário resultou no comprimento codificado do elemento de sintaxe das palette_num_signalled_entries que é maior que 32 bits em algumas circunstâncias. Ao usar um ou mais códigos Golomb para codificar o elemento de sintaxe da palette_num_signalled_entries, as técnicas dessa descrição permitem que a unidade de codificação baseada em paleta 122 codifique o valor do elemento de sintaxe de palette_signalled_entries em um modo que mantenha o comprimento codificado em ou abaixo de um número predeterminado de bits (por exemplo, 32 bits).
[0185] Em outro exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para codificar o valor do elemento de sintaxe de palette_signalled_entries com versão truncada de uma família de códigos de Golomb (por exemplo, código de Rice Golombo truncado, código de Golomb Exponencial truncado, Código de Rice truncado, código Unário truncado, etc.). Em outro exemplo da descrição, a unidade de codificação baseada em paletas 122 pode ser configurada para codificar o valor do elemento de sintaxe das palette_num_signalled_entries usando o mesmo código usado para codificar o elemento de sintaxe paletteRun. Em outro exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para codificar o valor do elemento de sintaxe de palette_num_signalled_entries usando o método usado para codificar o elemento de sintaxe restante de coeff abs no coeficiente de codificação (por exemplo, concatenação de Rice Truncado (TR) e código exponencial de Golomb). De acordo com este exemplo, o parâmetro TR é preferido para ser 0. Em cada um desses exemplos, o código truncado particular é escolhido de tal forma que o comprimento codificado do elemento de sintaxe de palette_num_signalled_entries seja mantido em ou abaixo de 32 bits.
[0186] Em outro exemplo, propõe-se impor uma restrição no fluxo de bits que o palette_num_signalled_entries seja igual ao número de pixels no bloco. Ou seja, a unidade de codificação baseada em paleta 122 pode ser configurada para limitar o possível valor do elemento de sintaxe da palette_num_signalled_entries pelo número de pixels no bloco atualmente codificado. Em outro exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para limitar o possível valor de palette_num_signalled_entries pelo número de pixels no maior bloco possível de uma imagem específica (por exemplo, o tamanho de bloco grande definido por um vídeo específico padrão de codificação).
[0187] Em outro exemplo, a unidade de codificação baseada em paletas 122 pode ser configurada para ignorar a sinalização de um elemento de sintaxe que indica um tipo de execução, como o sinalizador de tipo de execução de paletas, se o pixel atual for o primeiro pixel na linha na ordem de varredura e o pixel vizinho ao pixel atual acima do pixel atual estiver disponível. Em um exemplo, a unidade de codificação baseada em paletas 122 pode ser configurada para determinar que um pixel atual é um primeiro pixel em uma linha em uma ordem de varredura. A unidade de codificação baseada em paleta 122 pode ainda determinar que um pixel vizinho situado acima do pixel atual está disponível. Em resposta à determinação de que o pixel atual é o primeiro pixel na linha na ordem de varredura e à determinação de que o pixel vizinho situado acima do pixel atual está disponível, a unidade de codificação baseada em paletas 122 pode ser ainda configurada para ignorar a codificação de um primeiro elemento de sintaxe em um fluxo de bits, em que o primeiro elemento de sintaxe indica um tipo de execução e codifica um restante do fluxo de bits.
[0188] Com referência à figura 4 e as técnicas de predição de paleta desta descrição, no pedido de invenção norte-americana n.° 14/667,411, depositado em 24 de março de 2015, publicado no documento de patente norte-americana n.° 2015/0281728, foi proposto um método de sinalização baseado em árvore binária e métodos de sinalização baseados em posição final para codificar o vetor preditor binário da paleta. No pedido provisório dos Estados Unidos n. ° 62 / 002.741, depositado em 23 de maio de 2014, foi proposto um método de sinalização baseado em grupo. Esta descrição propõe técnicas adicionais para gerar, codificar e decodificar o vetor de predição binária.
[0189] Alguns exemplos aqui descritos referem- se a métodos para codificar o vetor de predição de paleta para melhorar a eficiência de codificação. Por exemplo, suponha que o vetor de predição binária gerado pela unidade de geração de vetor de predição binária 206 seja denotado por: b = [bo, bi ..., bN-1], N>0, bi € {0,1}, 0^i < N. Na equação acima, bi € {0,1}, 0~i < N indica um indicador de predição (também chamado de indicador binário ou indicador de predição binária). Se N = 0, b = Φ (isto é, b é o vetor vazio), que não precisa ser sinalizado. Portanto, na descrição a seguir, pode-se presumir que N> 0.
[0190] A figura 5 mostra um exemplo de um armazenador temporário 210 de paleta preditora e uma paleta atual 220. Como pode ser visto na figura 5, a paleta atual 220 reutiliza valores de pixel do armazenador temporário de paleta preditora 210 associado aos índices de entrada 1, 2, 5 e 9. Como tal, um vetor preditor binário produzido pela unidade de geração de vetor de predição binária 206 da figura 4 seria b = [110010001000]. Como pode ser visto neste exemplo, o vetor de predição binária b inclui sinalizadores com um valor de 1 correspondente aos índices 1°, 2°, 5° e 9° no armazenador temporário de paleta preditora 210. Esse é o 1°, 2°, 5° e as 9 entradas no armazenador temporário de paleta preditora 210 são as únicas entradas reutilizadas para a paleta atual 220. Para os índices de entrada 5-8 na paleta atual 220, a unidade de codificação baseada em paleta 122 pode ser configurada para sinalizar de valores de entrada de paleta no fluxo de bits de vídeo codificado (por exemplo, usando sinalização explícita ou outra técnica de predição).
[0191] De acordo com uma ou mais técnicas desta descrição, o codificador de vídeo 20 pode ser configurado para codificar ou codificar geralmente o vetor preditor binário b de modo a reduzir a quantidade de dados necessários para sinalizar uma paleta no fluxo de bits de vídeo codificado. Como mostrado na figura 4, a unidade de compressão do vetor de predição binária 209 pode ser configurada para gerar e sinalizar o vetor de predição binária codificado 215. No entanto, deve entender-se que as técnicas de compressão do vetor de predição binária desta descrição podem ser implementadas em outras estruturas do codificador de vídeo 20, incluindo unidade de codificação por entropia 118 na figura 2.
[0192] Em um exemplo da descrição, a unidade de compressão do vetor de predição binária 209 pode ser configurada para codificar o vetor de predição binária usando técnicas de codificação baseadas no comprimento de corrida. Por exemplo, a unidade de compressão de vetor de predição binária 209 pode ser configurada para codificar o vetor de predição binária, sinalizando o número de '0s' consecutivos entre 'Is' no vetor de predição binária usando um código Exponencial-Golomb. Como exemplo, presume-se novamente que b = [110010001000]. Neste exemplo, como mostrado na figura 6, o vetor de predição binária (ou seja, b) pode ser expresso como: 'zero consecutivo 0s' — ‘1’- e quatro consecutivos Os’. Como é sabido que bi € {0, 1}, exceto para o último grupo 'consecutivo 0', cada grupo 'consecutivo 0' deve ser seguido por um ‘1”. Portanto, a unidade de compressão do vetor de predição binária 209 pode usar técnicas de codificação de comprimento de corrida baseadas em zero para representar o vetor b de predição binária como 'zero consecutivo 0' - 'zero consecutivo 0' - 'dois consecutivos 0' - 'três consecutivos 0' - 'quatro consecutivos 0', que podem ser expressos como o Sequência de comprimento de corrida '0-0-2-3-4'.
[0193] De acordo com um ou mais exemplos desta descrição relacionada com a sinalização baseada no comprimento de corrida, para codificar a sequência de comprimento de corrida, um código Golomb-Rice, código Exponencial-Golomb de qualquer ordem, código Exponencial- Golomb Truncado, Código de Rice truncado ou quaisquer outras binarizações, incluindo binarizações truncadas, poderão ser usadas. Em um exemplo, a unidade de compressão de vetor de predição binária 209 usa um código de Golpon Exponencial de 0a ordem como técnica de codificação de comprimento de corrida.
[0194] Para a binarização truncada, o símbolo máximo pode ser o valor máximo possível da execução dependendo da posição de '1' no vetor binário e do tamanho do vetor binário, uma vez que, ao se mover para o final do binário Vetor, o valor máximo de execução possível é reduzido do tamanho do vetor para 0 dependendo da posição dentro do vetor. Por exemplo, o símbolo máximo pode ser o comprimento do vetor binário ou o comprimento do vetor binário menos a posição do ‘1' a partir da qual a execução está sendo contada. Em outras palavras, é o comprimento restante medido a partir do final do vetor binário. Para o exemplo acima com o vetor binário b de um tamanho particular, por exemplo, 13, a sequência de comprimento de corrida '0-0-2-3-4' pode ser codificada com a binarização truncada '0[13]-0[12]-2[11]-3[8]-4[4]', onde o símbolo máximo é fornecido entre parênteses.
[0195] Além disso, em alguns exemplos, a binarização pode depender da posição ou índice do elemento (0 ou 1) no vetor binário. Como um exemplo particular, se a posição for menor do que um determinado limite, um tipo de binarização será usado; caso contrário, outro tipo de binarização será aplicado. Em alguns exemplos, o tipo de binarização pode ser diferentes códigos de binarização, ou a mesma família de código, mas com ordem diferente, como o código Exponencial-Golomb.
[0196] Em um exemplo, o valor limite pode ser o comprimento da paleta do bloco anterior ou bloco codificado da paleta anterior. Em outro exemplo, o limite pode ser fixado em algum valor padrão ou sinalizado por bloco, slice, imagem ou em outro lugar. Naturalmente que uma técnica correspondente poderá ser opcionalmente usada para definir um contexto CAB AC para codificar os valores de execução. Além disso, a unidade de codificação baseada em paleta 122 (veja a figura 2) pode ser configurada para parar a sinalização de comprimento de corrida quando o número de elementos T sinalizados (ou seja, o número de entradas de paleta do armazenador temporário de paleta preditora 210 indicado como reutilizado para a paleta corrente 220) atingir um número máximo possível. Em alguns exemplos, o número máximo possível é o tamanho de paleta máximo possível.
[0197] Alguns exemplos desta descrição referem- se à codificação de posição final da sequência de comprimento de corrida indicando o vetor de predição binária b. Em um ou mais exemplos desta descrição, a unidade de compressão de vetor de predição binária 209 pode ser configurada para codificar o vetor de predição binária b usando um comprimento de corrida reservado L para codificar a posição final do vetor de predição binária. Em um exemplo, L = 1 é usado como o comprimento de corrida reservado. No codificador de vídeo 20, se o comprimento de corrida for igual ou superior a L, a unidade de compressão de vetor de predição binária 209 será configurada para adicionar 1 ao comprimento de corrida. Se o comprimento de corrida real for inferior a L, a unidade de compressão de vetor de predição binária 209 será configurada para sinalizar o comprimento de corrida como é. A unidade de compressão de vetor de predição binária 209 pode sinalizar a posição final com o comprimento de corrida reservado L.
[0198] De igual modo, no decodificador de vídeo 30, se o valor decodificado de um comprimento de corrida for maior que L, 1 será subtraído do comprimento de corrida atual. Se o valor decodificado ou um comprimento de corrida for menor do que L, o valor decodificado será usado como o comprimento de corrida atual. Se o valor decodificado for igual a L, as posições restantes no vetor de predição binária b são todas 0. Portanto, se o valor decodificado for igual a L, não será necessária mais sinalização de execução.
[0199] Usando o mesmo exemplo acima (ou seja, b = [110010001000]) e assumindo que L = l, unidade de compressão de vetor de predição binária 209 é configurada para sinalizar a sequência de comprimento de corrida '0-02-3-4 ' da figura 6 como’0-0-3-4-1’. Em seguida, aplicando as regras acima, o decodificador de vídeo 30 pode ser configurado para recuperar a sequência de comprimento de corrida como '0-0-2-3-end'. Ou seja, o primeiro valor de comprimento de corrida de 0 é decodificado como 0 e a próxima sequência de comprimento de corrida de 0 é decodificada como 0, uma vez que ambas as sequências de comprimento de corrida 0 são inferiores ao valor de comprimento de corrida reservado de L = 1. A próxima sequência de comprimento de corrida é 3 e, como tal, o decodificador de vídeo 30 seria configurado para subtrair 1 do valor de 3 para obter 2, porque o valor recebido de 3 é maior que o valor de comprimento de corrida reservado de L = 1. Do mesmo modo, o decodificador de vídeo 30 seria configurado para subtrair 1 do valor recebido de 4 para obter 3 para a próxima sequência de comprimento de corrida, porque o valor recebido de 4 é maior que o valor de comprimento de corrida reservado de L = 1. Finalmente, o último valor de comprimento de corrida recebido 1 é igual ao valor de comprimento de corrida reservado de L = 1. Consequentemente, o decodificador de vídeo 30 pode determinar que não existam mais valores de ‘1'no vetor de predição binária.
[0200] A figura 7 é um diagrama de blocos que mostra um exemplo de unidade de decodificação baseada em paletas 165 do decodificador de vídeo 30. A unidade de decodificação baseada em paleta 165 pode ser configurada para executar de forma recíproca à unidade de codificação baseada em paletas 122 da figura 4. A unidade de decodificação baseada em paleta 165 pode ser configurada para receber um mapa 312 que indica, para cada pixel em um bloco atual, se serão ou não entradas para uma paleta para os pixels no bloco atual. Além disso, o mapa 312 pode ainda indicar quais entradas de paleta devem ser usadas para um determinado pixel. A unidade de mapa 302 pode decodificar o bloco atual de dados de vídeo usando o mapa 312 e uma paleta gerada pela unidade de geração de paletas 304 para produzir dados de vídeo decodificados 314.
[0201] De acordo com as técnicas desta descrição, a unidade de decodificação baseada em paleta 165 também pode receber um vetor de predição binária codificado 316. Como discutido acima, o vetor de predição binária 316 pode ser codificado usando uma técnica de codificação de comprimento de corrida que codifica uma corrida - sequência de comprimento indicando uma corrida de valores zero no vetor de predição binário. A unidade de descompressão do vetor de predição binária 306 pode ser configurada para decodificar o vetor de predição binária codificado 316 usando qualquer combinação das técnicas de codificação de comprimento de corrida descritas acima com referência às figuras 4-6. Uma vez que um vetor de predição binária é recuperado pela unidade de descompressão do vetor de predição binária 306, a unidade de geração de paleta 304 pode gerar uma paleta para o bloco atual de dados de vídeo com base no vetor de predição binária e entradas de paleta previamente utilizadas armazenadas no armazenador temporário de paleta preditora 310. A unidade de decodificação baseada em paleta 165 pode ser configurada para armazenar entradas de paleta usadas anteriormente no armazenador temporário de paleta preditora 310 da mesma maneira que a unidade de codificação baseada em paletas 122 (ver Figura 2) havia armazenado as entradas de paleta usadas anteriormente no armazenador temporário de paleta preditora 210.
[0202] Em um exemplo da descrição, a unidade de decodificação baseada em paleta 165 pode ser configurada para decodificar o primeiro bin de um elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas, tal como o elemento de sintaxe as entradas sinalizadas no Elemento de sintaxe baseado em paleta, usando um contexto CABAC. A unidade de decodificação baseada em paleta 165 pode decodificar outros bins das palette_num_signalled_entries com outras técnicas de decodificação. Em outro exemplo da descrição, a unidade de decodificação baseada em paleta 165 pode ser configurada para usar mais do que um contexto para decodificar o primeiro bin do elemento de sintaxe das palette_num_signalled_entries. Em um exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para determinar os contextos com base no tamanho de bloco do bloco de vídeo atual que está sendo decodificado e/ou com base no valor de outros elementos de sintaxe.
[0203] De acordo com um exemplo da descrição, a unidade de decodificação baseada em paleta 165 pode ser configurada para determinar um primeiro bin de um primeiro elemento de sintaxe que indica um número de entradas em uma paleta atual que são explicitamente sinalizadas. O decodificador de vídeo 30 pode ser ainda configurado para decodificar um fluxo de bits que inclui o primeiro elemento de sintaxe. O fluxo de bits também não pode incluir um segundo elemento de sintaxe que indique um modo de compartilhamento de paleta. Em alguns exemplos, a unidade de decodificação baseada em paleta 165 pode ser configurada para decodificar o primeiro bin do primeiro elemento de sintaxe co, usando uma codificação aritmética binária adaptável ao contexto. Em outros exemplos, a unidade de decodificação baseada em paleta 165 pode ser configurada para decodificar o primeiro bin do primeiro elemento de sintaxe usando um ou mais contextos. Em alguns exemplos de utilização de um ou mais contextos, um ou mais contextos podem ser baseados em pelo menos um de um número previsto de entradas de codificação de paleta ou um tamanho de bloco.
[0204] Em outro exemplo da descrição, para evitar que o comprimento da palette_num_signalled_entries aumente em mais de 32 bits, propõe-se que as mudanças semânticas normativas sejam feitas para as técnicas atuais de codificação de paleta. Por exemplo, os valores viáveis de um elemento de sintaxe que especifica o tamanho de paleta máximo permitido, como o tamanho máximo da paleta, e um elemento de sintaxe que especifica o tamanho máximo da paleta preditora, como pallet_max_predictor_size, podem ser limitados por um valor limite. Esse limite pode ser predeterminado e armazenado em uma memória (por exemplo, memória de dados de vídeo 148 na figura 3) que é acessível por unidade de decodificação baseada em paleta 165. Especificamente, para o tamanho máximo da paleta, o valor pode ser qualquer valor de 0 a Tl, inclusive, onde Tl é o valor limite. Quando não está presente, a unidade de decodificação baseada em paleta 165 pode ser configurada para inferir o valor de palett_max_size para ser 0. Além disso, para palette_max_predictor_size, o valor pode ser qualquer valor de 0 a T2, inclusive, onde T2 é o limite. Quando não presente, a unidade de decodificação baseada em paleta 165 pode ser configurada para inferir o valor de palette_max_predictor_size para ser 0.
[0205] Em um exemplo, Tl é igual a 4096 e T2 é igual a 8192. Em outro exemplo, Tl é igual a 4095 e T2 é igual a 4095. Ainda em outro exemplo, Tl é igual a 4095 e T2 é igual a 8191.
[0206] Como outro exemplo, esta descrição propõe que o valor de palett_max_size seja igual ao número de pixels na unidade de codificação de maior tamanho. Um tal valor pode ser predeterminado e armazenado em uma memória acessível por unidade de decodificação baseada em paleta 165. Em alguns exemplos, o valor do tamanho máximo da paleta _predictor_size pode ser menor ou igual ao palett_max_size K *, onde K é uma constante positiva. Em alguns exemplos, K=2.
[0207] Em um outro exemplo, a unidade de decodificação baseada em paletas 165 da figura 3 (por exemplo, usando a unidade de descompressão do vetor de predição binária 306 ou outro componente estrutural do decodificador de vídeo 30, tal como a unidade de decodificação por entropia 150 da figura 3) pode ser configurado para decodificar o valor do elemento de sintaxe de palett_num_signalled_entries usando uma ou mais técnicas de decodificação da família do código Golomb (por exemplo, código Golomb-Rice, código Golomb Exponencial, código de Rice truncado, código Unário, etc.). Em um exemplo da descrição, a unidade de decodificação baseada em paleta 165 é configurada para decodificar o valor do elemento de sintaxe da palette_signalled_entries com uma concatenação de Rice truncado e código de Golombo Exponencial.
[0208] Em outro exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para decodificar o valor do elemento de sintaxe de palette_num_signalled_entries usando uma versão truncada de uma família de códigos de Golomb (por exemplo, código de Rice Golombo truncado, código de Golomb Exponencial Truncado, Código de Rice truncado, código Unário truncado, etc.). Em outro exemplo da descrição, a unidade de decodificação baseada em paleta 165 pode ser configurada para decodificar o valor do elemento de sintaxe da palette_num_signalled_entries usando o mesmo código usado para codificar o elemento de sintaxe paletteRun. Em outro exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para decodificar o valor do elemento de sintaxe da palette_num_signalled_entries usando o método de decodificação do elemento de sintaxe do restante do coeficiente absoluto na decodificação de coeficientes (por exemplo, concatenação de Rice Truncado (TR) e Código exponencial de Golomb). De acordo com este exemplo, o parâmetro TR é preferido para ser 0.
[0209] Em outro exemplo, propõe-se impor uma restrição ao fluxo de bits em que palette_num_signalled_entries é igual ao número de pixels no bloco. Ou seja, a unidade de decodificação baseada em paleta 165 pode ser configurada para limitar o possível valor do elemento de sintaxe da palette_num_signalled_entries pelo número de pixels no bloco atualmente codificado. Em outro exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para limitar o possível valor das palette_num_signalled_entries pelo número de pixels no maior bloco possível de uma imagem particular (por exemplo, o tamanho de bloco grande definido por um vídeo particular padrão de codificação).
[0210] Em outro exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para inferir o valor de um elemento de sintaxe que indica um tipo de execução, como o indicador do tipo de execução da paleta, se o pixel atual for o primeiro pixel na linha na ordem de varredura e o pixel vizinho do pixel atual acima do pixel atual estiver disponível. Em um exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para determinar que um pixel atual é um primeiro pixel em uma linha em uma ordem de varredura. A unidade de decodificação baseada em paleta 165 pode ainda determinar que um pixel vizinho situado acima do pixel atual está disponível. Em resposta à determinação de que o pixel atual é o primeiro pixel na linha na ordem de varredura e à determinação de que o pixel vizinho situado acima do pixel atual está disponível, a unidade de decodificação baseada em paleta 165 pode ser ainda configurada para inferir o valor do primeiro elemento de sintaxe em um fluxo de bits, em que o primeiro elemento de sintaxe indica um tipo de execução e codifica um restante do fluxo de bits.
[0211] A figura 8 é um fluxograma que ilustra um exemplo de método de codificação de vídeo de acordo com as técnicas da descrição. As técnicas da figura 8 podem ser implementadas por uma ou mais estruturas de hardware do codificador de vídeo 20, incluindo a unidade de codificação baseada em paleta 122 e / ou a unidade de codificação por entropia 118 (ver a figura 2).
[0212] Em um exemplo da descrição, o codificador de vídeo 20 pode ser configurado para codificar um bloco de dados de vídeo usando um modo de codificação baseado em paleta e uma paleta (800) e gerando uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizadas no fluxo de bits de vídeo codificado (802). O codificador de vídeo 20 pode ainda ser configurado para codificar o primeiro elemento de sintaxe usando um ou mais códigos de Golomb de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número predeterminado de bits (804) e inclua a pluralidade de elementos de sintaxe em um fluxo de bits de vídeo codificado (806).
[0213] Em um exemplo da descrição, o primeiro elemento de sintaxe é um elemento de sintaxe de palette_num_signalled_entries. Em outro exemplo da descrição, a pluralidade de elementos de sintaxe inclui os valores de paleta indicados como sendo explicitamente sinalizados pelo primeiro elemento de sintaxe.
[0214] Em um exemplo da descrição, o número máximo predeterminado de bits é 32, e um ou mais códigos Golomb é um código exponencial de Golomb da ordem 0. Em outro exemplo da descrição, o número máximo predeterminado de Bits é 32, e um ou mais códigos Golomb é uma concatenação de um código de Rice truncado e um código exponencial de Golomb.
[0215] Em outro exemplo da descrição, um valor máximo do primeiro elemento de sintaxe é definido em relação a um segundo elemento de sintaxe que indica um tamanho máximo da paleta e um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta. Neste exemplo, o codificador de vídeo 20 pode ainda ser configurado para definir o segundo elemento de sintaxe para ser um valor de 0 para um primeiro valor limite e definir o terceiro elemento de sintaxe para ser um valor de 0 a um segundo valor limite. Em um exemplo, o primeiro valor limite é um de 4095 ou 4096 e o segundo valor limite é um de 4095, 8191 ou 8192.
[0216] Em outro exemplo da descrição, um valor máximo do primeiro elemento de sintaxe é definido em relação a um segundo elemento de sintaxe que indica um tamanho máximo da paleta e um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta. Neste exemplo, o codificador de vídeo 20 pode ser ainda configurado para definir o segundo elemento de sintaxe para ser menor ou igual a um número de pixels em um bloco maior possível no fluxo de bits de vídeo codificado e definir o terceiro elemento de sintaxe para ser inferior ou igual a um valor K * do segundo elemento de sintaxe, onde K é uma constante positiva. Em um exemplo, K é 2.
[0217] Em outro exemplo da descrição, o codificador de vídeo 20 pode ser ainda configurado para sinalizar um elemento de sintaxe indicando um tipo de execução de paleta no caso de um pixel atual não ser um primeiro pixel em uma ordem de varredura e não sinalizar o elemento de sintaxe indicando um tipo de execução de paletas no caso de o pixel atual ser o primeiro pixel na ordem de varredura e o anterior pixel/amostra estiver disponível.
[0218] A figura 9 é um fluxograma que ilustra um exemplo de método de decodificação de vídeo de acordo com as técnicas da descrição. As técnicas da figura 9 podem ser implementadas por uma ou mais estruturas de hardware do decodificador de vídeo 30, incluindo a unidade de decodificação baseada em paleta 165 e/ou a unidade de decodificação por entropia 150 (ver a figura 3).
[0219] Em um exemplo da descrição, o decodificador de vídeo 30 pode ser configurado para receber um bloco de dados de vídeo em um fluxo de bits de vídeo codificado, sendo que o bloco de dados de vídeo codificado usa um modo de codificação baseado em paletas (900) e recebe uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, em que o primeiro elemento de sintaxe é codificado usando um ou mais códigos Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits (902). O decodificador de vídeo 30 pode ser ainda configurado para decodificar a pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe utilizando um ou mais códigos Golomb (904), reconstruir a paleta com base na pluralidade decodificada de elementos de sintaxe (906) e decodificar o bloco de dados de vídeo usando a paleta reconstruída (908). O decodificador de vídeo 30 pode ser ainda configurado para exibir o bloco decodificado de dados de video.
[0220] Em um exemplo da descrição, o primeiro elemento de sintaxe é um elemento de sintaxe de palette_num_signalled_entries. Em outro exemplo da descrição, a pluralidade de elementos de sintaxe inclui os valores de paleta indicados como sendo explicitamente sinalizados pelo primeiro elemento de sintaxe.
[0221] Em um exemplo da descrição, o número máximo predeterminado de bits é 32, e um ou mais códigos Golomb é um código exponencial de Golomb da ordem 0. Em outro exemplo da descrição, o número máximo predeterminado de bits é 32, e um ou mais códigos Golomb é uma concatenação de um código de Rice truncado e um código exponencial de Golomb.
[0222] Em outro exemplo da descrição, um valor máximo do primeiro elemento de sintaxe é definido em relação a um segundo elemento de sintaxe que indica um tamanho máximo da paleta e um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta. Neste exemplo, o decodificador de vídeo 30 pode ser ainda configurado para definir o segundo elemento de sintaxe para ser um valor de 0 a um primeiro valor limite e definir o terceiro elemento de sintaxe como um valor de 0 a um segundo valor limite. Em um exemplo, o primeiro valor limite é um de 4095 ou 4096 e o segundo valor limite é um de 4095, 8191 ou 8192.
[0223] Em outro exemplo da descrição, um valor máximo do primeiro elemento de sintaxe é definido em relação a um segundo elemento de sintaxe que indica um tamanho máximo da paleta e um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta. Neste exemplo, o decodificador de vídeo 30 pode ser ainda configurado para definir o segundo elemento de sintaxe para ser menor ou igual a um número de pixels no bloco maior possível no fluxo de bits de vídeo codificado e definir o terceiro elemento de sintaxe como sendo menor ou igual a um valor K * do segundo elemento de sintaxe, onde K é uma constante positiva. Em um exemplo, K é 2.
[0224] Em outro exemplo da descrição, o decodificador de vídeo 30 pode ser ainda configurado para receber um elemento de sintaxe que indica um tipo de execução de paleta no caso de um pixel atual não ser um primeiro pixel em uma ordem de varredura e inferir o elemento de sintaxe que indica um tipo de execução de paleta no caso de o pixel atual ser o primeiro pixel na ordem de varredura.
[0225] Embora combinações particulares de vários aspectos das técnicas sejam descritas acima, estas combinações são proporcionadas meramente para ilustrar exemplos das técnicas descritas nesta descrição. Consequentemente, as técnicas desta descrição não devem ser limitadas a estas combinações de exemplo e podem abranger qualquer combinação concebível dos vários aspectos das técnicas descritas nesta descrição.
[0226] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware, ou qualquer combinação dos mesmos. Se forem implementadas em software, as funções poderão ser armazenadas em ou transmitidas através, como uma ou mais instruções ou código, de um meio legível por computador e executadas por uma unidade de processamento baseada em hardware. Os meios legíveis por computador podem incluir meios de armazenamento legíveis por computador, que correspondem a um meio tangível, tais como meios de armazenamento de dados, ou meios de comunicação incluindo qualquer meio que facilite a transferência de um programa de computador de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Desta forma, os meios legíveis por computador geralmente podem corresponder a (1) meios de armazenamento legíveis por computador que não são transitórios ou (2) um meio de comunicação, como um sinal ou uma onda portadora. A mídia de armazenamento de dados pode ser qualquer mídia disponível que possa ser acessada por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e / ou estruturas de dados para a implementação das técnicas descritas nesta descrição. Um produto de programa de computador pode incluir um meio legível por computador.
[0227] A título de exemplo, e não de limitação, tais meios de armazenamento legíveis por computador podem compreender memória RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco óptico, armazenamento em disco magnético ou outros dispositivos de armazenamento magnético, memória flash ou qualquer outro meio que possa ser usado para armazenar o código de programa desejado na forma de instruções ou estruturas de dados e que pode ser acessado por um computador. Além disso, qualquer conexão é designada como um meio legível por computador. Por exemplo, se as instruções forem transmitidas de um site, servidor ou outra fonte remota usando um cabo coaxial, cabo de fibra óptica, par trançado, linha de assinante digital (DSL) ou tecnologias sem fio, como infravermelho, rádio e microondas, cabo coaxial, cabo de fibra óptica, par trançado, DSL ou tecnologias sem fio como infravermelho, rádio e microondas estarão incluídos na definição de meio. No entanto, deve entender-se que as mídias de armazenamento legíveis por computador e a mídia de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outras mídias transitórias, mas são direcionadas para mídia de armazenamento não transiente e tangível. O disco e o CD, tal como aqui utilizados, incluem disco compacto (CD), disco laser, disco óptico, disco versátil digital (DVD), disquete e disco Blu-ray, onde os discos geralmente reproduzem dados magneticamente, enquanto os discos reproduzem os dados de forma óptica com lasers. As combinações dos itens acima também devem ser incluídas no escopo de mídia legível por computador.
[0228] As instruções podem ser executadas por um ou mais processadores, como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados específicos de aplicação (ASICs), matrizes de portas programáveis em campo (FPGAs) ou outro equivalente integrado ou circuito de lógica discreta. Consequentemente, o termo "processador", tal como aqui utilizado, pode referir-se a qualquer uma das estruturas anteriores ou a qualquer outra estrutura adequada para a implementação das técnicas aqui descritas. Além disso, em alguns aspectos, a funcionalidade aqui descrita pode ser fornecida dentro de módulos de hardware e / ou software dedicados configurados para codificação e decodificação, ou incorporados em um codec combinado. Além disso, as técnicas podem ser totalmente implementadas em um ou mais circuitos ou elementos lógicos.
[0229] As técnicas desta descrição podem ser implementadas em uma grande variedade de dispositivos ou aparelhos, incluindo um aparelho móvel sem fio, um circuito integrado (IC) ou um conjunto de circuitos integrados (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nesta descrição para enfatizar aspectos funcionais de dispositivos configurados para executar as técnicas divulgadas, mas não requerem necessariamente a realização por diferentes unidades de hardware. Em vez disso, como descrito acima, várias unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por uma coleção de unidades de hardware interoperacional, incluindo um ou mais processadores como descrito acima, em conjunto com software e/ou firmware adequados.
[0230] Vários exemplos da descrição foram descritos. Qualquer combinação dos sistemas, operações ou funções descritas é contemplada. Estes e outros exemplos estão dentro do escopo das reivindicações a seguir.

Claims (15)

1. Método de decodificação de dados de vídeo, caracterizado pelo fato de que compreende: receber um bloco de dados de vídeo em um fluxo de bits de vídeo codificado, sendo o bloco de dados de vídeo codificado usando um modo de codificação baseado em paleta; receber uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizadas no fluxo de bits de vídeo codificado, em que um valor máximo do primeiro elemento de sintaxe é definido em relação a um ou mais de um segundo elemento de sintaxe que indica um tamanho máximo da paleta ou um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta, em que o segundo elemento de sintaxe possui um valor de 0 para um primeiro valor limite e o terceiro elemento de sintaxe possui um valor de 0 para um segundo valor limite e codificado usando um ou mais códigos Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número de bits máximo predeterminado; decodificar a pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe usando um ou mais códigos Golomb; reconstruir a paleta com base na pluralidade decodificada de elementos de sintaxe; e decodificar o bloco de dados de vídeo usando a paleta reconstruída.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda: exibir o bloco decodificado de dados de vídeo.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda: receber um elemento de sintaxe que indica um tipo de execução de paleta no caso de um pixel atual do bloco de dados de vídeo não ser um primeiro pixel em uma ordem de varredura do bloco de dados de vídeo; e inferir o elemento de sintaxe como indicando um tipo de execução de paletas no caso de o pixel atual ser o primeiro pixel na ordem de varredura.
4. Aparelho configurado para decodificar dados de vídeo, caracterizado pelo fato de que compreende: meios para receber um bloco de dados de vídeo em um fluxo de bits de vídeo codificado, sendo o bloco de dados de vídeo codificado usando um modo de codificação baseado em paleta; meios para receber uma pluralidade de elementos de sintaxe que são indicativos de uma paleta que foi usada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizados no fluxo de bits de vídeo codificado, em que um valor máximo do primeiro elemento de sintaxe é definido em relação a um ou mais de um segundo elemento de sintaxe que indica um tamanho máximo da paleta ou um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta, em que o segundo elemento de sintaxe possui um valor de 0 para um primeiro valor limite e o terceiro elemento de sintaxe possui um valor de 0 para um segundo valor limite e codificado usando um ou mais códigos de Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits; meios para decodificar a pluralidade de elementos de sintaxe, incluindo a decodificação do primeiro elemento de sintaxe usando um ou mais códigos de Golomb; meios para reconstruir a paleta com base na pluralidade decodificada de elementos de sintaxe; e meios para decodificar o bloco de dados de vídeo usando a paleta reconstruída.
5. Método de codificação de dados de vídeo, caracterizado pelo fato de que compreende: codificar um bloco de dados de vídeo usando uma paleta e um modo de codificação baseado em paleta; gerar uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi utilizada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizadas em um fluxo de bits de vídeo codificado; codificar o primeiro elemento de sintaxe que é definido em relação a um ou mais de um segundo elemento de sintaxe que indica um tamanho máximo da paleta ou um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta, em que o segundo elemento de sintaxe possui um valor de 0 para um primeiro valor limite e o terceiro elemento de sintaxe para ser um valor de 0 a um segundo valor limite, usando um ou mais códigos de Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits; e incluir a pluralidade de elementos de sintaxe no fluxo de bits de vídeo codificado.
6. Método, de acordo com a reivindicação 1 ou 5, caracterizado pelo fato de que o primeiro elemento de sintaxe é um elemento de sintaxe num_signalled_palette_entries.
7. Método, de acordo com a reivindicação 1 ou 5, caracterizado pelo fato de que o número máximo predeterminado de bits é 32, e em que o um ou mais códigos Golomb é um código exponencial de Golomb de ordem 0.
8. Método, de acordo com a reivindicação 1 ou 5, caracterizado pelo fato de que o número máximo predeterminado de bits é 32, e em que um ou mais códigos Golomb é uma concatenação de um código de Rice truncado e um código exponencial de Golomb.
9. Método, de acordo com a reivindicação 1 ou 5, caracterizado pelo fato de que a pluralidade de elementos de sintaxe inclui os valores de paleta indicados como sendo explicitamente sinalizados pelo primeiro elemento de sintaxe.
10. Método, de acordo com a reivindicação 1 ou 5, caracterizado pelo fato de que o primeiro valor limite é um de 4095 ou 4096 e o segundo valor limite é um de 4095, 8191 ou 8192.
11. Método, de acordo com a reivindicação 1 ou 5, caracterizado pelo fato de que o valor máximo do primeiro elemento de sintaxe é definido em relação à ambos do segundo elemento de sintaxe, da pluralidade de elementos de sintaxe, que indica um tamanho máximo da paleta e o terceiro elemento de sintaxe da pluralidade de elementos de sintaxe, que indica o tamanho máximo do preditor de paleta, o método compreendendo ainda: definir o segundo elemento de sintaxe como menor ou igual a um número de pixels no bloco maior possível de dados de vídeo no fluxo de bits de vídeo codificado; e definir o terceiro elemento de sintaxe para ser menor ou igual a um valor K * do segundo elemento de sintaxe, onde K é uma constante positiva e * indica uma operação de multiplicação.
12. Método, de acordo com a reivindicação 1 ou 5, caracterizado pelo fato de que K é 2.
13. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que compreende ainda: sinalizar um elemento de sintaxe que indica um tipo de execução de paleta no caso de um pixel atual não ser um primeiro pixel em uma ordem de varredura; e não sinalizar o elemento de sintaxe indicando um tipo de execução de paleta no caso de o pixel atual do bloco de dados de vídeo ser o primeiro pixel na ordem de varredura do bloco de dados de vídeo.
14. Aparelho configurado para codificar dados de vídeo, caracterizado pelo fato de que compreende: meios para codificar um bloco de dados de vídeo usando uma paleta e um modo de codificação baseado em paleta; meios para gerar uma pluralidade de elementos de sintaxe que são indicativos da paleta que foi utilizada para codificar o bloco de dados de vídeo, a pluralidade de elementos de sintaxe incluindo um primeiro elemento de sintaxe que indica uma série de valores de paleta para a paleta que são explicitamente sinalizados em Um fluxo de bits de vídeo codificado; meios para codificar o primeiro elemento de sintaxe que é definido em relação a um ou mais de um segundo elemento de sintaxe que indica um tamanho máximo da paleta ou um terceiro elemento de sintaxe que indica um tamanho máximo de um preditor de paleta, em que o segundo elemento de sintaxe possui um valor de 0 para um primeiro valor limite e o terceiro elemento de sintaxe possui um valor de 0 a um segundo valor limite, usando um ou mais códigos de Golomb, de modo que o comprimento do primeiro elemento de sintaxe codificado seja menor ou igual a um número máximo predeterminado de bits; e meios para incluir a pluralidade de elementos de sintaxe no fluxo de bits de vídeo codificado.
15. Memória legível por computador, caracterizada pelo fato de que possui instruções nela armazenadas que, quando executadas, fazem com que um computador realize o método conforme definido em qualquer uma das reivindicações 1 a 3 ou 5 a 13.
BR112017016341-1A 2015-01-29 2016-01-25 Codificação em modo paleta para codificação de vídeo BR112017016341B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562109568P 2015-01-29 2015-01-29
US62/109,568 2015-01-29
US15/004,508 2016-01-22
US15/004,508 US9986248B2 (en) 2015-01-29 2016-01-22 Palette mode coding for video coding
PCT/US2016/014760 WO2016123033A1 (en) 2015-01-29 2016-01-25 Palette mode coding for video coding

Publications (2)

Publication Number Publication Date
BR112017016341A2 BR112017016341A2 (pt) 2018-04-03
BR112017016341B1 true BR112017016341B1 (pt) 2023-10-03

Family

ID=55359727

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112017016341-1A BR112017016341B1 (pt) 2015-01-29 2016-01-25 Codificação em modo paleta para codificação de vídeo

Country Status (13)

Country Link
US (1) US9986248B2 (pt)
EP (1) EP3251356B1 (pt)
JP (1) JP6708652B2 (pt)
KR (1) KR102409816B1 (pt)
CN (1) CN107409215B (pt)
AU (1) AU2016211797B2 (pt)
BR (1) BR112017016341B1 (pt)
EA (1) EA035170B1 (pt)
ES (1) ES2739690T3 (pt)
HU (1) HUE044674T2 (pt)
TN (1) TN2017000308A1 (pt)
TW (1) TWI665912B (pt)
WO (1) WO2016123033A1 (pt)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107079151B (zh) 2014-09-26 2020-06-05 株式会社Kt 用于处理视频信号的方法和设备
US10477218B2 (en) 2014-10-20 2019-11-12 Kt Corporation Method and apparatus for predicting and restoring a video signal using palette entry
CN111800632B (zh) 2015-01-15 2024-03-29 株式会社Kt 对编码视频信号解码的方法和对视频信号编码的方法
CN107211153B (zh) 2015-01-29 2020-10-02 株式会社Kt 用于处理视频信号的方法和设备
CN107409224B (zh) * 2015-01-29 2020-09-08 株式会社Kt 用于处理视频信号的方法和设备
US9942551B2 (en) * 2015-01-30 2018-04-10 Qualcomm Incorporated Palette index grouping for video coding
WO2016159610A1 (ko) 2015-04-02 2016-10-06 주식회사 케이티 비디오 신호 처리 방법 및 장치
WO2016192678A1 (en) * 2015-06-03 2016-12-08 Mediatek Inc. Methods for palette coding of image and video data
JP6545570B2 (ja) * 2015-08-18 2019-07-17 株式会社東芝 符号化装置、復号装置および画像処理装置
JP6662123B2 (ja) * 2016-03-14 2020-03-11 富士通株式会社 画像符号化装置、画像符号化方法、及び画像符号化プログラム
GB2554065B (en) * 2016-09-08 2022-02-23 V Nova Int Ltd Data processing apparatuses, methods, computer programs and computer-readable media
US10917636B2 (en) * 2018-12-03 2021-02-09 Tencent America LLC Method and apparatus for video coding
US11202101B2 (en) * 2019-03-13 2021-12-14 Qualcomm Incorporated Grouped coding for palette syntax in video coding
JP7177952B2 (ja) * 2019-04-25 2022-11-24 ベイジン、ターチア、インターネット、インフォメーション、テクノロジー、カンパニー、リミテッド パレットモードを用いたビデオコーディングの方法および装置
US11109041B2 (en) * 2019-05-16 2021-08-31 Tencent America LLC Method and apparatus for video coding
WO2020243295A1 (en) 2019-05-31 2020-12-03 Bytedance Inc. Palette mode with intra block copy prediction
CN114026859A (zh) 2019-06-28 2022-02-08 字节跳动有限公司 在变换跳过模式中修改量化参数的技术
EP3973450A4 (en) 2019-06-28 2023-02-22 ByteDance Inc. CHROMINANCE INTRA MODE DERIVATION IN SCREEN CONTENT ENCODING
KR20220032520A (ko) 2019-07-20 2022-03-15 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 팔레트 모드 사용 지시의 조건 종속적인 코딩
JP2022542083A (ja) 2019-07-21 2022-09-29 エルジー エレクトロニクス インコーポレイティド パレットモードの適用有無に応じてクロマ成分予測情報をシグナリングする画像符号化/復号化方法、装置、及びビットストリームを伝送する方法
WO2021040400A1 (ko) 2019-08-26 2021-03-04 엘지전자 주식회사 팔레트 모드 기반 영상 또는 비디오 코딩
WO2021046509A1 (en) * 2019-09-07 2021-03-11 Beijing Dajia Internet Information Technology Co., Ltd. Prediction mode signaling in video coding
JP2022548582A (ja) * 2019-09-12 2022-11-21 バイトダンス インコーポレイテッド 映像符号化におけるパレット予測子の使用
WO2021055114A1 (en) * 2019-09-20 2021-03-25 Alibaba Group Holding Limited Method and system for signaling chroma quantization parameter offset
CN114930833A (zh) * 2019-10-10 2022-08-19 北京达佳互联信息技术有限公司 使用调色板模式的视频编解码的方法和装置
WO2021108788A1 (en) * 2019-11-30 2021-06-03 Bytedance Inc. Palette coding mode
WO2021121418A1 (en) 2019-12-19 2021-06-24 Beijing Bytedance Network Technology Co., Ltd. Joint use of adaptive colour transform and differential coding of video
WO2021133529A1 (en) * 2019-12-26 2021-07-01 Alibaba Group Holding Limited Methods for coding video data in palette mode
CN116405677B (zh) * 2019-12-30 2023-10-31 阿里巴巴(中国)有限公司 用于在调色板模式下对视频数据进行编码的方法和装置
JP7436680B2 (ja) * 2020-01-05 2024-02-22 北京字節跳動網絡技術有限公司 映像コーディングのための一般制約情報
CN115176470A (zh) 2020-01-18 2022-10-11 抖音视界有限公司 图像/视频编解码中的自适应颜色变换
CN115349262A (zh) * 2020-03-27 2022-11-15 北京达佳互联信息技术有限公司 使用调色板模式的视频编解码的方法和装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9654777B2 (en) * 2013-04-05 2017-05-16 Qualcomm Incorporated Determining palette indices in palette-based video coding
US9558567B2 (en) 2013-07-12 2017-01-31 Qualcomm Incorporated Palette prediction in palette-based video coding
CN105814891B (zh) * 2013-12-10 2019-04-02 佳能株式会社 用于在调色板编码模式中对调色板进行编码或解码的方法和设备
GB2521606A (en) * 2013-12-20 2015-07-01 Canon Kk Method and apparatus for transition encoding in video coding and decoding
US10362336B2 (en) 2014-03-25 2019-07-23 Qualcomm Incorporated Palette predictor signaling with run length code for video coding
CN106464912B (zh) * 2014-05-23 2019-06-21 寰发股份有限公司 调色板表预测和发信的方法和装置
WO2015192340A1 (zh) * 2014-06-18 2015-12-23 富士通株式会社 基于调色板的图像编码方法、装置以及图像处理设备
US9955157B2 (en) * 2014-07-11 2018-04-24 Qualcomm Incorporated Advanced palette prediction and signaling
WO2016054765A1 (en) * 2014-10-08 2016-04-14 Microsoft Technology Licensing, Llc Adjustments to encoding and decoding when switching color spaces

Also Published As

Publication number Publication date
EA201791616A1 (ru) 2017-11-30
TW201633788A (zh) 2016-09-16
ES2739690T3 (es) 2020-02-03
EP3251356B1 (en) 2019-05-08
BR112017016341A2 (pt) 2018-04-03
WO2016123033A1 (en) 2016-08-04
KR102409816B1 (ko) 2022-06-15
HUE044674T2 (hu) 2019-11-28
JP6708652B2 (ja) 2020-06-10
TN2017000308A1 (en) 2019-01-16
JP2018507612A (ja) 2018-03-15
TWI665912B (zh) 2019-07-11
EP3251356A1 (en) 2017-12-06
CN107409215A (zh) 2017-11-28
CN107409215B (zh) 2020-01-17
EA035170B1 (ru) 2020-05-08
AU2016211797B2 (en) 2019-07-25
US9986248B2 (en) 2018-05-29
KR20170109553A (ko) 2017-09-29
US20160227239A1 (en) 2016-08-04
AU2016211797A1 (en) 2017-07-13

Similar Documents

Publication Publication Date Title
AU2016211797B2 (en) Palette mode coding for video coding
EP3350997B1 (en) Restriction of escape pixel signaled values in palette mode video coding
KR102344232B1 (ko) 비디오 코딩을 위한 런 길이 코드를 이용한 팔레트 예측자 시그널링
EP3308542B1 (en) Grouping palette bypass bins for video coding
EP3090552B1 (en) Quantization of the escape pixels of a video block in palette coding mode
DK3020198T3 (en) PALETTE PREVIEW IN PALET-BASED VIDEO CODING
EP3158747A1 (en) Single color palette mode in video coding
EP2982126A1 (en) Determining palettes in palette-based video coding
JP2017532896A (ja) パレットインデックスのコーディングのためのパースの依存性の低減
EP3205102A1 (en) Palette run hiding in palette-based video coding
EP3202153A1 (en) Explicit signaling of escape sample positions in palette coding mode for video coding
EP3205104A2 (en) Diagonal copy for palette mode coding
OA18316A (en) Palette mode coding for video coding.

Legal Events

Date Code Title Description
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

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