BR112016014132B1 - Sinalização de informações de divisão para tabela de consulta 3d para escalabilidade de gama de cores em codificação de vídeo de multicamadas - Google Patents

Sinalização de informações de divisão para tabela de consulta 3d para escalabilidade de gama de cores em codificação de vídeo de multicamadas Download PDF

Info

Publication number
BR112016014132B1
BR112016014132B1 BR112016014132-6A BR112016014132A BR112016014132B1 BR 112016014132 B1 BR112016014132 B1 BR 112016014132B1 BR 112016014132 A BR112016014132 A BR 112016014132A BR 112016014132 B1 BR112016014132 B1 BR 112016014132B1
Authority
BR
Brazil
Prior art keywords
color
video
lookup table
octants
video data
Prior art date
Application number
BR112016014132-6A
Other languages
English (en)
Other versions
BR112016014132A2 (pt
Inventor
Xiang Li
Jianle Chen
Marta Karczewicz
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 BR112016014132A2 publication Critical patent/BR112016014132A2/pt
Publication of BR112016014132B1 publication Critical patent/BR112016014132B1/pt

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/90Determination of colour characteristics
    • 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/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • 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/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Testing, Inspecting, Measuring Of Stereoscopic Televisions And Televisions (AREA)

Abstract

SINALIZAÇÃO DE INFORMAÇÕES DE DIVISÃO PARA TABELA DE CONSULTA 3D PARA ESCALABILIDADE DE GAMA DE CORES EM CODIFICAÇÃO DE VÍDEO DE MULTICAMADAS. Técnicas são descritas para sinalizar informações usadas para gerar tabelas de consulta de cores tridimensionais (3D) para escalabilidade de gama de cores em codificação de vídeo de multicamadas. Uma camada inferior de dados de vídeo pode incluir dados de cores em uma primeira gama de cores e uma camada mais elevada dos dados de vídeo pode incluir dados de cores em uma segunda gama de cores. Para gerar quadros de referência inter-camadas, um codificador de vídeo ou decodificador de vídeo executa predição de cor usando uma tabela de consulta 3D para converter os dados de cores de um quadro de referência na primeira gama de cores na segunda gama de cores. De acordo com as técnicas, um codificador de vídeo pode codificar informações de divisão e/ou valores de cores de uma tabela de consulta 3D gerada para escalabilidade de gama de cores. Um decodificador de vídeo pode decodificar as informações de divisão e/ou valores de cores para gerar a tabela de consulta 3D para executar escalabilidade de gama de cores.

Description

PEDIDOS RELACIONADOS
[0001] O presente pedido reivindica o benefício do pedido provisional US no. 61/917.228, depositado em 17 de dezembro de 2013, e pedido provisional US no. 62/005.845, depositado em 30 de maio de 2014, os teores de cada um são incorporados pelo presente por referência na íntegra.
CAMPO TÉCNICO
[0002] A presente revelação se refere à codificaçã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), 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 codificação de vídeo.
[0004] Técnicas de codificação de vídeo incluem 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, que podem ser também mencionados como blocos de árvore, unidades de codificação (CUs) e/ou nós de codificação. 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 referidos 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 de transformada residual, que então podem ser quantizados. Os coeficientes de transformada quantizada, inicialmente dispostas em um conjunto bidimensional, podem ser varridos para produzir um vetor unidimensional de coeficientes de transformada, e codificação por entropia pode ser aplicada para obter ainda mais compressão.
SUMÁRIO
[0006] Em geral, essa revelação descreve técnicas para informações de sinalização usadas para gerar tabelas de consulta de cores tridimensionais (3D) para escalabilidade de gama de cores em codificação de vídeo de multicamadas. Técnicas de predição de cor para escalabilidade de gama de cores podem ser usadas por codificadores de vídeo e/ou decodificadores de vídeo para gerar quadros de referência inter-camada quando uma gama de cores para uma camada inferior de dados de vídeo é diferente de uma gama de cores para uma camada mais elevada de dados de vídeo. Por exemplo, um codificador de vídeo e/ou decodificador de vídeo pode primeiramente realizar predição de cor usando uma tabela de consulta 3D para escalabilidade de gama de cores para converter os dados de cores de um quadro de referência para a camada inferior na gama de cores para a camada mais elevada, e então gerar quadros de referência inter-camadas com base nos dados de cores convertidos. De acordo com as técnicas descritas nessa revelação, um codificador de vídeo pode codificar informações de divisão e/ou valores de cores de uma tabela de consulta 3D gerada para escalabilidade de gama de cores. Um decodificador de vídeo pode decodificar as informações de divisão e/ou valores de cor para gerar a tabela de consulta 3D para executar escalabilidade de gama de cores.
[0007] Em um exemplo, essa revelação é dirigida a um método de decodificar dados de vídeo, o método compreendendo determinar um valor de divisão de base para uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores; determinar um valor de divisão de luma para uma componente luma da tabela de consulta 3D; e gerar a tabela de consulta 3D com divisão mais grosseira para componentes croma e divisão mais fina para a componente luma, incluindo dividir cada da componente luma, uma primeira componente croma e uma segunda componente croma da tabela de consulta 3D em um primeiro número de octantes com base no valor de divisão de base, e dividir cada do primeiro número de octantes da componente luma em um segundo número de octantes com base no valor de divisão de luma. O método compreende ainda decodificar dados residuais de blocos de vídeo dos dados de vídeo; e reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos um quadro de referência gerado usando tabela de consulta 3D.
[0008] Em outro exemplo, essa revelação é dirigida a um método de codificar dados de vídeo, o método compreendendo gerar uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores com divisão mais grosseira para componentes croma e divisão mais fina para uma componente luma, incluindo dividir cada da componente luma, uma primeira componente croma e uma segunda componente croma da tabela de consulta 3D em um primeiro número de octantes com base em um valor de divisão de luma para a componente luma da tabela de consulta 3D. o método compreende ainda predizer blocos de vídeo dos dados de vídeo com base pelo menos em um quadro de referência usando a tabela de consulta 3D; e codificar dados residuais dos blocos de vídeo em um fluxo de bits.
[0009] Em um exemplo adicional, essa revelação é dirigida a um dispositivo de decodificação de vídeo compreendendo uma memória configurada para armazenar dados de vídeo; e um ou mais processadores em comunicação com a memória. Um ou mais processadores são configurados para determinar um valor de divisão de base para uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores dos dados de vídeo, determinar um valor de divisão de luma para uma componente luma da tabela de consulta 3D, e gerar a tabela de consulta 3D com divisão mais grosseira para componentes croma e divisão mais fina para a componente luma, um ou mais processadores configurados para dividir cada da componente luma, uma primeira componente croma e uma segunda componente croma da tabela de consulta 3D em um primeiro número de octantes com base no valor de divisão de base, e dividir cada do primeiro número de octantes da componente luma em um segundo número de octantes com base no valor de divisão de luma. Um ou mais processadores são adicionalmente configurados para decodificar dados residuais de blocos de vídeo dos dados de vídeo, e reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos um quadro de referência gerado usando a tabela de consulta 3D.
[0010] Em outro exemplo, essa revelação é dirigida a um dispositivo de codificar dados de vídeo compreendendo uma memória configurada para armazenar dados de vídeo; e um ou mais processadores em comunicação com a memória. Um ou mais processadores são configurados para gerar uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores com divisão mais grosseira para componentes croma e divisão mais fina para uma componente luma, incluindo dividir cada da componente luma, um ou mais processadores configurados para dividir cada da componente luma, uma primeira componente croma e uma segunda componente croma da tabela de consulta 3D em um primeiro número de octantes com base em um valor de divisão de base e dividir cada do primeiro número de octantes da componente luma em um segundo número de octantes com base em um valor de divisão de luma para a componente luma da tabela de consulta 3D. Um ou mais processadores são adicionalmente configurados para predizer blocos de vídeo dos dados de vídeo com base pelo menos em um quadro de referência usando a tabela de consulta 3D; e codificar dados residuais dos blocos de vídeo em um fluxo de bits.
[0011] Em um exemplo adicional, essa revelação é dirigida a um dispositivo de decodificação de vídeo compreendendo meio para determinar um valor de divisão de base para uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores; meio para determinar um valor de divisão de luma para uma componente luma da tabela de consulta 3D; e meio para gerar a tabela de consulta 3D com divisão mais grosseira para componentes croma e divisão mais fina para a componente luma, incluindo meio para dividir cada da componente luma, uma primeira componente croma e uma segunda componente croma da tabela de consulta 3D em um primeiro número de octantes com base no valor de divisão de base, e meio para dividir cada do primeiro número de octantes da componente luma em um segundo número de octantes com base no valor de divisão de luma. O dispositivo de decodificação de vídeo compreende ainda meios para decodificar dados residuais de blocos de vídeo dos dados de vídeo; e meio para reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos um quadro de referência gerado usando a tabela de consulta 3D.
[0012] Em um exemplo adicional, essa revelação é dirigida a uma mídia de armazenagem legível em computador que armazena instruções para decodificar dados de vídeo que, quando executados, fazem com que um ou mais processadores determine um valor de divisão de base para uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores; determine um valor de divisão de luma para uma componente luma da tabela de consulta 3D; e gere a tabela de consulta 3D com divisão mais grosseira para componentes croma e divisão mais fina para a componente luma, as instruções fazem com que um ou mais processadores dividam cada da componente luma, uma primeira componente croma e uma segunda componente croma da tabela de consulta 3D em um primeiro número de octantes com base no valor de divisão de base, e divida cada do primeiro número de octantes da componente luma em um segundo número de octantes com base no valor de divisão de luma. As instruções fazem com que ainda um ou mais processadores decodifique dados residuais de blocos de vídeo dos dados de vídeo; e reconstrua os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos uma imagem de referência gerada usando a tabela de consulta 3D.
[0013] Em outro exemplo, essa revelação é dirigida a um método de decodificar dados de vídeo, o método compreendendo determinar um número de octantes para cada de três componentes de cor de uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores; para cada dos octantes para cada das componentes de cor, decodificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear de valores de cor na tabela de consulta 3D usada para converter dados de cor em uma primeira gama de cores para uma camada mais baixa dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo; e gerar a tabela de consulta 3D com base no número de octantes para cada das componentes de cor e valores de cor associados aos coeficientes de mapeamento de cor para cada dos octantes. O método compreende ainda decodificar dados residuais de blocos de vídeo dos dados de vídeo; e reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos um quadro de referência gerado usando a tabela de consulta 3D.
[0014] Em um exemplo adicional, essa revelação é dirigida a um método de codificar dados de vídeo, o método compreendendo gerar uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores com base em um número de octantes para cada de três componentes de cor e valores de cor para cada dos octantes; e para cada dos octantes para cada das componentes de cor, codificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D usada para converter dados de cores em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo. O método compreende ainda predizer blocos de vídeo dos dados de vídeo com base pelo menos em um quadro de referência gerado usando a tabela de consulta 3D; e codificar dados residuais dos blocos de vídeo em um fluxo de bits.
[0015] Em um exemplo adicional, essa revelação é dirigida a um dispositivo de decodificação de vídeo compreendendo uma memória configurada para armazenar dados de vídeo; e um ou mais processadores em comunicação com a memória. Um ou mais processadores são configurados para determinar um número de octantes para cada de três componentes de cor de uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores dos dados de vídeo, para cada dos octantes para cada das componentes de cor, decodificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear de valores de cor na tabela de consulta 3D usada para converter dados de cores em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo, e gerar a tabela de consulta 3D com base no número de octantes para cada das componentes de cor, e valores de cor associados aos coeficientes de mapeamento de cores para cada dos octantes. Um ou mais processadores são configurados adicionalmente para decodificar dados residuais de blocos de vídeo dos dados de vídeo, e reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos um quadro de referência gerado usando a tabela de consulta 3D.
[0016] Em um exemplo adicional, essa revelação é dirigida a um dispositivo de codificação de vídeo compreendendo uma memória configurada para armazenar dados de vídeo; e um ou mais processadores em comunicação com a memória. Um ou mais processadores são configurados para gerar uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores dos dados de vídeo com base em um número de octantes para cada de três componentes de cores e valores de cores para cada dos octantes; e para cada dos octantes para cada das componentes de cores, codificar coeficientes de mapeamento de cores para uma função de mapeamento de cor linear dos valores de cores na tabela de consulta 3D usada para converter dados de cores em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo. Um ou mais processadores são adicionalmente configurados para predizer blocos de vídeo dos dados de vídeo com base pelo menos em um quadro de referência gerado usando a tabela de consulta 3D, e codificar dados residuais dos blocos de vídeo em um fluxo de bits.
[0017] Em outro exemplo, essa revelação é dirigida a um dispositivo de decodificação de vídeo compreendendo meio para determinar um número de octantes para cada de três componentes de cores de uma tabela de consulta tridimensional 3D) para escalabilidade de gama de cores; meios para decodificar, para cada dos octantes para cada das componentes de cores, coeficientes de mapeamento de cores para uma função de mapeamento de cor linear de valores de cor na tabela de consulta 3D usada para converter dados de cor em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo; e meio para gerar a tabela de consulta 3D com base o número de octantes para cada das componentes de cores e valores de cores associados aos coeficientes de mapeamento de cor para cada dos octantes. O dispositivo de decodificação de vídeo compreende ainda meios para decodificar dados residuais de blocos de vídeo dos dados de vídeo; e meio para reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos um quadro de referência gerado usando a tabela de consulta 3D.
[0018] Em um exemplo adicional, essa revelação é dirigida a uma mídia de armazenagem legível em computador que armazena instruções para decodificar dados de vídeo que, quando executados, fazem com que um ou mais processadores determine um número de octantes para cada de três componentes de cores de uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores; para cada dos octantes para cada das componentes de cores, decodificar coeficientes de mapeamento de cores para uma função de mapeamento de cor linear de valores de cor na tabela de consulta 3D usada para converter dados de cores em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo; e gerar a tabela de consulta 3D com base no número de octantes para cada das componentes de cores e valores de cor associados aos coeficientes de mapeamento de cor para cada dos octantes. As instruções fazem com que adicionalmente um ou mais processadores decodifiquem dados residuais de blocos de vídeo dos dados de vídeo; e reconstruam os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos um quadro de referência gerado usando a tabela de consulta 3D.
[0019] Os detalhes de um ou mais exemplos 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 e desenhos e a partir das reivindicações.
Breve descrição dos desenhos
[0020] A figura 1 é um diagrama de blocos ilustrando um sistema de codificação e decodificação de vídeo de exemplo que pode utilizar técnicas para tabela de consulta 3D com base em escalabilidade de gama de cores.
[0021] A figura 2 é uma ilustração conceptual mostrando um exemplo de escalabilidade em três dimensões diferentes.
[0022] A figura 3 é uma ilustração conceptual mostrando uma estrutura de exemplo de um fluxo de bits de codificação de vídeo escalonável.
[0023] A figura 4 é uma ilustração conceptual mostrando unidades de acesso de codificação de vídeo escalonável em ordem de fluxo de bits.
[0024] A figura 5 é um diagrama de blocos ilustrando uma extensão de codificação de vídeo escalonável de exemplo para o codificador HEVC (SHVC).
[0025] A figura 6 é um gráfico ilustrando uma gama de cores de exemplo de uma sequencia de vídeo de amostra.
[0026] A figura 7 é um diagrama de blocos ilustrando conversão de gama de cores de alta definição (HD) BT.709 para gama de cores de definição ultraelevada (UHD) BT.2020.
[0027] A figura 8 é um diagrama de blocos ilustrando um codificador escalonável de gama de cores incluindo uma unidade de processamento de predição de cores que pode gerar um quadro de referência inter-camadas quando uma gama de cores de camada base e uma gama de cores de camada de aperfeiçoamento são diferentes.
[0028] As figuras 9(a) e 9(b) são ilustrações conceptuais mostrando uma tabela de consulta 3D de exemplo para escalabilidade de gama de cores.
[0029] A figura 10 é uma ilustração conceptual mostrando interpolação tri-linear com uma tabela de consulta 3D para escalabilidade de gama de cores.
[0030] A figura 11 é uma ilustração conceptual mostrando interpolação tetraédrica com uma tabela de consulta 3D para escalabilidade de gama de cores.
[0031] A figura 12 é uma ilustração conceptual mostrando seis exemplos de tetraedros usados para abranger um ponto P de uma tabela de consulta 3D a ser interpolada usando interpolação tetraédrica.
[0032] A figura 13 é uma ilustração conceptual mostrando uma tabela de consulta 3D de exemplo com uma componente luma independentemente dividida e componentes croma conjuntamente divididas.
[0033] A figura 14 é um diagrama de blocos ilustrando um exemplo de um codificador de vídeo que pode implementar técnicas para usar tabela de consulta 3D com base em escalabilidade de gama de cores em codificação de vídeo de multicamadas.
[0034] A figura 15 é um diagrama de blocos ilustrando um exemplo de um decodificador de vídeo que pode implementar técnicas para usar tabela de consulta 3D com base em escalabilidade de gama de cores em codificação de vídeo de multicamadas.
[0035] A figura 16 é um fluxograma ilustrando uma operação de exemplo de codificar informações de divisão para pelo menos uma das componentes de cores de uma tabela de consulta 3D.
[0036] A figura 17 é um fluxograma ilustrando uma operação de exemplo de decodificar informações de divisão para pelo menos uma das componentes de cores de uma tabela de consulta 3D.
[0037] A figura 18 é um fluxograma ilustrando uma operação de exemplo de codificar valores de cores para cada dos octantes para cada das componentes de cor de uma tabela de consulta 3D.
[0038] A figura 19 é um fluxograma ilustrando uma operação de exemplo de decodificar valores de cores para cada dos octantes para cada das componentes de cores de uma tabela de consulta 3D.
DESCRIÇÃO DETALHADA
[0039] A presente revelação descreve técnicas para predição de cor tridimensional (3D) para escalabilidade de gama de cores em codificação de vídeo de multicamadas. A codificação de vídeo de multicamadas pode estar de acordo com o padrão de Codificação de vídeo de eficiência elevada (HEVC), incluindo qualquer de uma extensão de codificação de vídeo escalonável, uma extensão de codificação de vídeo de múltiplas vistas, uma extensão de codificação de vídeo 3D (isto é, codificação de vídeo de múltiplas vistas mais profundidade), ou outras extensões de codificação de vídeo de multicamadas para HEVC. As técnicas podem ser usadas por codificadores de vídeo e/ou decodificadores de vídeo para gerar quadros de referência inter-camada quando uma gama de cores para uma camada inferior de dados de vídeo é diferente de uma gama de cores para uma camada mais elevada dos dados de vídeo. Em alguns exemplos, as técnicas também podem ser usadas quando uma profundidade de bits da camada inferior de dados de vídeo é diferente de uma profundidade de bits para a camada mais elevada dos dados de vídeo.
[0040] Uma gama de cores compreende uma gama completa de cores que podem ser reproduzidas para uma imagem, por exemplo, em um quadro, fatia, bloco ou camada de dados de vídeo. Convencionalmente, em codificação de vídeo de multicamadas, uma camada inferior de dados de vídeo (Por exemplo, uma camada de base) e uma camada mais elevada dos dados de vídeo (Por exemplo, uma camada de aperfeiçoamento) incluem dados de cores na mesma gama de cores, por exemplo, gama de cores de alta definição (HD) BT.709. nesse caso, um codificador de vídeo e/ou decodificador de vídeo podem gerar quadros de referência inter-camadas para a camada mais elevada dos dados de vídeo como versões amostradas ascendentemente de quadros de referência co-localizadas para a camada inferior dos dados de vídeo.
[0041] Em alguns exemplos, entretanto, uma camada inferior de dados de vídeo pode incluir dados de cores em uma primeira gama de cores, por exemplo BT.709, e uma camada mais elevada dos dados de vídeo pode incluir dados de cores em uma segunda gama de cores diferente, por exemplo, gama de cores de definição ultraelevada (UHD) BT.2020. Nesse exemplo, para gerar quadros de referência de intra-camada para a camada mais elevada dos dados de vídeo, um codificador de vídeo e/ou decodificador de vídeo deve primeiramente executar predição de cor para converter os dados de cores de um quadro de referência na primeira gama de cores para a camada inferior dos dados de vídeo na segunda gama de cores para a camada mais elevada dos dados de vídeo.
[0042] O codificador de vídeo e/ou decodificador de vídeo pode executar predição de cor usando uma tabela de consulta 3D para escalabilidade de gama de cores. Em alguns exemplos, uma tabela de consulta 3D separada pode ser gerada para cada das componentes de cores, isto é, uma componente luma (Y), uma primeira componente croma (U) e uma segunda componente croma (V). cada das tabelas de consulta 3D inclui uma dimensão de luma (Y), uma primeira dimensão de croma (U) e uma segunda dimensão de croma (V), e é indexada usando os três componentes de cores independentes (Y, U, V).
[0043] Convencionalmente, as tabelas de consulta 3D são sempre simétricas de modo que as tabelas de consulta 3D têm um mesmo tamanho para a componente luma, a primeira componente croma e a segunda componente croma. Além disso, convencionalmente, as tabelas de consulta 3D são sempre equilibradas de modo que um tamanho de cada dimensão das tabelas de consulta 3D seja sempre igual. Isso pode resultar em tamanhos de tabela grande com elevada complexidade computacional e custos de sinalização elevados. Por exemplo, tamanhos de tabela podem ser até 9x9x9 ou 17x17x17.
[0044] No pedido de patente US no. 14/512.177 (no. Do dossiê do procurador 1212-712US01/140193), depositado em 10 de outubro de 2014, técnicas são descritas que permitem a um codificador de vídeo e/ou decodificador de vídeo gerar uma tabela de consulta 3D assimétrica e/ou desequilibrada de modo que a tabela de consulta 3D tenha um tamanho que seja diferente para a componente luma do que para a primeira componente croma e segunda componente croma. O codificador de vídeo e/ou decodificador de vídeo pode gerar essa tabela de consulta 3D assimétrica e/ou desequilibrada por dividir a componente luma em um número diferente de segmentos do que as primeira e segunda componentes croma. Nesse exemplo, tamanhos de tabela podem ser até 8x2x2.
[0045] As técnicas dessa revelação são dirigidas à sinalização de informações usadas para gerar tabelas de consulta 3D para escalabilidade de gama de cores. De acordo com as técnicas, um codificador de vídeo pode codificar informações de divisão e/ou valores de cores de uma tabela de consulta 3D gerada para escalabilidade de gama de cores. Um decodificador de vídeo pode decodificar as informações de divisão e/ou valores de cores para gerar a tabela de consulta 3D para executar escalabilidade de gama de cores. As técnicas descritas nessa revelação podem ser particularmente úteis na sinalização das informações usadas para gerar tabelas de consulta 3D assimétricas e/ou desequilibradas.
[0046] Em um exemplo das técnicas reveladas, um decodificador de vídeo e/ou codificador de vídeo pode gerar uma tabela de consulta 3D com uma divisão mais grosseira para primeira e segunda componentes croma e divisão mais fina para uma componente luma por dividir cada das componentes de cores em um número de octantes de acordo com um valor de divisão de base, por exemplo, uma profundidade de divisão máxima para a tabela de consulta 3D, e então dividir adicionalmente cada dos octantes da componente luma com base em um valor de divisão de luma. Desse modo, as componentes croma da tabela de consulta 3D são divididas em um número menor ou menos octantes (isto é, dividido mais grosseiro) e a componente luma da tabela de consulta 3D é dividida em um número maior ou mais octantes (isto é, dividida mais fino).
[0047] Em um exemplo, o valor de divisão de luma pode ser sinalizado em um fluxo de bits pelo codificador de vídeo para o decodificador de vídeo. Em outros exemplos, o valor de divisão de base pode ser também sinalizado no fluxo de bits pelo codificador de vídeo para o decodificador de vídeo. Em outros casos, o valor de divisão de luma pode ser derivado tanto pelo codificador de vídeo como pelo decodificador de vídeo e/ou o valor de divisão de base pode ser um valor predefinido conhecido tanto no codificador de vídeo como no decodificador de vídeo.
[0048] Como exemplo, o valor de divisão de base é igual a 1 de modo que cada das primeira componentes croma, segunda croma e cor de luma é dividida em um único octante, e o valor de divisão de luma é igual a 4 de modo que o octante único da componente luma é dividido em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 4x1x1. Como outro exemplo, o valor de divisão de base é igual a 2 de modo que cada das primeira componente croma, segunda croma e cor de luma é dividida em dois octantes, e o valor de divisão de luma é igual a 4 de modo que cada dos dois octantes da componente luma é dividido em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 8x2x2. Como pode ser visto, um valor de divisão inferior resulta em uma divisão mais grosseira (isto é, um número menor de octantes) para uma componente de cor.
[0049] De acordo com as técnicas, cada das componentes de cores pode ser dividida em um ou mais octantes com base em um ou mais do valor de divisão de base ou o valor de divisão de luma. Nessa revelação, o termo “octante” é definido como uma região tridimensional que inclui oito vértices. Nessa revelação, os termos “divisão”, “octante”, “segmento” e “cuboide”, podem ser usados de modo intercambiável para descrever as regiões divididas das componentes de cor da tabela de consulta 3D.
[0050] Além disso, com base pelo menos em uma entre a primeiro ou segunda componentes croma da tabela de consulta 3D sendo dividida em mais de um octante, isto é, o valor de divisão de base sendo maior que um, o codificador de vídeo pode sinalizar um limite de divisão para uma das componentes croma para o decodificador de vídeo. O limite de divisão define uma divisão irregular de uma das componentes croma em dois ou mais octantes. Em outras palavras, uma ou ambas as componentes croma podem não ser divididas em dois ou mais octantes uniformes ou igualmente dimensionados. Nesse caso, para uma dada das componentes croma, pelo menos um dos octantes tem um tamanho diferente do que um ou mais outros octantes. De acordo com as técnicas dessa revelação, o codificador de vídeo somente sinaliza o limite de divisão com base na condição de que uma das componentes croma é dividida em mais de um octante. De outro modo o limite de divisão é desnecessário e não é sinalizado para o decodificador de vídeo.
[0051] Em outro exemplo das técnicas reveladas, um codificador de vídeo e/ou um decodificador de vídeo pode gerar uma tabela de consulta 3D com base em um número de octantes para cada das componentes de cores de luma, primeiro croma, e segundo croma, e valores de cor para cada dos octantes. Como descrito acima, em alguns casos, o número de octantes para pelo menos uma das componentes de cores da tabela de consulta 3D pode ser também sinalizado pelo codificador de vídeo para o decodificador de vídeo. Para que o decodificador de vídeo determine os valores de cores na tabela de consulta 3D, coeficientes de mapeamento de cores para uma função de mapeamento de cor linear dos valores de cores na tabela de consulta 3D são sinalizados pelo codificador de vídeo para o decodificador de vídeo. A função de mapeamento de cor linear é usada para converter dados de cores em uma primeira gama de cores para uma camada inferior de dados de vídeo em uma segunda gama de cores para uma camada mais elevada de dados de vídeo, e os coeficientes de mapeamento de cores são fatores de ponderação entre componentes de cor das camadas mais baixa e mais elevada dos dados de vídeo. Para cada das componentes de cores, um dos coeficientes de mapeamento de cores pode ser um coeficiente principal que define um fator de ponderação entre a mesma componente de cor das camadas mais baixa e mais elevada dos dados de vídeo.
[0052] Os coeficientes de mapeamento de cores da função de mapeamento de cor linear são derivados como valores de ponto flutuante. Antes de sinalizar os coeficientes de mapeamento de cores em um fluxo de bits, os valores de ponto flutuante podem ser convertidos em valores inteiros. Embora valores inteiros possam ser menos precisos que valores de ponto flutuante, os valores inteiros são mais fáceis de sinalizar e operações de número inteiro são menos computacionalmente caras do que operações de ponto flutuante. A conversão pode usar uma profundidade de bit para os valores inteiros com base pelo menos em uma de uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D. além disso, os valores dos coeficientes de mapeamento de cores podem ser limitados para estar compreendido em uma dada faixa com base em um valor fixo predefinido ou um valor dependente de pelo menos uma de uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D.
[0053] Um ou mais dos coeficientes de mapeamento de cores pode ser predito de modo que valores residuais entre valores originais dos coeficientes de mapeamento de cores e valores preditos dos coeficientes de mapeamento de cores são codificados no fluxo de bits. Por exemplo, para um primeiro octante para cada das componentes de cores, os coeficientes de mapeamento de cores da função de mapeamento de cor linear podem ser preditos com base em valores fixos predefinidos. Em um exemplo, um coeficiente principal da função de mapeamento de cor linear pode ser predito com base em um valor predito igual a um valor não zero predefinido, e quaisquer coeficientes de mapeamento de cor restantes podem ser preditos com base em um valor predito igual a zero. Nesse exemplo, os coeficientes de mapeamento de cores de quaisquer octantes restantes para cada das componentes de cores podem ser preditos com base em valores preditos de pelo menos um octante anterior, como o primeiro octante. Em alguns casos, os valores residuais dos coeficientes de mapeamento de cores podem ser quantizados com base em um valor de quantização determinado. O codificador de vídeo pode sinalizar o valor de quantização determinado para o decodificador de vídeo para executar quantização inversa a fim de decodificar adequadamente os coeficientes de mapeamento de cores.
[0054] Padrões de codificação de vídeo incluem ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 ou ISO/IEC MPEG-2 visual, ITU-T H.263, ISO/IEC MPEG-4 Visual e ITU-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC), incluindo suas extensões de Codificação de vídeo escalonável (SVC) e Codificação de vídeo de múltiplas vistas (MVC).
[0055] O design de um novo padrão de codificação de vídeo, a saber HEVC, foi finalizado pelo Joint Collaboration Team on Video coding (JCT-VC) de ITUT- Video Coding Experts Group (VCEG) e ISO/IEC Motion Picture Experts Group (MPEG). Uma especificação de minuta de HEVC mencionada como Minuta de trabalho HEVC 10 (WD10, Bross e outros, “High efficiency vídeo coding (HEVC) text specification draft 10 (para FDIS & Last call), “Joint Collaborative Team on vídeo coding (JCT-VC) de ITU-T SG16 WP3 e ISO/IEC JTC1/SC9/WG11, 12a reunião: Genebra, CH, 14 - 23 de janeiro de 2013, JCTVC-L1003v34, é disponível de http://phenix.int- evry.fr/jct/docenduser/documents/12Geneva/wg11/JCTVC- L1003-v34.zip. O padrão HEVC finalizado é mencionado como uma versão HEVC 1.
[0056] Um relatório de defeito, Wang e outros, “High efficiency vídeo coding (HEVc) defect. Report,” Joint Collaborative Team on vídeo coding (JCT-VC) de ITU-T SG16 WP3 e ISO/IEC JTC1/SC29/WG11, 14a reunião: Viena, AT, 25 de julho - 2 de agosto de 2013, JCTVC-N1003v1, é disponível de: http://phenix.int- evry.fr/jct/docenduser/documents/14Vienna/wg11/JCTVC- N1003-v1.zip. O padrão HEVC finalizado é publicado como ITU-T H.265, série H: Sistemas audiovisuais e de multimídia, infraestrutura de serviços audiovisuais - codificação de vídeo em movimento, codificação de vídeo de alta eficiência, setor de Padronização de telecomunicação da International Telecommunication Union (ITU), abril de 2013.
[0057] A extensão de múltiplas vistas para HEVC (MV-HEVC) e outra extensão HEVC para codificação de vídeo 3D mais avançada (3D-HEVC) estão sendo desenvolvidas pelo JCT-3V. Uma especificação de minuta de MV-HEVC mencionada como Minuta de trabalho MV-HEVC 5 (WD5), Tech e outros, “MV-HEVC Draft text 5”, “Joint Collaborative Team on 3D vídeo coding extension development (JCT-3V) de ITU-T SG16 WP3 e ISO/IEC JTC1/SC29/WG11, 5a reunião: Viena, AT, 27 de julho - 2 de agosto de 2013, JCT3V-E1004v6, é disponível de http://phenix.int- evry.fr/jct/docenduser/documents/5Vienna/wg11/JCT3V- E1004-v6.zip. Uma especificação de minuta de 3D-HEVC mencionada como Minuta de trabalho 3D-HEVC 1 (WD1), e descrita em Tech e outros, “3D-HEVC Draft text 1”, “Joint Collaborative Team on 3D vídeo coding extension development (JCT-3V) de ITU-T SG16 WP3 e ISO/IEC JTC1/SC29/WG11, 5a reunião: Viena, AT, 27 de julho - 2 de agosto de 2013, JCT3V-E1001v3, é disponível de http://phenix.it- sudparis.eu/jct2/docenduser/documents/5Vienna/wg11/JCT3V -E1001-v3.zip.
[0058] A extensão escalonável para HEVC (SHVC) está sendo desenvolvida pelo JCT-VC. Uma especificação de minuta de SHVC mencionada como Minuta de trabalho SHVC 5 (WD3), Chen e outros, “SHVC Draft 3”, “Joint Collaborative Team on 3D vídeo coding (JCT-VC) de ITU-T SG16 WP3 e ISO/IEC JTC1/SC29/WG11, 14a reunião: Viena, AT, 27 de julho - 2 de agosto de 2013, JCTVC-N1008v3, é disponível de http://phenix.int- evry.fr/jct/docenduser/documents/14Vienna/wg11/JCTVC- N1008-v3.zip.
[0059] A figura 1 é um diagrama de blocos ilustrando um sistema de codificação e decodificação de vídeo de exemplo, 10, que pode utilizar técnicas para escalabilidade de gama de cores baseada em tabela de consulta 3D. Como mostrado na figura 1, o sistema 10 inclui um dispositivo de fonte 12 que fornece dados de vídeo codificados a serem decodificados em um momento posterior por um dispositivo de destino 14. Em particular, o dispositivo de fonte 12 fornece os dados de vídeo para o dispositivo de destino 14 através de uma mídia legível em computador 16. O dispositivo de fonte 12 e dispositivo de destino 14 podem compreender qualquer de uma ampla gama de dispositivos, incluindo computadores de mesa, computadores de notebook (isto é, laptop), computadores tablet, conversores de sinais de frequência, aparelhos telefônicos como os denominados “smart” phones, os denominados “smart” pads, televisões, câmeras, dispositivos de exibição, tocadores de mídia digital, consoles de videogame, dispositivo de streaming de vídeo, ou similares. Em alguns casos, o dispositivo de fonte 12 e o dispositivo de destino 14 podem ser equipados para comunicação sem fio.
[0060] O dispositivo de destino 14 pode receber os dados de vídeo codificados a serem decodificados através da mídia legível em computador 16. A mídia legível em computador 16 pode compreender qualquer tipo de mídia ou dispositivo capaz de mover os dados de vídeo codificados a partir do dispositivo de fonte 12 para o dispositivo de destino 14. Em um exemplo, a mídia legível em computador 16 pode compreender uma mídia de comunicação para permitir que o dispositivo de fonte 12 transmita dados de vídeo codificados diretamente para o dispositivo de destino 14 em tempo real. Os dados de vídeo codificados podem ser modulados de acordo com um padrão de comunicação, como um protocolo de comunicação sem fio, e transmitidos para o dispositivo de destino 14. A mídia de comunicação pode compreender qualquer mídia de comunicação sem fio ou cabeada, como um espectro de radiofrequência (RF) ou uma ou ais linhas de transmissão física. A mídia de comunicação pode fazer parte de uma rede baseada em pacote, como uma rede de área local, uma rede de área remota, ou uma rede global como a Internet. A mídia de comunicação pode incluir roteadores, comutadores, estações base, ou qualquer outro equipamento que possa ser útil para facilitar comunicação a partir do dispositivo de fonte 12 para o dispositivo de destino 14.
[0061] Em alguns exemplos, dados codificados podem ser transmitidos a partir da interface de saída 22 para um dispositivo de armazenagem. Similarmente, dados codificados podem ser acessados a partir do dispositivo de armazenagem pela interface de entrada. O dispositivo de armazenagem pode incluir qualquer de uma variedade de mídia de armazenagem de dados acessados localmente ou distribuídos como uma unidade rígida, discos Blu-ray, DVDs, CD-ROMs, memória flash, memória volátil ou não volátil, ou qualquer outra mídia de armazenagem digital adequada para armazenar dados de vídeo codificados. Em um exemplo adicional, o dispositivo de armazenagem pode corresponder a um servidor de arquivo ou outro dispositivo de armazenagem intermediário que possa armazenar o vídeo codificado gerado pelo dispositivo de fonte 12. O dispositivo de destino 14 pode acessar dados de vídeo armazenados a partir do dispositivo de armazenagem através de streaming ou download. O servidor de arquivo pode ser qualquer tipo de servidor capaz de armazenar dados de vídeo codificados e transmitir aqueles dados de vídeo codificados para o dispositivo de destino 14. Servidores de arquivo de exemplo incluem um servidor de rede (por exemplo, para um website), um servidor FTP, dispositivos de armazenagem ligados em rede (NAS), ou uma unidade de disco local. O dispositivo de destino 14 pode acessar os dados de vídeo codificados através de qualquer conexão de dados padrão, incluindo uma conexão de internet. Isso pode incluir um canal sem fio (por exemplo, uma conexão Wi-Fi), uma conexão cabeada (por exemplo, DSL, modem de cabo, etc.), ou uma combinação de ambos que seja adequada 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 dispositivo de armazenagem pode ser uma transmissão streaming, uma transmissão de download ou uma combinação das mesmas.
[0062] As técnicas dessa revelação não são necessariamente limitadas a aplicações ou definições sem fio. As técnicas podem ser aplicadas a codificação de vídeo em suporte de quaisquer 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 de streaming de internet, como streaming adaptável dinâmico sobre HTTP (DASH), vídeo digital que é codificado sobre uma mídia de armazenagem de dados, decodificação de vídeo digital armazenado em uma mídia de armazenagem de dados, ou outras aplicações. Em alguns exemplos, o sistema 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.
[0063] No exemplo da figura 1, o dispositivo de fonte 12 inclui a fonte de vídeo 18, codificador de vídeo 20, e interface de saída 22. O dispositivo de destino 14 inclui interface de entrada 28, decodificador de vídeo 30 e dispositivo de exibição 32. De acordo com essa revelação, o codificador de vídeo 20 do dispositivo de fonte 12 pode ser configurado para aplicar as técnicas para processar dados de vídeo em paralelo. Em outros exemplos, um dispositivo de fonte e um dispositivo de destino podem incluir outros componentes ou disposições. Por exemplo, o dispositivo de fonte 12 pode receber dados de vídeo a partir de uma fonte de vídeo externa 18, como uma câmera externa. De modo semelhante, o dispositivo de destino 14 pode interferir em um dispositivo de exibição externo, ao invés de incluir um dispositivo de exibição integrado.
[0064] O sistema ilustrado 10 da figura 1 é meramente um exemplo. Técnicas para processar dados de vídeo em paralelo podem ser realizados por qualquer dispositivo de codificação e/ou decodificação de vídeo digital. Embora em geral as técnicas dessa revelação sejam realizadas por um dispositivo de codificação de vídeo, as técnicas também podem ser realizadas por um codificador/decodificador de vídeo, tipicamente mencionado como um “CODEC.” Além disso, as técnicas dessa revelação podem ser também realizadas por um pré-processador de vídeo. O dispositivo de fonte 12 e dispositivo de destino 14 são meramente exemplos de tais dispositivos de codificação nos quais o dispositivo de fonte 12 gera dados de vídeo codificados para transmissão para o dispositivo de destino 14. Em alguns exemplos, os dispositivos 12, 14 podem operar em um modo substancialmente simétrico de modo que cada dos dispositivos 12, 14 inclua componentes de codificação e decodificação de vídeo. Consequentemente, o sistema 10 pode suportar transmissão de vídeo simples ou duplex entre dispositivos de vídeo 12, 14, por exemplo, para streaming de vídeo, reprodução de vídeo, broadcasting de vídeo ou telefonia de vídeo.
[0065] A fonte de vídeo 18 do dispositivo de fonte 12 pode incluir um dispositivo de captura de vídeo, como uma câmera de vídeo, um arquivo de vídeo contendo vídeo anteriormente capturado, e/ou uma interface de alimentação de vídeo para receber vídeo a partir de um provedor de conteúdo de vídeo. Como alternativa adicional, a fonte de vídeo 18 pode gerar dados baseados em gráfico de computador como o vídeo de fonte, ou uma combinação de vídeo ao vivo, vídeo arquivado, e vídeo gerado por computador. Em alguns casos, se a fone de vídeo 18 for uma câmera de vídeo, o dispositivo de fonte 12 e dispositivo de destino 14 podem formar os denominados fones de câmera ou fones de vídeo. Como mencionado acima, entretanto, as técnicas descritas nessa revelação podem ser aplicáveis à codificação de vídeo em geral, e podem ser aplicadas a aplicações sem fio e/ou cabeadas. Em cada caso, o vídeo capturado, pré-capturado ou gerado por computador pode ser codificado pelo codificador de vídeo 20. As informações de vídeo codificado podem ser então transmitidas pela interface de saída 22 para sobre uma mídia legível em computador 16.
[0066] A mídia legível em computador 16 pode incluir mídia transiente, como um broadcast sem fio ou transmissão de rede cabeada, ou mídia de armazenagem (isto é, mídia de armazenagem não transitória) como um disco rígido, unidade flash, compact disc, digital vídeo disc, disco Blu-ray ou outra mídia legível em computador. Em alguns exemplos, um servidor de rede (não mostrado) pode receber dados de vídeo codificado a partir do dispositivo de fonte 12 e fornecer os dados de vídeo codificado para o dispositivo de destino 14, por exemplo, através de transmissão de rede. Similarmente, um dispositivo de computação de uma instalação de produção de mídia, como uma instalação de estampagem de disco, pode receber dados de vídeo codificado a partir do dispositivo de fonte 12 e produzir um disco contendo os dados de vídeo codificado. Portanto, a mídia legível em computador 16 pode ser entendida como incluindo uma ou mais mídias legíveis em computador de várias formas, em vários exemplos.
[0067] A interface de entrada 28 do dispositivo de destino 14 recebe informações a partir da mídia legível em computador 16. A informação da mídia legível em computador 16 pode incluir informação de sintaxe definida por codificador de vídeo 20, que também é usada pelo decodificador de vídeo 30, que inclui elementos de sintaxe que descrevem características e/ou processamento de blocos e outras unidades codificadas, por exemplo, grupos de imagens (GOPs). O dispositivo de exibição 32 exibe os dados de vídeo decodificados para um usuário, e pode compreender qualquer de uma variedade de dispositivos de exibição, como um tubo de raios de catodo (CRT), um display de cristal líquido (LCD), um display de plasma, um display de diodo de emissão de luz orgânico (OLED) ou outro tipo de dispositivo de exibição.
[0068] 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, software, hardware, firmware ou quaisquer combinações dos mesmos. Quando as técnicas são 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 executar as instruções em hardware usando um ou mais processadores para executar as técnicas dessa revelação. 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.
[0069] Em alguns exemplos, o codificador de vídeo 20 e decodificador de vídeo 30 operam de acordo com um padrão de compressão de vídeo, como ISO/IEC MPEG-4 visual e ITU-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC), incluindo uma extensão de Codificação de vídeo escalonável (SVC), extensão de Codificação de vídeo de múltiplas vistas (MVC), e extensão de vídeo tridimensional baseado em MVC (3DV). Em algumas instâncias, qualquer fluxo de bit se conformando a 3DV baseado em MVC sempre contém um subfluxo de bis que está em conformidade com um perfil MVC, por exemplo, perfil elevado estéreo. Além disso, há um esforço contínuo para gerar uma extensão de codificação 3DV ISO/IEC MPEG-4 para H.264/AVC, a saber 3DV baseado em AVC. Outros exemplos de padrões de codificação de vídeo incluem ITU-T H.261, ISO/IEC MPEG-1 visual, ITU-T H.262 ou ISO/IEC MPEG-2 visual, ITU-T H.263, ISO/IEC MPEG-4 visual e ITU-T H.264, ISO/IEC visual.
[0070] No exemplo da figura 1, o codificador de vídeo 20 e decodificador de vídeo 30 podem operar de acordo com o padrão de Codificação de vídeo de eficiência elevada (HEVC) finalizado pelo Joint Collaboration Team on Video coding (JCT-VC) de ITUT- Video Coding Experts Group (VCEG) e ISO/IEC Motion Picture Experts Group (MPEG). A especificação de minuta HEVC referenciada acima, é mencionada como Minuta de trabalho HEVC 10 (WD0), e a versão finalizada do padrão HEVC é mencionado como HEVC versão 1. O MV-HEVC e 3D-HEVC estão sendo desenvolvidos pelo JCT-3V. uma especificação de minuta recente de MV-HEVC é mencionada como MV-HEVC WD5, e uma especificação de minuta recente de 3D-HEVC é mencionada como 3D-HEVC WD1. O SHVC está sendo desenvolvido pelo JCT-VC. Uma especificação de minuta recente de SHVC é mencionada como SHVC WD3.
[0071] 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.
[0072] 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. Em um quadro monocromo ou um quadro que tenha três planos de cor separados, uma CTU pode compreender um bloco de árvore de codificação único e estruturas de sintaxe usadas para codificar as amostras do bloco 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.
[0073] Essa revelação pode usar o termo “unidade de vídeo” ou “bloco de vídeo” para se referir a um ou mais blocos de amostras e estruturas de sintaxe usadas para codificar amostras de um ou mais blocos de amostras. Tipos de exemplo de unidades de vídeo podem incluir CTUs, CUs, PUs, unidades de transformada (TUs) em HEVC, ou macroblocos, divisões de macrobloco, e etc. em outros padrões de codificação de vídeo.
[0074] 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 compreender um bloco de codificação de amostras de luma e dois blocos de codificação correspondentes de amostras de croma deum 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. Em um quadro monocromo ou quadro que tenha três planos de cores separadas, uma CU pode compreender um bloco de codificação único e estruturas de sintaxe usadas para codificar as amostras do bloco de codificação.
[0075] 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 compreender 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 predizer as amostras de bloco de predição. Em um quadro monocromo ou um quadro que tenha três planos de cores separadas, uma PU pode compreender um bloco de predição único e estruturas de sintaxe usadas para predizer 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.
[0076] 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.
[0077] 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 um ou mais quadros diferentes do quadro associado a PU. Inter predição pode ser inter predição unidirecional (isto é, uni-predição) ou inter predição bidirecional (isto é, bi-predição). Para executar uni-predição ou bi-predição, o codificador de vídeo 20 pode gerar uma primeira lista de quadro de referência (RefPicList0) e uma segunda lista de quadro de referência (RefPicList1) para uma fatia atual.
[0078] Cada das listas de quadro de referência pode incluir um ou mais quadros de referência. Ao usar uni- predição, o codificador de vídeo 20 pode buscar os quadros de referência em qualquer um ou ambos RefPicList0 e RefPicList 1 para determinar um local de referência em um quadro de referência. Além disso, ao usar uni-predição, o codificador de vídeo 20 pode gerar, com base pelo menos em parte nas amostras correspondendo ao local de referência, os blocos de amostra preditiva para a PU. Além disso, ao usar uni-predição, o codificador de vídeo 20 pode gerar um vetor de movimento único que indica um deslocamento espacial entre um bloco de predição da PU e o local de referência. Para indicar o deslocamento espacial entre um bloco de predição da PU e o local de referência, um vetor de movimento pode incluir um componente horizontal especificando um deslocamento horizontal entre o bloco de predição da PU e o local de referência e pode incluir um componente vertical especificando um deslocamento vertical entre o bloco de predição da PU e o local de referência.
[0079] Ao usar bi-predição para codificar uma PU, o codificador de vídeo 20 pode determinar um primeiro local de referência em um quadro de referência em RefPictList0 e um segundo local de referência em um quadro de referência em RefPIcList1. O codificador de vídeo 20 pode então gerar, com base pelo menos em parte em amostras correspondendo aos primeiro e segundo locais de referência, os blocos preditivos para a PU. Além disso, ao usar bi- predição para codificar a PU, o codificador de vídeo 20 pode gerar um primeiro movimento indicando um deslocamento espacial entre um bloco de amostra da PU e o primeiro local de referência e um segundo movimento indicando um deslocamento espacial entre o bloco de predição da PU e o segundo local de referência.
[0080] Após o codificador de vídeo 20 gerar blocos luma, Cb e Cr preditivos 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 de Cb para a CU. Cada amostra no bloco residual de Cb da CU pode indicar uma diferença entre uma amostra de Cb em um dos blocos de Cb preditivos da CU e uma amostra correspondente no bloco de codificação de Cb original da CU. O codificador de vídeo 20 pode também gerar um bloco residual de Cr para a CU. Cada amostra no bloco residual de Cr da CU pode indicar uma diferença entre uma amostra de Cr em um dos blocos de Cr preditivos da CU e uma amostra correspondente no bloco de codificação de Cr original da CU.
[0081] 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. Em um quadro monocromo ou um quadro que tem três planos de cores separados, uma TU pode compreender um bloco de transformada única 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.
[0082] O codificador de vídeo 20 pode aplicar uma ou mais transformadas em um bloco de transformada de luma de uma TU 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.
[0083] 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. Além disso, o codificador de vídeo 20 pode quantizar inverso os coeficientes de transformada e aplicar uma transformada inversa nos coeficientes de transformada para reconstruir blocos de transformada de TUs de CUs de um quadro. O codificador de vídeo 20 pode usar os blocos de transformada reconstruídos de TUs de uma CU e os blocos preditivos de PUs da CU para reconstruir blocos de codificação da CU. Por reconstruir os blocos de codificação de cada CU de um quadro, o codificador de vídeo 20 pode reconstruir o quadro. O codificador de vídeo 20 pode armazenar quadros reconstruídos em um buffer de quadro decodificado (DPB). O codificador de vídeo 20 pode usar quadros reconstruídos no DPB para Inter predição e intra predição.
[0084] 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. O codificador de vídeo 20 pode transmitir os elementos de sintaxe codificados por entropia em um fluxo de bits.
[0085] O codificador de vídeo 20 pode transmitir um fluxo de bits que inclui uma sequência de bits que forma uma representação de quadros codificados e dados associados. O fluxo de bits 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 bits.
[0086] 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. Um PPS é uma estrutura de sintaxe que pode conter elementos de sintaxe que se aplicam a zero ou mais quadros codificados inteiros. 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). Uma unidade NAL que encapsula uma fatia codificada pode ser mencionada aqui como uma unidade NAL de fatia codificada. Um RBSP para uma fatia codificada pode incluir um cabeçalho de fatia e dados de fatia.
[0087] O decodificador de vídeo 30 pode receber um fluxo de bits. Além disso, 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 podem ser genericamente recíprocos ao processo executado pelo codificador de vídeo 20. Por exemplo, o decodificador de vídeo 30 pode usar vetores de movimento de PUs para determinar blocos preditivos para as PUs de uma CU atual. O decodificador de vídeo 30 pode usar um vetor de movimento ou vetores de movimento de PUs para gerar blocos preditivos para as PUs.
[0088] Além disso, o decodificador de vídeo 30 pode quantizar inverso blocos de coeficiente associados a TUs da CU atual. O decodificador de vídeo 30 pode executar transformadas inversas nos blocos de coeficiente 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. O decodificador de vídeo 30 pode armazenar quadros decodificados e um buffer de quadro decodificado para transmissão e/ou para uso em decodificação de outros quadros.
[0089] Em MV-HEVC, 3D-HEVC, e SHVC, um codificador de vídeo pode gerar um fluxo de bits de multicamadas que compreende uma série de unidades de camada de abstração de rede (NAL). Unidades NAL diferentes do fluxo de bits podem ser associadas a camadas diferentes do fluxo de bits. Uma camada pode ser definida como um conjunto de unidades NAL de camada de codificação de vídeo (VCL) e unidades NAL não VCL associadas que têm o mesmo identificador de camada. Uma camada pode ser equivalente a uma vista em codificação de vídeo de múltiplas vistas. Em codificação de vídeo de múltiplas vistas, uma camada pode conter todos os componentes de vista da mesma camada com instâncias de tempo diferentes. Cada componente de vista pode ser um quadro codificado da cena de vídeo que pertence a uma vista específica em uma instância de tempo específica. Em codificação de vídeo 3D, uma camada pode conter todos os quadros de profundidade codificados de uma vista específica ou quadros de textura codificada de uma vista específica. Similarmente, no contexto de codificação de vídeo escalonável, uma camada corresponde tipicamente a quadros codificados tendo características de vídeo diferentes de quadros codificados em outras camadas. Tais características de vídeo incluem tipicamente resolução espacial e nível de qualidade (Razão de sinal para ruído). Em HEVC e suas extensões, escalabilidade temporal pode ser obtida em uma camada por definir um grupo de quadros com um nível temporal específico como uma subcamada.
[0090] Para cada camada respectiva do fluxo de bits, dados em uma camada inferior podem ser decodificados sem referência a dados em qualquer camada mais elevada. Em codificação de vídeo escalonável, por exemplo, dados em uma camada de base podem ser decodificados sem referência a dados em uma camada de aperfeiçoamento. Unidades NAL somente encapsulam dados de uma camada única. Em SHVC, uma vista pode ser mencionada como uma “camada base” se um decodificador de vídeo puder decodificar quadros na vista sem referência a dados de qualquer outra camada. A camada base pode se conformar à especificação de base HEVC. Desse modo, unidades NAL encapsulando dados da camada restante mais elevada do fluxo de bits podem ser removidos do fluxo de bits sem afetar a capacidade de decodificação de dados nas camadas restantes do fluxo de bits. Em MV-HEVC e 3D- HEVC, camadas mais elevadas podem incluir componentes de vista adicionais. Em SHVC, camadas mais elevadas podem incluir dados de aperfeiçoamento de relação de sinal para ruído (SNR), dados de aperfeiçoamento espacial, e/ou dados de aperfeiçoamento temporal.
[0091] Em alguns exemplos, dados em uma camada mais elevada podem ser decodificados com referência a dados em uma ou mais camadas inferiores. As camadas inferiores podem ser usadas como quadros de referência para comprimir a camada mais elevada usando predição inter-camada. Os dados das camadas inferiores podem ser amostrados ascendentemente para ter a mesma resolução que as camadas mais elevadas. Em geral, o codificador de vídeo 20 e decodificador de vídeo 30 podem executar predição inter- camada em um modo similar como inter predição descrita acima, exceto que uma ou mais camadas inferiores amostradas ascendentemente podem ser usadas como quadros de referência ao contrário de um ou mais quadros de vizinhança.
[0092] A figura 2 é uma ilustração conceptual mostrando um exemplo de escalabilidade em três dimensões diferentes. Em uma estrutura de codificação de vídeo escalonável, escalabilidades são habilitadas em três dimensões. No exemplo da figura 2, as escalabilidades são habilitadas em uma dimensão espacial (S) 100, uma dimensão temporal (T) 102, e uma relação de sinal para ruído (SNR) ou dimensão de qualidade (Q) 104. Na dimensão temporal 102, taxas de quadro com 7.5 Hz (T0), 15 Hz (T1) ou 30 Hz (T2), por exemplo, podem ser suportadas por escalabilidade temporal. Quando escalabilidade espacial é suportada, resoluções diferentes como QCIF (S0), CIF (S1) e 4CIF (S2), por exemplo, são habilitadas na dimensão espacial 100. Para cada resolução espacial específica e taxa de quadro, camadas SNR (Q1) podem ser adicionadas na dimensão SNR 104 para melhorar a qualidade de quadro.
[0093] Após o conteúdo de vídeo ter sido codificado em tal modo escalonável, uma ferramenta extratora pode ser usada para adaptar o conteúdo fornecido efetivo de acordo com exigências de aplicação, que são dependentes, por exemplo, nos clientes ou no canal de transmissão. No exemplo mostrado na figura 2, cada cúbico contém quadros com a mesma taxa de quadro (nível temporal), resolução espacial e camadas NSR. A melhor representação pode ser obtida por adicionar cubos (isto é, quadros) em qualquer das dimensões 100, 102 ou 104. Escalabilidade combinada é suportada quando há duas, três ou mesmo mais escalabilidades habilitadas.
[0094] Em padrões de codificação de vídeo escalonável, como a extensão SVC para H.264 ou SHVC, os quadros com a camada SNR e espacial mais baixa são compatíveis com o codec de vídeo de camada única, e os quadros no nível temporal mais baixo formam a camada base temporal, que pode ser aperfeiçoada com quadros em níveis temporais mais elevados. Além da camada base, várias camadas espaciais e/ou aperfeiçoamento SNR podem ser adicionadas para fornecer escalabilidades espaciais e/ou de qualidade. Cada camada de aperfeiçoamento de SNR ou espacial pode ser temporalmente escalonável, com a mesma estrutura de escalabilidade temporal que a camada base. Para uma camada de aperfeiçoamento de SNR ou espacial, a camada inferior em que depende pode ser mencionada como a camada base daquela camada de aperfeiçoamento de SNR ou espacial específico.
[0095] A figura 3 é uma ilustração conceptual mostrando uma estrutura de exemplo 110 de um fluxo de bits de codificação de vídeo escalonável. A estrutura de fluxo de bits 110 inclui uma camada 0 112 que inclui quadros ou fatais 10, P4 e P8, e uma camada 1 114 que inclui quadros ou fatias B2, B6 e B10. Além disso, a estrutura de fluxo de bits 110 inclui uma camada 2 116 e uma camada 3 117 que inclui, cada, quadros 0,2, 4, 6, 8 e 10, e uma camada 4 118 que inclui quadros 0 até 11.
[0096] Uma camada base tem a camada de qualidade e espacial mais baixa (isto é, quadros na camada 0 112 e camada 1 115 com resolução QCIF). Entre as mesmas, esses quadros do nível temporal mais baixo formam a camada base temporal, como mostrado na camada 0 112 da figura 3. A camada base temporal (camada 0) 112 pode ser aperfeiçoada com quadros de um nível temporal mais elevado, por exemplo, camada 1 114 com taxa de quadro de 15 Hz ou camada 4 118 com taxa de quadro de 30 Hz.
[0097] Além da camada base 112, 114, várias camadas de aperfeiçoamento espaciais e/ou SNR podem ser adicionadas para fornecer escalabilidades espaciais e/ou qualidade. Por exemplo, a camada 2 116 com resolução CIF pode ser uma camada de aperfeiçoamento espacial para a camada base 112, 114. Em outro exemplo, a camada 3 117 pode ser uma camada de aperfeiçoamento SNR para a camada base 112, 114 e camada 2 116. Como mostrado na figura 3, cada camada de aperfeiçoamento espacial ou SNR pode ser temporalmente escalonável, com a mesma estrutura de escalabilidade temporal que a camada base 112, 114. Além disso, uma camada de aperfeiçoamento pode aperfeiçoar tanto a resolução espacial como a taxa de quadro. Por exemplo, a camada 4 118 fornece uma camada de aperfeiçoamento de resolução 4CIF, que aumenta adicionalmente a taxa de quadro de 15 Hz para 30 Hz.
[0098] A figura 4 é uma ilustração conceptual mostrando unidades de acesso de codificação de vídeo escalonável 120A-120E (“unidades de acesso 120”) em ordem de fluxo de bits. Como mostrado na figura 4, os quadros codificados ou fatias na mesma instância de tempo são sucessivas na ordem de fluxo de bits e formam uma unidade de acesso no contexto de um padrão de codificação de vídeo escalonável, como a extensão SVC para H.264 ou SHVC. As unidades de acesso 120 seguem, então a ordem de decodificação que poderia ser diferente da ordem de exibição e determinada, por exemplo, pela relação de predição temporal entre unidades de acesso 120.
[0099] Por exemplo, a unidade de acesso 120A inclui quadro I0 a partir da camada 0 112, quadro 0 da camada 2 116, quadro 0 da camada 3 117, e quadro 0 da camada 4 118. A unidade de acesso 120B inclui quadro P4 da camada 0 112, quadro 4 da camada 2 116, quadro 4 da camada 3 117, e quadro 4 da camada 4 118. A unidade de acesso 120C inclui quadro B2 da camada 1 114, quadro 2 da camada 2 116, quadro 2 da camada 3 117, e quadro 2 da camada 4 118. A unidade de acesso 120D inclui quadro 1 da camada 4 118 e a unidade de acesso 120E inclui quadro 3 da camada 4 118.
[0100] A figura 5 é um diagrama de blocos ilustrando um codificador SHVC de 3 camadas de exemplo, 122. Como ilustrado na figura 5, o codificador SHVC 122 inclui um codificador de camada base 124, um primeiro codificador de camada de aperfeiçoamento 125 e um segundo codificador de camada de aperfeiçoamento 126. Em SHVC de sintaxe de nível elevado apenas, não há novas ferramentas de codificação de nível de bloco quando comparado com codificação de camada única HEVC. Em SHVC, somente alterações de sintaxe de nível acima e fatia e operação de nível de quadro, como filtração de quadro ou amostragem ascendente, são permitidos.
[0101] Para reduzir a redundância entre camadas, quadros de camada de referência co-localizadas ou amostradas ascendentemente para uma camada base/inferior para uma camada de aperfeiçoamento/mais elevada de modo que predição inter-camada pode ser obtida do mesmo modo que predição inter-quadro em uma camada única. Como ilustrado na figura 5, um quadro de referência inter-camada reamostrada (ILR) 128 é gerado de um quadro de referência no codificador de camada base 124 e armazenado no primeiro codificador de camada de aperfeiçoamento 125. Similarmente, um quadro ILR reamostrado 129 é gerado de um quadro de referência no primeiro codificador de camada de aperfeiçoamento 125 e armazenado no segundo codificador de camada de aperfeiçoamento 126. Em SHVC WD3, o quadro ILR é marcado como um quadro de referência de termo longo para a camada de aperfeiçoamento. A diferença de vetor de movimento associada a um quadro de referência inter-quadro é limitada a zero.
[0102] A implantação próxima de dispositivos de televisão ultraelevada (UHDTV) e conteúdo usará uma gama de cores diferente do que dispositivos de legado. Especificamente, HD usa a recomendação BT.709, Recomendação ITU-R BT.709 “Parameter values for the HDTV Standards for production and international programme Exchange” dezembro de 2010, enquanto UHDTV usará a recomendação BT.2020, Recomendação ITU-R BT.2020 “Parameter values for UHDTV systems for production and international programme Exchange” Abril 2012. Uma gama de cores compreende uma gama completa de cores que pode ser reproduzida por uma imagem, por exemplo, em um quadro, fatia, bloco ou camada de dados de vídeo. Uma diferença principal entre esses sistemas é que a gama de cores de UHDTV é significativamente maior que HD. É afirmado que UHDTV fornecerá uma experiência de visualização mais semelhante à vida ou realista, que é compatível com outras características UHDTV, como resolução relevada.
[0103] A figura 6 é um gráfico ilustrando uma gama de cor de exemplo de uma sequência de vídeo de amostra 130. Como ilustrado na figura 6, a sequência de vídeo de amostra SWG1 130 é indicada como um cluster de pontos em um contorno de linha da gama de cores UHD BT.2020 132. Para fins de comparação, um contorno da gama de cores HD BT.709 134 e um contorno do espaço de cor linear 136 da International Commission on Illumination (CIE)-XYZ cobre a sequência de vídeo de amostra SWG1 130. É facilmente observado da figura 6 que a gama de cores UHD BT.2020 132 é muito maior que a gama de cores HD BT.709 134. Observe o número de pixels na sequencia de vídeo de amostra SWG1 130 que está compreendida fora da gama de cores BT.709 134.
[0104] A figura 7 é um diagrama de blocos ilustrando conversão de gama de cores HD BT.709 134 em gama de cores UHD BT.2020 132. Tanto a gama de cores HD BT.709 134 como a gama de cores UHD BT.2020 132 definem representações de pixels de cores em componentes luma e croma (por exemplo, YCbCr ou YUV). Cada gama de cores define conversão para e a partir do espaço de cores linear CIE-XYZ 136. Esse espaço de cor intermediário comum pode ser usado para definir a conversão dos valores luma e croma na gama de cores HD BT.709 134 em valores de luma e croma correspondentes na gama de cores UHD BT.2020 132.
[0105] Mais detalhes em relação à gama de cores da sequência de amostra ilustrada na figura 6 e a conversão de gama de cores ilustrada na figura 7 podem ser encontrados em L. Kerofsky, A. Segall, S.-H. Kim, K. Misra, “Color gamut escalonável vídeo coding: new results,” JCTV- L0344, Genebra, CH, 14-23 de janeiro de 2013 (a seguir mencionado como “JCTVC-L0334”).
[0106] A figura 8 é um diagrama de blocos ilustrando um codificador escalonável de gama de cores 140 incluindo uma unidade de processamento de predição de cor 144 que pode gerar um quadro de referência intra-camadas quando uma gama de cores de camada base e uma gama de cores de camada de aperfeiçoamento são diferentes. A unidade de processamento de predição de cor 144 pode ser usada por um codificador de vídeo, como codificador de vídeo 20 ou decodificador de vídeo 30 a partir da figura 1, para executar codificação de vídeo escalonável de gama de cores, no qual a gama de cores da camada base e de aperfeiçoamento é diferente.
[0107] No exemplo ilustrado na figura 8, um loop de codificação de camada de base 142 executa codificação de vídeo de quadros que incluem dados de cores em uma primeira gama de cores, por exemplo, BT.709, e um loop de codificação de camada de aperfeiçoamento 146 executa codificação de vídeo de quadros que incluem dados de cor em uma segunda gama de cores, por exemplo, BT.2020. A unidade de processamento de predição de cor 144 executa predição de cor para mapear ou converter dados de cores de um quadro de referência de camada base na primeira gama de cores na segunda gama de cores, e gera um quadro de referência inter-camada para a camada de aperfeiçoamento com base nos dados de cor mapeados do quadro de referência de camada base.
[0108] Para obter eficiência de codificação elevada, a unidade de processamento de predição de cor 144 é configurada para executar predição de cor específica ao gerar quadros de referência inter-camadas. Como descrito em mais detalhe abaixo, a unidade de processamento de predição de cor 144 pode ser configurada para executar predição de cor de acordo com qualquer de um modelo de predição linear, um modelo de predição linear no sentido de pedaço, ou um modelo de predição de cor baseado em tabela de consulta 3D.
[0109] Um modelo de predição linear é proposto em JCTV-L0334 referenciado acima. Em geral, o processo de predição de cor do modelo de predição linear pode ser descrito como um modelo de ganho e compensação. O modelo de predição linear opera em planos de cores individuais. Para facilitar cálculo de número inteiro, um parâmetro descreve o número de bits fracionais usados no cálculo usando o parâmetro numFractionBits. Para cada canal, um ganho[c] e compensação[c] são especificados. O modelo de predição linear é definido como a seguir: Predfc] [x] [y] - (gain[c]*In[x][y] + (1«(numFractiθTiBits-l)) » iminFractionBits offsetfc]
[0110] Um modelo de predição linear no sentido de pedaço é proposto em C. Auyeung, K. Sato, “AHG14: color gamut escalonável vídeo coding with piecewise linear predictions and shift-offset model,” JCTVC-N0271, Viena, Áustria, julho de 2013, com base em JCTVC-L0334, referenciado acima. O processo de predição de cor do modelo de predição linear no sentido de pedaço também pode ser descrito como um modelo de ganho e compensação. O modelo de predição linear no sentido de pedaço é definido como a seguir: considere d[c][x][y] = In[c][x][y] - knoíic], se d[c][x][y] <== 0 Pred[c][x.][y] = (gainl[c]*d[c][x][y] + offset[c] + (l«(numFractionBits-l))) » n umFracti on B its else Pred[c][xJ[y] = (gaiti2[c]*d[c][x][y] -f- offset[c] + (l«(nwiiFractionBits-l))) » num Fraction Bits Os parâmetros de predição knot[c], offset[c], gain1[c] e gain2[c] podem ser codificados no fluxo de bits.
[0111] As figuras 9(a) e 9(b) são ilustrações conceptuais mostrando uma tabela de consulta 3D de exemplo, 150 para escalabilidade de gama de cores. Um modelo de predição de cor baseado em tabela de consulta 3D é proposto em P. Bordes, P. Andrivon, F. Hiron, “AHG14: Color gamut escalonável vídeo coding using 3D LUT: New results,” JCTVC- N0168, Viena, Áustria, julho de 2013 (a seguir mencionado como “JCTVC-N0168”). O princípio da tabela de consulta 3D para escalabilidade de gama de cores é mostrado nas figuras 9(a) e 9(b). a tabela de consulta 3D 150 pode ser considerada como uma sub-amostragem de um primeiro espaço de cor 3D, por exemplo, gama de cores HD BT.709, onde cada vértice é associado a um tripleto de cores (y, u, v) correspondendo a valores de um segundo espaço de cores 3D (isto é, predito), por exemplo, gama de cores UHD BT.2020).
[0112] Em geral, a primeira gama de cores pode ser dividida em octantes ou cuboides em cada dimensão de cor (isto é, Y, U e V) e os vértices dos octantes são associados ao tripleto de cores correspondendo a segunda gama de cores e usados para povoar tabela de consulta 3D 150. O número de vértices ou segmentos em cada dimensão de cor indica o tamanho da tabela de consulta 3D. a figura 9(a) ilustra os vértices ou pontos de treliça de interseção dos octantes em cada dimensão de cor. A figura 9B ilustra os valores de cores diferentes associados a cada dos vértices. Como ilustrado, na figura 9(a) cada dimensão de cor tem quatro vértices e na figura 9(b) cada dimensão de cor inclui quatro valores de cores.
[0113] A figura 10 é uma ilustração conceptual mostrando interpolação tri-linear com uma tabela de consulta 3D 152 para escalabilidade de gama de cores. Para uma dada amostra de cores de camada base na primeira gama de cores, a computação de sua predição na segunda gama de cores para uma camada de aperfeiçoamento é feita usando interpolação tri-linear de acordo com a seguinte equação: valuQy = K x ∑i^i∑j-oj∑fc^i^O) x SAU) x sfcO) x kUT[yJ[uz] [vfe].y onde :
Figure img0001
Y0 é o índice do vértice sub-amostrado mais próximo inferior a y, Y1 é o índice do vértice sub-amostrado mais próximo superior a y. Mais detalhes da tabela de consulta 3D ilustrada na figura 9 e interpolação tri-linear com a tabela de consulta 3D ilustrada na figura 10 podem ser encontrados em JCTV-N0168, referenciado acima.
[0114] A figura 11 é uma ilustração conceptual mostrando interpolação tetraédrica com uma tabela de consulta 3D 154 para escalabilidade de gama de cores. A interpolação tetraédrica pode ser usada ao invés da interpolação tri-linear descrita acima para reduzir a complexidade computacional da tabela de consulta 3D.
[0115] A figura 12 é uma ilustração conceptual mostrando seis exemplos de tetraedros 156A-156F (coletivamente “tetraedros 156”) usados para abranger um ponto P de uma tabela de consulta 3D a ser interpolado usando interpolação tetraédrica. No exemplo da figura 12, há seis escolhas para determinar o tetraedro contendo o ponto P a ser interpolado em um octante da tabela de consulta 3D dado que os vértices P0 e P7 têm de ser incluídos no tetraedro. Usando interpolação tetraédrica, a tabela de consulta 3D pode ser projetada para uma decisão rápida ao invés de verificar a relação de cada dois componentes: y e u, y e v, u e v.
[0116] Em alguns exemplos, uma tabela de consulta 3D separada pode ser gerada para cada das componentes de cores, isto é, uma componente luma (Y), uma primeira componente croma (U) e uma segunda componente croma (V). Cada das tabelas de consulta 3D inclui uma dimensão de luma (Y), uma primeira dimensão de croma (U) e uma segunda dimensão de croma (V), e é indexada usando os três componentes de cores independentes (Y, U, V).
[0117] Em um exemplo, uma função de mapeamento pode ser definida para cada componente de cor baseada na tabela de consulta 3D. uma função de mapeamento de exemplo para um valor de pixel (Y) de luma é apresentado na seguinte equação:
Figure img0002
Na equação acima, YE representa o valor de pixel de luma na camada de aperfeiçoamento, (YB, UB, VB) representa um valor de pixel de camada de base, e LUTY, LUTU, LUTV e LUTC representam a tabela de consulta 3D para cada componente de cor Y, U, V, e uma constante, respectivamente. Funções de mapeamento similares podem ser definidas para um primeiro valor de pixel de croma (U) e um segundo valor de pixel de croma (V) na camada de aperfeiçoamento.
[0118] Em geral, escalabilidade de gama de cores baseada em tabela de consulta 3D resulta em bom desempenho de codificação. O tamanho da tabela de consulta 3D pode ser preocupante, entretanto, uma vez que a tabela de consulta 3D é tipicamente armazenada em memória cache em uma implementação de hardware. Convencionalmente, as tabelas de consulta 3D são sempre simétricas de modo que as tabelas de consulta 3D têm um mesmo tamanho para a componente luma, a primeira componente croma e a segunda componente croma. Além disso, convencionalmente, as tabelas de consulta 3D são sempre equilibradas de modo que um tamanho de cada dimensão das tabelas de consulta 3D é sempre igual. Isso resulta em tamanhos de tabela grande com elevada complexidade computacional e custos de sinalização elevados. Por exemplo, tamanhos de tabela podem ser até 9x9x9 ou 17x17x17.
[0119] Em alguns casos, o tamanho da tabela de consulta 3D usada para escalabilidade de gama de cores é demasiadamente grande, o que pode levar a dificuldade em implementações práticas. Além disso, o tamanho de tabela grande e o uso de interpolação tri-linear para a tabela de consulta 3D resulta em complexidade computacional elevada.
[0120] No pedido de patente US no. 14/512.177 (no. Do dossiê do procurador 1212-712US01/140193), depositado em 10 de outubro de 2015, os seguintes métodos são propostos de modo que tanto custo de sinalização como complexidade computacional para a escalabilidade de gama de cores baseada em tabela de consulta 3D podem ser reduzidos.
[0121] O primeiro método inclui gerar uma tabela de consulta 3D assimétrica de modo que as componentes luma (Y) e croma (U e V) têm tamanhos diferentes. Em alguns casos, a tabela de consulta 3D pode ter um tamanho maior, isto é, mais segmentos ou octantes, para a componente luma do que para cada das primeira e segunda componentes croma. Nesse caso, as componentes croma podem usar uma tabela de consulta mais grossa e a componente luma pode usar uma tabela de consulta mais refinada. Por exemplo, tamanhos de tabela podem ser até 8x2x2. Em outros casos, a tabela de consulta 3D pode ter um tamanho maior para uma ou ambas as componentes croma do que para a componente luma.
[0122] O segundo método inclui gerar uma tabela de consulta 3D não equilibrada, isto é, table[M][N][K], de modo que tampando de cada dimensão seja diferente dependendo de qual componente de cor está sendo usada como um índice de tabela para a tabela de consulta 3D. A tabela de consulta 3D pode ter um tamanho maior para a dimensão associada à componente de cor usada como o índice de tabela. Nesse caso, o mapeamento de cor pode ser mais preciso para a componente de cor usada como o índice de tabela, enquanto é menos preciso para as outras componentes de cor.
[0123] O terceiro método inclui gerar somente uma tabela de consulta 3D de componente luma, e apenas usando uma tabela de consulta 3D para executar predição de componente luma. As técnicas de mapeamento linear piecewise ou mapeamento linear unidimensional (ID) podem ser usadas para as componentes croma.
[0124] As técnicas dessa revelação são dirigidas a sinalização das informações usadas para gerar tabelas de consulta 3D para escalabilidade de gama de cores. De acordo com as técnicas o codificador de vídeo 20 pode codificar informações de divisão e/ou valores de cor de uma tabela de consulta 3D gerada para escalabilidade de gama de cores. O decodificador de vídeo 30 pode decodificar as informações de divisão e/ou valores de cores para gerar a tabela de consulta 3D para executar escalabilidade de gama de cores. As técnicas reveladas fornecem divisão eficiente das componentes de cor da tabela de consulta 3D e sinalização eficiente das informações de divisão e/ou valores de cor para a tabela de consulta 3D. Desse modo, as técnicas reveladas podem reduzir tanto custo de sinalização como complexidade computacional para gerar a tabela de consulta 3D. As técnicas descritas nessa revelação podem ser particularmente úteis em sinalizar as informações usadas para gerar tabelas de consulta 3D assimétricas e/ou não equilibradas.
[0125] Em um exemplo, as técnicas descritas nessa revelação podem fornecer divisão mais eficiente das componentes de cor da tabela de consulta 3D por habilitar divisões assimétricas de modo que a tabela de consulta 3D tenham divisão mais grosseira para as primeira e segunda componentes croma (por exemplo, Cb e Cr ou U e V) e divisão mais fina para uma componente luma (por exemplo, Y). As técnicas também podem fornecer sinalização mais eficiente das informações de divisão para a tabela de consulta 3D por sinalizar um número de divisões adicionais para a componente luma no topo de um número de base de divisões para a tabela de consulta 3D. Em outro exemplo, as técnicas podem fornecer divisão mais eficiente das componentes de cores da tabela de consulta 3D por permitir divisão conjunta das primeira e segunda componentes croma (por exemplo, CB e Cr ou U e V).
[0126] As técnicas também podem fornecer sinalização mais eficiente das informações usadas para gerar a tabela de consulta 3D para escalabilidade de gama de cores (CGS) por permitir um ou mais dos seguintes. Em um primeiro exemplo, um indicador ou um índice pode ser sinalizado para indicar onde a informação de predição de cor CGS é sinalizada, como em um conjunto de parâmetros de vídeo (VPS), um conjunto de parâmetros de sequencia (SPS), um conjunto de parâmetros de quadro (PPS), um cabeçalho de fatia ou qualquer outro cabeçalho de sintaxe de nível elevado. Em um segundo exemplo, um número de divisões pode ser sinalizado para indicar um tamanho, isto é, um número de segmentos ou octantes, de uma tabela de consulta 3D assimétrica e/ou não equilibrada. Em um terceiro exemplo, quando as componentes croma são conjuntamente divididas, uma gama de uma divisão central de croma pode ser sinalizada.
[0127] Em um quarto exemplo, parâmetros de nível mais baixo (por exemplo, nível de fatia) da informação de predição de cor CGS podem ser codificados de forma preditiva a partir de parâmetros de nível mais elevado (Por exemplo, nível PPS) das informações de predição de cor CGS. Em um quinto exemplo, uma tabela de sintaxe da informação de predição de cor CGS pode ser sinalizada no fluxo de bits, como no VPS, SPS, PPS ou cabeçalho de fatia. Quando várias tabelas de sintaxe de predição de cor CGS são sinalizadas em locais diferentes no fluxo de bits, a tabela de sintaxe no nível mais baixo que cobre o quadro a ser codificado pode ser usada para o quadro. Em um sexto exemplo, a tabela de sintaxe de informação de predição de cor CGS pode ser condicionalmente sinalizada de acordo com se a predição de textura é habilitada para o quadro a ser codificado. Quando uma camada mais elevada de dados de vídeo, isto é, uma camada de aperfeiçoamento, tem múltiplas camadas de referência de textura, tabelas de sintaxe de predição de cor CGS podem ser sinalizadas para todas ou algumas das camadas de referência cuja gama de cores seja diferente da camada de aperfeiçoamento. Em um sétimo exemplo, para manter baixa complexidade, a tabela de sintaxe de predição de cor CGS pode ser adicionalmente limitada para ser sinalizada, no máximo, somente para uma camada de referência por quadro.
[0128] Em um oitavo exemplo, um limite de divisão pode ser sinalizado para pelo menos uma das primeira e segunda componentes croma para obter divisão irregular ao longo de uma das direções de croma na tabela de consulta 3D. A informação de limite de divisão pode ser condicionalmente sinalizada quando pelo menos uma das componentes croma é dividida em dois ou mais segmentos ou octantes ao longo da direção de croma.
[0129] Após cada das componentes de cor da tabela de consulta 3D ser dividida em um ou mais octantes, as técnicas descritas nessa revelação podem fornecer sinalização mais eficiente dos valores de cor da tabela de consulta 3D. As técnicas incluem sinalização, para cada octante para cada das componentes de cor da tabela de consulta 3D, valores de vértices de cada dos octantes ou coeficientes de mapeamento de cores de uma função de mapeamento de cor linear para cada dos octantes. Nessa revelação, os termos “divisão”, “octante,” “segmento,” e “cuboide” podem ser usados de forma intercambiável para descrever as regiões divididas das componentes de cor da tabela de consulta 3D.
[0130] Em um primeiro exemplo, para cada octante para cada das componentes de cores, vértices do octante podem ser sinalizados. Nesse exemplo, um valor residual entre um valor predito de um vértice dado e um valor efetivo do vértice dado pode ser sinalizado. Em alguns casos, o valor residual pode ser adicionalmente quantizado. As informações de etapa de quantização, por exemplo, um valor de quantização, podem ser sinalizadas ou podem ser um valor predefinido. O valor residual pode ser codificado com codificação exp-golomb de ka ordem. A ordem k pode ser sinalizada no fluxo de bits ou adaptavelmente derivada com base em outras informações, como a magnitude dos valores residuais, no fluxo de bits. Para cada octante ou divisão, nem todos os vértices necessitam ser sinalizados. Por exemplo, pelo menos quatro vértices podem ser sinalizados se octantes ou cuboides de vizinhança não compartilharem valores de vértice. Pelo menos quatro vértices podem ser usados para interpolar todos os valores no octante ou cuboide.
[0131] Em um segundo exemplo, para cada octante para cada das componentes de cor, coeficientes de mapeamento de cores (isto é, a, b, c e d) para uma função de mapeamento de cores lineares de valores de cor na tabela de consulta 3D podem ser sinalizados ao invés dos vértices do octante. A função de mapeamento de cor linear com parâmetros de mapeamento de cores pode ser usada diretamente para executar predição de gama de cores. A função de mapeamento de cor linear é usada para converter dados de cor em uma primeira gama de cores para uma camada inferior de dados de vídeo em uma segunda gama de cores para uma camada mais elevada de dados de vídeo, e os coeficientes de mapeamento de cor são fatores de ponderação entre componentes de cor das camadas inferior e mais elevada dos dados de vídeo. Nessa revelação, os termos “coeficientes de mapeamento de cor” e “coeficientes de predição de cor linear” podem ser usados de forma intercambiável. Além disso, os termos “função de mapeamento de cor linear”, “função de predição de cor linear” e “equação linear 3D” também podem ser usados de forma intercambiável.
[0132] Nesse exemplo, os coeficientes de mapeamento de cor (isto é, a, b, c e d) podem ser convertidos ou quantizados a partir dos valores de ponto flutuante em valores inteiros usando um número predefinido de bits. Em alguns casos, a informação de quantização ou conversão pode ser sinalizada no fluxo de bits. Em outros casos, a informação de quantização ou conversão (isto é, o número de bits usados para representar o valor de 1) pode ser dependente de pelo menos uma da profundidade de bit de entrada ou profundidade de bit de saída da tabela de consulta 3D.
[0133] Para cada das componentes de cores, um dos coeficientes de mapeamento de cor da função de mapeamento de cor linear pode ser um coeficiente principal que define um fator de ponderação da mesma componente de cor sendo predita. Por exemplo, ao predizer a primeira componente croma da camada mais elevada (isto é, Ue) usando a função de mapeamento de cor linear Ue = a . Yb + b . Ub + C . Vb + d, b é o coeficiente principal porque é o fator de ponderação entre a primeira componente croma da camada inferior (isto é, Ub) e a primeira componente croma da camada mais elevada (isto é, Ue) sendo predita. A sinalização do coeficiente principal pode ser diferente dos outros coeficientes. Em alguns exemplos, a predição dos coeficientes principais pode ser dependente de um valor não zero predefinido, enquanto a predição dos outros coeficientes pode ser dependente de um valor predito igual a zero. Em outros exemplos, a predição dos coeficientes principais pode ser dependente de pelo menos uma da profundidade de bit de entrada ou profundidade de bit de saída da tabela de consulta 3D.
[0134] Os inúmeros exemplos descritos acima de técnicas para divisão eficiente e sinalização de uma tabela de consulta 3D para escalabilidade de gama de cores podem ser usados individualmente ou em qualquer combinação, e não devem ser limitados às combinações de exemplo descritas nessa revelação. Detalhes adicionais das técnicas reveladas para divisão eficiente das componentes de cores da tabela de consulta 3D são fornecidos abaixo.
[0135] Como descrito acima, em um exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem gerar uma tabela de consulta 3D para escalabilidade de gama de cores por executar divisão conjunta das primeira e segunda componentes croma. Em uma tabela de consulta 3D convencional, as componentes luma, primeira croma e segunda croma (isto é, Y, U e V) são independentemente divididas. Quando cada componente é dividida em segmentos N ou octantes, o número total de octantes pode ser NxNxN, que resulta em uma grande tabela de consulta 3D. Por exemplo, tamanhos de tabela podem ser até 9x9x9 ou 17x17x17. Para reduzir o número de octantes, as técnicas dessa revelação podem fornecer divisão independente da componente luma (isto é, Y) enquanto divide conjuntamente as primeira e segunda componentes croma (isto é, U e V).
[0136] Por exemplo, a componente luma pode ser uniformemente dividida em M divisões ou octantes. O espaço UxV 3D das primeira e segunda componentes croma pode ser então dividido em duas divisões como a seguir:
Figure img0003
Onde (u, v) indica os valores de pixel dos componentes U e V, CBit representa a profundidade de bit das componentes croma, 2CBit-1 corresponde a um valor central dos pixels de croma, e R indica a distância até o valor central 2CBit-1. Em alguns casos, R pode ser um valor fixo predefinido; de outro modo R pode ser um valor sinalizado no fluxo de bits, como no VPS, SPS, PPS ou cabeçalho de fatia.
[0137] A figura 13 é uma ilustração conceptual mostrando uma tabela de consulta 3D 158 com uma componente luma independentemente dividida e componentes croma conjuntamente divididas. No exemplo ilustrado da figura 13, a componente luma (isto é, Y) é uniformemente dividida em quatro partes de acordo com as linhas de divisão 160A, 160B e 160C. As componentes croma (isto é, U-V) são divididas em duas regiões de acordo com um cuboide de divisão 162. Nesse caso, para um valor de pixel de par de croma (u, v) está dentro do cuboide de divisão 162 ou fora do cuboide de divisão 162. No exemplo da figura 13, a tabela de consulta 3D 158 é dividida em 4x2 = 8 divisões.
[0138] Em outro exemplo, as componentes croma (isto é, U-V) são conjuntamente divididas enquanto a componente luma (isto é, Y) é dividida em M divisões, porém as M divisões podem não necessariamente ser do mesmo tamanho. Em outras palavras, a componente luma pode ser irregularmente dividida de modo que pelo menos uma das divisões tem um tamanho diferente do que as outras divisões. Por exemplo, uma divisão localizada próxima a um valor central da componente luma pode ser mais refinada, isto é, menor, do que aquelas divisões localizadas mais distantes do valor central.
[0139] No exemplo de divisão de componente croma conjunta (isto é, U-V), as tabelas de sintaxe e semânticas relacionadas para sinalizar coeficientes de mapeamento de cores de uma função de mapeamento de cores linear para escalabilidade de gama de cores (CGS) pode ser como segue nas tabelas 1-3 abaixo. Quaisquer edições, adições ou atualizações no SHVC WD3, citado acima, são indicadas por texto em itálico. Tabela 1: Sintaxe de RBSP de conjunto de parâmetros de quadro (PPS)
Figure img0004
O cgs_enable_flag igual a 1 especifica que escalabilidade de cama de cores é habilitada. O cgs_enable_flag igual a 0 especifica que escalabilidade de gama de cores é desabilitada. Quando não presente, cgs_enable_flag é inferido como sendo 0. O cgs_info_in-pps_flag igual a 1 especifica que cgs_info_table está presente no PPS. Cgs_info_in_pps_flag igual a 0 especifica que cgs_info_table não está presente em PPS, porém está presente no cabeçalho de fatia. Quando não presente, cgs_info_in_pps_flag é inferido como sendo 0. Tabela 2: sintaxe de informação de predição de cor de escalabilidade de gama de cores (CGS)
Figure img0005
O elemento de sintaxe cgs_uv_part_range_from_center especifica a gama de divisão de croma a partir do valor central da componente croma. Quando não presente, cgs_uv_part_range_from_center é inferido como sendo 0. O elemento de sintaxe cgs_y_part_num_log2 especifica o número de divisões de luma em predição de cor CGS. Quando não presente, cgs_y_part_num_log2 é inferido como sendo 0. O parâmetro CGS_PART_NUM é derivado como a seguir: CGS_PART_NUM = 1 << (cgs_y_part_num_log2+1). O elemento de sintaxe cgs_color_pred_coeff_minus128 e o elemento de sintaxe cgs_color_pred_coeff especificam, cada, coeficientes de mapeamento de cor de uma função de mapeamento de cor linear para CGS. Quando não presente, são inferidos como sendo 0. Deve ser observado que, em alguns exemplos, os elementos de sintaxe cgs_color_pred_coeff_minus128 e cgs_color_pred_coeff podem ser sinalizados usando métodos de codificação por entropia diferentes. No exemplo na tabela 2 acima, o método de codificação por entropia de se(v) é usado. Alternativamente, codificação exp-golomb da ka ordem ou codificação de comprimento fixo pode ser usado. Deve ser também observado que o elemento de sintaxe cgs_color_pred_coeff_minus128 pode indicar o valor predito para um coeficiente principal como um número fixo predefinido igual a 128, que é o valor inteiro usado para representar um valor de ponto flutuante de 1.0 nesse exemplo. Tabela 3: sintaxe de cabeçalho de fatia
Figure img0006
Quando escalabilidade de gama de cores é habilitada (por exemplo, cgs_enable_flag = 1) e cgs_info_table não está presente no PPS (por exemplo, cgs_info_in_pps_flag = 0), o cgs_info_table não está presente em PPS, porém está presente no cabeçalho de fatia.
[0140] Como descrito acima, em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode gerar uma tabela de consulta 3D para escalabilidade de gama de cores com divisão mais grosseira para as primeira e segunda componentes croma (por exemplo, Cb e Cr ou U e V) e divisão mais fina para a componente luma (por exemplo, Y). O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode gerar essa tabela de consulta 3D por dividir cada das componentes de cores em um número de octantes de acordo com um valor de divisão de base, por exemplo, uma profundidade de divisão máxima para a tabela de consulta 3D, e então dividir adicionalmente cada dos octantes da componente luma com base em um valor de divisão de luma. Em um exemplo, o valor de divisão de luma pode ser sinalizado em um fluxo de bits por codificador de vídeo 20 para decodificador de vídeo 30. Em alguns casos, o valor de divisão de base pode ser também sinalizado no fluxo de bits por codificador de vídeo 20 para decodificador de vídeo 30. Em outros casos, o valor de divisão de luma pode ser derivado tanto no codificador de vídeo 20 como decodificador de vídeo 30, e/ou o valor de divisão de base pode ser um valor predefinido conhecido tanto no codificador de vídeo como no decodificador de vídeo.
[0141] Em um exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 primeiramente constrói a tabela de consulta 3D de tal modo que cada das componentes de cor (isto é, o espaço Y-U-V) é iterativamente e simetricamente dividido até que se atinja uma profundidade de divisão sinalizada ou predefinida. A profundidade de divisão define um número máximo de vezes que todas as componentes de cor da tabela de consulta 3D pode ser dividida. Desse modo, o valor de divisão base pode ser uma profundidade de divisão predefinida. A seguir, o codificador de vídeo 20 e/ou decodificador de vídeo 30 adicionalmente uniformemente, ou não uniformemente, divide cada cubo menor ou octante ao longo da direção de luma (isto é, Y) de modo que a componente luma (isto é, Y) tenha divisão mais fina enquanto os componentes croma (isto é, U e V) tem divisão mais grosseira.
[0142] Por exemplo, a tabela de consulta 3D proposta com divisão mais fina para a componente luma e divisão mais grosseira para os componentes croma pode ser sinalizada como a seguir na tabela 4. Quaisquer edições, adições, ou atualizações no SHVC WD3, citado acima, são indicadas por texto em itálico. Tabela 4: sintaxe de dados de cores de tabela de consulta 3D
Figure img0007
O elemento de sintaxe cur_octant_depth indica a profundidade de divisão máxima para o espaço Y-U-V para a tabela atual. Em outras palavras, o elemento de sintaxe cur_octant_depth indica o valor de divisão de base para a tabela de consulta 3D. O elemento de sintaxe cur_y_part_num_log2 especifica o número de divisões Y para o menor cubo. Alternativamente, o elemento de sintaxe cur_y_part_num_log2 especifica o número de partições Y parar o cubo cujo Split_octant_flag é igual a 0. Em outras palavras, o elemento de sintaxe cur_y_part_num_log2 indica o valor de divisão de luma para a componente luma da tabela de consulta 3D. em um exemplo, o valor de divisão de base indicado por cur_octant_depth é igual a 1 de modo que cada das componentes de cor é dividida em um octante único, e o valor de divisão de luma indicado por cur_y_part_num_log2 é igual a 4 de modo que o único octante da componente luma é dividida em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 4x1x1. Como outro exemplo, o valor de divisão de base indicado por cur_octant_depth é igual a 2 de modo que cada dos componentes de calor 'dividido em dois octantes, e o valor de divisão de luma indicado por cur_y_part_num_log2 é igual a 4 de modo que cada dos dois octantes da componente luma é dividido em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 8x2x2. O elemento de sintaxe input_bit_depth_minus8 especifica a profundidade de bit das entradas de tabela de consulta 3D. o parâmetro InputBitDepth pode ser computado como a seguir: InputBitDepth = 8 + input_bit_depth_minus8. O elemento de sintaxe output_bit_depth_minus8 especifica a profundidade de bit da saída de tabela de consulta 3D. o parâmetro OutputBitDepth pode ser computado como a seguir: OutputBitDepth = 8 + output_bit_depth_minus8. O elemento de sintaxe res_quant_bit especifica o número de bits usados em quantizar valores residuais de vértice ou valores residuais de coeficiente de mapeamento de cor para cada octante para cada componente de cor da tabela de consulta 3D. A quantização dos valores residuais é obtida por deslocamento para a direita dos valores residuais de vértice ou valores residuais de coeficiente de mapeamento de cores por res_quant_bit. A tabela de sintaxe coding_octant é descrita em mais detalhe com relação à tabela 5 abaixo. No exemplo da tabela de sintaxe de coding_octant mostrada na tabela 5 abaixo somente o menor octante ou cuboide é adicionalmente dividido ao longo da luma (isto é, direção Y) de modo que a componente luma (isto é, Y) tenha divisão mais fina que os componentes croma (isto é, U e V). em alguns exemplos, qualquer octante ou cuboide pode ser dividido ao longo da direção de luma. Nesse exemplo, o fato de se um octante é adicionalmente dividido ao longo da direção de luma pode ser sinalizado no fluxo de bits.
[0143] Como descrito acima, em um exemplo adicional, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode gerar a tabela de consulta 3D com base em um número de octantes para cada das componentes de cores e valores de cores para cada dos octantes. Em alguns casos, o número de octantes para pelo menos uma das componentes de cor da tabela de consulta 3D pode ser sinalizado por codificador de vídeo 20 para o decodificador de vídeo 30. Para que o decodificador de vídeo 30 determine os valores de calor para cada octante para cada das componentes de cor da tabela de consulta 3D, o codificador de vídeo 20 pode sinalizar vértices de cada dos octantes ou coeficientes de mapeamento de cores para uma função de mapeamento de cor linear de valores de cor para cada dos octantes.
[0144] Em um exemplo descrito acima, para cada dos octantes ou divisões, o codificador de vídeo 20 pode sinalizar os coeficientes de mapeamento de cores da função de mapeamento de cor linear dos valores de cores na tabela de consulta 3D. A função de mapeamento de cor linear é usada para converter dados de cores em uma primeira gama de cores para uma camada inferior de dados de vídeo em uma segunda gama de cores para uma camada mais elevada de dados de vídeo, e os coeficientes de mapeamento de cores são fatores de ponderação entre componentes de cores das camadas inferior e superior dos dados de vídeo. Para cada das componentes de cores, um dos coeficientes de mapeamento de cores pode ser um coeficiente principal que define um fator de ponderação entre o mesma componente de cor das camadas inferior e superior dos dados de vídeo.
[0145] A função de mapeamento de cor linear comum pode ser representada como a seguir.
Figure img0008
Nessa função de exemplo, o subscrito e e b indicam a camada mais elevada (isto é, camada de aperfeiçoamento) e a camada inferior (por exemplo, camada base), respetivamente, para cada das componentes de cor de luma, primeiro croma e segundo croma (isto é, Y, U e V). os parâmetros a, b, c, e d representam os coeficientes de mapeamento de cores. Em alguns exemplos, coeficientes de mapeamento de cores a00, b11 e c22 representam os coeficientes principais para cada das componentes de cores, isto é, os fatores de ponderação entre a mesma componente de cor das camadas de base e aperfeiçoamento. Embora esses coeficientes sejam mencionados como coeficientes principais nessa revelação, esse nome não deve ser considerado limitador visto que coeficientes similarmente definidos podem ser mencionados por outros nomes. Em alguns exemplos, os coeficientes de mapeamento de cores (isto é, a, b, c e d) da função de mapeamento de cor linear para um dado octante podem ser convertidos em vértices do dado octante primeiramente, e então os valores dos vértices podem ser codificados no fluxo de bits para representar os valores de cores na tabela de consulta 3D.
[0146] Em alguns exemplos, os coeficientes de mapeamento de cores (isto é, a, b, c e d) da função de mapeamento de cor linear são derivados como valores de ponto flutuante. Nesse exemplo, o codificador de vídeo 20 pode converter ou quantizar os valores de ponto flutuante dos coeficientes de mapeamento de cor em valores inteiros, e então codificar os valores inteiros no fluxo de bits para cada octante. Por exemplo, os valores inteiros dos coeficientes de mapeamento de cores podem ser codificados no cgs_info_table mostrado na tabela 2 acima, ou podem ser codificados no coding_octant_table mostrada na tabela 5 abaixo. O decodificador de vídeo 30 pode então executar operações de número inteiro usando os valores inteiros dos coeficientes de mapeamento de cores.
[0147] Para representar os valores de pontos flutuantes dos coeficientes de mapeamento de cores com precisão razoável, um valor inteiro é selecionado para representar um valor de ponto flutuante de 1.0, por exemplo, usando 256 (8 bis) como o valor inteiro para representar o valor de ponto flutuante de 1.0. O codificador de vídeo 20 pode executar a conversão ou quantização de acordo com a seguinte equação: A = |_α. 2N_I onde α indica o valor de ponto flutuante do coeficiente de mapeamento de cor a ser convertido ou quantizado, A é o valor inteiro convertido ou quantizado, |_x_l indica uma função de piso que arredonda um parâmetro x a um valor inteiro máximo que é menor que x, e N indica um número de bits necessários para converter ou quantizar o valor de ponto flutuante de 1.0. Desse modo, os valores inteiros que representam os valores de pontos flutuantes têm uma profundidade de bit (por exemplo, 8 bits) com base no parâmetro N.
[0148] Em um exemplo, a conversão ou quantização pode ser baseada no parâmetro N, no expoente da equação acima A = _α. 2N_, definido em um valor fixo predefinido, como 8 ou 10. Em outro exemplo, a conversão ou quantização pode ser baseada em um valor de N determinado com base pelo menos em um de uma profundidade de bit de entrada (isto é, Bi) ou uma profundidade de bit de saída (isto é, B0) da tabela de consulta 3D. por exemplo, a conversão ou quantização pode ser baseada no parâmetro N determinado de acordo com uma das seguintes equações.
Figure img0009
[0149] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode predizer os coeficientes de mapeamento de cor, e valores residuais de código dos coeficientes de mapeamento de cor como a diferença entre valores originais dos coeficientes de mapeamento de cor e os valores preditos dos coeficientes de mapeamento de cos. Por exemplo, para um dado octante, a predição ou parte da predição para pelo menos um dos coeficientes de mapeamento de cor, por exemplo, um dos coeficientes principais, pode ser baseado em um valor predito igual a um valor fixo predefinido. Em um exemplo, o valor predito pode ser definido igual a 2N, onde N é o valor de bit de quantização descrito acima. Como outro exemplo, para um dado octante, a predição ou parte da predição para pelo menos um dos coeficientes de mapeamento de cor, por exemplo, um dos coeficientes principais, pode ser dependente de pelo menos uma entre a profundidade de bit de entrada (isto é, Bi) ou a profundidade de bit de saída (isto é, B0) da tabela de consulta 3D. Por exemplo, a predição ou parte da predição pode ser baseada em um valor predito igual a 2N+B0-Bi.
[0150] Como exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode executar predição dos coeficientes de mapeamento de cor como a seguir. Para um primeiro octante para cada das componentes de cor, os coeficientes de mapeamento de cor da função de mapeamento de cor linear podem ser preditos com base em valores fixos predefinidos. O coeficiente principal para cada das componentes de cores pode ser predito diferentemente do que os outros coeficientes. Por exemplo, um coeficiente principal pode ser predito com base em um valor predito igual a um valor não zero predefinido, e quaisquer coeficientes de mapeamento de cor restantes podem ser preditos com base em um valor predito igual a zero. Nesse exemplo, os coeficientes de mapeamento de cores de quaisquer octantes restantes para cada das componentes de cores podem ser preditos com base em valores preditos a partir de pelo menos um octante anterior, como o primeiro octante.
[0151] Como outro exemplo da predição dos coeficientes de mapeamento de cores, para o primeiro octante para cada das componentes de cores, o valor de predição para os coeficientes principais para todos os componentes de cores pode ser definido igual a 2N+B0-Bi, e os valores de predição para os outros coeficientes podem ser definidos iguais a 0. Nesse exemplo, os coeficientes dos octantes restantes para cada das componentes de cores podem ser preditos a partir do octante anterior. Em um exemplo adicional, a predição dos coeficientes de mapeamento de cores pode ser realizada entre divisões ou octantes diferentes para cada das componentes de cores. Alternativamente, um conjunto de coeficientes de mapeamento de cor pode ser sinalizado como coeficientes de base, como no SPS ou PPS. Então, as diferenças entre os valores efetivos do coeficiente de mapeamento de cor e os valores dos coeficientes de base podem ser sinalizados no nível de fatia ou quadro.
[0152] Em alguns casos, os valores residuais dos coeficientes de mapeamento de cor podem ser quantizados com base em um valor de quantização determinado. O codificador de vídeo 20 pode sinalizar o valor de quantização determinado para decodificador de vídeo 30 para executar quantização inversa para adequadamente decodificar os coeficientes de mapeamento de cor. Em um exemplo, o valor de quantização determinado pode ser indicado pelo elemento de sintaxe res_quant_bit descrito em mais detalhe com relação à Tabela 4 acima.
[0153] Nesse caso, para cada dos octantes para cada das componentes de cor, o codificador de vídeo 20 pode calcular valores residuais dos coeficientes de mapeamento de cor com base em valores originais dos coeficientes de mapeamento de cor e os valores preditos dos coeficientes de mapeamento de cor, quantizar os valores residuais dos coeficientes de mapeamento de cor com base no valor de quantização determinado, e então codificar os valores residuais dos coeficientes de mapeamento de cor no fluxo de bits. O codificador de vídeo 20 pode também codificar o elemento de sintaxe res_quant_bit para indicar o valor de quantização determinado. O decodificador de vídeo 30 então decodifica o elemento de sintaxe res_quant_bit e os valores residuais dos coeficientes de mapeamento de cor, quantiza inverso os valores residuais dos coeficientes de mapeamento de cor com base no valor de quantização determinado, e reconstrói os coeficientes de mapeamento de cor com base nos valores residuais decodificados e valores preditos dos coeficientes de mapeamento de cor.
[0154] Além disso, os valores dos coeficientes de mapeamento de cor podem ser limitados a estar compreendidos em uma faixa dada com base em um valor fixo predefinido ou um valor dependente de pelo menos uma de uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D. o valor dos coeficientes de mapeamento de cor (isto é, a, b, c e d) pode ser limitado a uma certa gama para reduzir a complexidade computacional de gerar a tabela de consulta 3D. como um exemplo, o valor pode ser limitado a estar na faixa de -2M a 2M-1, inclusive, onde M é definido igual a um valor fixo predefinido, como 10 ou 12. Alternativamente, o valor de M pode ser dependente de um ou mais do valor de bit de quantização N, a profundidade de bit de entrada (isto é, Bi), a profundidade de bit de saída (isto é, B0) da tabela de consulta 3D.
[0155] Em outro exemplo descrito acima, para cada dos octantes ou divisões, o codificador de vídeo 20 pode sinalizar valores de vértices do octante para indicar os valores de cor na tabela de consulta 3D. a tabela de sintaxe coding_octant, que pode ser usada para sinalizar os valores de cor da tabela de consulta 3D, é descrita principalmente nessa revelação com relação a valores de sinalização de vértices de octante. Entretanto, essa descrição não deve ser interpretada como limitadora, visto que uma tabela de sintaxe coding_octant substancialmente similar pode ser usada para sinalizar valores de coeficientes de mapeamento de cor para uma função de mapeamento de cor linear para cada octante.
[0156] A tabela de sintaxe coding_octant incluída na sintaxe de dados de cor da tabela de consulta 3D mostrada na Tabela 4 acima, é descrita com relação à Tabela 5 abaixo. Quaisquer edições, adições ou atualizações ao SHVC WD3, citado acima, são indicadas por texto em itálico. Tabela 5: sintaxe de octante de codificação
Figure img0010
O Split_octant_flag igual a 1 especifica que um octante é dividido em oito octantes com meio tamanho em todas as direções para a finalidade de codificação de octante residual de vértice. Quando não presente, é inferido como sendo igual a 0. A variável YPartNum é derivada como YPartNum=1<<cur_y_part_num_log2. O encoded_vertex_flag igual a 1 especifica que os residuais do vértice com índice [yldx2+i][uldx][vldx][vertex] estão presentes. O encoded_vertex_flag igual a 0 especifica que os residuais para o vértice não estão presentes. Quando não presente, o indicador é inferido como sendo igual a zero. A variável yIdx é derivada como a seguir:
Figure img0011
A variável uIdx é derivada como a seguir.
Figure img0012
A variável vIdx é derivada como a seguir.
Figure img0013
E resV[yIdx][uIdx]{vIdx][vertex] são as diferenças (isto é, valores residuais entre os componentes Y, U e V do vértice com índice [yIdx][uIdx][vIdx][vertex] e os valores de componentes Y, U e V preditos para esse vértice. Quando não presente, essas diferenças resY[yIdx][uIdx]{vIdx][vertex], resU[yIdx][uIdx]{vIdx][vertex] e resV[yIdx][uIdx]{vIdx][vertex] são inferidos como sendo iguais a 0.
[0157] Na técnica de exemplo de sinalizar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear para cada octante da tabela de consulta 3D, a tabela de sintaxe de coding_octant pode indicar valores residuais que são as diferenças entre os coeficientes de mapeamento de cor (isto é, a, b, c e d) para a função de mapeamento de cor linear do octante e os valores de coeficiente de mapeamento de cor preditos para o octante, ao invés de sinalizar os valores residuais de vértice resY[yIdx][uIdx]{vIdx][vertex], resU[yIdx][uIdx]{vIdx][vertex] e resV[yIdx][uIdx]{vIdx][vertex].
[0158] Voltando à técnica de exemplo de valores de sinalização de vértices de octante, cada entrada da tabela de consulta 3D pode ser derivada como a seguir:
Figure img0014
Onde X indica cada das componentes de cor Y, U e V, e predX[yIdx][uIdx][vIdx][vertex] é derivado de acordo com a tabela 6 abaixo. Tabela 6: Valores preditos para vértices de octantes na tabela de consulta 3D
Figure img0015
Em alguns casos, uma compensação adicional pode ser aplicada durante a operação de deslocamento do procedimento de predição descrito com relação à Tabela 6 acima.
[0159] Na técnica de exemplo de sinalizar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear para cada octante da tabela de consulta 3D, equações similares podem ser usadas para derivar ou reconstruir os coeficientes de mapeamento de cor (isto é, lutY, lutU, lutV) para a função de mapeamento de cor linear da tabela de consulta 3D para quantizar inverso os valores residuais dos coeficientes de mapeamento de cor, e adicionar os valores residuais quantizados inversos dos coeficientes de mapeamento de cor aos valores preditos dos coeficientes de mapeamento de cor.
[0160] Em alguns casos, os valores dos coeficientes de mapeamento de cor lutY, lutU, lutV podem ser limitados a uma certa faixa para reduzir a complexidade computacional de gerar a tabela de consulta 3D. como exemplo, o valor pode ser limitado a estar na faixa de -2M a 2M-1, inclusive, onde M é definido igual a um valor fixo predefinido, como 10 ou 12. Alternativamente, o valor de M pode ser dependente de um ou mais entre o valor de bit de quantização N, a profundidade de bit de entrada (isto é, Bi) ou a profundidade de bit de saída (isto é, B0) da tabela de consulta 3D.
[0161] Após o codificador de vídeo 20 e/ou decodificador de vídeo 30 gerar a tabela de consulta 3D usando uma ou mais das técnicas de exemplo descritas acima, predição de cor pode ser realizada como a seguir usando a tabela de consulta 3D. a entrada no processo de predição de cor é um tripleto (y,u,v) em um espaço de cor, por exemplo, uma primeira gama de cores para uma camada inferior ou de base de dados de vídeo. A saída do processo de predição de cor é um tripleto (Y,U,V) em outro espaço de cor, por exemplo, uma segunda gama de cores para uma camada mais elevada ou de aperfeiçoamento de dados de vídeo. Primeiramente, o octante menor ou cuboide que cobre o tripleto de entrada (y,u,v) é localizado na tabela de consulta 3D. cada dos índices do vértice de partida do cuboide é derivado como a seguir:
Figure img0016
Em alguns exemplos, uma compensação adicional pode ser aplicada durante o cálculo de índice. Então, outros três índices do octante ou cuboide são derivados como (yIndex, uIndex+1, vIndex); (yIndex, uIndex+1, vIndex+1) e (yIndex+1, uIndex+1, vIndex+1). Esses quatro vértices podem corresponder a interpolação tetraédrica de quarto caso (P0, P1, P3, P7) que é ilustrado como tetraedro 156D na figura 12. O tripleto de saída (Y,U,V) é então obtido por interpolação tetraédrica, que interpola os valores de consulta 3D dos quatro vértices. Em outros exemplos, outros casos de interpolação tetraédrica podem ser usados. Alternativamente, todos os oito vértices do octante ou cuboide podem ser derivados. Nesse caso, interpolação tri-linear pode ser usada para derivar o tripleto de saída (Y, U, V).
[0162] Ainda em outro exemplo, uma tabela de consulta 3D pode ser sinalizada no SPS ou PPS. Então, no cabeçalho de fatia, um indicador adicional pode ser sinalizado para indicar se a tabela de consulta 3D será sobreposta para a fatia atual. Alternativamente ou/e adicionalmente, uma tabela de consulta 3D pode ser sinalizada no SPS e atualizada no PPS. Deve ser observado que informações comuns, como max_octant_depth, max_y_part_num_log2, input_bit_depth, e output_bit_depth, podem ser somente sinalizadas no nível mais elevado como no SPS ou PPS. Aqui max_octant_depth e max_y_part_num_log2 indicam o número máximo de divisão suportado da tabela de consulta 3D. em alguns casos, tal informação pode ser relacionada a perfil e/ou nível ao invés de ser sinalizada no nível mais elevado.
[0163] Como descrito acima, em um exemplo adicional, o codificador de vídeo 20 pode condicionalmente sinalizar um limite de divisão para pelo menos uma das componentes croma (isto é, U ou V) de uma tabela de consulta 3D para o decodificador de vídeo 30 com base pelo menos em uma das componentes croma sendo dividida em mais de um octante, isto é, o valor de divisão de base sendo maior que um. Em alguns casos, um ou ambos os componentes croma podem não ser uniformemente divididas. Em outras palavras, para um dado das componentes croma, pelo menos uma das divisões tem um tamanho diferente das outras divisões. O limite de divisão define uma divisão não uniforme de uma das componentes croma em dois ou mais octantes.
[0164] Convencionalmente, informações de limite de divisão para cada componente croma são sempre sinalizadas independente de se a componente croma é mesmo dividida em dois ou mais segmentos ou octantes. De acordo com as técnicas dessa revelação, em um exemplo, o codificador de vídeo 20 somente sinaliza o limite de divisão quando pelo menos uma das componentes croma (isto é, U ou V) é dividida em duas ou mais partes. De outro modo, o limite de divisão é desnecessário e não é sinalizado para o decodificador de vídeo. Em outro exemplo, o codificador de vídeo 20 somente sinaliza o limite de divisão quando cada das componentes croma (isto é, U e V) é dividida em duas ou mais partes.
[0165] No exemplo descrito com relação à Tabela 7 abaixo, a condição se baseia no elemento de sintaxe cur_octant_depth sendo igual a 1. Como descrito acima com relação à Tabela 4 acima, o elemento de sintaxe cur_octant_depth indica um valor de divisão de base como a profundidade de divisão máxima para a tabela de consulta 3D. quando o elemento de sintaxe cur_octant_depth é igual a 1, cada da componente luma, a primeira componente croma e a segunda componente croma são divididas em dois segmentos ou octantes. Nesse caso, ambas as componentes croma (isto é, U e V) devem ser divididas em duas partes para atender a condição para sinalizar informação de limite de divisão. Quaisquer edições, adições ou atualizações para SHVC WD3, citado acima, são indicados por texto em itálico. Tabela 7: Sintaxe de tabela de mapeamento de cores
Figure img0017
O elemento de sintaxe cb_part_threshold_minus_center especifica o limite de divisão para a primeira componente croma (isto é, Cb). Quando o elemento de sintaxe cb_part_threshold_minus_center não está presente, é inferido como 0. A variável CbPartThreshold é definida igual a (1<<(cm_input_luma_bit_depth_minus8+ cm_input_chroma_bit_depth_delta+7) + cb_part_threshold_minus_center. Quando um valor Cb é menor ou não maior, do que a variável CbPartThreshold, o valor Cb pertence à primeira divisão Cb. De outro modo, pertence a segunda divisão Cb. O elemento de sintaxe cr_part_threshold_minus_center especifica o limite de divisão para a segunda componente croma (isto é, Cr). Quando o elemento de sintaxe cr_part_threshold_minus_center não está presente, é inferido como 0. A variável CrPartThreshold é definida em (1<<(cm_input_luma_bit_depth_minus8+ cm_input_chroma_bit_depth_delta+7) + cr_part_threshold_minus_center. Quando um valor Cr é menor, ou não maior que a variável CrPartThreshold, o valor Cr pertence à primeira divisão Cr. De outro modo pertence a segunda divisão Cr. Deve ser observado que os elementos de sintaxe cb_part_threshold_minus_center e cr_part_threshold_minus_center não são quantizados antes da codificação.
[0166] A figura 14 é um diagrama de blocos ilustrando um exemplo de codificador de vídeo 20 que pode implementar técnicas para usar escalabilidade de gama de cores baseada em tabela de consulta 3D em codificação de vídeo de multicamadas. O codificador de vídeo 20 pode executar intra- e inter-codificação de blocos de vídeo em fatias de vídeo. Intra-codificação se baseia em predição espacial para reduzir ou remover redundância espacial em vídeo em um dado quadro ou imagem de vídeo. Inter- codificação se baseia em predição temporal para reduzir ou remover redundância temporal em vídeo em quadros ou imagens adjacentes de uma sequência de vídeo. Intra-modo (I modo) pode se referir a qualquer de vários modos de codificação espacial. Inter-modos, como predição unidirecional (modo P) ou bi-predição (modo B) podem se referir a qualquer de vários modos de codificação baseados em temporal.
[0167] Como mostrado na figura 14, o codificador de vídeo 20 recebe um bloco de vídeo atual em um quadro de vídeo a ser codificado. No exemplo da figura 14, o codificador de vídeo 20 inclui unidade de seleção de modo 40, uma memória de dados de vídeo 41, buffer de imagem decodificada 64, somador 50, unidade de processamento de transformada 52, unidade de quantização 54, e unidade de codificação por entropia 56. A unidade de seleção de modo 40, por sua vez, inclui unidade de compensação de movimento 44, unidade de estimação de movimento 42, unidade de processamento intra predição 46, unidade de divisão 48 e unidade de processamento de predição de cor 66. Para reconstrução de bloco de vídeo, o codificador de vídeo 20 também inclui unidade de quantização inversa 58, unidade de processamento de transformada inversa 60 e somador. Um filtro de desbloqueio (não mostrado na figura 14) também pode ser incluído para filtro limites de bloco para remover artefatos de bloqueio do vídeo reconstruído. Se desejado, o filtro de desbloqueio filtraria tipicamente a saída do somador 62. Filtros adicionais (em loop ou pós-loop) também podem ser usados além do filtro de desbloqueio. Tais filtros não são mostrados por brevidade, porém se desejado, podem filtrar a saída do somador 50 (como um filtro de loop de entrada).
[0168] Memória de dados de vídeo 41 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 41 podem ser obtidos, por exemplo, a partir da fonte de vídeo 18. O buffer de quadro decodificador 64 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 41 e buffer de quadro decodificado 64 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 41 e buffer de quadro decodificado 64 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 41 pode no chip com outros componentes de codificador de vídeo 20, ou fora de chip em relação àqueles componentes.
[0169] Durante o processo de codificação, o codificador de vídeo 20 recebe um quadro de vídeo ou fatia a ser codificada. O quadro ou fatia pode ser dividido em múltiplos blocos de vídeo. A unidade de estimação de movimento 42 e a unidade de compensação de movimento 44 executam codificação Inter-preditiva do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para fornecer predição temporal. A unidade de processamento intra predição 46 pode alternativamente executar codificação intra-preditiva do bloco de vídeo recebido em relação a um ou mais blocos de vizinhança no mesmo quadro ou fatia que o bloco a ser codificado para fornecer predição espacial. O codificador de vídeo 20 pode executar múltiplas passagens de codificação, por exemplo, selecionar um modo de codificação apropriado para cada bloco de dados de vídeo.
[0170] Além disso, a unidade de divisão 40 pode dividir blocos de dados de vídeo em sub-blocos, com base em avaliação de esquemas de divisão anteriores em passagens de codificação anteriores. Por exemplo, a unidade de divisão 48 pode inicialmente dividir um quadro ou fatia em LCUs e dividir cada das LCUs em sub-CUs com base em análise de distorção de taxa (por exemplo, otimização de distorção de taxa). A unidade de seleção de modo 40 pode produzir ainda uma estrutura de dados de quadtree indicativa de divisão de uma LCU em sub-CUs. CUs de nó de folha do quadtree podem incluir uma ou mais PUs e uma ou mais TUs.
[0171] A unidade de seleção de modo 40 pode selecionar um dos modos de codificação, intra ou inter, por exemplo, com base em resultados de erro, e fornece o bloco intra- ou inter-codificado resultante ao somador 50 para gerar dados de bloco residual e ao somador 62 para reconstruir o bloco codificado para uso como um quadro de referência. A unidade de seleção de modo 40 também fornece elementos de sintaxe, como vetores de movimento, indicadores de intra-modo, informação de divisão, e outras tais informações de sintaxe, para a unidade de codificação por entropia 56.
[0172] A unidade de estimação de movimento 42 e a unidade de compensação de movimento 44 podem ser altamente integradas, porém são ilustradas separadamente para fins conceptuais. A estimação de movimento, executada pela unidade de estimação de movimento 42, é o processo de gerar vetores de movimento, que estimam movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de uma PU de um bloco de vídeo em um quadro ou imagem de vídeo atual em relação a um bloco preditivo em um quadro de referência (ou outra unidade codificada) em relação ao bloco atual sendo codificado no quadro atual (ou outra unidade codificada). Um bloco preditivo é um bloco que é verificado casar estreitamente com o bloco a ser codificado, em termos de diferença de pixel, que pode ser determinado pela soma de diferença absoluta (SAD), soma de diferença quadrada (SSD) ou outra métrica de diferença. Em alguns exemplos, o codificador de vídeo 20 pode calcular valores para posições de pixel sub- inteiro de quadros de referência armazenados no buffer de quadro decodificado 64. Por exemplo, o codificador de vídeo 20 pode interpolar valores de posições de pixel de um quarto, posições de pixel de um oitavo, ou outras posições de pixel fracional do quadro de referência. Portanto, a unidade de estimação de movimento 42 pode executar uma busca de movimento em relação às posições de pixel total e posições de pixel fracional e transmitir um vetor de movimento com precisão de pixel fracional.
[0173] A unidade de estimação de movimento 42 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia inter-codificada por comparar a posição da PU com a posição de um bloco preditivo de um quadro de referência. O quadro de referência pode ser selecionado de uma primeira lista de quadro de referência (Lista 0) ou uma segunda lista de quadro de referência (Listas 1), cada uma das quais identifica um ou mais quadros de referência armazenados em buffer de quadro decodificado 64. A unidade de estimação de movimento 42 envia o vetor de movimento calculado para a unidade de codificação por entropia 56 e unidade de compensação de movimento 44.
[0174] Compensação de movimento, executada por unidade de compensação de movimento 44, pode envolver buscar ou gerar o bloco preditivo com base no vetor de movimento determinado pela unidade de estimação de movimento 42. Novamente, a unidade de estimação de movimento 42 e unidade de compensação de movimento 44 podem ser funcionalmente integradas, em alguns exemplos. Após receber o vetor de movimento para a PU do bloco de vídeo atual, a unidade de compensação de movimento 44 pode localizar o bloco preditivo para o qual o vetor de movimento aponta em uma das listas de quadro de referência. O somador 50 forma um bloco de vídeo residual por subtrair valores de pixel do bloco preditivo a partir dos valores de pixel do bloco de vídeo atual sendo codificado, formando valores de diferença de pixel, como discutido abaixo. Em geral, a unidade de estimação de movimento 42 executa estimação de movimento em relação a componentes de luma, e a unidade de compensação de movimento 44 usa vetores de movimento calculados com base nas componentes luma para ambas as componentes croma e componentes luma. A unidade de seleção de modo 40 pode também gerar elementos de sintaxe associados aos blocos de vídeo e a fatia de vídeo para uso pelo decodificador de vídeo 30 na decodificação dos blocos de vídeo da fatia de vídeo.
[0175] A unidade de processamento intra predição 46 pode intra-predizer um bloco atual, como alternativa para a inter-predição realizada pela unidade de estimação de movimento 42 e unidade de compensação de movimento 44, como descrito acima. Em particular, a unidade de processamento intra predição 46 pode determinar um modo intra-predição a usar para codificar um bloco atual. Em alguns exemplos, a unidade de processamento intra predição 46 pode codificar um bloco atual usando vários modos intra- predição, por exemplo, durante passagens de codificação separadas, e a unidade de processamento intra predição 46 (ou unidade de seleção de modo 40, em alguns exemplos) pode selecionar um modo intra-predição apropriado a usar a partir dos modos testados.
[0176] Por exemplo, a unidade de processamento intra predição 46 pode calcular valores de distorção de taxa usando uma análise de distorção de taxa para os vários modos intra-predição testados, e selecionar o modo intra- predição tendo as melhores características de distorção de taxa entre os modos testados. A análise de distorção de taxa determina em geral uma quantidade de distorção (ou erro) entre um bloco codificado e um bloco não codificado original que foi codificado para produzir o bloco codificado, bem como uma taxa de bits (isto é, um número de bits) usada para produzir o bloco codificado. A unidade de processamento intra predição 46 pode calcular razões a partir das distorções e taxas para os vários blocos codificados para determinar qual modo intra-predição exibe o melhor valor de distorção de taxa para o bloco.
[0177] Após selecionar um modo intra-predição para um bloco, a unidade de processamento intra predição 46 pode fornecer informações indicativas do modo intra- predição selecionado para o bloco para unidade de codificação por entropia 56. A unidade de codificação por entropia 56 pode codificar a informação indicando o modo intra-predição selecionado. O codificador de vídeo 20 pode incluir os dados de configuração de fluxo de bits transmitidos, que podem incluir uma pluralidade de tabelas de índice de modo intra-predição e uma pluralidade de tabelas de índice de modo intra-predição modificadas (também mencionadas como tabelas de mapeamento de palavra- código), definições de contextos de codificação para vários blocos, e indicações de um modo intra-predição mais provável, uma tabela de índice de modo intra-predição e uma tabela de índice de modo intra-predição modificado para uso para cada dos contextos.
[0178] O codificador de vídeo 20 forma um bloco de vídeo residual por subtrair os dados de predição a partir da unidade de seleção de modo 40 a partir do bloco de vídeo original sendo codificado. O somador 50 representa a componente ou componentes que executam essa operação de subtração. A unidade de processamento de transformada 52 aplica uma transformada, como uma transformada de cosseno discreto (DCT) ou uma transformada similar de modo conceptual, ao bloco residual, produzindo um bloco de vídeo compreendendo valores de coeficiente de transformada residual. A unidade de processamento de transformada 52 pode executar outras transformadas que são similares de modo conceptual a DCT. Transformadas de wavelet, transformadas de número inteiro, transformadas de subbandas ou outros tipos de transformadas poderiam ser também usadas. Em qualquer caso, a unidade de processamento de transformada 52 aplica a transformada ao bloco residual, produzindo um bloco de coeficientes de transformada residual. A transformada por converter a informação residual a partir de um domínio de valor de pixel em um domínio de transformada, como um domínio de frequência. A unidade de processamento de transformada 52 pode enviar os coeficientes de transformada resultantes para a unidade de quantização 54.
[0179] A unidade de quantização 54 quantiza os coeficientes de transformada para reduzir adicionalmente a taxa de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. O grau de quantização pode ser modificado por ajustar um parâmetro de quantização. Em alguns exemplos, a unidade de quantização 54 pode então executar uma varredura da matriz incluindo os coeficientes de transformada quantizada. Alternativamente, a unidade de codificação por entropia 56 pode executar a varredura.
[0180] Após quantização, a unidade de codificação por entropia 56 codifica por entropia os coeficientes de transformada quantizada. Por exemplo, a unidade de codificação por entropia 56 pode executar codificação de comprimento variável adaptável em contexto (CAVLC), codificação aritmética binária adaptável em contexto (CABAC), codificação aritmética binária adaptável em contexto com base em sintaxe (SBAC), codificação de Entropia de Divisão de intervalo de probabilidade (PIPE) ou outra técnica de codificação por entropia. No caso de codificação de entropia baseada em contexto, o contexto pode ser baseado em blocos de vizinhança. Após a codificação por entropia pela unidade de codificação por entropia 56, o fluxo de bits codificado pode ser transmitido para outro dispositivo (por exemplo, decodificador de vídeo 30) ou arquivado para transmissão ou recuperação posterior.
[0181] A unidade de quantização inversa 58 e unidade de processamento de transformada inversa 60 aplicam quantização inversa e transformação inversa, respectivamente, para reconstruir o bloco residual no domínio de pixel, por exemplo, para uso posterior como um bloco de referência. A unidade de compensação de movimento 44 pode calcular um bloco de referência por adicionar o bloco residual a um bloco preditivo de um dos quadros de buffer de quadro decodificado 64. A unidade de compensação de movimento 44 pode aplicar também um ou mais filtros de interpolação ao bloco residual reconstruído para calcular valores de pixel sub-inteiro para uso em estimação de movimento. O somador 62 adiciona o bloco residual reconstruído ao bloco de predição de movimento compensado produzido pela unidade de compensação de movimento 44 para produzir um bloco de vídeo reconstruído para armazenagem no buffer de quadro decodificado 64. O bloco de vídeo reconstruído pode ser usado pela unidade de estimação de movimento 42 e unidade de compensação de movimento 44 como um bloco de referência para inter-codificar um bloco em um quadro de vídeo subsequente.
[0182] De acordo com as técnicas descritas nessa revelação, o codificador de vídeo 20 é configurado para executar escalabilidade de gama de cores baseada em tabela de consulta 3D ao codificar dados de vídeo de multicamadas. O codificador de vídeo 20 pode predizer e codificar dados de vídeo de multicamadas de acordo com qualquer entre a extensão SHVC, a extensão MV-HEVC e a extensão 3D-HEVC, ou outras extensões de codificação de vídeo de multicamadas. Especificamente, a unidade de processamento de predição de cor 66 do codificador de vídeo 20 pode gerar quadros de referência inter-camada usados para predizer blocos de vídeo em um quadro de uma camada mais elevada dos dados de vídeo quando uma gama de cores para a camada mais elevada dos dados de vídeo é diferente de uma gama de cores para uma camada inferior de dados de vídeo.
[0183] A unidade de processamento de predição de cor 66 do codificador de vídeo 20 pode executar predição de cor usando uma tabela de consulta 3D para escalabilidade de gama de cores para converter dados de cor de um quadro de referência em uma primeira gama de cores para a camada inferior dos dados de vídeo em uma segunda gama de cores para a camada mais elevada dos dados de vídeo. Em alguns exemplos, a unidade de processamento de predição de cor 66 pode gerar uma tabela de consulta 3D separada para cada das componentes de cor, isto é, uma componente luma, uma primeira componente croma e uma segunda componente croma. Cada das tabelas de consulta 3D inclui uma dimensão de luma, uma primeira dimensão de croma e uma segunda dimensão de croma e é indexada usando as três componentes de cor independentes.
[0184] As técnicas dessa revelação se referem à sinalização da informação usada para gerar tabelas de consulta 3D para escalabilidade de gama de cores. Em alguns exemplos de tais técnicas, o codificador de vídeo 20 pode codificar informações de divisão e/ou valores de cores de uma tabela de consulta 3D gerada para escalabilidade de gama de cores. As técnicas descritas nessa revelação podem ser particularmente úteis em sinalizar as informações usadas para gerar tabelas de consulta 3D assimétricas e/ou não equilibradas.
[0185] Em um exemplo das técnicas reveladas, a unidade de processamento de predição de cor 66 do codificador de vídeo 20 pode gerar uma tabela de consulta 3D com divisão mais grosseira para as primeira e segunda componentes croma e divisão mais fina para a componente luma. A unidade de processamento de predição de cor 66 pode gerar essa tabela de consulta 3D por dividir cada das componentes de cor de primeiro croma, segundo croma e luma em um primeiro número de octantes de acordo com um valor de divisão de base, por exemplo, uma profundidade de divisão máxima para a tabela de consulta 3D, e então dividir adicionalmente cada do primeiro número de octantes da componente luma com base em um valor de divisão de luma. Desse modo, cada das primeira e segunda componentes croma da tabela de consulta 3D são divididas em um número menor ou menos octantes (isto é, dividido mais grosseiro) e a componente luma da tabela de consulta 3D é dividida em um n'mero maior ou mais octantes (isto é, dividido mais fino).
[0186] Como exemplo, o valor de divisão de base é igual a 1 de modo que cada das componentes de cor é dividido em um único octante, e o valor de divisão de luma é igual a 4 de modo que o único octante da componente luma é dividido em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 4x1x1. Como outro exemplo, o valor de divisão de base é igual a 2 de modo que cada das componentes de cor é dividida em dois octantes, e o valor de divisão de luma é igual a 4 de modo que cada dos dois octantes da componente luma é dividido em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 8x2x2. Como pode ser visto, um valor de divisão inferior resulta em uma divisão mais grosseira (isto é, um número menor de octantes) para uma componente de cor.
[0187] Em alguns casos, a unidade de processamento de predição de cor 66 gera pelo menos um elemento de sintaxe (Por exemplo, um primeiro elemento de sintaxe) indicando o valor de divisão de luma. Em outros casos, o valor de divisão de luma pode ser derivado ou conhecido tanto no codificador de vídeo 20 como decodificador de vídeo 30. Como exemplo, a unidade de processamento de predição de cor 66 pode derivar o valor de divisão de luma com base pelo menos em parte no valor de divisão de base. Em alguns casos, a unidade de processamento de predição de cor 66 também pode gerar pelo menos um elemento de sintaxe (Por exemplo, um segundo elemento de sintaxe) indicando o valor de divisão de base. Em outros casos, o valor de divisão de base pode ser um valor predefinido conhecido tanto no codificador de vídeo 20 como decodificador de vídeo 30. A unidade de codificação por entropia 56 do codificador de vídeo 20 pode então codificar por entropia o primeiro e/ou segundo elemento.
[0188] Além disso, o codificador de vídeo 20 pode codificar condicionalmente um ou mais elementos de sintaxe indicando um limite de divisão para pelo menos uma das componentes croma. O limite de divisão define uma divisão não uniforme de uma das componentes croma em dois ou mais octantes. De acordo com alguns exemplos das técnicas dessa revelação, o codificador de vídeo 20 somente codifica os elementos de sintaxe indicando o limite de divisão quando pelo menos uma das componentes croma é dividida em mais de um octante, isto é, quando o valor de divisão de base é maior que um. De outro modo, a sinalização do limite de divisão é desnecessária.
[0189] Em outro exemplo das técnicas reveladas, o codificador de vídeo 20 pode gerar uma tabela de consulta 3D com base em um número de octantes para cada das componentes de cor de luma, primeiro croma e segundo croma, e valores de cor para cada dos octantes. Como descrito acima, em alguns casos, o codificador de vídeo 20 pode codificar pelo menos um elemento de sintaxe indicando o número de octantes para pelo menos uma das componentes de cor da tabela de consulta 3D. o codificador de vídeo 20 pode também codificar os valores de cor para cada dos octantes para cada das componentes de cor. Por exemplo, o codificador de vídeo 20 pode codificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D. a função de mapeamento de cor linear é usada para converter dados de cor na primeira gama de cores para a camada inferior de dados de vídeo na segunda gama de cores para a camada mais elevada de dados de vídeo. Os coeficientes de mapeamento de cor para a função de mapeamento de cor linear são fatores de ponderação entre componentes de cor das camadas inferior e mais elevada dos dados de vídeo. Para cada das componentes de cor, um dos coeficientes de mapeamento de cor pode ser um coeficiente principal que define um fator de ponderação entre a mesma componente de cor das camadas inferior e mais elevada dos dados de vídeo.
[0190] Os coeficientes de mapeamento de cor para a função de mapeamento de cor linear podem ser derivados como valores de ponto flutuante. Antes da codificação dos coeficientes de mapeamento de cor, a unidade de processamento de predição de cor 66 do codificador de vídeo 20 pode converter os valores de ponto flutuante dos coeficientes de mapeamento de cor em valores inteiros. A conversão pode usar uma profundidade de bit para os valores inteiros com base em pelo menos uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D. Além disso, a unidade de processamento de predição de cor 66 pode limitar os valores dos coeficientes de mapeamento de cor para estarem compreendidos em uma faixa dada com base em um valor fixo predefinido ou um valor dependendo pelo menos de uma entre a profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D.
[0191] Em alguns exemplos das técnicas dessa revelação, a unidade de processamento de predição de cor 66 pode predizer um ou mais dos coeficientes de mapeamento de cor para codificar valores residuais entre valores originais dos coeficientes de mapeamento de cor e os valores preditos dos coeficientes de mapeamento de cor. Por exemplo, para um primeiro octante para cada das componentes de cor, a unidade de processamento de predição de cor 66 pode predizer os coeficientes de mapeamento de cor da função de mapeamento de cor linear com base em valores fixos predefinidos. Em um exemplo, para um primeiro octante para cada das componentes de cor, a unidade de processamento de predição de cor 66 pode codificar um coeficiente principal da função de mapeamento de cor linear com base em valor predito igual a um valor não zero predefinido, e codificar quaisquer coeficientes de mapeamento de cor restantes da função de mapeamento de cor linear com base em um valor predito igual a zero. Nesse exemplo, a unidade de processamento de predição de cor 66 pode codificar os coeficientes de mapeamento de cor de quaisquer octantes restantes para cada das componentes de cor com base em valores preditos a partir de pelo menos um octante anteriormente codificado, como o primeiro octante.
[0192] A unidade de codificação por entropia 56 do codificador de vídeo 20 pode então codificar por entropia os valores residuais dos coeficientes de mapeamento de cor para a função de mapeamento de cor linear para cada dos octantes para cada das componentes de cor. Em alguns casos, antes da codificação por entropia, o codificador de vídeo 20 pode quantizar os valores residuais dos coeficientes de mapeamento de cor usando a unidade de quantização 54 com base em um valor de quantização determinado. O codificador de vídeo 20 pode codificar o valor de quantização determinado.
[0193] Após gerar a tabela de consulta 3D, a unidade de processamento de predição de cor 66 executa predição de cor de um quadro de referência para a camada inferior dos dados de vídeo usando a tabela de consulta 3D, e gera pelo menos um quadro de referência inter-camada para a camada mais elevada dos dados de vídeo com base no quadro de referência predito de cor. Após gerar o quadro de referência inter-camadas, a unidade de compensação de movimento 44 do codificador de vídeo 20 pode operar como descrito acima para predizer blocos de vídeo em um quadro da camada mais elevada dos dados de vídeo com base nos quadros de referência inter-camadas gerados usando a tabela de consulta 3D. o codificador de vídeo 20 pode então codificar dados residuais dos blocos de vídeo em um fluxo de bits para transmissão para o decodificador de vídeo 30.
[0194] A figura 15 é um diagrama de blocos ilustrando um exemplo de decodificador de vídeo 30 que pode implementar técnicas para determinar o uso da escalabilidade de gama de cores com base na tabela de consulta 3D em codificação de vídeo de multicamadas. No exemplo da figura 15, o decodificador de vídeo 30 inclui uma unidade de decodificação por entropia 70, uma memória de dados de vídeo 71, unidade de compensação de movimento 72, unidade de processamento intra predição 74, unidade de processamento de predição de cor 86, unidade de quantização inversa 76, unidade de processamento de transformada inversa 78, buffer de quadro decodificado 82 e somador 80. O decodificador de vídeo 30 pode, em alguns casos, executar uma passagem de decodificação genericamente recíproca à passagem de codificação descrita com relação ao codificador de vídeo 20 (figura 14). A unidade de compensação de movimento 72 pode gerar dados de predição com base em vetores de movimento recebidos a partir da unidade de decodificação por entropia 70, enquanto a unidade de processamento intra predição 74 pode gerar dados de predição com base em indicadores de modo intra-predição recebidos da unidade de decodificação por entropia 70.
[0195] A memória de dados de vídeo 71 pode armazenar dados de vídeo, como um fluxo de bits de vídeo codificado, a serem decodificados pelos componentes do decodificador de vídeo 30. Os dados de vídeo armazenados na memória de dados de vídeo 71 podem ser obtidos a partir da mídia legível em computador 16, por exemplo, 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ísica. A memória de dados de vídeo 71 pode formar um buffer de quadro codificado (CPB) que armazena dados de vídeo codificados a partir de um fluxo de bits de vídeo codificado. O buffer de quadro decodificado 82 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 71 e buffer de quadro decodificado 82 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 71 e buffer de quadro decodificado 82 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 71 pode no chip com outros componentes de decodificador de vídeo 30, ou fora de chip em relação àqueles componentes.
[0196] Durante o processo de decodificação, o decodificador de vídeo 30 recebe um fluxo de bits de vídeo codificado que representa blocos de vídeo de uma fatia de vídeo codificado e elementos de sintaxe associados a partir do codificador de vídeo 20. A unidade de decodificação por entropia 70 do decodificador de vídeo 30- decodifica por entropia o fluxo de bits para gerar coeficientes quantizados, vetores de movimento ou indicadores de modo intra-predição, e outros elementos de sintaxe. A unidade de decodificação por entropia 70 envia os vetores de movimento para e outros elementos de sintaxe para a unidade de compensação de movimento 72. O decodificador de vídeo 30 pode receber os elementos de sintaxe no nível de fatia de vídeo e/ou no nível de bloco de vídeo.
[0197] Quando a fatia de vídeo é codificada como uma fatia intra-codificada (I), a unidade de processamento intra predição 74 pode gerar dados de predição para um bloco de vídeo da fatia de vídeo atual com base em um modo intra predição sinalizado e dados a partir de blocos anteriormente decodificados do quadro ou imagem atual. Quando o quadro de vídeo é codificado como uma fatia inter-codificada (isto é, B ou P), a unidade de compensação de movimento 72 produz blocos preditivos para um bloco de vídeo da fatia de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe recebidos da unidade de decodificação por entropia 70. Os blocos preditivos podem ser produzidos de um dos quadros de referência em uma das listas de quadro de referência. O decodificador de vídeo 30 pode construir as listas de quadro de referência, Lista 0 e Lista 1, usando técnicas de construção default com base em quadros de referência armazenados no buffer de quadro decodificado 82. A unidade de compensação de movimento 72 determina informações de predição para um bloco de vídeo da fatia de vídeo atual por analisar os vetores de movimento e outros elementos de sintaxe, e usa as informações de predição para produzir os blocos preditivos para o bloco de vídeo atual sendo decodificado. Por exemplo, a unidade de compensação de movimento 72 usa alguns dos elementos de sintaxe recebidos para determinar um modo de predição (por exemplo, intra- ou inter-predição) usado para codificar os blocos de vídeo da fatia de vídeo, um tipo de fatia inter-predição (Por exemplo, fatia B ou fatia P), informações de construção para uma ou mais das listas de quadro de referência para a fatia, vetores de movimento para cada bloco de vídeo inter- codificado da fatia, status inter-predição para cada bloco de vídeo inter-codificado da fatia, e outras informações para decodificar os blocos de vídeo na fatia de vídeo atual.
[0198] A unidade de compensação de movimento 72 pode executar também interpolação com base em filtros de interpolação. A unidade de compensação de movimento 72 pode usar filtros de interpolação como usado por codificador de vídeo 20 durante codificação dos blocos de vídeo para calcular valores interpolados para pixels de sub-inteiro de blocos de referência. Nesse caso, a unidade de compensação de movimento 72 pode determinar os filtros de interpolação usados pelo codificador de vídeo 20 a partir dos elementos de sintaxe recebidos e usar os filtros de interpolação para produzir blocos preditivos.
[0199] A unidade de quantização inversa 76 quantiza inverso, isto é, desquantiza, os coeficientes de transformada quantizada pelo decodificador de vídeo 30 para cada bloco de vídeo na fatia de vídeo para determinar um grau de quantização e, de modo semelhante, um grau de quantização inversa que deve ser aplicada. A unidade de processamento de transformada inversa 78 aplica uma transformada inversa, por exemplo, um DCT inverso, uma transformada de inteiro inverso, ou um processo de transformada inversa similar de modo conceptual, aos coeficientes de transformada para produzir blocos residuais no domínio de pixel.
[0200] Após a unidade de compensação de movimento 72 gerar o bloco preditivo para o bloco de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe, o decodificador de vídeo 30 forma um bloco de vídeo decodificado por somar os blocos residuais a partir da unidade de processamento de transformada inversa 78 com os blocos preditivos correspondentes gerados pela unidade de compensação de movimento 72. O somador 80 representa a componente ou componentes que executam essa operação de soma. Se desejado, um filtro de desbloqueio também pode ser aplicado para filtrar os blocos decodificados para remover artefatos de bloqueio. Outros filtros de loop (no loop de codificação ou após o loop de codificação) também podem ser usados para transições de pixel suaves, ou de outro modo aperfeiçoar a qualidade de vídeo. Os blocos de vídeo decodificados em um dado quadro ou imagem são então armazenados no buffer de quadro decodificado 82, que armazena quadros de referência usados para compensação de movimento subsequente. O buffer de quadro decodificado 82 também armazena vídeo decodificado para apresentação posterior em um dispositivo de exibição, como dispositivo de exibição 32 da figura 1.
[0201] De acordo com alguns exemplos das técnicas descritas nessa revelação, o decodificador de vídeo 30 é configurado para executar escalabilidade de gama de cores baseada em tabela de consulta 3D ao decodificar dados de vídeo de multicamadas. O decodificador de vídeo 30 pode decodificar e reconstruir dados de vídeo de multicamadas preditos de acordo com qualquer da extensão SHVC, extensão MV-HEVC, extensão 3D-HEVC, ou outras extensões de codificação de vídeo de multicamadas para HEVC. Especificamente, a unidade de processamento de predição de cor 86 do decodificador de vídeo 30 pode gerar quadros de referência inter-camadas usados para predizer blocos de vídeo em um quadro de uma camada mais elevada dos dados de vídeo quando uma gama de cores para a camada mais elevada dos dados de vídeo é diferente de uma gama de cores para uma camada inferior de dados de vídeo.
[0202] A unidade de processamento de predição de cor 86 do decodificador de vídeo 30 pode executar predição de cor usando uma tabela de consulta 3D para escalabilidade de gama de cores para converter dados de cor de um quadro de referência em uma primeira gama de cores para a camada inferior dos dados de vídeo em uma segunda gama de cores para a camada mais elevada dos dados de vídeo. Em alguns exemplos, a unidade de processamento de predição de cor 86 pode gerar uma tabela de consulta 3D separada para cada das componentes de cor, isto é, uma componente luma, uma primeira componente croma e uma segunda componente croma. Cada das tabelas de consulta 3D inclui uma dimensão de luma, uma primeira dimensão de croma e uma segunda dimensão de croma, e é indexada usando as três componentes de cores independentes.
[0203] As técnicas dessa revelação refere-se a sinalização da informação usada para gerar tabelas de consulta 3D para escalabilidade de gama de cores. De acordo com as técnicas, o decodificador de vídeo 30 pode decodificar informações de divisão e/ou valores de cor para gerar uma tabela de consulta 3D para executar escalabilidade de gama de cores. As técnicas descritas nessa revelação podem ser particularmente úteis em sinalizar as informações usadas para gerar tabelas de consulta 3D assimétricas e/ou não equilibradas.
[0204] Em um exemplo das técnicas reveladas, a unidade de processamento de predição de cor 86 do decodificador de vídeo 30 pode gerar uma tabela de consulta 3D com divisão mais grosseira para as primeira e segunda componentes croma e divisão mais fina para a componente luma. A unidade de processamento de predição de cor 86 pode gerar essa tabela de consulta 3D por dividir cada das componentes de cor de primeiro croma, segundo croma e luma em um primeiro número de octantes de acordo com um valor de divisão de base, por exemplo, uma profundidade de divisão máxima para a tabela de consulta 3D, e então dividindo adicionalmente cada do primeiro número de octantes da componente luma com base em um valor de divisão de luma. Desse modo, cada das primeira e segunda componentes croma da tabela de consulta 3D são divididas em um número menor ou menos octantes (isto é, dividido mais grosseiro) e a componente luma da tabela de consulta 3D é dividida em um número maior ou mais octantes (isto é, dividido mais fino).
[0205] Como exemplo, o valor de divisão de base é igual a 1 de modo que cada das componentes de cor é dividida em um único octante, e o valor de divisão de luma é igual a 4 de modo que o octante único da componente luma é dividido em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 4x1x1. Como outro exemplo, o valor de divisão de base é igual a 2 de modo que cada das componentes de cor é dividido em dois octantes, e o valor de divisão de luma é igual a 4 de modo que cada dos dois octantes da componente luma seja dividido em quatro octantes, o que resulta em uma tabela de consulta 3D de tamanho 8x2x2. Como pode ser visto, um valor de divisão inferior resulta em uma divisão mais grosseira (isto é, um número menor de octantes) para uma componente de cor.
[0206] Em alguns casos, a unidade de decodificação por entropia 70 do decodificador de vídeo 30 decodifica por entropia pelo menos um elemento de sintaxe (Por exemplo, um primeiro elemento de sintaxe) indicando o valor de divisão de luma. Em outros casos, o valor de divisão de luma pode ser derivado ou conhecido tanto no codificador de vídeo 20 como decodificador de vídeo 30. Como exemplo, a unidade de processamento de predição de cor 86 pode derivar o valor de divisão de luma com base pelo menos em parte no valor de divisão de base. Em alguns casos, a unidade de decodificação por entropia 70 pode também decodificar pelo menos um elemento de sintaxe (por exemplo, um segundo elemento de sintaxe) indicando o valor de divisão de base. Em outros casos, o valor de divisão de base pode ser um valor predefinido conhecido tanto no codificador de vídeo 20 como decodificador de vídeo 30. A unidade de processamento de predição de cor 86 usa o valor de divisão de base sinalizado ou predefinido e o valor de divisão de luma sinalizado ou derivado para gerar a tabela de consulta 3D com divisão mais grosseira para as primeira e segunda componentes croma e divisão mais fina para a componente luma, como descrito acima.
[0207] Além disso, o decodificador de vídeo 30 pode decodificar condicionalmente um ou mais elementos de sintaxe indicando um limite de divisão para pelo menos uma das componentes croma. O limite de divisão define uma divisão não uniforme de uma das componentes croma em dois ou mais octantes. De acordo com as técnicas dessa revelação, o decodificador de vídeo 30 somente decodifica os elementos de sintaxe indicando o limite de divisão quando pelo menos uma das componentes croma é dividida em mais de um octante, isto é, quando o valor de divisão de base é maior que um. De outro modo, a decodificação do limite de divisão é desnecessária.
[0208] Em outro exemplo das técnicas reveladas, o decodificador de vídeo 30 pode gerar uma tabela de consulta 3D baseada em um número de octantes para cada das componentes de cor de luma, primeiro croma e segundo croma e valores de cor para cada dos octantes. Como descrito acima, em alguns casos, o decodificador de vídeo 30 pode decodificar pelo menos um elemento de sintaxe indicando o número de octantes para pelo menos uma das componentes de cor da tabela de consulta 3D, ou de outro modo determinar o número de octantes para cada das componentes de cor da tabela de consulta 3D. o decodificador de vídeo 30 pode também decodificar os valores de cor para cada dos octantes para cada das componentes de cor. Por exemplo, o decodificador de vídeo 30 pode decodificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor em uma tabela de consulta 3D. a função de mapeamento de cor linear é usada para converter dados de cor na primeira gama de cores para a camada inferior dos dados de vídeo na segunda gama de cores para a camada mais elevada de dados de vídeo. Os coeficientes de mapeamento de cor para a função de mapeamento de cor linear são fatores de ponderação entre componentes de cor das camadas inferior e mais elevada dos dados de vídeo. Para cada das componentes de cor, um dos coeficientes de mapeamento de cor pode ser um coeficiente principal que define um fator de ponderação entre a mesma componente de cor das camadas inferior e mais elevada dos dados de vídeo.
[0209] Os coeficientes de mapeamento de cor para função de mapeamento de cor linear são primeiramente derivados como valores de ponto flutuante. Os valores de ponto flutuante são então convertidos ou quantizados em valores inteiros são sinalizados como valores inteiros. A conversão pode usar uma profundidade de bit para os valores inteiros com base pelo menos em uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D. Além disso, a unidade de processamento de predição de cores 86 pode limitar os valores dos coeficientes de mapeamento de cor para estarem compreendidos em uma faixa dada com base em um valor fixo predefinido ou um valor dependente de pelo menos uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D.
[0210] A unidade de decodificação por entropia 70 do decodificador de vídeo 30 pode decodificar por entropia valores residuais dos coeficientes de mapeamento de cor para a função de mapeamento de cor linear para cada dos octantes para cada das componentes de cor. Em alguns casos, após decodificação por entropia e antes da reconstrução, o decodificador de vídeo 30 pode quantizar inverso os valores residuais dos coeficientes de mapeamento de cor usando unidade de quantização inversa 76 com base em um valor de quantização determinado. O decodificador de vídeo 30 pode decodificar um elemento de sintaxe indicando o valor de quantização determinado.
[0211] De acordo com as técnicas dessa revelação, a unidade de processamento de predição de cor 86 pode predizer um ou mais dos coeficientes de mapeamento de cor para reconstruir valores dos coeficientes de mapeamento de cor com base nos valores residuais dos coeficientes de mapeamento de cor e os valores preditos dos coeficientes de mapeamento de cor. Por exemplo, para um primeiro octante para cada das componentes de cor, a unidade de processamento de predição de cor 86 pode predizer os coeficientes de mapeamento de cor da função de mapeamento de cor linear com base em valores fixos predefinidos. Em um exemplo, para um primeiro octante para cada das componentes de cor, a unidade de processamento de predição de cor 86 pode decodificar um coeficiente principal da função de mapeamento de cor linear com base em um valor predito igual a um valor não zero predefinido, e indicar quaisquer coeficientes de mapeamento de cor restantes da função de mapeamento de cor linear com base em um valor predito igual a zero. Nesse exemplo, a unidade de processamento de predição de cor 86 pode decodificar os coeficientes de mapeamento de cor de quaisquer octantes restantes para cada das componentes de cor com base em valores preditos as partir de pelo menos um octante previamente decodificado, como o primeiro octante.
[0212] Após geração da tabela de consulta 3D, a unidade de processamento de predição de cor 86 executa predição de cor de um quadro de referência para a camada inferior dos dados de vídeo usando a tabela de consulta 3D, e gera um quadro de referência inter-camadas para a camada mais elevada dos dados de vídeo com base no quadro de referência predito de cor. Após gerar os quadros de referência inter-camadas, a unidade de compensação de movimento 72 do decodificador de vídeo 30 pode operar como descrito acima para reconstruir blocos de vídeo em um quadro da camada mais elevada dos dados de vídeo com base em dados residuais decodificados e os quadros de referência inter-camadas gerados usando a tabela de consulta 3D.
[0213] A figura 16 é um fluxograma ilustrando uma operação de exemplo de informações de divisão de codificação para pelo menos uma das componentes de cor de uma tabela de consulta 3D. A operação de exemplo da figura 16 é descrita aqui como sendo realizada por unidade de processamento de predição de cor 66 do codificador de vídeo 20 da figura 14. Em outros exemplos, a operação pode ser realizada por unidade de processamento de predição de cor 144 da figura 8.
[0214] De acordo com as técnicas dessa revelação, a unidade de processamento de predição de cor 66 do codificador de vídeo 20 pode gerar uma tabela de consulta 3D com divisão mais grosseira para as primeira e segunda componentes croma e divisão mais fina para a componente luma. A unidade de processamento de predição de cor 66 pode gerar essa tabela de consulta 3D por dividir cada das componentes luma, primeiro croma e segundo croma da tabela de consulta 3D em um primeiro número de octantes com base em um valor de divisão de base (180). Em um exemplo, o valor de divisão de base pode ser uma profundidade de divisão máxima para a tabela de consulta 3D. a unidade de processamento de predição de cor 66 então divide adicionalmente cada do primeiro número de octantes da componente luma em um segundo número de octantes com base em um valor de divisão de luma (182).
[0215] Em alguns casos, o codificador de vídeo 20 pode codificar pelo menos um elemento de sintaxe (por exemplo, um primeiro elemento de sintaxe) indicando o valor de divisão de luma para a componente luma da tabela de consulta 3D. Em outros casos, o valor de divisão de luma pode ser derivado ou conhecido tanto no codificador de vídeo 20 como decodificador de vídeo 30. Em alguns casos, o codificador de vídeo 20 pode gerar também pelo menos um elemento de sintaxe adicional (por exemplo, um segundo elemento de sintaxe) indicando o valor de divisão de base para a tabela de consulta 3D. Em outros casos, o valor de divisão de base pode ser um valor predefinido conhecido tanto no codificador de vídeo 20 como decodificador de vídeo 30.
[0216] Além disso, o codificador de vídeo 20 pode codificar condicionalmente um ou mais elementos de sintaxe indicando um limite de divisão para pelo menos uma das componentes croma. O limite de divisão define uma divisão não uniforme de uma das componentes croma em dois ou mais octantes. De acordo com as técnicas dessa revelação, o codificador de vídeo 20 codifica os elementos de sintaxe indicando o limite de divisão para pelo menos uma das componentes croma com base em uma das componentes croma sendo dividida em mais de um octante, isto é, o valor de divisão de base sendo maior que um.
[0217] O codificador de vídeo 20 pode codificar também valores de cor para cada dos octantes para cada das componentes de cor. Por exemplo, o codificador de vídeo 20 pode codificar valores de cor de vértices para cada dos octantes de cada das componentes de cor. Como outro exemplo, o codificador de vídeo 20 pode codificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D. Desse modo, um decodificador de vídeo, como decodificador de vídeo 30 da figura 15, pode gerar uma tabela de consulta 3D baseada na informação de divisão sinalizada e valores de cor sinalizados para executar escalabilidade de gama de cores para decodificar dados de vídeo de multicamadas.
[0218] A figura 17 é um fluxograma ilustrando uma operação de exemplo de decodificar informações de divisão para pelo menos uma das componentes de cor de uma tabela de consulta 3D. A operação de exemplo da figura 17 é descrita aqui como sendo realizada por unidade de processamento de predição de cor 86 do decodificador de vídeo 30 da figura 15. Em outros exemplos, a operação pode ser realizada por unidade de processamento de predição de cor 144 da figura 8.
[0219] De acordo com as técnicas dessa revelação, o decodificador de vídeo 30 determina um valor de divisão de base para a tabela de consulta 3D (186). Em alguns casos, o decodificador de vídeo 30 pode decodificar, a partir de um fluxo de bits recebido, pelo menos um elemento de sintaxe (por exemplo, um segundo elemento de sintaxe) indicando o valor de divisão de base. Em outros casos, o valor de divisão de base pode ser um valor predefinido conhecido tanto no codificador de vídeo 20 como decodificador de vídeo 30. O decodificador de vídeo 30 também determina um valor de divisão de luma para uma componente luma da tabela de consulta 3D (188). Em alguns casos, o decodificador de vídeo 30 pode decodificar, a partir do fluxo de bits recebido, pelo menos um elemento de sintaxe (por exemplo, um primeiro elemento de sintaxe) indicando o valor de divisão de luma. Em outros casos, o decodificador de vídeo 30 pode derivar o valor de divisão de luma. Em um exemplo, o decodificador de vídeo 30 pode derivar o valor de divisão de luma com base pelo menos em parte no valor de divisão de base.
[0220] A unidade de processamento de predição de cor 86 do decodificador de vídeo 30 usa o valor de divisão de base e o valor de divisão de luma para gerar a tabela de consulta 3D com divisão mais grosseira para as primeira e segunda componentes croma e divisão mais fina para a componente luma. A unidade de processamento de predição de cor 86 pode gerar essa tabela de consulta 3D por dividir cada das componentes luma, primeiro croma, e segundo croma da tabela de consulta 3D em um primeiro número de octantes com base no valor de divisão de base (190). Em um exemplo, o valor de divisão de base pode ser uma profundidade de divisão máxima para a tabela de consulta 3D. a unidade de processamento de predição de cor 86 então divide adicionalmente cada do primeiro número de octantes da componente luma em um segundo número de octantes com base em um valor de divisão de luma (192). Desse modo, a componente luma pode ser dividida para ter um número maior de octantes do que cada das componentes croma.
[0221] Além disso, o decodificador de vídeo 30 pode decodificar condicionalmente um ou mais elementos de sintaxe indicando um limite de divisão para pelo menos uma das componentes croma. O limite de divisão define uma divisão não uniforme de uma das componentes croma em dois ou mais octantes. De acordo com as técnicas dessa revelação, o decodificador de vídeo 30 decodifica os elementos de sintaxe indicando o limite de divisão para pelo menos uma das componentes croma com base em uma das componentes croma sendo dividida em mais de um octante, isto é, o valor de divisão de base sendo maior que um.
[0222] O decodificador de vídeo 30 também pode decodificar valores de cor para cada dos octantes para cada das componentes de cor. Por exemplo, o decodificador de vídeo 30 pode decodificar valores de cor de vértices para cada dos octantes de cada das componentes de cor. Como outro exemplo, o decodificador de vídeo 30 pode decodificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D. Desse modo, o decodificador de vídeo 30 pode gerar uma tabela de consulta 3D com base na informação de divisão sinalizada e valores de cores sinalizados para executar escalabilidade de gama de cores para decodificar dados de vídeo de multicamadas.
[0223] A figura 18 é um fluxograma ilustrando uma operação de exemplo de codificar valores de cor para cada dos octantes para cada das componentes de cor de uma tabela de consulta 3D. a operação de exemplo da figura 18 é descrita aqui como sendo realizada por unidade de processamento de predição de cor 66 do codificador de vídeo 20 da figura 14. Em outros exemplos, a operação pode ser realizada por unidade de processamento de predição de cor 144 da figura 8.
[0224] De acordo com as técnicas dessa revelação, o codificador de vídeo 20 pode gerar uma tabela de consulta 3D com base em um número de octantes para cada das componentes de cor de luma, primeiro croma e segundo croma, e valores de cor para cada dos octantes (200). O codificador de vídeo 20 pode codificar os valores de cor para cada dos octantes para cada das componentes de cor. Mais especificamente, para cada dos octantes para cada das componentes de cor, o codificador de vídeo 20 pode codificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D (202).
[0225] Antes da codificação dos coeficientes de mapeamento de cor, a unidade de processamento de predição de cor 66 do codificador de vídeo 20 pode converter valores de ponto flutuante dos coeficientes de mapeamento de cor em valores inteiros usando profundidade de bit baseada pelo menos em uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D. além disso, a unidade de processamento de predição de cor 66 pode limitar os valores dos coeficientes de mapeamento de cor para estarem compreendidos em uma faixa com base em um valor fixo predefinido ou um valor dependente de pelo menos uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D.
[0226] A unidade de processamento de predição de cor 66 pode predizer um ou mais dos coeficientes de mapeamento de cor para codificar valores residuais entre valores originais dos coeficientes de mapeamento de cor e os valores preditos dos coeficientes de mapeamento de cor. Por exemplo para um primeiro octante para cada das componentes de cor, a unidade de processamento de predição de cor 66 pode codificar um coeficiente principal da função de mapeamento de cor linear com base em um valor predito igual a um valor não zero predefinido, e codificar quaisquer coeficientes de mapeamento de cor restantes da função de mapeamento de cor linear com base em um valor predito igual a zero. Nesse exemplo, a unidade de processamento de predição de cor 66 pode codificar os coeficientes de mapeamento de cor de quaisquer octantes restantes para cada das componentes de cor com base em valores preditos de pelo menos um octante anteriormente codificado, como o primeiro octante. Em alguns casos, antes da codificação dos valores residuais dos coeficientes de mapeamento de cor, o codificador de vídeo 20 pode quantizar os valores residuais dos coeficientes de mapeamento de cor com base em um valor de quantização determinado.
[0227] O codificador de vídeo 20 pode codificar também pelo menos um elemento de sintaxe indicando o número de octantes para pelo menos uma das componentes de cor da tabela de consulta 3D. desse modo, um decodificador de vídeo, como decodificador de vídeo 30 a partir da figura 15, pode gerar uma tabela de consulta 3D com base na informação de divisão sinalizada e os valores de cores sinalizados para executar escalabilidade de gama de cores para decodificar dados de vídeo de multicamada.
[0228] A figura 19 é um fluxograma ilustrando uma operação de exemplo de decodificar valores de cor para cada dos octantes para cada das componentes de cor de uma tabela de consulta 3D. a operação de exemplo da figura 19 é descrita aqui como sendo executada pela unidade de processamento de predição de cor 86 do decodificador de vídeo 30 da figura 15. Em outros exemplos, a operação pode ser realizada por unidade de processamento de predição de cor 144 da figura 8.
[0229] De acordo com alguns exemplos das técnicas dessa revelação, o decodificador de vídeo 30 determina um número de octantes para cada das componentes de cor de luma, primeiro croma e segundo croma da tabela de consulta 3D (204). Em alguns casos, o decodificador de vídeo 30 pode decodificar, a partir de um fluxo de bits recebido, pelo menos um elemento de sintaxe indicando o número de octantes para pelo menos uma das componentes de cor da tabela de consulta 3D. O decodificador de vídeo 30 também decodifica valores de cores para cada dos octantes para cada das componentes de cor. Mais especificamente, para cada dos octantes para cada das componentes de cor, o decodificador de vídeo 30 pode decodificar coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D (206). A unidade de processamento de predição de cor 86 do decodificador de vídeo 30 então gera a tabela de consulta 3D com base no número de octantes para cada das componentes de cor de luma, primeiro croma e segundo croma e os valores de cor associados aos coeficientes de mapeamento de cor para cada dos octantes (208). O decodificador de vídeo 30 pode usar a tabela de consulta 3D para executar escalabilidade de gama de cores para decodificar dados de vídeo de multicamadas.
[0230] O decodificador de vídeo 30 pode receber valores residuais dos coeficientes de mapeamento de cor para a função de mapeamento de cor linear para cada dos octantes para cada das componentes de cor. Em alguns casos, após decodificar os valores residuais dos coeficientes de mapeamento de cor, o decodificador de vídeo 30 pode quantizar inverso os valores residuais dos coeficientes de mapeamento de cor com base em um valor de quantização determinado. A unidade de processamento de predição de cor 86 pode então predizer um ou mais dos coeficientes de mapeamento de cor para reconstruir valores dos coeficientes de mapeamento de cor com base nos valores residuais sinalizados dos coeficientes de mapeamento de cor e os valores preditos dos coeficientes de mapeamento de cor. Por exemplo, para um primeiro octante para cada das componentes de cor, a unidade de processamento de predição de cor 86 pode decodificar um coeficiente principal da função de mapeamento de cor linear com base em um valor predito igual a um valor não zero predefinido, e decodificar quaisquer coeficientes de mapeamento de cor restantes da função de mapeamento de cor linear com base em um valor predito igual a zero. Nesse exemplo, a unidade de processamento de predição de cor 86 pode decodificar os coeficientes de mapeamento de cor de quaisquer octantes restantes para cada das componentes de cor com base em valores preditos de pelo menos um octante anteriormente decodificado, como o primeiro octante.
[0231] Após decodificar os coeficientes de mapeamento de cor, os coeficientes de mapeamento de cor podem ser valores inteiros que representam valores de ponto flutuante usando uma profundidade de bit baseada pelo menos em uma de uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D. A unidade de processamento de predição de cor 86 pode limitar os valores dos coeficientes de mapeamento de cor para estarem compreendidos em uma faixa dada com base em um valor fixo predefinido ou um valor dependente pelo menos de uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D.
[0232] Certos aspetos da presente revelação foram descritos com relação a extensões do 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 ainda.
[0233] Um codificador de vídeo, como descrito nessa revelação, pode se referir a um codificador de vídeo ou um decodificador de vídeo. Similarmente, uma unidade de codificação de vídeo pode se referir a um codificador de vídeo ou um decodificador 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.
[0234] Deve ser reconhecido que dependendo do exemplo, certos atos ou eventos de quaisquer das técnicas descritas aqui podem ser realizados em uma sequência diferente, podem ser adicionados, fundidos ou deixados totalmente 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 realizados simultaneamente, por exemplo, através de processamento de multi-threaded, processamento de interrupção ou múltiplos processador, ao invés de sequencialmente.
[0235] 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.
[0236] 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.
[0237] 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.
[0238] 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.
[0239] Vários exemplos foram descritos. Esses e outros exemplos estão compreendidos no escopo das reivindicações a seguir.

Claims (11)

1. Método para decodificar dados de vídeo, o método caracterizado pelo fato de que compreende: determinar um número de octantes para cada de três componentes de cor de uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores; decodificar, para cada dos octantes para cada uma das componentes de cor, coeficientes de mapeamento de cor para uma função de mapeamento de cor linear de valores de cor na tabela de consulta 3D usada para converter dados de cor em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo, em que decodificar os coeficientes de mapeamento de cor compreende, para um primeiro dentre os octantes para cada uma das componentes de cor, decodificar pelo menos um coeficiente dos coeficientes de mapeamento de cor com base em um valor predito do pelo menos um coeficiente dentre os coeficientes de mapeamento de cor, em que o pelo menos um coeficiente dos coeficientes de mapeamento de cor compreende um coeficiente principal que define um fator de ponderamento para a função de mapeamento de cor linear entre uma mesma componente de cor da camada inferior dos dados de vídeo e a camada mais elevada dos dados de vídeo, e em que, para o primeiro dos octantes para cada uma das componentes de cor, decodificar o coeficiente principal com base em um valor predito igual a um valor não zero predefinido, e decodificar coeficientes remanescentes dos coeficientes de mapeamento de cor com base em um valor predito igual a zero; gerar a tabela de consulta 3D com base no número de octantes para cada das componentes de cor e valores de cor associados aos coeficientes de mapeamento de cor para cada um dos octantes; decodificar dados residuais de blocos de vídeo dos dados de vídeo; e reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos uma imagem de referência gerada usando a tabela de consulta 3D.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que os coeficientes de mapeamento de cor compreendem valores inteiros que são convertidos a partir de valores de ponto flutuante usando uma profundidade de bit com base em pelo menos uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que decodificar os coeficientes de mapeamento de cor compreende adicionalmente, para cada octante restante dentre os octantes para cada uma das componentes de cor, decodificar os coeficientes de mapeamento de cor com base em valores preditos a partir de pelo menos um octante anteriormente decodificado.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente determinar um valor de quantização para valores residuais dos coeficientes de mapeamento de cor, em que decodificar os coeficientes de mapeamento de cor compreende adicionalmente: para cada um dentre os octantes para cada uma das componentes de cor, decodificar valores residuais dos coeficientes de mapeamento de cor; quantizar inversamente os valores residuais dos coeficientes de mapeamento de cor com base no valor de quantização determinado; e reconstruir os coeficientes de mapeamento de cor com base nos valores residuais decodificados e valores preditos dos coeficientes de mapeamento de cor.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente restringir valores dos coeficientes de mapeamento de cor a uma faixa baseada em um de um valor fixo predefinido ou um valor dependente de pelo menos uma entre uma profundidade de bit de entrada ou uma profundidade de bit de saída da tabela de consulta 3D.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que determinar o número de octantes para cada uma das componentes de cor compreende decodificar pelo menos um elemento de sintaxe indicando o número de octantes para pelo menos uma das componentes de cor da tabela de consulta 3D.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: executar predição de cor usando a tabela de consulta 3D para converter dados de cor de uma imagem de referência na primeira gama de cores para a camada inferior dos dados de vídeo na segunda gama de cores para a camada mais elevada dos dados de vídeo; e gerar pelo menos uma imagem de referência inter- camada para a camada mais elevada dos dados de vídeo com base nos dados de cor convertidos, em que reconstruir os blocos de vídeo dos dados de vídeo compreende reconstruir blocos de vídeo em uma imagem da camada mais elevada dos dados de vídeo com base nos dados residuais decodificados e a pelo menos uma imagem de referência inter-camada gerada usando a tabela de consulta 3D.
8. Método de codificar dados de vídeo, o método caracterizado pelo fato de que compreende: gerar uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores com base em um número de octantes para cada de três componentes de cor e valores de cor para cada um dos octantes; codificar, para cada um dos octantes para cada uma das componentes de cor, coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D usada para converter dados de cor em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo, em que codificar os coeficientes de mapeamento de cor compreende, para um primeiro dos octantes para cada uma das componentes de cor, codificar pelo menos um coeficiente dos coeficientes de mapeamento de cor com base em um valor predito do pelo menos um coeficiente dos coeficientes de mapeamento de cor, em que o pelo menos coeficiente dos coeficientes de mapeamento de cor compreende um coeficiente principal que define um fator de ponderamento para a função de mapeamento de cor linear entre uma mesma componente de cor da camada inferior dos dados de vídeo e a camada mais elevada dos dados de vídeo, e em que, para o primeiro dos octantes para cada uma das componentes de cor, codificar o coeficiente principal com base em um valor predito igual a um valor não zero predefinido, e codificar coeficientes remanescentes dos coeficientes de mapeamento de cor com base em um valor predito igual a zero; predizer blocos de vídeo dos dados de vídeo com base em pelo menos uma imagem de referência gerada usando a tabela de consulta 3D; e codificar dados residuais dos blocos de vídeo em um fluxo de bits.
9. Dispositivo de decodificação de vídeo, caracterizado pelo fato de que compreende: uma memória configurada para armazenar dados de vídeo; e um ou mais processadores em comunicação com a memória e configurados para: determinar um número de octantes para cada de três componentes de cor de uma tabela de consulta tridimensional (3D) para escalabilidade de gama de cores dos dados de vídeo; decodificar, para cada um dos octantes para cada uma das componentes de cor, coeficientes de mapeamento de cor para uma função de mapeamento de cor linear de valores de cor na tabela de consulta 3D usada para converter dados em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo, em que decodificar os coeficientes de mapeamento de cor compreende, para um primeiro dentre os octantes para cada uma das componentes de cor, decodificar pelo menos um coeficiente dos coeficientes de mapeamento de cor com base em um valor predito do pelo menos um coeficiente dentre os coeficientes de mapeamento de cor, em que o pelo menos um coeficiente dos coeficientes de mapeamento de cor compreende um coeficiente principal que define um fator de ponderamento para a função de mapeamento de cor linear entre uma mesma componente de cor da camada inferior dos dados de vídeo e a camada mais elevada dos dados de vídeo, e em que, para o primeiro dos octantes para cada uma das componentes de cor, decodificar o coeficiente principal com base em um valor predito igual a um valor não zero predefinido, e decodificar coeficientes remanescentes dos coeficientes de mapeamento de cor com base em um valor predito igual a zero, gerar a tabela de consulta 3D com base no número de octantes para cada uma das componentes de cor e valores de cor associados aos coeficientes de mapeamento de cor para cada dos octantes, decodificar dados residuais de blocos de vídeo dos dados de vídeo; e reconstruir os blocos de vídeo dos dados de vídeo com base nos dados residuais decodificados e pelo menos uma imagem de referência gerada usando a tabela de consulta 3D.
10. Dispositivo de codificação de vídeo, caracterizado pelo fato de que compreende: uma memória configurada para armazenar dados de vídeo; e um ou mais processadores em comunicação com a memória e configurados para: gerar uma tabela de consulta tridimensional (3D) para escalabilidade de dados de vídeo com base em um número de octantes para cada de três componentes de cor e valores de cor para cada dos octantes; codificar, para cada um dos octantes para cada uma das componentes de cor, coeficientes de mapeamento de cor para uma função de mapeamento de cor linear dos valores de cor na tabela de consulta 3D usada para converter dados de cor em uma primeira gama de cores para uma camada inferior dos dados de vídeo em uma segunda gama de cores para uma camada mais elevada dos dados de vídeo, em que codificar os coeficientes de mapeamento de cor compreende, para um primeiro dos octantes para cada uma das componentes de cor, codificar pelo menos um coeficiente dos coeficientes de mapeamento de cor com base em um valor predito do pelo menos um coeficiente dos coeficientes de mapeamento de cor, em que o pelo menos coeficiente dos coeficientes de mapeamento de cor compreende um coeficiente principal que define um fator de ponderamento para a função de mapeamento de cor linear entre uma mesma componente de cor da camada inferior dos dados de vídeo e a camada mais elevada dos dados de vídeo, e em que, para o primeiro dos octantes para cada uma das componentes de cor, codificar o coeficiente principal com base em um valor predito igual a um valor não zero predefinido, e codificar coeficientes remanescentes dos coeficientes de mapeamento de cor com base em um valor predito igual a zero; predizer blocos de vídeo dos dados de vídeo com base em pelo menos uma imagem de referência gerada usando a tabela de consulta 3D; e codificar dados residuais dos blocos de vídeo em um fluxo de bits.
11. Memória legível por computador, caracterizada pelo fato de que contém gravado na mesma o método conforme definido em qualquer uma das reivindicações 1 a 7 ou 8.
BR112016014132-6A 2013-12-17 2014-12-17 Sinalização de informações de divisão para tabela de consulta 3d para escalabilidade de gama de cores em codificação de vídeo de multicamadas BR112016014132B1 (pt)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201361917228P 2013-12-17 2013-12-17
US61/917,228 2013-12-17
US201462005845P 2014-05-30 2014-05-30
US62/005,845 2014-05-30
US14/572,002 US9756337B2 (en) 2013-12-17 2014-12-16 Signaling color values for 3D lookup table for color gamut scalability in multi-layer video coding
US14/572,002 2014-12-16
PCT/US2014/070932 WO2015095381A1 (en) 2013-12-17 2014-12-17 Signaling color values for 3d lookup table for color gamut scalability in multi-layer video coding

Publications (2)

Publication Number Publication Date
BR112016014132A2 BR112016014132A2 (pt) 2017-08-08
BR112016014132B1 true BR112016014132B1 (pt) 2023-04-18

Family

ID=53370076

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112016014132-6A BR112016014132B1 (pt) 2013-12-17 2014-12-17 Sinalização de informações de divisão para tabela de consulta 3d para escalabilidade de gama de cores em codificação de vídeo de multicamadas

Country Status (9)

Country Link
US (4) US9756337B2 (pt)
EP (1) EP3085093B1 (pt)
JP (1) JP6498673B2 (pt)
KR (1) KR102282811B1 (pt)
CN (1) CN105814893B (pt)
BR (1) BR112016014132B1 (pt)
CA (1) CA2929989C (pt)
TW (1) TWI654875B (pt)
WO (1) WO2015095381A1 (pt)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3047639B1 (en) * 2013-09-20 2018-07-18 VID SCALE, Inc. Video encoder and methods providing 3d look-up table coding for color gamut scalability
US9948916B2 (en) 2013-10-14 2018-04-17 Qualcomm Incorporated Three-dimensional lookup table based color gamut scalability in multi-layer video coding
AU2014362246B2 (en) 2013-12-13 2018-01-25 Vid Scale, Inc. Color gamut scalable video coding device and method for the phase alignment of luma and chroma using interpolation
US10531105B2 (en) 2013-12-17 2020-01-07 Qualcomm Incorporated Signaling partition information for 3D lookup table for color gamut scalability in multi-layer video coding
US9756337B2 (en) * 2013-12-17 2017-09-05 Qualcomm Incorporated Signaling color values for 3D lookup table for color gamut scalability in multi-layer video coding
JP2015170994A (ja) * 2014-03-07 2015-09-28 ソニー株式会社 画像処理装置および方法、画像符号化装置および方法、並びに、画像復号装置および方法
US10448029B2 (en) 2014-04-17 2019-10-15 Qualcomm Incorporated Signaling bit depth values for 3D color prediction for color gamut scalability
EP3026883A1 (en) * 2014-11-27 2016-06-01 Thomson Licensing Method of mapping source colors of an image into a target color gamut of a target color device in two mapping steps
US10158836B2 (en) * 2015-01-30 2018-12-18 Qualcomm Incorporated Clipping for cross-component prediction and adaptive color transform for video coding
EP3119086A1 (en) * 2015-07-17 2017-01-18 Thomson Licensing Methods and devices for encoding/decoding videos
EP3131296A1 (en) * 2015-08-13 2017-02-15 Thomson Licensing Color remapping information payload size compression
US11178204B1 (en) * 2017-02-23 2021-11-16 Cox Communications, Inc. Video processor to enhance color space and/or bit-depth
US10924747B2 (en) * 2017-02-27 2021-02-16 Apple Inc. Video coding techniques for multi-view video
EP3367659A1 (en) * 2017-02-28 2018-08-29 Thomson Licensing Hue changing color gamut mapping
GB2575122B (en) 2018-06-29 2021-12-01 Imagination Tech Ltd Mapping an n-bit number to an m-bit number
GB2575436B (en) 2018-06-29 2022-03-09 Imagination Tech Ltd Guaranteed data compression
GB2575434B (en) 2018-06-29 2020-07-22 Imagination Tech Ltd Guaranteed data compression
GB2575121B (en) 2018-06-29 2022-12-28 Imagination Tech Ltd Guaranteed data compression
CN109685859B (zh) * 2018-12-24 2021-06-08 哈尔滨工业大学(深圳) 基于3d查找表的三维颜色自动调整方法
WO2020256510A1 (ko) 2019-06-21 2020-12-24 현대자동차주식회사 코딩 툴들을 제어하는 방법 및 장치
SG11202110395VA (en) * 2019-06-26 2021-10-28 Tencent America LLC Implicit quadtree or binary-tree geometry partition for point cloud coding
CN114223198A (zh) * 2019-07-05 2022-03-22 Lg 电子株式会社 编译色度量化参数数据的图像解码方法及其设备

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07288707A (ja) 1994-04-20 1995-10-31 Mitsubishi Electric Corp 色変換処理装置
KR100547812B1 (ko) 2002-06-24 2006-01-31 삼성전자주식회사 컬러 참조테이블을 사용하여 화소데이터의 컬러모델을변환하는 장치 및 방법
US7653133B2 (en) * 2003-06-10 2010-01-26 Rensselaer Polytechnic Institute (Rpi) Overlapped block motion compression for variable size blocks in the context of MCTF scalable video coders
US8014445B2 (en) * 2006-02-24 2011-09-06 Sharp Laboratories Of America, Inc. Methods and systems for high dynamic range video coding
US20070247647A1 (en) 2006-04-21 2007-10-25 Daniel Pettigrew 3D lut techniques for color correcting images
KR101196975B1 (ko) * 2006-07-17 2012-11-02 톰슨 라이센싱 비디오 색 인핸스먼트 데이터를 인코딩하기 위한 방법 및 장치, 그리고 비디오 색 인핸스먼트 데이터를 디코딩하기 위한 방법 및 장치
US7843465B1 (en) 2007-05-31 2010-11-30 Zoran Corporation Method and apparatus for mapping a multi-dimensional signal from one space to another space
CN101796841B (zh) * 2007-06-27 2012-07-18 汤姆逊许可公司 用增强层残差预测对视频数据编码/解码的方法和设备
US8208560B2 (en) * 2007-10-15 2012-06-26 Intel Corporation Bit depth enhancement for scalable video coding
EP2051527A1 (en) 2007-10-15 2009-04-22 Thomson Licensing Enhancement layer residual prediction for bit depth scalability using hierarchical LUTs
US8446961B2 (en) * 2008-07-10 2013-05-21 Intel Corporation Color gamut scalability techniques
CN104054338B (zh) 2011-03-10 2019-04-05 杜比实验室特许公司 位深和颜色可伸缩视频编码
US9848197B2 (en) 2011-03-10 2017-12-19 Qualcomm Incorporated Transforms in video coding
CN103621084A (zh) 2011-04-28 2014-03-05 皇家飞利浦有限公司 用于生成图像编码信号的方法和装置
EP3047639B1 (en) 2013-09-20 2018-07-18 VID SCALE, Inc. Video encoder and methods providing 3d look-up table coding for color gamut scalability
JP2017501599A (ja) 2013-10-07 2017-01-12 ヴィド スケール インコーポレイテッド マルチレイヤビデオコーディングのコンバインドスケーラビリティ処理
US9948916B2 (en) 2013-10-14 2018-04-17 Qualcomm Incorporated Three-dimensional lookup table based color gamut scalability in multi-layer video coding
AU2014362246B2 (en) 2013-12-13 2018-01-25 Vid Scale, Inc. Color gamut scalable video coding device and method for the phase alignment of luma and chroma using interpolation
US10531105B2 (en) 2013-12-17 2020-01-07 Qualcomm Incorporated Signaling partition information for 3D lookup table for color gamut scalability in multi-layer video coding
US9756337B2 (en) 2013-12-17 2017-09-05 Qualcomm Incorporated Signaling color values for 3D lookup table for color gamut scalability in multi-layer video coding

Also Published As

Publication number Publication date
US10432941B2 (en) 2019-10-01
CA2929989C (en) 2022-06-07
US10432943B2 (en) 2019-10-01
JP2017504249A (ja) 2017-02-02
TW201537958A (zh) 2015-10-01
US20150172670A1 (en) 2015-06-18
WO2015095381A1 (en) 2015-06-25
US10432942B2 (en) 2019-10-01
US9756337B2 (en) 2017-09-05
US20170318298A1 (en) 2017-11-02
KR20160096181A (ko) 2016-08-12
CN105814893B (zh) 2018-11-30
KR102282811B1 (ko) 2021-07-27
JP6498673B2 (ja) 2019-04-10
CA2929989A1 (en) 2015-06-25
CN105814893A (zh) 2016-07-27
BR112016014132A2 (pt) 2017-08-08
EP3085093B1 (en) 2021-01-27
TWI654875B (zh) 2019-03-21
EP3085093A1 (en) 2016-10-26
US20180014018A1 (en) 2018-01-11
US20180014019A1 (en) 2018-01-11

Similar Documents

Publication Publication Date Title
US10432941B2 (en) Signaling color values for 3D lookup table for color gamut scalability in multi-layer video coding
KR102276273B1 (ko) 다중-계층 비디오 코딩에서의 3차원 룩업 테이블 기반 색역 스케일러빌리티
ES2703343T3 (es) Información de partición de señalización para la tabla de búsqueda 3D para la escalabilidad de gama de colores en la codificación de vídeo multicapas
ES2903013T3 (es) Capas de referencia de señalización para la predicción del color 3D para la escalabilidad de la gama de color
BR112016014129B1 (pt) Sinalização de informações de divisão para tabela de consulta 3d para escalabilidade de gama de cores em codificação de vídeo de multicamadas

Legal Events

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

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