BR112015025439B1 - Determinação de índices de paleta em codificação de vídeo baseada em paleta - Google Patents

Determinação de índices de paleta em codificação de vídeo baseada em paleta Download PDF

Info

Publication number
BR112015025439B1
BR112015025439B1 BR112015025439-0A BR112015025439A BR112015025439B1 BR 112015025439 B1 BR112015025439 B1 BR 112015025439B1 BR 112015025439 A BR112015025439 A BR 112015025439A BR 112015025439 B1 BR112015025439 B1 BR 112015025439B1
Authority
BR
Brazil
Prior art keywords
palette
predictor
video
block
inserts
Prior art date
Application number
BR112015025439-0A
Other languages
English (en)
Other versions
BR112015025439A2 (pt
Inventor
Marta Karczewicz
Liwei GUO
Joel Sole Rojals
Rajan Laxman Joshi
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 BR112015025439A2 publication Critical patent/BR112015025439A2/pt
Publication of BR112015025439B1 publication Critical patent/BR112015025439B1/pt

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • H04N19/33Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the spatial domain

Abstract

DETERMINAÇÃO DE ÍNDICES DE PALETA EM CODIFICAÇÃO DE VÍDEO BASEADA EM PALETA. Trata - se, em um exemplo, de um método para codificar dados de vídeo que incluem determinar uma primeira paleta que tem primeiras inserções que indicam primeiros valores de pixel, determinar, com base nas primeiras inserções da primeira paleta, uma ou mais segundas inserções que indicam segundos valores de pixel de uma segunda paleta e codificar pixels de um bloco de dados de vídeo com o uso da segunda paleta.

Description

[0001] Este pedido reivindica o benefício do pedido provisório norte-americano N°. 61/809 236, depositado a 5 de abril de 2013, e do pedido provisório norte-americano N°. 61/810 649, depositado a 10 de abril de 2013 cujos conteúdos inteiros são aqui incorporados à uise de referência.
CAMPO TÉCNICO
[0002] Esta revelação refere-se à codificação e decodificação de vídeo.
ANTECEDENTES
[0003] Capacidade de vídeo digital podem ser incorporadas a uma ampla faixa de aparelhos, televisões digitais, sistemas de broadcast diretos digitais, sistemas de broadcast sem fio, assistentes digitais pessoais (PDAs), computadores laptop ou de mesa, computadores tablet, leitoras de e-book, câmeras digitais, aparelhos de gravação digitais, tocadores de meios digitais, aparelhos para jogos de vídeo, consoles para jogos de vídeo, telefones celulares ou de rádio-satélite, os chamados “telefones inteligentes”, aparelhos de tele-conferência de vídeo, aparelhos de fluxo contínuo de vídeo e semelhantes. Os aparelhos de vias de rodagem digital implementam técnicas de compactação de vídeo, tais como as descritas nos padrões definidos pelo MPEG-2, MPEG-4, ITU-TH 263, ITU-TH 264/MPEG-4, Parte 10, Codificação Avançada de Vídeo (AVC), o padrão de Codificação de Vídeo de Alta Eficácia (HEVC) atualmente em desenvolvimento, e extensões de tais padrões. Os aparelhos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital de maneira mais eficaz pela implementação de tais técnicas de compactação de vídeo.
[0004] As técnicas de compactação de vídeo efetuam predição espacial (intra-imagem) e/ou predição temporal (inter-imagem) para reduzir ou remover a redundância inerente a sequências de vídeo. Para codificação de vídeo baseada em blocos, uma fatia de vídeo, isto é, um padrão de vídeo ou uma parte de um quadro de vídeo pode ser particionada em blocos de vídeo. Os blocos de vídeo em uma fatia intra-codificada (I) de uma imagem são codificados utilizando-se predição espacial com relação a amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia intra-codificada (P ou B), de uma imagem podem utilizar predição espacial com relação a amostras de referência em blocos vizinhos na mesma imagem ou predição temporal com relação a amostras de referência em outras imagens de referência. Imagens podem ser referidas como quadros e imagens de referência podem ser referidas como quadros de referência.
[0005] A predição espacial ou temporal resulta em um bloco preditivo a um bloco a ser codificado. Dados residuais representam definições de pixel entre o bloco original a ser codificado e o bloco preditivo. Um bloco inter-codificado é codificado de acordo com um vetor de movimento que indica um bloco de amostras de referência que formam o bloco preditivo. E os dados residuais indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco intra-codificado é codificado de acordo com um modo intra-codificação e os dados residuais. Para compactação adicional, os dados residuais podem ser transformados do domínio de pixel no domínio de transformada, do que resultam coeficientes de residuais, que podem ser então quantificados. Os coeficientes de quantificados, inicialmente dispostos em um arranjo bidimensional podem ser varridos de modo a se para produzir um vetor unidimensional de coeficientes, e a codificação por entropia pode ser aplicada de modo a se obter uma compactação ainda maior.
[0006] Um fluxo de bits de codificação de várias vistas pode ser gerado por vistas de codificação, como, por exemplo, a partir de várias perspectivas. Foram desenvolvidos alguns padrões de vídeo tridimensionais (3D) que faze uso de aspectos de codificação de várias vistas. Por exemplo, vistas diferentes podem transmitir vistas do olho esquerdo e direito para suportar vídeo 3D. Alternativamente, alguns processos de codificação de vídeo 3D podem aplicar as chamadas várias vistas mais a codificação de profundidade. Nas várias vistas mais codificação de profundidade, um fluxo de bits 3D pode conter não apenas componentes de vista de textura, mas também componentes de vista em profundidade. Por exemplo, cada vista pode compreender um componente de vista de textura e um componente de vista em profundidade.
SUMÁRIO
[0007] As técnicas desta revelação referem-se à codificação de vídeo baseada em paleta. Por exemplo, em codificação baseada em paleta, um codificador de vídeo (um codificador de vídeo ou decodificador de vídeo) pode formar a chamada “paleta” como uma tabela de cores para representar os dados de vídeo da área específica (um dado bloco, por exemplo). A codificação baseada em paleta pode ser especialmente útil para codificar áreas de dados de vídeo que têm um número relativamente pequeno de cores. Em vez da codificação de valores de pixel reais (ou seus resíduos), o codificador de vídeo pode codificar valores de índice para um ou mais dos pixels que relacionam os pixels com entradas na paleta que representam as cores dos pixels. Uma paleta pode ser explicitamente codificada e enviada ao decodificador, predita a partir de entradas de paletas anteriores ou uma combinação deles. As técnicas descritas nesta revelação podem incluir técnicas para diversas combinações de um ou mais de modos de codificação baseados em paleta de sinalização, paletas de codificação, paletas de predição, paletas de derivação e mapas de codificação baseados em paletas de codificação e outros elementos de sintaxe.
[0008] Em um exemplo, um método para codificar dados de vídeo inclui determinar uma primeira paleta que tem primeiras entradas que indicam primeiros valores de pixel, determinar, com base nas primeiras entradas da primeira paleta, uma ou mais segundas entradas que indicam segundos valores de pixel de uma segunda paleta e codificar pixels de um bloco de dados de vídeo utilizando-se a segunda paleta.
[0009] Em outro exemplo, um equipamento para codificar dados de vídeo inclui uma memória que armazena dados de vídeo e um ou mais processadores configurados para determinar uma primeira paleta que têm primeiras entradas que indicam primeiros valores de pixel, determinar, com base nas primeiras entradas da primeira paleta, uma ou mais segundas entradas que indicam segundos valores de pixel de uma primeira paleta e codificar os pixels de um bloco dos dados de vídeo utilizando a segunda paleta.
[0010] Em outro exemplo, um equipamento para codificar dados de vídeo inclui um dispositivo para determinar uma primeira paleta que tem primeiras entradas que indicam primeiros valores de pixel, um dispositivo para determinar, com base nas primeiras entradas da primeira paleta, uma ou mais segundas entradas que indicam segundos valores de pixel de uma segunda paleta e um dispositivo para codificar os pixels de um bloco de dados de vídeo utilizando a segunda paleta.
[0011] Em outro exemplo, um meio passível de leitura por computador não transitório armazena instruções nele que, quando executadas fazem com que um ou mais processadores determinem uma primeira paleta que tem primeiras entradas que indicam primeiros valores de pixel, determinem, com base nas primeiras entradas da primeira paleta uma ou mais segundas entradas que indicam segundos valores de pixel de uma segunda paleta e codifiquem os pixels de um bloco dos dados de vídeo utilizando a segunda paleta.
[0012] Em outro exemplo, um método para codificar dados de vídeo inclui determinar um primeiro valor de índice associado a um primeiro pixel em um bloco de dados de vídeo, no qual o primeiro valor de índice refere a posição do primeiro pixel a uma entrada de uma paleta de valores de pixel, determinar, com base no primeiro valor de índice, um ou mais segundos valores de índice associados a um ou mais segundos pixels no bloco de dados de vídeo, no qual os segundos valores de índice referem à posição do pixel ou do segundo ou segundos pixels a uma ou mais entradas da paleta de valores de pixel, e codificar o primeiro pixel e/ou segundo ou segundos pixels dos dados de vídeo decodificados.
[0013] Em outro exemplo, um equipamento para codificar dados de vídeo decodificados inclui uma memória que armazena dados de vídeo e um ou mais processadores configurados para determinar um primeiro valor de índice, associado a um primeiro pixel em um bloco de dados de vídeo, no qual o primeiro valor de índice refere a posição do primeiro pixel a uma entrada de uma paleta de valores de pixel, determinar, com base no primeiro valor de índice um ou mais segundos valores de índice associados a um ou mais segundos pixels no bloco de dados de vídeo, no qual os segundos valores de índice referem às posições do segundo ou segundos pixels a uma ou mais entradas da paleta de valores de pixel e codificar o primeiro pixel e o segundo ou segundos pixels do bloco de dados de vídeo.
[0014] Em outro exemplo, um equipamento para codificar dados de vídeo inclui um dispositivo para determinar um primeiro valor de índice associado a um primeiro pixel em um bloco de dados de vídeo, no qual o primeiro valor de índice relaciona à posição do primeiro pixel a uma entrada de uma paleta de valores de pixel, um dispositivo para determinar, com base no primeiro valor de índice, um ou mais segundos valores de índice associados a um ou mais segundos pixels no bloco de dados de vídeo, no qual os segundos valores de índice relacionam as posições do segundo ou segundos pixels a uma ou mais entradas da paleta de valores de pixel, e um dispositivo para codificar o primeiro pixel e o segundo ou segundos pixels do bloco de dados de vídeo.
[0015] Em outro exemplo, um meio passível de leitura por computador não transitório armazena instruções nele que, quando executadas fazem com que um ou mais processadores determinem um primeiro valor de índice associado a um primeiro pixel em um bloco dos dados de vídeo, no qual o primeiro valor de índice relaciona a posição do primeiro pixel a uma entrada de uma paleta de valores de pixel, determinem, com base no primeiro valor de índice, um ou mais segundos valores de índice associados a um ou mais segundos pixels no bloco de dados de vídeo, no qual os segundos valores de índice relacionam as posições do segundo ou segundos pixels a uma ou mais entradas da paleta de valores de pixel, e codifiquem o primeiro pixel e o segundo ou segundos pixels do bloco de dados de vídeo.
[0016] Os detalhes de um ou mais exemplos da revelação são apresentados nos desenhos anexos e na descrição que se segue. Outros recursos, objetos e vantagens serão evidentes com a descrição, os desenhos as reivindicações.
DESCRIÇÃO RESUMIDA DOS DESENHOS
[0017] A Figura 1 é um diagrama de blocos que mostra um sistema de codificação de vídeo exemplar que pode utilizar as técnicas descritas nesta revelação.
[0018] A Figura 2 é um diagrama de blocos que mostra um codificador de vídeo exemplar que pode implementar as técnicas descritas nesta revelação.
[0019] A Figura 3 é um diagrama de blocos que mostra um decodificador de vídeo armazenar que pode implementar as técnicas descritas nesta revelação.
[0020] A Figura 4 é um diagrama conceptual que mostra um exemplo de determinação de uma paleta para codificar dados de vídeo, compatível com as técnicas desta revelação.
[0021] A Figura 5 é um diagrama conceptual que mostra um exemplo de determinação de índices para uma paleta para um bloco de pixels, compatível com as técnicas desta revelação.
[0022] A Figura 6 é um fluxograma que mostra um processo exemplar para codificar dados de vídeo que utiliza um modo de codificação de paleta, compatível com as técnicas desta revelação.
[0023] A Figura 7 é um fluxograma que mostra um processo exemplar para determinar uma paleta em codificação baseada em paleta, compatível com os princípios desta revelação.
[0024] A Figura 8 é um fluxograma que mostra um processo exemplar pode determinar índices de um bloco de dados de vídeo em codificação de vídeo baseada em paleta, compatível com as técnicas desta revelação.
DESCRIÇÃO DETALHADA
[0025] Esta revelação inclui técnicas para codificação e compactação de vídeo. Em particular, esta revelação descreve técnicas para codificação baseada em paleta de dados de vídeo. Na codificação de vídeo tradicional supõe-se que as imagens sejam de tom contínuo e espacialmente uniformes. Com base nesta suposição, foram desenvolvidas diversas ferramentas, tais como transformada baseada em bloco, filtragem, etc.; e tais ferramentas mostraram bom desempenho para vídeos de conteúdo natural.
[0026] Em aplicativos como desktop remoto, o trabalho em colaboração e a exibição e monitores sem fio, conteúdo em tela gerado por computador (como, por exemplo, tais como gráficos de computador de texto) podem ser o conteúdo dominante a ser compactado. Este tipo de conteúdo tende a ter linhas agudas de recursos e tom discreto e fronteiras entre objetos de alto-contraste. A suposição de tom contínuo e uniformidade pode não aplicar-se mais para conteúdo em tela, e assim, as técnicas de codificação de vídeo tradicionais podem não ser modos eficazes de compactar dados de vídeo que incluem conteúdo em tela.
[0027] Esta revelação descreve codificação baseada em paleta, que pode ser particularmente adequada para codificação de conteúdo gerado em tela. Por exemplo, suponha-se uma área específica de dados de vídeo tenha um número relativamente pequeno de cores. Um codificador de vídeo (um codificador de vídeo ou um decodificador de vídeo) pode formar a chamada “paleta” como uma tabela de cores para representar os dados de vídeo da área específica (um dado bloco, por exemplo). Cada pixel pode ser associado a uma entrada 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 apropriado na paleta.
[0028] No exemplo acima, um codificador de vídeo pode codificar um bloco de dados de vídeo determinando um paleta para o bloco (codificar a paleta explicitamente, predizê-la ou uma combinação deles. Localizar uma entrada na paleta para representar o valor de cada pixel e codificar o bloco com valores de índice para os pixels referentes que relacionam o valor de pixel à paleta. Um decodificador de vídeo pode obter, de um fluxo de bits codificado, uma paleta para um bloco, assim como valores de índice para os pixels do bloco. O decodificador de vídeo pode relacionar os valores de índice dos pixels a entradas da paleta de modo a reconstruir os valores de pixel do bloco.
[0029] O exemplo acima destina-se a apresentar uma descrição geral da codificação baseada em paleta. Em diversos exemplos, as técnicas descritas nesta revelação podem incluir técnicas para diversas combinações de um ou mais modos de codificação baseada em paleta de sinalização, transmitir paletas, par predizer paletas, derivar paletas e transmitir mapas de codificação baseados em paleta e outros elementos de sintaxe. Tais técnicas podem aperfeiçoar a e eficácia de codificação de vídeo, como, por exemplo, exigindo menos bits para representar conteúdo gerado em tela.
[0030] As técnicas para codificação baseada em paleta de dados de vídeo podem ser utilizadas com uma ou mais técnicas de codificação, tais como técnicas para codificação inter- ou intra-preditiva. Por exemplo, conforme descrito mais detalhadamente em seguida, um codificador ou decodificador, ou codificador-decodificador combinados (codec), pode ser configurado para efetuar codificação inter- e intra-preditiva, assim como codificação baseada em paleta.
[0031] Em alguns exemplos, as técnicas de codificação baseadas em paleta podem ser configuradas para utilização com um ou mais padrões de codificação de vídeo. Por exemplo, a Codificação de Vídeo de Alta Eficácia (HEVC) é um novo padrão de codificação de vídeo 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 (VCE) ITU-T e do Grupo de Especialistas em Imagens em Movimento (MPEG) ISO/TEC. Um rascunho de especificação de texto HEVC recente é descrito em Bross ET ALLI “Rascunho de Especificação de Texto de Codificação de Vídeo de Alta Eficácia (HEVC) 10 (para FDIS & Consent)”, JVCV-L1003_v13, 12o. Encontro de JCT-VC do ITU-T SG16 WP 3 e ISO/TEC JCT 1/SC 29/WG 11, 14 23 de junho de 2013 (“Rascunho HEVC 10”), disponível de:http//:phenix.int-evry.fr/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC- L1003-v13.zip.
[0032] Com relação à estrutura HEVC, como exemplo, as técnicas de codificação baseadas 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 baseada em paleta podem ser configuradas para serem utilizadas como um modo de PU na estrutura da HEVC. Por conseguinte, todos os processos revelados seguintes, descritos no contexto de um modo de CU podem, adicional ou alternativamente, aplicar-se à PU. Entretanto, estes exemplos baseados na HEVC não devem ser considerados uma restrição ou limitação das técnicas de codificação baseadas em paleta aqui descritas, uma vez que tais técnicas podem ser aplicadas para funcionar de maneira independente ou como parte de outros sistemas/padrões existentes ou ainda a serem desenvolvidos. Nestes casos, a unidade para codificação baseada em paleta pode consistir em blocos quadrados, blocos retangulares ou até mesmo regiões de conformação não retangular.
[0033] A Figura 1 é um diagrama de blocos que mostra um sistema de codificação de vídeo 10 exemplar que pode utilizar as técnicas desta revelação. Conforme aqui utilizado, o termo “codificador de vídeo” refere-se de maneira geral tanto a codificadores de vídeo quanto a decodificadores de vídeo. Nesta revelação, os termos “codificação de vídeo” e “codificação” podem referir-se genericamente à codificação de vídeo ou decodificação de vídeo. O codificador de vídeo 20 e o decodificador de vídeo 30 do sistema de codificação de vídeo 10 representam exemplos de aparelhos que podem ser configurados para executar técnicas para codificação de vídeo baseada em paleta de acordo com diversos exemplos descritos nesta revelação. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar seletivamente diversos blocos de dados de vídeo, tais como CUs ou PUs, a codificação HEVC, utilizando-se ou codificação baseada em paleta ou codificação não baseada em paleta. Os modos de codificação não baseada em paleta podem referir-se a diversos modos de codificação temporal intra- preditiva ou modos de codificação espacial intra-preditiva tais como os diversos modos de codificação especificados pelo Rascunho HEVC 10.
[0034] Conforme mostrado na Figura 1, o sistema de codificação de vídeo 10 inclui um aparelho de origem 12 e um aparelho de destino 14. O aparelho de origem 12 gera dados de vídeo codificados. Por conseguinte, o aparelho de origem 12 pode ser referido como aparelho de codificação de vídeo ou equipamento de codificação de vídeo. O aparelho de destino 14 pode decodificar os dados de vídeo codificados gerados pelo aparelho de origem 12. Por conseguinte, o aparelho de destino 14 pode ser referido como aparelho de decodificação de vídeo ou equipamento de decodificação de vídeo. O aparelho de origem 12 e o aparelho de destino 14 podem ser exemplos de aparelhos de codificação de vídeo ou equipamentos de codificação de vídeo.
[0035] O aparelho de origem 12 e o aparelho de destino 14 podem compreender uma ampla faixa de aparelhos, inclusive computadores de mesa, aparelhos de computação móveis, computadores notebook (laptop, por exemplo), computadores tablet, conversores set-top box, aparelhos telefônicos, tais como os chamados “telefones inteligentes”, televisões, câmeras, aparelhos de exibição, tocadores de meios digitais, consoles para jogos de vídeo, computadores em carros ou semelhantes.
[0036] O aparelho de destino 14 pode receber dados de vídeo codificados do aparelho de origem 12 por meio de um canal 16. O canal 16 pode compreender um ou mais meios ou aparelhos capazes de mover os dados de vídeo codificados do aparelho de origem 12 para o aparelho de destino 14. Em um exemplo, o canal 16 pode compreender um ou mais meios de comunicação que permitem que o aparelho de origem 12 transmita dados de vídeo codificados diretamente para o aparelho de destino 14 em tempo real. Neste exemplo, o aparelho de origem 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 aparelho de destino 14. O meio ou meios de comunicação podem incluir meios de comunicação sem fio e/ou cabeados, tais como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão físicas. O meio ou meios de comunicação podem fazer parte de uma rede baseada em pacotes, tal como uma rede de área local, uma rede de área estendida ou uma rede global (a Internet, por exemplo). Os meio ou meios de comunicação podem incluir roteadores, comutadores, estações-base ou outros equipamentos que facilitem a comunicação do aparelho de origem 12 com o aparelho de destino 14.
[0037] Em outro exemplo, o canal 16 pode incluir um meio de armazenamento que armazena os dados de vídeo codificados gerados pelo aparelho de origem 12. Neste exemplo, o aparelho de destino 14 pode acessar o meio de armazenamento por meio de acesso a disco ou acesso a cartão. O meio de armazenamento pode incluir diversos meios de armazenamento de dados acessados localmente, tais como discos Blu-ray, DVDs, CD-ROMs, memória flash ou outros meios de armazenamento digital adequados para armazenar dados de vídeo codificados.
[0038] Em outro exemplo, o canal 16 pode incluir um servidor de arquivos ou outro aparelho de armazenamento intermediário que armazena dados de vídeo codificados gerados pelo aparelho de origem 12. Neste exemplo, o aparelho de destino 14 pode acessar dados de vídeo codificados armazenados no servidor de arquivos ou outro aparelho de armazenamento intermediário por meio de fluxo contínuo ou download. O servidor de arquivos pode ser um tipo de servidor capaz de armazenar dados de vídeo codificados e transmitir os dados de vídeo codificados para o aparelho de destino 14. Servidores de arquivos exemplares incluem servidores da Web (para um site da Web, por exemplo), servidores de protocolo de transferência de arquivos (FTP) aparelhos de armazenamento anexados à rede (NAS) e unidades de disco locais.
[0039] O aparelho de destino 14 pode acessar os dados de vídeo codificados através de um conexão de dados padrão, tal como uma conexão com a Internet. Tipos exemplares de conexão de dados podem incluir canais sem fio (conexões WiFi, por exemplo), conexões cabeadas (como, por exemplo, DSL, modem a cabo, etc.) ou combinação de ambos que sejam adequadas para acessar dados de vídeo codificados armazenados em um servidor de arquivos. A transmissão de dados de vídeo codificados do servidor de arquivos pode ser uma transmissão de fluxo contínuo, uma transmissão de download ou uma comunicação de ambas.
[0040] As técnicas desta revelação não estão limitadas a aplicativos ou configurações sem fio. As técnicas podem ser aplicadas à codificação de vídeo em suporte a diversos aplicativos de multimídia, tais como broadcast de televisão através do anterior, transmissão de televisão a cabo, transmissão de televisão por satélite, transmissão de vídeo de fluxo contínuo, como, por exemplo, por meio 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 decodificados 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 unidimensional ou bidimensional para suporte de aplicativos tais como fluxo contínuo de vídeo, repetição de vídeo, execução de broadcasts de vídeo e/ou telefonia com vídeo.
[0041] A Figura 1 é meramente um exemplo e as técnicas desta revelação pode aplicar-se a configurações de codificação de vídeo (codificação de vídeo ou decodificação de vídeo, por exemplo), que não incluem necessariamente qualquer comunicação de dados entre os aparelhos de codificação e decodificação. Em outro exemplo, os dados são recuperados de uma memória local, transmitidos em fluxo contínuo através de uma rede ou semelhantes. Um aparelho de codificação de vídeo pode codificar e armazenar dados em uma memória e/ou um aparelho de decodificação de vídeo pode recuperar e decodificar dados de uma memória. Em muitos exemplos, a codificação e a decodificação são efetuadas por aparelhos que não se comu8nicam unx com ou outros, mas simplesmente codificam dados na memória e/ou recuperam e decodificam dados da memória.
[0042] No exemplo da Figura 1, o aparelho de origem 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 aparelho de captação de vídeo, como, por exemplo, uma câmera de vídeo, um arquivo de vídeo que contém dados de vídeo previamente captados, uma interface de alimentação de vídeo para receber dados de vídeo de um provedor de conteúdos de vídeo e/ou um sistema de gráficos de computador para gerar dados de vídeo ou uma combinação de tais fontes de dados de vídeo.
[0043] O codificador de vídeo 20 pode codificar dados de vídeo da fonte de vídeo 18. Em alguns exemplos, o aparelho de origem 12 transmite diretamente os dados de vídeo codificados para o aparelho de destino 14 por meio da interface de saída 22. Em outros exemplos, os dados de vídeo codificados podem ser também armazenados em um meio de armazenamento ou em um servidor de arquivos para acesso posterior pelo aparelho de destino 14 para decodificação e/ou repetição.
[0044] No exemplo da Figura 1, o aparelho de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30 e um aparelho 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 aparelho de exibição 32 pode ser integrado como o ou pode ser externo ao aparelho de destino 14. Em geral, o aparelho de exibição 32 exibe dados de vídeo decodificados. O aparelho de exibição 32 pode compreender diversos aparelhos de exibição tais como uma tela de cristal líquido (LCD), uma tela de plasma, uma tela de diodo emissor de luz orgânico (OLED) ou outro tipo de aparelho de exibição.
[0045] Esta revelação pode referir-se a um codificador de vídeo 20 que “sinaliza” ou transmite determinadas informações para outro aparelho, tal como o decodificador de vídeo 30. O termo “sinalizar” ou “transmitir” pode referir-se de maneira geral à comunicação de elementos de sintaxe e/ou outros dados utilizados para decodificar os dados de vídeo compactados. Tal comunicação pode ocorrer em tempo real ou em tempo quase real. Alternativamente, tal comunicação pode ocorrer dentro de uma extensão de tempo, tal como pode ocorrer quando se armazenam elementos de sintaxe em um meio de armazenamento passível de leitura por computador em um fluxo de bits codificado no momento da codificação, que pode ser então recuperado por um aparelho de decodificação em qualquer momento depois de ser armazenado neste meio. Assim, embora o decodificador de vídeo 30 possa ser referido como “recebendo” determinadas informações, o recebimento de informações não ocorre necessariamente em tempo real ou quase real e pode ser recuperado de um meio em algum momento após o armazenamento.
[0046]. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser, cada um, implementados como qualquer um de diversos circuitos adequados, tais como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados específicos de aplicativo (ASICs), arranjos de portas programáveis no campo (FPGAs), lógica discreta, hardware ou quaisquer combinações deles. Se as técnicas forem implementadas parcialmente em software, um aparelho pode armazenar instruções para o software em um meio de armazenamento passível de leitura por computador não transitório adequado e pode executar as instruções em hardware utilizando um ou mais processadores para executar as técnicas desta revelação. Qualquer um dos elementos precedentes (inclusive hardware, software, uma combinação de hardware e software, etc.) pode ser considerado como um ou mais processadores. Cada um do codificador de vídeo 20 e decodificador de vídeo 30 pode ser incluído em um ou mais codificadores ou decodificadores, cada um dos quais pode ser integrado como parte de um codificador/decodificador (CODEC) combinados em um respectivo aparelho.
[0047] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 funcionam de acordo com um padrão de compactação de vídeo, tal como o padrão HEVC mencionado acima e descrito no Rascunho HEVC 10. Além do padrão HEVC base há esforços em andamento para produzir codificação de vídeo escalonável, codificação de vídeo de várias vistas e extensões de codificação 3D para a HEVC. Além disto, modos de codificação baseada em paleta, como, por exemplo, descritos nesta revelação, podem ser apresentados para extensão do padrão HEVC. Em alguns exemplos, as técnicas descritas nesta revelação para codificação baseada em paleta podem ser aplicadas a codificadores e decodificadores configurados para funcionar de acordo com outros padrões de codificação de vídeo tais como o padrão ITU-T-H.264/AVC ou padrões futuros. Por conseguinte, a aplicação de um modo de codificação baseado em paleta para codificação de unidades de codificação (CUs) ou unidades de predição (PUs) em um codec HEVC é descrita com fins de exemplificação.
[0048] Na HEVC e em outros padrões de codificação de vídeo, uma sequência de vídeo inclui tipicamente uma série de imagens. As imagens podem ser também referidas como “quadros”. Uma imagem pode incluir três arranjos de amostra, denotados como Sl, SCb e SCr. Sl é um arranjo bidimensional (isto é, um bloco) de amostras luma. Scb é um arranjo bidimensional de amostras de crominância CB. SCr é um arranjo bidimensional de amostras de crominância Cr. As amostras de crominância podem ser também aqui referidas como amostras “croma”. Em outros casos, uma imagem pode ser monocromática e pode incluir apenas um arranjo de amostras luma.
[0049] 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 ser um bloco de árvore de codificação de amostras luma, dos blocos de árvore de codificação correspondentes de amostras croma e estruturas de sintaxe utilizadas para codificar as amostras do blocos de árvore de codificação. Um bloco de árvore de codificação pode ser um bloco NxN de amostras. Uma CTU pode ser também referida como “bloco de árvore” ou “maior unidade de codificação” (LCU). As CTUs da HEVC podem ser amplamente análogas aos macroblocos de outros padrões, tais como o H.264/AVC. Entretanto, uma CTU não está necessariamente limitada a um tamanho específico e pode incluir uma ou mais unidades de codificação (CUs). Uma fatia pode incluir um número inteiro de CTUs ordenadas consecutivamente na varredura de rastreamento.
[0050] Uma fatia codificada pode compreender um cabeçalho de fatia e dados de fatia. O cabeçalho de fatia de um a fatia pode ser uma sistema de sintaxe que inclui elementos de sintaxe que fornecem informações sobre a fatia. Os dados de fatia podem incluir CTUs codificadas da fatia.
[0051] Esta revelação pode utilizar o termo “unidade de vídeo” ou “bloco de vídeo” ou “bloco” para referir-se a um ou mais blocos de amostras e elementos de sintaxe utilizadas para codificar amostras do bloco ou blocos de amostras. Tipos exemplares de unidades ou blocos de vídeo podem incluir CTUs, CUs, PUs, unidades de transformada (TUs), macroblocos, partições de macrobloco e assim por diante. Em alguns contextos, a discussão de PUs pode ser intercambiada com a discussão de macroblocos ou partições de macrobloco.
[0052] Para gerar uma CTU codificada, o codificador de vídeo 20 pode efetuar recurssivamente particionamento de transformação quadtree nos blocos de árvore de codificação de uma CTU de modo a dividir os blocos de árvore de codificação em blocos de codificação, daí o nome de “unidades de árvore de codificação”. Um bloco de codificação é um bloco NxN de amostras. Uma CU pode ser um bloco de codificação de amostras luma e dois blocos de codificação correspondentes de amostras croma de uma imagem que tem um arranjo de amostra luma, um arranjo de amostra Cd com um arranjo de amostras Cr e estruturas de sintaxe utilizadas para codificar as amostras dos blocos de codificação. O codificador de vídeo 20 pode particionar um bloco de codificação de uma CU em um ou mais blocos de predição. Um bloco de predição pode ser um bloco retangular (isto é, quadrado ou não quadrado) da amostras no qual a mesma predição é aplicada. Uma unidade de predição (PU) de uma CU pode ser um bloco de predição de amostras luma, dois blocos de predição correspondentes de amostras croma de uma imagem e elementos de sintaxe utilizadas para predizer as amostras do bloco de predição. O codificador de vídeo 20 pode gerar luma preditiva, blocos Cb e Cr para a luma, blocos de predição Cb e Cr de cada PU da CU.
[0053] O codificador de vídeo 20 pode utilizar intra-predição ou inter-predição para gerar os blocos preditivos para uma PU. Se o codificador de vídeo 20 utilizar intra-predição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar um blocos preditivos da PU com base em amostras decodificadas da imagem associada à PU.
[0054] Se o codificador de vídeo 20 utilizar inter-predição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar os blocos preditivos da PU com base em amostras decodificadas de um ou mais imagens outras que não a imagem associada à PU. O codificador de vídeo 20 pode utilizar uni-predição ou bi-predição para gerar os blocos preditivos de uma PU. Quando o codificador de vídeo 20 utiliza uni-predição para gerar os blocos preditivos para uma PU, a PU pode ter um único MV. Quando o codificador de vídeo 20 utiliza bi-predição para gerar os blocos preditivos para uma PU, a PU pode ter dois MVs.
[0055] Depois que o codificador de vídeo 20 gerar luma preditiva, blocos Cb e Cr para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar um bloco residual luma para a CU. Cada amostra no bloco residual luma da CU indica a diferença entre uma amostra luma em um dos blocos luma preditivos da CU e uma amostra correspondente no bloco de codificação luma original da CU. Além disto, 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 a diferença entre uma amostra Cb em um dos blocos Cb preditivos da CU e uma amostra correspondente no bloco de codificação Cb original da CU. O codificador de vídeo 20 pode gerar também um bloco residual Cr para a CU. Cada amostra no bloco residual Cr da CU pode indicar a diferença entre uma amostra Cr em um dos blocos Cr preditivos da CU e uma amostra correspondente no bloco de codificação Cr original da CU.
[0056] Além disso, o codificador de vídeo 20 pode utilizar particionamento de transformação quadtree para decompor a luma, blocos residuais Cb e Cr de uma CU em uma ou mais luma, blocos de transformada Cb e Cr. Um bloco de transformada pode ser um bloco retangular de amostras no qual a mesma transformada aplicada. Uma unidade de transformada (TU) de uma CU pode ser um bloco de transformada de amostras luma, dos blocos de transformada correspondentes de amostras croma e estruturas de sintaxe utilizadas para transformar as amostras dos blocos de transformada. Assim, cada TU de uma CU pode ser associada a um bloco de transformada luma, um bloco de transformada Cb e um bloco de transformada Cr. O bloco de transformada luma associado à TU pode ser um sub-bloco do bloco residual luma da CU. O bloco de transformada Cb pode ser um sub-bloco do bloco residual Cb da CU. O bloco de transformada Cr pode ser um sub-bloco do bloco residual Cr da CU.
[0057] O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada luma de uma TU de modo a gerar um bloco de coeficiente luma para a TU. Um bloco de coeficiente pode ser um arranjo bidimensional de coeficientes de transformada. Um coeficiente de transformada pode ser uma quantidade escalar. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada Cb de uma TU de modo a gerar um bloco de coeficientes Cb para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada Cr de uma TU de modo a gerar um bloco de coeficientes Cr para a TU.
[0058] Depois de gerar um bloco de coeficientes (um bloco de coeficientes luma, um bloco de coeficientes Cb ou um bloco de coeficientes Cr, por exemplo), o codificador de vídeo 20 pode quantificar o bloco de coeficientes. A quantificação refere-se de maneira geral a um processo no qual coeficientes de transformada são quantificados para reduzir possivelmente a quantidade de dados utilizados para representar os coeficientes de transformada, obtendo-se compactação adicional. Depois que o codificador de vídeo 20 quantifica um bloco de coeficientes, o codificador de vídeo 20 pode codificar por entropia elementos de sintaxe que indicam os coeficientes de transformada quantificados. Por exemplo, o codificador de vídeo 20 pode efetuar Codificação Aritmética Binária Adaptativa ao Contexto (CABAC) nos elementos de sintaxe que indicam os coeficientes de transformada quantificados. O codificador de vídeo 20 pode transmitir os elementos de sintaxe codificados por entropia em um fluxo de bits.
[0059] O codificador de vídeo 20 pode transmitir um fluxo de bits que inclui os elementos de sintaxe codificados por entropia. O fluxo de bits pode incluir uma sequência de bits que forma uma representação de imagens codificadas e dados conexos. O fluxo de bits pode compreender uma sequência de unidades de camadas 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 bytes brutos (RBSP). O cabeçalho de unidade NAL pode incluir um elemento de sintaxe que indica um código do tipo de unidade NAL. O código do tipo de unidade NAL especificado pelo cabeçalho de unidade NAL de uma unidade NAL indica o tipo da unidade NAL. Uma BRSP pode ser uma estrutura de sintaxe que contém um número inteiro de bytes que é encapsulado dentro de uma unidade NAL. Em alguns casos, uma RBSP inclui 0 bit.
[0060] Tipos diferentes de unidades NAL podem encapsular tipos diferentes de RBSP. Por exemplo, um primeiro tipo de unidade NAL pode encapsular uma RBSP para um conjunto de parâmetros de imagem (PPS), um segundo tipo de unidade NAL pode encapsular uma RPSP para uma fatia codificada, um terceiro tipo de unidade NAL pode encapsular uma 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 e mensagens SEI) podem ser referidas como unidades NAL de camada de codificação de vídeo (VCL).
[0061] O decodificador de vídeo 30 pode receber um fluxo de bits gerado pelo codificador de vídeo 20. Além disto, o decodificador de vídeo 30 pode efetuar parse no fluxo de bits de modo a decodificar elementos de sintaxe do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base, pelo menos em parte, nos elementos de sintaxe decodificados a partir do fluxo de bits. O processador para reconstruir os dados de vídeo pode ser geralmente complementar ao processador executado pelo codificador de vídeo 20.
[0062] Por exemplo, o decodificador de vídeo 30 pode utilizar MVs de PUs para determinar blocos de amostra preditivos para as PUs da CU atual. Além disto, o decodificador de vídeo 20 pode quantificar por inversão blocos de coeficiente de transformada associados a TUs da CU atual. O decodificador de vídeo 30 pode efetuar transformadas inversas nos blocos de coeficiente de transformada de modo a reconstruir os blocos de transformada associados as TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de codificação da CU atual adicionando as amostras dos blocos de amostra preditivos para as PUs da CU atual às amostras correspondentes dos blocos de transformada das TUs da CU atual. Reconstruindo os blocos de codificação para cada CU de uma imagem, o decodificador de vídeo 30 pode reconstruir a imagem.
[0063] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para efetuar codificação baseada em paleta. Por exemplo, na codificação baseada em paleta, em vez de executar técnicas de codificação intra-preditiva ou inter- preditiva descritas acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar a chamada paleta como uma tabela de cores para representar os dados de vídeo da área específica (um dado bloco, por exemplo). Cada pixel pode ser associado a uma entrada 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 uma índice que relaciona o valor de pixel ao valor apropriado na paleta.
[0064] No exemplo acima, o codificador de vídeo 20 pode codificar um bloco de dados de vídeo determinando uma paleta para o bloco, localizando uma entrada na paleta para representar o valor de cada pixel e codificando a paleta com valores de índice para os pixels que relacionam o valor de pixel com a paleta. O decodificador de vídeo 30 pode obter, de um fluxo de bits codificado, uma paleta para um bloco, assim como, valores de índice para os pixels do bloco. O decodificador de vídeo 30 pode relacionar os valores de índice dos pixels a entradas da paleta para reconstruir os valores de pixel do bloco.
[0065] A codificação baseada em paleta pode ter um determinado grau de overhead de sinalização. Por exemplo, vários bits podem ser necessários para sinalizar as características de uma paleta, tais como o tamanho da paleta, assim como a paleta propriamente dita. Além disto, vários bits podem ser necessários para sinalizar valores de índice para os pixels do bloco. As técnicas desta revelação podem, em alguns exemplos reduzir os números de bits necessários para sinalizar tais informações. Por exemplo, as técnicas descritas nesta revelação podem incluir técnicas para diversas combinações de um ou mais de modos de codificação baseados em paleta, transmissão de paletas, predição de paleta, derivação de paletas e transmissão de mapas de codificação baseada em paleta e outros elementos de sintaxe.
[0066] Os aspectos desta revelação referem-se à predição de paleta. De acordo com aspectos desta revelação, por exemplo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem determinar uma primeira paleta que tem primeiras entradas que indicam primeiros valores de pixel. O codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem determinar então, com base nas primeiras entradas da primeira paleta, uma ou mais segundas entradas que indicam segundos valores de pixel de uma segunda paleta. O codificador de vídeo 20 e/ou o decodificação de vídeo 30 podem codificar também pixels de um bloco de dados de vídeo utilizando a segunda paleta.
[0067] Quando determina as segundas entradas da segunda paleta com base nas primeiras entradas, o codificador de vídeo 20 pode codificar diversos elementos de sintaxe, que podem ser utilizados elo decodificador de vídeo para reconstruir a segunda paleta. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe em um fluxo de bits de modo a indicar que uma paleta inteira (ou paletas, no caso de cada componente colorido, como, por exemplo, Y, Cb, Cr ou Y, U, V ou R, G, D dos dados de vídeo ter uma paleta separada) é copiada de um ou mais blocos vizinhos do bloco que é atualmente codificado. A paleta a partir da qual as entradas da paleta atual do bloco atual são preditas (copiadas, por exemplo), pode ser referida como paleta preditiva. A paleta preditiva pode conter entradas de paleta de um ou mais blocos vizinhos que incluem blocos espacialmente vizinhos e/ou blocos vizinhos em uma ordem de varredura específica dos blocos. Por exemplo, os blocos vizinhos podem ser espacialmente localizados à esquerda (bloco vizinho esquerdo) do ou acima (bloco vizinho superior) do bloco que é atualmente codificado. Em outro exemplo, o codificador de vídeo 20 pode determinar entradas de paletas preditivas utilizando os valores de amostra mais freqüente em um vizinho causal do bloco atual. Em outro exemplo, os blocos vizinhos podem ser vizinhos ao bloco atual que é codificado de acordo com uma ordem de varredura específica utilizada para codificar os blocos. Ou seja, os blocos vizinhos podem ser um ou mais blocos codificados antes do bloco atual na ordem de varredura. O codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe de modo a indicar a localização dos blocos vizinhos dos quais a(s) paleta(s) são copiadas.
[0068] Em alguns exemplos, a predição de paleta pode ser efetuada à maneira de entrada. Por exemplo, o codificador de vídeo pode codificar um ou mais elementos de sintaxe de modo a indicar, para cada entrada de uma paleta preditiva, se a entrada de paleta é incluída na paleta para o bloco atual. Se o codificador de vídeo 20 não predisser uma entrada da paleta para o bloco atual, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe adicionais para especificar as entradas não preditas, assim como o número de tais entradas.
[0069] Em alguns exemplos, as técnicas para predizer uma paleta podem ser combinadas com técnicas para predizer uma ou mais entradas de uma paleta. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe em um fluxo de bits de modo a indicar se a paleta atual é inteiramente copiada da paleta preditiva. Se este não for o caso, o codificador de vídeo pode codificar um ou mais elementos de sintaxe em um fluxo de bits de modo a indicar se cada entrada na paleta preditiva é copiada.
[0070] Em outro exemplo, em vez de sinalizar o número de entradas e o valor de paleta, o codificador de vídeo 20 pode sinalizar, depois de sinalizar cada valor de paleta, um indicador para indicar se o valor de paleta sinalizado é a entrada de paleta final para a paleta. O codificador de vídeo 20 pode não sinalizar tal indicador de “fim de paleta” se a paleta já tiver atingido um determinado tamanho máximo.
[0071] De acordo com aspectos desta revelação, o codificador de vídeo pode codificar um ou mais elementos de sintaxe de modo a indicar se a predição de paleta está habilitada e/ou ativa. Em um exemplo para fins de ilustração, o codificador de vídeo 20 pode codificar um pred_pallete_flag para indicar, para cada bloco (CU ou PU, por exemplo), se o codificador de vídeo 20 utiliza predição de paleta para predizer a paleta para o respectivo bloco. Em alguns exemplos, o codificador de vídeo pode sinalizar um indicador separado para cada componente colorido (três indicadores para cada bloco, por exemplo). Em outros exemplos, o codificador de vídeo 20 pode sinalizar um único indicador que é aplicável a todos os componentes coloridos de um bloco.
[0072] O decodificador de vídeo 30 pode obter as informações acima identificadas de um fluxo de bits codificado e utilizar os dados para reconstruir a paleta. Por exemplo, o decodificador de vídeo 30 pode receber dados que indicam se uma paleta específica é predita a partir de outra paleta, assim como informações que permitem que o decodificador de vídeo 30 utilize as entradas de paleta preditivas apropriadas.
[0073] Em alguns casos, adicional ou alternativamente, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 pode construir uma paleta às pressas, isto é, dinamicamente. Por exemplo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem adicionar entradas a uma paleta vazia durante a codificação. Ou seja, o codificador de vídeo 20 pode adicionar valores de pixel a uma paleta à medida que os valores de pixel são gerados e transmitidos para posições em um bloco. Pixels que são codificados relativamente mais tarde no bloco podem referir-se a entradas adicionadas anteriores da paleta, como, por exemplo, com valores de índice, em vez da transmissão dos valores de pixel. Da mesma maneira, ao receber um novo valor de pixel para uma posição em um bloco, o decodificador de vídeo 30 pode seguir o mesmo processo do codificador de vídeo 20 em incluir o valor de pixel em uma paleta. Desta maneira, o decodificador de vídeo 30 constrói a mesma paleta do codificador de vídeo 20. O decodificador de vídeo 30 pode receber, para pixels que têm valores que já estão incluídos na paleta, valores de índice que identificam os valores. O decodificador de vídeo 30 pode utilizar as informações recebidas, como, por exemplo, valores de pixel para a paleta e valores de índice, para reconstruir os pixels de um bloco.
[0074] Em alguns casos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem manter uma paleta de tamanho fixo. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem adicionar os valores de pixel reconstruídos mais recentes à paleta à medida que são reconstruídos. Para cada entrada que é adicionada à paleta, a entrada que foi adicionada à paleta mais antiga é descartada, isto é às vezes referido como Primeiro Dentro- Primeiro Fora (FIFO). Este processo de atualizar a paleta pode ser aplicado apenas a blocos que são codificados utilizando-se o modo de paleta ou todos os blocos independentemente do modo de codificação.
[0075] As técnicas descritas acima referem-se de maneira geral a construção e/ou transmissão, pelo codificador de vídeo 20 e pelo decodificador de vídeo 30 de uma paleta para codificação baseada em paleta. Outros aspectos desta revelação referem-se à construção e/ou transmissão de um mapa que permite que o codificador de vídeo e/ou o decodificador de vídeo 30 determinem valores de pixel. Por exemplo, outros aspectos desta revelação referem-se à construção e/ou transmissão de um mapa de índices que relacionam um pixel específico a uma entrada de uma paleta.
[0076] Em alguns exemplos, o codificador de vídeo 20 pode indicar se os pixels de um bloco têm um valor correspondente em uma paleta. Em um exemplo para fins de ilustração, suponha-se que uma entrada (i, j) de um mapa corresponde uma posição de pixel (i, j) em um bloco de dados de vídeo. Neste exemplo, o codificador de vídeo 20 pode codificar um indicador para cada posição de pixel de um bloco. O codificador de vídeo 20 pode fixar o indicador como igual a um para a entrada (i, j) de modo a indicar que o valor de pixel na localização (i, j) é um dos valores na paleta. Quando uma cor é incluída na paleta (isto é, o indicador é igual a um), o codificador de vídeo 20 pode codificar também dados que indicam um índice de paleta para a entrada (i, j) que identifica a cor na paleta. Quando a cor do pixel não é incluída na paleta (isto é, um indicador é igual a zero), o codificador de vídeo pode codificar também dados que indicam um valor de amostra para o pixel. O decodificador de vídeo 30 pode obter os dados acima descritos de um fluxo de bits codificado e utilizar os dados para determinar um índice de paleta ou valor de pixel para uma localização específica em um bloco.
[0077] Em alguns casos, pode haver uma correlação entre o índice de paleta no qual um pixel em uma dada posição é mapeado e a probabilidade de um pixel vizinho ser mapeada no mesmo índice de paleta. Ou seja, quando um pixel é mapeado em um índice de paleta específico, a probabilidade pode ser relativamente alta de que um ou mais pixels vizinhos (em termos de localização espacial) sejam mapeados no mesmo índice de paleta.
[0078] De acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem determinar e codificar um ou mais índices de um bloco de dados de vídeo com relação a um ou mais índices do mesmo bloco de dados de vídeo. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para determinar um primeiro valor de índice associado a um primeiro pixel em um bloco de dados de vídeo, onde o primeiro valor de indústria relaciona o valor do primeiro pixel a uma entrada de uma paleta. O codificador de áudio 20 e/ou o decodificador de vídeo 30 podem ser também configurados para determinar, com base no primeiro valor de índice um ou mais valores de índice associado a um ou mais segundos pixels nos blocos de dados de vídeo, e para codificar o primeiro e o segundo ou segundos pixels do bloco de dados de vídeo. Assim, neste exemplo, os índices de um mapa podem ser codificados com relação a um ou mais outros índices do mapa.
[0079] Em alguns exemplos, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe que indicam um número de pixels consecutivos em uma dada ordem de varredura que são mapeados no mesmo valor de índice. A cadeia de valores de índice de valor semelhante pode ser aqui referida como “execução”. Em alguns exemplos, um valor de pixel pode ser associado a exatamente um valor de índice em uma paleta. Por conseguinte, em alguns casos, uma execução de valores pode referir-se também a uma cadeia de valores de índice de valor semelhante. Em outro exemplo, conforme descrito com relação à codificação com perdas em seguida, mais de um valor de pixel pode ser mapeado no mesmo valor de índice em uma paleta. Em tais exemplos, uma execução de valores refere-se a valores de índice de valor semelhante.
[0080] Em um exemplo para fins de ilustração, se dois índices consecutivos em uma dada ordem de varredura tiverem valores diferentes, a execução é igual a zero. Se dois índices consecutivos em uma dada ordem de varredura tiverem o mesmo valor, mais o primeiro índice na ordem de varredura tiver um valor diferente, a execução é igual a um. O decodificador de vídeo 30 pode obter os elementos de sintaxe que indicam uma execução de um fluxo de bits codificado e utilizar os dados para determinar o número de localizações de pixel consecutivas que têm o mesmo valor de índice.
[0081] Além disso, ou alternativamente, de acordo com aspectos desta revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem efetuar cópia em linha para uma ou mais entradas de um mapa. As entradas podem ser também referidas como “posições” devido à relação entre entradas do mapa e posições de pixel de um bloco. A cópia em linha pode depender, em alguns exemplos, da direção de varredura. Por exemplo, o codificador de vídeo 20 pode indicar que o valor de pixel ou valor de mapa de indústria para uma posição específica em um bloco é igual ao valor de pixel ou índice em uma linha acima da posição específica (para uma varredura horizontal) ou à coluna à esquerda da posição específica (para uma varredura vertical). O codificador de vídeo 20 pode indicar também como uma execução, o número de valores ou índices de pixel na ordem de varredura que são iguais aos valores ou índices de pixel correspondentes acima ou na coluna à esquerda da posição específica. Neste exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem copiar valores de pixel ou índice da linha vizinha especifica e do número especificado de entradas para a linha do bloco que é atualmente codificado.
[0082] Em alguns casos, a linha da qual valores são copiados pode se diretamente adjacente a, como, por exemplo, acima da ou à esquerda da, linha da posição que atualmente codificada. Em outros exemplos, várias linhas do bloco podem ser armazenadas pelo codificador de vídeo 20 e/ou pelo decodificador de vídeo 30, de modo que qualquer uma das várias linhas do mapa pode ser utilizada como valores preditivos para uma linha do mapa que é atualmente codificado. Em um exemplo, para fins de ilustração, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para armazenar as quatro fileiras anteriores de índices ou valores de pixel antes da codificação da fileira atual de pixels. Neste exemplo, a fileira preditiva (a fileira da qual os índices ou valores de pixel são copiados) pode ser indicada em um fluxo de bits com um código unário truncado ou outros códigos, tais como códigos unários. Com relação a um código unário truncado, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem determinar um valor máximo para o código unário truncado com base no cálculo de fileiras máximo (row_index-1, por exemplo) ou em um cálculo de coluna máximo (column_index-1, por exemplo). Além disto, uma indicação do número de posições a partir da fileira preditiva que são copiadas pode ser então incluída no fluxo de bits. Em alguns casos, se a linha ou coluna a partir da qual a posição atual está sendo predita pertencer a outro bloco (CU ou CTU, por exemplo) tal predição pode ser desabilitada.
[0083] De acordo com os aspectos desta revelação, as técnicas para codificar as chamadas execuções de entradas podem ser utilizadas em conjunto com as técnicas para copiar em linha descritas acima. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe (um indicador, por exemplo) que indicam se o valor de uma entrada em um mapa é obtido de uma paleta ou o valor de uma entrada no mapa é obtido de uma linha codificada anteriormente no mapa. O codificador de vídeo 20 pode codificar também um ou mais elementos de sintaxe que indicam o valor de índice de uma paleta ou a localização da entrada na linha (a fileira ou coluna). O codificador de vídeo 20 pode codificar também um ou mais elementos de sintaxe que indicam o número de entradas consecutivas que compartilham o mesmo valor. O decodificador de vídeo 30 pode obter tais informações de um fluxo de bits codificado e utilizar as informações para reconstruir o mapa e os valores de pixel para um bloco.
[0084] Conforme observado acima, os índices de um mapa são varridos em uma ordem específica. De acordo com os aspectos desta revelação, a direção de varredura pode ser vertical, horizontal ou a uma diagonal (45 graus ou 135 graus em sentido diagonal no bloco, por exemplo). Em alguns exemplos, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe para cada bloco que indicam uma direção de varredura para varrer os índices do bloco. Além disto, ou alternativamente, a direção de varredura pode ser sinalizada ou inferida com base nas chamadas informações colaterais, tais como, por exemplo, o tamanho do bloco, o espaço colorido e/ou o componente colorido. O codificador de vídeo 20 pode especificar varreduras para componente colorido de um bloco. Alternativamente, uma vetores especificada pode aplicar-se a todos os componentes coloridos de um bloco.
[0085] As técnicas desta revelação incluem também outros aspectos da codificação baseada em paleta. Por exemplo, de acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 pode decodificar elementos de sintaxe para cada bloco de modo a se indicar que o bloco é codificado utilizando-se um modo de codificação por paleta. Por exemplo, o codificador de vídeo 20 e/ou o decodificação de vídeo 30 podem codificar um indicador de modo de paleta (PLT_Mode_flag) de modo a se indicar se um modo de codificação baseado em paleta será utilizado para codificar um bloco específico. Neste exemplo, o codificador de vídeo 20 pode codificar um PLT_Mode_flag que é igual a um de modo a especificar que o bloco que é atualmente codificado (“bloco atual”) é codificado utilizando-se um modo de paleta. Um valor do PLT_Mode_flag igual a zero especifica que o bloco atual não é codificado utilizando-se o modo de paleta. Neste caso, o decodificador de vídeo 30 pode obter o PLT_Mode_flag do fluxo de bits codificado e aplicar o modo de codificação baseado e paleta para decodificar o bloco. Nos casos em que há mais de um modo de codificação baseado em paleta disponível (como, por exemplo, há mais de uma técnica baseada em paleta disponível para codificação, um ou mais elementos de sintaxe podem indicar um de uma série de modos de paleta diferentes para o bloco.
[0086] Em alguns casos, o codificador de vídeo 20 pode codificar um PLT_Mode_flag que é igual a zero de modo a especificar que o bloco atual não é codificado utilizando-se um modo de paleta. Em tais casos, o codificador de vídeo 20 pode codificar o bloco qualquer um de diversos modos de codificação baseada em paleta intra- preditiva, inter-preditiva ou outros. Quando o PLT_Mode_flag é igual a zero, o codificador de vídeo 20 pode transmitir informações adicionais (elementos de sintaxe, por exemplo) de modo a indicar o modo específico que é utilizado para codificar o respectivo bloco. Em alguns exemplos, conforme descrito em seguida, o modo pode ser um modo de codificação HEVC. A utilização do PLT_Mode_flag é descrito para fins de exemplificação. Em outros exemplos, outros elementos de sintaxe, tais como códigos de vários bits, podem ser utilizados para indicar se a codificação baseada em paleta será utilizado para um ou mais blocos, ou para indicar quais de uma série de modos serão utilizados.
[0087] Quando um modo de codificação baseado em paleta é utilizado, uma paleta é transmitida pelo codificador de vídeo 20, por exemplo utilizando-se uma ou mais das técnicas aqui descritas, no fluxo de bits de dados de vídeo codificado para utilização pelo decodificador de vídeo 30. Uma paleta pode ser transmitida para cada bloco ou pode ser compartilhada entre vários blocos. A paleta pode referir-se a vários valores de pixel que são dominantes e/ou representativos para o bloco.
[0088] De acordo com aspectos desta revelação, o tamanho da paleta, por exemplo em termos do número de valores de pixel que são incluídos na paleta, pode ser fixo ou pode ser sinalizado utilizando-se um ou mais elementos de sintaxe em um fluxo de bits codificado. Conforme descrito mais detalhadamente em seguida, um valor de pixel pode ser composto por várias amostras, como, por exemplo, dependendo do espaço colorido utilizado para codificação. Por exemplo, um valor de pixel pode incluir amostras luma e de crominância (como, por exemplo, luma, crominância U e crominância V (YUV) ou amostras luma de crominância Cb e de crominância Cr (YCbCr). Em outro exemplo, um valor de pixel pode incluir amostras Vermelhas, Verdes e Azuis (RGB). Conforme aqui descrito, o termo valor de pixel pode referir-se de maneira geral a uma ou mais das amostras que contribuem para um pixel. Ou seja, o termo valor de pixel não ser refere necessariamente a todas as amostras que contribuem para um pixel e pode ser utilizado para descrever um único valor de amostra que contribui para um pixel.
[0089] De acordo com os aspectos desta revelação, uma paleta pode ser transmitida separadamente para cada componente colorido de um bloco específico. No espaço colorido YUV, por exemplo, pode haver uma paleta para o componente Y (que representa valores Y), outra paleta para o componente U (que representa valores U) e ainda outra paleta para o componente V (que representa valores V). Em outro exemplo, uma paleta pode incluir todos os componentes de um bloco específico. Neste exemplo, a i- ésima entrada na paleta pode incluir três valores (YiUi, Vi, por exemplo). De acordo com os aspectos desta revelação, um ou mais elementos de sintaxe podem indicar separadamente o tamanho da paleta para cada componente (Y, U, V ou semelhantes, por exemplo). Em outros exemplos, um único tamanho pode ser utilizado para todos os componentes, de modo que um ou mais elementos de sintaxe indiquem o tamanho de todos os componentes.
[0090] De acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou o decodificador de vídeo podem efetuar codificação baseada em paleta de maneira com perdas ou sem perdas. Ou seja, em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem decodificar sem perdas dados de vídeo para um bloco utilizando entradas de paleta que correspondem aos valores de pixel do bloco (ou enviando os valores de pixel reais se o valor de pixel não estiver incluído na paleta). Em outros exemplos, conforme descrito mais detalhadamente com relação à Figura 5 abaixo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 pode codificar dados de vídeo para um bloco utilizando entradas de paleta que não correspondem exatamente aos valores de pixel do bloco (codificação com perdas).
[0091] Em alguns exemplos, as técnicas para codificação baseada em paleta de dados de vídeo podem ser utilizadas com uma ou mais outras técnicas de codificação, tais como técnicas para codificação inter- ou intra- preditiva. Por exemplo, conforme descrito mais detalhadamente em seguida, um codificador ou decodificador, ou codificador-decodificador combinados (codec) podem ser configurados para efetuar codificação inter- e intra- preditiva, assim como codificação baseada em paleta. A Figura 2 é um diagrama de blocos que mostra um codificador de vídeo 20 exemplar que pode implementar as técnicas desta revelação. A Figura 2 é apresentada para fins de explanação e não deve ser considerada limitadora das técnicas amplamente exemplificadas e descritas nesta revelação. Para fins de explanação, esta revelação descreve o codificador de vídeo 20 no contexto da codificação HEVC. Entretanto, as técnicas desta revelação podem ser aplicadas a outros padrões ou métodos de codificação.
[0093] O codificador de vídeo 20 representa um exemplo de um aparelho que pode ser configurado para executar técnicas para codificação de vídeo baseada em paleta de acordo com diversos exemplos descritos nesta revelação. Por exemplo, o codificador de vídeo 20 pode ser configurado para codificar seletivamente diversos de dados de vídeo, tais como CUs ou PUs na codificação HEVC, utilizando ou codificação baseada em paleta ou codificação não baseada em paleta. Os modos de codificação não baseados em paleta pode referir-se a diversos modos de codificação temporal inter-preditiva ou modos de codificação espacial intra-preditiva, tais como os diversos modos de codificação especificados pelo Rascunho HEVC 10. O codificador de vídeo 20, em um exemplo, pode ser configurado para gerar uma paleta que tem entradas que indicam valores de pixel, selecionar valores de pixel em uma paleta para representar valores de pixel de pelo menos algumas posições de um bloco de dados de vídeo e sinalizar informações que associam pelo menos algumas das posições do bloco de dados de vídeo com entradas na paleta que correspondem, respectivamente, aos valores de pixel selecionados. As instruções sinalizadas podem ser utilizadas pelo decodificador de vídeo 30 para decodificar dados de vídeo.
[0094] No exemplo da Figura 2, o codificador de vídeo 20 inclui uma unidade de processamento de predição 100, uma unidade de geração de resíduos 102, uma unidade de processamento de transformadas 104, uma unidade de quantificação 106, uma unidade de quantificação inversa 108, uma unidade de processamento de transformadas inversas 110, uma unidade de reconstrução 112, uma unidade de filtro 114, um buffer de imagens decodificadas 116 e uma unidade de codificação por entropia 118. A unidade de processamento de predição 100 inclui uma unidade de inter-predição 120 e uma unidade de processamento de intra-predição 126. A unidade de processamento de inter-predição 120 inclui unidade de estimação de movimento e uma unidade de compensação de movimento (não mostradas). O codificador de vídeo 20 inclui também uma unidade de codificação baseada em paleta 122 configurada para executar diversos aspectos das técnicas de codificação baseadas em paleta descritas nesta revelação. Em outros exemplos, o codificador de vídeo 20 pode incluir mais, menos ou diferentes componentes funcionais.
[0095] 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 dos dados de vídeo. Cada uma das CTUs pode ser associada a blocos de árvore de codificação luma de tamanho igual (CTBs) e a CTBs correspondentes da imagem. Como parte da codificação de uma CTU, a unidade de processamento de predição 100 pode efetuar particionamento de transformação quadtree para dividir os CTBs da CTU em blocos progressivamente menores. O bloco menor pode consistir em blocos de codificação de CUs. Por exemplo, a unidade de processamento de predição 100 pode particionar um CTB associado a uma CTU em quatro sub-blocos de tamanho igual, particionar um ou mais dos sub-blocos em quatro sub-sub-blocos de tamanho igual e assim por diante.
[0096] O codificador de vídeo 20 pode codificar CUs de uma CTU de modo a gerar representações codificadas das CUs (isto é, CUs codificadas). Como parte da codificação de uma CU, a unidade de processamento de predição 100 pode particionar os blocos de codificação associados à CU entre uma ou mais PUs da CU. Assim, cada PU pode ser associada a um bloco de predição luma e a blocos de predição croma correspondentes. O codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar PUs que têm diversos tamanhos. Conforme indicado acima, o tamanho de uma CU pode referem-se ao tamanho do bloco de codificação luma da CU e o tamanho de uma PU pode referem-se ao tamanho de um bloco de predição luma da PU. Supondo-se que o tamanho de uma CU específica seja dois Nx2N, o codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar tamanhos de PU de 2Nx2N ou NxN para intra-predição, e tamanhos de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN ou semelhantes para inter-predição. O codificador de vídeo 20 e decodificador de vídeo 30 podem suportar também particionamento assimétrico para tamanhos de PU de 2NxNU, 2NxnD, nLx2N e nRx2N para inter-predição.
[0097] A unidade de processamento de predição 120 pode gerar dados preditivos para uma PU efetuando inter-predição em cada PU de uma CU. Os dados preditivos para a PU podem incluir um bloco de amostra preditivo da PU e informações de movimento para a PU. A unidade de inter- predição 121 pode executar operações diferentes para uma PU de uma CU dependendo de a PU estar em uma fatia I, uma fatia P ou uma fatia B. Em uma fatia I, todas as PUs são intra-preditas. Consequentemente, se a PU estiver em uma fatia I, a unidade de inter-predição 121 não especifica inter-predição na PU. Assim, para blocos codificados no modo I, o bloco predito é formado utilizando-se predição espacial a partir de blocos vizinhos modificados anteriormente dentro do mesmo quadro.
[0098] Se uma PU estiver em uma fatia P, a unidade de estimação de movimento da unidade de processamento de inter-predição 120 pode buscar as imagens de referência em uma lista de imagens de referência (“RefPicList0”, por exemplo) 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 intimamente aos blocos de amostra da PU. A unidade de estimação de movimento pode gerar um índice de referência que indica uma posição na RefPicList0 da imagem de referência que contém a região de referência para a PU. Além disto, a unidade de estimação 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 à região de referência. Por exemplo, o MV pode ser um vetor bidimensional que apresenta um deslocamento das coordenadas na imagem decodificada atual com relação à coordenadas em uma imagem de referência. A unidade de estimação de movimento pode transmitir o índice de referência e o MV como as informações de movimento da PU. A unidade de compensação de movimento da unidade de processamento de inter-predição 120 pode gerar os blocos de amostra preditivos da PU com base em amostras reais ou interpoladas na localização de referência indicada pelo vetor de movimento da PU.
[0099] Se uma PU estiver em uma fatia B, a unidade de estimação de movimento pode efetuar uni-predição ou bi-predição para a PU. Para efetuar uni-predição para a PU, a unidade de estimação de movimento pode buscar as imagens de referência da RefPicList0 ou em uma segunda lista de imagens de referência (“RefPicList1”) para uma região de referência a PU. A unidade de estimação de movimento pode transmitir, como as informações 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 amostra da PU e uma localização de referência associada à região de referência e um ou mais indicadores de direção de predição que indiquem se a imagem de referência está na RefPicList0 ou RefPicList1. A unidade de compensação de movimento da unidade inter-predição 120 pode gerar os blocos de amostras preditivos da PU com base, pelo menos em parte em amostras reais ou interpoladas na região de referência indicada pelo vetor de movimento da PU.
[0100] Para efetuar inter-predição bidimensional para uma PU, a unidade de estimação de movimento pode buscar as imagens de referência na RefPicList0 para uma região de referência para a PU e pode buscar também as imagens de referência na RefPicList1 para outra região de referência para a PU. A unidade de estimação de movimento pode gerar índices de imagens de referência que indicam posições na RefPicList0 e na RefPicList1 das imagens de referência que contêm as regiões de referência. Além disto, a unidade de estimação de movimento pode gerar MVs que indicam deslocamentos espaciais entre a localização de referência associada às regiões de referência e um bloco de amostra da PU. As informações de movimento da PU podem incluir os índices de referência e os MVs da PU. A unidade de compensação de movimento pode gerar os blocos de amostra preditivos da PU com base, pelo menos em parte, em amostras reais ou interpoladas na região de referência indicada pelo vetor de movimento da PU.
[0101] De acordo com diversos exemplos desta revelação, o codificador de vídeo 20 pode ser configurado para efetuar codificação baseada em paleta. Com relação à estrutura HEVC, como exemplo, as técnicas de codificação baseadas 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 baseadas em paleta podem ser configuradas para serem utilizadas como um modo de PU na estrutura da HEVC. Por conseguinte, todos os processos revelados aqui descritos (ao longo desta revelação) no contexto de um modo de CU podem, adicional ou alternativamente, aplicar-se à PU. Entretanto, estes exemplos baseados na HEVC não devem ser considerados uma restrição ou limitação das técnicas de codificação baseadas em paleta aqui descritas, uma vez que tais técnicas podem ser aplicadas para funcionar de maneira independente ou como parte de outros sistemas/padrões existentes ou ainda a serem desenvolvidos. Nestes casos, a unidade para codificação por paleta pode consistir em blocos quadrados. blocos retangulares ou até mesmos regiões de conformação não retangular.
[0102] A unidade de codificação baseada em paleta 122, por exemplo, pode efetuar decodificação baseada em paleta quando um modo de codificação baseada em paleta é selecionado em uma CU ou PU, por exemplo. Por exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para gerar uma paleta que tem entradas que indicam valores de pixel, selecionar valores de pixel em uma paleta para representar valores de pixel de pelo menos algumas posições de um bloco de dados de vídeo e sinalizar informações que associam pelo menos algumas das posições do bloco de dados de vídeo a entradas na paleta que correspondem, respectivamente, aos valores de pixel selecionados. Embora diversas funções sejam descritas como sendo desempenhadas pela unidade para codificação baseada em paleta 122, algumas ou todas de tais funções podem ser desempenhadas por outras unidades de processamento ou por uma combinação de unidades de processamento diferentes.
[0103] A unidade para codificação baseada em paleta 122 pode ser configurada para gerar qualquer um dos diversos elementos de sintaxe aqui descritos. Por conseguinte, o codificador de vídeo 20 pode ser configurado para codificar blocos de dados de vídeo utilizando modos de condição baseados em paleta descritos nesta revelação. O codificador de vídeo 20 pode codificar seletivamente bloco de dados de vídeo utilizando um modo de codificação por paleta ou codificar um bloco de dados de vídeo utilizando um modo diferente, tal como, por exemplo, um modo de codificação inter-prediditiva ou intra-preditiva 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. O codificador de vídeo 20 pode codificar alguns blocos com modos de codificação de predição temporal inter-preditiva ou de codificação espacial intra-preditiva e decodificar outros blocos com o modo de codificação baseada em paleta.
[0104] A unidade de processamento de intra- predição 126 pode gerar dados preditivos para uma PU efetuando intra-predição na PU. Os dados preditivos para a PU podem incluir blocos de amostra preditivos para a PU e diversos elementos de sintaxe. A unidade de processamento de intra-predição 126 pode efetuar intra-predição em PUs em fatias I, fatias P e fatias B.
[0105] Para efetuar intra-predição em uma PU, a unidade de processamento de intra-predição 126 pode utilizar vários modos de intra-predição para gerar vários conjuntos de dados preditivos para a PU. Para utilizar um modo de intra-predição para gerar um conjunto de dados preditivos para a PU, a unidade de processamento de intra- predição 126 pode estender amostras de blocos de amostra de PUs vizinhas através dos blocos de amostra da PU em uma direção associada ao modo de intra-predição. As PUs vizinhas podem estar acima, acima e à direita, acima e à esquerda, ou à esquerda da PU, supondo-se uma ordem de codificação da esquerda para a direita, do topo para a base para a PUs, CUs e CTUs. A unidade de processamento de intra-predição 126 pode utilizar diversos números de modos de intra-predição, como, por exemplo, 33 modos de intra- predição direcionais. Em alguns exemplos, o número de modos de intra-predição pode depender do tamanho da região associada à PU.
[0106] A unidade de processamento de predição 100 pode selecionar os dados preditivos para a PUs de uma CU dentre os dados preditivos gerados pela unidade de processamento de inter-predição 120 para as PUs ou dentre os dados preditivos gerados pela unidade de processamento de intra-predição 126 para a PUs. Em alguns exemplos, a unidade de processamento de predição 100 seleciona os dados preditivos para as PUs da CU com base em métricas de distorção de taxa dos conjuntos de dados preditivos. Os blocos de amostra preditivos dos dados preditivos selecionados podem ser aqui referidos como os blocos de amostra preditivos selecionados.
[0107] A unidade de geração de resíduos 102 pode gerar, com base no luma, e no bloco de codificação Cb e Cr de uma CU e no luma preditivo selecionado, nos blocos Cb e Cr das PUs da CU, uma luma, blocos residuais Cb e Cr da CU. Por exemplo, a unidade de geração de resíduos 102 pode gerar os blocos residuais da CU de modo que cada amostra nos blocos residuais têm um valor igual à diferença entre uma amostra em um bloco de codificação da CU e uma amostra correspondente em um bloco de amostra preditivo selecionado correspondente de uma PU da CU.
[0108] A unidade de processamento de transformadas 104 pode efetuar particionamento de transformação quadtree para particionar os blocos residuais associados a uma CU em blocos de transformada associados a TUs da CU. Assim, uma TU pode ser associada a um bloco de transformada luma e dois blocos de transformada croma. Os tamanhos e posições dos blocos de transformada luma e croma de TUs de uma CU pode ou podem não ser baseados nos tamanhos e posições de blocos preditivos das PUs da CU. Uma estrutura de transformação quadtree conhecida como “transformação quadtree residual” (RQT) podem incluir nós associados a cada uma das regiões. As TUs de uma CU podem corresponder a nós-folha da RQT.
[0109] A unidade de processamento de transformadas 104 pode gerar blocos de coeficiente de transformada para cada TU de uma CU aplicando uma ou mais transformadas aos blocos de transformada da TU. A unidade de processamento de transformadas 104 pode aplicar diversas transformadas a um bloco de transformada associado a uma TU. Por exemplo, a unidade de processamento de transformadas 104 pode aplicar uma transformada de co-seno discreta (DCT), uma transformada direcional ou uma transformada conceptualmente semelhante a um bloco de transformada. Em alguns exemplos, a unidade de processamento de transformadas 104 não aplica transformadas a um bloco de transformada. Em tais exemplos, o bloco de transformada pode ser tratado como um bloco de coeficiente de transformada.
[0110] A unidade de quantificação 106 pode quantificar os coeficientes de transformada em um bloco de coeficientes. O processo de quantificação pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes de transformada. Por exemplo, um coeficiente de transformada de N bits pode ser arredondado para menos até um coeficiente de transformada de M bits durante a quantificação, onde N é maior que M. A unidade de quantificação 106 pode quantificar um bloco de coeficientes associado a uma TU de uma CU com base em um valor de parâmetro de quantificação (QP) associado à CU. O codificador de vídeo 20 pode ajustar o grau de quantificação aplicado aos blocos de coeficientes associados a uma CU ajustando o valor de QP associado à CU. A quantificação pode introduzir perda de informações, e assim os coeficientes de transformada quantificados podem ter uma precisão mais baixa que a dos originais.
[0111] A unidade de quantificação inversa 108 e a unidade de processamento de transformada inversa 110 podem aplicar quantificação inversa e transformadas inversas a um bloco de coeficientes, respectivamente, para reconstruir um bloco residual a partir do bloco de coeficientes. A unidade de reconstrução 112 pode adicionar um bloco residual reconstruído a amostras correspondentes de um ou mais blocos de amostras preditivos gerados pela unidade de processamento de predição 100 de modo a se para produzir um bloco de transformada reconstruído associado a uma TU. Pela reconstrução de blocos de transformada para cada TU de uma CU desta maneira, o codificador de vídeo 20 pode reconstruir os blocos de codificação da CU.
[0112] A unidade de filtro 114 pode executar uma ou mais operações de desbloqueio para reduzir artefatos de blocagem nos blocos de codificação associados a uma CU. O armazenador de imagens decodificadas 116 pode armazenar os blocos de codificação reconstruídos depois que a unidade de filtro 114 executa a operação ou operações de desbloqueio nos blocos de codificação reconstruídos. A unidade de processamento de inter-predição 120 pode utilizar uma imagem de referência que contém os blocos de codificação reconstruídos para efetuar inter-predição em PUs de outras imagens. Além disto, a unidade de processamento de intra-predição 126 pode utilizar blocos de codificação reconstruídos no armazenador de imagens decodificadas 116 para efetuar intra-predição em outras PUs na mesma imagem da CU.
[0113] A unidade de codificação por entropia 118 pode receber dados de outros componentes funcionais do codificador de vídeo 20. Por exemplo, a unidade de codificação por entropia 118 pode receber blocos de coeficientes da unidade de quantificação 106 e pode receber elementos de sintaxe da unidade de processamento de predição 100. A unidade de codificação por entropia 118 pode executar uma ou mais operações de codificação por entropia nos dados de modo a gerar dados codificados por entropia. Por exemplo, a unidade de codificação por entropia 118 pode executar uma operação de codificação de comprimento variável adaptativa ao contexto (CAVLC), uma operação CABAC, uma operação de comprimento de variável a variável (V2V) uma operação de codificação aritmética binária adaptativa ao contexto baseada em sintaxe (SBAC), uma operação de codificação por Entropia com Particionamento de Intervalos de Probabilidade (PIPE), uma operação de codificação de Golomb Exponencial ou outro tipo de operação de codificação por entropia nos dados. O codificador de vídeo 20 pode transmitir um fluxo de bits que inclui dados codificados por entropia gerados pela unidade de codificação por entropia 118. Por exemplo, o fluxo de bits pode incluir dados que representam uma RQT para uma CU.
[0114] Em alguns exemplos, a codificação residual não é executada com a codificação de paleta. Por conseguinte, o codificador de vídeo 20 pode não efetuar transformação ou quantificação quando codifica utilizando um modo de condição de paleta. Além disto, o codificador de vídeo 20 pode codificar por entropia dados gerados utilizando-se um modo de codificação de paleta separadamente de dados residuais.
[0115] A Figura 3 é um diagrama de blocos que mostra um decodificador de vídeo 30 exemplar que é configurado para implementar as técnicas desta revelação. A Figura 3 é apresentada para fins de explanação e não limita as técnicas amplamente exemplificadas e descritas nesta revelação. Para fins de explanação, esta revelação descreve o decodificador de vídeo 30 no contexto da codificação HEVC. Entretanto, as técnicas desta revelação podem ser aplicadas a outros padrões ou métodos de codificação.
[0116] O decodificador de vídeo 30 representa um exemplo de aparelho que pode ser configurado para executar técnicas para codificação de vídeo baseada em paleta de acordo com diversos exemplos descritos nesta revelação. Por exemplo, o decodificador de vídeo 30 pode ser configurado para decodificar seletivamente diversos blocos de dados de vídeo, tais como CUs ou PUs na codificação HEVC, utilizando ou codificação baseada em paleta ou codificação não baseada em paleta. Modos de codificação não baseados em paleta podem referir-se a diversos modos de codificação temporal inter-preditiva ou modos de codificação espacial intra-preditiva, tais como os diversos modos de codificação especificados pelo Rascunho HEVC 10. O decodificador de vídeo 30, em um exemplo, pode ser configurado para gerar uma paleta que tem entradas que indicam valores de pixel, receber informações que associam pelo menos algumas posições de um bloco de dados de vídeo com entradas na paleta, selecionar valores de pixel na paleta com base nas informações e reconstruir valores de pixel do bloco com base nos valores de pixel selecionados.
[0117] No exemplo da Figura 3, o decodificador de vídeo 30 inclui uma unidade de decodificação por entropia 150, uma unidade de processamento de predição 152, uma unidade de quantificação inversa 154, uma unidade de processamento de transformadas inversas 156, uma unidade de reconstrução 158, uma unidade de filtro 160 e um armazenador de imagens decodificadas 162. A unidade de processamento de predição 152 inclui uma unidade de compensação de movimento 164 e uma unidade de processamento de intra-predição 166. O decodificador de vídeo 30 inclui também uma unidade de decodificação baseada em paleta 165 codificada para executar diversos aspectos das técnicas de codificação baseadas em paleta descritas nesta revelação. Em outros exemplos, o decodificador de vídeo 30 pode incluir mais, menos ou diferentes componentes funcionais.
[0118] Um armazenador de imagens codificadas (CPB) pode receber e armazenar dados de vídeo codificados (unidades NAL, por exemplo) de um fluxo de bits. A unidade de decodificação por entropia 150 pode receber dados de vídeo codificados (unidades NAL, por exemplo) do CPB e efetuar parse nas unidades NAL de modo a decodificar elementos de sintaxe. A unidade de decodificação por entropia 150 pode decodificar por entropia elementos de sintaxe codificados por entropia nas unidades NAL. A unidade de processamento de predição 152, a unidade de quantificação inversa 154, a unidade de processamento de transformadas inversa 156, a unidade de reconstrução 158 e a unidade de filtro 160 podem gerar dados de vídeo decodificados com base nos elementos de sintaxe extraídos do fluxo de bits.
[0119] As unidades NAL do fluxo de bits podem incluir unidades NAL de fatia codificadas. Como parte da decodificação do fluxo de bits, a unidade de codificação por entropia 150 pode extrair e decodificar por entropia elementos de sintaxe das unidades NAL de fatia codificadas. 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 referentes a uma fatia. Os elementos de sintaxe no cabeçalho de fatia podem incluir um elemento de sintaxe que identifica um PPS associado a uma imagem que contém a fatia.
[0120] Além de decodificar elementos de sintaxe do fluxo de bits, o decodificador de vídeo 30 pode executar uma operação de reconstrução em uma CU não particionada. Para executar a operação de reconstrução em uma CU não particionada, o decodificador de vídeo 30 pode executar uma operação de reconstrução em cada TU da CU. Ao executar a operação de reconstrução para cada TU da CU, o decodificador de vídeo 30 pode reconstruir blocos residuais da CU.
[0121] Como parte da execução da uma operação de reconstrução de uma TU de uma CU, a unidade de quantificação inversa 154 pode quantificar por inversão, isto é, desquantificar, blocos de coeficientes associados à TU. A unidade de quantificação inversa 154 pode utilizar um valor de QP associado à CU da TU de modo a determinar o grau de quantificação e, da mesma maneira, o grau de quantificação inversa a ser aplicado pela unidade de quantificação inversa 154. Ou seja, a razão de compactação, isto é, a razão do número de bits utilizados para representar a sequência original e o bit compactado pode ser controlado pelo ajuste do valor do QP utilizado quando da quantificação de coeficientes de transformada. A razão de compactação pode depender também do método de codificação por entropia utilizado.
[0122] Depois que a unidade de quantificação inversa 154 quantifica por inversão um bloco de coeficientes, a unidade de processamento de transformadas inversa 156 pode aplicar uma ou mais transformadas inversas ao bloco de coeficientes de modo a gerar um bloco residual associado à TU. Por exemplo, a unidade de processamento de transformadas inversas 156 pode aplicar uma DCT inversa, uma transformada de número inteiro inversa, uma transformada de Karhunen-Loeve (KLT) inversa, uma transformada rotacional inversa, uma transformada direcional inversa ou outra transformada inversa ao bloco de coeficientes.
[0123] Se uma PU for codificada utilizando-se intra-predição, a unidade de processamento de intra- predição 166 pode efetuar intra-predição de modo a gerar blocos preditivos para a PU. A unidade de processamento de intra-predição 166 pode utilizar um modo de intra-predição para gerar o luma preditivo, blocos Cb e Cr para a PU com base nos blocos de predição de PUs espacialmente vizinhas. A unidade de processamento de intra-predição 166 pode determinar o modo de intra-predição para a PU com base em um ou mais elementos de sintaxe decodificados do fluxo de bits.
[0124] A unidade de processamento de prediçã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 em elementos de sintaxe extraídos do fluxo de bits. Além disto, se uma PU for codificada utilizando-se inter-predição, a unidade de decodificação por entropia 150 pode extrair informações de movimento para a PU. A unidade de compensação de movimento 164 pode determinar, com base nas informações 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 amostra no bloco ou blocos de referência para a PU, luma preditivo, blocos Cb e Cr para a PU.
[0125] A unidade de reconstrução 158 pode utilizar o luma, os blocos de transformada Cb e Cr associados às TUs de uma CU e o luma preditivo, blocos Cb e Cr das PUs da CU, isto é, ou dados de intra-predição ou dados de inter-predição, conforme aplicável, para reconstruir o luma, os blocos de codificação Cb e Cr da CU. Por exemplo, a unidade de reconstrução 158 pode adicionar amostras do luma, dos blocos de transformada Cb e Cr a amostras correspondentes do luma preditivo dos blocos Cb e Cr de modo a reconstruir o luma, os blocos de codificação Cb e Cr da CU.
[0126] A unidade de filtro 160 pode executar uma operação de desbloqueio para reduzir os artefatos de blocagem associados ao luma, aos blocos de codificação Cb e Cr da CU. O decodificador de vídeo 30 pode armazenar o luma, os blocos de codificação Cb e Cr da CU no armazenador de imagens decodificadas 162. O armazenador de imagens decodificadas pode fornecer imagens de referência para compensação de movimento intra-predição e apresentação subsequentes em um aparelho de exibição tal como o aparelho de exibição 32 da Figura 1. Por exemplo, o decodificador de vídeo 30 pode executar, com base no luma, nos blocos Cb e Cr no armazenador de imagens decodificadas 162, operações de intra-predição ou inter-predição em PUs de outros CUs. Desta maneira, o decodificador de vídeo 30 pode extrair, do fluxo de bits, níveis de coeficientes de transformada do bloco de coeficientes luma significativo, quantificar por inversão os níveis de coeficientes de transformada, aplicar uma transmitida aos níveis de coeficientes de transformada, de modo a gerar um bloco de transformadas, gerar, com base, pelo menos em parte, no bloco de transformadas, um bloco de codificação e transmitir o bloco de codificação para exibição.
[0127] De acordo com diversos exemplos desta revelação, o decodificador de vídeo 30 pode ser configurado para efetuar codificação baseada em paleta. A unidade de decodificação baseada em paleta 165, por exemplo, pode efetuar decodificação baseada em paleta quando um modo de decodificação baseada em paleta é selecionado para uma CU ou PU, por exemplo. Por exemplo, a unidade de decodificação baseada em paleta 165 pode ser codificada para gerar uma paleta que tem entradas que indicam valores de pixel, receber informações que associam pelo menos algumas posições de um bloco de dados de vídeo a entradas na paleta, selecionar valores de pixel na paleta com base nas informações e reconstruir os valores de pixel do bloco com base nos valores de pixel selecionados. Embora diversas funções sejam descritas como sendo desempenhadas pela unidade decodificação baseada em paleta 165, algumas ou todas das funções podem ser desempenhadas por outras unidades de processamento ou por uma combinação de unidades de processamento diferentes.
[0128] A unidade de decodificação baseada em paleta 165 pode receber informações de modo de codificação por paleta e executar as operações acima quando as informações de modo de codificação por paleta indicarem que o modo de codificação por paleta se aplica ao bloco. Quando as informações de modo de codificação por paleta indicarem que o modo de codificação por paleta não se aplica ao bloco, ou quando outras informações de modo indicarem a utilização de um modo diferente, a unidade de decodificação baseada em paleta 165 decodifica o bloco de dados de vídeo utilizando um modo de codificação não baseado em paleta, como, por exemplo, um modo de codificação inter-preditiva ou intra-preditiva HEVC, quando as informações de modo de codificação por paleta indicarem que o modo de codificação por paleta não se aplica ao bloco. O bloco de dados de vídeo pode ser, por exemplo, uma CU ou uma PU gerada de acordo com um processador de codificação HEVC. O decodificador de vídeo 30 pode decodificar alguns blocos com predição temporal inter-preditiva ou modo de codificação espacial intra-preditiva e decodificar outros blocos com o modo de codificação baseado em paleta. O modo de codificação baseado em paleta pode compreender um de uma série de modos de codificação baseados em paleta diferentes ou pode haver um único modo de codificação baseado em paleta.
[0129] As informações de modo de codificação por paleta recebidas pela unidade de decodificação baseada em paleta 165 podem compreender um elemento de sintaxe de modo de paleta, tal como, um indicador. Um primeiro valor do elemento de sintaxe de modo de paleta indica que o modo de codificação por paleta se aplica ao bloco e um segundo valor do elemento de sintaxe de modo de paleta indica que o modo de codificação por paleta não se aplica ao bloco de dados de vídeo. A unidade de decodificação baseada em paleta 165 pode receber (do codificador de vídeo 20, por exemplo) as informações de modo de codificação por paleta a um ou mais de um nível de unidade preditiva, um nível de unidade de codificação, um nível de fatia ou um nível de imagem, ou pode receber uma indicação de se o modo de codificação por paleta está habilitado em pelo menos um do conjunto de parâmetros de imagem (PPS), do conjunto de parâmetros de sequência (SPC) ou do conjunto de parâmetros de vídeo (VPS).
[0130] Em alguns exemplos, a unidade de decodificação baseada em paleta 165 pode inferir as informações de modo de codificação por paleta com base em um ou mais do tamanho do bloco de codificação, do tipo de quadro, do espaço colorido, do componente colorido, do tamanho de quadro, da taxa de quadros, do ID de camada na codificação escalonável de vídeo ou do ID de vista na codificação de várias vistas associada ao bloco de dados de vídeo.
[0131] A unidade de decodificação baseada em paleta 165 pode ser também configurada para receber informações que definem pelo menos algumas entradas na paleta com dados de vídeo e gerar a paleta com base, pelo menos em parte, nas informações recebidas. O tamanho da paleta pode ser fixo ou variável. Em alguns casos, o tamanho de paleta é variável é é ajustável com base em informações sinalizadas com os dados de vídeo. As informações sinalizadas pode especificar se uma entrada na paleta é a última entrada na paleta. Além disto, em alguns casos, a paleta pode ter um tamanho máximo. O tamanho da paleta pode ser também transmitido ou inferido condicionalmente. As condições podem ser o tamanho da CU, o tipo de quadro o espaço colorido, o componente colorido, o tamanho de quadro, a taxa de quadros o ID de camada na codificação escalonável de vídeo ou ID de vídeo na codificação de várias vistas.
[0132] A paleta os uma única paleta que inclui entradas que indicam valores de pixel para um componente luma e um componente croma do bloco. Neste caso, cada entrada na paleta é uma entrada tríplice que indica valores de pixel para o componente luma e dois compactação croma. Alternativamente, a paleta inclui uma paleta luma que inclui entradas que indicam valores de pixel de um componente luma do bloco e paletas croma que incluem entradas que indicam valores de pixel para os respectivos componentes croma do bloco.
[0133] Em alguns exemplos, a unidade de decodificação baseada em paleta, 165 pode gerar a paleta predizendo as entradas na paleta com base em dados processados anteriormente. Os dados processados anteriormente podem incluir paletas ou informações de paletas, para blocos vizinhos decodificados anteriormente. A unidade de decodificação baseada em paleta 165 pode receber um elemento de sintaxe de predição que indica se as entradas na paleta serão preditas. O elemento de sintaxe de predição pode incluir uma série de elementos de sintaxe de predição que indicam, eletronicamente, se as entradas nas paletas para componentes luma e croma serão preditas.
[0134] Com relação a uma paleta preditiva, por exemplo, uma paleta preditiva pode conter entradas de paleta de um ou mais blocos vizinhos que incluem blocos espacialmente vizinhos e/ou blocos vizinhos em uma ordem de varredura específica dos blocos. Em um exemplo, os blocos vizinhos podem ser espacialmente localizados à esquerda (bloco vizinho esquerdo) à esquerda do ou acima do (bloco vizinho superior) do bloco que é atualmente codificado. Em outro exemplo,a unidade de decodificação baseada em paleta 165 pode determinar entradas de paleta preditivas utilizando os valores de amostra mais freqüentes em um vizinho causal no bloco atual. Em outro exemplo, os blocos vizinhos podem ser vizinhos ao bloco que é atualmente codificado de acordo com uma ordem de varredura específica utilizada para codificar os blocos. Ou seja, os blocos vizinhos podem ser um ou mais blocos codificados antes do bloco atual na ordem de varredura. A unidade de decodificação baseada em paleta 165 pode decodificar um ou mais elementos de sintaxe para indicar a localização dos blocos vizinhos dos quais a(s) paleta(s) é/são copiadas.
[0135] Assim, em um exemplo, a unidade de decodificação baseada em paleta 165 pode, em alguns exemplos, predizer pelo menos algumas das entradas na paleta com base nas entradas em uma paleta para um bloco vizinho esquerdo ou um bloco vizinho de topo em uma fatia ou imagem. Neste caso, as entradas na paleta que são preditas com base em entradas ou em uma paleta para o bloco vizinho esquerdo ou o bloco vizinho de topo podem ser preditas pela unidade de decodificação baseada em paleta 165 com base em um elemento de sintaxe que indica a seleção do bloco vizinho esquerdo ou do bloco vizinho de topo para predição, O elemento de sintaxe pode ser um indicador que tem um valor que indica a seleção do bloco vizinho esquerdo ou do bloco vizinho de topo.
[0136] Em alguns exemplos, a unidade de decodificação baseada em paleta 165 pode receber um ou mais elementos de sintaxe de predição que indicam se pelo menos algumas entradas selecionadas na paleta ou uma base de entrada ou uma base de entrada por entrada, serão preditas e gerar, por conseguinte, as entradas. Por exemplo, a unidade de decodificação baseada em paleta 165 pode decodificar um ou mais elementos de sintaxe de modo a indicar, para cada entrada de uma paleta preditiva, se a entrada de paleta está incluída na paleta para o bloco atual. Se uma entrada não for predita, a unidade de decodificação baseada em paleta 165 pode decodificar um ou mais elementos de sintaxe adicionais de modo a especificar as entradas não preditas, assim como o número de tais entradas. Assim, a unidade de decodificação baseada em paleta 165 pode predizer algumas das entrada e receber diretamente informações que especificam outras entradas na paleta que incluem o número de entradas adicionais.
[0137] Em alguns exemplos, técnicas para predizer uma y para predizer uma paleta inteira podem ser combinadas com técnicas para predizer uma ou mais entradas para um paleta. Por exemplo, a unidade de decodificação baseada em paleta 165 pode decodificar um ou mais elementos de sintaxe em um fluxo de bits de modo a indicar se a paleta atual é inteiramente copiada da paleta preditiva. Se este não for o caso, a unidade de decodificação baseada em paleta 165 pode decodificar um ou mais elementos de sintaxe em um fluxo de bits de modo a indicar se cada entrada na paleta preditiva é copiada.
[0138] Em outro exemplo, em vez de receber o número de entradas e o valor de paleta, a unidade de decodificação baseada em paleta 165 pode receber depois de cada valor de paleta, um indicador para indicar se o valor de paleta sinalizado e a entrada de paleta final para a paleta. A unidade de decodificação baseada em paleta 165 pode não receber tal indicador de “fim de paleta” se a paleta já tiver atingido um determinado tamanho máximo.
[0139] As informações, recebidas da unidade de decodificação baseada em paleta 165, que associam pelo menos algumas posições de um bloco de dados de vídeo com entradas na paleta podem compreender informações de mapa que incluem valores de índice de paleta para pelo menos algumas das posições no bloco, em que cada um dos valores de índice de paleta corresponde a uma das entradas na paleta. As informações de mapa podem incluir um ou mais elementos de sintaxe de execução que indicam, cada um, o número de posições consecutivas no bloco que têm o mesmo valor de índice de paleta.
[0140] Em alguns exemplos, a unidade de decodificação baseada em paleta 165 pode receber informações que indicam cópia em linha, pelo que valores de pixel ou índice para uma linha de posições no bloco são copiados de valores de pixel ou índice para outra linha de posições no bloco. A unidade de decodificação baseada em paleta 165 pode utilizar estas informações para efetuar cópia em linha de modo a determinar valores ou entradas de pixel na paleta para diversas posições de um bloco. A linha de posições pode compreender uma fileira, uma parte de uma fileira, uma coluna ou uma parte de uma coluna de posições do bloco.
[0141] A unidade de decodificação baseada em paleta 165 pode gerar a paleta em parte recebendo valores de pixel para uma ou mais posições do bloco e adicionando os valores de pixel a entradas na paleta, de modo a gerar dinamicamente pelo menos uma parte da paleta às pressas. Adicionar os valores de pixel pode compreender adicionar os valores de pixel a uma paleta inicial que compreende um conjunto inicial de entradas ou a uma paleta vazia que não informação um conjunto inicial de entradas. Em alguns exemplos, adicionar compreende adicionar os valores de pixel de modo a adicionar novas entradas a uma paleta inicial que compreende um conjunto inicial de entradas ou preencher entradas existentes na paleta inicial, ou substituir ou alterar valores de pixel de entradas na paleta inicial.
[0142] Em alguns exemplos, a unidade de decodificação baseada em paleta 165 pode determinar um tamanho máximo fixo para uma paleta. Ao atingir o tamanho máximo, a unidade de decodificação baseada em paleta 165 pode remover uma ou mais entradas da paleta. Em um exemplo, a unidade de decodificação baseada em paleta 165 pode remover a entrada mais antiga da paleta, utilizando, por exemplo, uma fila FIFO. Em outro exemplo, a unidade de decodificação baseada em paleta 165 pode remover a entrada menos utilizada. Em ainda outro exemplo, a unidade de decodificação baseada em paleta 165 pode fazer uma determinação ponderada referente a qual entrada remover com base em quando uma entrada candidata a ser removida foi adicionada à paleta e à utilização relativa a essa entrada.
[0143] Em alguns exemplos, a paleta pode ser uma paleta quantificada na qual o valor de pixel selecionado da paleta para uma das posições no bloco é diferente do valor de pixel real da posição no bloco, de modo que o processo de decodificação seja com perdas. Por exemplo, o mesmo valor de pixel pode ser selecionado da paleta para duas posições diferentes com valores de pixel reais diferentes.
[0144] A Figura 4 é um diagrama conceptual que mostra um exemplo de determinação de uma paleta para codificar dados de vídeo, compatível com as técnicas desta revelação. O exemplo da Figura 4 inclui uma imagem 178 que tem uma primeira unidade de codificação (CU) 180 que é associada à primeira paleta 184 e uma segunda CU 188 que é associada às segundas paletas 182. Conforme descrito mais detalhadamente em seguida e de acordo com as técnicas desta revelação, as segundas paletas 192 são baseadas nas primeiras paletas 184. A imagem 178 inclui também um bloco 186 codificado com um modo de codificação de intra-predição e um bloco 200 que é codificado com um modo de codificação intra-preditiva.
[0145] As técnicas da Figura 4 são descritas no contexto do codificador de vídeo 20 (Figura 1 e Figura 2) e do 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 explanação. Entretanto, deve ficar entendido que as técnicas desta revelação não estão limitadas desta maneira e podem ser aplicadas por outros processadores e/ou aparelhos de codificador de vídeo em outros processos e/ou padrões de codificação de vídeo.
[0146] Em geral, uma paleta refere-se ao número de valores de pixel que são dominante e/ou representativos para uma CU que é atualmente codificada. A CU 188 no exemplo da Figura 4. As primeiras paletas 184 e as segundas paletas são mostradas como incluindo várias paletas. Em alguns exemplos, de acordo com aspectos desta revelação, um codificador de vídeo (tal como o codificador de vídeo 20 ou o decodificador de vídeo 30) pode codificar paletas separadamente para cada componente colorido de uma CU. Por exemplo, o codificador de vídeo 20 pode codificar uma paleta para um componente luma (Y) de uma CU, outra paleta para um componente croma (U) da CU e ainda outra paleta para o componente croma (V) da CU. Neste exemplo, as entradas da paleta Y pode representar valores Y de pixels da CU, as entradas da paleta U podem representar valores U de pixels da CU e as entradas da paleta V podem representar valores V de pixels da CU.
[0147] Em outros exemplos, o codificador de vídeo 20 pode codificar uma única paleta para todos os componentes coloridos de uma CU. Neste exemplo, o codificador de vídeo pode codificar uma paleta que tem uma i-ésima entrada que é um valor tríplice, que inclui Yi, Ui e Vi. Neste caso, a paleta inclui valores para cada um dos componentes dos pixels. Por conseguinte, a representação das paletas 184 e 192 como um conjunto de paletas que tem várias paletas individuais é meramente um exemplo e não pretende ser limitadora.
[0148] No exemplo da Figura 4, as primeiras paletas 184 incluem três entradas 202-206 que têm um valor de índice de entrada 1, um valor de índice de entrada 2 e um valor de índice de entrada 3, respectivamente. As entradas 202-206 relacionam os valores de índice a valores de pixel que incluem o valor de pixel A, o valor de pixel B e o valor de pixel C, respectivamente. Conforme aqui descrito, 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 baseada em paleta para codificar os pixels do bloco utilizando os índices 1-3. Ou seja, 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 está associado a um valor de pixel em uma ou mais das primeiras paletas 184. O decodificador de vídeo 30 pode obter os valores de índice de um fluxo de bits e reconstruir os valores de pixel utilizando os valores de índice e uma ou mais das primeiras paletas 184. Assim, as primeiras paletas 184 são transmitidas pelo codificador de vídeo 20 em um fluxo de bits de dados de vídeo codificado para utilização pelo decodificador de vídeo 30 na decodificação baseada em paleta. Em geral, uma ou mais paletas podem ser transmitidas para cada CU ou podem ser compartilhadas entre CUs diferentes.
[0149] De acordo com aspectos desta revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 pode determinar as segundas paletas 192 com base na primeiras paletas 184. Por exemplo, o codificador de vídeo 20 pode codificar um pred_pallet_flag para cada CU (que inclui, como, por exemplo, a segunda CU 188) de modo a indicar se a paleta para a CU é predita a partir de uma ou mais paletas associadas a uma ou mais outras CUs, tais como CUs vizinhas (espacialmente ou com base na ordem de varredura) ou as amostras mais freqüentes de um vizinho causal. Quando o valor de tal indicador é igual a um, por exemplo, o decodificador de vídeo 30 pode determinar que as segundas paletas 192 para a segunda CU 188 são preditas a partir de uma ou mais paletas já decodificadas e, portanto, nenhuma nova paleta para a segunda CU 188 é incluída em um fluxo de bits que contém o pred_pallet_flag. Quando o tal indicador é igual a zero, o decodificador de vídeo 30 pode determinar que a paleta 192 para a segunda CU 188 está incluída no fluxo de bits como uma nova paleta. Em alguns exemplos, pred_pallet_flag pode ser codificado separadamente para cada componente colorido diferente de uma CU (como, por exemplo, três indicadores, um para Y, uma para U e um para V, para uma CU em um vídeo YUV). Em outro exemplo, um único pred_pallet_flag pode ser codificado para todos os componentes coloridos de uma CU.
[0150] No exemplo acima, o pred_pallet_flag é sinalizado por CU de modo a se indicar se qualquer uma das entradas da paleta para o bloco atual está predita. Em alguns exemplos, um ou mais elementos de sintaxe podem ser sinalizados em uma base por entrada. Ou seja, um indicador pode ser sinalizado para cada entrada de um preditor de paleta de modo a se indicar que a entrada está presente na paleta atual. Conforme observado acima, se uma entrada de paleta não for predita, a entrada de paleta pode ser explicitamente sinalizada.
[0151] Quando determina as segundas paletas 192 com relação às primeiras paletas 184 (pred_pallet_flag é igual a um, 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 preditivas, neste exemplo as primeiras paletas 184, são determinadas. As paletas preditivas podem ser associadas a uma ou mais CUs vizinhas da CU que é codificada atualmente (tais como CUs vizinhas (espacialmente ou com base na ordem de varredura) ou as amostras mais freqüentes de um vizinho causal, por exemplo), isto é, a segunda CU 188. As paletas da CUs vizinhas podem estar associadas a uma paleta preditora. Em alguns exemplos, tais como o exemplo mostrado na Figura 4, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem localizar uma CU vizinha esquerda, a primeira CU 180, quando determinam uma paleta preditiva para a segunda CU 188. Em outros exemplos, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem localizar uma ou mais CUs em outras posições relativas às segunda CU 188, tal como uma CU superior, a CU 196.
[0152] O codificador de vídeo 20 e/ou decodificador de vídeo 30 podem determinar uma CU para predição de paleta com base em uma hierarquia. Por exemplo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem identificar identificam a CU vizinha esquerda, a primeira CU 180 para predição de paleta. Se a CU vizinha esquerda não estiver disponível para predição (a CU vizinha esquerda é codificada com um modo que não modo de codificação baseada em paleta, tal como um modo de intra- predição ou um modo de inter-predição é localizada na borda mais à esquerda de uma imagem ou fatia, por exemplo), o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem identificar a CU vizinha superior, a CU 196. O codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem continuar procurando uma CU disponível de acordo com uma ordem predeterminada de localizações até localizar uma CU que tenha uma paleta disponível para predição de paleta. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem determinar uma paleta preditiva com base em vários blocos e/ou amostras reconstruídas de um bloco vizinho.
[0153] Embora o exemplo da Figura 4 mostre as primeiras paletas 184 como paletas preditivas de uma única CU, a primeira CU 180, em outros exemplos o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem localizar paletas para predição a partir de uma combinação de CUs vizinhas. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo podem aplicar uma ou mais fórmulas, funções, regras ou semelhantes para gerar uma paleta com base em paletas de uma ou uma combinação de uma série de CUs vizinhas.
[0154] Em ainda outros exemplos, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem construir uma lista de candidatos que inclui vários candidatos potenciais para predição de paleta. Em tais exemplos, o codificador de vídeo 20 pode codificar o índice para a lista de candidatos de modo a indicar a CU candidata na lista a partir da qual a CU atual utilizada para predição de paleta é selecionada (copia a paleta, por exemplo). O decodificador de vídeo 30 pode construir a lista de candidatas da mesma maneira, decodificar o índice e utilizar o índice decodificado para selecionar a paleta da CU correspondente para utilização com a CU atual.
[0155] Em um exemplo para fins de ilustração, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem construir uma lista de candidatas que inclui uma CU que é posicionada acima da CU que é codificada atualmente e uma CU que é posicionada à esquerda da CU que é atualmente codificada. Neste exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe de modo a indicar a seleção da candidata. Por exemplo, o codificador de vídeo 20 pode codificar um indicador que tem um valor de zero de modo a indicar que a paleta para CU atual é copiada da CU posicionada à esquerda da CU atual. O codificador de vídeo 20 pode codificar o indicador que tem o valor de um de modo a indicar que a paleta para a CU atual é copiada da CU posicionada acima da CU atual. O decodificador de vídeo 30 decodifica o indicador e seleciona a CU apropriada para predição de paleta.
[0156] Em ainda outros exemplos, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 determinam a paleta para a CU que é atualmente codificada com base na frequência com a qual valores de amostra incluídos em uma ou mais outras paletas ocorrem em uma ou mais CUs vizinhas. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem rastrear as cores associadas aos valores de índice mais frequentemente utilizados durante a codificação de um número predeterminado de CUs. O codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem incluir as cores mais frequentemente utilizadas na paleta para a CU que é atualmente codificada.
[0157] Conforme observado acima, em alguns exemplos, o codificador de vídeo 20 e/ou o decodificador de vídeo podem copiar uma paleta inteira de uma CU vizinha para codificar a CU atual. Além disto, ou Alternativamente, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem efetuar predição de paleta com base entrada. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe para cada entrada de uma paleta que indicam se as respectivas entradas são preditas com base em uma paleta preditiva (uma paleta de outra CU, por exemplo). Neste exemplo, o codificador de vídeo 20 pode codificar um indicador que tem um valor igual a um para uma dada entrada quando a entrada é um valor predidto de uma paleta preditiva (uma entrada correspondente de uma paleta associada a uma CU vizinha, por exemplo). O codificador de vídeo 20 pode codificar um indicador que tem um valor igual a zero para uma entrada específica de modo a indicar que a entrada específica não é predita a partir de uma paleta de outra CU. Neste exemplo, o codificador de vídeo 20 pode codificar também dados adicionais que indicam o valor da entrada de paleta não predita.
[0158] No exemplo da Figura 4, as segundas paletas 192 incluem 4 entradas 208-214 que têm um valor de índice de entrada 1, um valor de índice de entrada 2, um valor de índice de entrada 3 e um valor de índice de entrada 4 respectivamente. As entradas 208-214 relacionam os valores de índice a valores de pixel que incluem o valor de pixel A, o valor de pixel B, o valor de pixel C e o valor de pixel D respectivamente. De acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem utilizar qualquer uma das técnicas acima descritas para localizar a primeira CU 180 para fins de predição de paleta e copiar as entradas 1-3 das primeiras paletas 184 para as entradas 1-3 das segundas paletas 192 para codificar a segunda CU 188. Desta maneira, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem determinar as segundas paletas 192 com base nas primeiras paletas 184. Além disto, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem codificar dados para a entrada 4 a serem incluídos com as segundas paletas 192. Tais informações podem inclui o número de entradas de paleta não preditas a partir de uma paleta preditora e os valores de pixel que correspondem a essas entradas de paleta.
[0159] Em alguns exemplos, de acordo com aspectos desta revelação, um ou mais elementos de sintaxe podem indicar se as paletas, tais como as segundas paletas 192, são preditas inteiramente a partir de uma paleta preditiva (mostrada na Figura 4, como as primeiras paletas 184, mas que podem ser compostas de entradas de um ou mais blocos) ou se entradas específicas das segundas paletas 192 são preditas. Por exemplo, se um encosto axial inicial pode indicar se todas as entradas são preditas. Se o elemento de sintaxe inicial indicar que nem todas as entradas são preditas (um indicador que tem um valor de zero, por exemplo), um ou mais elementos de sintaxe adicionais pode indicar quais entradas das segundas paletas 192 são preditas a partir da paleta preditiva.
[0160] De acordo com alguns aspectos desta revelação, determinadas informações associadas à predição de paleta, podem ser inferidas de uma ou mais características dos dados que são codificados. Ou seja, em vez de o codificador de vídeo 20 codificar elementos de sintaxe (e/ou decodificador de vídeo 30 decodificar tais elementos de sintaxe) ou codificador de vídeo 20 e/ou decodificador de vídeo 30 podem efetuar predição de paleta com base em uma ou mais características dos dados que são codificados.
[0161] Em um exemplo para fins de ilustração, o valor de pred_pallet_flag descrito acima, pode ser inferido de um ou mais de, como, por exemplo, o tamanho da CU que é codificada, o tipo de quadro, o espaço colorido, o componente colorido, o tamanho do quadro, a taxa de quadros, o ID de camada na codificação escalonável de vídeo ou ID de vista na codificação de várias vistas. Ou seja, com relação ao tamanho da CU como, por exemplo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem determinar que o pred_pallet_flag acima descrito é igual a um para quaisquer CUs que ultrapassem uma tamanho predeterminado. Neste exemplo, não é necessário sinalizar o pred_pallet_flag no fluxo de bits codificado.
[0162] Embora descritos acima, com relação ao pred_pallet_flag, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem inferir também ou alternativamente outras informações associadas à predição de paleta tais como a CU candidata da qual a paleta é utilizada para predição, ou regras para construir candidatas à predição de paleta, com base em uma ou mais características dos dados que são codificados.
[0163] De acordo com outros aspectos desta revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem construir uma paleta às pressas. Por exemplo, quando se codifica inicialmente a segunda CU 188 não há entradas nas paletas 192. À medida que o codificador de vídeo 20 e/ou decodificador de vídeo 30 codificam novos valores para pixels da segunda CU 188, cada novo valor é incluído nas paletas 192. Ou seja, por exemplo, o codificador de vídeo 20 adiciona valores de pixel às paletas 192 à medida que os valores de pixel são gerados e sinalizados para as posições na CU 188. à medida que o codificador de vídeo 20 codifica pixels relativamente mais tarde na CU, o codificador de vídeo 20 pode codificar pixels que têm os mesmos valores daqueles já incluídos na paleta utilizando valores de índice em vez de sinalizar os valores de pixel. Da mesma maneira, quando o decodificador de vídeo 30 recebe um novo valor de pixel (sinalizado pelo codificador de vídeo 20, por exemplo) para uma posição na segunda CU 182, o decodificador de vídeo 30 inclui o valor de pixel nas paletas 192. Quando as posições de pixel decodificadas relativamente mais tarde na segunda CU 182 têm valores de pixel que foram adicionados às segundas paletas 192, o decodificador de vídeo 30 pode receber informações tais como, por exemplo, valores de índice que identificam os valores de pixel correspondentes nas segundas paletas 192 para reconstrução dos valores de pixel da segunda CU 188.
[0164] Em alguns exemplos, conforme descrito mais detalhadamente em seguida, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem manter as paletas 184 e 192 em um ou abaixo de um tamanho de paleta máximo. De acordo com aspectos desta revelação, se um tamanho de paleta máximo for atingido, por exemplo, à medida que as segundas paletas são construídas dinamicamente às pressas, então o codificador de vídeo 20 e/ou o decodificador de vídeo 30 executam o mesmo processo para remover uma entrada das segundas paletas 192. Um processo exemplar para remover entradas de paleta é uma técnica de primeiro dentro- primeiro fora (FIFO) na qual o codificador de vídeo 20 e/ou decodificador de vídeo 30 removem a entrada mais antiga de uma paleta. Em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem remover a entrada de paleta utilizada com menos frequência da paleta. Em ainda outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ponderar ambos os processos FIFO e de frequência de uso para determinar a entrada a ser removida. Ou seja, a remoção de uma entrada pode ser baseada em quão antiga a entrada é e com que frequência ela é utilizada.
[0165] De acordo com alguns aspectos, se uma entrada (valor de pixel) for removida de uma paleta e o valor de pixel ocorrer novamente em uma posição posterior na CU que é codificada, o codificador de vídeo 20 pode codificar o valor de pixel em vez de inclui uma entrada na paleta e codificar um índice. Além disto, ou alternativamente, o codificador de vídeo 20 pode reintroduzir entradas de paleta na paleta depois de terem sido removidas, à medida que o codificador de vídeo 20 e o decodificador de vídeo 30 varrem as posições na CU, por exemplo.
[0166] Em alguns exemplos, as técnicas para derivar uma paleta às pressas podem ser combinadas com uma ou mais outras técnicas para determinar uma paleta. Em particular, como, por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 pode codificar inicialmente as segundas paletas 192 (utilizando predição de paleta para predizer as segundas paletas 192 a partir das primeiras paletas 184, por exemplo) e pode atualizar as segundas paletas 192 quando codificam os pixels da segunda CU 188. Ao transmitir a paleta inicial, o codificador de vídeo 20 pode adicionar valores à paleta inicial ou alterar valores na paleta inicial à medida que valores de pixel de localizações adicionais na CU são varridos. Da mesma maneira, ao receber uma paleta inicial, o decodificador de vídeo 30 pode adicionar valores à paleta inicial ou alterar valores na paleta inicial à medida que os valores de pixel de localizações adicionais na CU são varridos.
[0167] O codificador de vídeo 20 pode, em alguns exemplos, sinalizar se a CU atual utiliza transmissão de uma paleta inteira, ou a geração de paleta às pressas ou uma combinação de transmissão de uma paleta inicial com atualização da paleta inicial por derivação às pressas. Em alguns exemplos, a paleta inicial pode ser uma paleta completa a um tamanho de paleta máximo, e neste caso os valores na paleta inicial podem ser alterados. Em outros exemplos, a paleta inicial pode ser menor que o tamanho de paleta máximo, e neste caso o codificador de vídeo 20 e o decodificador de vídeo 30 podem adicionar valores à e/ou alterar valores da paleta inicial.
[0168] De acordo com aspectos desta revelação, o tamanho das paletas, tais como as primeiras paletas 184 e as segundas paletas 192, como, por exemplo, em termos do número de valores de pixel que são incluídos na paleta pode ser fixo ou pode ser sinalizado utilizando-se um ou mais elementos de sintaxe em um fluxo de bits codificado. De acordo com alguns aspectos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar códigos unários ou códigos unários truncados (códigos que se truncam em um limite máximo do tamanho de paleta, por exemplo) para codificar o tamanho da paleta. De acordo com outros aspectos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem utilizar códigos de Golomb Exponencial ou Rice-Golomb para codificar o tamanho da paleta.
[0169] De acordo com ainda outros aspectos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados que indicam o tamanho da paleta depois de cada entrada da paleta. Com relação às paletas 192 como exemplo, o codificador de vídeo 20 pode codificar um indicador de interrupção depois de cada uma das entradas 208-214. Neste exemplo, um indicador de interrupção igual a um pode especificar que a entrada que é codificada atualmente é a entrada final das segundas paletas 192, enquanto um indicador de interrupção igual a zero pode indicar que há entradas adicionais nas segundas paletas 192. Por conseguinte, o codificador de vídeo 20 pode codificar indicadores de interrupção que têm um valor de zero depois de cada uma das entradas 2080212 e um indicador de interrupção que tem um valor de um depois da entrada 214. Em alguns casos, o indicador de interrupção pode não ser incluído no fluxo de bits quando a paleta construída atinge um limite de tamanho da paleta máximo. Embora os exemplos acima revelem técnicas para sinalizar explicitamente o tamanho das paletas, em outros exemplos o tamanho das paletas pode ser também transmitidos ou inferido condicionalmente com base nas chamadas informações colaterais (como, por exemplo, informações sobre características tais como o tamanho da CU que é codificada, o tipo de quadro, o espaço colorido, o componente colorido, o tamanho do quadro, a taxa de quadros, o ID de camada na codificação escalonável de vídeo ou o ID de vista na codificação de várias vistas, conforme observado acima).
[0170] As técnicas desta revelação incluem codificação de dados sem perdas ou, alternativamente, com algumas perdas (codificação com perdas). Com relação à codificação com perdas, por exemplo, o codificador de vídeo 20 pode codificar os pixels de uma CU sem casar exatamente os valores de pixel das paletas exatamente com os valores de pixel reais na CU. Quando as técnicas desta revelação são aplicadas à codificação com perdas, algumas restrições podem ser aplicadas à paleta. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem quantificar paleta, tais como as primeiras paletas 184 e as segundas paletas 192. Ou seja, o codificador de vídeo 20 e o decodificador de vídeo 30 podem fundir (quantificar) entradas de uma paleta quando os valores de pixel das entradas estiverem dentro de uma faixa predeterminada uns dos outros. Em outras palavras, se já houver um valor de pixel que esteja dentro de uma margem de erros dentro de um novo valor de paleta, o novo valor de paleta não é adicionado à paleta. Em outro exemplo, uma série de valores de pixel diferentes em um bloco pode ser mapeada em uma única entrada da paleta ou, de maneira equivalente a um único valor de pixel de paleta.
[0171] O decodificador de vídeo 30 pode decodificar valores de pixel da mesma maneira independentemente de se uma paleta específica ser sem perdas ou com perdas. Como exemplo, o decodificador de vídeo 30 pode utilizar um valor de índice transmitidos pelo codificador de vídeo 20 para uma dada posição de pixel em um bloco codificado de modo a selecionar uma entrada na paleta para a posição de pixel, sem consideração com se a paleta é sem perdas ou com perdas. Neste exemplo, o valor de pixel da entrada da paleta é utilizado como valor de pixel no bloco codificado, quer ele corresponda ao valor de pixel original exatamente ou não.
[0172] Em um exemplo de codificado com perdas, para fins de ilustração, o codificador de vídeo pode determinar um limite de erro, referido como valor delta. Uma entrada de valor de pixel candidata Plt_cand pode corresponder a um valor de pixel em uma posição em um bloco a ser codificado, tal como uma CU ou PU. Durante a construção da paleta, o codificador de vídeo 20 determina a diferença absoluta entre a entrada de valor de pixel candidata Plt_cand e todas as entradas de valor de pixel existentes na paleta. Se todas as definições absolutas entre a entrada de valor de pixel candidata Plt_cand e as entradas de valor de pixel existentes na paleta forem maiores que o valor delta, o codificador de vídeo 20 pode adicionar o candidato de valor de pixel à paleta como uma entrada. Se a diferença absoluta entre a entrada de valor de pixel Plat_cand e pelo menos uma entrada de valor de pixel existente na paleta for igual ou menor que o valor de delta, o codificador de vídeo 20 pode não adicionar a entrada de valor de pixel candidata Plt_cand à paleta. Assim, quando codifica a entrada de valor de pixel Plt_cand , o codificador de vídeo 20 pode selecionar a entrada com o valor de pixel que está mais próximo da entrada de valor de pixel Plt_cand, introduzindo assim alguma perda no sistema. Quando a paleta consiste em vários componentes (três componentes coloridos, por exemplo) a soma da diferença absoluta de valores de componentes individuais pode ser utilizada para comparação com o valor de delta.Alternativamente ou adicionalmente, a diferença absoluta para cada valor componente pode ser comparada com um segundo valor de delta.
[0173] Em alguns exemplos, as entradas de valor de pixel existentes na paleta observada acima, pode ter sido adicionadas utilizando-se um processo de comparação de delta semelhante. Em outros exemplos, os valores de pixel existentes na paleta pode ter sido adicionados utilizando-se outros processos. Por exemplo, uma ou mais entradas de valor de pixel iniciais podem ser adicionadas a uma paleta (sem uma comparação de deltas) para iniciar o processo de comparação de deltas de construção da paleta. O processo descrito acima pode ser implementado pelo codificador de vídeo 20 e/ou pelo decodificador de vídeo 30 para produção de paletas luma e/ou croma.
[0174] As técnicas descritas acima com relação à construção de paletas podem ser também utilizadas pelo codificador de vídeo 20 e pelo decodificador de vídeo 30 durante a codificação de pixels. Por exemplo, quando codifica um valor de pixel, o codificador de vídeo 20 pode comparar o valor de pixel com os valores de pixel das entradas na paleta. Se a diferença de valor de pixel absoluta entre o valor de pixel e uma das entradas na paleta for igual ou menor que um valor de delta, o codificador de vídeo 20 pode codificar o valor de pixel como a entrada da paleta. Ou seja, neste exemplo, o codificador de vídeo 20 codifica o valor de pixel utilizando uma das entradas da paleta quando o valor de pixel para produzir uma diferença absoluta suficientemente pequena (dentro de uma faixa predeterminada, por exemplo) VERSUS a entrada de paleta.
[0175] Em alguns exemplos, o codificador de vídeo 20 pode ser selecionar a entrada de paleta que apresenta a menor diferença de valor de pixel absoluta (comparada como o valor de pixel que é codificado) para codificar um valor de pixel. Como exemplo, o codificador de vídeo 20 pode codificar um índice de modo a indicar uma entrada da paleta que será utilizada para o valor de pixel, como, por exemplo, a entrada do valor de pixel de paleta que será utilizada para reconstruir o valor de pixel codificado no decodificador de vídeo 30. Se a diferença de valor de pixel absoluta entre o valor de pixel e todas as entradas na paleta for maior que delta, o codificador pode não utilizar uma das entradas de paleta para codificar o valor de pixel e em vez disso pode transmitir o valor de pixel do pixel a ser codificado para o decodificador de vídeo 30 (e possivelmente adicionar o valor de pixel como uma entrada à paleta).
[0176] Em outro exemplo, o codificador de vídeo 20 pode selecionar uma entrada de uma paleta para codificar um valor de pixel. O codificador de vídeo 20 pode utilizar a entrada selecionada como um valor de pixel preditivo. Ou seja, o codificador de vídeo 20 pode determinar um valor residual que representa a diferença entre o valor de pixel real e a entrada selecionada e codificar o resíduo. O codificador de vídeo 20 pode gerar valores residuais para pixels em um bloco que são preditos por entradas de uma paleta, e pode gerar um bloco residual que inclui respectivos valores de pixel residuais para o bloco de pixels. O codificador de vídeo 20 pode aplicar em seguida transformação e quantificação (conforme observado acima, com relação à Figura 2) ao bloco residual. Desta maneira, o codificador de vídeo 20 pode gerar coeficientes de transformada residuais quantificados.
[0177] O decodificador de vídeo 30 pode transformar por inversão e quantificar por inversão os coeficientes de transformada de modo a reproduzir o bloco residual. O decodificador de vídeo 30 pode reconstruir então um valor de pixel utilizando o valor de entrada de paleta preditivo e o valor residual para o valor de pixel. Por exemplo, o decodificador de vídeo 30 pode combinar o valor residual com o valor de entrada de paleta de modo a reconstruir o valor de pixel codificado.
[0178] Em alguns exemplos, o valor de delta pode ser diferente para tamanhos de CU, tamanhos de imagem, espaços coloridos diferentes ou componentes coloridos diferentes. O valor de delta pode ser predeterminado ou determinado com base em diversas condições de codificação. Por exemplo, o codificador de vídeo 20 pode sinalizar o valor de delta para o decodificador de vídeo 30 utilizando sintaxe de nível alto, tal como a sintaxe em PPS, SPS, VPS e/ou cabeçalho de fatia. Em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser preconfigurados para utilizar o mesmo valor de delta fixo. Em ainda outros exemplos, o codificador de vídeo 20 e/ou p decodificador de vídeo 30 podem derivar adaptativamente o valor de delta com base em informações colaterais (tinta condutora tamanho de CU, espaço colorido, componente colorido ou semelhante, conforme observado acima, por exemplo).
[0179] Em alguns exemplos, um modo de paleta de codificação com perdas pode ser incluído em um modo de codificação HEVC. Por exemplo, os modos de codificação podem incluir um modo de intra-predição, um modo de inter- predição, um modo de paleta de codificação sem perdas e um modo de paleta de codificação com perdas. Na codificação HEVC, conforme observado acima, com relação às Figuras 2 e 3, um parâmetro de quantificação (QP) é utilizado para controlar a distorção permitida. O valor de delta para codificação baseada em paleta pode ser calculado ou senão determinado como uma função do QP. Por exemplo, o valor de delta acima descrito pode ser 1<<(QP/6) ou 1<<((QP+d)/6), ode d é uma constante e “<<” representa o operador de deslocamentos para a esquerda em termos de bits.
[0180] A geração de uma paleta utilizando-se as técnicas de codificação com perdas descritas nesta revelação pode ser efetuada pelo codificador de vídeo 20, pelo decodificador de vídeo 30 ou por ambos. Por exemplo, o codificador de vídeo 20 pode gerar entradas em uma paleta para uma CU utilizando as técnicas de comparação de deltas descritas acima e sinalizar informações para a construção da paleta para utilização pelo decodificador de vídeo 30. Ou seja, o codificador de vídeo 20 pode ser configurado para sinalizar informações que indicam valores de pixel para entradas em uma paleta para uma CU e em seguida codificar valores de pixel utilizando os valores de pixel associados a tais entradas de paleta. O decodificador de vídeo 30 pode construir uma paleta utilizando tais informações e em seguida utilizar as entradas para decodificar valores de pixel de um bloco codificado. Em alguns exemplos, o codificador de vídeo 20 pode sinalizar valores de pixel que identificam entradas de paleta para uma ou mais posições de pixel do bloco codificado, e o decodificador de vídeo 30 pode utilizar os valores de indústria para recuperar as entradas de valor de pixel pertinentes da paleta.
[0181] Em outros exemplos, o decodificador de vídeo 30 pode ser configurado para construir uma paleta aplicando as técnicas de comparação de deltas descritas acima. Por exemplo, o decodificador de vídeo 30 pode receber valores de pixel para posições dentro de um bloco codificado e determinar se as definições absolutas entre os valores de pixel e as entradas de valor de pixel existentes na paleta são maiores que um valor de delta. Se assim for, o decodificador de vídeo 30 pode adicionar os valores de pixel como entradas na paleta, como, por exemplo, para utilização posterior na decodificação baseada em paleta de valores de pixel para outras posições de pixel do bloco utilizando valores de índice correspondentes sinalizados pelo codificador de vídeo 20. Neste caso, o codificador de vídeo 20 e o decodificador de vídeo 30 aplicam os mesmos processos ou processos semelhantes para gerar a paleta. Se não o caso, o decodificador de vídeo 30 pode não adicionar os valores de pixel à paleta.
[0182] Em um exemplo, para fins de ilustração, o decodificador de vídeo 30 pode receber valores de índice ou valores de pixel para diversas posições de pixel em um bloco. Se um valor de índice for recebido para uma posição de pixel, por exemplo, o decodificador de vídeo 30 pode utilizar o valor de índice para identificar uma entrada na paleta e utilizar o valor de pixel da entrada de paleta para a posição de pixel. Se um valor de pixel for recebido para a posição de pixel, o decodificador de vídeo 30 pode utilizar o valor de pixel recebido para a posição de pixel e aplicar também a comparação de deltas de modo a determinar se o valor de pixel deve ser adicionado à paleta e em seguida utilizado posteriormente para codificação de paleta.
[0183] No lado do codificador, se um valor de pixel para uma posição em um bloco para produzir uma diferença absoluta entre o valor de pixel e uma entrada de valor de pixel existente na paleta que é menor ou igual ao valor de delta, o codificador de vídeo 20 pode enviar um valor de índice para identificar a entrada na paleta para utilização na reconstrução do valor de pixel para essa posição. Se um valor de pixel para uma posição em um bloco para produzir valores de diferença absoluta entre o valor de pixel e as entradas de valor de pixel existentes na paleta que são todos maiores que o valor de delta, o codificador de vídeo 20 pode enviar o valor de pixel e adicionar o valor de pixel como uma nova entrada na paleta. Para construir a paleta, o decodificador de vídeo 30 pode utilizar valores de delta sinalizados pelo codificador, contar com um valor de delta fixo ou conhecido ou inferir ou derivar um valor de delta, conforme descrito acima, por exemplo.
[0184] Conforme observado acima, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem utilizar modos de codificação que incluem um modo de intra-predição, um modo de inter-predição, um modo de paleta de codificação sem perdas e uma modo de paleta de codificação com perdas quando codificam dados de vídeo. De acordo com alguns aspectos desta revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um ou mais elementos de sintaxe que indicam se a codificação baseada em paleta é habilitada. Por exemplo, em cada CU, o codificador de vídeo 20 pode codificar um elemento de sintaxe, tal como um indicador PLT_Mode_flag. O PLT_Mode_flag ou outro elemento de sintaxe pode indicar se um modo de codificação baseado em paleta será utilizado para uma dada CU (ou uma PU em outros exemplos). Por exemplo, este indicador pode ser sinalizado em um fluxo de bits de vídeo codificado ao nível de CU e em seguida recebido pelo decodificador de vídeo 30 quando da decodificação do fluxo de bits de vídeo codificado.
[0185] Neste exemplo, um valor deste PLT_Mode_flag igual a 1 pode especificar que a CU atual é codificada utilizando-se um modo de codificação baseado em paleta. Neste caso, o decodificador de vídeo 30 pode aplicar o modo de codificação baseado em paleta para decodificador a CU. Em alguns exemplos, um elemento de sintaxe pode incluir um de uma série de modos de codificação baseados em paleta diferentes para a CU (com perdas ou sem perdas, por exemplo). Um valor deste PLT_Mode_flag igual a 0 pode especificar que a CU atual é codificada utilizando-se um modo outro que não o modo de paleta. Por exemplo, pode ser utilizado qualquer um de diversos modos de codificação inter-preditivos, intra- preditivos ou outros. Quando o valor do PLT_Mode_flag é 0, o codificador de vídeo 20 pode codificar também dados adicionais de modo a indicar o modo específico utilizado para codificar a respectiva CU (um modo de codificação HEVC, por exemplo). A utilização do PLT_Mode_flag é descrita para fins de exemplificação. Em outros exemplos, contudo, outros elementos de sintaxe, tais como códigos de vários bits, podem ser utilizados para indicar se o modo de codificação baseado em paleta será utilizado para uma CU (ou uma PU em outros exemplos) ou para indicar qual de uma série de modos será utilizado para codificação.
[0186] Em alguns exemplos, o indicador acima descrito ou outros elementos de sintaxe podem ser transmitidos a um nível mais elevado que o nível de CU (ou PU). Por exemplo, o codificador de vídeo 20 pode sinalizar tal indicador ao nível de fatia. Neste caso, um valor igual a 1 indica que todas as CUs na fatia são codificada utilizando-se o modo de paleta. Neste exemplo, nenhuma informação de modo adicional, como, por exemplo, para modo de paleta ou outros modos é sinalizada ao nível de CU. Em outro exemplo, o codificador de vídeo 20 pode sinalizar tal indicador em um PPS, um SPS ou um VPS.
[0187] De acordo com alguns aspectos desta revelação, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 pode codificar um ou mais elementos de sintaxe (tais como o indicador acima descrito, por exemplo) a um dos níveis de fatia, PPS, SPS ou VPS, que especificam se o modo de paleta é habilitado ou desabilitado para a fatia, imagem, sequência específicas ou semelhantes, enquanto o PLT_Mode_flag indica se o modo de codificação baseado em paleta é utilizado para cada CU. Neste caso, se um indicador ou outro elemento de sintaxe enviado ao nível de fatia, PPS, SPS, VPS indicar que o modo de codificação por paleta é desabilitado, em alguns exemplos, pode não haver necessidade de sinalizar o PLT_Mode_flag para cada CU. Alternativamente, se um indicador ou outro elemento de sintaxe enviado ao nível de fatia, PPS, SPS ou VPS indicar que o modo de codificação por paleta é habilitado, o PLT_Mode_flag pode ser também sinalizado para indicar se o modo de codificação baseado em paleta será utilizado para cada CU. Mais uma vez, conforme mencionado acima, a aplicação destas técnicas para indicar codificação baseada em paleta de uma CU pode ser utilizada adicional ou alternativamente para indicar a codificação baseada em paleta de uma PU.
[0188] Em alguns exemplos, os elementos de sintaxe acima descritos podem ser sinalizados de maneira condicional no fluxo de bits. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 só pode codificar ou decodificar, respectivamente, os elementos de sintaxe com base no tamanho da CU, no tipo de quadro, no espaço colorido, no componente colorido, no tamanho de quadro, na temporização de quadros, no ID de camada na codificação escalonável de vídeo ou no ID de vista na codificação de várias vistas.
[0189] Embora os exemplos descritos acima se refiram à sinalização explícita, como, por exemplo, com um ou mais elementos de sintaxe em um fluxo de bits, em outros exemplos o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode determinar implicitamente se um modo de codificação por paleta está ativo e/ou é utilizado para codificar um bloco específico. O codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem determinar se a codificação baseada em paleta é utilizada para um bloco com base por exemplo, no tamanho da CU, no tipo de quadro, no espaço colorido, no componente colorido, no tamanho de quadro, na taxa de quadros, no ID de camada na codificação escalonável de vídeo ou no ID de vista na codificação de várias vistas.
[0190] Embora as técnicas da Figura 4 sejam descritas acima no contexto de CUs (HEVC). deve ficar entendido que as técnicas podem ser também aplicadas a unidades de predição (PUs) ou em outros processos e/ou padrões de codificação de vídeo.
[0191] A Figura 5 é um diagrama conceptual que mostra um exemplo da determinação de índices para uma paleta para um bloco de pixels, compatível com as técnicas desta revelação. Por exemplo, a Figura 5 inclui um mapa 240 de valores de índice (valores 1, 2 e 3) que relacionam respectivas posições de pixels associados aos valores de índice com uma entrada das paletas 244. As paletas 244 podem ser determinadas de maneira semelhante às primeiras paletas 184 e segundas paletas 192 descritas acima com relação à Figura 4.
[0192] Mais uma vez, as técnicas da Figura 5 são descritas no contexto do codificador de vídeo 20 (Figura 1 e Figura 2) e do 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 explanação. Entretanto, deve ficar entendido que as técnicas desta revelação não estão limitadas desta maneira e podem ser aplicadas por outros processadores e/ou aparelhos de codificação de vídeo em outros processos e/ou padrões de codificação de vídeo.
[0193] Embora o mapa 240 seja mostrado no exemplo da Figura 5 como incluindo um valor de índice para cada posição de pixel, deve ficar entendido que, em outros exemplos, nem todas as posições de pixel podem ser associadas a um valor de índice que relaciona um valor de pixel com uma entrada das paletas 244. Ou seja, conforme observado acima, Em alguns exemplos, o codificador de vídeo 20 pode codificar (e o decodificador de vídeo 30 pode obter, de um fluxo de bits codificado) uma indicação do valor de pixel real (ou sua versão quantificada) para uma posição no mapa 240 se o valor de pixel não for incluído nas paletas 244.
[0194] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um mapa adicional que indica quais posições de pixel são associadas a valores de índice. Por exemplo, suponha-se que a entrada (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 entrada do mapa (isto é, cada posição de pixel) que indicam se a entrada tem um valor de índice conexo. Por exemplo, o codificador de vídeo 20 pode codificar um indicador que tem o valor de 1 de modo a indicar que o valor de pixel na localizações (i, j) na CU é um dos valores nas paletas 244. O codificador de vídeo 20 pode, em tal exemplo, codificar também um índice de paleta (mostrado no exemplo da Figura 5 como valores 1-3) de modo a indicar esse valor de pixel na paleta e de modo a permitir que o decodificador de vídeo reconstrua o valor de pixel. Nos casos em que as paletas 244 incluem uma única entrada e um valor de pixel conexo, o codificador de vídeo 20 pode saltar a sinalização do valor de índice. O codificador de vídeo 20 pode codificar um indicador de modo a ter um valor de zero de modo a indicar que o valor de pixel na localização (i, j) na CU não é uma dos valores nas paletas 244. Neste exemplo, o codificador de vídeo 20 pode codificar também uma indicação do valor de pixel para utilização pelo decodificador de vídeo 30 na reconstrução do valor de pixel. Em alguns casos, o valor de pixel pode ser codificado de maneira com perdas.
[0195] O valor de um pixel de uma posição de uma CU pode fornecer uma indicação dos valores de um ou mais outros pixels em outras posições da CU. Por exemplo, pode haver uma probabilidade relativamente alta de que as posições de pixel vizinhas de uma CU tenham o mesmo valor de pixel ou possam ser mapeadas no mesmo valor de índice (no caso de codificação com perdas, em que mais de um valor de pixel pode ser mapeado em um único valor de índice).
[0196] Por conseguinte, de acordo com aspectos desta revelação, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe que indicam o número de pixels ou valores de índice consecutivos em uma dada ordem de varredura que têm o mesmo valor de pixel ou mesmo valor de índice. Conforme observado acima, a cadeia de valores de pixel ou índice de valor semelhante pode ser aqui referida como execução. Em um exemplo, para fins de ilustração, se dois pixels ou índices consecutivos, em uma dada ordem de varredura, tiverem valores diferentes, a execução é igual a zero. Se dois pixels ou índices consecutivos em uma dada ordem de varredura tiverem o mesmo valor, mas o terceiro pixel ou índice na ordem de varredura tiver um valor diferente, a execução é igual a um. Para três índices ou pixels consecutivos com o mesmo valor, a execução é dois e assim por diante. O decodificador de vídeo 30 pode obter os elementos de sintaxe que indicam uma execução de um fluxo de bits codificado e utilizar os dados para determinar o número de localizações consecutivas que têm o mesmo valor de pixel ou índice.
[0197] Em um exemplo para fins de ilustração, considere-se a linha 248 do mapa 240. Supondo-se uma direção varredura horizontal, da esquerda para a direita, a linha 248 inclui cinco valores de índice de “2” e três valores de índice “três”. de acordo com aspectos desta revelação, o codificador de vídeo 20 pode codificar um valor de índice de 2 para a primeira posição da linha 248 na direção de varredura. Além disto, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe que indicam à execução de valores consecutivos na direção de varredura que têm o mesmo valor de índice do valor de índice sinalizado. No exemplo da linha 248, o codificar 20 pode sinalizar uma execução de 4, indicando assim que os valores de índice da quatro posições seguintes na direção de varredura compartilham o mesmo valor de índice do valor de índice sinalizado. O codificador de vídeo 20 pode executar o mesmo processo para o valor de índice diferente seguinte na linha 248. Ou seja, o codificador de vídeo 20 pode codificar um valor de índice de 3 e um ou mais elementos de sintaxe que indicam uma execução de dois. O decodificador de vídeo 30 pode obter os elementos de sintaxe que indicam o valor de índice e o número de índices consecutivos na direção de varredura que têm (a execução).
[0198] Conforme observado acima, os índices de um mapa são varridos em uma ordem específica. De acordo com aspectos desta revelação, a direção de varredura pode ser vertical, horizontal ou a uma diagonal (45 graus ou 135 graus em sentido diagonal no bloco, por exemplo). Em alguns exemplos, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe para cada bloco que indicam a direção de varredura para varrer os índices do bloco. Além disto, ou alternativamente, a direção de varredura pode ser sinalizada ou inferida com base nas informações colaterais, tais como, por exemplo, tamanho de bloco, espaço colorido e/ou componente colorido. O codificador de vídeo 20 pode especificar varreduras para cada componente colorido de um bloco. Alternativamente, uma varredura especificada pode aplicar-se a todos os componentes coloridos de um bloco.
[0199] Com relação a uma varredura baseada em colunas, considere-se a coluna 252 do mapa 240. Supondo-se uma direção de varredura vertical, do topo para a base, a coluna 252 inclui seis valores de índice de “2” e dois valores de índice de “3”. De acordo com aspectos desta revelação, o codificador de vídeo 20 pode codificar um valor de índice de 2 para a primeira posição da linha 252 na direção de varredura (no topo relativo da coluna 252). Além disto, o codificador de vídeo 20 pode sinalizar uma execução de 5, indicando assim que os valores de índice das cinco posições seguintes na direção de varredura compartilham o mesmo valor de índice do valor de índice sinalizado. O codificador de vídeo 20 pode codificar também um valor de índice de 3 para a posição seguinte na direção de varredura e um ou mais elementos de sintaxe que indicam uma execução de um. O decodificador de vídeo 30 pode obter os elementos de sintaxe que indicam o valor de índice e o número de índices consecutivos na direção de varredura que tem o mesmo valor de índice (a execução).
[0200] De acordo com aspectos desta revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem, adicional ou alternativamente, efetuar cópia em linha para uma ou mais entradas do mapa 240. A cópia em linha pode depender em alguns exemplos da direção de varredura. Por exemplo, o codificador de vídeo 20 pode indicar que um valor de pixel ou índice para uma entrada específica em um mapa é igual a um valor de pixel ou índice em uma linha acima da entrada específica (para uma varredura horizontal) ou da coluna à esquerda da entrada específica (para uma varredura vertical). O codificador de vídeo 20 pode indicar também como uma execução, o número de valores de pixel ou índice na ordem de varredura que são iguais à entrada na linha acima ou à coluna à esquerda da entrada específica. Neste exemplo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem copiar valores de pixel ou índice da linha vizinha especificada e a partir do número especificado de entradas para a linha do mapa que é codificada atualmente.
[0201] Em um exemplo para fins de ilustração, considere-se as colunas 256 e 260 do mapa 240. Supondo-se uma direção de varredura vertical, do topo para a base, a coluna 256 inclui três valores de índice de “1”, três valores de índice “2” e dois valores de índice de “três”. A coluna 260 inclui os mesmos valores de índice que têm a mesma ordem na direção de varredura. De acordo com aspectos desta revelação, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe para a coluna 260 que indicam que a coluna 260 inteira é copiada da coluna 256. O elemento ou elementos de sintaxe podem ser associados a uma primeira entrada da coluna 266 no topo relativo do mapa 240. O decodificador de vídeo 30 pode obter os elementos de sintaxe que indicam a cópia em linha e copiar os valores de índice da coluna 256 para a coluna 260 quando decodifica a coluna 260.
[0202] De acordo com aspectos desta revelação, as técnicas para codificar as chamadas execuções de entradas podem ser utilizadas em conjunto com as técnicas para cópia em linha descritas acima. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe (um indicador, por exemplo) que indicam se o valor de uma entrada em um mapa é obtido de um a paleta ou o valor de uma entrada em um mapa é obtido de uma linha codificada anteriormente no mapa 240. O codificador de vídeo 20 pode codificar também um ou mais elementos de sintaxe que indicam um valor de índice de uma paleta ou a localização da entrada na linha (a fileira ou coluna). O codificador de vídeo 20 pode codificar também um ou mais elementos de sintaxe que indicam o número de entradas consecutivas que compartilham o mesmo valor. O decodificador de vídeo 30 pode obter tais informações de um fluxo de bits codificado e utilizar as informações para reconstruir o mapa e os valores de pixel para um bloco.
[0203] Em um exemplo para fins de ilustração, considere-se as fileiras 264 e s68 do mapa 240. Supondo-se uma direção de varredura horizontal, da esquerda para a direita, a fileira 264 inclui três valores de índice de “1”, dois valores de índice de “2” e três valores de índice de “3”. A fileira 268 inclui cinco valores de índice de “1” e três valores de índice de “3”. Neste exemplo, o codificador de vídeo 20 pode identificar entradas específicas da coluna 264 seguidas de uma execução quando se codificam dados para a fileira 268. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe que indicam que a primeira posição da fileira 268 (a posição mais à esquerda da fileira 268) é a mesma primeira posição da fileira 264. O codificador de vídeo 20 pode codificar também um ou mais elementos de sintaxe que indicam que a execução seguinte de duas entradas consecutivas na direção de varredura na fileira 268 é a mesma primeira posição da fileira 264.
[0204] Em alguns exemplos, o codificador de vídeo 20 pode também determinar se vai codificar o valor de pixel ou índice atual com relação a uma posição em outra fileira (ou coluna) ou se vai codificar o valor de pixel ou índice atual utilizando um elemento de sintaxe de execução. Por exemplo, depois de codificar o elemento ou elementos de sintaxe que indicam a primeira posição da fileira 264 e a execução de duas entradas (observadas acima), o codificador de vídeo 20 pode codificar para as quarta e quinta posições na linha 268 (da esquerda para a direita) um ou mais elementos de sintaxe que indicam um valor de um para a quarta posição e um ou mais elementos de sintaxe que indicam uma execução de um. Consequentemente, o codificador de vídeo 20 codifica estas duas posições se referência a outra linha (ou coluna). O codificador de vídeo 20 pode codificar então a primeira posição que tem um valor de índice de 3 na fileira 268 com relação à fileira superior 264 (indicando uma cópia da fileira superior 264 e à execução de posições consecutivas na ordem de varredura que têm o mesmo valor de índice, por exemplo). Por conseguinte, de acordo com aspectos desta revelação, o codificador de vídeo 20 pode selecionar entre codificar valores de pixel ou índice de uma linha (ou coluna) com relação a outros valores da linha (ou coluna) como, por exemplo, utilizando uma execução, codificar valores de pixel ou índice de uma linha (ou coluna) com relação a valores de outra linha (ou coluna) ou uma combinação deles. O codificador de vídeo 20 pode, em alguns exemplos, efetuar uma otimização de taxa/distorção para fazer a seleção.
[0205] O decodificador de vídeo 30 pode receber os elementos de sintaxe descritos acima e reconstruir a fileira 268. Por exemplo, o decodificador de vídeo 30 pode obter dados que indicam uma localização específica em uma fileira vizinha da qual copiar o valor de indústria conexo para a posição do mapa 240 que é atualmente codificada. O decodificador de vídeo 30 pode obter também dados que indicam o número de posições consecutivas na ordem de varredura que têm o mesmo valor de índice.
[0206] Em alguns exemplos, a linha da qual as entradas são copiadas pode estar diretamente adjacente à entrada da linha que é atualmente codificada (conforme mostrado nos exemplos da Figura 5. Em outros exemplos, contudo, várias linhas podem ser armazenadas pelo codificador de vídeo 20 e/ou pelo decodificador de vídeo 30, de modo que qualquer uma das várias linhas do mapa possa ser utilizada como entradas preditivas para a linha do mapa que é codificada atualmente. Consequentemente, em alguns exemplos, o valor de pixel para uma entrada pode ser sinalizado como sendo igual ao valor de pixel de uma entrada em uma fileira imediatamente acima (ou coluna à esquerda de) ou duas ou mais fileiras acima (ou coluna à esquerda de) da fileira atual.
[0207] Em um exemplo para fins de ilustração, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para armazenar as N fileiras anteriores de entradas antes da codificação da fileira atual de entradas. Neste exemplo, o codificar 20 pode indicar a fileira preditiva (a fileira da qual as entradas são copiadas) em um fluxo de bits com um código unário truncado ou outros códigos. Em outro exemplo, o codificador de vídeo 20 pode codificar (e o decodificador de vídeo 30 pode decodifica) um valor de deslocamento entre a linha atual e a linha preditiva do mapa 240 utilizada como uma referência para codificar a linha atual. Ou seja, o codificador de vídeo 20 pode codificar uma indicação de uma linha (ou coluna) específica da qual um valor de índice é copiado. Em alguns exemplos, o valor de deslocamento pode ser um vetor de deslocamento. Ou seja, que c[0], c[1], ... , denotem os índices da linha atual do mapa 240 e que u[0], u[1], u[2], ... , denotem os índices de uma linha preditiva do mapa 240, tal como uma linha vizinha superior. Neste exemplo, dado que o vetor de deslocamento e d, o valor de índice para c[i] pode ser predito a partir de u[i+d]. O valor de d pode ser codificado utilizando-se códigos de Golomb Exponencial ou Golomb-Rice unários, unários truncados e Golomb Exponencial ou Golomb-Rice.
[0208] A Figura 6 é um fluxograma que mostra um processo exemplar para codificar dados de vídeo utilizando-se um modo de codificação de paleta, compatível com as técnicas desta revelação. O método da Figura 6 é explicado com relação a um codificador de vídeo, tal como o codificador de vídeo 20 (Figuras 1 e 2) ou o decodificador de vídeo 30 (Figuras 1 e 3). Entretanto, deve ficar entendido que outros aparelhos de codificação de vídeo podem ser configurados para executar um método semelhante. Além do mais, determinadas etapas no método podem ser executadas em uma ordem diferente ou em paralelo. Da mesma maneira, determinadas etapas podem ser omitidas e outros etapas podem ser adicionadas, em diversos exemplos.
[0209] Um codificador de vídeo, tal como o codificador de vídeo 20 e/ou o decodificador de vídeo 30, pode determinar inicialmente se um modo para codificar o bloco atual de dados de vídeo é um modo de codificação baseada em paleta (280). Conforme observado acima, um ou mais elementos de sintaxe podem ser incluídos em um fluxo de bits indicando um modo de codificação do bloco atual (um elemento de sintaxe PLT_Mode_flag, por exemplo). Em outros exemplos, o codificador de vídeo pode fazer uma determinação com base nas chamadas informações colaterais, conforme observado acima.
[0210] Seja como for, se o modo de codificação baseado em paleta não for utilizado para o bloco que é codificado atualmente (a ramificação “não” da etapa 208) o codificador de vídeo pode codificar o bloco dados de vídeo utilizando um outro modo que não o modo de codificação baseada em paleta (282). Por exemplo, o codificador de vídeo pode codificar o bloco de dados de vídeo utilizando um modo não baseado em paleta, tal como um intra-modo ou outro modo de codificação.
[0211] Se o modo de codificação baseado em paleta for utilizado para o bloco que é atualmente codificado (a ramificação “sim” da etapa 208), o codificador de vídeo pode determinar uma paleta para codificar o bloco atual (284). Conforme descrito com relação às Figuras 7 e 8 abaixo, em alguns exemplos, o codificador de vídeo pode determinar a paleta para o bloco atual com base em uma paleta associada a um ou mais outros blocos codificados anteriormente de dados de vídeo.
[0212] O codificador de áudio pode determinar também valores de índice para o bloco que é atualmente codificado (286). Conforme descrito mais detalhadamente com relação à Figura 9 abaixo, por exemplo, o codificador de vídeo 20 pode determinar um mapa que indica quais posições de pixel do bloco são codificadas utilizando-se um valor de índice que relaciona uma posição de um pixel a uma entrada da paleta determinada que tem um valor de pixel conexo. Em alguns casos, o codificador de vídeo pode determinar um ou mais valores de índice com relação a outros valores de índice do bloco. Por exemplo, o codificador de vídeo pode determinar uma execução de valores de índice e/ou um valor de índice com base em um valor de índice localizado em outra linha ou coluna do bloco.
[0213] O codificador de vídeo em seguida codifica os dados de vídeo do bloco utilizando a paleta determinada e valores de índice (280). Com relação ao codificador de vídeo 20, por exemplo, o codificador de vídeo 20 pode codificar dados que indicam a paleta assim como os valores de índice em um fluxo de bits codificado. O codificador de vídeo 20 pode codificar também, para quaisquer posições de pixel que não têm um pixel correspondente na paleta determinada, valores de pixel reais ou suas versões quantificadas em tais posições. O decodificador de vídeo 30 pode efetue parse ou decodificar a paleta, valores de índice e valores de pixel de um fluxo de bits codificado e utilizar os dados para reconstruir o bloco de dados de vídeo.
[0214] A Figura 7 é um fluxograma que mostra um processo exemplar pode determinar uma paleta na codificação baseada em paleta, compatível com as técnicas desta revelação. O método da Figura 7é explicado com relação a um codificador de vídeo, tal como o codificador de vídeo 20 (Figuras 1 e 2) ou o decodificador de vídeo 30 (Figuras 1 e 3). Entretanto, deve ficar entendido que outros aparelhos de codificação de vídeo podem ser configurados para executar um método semelhante. Além do mais, determinadas etapas no método podem ser executadas em uma ordem diferente ou em paralelo. Da mesma maneira, determinadas etapas podem ser omitidas e outras etapas podem ser adicionadas em diversos exemplos. Em alguns exemplos, as técnicas da Figura 7 podem ser executadas durante a etapa 284 da Figura 6.
[0215] No exemplo da Figura 7, o codificador de vídeo pode determinar o tamanho da paleta (300). Em alguns exemplos, o tamanho da paleta pode ser fixo. Em outros exemplos, o tamanho da paleta pode ser dinamicamente ajustado durante a codificação (pela adição ou remoção de entradas da paleta, por exemplo). O codificador de vídeo pode codificar um ou mais elementos de sintaxe que indicam o tamanho da paleta.
[0216] O codificador de vídeo pode determinar se a paleta para codificar o bloco atual é predita a partir de um ou mais outras paletas codificadas anteriormente (302). Se a paleta for predita (ramificação sim da etapa 302), o codificador de vídeo codifica a paleta preditiva (304). Por exemplo, o codificador de vídeo 20 pode codificar dados que indicam que a paleta para o bloco atual é baseada em uma ou mais paletas codificadas anteriormente, assim como dados que indicam a localização de um bloco associado à paleta preditiva (ou que identificam a paleta preditiva propriamente dita). Da mesma maneira, o decodificador de vídeo 30 pode obter tais dados de um fluxo de bits codificado. Conforme descrito acima, com relação à Figura 4, a paleta preditiva pode estar associada a um bloco vizinho do bloco que é atualmente codificado.
[0217] O codificador de vídeo pode determinar uma ou mais entradas da paleta para codificar o bloco atual com base em uma ou mais entradas da paleta preditiva determinada (306). Em alguns exemplos, o codificador de vídeo pode copiar uma paleta inteira de outro bloco para codificar o bloco atual. Em outros exemplos, o codificador de vídeo pode copiar seletivamente entradas de unidade de acesso paleta. A predição de paleta pode ser baseada, em alguns exemplos, na frequência com a qual as entradas de paleta são utilizadas em um ou mais blocos codificados anteriormente.
[0218] O codificadores de vídeo pode determinar também uma ou mais entradas não preditas da paleta (308). Por exemplo, em alguns casos, apenas uma parte de uma paleta pode ser predita a partir de outras paletas codificadas anteriormente. Em outros casos, uma paleta pode não ser codificada de maneira preditiva de todo. Em tais casos, o codificador de vídeo 20 pode determinar entradas de paleta 100 (ou depois de) executar as técnicas de predição de paleta aqui descritas.
[0219] A Figura 8 é um fluxograma que mostra um processo exemplar para determinar índices de um bloco de dados de vídeo compatível com as técnicas desta revelação. O método da Figura 8 explicado com relação a um codificador de vídeo, tal como o codificador de vídeo 20 (Figuras 1 e 2) ou o decodificador de vídeo 30 (Figuras 1 e 3). Entretanto, deve ficar entendido que outros aparelhos de codificação de vídeo podem ser configurados para executar um método semelhante. Além do mais, determinadas etapas no método podem ser executadas em uma ordem diferente ou em paralelo. Da mesma maneira, determinadas etapas podem ser omitidas e outras etapas podem ser adicionadas, em diversos exemplos. Em alguns exemplos, as técnicas da Figura 8 podem ser executadas durante a etapa 286 da Figura 6.
[0220] O codificador de vídeo pode determinar inicialmente a direção de varredura, como, por exemplo, para varrer o mapa de valores de índice na codificação baseada em paleta (320). Em alguns exemplos, conforme observado acima, com relação ao exemplo da Figura 5, o codificador de vídeo pode ser pré-configurado para utilizar uma direção de varredura específica. Em outros exemplos, o codificador de vídeo pode codificar um ou mais elementos de sintaxe que indicam a direção de varredura e determinar a direção de varredura com base nos elementos de sintaxe. Em ainda outros exemplos, o codificador de vídeo pode determinar a direção de varredura com base nas chamadas informações colaterais.
[0221] O codificador de vídeo pode determinar também um mapa de posições do bloco de dados de vídeo que é atualmente codificado que têm valores de índice conexos de uma paleta. Por exemplo, um ou mais valores de pixel do bloco que é atualmente codificado podem não estar representados na paleta do bloco. Em tais exemplos, o codificador de vídeo pode codificar os valores de pixel diretamente (em vez de codificar um valor de índice que identifica o valor de pixel na paleta). O mapa pode indicar quais posições de pixel estão associadas a um valor de índice e quais posições de pixel não estão associadas a um valor de índice.
[0222] O codificador de vídeo determina um ou mais primeiros valores de índice (324). Para um dado pixel no bloco o codificador de vídeo pode determinar um valor de índice que relaciona o valor de pixel do dado pixel a uma entrada na paleta para o bloco.
[0223] O codificador de vídeo determina também um ou mais valores de índice com base nos 1s valores de índice (326). Conforme descrito acima, com relação à Figura 5, por exemplo, o codificador de vídeo pode determinar um ou mais valores de índice com relação a outros valores de índice já codificados. Em alguns exemplos, o codificador de vídeo pode determinar segundos valores de índice com base em uma execução de valores de índice do mesmo valor consecutivos. Em outros exemplos, o codificador de vídeo pode determinar segundos valores de índice com base em um ou mais primeiros valores de índice incluídos em uma linha diferente da linha de pixels que é atualmente codificada. Em outros exemplos, o codificador de vídeo pode aplicar uma combinação de técnicas para determinar os segundos valores de índice.
[0224] Deve se reconhecer que, dependendo do exemplo, determinados atos ou eventos de qualquer uma das técnicas aqui descritas podem ser executados em uma sequência diferente, podem ser adicionados, fundidos ou deixados completamente de fora (nem todos os atos ou eventos descritos são necessários para a prática das técnicas, por exemplo). Além do mais, em determinados exemplos os atos ou eventos podem ser executados concomitantemente, como, por exemplo, através de processamento de vários fluxos, processamento com interrupções ou vários processadores, e não sequencialmente. Além disto, embora determinados aspectos desta revelação sejam descritos como sendo executados por um único módulo ou unidade para maior clareza, deve ficar entendido que as técnicas desta revelação podem ser executadas por uma combinação de unidades ou módulos associados a um codificador de vídeo.
[0225] Determinados aspectos desta revelação foram descritos com relação ao padrão HEVC em desenvolvimento para fins de ilustração. Entretanto, as técnicas descritas nesta revelação podem ser úteis em outros processos de codificação de vídeo, inclusive outros processos de codificação de vídeo padrão ou patenteados ainda não desenvolvidos.
[0226] As técnicas descritas acima podem ser executadas pelo codificador de vídeo 20 (Figuras 1 e 2) ou o decodificador de vídeo 30 (Figuras 1 e 3), ambos os quais podem ser geralmente referidos como codificador de vídeo. Da mesma maneira, a codificação de vídeo pode refere-se à codificação de vídeo ou decodificação de vídeo, conforme aplicável.
[0227] Embora combinações específicas de diversos aspectos das técnicas sejam descritas acima, estas combinações são apresentadas meramente para mostrar exemplos das técnicas descritas nesta revelação. Por conseguinte, as técnicas desta revelação não devem ser limitadas a estas combinações exemplares e podem abranger qualquer combinação concebível dos diversos aspectos das técnicas descritas nesta revelação.
[0228] Em um ou mais exemplos, as funções descritas podem ser interface de programação com aplicativos em hardware, software, firmware ou qualquer combinação deles. Se interface de programação com aplicativos em software, as funções podem ser armazenadas ou transmitidas como uma ou mais instruções ou código, em um meio passível de leitura por computador e executadas por uma unidade de processamento baseada em hardware. Os meios passíveis de leitura por computador podem incluir meios de armazenamento passíveis de leitura por computador que correspondem a um meio tangível tal como meios de armazenamento de dados ou meios de comunicação que incluam qualquer meio que facilite a transferência de um programa de computador de um lugar para outro, como, por exemplo, de acordo com um protocolo de comunicação. Da mesma maneira, os meios passíveis de leitura por computador podem compreender geralmente a (1) meios de armazenamento passíveis de leitura por computador tangíveis que são não transitórios ou (2) a um meio de comunicação tal como um sinal ou onda portadora. Os meios de armazenamento de dados podem ser quaisquer meios disponíveis que possam ser acessados por um ou mais computadores ou um ou mais processadores para recuperar instruções, códigos e/ou estruturas de dados para implementação das técnicas descritas nesta revelação. Um produto de programa de computador pode incluir um meio passível de leitura por computador.
[0229] A título de exemplo, e não de limitação, tais meios de armazenamento passíveis de leitura por computador podem compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento em disco óptico, armazenamento em disco magnético ou outros aparelhos de armazenamento magnético, memória flash ou qualquer outro meio que possa ser utilizado para armazenar código de programa desejado sob a forma de instruções ou estruturas de dados e que possa ser acessado por um computador. Além disto, qualquer conexão é denominada apropriadamente de meio passível de leitura por computador. Por exemplo, se as instruções forem transmitidas de um site da Web, servidor ou outra fonte remota utilizando-se um cabo coaxial, um cabo de fibra ótica, um par trançado, uma linha de assinante digital (DSL) ou tecnologias sem fio tais como infravermelho, rádio e microonda, então o cabo coaxial, o cabo de fibra óptica, o par trançado, a DSL ou tecnologias sem fio tais como infravermelho, rádio e microonda são incluídos na definição de meio. Deve ficar entendido, contudo, os meios de armazenamento passíveis de leitura por computador e os meios de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios transitórios mas são em vez disso direcionados a meios de armazenamento não transitórios, tangíveis. Disco (DISK e DISC) conforme aqui utilizado, inclui disco compacto (CD), disco de laser, disco óptico, disco versátil digital (DVD), disco flexível e disco Blu-ray, onde discos (DISKs) reproduzem usualmente dados magneticamente, enquanto discos (DISCs) reproduzem dados opticamente com lasers. Combinações dos componentes acima devem ser também incluídas dentro do alcance dos meios passíveis de leitura por computador.
[0230] As instruções podem ser executadas por um ou mais processadores, tais como um ou mais processadores de sinais digitais (DSPs), microprocessadores de propósito geral, circuitos integrados específicos de aplicativo (ASICs), arranjos lógicos programáveis no campo (FPGAs) ou outros circuitos lógicos integrados ou discretos equivalentes. Por conseguinte, o termo processador conforme aqui utilizado, pode referir-se a qualquer uma das estruturas precedentes ou a qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disto, sob alguns aspectos, a funcionalidade aqui descrita pode ser proporciona da dentro de hardware dedicado e/ou módulos de software configurados para codificação e decodificação ou incorporados a um codec combinado. Além disto, as técnicas podem ser completamente implementadas em um ou mais circuitos ou elementos lógicos.
[0231] As técnicas desta revelação podem ser implementadas em uma ampla variedade de aparelhos ou equipamentos, que incluem um aparelho telefônico sem fio, um circuito integrado (IC) ou um conjunto de ICs (um conjunto de chips, por exemplo). Diversos componentes, módulos ou unidades são descritos nesta revelação para enfatizar aspectos funcionais de aparelhos configurados para executar as técnicas descritas, mas não exigem necessariamente execução por unidades de hardware diferentes. Em vez disso, conforme descrito acima, diversas unidades podem ser combinadas em uma unidade de hardware de codec ou apresentadas por uma coleção de unidades de hardware interoperantes, que incluem um ou mais processadores descritos acima, em conjunto com simultânea e/ou firmware adequado.
[0232] Foram descritos diversos exemplos. Estes e outros exemplos estão dentro do alcance das reivindicações seguintes.

Claims (15)

1. Método de decodificação de dados de vídeo, caracterizado pelo fato de que compreende: determinar (304) uma paleta preditora que tem uma pluralidade de inserções preditoras de paleta que indicam respectivos valores de pixel, em que determinar a paleta preditora compreende determinar a paleta preditora com base em inserções de paleta (202, 204, 206) associadas a paletas de uma pluralidade de blocos de dados de vídeo; determinar (306), para uma segunda paleta (192) associada a um segundo bloco (188) de dados de vídeo que é codificado após a pluralidade de blocos, uma ou mais inserções de paleta (208, 210, 212) da segunda paleta com base nas inserções preditoras de paleta da paleta preditora; e decodificar pixels do segundo bloco de dados de vídeo com o uso da segunda paleta, em que decodificar os pixels compreende: obter (286), a partir de um fluxo de BITS codificado, respectivos valores de índice para um ou mais dos pixels, em que os respectivos valores de índice identificam uma inserção da segunda paleta; e determinar (288) valores para o um ou mais pixels através da correspondência dos respectivos valores de índice para pelo menos uma das inserções da segunda paleta.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: quando a uma ou mais inserções da segunda paleta incluem todas as inserções preditoras de paleta, decodificar dados que indicam que a uma ou mais inserções da segunda paleta incluem todas as inserções preditoras de paleta; e quando a uma ou mais inserções da segunda paleta incluem menos do que todas as inserções preditoras de paleta, decodificar, para cada inserção da paleta preditora, dados que indicam se a respectiva inserção está incluída na segunda paleta.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que compreende adicionalmente: quando a uma ou mais inserções da segunda paleta incluem menos do que todas as inserções preditoras de paleta, decodificar dados que indicam inserções de paletas da segunda paleta que não estão incluídas na paleta preditora.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: atribuir valores de índice à uma ou mais inserções da segunda paleta com base na uma ou mais inserções da segunda paleta estarem incluídas na paleta preditora, incluindo atribuir um valor de índice relativamente mais baixo à uma ou mais inserções da segunda paleta que estão incluídas na paleta preditora do que quaisquer outras inserções da segunda paleta.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: decodificar um sinalizador de previsão para cada inserção preditora de paleta da paleta preditora, em que o sinalizador de previsão indica se a respectiva inserção preditora de paleta está incluída na segunda paleta, e em que determinar a uma ou mais inserções de paleta da segunda paleta com base nas inserções preditoras de paleta da paleta preditora compreende, para cada sinalizador de previsão de paleta que indica que a respectiva inserção preditora de paleta está incluída na segunda paleta, copiar a respectiva inserção preditora de paleta para a segunda paleta.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: determinar uma frequência com a qual cada inserção preditora de paleta da paleta preditora é usada para codificar pixels da pluralidade de blocos; e decodificar dados que identificam cada inserção preditora de paleta da paleta preditora com base na frequência.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: decodificar um elemento de sintaxe de previsão de paleta que indica que a uma ou mais inserções da segunda paleta têm por base as inserções preditoras de paleta.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente quantizar a uma ou mais inserções da segunda paleta através da combinação de inserções da segunda paleta.
9. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: adicionar uma inserção à segunda paleta com base na possibilidade de uma diferença entre um valor de pixel da inserção a ser adicionada e os valores de pixel de cada uma da uma ou mais inserções da segunda paleta ser maior do que um valor de delta.
10. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente determinar um tamanho da segunda paleta, em que determinar o tamanho da segunda paleta compreende pelo menos um dentre: determinar que o tamanho da segunda paleta é fixo; determinar que o tamanho da segunda paleta é variável e com base em dados decodificados com o segundo bloco de dados de vídeo; determinar o tamanho da segunda paleta com base em uma característica do segundo bloco de dados de vídeo; ou determinar o tamanho da segunda paleta com base nos dados decodificados com o segundo bloco de dados de vídeo que indicam uma inserção final na segunda paleta.
11. Método de codificação de dados de vídeo, caracterizado pelo fato de que compreende: determinar (304) uma paleta preditora que tem uma pluralidade de inserções preditoras de paleta que indicam respectivos valores de pixel, em que determinar a paleta preditora compreende determinar a paleta preditora com base em inserções de paleta (202, 204, 206) associadas a paletas de uma pluralidade de blocos de dados de vídeo; determinar (306), para uma segunda paleta (192) associada a um segundo bloco (188) de dados de vídeo que é codificado após a pluralidade de blocos, uma ou mais inserções de paleta (208, 210, 212) da segunda paleta com base nas inserções preditoras de paleta da paleta preditora; e codificar pixels do segundo bloco de dados de vídeo com o uso da segunda paleta, em que codificar os pixels compreende: determinar (286) respectivos valores de índice para um ou mais dos pixels, em que os respectivos valores de índice identificam respectivas inserções da segunda paleta; e codificar (288) os valores de índice em um fluxo de BITS codificado.
12. Aparelho para decodificar dados de vídeo, o aparelho caracterizado pelo fato de que compreende: meios para determinar (304) uma paleta preditora que tem uma pluralidade de inserções preditoras de paleta que indicam respectivos valores de pixel, em que determinar a paleta preditora compreende determinar a paleta preditora com base em inserções de paleta (202, 204, 206) associadas a uma ou mais paletas de uma pluralidade de blocos de dados de vídeo; meios para determinar (306), para uma segunda paleta (192) associada a um segundo bloco (188) de dados de vídeo que é codificado após a pluralidade de blocos, uma ou mais inserções de paleta (208, 210, 212) da segunda paleta com base nas inserções preditoras de paleta da paleta preditora; e meios para decodificar pixels do segundo bloco de dados de vídeo com o uso da segunda paleta, em que decodificar os pixels compreende: obter (286), a partir de um fluxo de BITS, respectivos valores de índice para um ou mais dos pixels, em que os respectivos valores de índice identificam uma inserção da segunda paleta; e determinar (288) valores para o um ou mais pixels através da correspondência dos respectivos valores de índice para pelo menos uma das inserções da segunda paleta.
13. Aparelho, de acordo com a reivindicação 12, caracterizado pelo fato de que compreende meios para realizar o método conforme definido em qualquer uma das reivindicações 2 a 10.
14. Aparelho para codificar dados de vídeo, caracterizado pelo fato de que compreende: meios para determinar (304) uma paleta preditora que tem uma pluralidade de inserções preditoras de paleta que indicam respectivos valores de pixel, em que determinar a paleta preditora compreende determinar a paleta preditora com base em inserções de paleta (202, 204, 206) associadas a uma ou mais paletas de uma pluralidade de blocos de dados de vídeo; meios para determinar (306), para uma segunda paleta associada a um segundo bloco (188) de dados de vídeo que é codificado após a pluralidade de blocos, uma ou mais inserções de paleta (208, 210, 212) da segunda paleta com base nas inserções preditoras de paleta da paleta preditora; e meios para codificar pixels do segundo bloco de dados de vídeo com o uso da segunda paleta, em que codificar os pixels compreende: determinar (286) respectivos valores de índice para um ou mais dos pixels, em que os respectivos valores de índice identificam respectivas inserções da segunda paleta; e codificar (288) os valores de índice em um fluxo de BITS codificado.
15. Memória caracterizada pelo fato de que compreende instruções armazenadas na mesma, as instruções sendo executadas por um computador para realizar o método conforme definido em qualquer uma das reivindicações 1 a 11.
BR112015025439-0A 2013-04-05 2014-04-04 Determinação de índices de paleta em codificação de vídeo baseada em paleta BR112015025439B1 (pt)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201361809236P 2013-04-05 2013-04-05
US61/809,236 2013-04-05
US201361810649P 2013-04-10 2013-04-10
US61/810,649 2013-04-10
US14/244,688 2014-04-03
US14/244,688 US11259020B2 (en) 2013-04-05 2014-04-03 Determining palettes in palette-based video coding
PCT/US2014/033019 WO2014165789A1 (en) 2013-04-05 2014-04-04 Determining palettes in palette-based video coding

Publications (2)

Publication Number Publication Date
BR112015025439A2 BR112015025439A2 (pt) 2017-07-18
BR112015025439B1 true BR112015025439B1 (pt) 2023-03-28

Family

ID=51654451

Family Applications (2)

Application Number Title Priority Date Filing Date
BR112015025459-4A BR112015025459B1 (pt) 2013-04-05 2014-04-04 Método e aparelho para codificar/decodificar dados de vídeo e memória legível por computador
BR112015025439-0A BR112015025439B1 (pt) 2013-04-05 2014-04-04 Determinação de índices de paleta em codificação de vídeo baseada em paleta

Family Applications Before (1)

Application Number Title Priority Date Filing Date
BR112015025459-4A BR112015025459B1 (pt) 2013-04-05 2014-04-04 Método e aparelho para codificar/decodificar dados de vídeo e memória legível por computador

Country Status (9)

Country Link
US (2) US11259020B2 (pt)
EP (2) EP2982126B1 (pt)
JP (2) JP6297671B2 (pt)
KR (2) KR102205328B1 (pt)
CN (2) CN105075272B (pt)
BR (2) BR112015025459B1 (pt)
ES (1) ES2727635T3 (pt)
HU (1) HUE043455T2 (pt)
WO (2) WO2014165789A1 (pt)

Families Citing this family (100)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11259020B2 (en) 2013-04-05 2022-02-22 Qualcomm Incorporated Determining palettes in palette-based video coding
WO2015006169A1 (en) * 2013-07-08 2015-01-15 Sony Corporation Improvement for palette coding mode
US9558567B2 (en) 2013-07-12 2017-01-31 Qualcomm Incorporated Palette prediction in palette-based video coding
JP6336058B2 (ja) * 2013-10-14 2018-06-06 マイクロソフト テクノロジー ライセンシング,エルエルシー ビデオ及び画像符号化及び復号のためのベースカラーインデックスマップモードの機能
US10291827B2 (en) * 2013-11-22 2019-05-14 Futurewei Technologies, Inc. Advanced screen content coding solution
GB201321851D0 (en) * 2013-12-10 2014-01-22 Canon Kk Run length parameters coding for palette mode
ES2893815T3 (es) * 2013-12-10 2022-02-10 Canon Kk Procedimiento y aparato para codificar o descodificar una paleta en el modo de codificación de paleta
EP3085090B8 (en) 2013-12-18 2020-09-30 HFI Innovation Inc. Method for palette table prediction
US10469848B2 (en) * 2013-12-18 2019-11-05 Hfi Innovation Inc. Palette prediction and sharing in video coding
US10321141B2 (en) 2013-12-18 2019-06-11 Hfi Innovation Inc. Method and apparatus for palette initialization and management
WO2015091879A2 (en) * 2013-12-19 2015-06-25 Canon Kabushiki Kaisha Improved encoding process using a palette mode
GB2523076B (en) * 2013-12-19 2016-08-10 Canon Kk Improved palette mode in HEVC for the encoding process
EP3087738B1 (en) 2013-12-27 2019-10-02 MediaTek Inc. Method and apparatus for palette coding with cross block prediction
CA2934743C (en) 2013-12-27 2018-11-27 Hfi Innovation Inc. Method and apparatus for syntax redundancy removal in palette coding
CN110225345B (zh) * 2013-12-27 2022-07-19 寰发股份有限公司 用于主颜色索引图编码的方法及装置
WO2015103496A2 (en) * 2014-01-02 2015-07-09 Vid Scale, Inc. Two-demensional palette coding for screen content coding
EP3061247A4 (en) 2014-01-07 2016-08-31 Mediatek Inc METHOD AND APPARATUS FOR COLOR INDEX PREDICTION
US9699468B2 (en) * 2014-02-10 2017-07-04 Microsoft Technology Licensing, Llc Adaptive screen and video coding scheme
CN104853209B (zh) * 2014-02-16 2020-09-29 同济大学 图像编码、解码方法及装置
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
CA2942055C (en) * 2014-03-11 2019-07-16 Hfi Innovation Inc. Method and apparatus of single sample mode for video coding
EP3103259A4 (en) * 2014-03-13 2017-11-01 Huawei Technologies Co., Ltd. Improved method for screen content coding
CN110572678B (zh) 2014-03-14 2024-03-12 Vid拓展公司 调色板编码及解码视频数据的方法、编码设备及编码器
WO2015136693A1 (ja) * 2014-03-14 2015-09-17 富士通株式会社 画像符号化装置、画像復号装置、画像符号化方法、及び画像復号方法
CN110233949B (zh) 2014-03-14 2021-07-30 寰发股份有限公司 调色板表初始化和管理的方法
US9826242B2 (en) 2014-03-14 2017-11-21 Qualcomm Incorporated Palette-based video coding
CN106030651B (zh) * 2014-03-21 2019-06-07 华为技术有限公司 利用改进的颜色表和索引图编码方法的高级屏幕内容编码
US10362336B2 (en) 2014-03-25 2019-07-23 Qualcomm Incorporated Palette predictor signaling with run length code for video coding
US10038915B2 (en) 2014-05-22 2018-07-31 Qualcomm Incorporated Escape sample coding in palette-based video 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
US10091512B2 (en) 2014-05-23 2018-10-02 Futurewei Technologies, Inc. Advanced screen content coding with improved palette table and index map coding methods
US10142642B2 (en) 2014-06-04 2018-11-27 Qualcomm Incorporated Block adaptive color-space conversion coding
CN105282550A (zh) * 2014-06-13 2016-01-27 财团法人工业技术研究院 编码方法与解码方法、编解码系统、编码器与解码器
EP3158744A4 (en) * 2014-06-19 2017-07-26 HFI Innovation Inc. Method and apparatus of candidate generation for single sample mode in video coding
CN114501033B (zh) * 2014-06-20 2023-11-10 寰发股份有限公司 用于视频编码的调色板预测器信令的方法
JP2017522839A (ja) * 2014-06-20 2017-08-10 シャープ株式会社 整合パレット符号化
JP6352452B2 (ja) * 2014-06-20 2018-07-04 寰發股▲ふん▼有限公司HFI Innovation Inc. ビデオ符号化における構文の2値化とコンテキスト適応型符号化の方法と装置
US9906799B2 (en) 2014-06-20 2018-02-27 Qualcomm Incorporated Copy from previous rows for palette mode coding
KR101962458B1 (ko) * 2014-07-07 2019-03-26 에이치에프아이 이노베이션 인크. 인덱스 맵 부호화의 예측자로서 이스케이프 픽셀을 취급하는 방법
US9955157B2 (en) 2014-07-11 2018-04-24 Qualcomm Incorporated Advanced palette prediction and signaling
US9544607B2 (en) * 2014-08-25 2017-01-10 Hfi Innovation Inc. Method of palette index signaling for image and video coding
EP3180916A4 (en) * 2014-09-03 2018-02-28 MediaTek Inc. Method for color index coding using a generalized copy previous mode
WO2016048092A1 (ko) 2014-09-26 2016-03-31 주식회사 케이티 비디오 신호 처리 방법 및 장치
RU2679201C2 (ru) 2014-09-30 2019-02-06 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Правила для режимов внутрикадрового прогнозирования, когда активируется волновая параллельная обработка данных
EP3723378A1 (en) * 2014-10-06 2020-10-14 VID SCALE, Inc. Improved palette coding for screen content coding
US9596479B2 (en) * 2014-10-07 2017-03-14 Hfi Innovation Inc. Method of pulse-code modulation and palette coding for video coding
US10397611B2 (en) * 2014-10-08 2019-08-27 Lg Electronics Inc. Method and device for encoding/decoding 3D video
WO2016064123A1 (ko) * 2014-10-20 2016-04-28 주식회사 케이티 비디오 신호 처리 방법 및 장치
US10051277B2 (en) 2014-11-06 2018-08-14 Mediatek Inc. Method for sub-block based palette coding
AU2015345649A1 (en) * 2014-11-12 2017-06-08 Hfi Innovation Inc. Methods of escape pixel coding in index map coding
CN107005717B (zh) * 2014-11-12 2020-04-07 寰发股份有限公司 索引映射编解码中的跳出像素编解码方法
JP6532222B2 (ja) 2014-11-28 2019-06-19 キヤノン株式会社 画像符号化装置、画像符号化方法及びプログラム、画像復号装置、画像復号方法及びプログラム
SG10201900004UA (en) * 2014-12-19 2019-02-27 Hfi Innovation Inc Methods of palette based prediction for non-444 color format in video and image coding
CN107211143B (zh) * 2015-01-15 2020-08-18 株式会社Kt 用于处理视频信号的方法和设备
CN105828080B (zh) * 2015-01-26 2020-02-14 同济大学 图像编解码方法及装置
JP6122516B2 (ja) 2015-01-28 2017-04-26 財團法人工業技術研究院Industrial Technology Research Institute エンコーディング方法及びエンコーダ
US10477244B2 (en) 2015-01-29 2019-11-12 Kt Corporation Method and apparatus for predicting and restoring a video signal using palette entry and palette mode
CN111970515B (zh) * 2015-01-29 2024-03-29 株式会社Kt 对视频信号进行编解码的方法
US9986248B2 (en) * 2015-01-29 2018-05-29 Qualcomm Incorporated Palette mode coding for video coding
EP3251352A1 (en) * 2015-01-29 2017-12-06 VID SCALE, Inc. Escape color coding for palette coding mode
RU2686559C2 (ru) * 2015-01-29 2019-04-29 Кэнон Кабусики Кайся Инициализатор предсказателя палитры при кодировании или декодировании самостоятельных кодируемых структур
US10484686B2 (en) * 2015-01-29 2019-11-19 Vid Scale, Inc. Palette coding modes and palette flipping
US10425659B2 (en) * 2015-01-30 2019-09-24 Qualcomm Incorporated Coding escape pixels for palette coding
CN106688236B (zh) * 2015-01-30 2019-06-21 富士通株式会社 图像编码方法、装置以及图像处理设备
US9900624B2 (en) 2015-02-05 2018-02-20 Mediatek Inc. Methods and apparatus of decoding process for palette syntax
CN107534783B (zh) * 2015-02-13 2020-09-08 联发科技股份有限公司 图像中区块的调色板索引图编解码方法
US10819990B2 (en) * 2015-02-16 2020-10-27 Hfi Innovation Inc. Method and apparatus for palette predictor initialization for palette coding in video and image compression
AU2016222177A1 (en) * 2015-02-17 2017-08-31 Hfi Innovation Inc. Method and apparatus for palette coding of monochrome contents in video and image compression
WO2016146076A1 (en) * 2015-03-18 2016-09-22 Mediatek Inc. Method and apparatus for index map coding in video and image compression
EP3282706A4 (en) * 2015-04-02 2019-01-30 KT Corporation METHOD AND APPARATUS FOR PROCESSING VIDEO SIGNAL
EP3275189B1 (en) * 2015-04-08 2021-09-08 HFI Innovation Inc. Methods of palette mode coding in video coding
CN111818344B (zh) * 2015-04-08 2022-05-24 寰发股份有限公司 视频编解码中调色板模式上下文编解码和二值化的方法
WO2016190627A1 (ko) * 2015-05-27 2016-12-01 주식회사 케이티 비디오 신호 처리 방법 및 장치
WO2016192662A1 (en) * 2015-06-03 2016-12-08 Mediatek Inc. Method and apparatus for resource sharing between intra block copy mode and inter prediction mode in video coding systems
US10356438B2 (en) 2015-06-03 2019-07-16 Mediatek Inc. Method and apparatus of error handling for video coding using intra block copy mode
US20160360205A1 (en) 2015-06-08 2016-12-08 Industrial Technology Research Institute Video encoding methods and systems using adaptive color transform
EP3308540B1 (en) 2015-06-09 2020-04-15 Microsoft Technology Licensing, LLC Robust encoding/decoding of escape-coded pixels in palette mode
WO2016197312A1 (zh) * 2015-06-09 2016-12-15 富士通株式会社 像素索引的编码方法、装置以及图像处理设备
CN106303526A (zh) * 2015-06-09 2017-01-04 富士通株式会社 图像编码方法、装置以及图像处理设备
US11146788B2 (en) 2015-06-12 2021-10-12 Qualcomm Incorporated Grouping palette bypass bins for video coding
US9743092B2 (en) * 2015-10-13 2017-08-22 Nokia Technologies Oy Video coding with helper data for spatial intra-prediction
JP6662123B2 (ja) * 2016-03-14 2020-03-11 富士通株式会社 画像符号化装置、画像符号化方法、及び画像符号化プログラム
CN106331716B (zh) * 2016-08-31 2019-05-24 西安万像电子科技有限公司 视频压缩方法和装置
US10110914B1 (en) * 2016-09-15 2018-10-23 Google Llc Locally adaptive warped motion compensation in video coding
CN106791883A (zh) * 2016-11-18 2017-05-31 上海兆芯集成电路有限公司 纹理砖压缩及解压缩方法以及使用该方法的装置
CN106534874B (zh) * 2016-11-18 2019-11-29 上海兆芯集成电路有限公司 纹理砖压缩及解压缩方法以及使用该方法的装置
US10555006B2 (en) 2016-12-22 2020-02-04 Qualcomm Incorporated Deriving bilateral filter information based on a prediction mode in video coding
US10848787B2 (en) 2018-08-28 2020-11-24 Google Llc Lossy image compression using palettization of locally mixed colors
US11695919B2 (en) 2018-08-28 2023-07-04 Google Llc Lossy image compression using palettization of locally mixed colors
CN109151436B (zh) * 2018-09-30 2021-02-02 Oppo广东移动通信有限公司 数据处理方法及装置、电子设备及存储介质
CN109257609B (zh) * 2018-09-30 2021-04-23 Oppo广东移动通信有限公司 数据处理方法及装置、电子设备及存储介质
US11134258B2 (en) 2019-02-11 2021-09-28 Qualcomm Incorporated Predictive coefficient coding
US11206413B2 (en) * 2019-08-13 2021-12-21 Qualcomm Incorporated Palette predictor updates for local dual trees
BR112022004606A2 (pt) * 2019-09-12 2022-05-31 Bytedance Inc Método de processamento de vídeo, aparelho para processar dados de vídeo e meios de armazenamento e de gravação não transitórios legíveis por computador
KR20220051373A (ko) * 2019-10-05 2022-04-26 엘지전자 주식회사 변환 스킵 및 팔레트 코딩 관련 정보의 시그널링 기반 영상 또는 비디오 코딩
CN114762328A (zh) * 2019-12-02 2022-07-15 现代自动车株式会社 利用差分调制的视频编码和解码
CN111372124B (zh) * 2020-03-09 2022-04-15 格兰菲智能科技有限公司 一种文字图像的编码及解码方法
KR102589351B1 (ko) * 2020-03-25 2023-10-16 주식회사 케이티 비디오 신호 처리 방법 및 장치
KR102384793B1 (ko) * 2021-09-24 2022-04-11 티오더 주식회사 배달 서비스 온라인 플랫폼을 위한 시스템

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5686961A (en) 1992-01-27 1997-11-11 Harris Corporation Automatic video image data reduction and prioritization system and method
US5408542A (en) 1992-05-12 1995-04-18 Apple Computer, Inc. Method and apparatus for real-time lossless compression and decompression of image data
EP0770246A4 (en) 1994-07-14 1998-01-14 Johnson Grace Company METHOD AND APPARATUS FOR COMPRESSING IMAGES
US5930390A (en) 1996-03-28 1999-07-27 Intel Corporation Encoding/decoding signals using a remap table
US6008816A (en) 1996-04-25 1999-12-28 Microsoft Corporation Method and system for managing color specification using attachable palettes and palettes that refer to other palettes
US5781483A (en) 1996-12-31 1998-07-14 Micron Technology, Inc. Device and method for repairing a memory array by storing each bit in multiple memory cells in the array
US6157746A (en) 1997-02-12 2000-12-05 Sarnoff Corporation Apparatus and method for encoding wavelet trees generated by a wavelet-based coding method
US6064771A (en) 1997-06-23 2000-05-16 Real-Time Geometry Corp. System and method for asynchronous, adaptive moving picture compression, and decompression
JPH11308465A (ja) * 1998-04-17 1999-11-05 Seiko Epson Corp カラー画像の符号化方法およびその符号化装置ならびにカラー画像の復号化方法およびその復号化装置
US6256415B1 (en) 1998-06-10 2001-07-03 Seiko Epson Corporation Two row buffer image compression (TROBIC)
CN1148975C (zh) 1998-07-07 2004-05-05 C-立方微系统股份有限公司 Mpeg起始码兼容交叠图形编码
JP2000115782A (ja) 1998-10-06 2000-04-21 Canon Inc 符号化装置及び方法及び記憶媒体
EP1256234A4 (en) * 1999-12-22 2009-05-27 Neomtel Co Ltd SYSTEM FOR DISPLACING IMAGE DATA USING WIRELESS COMMUNICATION AND METHOD THEREFOR
US6909804B2 (en) 2000-01-27 2005-06-21 Marger Johnson & Mccollom, P.C. Image compression usable with animated images
KR100708074B1 (ko) 2000-04-12 2007-04-16 삼성전자주식회사 그레이 스케일 테이블을 이용한 텍스트 출력방법 및 그 장치
JP4011278B2 (ja) 2000-11-06 2007-11-21 株式会社デンソー 画像圧縮装置及び記録媒体
US6819793B1 (en) 2000-06-30 2004-11-16 Intel Corporation Color distribution for texture and image compression
US6748116B1 (en) * 2000-08-22 2004-06-08 Airzip, Inc. Apparatus and method for compressing and decompressing image files
AUPR212600A0 (en) 2000-12-18 2001-01-25 Canon Kabushiki Kaisha Efficient video coding
JP2002369011A (ja) 2001-06-06 2002-12-20 Canon Inc 画像処理装置、画像処理方法及び画像処理プログラム
US7319720B2 (en) 2002-01-28 2008-01-15 Microsoft Corporation Stereoscopic video
US6898313B2 (en) 2002-03-06 2005-05-24 Sharp Laboratories Of America, Inc. Scalable layered coding in a multi-layer, compound-image data transmission system
US7302006B2 (en) 2002-04-30 2007-11-27 Hewlett-Packard Development Company, L.P. Compression of images and image sequences through adaptive partitioning
US7433526B2 (en) 2002-04-30 2008-10-07 Hewlett-Packard Development Company, L.P. Method for compressing images and image sequences through adaptive partitioning
GB2388502A (en) 2002-05-10 2003-11-12 Chris Dunn Compression of frequency domain audio signals
US20040013297A1 (en) 2002-07-18 2004-01-22 Roger Lo Method for performing color gamut compression
AU2003275440A1 (en) 2002-10-07 2004-05-04 Summus, Inc. System for graphics compression and display
US20040151394A1 (en) 2003-01-31 2004-08-05 Mikael Soderberg Symmetrical, highly deterministic, low complexity, temporal transform video codec and vehicle distribution system incorporating same
US7343037B1 (en) * 2004-02-04 2008-03-11 Microsoft Corporation Dynamic, locally-adaptive, lossless palettization of color and grayscale images
WO2006022741A1 (en) 2004-08-23 2006-03-02 Marger Johnson & Mccollom, P.C. Image compression usable with animated images
KR101058010B1 (ko) 2004-09-07 2011-08-19 삼성전자주식회사 그래픽 데이터 생성 장치, 방법 및 정보 저장 매체
US8073275B2 (en) 2005-02-09 2011-12-06 Mobixell Networks Ltd. Image adaptation with target size, quality and resolution constraints
JP2006229583A (ja) 2005-02-17 2006-08-31 Eastman Kodak Co 通信システム及びデジタルカメラ並びにドック装置
US8243340B2 (en) 2006-02-23 2012-08-14 Microsoft Corporation Pre-processing of image data for enhanced compression
US8848789B2 (en) 2006-03-27 2014-09-30 Qualcomm Incorporated Method and system for coding and decoding information associated with video compression
US7343837B1 (en) 2006-09-15 2008-03-18 James Anthony Domanico Multi-plane flexible handle for ratchets and wrenches
US8170101B2 (en) 2006-10-27 2012-05-01 Sharp Laboratories Of America, Inc. Methods and systems for low-complexity data compression
AU2006246497B2 (en) 2006-11-30 2010-02-11 Canon Kabushiki Kaisha Method and apparatus for hybrid image compression
CN101211341A (zh) 2006-12-29 2008-07-02 上海芯盛电子科技有限公司 图像智能模式识别搜索方法
US8213511B2 (en) 2007-04-30 2012-07-03 Texas Instruments Incorporated Video encoder software architecture for VLIW cores incorporating inter prediction and intra prediction
US9232226B2 (en) 2008-08-19 2016-01-05 Marvell World Trade Ltd. Systems and methods for perceptually lossless video compression
US8134573B2 (en) * 2009-02-23 2012-03-13 Sharp Laboratories Of America, Inc. Encoding CMYK data for display using indexed RGB
RU2420021C2 (ru) 2009-03-24 2011-05-27 Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." Способ сжатия изображений и видеопоследовательностей
US9024862B2 (en) 2009-07-02 2015-05-05 Ricoh Co., Ltd. Dynamic creation of waveform palette
US20110110416A1 (en) 2009-11-12 2011-05-12 Bally Gaming, Inc. Video Codec System and Method
KR101955142B1 (ko) 2011-01-14 2019-03-06 지이 비디오 컴프레션, 엘엘씨 엔트로피 인코딩 및 디코딩 방식
US20120294353A1 (en) 2011-05-16 2012-11-22 Mediatek Inc. Apparatus and Method of Sample Adaptive Offset for Luma and Chroma Components
US20130101033A1 (en) 2011-10-14 2013-04-25 Qualcomm Incorporated Coding non-symmetric distributions of data
US8615138B2 (en) 2011-11-03 2013-12-24 Google Inc. Image compression using sub-resolution images
CN107105247B (zh) 2012-04-13 2021-05-07 佳能株式会社 视频数据的变换单位的子集的编解码的方法、设备和系统
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
US9794579B2 (en) 2013-07-15 2017-10-17 Qualcomm Incorporated Decoded picture buffer operations for video coding
US10321141B2 (en) 2013-12-18 2019-06-11 Hfi Innovation Inc. Method and apparatus for palette initialization and management
WO2015103496A2 (en) 2014-01-02 2015-07-09 Vid Scale, Inc. Two-demensional palette coding for screen content coding
US9906799B2 (en) 2014-06-20 2018-02-27 Qualcomm Incorporated Copy from previous rows for palette mode coding

Also Published As

Publication number Publication date
CN105191320B (zh) 2018-10-19
JP2016521042A (ja) 2016-07-14
CN105191320A (zh) 2015-12-23
EP2982126B1 (en) 2019-02-27
KR102205328B1 (ko) 2021-01-19
WO2014165789A1 (en) 2014-10-09
US20140301475A1 (en) 2014-10-09
EP2982126A1 (en) 2016-02-10
US11259020B2 (en) 2022-02-22
JP6297671B2 (ja) 2018-03-20
EP2982125A1 (en) 2016-02-10
JP2016521043A (ja) 2016-07-14
US9654777B2 (en) 2017-05-16
CN105075272B (zh) 2018-05-22
EP2982125B1 (en) 2022-04-27
KR20150139902A (ko) 2015-12-14
JP6463730B2 (ja) 2019-02-06
HUE043455T2 (hu) 2019-08-28
CN105075272A (zh) 2015-11-18
KR20150140722A (ko) 2015-12-16
WO2014165784A1 (en) 2014-10-09
BR112015025439A2 (pt) 2017-07-18
US20140301474A1 (en) 2014-10-09
BR112015025459A2 (pt) 2017-07-18
KR102252843B1 (ko) 2021-05-14
ES2727635T3 (es) 2019-10-17
BR112015025459B1 (pt) 2023-04-11

Similar Documents

Publication Publication Date Title
BR112015025439B1 (pt) Determinação de índices de paleta em codificação de vídeo baseada em paleta
US10356432B2 (en) Palette predictor initialization and merge for video coding
CA2913615C (en) Palette prediction in palette-based video coding
EP3350997B1 (en) Restriction of escape pixel signaled values in palette mode video coding
KR102465026B1 (ko) 고 스루풋 cabac 코딩을 위한 팔레트 인덱스 그루핑
BR112017016341B1 (pt) Codificação em modo paleta para codificação de vídeo
EP3235247A1 (en) Palette mode for subsampling format
BR112017016371B1 (pt) Agrupamento de índice de paleta para codificação cabac de banda larga
BR112017017139B1 (pt) Método e aparelho para codificar dados de vídeo e memória legível por computador

Legal Events

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

Free format text: AS CLASSIFICACOES ANTERIORES ERAM: H04N 19/93 , H04N 19/90

Ipc: H04N 19/33 (2014.01)

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

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