BR112016027426B1 - Codificação de valores de curso com base em índice de paleta em codificação de vídeo baseada em paleta - Google Patents

Codificação de valores de curso com base em índice de paleta em codificação de vídeo baseada em paleta Download PDF

Info

Publication number
BR112016027426B1
BR112016027426B1 BR112016027426-1A BR112016027426A BR112016027426B1 BR 112016027426 B1 BR112016027426 B1 BR 112016027426B1 BR 112016027426 A BR112016027426 A BR 112016027426A BR 112016027426 B1 BR112016027426 B1 BR 112016027426B1
Authority
BR
Brazil
Prior art keywords
palette
value
video
encoding
block
Prior art date
Application number
BR112016027426-1A
Other languages
English (en)
Other versions
BR112016027426A2 (pt
Inventor
Vadim SEREGIN
Rajan Laxman Joshi
Marta Karczewicz
Wei Pu
Joel Sole Rojals
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 BR112016027426A2 publication Critical patent/BR112016027426A2/pt
Publication of BR112016027426B1 publication Critical patent/BR112016027426B1/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/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/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding

Landscapes

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

Abstract

codificação de valores de curso com base em índice de paleta em codificação de vídeo baseada em paleta. em um exemplo um método de processar dados de vídeo inclui determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo, em que o índice de paleta é associado a um valor de cor em uma paleta de valores de cor para codificação do bloco de dados de vídeo, o método também inclui determinar um contexto para codificação adaptável em contexto de dados que representam o valor de curso com base no índice de paleta, e codificação dos dados que representam valor de curso a partir de um fluxo de bits usando o contexto determinado.

Description

[0001] O presente pedido reivindica o benefício do pedido provisional US no. 62/002.717, depositado em 23 de maio de 2014, pedido provisional US no. 62/009.772, depositado em 9 de junho de 2014, pedido provisional US no. 62/015.261, depositado em 20 de junho de 2014, pedido provisional US no. 62/019.223, depositado em 30 de junho de 2014, pedido provisional US no. 62/059.659, depositado em 3 de outubro de 2014, e pedido provisional US no. 62/065.526, depositado em 17 de outubro de 2014, os teores na íntegra de cada um são incorporados por referência na presente invenção.
CAMPO TÉCNICO
[0002] A presente revelação se refere à codificação e decodificação de vídeo.
ANTECEDENTES
[0003] Capacidades de vídeo digital podem ser incorporadas em uma ampla gama de dispositivos, incluindo televisões digitais, sistemas de broadcast direto digital, sistemas de broadcast sem fio, assistentes pessoais digitais (PDAs), computadores laptop ou de mesa, computadores tablet, leitores de e-book, câmeras digitais, dispositivos de gravação digital, tocadores de mídia digital, dispositivos de videogame, consoles de videogame, telefones de rádio de satélite ou celular, os denominados “smart phones”, dispositivos de teleconferência por vídeo, dispositivos de streaming de vídeo, e similares. Dispositivos de vídeo digital implementam técnicas de codificação de vídeo, como aquelas descritas nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação avançada de vídeo (AVC), padrão de Codificação de vídeo de eficiência elevada (HEVC), atualmente em desenvolvimento, e extensões de tais padrões. Os dispositivos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital mais eficientemente por implementar tais técnicas de compressão de vídeo.
[0004] Técnicas de compressão de vídeo executam predição espacial (intra-quadro) e/ou temporal (inter-quadro) para reduzir ou remover redundância inerente em sequências de vídeo. Para codificação de vídeo baseada em bloco, uma fatia de vídeo (por exemplo, um quadro de vídeo ou uma porção de um quadro de vídeo) pode ser dividida em blocos de vídeo. Blocos de vídeo em uma fatia intra-codificada (I) de um quadro são codificados usando predição espacial com relação a amostras de referência em blocos vizinhos no mesmo quadro. Blocos de vídeo em uma fatia Inter-codificada (P ou B) de um quadro podem usar predição espacial com relação a amostras de referência em blocos vizinhos no mesmo quadro ou predição temporal com relação a amostras de referência em outros quadros de referência. Imagens podem ser referidas como quadros e imagens de referência podem ser referidas como quadros de referência.
[0005] Predição espacial ou temporal resulta em um bloco preditivo para um bloco a ser codificado. Dados residuais representam diferenças 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 aponta para um bloco de amostras de referência formando o bloco preditivo, e os dados residuais indicando a diferença entre o bloco codificado e o bloco preditivo. Um bloco intra-codificado é codificado de acordo com um modo de intra-codificação e os dados residuais. Para compressão adicional, os dados residuais podem ser transformados do domínio de pixel para um domínio de transformada, resultando em coeficientes residuais, que então podem ser quantizados. Os coeficientes quantizados, inicialmente dispostos em um conjunto bidimensional, podem ser varridos para produzir um vetor unidimensional de coeficientes, e codificação por entropia pode ser aplicada para obter ainda mais compressão.
SUMÁRIO
[0006] Técnicas dessa revelação se referem à 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 uma “paleta” como uma tabela de cores para representar os dados de vídeo da área específica (por exemplo, um bloco dado). Codificação baseada em paleta pode ser especialmente útil para codificar áreas de dados de vídeo tendo um número relativamente pequeno de cores. Ao invés de codificar valores de pixel efetivos (ou seus residuais), o codificador de vídeo pode codificar valores de índice para um ou mais dos pixels que se referem a pixels com entradas na paleta representando as cores dos pixels. As técnicas descritas nessa revelação podem incluir técnicas para várias combinações de uma ou mais de entradas de paleta de predição, curso de codificação de índices de paleta e várias outras técnicas de codificação de paleta.
[0007] Em um exemplo, um método de processar dados de vídeo inclui determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizado em uma primeira linha de blocos, em que a primeira paleta compreende uma ou mais entradas de paleta cada incluindo um índice de paleta que é associado a um valor de cor para codificar o bloco de dados de vídeo, gerar uma paleta de preditor para construir pelo menos uma segunda paleta de pelo menos um segundo bloco de dados de vídeo na primeira linha de blocos codificados após o primeiro bloco, em que a paleta de preditor inclui pelo menos uma entrada de paleta a partir de um ou mais blocos da primeira linha diferente do primeiro bloco, reinicializar a paleta de preditor para determinar uma terceira paleta de um terceiro bloco de dados de vídeo que é localizado em uma segunda linha de blocos, em que a reinicialização da paleta de preditor compreende reinicializar a paleta de preditor com base em uma ou mais entradas de paleta da primeira paleta ou uma paleta de preditor inicial gerada após codificar o primeiro bloco, determinar a terceira paleta do terceiro bloco com base na paleta de preditor reinicializada, e codificar o terceiro bloco usando a terceira paleta.
[0008] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar um primeiro bloco de dados de vídeo, pelo menos um segundo bloco de dados de vídeo e um terceiro bloco de dados de vídeo, e um ou mais processadores configurados para determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizado em uma primeira linha de blocos, em que a primeira paleta compreende uma ou mais entradas de paleta cada incluindo um índice de paleta que é associado a um valor de cor para codificar o bloco de dados de vídeo, gerar uma paleta de preditor para construir pelo menos uma segunda paleta de pelo menos um segundo bloco de dados de vídeo na primeira linha de blocos codificados após o primeiro bloco, em que a paleta de preditor inclui pelo menos uma entrada de paleta a partir de um ou mais blocos da primeira linha diferente do primeiro bloco, reinicializar a paleta de preditor para determinar uma terceira paleta de um terceiro bloco de dados de vídeo que é localizado em uma segunda linha de blocos, em que a reinicialização da paleta de preditor compreende reinicializar a paleta de preditor com base em uma ou mais entradas de paleta da primeira paleta ou uma paleta de preditor inicial gerada após codificar o primeiro bloco, determinar a terceira paleta do terceiro bloco com base na paleta de preditor reinicializada, e codificar o terceiro bloco usando a terceira paleta.
[0009] Em outro exemplo, um aparelho para processar dados de vídeo inclui meio para determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizado em uma primeira linha de blocos, em que a primeira paleta compreende uma ou mais entradas de paleta cada incluindo um índice de paleta que é associado a um valor de cor para codificar o bloco de dados de vídeo, meio para gerar uma paleta de preditor para construir pelo menos uma segunda paleta de pelo menos um segundo bloco de dados de vídeo na primeira linha de blocos codificados após o primeiro bloco, em que a paleta de preditor inclui pelo menos uma entrada de paleta a partir de um ou mais blocos da primeira linha diferente do primeiro bloco, meio para reinicializar a paleta de preditor para determinar uma terceira paleta de um terceiro bloco de dados de vídeo que é localizado em uma segunda linha de blocos, em que a reinicialização da paleta de preditor compreende reinicializar a paleta de preditor com base em uma ou mais entradas de paleta da primeira paleta ou uma paleta de preditor inicial gerada após codificar o primeiro bloco ou uma paleta de preditor inicial gerada após codificar o primeiro bloco, meio para determinar a terceira paleta do terceiro bloco com base na paleta de preditor reinicializada, e meio para codificar o terceiro bloco usando a terceira paleta.
[0010] Em outro exemplo, uma mídia legível em computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores determine uma primeira paleta para um primeiro bloco de dados de vídeo que é localizado em uma primeira linha de blocos, em que a primeira paleta compreende uma ou mais entradas de paleta cada incluindo um índice de paleta que é associado a um valor de cor para codificar o bloco de dados de vídeo, gerar uma paleta de preditor para construir pelo menos uma segunda paleta de pelo menos um segundo bloco de dados de vídeo na primeira linha de blocos codificados após o primeiro bloco, em que a paleta de preditor inclui pelo menos uma entrada de paleta a partir de um ou mais blocos da primeira linha diferente do primeiro bloco, reinicializar a paleta de preditor para determinar uma terceira paleta de um terceiro bloco de dados de vídeo que é localizado em uma segunda linha de blocos, em que a reinicialização da paleta de preditor compreende reinicializar a paleta de preditor com base em uma ou mais entradas de paleta da primeira paleta ou uma paleta de preditor inicial gerada após codificar o primeiro bloco, determinar a terceira paleta do terceiro bloco com base na paleta de preditor reinicializada, e codificar o terceiro bloco usando a terceira paleta.
[0011] Em outro exemplo, um método de processar dados de vídeo inclui determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo, em que o índice de paleta é associado a um valor de cor em uma paleta de valores de cor para codificar o bloco de dados de vídeo, determinar um contexto para codificação de dados adaptável em contexto que representa o valor de curso com base no índice de paleta, e codificar os dados que representam valor de curso a partir de um fluxo de bits usando o contexto determinado.
[0012] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar um bloco de dados de vídeo, e um ou mais processadores configurados para determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo, em que o índice de paleta é associado a um valor de cor em uma paleta de valores de cor para codificar o bloco de dados de vídeo, determinar um contexto para codificação de dados adaptável em contexto que representa o valor de curso com base no índice de paleta, e codificar os dados que representam valor de curso a partir de um fluxo de bits usando o contexto determinado.
[0013] Em outro exemplo, um aparelho para processar dados de vídeo inclui meio para determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo, em que o índice de paleta é associado a um valor de cor em uma paleta de valores de cor para codificar o bloco de dados de vídeo, meio para determinar um contexto para codificação de dados adaptável em contexto que representa o valor de curso com base no índice de paleta, e meio para codificar os dados que representam valor de curso a partir de um fluxo de bits usando o contexto determinado.
[0014] Em outro exemplo, uma mídia legível em computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores determine um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo, em que o índice de paleta é associado a um valor de cor em uma paleta de valores de cor para codificar o bloco de dados de vídeo, determine um contexto para codificação de dados adaptável em contexto que representa o valor de curso com base no índice de paleta, e codifique os dados que representam valor de curso a partir de um fluxo de bits usando o contexto determinado.
[0015] Em outro exemplo, um método de processar dados de vídeo inclui determinar índices de paleta de uma primeira linha de um bloco de dados de vídeo, em que os índices de paleta correspondem a uma paleta de uma ou mais cores para codificar o bloco de dados de vídeo, e em que os índices de paleta da primeira linha incluem um ou mais índices que são associados a um valor de cor na paleta e um elemento de sintaxe que não é associado a um valor de cor na paleta, e codificar um curso de índices de paleta de uma segunda linha do bloco de dados de vídeo em relação aos índices de paleta da primeira linha, em que o curso inclui o elemento de sintaxe que não é associado a um valor de cor na paleta.
[0016] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar um bloco de dados de vídeo, e um ou mais processadores configurados para determinar índices de paleta de uma primeira linha de um bloco de dados de vídeo, em que os índices de paleta correspondem a uma paleta de uma ou mais cores para codificar o bloco de dados de vídeo, e em que os índices de paleta da primeira linha incluem um ou mais índices que são associados a um valor de cor na paleta e um elemento de sintaxe que não é associado a um valor de cor na paleta, e codificar um curso de índices de paleta de uma segunda linha do bloco de dados de vídeo em relação aos índices de paleta da primeira linha, em que o curso inclui o elemento de sintaxe que não é associado a um valor de cor na paleta.
[0017] Em outro exemplo, um aparelho para processar dados de vídeo inclui meio para determinar índices de paleta de uma primeira linha de um bloco de dados de vídeo, em que os índices de paleta correspondem a uma paleta de uma ou mais cores para codificar o bloco de dados de vídeo, e em que os índices de paleta da primeira linha incluem um ou mais índices que são associados a um valor de cor na paleta e um elemento de sintaxe que não é associado a um valor de cor na paleta, e meio para codificar um curso de índices de paleta de uma segunda linha do bloco de dados de vídeo em relação aos índices de paleta da primeira linha, em que o curso inclui o elemento de sintaxe que não é associado a um valor de cor na paleta.
[0018] Em outro exemplo, uma mídia legível em computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores determinem índices de paleta de uma primeira linha de um bloco de dados de vídeo, em que os índices de paleta correspondem a uma paleta de uma ou mais cores para codificar o bloco de dados de vídeo, e em que os índices de paleta da primeira linha incluem um ou mais índices que são associados a um valor de cor na paleta e um elemento de sintaxe que não é associado a um valor de cor na paleta, e codifiquem um curso de índices de paleta de uma segunda linha do bloco de dados de vídeo em relação aos índices de paleta da primeira linha, em que o curso inclui o elemento de sintaxe que não é associado a um valor de cor na paleta.
[0019] Os detalhes de um ou mais exemplos da revelação são expostos nos desenhos em anexo e na descrição abaixo. Outras características, objetivos e vantagens serão evidentes a partir da descrição, desenhos e reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0020] A figura 1 é um diagrama de blocos ilustrando um sistema de codificação de vídeo de exemplo que pode utilizar as técnicas descritas nessa revelação.
[0021] A figura 2 é um diagrama de blocos ilustrando um codificador de vídeo de exemplo que pode implementar as técnicas descritas nessa revelação.
[0022] A figura 3 é um diagrama de blocos ilustrando um decodificador de vídeo de exemplo que pode implementar as técnicas descritas nessa revelação.
[0023] A figura 4 é um diagrama conceptual ilustrando um exemplo de determinar entradas de paleta para codificação de vídeo baseada em paleta, compatível com técnicas dessa revelação.
[0024] A figura 5 é um diagrama conceptual ilustrando azulejos de exemplo de acordo com o padrão de Codificação de vídeo de eficiência elevada (HEVC).
[0025] A figura 6 é um diagrama conceptual ilustrando frentes de onda para processamento paralelo de frente de onda (WPP).
[0026] A figura 7 é um diagrama conceptual ilustrando um exemplo de redefinição de paleta de preditor na presença de múltiplos azulejos e frentes de onda, compatível com as técnicas dessa revelação.
[0027] A figura 8 é um diagrama conceptual ilustrando um exemplo de determinar índices para uma paleta para um bloco de pixels, compatível com técnicas dessa revelação.
[0028] A figura 9 é um fluxograma ilustrando um processos de exemplo para determinar uma paleta de preditor, compatível com técnicas dessa revelação.
[0029] A figura 10 é um fluxograma ilustrando um processo de exemplo para codificar um valor de curso de um curso de índices de paleta, compatível com técnicas dessa revelação.
[0030] A figura 11 é um fluxograma ilustrando um processo de exemplo para codificar um curso de índices codificados com mais de um modo de codificação de paleta, compatível com técnicas dessa revelação.
DESCRIÇÃO DETALHADA
[0031] Aspectos dessa revelação são dirigidos a técnicas para codificação de vídeo e compressão de dados de vídeo. Em particular, essa revelação descreve técnicas para codificação baseada em paleta de dados de vídeo. Em codificação de vídeo tradicional, imagens são assumidas como sendo de tom contínuo e espacialmente suaves. Com base nessas assunções, várias ferramentas foram desenvolvidas como transformada baseada em bloco, filtração e outras ferramentas de codificação e tais ferramentas mostraram bom desempenho para vídeos de conteúdo natural.
[0032] Entretanto, em aplicações como mesa remota, trabalho colaborativo e display sem fio, o conteúdo de tela gerado por computador pode ser o conteúdo dominante como sendo comprimido. Esse tipo de conteúdo tende a ter linhas nítidas de aspecto, de tom discreto, e apresentam limites de objeto de contraste elevado. A assunção de tom contínuo e suavidade podem não mais se aplicar, e desse modo, técnicas de codificação de vídeo tradicionais podem ser ineficientes na compressão do conteúdo.
[0033] Essa revelação descreve codificação baseada em paleta, que pode ser particularmente adequada para codificação de conteúdo gerado por tela ou outro conteúdo onde uma ou mais ferramentas de codificação tradicionais são ineficientes. As técnicas para codificação baseada em paleta de dados de vídeo podem ser usadas com uma ou mais outras técnicas de codificação, como técnicas para codificação inter- ou intra-preditiva. Por exemplo, como descrito em maior detalhe abaixo, um codificador ou decodificador ou codificador-decodificador combinado (codec), pode ser configurado para executar codificação Inter- e intra-preditiva, bem como codificação baseada em paleta.
[0034] Em alguns exemplos, as técnicas de codificação baseada em paleta podem ser configuradas para uso com um ou mais padrões de codificação de vídeo. Por exemplo, Codificação de Vídeo de eficiência elevada (HEVC) é um novo padrão de codificação de vídeo sendo desenvolvido pelo Joint Collaboration Team on Vídeo coding (JCT-VC) de ITUT- Vídeo Coding Experts Group (VCEG) e ISO/IEC Motion Picture Experts Group (MPEG). Uma minuta de especificação de texto de HEVC recente é descrita por Bross e outros, “High efficiency vídeo coding (HEVC) text specification draft 10 (para FDIS & consent), “JCVC-L1003_v13, 12a reunião de JCT-VC de ITU-T SG16 WP 3 e ISO/IEC JCT 1/SC 29/WG 11, 14 - 23 de janeiro de 2013 (“HEVC Minuta 10).
[0035] Com relação à estrutura de HEVC, como exemplo, as técnicas de codificação baseadas em paleta podem ser configuradas para serem usadas como um modo de unidade de codificação (CU). Em outros exemplos, as técnicas de codificação baseadas em paleta podem ser configuradas para serem usadas como um modo de PU na estrutura de HEVC. Por conseguinte, todos os seguintes processos revelados descritos no contexto de um modo de CU podem, adicionalmente ou alternativamente, aplicar-se a PU. Entretanto, esses exemplos baseados em HEVC não devem ser considerados uma limitação ou restrição das técnicas de codificação baseadas em paleta descritas aqui, visto que tais técnicas podem ser aplicadas para trabalhar independentemente ou como parte de outros padrões/sistemas existentes ou ainda a serem desenvolvidos. Nesses casos, a unidade para codificação de paleta podem ser blocos quadrados, blocos retangulares ou mesmo regiões de formato não retangular.
[0036] Em codificação baseada em paleta, uma área específica de dados de vídeo pode ser assumida como tendo um número relativamente pequeno de cores. Um codificador de vídeo (um codificador de vídeo ou um decodificador de vídeo) pode codificar uma denominada “paleta” como uma tabela de cores para representar os dados de vídeo da área específica (Por exemplo, um dado bloco). 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.
[0037] No exemplo acima, um codificador de vídeo pode codificar um bloco de dados de vídeo por determinar uma paleta para o bloco, localizar uma entrada na paleta para representar o valor de cada pixel, e codificar a paleta com valores de índice para os pixels referentes ao valor de pixel para a paleta. Um decodificador de vídeo pode obter, a partir de um fluxo de bits codificado, uma paleta para um bloco, bem como valores de índice para os pixels do bloco. O decodificador de vídeo pode relacionar os valores de índice dos pixels a entradas da paleta para reconstruir os valores de pixel do bloco. Pixels (e/ou valores de índice relacionados que indicam um valor de pixel) podem genericamente ser mencionados como amostras.
[0038] É assumido que amostras no bloco são processadas (Por exemplo, varridas) usando ordem de varredura raster horizontal. Por exemplo, o codificador de vídeo pode converter um bloco bidimensional de índices em um conjunto unidimensional por varrer os índices usando uma ordem de varredura raster horizontal. De modo semelhante, o decodificador de vídeo pode reconstruir um bloco de índices usando a ordem de varredura raster horizontal. Por conseguinte, essa revelação pode se referir a uma amostra anterior como uma amostra que precede a amostra sendo atualmente codificada no bloco na ordem de varredura. Deve ser reconhecido que varreduras diferentes de uma varredura raster horizontal, como ordem de varredura raster vertical, podem ser também aplicáveis. O exemplo acima pretende fornecer uma descrição geral de codificação baseada em paleta.
[0039] Uma paleta inclui tipicamente entradas numeradas por um índice e representando pelo menos um componente de cor (Por exemplo, pelo menos um componente de RGB, YUV ou similar) valores ou intensidades. Tanto um codificador de vídeo como um decodificador de vídeo determinam o número de entradas de paleta, valores de componente de cor para cada entrada de paleta e a ordenação exata das entradas de paleta para o bloco atual. Nessa revelação, é assumido que cada entrada de paleta especifica os valores para todos os componentes de cor de uma amostra. Entretanto, os conceitos dessa revelação são aplicáveis ao uso de uma paleta separada para cada componente de cor.
[0040] Em alguns exemplos, uma paleta pode ser composta usando informação a partir de blocos anteriormente codificados ou paletas anteriormente codificadas. Isto é, uma paleta pode conter entradas de paleta preditas, preditas a partir da(s) paleta(s) usada(s) para codificar o(s) bloco(s) anterior(es). Por exemplo, como descrito em documento de submissão padrão Wei Pu e outros, “AHG10: Suggested software for palette coding based on RExt6.0,” JCTVC-Q0094, Valencia, ES, 27 de março - 4 de abril de 2014 (a seguir JCTVC-Q0094), uma paleta pode incluir entradas que são copiadas de uma paleta de preditor. Uma paleta de preditor pode incluir entradas de paleta a partir de blocos anteriormente codificados usando modo de paleta ou outras amostras reconstruídas. A paleta de preditor pode usar toda ou parte de uma paleta anteriormente codificada, ou pode ser composta de entradas de várias paletas anteriormente codificadas.
[0041] Em alguns exemplos, para cada entrada na paleta de preditor, um indicador binário pode ser codificado para indicar se a entrada associada ao indicador é copiada para a paleta atual (por exemplo, indicado pelo indicador = 1). A série de indicadores binários pode ser mencionada como o vetor de predição de paleta binária. A paleta para codificar um bloco atual pode incluir também um número de entradas novas de paleta, que podem ser explicitamente codificadas (por exemplo, separadamente a partir do vetor de predição de paleta). Uma indicação do número de entradas novas também pode ser codificado. Uma soma das entradas preditas e novas entradas pode indicar o tamanho total de paleta para o bloco.
[0042] Como proposto em JCTVC-Q0094, cada amostra em um bloco codificado com um modo de codificação baseado em paleta pode ser codificada usando um dos três modos de paleta, como exposto abaixo: . modo de escapamento: nesse modo, o valor de amostra não é incluído em uma paleta como uma entrada de paleta e o valor de amostra quantizado é sinalizado explicitamente para todos os componentes coloridos. É similar à sinalização das novas entradas de paleta, embora para novas entradas de paleta, os valores de componente de cor não sejam quantizados. . Modo de CopyFromTop (também mencionado como Modo CopyAbove): nesse modo, o índice de entrada de paleta para a amostra atual é copiado a partir da amostra localizada diretamente acima em um bloco. . Modo de Valor (também mencionado como modo de Índice): nesse modo, o valor do índice de entrada de paleta é explicitamente sinalizado.
[0043] Como descrito aqui, um índice de entrada de paleta pode ser mencionado como um índice de paleta ou simplesmente índice. Esses termos podem ser usados de modo intercambiável para descrever técnicas dessa revelação. Além disso, como descrito em maior detalhe abaixo, um índice de paleta pode ter um ou mais valores de intensidade ou cor associados. Por exemplo, um índice de paleta pode ter um valor de intensidade ou cor associado único associado a um componente de intensidade ou cor único de um pixel (por exemplo, um componente vermelho de dados RGB, um componente Y de dados YUV ou similar). Em outro exemplo, um índice de paleta pode ter múltiplos valores de intensidade ou cor associados. Em algumas instâncias, codificação baseada em paleta pode ser aplicada para codificar vídeo de monocromo. Por conseguinte, “valor de cor” pode se referir em geral a qualquer componente de cor ou não cor usado para gerar um valor de pixel.
[0044] Para modos CopyFromTop e Valor, um valor de curso (que também pode ser mencionado simplesmente com curso) pode ser também sinalizado. Um valor de curso pode indicar um número de amostras consecutivas (por exemplo, um curso de amostras) em uma ordem de varredura específica em um bloco codificado de paleta que são codificados juntos. Em algumas instâncias, o curso de amostras também pode ser mencionado como um curso de índices de paleta, porque cada amostra do curso tem um índice associado a uma paleta.
[0045] Um valor de curso pode indicar um curso de índices de paleta que são codificados usando o mesmo modo de codificação de paleta. Por exemplo, com relação ao modo de Valor, um codificador de vídeo (um codificador de vídeo ou decodificador de vídeo) pode codificar um índice de paleta (também mencionado como um valor de índice de paleta ou simplesmente valor de índice) e um valor de curso que indica um número de amostras consecutivas em uma ordem de varredura que tem o mesmo índice de paleta e que estão sendo codificados com o índice de paleta. Com relação ao modo CopyFromTop, o codificador de vídeo pode codificar uma indicação de que um índice para o valor de amostra atual é copiado com base em um índice de uma amostra vizinha-acima (Por exemplo, uma amostra que está posicionada acima da amostra sendo atualmente codificada em um bloco) e um valor de curso que indica um número de amostras consecutivas em uma ordem de varredura que também copia um índice de paleta a partir de uma amostra vizinha-acima e que está sendo codificada com o índice de paleta. Por conseguinte, no exemplo acima, um curso de índices de paleta se refere a um curso de índices de paleta tendo o mesmo valor ou um curso de índices de paleta que são copiados a partir dos índices de paleta vizinha-acima.
[0046] Consequentemente, o curso pode especificar, para um dado modo, o número de amostras subsequentes que pertencem ao mesmo modo. Em algumas instâncias, a sinalização de um índice e um valor de curso pode ser similar à codificação de comprimento de curso. Em um exemplo para fins de ilustração, uma série de índices consecutivos de um bloco pode ser 0, 2, 2, 2, 2, 5 (por exemplo, onde cada índice corresponde a uma amostra no bloco). Nesse exemplo, um codificador de vídeo pode codificar a segunda amostra (por exemplo, o primeiro valor de índice de dois) usando modo de Valor. Após codificar um índice que é igual a 2, o codificador de vídeo pode codificar um curso de três, que indica que as três amostras subsequentes também têm o mesmo valor de índice de dois. Em um modo similar, a codificação de um curso de quatro após codificar um índice usando modo CopyFromTop pode indicar que um total de cinco índices é copiado a partir dos índices correspondentes na linha acima da posição de amostra atualmente sendo codificada.
[0047] Como descrito em maior detalhe abaixo, um codificador de vídeo (por exemplo, um codificador de vídeo e um decodificador de vídeo) podem codificar ou decodificar dados que indicam se uma amostra é codificada como uma amostra de escapamento em uma base por amostra. Amostras de escapamento (também mencionadas como pixels de escapamento) podem ser amostras (ou pixels) de um bloco que não tem uma cor correspondente representada em uma paleta para codificação do bloco. Por conseguinte, amostras de escapamento podem não ser reconstruídas usando uma entrada de cor (ou valor de pixel) a partir de uma paleta. Ao invés, os valores de cor para amostras de escapamento são sinalizados em um fluxo de bits separadamente dos valores de cor da paleta. Em geral, a codificação de uma amostra usando “modo de escapamento” pode genericamente se referir a codificação de uma amostra de um bloco que não tem uma cor correspondente representada em uma paleta para codificar o bloco. Como observado acima, tais amostras podem ser mencionadas como amostras de escapamento ou pixels de escapamento.
[0048] Em algumas amostras, o codificador de vídeo pode codificar um indicador para cada amostra que indica se a amostra é codificada como uma amostra de escapamento (essa técnica pode ser mencionada como sinalização de escapamento explícito, como descrito em maior detalhe abaixo com relação ao exemplo da figura 1). Em outro exemplo, o codificador de vídeo pode codificar um valor de índice adicional para uma paleta para indicar que uma amostra específica é codificada como uma amostra de escapamento (essa técnica pode ser mencionada como sinalização de escapamento implícito, como descrito em maior detalhe com relação ao exemplo da figura 1).
[0049] As técnicas descritas nessa revelação podem incluir técnicas para várias combinações de prever entradas de paleta, codificar cursos de índices de paleta, e uma variedade de outras técnicas de codificação de paleta. Como descrito em maior detalhe abaixo, as técnicas dessa revelação podem, em algumas instâncias, melhorar a eficiência e aperfeiçoar a taxa de bits ao codificar dados de vídeo usando um modo de paleta.
[0050] Por exemplo, certos aspetos dessa revelação são dirigidos a técnicas para prever entradas de paleta para um bloco de dados de vídeo. Em algumas instâncias, uma paleta de preditor pode ser redefinida para um bloco na borda esquerda para uma imagem. Isto é, ao gerar uma paleta para o bloco na borda esquerda da imagem, a paleta de preditor pode ser redefinida em zero (por exemplo, a paleta de preditor não tem entradas e a paleta atual não é predita usando uma paleta de preditor). O preditor pode ser redefinido, desse modo, porque uma paleta de preditor pode incluir entradas de paleta que na maior parte pertencem a paletas de blocos localizadas no lado direito da imagem após decodificar uma linha (por exemplo, assumindo uma varredura raster esquerda para direita). Por conseguinte, após codificar o primeiro bloco da linha seguinte (o bloco na borda mais esquerda da imagem), a paleta de preditor pode incluir cores de blocos que são localizados relativamente distantes do bloco atualmente sendo codificado. Desse modo, a paleta de preditor pode não ser muito eficaz na predição de uma paleta atual para o bloco atual (por exemplo, as cores de pixels no lado esquerdo de uma imagem podem diferir das cores de pixels no lado direito da imagem).
[0051] Entretanto, em algumas instâncias, redefinição de uma paleta de preditor pode levar a perdas de codificação. Por exemplo, sem uma paleta de preditor, um codificador de vídeo (um codificador de vídeo 20 ou decodificador de vídeo) pode codificar dados que indicam todas as entradas de uma paleta (por exemplo, todos os índices de paleta e valores de cor relacionados) em um fluxo de bits. Isso pode ser uma quantidade relativamente grande de dados em relação a dados associados a entradas de paleta preditas. Por conseguinte, a redefinição de uma paleta de preditor pode afetar adversamente a taxa de bits de dados de vídeo codificados com codificação baseada em paleta.
[0052] De acordo com aspectos dessa revelação, uma paleta de preditor para construir uma paleta para um bloco de dados de vídeo em uma primeira linha pode ser reinicializada com base em um ou mais blocos de outra linha. Por exemplo, um codificador de vídeo pode determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizado em uma primeira linha de blocos. O codificador de vídeo pode também gerar uma paleta de preditor ao codificar um ou mais outros blocos na primeira linha. Após codificar um bloco em uma segunda linha, o codificador de vídeo pode reinicializar a paleta de preditor para determinar uma paleta do bloco na segunda linha com base nas entradas da primeira paleta. De acordo com alguns aspectos dessa revelação, a linha de blocos pode ser uma linha de blocos de certo tamanho (por exemplo, uma linha de unidades de árvore de codificação (CTUs) como descrito abaixo). O comprimento de linha pode representar uma largura de imagem nas unidades de bloco selecionadas, e o número de linhas pode representar a altura de imagem nas unidades de bloco selecionadas.
[0053] Em alguns exemplos, a paleta de preditor reinicializada inclui entradas de uma paleta de um ou mais blocos que são posicionados relativamente próximos ao bloco atualmente sendo codificado. Por conseguinte, a paleta de preditor pode incluir entradas tendo uma probabilidade mais elevada de ser incluída em uma paleta do bloco atualmente sendo codificado (por exemplo, em relação a uma paleta de preditor com base nos blocos localizados mais longe do bloco atual ou uma paleta de preditor que foi redefinida). Desse modo, as técnicas dessa revelação podem aumentar a eficiência de codificação, porque o codificador de vídeo pode determinar a paleta para o bloco atual usando a paleta de preditor ao invés de codificar as entradas da paleta no fluxo de bits.
[0054] Outros aspectos dessa revelação são dirigidos à codificação (isto é, codificação ou decodificação) de um valor de curso que indica um comprimento de curso de um curso de índices de paleta. Por exemplo, como observado acima, um curso pode especificar para um índice atualmente sendo codificado com um modo dado, o número de amostras subsequentes que são codificadas com índice atual usando o mesmo modo.
[0055] Em algumas instâncias, dados indicando o valor de curso podem ser codificados usando uma técnica de codificação adaptável a contexto, como Codificação aritmética binária adaptável a contexto (CABAC), codificação de comprimento variável adaptável a contexto (CAVLC), ou outra técnica de codificação adaptável a contexto. Por exemplo, um codificador de vídeo (um codificador de vídeo ou um decodificador de vídeo) pode selecionar um modelo de probabilidade ou “modelo de contexto” que opera em contexto para codificar símbolos associados a um bloco de dados de vídeo. Isto é, o modelo de contexto (Ctx) pode ser um índice ou deslocamento que é aplicado para selecionar um de uma pluralidade de contextos diferentes, cada um dos quais pode corresponder a um modelo de probabilidade específico.
[0056] Em algumas instâncias, um contexto único pode ser usado para codificar dados que indicam um valor de curso. Por exemplo, um valor de curso binarizado pode incluir um primeiro bin que indica se o valor de curso é maior que zero, um segundo bin que indica se o valor de curso é maior que um, um terceiro bin que indica se o valor de curso é maior que dois, e quaisquer outros binários necessários para representar o valor de curso. Nesse exemplo, o mesmo contexto pode ser usado para codificar em contexto os três primeiros pinos do valor de curso binarizado. Entretanto, o uso do mesmo modelo de probabilidade para codificar múltiplos binários pode criar um retardo entre ciclos de codificação sucessivos. Além disso, a correlação de binários de um valor de curso pode não ser suficiente para garantir os recursos de computação e tempo associados à atualização do modelo de probabilidade.
[0057] De acordo com aspectos dessa relação, o contexto pode ser selecionado com base no valor de índice do valor de curso sendo codificado. Por exemplo, um codificador de vídeo pode determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo. O codificador de vídeo pode também determinar um contexto para dados de codificação adaptável a contexto que representa o valor de curso com base no valor de índice de paleta. As técnicas podem melhorar a eficiência de codificação.
[0058] Em alguns exemplos, o índice de paleta usado para derivar contextos para codificação de curso pode ser um índice de paleta que é usado para recuperar um valor de cor a partir da paleta. Em outros exemplos, o índice de paleta usado para deriva contextos para codificação de curso pode ser um índice de paleta analisado, isto é, o índice de paleta sinalizado em um fluxo de bits (que pode ser diferente do índice de paleta que é usado para acessar as cores de paleta, como descrito em maior detalhe abaixo).
[0059] Em alguns exemplos, três contextos podem ser usados para codificar um valor de curso. Em tais exemplos, de acordo com aspectos dessa revelação, um codificador de vídeo pode selecionar um primeiro contexto para codificar o valor de curso com base no índice sendo maior que zero. O codificador de vídeo pode selecionar um primeiro contexto para codificar o valor de curso com base no índice sendo maior que zero. O codificador de vídeo pode selecionar um segundo contexto para codificar o valor de curso com base no índice sendo maior que um. O codificador de vídeo pode selecionar um terceiro contexto para codificar o valor de curso com base no índice sendo maior que dois. Com relação aos exemplo de bin codificado de três contextos descrito acima, o codificador de vídeo pode selecionar os três contextos para codificar qualquer combinação dos três binários. Embora o exemplo acima seja descrito com relação à definição de três contextos associados a três características do valor de índice, deve ser entendido que as técnicas descritas aqui podem ser estendidas para definir outros números de contextos com base em outras características do valor de índice.
[0060] Outros aspectos dessa revelação são dirigidos à codificação de cursos de índices de paleta que são codificados usando mais de um modo de paleta. Em geral, índices que são codificados usando modos de paleta diferentes não podem ser codificados no mesmo curso. Em um exemplo para fins de ilustração, um curso codificado usando o modo CopyFromTop pode não incluir quaisquer índices que são codificados como amostras de escapamento. Nesse exemplo, um pixel codificado como uma amostra de escapamento pode terminar um curso, que pode impactar adversamente eficiência de codificação devido a cursos relativamente mais curtos para um dado bloco.
[0061] De acordo com aspectos dessa revelação, um curso pode incluir amostras que são codificadas usando mais de um modo de paleta. Por exemplo, um codificador de vídeo pode determinar índices de paleta de uma primeira linha de um bloco de dados de vídeo, onde os índices de paleta incluem um ou mais índices que são associados a um valor de cor na paleta e um elemento de sintaxe que não é associado a um valor de cor na paleta (que pode ser mencionado como um índice de paleta apesar do elemento de sintaxe não corresponder necessariamente a um valor de índice). O codificador de vídeo pode também codificar um curso de índices de paleta de uma segunda linha do bloco de dados de vídeo em relação aos índices de paleta da primeira linha, onde o curso inclui um ou mais índices que são associados a um valor de cor na paleta e o elemento de sintaxe que não é associado a um valor de cor na paleta.
[0062] Em alguns exemplos, o curso de índices de paleta pode incluir pixels que são codificados tanto com modo de CopyFromTop como com amostras de escapamento, por exemplo, usando modo de Escapamento. Por exemplo, os índices que são associados a um valor de cor na paleta podem ser codificados com modo CopyFromTop e o elemento de sintaxe que não é associado a um valor de cor na paleta pode ser codificado como uma amostra de escapamento. Em alguns exemplos, como descrito em maior detalhe abaixo, o elemento de sintaxe pode ser associado a um índice que não é associado a um valor de cor na paleta. Em alguns exemplos, os valores de pixels codificados como amostras de escapamento podem ser sinalizados após o curso de índices, e os pixels codificados como amostras de escapamento não são necessários serem iguais. Em outros exemplos, uma amostra de escapamento pode ser representada por modo CopyFromTop e uma amostra de escapamento pode ser incluída no mesmo grupo de pixels juntamente com as amostras codificadas não de escapamento (por exemplo, pixels para os quais valores de cor são representados na paleta), onde o grupo de pixels é identificado por um valor de curso. Desse modo, as técnicas podem ser usadas para aumentar o comprimento de cursos, o que pode melhorar a eficiência de codificação.
[0063] A figura 1 é um diagrama de blocos ilustrando um sistema de codificação de vídeo de exemplo, 10, que pode utilizar técnicas dessa revelação. Como usado aqui, o termo “codificador de vídeo” se refere genericamente tanto a codificadores de vídeo como decodificadores de vídeo. Nessa revelação, os termos “codificação de vídeo” ou “codificação” podem se referir genericamente à codificação de vídeo ou decodificação de vídeo. O codificador de vídeo 20 e o decodificador de vídeo 30 do sistema de codificação de vídeo 10 representam exemplos de dispositivos que podem ser configurados para executar técnicas para codificação de vídeo baseada em paleta de acordo com vários exemplos descritos nessa revelação. Por exemplo, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para seletivamente codificar vários blocos de dados de vídeo, como CUs ou PUs em codificação de HEVC, usando codificação baseada em paleta ou codificação não baseada em paleta. Modos de codificação não baseados em paleta podem se referir a vários modos de codificação temporal inter- preditiva ou modos de codificação espacial intra-preditiva, como os vários modos de codificação especificados pelo HEVC Minuta 10.
[0064] Como mostrado na figura 1, o sistema de codificação de vídeo 10 inclui um dispositivo de fonte 12 e um dispositivo de destino 14. O dispositivo de fonte 12 gera dados de vídeo codificados. Por conseguinte, o dispositivo de fonte 12 pode ser mencionado como dispositivo de codificação de vídeo ou um aparelho de codificação de vídeo. O dispositivo de destino 14 pode decodificar os dados de vídeo codificados gerados pelo dispositivo de fonte 12. Por conseguinte, o dispositivo de destino 14 pode ser mencionado como um dispositivo de decodificação de vídeo ou um aparelho de decodificação de vídeo. O dispositivo de fonte 12 e dispositivo de destino 14 podem ser exemplos de dispositivos de codificação de vídeo ou aparelhos de codificação de vídeo.
[0065] O dispositivo de fonte 12 e o dispositivo de destino 14 podem compreender uma ampla gama de dispositivos incluindo computadores de mesa, dispositivos de computação móveis, computadores notebook (por exemplo, laptop), computadores tablet, conversores de sinais de frequência, aparelhos telefônicos como os denominados “smart” phones, televisões, câmeras, dispositivos de exibição, tocadores de mídia digital, consoles de jogos de vídeo, computadores no carro, ou similares.
[0066] O dispositivo de destino 14 pode receber os dados de vídeo codificados a partir do dispositivo de fonte 12 através de um canal 16. O canal 16 pode compreender uma ou mais mídias ou dispositivos capazes de mover os dados de vídeo codificados a partir do dispositivo de fonte 12 para o dispositivo de destino 14. Em um exemplo, o canal 16 pode compreender uma ou mais mídia de comunicação que permite que o dispositivo de fonte 12 transmita dados de vídeo codificados diretamente para o dispositivo de destino 14 em tempo real. Nesse exemplo, o dispositivo de fonte 12 pode modular os dados de vídeo codificados de acordo com um padrão de comunicação, como um protocolo de comunicação sem fio, e pode transmitir os dados de vídeo modulados para o dispositivo de destino 14. Uma ou mais mídia de comunicação podem incluir mídia de comunicação sem fio e/ou cabeada, como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão física. Uma ou mais mídia de comunicação podem fazer parte de uma rede baseada em pacote, como uma rede de área local, uma rede de área remota, ou uma rede global (por exemplo, a Internet). Uma ou mais mídia de comunicação pode incluir roteadores, comutadores, estações base, ou outro equipamento o que facilitam comunicação a partir do dispositivo de fonte 12 para o dispositivo de destino 14.
[0067] Em outro exemplo, o canal 16 pode incluir uma mídia de armazenagem que armazena dados de vídeo codificados gerados pelo dispositivo de fonte 12. Nesse exemplo, o dispositivo de destino 14 pode acessar a mídia de armazenagem através de acesso de disco ou acesso de cartão. A mídia de armazenagem pode incluir uma variedade de mídia de armazenagem de dados acessados localmente como discs Blu-ray, DVDs, CD-ROMs, memória flash, ou outra mídia de armazenagem digital adequada para armazenar dados de vídeo codificados.
[0068] Em um exemplo adicional, o canal 16 pode incluir um servidor de arquivo ou outro dispositivo de armazenagem intermediário que armazena dados de vídeo codificados gerados pelo dispositivo de fonte 12. Nesse exemplo, o dispositivo de destino 14 pode acessar dados de vídeo codificados armazenados no servidor de arquivo ou outro dispositivo de armazenagem intermediário através de streaming ou download. O servidor de arquivo pode ser um tipo de servidor capaz de armazenar dados de vídeo codificados e transmitir os dados de vídeo codificados para o dispositivo de destino 14. Servidores de arquivo de exemplo incluem servidores de rede (por exemplo, para um website), servidores de protocolo de transferência de arquivo (FTP), dispositivos de armazenagem ligados em rede (NAS) e unidades de disco local.
[0069] O dispositivo de destino 14 pode acessar os dados de vídeo codificados através de uma conexão de dados padrão, como uma conexão da Internet. Tipos de exemplos de conexões de dados podem incluir canais sem fio (por exemplo, conexões Wi-Fi), conexões cabeadas (por exemplo, DSL, modem a cabo, etc.), ou combinação de ambos são adequadas para acessar dados de vídeo codificados armazenados em um servidor de arquivo. A transmissão de dados de vídeo codificados a partir do servidor de arquivo pode ser uma transmissão streaming, uma transmissão download, ou uma combinação de ambos.
[0070] As técnicas dessa revelação não são limitadas a aplicações ou cenários sem fio. As técnicas podem ser aplicadas à codificação de vídeo em suporte de uma variedade de aplicações de multimídia, como broadcasts de televisão pelo ar, transmissões de televisão a cabo, transmissões de televisão por satélite, transmissões de vídeo streaming, por exemplo, através da Internet, codificação de dados de vídeo para armazenagem em uma mídia de armazenagem de dados, decodificação de dados de vídeo armazenados em uma mídia de armazenagem de dados, ou outras aplicações. Em alguns exemplos, o sistema de codificação de vídeo 10 pode ser configurado para suportar transmissão de vídeo simples ou duplex para suportar aplicações como streaming de vídeo, reprodução de vídeo, broadcasting de vídeo e/ou telefonia de vídeo.
[0071] O sistema de codificação de vídeo 10 ilustrado na figura 1 é meramente um exemplo e as técnicas dessa revelação podem se aplicar a cenários de codificação de vídeo (por exemplo, codificação de vídeo ou decodificação e vídeo) que não incluem necessariamente qualquer comunicação de dados entre os dispositivos de codificação e decodificação. Em outros exemplos, dados são recuperados a partir de uma memória local, streamed sobre uma rede ou similar. Um dispositivo de codificação de vídeo pode codificar e armazenar dados para memória e/ou um dispositivo de decodificação de vídeo pode recuperar e decodificar dados a partir da memória. Em muitos exemplos, a codificação e decodificação são realizadas por dispositivos que não se comunicam mutuamente, porém simplesmente codificam dados para memória e/ou recuperar e decodificar dados a partir da memória.
[0072] No exemplo da figura 1, o dispositivo de fonte 12 inclui uma fonte de vídeo 18, um codificador de vídeo 20, e uma interface de saída 22. Em alguns exemplos, a interface de saída 22 pode incluir um modulador/demodulador (modem) e/ou transmissor. A fonte de vídeo 18 pode incluir um dispositivo de captura de vídeo, por exemplo, uma câmera de vídeo, um arquivo de vídeo contendo dados de vídeo anteriormente capturados, uma interface de feed de vídeo para receber dados de vídeo a partir de um provedor de conteúdo de vídeo, e/ou um sistema de gráfico de computador para gerar dados de vídeo ou uma combinação de tais fontes de dados de vídeo.
[0073] O codificador de vídeo 20 pode codificar dados de vídeo a partir da fonte de vídeo 18. Em alguns exemplos, o dispositivo de fonte 12 transmite diretamente os dados de vídeo codificados para o dispositivo de destino 14 através da interface de saída 22. Em outros exemplos, os dados de vídeo codificados podem ser também armazenados sobre uma mídia de armazenagem ou um servidor de arquivo para acesso posterior por dispositivo de destino 14 para decodificação e/ou reprodução.
[0074] No exemplo da figura 1, o dispositivo de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30, e um dispositivo de exibição 32. Em alguns exemplos, a interface de entrada 28 inclui um receptor e/ou um modem. A interface de entrada 28 pode receber dados de vídeo codificados através do canal 16. O dispositivo de exibição 32 pode ser integrado com ou pode ser externo ao dispositivo de destino 14. Em geral, o dispositivo de exibição 32 exibe dados de vídeo decodificados. O dispositivo de exibição 32 pode compreender uma variedade de dispositivos de exibição, como um display de cristal líquido (LCD), um display de plasma, um display de diodo de emissão de luz orgânica (OLED) ou outro tipo de dispositivo de exibição.
[0075] O codificador de vídeo 20 e decodificador de vídeo 30 podem ser implementados individualmente como qualquer de uma variedade de conjunto de circuitos de codificador adequado, como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados de aplicação específica (ASICs), disposições de porta programável em campo (FPGAs), lógica discreta, hardware, ou quaisquer combinações dos mesmos. Se as técnicas forem implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em uma mídia legível em computador não transitória adequada e pode executar as instruções em hardware usando um ou mais processadores para executar as técnicas dessa revelação. Qualquer um dos acima (incluindo hardware, software, uma combinação de hardware e software, etc.) pode ser considerado como sendo um ou mais processadores. Cada do codificador de vídeo 20 e decodificador de vídeo 30 pode ser incluído em um ou mais codificadores ou decodificadores, qualquer um dos quais pode ser integrado como parte de um codificador/decodificador (CODEC) combinado em um dispositivo respectivo.
[0076] Essa revelação pode genericamente se referir ao codificador de vídeo 20 “sinalizando” ou “transmitindo” certas informações para outro dispositivo, como decodificador de vídeo 30. O termo “sinalizando” ou “transmitindo” pode se referir em geral à comunicação de elementos de sintaxe e/ou outros dados usados para decodificar os dados de vídeo comprimidos. Tal comunicação pode ocorrer em tempo real ou quase real. Alternativamente, tal comunicação pode ocorrer durante um período de tempo, como poderia ocorrer ao armazenar elementos de sintaxe para uma mídia de armazenagem legível em computador em um fluxo de bits codificado no momento de codificação, que então pode ser recuperado por um dispositivo de decodificação a qualquer momento após ser armazenado para essa mídia.
[0077] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 operam de acordo com um padrão de compressão de vídeo, como padrão HEVC mencionado acima, e descrito em HEVC minuta 10. Além do padrão HEVC de base, há esforços contínuos para produzir codificação de vídeo escalonável, codificação de vídeo de múltiplas vistas, e extensões de codificação 3D para HEVC. Além disso, modos de codificação baseada em paleta, por exemplo, como descrito nessa revelação, podem ser fornecidos para extensão do padrão HEVC. Em alguns exemplos, as técnicas descritas nessa revelação para codificação baseada em paleta podem ser aplicadas a codificadores e decodificadores configurados para operação de acordo com outros padrões de codificação de vídeo, como o padrão ITU-T-H.264/AVC ou padrões futuros. Por conseguinte, a aplicação de um modo de codificação baseada em paleta para codificação de unidades de codificação (CUs) ou unidades de predição (PUs) em um codec HEVC é descrita para fins de exemplo.
[0078] Em HEVC e outros padrões de codificação de vídeo, uma sequencia de vídeo tipicamente inclui uma série de imagens. Imagens também podem ser mencionadas como “quadros”. Uma imagem pode incluir três conjuntos de amostras, indicados SL, SCb e SCr. SL é um conjunto bidimensional (isto é, um bloco) de amostras de luma. SCb é um conjunto bidimensional de amostras de crominância Cb. SCr é um conjunto bidimensional de amostras de crominância Cr. Amostras de crominância podem ser também mencionados aqui como amostras de “croma”. Em outras instâncias, uma imagem pode ser monocromo e pode somente incluir um conjunto de amostras de luma.
[0079] 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 das CTUs pode compreender um bloco de árvore de codificação de amostras de luma, dois blocos de árvore de codificação correspondentes de amostras de croma, e estruturas de sintaxe usadas para codificar as amostras dos 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 mencionada como um “bloco de árvore” ou uma “unidade de codificação maior” (LCU). As CTUs de HEVC podem ser amplamente análogas aos macroblocos de outros padrões de codificação de vídeo, como H.264/AVC. Entretanto, uma CTU não é 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.
[0080] Para gerar uma CTU codificada, o codificador de vídeo 20 pode recursivamente executar divisão de quad-tree nos blocos de árvore de codificação de uma CTU para dividir os blocos de árvore de codificação nos blocos de codificação, consequentemente o nome “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 de luma e dois blocos de codificação correspondentes de amostras de croma de um quadro que tem um conjunto de amostras de luma, um conjunto de amostra Cb e um conjunto de amostra Cr, e estruturas de sintaxe usadas para codificar as amostras dos blocos de codificação. O codificador de vídeo 20 pode dividir um bloco de codificação de 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) de amostras nas quais a mesma predição é aplicada. Uma unidade de predição (PU) de uma CU pode ser um bloco de predição de amostras de luma, dois blocos de predição correspondentes de amostras de croma de um quadro, e estruturas de sintaxe usadas para prever as amostras de bloco de predição. O codificador de vídeo 20 pode gerar blocos de luma, Cb e Cr preditivos para blocos de predição de luma, Cb e Cr de cada PU da CU.
[0081] O codificador de vídeo 20 pode usar intra predição ou inter predição para gerar os blocos preditivos para uma PU. Se o codificador de vídeo 20 usar intra 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 do quadro associado a PU.
[0082] Se o codificador de vídeo 20 usar 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 uma ou mais imagens diferentes da imagem associada à PU. O codificador de vídeo 20 pode usar uni-predição ou bi-predição para gerar os blocos preditivos para uma PU. Quando o codificador de vídeo 20 usa uni-predição para gerar os blocos preditivos para uma PU, a PU pode ter um vetor de movimento único (MV). Quando o codificador de vídeo 20 usa bi-predição para gerar os blocos preditivos para uma PU, a PU pode ter dois MVs.
[0083] Após o codificador de vídeo 20 gerar blocos preditivos de luma, Cb e Cr para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar um bloco residual de luma para a CU. Cada amostra no bloco residual de luma da CU indica uma diferença entre uma amostra de luma em um dos blocos de luma preditivos da CU e uma amostra correspondente no bloco de codificação de luma original da CU. Além disso, o codificador de vídeo 20 pode gerar um bloco residual Cb para a CU. Cada amostra no bloco residual Cb da CU pode indicar uma diferença entre uma amostra Cb em um dos blocos Cb 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 uma 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.
[0084] Além disso, o codificador de vídeo 20 pode usar divisão de quad-tree para decompor os blocos residuais de luma, Cb e Cr de uma CU em um ou mais blocos de transformada de luma, 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 compreender um bloco de transformada de amostras de luma, dois blocos de transformada correspondentes de amostras de croma, e estruturas de sintaxe usadas para transformar as amostras de bloco de transformada. Desse modo, cada TU de uma CU pode ser associada a um bloco de transformada de luma, um bloco de transformada de Cb, e um bloco de transformada de Cr. O bloco de transformada de luma associado a TU pode ser um sub-bloco do bloco residual de luma da CU. O bloco de transformada de Cb pode ser um sub-bloco do bloco residual de Cb da CU. O bloco de transformada de Cr pode ser um sub- bloco do bloco residual de Cr da CU.
[0085] O codificador de vídeo 20 pode aplicar uma ou mais transformadas em um bloco de transformada de luma para gerar um bloco de coeficiente de luma para a TU. Um bloco de coeficiente pode ser um conjunto 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 em um bloco de transformada de Cb de uma TU para gerar um bloco de coeficiente de Cb para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas em um bloco de transformada de Cr de uma TU para gerar um bloco de coeficiente de Cr para a TU.
[0086] Após gerar um bloco de coeficiente (por exemplo, um bloco de coeficiente de luma, um bloco de coeficiente de Cb ou um bloco de coeficiente de Cr), o codificador de vídeo 20 pode quantizar o bloco de coeficiente. A quantização se refere em geral a um processo no qual coeficientes de transformada são quantizados para possivelmente reduzir a quantidade de dados usados para representar os coeficientes de transformada, fornecendo compressão adicional. Após o codificador de vídeo 20 quantizar um bloco de coeficiente, o codificador de vidro 20 pode codificar por entropia elementos de sintaxe que indicam os coeficientes de transformada quantizados. Por exemplo, o codificador de vídeo 20 pode executar Codificação aritmética binária adaptável ao contexto (CABAC) nos elementos de sintaxe indicando os coeficientes de transformada quantizados.
[0087] Com relação a CABAC, como exemplo, o codificador de vídeo 20 e decodificador de vídeo 30 podem selecionar um modelo de probabilidade (também mencionado como modelo de contexto) para codificar símbolos associados a um bloco de dados de vídeo com base em contexto. Por exemplo, um modelo de contexto (Ctx) pode ser um índice ou deslocamento que é aplicado para selecionar um de uma pluralidade de contextos diferentes, cada um dos quais pode corresponder a um modelo de probabilidade específico. Por conseguinte, um modelo de probabilidade diferente é tipicamente definido para cada contexto. Após codificar ou decodificar o bin, o modelo de probabilidade é adicionalmente atualizado com base em um valor do bin para refletir as estimativas de probabilidade mais atuais para o bin. Por exemplo, um modelo de probabilidade pode ser mantido como um estado em uma máquina de estado finito. Cada estado específico pode corresponder a um valor de probabilidade específica. O estado seguinte, que corresponde a uma atualização do modelo de probabilidade, pode depender do valor do bin atual (por exemplo, o bin atualmente sendo codificado). Por conseguinte, a seleção de um modelo de probabilidade pode ser influenciada pelos valores dos binários anteriormente codificados, porque os valores indicam, pelo menos em parte, a probabilidade do bin ter um valor dado. O processo de codificação de contexto descrito acima pode ser genericamente mencionado como um modo de codificação adaptável a contexto.
[0088] Consequentemente, o codificador de vídeo 20 pode codificar um símbolo alvo usando um modelo de probabilidade. De modo semelhante, o decodificador de vídeo 30 pode analisar um símbolo alvo usando o modelo de probabilidade. Em algumas instâncias, o codificador de vídeo 20 pode codificar elementos de sintaxe usando uma combinação de codificação adaptável a contexto e não adaptável a contexto. Por exemplo, o codificador de vídeo 20 pode codificar em contexto binários por selecionar um modelo de probabilidade ou “modelo de contexto” que opera em contexto para codificar os binários. Ao contrário, o codificador de vídeo 20 pode desviar binários de código por desviar ou omitir o processo de codificação aritmética regular ao codificar os binários. Em tais exemplos, o codificador de vídeo 20 pode usar um modelo de probabilidade fixa para desviar código dos pins. Isto é, binários codificados por desvio não incluem atualizações de probabilidade ou contexto.
[0089] 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 associados. O fluxo de bit pode compreender uma sequência de unidades de camada de abstração de rede (NAL). Cada das unidades NAL inclui um cabeçalho de unidade NAL e encapsula uma carga útil de sequência de byte bruto (RBSP). O cabeçalho de unidade NAL pode incluir um elemento de sintaxe que indica um código 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. Um RBSP pode ser uma estrutura de sintaxe contendo um número inteiro de bytes que é encapsulado em uma unidade NAL. Em algumas instâncias, um RBSP inclui zero bit.
[0090] Tipos diferentes de unidades NAL podem encapsular tipos diferentes de RBSPs. Por exemplo, um primeiro tipo de unidade NAL pode encapsular um RBSP para um conjunto de parâmetro de quadro (PPS), um segundo tipo de unidade NAL pode encapsular um RBSP para uma fatia codificada, um terceiro tipo de unidade NAL pode encapsular um RBSP para Informação de Aperfeiçoamento suplementar (SEI) e etc. Unidades NAL que encapsulam RBSPs para dados de codificação de vídeo (ao contrário de RBSPs para conjuntos de parâmetros e mensagens SEI) podem ser mencionadas como unidades NAL de camada de codificação de vídeo (VCL).
[0091] O decodificador de vídeo 30 pode receber um fluxo de bits gerado pelo codificador de vídeo 20. Além disso, o decodificador de vídeo 30 pode obter elementos de sintaxe a partir do fluxo de bits. Por exemplo, o decodificador de vídeo 30 pode analisar o fluxo de bits para decodificar elementos de sintaxe a partir do fluxo de bits. O decodificador de vídeo 30 pode reconstruir os quadros dos dados de vídeo com base pelo menos em parte nos elementos de sintaxe decodificados a partir do fluxo de bits. O processo para reconstruir os dados de vídeo pode ser genericamente recíproco ao processo executado pelo codificador de vídeo 20. Por exemplo, o decodificador de vídeo 30 pode usar MVs de PUs para determinar blocos preditivos para as PUs de uma CU atual. Além disso, o decodificador de vídeo 30 pode quantizar inverso blocos de coeficiente de transformada associados com TUs da CU atual. O decodificador de vídeo 30 pode executar transformadas inversas nos blocos de coeficiente de transformada para reconstruir blocos de transformada associados às TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de codificação da CU atual por adicionar as amostras dos blocos de amostra preditivos para PUs da CU atual a amostras correspondentes dos blocos de transformada das TUs da CU atual. Por reconstruir os blocos de codificação para cada CU de um quadro, o decodificador de vídeo 30 pode reconstruir o quadro.
[0092] HEVC contém várias propostas para tornar o codec mais favorável paralelo, incluindo azulejos e processamento paralelo de frente de onda (WPP). HEVC WD10 define azulejos como um número inteiro de codificar blocos de árvore ocorrendo em conjunto em uma coluna e uma linha, ordenados consecutivamente em uma varredura raster de bloco de árvore de codificação do azulejo. A divisão de cada imagem em azulejos é uma partição. O número de azulejos e a localização de seus limites podem ser definidos para a sequência inteira ou alterados de imagem para imagem. Limites de azulejo, similarmente a limites de fatia, quebram dependências de predição e análise de modo que um azulejo possa ser processado independentemente, porém os filtros em loop (desbloqueio e deslocamento adaptável a amostra (SAO)) podem ainda cruzar limites de azulejo. HEVC WD10 também especifica algumas limitações sobre a relação entre fatias e azulejos.
[0093] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para executar codificação baseada em paleta. Por exemplo, em codificação baseada em paleta, ao invés de executar as técnicas de codificação intra-preditiva ou in- ter-preditiva descritas acima, codificador de vídeo 20 e decodificador de vídeo 30 podem codificar uma denominada paleta como uma tabela de cores representando os dados de vídeo da área específica (por exemplo, um dado bloco). 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 decodificar um índice que relaciona o valor de pixel com o valor apropriado na paleta.
[0094] No exemplo acima, o codificador de vídeo 20 pode codificar um bloco de dados devido por determinar uma paleta para o bloco, localizar uma entrada na paleta para representar o valor de cada pixel, e codificar a paleta com valores de índice para os pixels referentes ao valor de pixel para a paleta. O decodificador de vídeo 30 pode obter, a partir de um fluxo de bits codificado, uma paleta para um bloco, bem 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.
[0095] Em alguns exemplos, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para construir uma paleta usando entradas de paleta a partir de um ou mais blocos anteriormente codificados. Por exemplo, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para copiar uma ou mais entradas de paleta para codificar um bloco atual a partir de uma paleta de preditor que inclui entradas de paleta a partir de blocos anteriormente codificados usando modo de paleta ou outras amostras reconstruídas. Para cada entrada na paleta de preditor, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para codificar um indicador binário para indicar se a entrada associada ao indicador é copiada para a paleta atual (por exemplo, indicado por indicador = 1). A série de indicadores binários pode ser mencionada como o vetor de predição de paleta binária. A paleta para codificar um bloco atual pode incluir também um número de novas entradas de paleta, que podem ser explicitamente codificadas (por exemplo, separadamente do vetor de predição de paleta).
[0096] Como observado acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem usar um número de modos de codificação de paleta diferentes para codificar índices de uma paleta. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem usar um modo de Escapamento, um modo CopyFromTop (também mencionado como modo CopyAbove), ou um modo de Valor (também mencionado como modo de Índice) para codificar índices de um bloco. Em geral, a codificação de uma amostra usando “modo de escapamento” pode genericamente se referir a codificação de uma amostra de um bloco que não tem uma cor correspondente representada em uma paleta para codificar o bloco. Como observado acima, tais amostras podem ser mencionadas como amostras de escapamento ou pixels de escapamento.
[0097] Como outro exemplo, em um terceiro experimento de núcleo de codificação de conteúdo de tela, subteste B.6, como descrito por Yu-Wen Huang e outros, “Description of screen content core experiment 3 (SCCE3): Palette Mode,” JCTVC-Q1123, Valencia, ES, 27 de março - 4 de abril de 2014 (a seguir Q1123), outro modo foi introduzido no software liberado por Canon em 26 de maio de 2014. O macro para esse modo pode ser definido como “CANON_NEW_RUN_LAST_TRANSITION” e pode ser mencionado aqui como modo de Curso de transição. O Curso de transição pode ser similar ao modo Valor em que o codificador de vídeo 20 ou decodificador de vídeo 30 pode codificar um valor de índice seguido por um curso especificando o número de amostras subsequentes que têm o mesmo índice de paleta.
[0098] Uma diferença entre o modo Valor e o modo Curso de transição é que o valor de índice do modo de curso de transição não é sinalizado no fluxo de bit. Ao invés, o codificador de vídeo 20 e decodificador de vídeo 30 podem inferir o valor de índice para o modo de Curso de transição. Como descrito aqui, inferir um valor pode se referir à determinação de um valor sem referência a sintaxe dedicada que representa o valor que é codificado em um fluxo de bits. Isto é, o codificador de vídeo 20 e decodificador de vídeo 30 podem inferir um valor sem codificar um elemento de sintaxe dedicado para o valor em um fluxo de bits. O índice inferido pode ser mencionado como um índice de transição.
[0099] Em alguns exemplos, pode haver dois modos de sinalizar os modos de paleta. Uma primeira técnica para sinalizar modos de paleta pode ser mencionada como sinalização de escapamento explícito. Por exemplo, em JCTVC-Q0094, se o macro “PLT_REMOVE_ESCAPE_FLAG” for zero, o codificador de vídeo 20 pode explicitamente codificar um indicador de escapamento para cada amostra de um bloco para indicar se uma amostra sendo codificada em um bloco é codificada no modo de Escapamento. Se a amostra não for codificada com modo de Escapamento, o codificador de vídeo 20 pode codificar dados adicionais para indicar se o modo é CopyFromTop ou Valor. Em algumas instâncias, os dados adicionais podem ser um indicador, mencionado aqui como um indicador SPoint (por exemplo, um valor de indicador SPoint de zero pode indicar modo CopyFromTop e um valor de indicador SPoint de um pode indicar modo de Valor, ou vice versa).
[0100] Consequentemente, com a sinalização de escapamento explícita, o indicador SPoint pode ser usado para indicar um tipo de curso específico para um curso de valores de pixel associados ao modo indicado. Por exemplo, o codificador de vídeo 20 pode codificar um indicador SPoint para indicar se o índice atualmente sendo codificado e o curso de valores de índice subsequentes sendo codificados em um curso são codificados usando modo CopyFromTop ou modo de Valor. O codificador de vídeo 20 não codifica o indicador de escapamento (por exemplo, “PLT_REMOVE_ESCAPE_FLAG”) e o indicador SPoint (quando necessário) para as amostras de curso subsequentes. Isto é, o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir os valores do indicador de escapamento e indicador SPoint para amostras incluídas em um curso. Por exemplo, o codificador de vídeo 20 e decodificador de vídeo 30 podem determinar o valor do indicador de escapamento e indicador SPoint para amostras incluídas no curso sem referência a sintaxe dedicada que representa tais valores no fluxo de bit.
[0101] Uma segunda técnica para sinalizar modos de paleta pode ser mencionado como sinalização de escapamento implícita. Por exemplo, se o macro “PLET_REMOVE_ESCAPE_FLAG” de JCTVC-Q0094 for um, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para aumentar o número de entradas de paleta de uma paleta por um para acomodar um índice especial para a paleta que não corresponde a qualquer dos índices do bloco. Em alguns exemplos, o codificador de vídeo 20 e decodificador de vídeo 30 podem incluir o índice adicional como o último índice de paleta na paleta aumentada para um dado bloco. O índice adicional pode ser usado como uma indicação de uma amostra de escapamento.
[0102] Nessa sinalização de escapamento implícito, o codificador de vídeo 20 pode codificar, para um valor de amostra específico de um bloco, dados que representam o índice adicional para indicar que a amostra adicional é codificada usando modo de Escapamento. O codificador de vídeo 20 pode também codificar o valor de cor da amostra de escapamento. Por conseguinte, no caso de sinalização de escapamento implícito, há somente dois modos possíveis (por exemplo, modo CopyFromTop ou modo de Valor) a serem sinalizados usando sintaxe explícita. Por exemplo, somente o indicador SPoint pode sinalizar para distinguir entre os modos. Se uma amostra for codificada em modo de Valor e o índice para o modo de Valor for igual ao índice de escapamento (por exemplo, o índice adicional acima mencionado para a paleta), o codificador de vídeo 20 e o decodificador de vídeo 30 podem inferir a amostra a ser codificada no modo de Escapamento. Nesse caso nenhum curso é sinalizado. Ao usar a sinalização de escapamento implícita com o modo de Curso de transição, a indicação SPoint pode assumir valores 0 (por exemplo, modo de Valor), 1 (por exemplo, modo CopyFromTop) ou 2 (por exemplo, modo de Curso de transição).
[0103] As técnicas descritas nessa revelação podem incluir técnicas para várias combinações de uma ou mais de predição de paleta e sinalização de índices de paleta com sinalização de escapamento implícita. Por exemplo, aspectos dessa revelação se referem à redefinição de uma paleta de preditor. Por exemplo, a redefinição de uma paleta de preditor pode incluir definir o tamanho da paleta de preditor em zero, de modo que a paleta de preditor possa não ser usada para construir uma paleta para um bloco atualmente sendo codificado. Nesse caso, um vetor de predição de paleta binária não é sinalizado em um fluxo de bits e nenhuma entrada de paleta é prevista a partir da paleta de preditor.
[0104] Em JCTVC-Q0094, uma paleta de preditor é redefinida para um bloco de árvore de codificação (CTB) na borda esquerda da imagem (por exemplo, no início de uma linha de CTBs em uma imagem (“linha de CTB”)). O raciocínio para redefinir a paleta de preditor no início de uma linha de CTB pode ser duplo. Primeiramente, após codificar uma linha de CTBs, a paleta de preditor pode incluir entradas de paleta que na maior parte pertencem a paletas de blocos localizadas no lado direito da imagem. Por conseguinte, a paleta de preditor pode não ser muito eficaz em prever uma paleta atual para um primeiro CTB de uma linha de CTB, que pode ser posicionado no lado esquerdo da imagem (por exemplo, as cores de pixels no lado esquerdo de uma imagem podem diferir das cores de pixels no lado direito da imagem). Além disso, quando duas ou mais frentes de onda estão sendo usadas para codificar a imagem específica, além dos estados CABAC, seria necessário propagar informações sobre a paleta de preditor entre frentes de onda.
[0105] Por exemplo, uma frente de onda pode ser uma unidade de dados de vídeo para codificação e pode ser codificada em paralelo com outras frentes de onda. Por exemplo, duas abordagens de paralelização são incluídas em HEVC, incluindo Processamento Paralelo de frente de onda (WPP) e Frente de onda sobrepostas (OWF). WPP permite a criação de divisões de imagem que podem ser processadas em paralelo sem incorrer em perdas de codificação elevadas. Em WPP linhas de CTBs são processadas em paralelo enquanto preserva todas as dependências de codificação. OWF permite sobreposição da execução de imagens consecutivas usando frentes de onda.
[0106] Entretanto, em algumas instâncias a redefinição de uma paleta de preditor pode levar a perdas de codificação. Por exemplo, sem uma paleta de preditor, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados que indicam todas as entradas de uma paleta (por exemplo, todos os índices de paleta e valores de cor relacionados) em um fluxo de bits. Esses dados de paleta podem ser uma quantidade relativamente grande de dados em relação a entradas de paleta previstas, que pode ser indicado no fluxo de bits usando um único indicador. Por conseguinte, a redefinição de uma paleta de preditor pode afetar adversamente a taxa de bits de dados de vídeo codificados com codificação baseada em paleta.
[0107] De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para desabilitar a redefinição de uma paleta de preditor com base no número de frentes de onda que são usadas para codificar uma imagem sendo um ou zero (isto é, sem frentes de onda). Isto é, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não redefinir uma paleta de preditor quando uma ou zero frentes de onda são usadas para codificar uma imagem. Entretanto, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para habilitar a redefinição de uma paleta de preditor quando duas ou mais frentes de onda são usadas para codificar uma imagem. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem não precisar de propagar informações sobre uma paleta de preditor entre frentes de onda, enquanto ainda evita perdas de codificação no caso de frente de onda única.
[0108] De acordo com aspectos dessa revelação, quando múltiplos azulejos e múltiplas frentes de onda são usados para codificar uma imagem (Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 usam dois ou mais azulejos e duas ou mais frentes de onda para codificar a imagem), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para redefinir a paleta de preditor no início de cada linha CTB de azulejo. Uma linha CTB de azulejo pode incluir CTBs a partir de uma linha de CTB que pertencem a um azulejo específico. Deve ser entendido que uma “linha” pode ser orientada verticalmente ou horizontalmente, dependendo de uma ordem de varredura específica usada para codificar blocos. Uma fileira pode também ser mencionada aqui como uma linha, e os termos podem ser usados de modo intercambiável na presente invenção.
[0109] As técnicas descritas acima podem ser também aplicadas em uma tabela de transição de paleta. Por exemplo, o documento de submissão de padrão Yu-Chen Sun e outros, “CE6 Test C.2 Transition copy mode,” JCTVC-S0078, Estrasburgo, FR, 17-24 de outubro (JCTVC-S0078) descreve um modo de cópia de transição. A cópia de transição pode ser também mencionada como um modo de curso de cópia de transição (curso TC). No modo de curso TC, um decodificador registra os padrões de índice de cor adjacentes e usa os padrões para prever índices a serem codificados. No modo de curso TC, como exemplo, um pixel atual, C, tem um índice de cor piloto igual a um. A partir de uma área causal de pixels codificados, um codificador de vídeo (como o codificador de vídeo 20 e o decodificador de vídeo 30) pode determinar que um índice de cor à direita de um índice de cor que é igual a um deve ser provavelmente dois (por exemplo, assumindo uma varredura esquerda para a direita). Esse padrão de transição a partir de um para dois pode ser registrado em uma tabela de cópia de transição (tabela TC) para aumentar a eficiência de predição de índice de cor.
[0110] Em JCTVC-S0078, uma tabela TC é redefinida quando uma CU atual sendo codificada é a primeira CU da fatia, ou a CU atual herda a tabela TC da CU anterior quando a CU atual é uma CU não primeira da fatia. Essa propriedade de herança pode ser mencionada como “propagação de tabela TC.” A tabela TC pode ser mantida e atualizada quando os pixels na CU são codificados.
[0111] Em alguns exemplos, no modo de cópia de transição, duas tabelas de transição são mantidas, uma para linhas de índice par e a outra para linhas de índice ímpar. Contribuições anteriores descritas usando uma tabela de transição única. Independentemente, em geral, como observado acima, uma tabela de transição a partir de uma CU codificada de paleta anterior (ou bloco) pode ser usada para inicializar a tabela de transição para uma CU atual (ou bloco) codificado no modo de paleta.
[0112] De acordo com aspectos dessa revelação, o conceito de redefinir a paleta no início de um primeiro CTB em uma linha de CTB ou o primeiro CTB em um azulejo em uma linha de CTB quando múltiplas frentes de onda estão sendo usadas, como descrito acima, pode ser estendido para redefinir a tabela de transição de paleta (ou tabelas) naqueles locais também. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para definir todas as entradas em uma tabela de transição de paleta em zero (ou em qualquer outro índice de paleta fixa, ou qualquer outro padrão) para o primeiro CTB em uma linha de CTB ou o primeiro CTB em um tile em uma linha de CTB quando múltiplas frentes de onda estão sendo usadas (ou, equivalentemente, as primeiras CUs codificadas em paleta nos CTBs). De acordo com aspectos dessa revelação, a redefinição da paleta de preditor e tabelas de transição de paleta pode ser generalizada para quaisquer outros dados relacionados à paleta que possam ser propagados de uma CU codificada em paleta para outra.
[0113] Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um indicador de um conjunto de parâmetros de vídeo (VPS), conjunto de parâmetros de sequencia (SPS), conjunto de parâmetros de imagem (PPS), cabeçalho de fatia, em um nível de azulejo, em um nível de bloco ou em outro lugar que indica se uma redefinição de paleta de preditor (e/ou redefinição de outras informações como as tabelas de transição de paleta acima mencionadas) é executada no início de cada linha de CTB. Em instâncias nas quais o indicador é sinalizado em um nível de azulejo, o indicador pode indicar se a redefinição de paleta de preditor é executada no início de cada linha de CTB de azulejo (por exemplo, no início de cada linha de CTBs em um azulejo). Alternativamente, para o primeiro bloco codificado usando o modo de paleta em uma linha de CTBs, um indicador pode ser sinalizado para indicar se a redefinição de paleta de preditor é executada.
[0114] Em outro exemplo, um indicador (por exemplo, onde um indicador pode ser um ou mais elementos de sintaxe) pode ser sinalizado para cada bloco codificado usando o modo de paleta para indicar se a redefinição de paleta de preditor deve ser executada. Em alguns exemplos, essa técnica pode ter uma vantagem de permitir que o codificador de vídeo 20 e o decodificador de vídeo 30 sejam capazes de selecionar entre técnicas que tenham todas as entradas de paleta explicitamente sinalizadas ou técnicas que usem uma paleta de preditor para prever algumas das entradas de paleta. Em alguns exemplos, o valor de indicador pode ser inferido. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir o valor do indicador para cada frente de onda, de modo que o valor inferido indique que a paleta de preditor é redefinida. Alternativamente, ou adicionalmente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir o valor do indicador para o primeiro bloco de uma fatia ou azulejo, de modo que o valor inferido indique que uma paleta de preditor é redefinida no início de cada fatia e/ou azulejo.
[0115] Em outro exemplo, ao invés de sinalizar um indicador para indicar uma redefinição de paleta de preditor, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para redefinir uma paleta de preditor de acordo com uma regra ou conjunto de regras. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser ambos configurados para aplicar a regra ou conjunto de regras. Em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para aplicar a seguinte regra para determinar se deve redefinir uma paleta de preditor; se a paleta no bloco atual não tiver entradas previstas a partir de uma paleta de preditor, a paleta de preditor é redefinida (por exemplo, a paleta de preditor é definida para ter um comprimento zero) para esse bloco atual, de modo que somente a paleta atual pode ser usada como um preditor para os blocos seguintes, porém não as entradas de paleta de blocos anteriores.
[0116] No exemplo acima, o codificador de vídeo 20 pode controlar a redefinição de paleta. Por exemplo, quando a paleta deve ser redefinida, o codificador de vídeo 20 pode simplesmente não usar quaisquer entradas a partir da paleta de preditor. Uma vantagem potencial de implementar esse processo é que nenhum elemento de sintaxe novo é adicionado, e a redefinição de paleta pode ser mais granular e mais flexivelmente controlada. Por exemplo, a flexibilidade/granularidade pode ser obtida devido à capacidade de alterar as condições nas quais a redefinição de paleta de preditor é executada.
[0117] Em alguns exemplos, o codificador de vídeo 20 pode não usar a paleta de preditor pelo menos em um dos seguintes casos: para a primeira LCU em cada linha de LCU, quando a codificação de frente de onda é habilitada; para o primeiro bloco em um azulejo, ou para o primeiro bloco em uma fatia.
[0118] De acordo com aspectos dessa revelação, uma paleta de preditor pode ser reinicializada. Por exemplo, a reinicialização da paleta de preditor pode se referir em geral à substituição de entradas da paleta de preditor com novas entradas. Por exemplo, após codificar um bloco de índices uma paleta de preditor pode incluir um número de entradas para prever uma paleta do próximo bloco a ser codificado. A reinicialização da paleta de preditor pode incluir remover o número de entradas e adicionar novas entradas à paleta de preditor para prever a paleta do próximo bloco a ser codificado.
[0119] Em alguns exemplos, de acordo com aspectos dessa revelação, no início de cada linha de CTB, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar uma paleta de preditor para determinar uma paleta atual de um CTB atual usando entradas de paleta a partir de um primeiro CTB da linha CTB acima do CTB atual, se a linha de CTB atual não for a primeira linha de CTB na imagem/fatia/azulejo. Nesse caso, como descrito em maior detalhe com relação ao exemplo da figura 5 abaixo, após terminar a codificação do primeiro CTB e antes de codificar o segundo CTB em uma linha de CTB acima (com a condição de que o primeiro CTB não seja a primeira linha de CTB na imagem/fatia/azulejo), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar a paleta de preditor para reiniciar a paleta de preditor no início da linha de CTB atual. Se a linha de CTB atual for a primeira na imagem/fatia/azulejo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para definir o número de entradas de paleta de preditor (por exemplo, como descrito em JCTVC-Q0094) e não prever quaisquer entradas de paleta ao determinar a paleta para o CTB atual.
[0120] Em outro exemplo, o conceito de reinicializar uma paleta de preditor pode ser generalizado. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para gerar uma paleta de preditor após codificar N CTBs de uma linha de CTBs acima de um CTB atualmente sendo codificado e antes de iniciar a codificação do N+1° CTB na linha de CTB acima de CTB atualmente sendo codificado (com a condição de que a linha de CTBs não seja a primeira linha de CTB na imagem/fatia/azulejo). O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar a paleta de preditor para determinar a paleta do CTB sendo atualmente codificada usando a paleta de preditor gerada. O CTB sendo atualmente codificado pode ser o primeiro CTB de uma linha de CTB atual (com a condição de que o CTB atual não seja a primeira linha de CTB na imagem/fatia/azulejo). Aqui, N pode estar entre um e o número de CTBs na linha de CTB. Para alinhar de modo conceptual essa técnica de reinicialização de paleta de preditor com codificação de frente de onda, N pode ser selecionado para ser menor ou igual a dois. Desse modo, o mesmo processo de reinicialização de paleta de preditor pode ser usado independente do número de frentes de onda usadas para codificar uma imagem.
[0121] Como observado acima, um CTB pode ser também mencionado como uma LCU. Em alguns exemplos, a reinicialização de paleta de preditor pode ser executada para o primeiro CTB de uma linha de blocos na qual um modo de paleta é usado para prever qualquer bloco do CTB (por exemplo, em instâncias nas quais uma variedade de predição (inter- ou intra-modos) ou modos de paleta pode ser usada para codificar um CTB. Embora os exemplos acima sejam descritos com relação a CTBs para fins de ilustração, deve ser entendido que as técnicas podem ser estendidas para qualquer tipo de bloco de dados de vídeo.
[0122] De acordo com aspectos dessa revelação, o processo de reinicialização de paleta descrito acima pode ser estendido para tabelas de transição de paleta. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar tabelas de transição de paleta no início de uma linha de CTB atual usando as tabelas de transição de paleta geradas após codificar N CTBs (com a condição de que o CTB atual não seja a primeira linha de CTB na imagem/fatia/azulejo). Aqui, N pode estar entre um e o número de CTBs na linha de CTB. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar um valor de N que é menor ou igual a dois.
[0123] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para copiar o tamanho das tabelas de transição além das próprias tabelas de transição de paleta. Realmente, esse processo de reinicializar informações de codificação de paleta (por exemplo, informações de paleta de preditor, informações de tabela de transição de paleta, ou similares) pode ser generalizado para quaisquer outros dados relacionados a paleta que são propagados a partir de uma CU codificada para paleta para a CU codificada para paleta seguinte. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar os dados relacionados à paleta para um CTB atual com base nos dados de paleta gerados após codificar N CTBs e antes de iniciar a codificação de N+i° CTB na linha de CTB acima do CTB atual.
[0124] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar a reinicialização para todos os CTBs aplicáveis (Por exemplo, CTBs inicialmente codificados em uma linha de CTBs). Em outros exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para somente executar as técnicas de reinicialização quando o número de frentes de onda sendo usadas para codificar uma imagem ou azulejo é dois ou mais.
[0125] De acordo com aspectos dessa revelação, quando azulejos e frentes de onda estão sendo usados juntos para codificar uma imagem específica, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para aplicar as técnicas de reinicialização em azulejos como se os azulejos fossem imagens separadas. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para aplicar o processo de reinicialização acima descrito para um primeiro CTB de azulejo se o primeiro CTB de azulejo não for a primeira linha de CTB no azulejo, como descrito em maior detalhe com relação à figura 7 abaixo.
[0126] Outros aspectos dessa revelação se referem a amostras de escapamento de sinalização em exemplos nos quais sinalização de escapamento implícito é usada. Por exemplo, em JCTV-Q0094, para a técnica de escapamento implícito acima descrita, o tamanho da paleta é aumentado em um e o último índice na paleta expandida é atribuído para indicar se uma amostra é codificada como uma amostra de escapamento. Se codificação binária truncada for usada para codificar os índices, o último índice pode usar mais um bit do que índice zero. Similarmente, se outra estratégia de codificação de comprimento variável for usada, a diferença em comprimentos pode ser ainda maior.
[0127] Tipicamente, para certos tamanhos de bloco, pode haver mais amostras que sejam codificadas como amostras de escapamento do que blocos de outros tamanhos. Para alavancar essa relação para melhorar a codificação de índices, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para atribuir o índice zero de uma paleta ao índice usado para indicar uma amostra de escapamento para blocos que são prováveis de ter mais pixels codificados como uma amostra de escapamento. Para os outros blocos que podem ter relativamente menos amostras codificadas como amostras de escapamento, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para seguir o esquema atual de atribuir o índice mais elevado a partir da paleta expandida para indicar uma amostra de escapamento.
[0128] Em um exemplo para fins de ilustração, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para atribuir um índice zero ao índice usado para indicar uma amostra de escapamento para tamanhos de bloco 32x32 e abaixo. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para atribuir o índice mais elevado (Por exemplo, numericamente maior dos índices de paleta) ao índice usado para indicar uma amostra de escapamento para blocos 64x64 e maiores.
[0129] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para implementar a mesma regra de atribuição de índice de Escapamento para cada tamanho de bloco a priori. Em outro exemplo, uma regra de atribuição de índice de Escapamento pode ser sinalizada explicitamente em um conjunto de parâmetros de vídeo (VPS), conjunto de parâmetros de sequência (SPS), conjunto de parâmetros de imagem (PPS), cabeçalho de fatia em um nível de azulejo ou em outro lugar.
[0130] Outros aspectos dessa revelação referem-se a amostras de escapamento de sinalização em exemplos nos quais sinalização de escapamento explícito é usada. No caso de sinalização de escapamento explícito, o modo de Escapamento pode ser sinalizado com um indicador. De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar adaptavelmente ao contexto os indicadores de escapamento com base no tamanho de bloco. Por exemplo, contextos podem ser projetados para codificar os indicadores de escapamento para explorar a relação que, para certos tamanhos de bloco, pode haver mais amostras codificadas usando uma amostra de escapamento relativa a outros tamanhos de bloco. Nesse caso, o contexto para o indicador pode depender do tamanho de bloco. Adicionalmente, em alguns exemplos, um tamanho de paleta pode ter alguma correlação com a quantidade/número de amostras de escapamento a serem sinalizadas na CU. Portanto, o contexto pode depender do tamanho de paleta ou se o tamanho de paleta é igual ao tamanho máximo de paleta (ou não igual ao tamanho máximo de paleta).
[0131] Outros aspectos dessa revelação referem-se a valores de curso de sinalização para cursos de índices codificados usando modo de paleta de Valor. Por exemplo, em documento de submissão de padrão de Guillaume Laroche e outros, “AHG10: Run coding for palette mode,” JCTVC-Q0066, Valencia, ES, 27 de março - 4 de abril de 2014 (JCTVC-Q0066) é proposto que para cada bloco codificado usando uma paleta, um limiar de índice pode ser sinalizado. Se o índice sendo codificado no modo Valor for maior ou igual ao limiar de índice, nenhum curso é sinalizado para o modo Valor. Essa revelação pode se referir a esse método como “Curso limitado.”
[0132] De acordo com aspectos dessa revelação, modificações podem ser feitas no processo descrito em Q0066. Em um primeiro exemplo, os primeiros índices indicados pelo elemento de sintaxe num_skip, um curso é sempre sinalizado. Em alguns exemplos, o elemento de sintaxe num_skip é igual a dois, assim o curso é sempre sinalizado para índices zero e um. O valor indicado pelo elemento de sintaxe num_skip pode ser conhecido por ambos o codificador de vídeo 20 e o decodificador de vídeo 30 a priori (por exemplo, predeterminado nos codificadores de vídeo), ou pode ser sinalizado explicitamente no conjunto de parâmetros de vídeo (VPS), conjunto de parâmetros de sequência (SPS), conjunto de parâmetros de imagem (PPS), cabeçalho de fatia, em um nível de azulejo ou em outro lugar.
[0133] Em um segundo exemplo, se o tamanho de paleta estiver abaixo de um limiar de tamanho de paleta específico, o limiar de índice não é sinalizado e o curso é sinalizado para cada índice. O limiar de tamanho de paleta pode ser conhecido por ambos o codificador de vídeo 20 e o decodificador de vídeo 30 a priori ou pode ser sinalizado explicitamente no conjunto de parâmetros de vídeo (VPS), conjunto de parâmetros de sequência (SPS), conjunto de parâmetros de imagem (PPS), cabeçalho de fatia, em um nível de azulejo ou em outro lugar.
[0134] Em um terceiro exemplo, um indicador pode ser sinalizado para todo bloco onde o tamanho de paleta é maior que o limiar de tamanho de paleta, para indicar se o limiar de índice é sinalizado. O indicador pode ser sinalizado somente para certos tamanhos de bloco e/ou tamanhos de paleta. Se o limiar de índice não for sinalizado, o curso é sinalizado para todos os índices. Em um exemplo alternativo, ao invés de sinalizar um indicador explícito, um limiar de índice de um tamanho de paleta é sinalizado para indicar que o curso é sinalizado para todos os índices.
[0135] Em um quarto exemplo, binarização truncada (por exemplo, codificação binária truncada como descrito no pedido provisional US no. 62/002.054, depositado em 22 de maio de 2014) pode ser usada para codificar o limiar de índice para um bloco se o tamanho da paleta estiver acima do limiar de tamanho de paleta. Se um indicador explícito como no terceiro exemplo acima for sinalizado, o valor máximo para binarização truncada pode ser (tamanho de paleta atual num_skip). Se nenhum indicador explícito estiver sendo enviado, o valor máximo para binarização truncada pode ser (tamanho de paleta atual - num_skip +1).
[0136] Em um quinto exemplo, um valor de curso pode ser codificado após reorganização, reordenação ou remapeamento de índice de paleta. Por exemplo, algumas técnicas de codificação de paleta podem ser usadas para agrupar índices para ter cursos mais longos de índices. Em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para executar uma varredura adaptável de índices ou aplicar uma transformada Burrows Wheeler.
[0137] Em um sexto exemplo, o limiar de índice por ser sinalizado como (tamanho de paleta - limiar de índice) em instâncias nas quais o indicador explícito descrito acima com relação ao terceiro exemplo é sinalizado. Similarmente, o limiar de índice pode ser sinalizado como (tamanho de paleta + 1 - limiar de índice) em instâncias nas quais tal indicador explícito não é sinalizado. Em algumas instâncias, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar o limiar de índice ou (tamanho de paleta - limiar de índice) com base no tamanho de bloco e/ou tamanho de paleta. Em alguns exemplos, uma estratégia similar pode ser usada em instâncias nas quais um indicador explícito não é sinalizado.
[0138] As técnicas dos seis exemplos acima descritos podem ser implementadas pelo codificador de vídeo 20 e o decodificador de vídeo 30 individualmente ou em combinação. Além disso, as técnicas podem ser implementadas seletivamente dependendo do tamanho de bloco e/ou tamanho de paleta. Tal dependência do tamanho de bloco e/ou tamanho de paleta pode ser conhecida por ambos o codificador de vídeo 20 e o decodificador de vídeo 30 a priori, ou pode ser sinalizado explicitamente no conjunto de parâmetros de vídeo (VPS), conjunto de parâmetros de sequência (SPS), conjunto de parâmetros de imagem (PPS), cabeçalho de fatia, em um nível de azulejo ou em outro lugar.
[0139] Em contraste com JCTVC-Q0066, de acordo com aspectos dessa revelação, as técnicas acima descritas podem ser normativas. Por exemplo, isso significa que um fluxo de bits válido (por exemplo, um fluxo de bits que é decodificável por um decodificador se conformando a um padrão específico) não é permitido ter um índice para o qual o curso não é sinalizado como ocorrendo em posições consecutivas e sendo codificado usando modo de Valor. Essa limitação pode ser tratada como uma limitação normativa em um fluxo de bits. Isto é, um fluxo de bits de conformação não conterá quaisquer dois ou mais pixels consecutivos codificados com o modo de Valor tendo valores de índice idênticos para os quais um curso não é sinalizado. Isso permite a aplicação de todas as remoções de redundância descritas no pedido provisional US no. 62/002.054, depositado em 22 de maio de 2014, bem como a remoção dos valores de índice denominados impossíveis descritos em C. Gisquet e outros, “AHG10: Palette index coding,” JCTVC- Q0064, Valencia, ES, 27 de março - 4 de abril de 2014 (JCTVC-Q0064).
[0140] Se o modo de Curso de transição for também usado, a técnica de Curso limitado pode ser estendida para o modo de Curso de transição também. Nesse caso, se o modo for Valor ou Curso de transição e o índice de paleta (para modo de Valor) ou índice de paleta inferida (para modo de Curso de transição) estiver acima do limiar de índice, nenhum curso é sinalizado e a mesma limitação de fluxo de bit normativa pode ser aplicada como descrito acima.
[0141] Outros aspectos dessa revelação referem-se à codificação de um valor de curso que indica um comprimento de curso de um curso de índices de paleta. No exemplo, as técnicas podem ser usadas para codificar um valor de curso de um índice codificado usando modo de Valor.
[0142] Por exemplo, em alguns exemplos, três indicadores codificados em contexto podem ser usados para codificar um valor de curso no modo de Valor. Em tais exemplos, os três indicadores codificados em contexto podem incluir um indicador maior que zero que indica se o valor de curso é maior que zero, um indicador maior que um que indica se o valor de curso é maior que um, e um indicador maior que dois que indica se o valor de curso é maior que dois. Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurado para codificar cada dos três indicadores usando um único contexto.
[0143] Entretanto, usar um único contexto pode exigir que o codificador de vídeo 20 e o decodificador de vídeo 30 atualizem o modelo de probabilidade associado ao contexto após codificação de cada dos indicadores. Além disso, o processo de atualização de probabilidade acima pode introduzir retardo no processo de codificação. Em um exemplo para fins de ilustração, três binários usam o mesmo modelo de contexto (por exemplo, ctx(0)) para determinar um modelo de probabilidade para codificação. O valor do primeiro binário influencia o modelo de probabilidade associado a ctx(0). Por conseguinte, uma atualização de probabilidade é executada antes da codificação do segundo binário com ctx(0). Uma atualização de probabilidade adicional também é executada antes da codificação do terceiro binário com ctx(0). Desse modo, a atualização de probabilidade pode introduzir retardo no ciclo de codificação.
[0144] Além disso, a correlação entre o primeiro binário, segundo binário e terceiro binário de um valor de curso pode ser insuficiente para garantir o tempo e recursos computacionais associados à atualização do modelo de probabilidade. Isto é, um benefício potencial de codificação adaptável a contexto é a capacidade de adaptar um modelo de probabilidade com base em binários anteriormente codificados (que tem o mesmo contexto). Se o valor de um primeiro binário, entretanto, tiver pouca influência sobre o valor de um binário subsequente, pode haver pouco ganho de eficiência associado à atualização de probabilidade. Por conseguinte, binários apresentando uma correlação baixa podem não beneficiar a partir da codificação adaptável de contexto tanto quanto binários tendo correlações relativamente mais elevadas.
[0145] De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar um contexto para codificar um valor de curso com base no índice do valor de curso. Adicionalmente ou alternativamente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar um contexto para codificar um valor de curso com base em um tamanho de bloco de um bloco sendo atualmente codificado, ou um tamanho de paleta de uma paleta para o bloco atualmente sendo codificado. Em alguns exemplos, aspectos dessa revelação incluem usar múltiplos contextos para codificar um valor de curso.
[0146] Em um exemplo, de acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar sete contextos para codificar um valor de curso. Por exemplo, sete contextos podem ser definidos para codificar um indicador que indica que um valor de curso é maior que zero. Esse exemplo é ilustrado na tabela 1 abaixo: Tabela 1 Sete contextos para codificação de curso baseado em índice Embora o exemplo da Tabela 1 ilustre sete contextos, em outros exemplos um número alternativo de contextos pode ser definido com base em um valor de índice do curso sendo codificado. A Tabela 1 pode assumir que o elemento de sintaxe MAX_PLT_SIZE é 32.
[0147] Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar dois contextos para codificar os valores de curso para o modo de Valor com base no valor de índice. Por exemplo, para um índice de modo de Valor 0, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (0) para codificar dados que indicam o valor de curso. Nesse exemplo, para todos os outros índices de Valor, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (1) para codificar dados que indicam o valor de curso.
[0148] Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar dois contextos para codificar os valores de curso no modo de Valor com base no valor de índice. Nesse exemplo, para índices de Valor 0 e 1, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (0) para codificar dados que indicam o valor de curso. Para índices de Valor maiores que 1, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (1) para codificar dados que indicam o valor de curso.
[0149] Ainda em outro exemplo, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para usar três contextos para codificar os valores de curso no modo de Valor com base no valor de índice. Por exemplo, para o índice de valor 0, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (0) para codificar os dados que indicam o curso. Para índices de Valor de 1 e 2, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (1) para codificar os dados que indicam o curso. Para índices de valor maiores que 2, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (2) para codificar os dados que indicam o valor de curso.
[0150] Ainda em outro exemplo, três contextos podem ser usados para codificar os valores de curso no modo de Valor com base no valor de índice. Por exemplo, para índices de Valor 0 e 1, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (0) para codificar dados que indicam o valor de curso. Para índices de Valor na faixa de 2 a 5, inclusive, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (1) para codificar dados que indicam o valor de curso. Para índices de valor maiores que 5, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (2) para codificar dados que indicam o valor de curso.
[0151] Em outro exemplo, quatro contextos podem ser usados para codificar os valores de curso no modo de Valor dependendo (por exemplo, baseado em) no valor de índice. Por exemplo, para o índice de Valor 0, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (0) para codificar dados que indicam o valor de curso. Para índices de valor 1 e 2, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (1) para codificar dados que indicam o valor de curso. Para índices de Valor maiores que 6, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar contexto de curso (3) para codificar dados que indicam o valor de curso podem ser usados. Em algumas instâncias, qualquer combinação das técnicas acima pode ser usada para determinar contexto.
[0152] As técnicas acima descritas podem ser usadas para codificar qualquer combinação de binários de um valor de curso binarizado. Por exemplo, como observado acima, um valor de curso binarizado pode incluir um primeiro binário que indica se o valor de curso é maior que zero, um segundo binário que indica se o valor de curso é maior que um, um terceiro binário que indica se o valor de curso é maior que dois, e quaisquer outros binários necessários para representar o valor de curso. De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar os contextos acima definidos para codificar o primeiro binário do valor de curso binarizado, o segundo binário do valor de curso binarizado, o terceiro binário do valor de curso binarizado ou qualquer combinação dos mesmos. As técnicas também podem ser aplicadas a outras binarizações de um valor de curso.
[0153] De acordo com aspectos dessa revelação, o contexto pode ser baseado em um valor de índice efetivo ou um valor de índice ajustado. Por exemplo, em um exemplo, os contextos de curso podem depender do elemento de sintaxe adjusted_palette_index ao invés da sintaxe palette_index, onde o elemento de sintaxe adjusted_palette_index pode indicar um índice ajustado com base nas seguintes condições: Se (adjusted_palette_index>= adjustedRefIndex) então palette_index = adjusted_palette_index+1 De outro modo, (palette_index = adjusted_palette_index) Como descrito em Wei Pu e outros, “SCCE3; Test B.12 - Binarization of escape sample and palette index,” JCTVC-R0065, Sapporo, JP, 30 de junho - 9 de julho de 2014 (JCTVC-R0065). Isto é, de acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar contexto para codificar um valor de curso com base em um índice de paleta sinalizado em um fluxo de bits (que pode ser associado ao elemento de sintaxe adjusted_palette_index) ao invés do índice de paleta efetivamente usado para codificar uma amostra em um bloco, em instâncias nas quais um índice de paleta ajustado é sinalizado no fluxo de bits.
[0154] Em outro exemplo, se um código binário truncado for usado na codificação do índice, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar os contextos de curso com base nos primeiros ‘k’ bits da sintaxe de índice (Por exemplo, como descrito, por exemplo, na seção 9.3.3.x de JCTVC- R0065). Por exemplo, usando código binário truncado, o elemento de sintaxe para representar um índice de paleta pode usar k bits ou k+1 bits, com base no valor relativo do índice de paleta para a variável u, descrita abaixo (como descrito na seção 9.3.3.x de JCTVC-R0065)): A entrada para esse processo é uma solicitação para uma binarização TB para um elemento de sintaxe com valor synVal, cMax. A saída desse processo é a binarização TB do elemento de sintaxe. Deixe n = cMax + 1, k = floor( log2(n) de modo que 2k < n < 2k+1 e deixe u = 2k+1 -n. Se synVal < u, a série de binário TB é especificada pela representação binária de synVal com comprimento k. De outro modo, a série de binário TB é especificada pela representação binária de synVal + u com comprimento k + 1.
[0155] Nesse exemplo, os contextos de curso dependem somente dos primeiros k bits decodificados. Consequentemente, por exemplo, o decodificador de vídeo 30 não necessita esperar para decodificar o k + 1 bit possível antes de determinar os contextos.
[0156] Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para usar múltiplos contextos com base no valor de índice, o tamanho da paleta de um bloco sendo atualmente codificado, e/ou um tamanho do bloco sendo atualmente codificado. Se o modo de Curso Limitado descrito acima for usado para codificar um bloco, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto com base no valor de índice, o tamanho do bloco, e/ou o limiar de índice acima do qual um curso não é sinalizado.
[0157] Se o modo de Curso de Transição for também usado, essa técnica pode ser estendida para o modo de Curso de transição também. Nesse caso, para o modo de Curso de transição, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar contextos para codificar o curso com base no valor de índice, o tamanho do bloco e/ou o limiar de índice acima do qual um curso não é sinalizado. Nesse caso, conjuntos separados de contextos podem ser usados para cursos correspondendo ao modo de Valor e modo de Curso de transição.
[0158] Outros aspectos dessa revelação referem-se a codificação de cursos de índices de paleta que são codificados usando mais de um modo de paleta. Por exemplo, no modo CopyFromTop descrito em JCTVC-Q0094 não é possível copiar uma amostra codificada como uma amostra de escapamento ou um indicador de escapamento a partir da linha. Um exemplo de duas fileiras de índices é mostrado na Tabela 2 abaixo: Tabela 2 — ÍNDICES DE EXEMPLO Onde os valores numéricos representam índices e ESC representa uma amostra codificada como uma amostra de escapamento. Nesse exemplo, começando a partir da amostra mais a esquerda no exemplo acima, conforme JCTVC-Q0094, o codificador de vídeo 20 pode sinalizar o modo CopyFromTop. O codificador de vídeo 20 pode também sinalizar um valor de curso de três, visto que copiar valores de escapamento ou indicadores não é permitido. Por conseguinte, a amostra codificada como uma amostra de escapamento termina o curso.
[0159] O documento de submissão padrão Jianqing Zhu e outros, “AHG10: Modified copy above mode for palette based coding,” JCTVC-10174, Valencia, ES, 27 de março - 4 de abril 2014 (JCTVC-Q0174) descreve a permissão de copiar valores de escapamento (por exemplo, os valores de pixel efetivos) em um curso. Entretanto, essa técnica requer que os valores associados com as amostras de escapamento sejam idênticos.
[0160] De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar dados indicando mais de um modo de paleta em um curso de índices. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 pode ser configurado para copiar indicadores de escapamento (em sinalização de escapamento explícito) ou um índice de escapamento (em sinalização de escapamento implícita) com outros índices que tem valores de cor associados em uma paleta. Com relação ao exemplo da Tabela 2 acima, o codificador de vídeo 20 pode ser configurado para sinalizar o modo CopyFromTop seguido por dados que indicam um valor de curso de seis. Essa técnica pode obter a vantagem de aumentar o tamanho de cursos, o que pode resultar em compressão de dados aperfeiçoada.
[0161] De acordo com aspectos dessa revelação, durante o curso de índices codificados em relação a índices de outra fileira, se uma amostra do curso tiver uma amostra localizada diretamente acima da amostra que é codificada como uma amostra de escapamento, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que a amostra seja codificada como uma amostra de escapamento. Nesse exemplo, o valor efetivo da amostra pode ser sinalizado após o curso.
[0162] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não usar o modo CopyFromTop para uma amostra se a amostra vizinha acima (por exemplo, a amostra localizada diretamente acima da amostra sendo codificada) for codificada como uma amostra de escapamento. Em instâncias nas quais amostras codificadas como amostras de escapamento são permitidas serem incluídas em um curso associado ao modo de paleta de CopyFromTop (como descrito acima) algumas redundâncias associadas à sinalização do modo de Escapamento podem ser removidas. Em um primeiro exemplo, de acordo com aspectos dessa revelação, se as amostras que seguem um curso de índices tiver uma amostra de vizinho acima que é codificada como uma amostra de escapamento, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não codificar a amostra seguinte como uma amostra de escapamento. Nesse exemplo, a amostra pode não ser codificada como uma amostra de escapamento, porque seria de outro modo incluída no curso CopyFromTop. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para pular a codificação de um indicador de escapamento ou um índice de escapamento, porque o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que a amostra não seja codificada como uma amostra de escapamento.
[0163] Pelos mesmos motivos que o exemplo descrito acima, o codificador de vídeo 20 e o decodificador de vídeo 30 pode ser configurado para não codificar uma amostra usando o modo CopyFromTop após um curso de CopyFromTop. Por conseguinte, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para pular a codificação de um elemento de sintaxe relacionado a modo (por exemplo, um indicador que diferencia os modos de CopyFromTop ou Valor), e o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que a amostra é codificada no modo de Valor.
[0164] Em um segundo exemplo, se a última amostra incluída no curso de CopyFromTop for uma amostra de escapamento e a amostra seguinte for codificada com o modo de Valor, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para ajustar o índice do modo de Valor (bem como o número de índices possíveis máximos que podem ser usados na binarização truncada para codificar o índice Valor) por verificar o valor de índice da amostra vizinha acima para a amostra seguinte. Nesse caso, se o pixel vizinho acima tiver um índice, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir o índice de Valor em um se o valor do índice for maior que o índice acima. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reduzir os índices máximos possíveis em um para codificar o índice. No estágio de reconstrução, o decodificador de vídeo 30 pode verificar o valor de índice decodificado para determinar se o índice é maior ou igual ao índice de vizinho acima, e em caso positivo, aumentar o valor decodificado em um.
[0165] A figura 2 é um diagrama de blocos ilustrando um codificador de vídeo de exemplo 20 que pode implementar as técnicas dessa revelação. A figura 2 é fornecida para fins de explicação e não deve ser considerada limitadora das técnicas como amplamente exemplificadas e descritas nessa revelação. Para fins de explicação, essa revelação descreve o codificador de vídeo 20 no contexto de codificação HEVC. Entretanto, as técnica dessa revelação podem ser aplicáveis a outros padrões ou métodos de codificação.
[0166] O codificador de vídeo 20 representa um exemplo de um dispositivo que pode ser configurado para executar técnicas para codificação de vídeo baseada em paleta de acordo com vários exemplos descritos nessa revelação. Por exemplo, o codificador de vídeo 20 pode ser configurado para seletivamente codificar vários blocos de dados de vídeo, como CUs ou PUs em codificação HEVC, usando codificação baseada em paleta ou codificação não baseada em paleta. Modos de codificação não baseados em paleta podem se referir a vários modos de codificação temporal Inter- preditivos ou modos de codificação espacial intra- preditivos, como os vários modos de codificação especificados por HEVC Minuta 10. O codificador de vídeo 20 em um exemplo, pode ser configurado para gerar uma paleta tendo entradas indicando valores de pixel, selecionar valores de pixel em uma paleta para representar valores de pixels de pelo menos alguns locais de pixel em um bloco de dados de vídeo, e sinalizar informações associando pelo menos alguns dos locais de pixel no bloco de dados de vídeo com entradas na paleta correspondendo, respectivamente, aos valores de pixel selecionados na paleta. As informações sinalizadas podem ser usadas pelo decodificador de vídeo 30 para decodificar dados de vídeo.
[0167] No exemplo da figura 2, o codificador de vídeo 20 inclui uma unidade de processamento de predição 100, memória de dados de vídeo 101, uma unidade de geração residual 102, uma unidade de processamento de transformada 104, uma unidade de quantização 106, uma unidade de quantização inversa 108, uma unidade de processamento de transformada inversa 110, uma unidade de reconstrução 112, uma unidade de filtro 114, um buffer de imagem decodificada 116, e uma unidade de codificação por entropia 118. A unidade de processamento de predição 100 inclui uma unidade de processamento inter-predição 120 e uma unidade de processamento intra-predição 126. A unidade de processamento inter-predição 120 inclui uma unidade de estimação de movimento e uma unidade de compensação de movimento (não mostrada). O codificador de vídeo 20 também inclui uma unidade de codificação baseada em paleta 122 configurada para executar vários aspectos das técnicas de codificação baseada em paleta descritas nessa revelação. Em outros exemplos, o codificador de vídeo 20 pode incluir mais, menos ou componentes funcionais diferentes.
[0168] Memória de dados de vídeo 101 pode armazenar dados de vídeo a serem codificados pelos componentes do codificador de vídeo 20. Os dados de vídeo armazenados na memória de dados de vídeo 101 podem ser obtidos, por exemplo, a partir da fonte de vídeo 18. O buffer de quadro decodificado 116 pode ser uma memória de quadro de referência que armazena dados de vídeo de referência para uso na codificação de dados de vídeo por codificador de vídeo 20, por exemplo, em modos intra- ou inter-codificação. A memória de dados de vídeo 101 e o buffer de quadro decodificado 116 podem ser formados por qualquer de uma variedade de dispositivos de memória, como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 101 e buffer de quadro decodificado 116 podem ser fornecidos pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 101 pode estar no chip com outros componentes de codificador de vídeo 20, ou fora de chip em relação àqueles componentes.
[0169] 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 das CTUs pode ser associada a blocos de árvore de codificação de luma de tamanho igual (CTBs) e CTBs correspondentes da imagem. Como parte de codificar uma CTU, a unidade de processamento de predição 100 pode executar divisão de quad-tree para dividir as CTBs da CTU em blocos progressivamente menores. O bloco menor pode ser blocos de codificação de CUs. Por exemplo, a unidade de processamento de predição 100 pode dividir um CTB associado a uma CTU em quatro sub-blocos de tamanho igual, dividir um ou mais dos sub-blocos em quatro sub-sub-blocos de tamanho igual, e etc.
[0170] O codificador de vídeo 20 pode codificar CUs de uma CTU para gerar representações codificadas das CUs (isto é, CUs codificadas). Como parte de codificar uma CU, a unidade de processamento de predição 100 pode dividir os blocos de codificação associados a CU entre uma ou mais PUs da CU. Desse modo, cada PU pode ser associada a um bloco de predição de luma e blocos de predição de croma correspondentes. O codificador de vídeo 20 e decodificador de vídeo 30 podem suportar PUs tendo vários tamanhos. Como indicado acima, o tamanho de uma CU pode se referir ao tamanho do bloco de codificação de luma da CU e o tamanho de uma PU pode se referir o tamanho de um bloco de predição de luma da PU. Assumindo que o tamanho de uma CU específica é 2Nx2N, o codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar tamanhos de PU de 2Nx2N ou NxN, para inter-predição e tamanhos de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN ou similares para inter predição. O codificador de vídeo 20 e decodificador de vídeo 30 podem também suportar divisão assimétrica para tamanhos de PU de 2NxnU, 2NxnD, nLx2N e nRx2N para inter predição.
[0171] A unidade de processamento inter- predição 120 pode gerar dados preditivos para uma PU por executar inter predição em cada PU de uma CU. Os dados preditivos para a PU podem incluir um ou mais blocos de amostra preditiva da PU e informações de movimento para a PU. A unidade inter-predição 121 pode executar operações diferentes para uma CU de uma CU dependendo de se a PU está em uma fatia I, uma fatia P, ou uma fatia B. Em uma fatia I, todas as PUs são intra preditas. Consequentemente, se a PU estiver em uma fatia I, a unidade inter-predição 121 não executa inter predição na PU. Desse modo, para blocos codificados no modo-I, o bloco preditivo é formado usando predição espacial a partir de blocos vizinhos codificados anteriormente no mesmo quadro.
[0172] Se uma PU estiver em uma fatia P, a unidade de estimação de movimento de unidade de processamento inter-predição 120 pode buscar as imagens de referência em uma lista de imagens de referência (por exemplo, “RefPicList0”) para uma região de referência para a PU. A região de referência para a PU pode ser uma região, em uma imagem de referência, que contém blocos de amostra que mais estreitamente correspondem com os 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 contendo a região de referência para a PU. Além disso, 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 fornece um deslocamento a partir das coordenadas na imagem decodificada atual para 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 de unidade de processamento inter-predição 120 pode gerar os blocos de amostra preditivos da PU com base em amostras efetivas ou interpoladas na localização de referência indicada pelo vetor de movimento da PU.
[0173] Se uma PU estiver em uma fatia B, a unidade de estimação de movimento pode executar uni- predição ou bi-predição para a PU. Para executar uni- predição para a PU, a unidade de estimação de movimento pode buscar as imagens de referência de RefPicList0 ou uma segunda lista de imagem de referência (“RefPicList’”) para uma região de referência para a PU. A unidade de estimação de movimento pode transmitir, como a informação de movimento da PU, um índice de referência que indica uma posição e 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 indicam se a imagem de referência está em RefPicList0 ou RefPicList1. A unidade de compensação de movimento da unidade de processamento inter-predição 120 pode gerar os blocos de amostra preditivos da PU com base pelo menos em parte em amostras efetivas ou interpoladas na região de referência indicada pelo vetor de movimento da PU.
[0174] Para executar inter predição bidirecional para uma PU, a unidade de estimação de movimento pode buscar as imagens de referência em RefPicList0 para uma região de referência para a PU e também pode buscar as imagens de referência em RefPicList1 para outra região de referência para a PU. A unidade de estimação de movimento pode gerar índices de imagem de referência que indicam posições em RefPicList0 e RefPicList1 das imagens de referência que contêm as regiões de referência. Além disso, 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. A informação de movimento da PU pode 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 efetivas ou interpoladas na região de referência indicada pelo vetor de movimento da PU.
[0175] De acordo com vários exemplos dessa revelação, o codificador de vídeo 20 pode ser configurado para executar codificação baseada em paleta. Com relação à estrutura de HEVC, como exemplo, as técnicas de codificação baseadas em paleta podem ser configuradas para serem usadas como um modo de unidade de codificação (CU). Em outros exemplos, as técnicas de codificação baseadas em paleta podem ser configuradas para serem usadas como um modo PU na estrutura de HEVC. Por conseguinte, todos os processos revelados descritos aqui (em toda essa revelação) no contexto de um modo CU podem, adicionalmente ou alternativamente, aplicar-se a um modo PU. Entretanto, esses exemplos baseados em HEVC não devem ser considerados uma limitação ou restrição das técnicas de codificação baseada em paleta descritas aqui, visto que tais técnicas podem ser aplicadas para trabalhar independentemente ou como parte de outros padrões/sistemas existentes ou ainda a serem desenvolvidos. Nesses casos, a unidade para codificação de paleta podem ser blocos quadrados, blocos retangulares ou mesmo regiões de formato não retangular.
[0176] A unidade de codificação baseada em paleta 122, por exemplo, pode executar decodificação baseada em paleta quando um modo de codificação baseada em paleta é selecionado, por exemplo, para uma CU ou PU. Por exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para gerar uma paleta tendo entradas indicando 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 associando pelo menos algumas das posições do bloco de dados de vídeo com entradas na paleta correspondendo, respectivamente, aos valores de pixel selecionados. Embora várias funções sejam descritas como sendo realizadas por unidade de codificação baseada em paleta 122, algumas ou todas essas funções podem ser realizadas por outras unidades de processamento, ou uma combinação de unidades de processamento diferentes.
[0177] De acordo com aspectos dessa revelação, a unidade de codificação baseada em paleta 122 pode ser configurada para executar qualquer combinação das técnicas para codificação de paleta descrita aqui. Por exemplo, como descrito com relação às figuras 4-7 abaixo, de acordo com aspectos dessa revelação, a unidade de codificação baseada em paleta 122 pode ser configurada para reinicializar uma paleta de preditor para construir uma paleta para um bloco de dados de vídeo com base em um ou mais blocos de outra linha. Por exemplo, como descrito aqui, a unidade de codificação baseada em paleta 122 pode determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizado em uma primeira fileira de blocos. A unidade de codificação baseada em paleta 122 pode também gerar uma paleta de preditor ao codificar um ou mais outros blocos na primeira fileira. Após codificar um bloco em uma segunda fileira, a unidade de codificação baseada em paleta 122 pode reinicializar a paleta de preditor para determinar uma paleta do bloco na segunda fileira com base nas entradas da primeira paleta.
[0178] Em outro exemplo, a unidade de codificação baseada em paleta 122 pode ser configurada para codificar um curso de índices que inclui amostras codificadas usando mais de um modo de paleta. Por exemplo, a unidade de codificação baseada em paleta 122 pode determinar índices de paleta de uma primeira fileira de um bloco de dados de vídeo, onde na paleta índices incluem um ou mais índices que são associados a um valor de cor na paleta e um elemento de sintaxe que não é associado a um valor de cor na paleta. A unidade de codificação baseada em paleta 122 pode também codificar um curso de índices de paleta de uma segunda fileira do bloco de dados de vídeo em relação aos índices de paleta da primeira fileira, onde o curso inclui um ou mais índices que são associados a um valor de cor na paleta e o elemento de sintaxe que não é associado a um valor de cor na paleta.
[0179] A unidade de processamento intra- predição 126 pode gerar dados preditivos para uma PU por executar intra predição na PU. Os dados preditivos para a PU podem incluir blocos de amostra preditivos para a PU e vários elementos de sintaxe. Unidades de processamento intra-predição 126 podem executar intra predição em PUs em fatias I, fatias P e fatias B.
[0180] Para executar intra predição em uma PU, a unidade de processamento intra-predição 126 pode usar múltiplos modos intra predição para gerar múltiplos conjuntos de dados preditivos para a PU. A unidade de processamento intra-predição 126 pode usar amostras a partir de blocos de amostra de PUs vizinhas para gerar um bloco preditivo para a PU. As PUs vizinhas podem estar acima, acima e à direita, acima e à esquerda, ou à esquerda da PU, assumindo uma ordem de codificação esquerda para direita, superior para inferior para PUs, CUs e CTUs. A unidade de processamento intra-predição 126 pode usar vários números de modos intra predição, por exemplo, 33 modos intra predição direcionais. Em alguns exemplos, o número de modos intra predição pode depender do tamanho da região associada a PU.
[0181] A unidade de processamento de predição 100 pode selecionar os dados preditivos para PUs de uma CU a partir entre os dados preditivos gerados pela unidade de processamento inter-predição 120 para as PUs ou os dados preditivos gerados pela unidade de processamento intra- predição 126 para as PUs. Em alguns exemplos, a unidade de processamento de predição 100 seleciona os dados preditivos para as PUs da CU com base em métrica de distorção/taxa dos conjuntos de dados preditivos. Os blocos preditivos dos dados preditivos selecionados podem ser mencionados aqui como os blocos de amostra preditivos selecionados.
[0182] A unidade de geração residual 102 pode gerar, com base nos blocos de codificação luma, Cb e Cr de uma CU e os blocos preditivos selecionados de luma, Cb e Cr das PUs da CU, blocos residuais (de luma, Cb e Cr) da CU. Por exemplo, a unidade de geração residual 102 pode gerar os blocos residuais da CU de modo que cada amostra nos blocos residuais tenha um valor igual a uma diferença entre uma amostra em um bloco de codificação da CU e uma amostra correspondente em um bloco de amostra preditivo selecionado correspondente de uma PU da CU.
[0183] A unidade de processamento de transformada 104 pode executar divisão quad-tree para dividir os blocos residuais associados a uma CU em blocos de transformada associados a TUs da CU. Desse modo, uma TU pode ser associada a um bloco de transformada de luma e dois blocos de transformada de croma. Os tamanhos e posições dos blocos de transformada de luma e croma de TUs de uma CU podem ou não ser baseados nos tamanhos e posições dos blocos de predição das PUs da CU. Uma estrutura quadtree conhecida como uma “quad-tree residual” (RQT) pode incluir nós associados a cada das regiões. As TUs de uma CU podem corresponder a nós de folha da RQT.
[0184] A unidade de processamento de transformada 104 pode gerar blocos de coeficiente de transformada para cada TU de uma CU por aplicar uma ou mais transformadas aos blocos de transformada da TU. A unidade de processamento de transformada 104 pode aplicar várias transformadas a um bloco de transformada associado a uma TU. Por exemplo, a unidade de processamento de transformada 104 pode aplicar uma transformada de cosseno discreta (DCT), uma transformada direcional, ou uma transformada conceptualmente similar a um bloco de transformada. Em alguns exemplos, a unidade de processamento de transformada 104 não aplica transformadas em um bloco de transformada. Em tais exemplos, o bloco de transformada pode ser tratado com um bloco de coeficiente de transformada.
[0185] A unidade de quantização 106 pode quantizar os coeficientes de transformada em um bloco de coeficiente. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes de transformada. Por exemplo, um coeficiente de transformada de bit-n pode ser arredondado para um coeficiente de transformada de bit-m durante quantização, onde n é maior que m. A unidade de quantização 106 pode quantizar um bloco de coeficiente associado a uma TU de uma CU com base em um valor de parâmetro de quantização (QP) associado a CU. O codificador de vídeo 20 pode ajustar o grau de quantização aplicado aos blocos de coeficiente associados a uma CU por ajustar o valor QP associado a CU. A quantização pode introduzir perda de informação, desse modo coeficientes de transformada quantizada podem ter precisão mais baixa que os originais.
[0186] A unidade de quantização inversa 108 e a unidade de processamento de transformada inversa 110 podem aplicar transformadas inversas e quantização inversa em um bloco de coeficiente, respectivamente, para reconstruir um bloco residual a partir do bloco de coeficiente. A unidade de reconstrução 112 pode adicionar o bloco residual reconstruído a amostras correspondentes a partir de um ou mais blocos de amostra preditivos gerados pela unidade de processamento de predição 100 para produzir um bloco de transformada reconstruído associado a uma TU. Por reconstruir blocos de transformada para cada TU de uma CU dessem odo, o codificador de vídeo 20 pode reconstruir os blocos de codificação da CU.
[0187] A unidade de filtro 114 pode executar uma ou mais operações de desbloqueio para reduzir artefatos de bloqueio nos blocos de codificação associados a uma CU. O buffer de imagem decodificada 116 pode armazenar os blocos de codificação reconstruídos após a unidade de filtro 114 executar uma ou mais operações de desbloqueio nos blocos de codificação reconstruídos. A unidade de processamento inter-predição 120 pode usar uma imagem de referência que contém os blocos de codificação reconstruídos para executar inter predição em PUs de outras imagens. Além disso, a unidade de processamento intra- predição 126 pode usar blocos de codificação reconstruídos em buffer de imagem decodificada 116 para executar intra predição nas outras PUs na mesma imagem que a CU.
[0188] A unidade de codificação por entropia 118 pode receber dados a partir de outros componentes funcionais do codificador de vídeo 20. Por exemplo, a unidade de codificação por entropia 118 pode receber blocos de coeficiente a partir da unidade de quantização 106 e pode receber elementos de sintaxe a partir da unidade de processamento de predição 100. A unidade de codificação por entropia 118 pode executar uma ou mais operações de codificação por entropia nos dados para gerar dados codificados por entropia. Por exemplo, a unidade de codificação por entropia 118 pode executar uma operação de codificação de comprimento variável adaptável ao contexto (CAVLC), uma operação CABAC, uma operação de codificação de comprimento variável a variável (V2V), uma operação de codificação aritmética binária adaptável ao contexto baseado em sintaxe (SBAC), uma operação de codificação de Entropia de divisão de intervalo de probabilidade (PIPE), uma operação de codificação Golomb-exponencial, ou outro tipo de operação de codificação por entropia sobre os dados.
[0189] Para executar CABAC, a unidade de codificação por entropia 118 pode selecionar um modelo de contexto para aplicar a um certo contexto para codificar símbolos a serem transmitidos. De acordo com aspectos dessa revelação, a unidade de codificação por entropia 118 pode ser configurada para usar contexto com base no valor de índice do valor de curso sendo codificado. Por exemplo, a unidade de codificação por entropia 118 pode ser configurada para determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo. A unidade de codificação por entropia 118 pode ser configurada para determinar um contexto para codificação adaptável em contexto de dados que representam o valor de curso com base no valor de índice de paleta.
[0190] 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 um RQT para uma CU.
[0191] A figura 3 é um diagrama de blocos ilustrando um decodificador de vídeo de exemplo 30 que é configurado para implementar as técnicas dessa revelação. A figura 3 é fornecida para fins de explicação e não é limitadora das técnicas como amplamente exemplificado e descrito nessa revelação. Para fins de explicação, essa revelação descreve decodificador de vídeo 30 no contexto de codificação HEVC. Entretanto, as técnicas dessa revelação podem ser aplicáveis a outros padrões ou métodos de codificação.
[0192] O codificador de vídeo 30 representa um exemplo de um dispositivo que pode ser configurado para executar técnicas para codificação de vídeo baseado em paleta de acordo com vários exemplos descritos nessa revelação. Por exemplo, o codificador de vídeo 30 pode ser configurado para seletivamente decodificar vários blocos de dados de vídeo, como CUs ou PUs em codificação de HEVC, usando codificação baseada em paleta ou codificação não baseada em paleta. Modos de codificação não baseada em paleta podem se referir a vários modos de codificação temporal inter-preditivos ou modos de codificação espacial intra-preditivos, como os vários modos de codificação especificados por HEVC Minuta 10. O decodificador de vídeo 30, em um exemplo, pode ser configurado para gerar uma paleta tendo entradas indicando valores de pixel, receber informações que associam pelo menos alguns locais de pixel em 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 na paleta.
[0193] No exemplo da figura 3, o decodificador de vídeo 30 inclui uma unidade de decodificação por entropia 150, uma memória de dados de vídeo 151, uma unidade de processamento de predição 152, uma unidade de quantização inversa 154, uma unidade de processamento de transformada inversa 156, uma unidade de reconstrução 158, uma unidade de filtro 160 e um buffer de imagem decodificada 162. A unidade de processamento de predição 152 inclui uma unidade de compensação de movimento 164 e uma unidade de processamento de intra-predição 166. O decodificador de vídeo 30 também inclui uma unidade de decodificação baseada em paleta 165 configurada para executar vários aspectos das técnicas de codificação baseadas em paleta descritas nessa revelação. Em outros exemplos, o decodificador de vídeo 30 pode incluir mais, menos ou componentes funcionais diferentes.
[0194] Memória de dados de vídeo 151 pode armazenar dados de vídeo, como um fluxo de bits de vídeo codificado a serem codificados pelos componentes do decodificador de vídeo 30. Os dados de vídeo armazenados na memória de dados de vídeo 151 podem ser obtidos, por exemplo, a partir da mídia legível em computador 16, por exemplo, a partir de uma fonte de vídeo local, como uma câmera, através de comunicação de rede cabeada ou sem fio de dados de vídeo, ou por acessar mídia de armazenagem de dados físicos. A memória de dados de vídeo 151 pode formar um buffer de imagem codificada (CPB) que armazena dados de vídeo codificados a partir de um fluxo de bits de vídeo codificado. O buffer de quadro decodificado 162 pode ser uma memória de quadro de referência que armazena dados de vídeo de referência para uso na decodificação de dados de vídeo por decodificador de vídeo 30, por exemplo, em modos intra- ou inter-codificação. A memória de dados de vídeo 151 e buffer de quadro decodificado 162 podem ser formados por qualquer de uma variedade de dispositivos de memória, como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 151 e buffer de quadro decodificado 162 podem ser fornecidos pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 151 pode estar no chip com outros componentes de decodificador de vídeo 30, ou fora de chip em relação àqueles componentes.
[0195] Um buffer de imagem codificada (CPB) pode receber e armazenar dados de vídeo codificados (por exemplo, unidades NAL) de um fluxo de bits. A unidade de decodificação por entropia 150 pode receber dados de vídeo codificados (por exemplo, unidades NAL) a partir de CPB e analisar as unidades NAL para decodificar elementos de sintaxe. A unidade de decodificação por entropia 150 pode decodificar por entropia elementos de sintaxe codificados por entropia nas unidades NAL.
[0196] De acordo com aspectos dessa revelação, a unidade de decodificação por entropia 150 pode ser configurada para usar contexto baseado no valor de índice do valor de curso sendo codificado. Por exemplo, a unidade de decodificação por entropia 150 pode ser configurada para determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo. A unidade de decodificação por entropia 150 pode ser configurada para determinar uma codificação adaptável contexto de dados que representa o valor de curso com base no valor de índice de paleta.
[0197] A unidade de processamento de predição 152, unidade de quantização inversa 154, unidade de processamento de transformada inversa 156, unidade de reconstrução 158, e unidade de filtro 160 podem gerar dados de vídeo decodificados com base nos elementos de sintaxe extraídos a partir do fluxo de bit.
[0198] As unidades NAL do fluxo de bit podem incluir unidades NAL de fatia codificada. Como parte de decodificação do fluxo de bits, a unidade de decodificação por entropia 150 pode extrair os elementos de sintaxe de decodificação por entropia a partir das unidades NAL de fatia codificada. Cada das fatias codificadas pode incluir um cabeçalho de fatia e dados de fatia. O cabeçalho de fatia pode conter elementos de sintaxe pertinentes 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.
[0199] Além de decodificar os elementos de sintaxe a partir do fluxo de bits, o decodificador de vídeo 30 pode executar uma operação de reconstrução em uma CU não dividida. Para executar a operação de reconstrução em uma CU não dividida, o decodificador de vídeo 30 pode executar uma operação de reconstrução em cada TU da CU. Por executar a operação de reconstrução para cada TU da CU, o decodificador de vídeo 30 pode reconstruir blocos residuais da CU.
[0200] Como parte de executar uma operação de reconstrução em uma TU de uma CU, a unidade de quantização inversa 154 pode quantizar inverso, isto é, desquantizar, blocos de coeficiente associados a TU. A unidade de quantização inversa 154 pode usar um valor QP associado a CU da TU para determinar um grau de quantização e, de modo semelhante, um grau de quantização inversa para unidade de quantização inversa 154 aplicar. Isto é, a razão de compressão, isto é, a razão do número de bits usados para representar a sequência original e a comprimida, pode ser controlada por ajustar o valor do QP usado ao quantizar coeficientes de transformada. A razão de compressão pode depender também do método de codificação por entropia empregado.
[0201] Após a unidade de quantização inversa 154 quantizar inverso um bloco de coeficiente, a unidade de processamento de transformada inversa 156 pode aplicar uma ou mais transformadas inversas ao bloco de coeficiente para gerar um bloco residual associado à TU. Por exemplo, a unidade de processamento de transformada inversa 156 pode aplicar um DCT inverso, uma transformada de número inteiro inversa, uma transformada Karhunen-Loeve inversa (KLT), uma transformada rotacional inversa, uma transformada direcional inversa, ou outra transformada inversa ao bloco de coeficiente.
[0202] Se uma PU for codificada usando intra predição, a unidade de processamento intra-predição 166 pode executar intra predição para gerar blocos preditivos para a PU. A unidade de processamento intra-predição 166 pode usar um modo intra predição para gerar os blocos luma, Cb e Cr preditivos para a PU com base nos blocos de predição de PUs espacialmente vizinhas. A unidade de processamento intra-predição 166 pode determinar o modo intra predição para a PU com base em um ou mais elementos de sintaxe decodificados a partir do fluxo de bits.
[0203] A unidade de processamento de predição 152 pode construir uma primeira lista de imagem de referência (RefPicList0) e uma segunda lista de imagem de referência (RefPicList1) com base em elementos de sintaxe extraídos a partir do fluxo de bits. Além disso, se uma PU for codificada usando 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 em um ou mais blocos de referência para a PU, blocos preditivos luma, Cb e Cr para a PU.
[0204] A unidade de reconstrução 158 pode usar os blocos de transformada luma, Cb e Cr associados a TUs de uma CU e os blocos preditivos luma, Cb e Cr das PUs da CU, isto é, dados intra-predição ou dados inter-predição, como aplicáveis, para reconstruir os blocos de codificação de luma, Cb e Cr da CU. Por exemplo, a unidade de reconstrução 158 pode adicionar amostras dos blocos de transformada luma, Cb e Cr a amostras correspondentes dos blocos luma, Cb e Cr preditivos para reconstruir os blocos de codificação (por exemplo, blocos de codificação de luma, Cb e Cr) da CU.
[0205] A unidade de filtro 160 pode executar uma operação de desbloqueio para reduzir artefatos de bloqueio associados aos blocos de codificação luma, Cb e Cr da CU. O decodificador de vídeo 30 pode armazenar os blocos de codificação luma, Cb e Cr da CU no buffer de imagem decodificada 162. O buffer de imagem decodificada 162 pode fornecer imagens de referência para compensação de movimento subsequente, intra predição e apresentação e um dispositivo de exibição, como dispositivo de exibição 32 da figura 1. Por exemplo, o decodificador de vídeo 30 pode executar, com base nos blocos luma, Cb e Cr no buffer de imagem decodificada 162, operações de intra predição ou inter predição em PUs de outras CUs.
[0206] Como observado acima, o decodificador de vídeo 30 pode ser configurado para executar codificação baseada em paleta. A unidade de decodificação baseada em paleta 165, por exemplo, pode executar decodificação baseada em paleta quando um modo de decodificação baseada em paleta é selecionado, por exemplo, para uma CU ou PU. Por exemplo, a unidade de decodificação baseada em paleta 165 pode ser configurada para gerar uma paleta tendo entradas indicando valores de pixel, receber informações associando pelo menos algumas posições de um bloco de dados de vídeo com entradas na paleta, selecionar valores de pixel na paleta baseada nas informações e reconstruir valores de pixel do bloco com base nos valores de pixel selecionados na paleta. Embora várias funções sejam descritas como sendo executadas por unidade de decodificação baseada em paleta 165, algumas ou todas essas funções podem ser realizadas por outras unidades de processamento ou uma combinação de unidades de processamento diferentes.
[0207] A unidade de decodificação baseada em paleta 165 pode receber informações de modo de codificação de paleta, e executar as operações acima quando a informação de modo de codificação de paleta indica que o modo de codificação de paleta se aplica ao bloco. Quando as informações de modo de codificação de paleta indicam que o modo de codificação de paleta não se aplica ao bloco, ou quando outras informações de modo indicam o uso de um modo diferente, a unidade de decodificação baseada em paleta 165 decodifica o bloco de dados de vídeo usando um modo de codificação não baseada em paleta, por exemplo, tal modo de codificação inter-preditiva ou intra-preditiva de 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.
[0208] De acordo com aspectos dessa revelação, a unidade de decodificação baseada em paleta 165 pode ser configurada para executar qualquer combinação das técnicas para codificação de paleta descrita aqui. Por exemplo, como descrito com relação às figuras 4-7 abaixo, de acordo com aspectos dessa revelação, a unidade de decodificação baseada em paleta 165 pode ser configurada para reinicializar uma paleta de preditor para construir uma paleta para um bloco de dados de vídeo com base em um ou mais blocos de outra linha. Por exemplo, como descrito aqui, a unidade de decodificação baseada em paleta 165 pode determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizada em uma primeira fileira de blocos. A unidade de decodificação baseada em paleta 165 pode gerar também uma paleta de preditor ao decodificar um ou mais outros blocos na primeira fileira. Após codificar um bloco em uma segunda fileira, a unidade de decodificação baseada em paleta 165 pode reinicializar a paleta de preditor para determinar uma paleta do bloco na segunda fileira com base nas entradas da primeira paleta.
[0209] Em outro exemplo, como descrito com relação à figura 8, abaixo, a unidade de decodificação baseada em paleta 165 pode ser configurada para decodificar um curso de índices que inclui amostras codificadas usando mais de um modo de paleta. Por exemplo, a unidade de decodificação baseada em paleta 165 pode determinar índices de paleta de uma primeira fileira de um bloco de dados de vídeo, onde os índices de paleta incluem um ou mais índices que são associados a um valor de cor na paleta e um elemento de sintaxe que não é associado a um valor de cor na paleta. A unidade de decodificação baseada em paleta 165 pode também decodificar um curso de índices de paleta de uma segunda fileira do bloco de dados de vídeo em relação aos índices de paleta da primeira fileira, onde o curso inclui um ou mais índices que são associados a um valor de cor na paleta e o elemento de sintaxe que não é associado a um valor de cor na paleta.
[0210] A figura 4 é um diagrama conceptual ilustrando um exemplo de determinar uma paleta para codificar dados de vídeo, compatível com técnicas dessa revelação. O exemplo da figura 4 inclui uma imagem 178 tendo uma primeira unidade de codificação (CU) 180 que é associada às primeiras paletas 184 e uma segunda CU 188 que é associada a segundas paletas 192. Como descrito em maior detalhe abaixo e de acordo com as técnicas dessa revelação, as segundas paletas 192 são baseadas nas primeiras paletas 184. A imagem 178 também inclui bloco 196 codificado com um modo de codificação de intra-predição e bloco 200 que é codificado com um modo de codificação inter-predição.
[0211] As técnicas da figura 4 são descritas no contexto do codificador de vídeo 20 (figura 1 e figura 2) e decodificador de vídeo 30 (figura 1 e figura 3) e com relação ao padrão de codificação de vídeo HEVC para fins de explicação. Entretanto, deve ser entendido que as técnicas dessa revelação não são limitadas desse modo, e podem ser aplicadas por outros processadores e/ou dispositivos de codificação de vídeo em outros processos e/ou padrões de codificação de vídeo.
[0212] Em geral, uma paleta se refere a um número de valores de pixel que são dominantes e/ou representativos para uma CU atualmente sendo codificada, CU 188 no exemplo da figura 4. As primeiras paletas 184 e as segundas paletas 192 são mostradas como incluindo múltiplas paletas. Em alguns exemplos, de acordo com aspectos dessa revelação, um codificador de vídeo (como codificador de vídeo 20 ou decodificador de vídeo 30) pode codificar paletas separadamente para cada componente de cor de uma CU. Por exemplo, o codificador de vídeo 20 pode codificar uma paleta para um componente 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. Nesse exemplo, entradas da paleta Y podem representar valores Y de pixels da CU, entradas da paleta U podem representar valores U de pixels da CU, e entradas da paleta V podem representar valores V de pixels da CU.
[0213] Em outros exemplos, o codificador de vídeo 20 pode codificar uma única paleta para todos os componentes de cor de uma CU. Nesse exemplo, o codificador de vídeo 20 pode codificar uma paleta tendo uma ia entrada que é um valor triplo, incluindo Yi, Ui e Vi. Nesse caso, a paleta inclui valores para cada dos componentes dos pixels. Por conseguinte, a representação de paletas 184 e 192 como um conjunto de paletas tendo múltiplas paletas individuais é meramente um exemplo e não pretende ser limitadora.
[0214] No exemplo da figura 4, primeiras paletas 184 incluem três entradas 202-206 tendo valor de índice de entrada 1, valor de índice de entrada 2 e valor de índice de entrada 3, respectivamente. Entradas 202-206 relacionam os valores de índice aos valores de pixel incluindo valor de pixel A, valor de pixel B, e valor de pixel C, respectivamente. Como descrito aqui, ao invés de codificar os valores de pixel efetivos da primeira CU 180, um codificador de vídeo (como codificador de vídeo 20 ou decodificador de vídeo 30) pode usar codificação baseada em paleta para codificar os pixels do bloco usando os índices 1-3. Isto é, para cada posição de pixel da primeira CU 180, o codificador de vídeo 20 pode codificar um valor de índice para o pixel, onde o valor de índice é associado 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 a partir de um fluxo de bits e reconstruir os valores de pixel usando os valores de índice e uma ou mais das primeiras paletas 184. Desse modo, as primeiras paletas 184 são transmitidas pelo codificador de vídeo 20 em um fluxo de bits de dados de vídeo codificados para uso pelo decodificador de vídeo 30 em decodificação baseada em paleta.
[0215] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar segundas paletas 192 com base nas primeiras paletas 184. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem localizar um ou mais blocos dos quais as paletas preditivas, nesse exemplo, primeiras paletas 184, são determinadas. A combinação de entradas sendo usadas para fins de predição pode ser mencionada como uma paleta de preditor.
[0216] No exemplo da figura 4, segundas paletas 192 incluem três entradas 208-212 tendo valor de índice de entrada 1, valor de índice de entrada 2, e valor de índice de entrada 3, respectivamente. As entradas 208212 relacionam os valores de índice a valores de pixel incluindo valor de pixel A, valor de pixel B, e valor de pixel D, respectivamente. Nesse exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe indicando quais entradas das primeiras paletas 184 (representando uma paleta de preditor, embora a paleta de preditor possa incluir entradas de um número de blocos) são incluídas nas segundas paletas 192.
[0217] No exemplo da figura 4, um ou mais elementos de sintaxe são ilustrados como um vetor 216. O vetor 216 tem um número de binários associados (ou bits), com cada binário indicando se a paleta de preditor associada àquele binário é usada para prever uma entrada da paleta atual. Por exemplo, o vetor 216 indica que as duas primeiras entradas das primeiras paletas 184 (202 e 204) são incluídas nas segundas paletas 192 (um valor de “1” no vetor 216), enquanto a terceira entrada das primeiras paletas 184 não é incluída nas segundas paletas 192 (um valor de “0” no vetor 216). No exemplo da figura 4, o vetor é um vetor booleano. O vetor pode ser mencionado como um vetor de predição de paleta.
[0218] Em alguns exemplos, como observado acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar uma paleta de preditor (que também pode ser mencionada como uma tabela de paleta de preditor ou lista de paleta de preditor) ao executar predição de paleta. A paleta de preditor pode incluir entradas a partir das paletas de um ou mais blocos vizinhos que são usadas para prever uma ou mais entradas de uma paleta para codificar um bloco atual. O codificador de vídeo 20 e o decodificador de vídeo 30 podem construir a lista do mesmo modo. O codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados (como vetor 216) para indicar quais entradas da paleta de preditor devem ser copiadas para uma paleta para codificar um bloco atual.
[0219] De acordo com aspectos dessa revelação, uma paleta de preditor (como a paleta de preditor associada ao vetor 216) pode ser reinicializada para gerar uma paleta associada a certos blocos em uma imagem e/ou azulejo de dados de vídeo. Por exemplo, como descrito em maior detalhe com relação aos exemplos das figuras 5-7 abaixo, uma paleta de preditor para construir uma paleta para um bloco de dados de vídeo em uma primeira linha pode ser reinicializada com base em um ou mais blocos de outra linha. Em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizada em uma primeira fileira de blocos. O codificador de vídeo 20 e o decodificador de vídeo 30 podem também gerar uma paleta de preditor ao codificar um ou mais outros blocos na primeira fileira. Após codificar um bloco em uma segunda fileira, o codificador de vídeo 20 e o decodificador de vídeo 30 podem reinicializar a paleta de preditor para determinar uma paleta do bloco na segunda fileira com base nas entradas da primeira paleta.
[0220] A figura 5 é um diagrama conceptual ilustrando azulejos de exemplo de acordo com o padrão de Codificação de vídeo de eficiência elevada (HEVC). HEVC contém várias propostas para tornar o codec mais favorável paralelo, incluindo azulejos e processamento paralelo de Frente de onda (WPP). HEVC WD10 define azulejos como um número inteiro de CTBs ocorrendo em conjunto em uma coluna e uma fileira, ordenados consecutivamente em uma varredura raster CTB do azulejo. A divisão de cada imagem em azulejos pode ser mencionada como uma partição. Azulejos em uma imagem são ordenados consecutivamente na varredura raster de azulejo da imagem como mostrado na figura 5.
[0221] Por exemplo, a figura 5 ilustra uma ordem de codificação CTB de exemplo para uma imagem 220 que é dividida em múltiplos azulejos 222A, 222B, 222C, 222D, 222E, 222F, 222G, 222H, e 222I (coletivamente, “azulejos 222”), com limites de azulejos indicados pelas linhas grossas. Cada bloco quadrado na imagem 220 representa um bloco de pixels associados a um CTB. Os números nos blocos de pixel indicam posições dos CTBs correspondentes (Por exemplo, LCUs) em uma ordem de codificação de azulejo para a imagem 220.
[0222] Como ilustrado no exemplo da figura 5, CTBs no azulejo 222A são codificados primeiramente, seguidos por CTBs no azulejo 222B, seguidos por CTBs no azulejo 222C, seguidos por CTBs no azulejo 222D, seguidos por CTBs no azulejo 222E, seguidos por CTBs no azulejo 222F, seguidos por CTBs no azulejo 222G, seguidos por CTBs no azulejo 222H, seguidos por CTBs no azulejo 222I. a ordem de processar azulejos 222 é genericamente ilustrada pelos números incluídos em azulejos 222. Em cada dos azulejos 222, os CTBs são codificados de acordo com uma ordem de varredura raster.
[0223] O número de azulejos e a localização de seus limites podem ser definidos para a sequência inteira ou alterados de imagem para imagem. Limites de azulejo, similarmente aos limites de fatia, quebram dependências de predição e análise de modo que um azulejo possa ser processado independentemente. Entretanto, em algumas instâncias, filtros em loop (por exemplo, filtros de desbloqueio e deslocamento adaptável de amostra (SAO)) podem ainda cruzar limites de azulejos.
[0224] Usar azulejos pode intensificar paralelismo, porque nenhuma (ou relativamente pouca) comunicação é necessária entre processadores ou núcleos de processador para decodificação por entropia e reconstrução de compensação de movimento. Além disso, azulejos podem apresentar uma eficiência de codificação relativamente melhor quando comparados com fatias, porque azulejos permitem formatos de divisão de imagem que contêm amostras com correlação potencialmente mais elevada que fatias. Azulejos podem também reduzir cabeçalho de fatia overhead.
[0225] De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem reinicializar uma paleta de preditor para determinar uma paleta de um CTB com base em uma paleta de outro CTB. Em um exemplo para fins de ilustração, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar uma paleta de preditor para determinar uma paleta atual de um CTB atual no início de cada linha de CTB. O codificador de vídeo 20 e o decodificador de vídeo 30 podem reinicializar a paleta de preditor usando entradas de paleta a partir de um primeiro CTB da linha CTB acima do CTB atual.
[0226] Em um exemplo para fins de ilustração, após codificar CTB (4) (do azulejo 222A) usando codificação baseada em paleta, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para gerar uma paleta de preditor para determinar uma paleta de CTB (5) (do azulejo 222A). além disso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para atualizar a paleta de preditor após codificar cada de CTB (5), CTB (6), e CTB (7) usando um modo de codificação baseado em paleta. Isto é, o codificador de vídeo 20 e o decodificador de vídeo 30 podem substituir ou adicionar uma ou mais entradas da paleta de preditor após codificar cada de CTB (5), CTB (6) e CTB (7).
[0227] De acordo com aspectos dessa revelação, ao codificar CTB (8) da linha de CTB abaixo da linha de CTB que inclui CTB (4) (considerando a ordem de varredura raster), o codificador de vídeo 20 pode reinicializar a paleta de preditor antes de gerar uma paleta para codificar CTB (8). Por exemplo, ao invés de usar a paleta de preditor como anteriormente atualizada com base em CTB (7), o codificador de vídeo 20 e o decodificador de vídeo 30 podem reinicializar a paleta de preditor com base em entradas de uma paleta associada ao primeiro CTB da fileira de CTB vizinha acima, isto é, CTB (4). Desse modo, a paleta de preditor para gerar a paleta para CTB (8) pode ser mais provável de ter cores similares àquelas usadas em CTB (8), porque CTB (4) é localizado espacialmente mais próximo a CTB (4) do que CTB (7).
[0228] Como observado acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem reinicializar a paleta de preditor com base em entradas de uma paleta do primeiro CTB da fileira de CTB vizinha acima, isto é, CTB (4). De acordo com alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar a paleta de preditor para CTB (8) (por exemplo, a paleta de preditor usada para gerar uma paleta para codificar amostras de CTB (8) por substituir entradas da paleta de preditor com entradas a partir da paleta usada para codificar CTB (4)).
[0229] Em outro exemplo, de acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar a paleta de preditor baseada em uma paleta de preditor associada a CTB (4) que inclui entradas a partir da paleta de CTB (4). Por exemplo, como observado acima, o codificador de vídeo 20 e o decodificador de vídeo 30 podem gerar uma paleta de preditor (ou atualizar uma paleta de preditor anteriormente gerada) após codificar CTB (4). O codificador de vídeo 20 e o decodificador de vídeo 30 podem incluir entradas a partir de CTB (4) na paleta de preditor gerada ou atualizada. Nesse caso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem reinicializar a paleta de preditor com base em entradas da paleta de preditor após codificar CTB (4) e antes de codificar CTB (5). Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar a paleta de preditor de CTB (8) após terminar a codificação de CTB (4) e antes de codificar CTB (5).
[0230] Embora o exemplo acima seja descrito com relação à CTB (4) e CTB (5), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para aplicar técnicas generalizadas em um modo similar. Por exemplo, com relação ao exemplo de reinicializar a paleta de preditor para CTB (8), o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para gerar e/ou atualizar uma paleta de preditor após codificar N CTBs da linha de CTBs acima de CTB (8) (por exemplo, a linha de CTBs, vizinha acima, que inclui CTB (4)). O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para reinicializar a paleta de preditor para CTB (8) com base na paleta de preditor gerado(atualizado) e antes de iniciar a codificação de N+1° CTB na linha de CTB acima de CTB (4). Por conseguinte, em alguns exemplos, a paleta de preditor usada para reinicialização pode incluir entradas que são diferentes das (ou além das) entradas da paleta para CTB (4).
[0231] Em um exemplo, o processo descrito acima para CTB (4) pode ser ao invés disso executado para CTB (5). Por exemplo, a paleta de preditor gerada após CTB (5) pode ser usada ao invés de CTB (4) no exemplo acima. Nesse caso, o CTB usado para o processo de reinicialização de paleta pode ser o mesmo CTB usado para processo de inicialização de contexto CABAC aplicado para frentes de onda, que potencialmente harmonizariam reinicialização de paleta com o processo de inicialização de contexto.
[0232] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não reinicializar uma paleta de preditor para um CTB inicial que é localizado na linha superior (considerando uma varredura raster de cima para baixo) de uma imagem ou azulejo. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para não reinicializar uma paleta de preditor para CTB (0) (do azulejo 222A),porque não há CTB localizado acima de CTB (0).
[0233] Embora os exemplos da figura 5 sejam descritos com relação a CTBs para fins de ilustração, deve ser entendido que as técnicas podem ser estendidas para qualquer tipo de bloco de dados de vídeo.
[0234] A figura 6 é um diagrama conceptual ilustrando frentes de onda para processamento paralelo de frente de onda (WPP). HEVC define uma técnica WPP. Quando WPP é habilitado, cada fileira de CTU de uma imagem é uma divisão separada. Em comparação com fatias e azulejos, entretanto, nenhuma dependência de codificação é rompida em limites de fileira de CTU. Adicionalmente, probabilidades de CABAC são propagadas a partir da segunda CTU da fileira anterior, para reduzir adicionalmente as perdas de codificação. Também, WPP não altera a ordem de varredura raster regular. Como dependências não são rompidas, a perda de distorção de taxa de um fluxo de bits WPP é pequena, em comparação com um fluxo de bits não paralelo.
[0235] Quando WPP é habilitada, um número de processadores até o número de fileiras de CTU pode trabalhar em paralelo para processar a fileira de CTU (ou linhas). As dependências de frente de onda, entretanto, não permitem que todas as fileiras de CTU comecem a decodificar no início da imagem. Consequentemente, as fileiras de CTU também não podem terminar a decodificação ao mesmo tempo no final da imagem. Isso introduz ineficiências de paralelização que se tornam mais evidentes quando um número elevado de processadores é usado. A figura 6 ilustra como WPP processa fileiras de CTBs em paralelo, cada fileira iniciando com as probabilidades CABAC disponíveis após processar o segundo CTB da fileira acima.
[0236] De acordo com aspectos dessa revelação, como descrito em maior detalhe abaixo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem determinar se devem redefinir uma paleta de preditor com base nas frentes de onda ilustradas na figura 6.
[0237] A figura 7 é um diagrama conceptual ilustrando um exemplo de paleta de preditor redefinida na presença de múltiplos azulejos e frentes de onda, compatível com as técnicas dessa relação. No exemplo da figura 7, linhas cheias relativamente mais grossas podem indicar limites de azulejo, como limites de azulejo do azulejo 230. Linhas tracejadas indicam limites de CTB. Por exemplo, a fileira CTB 232 indica uma fileira de azulejo de CTBs incluindo os dois CTBs mais superiores do azulejo 230.
[0238] Algumas técnicas dessa revelação incluem redefinir uma paleta de preditor com base em um número de frentes de onda e/ou um número de azulejos sendo usados para codificar uma imagem, como imagem 234. Por exemplo, de acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem redefinir uma paleta de preditor para CTBs de primeiro azulejo (como o CTB codificador de vídeo 20 e o decodificador de vídeo 30 mais esquerdo superior do azulejo 230) quando múltiplas frentes de onda e múltiplos azulejos são usados para codificar imagem 234 (como os azulejos e frentes de onda mostrados nas figuras 5 e 6, respectivamente). No exemplo da figura 7, os círculos cheios incluídos nos CTBs indicam um CTB de primeiro azulejo dos azulejos para os quais a redefinição de paleta é executada. O codificador de vídeo 20 e o decodificador de vídeo 30 podem redefinir uma paleta por definir o tamanho da paleta de preditor em zero e não prever qualquer entrada de paleta de uma paleta sendo usada para codificar um bloco atual.
[0239] A figura 8 é um diagrama conceptual ilustrando um exemplo de determinar índices para uma paleta para um bloco de pixels, compatível com técnicas dessa revelação. Por exemplo, a figura 5 inclui um mapa 240 de índices que relacionam posições respectivas de pixels associados aos valores de índice a uma entrada de paletas 244. Por exemplo, o índice 1 é associado ao valor A, o índice 2 é associado ao valor B, e o índice 3 é associado ao valor C. além disso, quando amostras de escapamento são indicadas usando sinalização de escapamento implícito, o codificador de vídeo 20 e o decodificador de vídeo 30 podem também adicionar um índice adicional às paletas 244, ilustrado nas figuras 5 como índice 4, que pode indicar que amostras de mapa 240 associado ao índice 4 são amostras de escapamento. Nesse caso, o codificador de vídeo 20 pode codificar (e o decodificador de vídeo 30 pode obter, a partir de um fluxo de bits codificado) uma indicação de um valor de pixel efetivo (ou sua versão quantizada) para uma posição no mapa 240 se o valor de pixel não for incluído em paletas 244.
[0240] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um mapa adicional indicando quais posições de pixel são associadas aos valores de índice. Por exemplo, considere que a entrada (i, j) no mapa corresponde à posição (i, j) de uma CU. O codificador de vídeo pode codificar um ou mais elementos de sintaxe para cada entrada do mapa (isto é, cada posição de pixel) indicando se a entrada tem um valor de índice associado. Por exemplo, o codificador de vídeo 20 pode codificar um indicador tendo um valor de um para indicar que o valor de pixel no local (i, j) na CU é um dos valores nas paletas 244.
[0241] O codificador de vídeo 20 pode, em tal exemplo, também codificar um índice de paleta (mostrado no exemplo da figura 8 como valores 1-3) para indicar aquele valor de pixel na paleta e permitir que o decodificador de vídeo reconstrua o valor de pixel. Em instâncias nas quais as paletas 244 incluem uma única entrada e valor de pixel associado, o codificador de vídeo 20 pode pular a sinalização do valor de índice. O codificador de vídeo 20 pode codificar o indicador para ter um valor de zero para indicar que o valor de pixel no local (i, j) na CU não é um dos valores nas paletas 244. Nesse exemplo, o codificador de vídeo 20 pode também codificar uma indicação do valor de pixel para uso pelo decodificador de vídeo 30 na reconstrução do valor de pixel. Em algumas instâncias, o valor de pixel pode ser codificado em um modo de perda.
[0242] O valor de um pixel em uma posição de uma CU pode fornecer uma indicação de valores de um ou mais outros pixels em outras posições da CU. Por exemplo, pode haver uma probabilidade relativamente elevada de que posições de pixel vizinhas de uma CU tenham o mesmo valor de pixel ou possam ser mapeadas para o mesmo valor de índice (no caso de codificação com perda, na qual mais de um valor de pixel pode ser mapeado para um único valor de índice). Por conseguinte, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe indicando um número de valores de índice consecutivos em uma dada ordem de varredura que tem o mesmo índice. Como observado acima, índices de codificação desse modo podem ser mencionados como modo de paleta de Valor.
[0243] Como observado acima, cursos podem ser usados em combinação com um modo CopyFromTop ou valor. Em um exemplo, para fins de ilustração, considere fileiras 264 e 268 de mapa 240. Considerando uma direção de varredura horizontal, esquerda para 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”, dois valores de índice de “3”, e uma amostra que não está incluída nas paletas 244 (representada pelo índice 4, embora um indicador de escapamento de nível de amostra possa ser usado para sinalização de escapamento explícito), que pode ser mencionado como uma amostra de escapamento.
[0244] Nesse exemplo, o codificador de vídeo 20 pode usar modo CopyFromTop para codificar dados para a fileira 268. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe indicando que a primeira posição da fileira 268 (a posição mais a esquerda da fileira 268) é igual à primeira posição da fileira 264. O codificador de vídeo 20 pode também codificar um ou mais elementos de sintaxe indicando que o próximo curso de duas entradas consecutivas na direção de varredura na fileira 268 é igual à primeira posição da fileira 264.
[0245] Após codificar um ou mais elementos de sintaxe indicando a primeira posição da fileira 264 e o curso de duas entradas (mencionadas acima), o codificador de vídeo 20 pode codificar a quarta e a quinta posições na fileira 268 (a partir da esquerda para a direita), usando modo de Valor. Por exemplo, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe indicando um valor de 1 para a quarta posição e um ou mais elementos de sintaxe indicando um curso de 1 (por exemplo, modo de valor). Consequentemente, o codificador de vídeo 20 codifica essas duas posições sem referência a outra linha.
[0246] De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar em contexto um valor de curso para um índice codificado usando modo de valor com base no valor do índice. Por exemplo, como descrito aqui, o codificador de vídeo 20 e o decodificador de vídeo 30 podem usar um modo adaptável ao contexto de um processo de codificação CABAC para codificar dados que indicam um valor de curso. De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar um contexto para codificar os dados com base no índice do curso.
[0247] No exemplo da figura 8, o codificador de vídeo 20 e o decodificador de vídeo 30 codificam um índice de 1 para a quarta posição acima mencionada do mapa 40. O codificador de vídeo 20 e o decodificador de vídeo 30 podem também binarizar um valor de curso de 1 para a quarta posição do mapa 240. Em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem gerar um indicador que indica que o valor de curso é maior que zero porém não maior que um (que pode ser indicado usando um indicador separado).
[0248] De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem selecionar um contexto para codificar o indicador maior que zero com base no valor de índice de 1. Por exemplo, de acordo com alguns aspectos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem definir um conjunto de contextos para codificar o valor de curso. O conjunto de contextos pode incluir um contexto, dois contextos, três contextos, quatro contextos ou mais contextos.
[0249] Em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto de curso (0) com base no índice sendo igual a zero. Nesse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto de curso (1) com base no índice sendo qualquer valor diferente de zero. Com esse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 selecionam um contexto de curso de (1) com base no índice sendo 1 para a quarta posição do mapa 240.
[0250] Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar o contexto de curso (0) com base no índice sendo igual a zero. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto de curso (1) com base no índice sendo um. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto de curso (2) com base no índice sendo qualquer valor maior que um. Com esse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 selecionam um contexto de curso de (1) com base no índice sendo 1 para a quarta posição do mapa 240.
[0251] Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto de curso (0) com base no índice sendo igual a zero. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto de curso (1) com base no índice sendo um ou dois. O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para selecionar contexto de curso (2) com base no índice sendo maior que dois. Com esse exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 selecionam um contexto de curso de (1) com base no índice sendo 1 para a quarta posição do mapa 240.
[0252] De acordo com aspectos dessa revelação, o contexto pode ser baseado em um valor de índice efetivo ou um valor de índice ajustado. Por exemplo, de acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para determinar contexto para codificar um valor de curso com base em um índice de paleta sinalizado em um fluxo de bits (que pode ser associado ao elemento de sintaxe adjusted_palette_index) ao invés do índice de paleta efetivamente usado para codificar uma amostra em um bloco, em instâncias nas quais um índice de paleta ajustado é sinalizado no fluxo de bits.
[0253] Após codifica o curso associado à quarta posição do mapa 240, o codificador de vídeo 20 pode então codificar a primeira posição tendo um valor de índice de 3 na fileira 268 usando modo CopyFromTop em relação à fileira superior 264. Por exemplo, o codificador de vídeo 20 pode sinalizar um modo CopyFromTop e um curso de 1. Por conseguinte, o codificador de vídeo 20 pode selecionar entre codificação de valores de índice ou pixel de uma linha em relação a outros valores da linha, por exemplo, usando um curso, codificando valores de pixel ou índice de uma linha em relação a valores de outra linha (ou coluna) ou uma combinação dos mesmos. O codificador de vídeo 20 pode, em alguns exemplos, executar uma otimização de distorção/taxa para fazer a seleção.
[0254] O codificador de vídeo 20 pode então codificar a amostra de escapamento para a amostra final da fileira 268 (da esquerda para a direita), que não é incluída nas primeiras paletas 244. Por exemplo, o codificador de vídeo 20 pode codificar a posição final da fileira 268 como uma amostra de escapamento. Isto é, o codificador de vídeo 20 pode codificar uma indicação de que a posição final da fileira 268 é uma amostra de escapamento (por exemplo, índice 4) bem como uma indicação do valor de amostra. O decodificador de vídeo 30 pode obter a sintaxe acima descrita a partir de um fluxo de bits codificado e reconstruir a fileira 268 usando tal sintaxe.
[0255] Como observado acima, pode haver duas ou mais técnicas para codificar uma indicação de amostra codificada como uma amostra de escapamento. Por exemplo, com sinalização de escapamento explícito, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um indicador de escapamento explícito para cada posição de amostra do mapa 240. Se uma amostra específica (como a amostra final da fileira 268) for codificada como uma amostra de escapamento, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados que indicam o valor de cor para a amostra específica. Se a amostra não for codificada como uma amostra de escapamento, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados adicionais para indicar se o modo é CopyFromTop ou Valor, como um indicador SPoint.
[0256] Com sinalização de escapamento implícito, o codificador de vídeo 20 e o decodificador de vídeo 30 podem adicionar um índice adicional a paletas 244 (índice de entrada 4). O codificador de vídeo 20 e o decodificador de vídeo 30 podem usar o índice adicional a paletas 244 para indicar que uma amostra é codificada como uma amostra de escapamento. O índice adicional, entretanto, não tem um valor de cor associado. Ao invés, o codificador de vídeo 20 e o decodificador de vídeo 30 também codificam valores de cor para cada amostra que é associada ao índice adicional. Se a amostra não for codificada como uma amostra de escapamento, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados para indicar se o modo é CopyFromTop ou Valor, como um indicador SPoint.
[0257] De acordo com aspectos dessa revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para codificar um curso de índices usando o modo CopyFromTop que inclui uma ou mais amostras codificadas como amostras de escapamento. Em algumas instâncias, as amostras codificadas como amostras de escapamento podem ser mencionadas como “índices” incluídos no curso, apesar das amostras codificadas como amostras de escapamento não terem um índice que mapeia para um valor de cor de uma paleta (Por exemplo, o índice adicional é adicionado à paleta para fins de indicar amostras codificadas como amostras de escapamento, porém não tem um valor de cor correspondente). Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para copiar indicadores de escapamento (em sinalização de escapamento explícito) ou um índice de escapamento (ou sinalização de escapamento implícito) em um curso de outros índices que têm valores de cor associados em uma paleta sendo copiada com modo de paleta CopyFromTop. Os indicadores de escapamento e o índice de escapamento podem ambos ser referidos como um elemento de sintaxe que não é associado a um valor de cor na paleta, porque nem o indicador nem o índice de escapamento é incluído em uma paleta.
[0258] Consequentemente, de acordo com aspectos dessas revelação, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para inferir que uma amostra atual incluída em um curso associado ao modo de paleta CopyFromTop (por exemplo, uma amostra sendo codificada em relação a uma amostra de outra fileira) é codificada como uma amostra de escapamento se a amostra vizinha acima da amostra atual for codificada como uma amostra de escapamento. O codificador de vídeo 20 e o decodificador de vídeo 30 podem também codificar os valores de escapamento relacionados para todas as amostras codificadas como amostra de escapamento após o curso.
[0259] Com relação à figura 8, a terceira amostra de fileira 270 é codificada como uma amostra de escapamento e a terceira amostra de fileira 272 é codificada como uma amostra de escapamento (considerando uma varredura raster da esquerda para direita). No exemplo da figura 8, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar uma primeira amostra de fileira 270 usando modo CopyFromTop. Além disso, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar um valor de curso indicando um comprimento de curso de 15 para o modo CopyFromTop. O curso inclui tanto a terceira amostra da fileira 270 como a terceira amostra da fileira 272. Por conseguinte, o codificador de vídeo 20 e o decodificador de vídeo 30 podem codificar dados que indicam um valor de escapamento (Por exemplo, um valor de cor) para a terceira amostra de fileira 270. O codificador de vídeo 20 e o decodificador de vídeo 30 também podem codificar dados que indicam um valor de escapamento (por exemplo, um valor de cor) para a terceira amostra de fileira 272, que pode ser diferente do valor de escapamento da fileira 270.
[0260] A figura 9 é um fluxograma ilustrando um processo de exemplo para determinar uma paleta de preditor, compatível com técnicas dessa revelação. O processo da figura 9 é genericamente descrito como sendo realizado por um codificador de vídeo, que pode incluir codificador de vídeo 20, decodificador de vídeo 30 ou uma variedade de outros processadores.
[0261] No exemplo da figura 9, o codificador de vídeo pode determinar uma primeira paleta para um primeiro bloco de dados de vídeo que é localizado em uma primeira fileira de blocos (290). Embora descrito com relação a “fileiras” para fins de ilustração, deve ser entendido que as técnicas também podem ser aplicadas a colunas de blocos em instâncias nas quais o codificador de vídeo varre blocos na ordem de coluna. Em qualquer caso, a primeira paleta para o primeiro bloco pode incluir uma ou mais entradas de paleta cada tendo um índice de paleta que é associado a um valor de cor para codificar o bloco.
[0262] O codificador de vídeo também gera uma paleta de preditor de gerar ou construir pelo menos uma paleta de pelo menos um segundo bloco que é localizado na primeira fileira (292). Por exemplo, o codificador de vídeo pode gerar uma paleta de preditor com base em entradas da primeira paleta após codificar o primeiro bloco. O codificador de vídeo pode também atualizar a paleta de preditor para cada bloco subsequentemente codificado da primeira fileira que é codificada usando codificação baseada em paleta.
[0263] De acordo com aspectos dessa revelação, o codificador de vídeo pode reinicializar a paleta de preditor para determinar uma terceira paleta de um terceiro bloco que é localizado em uma segunda fileira de blocos (294). O terceiro bloco pode ser o primeiro bloco que é codificado na segunda fileira de blocos. O terceiro bloco pode ser posicionado imediatamente abaixo do primeiro bloco.
[0264] O codificador de vídeo pode reinicializar a paleta de preditor com base em entradas da paleta do primeiro bloco. De acordo com alguns exemplos, o codificador de vídeo pode ser configurado para reinicializar a paleta de preditor por substituir entradas da paleta de preditor com as entradas a partir da primeira paleta. Em alguns exemplos, o codificador de vídeo pode ser configurado para reinicializar a paleta de preditor usando a paleta de preditor que é gerada após codificar o primeiro bloco (por exemplo, antes de codificar um segundo bloco na primeira fileira) ou uma paleta de preditor atualizada como atualizado após codificar um ou mais outros blocos da primeira fileira.
[0265] O codificador de vídeo pode determinar a terceira paleta com base na paleta de preditor reinicializada (296). Por exemplo, o codificador de vídeo pode determinar quais entradas da paleta de preditor para copiar para a terceira paleta e copiar as entradas relevantes. Em alguns exemplos, como descrito aqui, o codificador de vídeo pode determinar as entradas da paleta de preditor para copiar com base em um vetor de preditor.
[0266] O codificador de vídeo pode então codificar/decodificar o bloco usando a terceira paleta (298). Por exemplo, em instâncias nos quais o codificador de vídeo opera como um codificador de vídeo (como codificador de vídeo 20), o codificador de vídeo pode codificar dados que representam os índices do terceiro bloco usando a paleta determinada em um fluxo de bits codificado. Em instâncias nas quais o codificador de vídeo opera como um decodificador de vídeo (como decodificador de vídeo 30), o decodificador de vídeo pode determinar valores de amostra para índices do terceiro bloco usando a terceira paleta.
[0267] A figura 10 é um fluxograma ilustrando um processo de exemplo para codificar um valor de curso de um curso de índices de paleta, compatível com técnicas dessa revelação. O processo da figura 10 é genericamente descrito como sendo executado por um codificador de vídeo, que pode incluir codificador de vídeo 20, decodificador de vídeo 30 ou uma variedade de outros processadores.
[0268] No exemplo da figura 10, o codificador de vídeo determina um valor de curso que indica um comprimento de curso de um curso de um índice de paleta (310). Por exemplo, o codificador de vídeo pode codificar uma indicação de um índice de paleta, por exemplo, usando um modo de paleta de Valor. O codificador de vídeo pode também determinar o número de amostras consecutivas em uma ordem de varredura que têm o mesmo valor como o índice codificado. O número de amostras consecutivas pode ser o valor de curso.
[0269] O codificador de vídeo também determina contexto para codificação adaptável ao contexto dos dados determinados que indica o valor de curso com base no índice de paleta (312). Por exemplo, o codificador de vídeo pode determinar um ou mais contextos para codificação de CABAC do valor de curso determinado com base no índice de paleta. Em alguns exemplos, o codificador de vídeo pode selecionar de uma pluralidade de contextos definidos para codificar o valor de curso.
[0270] O codificador de vídeo pode então codificar/decodificar os dados que indicam o valor de curso usando o contexto determinado (314). Por exemplo, em instâncias nas quais o codificador de vídeo opera como um codificador de vídeo (como codificador de vídeo 20), o codificador de vídeo pode codificar os dados que indicam o valor de curso em um fluxo de bits codificado. Em instâncias nas quais o codificador de vídeo opera como um decodificador de vídeo (como decodificador de vídeo 30), o decodificador de vídeo pode analisar (decodificar) os dados que indicam o valor de curso a partir de um fluxo de bits codificado.
[0271] A figura 11 é um fluxograma ilustrando um processo de exemplo para codificar um curso de índices codificados com mais de um modo de codificação de paleta, compatível com técnicas dessa revelação. O processo da figura 11 é genericamente descrito como sendo executado por um codificador de vídeo, que pode incluir codificador de vídeo 20, decodificador de vídeo 30 ou uma variedade de outros processadores.
[0272] O codificador de vídeo determina índices de uma primeira fileira de um bloco que inclui índices associados a uma cor de uma paleta e um ou mais elementos de sintaxe não associados a uma cor da paleta (320). Por exemplo, o codificador de vídeo pode determinar amostras para as quais índices de paleta são codificados e amostras codificadas no modo de paleta de Escapamento.
[0273] O codificador de vídeo pode também codificar/decodificar um curso de índices de uma segunda fileira em relação aos índices de paleta da primeira fileira (322). Por exemplo, em instâncias nas quais o codificador de vídeo opera como um codificador de vídeo (como codificador de vídeo 20), o codificador de vídeo pode codificar uma indicação do modo CopyFromTop e uma indicação do comprimento de curso do curso. Em instâncias nas quais o codificador de vídeo opera como um decodificador de vídeo (como decodificador de vídeo 30), o decodificador de vídeo pode decodificar uma indicação do modo CopyFromTop e uma indicação do comprimento de curso do curso. Em qualquer caso, o curso inclui ambos os índices que têm cores associadas e um ou mais elementos de sintaxe não associados a uma cor da paleta, por exemplo, amostras codificadas tanto no modo CopyFromTop como amostras de escapamento.
[0274] O codificador de vídeo pode então codificar/decodificar dados que indicam valores de cor para elementos de sintaxe não associados a uma cor da paleta (324). Por exemplo, em instâncias nas quais o codificador de vídeo opera como um codificador de vídeo (como codificador de vídeo 20), o codificador de vídeo pode codificar dados que indicam os valores de cor das amostras representadas pelos elementos de sintaxe em um fluxo de bits codificado. Em instâncias nas quais o codificador de vídeo opera como um decodificador de vídeo (como decodificador de vídeo 30), o decodificador de vídeo pode decodificar dados que indicam os valores de cor das amostras representadas pelos elementos de sintaxe a partir de um fluxo de bits.
[0275] Deve ser entendido que todas as técnicas descritas aqui podem ser usadas individualmente ou em combinação. Essa revelação inclui vários métodos de sinalização que podem alterar dependendo em certos fatores como tamanho de bloco, tamanho de paleta, tipo de fatia, etc. Tal variação em sinalizar ou inferir os elementos de sintaxe pode ser conhecida para o codificador e decodificador a priori ou pode ser sinalizada explicitamente no conjunto de parâmetros de vídeo (VPS), conjunto de parâmetros de sequencia (SPS), conjunto de parâmetros de imagem (PPS), cabeçalho de fatia, em um nível de azulejo ou em outro lugar.
[0276] Deve ser reconhecido que dependendo do exemplo, certos atos ou eventos de quaisquer das técnicas descritas aqui podem ser executados em uma sequência diferente podem ser adicionados, fundidos ou deixados de fora (por exemplo nem todos os atos ou eventos descritos são necessários para a prática das técnicas). Além disso, em certos exemplos, atos ou eventos podem ser executados simultaneamente, por exemplo, através de processamento multi-threaded, processamento de interrupção, ou múltiplos processadores, ao invés de sequencialmente. Além disso, embora certos aspectos dessa revelação sejam descritos como sendo executados por um único módulo ou unidade para fins de clareza, deve ser entendido que as técnicas dessa revelação podem ser executadas por uma combinação de unidades ou módulos associados a um codificador de vídeo.
[0277] Certos aspectos dessa revelação foram descritos com relação à revelação de padrão HEVC para fins de ilustração. Entretanto, as técnicas descritas nessa revelação podem ser úteis para outros processos de codificação de vídeo, incluindo outros processos de codificação de vídeo de propriedade ou padrão não desenvolvidos aqui.
[0278] As técnicas descritas acima podem ser executadas pelo codificador de vídeo 20 (figuras 1 e 2) e/ou decodificador de vídeo 30 (figuras 1 e 3), os quais podem ser genericamente mencionados como um codificador de vídeo. De modo semelhante, a codificação de vídeo pode se referir à codificação de vídeo ou decodificação de vídeo, como aplicável.
[0279] Embora combinações específicas de vários aspectos das técnicas sejam descritas acima, essas combinações são fornecidas meramente para ilustrar exemplos das técnicas descritas nessa revelação. Por conseguinte, as técnicas dessa revelação não devem ser limitadas a essas combinações de exemplo e podem abranger qualquer combinação concebível dos vários aspectos das técnicas descritas nessa revelação.
[0280] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou quaisquer combinações dos mesmos. Se implementadas em software, as funções podem ser armazenadas em ou transmitidas através como uma ou mais instruções ou código em uma mídia legível em computador e executadas por uma unidade de processamento baseado em hardware. Mídia legível em computador pode incluir mídia de armazenagem legível em computador, que corresponde a uma mídia tangível como mídia de armazenagem de dados, ou mídia de comunicação incluindo qualquer mídia que facilite a transferência de um programa de computador de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Desse modo, mídia legível em computador pode corresponder em geral a (1) mídia de armazenagem legível em computador que é não transitória ou (2) uma mídia de comunicação como um sinal ou onda portadora. Mídia de armazenagem de dados pode ser qualquer mídia disponível que pode ser acessada por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e/ou estruturas de dados para implementação das técnicas descritas nessa revelação. Um produto de programa de computador pode incluir uma mídia legível em computador.
[0281] Como exemplo, e não limitação, tal mídia de armazenagem legível em computador pode compreender RAM, ROM, EEPROM, CD-ROM ou outra armazenagem de disco ótica, armazenagem de disco magnético, ou outros dispositivos de armazenagem magnética, memória flash, ou qualquer outra mídia que possa ser usada para armazenar código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessado por um computador. Também, qualquer conexão é adequadamente denominada uma mídia legível em computador. Por exemplo, se instruções são transmitidas a partir de um website, servidor ou outra fonte remota usando um cabo coaxial, cabo de fibra ótica, par torcido, linha de assinante digital (DSL), ou tecnologias sem fio como infravermelho, rádio e micro-ondas, então o cabo coaxial, cabo de fibra ótica, par torcido, DSL, ou tecnologias sem fio como infravermelho, rádio e micro-onda são incluídos na definição de mídia. Deve ser entendido, entretanto, que mídia de armazenagem legível em computador e mídia de armazenagem de dados não incluem conexões, ondas portadoras, sinais ou outra mídia transitória, porém são ao invés dirigidas a mídia de armazenagem tangível, não transitória. Disk e disco, como usado aqui, incluem compact disc (CD), disco a laser, disco ótico, digital versatile disc (DVD), disco flexível e disco Blu-ray, onde disks normalmente reproduzem dados magneticamente, enquanto discs reproduzem dados oticamente com lasers. Combinações dos acima devem ser também incluídas no escopo de mídia legível em computador.
[0282] Instruções podem ser executadas por um ou mais processadores, como um ou mais processadores de sinais digitais (DSPs), microprocessadores de propósito geral, circuitos integrados de aplicação específica (ASICs), disposições de lógica programável em campo (FPGAs), ou outro conjunto de circuitos de lógica discreta ou integrada equivalente. Por conseguinte, o termo “processador” como usado aqui pode se referir a qualquer uma das estruturas acima ou qualquer outra estrutura adequada para implementação das técnicas descritas aqui. Além disso, em alguns aspectos, a funcionalidade descrita aqui pode ser fornecida nos módulos de hardware e/ou software dedicados configurados para codificar e decodificar, ou incorporados em um codec combinado. Também, as técnicas podem ser totalmente implementadas em um ou mais circuitos ou elementos de lógica.
[0283] As técnicas dessa revelação podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um aparelho telefônico sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chip). Vários componentes, módulos ou unidades são descritos nessa revelação para enfatizar aspectos funcionais de dispositivos configurados para executar as técnicas reveladas, porém não exigem necessariamente realização por diferentes unidades de hardware. Ao invés, como descrito acima, várias unidades podem se combinadas em uma unidade de hardware de codec ou fornecidas por uma coleção de unidades de hardware inter- operativas, incluindo um ou mais processadores como descrito acima, em combinação com software e/ou firmware adequado.
[0284] Vários exemplos foram descritos. Esses e outros exemplos estão compreendidos no escopo das reivindicações a seguir.

Claims (15)

1. Método de processar dados de vídeo, o método compreendendo: determinar (310) um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo, em que o índice de paleta é associado a um valor de cor em uma paleta de valores de cor para codificar o bloco de dados de vídeo; o método caracterizado pelo fato de que compreende adicionalmente determinar (312) um contexto para codificação adaptável em contexto de dados que representam o valor de curso com base no índice de paleta; e codificar (314) os dados que representam valor de curso a partir de um fluxo de bits usando o contexto determinado.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que codificar os dados que representam o valor de curso compreende codificar um primeiro binário que indica se o valor de curso é maior que zero, codificar um segundo binário que indica se o valor de curso é maior que um, e codificar um terceiro binário que indica se o valor de curso é maior que dois.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que determinar o contexto com base no índice de paleta compreende selecionar entre três contextos com base no índice de paleta.
4. Método, de acordo com a reivindicação 3, caracterizado pelo fato de que codificar os dados que representam o valor de curso compreende codificar um primeiro binário que indica se o valor de curso é maior que zero, codificar um segundo binário que indica se o valor de curso é maior que um, e codificar um terceiro binário que indica se o valor de curso é maior que dois, e em que selecionar os três contextos compreende: com base no índice de paleta sendo zero, selecionar um primeiro contexto dentre os três contextos para codificar pelo menos um dentre o primeiro binário, segundo binário e terceiro binário; com base no índice de paleta sendo um ou dois, selecionar um segundo contexto dentre os três contextos para codificar pelo menos um dentre o primeiro binário, o segundo binário e o terceiro binário; e com base no índice de paleta sendo maior que dois, selecionar um terceiro contexto dentre os três contextos para codificar pelo menos um dentre o primeiro binário, o segundo binário e o terceiro binário.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que determinar o contexto com base no índice de paleta compreende selecionar dentre dois contextos com base no índice de paleta.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que selecionar dentre os dois contextos compreende: com base no índice de paleta sendo zero, selecionar um primeiro contexto dentre os dois contextos; e com base no índice de paleta sendo qualquer valor diferente de zero, selecionar um segundo contexto dentre os dois contextos.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente codificar dados que representam o índice de paleta a partir do fluxo de bits.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o índice de paleta compreende um índice de paleta ajustado, o método compreendendo adicionalmente analisar os dados que representam o índice de paleta ajustado a partir do fluxo de bits.
9. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que determinar o contexto compreende adicionalmente determinar o contexto com base em um tamanho da paleta de valores de cor ou um tamanho do bloco.
10. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que codificar os dados que representam o valor de curso compreende codificar os dados, e em que o método compreende adicionalmente: codificar dados que indicam a paleta de cores; e codificar dados que indicam, para o pixel associado ao índice de paleta, um modo de paleta usado para codificar o pixel.
11. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que codificar os dados que representam o valor de curso compreende decodificar os dados, e em que o método compreende adicionalmente: obter, a partir de um fluxo de bits codificado, dados que indicam a paleta de cores; e determinar o valor do pixel e amostras do curso usando a paleta de cores.
12. Dispositivo para processar dados de vídeo, o dispositivo compreendendo: meios para determinar um valor de curso que indica um comprimento de curso de um curso de um índice de paleta de um bloco de dados de vídeo, em que o índice de paleta é associado a um valor de cor em uma paleta de valores de cor para codificar o bloco de dados de vídeo; o dispositivo caracterizado pelo fato de que compreende adicionalmente meios para determinar um contexto para codificação adaptável em contexto de dados que representam o valor de curso com base no índice de paleta; e meios para codificar os dados que representam valor de curso a partir de um fluxo de bits usando o contexto determinado.
13. Dispositivo, de acordo com a reivindicação 12, caracterizado pelo fato de que determinar o contexto com base no índice de paleta compreende selecionar dentre três contextos com base no índice de paleta.
14. Dispositivo, de acordo com a reivindicação 13, caracterizado pelo fato de que os meios para codificar os dados que representam o valor de curso compreendem meios para codificar um primeiro binário que indica se o valor de curso é maior que zero, meios para codificar um segundo binário que indica se o valor de curso é maior que um e meios para codificar um terceiro binário que indica se o valor de curso é maior que dois, e em que os meios para selecionar a partir dos três contextos compreende: meios para selecionar, com base no índice de paleta sendo zero, um primeiro contexto dentre os três contextos para codificar pelo menos um dentre o primeiro binário, do segundo binário e do terceiro binário; meios para selecionar, com base no índice de paleta sendo um ou dois, um segundo contexto dentre os três contextos para codificar pelo menos um dentre o primeiro binário, o segundo binário e o terceiro binário; e meios para selecionar, com base no índice de paleta sendo maior que dois, um terceiro contexto dos três contextos para codificar pelo menos um dentre o primeiro binário, segundo binário e terceiro binário.
15. Memória legível por computador caracterizada pelo fato de compreender instruções nela armazenadas que fazer com que pelo menos um computador execute as etapas conforme definidas em qualquer uma das reivindicações 1 a 11.
BR112016027426-1A 2014-05-23 2015-05-22 Codificação de valores de curso com base em índice de paleta em codificação de vídeo baseada em paleta BR112016027426B1 (pt)

Applications Claiming Priority (13)

Application Number Priority Date Filing Date Title
US201462002717P 2014-05-23 2014-05-23
US201462009772P 2014-06-09 2014-06-09
US62/009,772 2014-06-09
US201462015261P 2014-06-20 2014-06-20
US62/015,261 2014-06-20
US201462019223P 2014-06-30 2014-06-30
US201462059659P 2014-10-03 2014-10-03
US62/059,659 2014-10-03
US201462065526P 2014-10-17 2014-10-17
US62/065,526 2014-10-17
US14/719,263 2015-05-21
US14/719,263 US10382749B2 (en) 2014-05-23 2015-05-21 Coding run values based on palette index in palette-based video coding
PCT/US2015/032282 WO2015179827A1 (en) 2014-05-23 2015-05-22 Coding run values based on palette index in palette-based video coding

Publications (2)

Publication Number Publication Date
BR112016027426A2 BR112016027426A2 (pt) 2017-08-15
BR112016027426B1 true BR112016027426B1 (pt) 2024-01-16

Family

ID=53718109

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112016027426-1A BR112016027426B1 (pt) 2014-05-23 2015-05-22 Codificação de valores de curso com base em índice de paleta em codificação de vídeo baseada em paleta

Country Status (10)

Country Link
US (1) US10382749B2 (pt)
EP (1) EP3146726B1 (pt)
JP (1) JP6541692B2 (pt)
KR (1) KR102416949B1 (pt)
CN (1) CN106464872B (pt)
BR (1) BR112016027426B1 (pt)
CA (1) CA2947042C (pt)
ES (1) ES2746102T3 (pt)
HU (1) HUE045219T2 (pt)
WO (1) WO2015179827A1 (pt)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102275639B1 (ko) 2013-10-14 2021-07-08 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 비디오 및 영상 코딩 및 디코딩에 대한 기본 색상 인덱스 맵 모드의 특징
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
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
US10291940B2 (en) 2014-05-23 2019-05-14 Qualcomm Incorporated Coding runs with escape in palette-based video coding
US11323733B2 (en) 2014-05-23 2022-05-03 Qualcomm Incorporated Predictor palette initialization in palette-based video coding
US10687064B2 (en) 2014-08-04 2020-06-16 Qualcomm Incorporated Palette mode encoding and decoding with inferred pixel scan order
JP2017535145A (ja) 2014-09-30 2017-11-24 マイクロソフト テクノロジー ライセンシング,エルエルシー 波面並列処理が可能にされた場合のピクチャ内予測モードに関する規則
WO2016057323A1 (en) * 2014-10-06 2016-04-14 Huawei Technologies Co., Ltd. Improved palette mode in high efficiency video coding (hevc) screen content coding (scc)
US9596479B2 (en) * 2014-10-07 2017-03-14 Hfi Innovation Inc. Method of pulse-code modulation and palette coding for video coding
JP6461355B2 (ja) * 2015-01-29 2019-01-30 キヤノン株式会社 画像を符号化または復号する装置、方法、プログラム
WO2016197314A1 (en) * 2015-06-09 2016-12-15 Microsoft Technology Licensing, Llc Robust encoding/decoding of escape-coded pixels in palette mode
US20170055003A1 (en) * 2015-08-20 2017-02-23 Futurewei Technologies, Inc. Context Reduction Of Palette Run Type In High Efficiency Video Coding (HEVC) Screen Content Coding (SCC)
KR102471978B1 (ko) * 2017-07-20 2022-11-29 삼성전자주식회사 이미지의 에러 데이터를 보정하여 압축하기 위한 장치 및 그에 관한 방법
EP3794825A1 (en) 2018-06-29 2021-03-24 Beijing Bytedance Network Technology Co. Ltd. Update of look up table: fifo, constrained fifo
JP7295230B2 (ja) * 2018-06-29 2023-06-20 北京字節跳動網絡技術有限公司 スライス/タイル/lcuの行ごとのルックアップテーブルのリセット
CN114900694A (zh) 2018-06-29 2022-08-12 抖音视界(北京)有限公司 哪个查找表需要更新或不更新
EP4322533A3 (en) 2018-06-29 2024-03-06 Beijing Bytedance Network Technology Co., Ltd. Checking order of motion candidates in lut
WO2020003282A1 (en) 2018-06-29 2020-01-02 Beijing Bytedance Network Technology Co., Ltd. Managing motion vector predictors for video coding
TWI719525B (zh) 2018-06-29 2021-02-21 大陸商北京字節跳動網絡技術有限公司 Lut與amvp之間的交互
EP3791586A1 (en) 2018-06-29 2021-03-17 Beijing Bytedance Network Technology Co. Ltd. Concept of using one or multiple look up tables to store motion information of previously coded in order and use them to code following blocks
JP7460617B2 (ja) 2018-06-29 2024-04-02 北京字節跳動網絡技術有限公司 Lut更新条件
BR112020024142A2 (pt) 2018-06-29 2021-03-02 Beijing Bytedance Network Technology Co., Ltd. método para processamento de vídeo, aparelho para codificação de dados de vídeo, meio de armazenamento e meio de gravação legíveis por computador não transitório
TWI748202B (zh) 2018-07-02 2021-12-01 大陸商北京字節跳動網絡技術有限公司 Lamvr中取整和修剪的順序
WO2020013498A1 (ko) * 2018-07-13 2020-01-16 엘지전자 주식회사 컨텐츠 서비스 시스템에서 영상 서비스 처리 방법 및 그 장치
CN111064961B (zh) 2018-09-12 2023-06-09 北京字节跳动网络技术有限公司 视频处理方法和装置
WO2020143741A1 (en) 2019-01-10 2020-07-16 Beijing Bytedance Network Technology Co., Ltd. Invoke of lut updating
CN113383554B (zh) 2019-01-13 2022-12-16 北京字节跳动网络技术有限公司 LUT和共享Merge列表之间的交互
CN113302937A (zh) 2019-01-16 2021-08-24 北京字节跳动网络技术有限公司 运动候选推导
CA3130472A1 (en) 2019-02-24 2020-08-27 Beijing Bytedance Network Technology Co., Ltd. Independent coding of palette mode usage indication
US10924750B2 (en) 2019-03-01 2021-02-16 Alibaba Group Holding Limited Palette size constraint in palette mode for video compression system
US11503311B2 (en) 2019-03-08 2022-11-15 Sony Group Corporation Hybrid palette-DPCM coding for image compression
WO2020192611A1 (en) 2019-03-22 2020-10-01 Beijing Bytedance Network Technology Co., Ltd. Interaction between merge list construction and other tools
CN117459744A (zh) 2019-07-20 2024-01-26 北京字节跳动网络技术有限公司 调色板模式使用指示的条件相关编解码
CN114145013B (zh) 2019-07-23 2023-11-14 北京字节跳动网络技术有限公司 调色板模式编解码的模式确定
WO2021018166A1 (en) * 2019-07-29 2021-02-04 Beijing Bytedance Network Technology Co., Ltd. Scanning order improvements for palette mode coding
US11206413B2 (en) * 2019-08-13 2021-12-21 Qualcomm Incorporated Palette predictor updates for local dual trees
WO2021061744A1 (en) * 2019-09-23 2021-04-01 Beijing Dajia Internet Information Technology Co., Ltd. Methods and devices for quantization and de-quantization design in video coding

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040077921A (ko) 2002-02-01 2004-09-07 코닌클리케 필립스 일렉트로닉스 엔.브이. 가변 길이 칼라 코드들로 팔레트화된 칼라 화상들의 압축
CN101317197B (zh) 2005-09-23 2012-10-03 喷流数据有限公司 对数字化彩色图像进行渐进编码的方法和系统
KR101059178B1 (ko) 2006-12-28 2011-08-25 니폰덴신뎅와 가부시키가이샤 영상 부호화 방법 및 복호방법, 그들의 장치, 그들의 프로그램을 기록한 기억매체
US8908763B2 (en) * 2008-06-25 2014-12-09 Qualcomm Incorporated Fragmented reference in temporal compression for video coding
US8406573B2 (en) 2008-12-22 2013-03-26 Microsoft Corporation Interactively ranking image search results using color layout relevance
US9491491B2 (en) * 2011-06-03 2016-11-08 Qualcomm Incorporated Run-mode based coefficient coding for video coding
US9357185B2 (en) * 2011-11-08 2016-05-31 Qualcomm Incorporated Context optimization for last significant coefficient position coding
US9479780B2 (en) * 2012-02-01 2016-10-25 Google Technology Holdings LLC Simplification of significance map coding
US9729875B2 (en) 2013-07-08 2017-08-08 Sony Corporation Palette coding mode
BR112016012417B1 (pt) 2013-12-18 2023-04-11 Hfi Innovation Inc Método e aparelho para inicialização e gerenciamento de paleta
GB2526337A (en) * 2014-05-21 2015-11-25 Canon Kk Method and apparatus for syntax element encoding in video coding and decoding
US10038915B2 (en) 2014-05-22 2018-07-31 Qualcomm Incorporated Escape sample coding in palette-based video coding
US11323733B2 (en) 2014-05-23 2022-05-03 Qualcomm Incorporated Predictor palette initialization in palette-based video coding
US10291940B2 (en) 2014-05-23 2019-05-14 Qualcomm Incorporated Coding runs with escape in palette-based video coding

Also Published As

Publication number Publication date
CA2947042A1 (en) 2015-11-26
ES2746102T3 (es) 2020-03-04
EP3146726B1 (en) 2019-06-19
WO2015179827A1 (en) 2015-11-26
BR112016027426A2 (pt) 2017-08-15
HUE045219T2 (hu) 2019-12-30
JP2017520158A (ja) 2017-07-20
CN106464872B (zh) 2019-07-26
KR102416949B1 (ko) 2022-07-04
CN106464872A (zh) 2017-02-22
US10382749B2 (en) 2019-08-13
EP3146726A1 (en) 2017-03-29
US20150341635A1 (en) 2015-11-26
CA2947042C (en) 2023-02-21
KR20170008816A (ko) 2017-01-24
JP6541692B2 (ja) 2019-07-10

Similar Documents

Publication Publication Date Title
CA2947043C (en) Coding runs with escape in palette-based video coding
CA2945534C (en) Predictor palette initialization in palette-based video coding
BR112016027426B1 (pt) Codificação de valores de curso com base em índice de paleta em codificação de vídeo baseada em paleta
ES2874552T3 (es) Diseño de codificación y descodificación en modo de paleta
US10158866B2 (en) Parsing dependency reduction for palette index coding
AU2016323800A1 (en) Restriction of escape pixel signaled values in palette mode video coding
US20160366439A1 (en) Palette copy extension
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
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B350 Update of information on the portal [chapter 15.35 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

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