BR112017016159B1 - Contextos para unidades de árvore de codificação grandes - Google Patents

Contextos para unidades de árvore de codificação grandes Download PDF

Info

Publication number
BR112017016159B1
BR112017016159B1 BR112017016159-1A BR112017016159A BR112017016159B1 BR 112017016159 B1 BR112017016159 B1 BR 112017016159B1 BR 112017016159 A BR112017016159 A BR 112017016159A BR 112017016159 B1 BR112017016159 B1 BR 112017016159B1
Authority
BR
Brazil
Prior art keywords
depth
context
current
video
coding
Prior art date
Application number
BR112017016159-1A
Other languages
English (en)
Other versions
BR112017016159A2 (pt
Inventor
Xiang Li
Li Zhang
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 BR112017016159A2 publication Critical patent/BR112017016159A2/pt
Publication of BR112017016159B1 publication Critical patent/BR112017016159B1/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding

Landscapes

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

Abstract

contextos para unidades de árvore de codificação grandes. em um exemplo, um método para codificar dados de vídeo inclui selecionar, como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidade de codificação (cu) atual com base em informações referentes à profundidade de cu de uma ou mais cus vizinhas com relação à cu atual. o elemento de sintaxe pode representar se a cu atual é dividida em sub-cus. o método inclui codificar por entropia o elemento de sintaxe com base no contexto selecionado.

Description

[0001] Este pedido reivindica o beneficio do Pedido de Patente Provisório norte-americano 62/108 465, depositado a 27 de janeiro de 2015, que é por este aqui incorporado em sua totalidade à guisa de referência.
CAMPO TÉCNICO
[0002] Esta revelação refere-se à codificação de vídeo.
ANTECEDENTES
[0003] Capacidades de vídeo digital podem ser incorporadas a uma ampla faixa de aparelhos, que incluem televisões digitais, sistemas de broadcast direto digitais, sistemas de broadcast sem fio, assistentes digitais pessoais (PDAs), computadores laptop ou de mesa, computadores tablet, leitoras de livros eletrônicos, câmeras digitais, aparelhos de gravação digitais, tocadores de meios digitais, aparelhos para jogos de vídeo, consoles para jogos de vídeo, telefones celulares ou de rádio- satélite, os chamados “telefones inteligentes”, aparelhos de teleconferência de vídeo, aparelhos de fluxo contínuo de vídeo e semelhante. Os aparelhos de vídeo digital implementam técnicas de compactação de vídeo, tais como as descritas nos padrões definidos pelo MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação Avançada de Vídeo (AVC), ITU-T H.265 Codificação de Vídeo de Alta Eficácia (HEVC) e extensões de tais padrões. Os aparelhos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital de maneira mais eficaz pela implementação de tais técnicas de compactação de vídeo.
[0004] As técnicas de compactação de vídeo efetuam predição espacial (intra-imagem) e/ou predição temporal (inter-imagem) para reduzir ou remover a redundância inerente a sequências de vídeo. Para codificação de vídeos baseada em blocos, uma fatia de vídeo (isto é, um quadro de vídeo ou uma parte de um quadro de vídeo) pode ser particionada em blocos de vídeo. Os blocos de vídeo em uma fatia intra-codificada (I) de uma imagem são codificados utilizando-se predição espacial com relação a amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia inter-codificada (P ou B) de uma imagem podem utilizar predição espacial com relação às amostras de referência em blocos vizinhos na mesma imagem ou predição temporal com relação a amostras de referência em outras imagens de referência. Imagens podem ser referidas como quadros, e imagens de referência podem ser referidas como quadros de referência.
[0005] A predição espacial ou temporal resulta em um bloco preditivo 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 indica um bloco de amostras de referência que formam o bloco preditivo, e com os dados residuais que indicam 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 com os dados residuais. Para compactação adicional, os dados residuais podem ser transformados do domínio de pixel no domínio de transformada, do que resultam coeficientes residuais, que podem ser então quantificados. Os coeficientes quantificados, inicialmente dispostos em um arranjo bidimensional podem ser varridos de modo a se produzir um vetor unidimensional de coeficientes, e a codificação por entropia pode ser aplicada de modo a se obter ainda mais compactação.
SUMÁRIO
[0006] As técnicas desta revelação referem-se à codificação de vídeo. Por exemplo, as técnicas descritas nesta revelação podem incluir uma ou mais técnicas para codificar ou decodificar um bloco de dados de vídeo pela execução de um processo de codificação por entropia. Por exemplo, uma ou mais técnicas aqui descritas podem incluir efetuar codificação aritmética binária adaptativa ao contexto (CABA), modulação de contexto de um elemento de sintaxe associado a uma unidade de codificação (CU), com base em pelo menos uma de informações de uma CU espacialmente vizinha com relação à CU ou uma CU temporalmente vizinha com relação à CU.
[0007] Em um exemplo, esta revelação descreve um método para codificar dados de vídeo que compreende selecionar como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidades de codificação (CU) atual com base em informações referentes à profundidade de CU de uma ou mais CUs vizinhas com relação à CU atual, em que o elemento de sintaxe representa se a CU atual é dividida em sub-CUs e codificar por entropia o elemento de sintaxe com base no contexto selecionado.
[0008] Em outro exemplo, esta revelação descreve um aparelho para codificar dados de vídeo que compreende uma memória configurada para armazenar os dados de vídeo; e um codificador de vídeo em comunicação com a memória, em que o codificador de vídeo é configurado para: selecionar como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidades de codificação (CU) atual armazenada na memória com base em informações referentes à profundidade de CU de uma ou mais CUs vizinhas com relação à CU atual, em que o elemento de sintaxe representa se a CU atual é dividida em sub-CUs e codificar por entropia o elemento de sintaxe com base no contexto selecionado.
[0009] Em outro exemplo, esta revelação descreve um equipamento para decodificar dados de vídeo que compreende um dispositivo para selecionar como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidades de codificação (CU) atual com base em informações referentes à profundidade de CU de uma ou mais CUs vizinhas com relação à CU atual, em que o elemento de sintaxe representa se a CU atual é dividida em sub-CUs, e um dispositivo para codificar por entropia o elemento de sintaxe com base no contexto selecionado.
[0010] Em outro exemplo, esta revelação descreve um meio de armazenamento passível de leitura por computador não transitório que instruções armazenadas nele que, quando executadas, fazem com que um ou mais processador ou processadores selecionem como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidades de codificação (CU) atual com base em informações referentes à profundidade de CU de uma ou mais CUs vizinhas com relação à CU atual, em que o elemento de sintaxe representa se a CU atual é dividida em sub-CUs e codifiquem por entropia o elemento de sintaxe com base no contexto selecionado.
[0011] Os detalhes de um ou mais exemplos da revelação são apresentados nos desenhos anexos e na descrição que se segue. Outros recursos, objetos e vantagens da revelação serão evidentes com a descrição e os desenhos e com as reivindicações.
DESCRIÇÃO RESUMIDA DOS DESENHOS
[0012] A Figura 1 é um diagrama de blocos que mostra um sistema de codificação de vídeo exemplar que pode utilizar as técnicas descritas nesta revelação.
[0013] A Figura 2 é um diagrama de blocos que mostra um codificador de vídeo exemplar que pode implementar as técnicas descritas nesta revelação.
[0014] A Figura 3 é um diagrama de blocos que mostra um decodificador de vídeo exemplar que pode implementar as técnicas descritas nesta revelação.
[0015] A Figura 4 é um fluxograma que mostra um processo exemplar para codificar dados de vídeo compatível com as técnicas desta revelação.
[0016] A Figura 5 é um fluxograma que mostra um processo exemplar para decodificador de vídeo compatível com as técnicas desta revelação.
[0017] A Figura 6 é um fluxograma que mostra um processo exemplar para codificar dados de vídeo compatível com as técnicas desta revelação.
DESCRIÇÃO DETALHADA
[0018] As técnicas desta revelação referem-se de maneira geral à codificação e compactação de vídeo. Mais especificamente, esta revelação refere-se à sinalização de elementos de sintaxe na codificação de vídeo baseada em blocos quando, por exemplo, a codificação de unidades de árvore de codificação (CTUs) é suportada. Por exemplo, esta revelação descreve técnicas para codificar elementos de sintaxe relacionados com CTUs. Como outro exemplo, esta revelação descreve técnicas para codificar por entropia elementos de sintaxe. Como outro exemplo, esta revelação descreve técnicas referentes à binarização, modelação de contexto e codificação aritmética de elementos de sintaxe. Como ainda outro exemplo esta revelação descreve técnicas referentes à binarização, modelação de contexto e codificação aritmética de elementos de sintaxe utilizando- se um processo de codificação por entropia, tal como a codificação aritmética binária adaptativa ao contexto (CABA). As técnicas desta revelação podem ser aplicadas a um CODEC de vídeo ou padrão de codificação de vídeo existente (ITU H.265, HEVC, por exemplo) ou podem ser aplicadas a um CODEC de vídeo ou padrão de codificação de vídeo futuro.
[0019] A codificação aritmética binária adaptativa ao contexto (CABAC) é um método de codificação por entropia inicialmente introduzido no H.264 AVC e agora utilizado no padrão HEVC mais novo. A CABAC envolve geralmente três funções principais: binarização, modelação de contexto e codificação aritmética de elementos de sintaxe. A binarização mapeia elementos de sintaxe em símbolos binários (bins), que podem ser chamados cadeias binárias. A modelação de contexto estima a probabilidade dos binários. Como parte do processo de modelação de contexto, um codificador de vídeo seleciona um modelo de contexto para cada binário. O modelo de contexto representa a probabilidade. Modelos de contexto diferentes podem ser selecionados para binários diferentes. A codificação aritmética comprime os binários em bits com base na probabilidade estimada. Em outras palavras, a codificação aritmética comprime os binários em bits com base no módulo de contexto selecionado que compreende a cada binário.
[0020] As técnicas desta revelação podem aperfeiçoar a eficácia de fluxo de bits da codificação de elementos de sintaxe. Por exemplo, as técnicas desta revelação podem aperfeiçoar a eficácia de fluxo de bits da codificação de elementos de sintaxe relacionados com CTUs e unidades de codificação (CUs). Como outro exemplo, as técnicas desta revelação pode aperfeiçoar especificamente a eficácia de codificação CABAC. Como outro exemplo, as técnicas desta revelação podem aperfeiçoar especificamente a eficácia de codificação CABAC de elementos de sintaxe relacionados com CTUs e CUs quando, por exemplo, tamanhos de CTUs grandes são habilitados.
[0021] A Figura 1 é um diagrama de blocos que mostra um sistema de codificação de vídeo 10 exemplar que pode utilizar as técnicas desta revelação. Conforme aqui utilizado, o termo “codificador de vídeo” refere-se de maneira geral tanto a codificadores de vídeo quanto a decodificadores de vídeo. Nesta revelação, o termo “codificação de vídeo” pode referir-se de maneira geral à codificação de vídeo ou decodificação de vídeo. De maneira semelhante, o termo “codificação” pode referem-se de maneira geral à codificação ou decodificação. Por exemplo, codificação de vídeo por entidade pode referir-se à conversão de energia por entropia ou decodificação por entropia. O codificador de vídeo 20 e o decodificador de vídeo 30 do sistema de codificação de vídeo 10 representam exemplos de aparelhos que podem ser configurados para executar uma ou mais técnicas desta revelação. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para executar técnicas para codificar dados relacionados com CTUs e CUs de acordo com diversos exemplos descritos nesta revelação. Como exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para limitar o tamanho de CTU e/ou efetuar modelação de contexto CABAC para elementos de sintaxe relacionados com CTUs e/ou CUs.
[0022] O codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para funcionar de acordo com as técnicas descritas nesta revelação. O decodificador de vídeo 30 pode ser configurado para executar um processo de maneira geral complementar ao do codificador de vídeo 20 aqui descrito. Da mesma maneira, o codificador de vídeo 20 pode ser configurado para executar um processo de maneira geral complementar ao do decodificador de vídeo 30 aqui descritos.
[0023] As técnicas aqui descritas podem ser executadas pelo codificador de vídeo 20 e/ou decodificador de vídeo 30, que são respectivamente mostrados nas Figuras 1-3. Deve ficar entendido que todas as técnicas aqui descritas podem ser utilizadas individualmente ou em qualquer combinação. Por exemplo, o codificador de vídeo 20 e/ou um ou mais componentes dele e/ou o decodificador de vídeo 30 e um ou mais componentes dele podem executar as técnicas descritas nesta revelação em qualquer combinação. Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para selecionar como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidade de codificação (CU) atual com base em informações referentes à profundidade de CU de uma ou mais CUs vizinhas com relação à CU atual. O elemento de sintaxe pode representar se a CU atual é dividida em sub-CUs. Neste exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para codificar por entropia o elemento de sintaxe com base no contexto selecionado. Conforme aqui utilizada, profundidade de CU pode referir-se à profundidade de transformação quad-tree de uma CU. Por exemplo, a profundidade de CU da CU atual pode referir-se à profundidade de transformação quad-tree da CU atual, e a profundidade de CU de um bloco vizinho (CU vizinha, por exemplo) pode referir-se à profundidade de transformação quad-tree do bloco vizinho. Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 respectivamente mostrados nas Figuras 1-3 podem ser configurados para executar respectivamente uma ou mais etapas em qualquer combinação mostradas nas Figuras 4-6 e/ou qualquer etapa descrita com relação às Figuras 4-6 que pode não ser mostrada.
[0024] Conforme mostrado na Figura 1, o sistema de codificação de vídeo 10 inclui um aparelho de origem 12 e um aparelho de destino 14. O aparelho de origem 12 gera dados de vídeo codificados. Por conseguinte, o aparelho de origem 12 pode ser referido como aparelho de codificação de vídeo ou equipamento de codificação de vídeo. O aparelho de destino 14 pode decodificar os dados de vídeo codificados gerados pelo aparelho de origem 12. Por conseguinte, o aparelho de destino 14 pode ser referido como aparelho de decodificação de vídeo ou equipamento de decodificação de vídeo. O aparelho de origem 12 e o aparelho de destino 14 podem ser exemplos de aparelho de codificação de vídeo ou equipamentos de codificação de vídeo.
[0025] O aparelho de origem 12 e o aparelho de destino 14 podem compreender uma ampla faixa de aparelhos, que incluem computadores de mesa, aparelhos de computação móveis, computadores notebook (laptop, por exemplo), computadores tablet, conversores set-top-box, aparelhos telefônicos, tais como os chamados telefones “inteligentes”, câmeras, aparelhos de exibição, tocadores de meios digitais, consoles para jogos de vídeo, computadores em carro ou semelhantes.
[0026] O aparelho de destino 14 pode receber dados de vídeo codificados do aparelho de origem 12 por meio de um canal 16. O canal 16 pode compreender qualquer tipo de meio e/ou um ou mais meios ou aparelhos capazes de mover os dados de vídeo codificados do aparelho de origem 12 para o aparelho de destino 14. Em um exemplo, o canal 16 pode compreender um ou mais meios de comunicação que permitem que o aparelho de origem 12 transmita dados de vídeo codificados diretamente para o aparelho de destino 14 em tempo real. Neste exemplo, o aparelho de origem 12 pode modular os dados de vídeo codificados de acordo com um padrão de comunicação, tal como um protocolo de comunicação sem fio, e pode transmitir os dados de vídeo modulados para o aparelho de destino 14. O meio ou meios de comunicação podem incluir meios de comunicação sem fio e/ou cabeados, tais como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão físicas. O meio ou meios de comunicação podem fazer parte de uma rede baseada em pacotes, tal como uma rede de área local, uma rede de área estendida ou uma rede global (a Internet, por exemplo). Os meio ou meios de comunicação podem incluir roteadores, comutadores, estações-base ou outros equipamentos que facilitem a comunicação do aparelho de origem 12 com o aparelho de destino 14.
[0027] Em outro exemplo, o canal 16 pode incluir um meio de armazenamento que armazena os dados de vídeo codificados gerados pelo aparelho de origem 12. Neste exemplo, o aparelho de destino 14 pode acessar o meio de armazenamento por meio de acesso a disco ou acesso a cartão. O meio de armazenamento pode incluir diversos meios de armazenamento de dados acessados localmente, tais como discos Blu-ray, DVDs, CD-ROMs, memória flash ou outros meios de armazenamento digital adequados para armazenar dados de vídeo codificados.
[0028] Em outro exemplo, o canal 16 pode incluir um servidor de arquivos ou outro aparelho de armazenamento intermediário que armazena dados de vídeo codificados gerados pelo aparelho de origem 12. Neste exemplo, o aparelho de destino 14 pode acessar dados de vídeo codificados armazenados no servidor de arquivos ou outro aparelho de armazenamento intermediário por meio de fluxo contínuo ou download. O servidor de arquivos pode ser um tipo de servidor capaz de armazenar dados de vídeo codificados e transmitir os dados de vídeo codificados para o aparelho de destino 14. Servidores de arquivos exemplares incluem servidores da Web (para um site da Web, por exemplo), servidores de protocolo de transferência de arquivos (FTP) aparelhos de armazenamento anexados à rede (NAS) e unidades de disco locais.
[0029] O aparelho de destino 14 pode acessar os dados de vídeo codificados através de um conexão de dados padrão, tal como uma conexão com a Internet. Tipos exemplares de conexão de dados podem incluir canais sem fio (conexões WiFi, por exemplo), conexões cabeadas (como, por exemplo, DSL, modem a cabo, etc.) ou combinação de ambos que sejam adequadas para acessar dados de vídeo codificados armazenados em um servidor de arquivos. A transmissão de dados de vídeo codificados do servidor de arquivos pode ser uma transmissão de fluxo contínuo, uma transmissão de download ou uma comunicação de ambas.
[0030] As técnicas desta revelação não estão limitadas a aplicativos ou configurações sem fio. As técnicas podem ser aplicadas à codificação de vídeo em suporte a diversos aplicativos de multimídia, tais como broadcast de televisão através do ar, transmissão de televisão a cabo, transmissão de televisão por satélite, transmissão de vídeo de fluxo contínuo, como, por exemplo, por meio da Internet, codificação de dados de vídeo para armazenamento em um meio de armazenamento de dados, decodificação de dados de vídeo decodificados armazenados em um meio de armazenamento de dados ou outros aplicativos.Em alguns exemplos, o sistema de codificação de vídeo 10 pode ser configurado para suportar transmissão de vídeo unidirecional ou bidirecional para suporte de aplicativos tais como fluxo contínuo de vídeo, repetição de vídeo, execução de broadcasts de vídeo e/ou telefonia com vídeo.
[0031] O sistema de codificador de vídeo 10 mostrado na Figura 1 é meramente um exemplo e as técnicas desta revelação podem aplicar-se a configurações de codificação de vídeo (codificação de vídeo ou decodificação de vídeo, por exemplo) e não incluem necessariamente qualquer comunicação de dados entre os aparelhos de codificação e decodificação. Em outro exemplo, os dados são recuperados de uma memória local, transmitidos em fluxo contínuo através de uma rede ou semelhantes. Um aparelho de codificação de vídeo pode codificar e armazenar dados em uma memória e/ou um aparelho de decodificação de vídeo pode recuperar e decodificar dados de uma memória. Em muitos exemplos, a codificação e a decodificação são efetuadas por aparelhos que não se comunicam uns com ou outros, mas simplesmente codificam dados na memória e/ou recuperam e decodificam dados da memória.
[0032] No exemplo da Figura 1, o aparelho de origem 12 inclui uma fonte de vídeo 18, um codificador de vídeo 20 e uma interface de saída 22. Em alguns exemplos, a interface de saída 22 pode incluir um modulador/demodulador (modem) e/ou um transmissor. A fonte de vídeo 18 pode incluir um aparelho de captação de vídeo, como, por exemplo, uma câmera de vídeo, um arquivo de vídeo que contém dados de vídeo previamente captados, uma interface de alimentação de vídeo para receber dados de vídeo de um provedor de conteúdos de vídeo e/ou um sistema de gráficos de computador para gerar dados de vídeo ou uma combinação de tais fontes de dados de vídeo.
[0033] O codificador de vídeo 20 pode codificar dados de vídeo da fonte de vídeo 18. Em alguns exemplos, o aparelho de origem 12 transmite diretamente os dados de vídeo codificados para o aparelho de destino 14 por meio da interface de saída 22. Em outros exemplos, os dados de vídeo codificados podem ser também armazenados em um meio de armazenamento ou em um servidor de arquivos para acesso posterior pelo aparelho de destino 14 para decodificação e/ou repetição.
[0034] No exemplo da Figura 1, o aparelho de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30 e um aparelho de exibição 32. Em alguns exemplos, a interface de entrada 28 inclui um receptor e/ou um modem. A interface de entrada 28 pode receber dados de vídeo codificados através do canal 16. Os dados de vídeo codificados comunicados através do canal 16 ou fornecidos pelo aparelho de armazenamento 26, podem incluir diversos elementos de sintaxe gerados pelo codificador de vídeo 20 para utilização por um decodificador de vídeo, tal como o decodificador de vídeo 30, na decodificação dos dados de vídeo. Tais elementos de sintaxe podem ser incluídos com os dados de vídeo codificados transmitidos em um meio de comunicação, armazenados em um meio de armazenamento ou armazenados em um servidor de arquivos.
[0035] O aparelho de exibição 32 pode ser integrado com o ou pode ser externo ao aparelho de destino 14. Em geral, o aparelho de exibição 32 exibe dados de vídeo decodificados. O aparelho de exibição 32 pode compreender diversos aparelhos de exibição tais como uma tela de cristal líquido (LCD), uma tela de plasma, uma tela de diodo emissor de luz orgânico (OLED) ou outro tipo de aparelho de exibição.
[0036] O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser, cada um, implementados como qualquer um de diversos circuitos adequados, tais como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados específicos de aplicativo (ASICs), arranjos de portas programáveis no campo (FPGAs), lógica discreta, hardware ou quaisquer combinações deles. Se as técnicas forem implementadas parcialmente em software, um aparelho pode armazenar instruções para o software em um meio de armazenamento passível de leitura por computador não transitório adequado e pode executar as instruções em hardware utilizando um ou mais processadores para executar as técnicas desta revelação. Qualquer um dos elementos precedentes (inclusive hardware, software, uma combinação de hardware e software, etc.) pode ser considerado como um ou mais processadores. Cada um do codificador de vídeo 20 e decodificador de vídeo 30 pode ser incluído em um ou mais codificadores ou decodificadores, cada um dos quais pode ser integrado como parte de um codificador/decodificador (CODEC) combinados em um respectivo aparelho.
[0037] Esta revelação pode referir-se de maneira geral à “sinalização” ou “ transmissão” pelo codificador de vídeo 20 de determinadas informações para outro aparelho, tal como o decodificador de vídeo 30. O termo “sinalização” ou “ transmissão” pode referir-se de maneira geral à comunicação de elementos de sintaxe e/ou outros dados utilizados para decodificar os dados de vídeo compactados. Tal comunicação pode ocorrer em tempo real ou em tempo quase real. Alternativamente, tal comunicação pode ocorrer através de uma duração de tempo, tal como pode ocorrer quando se armazenam elementos de sintaxe em um meio de armazenamento passível de leitura por computador em um fluxo de bits codificado no momento da codificação, que podem ser recuperado por um aparelho de decodificação em qualquer momento depois de ser armazenado neste meio. Assim, embora o decodificador de vídeo 30 possa ser referido como “recebendo” determinadas informações, o recebimento de informações não ocorre necessariamente em tempo real ou tempo não real e pode ser recuperado de um meio em qualquer momento depois do armazenamento.
[0038] Em alguns exemplos, o codificador de vídeo 20 e o decodificador de vídeo 30 funcionam de acordo com um padrão de compactação de vídeo, tal como o padrão HEVC mencionado acima e descrito no Rascunho HEVC 10. Além do padrão HEVC base há esforços em andamento para produzir codificação de vídeo escalonável, codificação de vídeo de várias vistas e extensões de codificação 3D para a HEVC.
[0039] Na HEVC e em outros padrões de codificação de vídeo, uma sequência de vídeo inclui tipicamente uma série de imagens. As imagens podem ser também referidas como “quadros”. Uma imagem pode incluir três arranjos de amostra, denotados como Sl, SCb e SCr. Sl é um arranjo bidimensional (isto é, um bloco) de amostras luma. Scb é um arranjo bidimensional de amostras de crominância CB. SCr é um arranjo bidimensional de amostras de crominância Cr. As amostras de crominância podem ser também aqui referidas como amostras “croma”. Em outros casos, uma imagem pode ser monocromática e pode incluir apenas um arranjo de amostras luma.
[0040] Para gerar uma representação codificada de uma imagem, o codificador de vídeo 20 pode gerar um conjunto CTUs. Cada uma das CTUs pode ser um bloco de árvore de codificação de amostras luma, dois blocos de árvore de codificação correspondentes de amostras croma e estruturas de sintaxe utilizadas para codificar as amostras do blocos de árvore de codificação. Um bloco de árvore de codificação pode ser um bloco NxN de amostras. Uma CTU pode ser também referida como “bloco de árvore” ou “maior unidade de codificação” (LCU). As CTUs da HEVC podem ser amplamente análogas aos macroblocos de outros padrões, tais como o H.264/AVC. Entretanto, uma CTU não está necessariamente limitada a um tamanho específico e pode incluir uma ou mais CUs. Em imagens monocromáticas ou imagens que têm três planos coloridos separados, uma CU pode compreender um único bloco de codificação e estruturas de sintaxe utilizadas para codificar as amostras do bloco de codificação. Uma fatia pode incluir um número inteiro de CTUs ordenadas consecutivamente na área de rastreamento.
[0041] Em alguns exemplos, uma CU pode incluir um nó de codificação e uma ou mais unidades de predição (PUs) e/ou unidades de transformada (TUs) associadas ao nó de codificação. O tamanho da CU corresponde ao tamanho do nó de codificação e pode ser de conformação quadrada. O tamanho da CU pode variar de 8,8 pixels até o tamanho do bloco de árvore com o máximo de 64x64 pixels ou mais. Cada CU pode conter uma ou mais PUs e uma ou mais TUs. Os dados de sintaxe associados a uma CU podem descrever, por exemplo, o particionamento da CU em uma ou mais PUs. Os modos de particionamento podem diferir entre se a CU é saltada ou codificada no modo direto, codificada no modo de intra-predição ou codificada no modo de inter-predição. As PUs podem ser particionadas de modo a serem de conformação quadrada ou não quadrada. Os dados de sintaxe associados a uma CU podem descrever também, por exemplo, o particionamento da CU em uma ou mais TUs de acordo com uma transformação quadtree. Uma TU pode ser de conformação quadrada ou não quadrada.
[0042] Em geral, uma PU pode incluir dados relacionados com o processo de predição. Por exemplo, quando a PU é codificada no modo intra, a PU pode incluir dados que descrevem um modo de intra-predição para a PU. Como outro exemplo, quando uma PU é codificada, a PU pode incluir dados que definem um vetor de movimento para a PU. Os dados que definem o vetor de movimento para uma PU podem descrever, por exemplo, um componente horizontal do vetor de movimento, um componente vertical do vetor de movimento, uma resolução para o vetor de movimento (precisão de um quarto de pixel ou precisão de um oitavo de pixel, por exemplo), uma imagem de referência que o vetor de movimento indica e/ou uma lista de imagens de referência (Lista 0, Lista 1 ou Lista C, por exemplo) para o vetor de movimento.
[0043] Em geral, uma TU pode ser utilizada em processos de transformada e quantificação. Uma dada CU que tenha uma ou mais PUs pode incluir também uma ou mais unidades de transformada (TUs). Após predição, o codificador de vídeo 20 pode calcular valores residuais que correspondem à PU. Os valores residuais pode compreender valores de diferença de pixel que podem ser transformados em coeficientes de transformada, quantificados e varridos utilizando-se as TUs para produzir coeficientes de transformada serializados para codificação por entropia.
[0044] Esta revelação pode utilizar os termos “unidades de vídeo”, “bloco de vídeo”, “bloco de codificação” ou “bloco” para referir-se a um ou mais blocos de amostra e estruturas de sintaxe utilizadas para codificar amostras do bloco ou blocos de amostras. Tipos exemplares de unidades ou blocos de vídeo podem incluir unidades de árvore de codificação (CTUs), unidades de codificação (CUs), unidades de predição (PUs), unidades de transformada (TUs), macro-blocos (MBs), partições de macro- bloco e assim por diante. Em alguns contextos, a discussão de PUs pode ser intercambiada com a discussão de macro- blocos ou partições de macro-bloco.
[0045] Em alguns exemplos, o conjunto de informações de movimento pode estar disponível para cada bloco de dados de vídeo. O conjunto de informações de movimento pode incluir informações de movimento para direções de predição para frente e para trás. As direções de predição para frente e para trás podem ser duas direções de predição de um modo de predição bidirecional. As direções de predição para frente e para trás podem ser uma de duas de direções de predição de um modo de predição unidirecional. Os termos “para frente” e “para trás” não têm necessariamente um significado geométrico, em vez disso eles correspondem a, por exemplo, uma lista de imagens de referência 0 (RefPicList0) e uma lista de imagens de referência 1 (RefPicList1) da imagem atual. Quando apenas uma lista de imagens de referência está disponível para uma imagem ou fatia, apenas a RefPicList0 pode estar disponível e as informações de movimento de cada bloco da imagem ou fatia podem ser para frente.
[0046] Para cada direção de predição (para frente ou para trás, por exemplo), as informações de movimento podem conter uma direção de predição, um índice de referência e um vetor de movimento. Em alguns exemplos, por simplificação, um vetor de movimento propriamente dito pode ser referido de maneira que seja suposto que ele tem um índice de referência conexo. O índice de referência é utilizado para identificar uma imagem de referência na lista de imagens de referência atual (RefPicList0 ou RefPicList1, por exemplo). O vetor de movimento pode ter um componente horizontal e um componente vertical.
[0047] Os blocos de vídeo aqui descritos podem ter tamanhos fixos ou variáveis e podem diferir em tamanho de acordo com o padrão de codificação especificado. Como exemplo, o tamanho de uma CU específica pode ser 2Nx2N. Em tal exemplo, o codificador de vídeo 20 pode ser configurado para efetuar intra-predição PUs tamanhos que têm tamanhos de 2Nx2N ou NxN e pode ser configurado para efetuar inter- predição para PUs com tamanhos de 2Nx2N, 2NxN, Nx2N ou NxN. Em outros exemplos, os tamanhos disponíveis de uma PU podem ser os mesmos ou diferentes.
[0048] Nesta revelação, “NxN” e “N por N” podem ser utilizados de maneira intercambiável para referir-se às dimensões de pixel de um bloco de vídeo em termos de dimensões verticais e horizontais, como, por exemplo, 16x16 pixels ou 16 por 16 pixels. Em geral, um bloco de 16x16 terá 16 pixels na direção vertical (Y = 16) e 16 pixels na direção horizontal (x = 16). Da mesma maneira, um bloco NxN tem geralmente N pixels na direção vertical e N pixels na direção horizontal, onde N representa um valor de número inteiro positivo. Os pixels em um bloco podem ser dispostos em fileiras e colunas. Além do mais, os blocos não precisam ter necessariamente o mesmo número de pixels na direção horizontal como na direção vertical. Por exemplo, os blocos podem compreender NxM pixels, onde M é ou não é igual a N e onde M é um valor de número inteiro positivo.
[0049] Com referência à Figura 1, para gerar uma CTU codificada, o codificador de vídeo 20 pode efetuar recursivamente particionamento de transformação quadtree nos blocos de árvore de codificação de uma CTU de modo a dividir os blocos de árvore de codificação em blocos de codificação, daí o nome de “unidades de árvore de codificação”. Um bloco de codificação pode ser um bloco NxN (ou NxM) de amostras. Uma CU pode ser um bloco de codificação de amostras luma e dois blocos de codificação correspondentes de amostras croma de uma imagem que tem um arranjo de amostra luma, um arranjo de amostra Cb com um arranjo de amostras Cr e estruturas de sintaxe utilizadas para codificar as amostras dos blocos de codificação. O codificador de vídeo 20 pode particionar um bloco de codificação de uma CU em uma ou mais PUs. Uma PU pode ser um bloco quadrado ou não quadrado de amostras no qual a mesma técnica de predição é aplicada. Uma PU de uma CU pode ser um bloco de predição de amostras luma, dois blocos de predição correspondentes de amostras croma de uma imagem e estruturas de sintaxe utilizadas para predizer as amostras do bloco de predição. O codificador de vídeo 20 pode gerar luma preditiva, blocos Cb e Cr para a luma, blocos de predição Cb e Cr de cada PU da CU.
[0050] O codificador de vídeo 20 pode utilizar intra-predição ou inter-predição para gerar os blocos preditivos para uma PU. Se o codificador de vídeo 20 utilizar intra-predição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar os blocos preditivos da PU com base em amostras decodificadas da imagem associada à PU.
[0051] Se o codificador de vídeo 20 utilizar inter-predição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar os blocos preditivos da PU com base em amostras decodificadas de uma ou mais imagens outras que não a imagem associada à PU. O codificador de vídeo 20 pode utilizar uni-predição ou bi- predição para gerar os blocos preditivos de uma PU. Quando o codificador de vídeo 20 utiliza uni-predição para gerar os blocos preditivos para uma PU, a PU pode ter um único vetor de movimento (MV). Quando o codificador de vídeo 20 utiliza bi-predição para gerar os blocos preditivos para uma PU, a PU pode ter dois MVs.
[0052] Depois que o codificador de vídeo 20 gera blocos preditivos (luma preditiva, blocos Cb e Cr, por exemplo) para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar um blocos residuais para a CU. Cada amostra em um bloco residual da CU indica a diferença entre uma amostra um bloco preditivo de uma PU da CU e uma amostra correspondente de bloco de codificação da CU. Por exemplo, o codificador de vídeo 20 pode gerar um bloco residual luma para a CU. Cada amostra no bloco residual luma da CU indica a diferença entre uma amostra luma em um dos blocos luma preditivos da CU e uma amostra correspondente no bloco de codificação luma original da CU. Além disto, o codificador de vídeo 20 pode gerar um bloco residual Cb para a CU. Cada amostra no bloco residual Cb da CU pode indicar a diferença entre uma amostra Cb em um dos blocos Cb preditivos da CU e uma amostra correspondente no bloco de codificação Cb original da CU. O codificador de vídeo 20 pode gerar também um bloco rádio-sinal Cr para a CU. Cada amostra no bloco rádio-sinal Cr da CU pode indicar a diferença entre uma amostra Cr em um dos blocos Cr preditivos da CU e uma amostra correspondente no bloco de codificação Cr original da CU.
[0053] O codificador de vídeo 20 pode utilizar particionamento de transformação quadtree para decompor os blocos residuais (luma, blocos residuais Cb e Cr, por exemplo) de uma CU em um ou mais blocos de transformada (luma, blocos de transformada Cb e Cr, por exemplo). Conforme aqui utilizada m a profundidade de CU pode referir-se à profundidade de transformação quad-tree de uma CU. Por exemplo, a profundidade de CU da CU atual pode referir-se à profundidade de transformação quad-tree da CU atual, e a profundidade de CU de um bloco vizinho (CU vizinha, por exemplo) pode referir-se à profundidade de transformação quad-tree do bloco vizinho. Um bloco de transformada pode ser um bloco de amostras no qual a mesma transformada é aplicada. Uma unidade de transformada (TU) de uma CU pode ser um bloco de transformada de amostras luma, dois blocos de transformada correspondentes de amostras croma e estruturas de sintaxe utilizadas para transformar as amostras dos blocos de transformada. Assim, cada TU de uma CU pode ser associada a um bloco de transformada luma, um bloco de transformada Cb e um bloco de transformada Cr. O bloco de transformada luma associado à TU pode ser um sub-bloco do bloco residual luma da CU. O bloco de transformada Cb pode ser um sub-bloco do bloco residual Cb da CU. O bloco de transformada Cr pode ser um sub-bloco do bloco residual Cr da CU.
[0054] O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de modo a gerar um bloco de coeficiente para uma TU. Um bloco de coeficientes pode ser um arranjo bidimensional de coeficientes de transformada. Um coeficiente de transformada pode ser uma quantidade escalar. Por exemplo, o codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada luma de uma TU de modo a gerar um bloco de coeficientes luma para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada Cb de uma TU de modo a gerar um bloco de coeficientes Cb para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformadas Cr de uma TU de modo a gerar um bloco de coeficientes CR para a TU.
[0055] Em alguns exemplos, depois da codificação intra-preditiva ou codificação inter-preditiva utilizando PUs de uma CU, o codificador de vídeo 20 pode calcular dados residuais para as PUs da CU. As PUs podem compreender dados de pixel no domínio espacial (também referido como domínio de pixel) e as PUs podem compreender coeficientes no domínio de transformada em seguida à aplicação de uma transformada, como, por exemplo, uma transformada de co- seno discreta (DCT), uma transformada de número inteiro, uma transformada de wavelet ou uma transformada conceptualmente semelhante a dados de vídeo residuais. Os dados residuais podem corresponder a diferenças da pixel entre os pixels da imagem não codificada e valores de predição que correspondem às PUs. O codificador de vídeo 20 pode formar as TUs incluindo os dados residuais para a CU e em seguida transformar as TUs de modo a se produzirem coeficientes de transformada para a CU.
[0056] Depois de gerar um bloco de coeficientes (um bloco de coeficientes luma, um bloco de coeficientes Cb ou um bloco de coeficientes Cr, por exemplo), o codificador de vídeo 20 pode quantificar os coeficientes no bloco. A quantificação refere-se de maneira geral a um processo no qual coeficientes de transformada são quantificados de modo a se reduzir possivelmente a quantidade de dados utilizados para representar os coeficientes de transformada, obtendo- se compactação adicional. Depois que o codificador de vídeo 20 quantifica um bloco de coeficientes, o codificador de vídeo 20 pode ser configurado para codificar por entropia elementos de sintaxe que indicam os coeficientes de transformada quantificados. Por exemplo, o codificador de vídeo 20 pode efetuar Codificação Aritmética Binária Adaptativa ao Contexto (CABAC) nos elementos de sintaxe que indicam os coeficientes de transformada quantificados. O codificador de vídeo 20 pode transmitir os elementos de sintaxe codificados por entropia em um fluxo de bits.
[0057] O codificador de vídeo 20 pode transmitir um fluxo de bits que inclui os elementos de sintaxe codificados por entropia. O fluxo de bits pode incluir uma sequência de bits que forma uma representação de imagens codificadas e dados conexos. O fluxo de bits pode compreender uma sequência de unidades de camadas de abstração de rede (NAL). Cada uma das unidades NAL inclui um cabeçalho de unidade NAL e encapsula uma carga útil de sequência de bytes brutos (RBSP). O cabeçalho de unidade NAL pode incluir um elemento de sintaxe que indica um código do tipo de unidade NAL. O código do tipo de unidade NAL especificado pelo cabeçalho de unidade NAL de uma unidade NAL indica o tipo da unidade NAL. Uma BRSP pode ser uma estrutura de sintaxe que contém um número inteiro de bytes que é encapsulado dentro de uma unidade NAL. Em alguns casos, uma RBSP inclui 0 bit.
[0058] Tipos diferentes de unidades NAL podem encapsular tipos diferentes de RBSP. Por exemplo, um primeiro tipo de unidade NAL pode encapsular uma RBSP para um conjunto de parâmetros de imagem (PPS), um segundo tipo de unidade NAL pode encapsular uma RBSP para uma fatia codificada, um terceiro tipo de unidade NAL pode encapsular uma RBSP para SEI e assim por diante. Unidades NAL que encapsulam RBSPs para dados de codificação de vídeo (em oposição a RBSPs para conjuntos de parâmetros e mensagens SEI) podem ser referidas como unidades NAL de camada de codificação de vídeo (VCL).
[0059] O decodificador de vídeo 30 pode receber um fluxo de bits gerado pelo codificador de vídeo 20. Além disto, o decodificador de vídeo 30 pode efetuar parse no fluxo de bits de modo a decodificar elementos de sintaxe do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base, pelo menos em parte, nos elementos de sintaxe decodificados do fluxo de bits. O processo para reconstruir os dados de vídeo pode ser geralmente complementar ao processo executado pelo codificador de vídeo 20. Por exemplo, o decodificador de vídeo 30 pode utilizar MVs de PUs para determinar blocos preditivos para as PUs inter-preditas da CU atual. Da mesma maneira, o decodificador de vídeo 30 pode gerar bloco intra-preditos para as PUs da CU atual. Além disto, o decodificador de vídeo 30 pode quantificar por inversão blocos de coeficiente de transformada associados a TUs da CU atual. O decodificador de vídeo 30 pode efetuar transformadas inversas nos blocos de coeficiente de transformada de modo a reconstruir os blocos de transformada associados as TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de codificação da CU atual adicionando as amostras dos blocos preditivos para as PUs da CU atual às amostras correspondentes dos blocos de transformada das TUs da CU atual. Reconstruindo os blocos de codificação para cada CU de uma imagem, o decodificador de vídeo 30 pode reconstruir a imagem.
[0060] Em alguns exemplos, o codificador de vídeo 20 pode utilizar uma ordem de varredura predefinida (horizontal, vertical, ou qualquer outra ordem de varredura, por exemplo) para varrer os coeficientes de transformada quantificados de modo a produzir um vetor serializado que pode ser codificado por entropia. Em outros exemplos, o codificador de vídeo 20 pode efetuar uma varredura adaptativa. Depois de varrer os coeficientes de transformada quantificados de modo a formar um vetor unidimensional, o codificador de vídeo 20 pode codificar por entropia o vetor unidimensional, de acordo com, por exemplo, com a codificação de comprimento variável adaptativa ao contexto (CAVLC), codificação aritmética binária adaptativa ao contexto (CABAC), codificação aritmética binária adaptativa ao contexto baseada em sintaxe (SBAC), codificação por entropia com particionamento de intervalos de probabilidade (PIPE) ou outra metodologia de codificação por entropia. O codificador de vídeo 20 pode codificar também por entropia elementos de sintaxe associados aos dados de vídeo codificados para utilização pelo decodificador de vídeo 30 na decodificação dos dados de vídeo.
[0061] Para efetuar CABAC, o codificador de vídeo 20 pode atribuir um contexto dentro de um modelo de contexto a um símbolo a ser transmitido. O contexto pode referir-se, por exemplo, a se os valores vizinhos do símbolo são não zero ou não. Para efetuar CAVLC o codificador de vídeo 20 pode selecionar um código de comprimento variável para um símbolo a ser transmitido. As palavras de código na VLC podem ser construídas de modo que códigos relativamente mais curtos correspondam a símbolos mais prováveis, enquanto códigos mais compridos correspondem a símbolos menos prováveis. Desta maneira, a utilização da VLC pode obter uma economia de bits comparada, por exemplo, com a utilização de palavras de código de comprimento igual para cada símbolo a ser transmitido. A determinação de probabilidade pode ser baseada no contexto atribuído ao símbolo.
[0062] O codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para funcionar de acordo com as técnicas descritas nesta revelação. Em geral, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para executar uma ou mais técnicas aqui descritas em qualquer combinação. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para executar as técnicas desta revelação relacionadas com a codificação de informações associadas a CTUs e CUs. Por exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para efetuar modelação de contexto da codificação aritmética binária adaptativa ao contexto (CABAC) de um elemento de sintaxe associado a uma unidade de codificação (CU) com base em pelo menos uma de informações de uma CU espacialmente vizinha com relação à CU ou de uma CU temporalmente vizinha com relação à CU e codificar por CABAC o elemento de sintaxe com base no contexto modelado. Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser configurados para: em resposta à determinação de que o tamanho de uma CU é maior do que 64x64, determinar um grupo de restrições que compreende: a profundidade de CU máxima e a profundidade de CU mínima da CTU, e codificar a CTU com base em pelo menos algumas do grupo de restrições.
[0063] Deve ficar entendido que as técnicas desta revelação podem utilizar terminologia HEVC ou outra terminologia de padrão de vetor de deslocamento para facilitar a explicação. Entretanto, deve ficar entendido que as técnicas desta revelação não estão limitadas à HEVC ou a outros padrões de vídeo. As técnicas desta revelação podem ser implementadas em padrões sucessores da HEVC e suas extensões assim como outros padrões de vídeo, sejam passados, presentes ou futuros.
[0064] A Figura 2 é um diagrama de blocos que mostra um codificador de vídeo 20 exemplar que pode implementar as técnicas desta revelação. A Figura 2 é apresentada para fins de explanação e não deve ser considerada limitadora das técnicas amplamente exemplificadas e descritas nesta revelação. Para fins de explanação, esta revelação descreve o codificador de vídeo 20 no contexto da codificação HEVC. Entretanto, as técnicas desta revelação podem ser aplicadas a outros padrões ou métodos de codificação.
[0065] O codificador de vídeo 20 representa um exemplo de aparelho que pode ser configurado para executar técnicas relacionadas com a codificação de CTUs e CUs, inclusive a codificação CABAC de CTUs e CUs de acordo com diversos exemplos descritos nesta revelação.
[0066] Por exemplo, o codificador de vídeo 20 pode ser configurado para efetuar modelação de contexto de codificação aritmética binária adaptativa ao contexto (CABAC) de um elemento de sintaxe associado a uma unidade de codificação (CU) com base em pelo menos uma de informações de uma CU espacialmente vizinha com relação à CU ou de uma CU temporalmente vizinha com relação à CU e codificar por CABAC o elemento de sintaxe com base no contexto modelado.
[0067] Em outro exemplo, o codificador de vídeo 20 pode ser configurado para: em resposta à determinação de que o tamanho de uma CTU é maior do que 64x64, determinar um grupo de restrições que compreende: a profundidade de CU máxima e a profundidade de CU mínima da CTU, e codificar a CTU com base em pelo menos algumas do grupo de restrições.
[0068] No exemplo da Figura 2, o codificador de vídeo 20 inclui uma unidade de processamento de predição 100, uma memória de dados de vídeo 101, uma unidade de geração de resíduos 102, uma unidade de processamento de transformadas 104, uma unidade de quantificação 106, uma unidade de quantificação inversa 108, uma unidade de processamento de transformada inversa 110. Uma unidade de reconstrução 112, uma unidade de filtro 114, um armazenador de imagens decodificadas 116 e uma unidade de codificação por entropia 118. A unidade de processamento de predição 100 inclui uma unidade de processamento de inter-predição 120 e uma unidade de processamento de intra-predição 126. A unidade de processamento de inter-predição 120 inclui uma unidade de estimação de movimento e uma unidade de compensação de movimento (não mostradas). Em outros exemplos, o codificador de vídeo 20 pode incluir mais, menos ou diferentes componentes funcionais.
[0069] A memória de dados de vídeo 101 pode armazenar dados de vídeo a serem codificados pelos componentes do codificador de vídeo 20. Os dados de vídeo armazenados na memória de dados de vídeo 101 podem ser obtidos, por exemplo, da fonte de vídeo 18. O armazenado de imagens decodificadas 116 pode ser uma memória de imagens de referência que armazena dados de vídeo de referência para utilização na codificação de dados de vídeo pelo codificador de vídeo 20, em modos de intra- ou inter- codificação, por exemplo. A memória de dados de vídeo 121 e o armazenador de imagens decodificadas 116 podem ser formados por qualquer um de diversos aparelhos de memória, tais como memória de acesso aleatório dinâmica (DRAM), que inclui DRAM síncrona (SDRAM), RAM magneto-resistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de aparelho de memória. A memória do dados de vídeo 121 e o armazenador de imagens decodificadas 116 podem ser providos pelo mesmo aparelho de memória ou por aparelhos de memória separados. Em diversos exemplos, a memória de dados de vídeo 101 pode ser embutida com outros componentes do codificador de vídeo 20 ou não embutidas com relação a esses componentes.
[0070] O codificador de vídeo 20 pode receber dados de vídeo. O codificador de vídeo 20 pode codificar cada CTU em uma fatia de uma imagem dos dados de vídeo.Cada uma das CTUs pode ser associada a blocos de árvore de codificação luma de tamanho igual (CTBs) e os CTBs correspondentes da imagem. Como parte da codificação de uma CTU, a unidade de processamento de predição 100 pode efetuar particionamento de transformação quadtree para dividir os CTBs da CTU em blocos progressivamente menores. O bloco menor pode consistir em blocos de codificação de CUs. Por exemplo, a unidade de processamento de predição 100 pode particionar um CTB associado a uma CTU em quatro sub-blocos de tamanho igual, particionar um ou mais dos sub-blocos em quatro sub-sub-blocos de tamanho igual e assim por diante.
[0071] O codificador de vídeo 20 pode codificar CUs de uma CTU de modo a gerar representações codificadas das CUs (isto é, CUs codificadas). Como parte da codificação de uma CU, a unidade de processamento de predição 100 pode particionar os blocos de codificação associados à CU entre uma ou mais PUs da CU. Assim, cada PU pode ser associada a um bloco de predição luma e a blocos de predição croma correspondentes. O codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar PUs que têm diversos tamanhos. Conforme indicado acima, o tamanho de uma CU pode referir-se ao tamanho do bloco de codificação luma da CU e o tamanho de uma PU pode referir-se ao tamanho de um bloco de predição luma da PU. Supondo-se que o tamanho de uma CU específica seja 2Nx2N, o codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar tamanhos de PU de 2Nx2N ou NxN para intra-predição, e tamanhos de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN ou semelhantes para inter-predição. O codificador de vídeo 20 e decodificador de vídeo 30 podem suportar também particionamento assimétrico para tamanhos de PU de 2NxNU, 2NxnD, nLx2N e nRx2N para inter-predição.
[0072] A unidade de processamento de inter- predição 120 pode gerar dados preditivos para uma PU efetuando inter-predição em cada PU de uma CU. Os dados preditivos para a PU podem incluir um bloco de amostra preditivo da PU e informações de movimento para a PU. A unidade de inter-predição 121 pode executar operações diferentes para uma PU de uma CU dependendo de a PU estar em uma fatia I, uma fatia P ou uma fatia B. Em uma fatia I, todas as PUs são intra-preditas. Consequentemente, se a PU estiver em uma fatia I, a unidade de inter-predição 121 não efetua inter-predição na PU. Assim, para blocos codificados no modo I, o bloco predito é formado utilizando-se predição espacial a partir de blocos vizinhos codificados anteriormente dentro do mesmo quadro.
[0073] Se uma PU estiver em uma fatia P, a unidade de estimação de movimento da unidade de processamento de inter-predição 120 pode buscar as imagens de referência em uma lista de imagens de referência (“RefPicList0”, por exemplo) para uma região de referência para a PU. A região de referência para a PU pode ser uma região dentro de uma imagem de referência, que contém blocos de amostra que correspondem mais intimamente aos blocos de amostra da PU. A unidade de estimação de movimento da unidade de processamento de inter-predição 120 pode gerar um índice de referência que indica uma posição na RefPicList0 da imagem de referência que contém a região de referência para a PU. Além disto, a unidade de estimação de movimento pode gerar um MV que indica um deslocamento espacial entre um bloco de codificação da PU e uma localização de referência associada à região de referência. Por exemplo, o MV pode ser um vetor bidimensional que apresenta um deslocamento das coordenadas na imagem decodificada atual com relação à coordenadas em uma imagem de referência. A unidade de estimação de movimento pode transmitir o índice de referência e o MV como as informações de movimento da PU. A unidade de compensação de movimento da unidade de processamento de inter-predição 120 pode gerar os blocos preditivos da PU com base em amostras reais ou interpoladas na localização de referência indicada pelo vetor de movimento da PU.
[0074] Se uma PU estiver em uma fatia B, a unidade de estimação de movimento pode efetuar uni-predição ou bi-predição para a PU. Para efetuar uni-predição para a PU, a unidade de estimação de movimento pode buscar as imagens de referência da RefPicList0 ou em uma segunda lista de imagens de referência (“RefPicList1”) para uma região de referência para a PU. A unidade de estimação de movimento pode transmitir, como as informações de movimento da PU, um índice de referência que indica uma posição na RefPicList0 ou RefPicList1 da imagem de referência que contém a região de referência, um MV que indica um deslocamento espacial entre um bloco de predição da PU e uma localização de referência associada à região de referência e um ou mais indicadores de direção de predição que indiquem se a imagem de referência está na RefPicList0 ou RefPicList1. A unidade de compensação de movimento da unidade de processamento de inter-predição 120 pode gerar os blocos preditivos da PU com base, pelo menos em parte, em amostras reais ou interpoladas na região de referência indicada pelo vetor de movimento da PU.
[0075] Para efetuar inter-predição bidirecional para uma PU, a unidade de estimação de movimento pode buscar as imagens de referência na RefPicList0 para uma região de referência para a PU e pode buscar também as imagens de referência na RefPicList1 para outra região de referência para a PU. A unidade de estimação de movimento pode gerar índices de imagens de referência que indicam posições na RefPicList0 e na RefPicList1 das imagens de referência que contêm as regiões de referência. Além disto, a unidade de estimação de movimento pode gerar MVs que indicam deslocamentos espaciais entre a localização de referência associada às regiões de referência e um bloco de amostra da PU. As informações de movimento da PU podem incluir os índices de referência e os MVs da PU. A unidade de compensação de movimento pode gerar os blocos de amostra preditivos da PU com base, pelo menos em parte, em amostras reais ou interpoladas na região de referência indicada pelo vetor de movimento da PU.
[0076] A unidade de processamento de intra- predição 126 pode gerar dados preditivos para uma PU efetuando intra-predição na PU. Os dados preditivos para a PU podem incluir blocos preditivos para a PU e diversos elementos de sintaxe. A unidade de processamento de intra- predição 126 pode efetuar intra-predição em PUs em fatias I, fatias P e fatias B.
[0077] Para efetuar intra-predição em uma PU, a unidade de processamento de intra-predição 126 pode utilizar amostras de blocos de amostras de PUs vizinhas de modo a gerar um bloco preditivo para uma PUs. As PUs vizinhas podem estar acima, acima e à direita, acima e à esquerda, ou à esquerda da PU, supondo-se uma ordem de codificação da esquerda para a direita, do topo para a base para as PUs, CUs e CTUs. A unidade de processamento de intra-predição 126 pode utilizar diversos números de modos de intra-predição, como, por exemplo, 33 modos de intra- predição direcionais. Em alguns exemplos, o número de modos de intra-predição pode depender do tamanho da região associada à PU.
[0078] A unidade de processamento de predição 100 pode selecionar os dados preditivos para a PUs de uma CU dentre os dados preditivos gerados pela unidade de processamento de inter-predição 120 para as PUs ou dentre os dados preditivos gerados pela unidade de processamento de intra-predição 126 para as PUs. Em alguns exemplos, a unidade de processamento de predição 100 seleciona os dados preditivos para as PUs da CU com base em métricas de distorção de taxa dos conjuntos de dados preditivos. Os blocos preditivos dos dados preditivos selecionados podem ser aqui referidos como os blocos de amostra preditivos selecionados.
[0079] A unidade de geração de resíduos 102 pode gerar, com base no luma, e no bloco de codificação Cb e Cr de uma CU e no luma preditivo selecionado, nos blocos Cb e Cr das PUs da CU, uma luma, blocos residuais Cb e Cr da CU. Por exemplo, a unidade de geração de resíduos 102 pode gerar os blocos residuais da CU de modo que cada amostra nos blocos residuais têm um valor igual à diferença entre uma amostra em um bloco de codificação da CU e uma amostra correspondente em um bloco de amostra preditivo selecionado correspondente de uma PU da CU.
[0080] A unidade de processamento de transformadas 104 pode efetuar particionamento de transformação quadtree para particionar os blocos residuais associados a uma CU em blocos de transformada associados a TUs da CU. Assim, em alguns exemplos, uma TU pode ser associada a um bloco de transformada luma e dois blocos de transformada croma. Os tamanhos e posições dos blocos de transformada luma e croma de TUs de uma CU podem ou podem não ser baseados nos tamanhos e posições de blocos preditivos das PUs da CU. Uma estrutura de transformação quadtree conhecida como “transformação quadtree residual” (RQT) pode incluir nós associados a cada uma das regiões. As TUs de uma CU podem corresponder a nós-folha da RQT.
[0081] A unidade de processamento de transformadas 104 pode gerar blocos de coeficiente de transformada para cada TU de uma CU aplicando uma ou mais transformadas aos blocos de transformada da TU. A unidade de processamento de transformadas 104 pode aplicar diversas transformadas a um bloco de transformada associado a uma TU. Por exemplo, a unidade de processamento de transformadas 104 pode aplicar uma transformada de co-seno discreta (DCT), uma transformada direcional ou uma transformada conceptualmente semelhante a um bloco de transformada. Em alguns exemplos, a unidade de processamento de transformadas 104 não aplica transformadas a um bloco de transformada. Em tais exemplos, o bloco de transformada pode ser tratado como um bloco de coeficiente de transformada.
[0082] A unidade de quantificação 106 pode quantificar os coeficientes de transformada em um bloco de coeficientes. O processo de quantificação pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes de transformada. Por exemplo, um coeficiente de transformada de n bits pode ser arredondado para menos até um coeficiente de transformada de m bits durante a quantificação, onde n é maior que m. A unidade de quantificação 106 pode quantificar um bloco de coeficientes associado a uma TU de uma CU com base em um valor de parâmetro de quantificação (QP) associado à CU. O codificador de vídeo 20 pode ajustar o grau de quantificação aplicado aos blocos de coeficientes associados a uma CU ajustando o valor de QP associado à CU. A quantificação pode introduzir perda de informações, e assim os coeficientes de transformada quantificados podem ter uma precisão mais baixa que a dos originais.
[0083] A unidade de quantificação inversa 108 e a unidade de processamento de transformada inversa 110 podem aplicar quantificação inversa e transformadas inversas a um bloco de coeficientes, respectivamente, para reconstruir um bloco residual a partir do bloco de coeficientes. A unidade de reconstrução 112 pode adicionar um bloco residual reconstruído a amostras correspondentes de um ou mais blocos de amostras preditivos gerados pela unidade de processamento de predição 100 de modo a se produzir um bloco de transformada reconstruído associado a uma TU. Pela reconstrução de blocos de transformada para cada TU de uma CU desta maneira, o codificador de vídeo 20 pode reconstruir os blocos de codificação da CU.
[0084] A unidade de filtro 114 pode executar uma ou mais operações de desbloqueio para reduzir artefatos de blocagem nos blocos de codificação associados a uma CU. O armazenador de imagens decodificadas 116 pode armazenar os blocos de codificação reconstruídos depois que a unidade de filtro 114 executa a operação ou operações de desbloqueio nos blocos de codificação reconstruídos. A unidade de inter-predição 120 pode utilizar uma imagem de referência que contém os blocos de codificação reconstruídos para efetuar inter-predição em PUs de outras imagens. Além disto, a unidade de processamento de intra-predição 126 pode utilizar blocos de codificação reconstruídos no armazenador de imagens decodificadas 116 para efetuar intra-predição em outras PUs na mesma imagem da CU.
[0085] A unidade de codificação por entropia 118 pode receber dados de outros componentes funcionais do codificador de vídeo 20. Por exemplo, a unidade de codificação por entropia 118 pode receber blocos de coeficientes da unidade de quantificação 106 e pode receber elementos de sintaxe da unidade de processamento de predição 100. Tais elementos de sintaxe podem incluir elementos de sintaxe relacionados com o tamanho e o particionamento de CTUs e CUs. A unidade de codificação por entropia 118 pode executar uma ou mais operações de codificação por entropia nos dados de modo a gerar dados codificados por entropia. Por exemplo, a unidade de codificação por entropia 118 pode executar uma operação de codificação adaptativa ao contexto, tal como uma operação CABAC, uma operação de comprimento variável adaptativa ao contexto (CAVLC), uma operação CABAC, uma operação de codificação de comprimento de variável a variável (V2V), uma operação de codificação aritmética binária adaptativa ao contexto baseada em sintaxe (SBAC), uma operação de codificação por Entropia com Particionamento de Intervalos de Probabilidade (PIPE), uma operação de codificação de Golomb Exponencial ou outro tipo de operação de codificação por entropia nos dados. O codificador de vídeo 20 pode transmitir um fluxo de bits que inclui dados codificados por entropia gerados pela unidade de codificação por entropia 118. Por exemplo, o fluxo de bits pode incluir dados que representam uma RQT para uma CU.
[0086] Algumas técnicas desta revelação estão relacionadas com a codificação CABAC de informações relacionadas com CTUs e CUs, por exemplo. A codificação CABAC, efetuada pela unidade de codificação por entropia 118, envolve geralmente três funções principais: binarização, modelação de contexto e codificação aritmética. A binarização mapeia elementos de sintaxe em símbolos binários (binários) que podem ser chamados de cadeias binárias. A modelação de contexto estima a probabilidade dos binários. Como parte do processo de modelação de contexto, um codificador de vídeo seleciona um modelação de contexto para cada binário. O modelo de contexto representa a probabilidade. Modelos de contexto diferentes podem ser selecionados para binários diferentes. A codificação aritmética comprime os binários em bits com base na probabilidade estimada. Em outras palavras, a codificação aritmética comprime os binários em bits com base no modelo de contexto selecionado que corresponde a cada binário.
[0087] Em alguns exemplos, a binarização pode referir-se a diversos processos de binarização, tais como binarizações unárias, unárias truncadas, binarizações de Golomb exponencial de quésima ordem (EGk) e de comprimento fixo. Durante a modelação de contexto, a unidade de codificação por entropia 118 deriva uma estimação de probabilidade (um modelo de contexto, por exemplo) em cada binário em um processo referido como modelação de contexto. O processo de modelação de contexto pode ser altamente adaptativa.
[0088] A unidade de codificação por entropia 118 pode utilizar modelos de contexto diferentes para binários diferentes. A unidade de codificação por entropia 118 pode atualizar a probabilidade dos modelos de contexto com base nos valores de binários codificados anteriormente. Binários com distribuições semelhantes compartilham frequentemente o mesmo modelo de contexto. A unidade de codificação por entropia 118 pode selecionar o modelo de contexto para cada binário com base no tipo de elemento de sintaxe, posição de binário no elemento de sintaxe (binIdx), luma/croma, informações sobre vizinhos e outros elementos de sintaxe.
[0089] Durante a codificação por entropia, um codificador por entropia ou um decodificador por entropia (a unidade de codificação por entropia 118 e a unidade de decodificação por entropia 150, por exemplo) pode colocar binários de um símbolo a ser codificado ou decodificado em um ou mais binários. Em alguns exemplos, os binários indicam se o valor de um símbolo é igual a zero. O codificador por entropia ou pode utilizar os valores dos binários para ajustar o processo de codificação por entropia. Em outros exemplos, um codificador por entropia ou decodificador por entropia pode utilizar também binários para indicar se o valor é maior que um valor específico, como, por exemplo, maior que zero, maior que um, etc.
[0090] A unidade de codificação por entropia 118 pode ser configurada para executar um processo referido como “comutação de contexto”. Por exemplo, a unidade de codificação por entropia 118 pode ser configurada para efetuar uma comutação de contexto depois de codificar cada binário. Em alguns exemplos, a unidade de codificação por entropia 118 armazena modelos de probabilidade (modelos de contexto, por exemplo) como entradas de 7 bits (6 bits para o estado de probabilidade e 1 para o símbolo mais provável (MPS)) na memória de contextos. Em tais exemplos, a unidade de codificação por entropia 118 endereça os modelos de probabilidade (modelos de contexto, por exemplo) utilizando o índice de contexto computado pela lógica de seleção de contexto.
[0091] Antes de codificar dados de vídeo (uma fatia de dados de vídeo, por exemplo), a unidade de codificação por entropia 118 inicializa os modelos de probabilidade (modelos de contexto, por exemplo) com base em alguns valores predefinidos. Por exemplo, dado um parâmetro de quantificação de entrada denotado como “qp”, e um valor predefinido denotado como “initVal”, a unidade de codificação por entropia 118 pode derivar a entrada de 7 bits do modelo de probabilidade (denotado pelos valores “estado” e “MPS”) da maneira seguinte: qp = Clip3(0, 51, qp); inclinação = (initVal >>4)*5 - 45 deslocamento = ((initVal & 15))<<3)-16; initState = min( max( 1, (((inclinação * qp)>>4)+ deslocamento)), 126); MPS =(initState>=64); estado = ((mpState? (initState - 64)63 - initState))<<1)+ mpState
[0092] A unidade de codificação por entropia 118 pode ser configurada para efetuar codificação aritmética com base, por exemplo, em um processo de divisão em intervalo recursivo. Como parte do processo de codificação aritmética, a unidade de codificação por entropia 118 pode ser configurada para dividir uma faixa em dois sub- intervalos com base na probabilidade do binário. Em alguns exemplos, a faixa pode variar inicialmente de 0 a 1. A unidade de codificação por entropia 118 pode ser configurada para selecionar um dos dois sub-intervalos com base em um deslocamento que é convertido em uma fração binária. O desbocamento é derivado do binário codificado, e o sub-intervalo selecionado é indicado pelo valor do binário.
[0093] A unidade de codificação por entropia 118 pode ser configurada para atualizar a faixa depois de cada binário, de modo que a fluxo atualizada seja igual ao sub- intervalo selecionado. A unidade de codificação por entropia 118 pode ser configurada para repetir o processo de divisão em intervalos. A faixa e o deslocamento têm precisão de bit limitada, de modo que a unidade de codificação por entropia 118 pode ser configurada para efetuar renormalização sempre que a faixa cair abaixo de um determinado valor de modo a se prevenir sub-fluxo.
[0094] A unidade de codificação por entropia 118 pode efetuar renormalização depois que cada binário é codificado. Da mesma maneira, a unidade de decodificação por entropia 150 pode efetuar re-normalização depois que cada binário é codificado. A unidade de codificação por entropia 118 pode efetuar codificação aritmética utilizando uma probabilidade estimada (codificada por contexto) ou presumindo probabilidade igual de 0,5 (codificada por desvio). Para binários codificados por desvio, a unidade de codificação por entropia 118 pode efetuar a divisão da faixa em sub-intervalos utilizando um deslocamento aritmético, ao passo que uma tabela de busca pode ser utilizada para os binários codificados por contexto.
[0095] Durante a compensação e a estimação de movimento, a unidade de processamento de predição 100 determina se uma CU deve ser dividida em sub-blocos (unidades de predição (PUs) ou menores, por exemplo). Por exemplo, a unidade de processamento de predição 100 pode executar diversas passagens de codificação durante as quais unidades de árvore de codificação (CTUs) são divididas de maneiras diferentes e em seguida as características de distorção de taxa de cada passagem podem ser comparadas com as de outras passagens de modo a se determinar qual esquema de particionamento para uma CTU resulta nas melhores métricas de distorção de taxa. O valor do elemento de sintaxe split_cu_flag (um indicador) indica se uma CU é dividida em unidades de codificação com meios-tamanhos horizontais e verticais relativos a uma CU-pai. Para cada tipo de fatia, (fatias I, P e B, por exemplo) a unidade de codificação por entropia 118 pode ser configurada para codificar o elemento de sintaxe split_cu_flag utilizando CABAC com três contextos com base nas informações de fatias espacialmente vizinhas.
[0096] Conforme definido na especificação HEVC, a unidade de codificação por entropia 118 pode ser configurada para derivar o deslocamento de índice de contexto (ctxInc, por exemplo) com base na disponibilidade do bloco à esquerda e do bloco acima do bloco atual (availableL, que especifica a disponibilidade do bloco localizado diretamente à esquerda do bloco atual, ou availableA que especifica a disponibilidade do bloco localizado diretamente acima do bloco atual, por exemplo), e informações de divisão (isto é, CtDepth[ xNbL/A ][ yNBL/A]>eqDepth) de blocos vizinhos à esquerda/acima. A Tabela 9-38, copiada do padrão HEVC, descreve a derivação do elemento de sintaxe ctxInc, da maneira seguinte>Tabela 9-38 - Especificação de ctxInc utilizando elementos de sintaxe à esquerda e acima
[0097] Outro elemento de sintaxe, inter_pred_idc, indica se list0, list1 ou bi-predição é utilizada para a unidade de predição atual. O elemento de sintaxe tem até dois binários, ambos sendo codificados por contexto CABAC. A cadeia de binário binarizada é definida de acordo com a Tabela 9-36, copiada do padrão HEVC, conforme o seguinte, onde nPbW e nPbH representam a largura e altura do bloco de predição luma atual, respectivamente: Tabela 9-36: Derivação de inter_pred_ic
[0098] Para cada fatia inter-codificada (fatia P ou B, por exemplo), a unidade de codificação por entropia 118 pode ser configurada para efetuar a derivação de seleção de contexto acima da cadeia de binários binarizada com base na determinação de se (nPbW + nPbH) ! = 12 ou de se (nPbW + nPbH) ! = 12. Por exemplo, se (nPbW + nPbH) não for igual a 12, a unidade de codificação por entropia 118 pode ser configurada para codificar o primeiro binário utilizando 4 contextos (0, 1, 2 e 3, por exemplo) e codificar o segundo binário com um contexto. Em alguns exemplos, a seleção de contexto do primeiro binário é de acordo com a profundidade de CU do bloco atual. Na HEVC, a profundidade de CU está na faixa de 0 a 3 inclusive. Como outro exemplo, se (nPbW + nPbH) for igual a 12, a unidade de codificação por entropia 118 pode ser configurada para codificar o primeiro binário e o segundo binário com o mesmo contexto utilizado pelo segundo binário no exemplo acima.
[0099] Embora a unidade de codificação por entropia 118 e a unidade de decodificação por entropia 150 possam ser configuradas para executar um ou mais aspectos da codificação por entropia de acordo com a HEVC, conforme descrito acima, por exemplo, há vários problemas com a modelação de contexto na HEVC. A modelação de contexto na HEVC é especialmente projetada párea uma CTU não maior que 64x64. Por conseguinte, quando tamanhos de CTUs maiores (128x128, 256x256 ou até maiores, por exemplo) são utilizados, a reutilização direta de processos de modelação de contexto atuais, tais como os descritos pela HEVC, é menos eficaz ou resulta em problemas de parsing.
[0100] Como exemplo, quando uma CTU é maior do que 64x64, a reutilização direta dos processos de modelação de contexto atuais de split_cu_flag definidos pela HEVC não é eficaz. Como outro exemplo, quando uma CTU é maior que 64x64, a profundidade de CU máxima é realmente aumentada de modo que mais contextos são necessários para inter_pred_idc. Entretanto, contextos adicionais não resultam em eficácia de codificação adicional. Por conseguinte, algumas técnicas nesta revelação referem-se à limitação do número de contextos, ao passo outras técnicas nesta revelação referem-se ao aumento do número de contextos.
[0101] Esta revelação descreve várias técnicas diferentes, que são descritas mais detalhadamente em seguida, e que podem superar os problemas aos à codificação por entropia de CUs, conforme discutido acima. Estas técnicas podem ser utilizadas sozinhas ou em qualquer combinação. As técnicas seguintes podem ser aplicadas à codificação de CTUs grandes, assim como para codificar CTUs 64x64 ou menores. As técnicas seguintes podem ser aplicadas individualmente ou em qualquer combinação.
[0102] Em um exemplo de acordo com as técnicas desta revelação, a unidade de codificação por entropia 118 pode levar em conta as informações sobre profundidade de CU máxima e/ou mínima dos vizinhos espaciais e/ou temporais da CU atual durante a execução da modelação de contexto de split_cu_flag e/ou de um elemento de sintaxe com a mesma semântica.
[0103] Neste exemplo, a unidade de codificação por entropia 118 pode ser configurada para determinar a possibilidade (probabilidade, por exemplo) de uma CU ser também dividida em sub-CUs com base nas profundidades de CUs ou tamanho de CUs máximos ou mínimos dos vizinhos espaciais ou temporais da CU atual, o que significa as profundidades de CU que correspondem a todos os vizinhos espaciais e/ou temporais da CU atual em alguns exemplos, e uma ou mais profundidades de CU que correspondem a um ou mais vizinhos espaciais e/ou temporais da CU atual em outros exemplos. Com base na determinação de que a profundidade de CU da CU atual é menor que a profundidade de CU mínima de um ou mais vizinhos espaciais e/ou temporais da CU atual (todos de tais vizinhos, por exemplo), na unidade de codificação por entropia 118 pode ser configurada para determinar que é muito provável que a CU seja dividida ainda mais. Com base na determinação de que a profundidade de CU da CU atual é maior que a profundidade de CU máxima de um ou mais vizinhos espaciais e/ou temporais da CU atual (todos de tais vizinhos, por exemplo), a unidade de codificação por entropia 118 pode ser configurada para determinar que é muito improvável que a CU seja dividida ainda mais.
[0104] Em um exemplo, a unidade de codificação por entropia pode ser configurada para utilizar um modelo de contexto dedicado para codificar o elemento de sintaxe split_cu_flag ao se determinar que é muito provável que a CU atual seja dividida ainda mais (quando a profundidade de CU da CU atual é menor que a profundidade de CU mínima dos vizinhos espaciais e/ou temporais da CU atual, por exemplo. Alternativamente, ou além disto, a unidade de codificação por entropia 118 pode ser configurada para fixar a probabilidade inicial do valor de binário igual a ‘1’ associado ao modelo de contexto em 1 ou em um valor muito próximo de 1. Por exemplo, com o método de inicialização introduzido acima a unidade de codificação por entropia 118 pode ser configurada para utilizar um valor de “0” (initVal=0) para inicializar um modelo de contexto em “muito improvável” (initState=1), e o valor “255” para inicializar um contexto em “muito provável” (initState=126).
[0105] Em outro exemplo, a unidade de codificação por entropia 118 pode ser configurada para utilizar um modelo de contexto dedicado para codificar o elemento de sintaxe split_cu_flag ao se determinar que é muito improvável que a CU atual seja dividida ainda mais (quando a profundidade de CU da CU atual é maior que a profundidade de CU máxima dos vizinhos espaciais e/ou temporais da CU atual, por exemplo). Alternativamente, ou além disto, a unidade de codificação por entropia 118 pode ser configurada para fixar a probabilidade inicial no valor de binário igual a ‘1’ associado ao contexto como igual a 0 ou em um valor muito próximo de 0.
[0106] Em alguns exemplos de acordo com as técnicas desta revelação, a unidade de codificação por entropia 118 pode ser configurada para determinar o deslocamento de índice de contexto com base na quantificação uniforme ou não uniforme da profundidade de CU da CU atual para o elemento de sintaxe inter_pred_idc em vez de fixar o deslocamento de índice de contexto como igual à profundidade de CU. Por exemplo, a unidade de codificação por entropia 118 pode ser configurada para fixar o deslocamento de índice de contexto em: min (profundidade de CU, M), onde M é um valor de número inteiro positivo e a função min devolve o valor mínimo de duas entradas. Em alguns exemplos, a unidade de codificação por entropia 118 pode fixar M como igual a 3. Uma vez que cada deslocamento de índice de contexto corresponde a um contexto, a unidade de codificação por entropia 118 pode ser configurada para limitar o número de contextos utilizados para codificar por entropia uma CTU maior que 64x64 limitando o deslocamento de índice de contexto conforme descrito acima. Por exemplo, no caso de M ser 3, o número de contextos é limitado a quatro. Como outro exemplo, no caso de M ser 5, o número de contextos é limitado a seis.
[0107] O tamanho de CU máximo (o tamanho da CTU) e a divisão de CU máxima são usualmente sinalizados em um conjunto de parâmetros de sequência (SPS) ou em um conjunto de parâmetros de imagem (PPS). O codificador de vídeo 20 ou o decodificador de vídeo 30 determina, por conseguinte, o tamanho de CU para um fluxo de bits específico. Em alguns exemplos de acordo com as técnicas desta revelação nos quais uma CTU maior do que 64x64 é habilitada. O codificador de vídeo 20 pode submeter os tamanhos de CU máximos e mínimos a restrições adicionais de modo que a profundidade de CU seja restringida dentro de uma determinada faixa. Diversos exemplos das restrições de tamanho de CTU e CU. Em alguns exemplos, uma ou mais das restrições/limitações descritas em seguida podem aplicar-se apenas a CUs inter-codificadas.
[0108] Em um exemplo, o codificador de vídeo 20 pode ser configurado para fixar a profundidade de CU máxima como sendo menor ou igual a um tamanho que é menor do que o tamanho de CTU máximo permitido. Por exemplo, o tamanho de CU máximo pode ser predefinido, tal como 64x64. Pela fixação de CU máximo como menor do que ou igual a um tamanho que é menor do que o tamanho de CTU máximo, alguns módulos de um CODEC de vídeo, tais como filtros de malha adaptativos, e processos de deslocamentos adaptativos a amostras podem ser aplicados ao nível de CTU.
[0109] Em outro exemplo, o codificador de vídeo 20 pode ser configurado para sinalizar o tamanho de CU máximo juntamente com o tamanho de CTU e a profundidade de CTU máximo em um PPS ou em qualquer outro de parâmetro de sintaxe de alto nível.
[0110] Em outro exemplo, quando a CU atual tem um tamanho maior que o tamanho de CU máximo, o codificador de vídeo 20 pode ser configurado para não sinalizar o elemento de sintaxe split_cu_flag da CU atual. Em tal exemplo, o decodificador de vídeo 30 pode ser configurado para inferir split_cu_flag como sendo igual a 1.
[0111] São agora descritos diversos exemplos de restrições ao tamanho de CU máximo de acordo com as técnicas desta revelação. Em um exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem restringir a profundidade de CU para ser menor do que M, onde M e igual a 4 em alguns exemplos. Em outro exemplo, o codificador de vídeo 20 e o decodificador de vídeo 30 podem restringir o tamanho de CU para ser não menor do que (1<<(N-M)), onde o maior tamanho de CTU é igual a (1<<N), “<<” é um deslocamento para a esquerda aritmético e M indica a profundidade de CU máxima (quantas vezes uma CTU pode ser também dividida, por exemplo). Por exemplo, M=4 significa que uma CTU pode ser dividida 4 vezes. Em um exemplo, M pode ser fixado como igual a 4. Por exemplo, uma CTU de 64x64 que tem uma profundidade de CU de 4 pode ser primeiro dividida em dois blocos de 32x32 que podem ser então divididos em blocos de 16x16, que podem ser então divididos em blocos de 8x8, que podem ser então divididos em blocos de 4x4 com os blocos de 4x4. Este exemplo demonstra quatro profundidades de CU exemplares (primeira 32x32, segunda 16x16, terceira 8x8 e quarta 4x4). Em alguns exemplos, a restrição ao tamanho de CU pode ser aplicada apenas a CUs inter-codificadas. Em alguns exemplos, a profundidade de CU máxima ou o tamanho de CU máximo para CUs intra- e inter- codificadas pode ser diferente.
[0112] Em diversos exemplos de acordo com as técnicas desta revelação, a unidade de codificação por entropia 118 pode adicionar dois contextos adicionais para codificar split_cu_flag ou um elemento de sintaxe com a mesma semântica. O primeiro contexto adicional indica que uma divisão adicional da CU atual tem uma possibilidade elevada (muito provável, por exemplo). O segundo contexto adicional indica que outra divisão da CU atual tem uma baixa possibilidade (muito improvável, por exemplo). Nestes exemplos, a unidade de codificação por entropia 118 do codificador de vídeo 20 pode ser configurada para definir as profundidades máxima e mínima das CUs espacialmente vizinhas (à esquerda, de base-à esquerda, de topo e de topo-à direita, por exemplo) da CU atual como max_depth e min_depth, respectivamente. A unidade de codificação por entropia 118 pode ser configurada para selecionar os contextos CABAC para codificar split_cu_flag de acordo com o pseudo código seguinte: se(cur_cu_depth < max(0, min_depth-1)){Selecionar o contexto para divisão adicional com alta possibilidade} caso contrário se (cur_cu_depth > min(g_max_cu_depth, max_depth+1)){Selecionar o contexto para divisão adicional com baixa possibilidade} caso contrário{utilizar a seleção de contexto de split_cu_flag na HEVC}
[0113] No pseudo-código acima, cur_cu_depth indica a profundidade de CU da CU atual e g_max_cu_depth denota a profundidade de CU máxima permitida no fluxo de bits. Em um exemplo, quando uma CU espacialmente vizinha não está disponível, o codificador de vídeo 20 pode ser configurado para fixar a profundidade de CU, vizinha como igual a 0 quando se calcula min_depth e pode ser configurado para fixar a profundidade de CU vizinha como igual a g_max_cu_depth quando se calcula max_depth. Em exemplos que envolvem dois contextos adicionais, o codificador de vídeo 20 pode ser configurado para fixar o valor inicial (initVal descrito acima, por exemplo) para o contexto de divisão adicional com alta possibilidade em 255. Em tais exemplos, o codificador de vídeo 20 pode fixar o valor inicial (initVal descrito acima, por exemplo) para o contexto de divisão adicional com baixa possibilidade em 0.
[0114] Para CTUs maiores que 64x64, a profundidade de CU pode ser maior do que três. Por exemplo, quando uma CTU tem o tamanho 256x256, a profundidade de CU pode ser 0, 1, 2, 3, 4 ou 5. Em alguns exemplos, a unidade de codificação por entropia 118 pode utilizar ainda quatro contextos (0, 1, 2 e 3, por exemplo) para o primeiro binário de inter_pred_idc. A unidade de codificação por entropia 118 pode ser selecionar então o contexto utilizando min(3, cur_cu_depth), onde cur_cu_depth indica a profundidade de CU da CU atual.
[0115] A Figura 3 é um diagrama de blocos que mostra um decodificador de vídeo 30 exemplar que é configurado para implementar as técnicas desta revelação. A Figura 3 é apresentada para fins de explanação e não limita as técnicas amplamente exemplificadas e descritas nesta revelação. Para fins de explanação, esta revelação descreve o decodificador de vídeo 30 no contexto da condição HEVC. Entretanto, as técnicas desta revelação podem ser aplicadas a outros padrões ou métodos de codificação.
[0116] O decodificador de vídeo 30 representa um exemplo de aparelho que pode ser configurado para executar técnicas para codificar de maneira eficaz CTUs e CUs, de acordo com diversos exemplos descritos nesta revelação. Por exemplo, o decodificador de vídeo 30 pode ser configurado para efetuar modelação de contexto de codificação aritmética binária adaptativa ao contexto (CABAC) de um elemento de sintaxe associado a uma unidade de codificação (CU) com base em pelo menos uma de informações de uma CU espacialmente vizinha com relação à CU ou de uma CU temporalmente vizinha com relação à CU e decodificar por CABAC o elemento de sintaxe com base no contexto modelado.
[0117] Em outro exemplo, o decodificador de vídeo 30 pode ser configurado para: em resposta à determinação de que o tamanho de CTU é maior de que 64x64, determinar um grupo de restrições que compreende: uma profundidade de CU máxima e uma profundidade de CU mínima da CTU, e decodificar a CTU com base em pelo menos algumas no grupo de restrições.
[0118] No exemplo da Figura 3, o decodificador de vídeo 30 inclui uma unidade de decodificação por entropia 150, uma memória de dados de vídeo 151, uma unidade de processamento de predição 152, uma unidade de quantificação inversa 154, uma unidade de processamento de transformada inversa 156 , uma unidade de reconstrução 158, uma unidade de filtro 160 e um armazenador de imagens decodificadas 162. A unidade de processamento de predição 152 inclui uma unidade de compensação de movimento 164 e uma unidade de processamento de intra-predição 166. Em outros exemplos, o decodificador de vídeo 30 pode incluir mais, menos ou diferentes componentes funcionais.
[0119] A memória de dados de vídeo 151 pode armazenar dados de vídeo, tais como um fluxo de bits 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 151 podem ser obtidos, por exemplo, de um meio passível de leitura por computador, como, por exemplo, de uma fonte de vídeo local, tal como uma câmera, por meio de comunicação em rede cabeada ou sem fio de dados de vídeo ou pelo acesso a meios de armazenamento de dados físicos. A memória de dados de vídeo 151 pode formar um armazenador de imagens codificadas (CPB) que armazena dados de vídeo codificados de um fluxo de bits de vídeo codificado. O armazenador de imagens decodificadas 162 pode ser uma memória de imagens de referência que armazena dados de vídeo de referência para utilização na decodificação de dados de vídeo pelo decodificador de vídeo 30, nos modos de intra- ou inter-codificação, por exemplo. A memória dos dados de vídeo 151 e o armazenador de imagens decodificadas 162 podem ser formados por qualquer um de diversos aparelhos de memória, tais como memória de acesso aleatório dinâmica (DRAM), que inclui DRAM síncrona (SDRAM), RAM magneto-resistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de aparelho de memória. A memória de dados de vídeo 151 e o armazenador de imagens decodificadas 162 podem ser providos pelo mesmo aparelho de memória ou por aparelhos de memória separados. Em diversos exemplos, a memória de dados de vídeo 151 pode ser embutida com outros componentes do decodificador de vídeo 30 ou não embutidas com relação a esses componentes.
[0120] Um armazenador de imagens codificadas (CPB) pode receber e armazenar dados de vídeo codificados (unidades NAL) de um fluxo de bits. A unidade de decodificação por entropia pode receber dados de vídeo codificados (unidades NAL, por exemplo) do CPB e efetuar parse nas unidades NAL de modo a decodificar elementos de sintaxe. A unidade de decodificação por entropia 150 pode decodificar por entropia elementos de sintaxe codificados por entropia nas unidades NAL. A unidade de processamento de predição 152, a unidade de quantificação inversa 154, a unidade de processamento de transformada inversa 156, a unidade de reconstrução 158 e a unidade de filtro 160 podem gerar dados de vídeo decodificados com base nos elementos de sintaxe extraídos do fluxo de bits. A unidade de decodificação por entropia 150 pode executar um processo geralmente complementar ao da unidade de codificação por entropia 118, conforme descrito acima.
[0121] As unidades NAL no fluxo de bits podem incluir unidades NAL da fatia codificadas. Como parte da decodificação do fluxo de bits, a unidade de decodificação por entropia pode extrair e decodificar por entropia elementos de sintaxe das unidades NAL de fatia codificadas. Cada uma das fatias codificadas pode incluir um cabeçalho de fatia e dados de fatia. O cabeçalho de fatia pode conter elementos de sintaxe referentes a uma fatia. Os elementos de sintaxe no cabeçalho de fatia podem incluir um elemento de sintaxe que identifica um PPS associado a uma imagem que contém a fatia.
[0122] Além de decodificar elementos de sintaxe do fluxo de bits, o decodificador de vídeo 30 pode executar uma operação de reconstrução em uma CU não particionada. Para executar a operação de reconstrução em uma CU não particionada, o decodificador de vídeo 30 pode executar uma operação de reconstrução em cada TU da CU. Ao executar a operação de reconstrução para cada TU da CU, o decodificador de vídeo 30 pode reconstruir blocos residuais da CU.
[0123] Como parte da execução de uma operação de reconstrução em uma TU de uma CU, a unidade de quantificação inversa 154 pode quantificar por inversão, isto é, desquantificar, blocos de coeficientes associados à TU. A unidade de quantificação inversa 154 pode utilizar um valor de QP associado à CU da TU de modo a determinar o grau de quantificação e, da mesma maneira, o grau de quantificação inversa a ser aplicado pela unidade de quantificação inversa 154. Ou seja, a razão de compactação, isto é, a razão do número de bits utilizados para representar a sequência original e o bit compactado pode ser controlado pelo ajuste do valor do QP utilizado quando da quantificação de coeficientes de transformada. A razão de compactação pode depender também do método de codificação por entropia utilizado.
[0124] Depois que a unidade de quantificação inversa 154 quantifica por inversão um bloco de coeficientes, a unidade de processamento de transformadas inversa 156 pode aplicar uma ou mais transformadas inversas ao bloco de coeficientes de modo a gerar um bloco residual associado à TU. Por exemplo, a unidade de processamento de transformadas inversas 156 pode aplicar uma DCT inversa, uma transformada de número inteiro inversa, uma transformada de Karhunen-Loeve (KLT) inversa, uma transformada rotacional inversa, uma transformada direcional inversa ou outra transformada inversa ao bloco de coeficientes.
[0125] Se uma PU for codificada utilizando-se intra-predição, a unidade de processamento de intra- predição 166 pode efetuar intra-predição de modo a gerar blocos preditivos para a PU. A unidade de processamento de intra-predição 166 pode utilizar um modo de intra-predição para gerar o luma preditivo, blocos Cb e Cr para a PU com base nos blocos de predição de PUs espacialmente vizinhas. A unidade de processamento de intra-predição 166 pode determinar o modo de intra-predição para a PU com base em um ou mais elementos de sintaxe decodificados do fluxo de bits.
[0126] A unidade de processamento de predição 152 pode construir uma primeira lista de imagens de referência (RefPicList0) e uma segunda lista de imagens de referência (RefPicList1) com base em elementos de sintaxe extraídos do fluxo de bits. Além disto, se uma PU for codificada utilizando-se inter-predição, a unidade de decodificação por entropia 150 pode extrair informações de movimento para a PU. A unidade de compensação de movimento 164 pode determinar, com base nas informações de movimento da PU, uma ou mais regiões de referência para a PU. A unidade de compensação de movimento 164 pode gerar, com base em blocos de amostra no bloco ou blocos de referência para a PU, luma preditivo, blocos Cb e Cr para a PU.
[0127] A unidade de reconstrução 158 pode utilizar o luma, os blocos de transformada Cb e Cr associados às TUs de uma CU e o luma preditivo, blocos Cb e Cr das PUs da CU, isto é, ou dados de intra-predição ou dados de inter-predição, conforme aplicável, para reconstruir o luma, os blocos de codificação Cb e Cr da CU. Por exemplo, a unidade de reconstrução 158 pode adicionar amostras do luma, dos blocos de transformada Cb e Cr a amostras correspondentes do luma preditivo dos blocos Cb e Cr de modo a reconstruir o luma, os blocos de codificação Cb e Cr da CU.
[0128] O decodificador de vídeo 30 pode ser configurado para executar um processo geralmente complementar ao do codificador de vídeo 20 aqui descrito. Da mesma maneira, o codificador de vídeo 20 pode ser configurado para executar um processo geralmente complementar ao do decodificador de vídeo 30 aqui descrito. Por exemplo, o decodificador de vídeo 30 pode ser configurado para decodificar um elemento de sintaxe codificado em um fluxo de bits da mesma maneira que o codificador de vídeo 20 pode ser configurado para codificar o elemento de sintaxe no fluxo de bits.
[0129] Como outro exemplo, a unidade de decodificação por entropia 150 pode ser configurada para executar um processo geralmente complementar ao da unidade de codificado por entropia 118 aqui descrita. De acordo com aspectos desta revelação, a unidade de decodificação por entropia 150 pode ser configurada para decodificar por entropia quaisquer palavras de código geradas pela unidade de codificação por entropia 118.
[0130] A unidade de filtro 160 pode executar uma operação de desbloqueio para reduzir os artefatos de blocagem associados ao luma, aos blocos de codificação Cb e Cr da CU. O decodificador de vídeo 30 pode armazenar o luma, os blocos de codificação Cb e Cr da CU no armazenador de imagens decodificadas 162. O armazenador de imagens decodificadas 162 pode fornecer imagens de referência para compensação de movimento intra-predição e apresentação subsequentes em um aparelho de exibição tal como o aparelho de exibição 32 da Figura 1. Por exemplo, o decodificador de vídeo 30 pode executar, com base no luma, nos blocos Cb e Cr no armazenador de imagens decodificadas 162, operações de intra-predição ou inter-predição em PUs de outras CUs.
[0131] A Figura 4 é um fluxograma que mostra um processo exemplar para codificar (codificar e/ou decodificar, por exemplo) dados de vídeo compatível com as técnicas desta revelação. O processo da Figura 4 como sendo executado por um codificador de vídeo para fins de exemplificação, embora diversos outros processadores possam também executar o processo mostrado na Figura 4. Conforme aqui utilizado, um codificador de vídeo pode referir-se a um codificador de vídeo e/ou a um decodificador de vídeo 30 descritos com relação às Figuras 1-3, por exemplo. Em alguns exemplos, a memória de dados de vídeo 101, a unidade de processamento de predição 100 e/ou a unidade de codificação por entropia 118 pode executar um ou mais processos mostrados na Figura 4. Em alguns exemplos, a memória de dados de vídeo 151, a unidade de decodificação por entropia 150 e a unidade de processamento de predição 152 podem executar um ou mais processo mostrados na Figura 4.
[0132] No exemplo da Figura 4, um codificador de vídeo (o codificador de vídeo 20 e/ou o decodificador de vídeo 30, por exemplo) pode ser configurado para selecionar, como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidade de codificação (CU atual) com base em informações referentes à profundidade de CU de uma ou mais CUs vizinhas com relação CU atual (200). Em alguns exemplos, o codificador de vídeo pode ser configurado para selecionar o contexto para o elemento de sintaxe com base em informações referentes à profundidade de CU de uma ou mais CUs espacialmente vizinhas com relação à CU atual. Em outros exemplos, o codificador de vídeo pode ser configurado para selecionar o contexto para o elemento de sintaxe com base em informações referentes à profundidade de CU de uma ou mais CUs temporalmente vizinhas com relação à CU atual. Por exemplo, uma ou mais CUs vizinhas relativas à CU atual pode ser um vizinho espacial e/ou uma ou mais CUs vizinhas relativas à CU atual pode ser um vizinho temporal.
[0133] Em alguns exemplos, o elemento de sintaxe pode representar se a CU atual é dividida em sub-CUs. Em tais exemplos, o elemento de sintaxe pode ser o elemento de sintaxe split_cu_flag. em alguns exemplos, uma CTU associada à CU atual pode ter um tamanho maior do que 64x64.
[0134] Em alguns exemplos, uma ou mais profundidades de CUs referentes à CU ou CUs vizinhas podem ser iguais ou não iguais à profundidade de CU da CU atual. Por exemplo, uma ou mais profundidades de CU referentes à CU ou CUs espacialmente vizinhas podem ser iguais e/ou não iguais à profundidade de CU da CU atual. Como outro exemplo, uma ou mais profundidades de CU referentes à CU ou CUs temporalmente vizinhas podem ser iguais e/ou não iguais à profundidade de CU da CU atual.
[0135] O codificador de vídeo pode ser configurado para codificar por entropia o elemento de sintaxe com base no contexto selecionado (202). Em alguns exemplos, o processo de codificação por entropia pode compreender um processo de codificação aritmética binária adaptativa ao contexto (CABAC), e a codificação por entropia pode compreender codificação CABAC. Em tais exemplos, a codificação CABAC pode compreender codificação CABAC ou decodificação CABAC.
[0136] Em alguns exemplos, o codificador de vídeo pode ser configurado para determinar se a profundidade de CU da CU atual é menor que a profundidade de CU mínima da CU ou CUs vizinhas. O codificador de vídeo pode ser configurado para selecionar o contexto com base na determinação de que a profundidade de CU da CU atual é menor do que a profundidade de CU mínima da CU ou CUs vizinhas. O codificador de vídeo pode ser configurado para fixar o valor inicial correspondente ao contexto selecionado como igual a 255 com base na determinação de que a profundidade de CU da CU atual é menor que a profundidade de CU mínima da CU ou CUs vizinhas. O contexto selecionado pode corresponder a um valor de probabilidade igual a um para o elemento de sintaxe quando a profundidade de CU da CU atual é menor que a profundidade de CU mínima da CU ou CUs vizinhas. E$m tais exemplos, o contexto selecionado pode compreender um de um contexto dedicado ou um contexto adaptativo com um valor inicial que é igual ou muito próximo de um.
[0137] Em alguns exemplos, o codificador de vídeo pode ser configurado para determinar se a profundidade de CU da CU atual é maior que a profundidade de CU máxima da CU ou CUs vizinhas. O codificador de vídeo pode ser configurado para selecionar o contexto com base na determinação de que a profundidade de CU da CU atual é maior que a profundidade de CU máxima da CU ou CUs vizinhas. O codificador de vídeo pode ser configurado para fixar o valor inicial correspondente ao contexto selecionado como igual a zero com base na determinação de que a profundidade de CU da CU atual é maior que a profundidade de CU máxima da CU ou CUs vizinhas. O contexto selecionado pode corresponder a um valor de probabilidade igual a zero para o elemento de sintaxe quando a profundidade de CU da CU atual é maior que a profundidade de CU máxima da CU ou CUs vizinhas. Em tais exemplos, o contexto selecionado pode compreender um de um contexto dedicado ou um contexto adaptativo com um valor inicial que é igual ou muito próximo de zero.
[0138] Em outros exemplos, o codificador de vídeo pode ser configurado para selecionar, como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à unidades de codificação (CU) atual com base em pelo menos uma de informações referentes à profundidade de CU de uma ou mais CUs espacialmente vizinhas com relação à CU atual, ou informações referentes à profundidade de CU de um ou mais CUs temporalmente vizinhas com relação à CU atual. Em tais exemplos, o codificador de vídeo pode ser configurado para determinar se a profundidade de CU da CU atual é menor que a profundidade de CU mínima de pelo menos uma da CU ou CUs espacialmente vizinhas ou da CU ou CUs temporalmente vizinhas. O codificador de vídeo pode ser configurado para selecionar o contexto com base na determinação de que a profundidade de CU da CU atual é menor que a profundidade de CU mínima da pelo menos uma de uma ou mais CUs espacialmente vizinhas e uma ou mais CUs temporalmente vizinhas. O codificador de vídeo pode ser configurado para fixar o valor inicial correspondente ao contexto selecionado como igual a 255 com base na determinação de que a profundidade de CU da CU atual é menor que a profundidade de CU mínima da pelo menos uma de uma ou mais CUs espacialmente vizinhas ou uma ou mais CUs temporalmente vizinhas.
[0139] Em alguns exemplos o contexto selecionado pode corresponder a um valor de probabilidade igual ou muito próximo de um para o elemento de sintaxe quando a profundidade de CU da CU atual é menor que a profundidade de CU mínima da pelo menos uma de uma ou mais CUs espacialmente vizinhas ou uma ou mais CUs temporalmente vizinhas. Em tais exemplos, o contexto selecionado pode compreender um de um contexto dedicado ou um contexto adaptativo com um valor inicial que é igual ou muito próximo de um. Em outros exemplos, o contexto selecionado pode corresponder a um valor de probabilidade igual ou muito próximo de zero para o elemento de sintaxe quando a profundidade de CU da CU atual é maior que a profundidade de CU máxima da pelo menos uma de uma ou mais CUs espacialmente vizinhas ou uma ou mais CUs temporalmente vizinhas. E m tais exemplos, o contexto selecionado pode compreender um de um contexto dedicado ou contexto adaptativo com um valor inicial que é igual ou muito próximo de zero.
[0140] Em alguns exemplos, o codificador de vídeo pode ser configurado para determinar se a profundidade de CU da CU atual é maior que a profundidade de CU máxima de pelo menos uma da CU ou CUs espacialmente vizinhas ou da CU ou CUs temporalmente vizinhas. O codificador de vídeo pode ser configurado para selecionar o contexto com base na determinação de que a profundidade de CU da CU atual é maior que a profundidade de CU de CU máxima da pelo menos uma de uma ou mais CUs espacialmente vizinhas ou uma ou mais CUs temporalmente vizinhas. O codificador de vídeo pode ser configurado para fixar o valor inicial correspondente ao contexto selecionado como igual a zero com base na determinação de que a profundidade de CU da CU atual é maior que a profundidade de CU máxima da pelo menos uma ou mais CUs espacialmente vizinhas ou uma ou mais CUs temporalmente vizinhas.
[0141] Em alguns exemplos, o codificador de vídeo pode ser configurado para selecionar contexto de um grupo de pelo menos quatro contextos possíveis. Em tais exemplos, o grupo de pelo menos quatro contextos possíveis compreende seis contextos possíveis.
[0142] A Figura 5 é um fluxograma que mostra um processo exemplar para decodificar dados de vídeo compatível com as técnicas desta revelação. o processo da Figura 5 é geralmente descrito como sendo executado por um decodificador de vídeo (o decodificador de vídeo 30, por exemplo) para fins de exemplificação. Embora diversos outros processadores possam executar também o processo mostrado na Figura 5. Em alguns exemplos a memória de dados de vídeo 151, a unidade de decodificação por entropia e/ou a unidade de processamento de predição 152 podem executar um ou mais processos mostrados na Figura 5.
[0143] No exemplo da Figura 5, o decodificador de vídeo 30 pode ser configurado para receber uma unidade de árvore de codificação (CTU) que representa a CTU atual (210). O decodificador de vídeo 30 pode ser configurado para receber um elemento de sintaxe para a CU atual e indica se a CU atual é dividida em uma série de sub-CUs. Em alguns exemplos, o elemento de sintaxe pode ser um elemento de sintaxe split_cu_flag. O decodificador de vídeo 30 pode ser configurado para determinar um contexto para decodificar por entropia o elemento de sintaxe recebido com base em pelo menos uma de informações referentes à profundidade de CU de uma ou mais CUs espacialmente vizinhas com relação à CU atual ou informações referentes à profundidade de CU de uma ou mais CUs temporalmente vizinhas com relação à CU atual (214). O decodificador de vídeo 30 pode ser configurado para decodificar por entropia o elemento de sintaxe utilizando um contexto determinado (216).
[0144] O decodificador de vídeo 30 pode ser configurado para determinar, com base no elemento de sintaxe decodificado, se a CU atual é dividida em uma série de sub-CUs (218). Se a CU atual estiver dividida em uma série de CUs, o decodificador de vídeo 30 pode ser configurado para receber um elemento de sintaxe para cada sub-CU que indica se cada sub-CU é também dividida em uma série de sub-CUs (219). O decodificador de vídeo 30 pode ser configurado para determinar um contexto para cada elemento de sintaxe para cada sub-CU e pode ser configurado para decodificar por entropia cada elemento de sintaxe para cada sub-CU utilizando cada contexto determinado para cada elemento de sintaxe conforme descrito com relação aos blocos 214 e 216.
[0145] Se o decodificador de vídeo 30 determinar no bloco 218 que a CU atual (ou sub-CU) não está também dividida em uma série de sub-CUs, então, o decodificador de vídeo 30 pode ser configurado para decodificar por entropia informações de predição e informações residuais. O decodificador de vídeo 30 pode ser configurado para formar cada CU e sub-CU (PU, por exemplo) utilizando as informações de predição decodificadas (222). O decodificador de vídeo 30 pode ser configurado para formar unidades de transformadas para as CUs e sub-CUs utilizando as informações residuais decodificadas (224). O decodificador de vídeo 30 pode ser configurado para decodificar cada CU combinando respectivos sub-blocos (PUs, por exemplo) e TUs (226).
[0146] A Figura 6 é um fluxograma que mostra um processo exemplar para codificar dados de vídeo compatível com as técnicas desta revelação. O processo da Figura 6 é geralmente descrito como sendo executado por um codificador de vídeo (o codificador de vídeo 20, por exemplo) para fins de exemplificação, embora diversos outros processadores possam executar também o processo mostrado na Figura 6. Em alguns exemplos, a memória de dados de vídeo 101, a unidade de processamento de predição 100 e/ou a unidade de codificação por entropia 118 podem executar um ou mais processos mostrados na Figura 6.
[0147] No exemplo da Figura 6, o codificador de vídeo 20 pode ser configurado para dividir (particionar, por exemplo) uma CTU em uma série de CUs (240). O codificador de vídeo 20 pode ser configurado para atribuir um valor a um elemento de sintaxe para cada CU que indica se cada CU é também dividida (242). Em alguns exemplos, o elemento de sintaxe para cada CU pode ser um elemento de sintaxe split_cu_flag. O codificador de vídeo 20 pode ser configurado para determinar um contexto para codificar por entropia o elemento de sintaxe para cada CU com base em pelo menos uma de informações referentes à profundidade de CU de uma ou mais CUs espacialmente vizinhas com relação à CU atual (a CU à qual o elemento de sintaxe está associado, por exemplo) ou informações referentes à profundidade de CU de uma ou mais CUs temporalmente vizinhas com relação à CU atual (244). O codificador de vídeo 20 pode ser configurado para codificar por entropia cada elemento de sintaxe para cada CU utilizando o contexto determinado para cada elemento de sintaxe para cada CU (246).
[0148] O codificador de vídeo 20 pode ser configurado para formar informações de predição e informações residuais para cada CU e cada sub-CU (PU, por exemplo)(248). O codificador de vídeo 20 pode ser configurado para codificar informações de predição e informações residuais para cada CU e cada sub-CU (250).
[0149] Exemplo 1: um método para processar dados de vídeo de acordo com qualquer uma das técnicas ou qualquer combinação ou permutas das técnicas aqui reveladas.
[0150] Exemplo 2: um método para codificar dados de vídeo, o método compreendendo: efetuar modelação de contexto da codificação aritmética binária adaptativa ao contexto (CABAC) de um elemento de sintaxe associado a uma unidade de codificação (CU) com base em pelo menos uma de informações de uma CU espacialmente vizinha com relação à CU ou de uma CU temporalmente vizinha com relação à CU e codificar por CABAC o elemento de sintaxe com base no contexto modelado.
[0151] Exemplo 3: o método do Exemplo 2, no qual a codificação CABAC compreende codificação CABAC.
[0152] Exemplo 4: o método do exemplo 2, no qual a codificação CABAC compreende decodificação CABAC.
[0153] Exemplo 5: o método de qualquer um dos exemplos 2-4, no qual o elemento de sintaxe representa CACU é dividida em sub-CUs e no qual a codificação CABAC compreende a codificação CABAC do elemento de sintaxe com base na determinação de que é provável de que a CU esteja dividida quando a profundidade de CU atual é menor do que a profundidade de CU mínima para a CU espacialmente vizinha ou a CU temporalmente vizinha.
[0154] Exemplo 6: o método de qualquer um dos exemplos 2-5, no qual o elemento de sintaxe representa CACU é dividida em sub-CUs, no qual a codificação CABAC compreende a codificação CABAC do elemento de sintaxe utilizando-se um modelo de contexto que atribui um valor de probabilidade igual ou muito próximo de um para o elemento de sintaxe quando a profundidade de CU atual para a CU é menor que a profundidade de CU mínima para a CU espacialmente vizinha ou a CU temporalmente vizinha, e no qual o modelo de contexto compreende um de um modelo de contexto dedicado ou um modelo de contexto adaptativo com um valor inicial que é igual ou muito próximo de um.
[0155] Exemplo 7: o método de qualquer um dos exemplos 2-6, no qual o elemento de sintaxe representa se a CU é dividida em sub-CUs, e no qual a codificação CABAC compreende a codificação CABAC do elemento de sintaxe com base na determinação de que não é provável de que a CU seja dividida quando a profundidade de CU atual é maior de que a profundidade de CU máxima para a CU espacialmente vizinha ou a CU temporalmente vizinha.
[0156] Exemplo 8: o método de qualquer um dos exemplos 2-7, no qual o elemento de sintaxe representa se a CU é dividida em sub-CUs, e no qual a codificação CABAC compreende a codificação CABAC do elemento de sintaxe utilizando-se um modelo de contexto que ambiente o atribui um valor de probabilidade igual ou muito próximo de zero para o elemento de sintaxe quando a profundidade de CU atual para a CU é maior que a profundidade de CU máxima para a para a CU espacialmente vizinha ou a CU temporalmente vizinha, e no qual mo modelo de contexto compreende um de um modelo de contexto dedicado ou um modelo de contexto adaptativo com um valor inicial que é igual ou muito próximo de zero.
[0157] Exemplo 9: o método de qualquer um dos exemplos 2-8, no qual o elemento de sintaxe compreende o elemento de sintaxe split_cu_flag.
[0158] Exemplo 10: em resposta à determinação de que não é muito provável de que a CU esteja dividida e a resposta à determinação de que não é muito improvável que a CU seja dividida, efetuar a modelação de contexto do elemento de sintaxe utilizando-se a seleção de contexto do split_cu_flag definido na HEVC.
[0159] Exemplo 11: método de qualquer um dos exemplos 2-10, que compreende também, em resposta à determinação de que é provável de que a CU seja dividida, estabelecer um contexto associado ao fato de a CU ser também dividida como igual a 255, e em resposta à determinação de que não é provável de que a CU seja dividida, fixar um contexto associado a fato de ser improvável que a CU seja dividida seja igual a zero.
[0160] Exemplo 12: o método de qualquer um dos exemplos 2-11, no qual uma CTU associada à CU tem um tamanho maior que 64x64, o método compreendendo também: utilizar um de quarto contextos possíveis para modelar o elemento de sintaxe.
[0161] Exemplo 13: O método do exemplo 12, que compreende também selecionar um contexto para codificar por CABAC o elemento de sintaxe de acordo com: min(3cur_cu_depth), no qual cur_cu_depth indica a profundidade atual da CU e norte-americano min é uma função que indica um mínimo de 3 e cur_cu_depth.
[0162] Exemplo 14: o método do exemplo 2, no qual o elemento de sintaxe compreende inter_pred_idc, o método compreendendo também: determinar um índice de contexto para inter_pred_idc com base em se a quantificação para a CU é uniforme ou não uniforme.
[0163] Exemplo 15: o método do exemplo 14, no qual o índice de contexto é igual a: min(profundidade de CU, M), no qual a profundidade de CU é a profundidade da CU, no qual M é um valor de número inteiro positivo e no qual min é uma função que devolve um mínimo de M e a profundidade de CU.
[0164] Exemplo 16: o método do exemplo 15, no qual M é igual a 3.
[0165] Exemplo 17: um método para codificar dados de vídeo, o método compreendendo: em resposta à determinação de que o tamanho da CTU é maior que 64x64, determinar um grupo de restrições que compreende uma profundidade de CU máxima e uma profundidade de CU mínima da CTU e codificar a CTU com base em pelo menos algumas do grupo de restrições.
[0166] Exemplo 18: o método do exemplo 17, no qual a profundidade de CU máxima é restrita ao tamanho de 64x64.
[0167] Exemplo 19: o método de qualquer um dos exemplos 17-18, que compreende também: codificar o tamanho de CU máximo da CTU, o tamanho da CTU e a profundidade de CU máxima em um conjunto de parâmetros.
[0168] Exemplo 20: o método de qualquer um dos exemplos 17-19 que compreende também: em resposta à determinação de que uma CU da CTU tem um tamanho maior que o tamanho de CU máximo, inferir que o valor de split_cu_flag é igual a um sem a codificação do elemento split_cu_flag.
[0169] Exemplo 21: o método de qualquer um dos exemplos 17-20, no qual a profundidade de CU máxima é menor que a variável M.
[0170] Exemplo 22: o método de qualquer um dos exemplos 17-21, que compreende também: restringir o tamanho de CU da CTU de modo a ser não menor do que (1<<(N-M)), no qual o tamanho de CTU máximo é igual a (1<<N), no qual N e M são valores de número inteiro.
[0171] Exemplo 23: o método de qualquer um dos exemplos 17-22, no qual os valores restritos aplicam-se somente a CUs inter-preditas da CTU.
[0172] Exemplo 24: o método de qualquer um dos exemplos 17-22, no qual pelo menos um do tamanho de CU máximo ou do tamanho de CU mínimo é diferente para uma CU intra-codificada da CTU e uma CU inter-codificada da CTU.
[0173] Exemplo 25: o método do exemplo 21, no qual M é igual a 4.
[0174] Deve ficar entendido que todas as técnicas aqui descritas podem ser utilizadas individualmente ou em combinação. Esta revelação inclui vários métodos de sinalização que podem alterar-se dependendo de determinados fatores, tais como tamanho de bloco, tamanho de paleta, tipo de fatia, etc. Tal variação na sinalização ou inferência dos elementos de sintaxe pode ser conhecida do codificador e do decodificador a priori ou pode ser sinalizada explicitamente no conjunto de parâmetros de vídeo (VPS), no conjunto de parâmetros de sequência (SPS), no conjunto de parâmetros de imagem (PPS), no cabeçalho de fatia a um nível de justaposição ou em outro lugar.
[0175] Deve-se reconhecer que, dependendo do exemplo, determinados atos ou eventos de qualquer uma das técnicas aqui descritas podem ser executados em uma sequência diferente, podem ser adicionados, fundidos ou deixados de fora completamente (nem todos os atos ou eventos descritos são necessários para a prática das técnicas, por exemplo). Além do mais, em determinados exemplos, os atos ou eventos, podem ser executados concomitantemente, como, por exemplo, através de processamento com vários fluxos de execução, processamento com interrupções ou vários processadores e não sequencialmente. Além disto, embora determinados aspectos desta revelação sejam descritos como sendo executados por um único módulo ou unidade para fins de esclarecimento, deve ficar entendido que as técnicas desta revelação podem ser executadas por uma combinação de unidades ou módulos associados a um codificador de vídeo.
[0176] Determinados aspectos desta revelação foram descritos com relação ao padrão HEVC em desenvolvimento para fins de ilustração. Entretanto, as técnicas descritas nesta revelação podem ser úteis em outros processos de codificação de vídeo, inclusive outros processos de codificação de vídeo padrão ou patenteados ainda não desenvolvidos.
[0177] As técnicas descritas acima podem ser executadas pelo codificador de vídeo 20 (Figuras 1 e 2) ou o decodificador de vídeo 30 (Figuras 1 e 3), ambos os quais podem ser geralmente referidos como codificador de vídeo.Da mesma maneira, a codificação de vídeo pode referir-se à codificação de vídeo ou decodificação de vídeo, conforme aplicável.
[0178] Deve ficar entendido que todas as técnicas aqui descritas podem ser utilizadas individualmente ou em combinação Por exemplo, o codificador de vídeo 20 e um ou mais componentes dele e o decodificador de vídeo 30 e/ou um ou mais componentes dele podem executar as técnicas descritas nesta revelação em qualquer combinação. Como outro exemplo, as técnicas aqui descritas podem ser executadas pelo codificador de vídeo 20 (Figuras 1 e 2) e/ou pelo decodificador de vídeo 30 (Figuras 1 e 3), ambos os quais podem ser geralmente referidos como codificador de vídeo. Da mesma maneira, a codificação de vídeo pode referir-se à codificação de vídeo ou decodificação de vídeo, conforme aplicável.
[0179] Deve-se reconhecer que, dependendo do exemplo, determinados atos ou eventos de qualquer uma das técnicas aqui descritas podem ser executados em uma sequência diferente, podem ser adicionados, fundidos ou deixados de fora completamente (nem todos os atos ou eventos descritos são necessários para a prática das técnicas, por exemplo). Além do mais, em determinados exemplos, os atos ou eventos, podem ser executados concomitantemente, como, por exemplo, através de processamento com vários fluxos de execução, processamento com interrupções ou vários processadores e não sequencialmente. Além disto, embora determinados aspectos desta revelação sejam descritos como sendo executados por um único módulo ou unidade para fins de esclarecimento, deve ficar entendido que as técnicas desta revelação podem ser executadas por uma combinação de unidades ou módulos associados a um codificador de vídeo.
[0180] Determinados aspectos desta revelação foram descritos com relação a um ou mais padrões de codificação de vídeo - sejam eles em versões, em desenvolvimento ou semelhantes - para fins de exemplificação. Entretanto, as técnicas descritas nesta revelação podem ser úteis para outros processos de codificação de vídeo, inclusive outros processos de codificação de vídeo padrão ou patenteados ainda não desenvolvidos.
[0181] De acordo com esta revelação, o termo “ou” pode ser interpretado como “e/ou” no caso de o contexto não determinar de outra maneira. Além disto, embora locuções tais como “um ou mais” ou “pelo menos um” ou semelhantes possam ter sido utilizado para alguns recursos aqui revelados, mas não outros; os recursos para os quais tal linguagem não foi utilizada podem ser interpretados como tendo um significado implicado no caso de o contexto não determinar o contrário.
[0182] Embora combinações específicas de diversos aspectos das técnicas sejam descritas acima, estas combinações são apresentadas meramente para exemplificar as técnicas descritas nesta revelação. Por conseguinte, as técnicas desta revelação não devem ser limitadas a estas combinações exemplares e podem abranger qualquer combinação concebível dos diversos aspectos das técnicas descritas nesta revelação.
[0183] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou em qualquer combinação deles. Se implementadas em software, as funções podem ser armazenadas ou transmitidas como uma ou mais instruções em código em um meio passível de leitura por computador e executadas por uma unidade de processamento baseada em hardware. Os meios passíveis de leitura por computador podem incluir meios de armazenamento passíveis de leitura por computador que correspondem a um meio tangível tal como um meio de armazenamento de dados ou um meio de comunicação que inclui qualquer meio que facilite a transferência de um programa de computador de um lugar para outro, de acordo com um protocolo de comunicação, por exemplo. Desta maneira, os meios passíveis de leitura por computador podem corresponder geralmente a (1) meios de armazenamento passíveis de leitura por computador tangíveis que são não transitórios ou (2) um meio de comunicação tal como um sinal ou onda portadora. Os meios de armazenamento de dados podem ser quaisquer meios disponíveis que possam ser acessados por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e/ou estruturas de dados para implementação das técnicas descritas nesta revelação. Um produto de programa de computador pode incluir um meio passível de leitura por computador.
[0184] A título de exemplo, e não de limitação, tais meios de armazenamento passíveis de leitura por computador podem compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento em disco óptico, armazenamento em disco magnético ou outros aparelhos de armazenamento magnético, memória flash ou qualquer outro meio que possa ser utilizado para armazenar código de programa desejado sob a forma de instruções ou estruturas de dados e que possa ser acessado por um computador. Além disto, qualquer conexão é apropriadamente denominada de meio passível de leitura por computador. Por exemplo, se as instruções forem transmitidas de um site da Web, servidor ou outra fonte remota utilizando-se um cabo coaxial, cabo de fibra óptica, par trançado, linha de assinante digital (“DSL”), ou tecnologias sem fio tais como infravermelho, rádio e microonda, então o cabo coaxial, o cabo de fibra ótica, o par trançado a DSL ou tecnologias sem fio tais como infravermelho, rádio e microonda são incluídos na definição de meio. Deve ficar entendido, contudo, que os meios de armazenamento passíveis de leitura por computador e meios de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios transitórios, mas, em vez disso são direcionadas para meios de armazenamento tangíveis não transitórios. Disco (disk e disc, no original) conforme aqui utilizado inclui disco compacto (“CD”), disco de laser, disco óptico, disco versátil digital (“DVD”), disco flexível e disco blu-ray, onde discos (disks) reproduzem usualmente dados magneticamente, enquanto discos (discs) reproduzem dados opticamente com lasers. Combinações desses elementos devem ser incluídas dentro do alcance dos meios passíveis de leitura por computador.
[0185] As instruções podem ser executadas por um ou mais processadores, tais como um ou mais processadores de sinais digitais (DSPs), microprocessadores de propósito geral, circuitos integrados específicos de aplicativo (ASICs), arranjos lógicos programáveis no campo (FPGAs) ou outros circuitos lógicos integrados ou discretos equivalentes. Por conseguinte, o termo “processador” aqui utilizado pode referir-se a qualquer uma das estruturas precedentes ou a qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disto, sob alguns aspectos, a funcionalidade aqui descrita pode ser apresentada dentro de módulos de hardware e/ou software dedicados configurados para codificação e decodificação, ou incorporados em um CODEC combinado. Além disto, as técnicas podem ser completamente implementadas em um ou mais circuitos ou elementos lógicos.
[0186] As técnicas desta revelação podem ser implementadas em uma ampla variedade de aparelhos ou equipamentos, inclusive um aparelho telefônico sem fio, um circuito integrado (IC) ou um conjunto de ICs (um conjunto de chips, por exemplo). Diversos componentes, módulos ou unidades são descritos nesta revelação para enfatizar aspectos funcionais de aparelhos configurados para executar as técnicas reveladas, mas não exigem necessariamente a execução por unidades de hardware diferentes. Em vez disso, conforme descrito acima, diversas unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por uma coleção de unidades de hardware interoperantes, que incluem um ou mais processadores descritos acima, em conjunto com software e/ou firmware adequado.
[0187] Foram descritos diversos exemplos. Qualquer combinação dos sistemas, operações, funções ou exemplos é contemplada. Estes e outros exemplos estão dentro do alcance das reivindicações seguintes.

Claims (9)

1. Método de codificar dados de vídeo compreendendo uma pluralidade unidades de codificação, cada unidade de codificação, CU, possuindo uma profundidade de CU, a faixa de profundidade de CU sendo de pelo menos 0 a 3, inclusive, o método caracterizado pelo fato de que compreende, para cada CU: selecionar, como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à CU atual, em que os elementos de sintaxe representam se a CU atual está dividida em sub-CUs, em que a seleção de um contexto compreende: determinar se uma profundidade de CU da CU atual é menor do que a profundidade mínima de CU da uma ou mais CUs vizinhas e selecionar um primeiro contexto dedicado quando a profundidade de CU da CU atual é menor que a profundidade mínima de CU da uma ou mais CUs vizinhas, o primeiro contexto dedicado indicando que uma divisão adicional da CU atual possui alta possibilidade; ou determinar se uma profundidade de CU da CU atual é maior do que a profundidade máxima de CU da uma ou mais CUs vizinhas e selecionar um segundo contexto dedicado quando a profundidade de CU da CU atual é maior que a profundidade máxima de CU da uma ou mais CUs vizinhas, o segundo contexto dedicado sendo diferente do primeiro contexto dedicado e indicando que uma divisão adicional da CU atual possui baixa possibilidade; e codificar por entropia o elemento de sintaxe associado à CU atual com base no contexto selecionado.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o processo de codificação por entropia compreende um processo de codificação aritmética binária adaptativa ao contexto, CABAC, e em que a codificação por entropia compreende codificação CABAC.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que a codificação CABAC compreende codificação CABAC ou decodificação CABAC.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a seleção de um contexto compreende adicionalmente: quando uma ou mais profundidades de CU referentes à uma ou mais CUs vizinhas é igual a uma profundidade de CU da CU atual, selecionar um contexto a partir de uma pluralidade de contextos adicionais diferentes do primeiro e do segundo contextos.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a pluralidade de contextos adicionais é um grupo de quatro contextos possíveis.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que selecionar o contexto para o elemento de sintaxe é baseado em informações referentes à profundidade de CU de uma ou mais CUs espacialmente vizinhas com relação à CU atual.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que selecionar o contexto para o elemento de sintaxe é baseado em informações referentes à profundidade de CU de uma ou mais CUs temporalmente vizinhas com relação à CU atual.
8. Aparelho para codificar dados de vídeo compreendendo uma pluralidade unidades de codificação, cada unidade de codificação, CU, possuindo uma profundidade de CU, a faixa de profundidade de CU sendo de pelo menos 0 a 3, inclusive, o aparelho caracteri zado pelo fato de que compreende: meios para determinar, para cada CU, se uma profundidade de CU de uma CU atual é menor que a profundidade mínima de CU da uma ou mais CUs vizinhas, meios para determinar, para cada CU, se uma profundidade de CU da CU atual é maior que a profundidade máxima de CU da uma ou mais CUs vizinhas; meios para selecionar, para cada CU, como parte de um processo de codificação por entropia, um contexto para um elemento de sintaxe associado à CU atual, em que os elementos de sintaxe representam se a CU atual está dividida em sub- CUs, em que a seleção de um contexto é configurada para selecionar um primeiro contexto dedicado em resposta à determinação de que a profundidade de CU da CU atual é menor do que a profundidade mínima de CU da uma ou mais CUs vizinhas, ou para selecionar um segundo contexto de dedicado em resposta à determinação de que a profundidade de CU da CU atual é maior que a profundidade máxima de CU da uma ou mais CUs vizinhas, em que o primeiro contexto dedicado indica que uma divisão adicional da CU atual possui alta possibilidade e o segundo contexto dedicado é diferente do primeiro contexto dedicado e indica que uma divisão adicional da CU atual possui baixa possibilidade; e meios para codificar por entropia, para cada CU d pluralidade de CUs, o elemento de sintaxe associado à CU atual com base no contexto selecionado.
9. Memória legível por computador caracterizada pelo fato de que compreende instruções nela armazenadas que, quando executadas, fazem com que um ou mais processadores executem o método conforme definido em qualquer uma das reivindicações 1 a 8.
BR112017016159-1A 2015-01-27 2016-01-27 Contextos para unidades de árvore de codificação grandes BR112017016159B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562108465P 2015-01-27 2015-01-27
US62/108,465 2015-01-27
US15/007,060 US9936201B2 (en) 2015-01-27 2016-01-26 Contexts for large coding tree units
US15/007,060 2016-01-26
PCT/US2016/015034 WO2016123169A1 (en) 2015-01-27 2016-01-27 Contexts for large coding tree units

Publications (2)

Publication Number Publication Date
BR112017016159A2 BR112017016159A2 (pt) 2018-04-17
BR112017016159B1 true BR112017016159B1 (pt) 2023-11-07

Family

ID=56433533

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112017016159-1A BR112017016159B1 (pt) 2015-01-27 2016-01-27 Contextos para unidades de árvore de codificação grandes

Country Status (11)

Country Link
US (2) US9936201B2 (pt)
EP (1) EP3251354B1 (pt)
JP (1) JP6462886B2 (pt)
KR (1) KR102452744B1 (pt)
CN (1) CN107211132B (pt)
BR (1) BR112017016159B1 (pt)
CA (1) CA2971764A1 (pt)
EA (1) EA034984B1 (pt)
TN (1) TN2017000309A1 (pt)
TW (1) TWI686080B (pt)
WO (1) WO2016123169A1 (pt)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9936201B2 (en) 2015-01-27 2018-04-03 Qualcomm Incorporated Contexts for large coding tree units
US20180091810A1 (en) * 2015-03-23 2018-03-29 Lg Electronics Inc. Method for processing video signal and device therefor
US9942548B2 (en) * 2016-02-16 2018-04-10 Google Llc Entropy coding transform partitioning information
US10880548B2 (en) * 2016-06-01 2020-12-29 Samsung Electronics Co., Ltd. Methods and apparatuses for encoding and decoding video according to coding order
KR102531386B1 (ko) * 2016-10-04 2023-05-12 주식회사 비원영상기술연구소 영상 데이터 부호화/복호화 방법 및 장치
EP3306927A1 (en) * 2016-10-05 2018-04-11 Thomson Licensing Encoding and decoding methods and corresponding devices
US10798375B2 (en) * 2016-11-01 2020-10-06 Samsung Electronics Co., Ltd. Encoding method and device therefor, and decoding method and device therefor
KR102354628B1 (ko) * 2017-03-31 2022-01-25 한국전자통신연구원 부호화 트리 유닛 및 부호화 유닛의 처리를 수행하는 영상 처리 방법, 그를 이용한 영상 복호화, 부호화 방법 및 그 장치
JP6680260B2 (ja) 2017-04-28 2020-04-15 株式会社Jvcケンウッド 画像符号化装置、画像符号化方法及び画像符号化プログラム、並びに画像復号化装置、画像復号化方法及び画像復号化プログラム
CN114449269B (zh) * 2017-07-07 2023-03-28 三星电子株式会社 视频编码方法及装置、视频解码方法及装置
CN111316642B (zh) 2017-10-27 2021-10-01 华为技术有限公司 信令图像编码和解码划分信息的方法和装置
WO2019167849A1 (en) * 2018-02-28 2019-09-06 Sharp Kabushiki Kaisha Systems and methods for partitioning regions of a picture for video coding using different coding unit sizes
ES2945186T3 (es) 2018-06-15 2023-06-29 Lg Electronics Inc Método y aparato para la codificación de entropía basada en CABAC
AU2018204786A1 (en) * 2018-06-29 2020-01-16 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a transformed block of video samples
CN111107358A (zh) * 2018-10-26 2020-05-05 北京字节跳动网络技术有限公司 块分割中的冗余降低
JP7360466B2 (ja) * 2019-01-02 2023-10-12 フラウンホーファー-ゲゼルシャフト ツル フェルデルング デル アンゲヴァンテン フォルシュング エー ファウ 画像の符号化及び復号化
KR20220007853A (ko) * 2019-03-18 2022-01-19 프라운호퍼 게젤샤프트 쭈르 푀르데룽 데어 안겐반텐 포르슝 에. 베. 신경망의 매개변수를 압축하기 위한 방법 및 장치
CN117560489A (zh) 2019-05-14 2024-02-13 北京字节跳动网络技术有限公司 用于残差编解码的上下文建模
US11284077B2 (en) * 2019-09-10 2022-03-22 Mediatek Inc. Signaling of subpicture structures

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004030369A1 (en) 2002-09-27 2004-04-08 Videosoft, Inc. Real-time video coding/decoding
JP2004328498A (ja) 2003-04-25 2004-11-18 Mitsubishi Electric Corp 基地局、端末、通信システム、及び通信方法
US8107535B2 (en) 2003-06-10 2012-01-31 Rensselaer Polytechnic Institute (Rpi) Method and apparatus for scalable motion vector coding
KR100703776B1 (ko) 2005-04-19 2007-04-06 삼성전자주식회사 향상된 코딩 효율을 갖는 컨텍스트 기반 적응적 산술 코딩및 디코딩 방법과 이를 위한 장치, 이를 포함하는 비디오코딩 및 디코딩 방법과 이를 위한 장치
JP2008167149A (ja) 2006-12-28 2008-07-17 Matsushita Electric Ind Co Ltd 通信方法及び通信装置
KR101356733B1 (ko) 2007-03-07 2014-02-05 삼성전자주식회사 컨텍스트 기반 적응적 이진 산술 부호화, 복호화 방법 및장치
US7941178B2 (en) 2007-04-06 2011-05-10 Intel Corporation Systems and methods for scheduling transmissions for coexistence of differing wireless radio protocols
US8483282B2 (en) 2007-10-12 2013-07-09 Qualcomm, Incorporated Entropy coding of interleaved sub-blocks of a video block
US8542748B2 (en) 2008-03-28 2013-09-24 Sharp Laboratories Of America, Inc. Methods and systems for parallel video encoding and decoding
US9479786B2 (en) 2008-09-26 2016-10-25 Dolby Laboratories Licensing Corporation Complexity allocation for video and image coding applications
CN101836454B (zh) 2008-12-03 2012-08-22 联发科技股份有限公司 对有序熵切片执行平行cabac码处理的方法及装置
US8787468B2 (en) 2009-06-19 2014-07-22 Motorola Mobility Llc Method and apparatus for multi-radio coexistence
US8626067B2 (en) 2009-10-26 2014-01-07 Mediatek Inc. System and methods for enhancing coexistence efficiency for multi-radio terminals
KR101700358B1 (ko) 2009-12-09 2017-01-26 삼성전자주식회사 영상의 부호화 방법 및 장치, 그 복호화 방법 및 장치
US9369736B2 (en) 2010-04-05 2016-06-14 Samsung Electronics Co., Ltd. Low complexity entropy-encoding/decoding method and apparatus
CN103238321B (zh) 2010-09-30 2016-11-02 三星电子株式会社 用于对分层结构的符号进行编解码的视频编解码方法及其装置
CN107071490B (zh) * 2010-11-04 2020-07-14 Ge视频压缩有限责任公司 解码装置和方法、编码装置和方法、存储和传输图像方法
US9497472B2 (en) 2010-11-16 2016-11-15 Qualcomm Incorporated Parallel context calculation in video coding
WO2012134246A2 (ko) 2011-04-01 2012-10-04 엘지전자 주식회사 엔트로피 디코딩 방법 및 이를 이용하는 디코딩 장치
US8995523B2 (en) 2011-06-03 2015-03-31 Qualcomm Incorporated Memory efficient context modeling
ES2962519T3 (es) * 2011-06-23 2024-03-19 Sun Patent Trust Procedimiento de decodificación de imágenes, procedimiento de codificación de imágenes
SG10201605379RA (en) * 2011-07-01 2016-08-30 Samsung Electronics Co Ltd Method and apparatus for entropy encoding using hierarchical data unit, and method and apparatus for decoding
KR20130004173A (ko) * 2011-07-01 2013-01-09 한국항공대학교산학협력단 비디오 부호화 방법 및 복호화 방법과 이를 이용한 장치
PL3454561T3 (pl) * 2011-09-14 2020-05-18 Samsung Electronics Co., Ltd. Sposób i urządzenie do kodowania jednostki predykcji (pu) w oparciu o jej rozmiar i odpowiadające urządzenie do dekodowania
KR101598142B1 (ko) * 2011-10-31 2016-02-26 삼성전자주식회사 변환 계수 레벨의 엔트로피 부호화 및 복호화를 위한 컨텍스트 모델 결정 방법 및 장치
WO2015006951A1 (en) * 2013-07-18 2015-01-22 Mediatek Singapore Pte. Ltd. Methods for fast encoder decision
US9936201B2 (en) 2015-01-27 2018-04-03 Qualcomm Incorporated Contexts for large coding tree units

Also Published As

Publication number Publication date
CA2971764A1 (en) 2016-08-04
JP2018506912A (ja) 2018-03-08
WO2016123169A1 (en) 2016-08-04
EP3251354A1 (en) 2017-12-06
EP3251354B1 (en) 2022-04-20
CN107211132B (zh) 2019-10-18
US10298930B2 (en) 2019-05-21
CN107211132A (zh) 2017-09-26
TN2017000309A1 (en) 2019-01-16
BR112017016159A2 (pt) 2018-04-17
KR20170108011A (ko) 2017-09-26
TW201635798A (zh) 2016-10-01
JP6462886B2 (ja) 2019-01-30
EA034984B1 (ru) 2020-04-14
US20160219276A1 (en) 2016-07-28
KR102452744B1 (ko) 2022-10-07
EA201791429A1 (ru) 2017-11-30
TWI686080B (zh) 2020-02-21
US9936201B2 (en) 2018-04-03
US20180227580A1 (en) 2018-08-09

Similar Documents

Publication Publication Date Title
BR112017016159B1 (pt) Contextos para unidades de árvore de codificação grandes
CA3007664C (en) Multi-type-tree framework for video coding
JP6950004B2 (ja) ビデオコーディングにおいて変換処理とともに適用されるイントラフィルタ処理
KR102292788B1 (ko) 비디오 코딩을 위한 다중-유형-트리 프레임워크
EP3005698B1 (en) Residual differential pulse code modulation (dpcm) extensions and harmonization with transform skip, rotation, and scans
KR101825262B1 (ko) B 슬라이스에서의 예측 유닛의 단방향성 인터 예측으로의 제한
ES2770664T3 (es) Restricción en el tamaño de bloque de paleta en la codificación de vídeo
BR112016022085B1 (pt) Determinação de tamanho de paleta, entradas de paleta e filtragem de blocos codificados por paleta em codificação de vídeo
BR112014011060B1 (pt) Número de redução de contextos para codificação aritmética binária adaptativa de contexto
BR112014026750B1 (pt) Codificação de parâmetro de quantização (pq) em codificação de vídeo
BR112015025459B1 (pt) Método e aparelho para codificar/decodificar dados de vídeo e memória legível por computador
BR112013032601B1 (pt) Seleção de candidatos a modo de junção e modo de predição adaptativa de vetor de movimento unificados
KR20150003778A (ko) 코딩된 블록 플래그 코딩
KR20140130466A (ko) B 슬라이스에서의 예측 유닛의 단방향성 인터 예측으로의 제한
BR112013031006B1 (pt) Modelagem de contexto eficaz em memória
BR112013032040B1 (pt) Método e aparelho para codificação de vídeo, e memória legível por computador
WO2019195280A1 (en) Multi-type-tree framework for transform in video coding
OA18378A (en) Contexts for large coding tree units.
BR112017016371B1 (pt) Agrupamento de índice de paleta para codificação cabac de banda larga

Legal Events

Date Code Title Description
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
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 27/01/2016, OBSERVADAS AS CONDICOES LEGAIS