BR112016027384B1 - Codificação de amostra de escape em codificação de vídeo com base em paleta - Google Patents

Codificação de amostra de escape em codificação de vídeo com base em paleta Download PDF

Info

Publication number
BR112016027384B1
BR112016027384B1 BR112016027384-2A BR112016027384A BR112016027384B1 BR 112016027384 B1 BR112016027384 B1 BR 112016027384B1 BR 112016027384 A BR112016027384 A BR 112016027384A BR 112016027384 B1 BR112016027384 B1 BR 112016027384B1
Authority
BR
Brazil
Prior art keywords
palette
block
video
video encoder
value
Prior art date
Application number
BR112016027384-2A
Other languages
English (en)
Other versions
BR112016027384A2 (pt
Inventor
Rajan Laxman Joshi
Vadim SEREGIN
Wei Pu
Marta Karczewicz
Joel Sole Rojals
Krishnakanth RAPAKA
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 BR112016027384A2 publication Critical patent/BR112016027384A2/pt
Publication of BR112016027384B1 publication Critical patent/BR112016027384B1/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/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
    • H04N19/51Motion estimation or motion compensation
    • H04N19/583Motion compensation with overlapping blocks
    • 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/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/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • H04N19/463Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

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

Abstract

CODIFICAÇÃO DE AMOSTRA DE ESCAPE EM CODIFICAÇÃO DE VÍDEO COM BASE EM PALETA. Em um exemplo, um método de processamento de dados de vídeo inclui a determinação de um valor de um elemento de sintaxe de nível de bloco que indica, para todas as amostras de um bloco de dados de vídeo, se pelo menos uma amostra respectiva do bloco é codificada com base em um valor de cor de pelo menos uma amostra respectiva não sendo incluída em uma paleta de cores para codificação do bloco de dados de vídeo. O método também inclui a codificação do bloco de dados de vídeo com base no valor.

Description

[0001] Esse pedido reivindica os benefícios do pedido de patente provisório U.S. No. 62/002.054, depositado em 22 de maio de 2014, pedido provisório U.S. No. 62/010.313, depositado em 10 de junho de 2014, pedido provisório U.S. No. 61/015.240, depositado em 20 de junho de 2014, pedido provisório U.S. No. 62/031.766, depositado em 31 de julho de 2014, pedido provisório U.S. No. 62/040.978, depositado em 22 de agosto de 2015, pedido provisório U.S. No. 62/114.533, depositado em 10 de fevereiro de 2015, e pedido provisório U.S. No. 62/115.099, depositado em 11 de fevereiro de 2015, a totalidade de conteúdo dos quais é incorporada aqui por referência.
Campo Técnico
[0002] Essa descrição refere-se à codificação e decodificação de vídeo.
Fundamentos
[0003] As capacidade de vídeo digital podem ser incorporadas a uma ampla faixa de dispositivos, incluindo televisões digitais, sistemas de difusão direta digital, sistemas de difusão sem fio, assistentes digitais pessoais PDAs), computadores laptop ou desktop, computadores tablet, leitoras de e-book, câmeras digitais, dispositivos de gravação digital, aparelhos de mídia digital, dispositivo de jogos de vídeo, consoles de jogos de vídeo, telefones celulares ou de rádio via satélite, os chamados "smartphones", dispositivos de vídeo teleconferência, dispositivos de sequenciamento de vídeo, e similares. Dispositivos de vídeo digital implementam as técnicas de compressão de vídeo, tal como as descritas nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação de Vídeo Avançada (AVC), o padrão de Codificação de Vídeo de Alta Eficiência (HEVC) atualmente em desenvolvimento, e extensões de cada um dos padrões. Os dispositivos de vídeo podem transmitir, receber, codificar, decodificar, e/ou armazenar informação de vídeo digital de forma mais eficiente pela implementação de tais técnicas de compressão de vídeo.
[0004] As técnicas de compressão de vídeo realizam a previsão espacial (intraimagem) e/ou a previsão temporal (interimagem) para reduzir ou remover redundância inerente às sequências de vídeo. Para a codificação de vídeo com base em bloco, uma fatia de vídeo (isso é, um quadro de vídeo ou uma parte de um quadro de vídeo) pode ser dividida em blocos de vídeo. Blocos de vídeo em uma fatia intracodificada (I) de uma imagem são codificados utilizando-se a previsão espacial com relação às amostras de referência nos blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia intercodificada (P ou B) de uma imagem podem utilizar a previsão espacial com relação às amostras de referência nos blocos vizinhos na mesma imagem ou previsão temporal com relação às 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.
[0005] A previsão espacial ou temporal resulta em um bloco de previsão para um bloco a ser codificado. Os dados residuais representam diferenças de pixel entre o bloco original a ser codificado e o bloco de previsão. Um bloco intercodificado é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência formando o bloco de previsão, e os dados residuais indicam a diferença entre o bloco codificado e o bloco de previsão. Um bloco intracodificado é codificado de acordo com um modo de intracodificação e os dados residuais. Para compressão adicional, os dados residuais podem ser transformados do domínio de pixel para um domínio de transformação, resultando em coeficientes residuais, que, então, podem ser quantizados. Os coeficientes quantizados, inicialmente dispostos em um conjunto bidimensional, podem ser digitalizados a fim de produzir um vetor unidimensional de coeficientes, e a codificação por entropia pode ser aplicada para se alcançar uma compressão ainda maior.
Sumário
[0006] As técnicas dessa descrição se referem à codificação de vídeo com base em paleta. Por exemplo, na codificação com base em paleta, um codificador de vídeo (um codificador de vídeo ou um decodificador de vídeo) pode formar uma "paleta" como uma tabela de cores para representar os dados de vídeo da área particular (por exemplo, um bloco determinado). A codificação com base em paleta pode ser especialmente útil para codificação de áreas de dados de vídeo possuindo um número relativamente pequeno de cores. Em vez da codificação de valores de pixel reais (ou seus residuais), o codificador de vídeo pode codificar índices de paleta para um ou mais dos pixels que se referem aos pixels com entradas na paleta representando as cores dos pixels. As técnicas descritas nessa descrição podem incluir as técnicas de várias combinações de um ou mais de sinalização de modos de codificação com base em paleta, transmissão de paletas, derivação de paletas, e transmissão de mapas de codificação com base em paleta e outros elementos de sintaxe.
[0007] Em um exemplo, um método de processamento de dados de vídeo inclui a determinação de um valor de um elemento de sintaxe de nível de bloco que indica, para todas as amostras de um bloco de dados de vídeo, se pelo menos uma amostra respectiva do bloco é codificada com base em um valor de cor de pelo menos uma amostra respectiva não sendo incluída em uma paleta de cores para codificação do bloco de dados de vídeo, e codificação de bloco de dados de vídeo com base no valor.
[0008] Em outro exemplo, um dispositivo para o processamento de dados de vídeo inclui uma memória configurada para armazenar um bloco de amostras de dados de vídeo, e um ou mais processadores configurados para determinar um valor de um elemento de sintaxe de nível de bloco que indica, para todas as amostras do bloco de dados de vídeo, e pelo menos uma amostra respectiva do bloco é codificada com base em um valor de cor de pelo menos uma amostra respectiva não sendo incluída em uma paleta de cores para codificação do bloco de dados de vídeo, e codificar o bloco de dados de vídeo com base no valor.
[0009] Em outro exemplo, um aparelho para processamento de dados de vídeo inclui meios para determinar um valor de um elemento de sintaxe de nível de bloco que indica, para todas as amostras de um bloco de dados de vídeo, e pelo menos uma amostra respectiva do bloco é codificada com base em um valor de cor de pelo menos uma amostra respectiva não sendo incluída em uma paleta de cores para codificar o bloco de dados de vídeo, e meios para codificar o bloco de dados de vídeo com base no valor.
[0010] Em outro exemplo, um meio legível por computador não transitório possui instruções armazenadas no mesmo que, quando executadas, fazem com que um ou mais processadores determinem um valor de um elemento de sintaxe de nível de bloco que indica, para todas as amostras de um bloco de dados de vídeo, se pelo menos uma amostra respectiva do bloco é codificada com base em um valor de cor de pelo menos uma amostra respectiva não sendo incluída em uma paleta de cores para codificar o bloco de dados de vídeo, e codificar o bloco de dados de vídeo com base no valor.
[0011] Em outro exemplo, um método de processamento de dados de vídeo inclui a codificação de pelo menos um dos dados que indica um tamanho de paleta máximo de uma paleta de valores de cores para codificação de um bloco de dados de vídeo ou dados que indicam um tamanho de previsor de paleta máximo de um previsor de paleta para determinar a paleta de valores de cores, e codificando o bloco de dados de vídeo de acordo com os dados.
[0012] Em outro exemplo, um dispositivo para o processamento de dados de vídeo inclui uma memória configurada para armazenar um bloco de dados de vídeo, e um ou mais processadores configurados para codificar pelo menos um dentre os dados que indicam um tamanho máximo de paleta de uma paleta de valores de cores para codificação do bloco de dados de vídeo ou dados que indicam um tamanho de previsor de paleta máximo de um previsor de paleta para determinar a paleta de valores de cores, e codificar o bloco de dados de vídeo de acordo com os dados codificados a partir da sequência de bits.
[0013] Em outro exemplo, um aparelho para processamento de dados de vídeo inclui meios para codificar pelo menos um dentre os dados que indicam um tamanho máximo de paleta de uma paleta de valores de cores para codificar um bloco de dados de vídeo ou dados que indicam um tamanho máximo de previsor de paleta de um previsor de paleta para determinar a paleta de valore de cores, e meios para codificar o bloco de dados de vídeo de acordo com os dados.
[0014] Em outro exemplo, um meio legível por computador não transitório possui instruções armazenada no mesmo que, quando executadas, fazem com que um ou mais processadores codifiquem pelo menos um dos dados que indicam um tamanho máximo de paleta de uma paleta de valores de cores para codificar um bloco de dados de vídeo ou dados que indicam um tamanho máximo de previsor de paleta de um previsor de paleta para determinar a paleta de valores de cores, e codificar o bloco de dados de vídeo de acordo com os dados.
[00015] Em outro exemplo, um método de codificação de dados de vídeo inclui a determinação, para um pixel associado com um índice de paleta que relaciona o valor de um pixel com um valor de cor em uma paleta de cores utilizada para codificação de pixel, um comprimento de sequência de uma sequência de índices de paleta sendo codificados com o índice de paleta do pixel, a determinação de um comprimento de sequência máximo para uma sequência máxima de índices de paleta capazes de serem codificados com o índice de paleta do pixel, e a codificação de dados que indicam o comprimento de sequência com base no comprimento de sequência máxima determinada.
[0016] Em outro exemplo, um dispositivo para codificação de dados de vido inclui uma memória configurada para armazenar um pixel de dados de vídeo associados com um índice de paleta que relaciona um valor do pixel com um valor de cor em uma paleta de cores utilizada para codificar o pixel, e um ou mais processadores configurados para determinar, para o pixel, um comprimento de sequência de uma sequência de índices de paleta sendo codificada com o índice de paleta de pixel, a determinação de um comprimento máximo de sequência para uma sequência máxima de índices de paleta capaz de ser codificada com o índice de paleta do pixel, e dados de código que indicam o comprimento de sequência com base no comprimento de sequência máxima determinado.
[0017] Em outro exemplo, um aparelho para o processamento de dados de vídeo inclui meios para determinar, para um pixel associado com um índice de paleta que relaciona um valor de pixel a um valor de cor em uma paleta de cores utilizada para codificação de pixel, um comprimento de sequência de uma sequência de índices de paleta sendo codificada com o índice de paleta do pixel, meios para determinar um comprimento máximo de sequência para uma sequência máxima de índices de paleta capaz de ser codificada com o índice de paleta do pixel, e meios para codificar os dados que indicam o comprimento de sequência com base no comprimento de sequência máximo determinado.
[0018] Em outro exemplo, um meio legível por computador não transitório possui instruções armazenadas no mesmo que, quando executada, fazem com que um ou mais processadores determinem, para um pixel associado com um índice de paleta que relaciona um valor de pixel a um valor de cor em uma paleta de cores utilizada para codificação de pixel, um comprimento de sequência de uma sequência de índices de paleta sendo codificada com o índice de paleta do pixel, determinar um comprimento de sequência máximo para uma sequência máxima de índices de paleta capaz de ser codificado com o índice de paleta de pixel, e dados de código que indicam o comprimento de sequência com base no comprimento máximo de sequência determinado.
[0019] Os detalhes de um ou mais exemplos da descrição são apresentados nos desenhos em anexo e na descrição abaixo. Outras características, objetos, e vantagens serão aparentes a partir da descrição, desenhos e reivindicações.
Breve Descrição dos Desenhos
[0020] A figura 1 é um diagrama em bloco ilustrando um sistema de codificação de vídeo ilustrativo que pode utilizar as técnicas descritas nessa descrição;
[0021] A figura 2 é um diagrama em bloco ilustrando um codificador de vídeo ilustrativo que pode implementar as técnicas descritas nessa descrição;
[0022] A figura 3 é um diagrama em bloco ilustrando um decodificador de vídeo ilustrativo que pode implementar as técnicas descritas nessa descrição;
[0023] A figura 4 é um diagrama conceitual ilustrando um exemplo de determinação de registros de paleta para codificação de vídeo com base em paleta, consistente com as técnicas dessa descrição;
[0024] A figura 5 é um diagrama conceitual ilustrando um exemplo de determinação de índices de paleta para uma paleta para um bloco de pixels, consistente com a técnicas dessa descrição;
[0025] A figura 6 é um diagrama conceitual ilustrando um exemplo de determinação de um comprimento de sequência máximo para um bloco de pixels, consistente com as técnicas dessa descrição;
[0026] A figura 7 é um fluxograma ilustrando um processo ilustrativo para codificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe de nível de bloco que indicam se qualquer amostra do bloco é codificada como amostras de escape, consistente com a técnicas dessa descrição;
[0027] A figura 8 é um fluxograma ilustrando um processo ilustrativo para decodificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe de nível de bloco que indicam se qualquer amostra do bloco é decodificada como uma amostra de escape, consistente com a técnicas dessa descrição;
[0028] A figura 9 é um fluxograma ilustrando um processo ilustrativo para codificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe que indicam um tamanho máximo de paleta e um tamanho máximo de previsor de paleta, consistente com técnicas dessa descrição.
[0029] A figura 10 é um fluxograma ilustrando um processo ilustrativo para codificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe que indicam um tamanho máximo de paleta e um tamanho máximo de previsor de paleta, consistente com as técnicas dessa descrição.
[0030] A figura 11 é um fluxograma ilustrando um processo ilustrativo para codificação (codificação ou decodificação) de dados que indicam um comprimento de sequência de uma sequência de pixels com base em um comprimento de sequência em potencial máximo, consistente com as técnicas dessa descrição.
Descrição Detalhada
[0031] Aspectos dessa descrição são direcionados às técnicas para codificação e compressão de vídeo. Em particular, essa descrição descreve as técnicas para codificação com base em paleta de dados de vídeo. Na codificação de vídeo tradicional, imagens são consideradas como sendo de tom contínuo e espacialmente suaves. Com base nessas considerações, várias ferramentas foram desenvolvidas tal como a transformação com base em bloco, filtragem, etc., e tais ferramentas apresentaram um bom desempenho para vídeos de conteúdo natural.
[0032] No entanto, em aplicativos como desktop remoto, o trabalho de colaboração e a exibição sem fio, o conteúdo de tela gerado por computador pode ser o conteúdo dominante a ser comprimido. Esse tipo de conteúdo tende a apresentar um tom discreto e linhas precisas, e limites de objeto de contraste alto. A consideração de tom contínuo e suavidade podem não se aplicar mais, e, dessa forma, as técnicas de codificação de vídeo tradicionais podem ser formas ineficientes de se comprimir o conteúdo.
[0033] Essa descrição descreve a codificação com base em paleta, que pode ser particularmente adequada para codificação de conteúdo gerado por tela (por exemplo, codificação de conteúdo de tela (SCC)). As técnicas para codificação com base em paleta dos dados de vídeo podem ser utilizadas com uma ou mais outras técnicas de codificação, tal como técnicas para inter ou intracodificação por previsão. Por exemplo, como descrito em maiores detalhes abaixo, um codificador ou decodificador, ou codificador- decodificador (codec) combinado, pode ser configurado para realizar a codificação por interprevisão ou intraprevisão, além de codificação com base em paleta.
[0034] Em alguns exemplos, as técnicas de codificação com base em paleta podem ser configuradas para uso com um ou mais padrões de codificação de vídeo. Por exemplo, Codificação de Vídeo de Alta Eficiência (HEVC) é um novo padrão de codificação de vídeo sendo desenvolvido pela Equipe de Colaboração Conjunta em Codificação de Vídeo (JCT-VC) do Grupo de Especialistas em Codificação de Vídeo ITU-T (VCEG) e Grupo de Especialistas em Imagem em Movimento ISO/IEC (MPEG). Um rascunho de especificação de texto HEVC recente é descrito em Bross et al., "High Efficiency Video Coding (HEVC) Text Specification Draft 10 (para FDI & Consent)," JCVC-L1003_v3, 12o. Encontro de JCT- VC de ITU-T SG16 WP3 e ISO/IEC JCT 1/SC 29/WG 11, 14 a 23 de janeiro de 2013 ("Rascunho HEVC 10").
[0035] Com relação à estrutura de trabalho HEVC, como um exemplo, as técnicas de codificação com base em paleta podem ser configuradas para serem utilizadas como um modo de unidade de codificação (CU). Em outros exemplos, as técnicas de codificação com base em paleta podem ser configuradas para serem utilizadas como um modo PU na estrutura de trabalho de HEVC. De acordo, todos os processos discutidos a seguir descritos no contexto de um modo CU podem, adicionalmente ou alternativamente, ser aplicados à PU. No entanto, esses exemplos com base em HEVC não devem ser considerados uma restrição ou limitação das técnicas de codificação com base em paleta descritas aqui, visto que tais técnicas podem ser aplicadas ao trabalho independentemente de ou como parte de outro padrão ou sistema existente ou sistemas/padrões a serem desenvolvidos. Nesses casos, a unidade para codificação de paleta pode ser blocos quadrados, blocos retangulares ou até mesmo regiões de formato não retangular.
[0036] Na codificação com base em paleta, uma área em particular de dados de vídeo pode ser considerada como possuindo um número relativamente pequeno de cores. Um codificador de vídeo (um codificador de vídeo ou decodificador de vídeo) pode codificar uma chamada "paleta" como uma tabela de cores para representar os dados de vídeo da área particular (por exemplo, um bloco determinado). Cada pixel pode ser associado com um registro na paleta que representa a cor do pixel. Por exemplo, o codificador de vídeo pode codificar um índice que relaciona o valor de pixel ao valor adequado na paleta.
[0037] No exemplo acima, um codificador de vídeo pode codificar um bloco de dados de vídeo pela determinação de uma paleta para o bloco, localizando um registro na paleta para representar o valor de cada pixel, e codificando a paleta com índices de paleta (também referidos como valores de índice de paleta) para os pixels referentes ao valor de pixel para a paleta. Um decodificador de vídeo pode obter, a partir de uma sequência de bits codificada, uma paleta para um bloco, além de índices de paleta para os pixels no bloco. O decodificador de vídeo pode relacionar os índices de paleta dos pixels com os registros da paleta para reconstruir os valores de pixel do bloco. Os pixels (e/ou índices de paleta relacionados que indicam um valor de pixel) podem ser geralmente referidos como amostras.
[0038] Assume-se que as amostras no bloco sejam processadas (por exemplo, digitalizada) utilizando-se a ordem de digitalização raster horizontal. Por exemplo, o codificador de vídeo pode converter um bloco bidimensional de índices de paleta em um conjunto unidimensional pela digitalização de índices de paleta utilizando uma ordem de digitalização raster horizontal. Da mesma forma, o decodificador de vídeo pode reconstruir um bloco de índices de paleta utilizando a ordem de digitalização raster horizontal. De acordo, essa descrição pode se referir a uma amostra anterior como uma amostra que procede a amostra sendo codificada no momento no bloco na ordem de digitalização. Deve-se apreciar que as digitalizações além de uma digitalização raster horizontal, tal como uma ordem de digitalização raster vertical, também pode ser aplicável. O exemplo acima deve fornecer uma descrição geral da codificação com base em paleta.
[0039] Uma paleta inclui tipicamente registros numerados por um índice e representando os valores ou intensidades do componente de cor (por exemplo, RGB, YUV ou similares). Ambos um codificador de vídeo e um decodificador de vídeo determinam o número de registros de paleta, valores de componente de cor para cada registro de paleta e a ordenação exata dos registros de paleta para o bloco atual. Nessa descrição, é considerado que cada registro de paleta especifica os valores para todos os componentes de cor de uma amostra. No entanto, os conceitos dessa descrição são aplicáveis à utilização de uma paleta separada para cada componente de cor.
[0040] Em alguns exemplos, uma paleta pode ser composta utilizando a informação dos blocos previamente codificados. Isso é, uma paleta pode conter registros de paleta previstos a partir das paletas utilizadas para codificar os blocos anteriores. Por exemplo, como descrito no documento de submissão padrão Wei Pu et al., "AHG10: Suggested Software for Palette Coding based on RExt6.0," JCTVC-Q0094, Valencia, ES, 27 de março a 4 de abril de 2014 (doravante JCTVC-Q0094), uma paleta pode incluir registros que são copiados de uma paleta de previsor. Uma paleta de previsor pode incluir registros de paleta de blocos previamente codificados utilizando o modo de paleta e outras amostras reconstruídas. Para cada registro na paleta de previsor, um indicador binário pode ser codificado para indicar se o registro associado com o indicador é copiado para a paleta atual (por exemplo, indicada pelo indicador = 1). A sequência de indicadores binários pode ser referida como vetor de previsão de paleta binária. A paleta para codificação de um bloco atual também pode incluir um número de novos registros de paleta, que podem ser explicitamente codificados (por exemplo, separadamente do vetor de previsão de paleta). Uma indicação do número de novos registros também pode ser codificada. Uma soma de registros previstos e novos registros pode indicar o tamanho total de paleta para o bloco.
[0041] Como propôs JCTVC-Q0094, cada amostra em um bloco codificado com um registro de paleta com base em paleta pode ser codificada utilizando um dos três modos de paleta, como apresentados abaixo:Modo de escape: nesse modo, o valor de amostra não é incluído em uma paleta como um registro de paleta e o valor de amostra quantizado é sinalizado explicitamente para todos os componentes de cor. É similar à sinalização de novos registros de paleta, apesar de para novos registros de paleta, os valores de componente de cor não serem quantizados.Modo de Copiar a Partir de Cima (também referido como modo CopyAbove): nesse modo, o índice de registro de paleta para a amostra atual é copiado a partir da amostra localizada diretamente acima em um bloco.Modo de valor (também referido como modo de Índice): Nesse modo, o valor do índice de registro de paleta é explicitamente sinalizado.
[0042] Como descrito aqui, um índice de registro de paleta pode ser referido como um índice de paleta ou simplesmente índice. Esses termos podem ser utilizados de forma intercambiável para descrever as técnicas dessa descrição. Adicionalmente, como descrito em maiores detalhes abaixo, um índice de paleta pode ter um ou mais valores de cor ou intensidade associados. Por exemplo, um índice de paleta pode ter um único valor de cor ou intensidade associado com uma um único componente de cor ou intensidade de um pixel (por exemplo, um componente Vermelho de dados RGB, um componente Y de dados YUV ou similar). Em outro exemplo, um índice de paleta pode ter múltiplos valores de intensidade ou cor associados. Em alguns casos, a codificação com base em paleta pode ser aplicada ao vídeo monocromático de código. De acordo, o "valor de cor" pode se referir geralmente a qualquer componente de cor ou não cor utilizado para gerar um valor de pixel.
[00043] Para os modos de Copiar a Partir de Cima e de Valor, um valor de sequência (que também pode ser referido simplesmente como sequência) também pode ser sinalizado. Um valor de sequência pode indicar um número de amostras consecutivas (por exemplo, uma sequência de amostras) em uma ordem de digitalização em particular em um bloco codificado por paleta que são codificados juntos. Em alguns casos, a sequência de amostras também pode ser referida como uma sequência de índices de paleta, visto que cada amostra da sequência possui um índice associado com uma paleta.
[0044] Um valor de sequência pode indicar uma sequência dos índices de paleta que são codificados utilizando-se o mesmo modo de codificação de paleta. Por exemplo, com reação ao modo de Valor, um codificador de vídeo (codificador de vídeo ou decodificador de vídeo) pode codificar um índice de paleta (também referido como um valor de índice de paleta ou simplesmente valor de índice) e um valor de sequência que indica um número de amostras consecutivas em uma ordem de digitalização que possui o mesmo índice de paleta e que estão sendo codificadas com o índice de paleta. Com relação ao modo de Copiar a Partir de Cima, o codificador de vídeo pode codificar uma indicação de que um índice para o valor de amostra atual é copiado com base em um índice de uma amostra vizinha acima (por exemplo, uma amostra que é posicionada acima da amostra sendo atualmente codificada em um bloco) e um valor de sequência que indica um número de amostras consecutivas em uma ordem de digitalização que também copia um índice de paleta de uma amostra vizinha acima e que estão sendo codificadas com o índice de paleta. De acordo, nos exemplos acima, uma sequência de índices de paleta se refere a uma sequência de índices de paleta possuindo o mesmo valor ou uma sequência de índice de paleta que são copiados a partir dos índices de paleta vizinhos acima.
[0045] Dessa forma, a sequência pode especificar, para um modo determinado, o número de amostras subsequentes que pertencem ao mesmo modo. Em alguns casos, a sinalização de um índice e um valor de sequência podem ser similares à codificação de comprimento de sequência. Em um exemplo, para fins de ilustração, uma sequência de índices de paleta consecutivas de um bloco pode ser 0, 2, 2, 2, 2, 5 (por exemplo, onde cada índice corresponde a uma amostra no bloco). Nesse exemplo, um codificador de vídeo pode codificar a segunda amostra (por exemplo, o primeiro índice de paleta igual a dois) utilizando o modo de Valor. Depois da codificação de um índice que é igual a 2, o codificador de vídeo pode codificar uma sequência de três, que indica que as três amostras subsequentes também possuem o mesmo índice de paleta igual a dois. De uma forma similar, a codificação de uma sequência de quatro índices de paleta depois da codificação de um índice utilizando o modo de Copiar a Partir de Cima, pode indicar que um total de cinco índices de paleta é copiado a partir dos índices de paleta correspondentes na fileira acima da posição de amostra sendo atualmente codificada.
[0046] As técnicas descritas nessa descrição podem incluir as técnicas para várias combinações de um ou mais dentre a sinalização de modos de codificação com base em paleta, a transmissão de paletas, a derivação de paletas, e a transmissão de mapas de codificação com base em paleta e outros elementos de sintaxe. Em alguns exemplos, a técnicas dessa descrição podem ser utilizadas para solucionar redundâncias em potencial associadas com a sinalização dos modos de paleta, índices de paleta, sequências e tamanhos de paleta que estão presentes em JCTVC-Q0094 (além de software de referência implementando o modo de paleta que foi carregado com JCTVC-Q0094 de contribuição). De acordo, como descrito em maiores detalhes abaixo, as técnicas dessa descrição podem, em alguns casos, aperfeiçoar a eficiência e aperfeiçoar a taxa de bit quando da codificação de dados de vídeo utilizando um modo de paleta.
[0047] Determinados aspectos dessa descrição são direcionados à sinalização de modos de codificação com base em paleta e, em particular, as técnicas associadas com a sinalização de amostras de escape. Por exemplo, amostras de escape (também referidas como pixels de escape) podem ser amostras (ou pixels) de um bloco que não possuem uma cor correspondente representada em uma paleta para codificação do bloco. De acordo, amostras de escape podem não ser reconstruídas utilizando-se um registro de cor (ou valor de pixel) de uma paleta. Em vez disso, os valores de cor para as amostras de escape são sinalizados em uma sequência de bits, separadamente dos valores de cor da paleta.
[0048] Como descrito em maiores detalhes abaixo, um codificador de vídeo (por exemplo, um codificador de vídeo e um decodificador de vídeo podem codificar dados por amostra o que indica se uma amostra de um bloco codificador por amostras é codificada com base em uma cor da amostra não incluída em uma paleta para o bloco, por exemplo, utilizando o processo referido como "modo de Escape" acima. Em uma modalidade, o codificador de vídeo pode codificar um indicador para cada amostra que indica se a amostra é codificada como uma amostra de escape, por exemplo, utilizando o modo de Escape (referido aqui como sinalização de escape implícito). Em outro exemplo, o codificador de vídeo pode codificar outra sintaxe (tal como um índice de paleta adicional, como descrito abaixo) para uma amostra que indica que a amostra é codificada como uma amostra de escape, por exemplo, utilizando o modo de Escape (referido aqui como sinalização de escape explícita).
[0049] De acordo com os aspectos dessa descrição, para um bloco codificado por paleta, um ou mais elementos de sintaxe podem indicar, no nível de bloco (por exemplo, um nível de CU ou nível de LCU), se qualquer amostra do bloco é codificada com base em um valor de cor da amostra não incluído na paleta, por exemplo, codificado como uma amostra de escape. Um ou mais elementos de sintaxe podem ser referidos como sintaxe de escape de nível de bloco. Por exemplo, uma sintaxe de nível de bloco pode se referir à sintaxe que é codificada ou determinada enquanto codifica um bloco de dados de vídeo, tal como uma CU ou LCU. A sintaxe de nível de bloco pode ser incluída em um cabeçalho ou com outros dados que são associados com o bloco (por exemplo, dados que são codificados antes de ou depois de um bloco que descreve uma característica do bloco). Em contraste, outra sintaxe que é a sintaxe de não nível de bloco pode ser incluída em um cabeçalho de fatia ou com pixels individuais de dados de vídeo.
[0050] Em um exemplo, um codificador de vídeo pode ser configurado para codificar e/ou determinar um indicador (que pode ser referido como um indicador de escape de nível de bloco) que indica se qualquer amostra do bloco é codificada com base em um valor de cor não incluído na paleta. Por exemplo, um valor de indicador igual a zero pode indicar que nenhuma das amostras do bloco é codificada utilizando o modo de Escape. Isso é, o valor de todas as amostras de um bloco pode ser determinado com base em um valor de cor que é incluído em uma paleta para codificação do bloco. Um valor de indicador igual a um pode indicar que pelo menos uma amostra do bloco é codificada utilizando-se o modo de Escape. Isso é, o valor de pelo menos uma amostra não está incluída em uma paleta para codificação do bloco e pode ser sinalizada separadamente. Dessa forma, o indicador pode indicar, para todas as amostras de um bloco de dado de vídeo, se pelo menos uma amostra do bloco possui um valor de cor que não esteja incluído em uma paleta para codificação de bloco.
[0051] Como descrito em maiores detalhes abaixo, a sintaxe de escape de nível de bloco pode resultar, em alguns casos, em uma economia de bit. Por exemplo, pela determinação de se quaisquer amostras de todo um bloco ao codificadas como uma amostra de escape, o codificador de vídeo pode ser capaz de pular a codificação de determinados elementos de sintaxe associados com as amostras de escape. Isso é, em casos nos quais a sintaxe indica que nenhuma amostra foi codificada como amostra de escape, o codificador de vídeo pode não codificar qualquer outra sintaxe associada com as amostras de escape para o bloco (por exemplo, tal como a sintaxe por amostra notada acima). Como descrito em maiores detalhes abaixo, o codificador de vídeo também pode pular a codificação de determinada sintaxes quando a sintaxe indicar que pelo menos uma amostra de um bloco é codificada como uma amostra de escape com base em um tamanho de uma paleta para o bloco sendo codificado. De acordo, as técnicas dessa descrição podem aperfeiçoar a taxa de bit e a eficiência de codificação quando da codificação de dados de vídeo utilizando a codificação com base em paleta.
[0052] Outros aspectos dessa descrição são direcionados à codificação de parâmetros máximos de paleta para o modo de paleta. Por exemplo, um tamanho máximo de paleta para uma paleta pode ser tipicamente um valor estático que é definido em ambos um codificador de vídeo e um decodificador de vídeo. Da mesma forma, um tamanho máximo de um previsor de paleta (utilizado para prever paletas, como descrito em maiores detalhes abaixo) também pode ser um valor estático que é definido em ambos um codificador de vídeo e um decodificador de vídeo. Dessa forma, esses parâmetros máximos de paleta podem não ser alterados, independentemente das características particulares dos dados de vídeo sendo codificados.
[0053] De acordo com os aspectos dessa descrição, um codificador de vídeo pode ser configurado para codificar os dados indicando um tamanho máximo de paleta e/ou um tamanho máximo de previsor de paleta. Por exemplo, de acordo com os aspectos dessa descrição, os dados que indicam um tamanho máximo de paleta e/ou um tamanho máximo de previsor de paleta podem ser incluídos em um conjunto de parâmetros, tal como um conjunto de parâmetros de sequência (SPS). De acordo, o codificador de vídeo pode codificar pelo menos um dos dados que indicam um tamanho máximo de paleta de uma paleta de valores de cores para codificação de um bloco de dados de vídeo ou dados que indicam um tamanho máximo de previsor de paleta de um previsor de paleta para determinação da paleta de valores de cores.
[0054] A codificação de dados que indica um tamanho máximo de paleta e/ou um tamanho máximo de previsor de paleta podem fornecer flexibilidade, que pode aperfeiçoar a eficiência de codificação. Por exemplo, as técnicas podem permitir que um codificador de vídeo utilize paletas e previsores de paleta de tamanho diferentes com base nas características de dados de vídeo sendo codificados (por exemplo, com base em uma profundidade de bit de dados, um tamanho de bloco, um perfil ou nível associado com os dados, ou similar). De acordo, os parâmetros máximos de paleta podem ser personalizados para dados de vídeo sendo codificados, de modo que os parâmetros de paleta máximos relativamente maiores possam ser definidos para os blocos que podem se beneficiar de tais parâmetros. Adicionalmente, parâmetros de paleta máximos relativamente menores podem ser definidos para reduzir a complexidade associada com a construção de paletas para blocos com menores chances de se beneficiar dos parâmetros relativamente maiores.
[0055] Outros aspectos dessa descrição são direcionados às técnicas de codificação de vários elementos de sintaxe para a codificação de vídeo com base em paleta. Por exemplo, as técnicas dessa descrição incluem sintaxe de codificação para codificação de paleta, tal como um valor de sequência (também referido como um valor de comprimento de sequência) dos índices de paleta, um vetor de previsão de paleta, ou outra sintaxe relacionada com paleta, utilizando um código que considera um valor máximo em potencial da sintaxe sendo codificada. Em alguns casos, de acordo com os aspectos dessa descrição, a sintaxe pode ser codificada utilizando-se uma forma de código Golomb Exponencial, como descrito em maiores detalhes abaixo. As técnicas podem, em alguns casos, reduzir o número de bits necessários para representar a sintaxe relacionada com paleta.
[0056] A figura 1 é um diagrama em bloco ilustrando um sistema de codificação de vídeo ilustrativo 10 que pode utilizar as técnicas dessa descrição. Como utilizado aqui, o termo "codificador de vídeo" se refere genericamente a ambos os codificadores de vídeo e decodificadores de vídeo. Nessa descrição, os termos "codificação de vídeo" ou "codificação" podem referir genericamente à codificação 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 realizar as técnicas para codificação de vídeo com base em paleta de acordo com vários exemplos descritos nessa 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, tal como CUs ou PU na codificação HEVC, utilizando a codificação com base em paleta ou codificação com base em não paleta. Os modos de codificação com base em não paleta podem se referir a vários modos de codificação temporal interprevisível ou modos de codificação espacial intraprevisível, tal como vários modos de codificação especificados por HEVC Rascunho 10.
[0057] Como ilustrado na figura 1, o sistema de codificação de vídeo 10 inclui um dispositivo fonte 12 e um dispositivo de destino 14. O dispositivo fonte 12 gera os dados de vídeo codificados. De acordo, o dispositivo 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 fonte 12. De acordo, 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 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.
[0058] O dispositivo fonte 12 e o dispositivo de destino 14 podem compreender uma ampla faixa de dispositivos, incluindo computadores desktop, dispositivos de computação móvel, computadores notebook (por exemplo, laptop), computadores tablet, caixas de digitalização, aparelhos telefônicos tal como os chamados "smartphones", televisões, câmeras, dispositivos de exibição, aparelhos de mídia digital, consoles de jogos de vídeo, computadores automotivos, ou similares.
[0059] O dispositivo de destino 14 pode receber dados de vídeo codificados a partir do dispositivo 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 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 fonte 12 transmita dados de vídeo codificados diretamente para o dispositivo de destino 14 em tempo real. Nesse 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 meio de comunicação sem e/ou com fio, tal como um espectro de frequência de rádio (RF) ou uma ou mais linhas de transmissão físicas. Uma ou mais mídias de comunicação podem formar parte de uma rede com base em pacote, tal como uma rede de área local, uma rede de área ampla, ou uma rede global (por exemplo, a Internet). Uma ou mais mídias de comunicação podem incluir roteadores, comutadores, estações base ou outro equipamento que facilite a comunicação do dispositivo fonte 12 para o dispositivo de destino 14.
[0060] Em outro exemplo, o canal 16 pode incluir um meio de armazenamento que armazena dados de vídeo codificados gerados pelo dispositivo fonte 12. Nesse exemplo, o dispositivo de destino 14 pode acessar o meio de armazenamento, por exemplo, através de acesso com disco ou com cartão. O meio de armazenamento pode incluir uma variedade de mídia de armazenamento de dados acessados localmente tal como discos Blu-ray, DVDs, CD-ROM, memória flash, ou outro meio de armazenamento digital adequado para armazenamento de dados de vídeo codificados.
[0061] Em um exemplo adicional, o canal 16 pode incluir um servidor de arquivo ou outro dispositivo de armazenamento intermediário que armazena dado de vídeo codificados gerados pelo dispositivo fonte 12. Nesse exemplo, o dispositivo de destino 14 pode acessar os dados de vídeo codificados armazenados no servidor de arquivo ou outro dispositivo de armazenamento intermediário através de sequenciamento ou download. O servidor de arquivo pode ser um tipo de servidor capaz de armazenar os dados de vídeo codificados e transmitir os dados de vídeo codificados para o dispositivo de destino 14. Servidores de arquivo ilustrativos incluem servidores de rede (por exemplo, para um sítio da rede), servidores de protocolo de transferência de arquivo (FTP), dispositivos de armazenamento anexados à rede (NAS), e acionadores de disco local.
[0062] O dispositivo de destino 14 pode acessar os dados de vídeo codificados através de uma conexão de dados padrão, tal como uma conexão com a Internet. Tipos ilustrativos 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 os dados de vídeo codificados armazenados em um servidor de arquivo. A transmissão de dados de vídeo codificados a partir do servidor de arquivo pode ser uma transmissão de sequenciamento, uma transmissão de download, ou uma combinação de ambos.
[0063] As técnicas dessa descrição não estão limitadas aos aplicativos ou configurações sem fio. As técnicas podem ser aplicadas à codificação de vídeo para suportar uma variedade de aplicativos de multimídia, tal como difusões de televisão através do ar, transmissões de televisão a cabo, transmissões de televisão via satélite, transmissões de vídeo sequenciado, 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 outros aplicativos. Em alguns exemplos, o sistema de codificação de vídeo 10 pode ser configurado para suportar transmissão de vídeo de via única ou duas vias para suportar as aplicações tal como sequenciamento de vídeo, reprodução de vídeo, difusão de vídeo e/ou vídeo telefonia.
[0064] O sistema de codificação de vídeo 10 ilustrado na figura 1 é meramente um exemplo e as técnicas dessa descrição podem ser aplicadas às configurações decodificaçã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 a partir de uma memória local, sequenciado através de uma memória, ou similares. Um dispositivo de codificação de vídeo pode codificar e armazenar dados para a memória, e/ou um dispositivo de decodificação de vídeo pode recuperar e decodificar dados a partir da memória. Em muitos exemplos, a codificação e decodificação é realizada por dispositivos que não comunicam com o outro, mas simplesmente codificam os dados para a memória e/ou recuperar e decodificar os dados a partir da memória.
[0065] No exemplo da figura 1, o dispositivo 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/demodulador (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 previamente capturados, uma interface de alimentação de vídeo para receber dados de vídeo de um provedor de conteúdo de vídeo e/ou um sistema gráfico de computador para gerar dados de vídeo, ou uma combinação de tais fontes de dados de vídeo.
[0066] O codificador de vídeo 20 pode codificar dados de vídeo a partir da fonte de vídeo 18. Em alguns exemplos, o dispositivo 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 arquivo para acesso posterior pelo dispositivo de destino 14 para decodificação e/ou reprodução.
[0067] 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 com ou pode estar fora do dispositivo de destino 14. Em geral, o dispositivo de exibição 32 exibe os dados de vídeo decodificados. O dispositivo de exibição 32 pode compreender uma variedade de dispositivos de exibição, tal como o monitor de cristal líquido (LCD), um monitor de plasma, um monitor de diodo de emissão de luz orgânica (OLED), ou outro tipo de dispositivo de exibição.
[0068] O codificador de vídeo 20 e o decodificador de vídeo 30 podem, cada um, ser implementados como qualquer um dentre uma variedade de circuitos adequados, tal como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados específicos de aplicativo (ASICs), conjuntos de porta programável em campo (FPGAs), lógica discreta, hardware, ou qualquer combinação dos mesmos. Se as técnicas forem implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em um meio de armazenamento legível por computador não transitório adequado e pode executar as instruções em hardware utilizando um ou mais processadores para realizar as técnicas dessa descrição. Qualquer um dos acima (incluindo hardware, software, uma combinação de hardware e software, etc.) pode ser considerado um ou mais processadores. Cada um dentre o codificador de vídeo 20 e o decodificador de vídeo 30 pode ser incluído em um ou mais codificadores ou decodificadores, qualquer um dos quais pode ser integrado como parte de um codificador/decodificador combinado (CODEC) em um dispositivo respectivo.
[0069] Essa descrição pode se referir geralmente ao codificador de vídeo 20 "sinalizando" ou "transmitindo" determinada informação para outro dispositivo, tal como o decodificador de vídeo 30. O termo "sinalizando" ou "transmitindo" pode se referir geralmente à comunicação dos elementos de sintaxe e/ou outros dados utilizados para decodificar os dados de vídeo comprimidos. Tal comunicação pode ocorrer em tempo real ou quase real. Alternativamente, tal comunicação pode ocorrer através de uma duração de tempo, tal como pode ocorrer quando do armazenamento de elementos de sintaxe para um meio de armazenamento legível por computador em uma sequência de bits codificada no momento da codificação, que então podem ser recuperados por um dispositivo de decodificação em qualquer momento depois de serem armazenados nesse meio.
[0070] 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, e descrito em HEVC Rascunho 10. Em adição ao padrão HEVC de base, existem esforços em andamento para se produzir a codificação de vídeo escalonável, a codificação de vídeo de múltiplas visualizações e a codificação 3D das extensões para HEVC. Adicionalmente, os modos de codificação com base em paleta, por exemplo, como descrito nessa descrição, podem ser fornecidos para a extensão do padrão HEVC. Em alguns exemplos, as técnicas descritas nessa descrição para a codificação com base em paleta podem ser aplicadas aos codificadores e decodificadores configurados para operação de acordo com outros padrões de codificação de vídeo, tal como o padrão ITU-T-H.264/AVC ou padrões futuros. De acordo, a aplicação de um modo de codificação com base em paleta para codificação das unidades de codificação (CUs) ou unidades de previsão (PUs) no codec HEVC é descrita para fins de exemplo.
[0071] Em HEVC e outros padrões de codificação de vídeo, uma sequência de vídeo inclui tipicamente uma série de imagens. As imagens também podem ser referidas como "quadros". Uma imagem pode incluir três conjuntos de amostras, denotadas SL, SCb e SCr. SL é um conjunto bidimensional (isso é, um bloco) de amostras de luminescência. SCb é um conjunto bidimensional de amostras de crominância Cb. SCr é um conjunto bidimensional de amostras de crominância Cr. As amostras de crominância também podem ser referidas aqui como amostras "chroma". Em outros casos, uma imagem pode ser monocromática e pode incluir apenas um conjunto de amostras de luminescência.
[0072] Para gerar uma representação codificada de uma imagem, o codificador de vídeo 20 pode gerar um conjunto de unidades de árvore de codificação (CTUs). Cada uma das CTUs pode ter um bloco de árvore de codificação de amostras de luminescência, dois blocos de árvore de codificação correspondentes de amostras de crominância, e estruturas de sintaxe utilizadas para codificar as amostras dos blocos de árvore de codificação. Um bloco de árvore de codificação pode ser um bloco N x N de amostras. Uma CTU também pode ser referida como um "bloco de árvore" ou uma "unidade de codificação maior" (LCU). As CTUs de HEVC podem ser amplamente análogas aos macro blocos de outros padrões, tal como H.264/AVC. No entanto, uma CTU não é necessariamente limitada a um tamanho particular e pode incluir uma ou mais unidades de codificação (CUs). Uma fatia pode incluir um número inteiro de CTUs ordenadas consecutivamente na digitalização raster.
[0073] Para gerar uma CTU codificada, o codificador de vídeo 20 pode realizar de forma recursiva a partição de quad-tree nos blocos de árvore de codificação de uma CTU para dividir os blocos de árvore de codificação em blocos de codificação, por isso o nome "unidades de árvore de codificação". Um bloco de codificação é um bloco N x N de amostras. Uma CU pode ser um bloco de codificação de amostras de luminescência e dois blocos de codificação correspondentes de amostras de crominância de uma imagem que possui um conjunto de amostras de luminescência, um conjunto de amostras Cb e um conjunto de amostras Cr, e estruturas de sintaxe utilizadas para codificar as amostras dos blocos de codificação. O codificador de vídeo 20 pode dividir um bloco de codificação de uma CU em um ou mais blocos de previsão. Um bloco de previsão pode ser um bloco de amostras retangular (isso é, quadrado ou não quadrado) no qual a mesma previsão é aplicada. Uma unidade de previsão (PU) de uma CU pode ser um bloco de previsão de amostras de luminescência, dois blocos de previsão correspondentes de amostras de crominância de uma imagem, e estruturas de sintaxe utilizadas para prever as amostras de bloco de previsão. O codificador de vídeo 20 pode gerar blocos de luminescência, Cb e Cr previsíveis para blocos de previsão de luminescência Cb e Cr de cada PU da CU.
[0074] O codificador de vídeo 20 pode utilizar a intraprevisão ou interprevisão para gerar os blocos de previsão para uma PU. Se o codificador de vídeo 20 utilizar a intraprevisão para gerar os blocos de previsão de uma PU, o codificador de vídeo 20 pode gerar os blocos de previsão da PU com base nas amostras decodificadas da imagem associadas com a PU.
[0075] Se o codificador de vídeo 20 utilizar a interprevisão para gerar os blocos de previsão de uma PU, o codificador de vídeo 20 pode gerar blocos de previsão da PU com base nas amostras decodificadas de uma ou mais imagens além da imagem associada com a PU. O codificador de vídeo 20 pode utilizar a uniprevisão ou biprevisão para gerar os blocos de previsão de uma PU. Quando o codificador de vídeo 20 utiliza a uniprevisão para gerar os blocos de previsão para uma PU, a PU pode ter um vetor de movimento único (MV). Quando o codificador de vídeo 20 utiliza a biprevisão para gerar blocos de previsão para uma PU, a PU pode ter dois MVs.
[0076] Depois que o codificador de vídeo 20 gera os blocos de luminescência, Cb e Cr previsíveis para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar um bloco residual de luminescência para a CU. Cada amostra no bloco residual de luminescência da CU indica uma diferença entre uma amostra de luminescência em um dos blocos de luminescência de previsão de CU e uma amostra correspondente no bloco de codificação de luminescência original da CU. Adicionalmente, o codificador de vídeo 20 pode gerar um bloco residual Cb para a CU. Cada amostra no bloco residual Cb da CU pode indicar uma diferença entre uma amostra Cb em um dos blocos Cb de previsão de CU e uma amostra correspondente no bloco de codificação de Cb original da CU. O codificador de vídeo 20 pode gerar também um bloco residual Cr para a CU. Cada amostra no bloco residual Cr da CU pode indicar uma diferença entre uma amostra Cr em um dos blocos Cr de previsão de CU e uma amostra correspondente no bloco de codificação Cr original da CU.
[0077] Adicionalmente, o codificador de vídeo 20 pode utilizar a partição de quad-tree para compor os blocos residuais de luminescência, Cb e Cr de uma CU em um ou mais blocos de transformação de luminescência, Cb e Cr. Um bloco de transformação pode ser um bloco retangular de amostras no qual a mesma transformação é aplicada. Uma unidade de transformação (TU) de uma CU pode ser um bloco de transformação de amostras de luminescência, dois blocos de transformação correspondentes de amostras de crominância, e estruturas de sintaxe utilizadas para transformar as amostras de bloco de transformação. Dessa forma, cada TU de uma CU pode ser associada com um bloco de transformação de luminescência, um bloco de transformação Cb, e um bloco de transformação Cr. O bloco de transformação de luminescência associado com a TU pode ser um sub-bloco do bloco residual de luminescência da CU. O bloco de transformação Cb pode ser um sub-bloco do bloco residual Cr de CU.
[0078] O codificador de vídeo 20 pode aplicar uma ou mais transformações a um bloco de transformação de luminescência de uma TU para gerar um bloco de coeficiente de luminescência para a TU. Um bloco de coeficientes pode ser uma quantidade escalar. O codificador de vídeo 20 pode aplicar uma ou mais transformações a um bloco de transformação Cb de uma TU para gerar um bloco de coeficientes Cb para a TU. O codificador de vídeo 20 pode a plicar uma ou mais transformações a um bloco de transformação Cr de uma TU para gerar um bloco de coeficientes Cr para a TU.
[0079] Depois da geração de um bloco de coeficientes (por exemplo, um bloco de coeficientes de luminescência, um bloco de coeficiente Cb ou um bloco de coeficiente Cr), o codificador de vídeo 20 pode quantizar o bloco de coeficientes. A quantização se refere geralmente a um processo no qual os coeficientes de transformação são quantizados para reduzir possivelmente a quantidade de dados utilizada para representar os coeficientes de transformação, fornecendo uma compressão adicional. Depois que o codificador de vídeo 20 quantiza um bloco de coeficientes, o codificador de vídeo 20 pode codificar por entropia os elementos de sintaxe indicando os coeficientes de transformação quantizados. Por exemplo, o codificador de vídeo 20 pode realizar a Codificação Aritmética Binária Adaptativa de Contexto (CABAC) nos elementos de sintaxe indicando os coeficientes de transformação quantizados. O codificador de vídeo 20 pode enviar os elementos de sintaxe codificados por entropia em uma sequência de bits.
[0080] O codificador de vídeo 20 pode enviar uma sequência de bits que inclui elementos de sintaxe codificados por entropia. A sequência de bits pode incluir uma sequência de bits que forma uma representação de imagens codificadas e dados associados. A sequência de bits pode compreender uma sequê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 sequência de byte bruto (RBSP). O cabeçalho de unidade NAL pode incluir um elemento de sintaxe que indica um código de tipo de unidade NAL. O código de tipo de unidade NAL especificado pelo cabeçalho de unidade NAL de uma unidade NAL indica o tipo de unidade NAL. Um RBSP pode ser uma estrutura de sintaxe contendo um número inteiro de bytes que é encapsulado dentro de uma unidade NAL. Em alguns casos, RBSP inclui bits zero.
[0081] Diferentes tipos de unidades NAL podem encapsular diferentes tipos de RBSP. 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 uma fatia codificada, um terceiro tipo de unidade NAL pode encapsular um RBSP para SEI, e assim por diante. Unidades NAL que encapsulam RBSPs para dados de codificação de vídeo (em oposição a RBSPs para conjuntos de parâmetros de mensagens SEI) podem ser referidos como unidades NAL de camada de codificação de vídeo (VCL).
[0082] O decodificador de vídeo 30 pode receber uma sequência de bits gerada pelo codificador de vídeo 20. Adicionalmente, o decodificador de vídeo 30 pode analisar a sequência de bits para decodificar os elementos de sintaxe a partir da sequência de bits. O decodificador de vídeo 30 pode reconstruir as imagens de dados de vídeo com base pelo menos em parte nos elementos de sintaxe decodificados a partir da sequência de bits. O processo para reconstrução dos dados de vídeo pode ser geralmente alternado com o processo realizado pelo codificador de vídeo 20. Por exemplo, o decodificador de vídeo 30 pode utilizar MVs das PU para determinar os blocos de previsão para PUs de uma CU atual. Adicionalmente, o decodificador de vídeo 30 pode quantizar de forma inversa os blocos de coeficientes de transformação associados com as TUs da CU atual. O decodificador de vídeo 30 pode realizar as transformações inversas nos blocos de coeficientes de transformação para reconstruir os blocos de transformação associados com as TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de codificação da CU atual pela adição de amostras dos blocos de previsão para PUs da CU atual a amostras correspondentes dos blocos de transformação das TUs da CU atual. Pela reconstrução de blocos de codificação para cada CU de uma imagem, o decodificador de vídeo 30 pode reconstruir a imagem.
[0083] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para realizar a codificação com base em paleta. Por exemplo, na codificação com base em paleta, em vez de realizar as técnicas de codificação por intraprevisão ou interprevisão descritas acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar uma chamada paleta como uma tabela de cores para representar os dados de vídeo da área em particular (por exemplo, um determinado bloco). Cada pixel pode ser associado com um registro na paleta que representa a cor do pixel. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um índice que relaciona o valor de pixel ao valor adequado na paleta.
[0084] No exemplo acima, o codificador de vídeo 20 pode codificar um bloco de dados de vídeo pela determinação de uma paleta para o bloco, localizando um registro na paleta para representar o valor de cada pixel, e codificando a paleta com índices de paleta para os pixels relacionando o valor de pixel à paleta. O decodificador de vídeo 30 pode obter, a partir de uma sequência de bits codificada, uma paleta para um bloco, além de índices de paleta para os pixels do bloco. O decodificador de vídeo 30 pode relacionar os índices de paleta dos pixels a registros da paleta para reconstruir os valore de pixel do bloco.
[0085] Como notado acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar vários modos de codificação de paleta diferentes para codificar os índices de paleta de uma paleta. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar um modo de Escape, um modo de Copiar a Partir de Cima (também referido como modo CopyAbove), ou um modo de Valor (também referido como modo de Índice) para codificar os índices de paleta de um bloco. Em geral, a codificação de uma amostra utilizando o "Modo de Escape" pode geralmente se referir à codificação de uma amostra de um bloco que não possui uma cor correspondente representada em uma paleta para codificação do bloco. Como notado acima, tais amostras podem ser referidas como amostras de escape ou pixels de escape.
[0086] Outro modo de codificação de paleta ilustrativo é descrito em uma terceira experiência de núcleo de codificação de conteúdo de tela, subteste B.6, como descrito em Yu-Wen Huang et al., "Description of Screen Content Core Experiment 3 (SCCE3): Palette Mode", JCTVC-Q1123, Valencia, ES, de 27 de março a 4 de abril de 2014 (doravante Q1123), outro modo foi introduzido no software liberado pela Canon em 26 de maio de 2014. A macro para esse modo foi "CANON_NEW_RUN_LAST_TRANSITION" e pode ser referida aqui como um Modo de Sequência de Transição. A Sequência de Transição pode ser similar ao modo de Valor visto que o codificador de vídeo 20 ou decodificador de vídeo 30 pode codificar um valor de índice seguido por uma sequência especificando o número de amostras subsequentes que possuem o mesmo índice de paleta.
[0087] A diferença entre o modo de Valor e o modo de Sequência de Transição é que o índice de paleta do modo de sequência de transição não é sinalizado na sequência de bits. Em vez disso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir o índice de paleta. Como descrito aqui, inferir um valor pode se referir à determinação de um valor sem referência para a sintaxe dedicada que representa o valor que é codificado em uma sequência de bits. Isso é, o codificador de vídeo 20 e o decodificador de vídeo 30 pode inferir um valor sem codificar um elemento de sintaxe dedicado para o valor em uma sequência de bits. O índice inferido pode ser referido como um índice de transição.
[0088] Em alguns exemplos, pode haver duas formas de sinalização dos modos de paleta. Uma primeira técnica para sinalização de modos de paleta pode ser referida como uma sinalização de escape explícita. Por exemplo, em JCTVC- Q0094, se macro "PLT_REMOVE_ESCAPE_FLAG" for igual a zero, o codificador de vídeo 20 pode codificar explicitamente um indicador de escape para cada amostra de um bloco para indicar se uma amostra sendo codificada em um bloco é codificada no modo Escape. Se a amostra não for codificada como o modo Escape, o codificador de vídeo 20 pode codificar dados adicionais para indicar se o modo é CopyFromTop ou Value. Em alguns casos, os dados adicionais podem ser um indicador, referido aqui como um indicador SPoint (por exemplo, um valor de indicador SPoint igual a zero pode indicar o modo CopyFromTop e um valor de indicador SPoint igual a um pode indicar o modo Value ou vice-versa).
[0089] Dessa forma, com a sinalização de escape explícita, o indicador SPoint pode ser utilizado para indicar um tipo de sequência particular para uma sequência de valores de pixel associados com o modo indicado. Por exemplo, o codificador de vídeo 20 pode codificar um indicador SPoint para indicar se o índice atualmente sendo codificado e a sequência de índices de paleta subsequentes sendo codificados em uma sequência são codificados utilizado o modo CopyFromTop ou o modo Value. O codificador de vídeo 20 não codifica o indicador de escape (por exemplo, "PLT_REMOVE_ESCAPE_FLAG") e o indicador SPoint (quando necessário) para as amostras de sequência subsequentes. Isso é, o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir os valores do indicador de escape e o indicador SPoint para amostras incluídas em uma sequência. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar o valor do indicador de escape e o indicador SPoint para amostras incluídas na sequência sem referência à sintaxe dedicada que representa tais valores na sequência de bits.
[0090] Uma segunda técnica para sinalização de modos de paleta pode ser referida como sinalização de escape implícita. Por exemplo, se macro "PLT_REMOVE_ESCAPE_FLAG" de JCTVC-Q0094 for igual a um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para aumentar o número de registros de paleta de uma paleta por um para acomodar um índice especial à paleta que não corresponde a qualquer registro de paleta. Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem incluir o índice adicional como o último índice de paleta na paleta aumentada para um bloco determinado. O índice adicional pode ser utilizado como uma indicação do modo Escape.
[0091] Quando da realização da sinalização de escape implícita, o codificador de vídeo 20 pode codificar, para um valor de amostra em particular de um bloco, dados que representam o índice adicional para indicar que a amostra adicional foi codificada como uma amostra de escape (por exemplo, uma amostra que não possui um valor de cor representado em uma paleta para codificação do bloco). O codificador de vídeo 20 também pode codificar os valores de cor da amostra de escape. De acordo, no caso de sinalização de escape implícita, só existem dois possíveis modos (por exemplo, modo CopyFromTop ou modo Value (também referido como modo Index)) a serem sinalizados utilizando-se sintaxe explícita. Por exemplo, apenas o indicador SPoint pode ser sinalizado para distinguir entre os modos. Se uma amostra for codificada no modo Value e o índice para o modo Value for igual ao índice escape (por exemplo, índice adicional notado acima da paleta), o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir a amostra a ser codificada como uma amostra de escape. Nesse caso nenhuma sequência é sinalizada. Quando da utilização da sinalização de escape implícita com o modo de Sequência de Transição, o indicador SPoint pode assumir os valores 0 (por exemplo, modo Value), 1 (por exemplo, modo CopyFromTop) ou 2 (por exemplo, modo de Sequência de Transição).
[0092] As técnicas descritas nessa descrição podem incluir técnicas para várias combinações de um ou mais dentre os modos de sinalização de codificação com base em paleta, transmissão de paletas, derivação de paletas, e transmissão de mapas de codificação com base em paleta e outros elementos de sintaxe. Em alguns exemplos, a técnicas dessa descrição podem ser utilizadas para resolver redundâncias em potencial associadas com a sinalização dos modos de paleta, índices de paleta, sequências e tamanhos de paleta que estão presentes em JCTVC-Q0094 (além de software de referência implementando o modo de paleta que foi carregado com a contribuição de JCTVC-Q0094).
[0093] No software associado com as técnicas descritas em JCTVC-Q0094, determinadas redundâncias de sinalização já foram consideradas e removidas. Por exemplo, em JCTVC-Q0094, o indicador SPoint não está sinalizado para amostras na primeira fileira do bloco, visto que um bloco codificado com o modo de paleta não pode utilizar tipicamente amostras reconstruídas a partir de um bloco vizinho acima para prever o bloco atual. Um bloco vizinho acima pode se referir geralmente a um bloco que é vizinho e está posicionado acima de um bloco. De forma similar, se o modo para uma amostra que precede uma amostra sendo atualmente codificada for CopyFromTop, o modo para o pixel atual não pode ser CopyFromTop.
[0094] Essa descrição, no entanto, reconhece outras redundâncias de sinalização e/ou ineficiências, que podem ser removidas totalmente ou seletivamente. Como descrito em maiores detalhes abaixo, as técnicas aperfeiçoam a eficiência de taxa de bit de codificação de vídeo sem distorção material. Como um exemplo, se a amostra diretamente acima de uma amostra atual for uma amostra de escape, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não codificar a amostra atual utilizando o modo CopyFromTop. Nesse caso, o codificador de vídeo 20 pode não sinalizar SPoint para a amostra, e o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir o indicador SPoint como sendo igual ao modo Value se necessário.
[0095] Em outro exemplo, de acordo com as técnicas dessa descrição, e nem a amostra anterior nem a amostra diretamente acima da amostra atual em um bloco forem amostras de escape as amostras anterior e acima possuem o mesmo índice de paleta, o codificador de vídeo 20 e o decodificador de vídeo 30 são configurados para não codificar a amostra atual utilizando o modo CopyFromTop. Isso, porque, para o modo CopyFromTop, o índice da amostra atual seria igual ao da amostra anterior. Se o modo para a amostra anterior for o modo Value, a sequência associada com o modo Value seria estendida por um para incorporar a amostra atual. Por outro lado, se o modo da amostra anterior for CopyFromTop, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não codificar a amostra atual utilizando o modo CopyFromTop, como notado acima. Dessa forma, nesse caso, o codificador de vídeo 20 pode não sinalizar o indicador SPoint para a amostra atual, e o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir o indicador SPoint como sendo igual ao modo Value se necessário.
[0096] Em outro exemplo, de acordo com as técnicas dessa descrição, se a sequência anterior for maior do que ou igual a uma largura do bloco sendo codificado menos um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não codificar a amostra atual utilizando o modo CopyFromTop. Visto que o modo CopyFromTop pode não seguir o modo CopyFromTop, como descrito acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir que se o modo associado com a amostra anterior for codificado utilizando o modo CopyFromTop, o modo da amostra atual pode não ser codificado utilizando-se o modo CopyFromTop. Se a sequência anterior for codificada utilizando o modo Value se a sequência anterior for maior do que ou igual à largura do bloco menos um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar que os índices de paleta para a amostra anterior e a amostra diretamente acima da amostra atual são iguais (de uma forma similar ao exemplo descrito acima). Nesse caso, se a amostra atual não puder ter o mesmo índice, o modo CopyFromTop é impossível. Dessa forma, nesse caso, o codificador 20 pode não sinalizar o indicador SPoint para a amostra atual, e o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir o indicador SPoint como sendo igual ao modo Value se necessário.
[0097] Em outro exemplo, de acordo com os aspectos dessa descrição, se o tamanho de paleta for um para um bloco sendo codificado quando da utilização da sinalização de escape explícita, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não codificar determinados índices de paleta, tal como os índices de paleta descritos no pedido provisório U.S. 61/845.824, depositado em 12 de julho de 2013, pedido provisório U.S. No. 61/899.048, depositado em 1 de novembro de 2013, ou pedido provisório U.S. 61/913.040, depositado em 6 de dezembro de 2013. Adicionalmente, o codificador de vídeo 20 pode ser configurado para não codificar o indicador SPoint, visto que o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir o indicador SPoint como sendo igual ao modo Value se necessário. Isso porque, se a amostra atual não for codificada como uma amostra de escape (por exemplo, uma amostra que não possua um valor de cor representado em uma paleta para codificação de bloco), o índice de paleta para a amostra atual já é conhecido e derivado igual a zero (como o único índice de paleta possível). Nesse caso, apenas a sequência é sinalizada. Não é necessário se distinguir entre os modos CopyFromTop e Value, visto que ambos os modos fornecem um resultado idêntico. De forma similar, para a sinalização de escape implícita, quando o tamanho de paleta é igual a dois, o codificador de vídeo 20 pode sinalizar os índices de paleta para distinguir entre os modos de Value e Escape, mas a sinalização do indicador SPoint não é necessária pelas mesmas razões que acima.
[0098] As técnicas dessa descrição também podem ser utilizadas para remover redundâncias quando da utilização dos Modos Value, CopyFromTop e de Sequência de Transição. Dessa forma, as técnicas podem aperfeiçoar a eficiência de taxa de bit de codificação de vídeo sem realizar materialmente a distorção. Em um exemplo para fins de ilustração, uma amostra atual é codificada no modo Value e o modo de Sequência de Transição não está disponível para uso (por exemplo, apenas os modos CopyFromAbove e Value estão disponíveis). Nesse exemplo, quando o modo para a amostra anterior é Value, o índice da amostra atual não pode ser igual ao da amostra anterior, do contrário, a amostra atual é incluída no modo de Valor anterior e a sequência para o modo Value é incrementada por um. De forma similar, quando o modo para a amostra anterior é CopyFromTop, o índice da amostra atual a ser codificada não pode ser igual a um acima, do contrário, a amostra atual é codificada com o modo CopyFromTop e possivelmente a sequência para o modo CopyFromTop seria incrementada por um.
[0099] Com a relação descrita acima em mente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem reduzir o índice para a amostra atual por um quando o índice é maior do que o índice para a amostra anterior (por exemplo, se a amostra anterior estiver no modo Value) ou a amostra superior (por exemplo, se a amostra anterior estiver no modo CopyFromTop). Esse processo é descrito em C.Gisquet et al., "AHG10: Palette Index Coding," JCTVC- Q0064, Valencia, ES, de 27 de março a 4 de abril de 2014 (doravante JCTVC-Q0064). Além disso, o número máximo de possíveis índices de paleta pode ser reduzido por um, independentemente de se a condição anterior for verdadeira (índice atual é maior do que os índices de paleta anterior esquerdo ou acima). Por exemplo, quando da utilização de um código de comprimento variável (por exemplo, tal como um código binário truncado) para codificar o índice, o número de registros de paleta pode ser reduzido por um.
[0100] De acordo com os aspectos dessa descrição, alternativamente ou adicionalmente ao processo descrito acima, o processo de ajuste de índice no modo Value pode ser modificado adicionalmente quando da utilização do modo de Sequência de Transição. Por exemplo, de acordo com os aspectos dessa descrição, se a amostra não for a primeira amostra no bloco se a amostra anterior não for codificada como uma amostra de escape, o codificador de vídeo 20 e o decodificador de vídeo 30 podem realizar o processo de ajuste de índice descrito abaixo.
[0101] De acordo com os aspectos dessa descrição, se a amostra anterior for codificada no modo Value ou de Sequência de Transição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o número de registros de paleta por um. Adicionalmente, se o valor de índice for maior do que ou igual a o valor de índice da amostra anterior (índice ou índice de transmissão), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o valor de índice atual por um. Essa descrição pode se referir a esse valor reduzido como o valor de índice ajustado. Então, se o valor de índice para a amostra anterior não for igual ao índice de transição se o número de registros de paleta for maior que um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar uma "atualização" variável para um, do contrário, configurar a "atualização" para zero. Se a atualização for igual a um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem reduzir ainda mais o número de registros de paleta por um. Essa descrição pode se referir ao número reduzido de registros de paleta como o tamanho de paleta ajustado.
[0102] Adicionalmente, se o índice de transição for maior que ou igual ao valor de índice para a amostra anterior, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o índice de transição por um. Essa descrição pode se referir ao índice de transição reduzido como o valor de índice de transição ajustado. Se a atualização for igual a um se o valor de índice ajustado for superior ao valor de índice de transição ajustado, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir adicionalmente o valor de índice ajustado por um. Adicionalmente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para realizar o último ajuste de índice apenas se o tamanho ajustado da paleta for superior a um. Isso porque o valor de índice ajustado só pode ser sinalizado se o tamanho ajustado da paleta for maior que um.
[0103] Se o tamanho ajustado de paleta for superior a um, o codificador de vídeo 20 pode codificar uma indicação do valor ajustado de índice, levando em consideração que o número máximo possível de índices de paleta pode ser igual ao tamanho ajustado de paleta. Nesse caso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para utilizar a binarização truncada para codificação, tal como a codificação binária truncada descrita aqui.
[0104] Em alguns exemplos, de acordo com os aspectos dessa descrição, um processo similar ao processo descrito acima pode ser realizado pela verificação do valor de pixel e modo utilizado para o pixel diretamente acima da amostra atual. Isso é, o processo descrito acima com relação a um pixel posicionado à esquerda do pixel atual pode ser realizado em vez disso para os pixels vizinhos superiores, onde o valor de amostra à esquerda e o modo descrito acima são substituídos pelo valor e modo de pixel acima.
[0105] Por exemplo, se a amostra não estiver na primeira fileira e a amostra anterior for codificada no modo CopyFromTop e a amostra acima não for codificada como uma amostra de escape, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o número de registros de paleta por um. Adicionalmente, se o valor de índice atual for superior a ou igual ao valor de índice da amostra diretamente acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o valor de índice atual por um. Novamente, essa redução do valor de índice pode ser referida como valor de índice ajustado. Então, se o valor de índice para a amostra diretamente acima não for igual ao índice de transição e o número de registros de paleta for superior a um, o codificador de vídeo 20 pode configurar uma atualização variável para um, do contrário, configura a atualização para zero.
[0106] Se a atualização for igual a um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir ainda mais o número de registros de paleta por um, o que pode ser referido como tamanho ajustado de paleta. Adicionalmente, se o índice de transição for superior a ou igual ao valor de índice para a amostra acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o índice de transição por um, o que pode ser referido como valor de índice de transição ajustado. Se a atualização for igual a zero e o valor de índice ajustado for superior ao valor de índice de transição ajustado, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o valor de índice ajustado por um. Adicionalmente, o último ajuste de índice pode ser realizado apenas se o tamanho de paleta ajustado for superior a um, visto que o valor de índice ajustado é tipicamente sinalizado apenas se o tamanho de paleta ajustado for superior a um.
[0107] Se o tamanho ajustado de paleta for superior a um, o codificador de vídeo 20 pode ser configurado para codificar uma indicação do valor de índice ajustado e pode, em alguns exemplos, levar em consideração o número possível máximo de índices de paleta igual ao tamanho ajustado de paleta. Nesse caso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para utilizar a binarização truncada, tal como a codificação binária truncada descrita aqui.
[0108] A remoção de redundância na sinalização de índice de paleta com relação ao modo de Sequência de Transição é descrita acima. No entanto, essas técnicas podem ser combinadas com um método de Sequência Limitada, como descrito abaixo e no pedido provisório U.S. No. 62/002.717, depositado em 23 de maio de 2014, e pedido provisório U.S. No. 62/009.772, depositado em 9 de junho de 2014. Nesse caso, acima de um determinado valor de índice de paleta, a sequência é sempre igual a zero e, dessa forma, para esses índices de paleta, o codificador de vídeo 20 pode ser configurado para não codificar uma indicação do valor de sequência. Em vez disso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para derivar o valor de sequência para que seja igual a zero. Para essa combinação, as técnicas descritas acima com relação ao modo de Sequência de Transição permanecem inalteradas. Isso é, por exemplo, as técnicas de remoção de redundância descritas acima também podem ser utilizadas com o modo de Sequência Limitada.
[0109] Adicionalmente ou alternativamente, as técnicas dessa descrição também podem ser combinadas com a técnica de Sequência Limitada como proposto no documento de submissão padrão Guillaume Laroche et al., "AHG10: Run Coding for Palette Mode," JCTVC-Q0066, Valencia, ES, 27 de março a 4 de abril de 2014 (doravante JCTVC-Q0066). Nesse exemplo, um índice de limite também é especificado. No entanto, uma diferença com a técnica de sequência limitada descrita acima é que os índices de paleta superiores a um índice de limite também podem ter sequências de um ou mais. No entanto, o codificador de vídeo 20 pode não sinalizar as sequências. Quando da implementação dessa segunda técnica de Sequência Limitada, as técnicas de remoção de redundância dessa descrição só podem ser aplicadas se o valor de índice do pixel anterior for inferior a ou igual ao valor de índice limite, ou o valor de índice do pixel acima for inferior a ou igual ao valor de índice de limite.
[0110] As técnicas descritas acima são geralmente descritas com relação a um codificador de vídeo (tal como o codificador de vídeo 20). No lado do decodificador (como implementado, por exemplo, pelo decodificador de vídeo 30), a utilização das mesmas condições que no lado do codificador, o decodificador de vídeo 30 também pode ajustar o número de registros de paleta e índice de transição. O decodificador de vídeo 30 pode então decodificar o índice utilizando o número ajustado de registros de paleta. O índice decodificado pode ser incrementado (em vez de reduzido) utilizando-se as mesmas condições que no lado do codificador.
[0111] Determinadas técnicas descreveram a redução de redundância em casos nos quais o modo CopyFromTop não é possível, e, dessa forma, a sinalização do indicador SPoint pode ser modificada de modo que o codificador de vídeo 20 e o decodificador de vídeo 30 possam inferir o modo de Valor. De acordo com os aspectos dessa descrição, as técnicas de redução de redundância podem ser estendidas para o caso no qual o modo de Sequência de Transição também está sendo utilizado. Nesse caso, o modo CopyFromTop não é possível se qualquer uma das condições a seguir for verdadeira: 1. A amostra está na primeira fileira. 2. O modo para a amostra anterior é CopyFromTop 3. O pixel acima é codificado no modo Escape e a amostra não está na primeira fileira e a amostra anterior não está codificada no modo CopyFromTop. 4. A amostra acima e a amostra anterior possuem o mesmo índice e a amostra anterior não está codificada no modo Escape.
[0112] As técnicas dessa descrição também fornecem uma alternativa para a sinalização explícita de um indicador escape para o modo de paleta Escape. Por exemplo, em vez de sinalizar o indicador de escape antes do indicador SPoint com a sinalização de escape explícita, de acordo com os aspectos dessa descrição, a ordem dos indicadores pode ser trocada enquanto também se muda a semântica desses indicadores. Nesse caso, o codificador de vídeo 20 pode sinalizar o indicador SPoint primeiro em uma sequência de bits. Nesse exemplo, um indicador SPoint que é igual a um pode indicar o modo de Valor, enquanto um indicador SPoint que é igual a zero pode indicar que o modo de paleta para uma amostra atual é CopyFromTop ou Escape. Adicionalmente, quando o indicador SPoint é igual a um, o codificador de vídeo 20 pode sinalizar um indicador de escape para diferenciar entre o modo CopyFromTop e o modo Escape.
[0113] Nos exemplos acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para utilizar CABAC para codificar pelo menos um dos indicadores descritos acima ou ambos os indicadores descritos acima (por exemplo, o indicador SPoint ou o indicador de escape). Alternativamente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar tais indicadores utilizando o modo de bypass CABAC para reduzir o número de compartimentos codificados por contexto.
[0114] Como descrito acima, o modo CopyFromTop pode não ser possível sob determinadas condições. Em tais casos, quando da utilização de um método de sinalização alternativo (por exemplo, tal como troca de indicadores), o codificador de vídeo 20 pode ser configurado para sinalizar apenas o indicador SPoint sem sinalizar o indicador de escape. Nesse caso, o indicador SPoint pode ter uma semântica diferente. Por exemplo, um indicador SPoint que é igual a um ainda pode indicar que o modo é o modo Value, mas um indicador SPoint que é igual a zero pode indicar um modo Escape. Se o indicador SPoint for codificado por contexto utilizando CABAC, um contexto separado adicional pode ser utilizado para codificar o valor de indicador SPoint nos casos quando o modo CopyFromTop é impossível. No caso de um tamanho de paleta igual a um e um modo de escape sendo utilizado, como descrito acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para pular a codificação do indicador SPoint quando da utilização do método de sinalização alternativo.
[0115] As técnicas dessa descrição também fornecem outra técnica de sinalização alternativa (por exemplo, com relação a JCTVC-Q0094) para sinalização de um indicador de escape para o modo de paleta Escape. Por exemplo, em JCTVC-Q0094, determinadas redundâncias de sinalização foram consideradas e removidas no software de referência. Como um exemplo, quando da codificação de uma amostra atual, se um modo de paleta para uma amostra anterior for CopyFromTop, o codificador de vídeo 20 e o decodificador de vídeo 30 podem não codificar o pixel atual utilizando o modo CopyFromTop. De forma similar, se o modo para a amostra anterior for o modo Value com índice de paleta "X", o codificador de vídeo 20 e o decodificador de vídeo 30 podem não codificar o pixel atual utilizando o modo Value com o mesmo índice de paleta "X". No estágio de análise (por exemplo, quando da análise dos elementos de sintaxe de uma sequência de bits codificada no decodificador de vídeo 30), o decodificador de vídeo 30 verifica as condições notadas acima para determinar quais elementos de sintaxe são permitidos a fim de ler a sequência de bits adequadamente. Esse processo de verificação pode se tornar trabalhoso se muitas das condições precisarem ser verificadas.
[0116] De acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para "reutilização" das redundâncias notadas acima para sinalizar implicitamente o modo Escape. Por exemplo, quando da codificação de uma amostra atual de um bloco, se uma amostra anterior for codificada utilizando o modo CopyFromTop e o modo para o pixel atual também for sinalizado como CopyFromTop, o decodificador de vídeo 30 pode inferir que o modo para o bloco atual seja o modo Escape. Isso é, o codificador de vídeo 20 pode utilizar a redundância de duas amostras em uma fileira sendo codificada com o modo CopyFromTop para sinalizar o modo Escape. De forma similar, se o modo para a amostra anterior para uma amostra sendo atualmente codificada for o modo Value com o índice de paleta "X" e o modo sinalizado for o modo Value com o mesmo índice de paleta "X", o decodificador de vídeo 30 pode inferir o modo para o bloco atual para ser o modo Escape. De forma similar, outras redundâncias descritas acima também podem ser alavancadas dessa forma.
[0117] Nos exemplos descritos acima, a sinalização do modo Escape com base nas redundâncias não inclui todas as possíveis situações nas quais o codificador de vídeo 20 pode sinalizar o modo Escape. De acordo, essas técnicas podem ser utilizadas como uma forma complementar de sinalizar o modo Escape. Em outros exemplos, as técnicas podem ser impostas à sequência de bits, de modo que o modo Escape só possa ser sinalizado nessas situações restritas.
[0118] As técnicas dessa descrição também se referem à sinalização de que uma amostra é uma amostra de escape para um tamanho de paleta que é igual a zero. Por exemplo, de acordo com os aspectos dessa descrição, se um tamanho de paleta de uma paleta associada com um bloco sendo atualmente codificado for igual a zero quando da utilização da sinalização de escape explicito, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que todas as amostras no bloco sejam codificadas como amostras de escape. Isso é, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar que todas as amostras no bloco são codificadas como amostras de escape (por exemplo, amostras que não possuem um valor de cor representado em uma paleta para codificação do bloco) sem codificar ou decodificar a sintaxe dedicada que representa omodo de Escape em uma sequência de bits. Da mesma forma, se um tamanho de paleta de uma paleta associada com um bloco sendo atualmente codificado for igual a um quando da utilização da sinalização de escape implícita (por exemplo, o único índice da paleta é o índice adicional utilizado para sinalização do modo de Escape, como descrito acima), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que todas as amostras no bloco são codificadas como amostras de escape.
[0119] Em ambos os exemplos descritos acima (por exemplo, para ambas a sinalização de escape explícita e implícita), o codificador de vídeo 20 e o decodificador de vídeo 30 podem pular a codificação de determinada sintaxe com base em paleta para o resto do bloco. Por exemplo, para a sinalização de escape explícita, o codificador de vídeo 20 pode não sinalizar um indicador de escape para amostras do bloco. Adicionalmente, para ambas a sinalização de escape explícita e implícita, o codificador de vídeo 20 pode não sinalizar o indicador SPoint (para ambas a sinalização de escape implícita e explícita). Isso é, visto que todas as amostras para o bloco podem ser inferidas como sendo amostras de escape, o codificador de vídeo 20 não precisa sinalizar o indicador SPoint para distinguir entre os modos CopyFromTop e Value. O decodificador de vídeo 30 pode, da mesma forma, pular a decodificação de tal sintaxe, que pode aperfeiçoar a taxa de bit e a eficiência da codificação.
[0120] Em um exemplo alternativo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem restringir o tamanho de paleta para ser pelo menos um de forma normativa. Nesse exemplo, o codificador de vídeo 20 pode ser configurado para modificar a sinalização do tamanho de paleta de modo que (tamanho de paleta - 1) seja sinalizado. Por exemplo, quando um previsor de paleta é utilizado (por exemplo, como descrito em maiores detalhes com relação ao exemplo da figura 4), para cada registro do previsor de paleta, o codificador de vídeo 20 pode codificar um indicador de um bit para indicar se os registros de previsor de paleta respectivos estão incluídos em uma paleta de um bloco atual. Esses registros são referidos como registros de paleta previstos e são indicados por um vetor binário de previsão de paleta (por exemplo, a sequência de indicadores de um bit). O codificador de vídeo 20 também pode sinalizar o número de novos registros de paleta seguindo os registros previstos. Em outros exemplos, o codificador de vídeo 20 pode sinalizar o número de novos registros de paleta antes dos registros previstos. Em qualquer caso, se o número de registros de paleta previsto for igual a zero, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar os dados que indicam (número de novos registros de paleta - 1) em vez da codificação do número de novos registros de paleta.
[0121] Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para restringir o modo de paleta de modo que um tamanho de paleta não deva ser igual a 0. Por exemplo, essa restrição pode ser alcançada como uma restrição de sequência de bits, isso é, uma sequência de bits não pode conter um bloco codificado de paleta com um tamanho de paleta igual a zero.
[0122] As técnicas dessa descrição também se referem à sinalização de tamanho de paleta. Por exemplo, o tamanho de paleta para um bloco atual (por exemplo, uma CU sendo atualmente codificada pelo codificador de vídeo 20 ou decodificador de vídeo 30) pode ser explicitamente sinalizado (por exemplo, como descrito, por exemplo, no pedido U.S. No. 14/244.688, depositado em 3 de abril de 2014 e pedido U.S. No. 14/244.711 depositado em 3 de abril de 2014). Em tais exemplos, o tamanho de paleta inclui ambos os registros de paleta previstos (por exemplo, determinados utilizando um previsor de paleta) e novos registros de paleta (por exemplo, como explicitamente sinalizado na sequência de bits).
[0123] De acordo com os aspectos dessa descrição, se o tamanho de paleta for sinalizado, pode não haver necessidade de se sinalizar o número de novos registros, visto que o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para derivar o número de novos registros de paleta para um bloco a partir do número de registros previstos e tamanho de paleta (por exemplo, tamanho de paleta - número de registros previstos = número de novos registros). Adicionalmente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para terminar a previsão de registros de paletas anteriores quando o tamanho de paleta é sinalizado e que o número de tamanho sinalizado é alcançado quando da construção da paleta para um bloco atual.
[0124] Em alguns exemplos, o tamanho de paleta pode ser previsto a partir de paletas anteriores, e o codificador de vídeo 20 pode ser configurado para sinalizar apenas a diferença. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar a diferença entre o tamanho de paleta e o tamanho de paleta previsto para um bloco utilizando um código Golomb exponencial, um código unário truncado ou código de comprimento fixo. Em alguns casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para realizar a previsão dependendo (por exemplo, com base em) do tamanho de bloco sendo codificado. Por exemplo, para um bloco 8 x 8, o tamanho de paleta pode ser previsto a partir da paleta associada com o último bloco 8 x 8 codificado utilizando o modo de paleta (por exemplo, o 8 x 8 mais recentemente codificado na ordem de digitalização antes do bloco atual). Da mesma forma, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para prever um tamanho de paleta para um bloco de 16 x 16 com base em uma paleta a partir de um bloco de 16 x 16 previamente codificado, e uma relação similar pode ser estendida para os blocos de outros tamanhos. Alternativamente, em outro exemplo, um tamanho de paleta pode ser previsto a partir do último bloco codificado com um tamanho inferior ou igual ao tamanho do bloco atual.
[0125] As técnicas dessa descrição também se referem à sinalização de um tamanho de paleta máximo e/ou um tamanho máximo de previsor de paleta. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar os dados indicando um tamanho máximo de paleta e/ou um tamanho máximo de previsor de paleta. Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar tais dados a partir de um SPS. A codificação de dados indicando um tamanho máximo de paleta e/ou um tamanho máximo de previsor de paleta pode fornecer flexibilidade, por exemplo, permitindo que o codificador de vídeo 20 e o decodificador de vídeo 30 utilizem paletas e previsores de paleta de tamanhos diferentes para diferentes perfis, níveis, profundidades de bit, tamanhos de bloco ou similares. No contexto de um padrão de codificação de vídeo, um perfil pode corresponder a um subconjunto de algoritmos, características, ou ferramentas e restrições que se aplicam aos mesmos. Por exemplo, um perfil pode ser um subconjunto de toda uma sintaxe de sequência de bits que é especificada por um particular. Um nível pode corresponder às limitações de consumo de recurso de decodificador, tal como, por exemplo, a memória do decodificador de computação, que podem estar relacionados com a resolução de imagens, taxa de bit, e taxa de processamento de bloco. Um perfil pode ser sinalizado com um valor profile_idc (indicador de perfil), enquanto um nível pode ser sinalizado com um valor level_idc (indicador de nível).
[0126] De acordo com aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para utilizar informação referente a um tamanho máximo de paleta para determinar os elementos e indicadores associados com o modo de paleta, por exemplo, na sinalização do número de novos registros de paleta. Como um exemplo, um tamanho máximo de paleta possível pode ser denotado por MAX_PLT_SIZE, que pode ser codificado pelo codificador de vídeo 20 e decodificado pelo decodificador de vídeo 30. De forma similar, um tamanho máximo possível de um vetor de previsor de paleta pode ser denotado por MAX_PLT_PREDICTOR_SIZE, que pode ser codificado pelo codificador de vídeo 20 e decodificado pelo decodificador de vídeo 30.
[0127] Como outro exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar os dados que indicam o número de "uns" em um vetor binário de previsão de paleta (por exemplo, que pode representar o número de registros do previsor de paleta sendo copiados para uma paleta para codificação de um bloco atual). Em alguns casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um elemento de sintaxe numPredPalette para indicar o número de registros de paleta predefinidos. Se o valor de numPredPalette for igual ao valor de MAX_PLT_SIZE (isso é, o tamanho máximo de paleta), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para pular a codificação do número de novos registros de paleta como um todo. Do contrário, se o valor de numPredPalette for inferior ao valor do codificador de vídeo MAX_PLT_SIZE 20 e o decodificador de vídeo 30 puder utilizar uma binarização truncada com base em (MAX_PLT_SIZE-numPredPalette), que é o valor máximo possível para o número de novos registros de paleta, para codificar os dados indicando o número de novos registros.
[0128] Em geral, a binarização truncada pode incluir quaisquer técnicas que utilizam informação sobre um possível valor máximo de um parâmetro em particular sendo sinalizado (por exemplo, tal como o número de novos registros de paleta) pela redução do comprimento de algumas palavras código utilizadas no método de binarização do parâmetro enquanto mantém a capacidade de decodificação singular. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para construir um código binário truncado utilizando um valor máximo de um parâmetro determinado (por exemplo, tal como o número de novos registros de paleta). Técnicas ilustrativas para a codificação binária truncada são descritas em http://en.wikipedia.org/wiki/Truncated binary encoding.
[0129] De forma similar, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar códigos unário truncado ou Golomb exponencial ou Golomb-Rice para sinalizar e decodificar o número de novos registros de paleta, com base em um valor máximo possível do número de novos registros de paleta. Por exemplo, se (MAX_PLT_SIZE - numPredPalette) = 3, então o codificador de vídeo 20 pode utilizar um código unário truncado para sinalizar três como 000 em vez de 0001 (por exemplo, como seria sinalizado quando da utilização do código unário regular). No caso dos códigos Golomb exponencial truncado ou Golomb-Rice, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o comprimento do prefixo para o intervalo que contém o valor máximo por um. Dessa forma, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para mudar o prefixo de 000...001 para 000...000. De forma similar o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o número de bits de sufixo no método de binarização para esse intervalo dependendo do valor máximo.
[0130] Para blocos grandes (e/ou CUs grandes), o tamanho da paleta tende a ser o tamanho máximo de paleta. Portanto, em alguns casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para mapear a binarização de (MAX_PLT_SIZE - numPredPalette) no inverso da forma normal, isso é, com os comprimentos de palavra código mais curtos designados para os valores maiores de (MAX_PLT_SIZE - numPredPalette), e os comprimentos de palavra código mais longos designados para valores menores de (MAX_PLT_SIZE - numPredPalette). Em alguns exemplos, em vez de se utilizar 0 seguidos por um 1 para sinalizar os códigos unários/unários truncados, ou como um prefixo da família de códigos Golomb-Rice ou Golomb exponencial ou Golomb-Rice concatenado e Golomb exponencial, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para utilizar 1 seguindo de um 0.
[0131] Adicionalmente, outras variações são possíveis. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para interpretar o primeiro bit em tais códigos como um indicador para indicar se o número de novos registros é igual a zero ou não. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para interpretar os bits restantes como um número de novos registros de paleta menos 1. Em um exemplo para fins de ilustração, um valor máximo de novos registros de paleta pode ser igual a oito e o número de novos registros de paleta pode ser igual a três. Utilizando-se o código unário truncado, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar que a binarização seja 0001. Se o codificador de vídeo 20 e o decodificador de vídeo 30 forem configurados para interpretar o primeiro bit como um indicador (por exemplo, 0: um ou mais novos registros de paleta, 1: zero novos registros de paleta), o resto dos bits (001) indica que existem dois novos registros de paleta. Quando da utilização dos códigos truncados, o codificador de vídeo 20 e o decodificador de vídeo 30 são configurados para ajustar o valor máximo para baixo por um.
[0132] Em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para interpretar o indicador descrito acima em reverso. Nesse caso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para interpretar um valor de indicador de 1 como um ou mais novos registros de paleta e um valor de indicador igual a 0 como zero novos registros de paleta. Em tal caso, os bits para sinalização de três novos registros de paleta com um valor máximo de oito são 1001.
[0133] Em outros exemplos, o conceito do indicador descrito acima pode ser estendido para outros códigos tal como Golomb exponencial, Golomb-Rice ou similares. Por exemplo, quando o valor máximo para novos registros de paleta é diferente de zero, o codificador de vídeo 20 pode ser configurado para sinalizar um indicador que indica se existem novos registros diferentes de zero. Se o indicador indicar que existem novos registros diferentes de zero, o número de novos registros menos um pode ser sinalizado utilizando códigos Golomb exponencial, Golomb-Rice, concatenação de Golomb exponencial e Golomb- Rice ou códigos similares ou suas versões truncadas. Quando as versões truncadas são utilizadas, o valor máximo pode ser ajustado para baixo por um.
[0134] Em alguns exemplos, o indicador pode ser codificado por contexto utilizando CABAC, ao passo que o resto dos compartimentos (por exemplo, para novos registros de paleta menos 1) pode ser codificado por bypass. Alternativamente, o indicador além do resto dos compartimentos (para novos registros de paleta menos 1) podem todos ser codificados por bypass. Em alguns casos, um número fixo de compartimentos de prefixo do código para os novos registros de paleta menos 1 podem ser codificados por contexto utilizando CABAC e o resto dos compartimentos pode ser codificado por bypass.
[0135] De acordo com os aspectos dessa descrição, como notado acima, o elemento de sintaxe MAX_PLT_SIZE pode ser sinalizado em um conjunto de parâmetros, tal como um SP. Em outros exemplos, o elemento de sintaxe MAX_PLT_SIZE pode ser sinalizado em um VPS, conjunto de parâmetros de imagem (PPS), cabeçalho de fatia, em um nível de bloco (por exemplo, com a sintaxe sinalizada para uma LCU ou CU), ou em outro local. Em alguns exemplos, de acordo com os aspectos dessa descrição, diferentes tamanhos máximos de paleta podem ser especificados para diferentes tamanhos de bloco. Em outros exemplos, o tamanho máximo de paleta pode depender de um perfil ou profundidade de bit dos dados de vídeo sendo codificados. Por exemplo, para uma maior profundidade de bit de entrada (ou profundidade de bit de perfil), o elemento de sintaxe MAX_PLT_SIZE pode ser utilizado para especificar um tamanho de paleta máximo relativamente maior. Em outros exemplos, o tamanho máximo de paleta pode depender adicionalmente ou alternativamente do formato de crominância dos dados de vídeo sendo codificados. Por exemplo, o elemento de sintaxe MAX_PLT_SIZE pode ser utilizado para especificar um tamanho de paleta máximo relativamente menor para registros monocromáticos do que para 4:2:0 formatos de subamostragem de crominância, que podem, por sua vez, possuir tamanhos menores do que registros formatados de subamostragem de crominância 4:4:4.
[0136] De acordo com os aspectos dessa descrição, em vez de sinalizar o elemento de sintaxe MAX_PLT_SIZE da forma descrita acima, os dados que indicam (MAX_PLT_SIZE-1) podem ser sinalizados, visto que um elemento de sintaxe MAX_PLT_SIZE que é iguala a zero pode ser inválido devido à desativação por completo da paleta.
[0137] Em um outro exemplo, em vez de sinalizar um indicador separado em VPS, SPS, PPS ou nível de cabeçalho de fatia para ativar/desativar o modo de paleta, o codificador de vídeo 20 pode ser configurado para sinalizar apenas o elemento de sintaxe MAX_PLT_SIZE. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para interpretar um elemento de sintaxe MAX_PLT_SIZE igual a 0 como desativação do modo de paleta. Isso é, depois do recebimento de um elemento de sintaxe de tamanho de paleta (por exemplo, o elemento de sintaxe MAX_PLT_SIZE) o decodificador de vídeo 30 pode determinar que o modo de paleta foi desativado com base no elemento de sintaxe. O elemento de sintaxe MAX_PLT_SIZE ou (MAX_PLT_SIZE-1) pode ser sinalizado utilizando-se os códigos de comprimento fixo (assumindo um limite normativo em MAX_PLT_SIZE) ou códigos Golomb-Rice ou Golomb exponencial.
[0138] Como notado acima, as técnicas dessa descrição também incluem dados de codificação que indicam um tamanho máximo de previsor de paleta. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar o elemento de sintaxe MAX_PLT_PREDICTOR_SIZE em VPS, SPS, PPS, cabeçalho de fatia, em um nível de bloco ou em outro local que indique um tamanho máximo de previsor de paleta. Em alguns exemplos, em vez de sinalizar o elemento de sintaxe MAX_PLT_PREDICTOR_SIZE, (MAX_PLT_PREDICTOR_SIZE-1) pode ser sinalizado. Em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar outros dados que indicam um tamanho máximo de previsor de paleta.
[0139] Nos exemplos em particular descritos aqui, o elemento de sintaxe MAX_PLT_PREDICTOR_SIZE ou (MAX_PLT_PREDICTOR_SIZE-1) pode ser sinalizado utilizando- se códigos de comprimento fixos (por exemplo, assumindo um limite normativo em MAX_PLT_PREDICTOR_SIZE) ou códigos Golomb Rice ou Golomb exponencial. Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para assumir (por exemplo, determinar exponencialmente) que o tamanho indicado pelo elemento de sintaxe MAX_PLT_PREDICTOR_SIZE é maior do que ou igual a um tamanho máximo de paleta (por exemplo, como indicado por um elemento de sintaxe MAX_PLT_SIZE). Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar (MAX_PLT_PREDICTOR_SIZE - elemento de sintaxe MAX_PLT_SIZE) utilizando os códigos de comprimento fixos ou códigos Golomb-Rice ou Golomb exponencial. De acordo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar os dados indicando um delta (por exemplo, diferença) entre o tamanho máximo de previsor de paleta e o tamanho máximo de paleta.
[0140] Nos exemplos nos quais o tamanho máximo de paleta e o tamanho máximo de previsor de paleta são sinalizados no nível SPS, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar os dados que indicam o número de novos registros utilizando um código unário truncado. O número de novos registros mais o número de registros previstos a partir do previsor de paleta juntos podem não exceder o tamanho máximo de paleta sinalizado no SPS. No entanto, se o tamanho máximo de paleta sinalizado em SPS for relativamente grande, o número de novos registros pode exceder 31. Nesse caso, o código unário truncado excede um comprimento de 32 bits, que pode ser indesejável para implementações de software e hardware.
[0141] Para se solucionar isso, de acordo com os aspectos dessa descrição, em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para restringir o número de novos registros de modo que o comprimento do código para sinalização do número de novos registros não exceda 32. Por exemplo, se um código unário ou unário truncado for utilizado para sinalizar o número de novos registros, o número de novos registros pode ser restrito a 31. Deve-se compreender que uma restrição de comprimento de 32 é meramente um exemplo (por exemplo, outras restrições de comprimento podem ser alternativamente utilizadas).
[0142] Na especificação de texto de extensões de codificação de conteúdo de tela HEVC rascunho 2, (Rajan Joshi et al., "High Efficiency Video Coding (HEVC) Screen Content Coding: Draft 2," JCTVC-S1005, Sapporo, JP, 30 de junho a 9 de julho de 2014 (doravante JCTVC-S1005), o código unário truncado é utilizado para sinalizar o número de novos registros de paleta com o valor máximo igual ao tamanho máximo de paleta sinalizado em SPS (palette_max_size) menos o número de registros de paleta que soa previstos a partir do previsor de paleta. Utilizando-se a restrição proposta, o valor máximo pode ser modificado para ser menor que 32 e a diferença entre o tamanho máximo de paleta sinalizado em SPS (palette_max_size) e o número de registros de paleta previsto a partir do previsor de paleta. Se tal modificação do valor máximo for realizada e a codificação unária truncada de JCTVC-S1005 for utilizada, o número máximo de novos registros de paleta pode ser igual a 32 (em vez de 31) sem o comprimento do código exceder 32 bits.
[0143] Em alguns exemplos, em vez da codificação unária truncada, se o codificador de vídeo 20 e o decodificador de vídeo 30 forem configurados utilizar outro código tal como Golomb exponencial ou sua versão truncada, os novos registros de paleta máximos permitidos podem ser modificados adequadamente de modo que o comprimento não exceda 32. Se houver um número de valores que tenha um comprimento de palavra código igual a 32, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para escolher o maior valor para ser o valor máximo permitido para o número de novos registros de paleta.
[0144] A restrição descrita aqui sobre o número máximo de novos registros de paleta pode ser tornada uma restrição normativa. Por exemplo, o codificador de vídeo 20 pode ser configurado para gerar uma sequência de bits com a restrição e o decodificador de vídeo 30 pode ser configurado para se basear na restrição em uma sequência de bits em conformidade.
[0145] De acordo com os aspectos dessa descrição, em um exemplo, a semântica do elemento de sintaxe de palette_num_signaled_entries pode ser alterada com relação a JCTVC-S1005 como segue: o elemento de sintaxe palette_num_signaled_entries especifica o número de registros na paleta atual que são sinalizados explicitamente. O valor do elemento de sintaxe palette_num_signaled_entries deve estar na faixa de 0 a 31, inclusive. Quando o elemento de sintaxe palette_num_signaled_entries não estiver presente, será inferido como sendo igual a 0.
[0146] Adicionalmente, o valor da variável CurrentPaletteSize especifica o tamanho da paleta atual e é derivado como segue: Se palette_share_flag [x0][y0] é igual a 1, CurrentPaletteSize = PreviousPaletteSize (771) Do contrário (palette_share_flag [x0][y0] é igual a 0) CurrentPaletteSize = paletteNumPredictedEntries + palette_num_signaled_entries (7-72)
[0147] No exemplo acima, o valor de CurrentPaletteSize deve estar na faixa de 0 até palette_max_size, inclusive.
[0148] De acordo com os aspectos dessa descrição, se o valor máximo for modificado da forma descrita acima, o valor do elemento de sintaxe palette_num_signaled_entries pode ser modificado de modo que o valor deve estar na faixa de 0 a 32, inclusive.
[0149] Em outro exemplo, o tamanho máximo de paleta pode ser sinalizado em SPS e pode ser limitado a 31. A limitação do tamanho pode ser realizada pela aplicação de um limite superior ao elemento de sintaxe palette_max_size na semântica do elemento de sintaxe palette_max_size, de modo que o elemento de sintaxe palette_max_size especifique o tamanho máximo de paleta permitido. O valor do elemento de sintaxe palette_max_size deve estar na faixa de 0 a 31, inclusive. Quando não presente, o valor do elemento de sintaxe palette_max_size é inferido como sendo igual a 0. Em alguns exemplos, em vez de 31, o valor pode ser restringido a 32.
[0150] Em outro exemplo, o valor máximo de elemento de sintaxe palette_max_size pode ser restringido de modo que se o número de novos registros de paleta for igual a palette_max_size, o codificador de vídeo 20 e o decodificador de vídeo 30 pode ser configurado para codificar o número de novos registros de paleta utilizando um código que não excede 32 bits. Em outro exemplo, o valor máximo do número de novos registros de paleta pode sempre ser limitado a 31, independentemente do código utilizado para codificar o valor máximo. Em outro exemplo adicional, o valor máximo pode ser limitado a 32.
[0151] As técnicas dessa descrição também se referem à sinalização de escape de nível de bloco (por exemplo, para uma CU ou uma LCU). Por exemplo, de acordo com os aspectos dessa descrição, um ou mais elementos de sintaxe podem indicar, no nível de bloco (por exemplo, um nível de CU), se qualquer uma das amostras de bloco são codificadas como uma amostra de escape (por exemplo, uma amostra que não tem um valor de cor representado em uma paleta para codificação de bloco). Como notado acima, um ou mais elementos de sintaxe podem ser referidos como sintaxe de escape de nível de bloco. Novamente, a sintaxe de nível de bloco pode se referir à sintaxe que é codificada ou determinada com um bloco de dados de vídeo, tal como uma CU ou LCU, e não sintaxe que possa ser incluída em um cabeçalho de fatia ou com pixels individuais de dados de vídeo.
[0152] Em casos nos quais pelo menos uma amostra em um bloco de amostras codificado utilizando a codificação de paleta é codificada como uma amostra de escape, as técnicas dessa descrição podem ser utilizadas para sinalizar a existência de tal modo. No exemplo para fins de ilustração, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um indicador (que pode ser referido como um indicador de escape de nível de bloco) que indica se qualquer uma das amostras do bloco sendo codificado são codificadas como uma amostra de escape. Em alguns casos, um valor de indicador igual a zero pode indicar que nenhuma das amostras ou pixels do bloco são codificados como amostras de escape. Um valor de indicador igual a um pode indicar que pelo menos uma amostra ou pixel do bloco é codificado como uma amostra de escape. Dessa forma, a sintaxe de escape de nível de bloco pode indicar, para todas as amostras de um bloco de dado de vídeo, se pelo menos uma amostra do bloco é codificada sem utilizar um índice para uma paleta de valores de cor para o bloco, por exemplo, é codificada utilizando o modo Escape.
[0153] De acordo com aspectos dessa descrição, a sintaxe descrita acima pode alcançar uma economia de bit relativa às técnicas de sinalização de amostras de escape sem uma indicação de nível de bloco. Por exemplo, em casos nos quais a sintaxe indica que nenhuma amostra de um bloco é codificada como amostras de escape, (por exemplo, o indicador descrito acima igual a zero), o codificador de vídeo 20 e o decodificador de vídeo 30 podem não codificar qualquer outra sintaxe associada com as amostras de escape para o bloco. Por exemplo, com relação à sinalização de escape explícita descrita aqui, o codificador de vídeo 20 e o decodificador de vídeo 30 podem pular a codificação dos indicadores de modo de escape de nível de amostra. Com relação à sinalização de escape implícita, o codificador de vídeo 20 e o decodificador de vídeo 30 podem pular a codificação do índice adicional para a paleta que indica a amostra de escape. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 só podem codificar um indicador SPoint para distinguir entre o modo CopyFromTop e modo Value.
[0154] Em alguns exemplos, o indicador descrito acima pode ser sinalizado antes dos registros de paleta para um bloco ou CU sendo atualmente codificado. Em outros exemplos, o indicador descrito acima pode ser sinalizado depois dos registros de paleta para um bloco ou UE sendo atualmente codificados. Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar por contexto o indicador descrito acima. Em tais exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar os contextos com base no tamanho de bloco ou CU e/ou tamanho de paleta para o bloco atual ou CU.
[0155] Em alguns casos, a utilização de amostras de escape pode variar em tamanho de bloco. Por exemplo, o uso de amostras de escape pode ser menos prevalecente em blocos relativamente pequenos. Em tais casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar que um bloco não inclui quaisquer amostras de escape e pula a codificação do indicador descrito acima, alcançando, assim, uma economia de bit. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem não codificar o indicador de nível de bloco para os blocos 8 x 8, onde as amostras de escape têm menos chances de serem utilizadas do que em tamanhos de blocos maiores. De forma similar, para tamanhos de bloco maiores (por exemplo, blocos de 64 x 64 pixels ou maior), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar que sempre exista amostras codificadas como amostras de escape. Em tais caos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir que o indicador de escape de nível de bloco para um bloco é igual a um (por exemplo, pelo menos uma amostra é uma amostra de escape) e pula a codificação do indicador de escape de nível de bloco (por exemplo, uma indicação do indicador de escape de nível de bloco não está incluída na sequência de bits).
[0156] As técnicas dessa descrição também se referem à codificação de um bloco de amostras com base no fato de se quaisquer amostras de um bloco são codificadas como amostras de escape. Por exemplo, como notado acima, as técnicas dessa descrição podem ser utilizadas para indicar se quaisquer amostras são codificadas como amostras de escape de um bloco codificado por paleta. Em casos nos quais um bloco não inclui amostras de escape e quando o tamanho de uma paleta é igual a um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar automaticamente que todas as amostras do bloco possuem o mesmo valor de índice (por exemplo, o único registro da paleta). O codificador de vídeo 20 e o decodificador de vídeo 30 também podem, portanto, pular a codificação de todos os outros dados utilizados para determinar os índices de paleta do bloco. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem pular a codificação do indicador SPoint, sinalização de índice e dados associados com as sequências de índices de paleta.
[0157] Em um exemplo para fins de ilustração, o decodificador de vídeo 30 pode decodificar um indicador de escape de nível de bloco que indica que não existem amostras no bloco atual que sejam codificadas como amostras de escape (por exemplo, o indicador é igual a zero). O decodificador de vídeo 30 também pode decodificar os dados que indicam a paleta para o bloco que possui um único registro (por exemplo, dados indicando que o tamanho de paleta é igual a um) ou decodificar uma paleta que possui um único registro. Nesse exemplo, com base em ambas as condições avaliando como verdadeiro (por exemplo, nenhuma amostra é a amostra de escape e o tamanho de paleta é igual a um), o decodificador de vídeo 30 pode determinar automaticamente que os índices de paleta do bloco são iguais ao único registro incluído na paleta. O decodificador de vídeo 30 também pode pular a decodificação de outros dados utilizados para determinar os índices de paleta do bloco (por exemplo, tal como indicadores SPoint, índices de paleta, e informação de sequência).
[0158] Em outro exemplo, de acordo com os aspectos dessa descrição, quando um tamanho de paleta é igual a um, sequências de amostras com índice de paleta igual a zero podem ser encerrada pelas amostras de escape. Isso é, uma sequência de índices de paleta pode ser interrompida por uma posição sendo codificada como uma amostra de escape. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para pular a codificação do indicador SPoint. Adicionalmente, nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que o modo para os índices de paleta é o modo Value além de o índice do modo Value (por exemplo, com apenas um registro na paleta, pode não ser necessário se sinalizar o índice para o modo Value). Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir que a amostra seguindo imediatamente uma sequência é codificada como uma amostra de escape e pula a codificação da sintaxe relacionada com escape.
[0159] As técnicas dessa descrição também se referem à codificação de dados indicando um valor de sequência de uma sequência de índices de paleta na codificação de paleta. Por exemplo, como notado acima, um valor de sequência pode indicar um número de amostras consecutivas (por exemplo, uma sequência de amostras) em uma ordem de digitalização em particular em um bloco codificado por paleta que são codificados juntos. Em alguns casos, a sequência de amostras também pode ser referida como uma sequência de índices de paleta, visto que cada amostra da sequência possui um índice associado a uma paleta.
[0160] Um valor de sequência pode indicar uma sequência de índices de paleta que são codificados utilizando-se o mesmo modo de codificação de paleta. Por exemplo, com relação ao modo Value, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um valor de índice e um valor de sequência que indica um número de amostras consecutivas em uma ordem de digitalização que possuem o mesmo valor de índice e que está sendo codificado com o valor de índice. Com relação ao modo CopyFromTop, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar uma indicação de que um índice para o valor de amostra atual é copiado com base em um índice de uma amostra vizinha superior (por exemplo, uma amostra que é posicionada acima da amostra sendo atualmente codificada em um bloco) e um valor de sequência que indica um número de amostras consecutivas em uma ordem de digitalização que também copia um valor de índice a partir de uma amostra vizinha acima e que estão sendo codificadas com o valor de índice.
[0161] Por exemplo, de acordo com os aspectos dessa descrição, os dados indicando uma sequência de índices de paleta em um bloco de dados de vídeo podem ser codificados com base em um valor de sequência máximo possível para o bloco. Isso é, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar, para um pixel associado com um índice de paleta que se refere a um valor de pixel com um valor de cor em uma paleta, um comprimento de sequência de uma sequência de índices de paleta sendo codificados com o índice de paleta do pixel. O codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar também um comprimento máximo de sequência para uma sequência máxima de índices de paleta capazes de serem codificados com o índice de paleta do pixel. O codificador de vídeo 20 e o decodificador de vídeo 30 podem então codificar os dados que indicam o comprimento de sequência com base no comprimento de sequência máximo determinado.
[0162] Em um exemplo para fins de ilustração, o número total de amostras em um bloco de dados de vídeo pode ser N e cada uma das amostras pode ser indexada de 0 até (N-1). Para a amostra com posição j, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar o valor máximo de sequência possível como (N-j-1). Deve-se notar que o valor de sequência indica o número de amostras subsequentes sendo codificadas com o mesmo modo de codificação de paleta (por exemplo, o modo Value ou modo CopyFromTop) como a amostra atual. De acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar os dados indicando o valor de sequência utilizando uma binarização truncada, levando em consideração o número máximo possível de valor de sequência. Em geral, a binarização truncada pode incluir qualquer técnica que utilize a informação sobre um valor máximo possível de um parâmetro em particular sendo sinalizado (por exemplo, tal como o número de novos registros de paleta) pela redução do comprimento de algumas palavras código utilizadas no método de binarização do parâmetro enquanto mantém a capacidade de decodificação singular. Por exemplo, um código binário truncado com base no valor máximo possível de uma sequência pode ser utilizado. De forma similar, os códigos unários truncados ou Golomb exponencial ou Golomb Rice podem ser utilizados para codificar e decodificar o valor de sequência, com base no valor máximo possível de uma sequência. Em alguns exemplos, a binarização truncada pode ser uma combinação de códigos Golomb exponencial e Golomb-Rice.
[0163] Por exemplo, uma palavra código Exp-Golomb (EGk) de ordem k é composta de duas partes, um prefixo e um sufixo. Para um determinado inteiro não designado x, a parte de prefixo da palavra código EGk consiste de um código unário correspondendo ao valor de:A parte de sufixo é computada como a representação binária de x - 2k(2k(2l(x)-1) utilizando k + l(x) bits.
[0164] Como um exemplo, a Tabela 1 abaixo inclui várias palavras código para EG0. Tabela 1 - Exemplo de EG0
[0165] No pedido provisório U.S. No. 61/019.223, depositado em 20 de junho de 2014, um valor de sequência é codificado utilizando o código Exp-Golomb de 2a. ordem.
[0166] De acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar dados indicando um valor de sequência utilizando um código Exp-Golomb truncado. Por exemplo, uma palavra código Exp-Golomb truncada de ordem k (TEGk) também é composta de duas partes, um prefixo e um sufixo. O prefixo pode ser um prefixo unário e o sufixo pode ser um sufixo binário. Por exemplo, para um determinado inteiro não designado x e seu maior valor de sequência possível Xmax (por exemplo, o comprimento de sequência máximo), a parte de prefixo da palavra código EGk consiste de um código unário truncado correspondendo ao valor de:Especificamente, o "um final" do código unário pode ser evitado se:
[0167] Se o prefixo for truncado, isso é,, a parte de sufixo de TEGk é computada como a representação binária truncada de x - 2k(2l(x)-1) utilizando k + l(x) ou k + l(x) - 1 bits. O valor de símbolo máximo para o registro de código binário truncado é Xmax - 2k (2l(x)-1) utilizando k + l(x) bits. Como um exemplo, a Tabela 1 abaixo inclui várias palavras código para TEG0. Tabela 2 - Exemplos TEG0 (X = 5) Enquanto o exemplo da Tabela 2 acima ilustra o prefixo como sendo um número de zeros seguido por um "um" final (por exemplo, 00...1_), deve-se compreender que em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um número de "uns" seguido por um zero final (por exemplo, 11...0).
[0169] De acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um valor de sequência utilizando o código TEGk descrito acima. Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem, para uma posição de pixel atual em um bloco (ou CU), determinar o valor máximo de sequência Xmax com base na equação (Xmax = número de pixel na CU atual - posição atual na ordem de digitalização - 1).
[0170] Em outro exemplo, se o valor de sequência for primeiramente codificado utilizando um prefixo unário truncado, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para ajustar o valor máximo de sequência de acordo, por exemplo, com base no valor truncado. Por exemplo, em alguns casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um valor de sequência como uma série de três indicadores: superior a zero, superior a um, e superior a dois. Nesse exemplo, se a sequência sinalizada for superior a dois, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar o valor restante (por exemplo, o valor de sequência - 3), potencialmente com outro método de binarização tal como uma combinação de códigos Golomb exponencial ou Golomb-Rice ou o código TEGk descrito acima.
[0171] No entanto, se (N-j-1) for igual a 0, o codificador de vídeo 20 e o decodificador de vídeo 30 não codificam uma sequência. Da mesma forma, se (N-j-1) for igual a um, o codificador de vídeo 20 e o decodificador de vídeo 30 só podem codificar o indicador superior a zero. Da mesma forma, se (N-j-1) for igual a dois, o codificador de vídeo 20 e o decodificador de vídeo 30 só podem codificar os indicadores superiores a zero e superiores a um. Da mesma forma, se (N-j-1) for igual a três, o codificador de vídeo 20 e o decodificador de vídeo 30 só podem codificar o indicador superior a zero, o indicador superior a um, e o indicador superior a dois. Se (N-j-1) for maior que três, em adição ao indicador superior a zero, o indicador superior a um, e o indicador superior a dois, o codificador de vídeo 20 e o decodificador de vídeo 30 pode codificar o valor restante até um valor máximo de (N-j-4). De uma forma similar, o processo descrito pode ser estendido para utilizar um número de indicadores além de três, por exemplo, indicadores indicando um valor sinalizado superior ao número M, onde M pode ser um valor não negativo começando com zero.
[0172] De acordo com os aspectos dessa descrição, no exemplo acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar o restante do comprimento de sequência utilizando o código TEGk descrito acima, com um valor de sequência máximo igual a (número de pixels na CU atual - posição atual na ordem de digitalização - 4). Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um indicador que indica se o valor de sequência é superior a zero e o valor restante como o comprimento de sequência menos um. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar o indicador superior a zero. O codificador de vídeo 20 e o decodificador de vídeo 30 também podem codificar dados que indicam o comprimento de sequência menos um utilizando o código TEGk com um valor máximo para o código TEGk configurado igual ao comprimento máximo de sequência menos um. Em um exemplo, o codificador de vídeo 20 e decodificador de vídeo 30 pode configurar k igual a zero, de modo que o código TEGk é um código TEG0.
[0173] Em outros exemplos, o codificador de vídeo 20 e o decodificador 30 podem utilizar qualquer ordem do código TEG descrito acima para codificação de elementos de sintaxe para a codificação de paleta. Em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem configurar k igual a dois, de modo que o código TEGk seja um código TEG2.
[0174] Enquanto os exemplos acima são descritos com relação à codificação de um valor de sequência na codificação de paleta, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para uso dos códigos (tal como o código TEGk) para codificar outra sintaxe para a codificação de paleta. Por exemplo, como descrito em maiores detalhes abaixo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar os códigos descritos acima para codificação de um vetor de previsão de paleta binário, um comprimento de sequência CopyAbove ou outros valores.
[0175] Em Johi et al., "Non-SCCE3: Contexts for coding index runs," Equipe de Colaboração Conjunta em Codificação de Vídeo (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 18o. encontro, Sapporo, JP, 30 de junho a 9 de julho de 2014, JCTVC-R0174 (doravante JCTVC-R0174), os autores propõem que se torne os contextos das palavras código de comprimento de sequência dependentes do índice se o modo CopyLeft (por exemplo, que pode operar de uma forma similar ao modo CopyFromTop) for utilizado. No entanto, de acordo com um exemplo dessa descrição, se o modo de sequência atual for CopyFromAbove, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar os contextos para a codificação CABAC da sequência com base no valor de índice do pixel que é posicionado acima do pixel sendo atualmente codificado. Nesse exemplo, o pixel vizinho acima está fora da CU atual, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar que o índice correspondente seja igual a uma constante predefinida k. Em alguns exemplos, a constante k pode ser igual a zero.
[0176] Em alguns exemplos, se o modo de paleta para codificação de um pixel atual for o modo CopyFromAbove, o codificador de vídeo 20 e o decodificador de vídeo 30 podem selecionar um dos dois contextos CABAC candidatos para codificar o primeiro compartimento da palavra código de comprimento de sequência com base no fato de se o pixel vizinho acima possui um índice que seja igual a zero. Como outro exemplo, se o modo de paleta para codificação de um pixel atual for o modo CopyPrevious, o codificador de vídeo 20 e o decodificador de vídeo 30 podem selecionar um dos quatro contextos CABAC candidatos para codificar o primeiro compartimento da palavra código de comprimento de sequência com base no fato de se o índice é igual a zero, um, dois ou maior que dois.
[0177] A figura 2 é um diagrama em bloco ilustrando um codificador de vídeo ilustrativo 20 que pode implementar as técnicas dessa descrição. A figura 2 é fornecida para fins de explicação e não deve ser considerada limitadora das técnicas como amplamente exemplificado e descrito nessa descrição. Para fins de explicação, essa descrição descreve o codificador de vídeo 20 no contexto de codificação HEVC. No entanto, as técnicas dessa descrição podem ser aplicáveis a outros padrões ou métodos de codificação.
[0178] O codificador de vídeo 20 representa um exemplo de um dispositivo que pode ser configurado para realizar as técnicas para codificação de vídeo com base em paleta de acordo com vários exemplos descritos nessa descrição. Por exemplo, o codificador de vídeo 20 pode ser configurado para codificar seletivamente vários blocos de dados de vídeo, tal como CUs ou PUs na codificação HEVC, utilizando a codificação com base em paleta ou codificação com base em não paleta. Os modos de codificação com base em não paleta podem se referir a vários modos de codificação temporal interprevisíveis ou modos de codificação espacial intraprevisíveis, tal como vários modos de codificação especificados por HEVC Rascunho 10. O codificador de vídeo 20, em um exemplo, pode ser configurado para gerar uma paleta possuindo registros indicando os valores de pixel, selecionar valores de pixel em uma paleta para representar os valores de pixel de pelo menos algumas localizações de pixel em um bloco de dados de vídeo, e sinalizar a informação associando pelo menos algumas das localizações de pixel no bloco de dados de vídeo com registros na paleta correspondente, respectivamente, para os valores de pixel selecionados na paleta. A informação sinalizada pode ser utilizada pelo decodificador de vídeo 30 para decodificar os dados de vídeo.
[0179] No exemplo da figura 2, o codificador de vídeo 20 inclui uma unidade de processamento de previsão 100, memória de dados de vídeo 101, uma unidade de geração residual 102, uma unidade de processamento de transformação 104, uma unidade de quantização 106, uma unidade de quantização inversa 108, uma unidade de processamento de transformação inversa 110, uma unidade de reconstrução 112, uma unidade de filtro 114, um armazenador de imagem decodificada 116, e uma unidade de codificação por entropia 118. A unidade de processamento por previsão 100 inclui uma unidade de processamento por interprevisão 120 e uma unidade de processamento por intraprevisão 126. A unidade de processamento por interprevisão 120 inclui uma unidade de estimativa de movimento e uma unidade de compensação de movimento (não ilustrada). O codificador de vídeo 20 também inclui uma unidade de codificação com base em paleta 122 configurada para realizar os vários aspectos das técnicas de codificação com base em paleta descritas nessa descrição. Em outros exemplos, o codificador de vídeo 20 pode incluir mais, menos ou outros componentes funcionais.
[0180] A memória de dados de vídeo 101 pode armazenar os 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 101 podem ser obtidos, por exemplo, a partir da fonte de vídeo 18. O armazenador de imagens decodificado 116 pode ser uma memória de imagens 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, nos modos de intracodificação ou intercodificação. A memória de dados de vídeo 101 e o armazenador de imagens decodificadas 116 podem ser formados a partir de qualquer um dentre uma variedade de dispositivos de memória, tal como memória de acesso randômico dinâmica (DRAM), incluindo DRAM sincronizada (SDRAM), RAM magneto resistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 101 e o armazenador de imagem decodificada 116 podem ser fornecidos pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 101 pode estar em chip com outros componentes do codificador de vídeo 20, ou fora de chip com relação a esses componentes.
[0181] O codificador de vídeo 20 pode receber dados de vídeo. O codificador de vídeo 20 pode codificar cada CTU em uma fatia de uma imagem de dados de vídeo. Cada uma das CTUs pode ser associada com blocos de árvore de codificação de luminescência de mesmo tamanho (CTBs) e CTBs correspondentes da imagem.
[0182] O codificador de vídeo 20 pode codificar CUs de uma CTU para gerar as representações codificadas de CUs (isso é, CUs codificadas). Como parte da codificação de uma CU, a unidade de processamento por previsão 100 pode dividir os blocos de codificação associados com a CU entre uma ou mais PUs da CU. Dessa forma, cada PU pode ser associada com um bloco de previsão de luminescência e blocos de previsão de crominância correspondentes. O codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar PUs possuindo vários tamanhos. Como indicado acima, o tamanho de uma CU pode se referir ao tamanho do bloco de codificação de luminescência da CU e o tamanho de uma PU pode se referir ao tamanho de um bloco de previsão de luminescência da PU. Assumindo-se que o tamanho de uma CU em particular seja 2N x 2N, o codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar tamanhos de PU de 2N x 2N ou N x N para intraprevisão, e tamanhos simétricos de PU de 2N x 2N, 2N x N, N x 2N, N x N ou similares para interprevisão. O codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar também a partição assimétrica para tamanhos de PU de 2N x nU, 2N x nD, nL x 2N e nR x 2N para interprevisão.
[0183] A unidade de processamento por interprevisão 120 pode gerar dados de previsão para uma PU pela realização de interprevisão em cada PU de uma CU. Os dados de previsão para a PU podem incluir blocos de previsão da PU e informação de movimento para a PU. A unidade de interprevisão 121 pode realizar diferentes operações para uma PU de uma CU dependendo de se a PU está em uma fatia I, uma fatia P ou uma fatia B. Em uma fatia I, todas as PUs são intraprevistas. Dessa forma, se a PU estiver em uma fatia I, a unidade de interprevisão 121 não realiza a interprevisão na PU. Dessa forma, para blocos codificados no modo I, o bloco previsto é formado utilizando-se a previsão espacial de blocos vizinho codificados previamente dentro do mesmo quadro.
[0184] Se uma PU estiver em uma fatia P, a unidade de estimativa de movimento da unidade de processamento por interprevisão 120 pode buscar as imagens de referência em uma lista de imagens de referência (por exemplo, "RefPicLit0") 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 de perto aos blocos de amostras da PU. A unidade de estimativa de movimento pode gerar um índice de referência que indica uma posição em RefPicList0 da imagem de referência contendo a região de referência para a PU. Adicionalmente, a unidade de estimativa de movimento pode gerar um MV que indica um deslocamento espacial entre um bloco de codificação da PU e uma localização de referência associada com a região de referência. Por exemplo, MV pode ser um vetor bidimensional que fornece um desvio de coordenadas na imagem decodificada atual com as coordenadas em uma imagem de referência. A unidade de estimativa de movimento pode enviar o índice de referência de MV como informação de movimento da PU. A unidade de compensação de movimento da unidade de processamento de interprevisão 120 pode gerar os blocos de previsão da PU com base nas amostras reais ou interpoladas no local de referência indicado pelo vetor de movimento da PU.
[0185] Se uma PU estiver em uma fatia B, a unidade de estimativa de movimento pode realizar a uniprevisão ou biprevisão para a PU. Para realizar a uniprevisão para a PU, a unidade de estimativa de movimento pode buscar as imagens de referência de RefPicLit0 ou uma segunda lista de imagens de referência ("RefPicList1") por uma região de referência para a PU. A unidade de estimativa de movimento pode enviar, como a informação de movimento da PU, um índice de referência que indica uma posição na RefPicList0 ou RefPicList1 da imagem de referência que contém a região de referência, um MV que indica um deslocamento espacial entre um bloco de previsão da PU e um local de referência associado com a região de referência, e um ou mais indicadores de direção de previsão que indicam se a imagem de referência está em RefPicList0 ou RefPicList1. A unidade de compensação de movimento da unidade de processamento de interprevisão 120 pode gerar blocos de previsão da PU com base pelo menos em parte nas amostras reais ou interpoladas na região de referência indicada pelo vetor de movimento da PU.
[0186] Para se realizar a interprevisão bidirecional para uma PU, a unidade de estimativa de movimento pode buscar as imagens de referência em RefPicList0 para uma região de referência para a PU e também pode buscar as imagens de referência em RefPicList1 por 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 as posições em RefPicList0 e RefPicList1 das imagens de referência que contêm as regiões de referência. Adicionalmente, a unidade de estimativa de movimento pode gerar MVs que indicam os deslocamentos espaciais entre a localização de referência associada com as regiões de referência de um bloco de amostras da PU. A informação de movimento da PU pode incluir os índices de referência e MVs da PU. A unidade de compensação de movimento pode gerar os blocos de previsão da PU com base pelo menos em parte em amostras reais ou interpoladas nas regiões de referência indicadas pelos vetores de movimento da PU.
[0187] De acordo com vários exemplos dessa descrição, o codificador de vídeo 20 pode ser configurado para realizar a codificação com base em paleta. Com relação à estrutura de trabalho HEVC, como um exemplo, as técnicas de codificação com base em paleta podem ser configuradas para serem utilizadas como um modo de unidade de codificação (CU). Em outros exemplos, as técnicas de codificação com base em paleta podem ser configuradas para serem utilizadas como um modo PU na estrutura de trabalho de HEVC. De acordo, todos os processos descritos aqui (por toda essa descrição) no contexto de um modo CU podem, adicionalmente ou alternativamente, aplicar à PU. No entanto, esses exemplos com base em HEVC não devem ser considerados uma restrição ou limitação das técnicas de codificação com base em paleta descritas aqui, visto que tais técnicas podem ser aplicadas para funcionar independentemente ou como parte de outros sistemas/padrões existentes ou ainda a serem desenvolvidos. Nesses casos, a unidade para codificação de paleta pode ser composta de blocos quadrados, blocos retangulares, ou até mesmo regiões de formato não retangular.
[0188] A unidade de codificação com base em paleta 122, por exemplo, pode realizar a decodificação com base em paleta quando um modo de codificação com base em paleta é selecionado, por exemplo, para uma CU ou PU. Por exemplo, a unidade de codificação com base em paleta 122 pode ser configurada para gerar uma paleta possuindo registros indicando valores de pixel, selecionar valores de pixel em uma paleta para representar os valores de pixels de pelo menos algumas posições de um bloco de dados de vídeo, e sinalizar informação associando pelo menos algumas das posições do bloco de dados de vídeo com os registros na paleta correspondendo, respectivamente, aos valores de pixel selecionados. Apear de várias funções serem descritas como sendo realizadas pela unidade de codificação com base em paleta 122, algumas ou todas as ditas funções podem ser realizadas por outras unidades de processamento, ou uma combinação de unidades de processamento diferente.
[0189] De acordo com os aspectos dessa descrição, a unidade de codificação com base em paleta 122 pode ser configurada para realizar qualquer combinação de técnicas para codificação de paleta descritas aqui. Por exemplo, de acordo com os aspectos dessa descrição, a unidade de codificação com base em paleta 122 pode determinar um valor de um elemento de sintaxe que indica, para todas as amostras de um bloco de dados de vídeo, e pelo menos uma amostra respectiva do bloco é codificada com um primeiro modo de paleta, onde o primeiro modo de paleta inclui a codificação da amostra respectiva do bloco sem utilizar um índice para uma paleta de valores de cor para o bloco. Por exemplo, a unidade de codificação com base em paleta 122 pode determinar um valor de um elemento de sintaxe de nível de bloco que indica se qualquer amostra do bloco é codificada como uma amostra de escape (como uma amostra que não possui um valor de cor representado em uma paleta para codificação de bloco). Em alguns exemplos, a unidade de codificação com base em paleta 122 pode determinar um indicador de escape para um bloco que indica se qualquer amostra do bloco é codificada como amostras de escape.
[0190] Adicionalmente ou alternativamente, a unidade de codificação com base em paleta 122 pode determinar, para um pixel associado com um índice de paleta que relaciona um valor de pixel com um valor de cor em uma paleta de cores para codificação de pixel, um comprimento de sequência de uma sequência de índices de paleta sendo codificada com o índice de paleta do pixel. Isso é, a unidade de codificação com base em paleta 122 pode determinar que um valor de índice para uma amostra em particular está sendo codificado com uma sequência de outros índices de paleta subsequentes. A unidade de codificação com base em paleta 122 também pode determinar um comprimento máximo de sequência para uma sequência máxima de índices de paleta capaz de ser codificada com o índice de paleta do pixel. Como descrito em maiores detalhes abaixo com relação à unidade de codificação por entropia 118, o codificador de vídeo 20 pode codificar os dados que indicam o comprimento de sequência com base no comprimento de sequência máximo determinado.
[0192] A unidade de processamento de intraprevisão 126 pode gerar dados de previsão para uma PU pela realização da intraprevisão na PU. Os dados de previsão para a PU podem incluir blocos de previsão para a PU e vários elementos de sintaxe. A unidade de processamento de intraprevisão 126 pode realizar a intraprevisão nas PUs nas fatias I, fatias P e fatias B.
[0193] Para realizar a intraprevisão em uma PU, a unidade de processamento por intraprevisão 126 pode utilizar múltiplos modos de intraprevisão para gerar múltiplos conjuntos de dados de previsão para a PU. A unidade de processamento por intraprevisão 126 pode utilizar amostras dos blocos de amostra de PUs vizinhas para gerar um bloco de previsão para uma PU. As PUs vizinhas podem estar acima, acima e para a direita, acima e para a esquerda, ou para a esquerda da PU, assumindo uma ordem de codificação da esquerda para a direita, de cima para baixo para PUs, CUs e CTUs. A unidade de processamento por intraprevisão 126 pode utilizar vários números de modos de intraprevisão, por exemplo, 33 modos de intraprevisão direcional. Em alguns exemplos, o número de modos de intraprevisão pode depender do tamanho da região associada com a PU.
[0194] A unidade de processamento por previsão 100 pode selecionar os dados de previsão para PUs de uma CU dentre os dados de previsão gerados pela unidade de processamento por intraprevisão 120 para as PUs ou os dados de previsão gerados pela unidade de processamento por intraprevisão 126 para as PUs. Em alguns exemplos, a unidade de processamento por previsão 100 seleciona os dados de previsão para as PUs da CU com base nas métricas de taxa/distorção dos conjuntos de dados de previsão. Os blocos de previsão dos dados de previsão selecionados podem ser referidos aqui como blocos de previsão selecionados.
[0195] A unidade de geração residual 102 pode gerar, com base no bloco de codificação de luminescência, Cb e Cr de uma CU e blocos de luminescência, Cb e Cr de previsão selecionados das PUs da CU, um bloco residual de luminescência, 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 previsão selecionado correspondente de uma PU da CU.
[0196] A unidade de processamento de transformação 104 pode realizar a partição de quad-tree para dividir os blocos residuais associados com uma CU em bloco de transformação associados com as TUs da CU. Dessa forma, uma TU pode ser associada com um bloco de transformação de luminescência e dois blocos de transformação de crominância. Os tamanhos e posições dos blocos de transformação de luminescência e crominância das TUs de uma CU podem ou não ser baseados nos tamanhos e posições dos blocos de previsão das PUs da CU. Uma estrutura quad-tree conhecida como "quad-tree residual" (RQT) pode incluir nós associados com cada uma das regiões. As TUs de uma CU podem corresponder a nós folha do RQT.
[0197] A unidade de processamento de transformação 104 pode gerar blocos de coeficiente de transformação para cada TU de uma CU pela aplicação de uma ou mais transformações aos blocos de transformação da TU. A unidade de processamento de transformação 104 pode aplicar várias transformações a um bloco de transformação associado com uma TU. Por exemplo, a unidade de processamento de transformação 104 pode aplicar uma transformação de cosseno discreto (DCT), uma transformação direcional, ou uma transformação conceitualmente similar a um bloco de transformação. Em alguns exemplos, a unidade de processamento de transformação 104 não aplica as transformações a um bloco de transformação. Em tais exemplos, o bloco de transformação pode ser processado como um bloco de coeficientes de transformação.
[0198] A unidade de quantização 106 pode quantizar os coeficientes de transformação em um bloco de coeficientes. O processo de quantização pode reduzir a profundidade de bit associada com alguns ou todos os coeficientes de transformação. Por exemplo, um coeficiente de transformação de n bits pode ser arredondado para baixo para um coeficiente de transformação de m bits durante a quantização, onde n é superior a m. A unidade de quantização 106 pode quantizar um bloco de coeficientes associado com uma TU de uma CU com base em um valor de parâmetro de quantização (QP) associado com a CU. O codificador de vídeo 20 pode ajustar o grau de quantização aplicado aos blocos de coeficiente associados com uma CU pelo ajuste do valor QP associado com a CU. A quantização pode introduzir perda de informação, dessa forma, os coeficientes de transformação quantizados podem ter uma precisão menor do que os originais.
[0199] A unidade de quantização inversa 108 e a unidade de processamento de transformação inversa 110 podem aplicar a quantização inversa e transformações inversas a um bloco de coeficientes, respectivamente, para reconstruir um bloco residual a partir do bloco de coeficientes. A unidade de reconstrução 112 pode adicionar o bloco residual reconstruído às amostras correspondentes a partir de um ou mais blocos de previsão gerados pela unidade de processamento por previsão 100 para produzir um bloco de transformação reconstruído associado com uma TU. Pela reconstrução de blocos de transformação para cada TU de uma CU dessa forma, o codificador de vídeo 20 pode reconstruir os blocos de codificação da CU.
[0200] A unidade de filtro 114 pode realizar uma ou mais operações de desbloqueio para reduzir os artefatos de bloqueio nos blocos de codificação associados com uma CU. O armazenador de imagens decodificadas 116 pode armazenar os blocos de codificação reconstruídos depois de a unidade de filtro 114 realizar uma ou mais operações de desbloqueio nos blocos de codificação reconstruídos. A unidade de processamento de interprevisão 120 pode utilizar uma imagem de referência que contém os blocos de codificação reconstruídos para realizar a interprevisão em PUs de outras imagens. Adicionalmente, a unidade de processamento por intraprevisao 126 pode utilizar blocos de codificação reconstruídos no armazenador de imagens decodificadas 116 para realizar a intraprevisão em outras PUs na mesma imagem que a CU.
[0201] 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 quantização 106 e pode receber elementos de sintaxe da unidade de processamento de previsão 100. A unidade de codificação por entropia 118 pode realizar uma ou mais operações de codificação por entropia nos dados para gerar os dados codificados por entropia. Por exemplo, a unidade de codificação por entropia 118 pode realizar uma operação de codificação de comprimento variável adaptativa de contexto (CAVLC), uma operação CABAC, uma operação de codificação de comprimento de variável para variável (V2V), uma operação de codificação aritmética binária adaptativa de contexto com base em sintaxe (SBAC), uma operação de codificação por Entropia de Partição de Intervalo de Probabilidade (PIPE), uma operação de codificação Golomb Exponencial, ou outro tipo de operação de codificação por entropia nos dados. O codificador de vídeo 20 pode enviar uma sequência de bits que inclui dados codificados por entropia gerados pela unidade de codificação por entropia 118. Por exemplo, a sequência de bits pode incluir dados que representam uma RQT para uma CU.
[0202] De acordo com os aspectos dessa descrição, a unidade de codificação por entropia 118 pode ser configurada para codificar os dados de paleta utilizando um código TEGk, como descrito acima com referência ao exemplo da figura 1. Em particular, de acordo com os aspectos dessa descrição, a unidade de codificação por entropia 118 pode codificar dados que indicam um comprimento de sequência para uma sequência de índices de paleta com base em um comprimento de sequência máximo determinado. Em alguns exemplos, a unidade de codificação por entropia 118 pode codificar o comprimento de sequência utilizando um código TEG2.
[0203] A figura 3 é um diagrama em bloco ilustrando um decodificador de vídeo ilustrativo 30 que é configurado para implementar as técnicas dessa descrição. A figura 3 é fornecida para fins de explicação e não de limitação das técnicas como amplamente exemplificado e descrito nessa descrição. Para fins de explicação, essa descrição descreve o decodificador de vídeo 30 no contexto de codificação HEVC. No entanto, as técnicas dessa descrição podem ser aplicáveis a outros padrões ou métodos.
[0204] O codificador de vídeo 20 representa um exemplo de um dispositivo que pode ser configurado para realizar as técnicas para codificação de vídeo com base em paleta de acordo com vários exemplos descritos nessa descrição. Por exemplo, o codificador de vídeo 20 pode ser configurado para decodificar seletivamente vários blocos de dados de vídeo, tal como CUs ou PUs na codificação HEVC, utilizando codificação com base em paleta ou codificação com base em não paleta. Os modos de codificação com base em não paleta podem se referir a vários modos de codificação temporal interprevisível ou modos de codificação espacial intraprevisível, tal como vários modos de codificação especificados por HEVC Rascunho 10. O decodificador de vídeo 30, em um exemplo, pode ser configurado para gerar uma paleta possuindo registros indicando os valores de pixel, receber informação associando pelo menos alguns locais de pixel em um bloco de dados de vídeo com registros na paleta, selecionar valores de pixel na informação com base em paleta, e reconstruir os valores de pixel do bloco com base nos valores de pixel selecionados na paleta.
[0205] No exemplo da figura 3, o decodificador de vídeo 30 inclui uma unidade de decodificação por entropia 150, uma memória de dados de vídeo 151, uma unidade de processamento por previsão 152, uma unidade de quantização inversa 154, uma unidade de processamento de transformação inversa 156, uma unidade de reconstrução 158, uma unidade de filtro 160, e um armazenador de imagem decodificada 162. A unidade de processamento por previsão 152 inclui uma unidade de compensação de movimento 164 e uma unidade de processamento por intraprevisão 166. O decodificador de vídeo 30 também inclui uma unidade de decodificação com base em paleta 165 configurada para realizar os vários aspectos das técnicas de codificação com base em paleta descritas nessa descrição. Em outros exemplos, o decodificador de vídeo 30 pode incluir mais, menos ou outros componentes funcionais.
[0206] A memória de dados de vídeo 151 pode armazenar dados de vídeo, tal como uma sequência de bits de vídeo codificada, a ser decodificada pelos componentes do decodificador de vídeo 30. Os dados de vídeo armazenados na memória de dados de vídeo 151 podem ser obtidos, por exemplo, a partir do canal 16, por exemplo, a partir de uma fonte de vídeo local, tal como uma câmera, através de comunicação em rede com ou sem fio de dados de vídeo, ou pelo acesso ao meio de armazenamento de dados físico. A memória de dado de vídeo 151 pode formar um armazenador de imagem codificada (CPB) que armazena os dados de vídeo codificados a partir de uma sequência de bits de vídeo codificada. O armazenador de imagens decodificadas 162 pode ser uma memória de imagem de referência que armazena os dados de vídeo de referência par auso na decodificação de dados de vídeo pelo decodificador de vídeo 30, por exemplo, nos modos de intracodificação e intercodificação. A memória de dados de vídeo 151 e o armazenador de imagens decodificadas 162 podem ser formados por qualquer um dentre uma variedade de dispositivos de memória, tal como uma memória de acesso randômico dinâmica (DRAM), incluindo DRAM sincronizada (SDRAM), RAM magneto resistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 151 e o armazenador de imagens decodificadas 162 podem ser fornecidos pelo mesmo dispositivo de memória ou por dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 151 pode estar em chip com outros componentes do decodificador de vídeo 30, ou fora do chip com relação a esses componentes.
[0207] Um armazenador de imagem codificada (CPB) pode receber e armazenar os dados de vídeo codificados (por exemplo, unidades NAL) de uma sequência de bits. A unidade de decodificação por entropia 150 pode receber os dados de vídeo codificados (por exemplo, unidades NAL) do CPB e analisar as unidades NAL para decodificar os elementos de sintaxe. A unidade de decodificação por entropia 150 pode decodificar por entropia os elementos de sintaxe codificados por entropia nas unidades NAL.
[0208] De acordo com os aspectos dessa descrição, a unidade de decodificação por entropia 150 pode ser configurada para decodificar os dados de paleta utilizando um código TEGk, como descrito acima com relação ao exemplo da figura 1. Em particular, de acordo com os aspectos dessa descrição, a unidade de decodificação por entropia 150 pode decodificar os dados que indicam um comprimento de sequência para uma sequência de índices de paleta (por exemplo, uma sequência de índices possuindo o mesmo valor ou uma sequência de índices que são copiados a partir dos índices vizinhos acima) com base em um comprimento de sequência máximo determinado. Em alguns exemplos, a unidade de decodificação por entropia 150 pode decodificar o comprimento de sequência utilizando um código TEG2.
[0209] A unidade de processamento por previsão 152, a unidade de quantização inversa 154, a unidade de processamento de transformação inversa 156, a unidade de reconstrução 158, e a unidade de filtro 160 podem gerar dados de vídeo decodificados nos elementos de sintaxe extraídos a partir da sequência de bits. As unidades NAL da sequência de bits pode incluir unidades NAL de fatia codificada. Como parte da decodificação da sequência de bits, a unidade de decodificação por entropia 150 pode extrair e decodificar por entropia os elementos de sintaxe a partir das unidades NAL de fatia codificada. Cada uma das fatias codificadas pode incluir um cabeçalho de fatia e dados de fatia. O cabeçalho de fatia pode conter elementos de sintaxe que pertencem a uma fatia. Os elementos de sintaxe no cabeçalho de fatia podem incluir um elemento de sintaxe que identifica um PPS associado com uma imagem que contém a fatia.
[0210] Em adição à decodificação de elementos de sintaxe da sequência de bits, o decodificador de vídeo 30 pode realizar uma operação de reconstrução em uma CU não dividida. Para realizar a operação de reconstrução em uma CU não dividida, o decodificador de vídeo 30 pode realizar uma operação de reconstrução em cada TU da CU. Pela realização da operação de reconstrução para cada TU da CU, o decodificador de vídeo 30 pode reconstruir os blocos residuais da CU.
[0211] Como parte da realização de uma operação de reconstrução em uma TU de uma CU, a unidade de quantização inversa 154 pode quantizar de forma inversa, isso é, desquantizar, os blocos de coeficientes associados com a TU. A unidade de quantização inversa 154 pode utilizar um valor QP associado com a CU da TU para determinar um grau de quantização e, da mesma forma, um grau de quantização inversa para a unidade de quantização inversa 154 a ser aplicado. Isso é, a razão de compressão, isso é, a razão do número de bits utilizados para representar a sequência original e a comprimida, pode ser controlada pelo ajuste do valor de QP utilizado quando da quantização dos coeficientes de transformação. A razão de compressão também pode depender do método de codificação por entropia empregado.
[0212] Depois que a unidade de quantização inversa 154 quantiza de forma inversa um bloco de coeficiente, a unidade de processamento de transformação inversa 156 pode aplicar uma ou mais transformações inversas ao bloco de coeficiente a fim de gerar um bloco residual associado com a TU. Por exemplo, a unidade de processamento de transformação inversa 156 pode aplicar um DCT inverso, uma transformação de inteiro inverso, uma transformação Karhunen-Loeve inversa (KLT), uma transformação rotativa inversa, uma transformação direcional inversa, ou outra transformação inversa ao bloco de coeficiente.
[0213] Se uma PU for codificada utilizando a intraprevisão, a unidade de processamento por intraprevisão 166 pode realizar a intraprevisão para gerar blocos de previsão para a PU. A unidade de processamento por intraprevisão 166 pode utilizar um modo de intraprevisão para gerar os blocos de luminescência, Cb e Cr de previsão para a PU com base nos blocos de previsão de PUs espacialmente vizinhas. A unidade de processamento por intraprevisão 166 pode determinar o modo de intraprevisão para a PU com base em um ou mais elementos de sintaxe decodificados a partir da sequência de bits.
[0214] A unidade de processamento por previsão 152 pode construir uma primeira lista de imagens de referência (RefPicList0) e uma segunda lista de imagens de referência (RefPicList1) com base nos elementos de sintaxe extraídos da sequência de bits. Adicionalmente, se uma PU for codificada utilizando-se a interprevisão, a unidade de decodificação por entropia 150 pode extrair a informação de movimento para a PU. A unidade de compensação de movimento 164 pode determinar, com base na informação de movimento da 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, os blocos de luminescência, Cb e Cr de previsão para a PU.
[0215] A unidade de reconstrução 158 pode utilizar blocos de transformação de luminescência, Cb e Cr associados com as TUs de uma CU e os blocos de luminescência, Cb e Cr de previsão das PUs da CU, isso é, dados de intraprevisão ou dados de interprevisão, como aplicável, para reconstruir os blocos de codificação de luminescência, Cb e Cr da CU. Por exemplo, a unidade de reconstrução 158 pode adicionar amostras dos blocos de transformação de luminescência, Cb e Cr às amostras correspondentes do blocos de luminescência, Cb e Cr de previsão para reconstruir o blocos de codificação de luminescência, Cb e Cr da CU.
[0216] A unidade de filtro 160 pode realizar uma operação de desbloqueio para reduzir os artefatos de bloqueio associados com os blocos de codificação de luminescência, Cb e Cr da CU. O decodificador de vídeo 30 pode armazenar os blocos de codificação de luminescência, Cb e Cr da CU no armazenador de imagens decodificadas 162. O armazenador de imagens decodificadas 162 pode fornecer imagens de referência para a compensação de movimento subsequente, intraprevisão e 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 realizar, com base nos blocos de luminescência, Cb e Cr no armazenador de imagens decodificadas 162, operações de intraprevisão ou interprevisão em PUs de outras CUs.
[0217] De acordo com vários exemplos dessa descrição, o decodificador de vídeo 30 pode ser configurado para realizar a codificação com base em paleta. A unidade de decodificação com base em paleta 165, por exemplo, pode realizar a decodificação com base em paleta quando um modo de decodificação com base em paleta é selecionado, por exemplo, para uma CU ou PU. Por exemplo, a unidade de decodificação com base em paleta 165 pode ser configurada para gerar uma paleta possuindo registros indicando os valores de pixel, receber informação associando pelo menos algumas localizações de pixel em um bloco de dados de vídeo com registros na paleta, selecionar valores de pixel na paleta com base na informação, e reconstruir os valores de pixel do bloco com base nos valores de pixel selecionados na paleta. Apesar de várias funções serem descritas como sendo realizadas pela unidade de decodificação com base em paleta 165, algumas ou todas as ditas funções podem ser realizadas por outras unidades de processamento, ou uma combinação de diferentes unidades de processamento.
[0218] A unidade de decodificação com base em paleta 165 pode receber informação de modo de codificação de paleta, e realizar as operações acima quando a informação de modo de codificação de paleta indicar que o modo de codificação de paleta se aplica ao bloco. Quando a informação de modo de codificação de paleta indicar que o modo de codificação de paleta não se aplica ao bloco, ou quando a outra informação de modo indicar o uso de um modo diferente, o decodificador de vídeo 30 pode decodificar o bloco de dados de vídeo utilizando um modo de codificação com base em não paleta, por exemplo, tal como um modo de codificação de interprevisão ou intraprevisão HEVC. 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.
[0219] De acordo com os aspectos dessa descrição, a unidade de decodificação com base em paleta 165 pode ser configurada para realizar qualquer combinação de técnicas para a codificação de paleta descrita aqui. Por exemplo, de acordo com os aspectos dessa descrição, a unidade de decodificação com base em paleta 165 pode determinar um valor de um elemento de sintaxe que indica, para todas as amostras de um bloco de dados de vídeo, caso pelo menos uma amostra respectiva do bloco seja codificada com um primeiro modo de paleta, onde o primeiro modo de paleta inclui a codificação da amostra respectiva do bloco sem utilizar um índice para uma paleta de valores de cor para o bloco. Por exemplo, a unidade de decodificação com base em paleta 165 pode determinar um valor de um elemento de sintaxe de nível de bloco que indica se qualquer amostra do bloco deve ser decodificada como uma amostra de escape (por exemplo, uma amostra que pode não ser reconstruída utilizando um registro de cor a partir da paleta). Em alguns exemplos, a unidade de decodificação com base em paleta 165 pode determinar um indicador de escape de um bit para um bloco que indica se quaisquer amostras do bloco devem ser decodificadas como uma amostra de escape.
[0220] Adicionalmente ou alternativamente, a unidade de decodificação com base em paleta 165 pode determinar pelo menos um dos dados que indica um tamanho máximo de paleta de uma paleta de valores de cor para codificação de um bloco de dados de vídeo ou dados que indicam um tamanho máximo de previsor de paleta de um previsor de paleta para determinação da paleta de valores de cores. Por exemplo, a unidade de decodificação com base em paleta 165 pode decodificar tais dados a partir de um conjunto de parâmetros, tal como um SPS.
[0221] Adicionalmente ou alternativamente, a unidade de decodificação com base em paleta 165 pode determinar, para um pixel associado com um índice de paleta que relaciona um valor de pixel a um valor de cor em uma paleta de cores para codificação de pixel, um comprimento de sequência de uma sequência de índices de paleta sendo codificada juntamente com o índice de paleta do pixel (por exemplo, uma sequência de índices possuindo o mesmo valor ou uma sequência de índices que são copiados a partir dos índices vizinhos acima). Isso é, a unidade de decodificação com base em paleta 165 pode determinar que um valor de índice para uma amostra em particular é decodificado com uma sequência de outros índices de paleta subsequentes. A unidade de decodificação com base em paleta 165 também pode determinar um comprimento de sequência máximo para uma sequência máxima de índices de paleta capazes de serem decodificados com o índice de paleta do pixel. Como notado acima com relação à unidade de decodificação por entropia 150, o decodificador de vídeo 30 pode decodificar os dados que indicam o comprimento de sequência com base no comprimento de sequência máximo determinado.
[0222] A figura 4 é um diagrama conceitual ilustrando um exemplo de determinação de uma paleta para codificação de dados de vídeo, consistente com as técnicas dessa descrição. O exemplo da figura 4 inclui uma imagem 178 possuindo uma primeira unidade de codificação (CU) 180 que é associada com as primeiras paletas 184 e uma segunda CU 188 que é associada com as segundas paletas 192. Como descrito em maiores detalhes abaixo e de acordo com as técnicas dessa descrição, as segundas paletas 192 são baseadas nas primeiras paletas 184. A imagem 178 também inclui o bloco 196 codificado com um modo de codificação por intraprevisão e o bloco 200 que é codificado com um modo de codificação por interprevisão.
[0223] As técnicas da figura 4 são descritas no contexto de codificador de vídeo 20 (figura 1 e figura 2), e o decodificador de vídeo 30 (figura 1 e figura 3) e com relação ao padrão de codificação de vídeo HEVC para fins de explicação. No entanto, deve-se compreender que as técnicas dessa descrição não estão limitadas dessa forma, e podem ser aplicadas por outros processadores de codificação de vídeo e/ou dispositivos em outros processos de codificação de vídeo e/o padrões.
[0224] Em geral, uma paleta se refere a um número de valores de pixel que são dominantes e/ou representativos para uma CU sendo atualmente codificada, CU 188 no exemplo da figura 4. As primeiras paletas 184 e as segundas paletas 192 são ilustradas como incluindo múltiplas paletas. Em alguns exemplos, de acordo com os aspectos dessa descrição, um codificador de vídeo (tal como o codificador de vídeo 20 ou decodificador de vídeo 30) pode codificar as paletas separadamente para cada componente de cor de uma CU. Por exemplo, o codificador de vídeo 20 pode codificar uma paleta para um componente de luminescência (Y) de uma CU, outra paleta para um componente de crominância (U) da CU, e outra paleta para o componente de crominância (V) da CU. Nesse exemplo, os registros da paleta Y podem representar os valores Y de pixels da CU, registros da paleta U podem representar valores U de pixels da CU, e registros da paleta V podem representar valores V de pixels da CU.
[0225] Em outros exemplos, o codificador de vídeo 20 pode codificar uma única paleta para todos os componentes de cor de uma CU. Nesse exemplo, o codificador de vídeo 20 pode codificar uma paleta possuindo um registro i que é um valor triplo, incluindo Yi, Ui e Vi. Nesse caso, a paleta inclui valores para cada um dos componentes de pixels. De acordo, a representação das primeiras paletas 184 e 192 como um conjunto de paletas possuindo múltiplas paletas individuais é meramente um exemplo e não deve ser limitadora.
[0226] No exemplo da figura 4, as primeiras paletas 184 incluem três registros 202-206 possuindo o valor de índice de registro 1, o valor de índice de registro 2, e o valor de índice de registro 3, respectivamente. Os registros 202-206 relacionam os índices de paleta aos valores de pixel incluindo o valor de pixel A, o valor de pixel B, e o valor de pixel C, respectivamente. Como descrito aqui, em vez de codificar os valores de pixel reais da primeira CU 180, um codificador de vídeo (tal como o codificador de vídeo 20 ou o decodificador de vídeo 30) pode utilizar codificação com base em paleta para codificar os pixels do bloco utilizando os índices de paleta 1 - 3. Isso é, para cada posição de pixel da primeira CU 180, o codificador de vídeo 20 pode codificar um valor de índice para o pixel, onde o valor de índice é associado com um valor de pixel em uma ou mais das primeiras paletas 184. O decodificador de vídeo 30 pode obter os índices de paleta a partir de uma sequência de bits e reconstruir os valores de pixel utilizando os índices de paleta e uma ou mais primeiras paletas 184. Dessa forma, as primeiras paletas 184 são transmitidas pelo codificador de vídeo 20 em uma sequência de bits de dados de vídeo codificada para uso pelo decodificador de vídeo 30 na decodificação com base em paleta.
[0227] De acordo com os aspectos dessa descrição, um tamanho máximo de paleta pode ser sinalizado para as primeiras paletas 184. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar dados indicando um tamanho máximo de paleta, por exemplo, em termos de número de registros que podem ser incluídos nas primeiras paletas 184. Em alguns exemplos, um ou mais elementos de sintaxe que indicam o tamanho máximo de paleta (por exemplo, MAX_PLT_SIZE) pode ser incluído em um SPS que está ativo para CU 180. Em outros exemplos, um ou mais elementos de sintaxe que indicam o tamanho máximo de paleta pode ser incluído em outro conjunto de parâmetros, tal como um VPS ou PPS, ou em dados de cabeçalho tal como dados de cabeçalho de fatia ou dados associados com uma LCU ou CU.
[0228] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem variar, utilizando um ou mais elementos de sintaxe que indicam o tamanho máximo de paleta, o tamanho máximo de paleta pode ser baseado no perfil particular, nível ou profundidade de bit de dados de vídeo sendo codificados. Em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem variar, utilizando um ou mais elementos de sintaxe que indicam o tamanho máximo de paleta, o tamanho máximo de paleta pode ser baseado em um tamanho de bloco sendo codificado, tal como CU 180.
[0229] Em um exemplo para fins de ilustração, o codificador de vídeo 20 e o decodificador de vídeo 30 pode utilizar os dados indicando um tamanho máximo de paleta quando da construção de primeiras paletas 184 para CU 180. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem continuar a adicionar registros às primeiras paletas 184 até alcançar o tamanho máximo de paleta indicado pelos dados. O codificador de vídeo 20 e o decodificador de vídeo 30 podem então codificar a CU 180 utilizando as primeiras paletas construídas 184.
[0230] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar segundas paletas 192 com base nas primeiras paletas 184. Por exemplo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem localizar um ou mais blocos a partir dos quais as paletas de previsão, nesse exemplo, as primeiras paletas 184, são determinadas. A combinação dos registros sendo utilizados para fins de previsão pode ser referida como uma paleta de previsão.
[0231] No exemplo da figura 4, um ou mais elementos de sintaxe são ilustrados como um vetor 216. O vetor 216 possui vários compartimentos associados (ou bits), com cada compartimento indicando se o previsor de paleta associado com esse compartimento é utilizado para prever um registro da paleta atual. Por exemplo, o vetor 216 indica que os primeiros dois registros das primeiras paletas 184 (202 e 204) aso incluídos nas segundas paletas 192 (um valor de "1" no vetor 216), enquanto o terceiro registro das primeiras paletas 184 não está incluído nas segundas paletas 192 (um valor de "0" no vetor 216). No exemplo da figura 4, o vetor é um vetor Booleano. O vetor pode ser referido como um vetor de previsão de paleta.
[0233] Em alguns exemplos, como notado acima, o codificador de vídeo 20 e o decodificador de vídeo 30 pode determinar um previsor de paleta (que também pode ser referido como uma tabela de previsor de paleta ou lista de previsor de paleta) quando da realização da previsão de paleta. O previsor de paleta pode incluir registros das paletas de um ou mais blocos vizinhos que são utilizados para prever um ou mais registros de uma paleta para codificação de um bloco atual. O codificador de vídeo 20 e o decodificador de vídeo 30 podem construir a lista da mesma forma. O codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar os dados (tal como o vetor 216) para indicar quais registros do previsor de paleta devem ser copiados para uma paleta para codificação de um bloco atual.
[0234] Dessa forma, em alguns exemplos, os registros de paleta previamente decodificados são armazenados em uma lista para uso como um previsor de paleta. Essa lista pode ser utilizada para prever os registros de paleta na CU de modo de paleta atual. Um vetor de previsão binário pode ser sinalizado na sequência de bits para indicar quais registros na lista são reutilizados na paleta atual. No pedido provisório U.S. No. 62/018.461, depositado em 27 de junho de 2014, a codificação do comprimento de sequência é utilizada para comprimir o previsor de paleta binário. Em um exemplo, o valor de comprimento de sequência é codificado utilizando-se o código Exp-Golomb de ordem 0.
[0235] De acordo com os aspectos dessa descrição, em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 (por exemplo, a unidade de codificação por entropia 118 e a unidade de decodificação por entropia 150) podem ser configuradas para codificar (por exemplo, codificar e decodificar, respectivamente) um vetor de previsão de paleta binário para uma paleta de um bloco utilizando um código Exp-Golomb truncado de ordem k (TEGk), como descrito acima com relação ao exemplo da figura 1.
[0236] Em alguns casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar o vetor de previsão de paleta binário utilizando o código TEGk em conjunto com as técnicas descritas no documento de submissão padrão Seregin et al., "Non-SCCE3: Run-Length Coding for Palette Predictor," JCTVC-R0228, Sapporo, JP, de 30 de junho a 9 de julho de 2014 (doravante JCTVC-R0228). Em JCTVC-R0228, a codificação de comprimento de sequência é utilizada para codificar os elementos zero em um vetor binário com as seguintes condições e etapas: * valor de comprimento de sequência igual a 1 indica final da previsão * o final da previsão não é sinalizado para o último 1 no vetor binário * o número de elementos zero anteriores é codificado para cada 1 no vetor binário * se o número de elementos igual a zero for superior a 0, o número mais um é sinalizado, devido ao valor de escape de 1. * O valor de comprimento de sequência é codificado utilizando o código Golomb Exponencial de ordem 0.Em um exemplo para fins de ilustração, um vetor de previsão de paleta binário pode ser igual a {1100100010000}, indicando que quatro registros (indicados pelos quatro "1") do previsor de paleta são copiados para a paleta para codificação de um bloco atual. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar o vetor como 0-0-3-4-1.
[0237] De acordo com aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar o vetor de previsão de paleta binário utilizando um valor de sequência máximo X para o vetor, que pode ser igual ao número de registros de paleta na lista de previsor de paleta menos posição atual na ordem de digitalização menos um). De acordo com um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 utilizam um código TEG0 para codificar o valor de sequência.
[0238] As técnicas dessa descrição também se referem à sinalização de um tamanho máximo de previsor de paleta. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar os dados indicando um tamanho máximo de previsor de paleta, por exemplo, em termos de número de bits que podem ser incluídos no vetor 216. Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados indicando o tamanho máximo de previsor de paleta com relação a um ou mais outros valores. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar os dados indicando o tamanho máximo de previsor de paleta como um dental (por exemplo, diferença) entre o tamanho máximo de previsor de paleta e o tamanho máximo de paleta. Em alguns casos, o codificador de vídeo e o decodificador de vídeo 30 podem codificar o delta utilizando pelo menos um dentre um código de comprimento fixo, um código Golomb-Rice, ou um código Golomb exponencial.
[0239] Em alguns exemplos, os elementos de sintaxe que indicam o tamanho máximo do previsor de paleta podem ser incluídos em um SPS. Em outros exemplos, os elementos de sintaxe que indicam o tamanho máximo de previsor de paleta podem ser incluídos em outro conjunto de parâmetros, tal como um VPS ou PPS, ou nos dados de cabeçalho tal como dados de cabeçalho de fatia ou dados associados com uma LCU ou CU.
[0240] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem variar, utilizando os elementos de sintaxe que indicam o tamanho máximo de previsor de paleta, o tamanho máximo de previsor de paleta pode ser baseado no perfil particular, nível ou profundidade de bit dos dados de vídeo sendo codificados. Em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem variar, utilizando elementos de sintaxe que indicam o tamanho máximo de previsor de paleta, o tamanho máximo de previsor de paleta pode ser baseado em um tamanho do bloco sendo codificado.
[0241] Em um exemplo para fins de ilustração, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar os dados referentes ao tamanho máximo de previsor de paleta quando construindo as segundas paletas 192 para codificação de CU 188. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem continuar a adicionar os registros a uma paleta de previsor (por exemplo, e bits ao vetor 216) até alcançar um tamanho máximo de previsor de paleta, como indicado pelos dados. O codificador de vídeo 20 e o decodificador de vídeo 30 podem então utilizar o vetor 216 para construir as segundas paletas 192 para CU 188.
[0242] A figura 5 é um diagrama conceitual ilustrando um exemplo de determinação de índices de paleta para uma paleta para um bloco de pixels, consistente com as técnicas dessa descrição. Por exemplo, a figura 5 inclui um mapa 240 de índices de paleta que relacionam as posições respectivas dos pixels associados com os índices de paleta com um registro de paletas 244. Por exemplo, o índice 1 é associado com o Valor A, o índice 2 é associado com o Valor B, e o índice 3 é associado com o Valor C. Adicionalmente, quando as amostras de escape são indicadas utilizando a sinalização de escape implícita, o codificador de vídeo 20 e o decodificador de vídeo 30 também podem adicionar um índice adicional às paletas 244, ilustradas nas figuras 5 como índice 4, que pode indicar que as amostras do mapa 240 associado com o índice 4 são amostras de escape. Nesse caso, o codificador de vídeo 20 pode codificar (e o decodificador de vídeo 30 pode obter, a partir de uma sequência de bits codificada) uma indicação de um valor de pixel real (ou sua versão quantizada) para uma posição no mapa 240 se o valor de pixel não estiver incluído nas paletas 244.
[0243] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um mapa adicional indicando quais posições de pixel são associadas com os índices de paleta. Por exemplo, assumindo-se que o registro (i,j) no mapa corresponda à posição (i,j) de uma CU. O codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe para cada registro de mapa (isso é, cada posição de pixel) indicando se o registro possui um valor de índice associado. Por exemplo, o codificador de vídeo 20 pode codificar um indicador possuindo um valor igual a um para indicar que o valor de pixel na localização (i,j) na CU é um dos valores nas paletas 244.
[0244] O codificador de vídeo 20 pode, em tal exemplo, codificar também um índice de paleta (ilustrado no exemplo da figura 5 como valores de 1 a 3) para indicar esse valor de pixel na paleta e para permitir que o decodificador de vídeo reconstrua o valor de pixel.
[0245] Em casos nos quais as paletas 244 incluem um registro singular e um valor de pixel associado, o codificador de vídeo 20 pode pular a sinalização do valor de índice. O codificador de vídeo 20 pode codificar o indicador para ter um valor igual a zero para indicar que o valor de pixel na localização (i, j) na CU não seja um dos valores nas paletas 244. Nesse exemplo, o codificador de vídeo 20 também pode codificar uma indicação do valor de pixel para uso pelo decodificador de vídeo 30 na reconstrução do valor de pixel. Em alguns casos, o valor de pixel pode ser codificado com perda.
[0246] O valor de um pixel em uma posição de uma CU pode fornecer uma indicação de valores de um ou mais outros pixels em outras posições da CU. Por exemplo, pode haver uma probabilidade relativamente alta de as posições de pixel vizinho de uma CU terem o mesmo valor de pixel ou poderem ser mapeadas para o mesmo valor de índice (no caso de codificação com perda, onde mais de um valor de pixel pode ser mapeado para um valor de índice único).
[0247] De acordo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe indicando um número de pixels consecutivos ou índices de paleta em uma determinada ordem de digitalização que são codificados juntos. Como notado acima, a sequência de índices de paleta (ou valores de pixel indicados pelos índices de paleta) pode ser referida aqui como uma sequência. O decodificador de vídeo 30 pode obter os elementos de sintaxe indicando uma sequência de uma sequência de bits codificada e utilizar os dados para determinar o número de localizações consecutivas que possuem o mesmo pixel ou valor de índice.
[0248] Como notado acima, sequências podem ser utilizadas em conjunto com um modo de CopyFromTop ou Value. Em um exemplo para fins de ilustração, considera-se as fileiras 264 e 268 do mapa 240. Considerando-se uma direção de digitalização horizontal, da esquerda para a direita, a fileira 264 inclui três índices de paleta igual a "1", dois índices de paleta igual a "2", e três índices de paleta igual a "3", e uma amostra que não está incluída nas paletas 244 (representadas pelo índice 244 (representado pelo índice 4, apesar de um indicador de escape de nível de amostra poder ser utilizado para sinalizar o escape explícito), que pode ser referido como uma amostra de escape.
[0249] Nesse exemplo, o codificador de vídeo 20 pode utilizar o modo CopyFromTop para codificar os dados para a fileira 268. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe indicando que a primeira posição de fileira 268 (a posição de fileira mais à esquerda 268) é igual à primeira posição da fileira 264. O controlador de vídeo 20 também pode codificar um ou mais elementos de sintaxe indicando que a próxima sequência de dois registros consecutivos na direção de digitalização na fileira 268 são iguais à primeira posição da fileira 264.
[0250] Depois da codificação de um ou mais elementos de sintaxe indicando a primeira posição de fileira 264 e sequência de dois registros (notados acima), o codificador de vídeo 20 pode codificar a quarta e quinta posições na fileira 268 (da esquerda para a direita), utilizando o modo Value. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe indicando um valor igual a 1 para a quarta posição e um ou mais elementos de sintaxe indicando uma sequência igual a 1 (por exemplo, modo Value). Dessa forma, o codificador de vídeo 20 codifica essas duas posições sem referência a outra linha.
[0251] O codificador de vídeo 20 pode então codificar a primeira posição possuindo um valor de índice de 3 na fileira 268 utilizando o modo CopyFromTop com relação à fileira superior 264. Por exemplo, o codificador de vídeo 20 pode sinalizar um modo CopyFromTop e uma sequência igual a 1. De acordo, o codificador de vídeo 20 pode selecionar entre a codificação de valores de pixel ou índices de paleta de uma linha com relação a outros valores de linha, por exemplo, utilizando uma sequência, codificando valores de pixel ou de uma linha com relação a outros valores de outra linha (ou coluna), ou uma combinação dos mesmos. O codificador de vídeo 20 pode, em alguns exemplos, realizar uma otimização de taxa/distorção para realizar a seleção.
[0252] O codificador de vídeo 20 pode então codificar a amostra de escape para a amostra final da fileira 268 (da esquerda para a direita), que não está incluída nas primeiras paletas 244. Por exemplo, o codificador de vídeo 20 pode codificar a posição final da fileira 268 como uma amostra de escape. Isso é, o codificador de vídeo 20 pode codificar uma indicação de que a posição final da fileira 268 é uma amostra de escape (por exemplo, índice 4), além de uma indicação do valor de amostra. O decodificador de vídeo 30 pode obter a sintaxe descrita acima a partir de uma sequência de bits codificada e reconstruir a fileira 268 utilizando tal sintaxe.
[0253] Como notado acima, pode haver duas técnicas para codificação da amostra de escape. Por exemplo, com sinalização de escape, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um indicador de modo Escape explícito por amostra para cada posição de amostra do mapa 240. Se uma amostra em particular (tal como a amostra final da fileira 268) for codificada como uma amostra de escape, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar os dados que indicam o valor de cor para a amostra em particular. Se a amostra não for codificada como uma amostra de escape, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados adicionais para indicar se o modo é CopyFromTop ou Value, tal como um indicador SPoint.
[0254] Com sinalização de escape implícita, o codificador de vídeo 20 e o decodificador de vídeo 30 podem adicionar um índice adicional às paletas 244 (índice de registro 4). O codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar o índice adicional às paletas 244 para indicar que uma amostra é codificada como uma amostra de escape, por exemplo, índice 4. O índice adicional, no entanto, não possui um valor de cor associado. Em vez disso, o codificador de vídeo 20 e o decodificador de vídeo 30 também codificam valores de cor para cada amostra que é associada ao índice adicional. Se a amostra não for codificada como uma amostra de escape, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar os dados para indicar se o modo é CopyFromTop ou Value, tal como um indicador SPoint.
[0255] De acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um ou mais elementos de sintaxe de nível de bloco que indicam, para todas as amostras de um bloco de dados de vídeo, se pelo menos uma amostra do bloco é codificada com base em um valor de cor não sendo incluído em uma paleta de cores para o bloco. Com relação ao exemplo da figura 5, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um ou mais elementos de sintaxe associados ao mapa 240 que indicam que pelo menos uma amostra do mapa 240 é codificada como uma amostra de escape, isso é, a amostra final da fileira 268.
[0256] Em um exemplo, um ou mais elementos de sintaxe podem ser um indicador de escape de nível de bloco (referido abaixo simplesmente como "indicador de escape"). Por exemplo, o codificador de vídeo 20 pode codificar um indicador de escape possuindo um valor igual a um para indicar que o mapa 240 inclui uma amostra codificada como uma amostra de escape. Da mesma forma, o decodificador de vídeo 30 pode decodificar um indicador de escape possuindo um valor igual a um, que indica que o mapa 240 inclui uma amostra codificada como uma amostra de escape. De acordo, o codificador de vídeo 20 pode codificar e o decodificador de vídeo 30 pode decodificar o mapa 240 de acordo com o indicador de escape. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem adicionar o índice 4 às primeiras paletas 244 que podem ser utilizadas para representar as amostras codificadas como amostras de escape. O codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar esse índice adicional durante a codificação do mapa 240.
[0257] De acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para pular a codificação de determinada sintaxe com base no indicador de escape e tamanho da paleta sendo utilizada para codificar um bloco em particular. Isso é, enquanto o exemplo da figura 5 ilustra as primeiras paletas 244 possuindo três registros, em alguns casos, uma paleta para codificação de um bloco de dados de vídeo pode incluir um único registro. Em tais casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para pular a codificação de determinada sintaxe relacionada com escape com base na paleta possuir um único registro e o indicador de escape indicar que nenhuma amostra do bloco é codificada como amostra de escape.
[0258] Por exemplo, como nos casos nos quais o indicador de escape indica que nenhuma amostra do bloco é uma amostra de escape, e quando o tamanho de uma paleta é igual a um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que todas as amostras do bloco tenham o mesmo valor de índice (por exemplo, o único registro da paleta). O codificador de vídeo 20 e o decodificador de vídeo 30 também podem, portanto, pular a codificação de todos os outros dados utilizados para determinar os índices de paleta do bloco.
[0259] No exemplo acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar explicitamente a sintaxe de escape de nível de bloco (por exemplo, o codificador de vídeo 20 pode codificar um indicador de escape na sequência de bits, e o decodificador de vídeo 30 pode decodificar tal indicador a partir da sequência de bits). No entanto, em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir (por exemplo, determinar, sem codificar ou decodificar o elemento de sintaxe notado acima) o valor do elemento de sintaxe de escape de nível de bloco com base no tamanho das paletas 244 utilizadas para mapear o código 240. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem realizar uma determinação preliminar referente ao tamanho da paleta a fim de determinar o valor do indicador de escape de nível de bloco. O elemento de sintaxe de escape de nível de bloco só pode ser codificado na sequência de bits quando o tamanho da paleta é superior a zero.
[0260] De acordo com os aspectos dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar inicialmente um tamanho de uma paleta para codificação de um bloco de dados de vídeo. Com base no tamanho da paleta sendo igual a zero, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar que o indicador de escape seja igual a um e que todas as amostras do bloco sejam codificadas como amostras de escape, visto que não existem outros registros de paleta disponíveis para a codificação de amostras.
[0261] Por exemplo, como nos casos nos quais o tamanho de paleta é igual a zero, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar automaticamente que todas as amostras do bloco possuem o mesmo valor de índice (por exemplo, o registro adicional da paleta associada com a indicação de amostras de escape). O codificador de vídeo 20 e o decodificador de vídeo 30 também podem, portanto, pular a codificação do indicador de escape além de todos os outros dados utilizados para determinar os índices de paleta do bloco.
[0262] A figura 6 é um diagrama conceitual ilustrando um exemplo de determinação de comprimento de sequência máximo para o modo CopyFromAbove, assumindo a ordem de digitalização raster, consistente com as técnicas dessa descrição. Como notado acima, as técnicas dessa descrição incluem a codificação de sintaxe para codificação de paleta utilizando um código que representa um valor máximo em potencial da sintaxe sendo codificada.
[0263] Em um exemplo para fins de ilustração, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um comprimento de sequência de uma sequência para índices de paleta (por exemplo, uma sequência de índices possuindo o mesmo valor ou uma sequência de índices que são copiados a partir de índices vizinho acima). Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar, para uma amostra codificada por paleta atual, um comprimento de sequência de uma sequência de índices de paleta sendo codificados juntamente com a amostra atual. O codificador de vídeo 20 e o decodificador de vídeo 30 também podem determinar um comprimento máximo de sequência para uma sequência máxima de índices de paleta capazes de ser codificados com o índice de paleta do pixel. O codificador de vídeo 20 e o decodificador de vídeo 30 podem então codificar os dados que indicam o comprimento de sequência com base no comprimento máximo de sequência determinado.
[0264] Em alguns casos, de acordo com aspectos dessa descrição, a sintaxe pode ser codificada utilizando- se uma forma de código Golomb Exponencial, tal como o código TEGk descrito aqui. Para se utilizar o código TEGk, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar um comprimento máximo de sequência como o número de pixels na CU atual menos a posição atual na ordem de digitalização menos 1.
[0265] Em algumas técnicas de codificação de paleta, as sequências de pixels associadas com o modo CopyFromAbove (onde um codificador de vídeo copia um índice de um pixel acima do pixel atual) não podem incluir quaisquer pixels de escape. Isso é, o codificador de vídeo deve parar uma sequência CopyFromAbove se o pixel vizinho acima do pixel atual for um pixel codificado como uma amostra de escape. Dessa forma, o comprimento máximo de sequência CopyFromAbove é limitado pela distância entre a posição atual de pixel e a posição possuindo um pixel vizinho acima que é escapado na ordem de digitalização/
[0266] Em um exemplo para fins de ilustração, a posição inicial de uma sequência CopyFromAbove na ordem de digitalização é A, o pixel vizinho acima ao pixel na posição A + L (L > 0) (ou em alguns exemplos, A + L (L >1) é codificada como uma amostra de escape, e o pixel vizinho acima ao pixel na posição A + l (l < L) não é codificado como uma amostra de escape. Se tal pixel L não existir, o codificador de vídeo 20 pode designar L para a posição depois do último pixel no bloco na ordem de digitalização. De acordo com as técnicas dessa descrição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar TEGk para codificar o comprimento de sequência para o modo CopyFromAbove com a restrição de que o comprimento máximo de sequência codificada não seja superior a L-1. Alternativamente, se os prefixos unários superiores a 0, superiores a 1, e superiores a 2 forem utilizados quando da codificação de um comprimento de sequência, o codificador de vídeo 20 ou o decodificador de vídeo 30 podem configurar o comprimento máximo de sequência da sequência do mapa de índice a ser codificado utilizando TEGk para L-4.
[0267] Em casos nos quais o decodificador de vídeo 30 ou o codificador de vídeo 20 não podem determinar se um pixel em uma posição corresponde a um pixel de escape ou não, o codificador de vídeo 20 e o decodificador de vídeo 30 podem processar o pixel como se não fosse codificado como uma amostra de escape, isso é, o comprimento máximo de sequência codificada não para. No exemplo da figura 6, se nenhum dos pixels englobados pelas linhas tracejadas 280 for codificado como uma amostra de escape, o comprimento máximo de sequência possível é 35 (isso é, o número de posições de pixel não sombreadas). Se um ou mais dos pixels dentro das linhas tracejadas 280 for codificado como uma amostra de escape, assumindo-se que o pixel marcado como o pixel de escape (a posição de pixel com o "X") seja o primeiro pixel de escape dentro das linhas tracejadas 280 na ordem de digitalização, então a cópia codificada máxima possível acima do comprimento de sequência é igual a cinco.
[0268] Em alguns exemplos, o decodificador de vídeo 30 só pode determinar o modo de sequência (por exemplo, o modo de paleta no qual os pixels são codificados) para os pixels dentro das linhas tracejadas 280. Dessa forma, na pior situação, o decodificador de vídeo 30 realiza a determinação para os pixels BlockWidth- 1. Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para implementar determinadas restrições referentes ao número máximo de pixels para os quais o modo de sequência é verificado. Por exemplo, o decodificador de vídeo 30 só pode verificar os pixels dentro das linhas tracejadas 280 se os pixels estiverem na mesma fileira que o pixel atual. O decodificador de vídeo 30 pode inferir que todos os outros pixels dentro das linhas tracejadas 280 não sejam codificados como amostras de escape. O exemplo na figura 6 considera uma ordem de digitalização raster. As técnicas, no entanto, podem ser aplicadas a outras ordens de digitalização, tal como vertical, transversal horizontal, e transversal vertical.
[0269] A figura 7 é um fluxograma ilustrando um processo ilustrativo para codificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe de nível de bloco que indicam se qualquer uma das amostras de um bloco é codificada como amostras de escape, consistente com as técnicas dessa descrição. O processo da figura 7 é geralmente descrito como sendo realizado pelo codificador de vídeo 20 para fins de ilustração, apesar de uma variedade de outros processadores também poder realizar o processo ilustrado na figura 7.
[0270] No exemplo da figura 7, o codificador de vídeo 20 determina uma paleta para codificação de um bloco de dados de vídeo (300). Em alguns exemplos, o codificador de vídeo 20 pode determinar as paletas com base em paleta de um ou mais blocos codificados previamente, por exemplo, utilizando um previsor de paleta. O codificador de vídeo 20 também pode determinar o tamanho da paleta (302). Por exemplo, o codificador de vídeo 20 pode determinar um número de registros na paleta determinada.
[0271] O codificador de vídeo 20 pode determinar se o tamanho de paleta é igual a zero (304). Com base no tamanho de paleta sendo igual a zero (a ramificação sim da etapa 304), o codificador de vídeo 20 pode determinar que a sintaxe de escape de nível de bloco que indica que pelo menos uma amostra do bloco é uma amostra de escape (306). Em um exemplo, o codificador de vídeo 20 pode determinar que um indicador de escape de nível de bloco é igual a um. O codificador de vídeo 20 então codifica todas as amostras do bloco como amostras de escape e sem codificar outros elementos de sintaxe para o bloco (308). Por exemplo, o codificador de vídeo 20 pode não codificar uma indicação do indicador de escape de nível de bloco, visto que o elemento de sintaxe de escape de nível de bloco só pode ser codificado na sequência de bits quando o tamanho de paleta é superior a zero. Adicionalmente, o codificador de vídeo 20 pode não codificar outros dados para índices de paleta do bloco, tal como a sintaxe que indica um modo de paleta (por exemplo, Value ou CopyFromTop), sintaxe associada com a determinação de sequências, sintaxe associada com índices de paleta, e qualquer outra sintaxe relacionada.
[0272] Se o tamanho de paleta for diferente de zero (não na ramificação da etapa 304), o codificador de vídeo 20 pode determinar se quaisquer amostras do bloco são codificadas como amostras de escape (310). Com base na determinação de que pelo menos uma amostra do bloco é codificada como uma amostra de escape (ramificação sim da etapa 310), o codificador de vídeo 20 pode determinar a sintaxe de escape de nível de bloco que indica que pelo menos uma amostra do bloco é codificada como uma amostra de escape e codifica uma indicação da sintaxe de nível de bloco em uma sequência de bits com o bloco (312). Por exemplo, o codificador de vídeo 20 pode configurar um indicador de escape de nível de bloco igual a um e codificar uma indicação do indicador de escape na sequência de bits. O codificador de vídeo 20 também codifica o bloco com modos de codificação de paleta, incluindo a codificação de pelo menos um pixel do bloco como uma amostra de escape (314).
[0273] Com base no fato de nenhuma amostra ser codificada como amostra de escape (a ramificação não da etapa 310), o codificador de vídeo 20 pode determinar se um tamanho de paleta da paleta para o bloco é igual a um (316). Com base na determinação de que o tamanho de paleta não é igual a um (a ramificação não da etapa 316), o codificador de vídeo 20 pode determinar a sintaxe de escape de nível de bloco que indica que nenhuma amostra do bloco foi codificada como amostra de escape e codifica uma indicação da sintaxe de escape de nível de bloco na sequência de bits (318). Por exemplo, o codificador de vídeo 20 pode configurar um indicador de escape de nível de bloco igual a zero e codificar uma indicação do indicador de escape na sequência de bits. O codificador de vídeo 20 também codifica o bloco utilizando modos de codificação de paleta, mas sem codificar qualquer uma das amostras de escape (320). Por exemplo, o codificador de vídeo 20 pode codificar os índices de paleta do bloco utilizando os modos CopyFromTop ou Value e codificar a sintaxe associada com o uso de tais modos, por exemplo, sintaxe que indica modos, índices de paleta, sequências e similares.
[0274] Com base na determinação de que o tamanho de paleta é igual a um (a ramificação sim da etapa 316), o codificador de vídeo 20 pode determinar a sintaxe de escape de nível de bloco que indica que nenhuma amostra do bloco é codificada como amostras de escape e codifica uma indicação da sintaxe de escape de nível de bloco na sequência de bits (322). Por exemplo, o codificador de vídeo 20 pode configurar um indicador de escape de nível de bloco igual a zero e codificar uma indicação do indicador de escape na sequência de bits. O codificador de vídeo 20 também codifica uma indicação de que todas as amostras do bloco possuem o mesmo valor de índice e sem codificar outra sintaxe (324). Por exemplo, o codificador de vídeo 20 p ode pular a codificação de sintaxe associada com o uso dos modos de paleta, por exemplo, sintaxe que indica os modos, índices de paleta, sequências e similares.
[0275] A figura 8 é um fluxograma ilustrando um processo ilustrativo para decodificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe de nível de bloco que indicam se quaisquer amostras de um bloco são decodificadas como amostras de escape, consistente com as técnicas dessa descrição. O processo da figura 8 é geralmente descrito como sendo realizado pelo decodificador de vídeo 30 para fins de ilustração, apesar de uma variedade de outros processadores também poder realizar o processo ilustrado na figura 8.
[0276] No exemplo da figura 8, o decodificador de vídeo 30 determina uma paleta para decodificação de um bloco de dados de vídeo (340). Em alguns exemplos, o decodificador de vídeo 30 pode determinar as paletas com base em paleta de um ou mais blocos previamente codificados, por exemplo, utilizando um previsor de paleta sinalizado em uma sequência de bits sendo decodificada. O decodificador de vídeo 30 também pode determinar o tamanho da paleta (342). Por exemplo, o decodificador de vídeo 30 pode determinar um número de registros na paleta determinada.
[0277] O decodificador de vídeo 30 pode determinar se o tamanho de paleta é igual a zero (344). Com base no tamanho de paleta sendo igual a zero (a ramificação sim da etapa 344), o decodificador de vídeo 30 pode determinar a sintaxe de escape de nível de bloco que indica que pelo menos uma amostra do bloco é codificada como uma amostra de escape (346). Em um exemplo, o decodificador de vídeo 30 pode determinar que um indicador de escape de nível de bloco seja igual a um. Por exemplo, o decodificador de vídeo 30 pode inferir que o indicador de escape de nível de bloco é igual a um sem decodificar o indicador da sequência de bits, visto que o elemento de sintaxe de escape de nível de bloco só pode ser codificado na sequência de bits quando o tamanho de paleta é maior que zero. O decodificador de vídeo 30 então decodifica todas as amostras do bloco utilizando a cor associada com a amostra de escape e sem decodificar outros elementos de sintaxe para o bloco (por exemplo, além dos valores de cor associados com a amostra de escape) (348). Por exemplo, como notado acima, o decodificador de vídeo 30 pode não decodificar uma indicação do indicador de escape de nível de bloco. Adicionalmente, o decodificador de vídeo 30 pode não decodificar outros dados para índices de paleta do bloco, tal como a sintaxe que indica um modo de paleta (por exemplo, Value ou CopyFromTop), sintaxe indicando os valores de índice, sintaxe associada com a determinação de sequências, e qualquer outra sintaxe relacionada.
[0278] Se o tamanho de paleta for diferente de zero (a ramificação não da etapa 344), o decodificador de vídeo 30 pode decodificar a sintaxe de escape de nível de bloco a partir da sequência de bits e determina um valor da sintaxe de nível de bloco (350). Por exemplo, o decodificador de vídeo 30 pode decodificar um indicador de escape de nível de bloco e determina se o valor é igual a zero ou um.
[0279] O decodificador de vídeo 30 pode então determinar se quaisquer amostras do bloco são codificadas como uma amostra de escape, por exemplo, com base na sintaxe decodificada (352). Com base na determinação de que pelo menos uma amostra do bloco é codificada como uma amostra de escape (a ramificação sim da etapa 352), o decodificador de vídeo 30 pode decodificar o bloco com os modos de codificação de paleta, incluindo a decodificação de pelo menos uma amostra do bloco como uma amostra de escape (354). O decodificador de vídeo 30 também pode decodificar pelo menos um valor de cor correspondendo às amostras de escape.
[0280] Com base no fato de nenhuma amostra ser codificada como amostra de escape (ramificação não da etapa 352), o decodificador de vídeo 30 pode determinar se um tamanho de paleta da paleta para o bloco é igual a um (356). Com base na determinação de que o tamanho de paleta não é igual a um (a ramificação não da etapa 356), o decodificador de vídeo 30 pode decodificar o bloco utilizando modos de codificação de paleta, mas sem decodificar qualquer amostra de escape (358). Por exemplo, o decodificador de vídeo 30 pode decodificar os índices de paleta do bloco utilizando os modos CopyFromTop ou Value e decodificar a sintaxe associada com o uso de tais modos, por exemplo, sintaxe que indica os modos, índices de paleta, sequências e similar.
[0281] Com base na determinação de que o tamanho de paleta é igual a um (ramificação sim da etapa 356), o decodificador de vídeo 30 pode decodificar o bloco utilizando o registro de paleta da paleta (por exemplo, o único registro presente na paleta) e sem decodificar outra sintaxe (360). Por exemplo, o decodificador de vídeo 30 pode pular a decodificação de sintaxe associada com o uso de modos de paleta, por exemplo, sintaxe que indica os modos, índices de paleta, sequências e similares.
[0282] A figura 9 é um fluxograma ilustrando um processo ilustrativo para codificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe que indicam um tamanho máximo de paleta e um tamanho máximo de previsor de paleta, consistente com as técnicas dessa descrição. O processo da figura 9 é geralmente descrito como sendo realizado pelo codificador de vídeo 20 para fins de ilustração, apear de uma variedade de outros processadores também poder realizar o processo ilustrado na figura 9.
[0283] No exemplo da figura 9, o codificador de vídeo 20 pode determinar um tamanho máximo de uma paleta para codificação de um bloco atual de dados de vídeo no modo de paleta (380). Por exemplo, o codificador de vídeo 20 pode ser configurado para determinar um tamanho máximo de paleta com base em uma característica dos dados de vídeo sendo codificados. Em alguns exemplos, o codificador de vídeo 20 pode determinar um tamanho máximo de paleta com base em uma profundidade de bit de dados (por exemplo, uma profundidade de bit de entrada ou uma profundidade de bit de perfil), um tamanho de bloco do bloco, um perfil ou nível associado com os dados de vídeo ou similares.
[0284] O codificador de vídeo 20 pode determinar também um tamanho máximo de previsor de paleta de um previsor de paleta para a criação de uma paleta do bloco atual (382). Por exemplo, o codificador de vídeo 20 pode ser configurado para determinar um tamanho máximo de previsor de paleta com base em uma característica dos dados de vídeo sendo codificados. Em alguns exemplos, o codificador de vídeo 20 pode determinar um tamanho máximo de previsor de paleta com base em uma profundidade de bit dos dados (por exemplo, uma profundidade de bit de entrada ou uma profundidade de bit de perfil), um tamanho de bloco do bloco, um perfil ou nível associado com os dados de vídeo, e similares.
[0285] O codificador de vídeo 20 também codifica dados que indicam o tamanho máximo de paleta e/ou o tamanho máximo de previsor de paleta em uma sequência de bits que inclui o bloco atual (386). Em alguns exemplos, o codificador de vídeo 20 pode codificar dados indicando o tamanho máximo de paleta e/ou o tamanho máximo de previsor de paleta com relação a um ou mais outros valores. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 pode ser configurado para codificar os dados indicando o tamanho máximo de previsor de paleta como um delta (por exemplo, diferença) entre o tamanho máximo de previsor de paleta e o tamanho máximo de paleta.
[0286] De acordo com os aspectos dessa descrição, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe que indicam o tamanho máximo de paleta e/ou o tamanho máximo de previsor de paleta em um SPS. Em outros exemplos, o codificador de vídeo 20 pode codificar tal sintaxe em outro conjunto de parâmetros (por exemplo, um PPS) em um cabeçalho de fatia de uma fatia que inclui o bloco atual, ou em outro lugar na sequência de bits.
[0287] O codificador de vídeo 20 também codifica o bloco atual de acordo com os dados que indicam o tamanho máximo de paleta e/ou o tamanho máximo de previsor de paleta (388). Por exemplo, o codificador de vídeo 20 pode determinar que uma paleta é limitada pelo tamanho máximo de paleta e/ou um previsor de paleta que é limitado pelo tamanho máximo de previsor de paleta.
[0288] A figura 10 é um fluxograma ilustrando um processo ilustrativo para codificação de um bloco de dados de vídeo com base em um ou mais elementos de sintaxe que indicam um tamanho máximo de paleta e um tamanho máximo de previsor de paleta, consistentes com as técnicas dessa descrição. O processo da figura 10 é geralmente descrito como sendo realizado pelo decodificador de vídeo 30 para fins de ilustração, apear de uma variedade de outros processadores poder realizar também o processo ilustrado na figura 10.
[0289] No exemplo da figura 10, o decodificador de vídeo 30 decodifica os dados que indicam um tamanho máximo de paleta e/ou um tamanho máximo de previsor de paleta a partir de uma sequência de bits que inclui um bloco atual sendo decodificado no modo de paleta (400). Em alguns exemplos, o codificador de vídeo 20 pode codificar os dados indicando o tamanho máximo de paleta e/ou o tamanho máximo de previsor de paleta com relação a um ou mais outros valores. Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo 20 pode ser configurado para codificar os dados indicando o tamanho máximo de previsor de paleta como um delta (por exemplo, diferença) entre o tamanho máximo de previsor de paleta e o tamanho máximo de paleta.
[0290] De acordo com os aspectos dessa descrição, o decodificador de vídeo 30 pode decodificar um ou mais elementos de sintaxe que indicam o tamanho máximo de paleta e/ou o tamanho máximo de previsor de paleta a partir de um SPS. Em outros exemplos, o decodificador de vídeo 30 pode decodificar tal sintaxe a partir de outro conjunto de parâmetros (por exemplo, um PPS), a partir de um cabeçalho de fatia de uma fatia que inclui o bloco atual, ou outro local na sequência de bits.
[0291] O decodificador de vídeo 30 pode determinar o tamanho máximo de uma paleta para decodificação do bloco atual com base nos dados decodificados (402). O decodificador de vídeo 30 pode determinar também um tamanho máximo de previsor de paleta de um previsor de paleta para criação de uma paleta para o bloco atual com base nos dados (404). O decodificador de vídeo 30 também decodifica o bloco atual de acordo com os dados que indicam o tamanho máximo de paleta e/ou o tamanho máximo de previsor de paleta (408). Por exemplo, o decodificador de vídeo 30 pode determinar uma paleta que é limitada pelo tamanho máximo de paleta e/ou um previsor de paleta que é limitado pelo tamanho máximo de previsor de paleta.
[0292] A figura 11 é um fluxograma ilustrando um processo ilustrativo para codificação (codificação ou decodificação) de dados que indicam um comprimento de sequência de uma sequência de pixels com base em um comprimento de sequência em potencial máximo, consistente com as técnicas dessa descrição. O processo da figura 11 é geralmente descrito como sendo realizado por um codificador de vídeo, tal como o codificador de vídeo 20 ou o decodificador de vídeo 30, para fins de ilustração, apesar de uma variedade de outros processadores também poder realizar o processo ilustrado na figura 11.
[0293] No exemplo da figura 11, o codificador de vídeo pode determinar um modo de paleta para codificação de um pixel atual (420). Por exemplo, o codificador de vídeo pode determinar se o pixel atual é codificado utilizando um modo CopyFromTop, um modo Value, ou outro modo de codificação com base em paleta. O codificador de vídeo também determina um comprimento de sequência de uma sequência para o pixel atual (422). Por exemplo, o codificador de vídeo determina o número de índices de paleta sendo codificados com o índice de paleta do pixel atual.
[0294] O codificador de vídeo também determina um comprimento de sequência máximo para a sequência (424). Por exemplo, o codificador de vídeo pode determinar um comprimento máximo de sequência para uma sequência máxima de índices de paleta capazes de serem codificados com o índice de paleta do pixel atual. Em um exemplo, o codificador de vídeo pode determinar um número de pixels no bloco de dados de vídeo que inclui o pixel. O codificador de vídeo também pode determinar uma posição do pixel atual no bloco com base em uma ordem de digitalização utilizada para digitalizar os índices de paleta. O codificador de vídeo então determina o comprimento máximo de sequência como o número de pixels no bloco menos a posição de pixel do pixel atual menos um.
[0295] O codificador de pixel também codifica dados que indicam o comprimento de sequência da sequência com base no comprimento máximo de sequência determinado (426). Por exemplo, de acordo com os aspectos dessa descrição, o codificador de vídeo pode codificar os dados que indicam o comprimento de sequência utilizando um código TEGk.
[0296] Deve-se reconhecer que dependendo do exemplo, determinados atos ou eventos de qualquer uma das técnicas descritas aqui podem ser realizados em uma sequência diferente, podem ser adicionados, misturados ou deixados de fora por completo (por exemplo, nem todos os atos ou eventos descritos são necessários para a prática das técnicas). Ademais, em determinados exemplos, atos ou eventos podem ser realizados simultaneamente, por exemplo, através do processamento de múltiplas sequências, interrupção de processamento, ou múltiplos processadores, em vez de sequencialmente. Adicionalmente, enquanto determinados aspectos dessa descrição são descritos como sendo realizados por um módulo ou unidade singular para fins de clareza, deve-se compreender que as técnicas dessa descrição podem ser realizadas por uma combinação de unidades ou módulos associados com um codificador de vídeo.
[0297] Determinados aspectos dessa descrição foram descritos com relação ao padrão HEVC em desenvolvimento para fins de ilustração. No entanto, as técnicas descritas nessa 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.
[0298] As técnicas descritas acima podem ser realizadas pelo codificador de vídeo 20 (figuras 1 e 2) e/ou o decodificador de vídeo 30 (figuras 1 e 3), ambos os quais podem ser geralmente referidos como um codificador de vídeo. Da mesma forma, a codificação de vídeo pode se referir à codificação de vídeo ou decodificação de vídeo, como aplicável.
[0299] Enquanto combinações particulares de vários aspectos das técnicas são descritas acima, essas combinações são fornecidas meramente para ilustrar os exemplos das técnicas descritas nessa descrição. De acordo, as técnicas dessa descrição não devem ser limitadas a essas combinações ilustrativas e podem englobar qualquer combinação concebível de vários aspectos das técnicas descritas nessa descrição.
[0300] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer outra combinação dos mesmos. Se implementadas em software, as funções podem ser armazenadas em ou transmitidas como uma ou mais instruções ou código, um meio legível por computador e executadas por uma unidade de processamento com base em hardware. O meio legível por computador pode incluir meio de armazenamento legível por computador, que corresponde a um meio tangível tal como o meio de armazenamento de dados, ou meio 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. Dessa forma, o meio legível por computador pode geralmente corresponder a (1) meio de armazenamento legível por computador tangível que é não transitório ou (2) um meio de comunicação tal como um sinal ou onda portadora. O meio de armazenamento de dados pode ser qualquer meio disponível que possa ser acessado por um ou mais computadores ou um ou mais processadores para recuperar as instruções, código e/ou estruturas de dados para implementação das técnicas descritas nessa descrição. Um produto de programa de computador pode incluir um meio legível por computador.
[0301] Por meio de exemplo, e não de limitação, tal meio de armazenamento legível por computador pode compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento em disco ótico, armazenamento em disco magnético, ou outros dispositivos de armazenamento magnético, memória flash, ou qualquer outro meio que possa ser utilizado para armazenar o código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessado por um computador. Além disso, qualquer conexão é adequadamente chamada de meio legível por computador. Por exemplo, se instruções forem transmitidas a partir de um sítio da rede, servidor ou outra fonte remota utilizando um cabo coaxial, um cabo de fibra ótica, par torcido, linha de assinante digital (DSL), ou tecnologias sem fio tal como infravermelho, rádio e micro-ondas, então o cabo coaxial, o cabo de fibra ótica, o par torcido, DSL, ou tecnologias sem fio tal como infravermelho, rádio e micro-ondas são incluídos na definição de meio. Deve-se compreender, no entanto, que o meio de armazenamento legível por computador e o meio de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outro meio transiente, mas, em vez disso, são direcionados a meio de armazenamento tangível não transiente. Disquete e disco, como utilizados aqui, incluem disco compacto (CD), disco a laser, disco ótico, disco versátil digital (DVD), disquete e disco Blu- ray, onde disquetes normalmente reproduzem os dados magneticamente, enquanto os discos reproduzem os dados oticamente com laser. Combinações do acima também devem ser incluídas no escopo de meio legível por computador.
[0302] Instruções podem ser executadas por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs), microprocessadores de finalidade geral, circuitos integrados específicos de aplicativo (ASICs), conjuntos lógicos programáveis em campo (FPGAs), ou outros conjuntos de circuitos lógicos integrados ou discretos equivalentes. De acordo, o termo "processador", como utilizado aqui pode se referir a qualquer uma das estruturas acima ou qualquer outra estrutura adequada para implementação das técnicas descritas aqui. Adicionalmente, em alguns aspectos, a funcionalidade descrita aqui pode ser fornecida dentro de módulos de hardware e/ou software dedicados configurados para codificar e decodificar, 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.
[0303] As técnicas dessa descrição podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um aparelho sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nessa descrição para enfatizar os aspectos funcionais dos dispositivos configurados para realizar as técnicas descritas, mas não necessariamente exigir 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 codec ou fornecidas por uma coleção de unidades de hardware interoperacionais, incluindo um ou mais processadores como descrito acima, em conjunto com o software e/ou firmware adequado.
[0304] Vários exemplos foram descritos. Esses e outros exemplos estão dentro do escopo das reivindicações a seguir.

Claims (7)

1. Método para processar dados de vídeo, o método compreendendo: determinar um valor de um sinalizador de escape de nível de bloco que indica, para todas as amostras de um bloco de dados de vídeo, se pelo menos uma respectiva amostra do bloco é codificada como uma amostra de escape que tem um valor de cor que não está incluído em uma paleta de cores para codificar o bloco de dados de vídeo, em que o bloco de dados de vídeo compreende uma unidade de codificação (CU) de dados de vídeo, e em que determinar o valor do sinalizador de escape de nível de bloco compreende determinar o valor do sinalizador de escape de nível de bloco para a CU; caracterizado por: condicionalmente codificar o sinalizador de escape de nível de bloco para a CU, com base em um tamanho da CU, em que codificar condicionalmente o sinalizador de escape de nível de bloco para a CU compreende apenas codificar o sinalizador de escape de nível de bloco quando o tamanho da CU ultrapassar um tamanho limite; e codificar o bloco de dados de vídeo com base no valor do sinalizador de escape de nível de bloco.
2. Método, de acordo com a reivindicação 1, caracterizado por compreender adicionalmente: codificar entradas de paleta da paleta para a CU; e codificar o sinalizador de escape de nível de bloco para a CU após codificar as entradas de paleta da paleta.
3. Método, de acordo com a reivindicação 1, caracterizado por compreender adicionalmente: codificar o indicador de escape de nível de bloco para a CU; e codificar entradas de paleta da paleta para a CU após codificar o sinalizador de escape de nível de bloco para a CU.
4. Aparelho para processar dados de vídeo, o aparelho compreendendo: meios para determinar um valor de um sinalizador de escape de nível de bloco que indica, para todas as amostras de um bloco de dados de vídeo, se pelo menos uma respectiva amostra do bloco é codificada como uma amostra de escape que tem um valor de cor que não está incluído em uma paleta de cores para codificar o bloco de dados de vídeo; em que o bloco de dados de vídeo compreende uma unidade de codificação (CU) de dados de vídeo, e em que determinar o valor do sinalizador de escape de nível de bloco compreende determinar o valor do sinalizador de escape de nível de bloco para a CU; caracterizado por: meios para condicionalmente codificar o sinalizador de escape de nível de bloco para a CU, com base em um tamanho da CU, em que codificar condicionalmente o sinalizador de escape de nível de bloco para a CU compreende apenas codificar o sinalizador de escape de nível de bloco quando o tamanho da CU ultrapassar um tamanho limite; e meios codificar o bloco de dados de vídeo com base no valor do sinalizador de escape de nível de bloco.
5. Aparelho, de acordo com a reivindicação 4, caracterizado por compreender adicionalmente: meios para codificar entradas de paleta da paleta para a CU; e meios para codificar o sinalizador de escape de nível de bloco para a CU após codificar as entradas de paleta da paleta.
6. Aparelho, de acordo com a reivindicação 4, caracterizado por compreender adicionalmente: meios para codificar o indicador de escape de nível de bloco para a CU; e meios para codificar entradas de paleta da paleta para a CU após codificar o sinalizador de escape de nível de bloco para a CU.
7. Memória legível por computador caracterizada por possuir 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.
BR112016027384-2A 2014-05-22 2015-05-22 Codificação de amostra de escape em codificação de vídeo com base em paleta BR112016027384B1 (pt)

Applications Claiming Priority (14)

Application Number Priority Date Filing Date Title
US201462002054P 2014-05-22 2014-05-22
US201462010313P 2014-06-10 2014-06-10
US62/010,313 2014-06-10
US201462015240P 2014-06-20 2014-06-20
US62/015,240 2014-06-20
US201462031766P 2014-07-31 2014-07-31
US201462040978P 2014-08-22 2014-08-22
US201562114533P 2015-02-10 2015-02-10
US62/114,533 2015-02-10
US201562115099P 2015-02-11 2015-02-11
US62/115,099 2015-02-11
US14/719,215 2015-05-21
US14/719,215 US10038915B2 (en) 2014-05-22 2015-05-21 Escape sample coding in palette-based video coding
PCT/US2015/032247 WO2015179803A1 (en) 2014-05-22 2015-05-22 Escape sample coding in palette-based video coding

Publications (2)

Publication Number Publication Date
BR112016027384A2 BR112016027384A2 (pt) 2017-08-15
BR112016027384B1 true BR112016027384B1 (pt) 2023-11-28

Family

ID=53488431

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112016027384-2A BR112016027384B1 (pt) 2014-05-22 2015-05-22 Codificação de amostra de escape em codificação de vídeo com base em paleta

Country Status (9)

Country Link
US (1) US10038915B2 (pt)
EP (1) EP3146725B1 (pt)
JP (1) JP6594903B2 (pt)
KR (1) KR102095086B1 (pt)
CN (1) CN106464883B (pt)
BR (1) BR112016027384B1 (pt)
CA (1) CA2945036C (pt)
TW (1) TWI670971B (pt)
WO (1) WO2015179803A1 (pt)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3720132A1 (en) 2013-10-14 2020-10-07 Microsoft Technology Licensing LLC Features of color index map mode for video and image coding and decoding
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
MY175688A (en) * 2014-03-14 2020-07-06 Vid Scale Inc Palette coding for screen content coding
US10750198B2 (en) 2014-05-22 2020-08-18 Qualcomm Incorporated Maximum palette parameters in palette-based video coding
US10264285B2 (en) 2014-05-22 2019-04-16 Qualcomm Incorporated Coding runs in palette-based video coding
US10038915B2 (en) 2014-05-22 2018-07-31 Qualcomm Incorporated Escape sample coding in palette-based video coding
US11323733B2 (en) 2014-05-23 2022-05-03 Qualcomm Incorporated Predictor palette initialization in palette-based video coding
CA2948683C (en) 2014-05-23 2019-05-21 Hfi Innovation Inc. Methods for palette size signaling and conditional palette escape flag signaling
US10382749B2 (en) 2014-05-23 2019-08-13 Qualcomm Incorporated Coding run values based on palette index in palette-based video coding
US10291940B2 (en) 2014-05-23 2019-05-14 Qualcomm Incorporated Coding runs with escape in palette-based video coding
US10136141B2 (en) 2014-06-11 2018-11-20 Qualcomm Incorporated Determining quantization parameter (QP) values and delta QP values for palette coded blocks in video coding
US9924175B2 (en) 2014-06-11 2018-03-20 Qualcomm Incorporated Determining application of deblocking filtering to palette coded blocks in video coding
CN105323583B (zh) 2014-06-13 2019-11-15 财团法人工业技术研究院 编码方法、解码方法、编解码***、编码器与解码器
KR102330740B1 (ko) 2014-09-30 2021-11-23 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 파면 병렬 프로세싱이 인에이블되는 경우의 인트라 픽쳐 예측 모드에 대한 규칙
US9942551B2 (en) * 2015-01-30 2018-04-10 Qualcomm Incorporated Palette index grouping for video coding
WO2016197314A1 (en) * 2015-06-09 2016-12-15 Microsoft Technology Licensing, Llc Robust encoding/decoding of escape-coded pixels in palette mode
KR102518934B1 (ko) * 2016-07-13 2023-04-17 주식회사 엘엑스세미콘 영상데이터 처리 장치, 영상데이터 처리 방법 및 표시장치
US10694202B2 (en) * 2016-12-01 2020-06-23 Qualcomm Incorporated Indication of bilateral filter usage in video coding
US10645408B2 (en) * 2017-09-17 2020-05-05 Google Llc Dual deblocking filter thresholds
US11095876B2 (en) 2018-01-26 2021-08-17 Samsung Electronics Co., Ltd. Image processing device
US11025905B2 (en) * 2018-09-14 2021-06-01 Tencent America LLC Method and device for decoding with palette mode
KR20240028553A (ko) * 2019-01-12 2024-03-05 엘지전자 주식회사 영상 코딩 시스템에서 레지듀얼 정보를 사용하는 영상 디코딩 방법 및 그 장치
US10924750B2 (en) * 2019-03-01 2021-02-16 Alibaba Group Holding Limited Palette size constraint in palette mode for video compression system
US11206413B2 (en) * 2019-08-13 2021-12-21 Qualcomm Incorporated Palette predictor updates for local dual trees
KR20230125862A (ko) * 2019-09-23 2023-08-29 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드 비디오 코딩에서의 양자화 및 역-양자화 디자인을 위한 방법 및 장치

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4568983A (en) 1983-12-07 1986-02-04 The Mead Corporation Image data compression/decompression
US5883678A (en) 1995-09-29 1999-03-16 Kabushiki Kaisha Toshiba Video coding and video decoding apparatus for reducing an alpha-map signal at a controlled reduction ratio
US7155012B2 (en) * 2002-01-02 2006-12-26 Sony Corporation Slice mask and moat pattern partial encryption
US20090010533A1 (en) * 2007-07-05 2009-01-08 Mediatek Inc. Method and apparatus for displaying an encoded image
US8077772B2 (en) * 2007-11-09 2011-12-13 Cisco Technology, Inc. Coding background blocks in video coding that includes coding as skipped
US8705623B2 (en) * 2009-10-02 2014-04-22 Texas Instruments Incorporated Line-based compression for digital image data
US20110142135A1 (en) * 2009-12-14 2011-06-16 Madhukar Budagavi Adaptive Use of Quarter-Pel Motion Compensation
US20130235926A1 (en) * 2012-03-07 2013-09-12 Broadcom Corporation Memory efficient video parameter processing
PL3122048T3 (pl) * 2012-09-26 2018-07-31 Velos Media International Limited Sposób kodowania obrazów oraz urządzenie kodujące obrazy
US11259020B2 (en) 2013-04-05 2022-02-22 Qualcomm Incorporated Determining palettes in palette-based video coding
US9558567B2 (en) 2013-07-12 2017-01-31 Qualcomm Incorporated Palette prediction in palette-based video coding
US10972742B2 (en) 2013-12-19 2021-04-06 Canon Kabushiki Kaisha Encoding process using a palette mode
US10362333B2 (en) * 2014-01-02 2019-07-23 Qualcomm Incorporated Color index coding for palette-based video coding
MY175688A (en) * 2014-03-14 2020-07-06 Vid Scale Inc Palette coding for screen content coding
WO2015143351A1 (en) 2014-03-21 2015-09-24 Futurewei Technologies, Inc. Advanced screen content coding with improved color table and index map coding methods
US10362336B2 (en) 2014-03-25 2019-07-23 Qualcomm Incorporated Palette predictor signaling with run length code for video coding
EP3140987A4 (en) * 2014-05-09 2017-12-06 Nokia Technologies Oy Method and technical equipment for video encoding and decoding using palette coding
US10038915B2 (en) 2014-05-22 2018-07-31 Qualcomm Incorporated Escape sample coding in palette-based video coding
US10264285B2 (en) 2014-05-22 2019-04-16 Qualcomm Incorporated Coding runs in palette-based video coding
US10750198B2 (en) 2014-05-22 2020-08-18 Qualcomm Incorporated Maximum palette parameters in palette-based video coding
US11323733B2 (en) 2014-05-23 2022-05-03 Qualcomm Incorporated Predictor palette initialization in palette-based video coding
US10382749B2 (en) 2014-05-23 2019-08-13 Qualcomm Incorporated Coding run values based on palette index in palette-based video coding
US10291940B2 (en) 2014-05-23 2019-05-14 Qualcomm Incorporated Coding runs with escape in palette-based video coding

Also Published As

Publication number Publication date
KR20170007462A (ko) 2017-01-18
CN106464883B (zh) 2019-04-26
CA2945036A1 (en) 2015-11-26
TW201608880A (zh) 2016-03-01
JP2017520161A (ja) 2017-07-20
KR102095086B1 (ko) 2020-03-30
WO2015179803A1 (en) 2015-11-26
CN106464883A (zh) 2017-02-22
EP3146725A1 (en) 2017-03-29
TWI670971B (zh) 2019-09-01
US20150341660A1 (en) 2015-11-26
CA2945036C (en) 2021-09-14
JP6594903B2 (ja) 2019-10-23
BR112016027384A2 (pt) 2017-08-15
US10038915B2 (en) 2018-07-31
EP3146725B1 (en) 2020-11-25

Similar Documents

Publication Publication Date Title
US10097842B2 (en) Restriction of escape pixel signaled values in palette mode video coding
ES2746072T3 (es) Parámetros de paletas máximos en codificación de vídeo basada en paletas
BR112016027384B1 (pt) Codificação de amostra de escape em codificação de vídeo com base em paleta
ES2677522T3 (es) Series de codificación en codificación de vídeo basada en paleta
JP6541682B2 (ja) ビデオコーディングのためのランレングスコードを用いるパレット予測子シグナリング
US9942551B2 (en) Palette index grouping for video coding
ES2770664T3 (es) Restricción en el tamaño de bloque de paleta en la codificación de vídeo
US10313684B2 (en) Copy from previous rows for palette mode coding
US10158866B2 (en) Parsing dependency reduction for palette index coding
US20160182913A1 (en) Palette mode for subsampling format
BR112016027426B1 (pt) Codificação de valores de curso com base em índice de paleta em codificação de vídeo baseada em paleta
US20160105676A1 (en) Palette run hiding in palette-based video coding
JP2017535134A (ja) ビデオコーディングのためのパレットコーディングモードにおけるエスケープサンプル場所の明示的なシグナリング
US20160366439A1 (en) Palette copy extension
BR112017016371B1 (pt) Agrupamento de índice de paleta para codificação cabac de banda larga

Legal Events

Date Code Title Description
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B350 Update of information on the portal [chapter 15.35 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 22/05/2015, OBSERVADAS AS CONDICOES LEGAIS