BR112017015533B1 - Compensação de movimento sobreposto para codificação de vídeo - Google Patents

Compensação de movimento sobreposto para codificação de vídeo Download PDF

Info

Publication number
BR112017015533B1
BR112017015533B1 BR112017015533-8A BR112017015533A BR112017015533B1 BR 112017015533 B1 BR112017015533 B1 BR 112017015533B1 BR 112017015533 A BR112017015533 A BR 112017015533A BR 112017015533 B1 BR112017015533 B1 BR 112017015533B1
Authority
BR
Brazil
Prior art keywords
block
sub
video data
video
blocks
Prior art date
Application number
BR112017015533-8A
Other languages
English (en)
Other versions
BR112017015533A2 (pt
Inventor
Hongbin Liu
Ying Chen
Jianle Chen
Xiang Li
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
Priority claimed from US15/005,934 external-priority patent/US10230980B2/en
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112017015533A2 publication Critical patent/BR112017015533A2/pt
Publication of BR112017015533B1 publication Critical patent/BR112017015533B1/pt

Links

Abstract

COMPENSAÇÃO DE MOVIMENTO SOBREPOSTO PARA CODIFICAÇÃO DE VÍDEO. Em um exemplo, um método de decodificar dados de vídeo pode incluir receber um primeiro bloco de dados de vídeo. O primeiro bloco de dados de vídeo pode ser um sub-bloco de uma unidade de predição. O método pode incluir receber um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. O método pode incluir determinar informação de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. O método pode incluir decodificar, usando compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo com base pelo menos em parte na informação de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo.

Description

[001] O presente pedido reivindica o benefício do pedido de patente provisional US no. 62/107.964 depositado em 26 de janeiro de 2016, e pedido de patente provisional US no. 62/116.631, depositado em 16 de fevereiro de 2015, cada um dos quais é pelo presente incorporado por referência na íntegra.
CAMPO TÉCNICO
[002] A presente revelação refere-se à codificação de vídeo; e mais especificamente, compensação de movimento em codificação de vídeo baseada em bloco.
ANTECEDENTES
[003] Capacidades de vídeo digital podem ser incorporadas em uma ampla gama de dispositivos, incluindo televisões digitais, sistemas de broadcast direta digital, sistemas de broadcast sem fio, assistentes pessoais digitais (PDAs), computadores de laptop ou mesa, computadores tablet, leitoras de e-book, câmeras digitais, dispositivos de gravação digital, tocadores de mídia digital, dispositivos de jogo de vídeo, consoles de videogame, telefones de rádio por satélite ou celular, os denominados “smart phones”, dispositivos de teleconferência de vídeo, dispositivos de streaming de vídeo e similares. Dispositivos de vídeo digital implementam técnicas de compressão de vídeo, como aquelas descritas nos padrões definidos por MPEG-2, MEPG-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 eficiência elevada (HEVC) e extensões de tais padrões. Os dispositivos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital mais eficientemente por implementar tais técnicas de compressão de vídeo.
[004] Técnicas de compressão de vídeo executam predição espacial (intra-imagem) e/ou predição temporal (inter-imagem) para reduzir ou remover redundância inerente em sequências de vídeo. Para codificação de vídeo baseada em bloco, uma fatia de vídeo (isto é, um quadro de vídeo ou uma porção de um quadro de vídeo) pode ser dividido em blocos de vídeo. Blocos de vídeo em uma fatia intra-codificada (I) de uma imagem são codificados usando predição espacial com relação a amostras de referência em blocos vizinhos na mesma imagem. Blocos de vídeo em uma fatia inter-codificada (P ou B) de uma imagem podem usar predição espacial com relação a amostras de referência em blocos vizinhos na mesma imagem ou predição temporal com relação a amostras de referência em outras imagens de referência. Imagens podem ser mencionadas com quadros e imagens de referência podem ser mencionadas como quadros de referência.
[005] Predição espacial ou temporal resulta em um bloco preditivo para um bloco a ser codificado. Dados residuais representam diferenças de pixel entre o bloco original a ser codificado e o bloco preditivo. Um bloco inter-codificado é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência formando o bloco preditivo e os dados residuais indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco intracodificado é codificado de acordo com um modo de intra-codificação e os dados residuais. Para compressão adicional, os dados residuais podem ser transformados de domínio de pixel em um domínio de transformada, resultando em coeficientes residuais, que então podem ser quantizados. Os coeficientes quantizados, incialmente dispostos em uma disposição bidimensional, podem ser varrido para produzir um vetor unidimensional de coeficientes, e codificação por entropia pode ser aplicada para obter ainda mais compressão.
SUMÁRIO
[006] Técnicas dessa revelação se referem à codificação de vídeo baseada em bloco. Por exemplo, as técnicas descritas nessa revelação podem incluir um ou mais técnicas para codificar ou decodificar um bloco de dados de vídeo usando compensação de movimento de bloco sobreposto (OBMC).
[007] Em um exemplo, essa revelação descreve um método de decodificar dados de vídeo compreendendo receber um primeiro bloco de dados de vídeo, em que o primeiro bloco de dados de vídeo é um sub-bloco de uma unidade de predição; receber um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo; determinar informações de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo; e decodificar, usando compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo baseado pelo menos em parte nas informações de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo.
[008] Em um outro exemplo, essa revelação descreve um dispositivo para codificar dados de vídeo compreendendo 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: armazenar um primeiro bloco de dados de vídeo na memória, em que o primeiro bloco de dados de vídeo é um sub-bloco de uma unidade de predição; armazenar um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo na memória; determinar informações de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo; e codificar, usando a compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo baseado pelo menos em parte nas informações de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo.
[009] Em outro exemplo, essa revelação descreve um aparelho para codificar dados de vídeo compreendendo meio para receber um primeiro bloco de dados de vídeo, em que o primeiro bloco de dados de vídeo é um sub-bloco de uma unidade de predição; meio para receber um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo; meio para determinar informações de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo; e meio para codificar, usando compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo baseado pelo menos em parte nas informações de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo.
[0010] Em outro exemplo, essa revelação descreve uma mídia de armazenagem legível em computador não transitória tendo instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores armazenem um primeiro bloco de dados de vídeo em uma memória, em que o primeiro bloco de dados de vídeo é um sub-bloco de uma unidade de predição; armazenem um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo na memória; determinem informações de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo; e codifiquem, usando compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo com base pelo menos em parte na informação de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo.
[0011] Os detalhes de um ou mais exemplos da revelação são expostos nos desenhos em anexo e a descrição abaixo. Outras características, objetivos e vantagens da revelação serão evidentes a partir da descrição de desenhos, e a partir das reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0012] A figura 1 é um diagrama de blocos ilustrando um sistema de codificação e decodificação de vídeo de exemplo que pode utilizar as técnicas descritas nessa revelação.
[0013] A figura 2 mostra modos de divisão para codificação de vídeo de modo inter predição.
[0014] As figuras 3A e 3B mostram candidatos de vetor de movimento vizinho espacial (MV) para fusão e modos de codificação de vídeo de predição de vetor de movimento avançado (AMVP), respectivamente.
[0015] A figura 4A mostra um exemplo de um candidato de predição de vetor de movimento temporal (TMVP).
[0016] A figura 4B mostra um exemplo de escalonamento de vetor de movimento.
[0017] A figura 5 mostra um exemplo de compensação de movimento de bloco sobreposto (OBMC) como usado no padrão de codificação de vídeo ITU-T H.263.
[0018] As figuras 6A e 6B mostram um exemplo de OBMC baseado em unidade de predição (PU) que pode ser usado em HEVC ou outros padrões de codificação de vídeo.
[0019] As figuras 7A-7C mostram sub-Pus e sub- blocos em um PU.
[0020] As figuras 8A-8B mostram sub-blocos onde OBMC pode ser aplicado.
[0021] A figura 9 é um diagrama de blocos ilustrando um codificador de vídeo de exemplo que pode implementar técnica OBMC descritas nessa revelação.
[0022] A figura 10 é um diagrama de blocos ilustrando um decodificador de vídeo de exemplo que pode implementar técnica OBMC descritas nessa revelação.
[0023] A figura 11 é um fluxograma ilustrando um processo de exemplo para decodificar dados de vídeo compatíveis com técnicas para codificação de vídeo OMBC dessa revelação.
[0024] A figura 12 é um fluxograma ilustrando um processo de exemplo para codificar dados de vídeo compatíveis com técnicas para codificação de vídeo OMBC dessa revelação.
DESCRIÇÃO DETALHADA
[0025] As técnicas dessa revelação se referem em geral à compensação de movimento em codificação de vídeo baseada em bloco. A técnica dessa revelação pode ser aplicada a um codec de vídeo existente ou padrão de codificação de vídeo (por exemplo, ITU-T H.265, HEVC), ou pode ser aplicada em um codec de vídeo ou padrão de codificação de vídeo futuro.
[0026] Como usado aqui, instâncias do termo “conteúdo” podem ser alteradas para o termo “vídeo”, e instâncias do termo “vídeo” podem ser alteradas para o termo “conteúdo”. Isso é verdadeiro independente de se os termos “conteúdo” ou “vídeo” estão sendo usados como um adjetivo, substantivo ou outra parte de speech. Por exemplo, referência a um “codificador de conteúdo” também inclui referência a um “codificador de vídeo”, e referência a um “codificador de vídeo” também inclui referência a um “codificador de conteúdo.” Similarmente, referência a “conteúdo” também inclui referência a “vídeo”, e referência a vídeo” também inclui referência a “conteúdo”. +
[0027] Como usado aqui, “conteúdo” se refere a qualquer tipo de conteúdo. Por exemplo, “conteúdo” pode se referir a vídeo, conteúdo de tela, imagem, qualquer conteúdo gráfico, qualquer conteúdo exibível, ou quaisquer dados correspondendo ao mesmo (por exemplo, dados de vídeo, dados de conteúdo de tela, dados de imagem, dados de conteúdo gráfico, dados de conteúdo exibível e similares).
[0028] Como usado aqui, o termo “vídeo” pode se referir a conteúdo de tela, conteúdo móvel, uma pluralidade de imagens que podem ser apresentadas em uma sequência, ou quaisquer dados correspondendo ao mesmo (por exemplo, dados de conteúdo de tela, dados de conteúdo móvel, dados de vídeo, dados de imagem e similares).
[0029] Como usado aqui, o termo “imagem” 'pode se referir a uma imagem única, uma ou mais imagens, uma ou mais imagens entre uma pluralidade de imagens correspondendo a um vídeo, uma ou mais imagens entre uma pluralidade de imagens não correspondendo a um vídeo, uma pluralidade de imagens correspondendo a um vídeo (por exemplo, todas as imagens correspondendo ao vídeo ou um número menor que todas as imagens correspondendo ao vídeo), uma subparte de uma imagem única, uma pluralidade de subpartes de uma imagem única, uma pluralidade de subpartes correspondendo a uma pluralidade de imagens, um ou mais primitivos gráficos, dados de imagem, dados gráficos e similares.
[0030] Como usado aqui, “informação de movimento” pode se referir a ou de outro modo incluir informação de vetor de movimento, ou mais simplesmente, um vetor de movimento. Em outros exemplos, “informação de movimento” pode se referir a ou de outro modo incluir informação de movimento diferente de informação de vetor de movimento. Ainda em outros exemplos, “informação de movimento” pode se referir a um ou mais vetores de movimento e qualquer outra informação relacionada a movimento, como uma direção de predição identificando a(s) lista(s) de imagem de referência a ser(em) usada(s) e um ou mais índices de referência identificando a(s) imagem(ns) de referência na(s) lista(s) de imagem de referência. Como usado aqui, “um conjunto de informações de movimento” ou similar pode se referir a “informação de movimento”. Similarmente, “informação de movimento” pode se referir a “um conjunto de informações de movimento” ou similar.
[0031] Como usado aqui, um “vizinho”, um “bloco vizinho”, “bloco vizinho” e similar se refere a um bloco de vídeo que é vizinho de outro bloco de dados de vídeo pelo menos em um lado/fronteira. Por exemplo, um bloco atual de dados de vídeo pode ter quatro lados: esquerdo, direito, superior e inferior. Um bloco vizinho de dados de vídeo ao bloco atual de dados de vídeo pode incluir qualquer bloco de dados de vídeo que fazem fronteira com a fronteira esquerda, direita, superior ou inferior do bloco de vídeo atual. Como outro exemplo, um primeiro bloco que é vizinho do segundo bloco compartilha uma fronteira (por exemplo, fronteira esquerda, fronteira direita, fronteira superior ou fronteira inferior) do segundo bloco.
[0032] A figura 1 é um diagrama de blocos ilustrando um sistema de codificação de vídeo de exemplo 10 que pode utilizar as técnicas dessa revelação. Como usado aqui, o termo “codificador de vídeo” se refere genericamente tanto a codificadores de vídeo como decodificadores de vídeo. Nessa revelação, o termo “codificação de vídeo” ou “codificação” pode se referir em geral à codificação de vídeo ou decodificação de vídeo. O codificador de vídeo 20 e decodificador de vídeo 30 do sistema de codificação de vídeo 10 representam exemplos de dispositivos que podem ser configurados para executar técnicas para codificar ou decodificar um bloco de dados de vídeo usando compensação de movimento de bloco sobreposto de acordo com vários exemplos descritos nessa revelação.
[0033] O codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para operar de acordo com as técnicas descritas nessa revelação. O decodificador de vídeo 30 pode ser configurado para executar um processo em geral recíproco àquele do codificador de vídeo 20 descrito aqui. Similarmente, o codificador de vídeo 20 pode ser configurado para executar um processo em geral recíproco àquele do decodificador de vídeo 30 descrito aqui.
[0034] Como mostrado na figura 1, o sistema de codificação de vídeo 10 inclui um dispositivo de fonte 12 e um dispositivo de destino 14. O dispositivo de fonte 12 gera dados de vídeo codificados. Por conseguinte, o dispositivo de fonte 12 pode ser mencionado como um dispositivo de codificação de vídeo ou um aparelho de codificação de vídeo. O dispositivo de destino 14 pode decodificar os dados de vídeo codificados gerados pelo dispositivo de fonte 12. Por conseguinte, o dispositivo de destino 14 pode ser mencionado como um dispositivo de decodificação de vídeo ou um aparelho de decodificação de vídeo. O dispositivo de fonte 12 e dispositivo de destino 14 podem ser exemplos de dispositivos de codificação de vídeo ou aparelhos de codificação de vídeo.
[0035] O dispositivo de fonte 12 e dispositivo de destino 14 podem compreender uma ampla gama de dispositivos, incluindo computadores de mesa, dispositivos de computação móvel, computadores notebook (por exemplo, laptop), computadores tablet, conversores de sinais de frequência, aparelhos de telefone como os denominados “smart” phones, televisões, câmeras, dispositivos de display, tocadores de mídia digital, consoles de jogos de vídeo, computadores em carros, ou similares.
[0036] O dispositivo de destino 14 pode receber dados de vídeo codificados a partir do dispositivo de fonte 12 através de um canal 16. O canal 16 pode compreender qualquer tipo de mídia e/ou uma ou mais mídia ou dispositivos capazes de mover os dados de vídeo codificados a partir do dispositivo de fonte 12 para o dispositivo de destino 14. Em um exemplo, o canal 16 pode compreender uma ou mais mídia de comunicação que habilitam o dispositivo de fonte 12 a transmitir dados de vídeo codificados diretamente para o dispositivo de destino 14 em tempo real. Nesse exemplo, o dispositivo de fonte 12 pode modular os dados de vídeo codificados de acordo com um padrão de comunicação, como um protocolo de comunicação sem fio, e pode transmitir os dados de vídeo modulados para o dispositivo de destino 14. Uma ou mais mídia de comunicação pode incluir mídia de comunicação cabeada e/ou sem fio, com um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão física. Uma ou mais mídia de comunicação pode fazer parte de uma rede baseada em pacote, como uma rede de área local, uma rede de área remota, ou uma rede global (por exemplo, a Internet). Uma ou mais mídia de comunicação pode incluir roteadores, comutadores, estações base ou outro equipamento que facilite comunicação a partir do dispositivo de fonte 12 para o dispositivo de destino 14.
[0037] Em alguns exemplos, dados codificados podem ser transmitidos a partir da interface de saída 22 para um dispositivo de armazenagem 26, que pode ser configurado para armazenar dados de vídeo codificados gerados pelo dispositivo de fonte 12. Embora mostrado como sendo separado do canal 16, entende-se que o canal 16 pode ser comunicativamente acoplado ao dispositivo de armazenagem 26 em outros exemplos. Nesse exemplo, o dispositivo de destino 14 pode acessar dados de vídeo codificados armazenados no dispositivo de armazenagem 26. Por exemplo, os dados de vídeo codificados podem ser acessados a partir do dispositivo de armazenagem 26 pela interface de entrada 28.
[0038] O dispositivo de armazenagem 26 pode incluir qualquer de uma variedade de mídia de armazenagem de dados distribuída ou localmente acessada como uma unidade rígida, discs Blu-ray, DVDs, CD-ROMs, memória flash, memória volátil ou não volátil, ou qualquer outra mídia de armazenagem digital adequada para armazenar dados de vídeo codificados. Em alguns exemplos, o dispositivo de armazenagem 26 pode corresponder a um servidor de arquivo ou outro dispositivo de armazenagem intermediário que armazena os dados de vídeo codificados gerados pelo dispositivo de fonte 12. Em tais exemplos, o servidor de arquivo pode ser qualquer tipo de servidor capaz de armazenar dados de vídeo codificados e transmitir os dados de vídeo codificados para o dispositivo de destino 14. Servidores de arquivo de exemplo incluem, por exemplo, servidores de rede (por exemplo, para um website), servidores de protocolo de transferência de arquivo (FTP), dispositivos de armazenagem ligados a rede (NAS), e unidades de disco local.
[0039] O dispositivo de destino 14 pode acessar os dados de vídeo codificados através de qualquer conexão de dados (por exemplo, qualquer conexão de dados padrão ou de outro modo), incluindo, por exemplo, uma conexão de Internet. Tipos de exemplo de conexões de dados podem incluir um canal sem fio (por exemplo, uma conexão Wi-Fi), um canal cabeado (por exemplo, DSL, modem de cabo, etc.), ou qualquer combinação de ambos que seja adequado para acessar dados de vídeo codificados armazenados no dispositivo de armazenagem 26 (Por exemplo, um servidor de arquivo). A transmissão de dados de vídeo codificados a partir do dispositivo de armazenagem 26 pode ser uma transmissão streaming, uma transmissão de download ou uma combinação de ambas.
[0040] As técnicas dessa revelação não são limitadas a aplicações ou cenários sem fio. As técnicas dessa revelação podem ser aplicadas à codificação de vídeo em suporte de qualquer de uma variedade de aplicativos de multimídia, como broadcasts de televisão pelo ar, transmissões de televisão a cabo, transmissões de televisão por satélite, transmissões de vídeo streaming, por exemplo via internet, codificação de dados de vídeo para armazenagem em uma mídia de armazenagem de dados, decodificação de dados de vídeo codificados armazenados em uma mídia de armazenagem 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 simples ou duplex para suportar aplicativos como streaming de vídeo, reprodução de vídeo, broadcasting de vídeo e/ou telefonia de vídeo.
[0041] O sistema de codificação de vídeo 10 ilustrado na figura 1 é meramente um exemplo e as técnicas dessa revelação podem se aplicar a cenários de codificação de vídeo (por exemplo, codificação de vídeo ou decodificação de vídeo) que não incluem necessariamente qualquer comunicação de dados entre os dispositivos de codificação e decodificação. Em outros exemplos, dados são recuperados de uma memória local, formados em fluxo através de uma rede ou similar, um dispositivo de codificação de vídeo pode codificar e armazenar dados para a memória, e/ou um dispositivo de decodificação de vídeo pode recuperar e decodificar dados da memória. Em muitos exemplos, a codificação e decodificação é executada por dispositivos que não se comunicam entre si, porém simplesmente codificam dados para a memória e/ou recuperam e decodificam dados a partir da memória.
[0042] No exemplo da figura 1, o dispositivo de fonte 12 inclui uma fonte de vídeo 18, um codificador de vídeo 20 e uma interface de saída 22. Em alguns exemplos, a interface de saída 22 pode incluir um modulador/demodulador (modem) e/ou um transmissor. A fonte de vídeo 18 pode incluir um dispositivo de captura de vídeo, por exemplo, uma câmera de vídeo, um arquivo de vídeo contendo dados de vídeo anteriormente capturados, uma interface de feed de vídeo para receber dados de vídeo a partir de um provedor de conteúdo de vídeo, e/ou um sistema gráfico de computador para gerar dados de vídeo ou uma combinação de tais fontes de dados de vídeo.
[0043] O codificador de vídeo 20 pode ser configurado para codificar dados de vídeo a partir do dispositivo de fonte 18. Por exemplo, o codificador de vídeo 20 pode ser configurado para codificar dados de vídeo capturados, pré-capturados ou gerados por computador (ou quaisquer outros dados). Em alguns exemplos, o dispositivo de fonte 12 transmite diretamente os dados de vídeo codificados para o dispositivo de destino 14 através da interface de saída 22. Em outros exemplos, os dados de vídeo codificados também podem ser armazenados sobre uma mídia de armazenagem (por exemplo, dispositivo de armazenagem 26) para acesso posterior pelo dispositivo de destino 14 para decodificação e/ou reprodução.
[0044] No exemplo da figura 1, o dispositivo de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30 e um dispositivo de display 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 dispositivo de armazenagem 26 podem incluir uma variedade de elementos de sintaxe gerados pelo codificador de vídeo 20 para uso por um decodificador de vídeo, como 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 uma mídia de comunicação, armazenados em uma mídia de armazenagem ou armazenados em um servidor de arquivo.
[0045] O dispositivo de display 32 pode ser integrado com ou pode ser externo ao dispositivo de destino 14. Em alguns exemplos, o dispositivo de destino 14 pode incluir um dispositivo de display integrado e também ser configurado para fazer interface com um dispositivo de display externo. Em outros exemplos, o dispositivo de destino 14 pode ser um dispositivo de display. Em geral, o dispositivo de display 32 exibe dados de vídeo decodificados. O dispositivo de display 32 pode compreender qualquer de uma variedade de dispositivos de display como um display de cristal líquido (LCD), um display de plasma, um display de diodo emissor de luz orgânica (OLED) ou outro tipo de dispositivo de display.
[0046] As técnicas dessa revelação podem utilizar terminologia HEVC ou outra terminologia de padrão de vídeo para facilidade de explicação. Entretanto, entende-se que as técnicas dessa revelação não são limitadas a HEVC ou outros padrões de vídeo. As técnicas dessa revelação podem ser implementadas em padrões sucessores a HEVC e suas extensões bem como outros padrões de vídeo, quer passados, presentes ou futuros.
[0047] Embora não mostrado na figura 1, em alguns aspectos, o codificador de vídeo 20 e decodificador de vídeo 30 pode individualmente ser integrado com um codificador e decodificador de áudio, e pode incluir unidades de MUX-DEMUX apropriadas, ou outro hardware e software, para tratar da codificação tanto de áudio como de vídeo em um fluxo de dados comum ou fluxos de dados separados. Se aplicável, em alguns exemplos, unidades de MUX-DEMUX podem se conformar ao protocolo de multiplexor ITU H.223, ou outros protocolos como o protocolo de datagrama de usuário (UDP).
[0048] Essa revelação pode se referir em geral ao codificador de vídeo 20 “sinalizando” ou transmitindo” certas informações para outro dispositivo, como decodificador de vídeo 30. O termo “sinalizando” ou “transmitindo” pode se referir em geral à comunicação de elementos de sintaxe e/ou outros dados usados para decodificar os dados de vídeo comprimidos. Tal comunicação pode ocorrer em tempo real ou quase real. Alternativamente, tal comunicação ocorrer durante um espaço de tempo, como poderia ocorrer ao armazenar elementos de sintaxe em uma mídia de armazenagem legível em computador em um fluxo e bits codificado no tempo de codificação, que então pode ser recuperado por um dispositivo de decodificação a qualquer momento após ser armazenado nessa mídia. Desse modo, embora o decodificador de vídeo 30 possa ser mencionado como “recebendo” certas informações, o recebimento de informações não ocorre necessariamente em tempo real ou quase real e pode ser recuperado de uma mídia em algum tempo após armazenagem.
[0049] O codificador de vídeo 20 e decodificador de vídeo 30 pode individualmente ser implementado como qualquer de uma variedade de conjunto de circuitos adequado, como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados de aplicação específica (ASICs), disposições de porta programáveis em campo (FPGAs), lógica discreta, hardware ou qualquer combinação dos mesmos. Se as técnicas forem implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em uma mídia de armazenagem legível em computador não transitória, adequada e pode executar as instruções em hardware usando um ou mais processadores para executar as técnicas dessa revelação. Qualquer dos acima (incluindo hardware, software, uma combinação de hardware e software, etc.) pode ser considerado como um ou mais processadores. Cada do codificador de vídeo 20 e decodificador de vídeo 30 pode ser incluído em um ou mais codificadores ou decodificadores, qualquer um dos quais pode ser integrado como parte de um codificador/decodificador combinado (CODEC) em um dispositivo respectivo.
[0050] Em HEVC e outros padrões de codificação de vídeo, uma sequência de vídeo tipicamente inclui uma série de imagens. Imagens podem ser também referenciadas como “quadros”. Em alguns exemplos, o codificador de vídeo 20 pode ser configurado para usar uma contagem de ordem de imagem (POC) para identificar uma ordem de display de uma imagem em relação a uma pluralidade de imagens (por exemplo, uma sequência de imagens. Em tais exemplos, o codificador de vídeo 20 pode ser configurado para atribuir um valor POC à imagem. Em um exemplo onde múltiplas sequências de vídeo codificadas estão persentes em um fluxo de bits, imagens com o mesmo valor POC podem estar próximas entre si em termos de ordem de decodificação. Valores POC de imagens podem ser usados para construção de lista de imagem de referência, derivação de um conjunto de imagem de referência como, por exemplo, em HEVC e escalonamento de vetor de movimento.
[0051] Em alguns exemplos, uma imagem pode incluir três conjuntos de amostra. Em tais exemplos, uma imagem pode incluir três conjuntos de amostra indicados SL, SCb e SCr. Em tais exemplos, SL é um conjunto bidimensional (por exemplo, um bloco) de amostras luma, Scb é um conjunto bidimensional (por exemplo, um bloco de amostras de crominância Cb, e SCr é um conjunto bidirecional (por exemplo, um bloco) de amostras de crominância Cr. Amostras de crominância podem ser também mencionadas aqui como amostras de “croma”. Em outras instâncias, uma imagem pode ser monocromo e pode somente incluir um conjunto de amostras de luma.
[0052] Para gerar uma representação codificada de uma imagem, o codificador de vídeo 20 pode gerar um conjunto de unidades de árvore de codificação (CTUs). O conjunto das CTUs pode incluir um bloco de árvore de codificação de amostras de luma, dois blocos de árvore de codificação correspondentes de amostras de croma, e estruturas de sintaxe usadas para codificar as amostras dos blocos de árvore de codificação. Um bloco de árvore de codificação pode ser um bloco NxN de amostras. Uma CTU pode ser também mencionada como um “bloco de árvore” ou uma “unidade de codificação maior” (LCU). As CTUs de HEVC podem ser amplamente análogas aos macroblocos de outros padrões, como H.264/AVC. Entretanto, uma CTU não é necessariamente limitada a um tamanho específico e pode incluir uma ou mais unidades de codificação (CUs). Um quadro ou imagem de vídeo pode ser dividido em uma ou mais fatias. Uma fatia pode incluir um número inteiro de CTUs ordenadas consecutivamente na varredura de rasterização. Uma fatia codificada pode compreender um cabeçalho de fatia e dados de fatia. O cabeçalho de fatia de uma fatia pode ser uma estrutura de sintaxe que inclui elementos de sintaxe que fornecem informação sobre a fatia. Os dados de fatia podem incluir CTUs codificadas da fatia.
[0053] 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 pode corresponder a um tamanho do nó de codificação e pode ser de formato quadrado. O tamanho da CU pode variar de, por exemplo, 8x8pixels até o tamanho do bloco de árvore com um máximo de 64x64 pixels ou maior. Cada CU pode conter uma ou mais Pus e uma ou mais TUs. Dados de sintaxe associados a uma CU podem descrever, por exemplo, divisão da CU em uma ou mais Pus. Modos de divisão podem diferir entre se a CPU é codificada no modo direto ou de pular, codificada no modo intra-predição ou codificada no modo inter-predição. Pus podem ser divididas no formato quadrado ou não quadrado. Dados de sintaxe associados a uma CU podem também descrever, por exemplo, divisão da CU em uma ou mais TUs de acordo com um quadtree. Uma TU pode ser de formato quadrado ou não quadrado.
[0054] Em geral, uma PU pode incluir dados relacionados ao processo de predição. Por exemplo, quando uma PU é codificada no intra-modo, a PU pode incluir dados descrevendo um modo intra-predição para a PU. Como outro exemplo, quando uma PU é codificada inter-modo, a PU pode incluir dados definindo um vetor de movimento para a PU. Os dados definindo 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 (por exemplo, uma precisão de pixel de um quarto ou precisão de pixel de um oitavo), uma imagem de referência na qual o vetor de movimento aponta, e/ou uma lista de imagem de referência (por exemplo, Lista 0, Lista 1 ou Lista C) para o vetor de movimento.
[0055] Em geral, uma TU pode ser usada para processos de transformada e quantização. Uma CU dada tendo uma ou mais Pus também pode incluir uma ou mais unidades de transformada (TUs). Após predição, o codificador de vídeo 20 pode calcular valores residuais correspondendo à PU. Os valores residuais podem compreender valores de diferença de pixel que podem ser transformados em coeficientes de transformada, quantizados e varridos usando as TUs para produzir coeficientes de transformada serializada para codificação por entropia.
[0056] Essa revelação pode usar o termo “unidade de vídeo”, “bloco de vídeo”, “bloco de codificação” ou “bloco” para se referir a um ou mais blocos de amostra e estruturas de sintaxe usadas para codificar amostras de um ou mais blocos de amostras. Tipos de exemplos de unidades de vídeo ou blocos podem incluir unidades de árvore de codificação (CTUs), unidades de codificação (CUs), unidades de predição (PUs), sub-PUs, unidades de transformada (TUs), macroblocos (MBs), divisões de macrobloco, sub-blocos e etc. Em alguns exemplos, um sub-bloco pode ser um sub-bloco de uma CTU, um sub-bloco de uma CU, um sub-bloco de uma PU, um sub-bloco de uma TU, um sub-bloco de um macrobloco, ou um sub-bloco de um sub- bloco. Por exemplo, um sub-bloco pode conter um grupo de sub-PUs. Em tais exemplos, um sub-bloco pode ser menor que uma CTU, CU, PU, TU ou macrobloco. Em alguns exemplos, um sub-PU pode se referir a um bloco que é menor que uma PU. Em tal exemplo, se uma PU for 8x4, então, uma sub-PU pode ser 4x4.
[0057] Em alguns exemplos, um conjunto de informações de movimento pode estar disponível para cada bloco de dados de vídeo. O conjunto de informação de movimento pode incluir informação de movimento para direções de predição para frente e para trás. 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. Direções de predição para frente e para trás podem ser uma de duas direções de predição de um modo de predição unidirecional. Os termos “para frente” e “para trás” não tem necessariamente um significado de geometria, ao invés os mesmos correspondem a, por exemplo, lista de imagem de referência 0 (RefPicList0) e lista de imagem de referência 1 (RefPicList1) de uma imagem atual. Quando somente uma lista de imagem de referência está disponível para uma imagem ou fatia, somente RefPicList0 pode estar disponível e a informação de movimento de cada bloco da imagem ou fatia pode ser para frente.
[0058] Para cada direção de predição (por exemplo, para frente ou para trás) a informação de movimento pode conter uma direção de predição, um índice de referência e um vetor de movimento. Em alguns exemplos, para simplicidade, um próprio vetor de movimento pode ser mencionado em um modo que é assumido que tenha um índice de referência associado. Um índice de referência é usado para identificar uma imagem de referência na lista de imagem de referência atual (por exemplo, RefPicList0 ou RefPicList1). Um vetor de movimento pode ter um componente horizontal e um vertical.
[0059] Blocos de vídeo descritos aqui podem ter tamanhos fixos ou variáveis, e podem diferir em tamanho de acordo com um 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 executar intra-predição para PUs tendo tamanhos de 2Nx2N ou NxN, e pode ser configurado para executar inter- predição para PUs tendo tamanhos de 2Nx2N, 2NxN, Nx2N, ou NxN. Em outros exemplos, os tamanhos disponíveis de uma PU podem ser iguais ou diferentes.
[0060] Nessa revelação, “NxN” e “N por N” podem ser usados de modo intercambiável para se referir às dimensões de pixel de um bloco de vídeo em termos de dimensões vertical e horizontal, por exemplo, 16x16 pixels ou 16 por 16 pixels. Em geral, um bloco 16x16 terá 16 pixels em uma direção vertical (y = 16) e 16 pixels em uma direção horizontal (x = 16). De modo semelhante, um bloco NxN tem em geral N pixels em uma direção vertical e N pixels em uma direção horizontal, onde N representa um valor inteiro positivo. Os pixels em um bloco podem ser dispostos em fileiras e colunas. Além disso, os blocos não precisam necessariamente ter o mesmo número de pixels na direção horizontal que na direção vertical. Por exemplo, blocos podem compreender NxM pixels, onde M é ou não é igual a N e onde M é um valor inteiro positivo.
[0061] Em alguns exemplos, a estrutura de uma CU revelada na presente invenção pode se referir à estrutura de uma CU como exposto em um padrão de codificação de vídeo, como H.265/HEVC. Em HEVC, a maior unidade de codificação em uma fatia é chamada um bloco de árvore de codificação (CTB). Um CTB contém um quad-tree, cujos nós são unidades de codificação. O tamanho de um CTB varia de 16x16 a 64x64 no perfil principal de HEVC; e em alguns exemplos, tamanhos de 8x8 CTB são também suportados. Uma CU pode ser do mesmo tamanho de um CTB e tão pequeno quanto 8x8. Cada CU é codificada com um modo. Quando uma CU é codificada em modo inter predição, a CU pode ser adicionalmente dividida em 2 ou 4 unidades de predição (PUs) ou se tornar somente uma PU (por exemplo, PART_2Nx2N mostrada na figura 2) quando a divisão adicional não se aplica. Quando duas PUs estão presentes em uma CU, as mesmas podem ser retângulos de metade de tamanho (por exemplo, PART_2NxN ou PARTE Nx2N mostrado na figura 2) ou dois retângulos com um tamanho de um quarto e o outro com tamanho de três quartos (por exemplo, PART_2NxnU, PART_2NxnD, PART_2NxN, PART_Nx2N, PART_NxN, PART_2NxnU, PART_2NxnD, PART_nLx2N e PART_nRx2N. quando a CU é inter codificada, um conjunto de informações de movimento está presente para cada PU. Além disso, cada PU é codificada com um modo inter-predição exclusivo para derivar o conjunto de informações de movimento.
[0062] Com referência a macroblocos, por exemplo, em ITU-T H.264/AVC ou outros padrões, cada inter macrobloco (MB) pode ser dividido em quatro modos diferentes de acordo com um exemplo: uma divisão de 16x16 MB, duas divisões de 16x8 MB, duas divisões de 8x16 MB, ou quatro divisões de 8x8 MB. Divisões de MB diferentes em um MB podem ter valores de índice de referência diferentes para cada direção (RefPicList0 ou RefPicList1). Em um exemplo onde um MB não é dividido em quatro divisões de 8x8 MB, o MB pode ter somente um vetor de movimento para cada divisão de MB em cada direção. Em um exemplo onde um MB é dividido em quatro divisões de 8x8 MB, cada divisão de 8x8 MB pode ser adicionalmente dividida em sub-blocos, cada um dos quais pode ter um vetor de movimento diferente em cada direção. Em tal exemplo, a divisão de 8x8 MB pode ser dividida em um ou mais sub-blocos quatro modos diferentes: um sub-bloco 8x8, dois sub-blocos 8x4, dois sub-blocos 4x8, ou quatro sub-blocos 4x4. Cada sub-bloco pode ter um vetor de movimento diferente em cada direção. Em tal exemplo, cada vetor de movimento pode estar presente em um nível igual a mais alto que um sub-bloco.
[0063] Em alguns exemplos, a estrutura de um MB revelado na presente invenção pode se referir à estrutura de um MB como exposto em um padrão de codificação de vídeo, como ITU-T H.264/AVC. Em tais exemplos, o codificador de vídeo 20 e decodificador de vídeo 30 podem ser configurados para codificar dados de vídeo usando modo direto temporal no MB ou nível de divisão de MB para modo direto ou de pular em fatias B. para cada divisão de MB, os vetores de movimento do bloco co-localizado com a divisão de MB atual na RefPicList1[0] do bloco atual podem ser usados para derivar os vetores de movimento. Cada vetor de movimento no bloco co-localizado pode ser escalonado com base em distâncias POC. H.264/AVC também inclui um modo direto espacial, que pode ser usado para prever informações de movimento a partir dos vizinhos espaciais.
[0064] Com referência à figura 1, para gerar uma CTU codificada, o codificador de vídeo 20 pode recursivamente executar divisão de quad-tree nos blocos de árvore de codificação de uma CTU para dividir os blocos de árvore de codificação em blocos de codificação, consequentemente o nome “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 de luma e dois blocos de codificação correspondentes de amostras de croma de uma imagem que tem um conjunto de amostras de luma, um conjunto de amostras de Cb e um conjunto de amostras de Cr, e estruturas de sintaxe usadas para codificar as amostras dos blocos de codificação. O codificador de vídeo 20 pode dividir um bloco de codificação de uma CU em 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 de luma, duas correspondendo a blocos de predição de amostras de croma de uma imagem, e estruturas de sintaxe usadas para prever as amostras de bloco de predição. O codificador de vídeo 20 pode gerar luma preditiva, Cb, e blocos Cr para blocos de predição de luma, Cb e Cr de cada PU da CU.
[0065] O codificador de vídeo 20 pode usar intra predição ou Inter predição para gerar os blocos preditivos para uma PU. Se o codificador de vídeo 20 usar intra predição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar os blocos preditivos da PU com base em amostras decodificadas da imagem associada a PU.
[0066] Se o codificador de vídeo 20 usar inter predição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar os blocos preditivos da PU com base em amostras decodificadas de uma ou mais imagens diferentes da imagem associada a PU. O codificador de vídeo 20 pode usar uni-predição ou bi-predição para gerar os blocos preditivos de uma PU. Quando o codificador de vídeo 20 usa uni-predição para gerar os blocos preditivos para uma PU, a PU pode ter um vetor de movimento único (MV). Quando o codificador de vídeo 20 usa bi- predição para gerar os blocos preditivos para uma PU, a PU pode ter dois MVs.
[0067] Após o codificador de vídeo 20 gerar blocos preditivos (por exemplo, blocos luma, Cb e Cr preditivos) para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar blocos residuais para a CU. Cada amostra em um bloco residual da CU pode indicar uma diferença entre uma amostra em um bloco preditivo de uma PU da CU e uma amostra correspondente em um bloco de codificação da CU. Por exemplo, o codificador de vídeo 20 pode gerar um bloco residual de luma para a CU. Cada amostra no bloco residual de luma da CU indica uma diferença entre uma amostra de luma em um dos blocos de luma preditivo da CU e uma amostra correspondente no bloco de codificação de luma original da CU. Além disso, o codificador de vídeo 20 pode gerar um bloco residual Cb para a CU. Cada amostra no bloco residual de Cb da CU pode indicar uma diferença entre uma amostra de Cb em um dos blocos de Cb preditivo da CU e uma amostra correspondente no bloco de codificação de Cb original a CU. O codificador de vídeo 20 pode gerar também um bloco residual de Cr para a CU. Cada amostra no bloco residual de Cr da CU pode indicar uma diferença entre uma amostra de Cr em um dos blocos de Cr preditivo da CU e uma amostra correspondente no bloco de codificação de Cr original da CU.
[0068] O codificador de vídeo 20 pode usar divisão quad-tree para decompor os blocos residuais (por exemplo, blocos residuais de luma, Cb e Cr) de uma CU em um ou mais blocos de transformada (por exemplo, blocos de transformada de luma, Cb e Cr). 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 de croma, e estruturas de sintaxe usadas para transformar as amostras de bloco de transformada. Desse modo, cada TU de uma CU pode ser associada a um bloco de transformada de luma, um bloco de transformada de Cb, e um bloco de transformada de Cr. O bloco de transformada de luma associado a TU pode ser um sub=bloco do bloco residual de luma da CU. O bloco de transformada de Cb pode ser um sub-bloco do bloco residual de Cb da CU. O bloco de transformada de Cr pode ser um sub- bloco do bloco residual de Cr da CU.
[0069] O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada para gerar um bloco de coeficiente para uma TU. Um bloco de coeficiente pode ser um conjunto 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 em um bloco de transformada de luma de uma TU para gerar um bloco de coeficiente de luma para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de Cb de uma TU para gerar um bloco de coeficiente de Cb para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas em um bloco de transformada de Cr de uma Tu para gerar um bloco de coeficiente de Cr para a TU.
[0070] Em alguns exemplos, após codificação intra-preditiva ou inter-preditiva usando PUs de uma CU, o codificador de vídeo 20 pode calcular dados residuais para as TUs da CU. As PUs podem compreender dados de pixel no domínio espacial (também mencionado como o domínio de pixel) e as TUs podem compreender coeficientes no domínio de transformada após aplicação de uma transformada, por exemplo, uma transformada de cosseno discreta (DCT), uma transformada de inteiro, uma transformada de ondinha, ou uma transformada conceptualmente similar em dados de vídeo residuais. Os dados residuais podem corresponder a diferenças de pixel entre pixels da imagem não codificada e valores de predição correspondendo às PUs. O codificador de vídeo 20 pode formar as TUs incluindo os dados residuais para a CU, e então transformar as TUs para produzir coeficientes de transformada para a CU.
[0071] Após gerar um bloco de coeficiente (por exemplo, um bloco de coeficiente de luma, um bloco de coeficiente de Cb ou um bloco de coeficiente Cr), o codificador de vídeo 20 pode quantizar os coeficientes no bloco. A quantização se refere em geral a um processo no qual coeficientes de transformada são quantizados para reduzir possivelmente a quantidade de dados usados para representar os coeficientes de transformada, fornecendo compressão adicional. Após o codificador de vídeo 20 quantizar um bloco de coeficiente, o codificador de vídeo 20 pode ser configurado para codificar por entropia elementos de sintaxe indicando os coeficientes de transformada quantizados. Por exemplo, o codificador de vídeo 20 pode executar Codificação Aritmética binária adaptável ao contexto (CABAC) nos elementos de sintaxe indicando os coeficientes de transformada quantizada.
[0072] Em alguns exemplos, o codificador de vídeo 20 pode utilizar uma ordem de varredura predefinida (por exemplo, horizontal, vertical ou qualquer outra ordem de varredura) para varrer os coeficientes de transformada quantizada para produzir um vetor serializado que pode ser codificado por entropia. Em outros exemplos, o codificador de vídeo 20 pode executar uma varredura adaptável. Após varrer os coeficientes de transformada quantizada para formar um vetor unidimensional, o codificador de vídeo 20 pode codificar por entropia o vetor unidimensional, por exemplo, de acordo com codificação de comprimento variável adaptável a contexto (CAVLC), codificação aritmética binária adaptável a contexto (CABAC), codificação aritmética binária adaptável a contexto baseada em sintaxe (SBAC), codificação por Entropia de divisão de intervalo de Probabilidade (PIPE) ou outra metodologia de codificação por entropia. O codificador de vídeo 20 pode também codificar por entropia elementos de sintaxe associados aos dados de vídeo codificados para uso por decodificador de vídeo 30 na decodificação dos dados de vídeo.
[0073] Para executar CABAC, o codificador de vídeo 20 pode atribuir um contexto em um modelo de contexto a um símbolo a ser transmitido. O contexto pode se relacionar a, por exemplo, se valores vizinhos do símbolo são não zero ou não. Para executar CAVLC, o codificador de vídeo 20 pode selecionar um código de comprimento variável para um símbolo a ser transmitido. Palavras de código em VLC podem ser construídas de modo que códigos relativamente mais curtos correspondem a símbolos mais prováveis, enquanto códigos mais longo correspondem a símbolos menos prováveis. Desse modo, o uso de VLC pode obter um pouco de economia, por exemplo, usando palavras-código de comprimento igual para cada símbolo a ser transmitido. A determinação de probabilidade ser baseada em um contexto atribuído ao símbolo.
[0074] O decodificador de vídeo 30 pode receber um fluxo de bits gerado pelo codificador de vídeo 20. Além disso, o decodificador de vídeo 30 pode analisar o fluxo de bits para decodificar elementos de sintaxe a partir do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base pelo menos em parte nos elementos de sintaxe decodificados a partir do fluxo de bits. O processo para reconstruir os dados de vídeo pode ser em geral recíproco ao processo executado por codificador de vídeo 20. Por exemplo, o decodificador de vídeo 30 pode usar MVs de PUs para determinar blocos preditivos para as PUs inter-preditas de uma CU atual. De modo semelhante, o decodificador de vídeo 30 pode gerar blocos intra-preditos de uma CU atual. De modo semelhante, o decodificador de vídeo 30 pode gerar blocos intra-preditos para PU’s de uma CU atual. Além disso, o decodificador de vídeo 30 pode quantizar inverso blocos de coeficiente de transformada associados as TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de codificação da CU atual por adicionar as amostras dos blocos preditivos para PUs da CU atual a valores residuais correspondentes obtidos de quantização inversa e transformação inversa dos blocos de transformada das TUs da CU atual. Por reconstruir os blocos de codificação para cada CU de uma imagem, o decodificador de vídeo 30 pode reconstruir a imagem.
[0075] O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para operar de acordo com as técnicas descritas nessa revelação. Em geral, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma ou mais técnicas descritas aqui em qualquer combinação.
[0076] Certos aspectos de design referentes a divisão de bloco e predição de movimento com relação a AVC e HEVC são introduzidos ou de outro modo descritos aqui porque, como exposto aqui, uma ou mais técnicas dessa revelação podem ser usadas com ou de outro modo aperfeiçoar um padrão de vídeo (por exemplo, AVC e/ou HEVC), extensão(ões) do mesmo, padrões de vídeo em desenvolvimento, ou padrões de vídeo futuros, e similares.
[0077] Aspectos de predição de movimento em HEVC serão discutidos agora. No padrão HEVC, há dois modos de inter predição disponíveis para uma PU: modo de fusão (pular é considerado como um caso especial de fusão) e predição de vetor de movimento avançado (AMVP). No modo AMVP ou fusão, uma lista de candidato de vetor de movimento (MV) é mantida para múltiplos preditores de vetor de movimento. O(s) vetor(es) de movimento, bem como índices de referência em modo de fusão, da PU atual são gerados por tomar um candidato a partir da lista de candidatos MV. A lista de candidatos MV contém até 5 candidatos para o modo de fusão e somente dois candidatos para o modo AMVP. Um candidato de fuso pode conter um conjunto de informação de movimento, por exemplo, vetores de movimento correspondendo a ambas as listas de imagem de referência (lista 0 e lista 1) e os índices de referência. Se um candidato de fusão for identificado por um índice de fusão, as imagens de referência são usadas para a predição dos blocos atuais, bem como os vetores de movimento associados são determinados. Entretanto, sob o modo AMVP para cada direção de predição em potencial de qualquer lista 0 ou lista 1, um índice de referência necessita ser explicitamente sinalizado, juntamente com um índice MVP à lista de candidato MV uma vez que o candidato AMVP contém somente um vetor de movimento. No modo AMVP, os vetores de movimento preditos podem ser adicionalmente refinados. Como foi descrito acima, um candidato de fusão em HEVC corresponde a um conjunto completo de informações de movimento enquanto um candidato AMVP em HEVC contém somente um vetor de movimento para uma direção de predição específica e índice de referência. Os candidatos para ambos o modo de fusão e modo AMVP são derivados similarmente dos mesmos blocos vizinhos espacial e temporal.
[0078] As figuras 3A e 3B mostram candidatos MV vizinhos espaciais para modos de fusão e AMVP, respectivamente. Candidatos de MV espaciais são derivados dos blocos vizinhos mostrados nas figuras 3A e 3B para uma PU específica (PU0 no exemplo mostrado). Como será descrito em mais detalhe abaixo, a geração dos candidatos a partir dos blocos vizinhos difere para o modo de fusão e modo AMVP.
[0079] No modo de fusão, até quatro candidatos MV espaciais podem ser derivados com a ordem mostrada na figura 3A: esquerda (0), acima 91), acima direita (2), abaixo esquerda (3) e acima esquerda (4). No modo AMVP, os blocos vizinhos são divididos em dois grupos: grupo esquerdo consistindo em blocos 0 e 1, e o grupo acima consistindo nos blocos 2, 3 e 4 como mostrado na figura 3B. para cada grupo, o candidato potencial em um bloco vizinho se referindo à mesma imagem de referência como aquela indicada pelo índice de referência sinalizada tem a prioridade mais alta a ser escolhida para formar um candidato final do grupo. É possível que todos os blocos vizinhos não contenham um vetor de movimento apontando para a mesma imagem de referência. Portanto, se tal candidato não puder ser encontrado, o primeiro candidato disponível será escalonado para formar o candidato final, desse modo as diferenças de distância temporal podem ser compensadas.
[0080] Um candidato de preditor de vetor de movimento temporal (TMVP), se habilitado e disponível, é adicionado na lista de candidatos MV após os candidatos de vetor de movimento espacial. O processo de derivação de vetor de movimento para candidato TMVP é igual para ambos os modos de fusão e AMVP; entretanto, o índice de referência alvo para o candidato TMVP no modo de fusão é sempre definido em 0. A localização de bloco primário para a derivação de candidato TMVP é o bloco direito inferior fora da PU colocada (mostrado como bloco “T” na figura 4A) para compensar a polarização para os blocos acima e esquerdo usados para gerar candidatos vizinhos espaciais. Entretanto, se aquele bloco for localizado fora da fileira de CTB atual ou informação de movimento não estiver disponível, o bloco é substituído com um bloco central da PU.
[0081] Como mostrado na figura 4B, o vetor de movimento para o candidato TMVP é derivado da PU co- localizada da imagem co-localizada, indicada no nível de fatia. Similar ao modo direto temporal em AVC, um vetor de movimento do candidato TMVP pode ter escalonamento de vetor de movimento executado para compensar as diferenças de distância.
[0082] Outros aspectos de predição de movimento em HEVC serão descritos agora. Tal aspecto é escalonamento de vetor de movimento. É assumido que o valor do vetor de movimento é proporcional à distância de imagens no tempo de apresentação. Um vetor de movimento associa duas imagens, a imagem de referência e a imagem contendo o vetor de movimento (a saber, a imagem que contém). Quando um vetor de movimento é utilizado para prever o outro vetor de movimento, a distância da imagem que contém e a imagem de referência é calculada com base nos valores de Contagem de ordem de Imagem (POC).
[0083] Para que um vetor de movimento seja predito, tanto sua imagem de contenção associada e imagem de referência pode ser diferente. Portanto, uma nova distância (com base em POC) é calculada. E o vetor de movimento é escalonado com base nessas duas distâncias POC. Para um candidato vizinho espacial, as imagens de contenção para os dois vetores de movimento são iguais, enquanto as imagens de referência são diferentes. Em HEVC, escalonamento de vetor de movimento se aplica tanto a TMVP como AMVP para candidatos vizinhos espacial e temporal.
[0084] Outro aspecto de predição de movimento em HEVC é geração de candidato de vetor de movimento artificial. Se uma lista de candidatos de vetor de movimento não for completa, candidatos de vetor de movimento artificial são gerados e inseridos no final da lista até que tenha todos os candidatos. No modo de fusão, há dois tipos de candidatos MV artificiais: candidato combinado derivado somente para fatias-B e candidatos zero usados somente para AMVP se o primeiro tipo não fornecer candidatos artificiais suficientes. Para cada par de candidatos que já estão na lista de candidatos e têm informação de movimento necessária, candidatos de vetor de movimento combinado bidirecional são derivados por uma combinação do vetor de movimento do primeiro candidato se referindo a uma lista de imagens na lista 0 e vetor de movimento de um segundo candidato se referindo a uma imagem na lista 1.
[0085] Outro aspecto de predição de movimento em HEVC é um processo de desbaste para inserção de candidato. Candidatos a partir de blocos diferentes podem acontecer de ser iguais, o que diminui a eficiência de um modo de fusão ou lista de candidatos de modo AMVP. Um processo de desbaste compara um candidato em relação aos outros na lista de candidatos atual para evitar inserção de candidatos idênticos.
[0086] O conceito geral de compensação de movimento de bloco sobreposto (OBMC) será introduzido agora. OBMC foi considerado em padrões de vídeo anteriores. A compensação de movimento de bloco sobreposto (OBMC) foi proposta no desenvolvimento de H.263 (Codificação de vídeo para Comunicação em velocidade baixa de bits, Documento Rec. H.263, ITU-T, Abril de 1995). OBMC pode ser realizada no bloco 8x8 atual de um macrobloco 16x16 atual e vetores de movimento de dois blocos 8x8 vizinhos conectados podem ser usados para o bloco 8x8 atual como mostrado na figura 5. Por exemplo, para o primeiro bloco 8x8 (por exemplo, o bloco identificado com o numeral “1” na figura 5) em um macrobloco atual, além de um bloco de predição gerado usando seu próprio vetor de movimento, os vetores de movimento vizinhos acima e abaixo são também aplicados para gerar dois blocos de predição adicionais. Desse modo, cada pixel no bloco 8x8 atual tem três valores de predição, e uma média ponderada desses três valores de predição é usada como o valor de predição final para cada pixel no bloco 8x8 atual. Como outro exemplo, para o segundo bloco 8x8 (por exemplo, o bloco identificado com o numeral “2” na figura 5) em um macrobloco atual, além de um bloco de predição gerado usando seu próprio vetor de movimento, o vetor de movimento vizinho acima e da direita também pode ser aplicado para gerar dois blocos de predição adicionais. Desse modo, cada pixel no bloco 8x8 atual tem três valores de perdição, e uma média ponderada dessas três predições é usada como o valor de predição final para cada pixel no bloco 8x8 atual.
[0087] A figura 5 mostra um exemplo de como OBMC foi implementada em H.263. quando um bloco vizinho não é codificado como intra (isto é, o bloco vizinho não tem um vetor de movimento disponível), o vetor de movimento do bloco 8x8 atual é usado como o vetor de movimento vizinho. Com referência agora ao terceiro e quarto blocos 8x8 (por exemplo, os blocos respectivamente identificados com os numerais “3” e “4” na figura 5) do macrobloco atual, o bloco vizinho abaixo é sempre não usado (isto é, considerado como não disponível). Em outras palavras, para o macrobloco atual, nenhuma informação de movimento a partir de macroblocos abaixo do macrobloco atual seria usada para reconstruir os pixels do macrobloco atual durante o OBMC. Ao invés, para o bloco 3, informação de movimento a partir de um vizinho esquerdo pode ser usada para OBMC, e para o bloco 4, informação de movimento a partir de um vizinho da direita pode ser usado para OBMC, porém blocos abaixo dos blocos 3 e 4 são assumidos como sendo não codificados, e não são usados para OBMC.
[0088] OBMC foi proposto para HEVC. Em HEVC, OBMC foi também proposto para suavizar o limite de PU. Um exemplo do método proposto de OBMC em HEVC é mostrado nas figuras 6A e 6B. nas figuras 6A e 6B, OBMC baseado em PU é ilustrado usando uma região branca para representar uma primeira PU (por exemplo, PU0) e uma região hachurada para representar uma segunda PU (por exemplo, PU1). Como proposto para HEVC, quando uma CU contém duas ou mais PUs, fileiras ou colunas próximo ao limite de PU são suavizadas por OBMC. Para pixels marcados com “A” ou “B” na primeira PU e a segunda PU, dois valores de predição são gerados por aplicar respectivamente vetores de movimento da primeira PU (PU0) e segunda PU (PU1). Como proposto para HEVC, uma média ponderada dos dois valores de predição seria usada como a perdição final.
[0089] Em HEVC, cada PU contém somente um conjunto de informações de movimento. Entretanto, quando derivação/predição de movimento baseada em sub-PU se aplica, uma PU pode ser dividida em sub_PUs, onde cada sub- PU contém um conjunto de informações de movimento. Quando uma PU é dividida em múltiplos sub-PUs, cada sub-PU pode ser compensado em movimento separadamente. Por exemplo, um processo de sub-PU pode ser aplicável a predição de vetor de movimento temporal e é chamada Predição de Vetor de Movimento temporal avançado (ATMVP).
[0090] Aspectos de sub-blocos serão discutidos agora. Em processos pós filtração, como desbloqueio, processos de decodificação pode se aplicar em um modo que não segue completamente a estrutura de PU, porém os tamanhos dos blocos mínimos a serem processados. Tais blocos de processamento mínimo são chamados sub-blocos. Um sub-bloco pode ser com formato quadrado ou não quadrado. Um sub-bloco pertence tipicamente a uma PU e, portanto, o tamanho de sub-bloco é menor ou igual ao tamanho da PU menor.
[0091] Um exemplo é ilustrado nas figuras 7A- 7C para mostrar a relação entre sub-PU e sub-bloco. Como pode ser visto, o tamanho de sub-bloco pode ser menor que (figura 7A0, igual a (figura 7B) ou maior que (figura 7C) o tamanho de sub-PU.
[0092] Técnicas anteriormente propostas e atuais podem ter algumas limitações. Como exemplo, métodos de OBMC existentes para HEVC são principalmente realizados em um limite de PU, macrobloco ou sub-macrobloco. Como outro exemplo, não é evidente como usar a informação de movimento de outras CUs para prever a PU atual em OBMC. Como outro exemplo, quando a PU atual contém sub-PUs, os métodos de OBMC baseados em PU podem não funcionar eficientemente. Para tratar potencialmente dos problemas e limitações identificados acima, essa revelação introduz várias técnicas. As técnicas dessa revelação podem ser aplicadas individualmente ou alternativamente, qualquer combinação das mesmas pode ser aplicada. Como usado aqui, informação de referência pode ser considerada como parte de informação de movimento nessa revelação.
[0093] As técnicas descritas abaixo são usadas para compensação de movimento de bloco sobreposto (OBMC). Em alguns exemplos, como descrito aqui, OBMC pode se referir a qualquer processo envolvendo o uso de informação de movimento a partir de um ou mais blocos que são vizinhos do bloco atual e executando uma média ponderada para gerar o bloco de predição do bloco atual. Em tais exemplos, o OBMC pode ser executado em um limite, uma porção de um bloco, uma fatia de um bloco, ou um bloco inteiro. Em outros exemplos, como descrito aqui, OBMC pode se referir a qualquer processo envolvendo o uso de uma média ponderada de (i) o(s) bloco(s) de predição com base em informação de movimento de um ou mais blocos que são vizinhos do bloco atual, e (ii) o bloco de predição com base em informação de movimento do bloco atual. Em tais exemplos, o OBMC pode ser executado em um limite, uma porção de um bloco, uma fatia de um bloco, ou um bloco inteiro. Em outros exemplos, como descrito aqui, OBMC pode se referir à geração de múltiplos vetores de movimento a partir do bloco atual e um ou mais blocos vizinhos, e combinar (por exemplo, mediar) os mesmos para o bloco atual.
[0094] Uma primeira técnica dessa revelação é OBMC baseado em sub-bloco. De acordo com essa primeira técnica, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para executar OBMC para cada sub-bloco em uma PU ou CU (por exemplo, a PU ou CU atual). Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para executar OBMC para cada sub-bloco em uma PU ou CU ao invés de ser configurado para somente executar OBMC para suavizar um limite de PU. Como descrito acima, em alguns exemplos, um sub-bloco pode se referir a um sub-bloco de uma PU; e, em tais exemplos, o tamanho do sub-bloco pode ser menor ou igual ao tamanho da PU menor. Em outros exemplos, um sub- bloco pode se referir a algo diferente de um sub-bloco de uma PU. Por exemplo, um sub-bloco pode se referir a um sub- bloco de uma CU. O tamanho de um sub-bloco é discutido em mais detalhe abaixo. De acordo com essa primeira técnica e de acordo com alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para executar OBMC por usar a informação de movimento de sub- blocos que são vizinhos do sub-bloco atual sendo codificado e/ou decodificado.
[0095] De acordo com essa primeira técnica e outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para determinar que um ou mais sub-blocos vizinhos do sub-bloco atual pertencem a uma CU não codificada. Em alguns exemplos, uma CU “não decodificada” pode se referir a uma CU que não foi decodificada ainda pelo codificador de vídeo 20 e/ou decodificador de vídeo 30 quando o sub-bloco atual está sendo decodificado pelo codificador de vídeo 20 e/ou decodificador de vídeo 30 quando o sub-bloco atual está sendo decodificado pelo codificador de vídeo 20 e/ou decodificador de vídeo 30. Em tais exemplos, uma CU recebida pelo decodificador de vídeo 30 que não foi ainda decodificada pelo decodificador de vídeo 30 pode ser mencionada como uma CU “não decodificada”. Por exemplo, o decodificador de vídeo 30 pode ser configurado para decodificar uma pluralidade de blocos de acordo com uma ordem de varredura, e a CU não decodificada pode ser posicionada na ordem de varredura de modo que a CU não decodificada será decodificada em algum momento após o sub- bloco atual. Com base na determinação de que um ou mais sub-blocos vizinhos pertencem a uma CU não decodificada, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para determinar que um ou mais sub- blocos vizinhos que pertencem a CU não decodificada são indisponíveis para OBMC baseada em sub-bloco. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 podem ser configurados para executar OBMC para o sub-bloco atual por não usar (por exemplo, excluir) informação de movimento de um ou mais sub-blocos vizinhos determinados como estando indisponíveis.
[0096] Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais sub-blocos vizinhos do sub-bloco atual pertencem a uma LCU não decodificada. Em alguns exemplos, uma LCU “não decodificada” pode se referir a uma LCU que não foi decodificada ainda pelo codificador de vídeo 20 e/ou decodificador de vídeo 30 quando o sub-bloco atual está sendo decodificado pelo codificador de vídeo 20 e/ou decodificador de vídeo 30. Em tais exemplos, uma LCU recebida pelo decodificador de vídeo 30 que não foi ainda decodificada pelo decodificador de vídeo 30 pode ser mencionada como uma LCU “não decodificada”. Por exemplo, o decodificador de vídeo 30 pode ser configurado para decodificar uma pluralidade de blocos de acordo com uma ordem de varredura, e a LCU não decodificada pode ser posicionada na ordem de varredura de modo que a LCU não decodificada será decodificada em algum momento após o sub- bloco atual. Com base na determinação de que um ou mais sub-blocos vizinhos pertencem a uma LCU não decodificada, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais sub-blocos vizinhos pertencendo a LCU não decodificada são indisponíveis para OBMC baseada em sub-bloco. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para o sub-bloco atual por não usar (por exemplo, excluir) informação de movimento de um ou mais sub-blocos vizinhos determinados como estando indisponíveis.
[0097] Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais sub-blocos vizinhos do sub-bloco atual pertencem a uma PU não decodificada. Em alguns exemplos, uma PU “não decodificada” pode se referir a uma PU que não foi decodificada ainda pelo codificador de vídeo 20 e/ou decodificador de vídeo 30 quando o sub-bloco atual está sendo decodificado pelo codificador de vídeo 20 e/ou decodificador de vídeo 30. Em tais exemplos, uma PU recebida pelo decodificador de vídeo 30 que não foi decodificada ainda pelo decodificador de vídeo 30 pode ser mencionada como uma PU “não decodificada”. Por exemplo, o decodificador de vídeo 30 pode ser configurado para decodificar uma pluralidade de blocos de acordo com uma ordem de varredura, e a PU não decodificada pode ser posicionada na ordem de varredura de modo que a PU não decodificada será decodificada em algum momento após o sub-bloco atual. Com base na determinação de que um ou mais sub-blocos vizinhos pertencem a uma PU não decodificada, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais sub-blocos vizinhos pertencendo à PU não decodificada são indisponíveis para OBMC baseada em sub-bloco. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para o sub-bloco atual por não usar (por exemplo, excluir) informação de movimento de um ou mais sub-blocos vizinhos determinados como sendo indisponíveis.
[0098] Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais sub-blocos vizinhos do sub-bloco atual pertencem a um sub-bloco não decodificado. Em alguns exemplos, um sub-bloco “não decodificado” pode se referir a um sub-bloco que não foi decodificado ainda pelo codificador de vídeo 20 e/ou decodificador de vídeo 30 quando o sub-bloco atual está sendo decodificado pelo codificador de vídeo 20 e/ou decodificador de vídeo 30. Em tais exemplos, um sub-bloco recebido pelo decodificador de vídeo 30 que não foi decodificado ainda pelo decodificador de vídeo 30 pode ser mencionado como um sub-bloco “não decodificado”. Por exemplo, o decodificador de vídeo 30 pode ser configurado para decodificar uma pluralidade de blocos de acordo com uma ordem de varredura, e o sub-bloco não decodificado pode ser posicionado na ordem de varredura de modo que o sub- bloco não decodificado será decodificado em algum momento após o sub-bloco atual. Com base na determinação de que um ou mais sub-blocos vizinhos pertencem a um sub-bloco não decodificado, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais sub-blocos vizinhos pertencendo ao sub-bloco não decodificado são indisponíveis para OBMC baseada em sub- bloco. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para o sub-bloco atual por não usar (por exemplo, excluir) informação de movimento de um ou mais sub-blocos vizinhos determinados como estando indisponíveis.
[0099] De acordo com essa primeira técnica, o tamanho de um sub-bloco pode ser igual ao tamanho de PU menor para uma CU. Em outros exemplos, um sub-bloco pode ter um tamanho menor que o tamanho de PU menor. Por exemplo, NxN pode representar o tamanho de bloco de movimento menor e o tamanho de sub-bloco (por exemplo, tamanho de sub-PU) pode ser igual a NxN, onde N é um número inteiro positivo. Em tal exemplo, se o tamanho de PU menor for 8x4 ou 4x8, o tamanho de sub-bloco pode ser igual a 4x4. Em outro exemplo, NxM pode representar o tamanho de bloco de movimento menor e o tamanho de sub-bloco (por exemplo, tamanho de sub-PU) pode ser definido em NxM, onde M e N são números inteiros positivos e podem ser ou não iguais entre si. Em tal exemplo, se o tamanho de PU menor for 8x8, o tamanho de sub-bloco pode ser igual a 4x4, 8x4 ou 4x8.
[00100] Em outro exemplo, o tamanho do sub- bloco pode ser também qualquer valor predefinido. O tamanho de sub-bloco predefinido pode, por exemplo, ser maior que o tamanho de PU menor. Em outro exemplo, o tamanho de um sub- bloco pode ser sinalizado em um conjunto de parâmetros. Ainda em outro exemplo, o tamanho do sub-bloco pode depender do tamanho de PU ou CU atual (isto é, a PU ou CU atual à qual o sub-bloco atual pertence). Ainda em outro exemplo, o tamanho do sub-bloco pode depender do tamanho de bloco no qual o codificador de vídeo 20 e/ou decodificador de vídeo 30 são configurados para executar OBMC. Ainda em outro exemplo, o tamanho do sub-bloco pode depender do tamanho de PU ou CU atual 9isto é, a PU ou CU atual à qual o sub-bloco atual pertence) bem como o tamanho de uma ou mais PUs ou CUs vizinhas (isto é, uma ou mais PUs ou CUs que são vizinhas da PU ou CU a qual o sub-bloco atual pertence).
[00101] Uma segunda técnica dessa revelação é OBMC baseada em sub-PU. De acordo com essa segunda técnica, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para cada sub-PU em uma PU ou CU (por exemplo, a PU ou CU atual) que é codificada com uma sub-PU. Cada sub-PU pode conter seu próprio conjunto de informações de movimento, por exemplo, incluindo um vetor de movimento e índice de lista de imagens de referência. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para uma ou mais sub-PUs na PU ou CU atual usando informação de movimento de uma ou mais sub-PUs vizinhas na PU ou CU. Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para uma ou mais sub-PUs na PU ou CU atual usando informação de movimento de uma ou mais sub-PUs vizinhas na PU ou CU atual juntamente com informação de movimento de um ou mais blocos vizinhos fora da PU ou CU atual.
[00102] De acordo com essa segunda técnica e alguns exemplos, para cada sub-PU, seus blocos vizinhos podem ser as sub-PUs vizinhas na mesma PU ou CU (por exemplo, a PU ou CU atual) e blocos vizinhos fora da PU ou CU atual (isto é, a PU atual ou CU atual). Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar um bloco vizinho fora da PU ou CU atual (isto é, fora da PU atual ou fora da CU atual) para executar OBMC na sub-PU atual da PU ou CU atual se o bloco vizinho tiver o mesmo tamanho que a sub-PU atual. Em tais exemplos, mesmo se um bloco vizinho à PU ou CU atual contiver mais de um conjunto de informações de movimento, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para utilizar somente um conjunto de informações de movimento para aquele bloco vizinho. Também em tais exemplos, se um bloco vizinho fora da PU ou CU atual tiver um tamanho diferente do tamanho da sub-PU atual, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para a sub-PU atual por não usar (por exemplo, excluir) informações de movimento de um ou mais blocos vizinhos determinados como tendo um tamanho diferente do tamanho da sub-PU atual.
[00103] Em outras palavras, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar um bloco vizinho fora da PU ou CU atual para executar OBMC na sub-PU atual da PU ou CU atual se o bloco vizinho for menor que o tamanho da sub-PU atual. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para a sub-PU atual usando um ou mais sub- blocos para a sub-PU atual. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para dividir quaisquer sub-PUs de limite de uma PU em sub-blocos. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para cada sub-bloco.
[00104] Em outros exemplos, uma sub-PU que não é adjacente a qualquer pixel fora da PU ou CU atual pode ser prevista usando somente sub-PUs vizinhas. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que a sub-PU atual não é adjacente a qualquer pixel fora da PU ou CU atual e pode ser configurada para executar OBMC para a sub- PU atual usando somente sub-PUs vizinhos.
[00105] Também de acordo com a segunda técnica dessa revelação e em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais blocos vizinhos à sub-PU atual pertencem a uma CU não decodificada. Com base na determinação de que um ou mais blocos vizinhos pertencem a uma CU não decodificada, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais blocos vizinhos pertencendo a CU não decodificada são não disponíveis para OBMC baseada em sub-PU. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para a sub-PU atual por não usar (por exemplo, excluir) informação de movimento de um ou mais blocos vizinhos determinados como sendo não disponíveis.
[00106] Também de acordo com a segunda técnica dessa revelação e em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais blocos vizinhos à sub-PU atual pertencem a uma LCU não decodificada. Com base na determinação de que um ou mais blocos vizinhos pertencem a uma LCU não decodificada, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais blocos vizinhos pertencendo à LCU não decodificada são indisponíveis para OBMC baseada em sub-PU. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para a sub-PU atual por não usar (por exemplo, excluir) informação de movimento de um ou mais blocos vizinhos determinados como estando indisponíveis.
[00107] Também de acordo com a segunda técnica dessa revelação e em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais blocos vizinhos à sub-PU atual pertencem a uma PU não decodificada (por exemplo, uma PU codificada). Com base na determinação de que um ou mais blocos vizinhos pertencem a uma PU não decodificada, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais blocos vizinhos pertencendo a PU não decodificada são indisponíveis para OBMC baseada em sub-PU. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para a sub-PU atual por não usar (por exemplo, excluir) informação de movimento de um ou mais blocos vizinhos determinados como sendo indisponíveis.
[00108] Uma terceira técnica dessa revelação é OBMC baseada em limite de CU. De acordo com essa terceira técnica, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC parra um ou mais limites de CU. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar também OBMC para um ou mais limites de PU.
[00109] Com referência aos limites superior e inferior de uma CU atual, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento de um ou mais blocos vizinhos que não pertencem à CU atual, porém limitando o limite superior e/ou esquerdo (por exemplo, borda) da CU atual para gerar preditores adicionais em um modo similar àquele descrito aqui com relação à primeira técnica. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para um limite de CU (por exemplo, o limite de CU atual) por usar toda ou um pouco da informação de movimento dos blocos no limite de CU (por exemplo, o limite superior e/ou esquerdo da CU atual) a partir do9s) bloco(s) vizinho(s) (Por exemplo, uma CU vizinha) à esquerda da CU atual e/ou o(s) bloco(s) vizinho(s) (por exemplo, uma CU vizinha) ao topo da CU atual.
[00110] Em tal exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para um limite de CU como a seguir: para cada bloco menor da CU atual localizada no limite de CU superior, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento do bloco vizinho superior de cada bloco menor para OBMC do limite de CU superior, e o(s) preditor(es) adicional(is) são usados para formar o sinal de predição final do bloco atual com a CU. Para cada bloco menor da CU atual localizado no limite de CU esquerdo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento do bloco vizinho esquerdo de cada bloco menor para OBMC do limite de CU esquerdo, e o(s) preditor(es) adicional(is) é(são) usado(s) para formar o sinal de predição final do bloco atual.
[00111] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC somente nos limites de CU esquerdo e/ou CU superior. Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC nos limites de CU esquerda, CU superior, CU direita e/ou CU inferior. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC nos limites de CU direita e/ou CU inferior em um modo similar como descrito acima com relação aos limites de CU superior e esquerda. Por exemplo, para cada bloco menor da CU atual localizada no limite de CU direita, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento do bloco vizinho superior de cada bloco menor para OBMC do limite de CU direita, e o(s) preditor(es) adicional(is) é(são) usado(s) para formar o sinal de predição final do bloco atual com a CU. Para cada bloco menor da CU atual localizada no limite de CU inferior, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento do bloco vizinho inferior de cada bloco menor para OBMC do limite de CU inferior, e o(s) preditor(es) adicional(is) é(são) usado(s) para formar o sinal de predição final do bloco atual com a CU.
[00112] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para subamostrar ou comprimir informação de movimento a partir de uma CU vizinha. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar a informação de movimento subamostrada ou comprimida da CU vizinha para gerar um ou mais preditores adicionais da CU atual. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para subamostrar ou comprimir informação de movimento de uma CU vizinha com base em sub-bloco ao invés do tamanho de bloco menor, significando que se uma CU vizinha tiver múltiplos sub-blocos (por exemplo, PU’s) com MV’s individuais, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar um MV único para um grupo (por exemplo, conjunto) de PU’s e outro MV único para outro grupo de PU’s.
[00113] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para desabilitar OBMC referente à terceira técnica dessa revelação e/ou outra técnica dessa revelação. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para desabilitar OBMC para PUs em uma CU atual se (por exemplo, quando) o tamanho da CU atual for menor que aquele do tamanho de sub-bloco. Em tal exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar o tamanho da CU atual e comparar o tamanho determinado da CU atual com o tamanho do sub-bloco para determinar se o tamanho da CU atual é menor que aquele do tamanho de sub-bloco. Com base na determinação de que o tamanho da CU atual é menor que o tamanho do sub-bloco, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para desabilitar OBMC para PUs em uma CU atual.
[00114] Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para desabilitar OBMC para um limite de PU se (por exemplo, quando) o limite de PU não for um limite de sub-bloco (por exemplo, um limite não contendo nenhum sub- bloco). Nesse exemplo, o sub-bloco é maior que a PU e o limite de PU pode ser localizado dentro de um sub-bloco. O limite de PU pode ou não ser um limite de sub-bloco. Por conseguinte, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para desabilitar (por exemplo, pular) OBMC ao longo daquele limite de PU para reduzir complexidade de codificação e/ou decodificação. Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para desabilitar OBMC para limites de CU da direita e/ou CU inferior.
[00115] Uma quarta técnica dessa revelação inclui aspectos comuns das três primeira, segunda e terceira técnicas de OBMC descritas acima. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar vetor de movimento de um sub-bloco vizinho, sub-PU vizinho, ou bloco vizinho para respectivamente gerar um preditor adicional do sub- bloco atual, sub-PU atual ou bloco atual. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar o preditor adicional para formar respectivamente o sinal de predição final do sub- bloco atual, sub-PU atual ou bloco atual.
[00116] De acordo com essa quarta técnica e outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar até um número predefinido de vizinhos de um sub-bloco atual, sub_PU atual, ou bloco atual para OBMC. Em tais exemplos, o número predefinido pode ser oito ou um número diferente de oito. De acordo com um exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informações de movimento (por exemplo, vetores de movimento) de quatro blocos vizinhos conectados (por exemplo, sub-blocos vizinhos acima, abaixo, à esquerda e à direita) para OBMC. Como usado aqui, ao se referir “para OBMC” pode se referir a “executar OBMC.”
[00117] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar somente um conjunto de informação de movimento se (por exemplo, quando) um sub- bloco vizinho, sub-PU vizinha, ou bloco vizinho contiver múltiplos conjuntos de informação de movimento, por exemplo, se um tamanho de sub-bloco for 8x8 e a informação de movimento for armazenada em uma base 4x4, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar um conjunto de informação de movimento correspondendo ao sub-bloco 8x8 nesse exemplo específico.
[00118] O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar um único conjunto de informações de movimento de acordo com uma ou mais técnicas. Em um exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar o conjunto de informações de movimento com base no pixel central do sub-bloco, sub-PU ou bloco. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar o conjunto de informações de movimento para um sub-bloco, sub-PU ou bloco que inclui o pixel central do sub-bloco, sub-PU ou bloco. Consequentemente, se houver múltiplos conjuntos de informações de movimento para uma PU, o único conjunto de informações de movimento parra um bloco contendo um pixel central pode ser usado para OBMC para o bloco atual. Em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar o conjunto de informações de movimento com base em qual conjunto de informações de movimento pertence aos blocos de movimento menores adjacentes ao sub-bloco atual, sub-PU ou bloco. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar o conjunto de informações de movimento que pertence aos blocos de movimento menores adjacentes ao sub-bloco, sub-PU ou bloco atual. Se houver uma pluralidade de tais blocos de movimento, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar o bloco de movimento mais anterior (ou primeiro decodificado) da pluralidade em, por exemplo, ordem de varredura de rasterização.
[00119] Em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para comparar todas as informações de movimento dos sub-blocos vizinhos com as informações de movimento da PU, CU ou bloco atuais. Com base nessa comparação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar as informações de movimento que são mais similares às informações de movimento da PU, CU ou bloco atuais. Com base nessa comparação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar a informação de movimento que é mais diferente da informação de movimento da PU, CU ou bloco atuais.
[00120] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento de um subconjunto de quaisquer sub-blocos, sub-PUs ou blocos vizinhos, conectados, para OBMC. No exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar somente os vizinhos esquerdo e direito de um bloco atual para executar OBMC. Em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar somente os vizinhos acima e abaixo de um bloco atual para executar OBMC. Em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar somente um dos vizinhos acima ou abaixo e um dos vizinhos esquerdo ou direito de um bloco atual para executar OBMC. Em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar somente um dos quatro vizinhos conectados de um bloco atual para executar OBMC. Ainda em outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar o subconjunto dos blocos vizinhos com base na posição relativa do sub-bloco na PU ou CU atual.
[00121] O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um sub-bloco, sub-PU ou bloco vizinho está indisponível de acordo com uma ou mais técnicas descritas aqui. Por exemplo, um bloco Intra pode ser considerado como indisponível, um bloco fora (ou parcialmente fora) da fatia ou tile atual pode ser considerado como indisponível, um bloco que é considerado indisponível quando a frente de onda é usada pode ser considerado como indisponível, um bloco que não está decodificado ainda (por exemplo, pelo menos seus vetores de movimento não estão decodificados ainda) pode ser considerado indisponível, e/ou um bloco ou sub-bloco vizinho pode ser considerado indisponível quando o bloco ou sub-bloco vizinho não pertence à CPU atual.
[00122] De acordo com uma quinta técnica dessa revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para o sub-bloco atual usando informação de movimento (por exemplo, vetores de movimento) de cada sub-bloco vizinho disponível para gerar um bloco de predição. Em alguns exemplos, o bloco de predição pode ser indicado por PN com N indicando um índice/denotação (por exemplo, igual a acima, abaixo, esquerda ou direita) para um bloco vizinho que é vizinho do sub-bloco atual. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar o (s) bloco(s) de predição de um ou mais blocos vizinhos para atualizar o bloco de predição do sub-bloco atual, que pode ser indicado por Pc. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para gerar o bloco de predição final do bloco atual (isto é, o bloco de predição atualizado do sub- bloco atual) que pode ser uma média ponderada de (i) o(s) bloco(s) de predição com base em informação de movimento a partir de um ou mais blocos vizinhos do bloco atual, e (ii) o bloco de predição com base em informações de movimento do sub-bloco atual.
[00123] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar se (por exemplo, quando) um ou mais sub-blocos vizinhos ao bloco atual contêm mais de uma sub-PU, que pode ser indicativa de múltiplos conjuntos de informação de movimento. Em tais exemplos, com base na determinação de que um ou mais sub-blocos vizinhos ao sub- bloco atual contêm mais de uma sub-PU, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento de uma ou mais de tais sub-PUs que são vizinhas do sub-bloco atual para executar OBMC no sub-bloco atual. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para não usar ou de outro modo excluir informação de movimento a partir de uma sub-PU que não é vizinha do sub-bloco atual. Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar informação de movimento de qualquer sub-PU de um bloco vizinho ao sub-bloco atual para executar OBMC no sub-bloco atual, quer qualquer sub-PU do bloco vizinho seja ou não vizinho do sub-bloco atual.
[00124] De acordo com uma sexta técnica dessa revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC em qualquer bloco (por exemplo, uma PU ou CU) com um tamanho quadrado ou não quadrado (por exemplo, um retângulo). Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC em um bloco (por exemplo, uma CU ou PU) com tipos ou tamanhos especiais (por exemplo, tipos ou tamanhos predefinidos, PUs codificadas com modo de fusão em HEVC, PUs codificadas com um modo similar ao modo de fusão em um padrão de codificação diferente de HEVC, ou PUs maiores que 32x32).
[00125] De acordo com uma sétima técnica dessa revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC para o sub-bloco, sub-PU ou bloco atual usando informação de movimento (por exemplo, vetores de movimento) de cada sub- bloco, sub-PU ou bloco vizinho disponível para gerar um bloco de predição. Em alguns exemplos, o bloco de predição pode ser indicado por PN com N indicando um índice/denotação (por exemplo, igual a acima, abaixo, esquerda ou direita) a um bloco vizinho que é vizinho do sub-bloco atual, sub-PU ou bloco. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar o(s) bloco(s) de predição de um ou mais blocos vizinhos para atualizar o bloco de predição do bloco atual (por exemplo, sub-bloco, sub-PU ou bloco) que pode ser indicado por Pc.
[00126] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada para atualizar Pc. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada de (i) uma ou mais K fileira(s) ou coluna(s) do bloco vizinho, e (ii) a(s) fileira(s) ou coluna(s) correspondente(S) do bloco de predição atual Pc para atualizar Pc. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atribuir pesos diferentes a posições diferentes (por exemplo, fileira(s) ou coluna(s) diferente(s)). Em alguns exemplos, K pode ser definido igual a um valor de 1, 2, 3 ou 4. Uma ou mais K fileira(s) ou coluna(s) são aquelas mais próximas ao bloco vizinho como indicado por N. Por exemplo, se o bloco vizinho for um bloco vizinho esquerdo ou um bloco vizinho direito ao bloco atual, então o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada de (i) uma ou mais K coluna(s) do bloco de predição PN a partir da informação de movimento (por exemplo, vetor(es) de movimento) do bloco vizinho, e (ii) a(s) coluna(s) correspondente(s) do bloco de predição atual Pc para atualizar Pc. Como outro exemplo, se o bloco vizinho for um bloco vizinho superior ou um bloco vizinho inferior ao bloco atual, então o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada de (i) uma ou mais K fileira(s) do bloco de predição PN a partir da informação de movimento (por exemplo, vetor(es) de movimento) do bloco vizinho, e (ii) a(s) fileira(s) correspondente(s) do bloco de predição atual Pc para atualizar Pc.
[00127] Com referência à Tabela 1 abaixo, x e y podem indicar as coordenadas vertical e horizontal em relação ao pixel superior-esquerdo do sub-bloco atual, sub- PU ou bloco. O peso de Pc(x, y) e PN(x, y) é respectivamente indicado como w1(x, y) e w2(x, y). Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada para atualizar PC de modo que Pc(x, y) atualizado igual a w1(x,y)*Pc(x, y) w2(x, y)*PN(x, y). A largura e altura do sub-bloco sub-PU ou bloco atual pode ser respectivamente indicada por W e H. por exemplo, W-1 pode se referir a última coluna (por exemplo, a coluna mais distante para a direita) do sub-loco atual, sub-Pu, ou bloco. Como outro exemplo, H-1 pode se referir à ultima fileira (por exemplo, a fileira mais inferior) do sub- bloco, sub-PU ou bloco atual. Como outro exemplo, H-2 pode se referir à segunda para última fileira (por exemplo, a segunda fileira mais inferior, que pode ser descrita como a primeira fileira acima da última fileira) do sub-bloco, sub-PU ou bloco atual. Os valores de N podem se referir ao N do bloco de predição PN descrito aqui. Um exemplo de pesos w1 e w2 é especificado na Tabela 1 abaixo.
[00128] Tabela 1 (Pesos de exemplo usados em OBMC):
[00129] Em alguns exemplos, quando N é igual a acima, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada de modo que as quatro fileiras superiores de Pc sejam atualizadas por PN. Similarmente, quando N é igual a abaixo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada de modo que as quatro fileiras inferiores de Pc sejam atualizadas por PN. Como outro exemplo, quando N é igual à esquerda, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada de modo que as quatro colunas da esquerda de Pc sejam atualizadas por PN. Similarmente, quando N é igual à direita, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada de modo que as quatro colunas da direita de Pc sejam atualizados por PN.
[00130] Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar uma fileira ou colunas de Pc por PN. Posições e pesos de acordo com tais exemplos estão [em parênteses] na Tabela 1 acima.
[00131] Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar duas fileiras ou colunas de Pc por PN. Posições e pesos das duas fileiras ou colunas de acordo com tais exemplos estão [em parênteses] e sublinhados com uma linha na tabela 1 acima (por exemplo, as duas primeiras/superiores linhas para cada valor N).
[00132] Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar três fileiras ou colunas de PC por PN. Posições e pesos das três fileiras ou colunas de acordo com tais exemplos estão [em parênteses] e sublinhados com duas linhas na tabela 1 acima (por exemplo, as três primeiras/superiores fileiras para cada valor N).
[00133] Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar o número de fileiras (por exemplo, uma ou mais fileiras) nas colunas de número (por exemplo, uma ou mais colunas) com base no tamanho do sub- bloco atual, sub-PU ou bloco. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para selecionar mais fileiras ou colunas se o sub-bloco, sub-PU ou bloco atual tiver um primeiro tamanho, e selecionar menos fileiras ou colunas se o sub-bloco, sub- PU ou bloco atual tiver um segundo tamanho. Por exemplo, quando o tamanho de PU atual é igual a 8x4 ou 4x8 e/ou a PU atual for codificada com modos de sub-PU (por exemplo, significando que a PU atual inclui uma ou mais sub-PUs), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar somente duas fileiras ou colunas de PC por PN. Como outro exemplo, quando o tamanho de PU atual é maior que 8x4 ou 4x8, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar quatro fileiras ou colunas de PC por PN.
[00134] Ainda em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar cada pixel de PC pelo pixel correspondente de PN.
[00135] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para implementar pesos usados em qualquer média ponderada usando uma ou mais operações de adição e deslocamento. Em tais exemplos ou outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para implementar os pesos (por exemplo, os pesos mostrados na Tabela 1 ou pesos diferentes dos pesos mostrados na Tabela 1) de modo que w1(x, y) + w2(x, y) seja igual a 1.
[00136] Em alguns exemplos, o número da fileira ou coluna de PC atualizado por PN pode depender (por exemplo, ser baseado em) no tamanho do bloco de predição atual. Em tais exemplos, o tamanho do bloco de predição atual pode corresponder ao tamanho do sub-bloco, sub-PU ou CU. Em alguns exemplos, o número de fileira de PC atualizado por PN pode depender de W. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar mais fileiras quando H é maior (por exemplo, tendo um primeiro valor). Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar menos fileiras quando H é menor (por exemplo, tendo um segundo valor que é menor que o primeiro valor). Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar fileiras colunas quando W é maior (por exemplo, tendo um primeiro valor). Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar menos colunas quando W é menor (por exemplo, tendo um segundo valor que é menor que o primeiro valor).
[00137] De acordo com uma oitava técnica dessa revelação, quando múltiplos vizinhos fornecem múltiplos preditores com cada sendo indicado como PN, a composição dos preditores PN e o preditor atual PC pode ser feita um a um em uma ordem. Aqui, um preditor pode significar um bloco de predição que pode consistir em um bloco de valores de pixel determinados por inter-predição usando informação de movimento do bloco vizinho. Por exemplo, após cada composição, o preditor atual PC pode ser atualizado e mantido como a mesma profundidade de bit que aquele do preditor atual antes da composição, que pode ser a profundidade de bit de processamento interno de cada componente de cor. Durante cada composição, o processo de ponderação para cada pixel pode incluir um valor de arredondamento r, de modo que o processo de ponderação seja alterado para (a1(x, y)*Pc(x,y) + a2(x,y)*PN(x, y)+e)/S, em que a1/S e a2/S são iguais a w1 e w2 respectivamente. Em alguns exemplos, r pode ser definido em 0 ou S/2. Nesse exemplo, a1 é um valor quantizado de w1, a2 é um valor quantizado de w2, e S é o fator normalizado.
[00138] Em alguns exemplos, a ordem quando quatro preditores estão disponíveis pode ser Acima, Esquerda, Inferior, Direita. Em outros exemplos, a ordem quando quatro preditores são disponíveis pode ser Esquerda, acima, Inferior, Direita. Em outros exemplos, a ordem quando quatro preditores estão disponíveis pode ser qualquer ordem diferente dos dois exemplos acima.
[00139] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para pular o processo de composição se (por exemplo, quando) um bloco vizinho não contiver informação de movimento porque isso pode indicar que PN está indisponível. Em outros exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para coletar todos os preditores (por exemplo, todos PN) e executar um processo de predição ponderada conjunto usando todos os preditores. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar que um ou mais PN são indisponíveis, e pode ser configurado para definir que um ou mais PN determinados seja indisponível igual a PC.
[00140] Em alguns exemplos, durante cada composição (por exemplo, enquanto executa o processo de média ponderada para cada composição de bloco(s) de predição PN), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar o preditor atual PC com a profundidade de bit aumentando. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para atualizar o preditor atual PC sem executar uma operação de desescalonamento antes da composição seguinte ser processada. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma operação de desescalonamento após todas as composições terem sido processadas. Desescalonamento se refere à divisão pelo fator de normalização S exposto acima, que pode trazer o valor de composição ponderado ao mesmo nível de cada predição de entrada. Por desescalonamento após todas as composições terem sido processadas, o decodificador de vídeo 30 pode ser configurado para obter os mesmos resultados de predição final por processar composições sequencialmente e usar um processo de predição ponderada conjunto. Tal design pode fornecer flexibilidade na implementação quando OBMC de limite múltiplo for aplicado ao mesmo bloco de predição.
[00141] De acordo com uma nona técnica da presente revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para habilitar ou desabilitar adaptavelmente (por exemplo, ligar ou desligar) OBMC na CU, PU ou qualquer nível de bloco. Por exemplo, quando OBMC é habilitado para um nível de bloco específico, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC usando uma ou mais técnicas descritas aqui para aquele nível de bloco específico. Como outro exemplo, quando OBMC é desabilitado para um nível de bloco específico, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para não executar OBMC usando uma ou mais técnicas descritas aqui para aquele nível de bloco específico.
[00142] Em alguns exemplos, o codificador de vídeo 20 pode ser configurado para habilitar ou desabilitar adaptavelmente (por exemplo, ligar ou desligar) OBMC na CU, PU ou qualquer outro nível de bloco por sinalizar um flag de OBMC. Em alguns exemplos, o codificador de vídeo 20 pode ser configurado para sinalizar, e o decodificador de vídeo 30 pode ser configurado para receber, um elemento de sintaxe OBMC como um flag de OBMC tendo um valor que indica se OBMC é habilitado ou desabilitado para um bloco específico. Por exemplo, o codificador de vídeo 20 pode ser configurado para sinalizar um flag de OBMC para cada CU, PU ou loco inter-codificado. Em alguns exemplos, o flag OBMC pode ser binário e ter um de dois valores. Um primeiro valor do flag OBMC pode indicar que OBMC é habilitado, e um segundo valor do flag OBMC pode indicar que OBMC é desabilitado. Por exemplo, quando o flag OBMC é verdadeiro (por exemplo, tem um valor correspondendo a um primeiro valor) OBMC aplica (por exemplo, é habilitado) para a CU, PU ou bloco atual. Como outro exemplo, quando o flag OBMC é falso (por exemplo, tem um valor correspondendo a um segundo valor, OBMC não aplica (por exemplo, é desabilitado) para a CU, PU ou bloco atual.
[00143] Similarmente, o decodificador de vídeo 30 pode ser configurado para receber o flag OBMC e determinar o valor do flag OBMC. Por exemplo, o decodificador de vídeo 30 pode ser configurado para receber flag OBMC a partir do codificador de vídeo 20 em um fluxo de bits gerado pelo codificador de vídeo 20. Em alguns exemplos, o valor correspondendo a flag OBMC indica se OBMC para um bloco de dados de vídeo sendo decodificado (por exemplo, uma CU, PU ou outro bloco) é habilitado ou desabilitado. Em tais exemplos, o decodificador de vídeo 30 pode ser configurado para receber um flag OBMC tendo um valor que indica se OBMC é habilitado ou desabilitado para um bloco específico. Por exemplo, o decodificador de vídeo 30 pode ser configurado para receber um flag OBMC para cada CU, PU ou bloco inter-codificado. Um primeiro valor do flag OBMC pode indicar que OBMC é habilitado, e um segundo valor do flag OBMC pode indicar que OBMC é desabilitado. Por exemplo, quando o flag OBMC é verdadeiro (por exemplo, tem um valor correspondendo a um primeiro valor), o decodificador de vídeo 30 pode ser configurado para determinar que OBMC aplica (por exemplo, é habilitado) para a CU, PU ou bloco atual. Como outro exemplo, quando o flag OBMC é falso (por exemplo, tem um valor correspondendo a um segundo valor, o decodificador de vídeo 30 pode ser configurado para determinar que OBMC não aplica (por exemplo, é desabilitado) para a CU, PU ou bloco atual.
[00144] Em alguns exemplos, o codificador de vídeo 20 pode ser configurado para sinalizar um flag OBMC somente para uma CU, PU ou bloco com base no(s) tipo(s) de divisão usado(s) para a CU, PU ou bloco, o modo de predição (por exemplo, modo de fusão ou modo AMVP) usado para a CU, PU ou bloco, ou tamanho da CU, PU ou bloco. Em tais exemplos, o codificador de vídeo 20 pode ser configurado para determinar o(s) tipo(s) de divisão, modo de predição, e/ou tamanho correspondendo à CU, PU ou bloco, e sinalizar um flag OBMC com base na determinação de um ou mais de: tipo(s) de divisão, modo de predição, e/ou tamanho correspondendo à CU, PU ou bloco.
[00145] Em um exemplo, o codificador de vídeo 20 pode ser configurado para sinalizar um flag OBMX para uma CU, PU ou bloco somente se a CU, PU ou bloco não for codificada com 2Nx2N modo de fusão e o tamanho da CU, PU, ou bloco for menor ou igual a 16x16. Em tal exemplo, o codificador de vídeo 20 pode ser configurado para determinar se a CU, PU ou bloco é codificada com 2Nx2N modo de fusão e o tamanho da CU, PU ou bloco e sinalizar um flag OBMC com base na(s) determinação(ões) do mesmo.
[00146] Em alguns exemplos, o codificador de vídeo 20 pode ser configurado para não sinalizar um flag OBMC para uma CU, PU ou bloco. Em tais exemplos, o decodificador de vídeo 30 pode ser configurado para implicitamente derivar, com base em outra informação sinalizada (por exemplo, como descrito nos quatro parágrafos seguintes apenas como um exemplo de revelação contendo múltiplos exemplos), um valor correspondendo ao flag OBMC. Por exemplo, o decodificador de vídeo 30 pode ser configurado para implicitamente derivar um valor do flag OBMC indicando que OBMC aplica (por exemplo, é habilitado) para a CU, PU ou bloco. Como outro exemplo, o decodificador de vídeo 30 pode ser configurado para implicitamente derivar um valor do flag OBMC indicando que OBMC não aplica (por exemplo, é desabilitado) para a CU, PU ou bloco.
[00147] De acordo com uma décima técnica dessa revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para habilitar ou desabilitar adaptavelmente (por exemplo, ligar ou desligar) OBMC no limite de CU, PU, sub-bloco ou bloco. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para adaptavelmente habilitar ou desabilitar (por exemplo, ligar ou desligar) OBMC no limite de CU, PU, sub-bloco ou bloco implicitamente baseado na característica de informação de movimento (por exemplo, vetores de movimento) de um ou mais (por exemplo, dois) blocos vizinhos, e/ou a característica de valores de amostra previstos com base na informação de movimento (por exemplo, vetores de movimento) de um ou mais (por exemplo, dois) blocos vizinhos.
[00148] Em alguns exemplos, o fato de se deve aplicar (por exemplo, habilitar) OBMC para um limite de bloco (por exemplo, um limite de CU, PU, sub-bloco ou bloco) pode ser baseado na diferença de vetor de movimento entre os vetores de movimento de um ou mais (por exemplo, dois) blocos vizinhos que compartilham um limite com o bloco atual. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar a diferença de vetor de movimento entre os vetores de movimento de um ou mais (por exemplo, dois) blocos vizinhos que compartilham um limite com o bloco atual. Quando a diferença de vetor de movimento está acima de um limiar (por exemplo, 16 pixels ou qualquer outro limiar), OBMC pode não ser aplicado (por exemplo, pode ser desabilitado) para o(s) limite(s); de outro modo, OBMC pode ser aplicado (por exemplo, habilitado) para o(s) limite(s). Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para comparar a diferença de vetor de movimento determinado com o limiar predefinido, e habilitar ou desabilitar OBMC para um ou mais limites baseados na comparação. Em alguns exemplos, o limiar pode ser um valor predefinido, e pode ou não ser sinalizado em um fluxo de bits de vídeo codificado.
[00149] Em um exemplo onde o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar a diferença de vetor de movimento entre os vetores de movimento de dois blocos vizinhos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para não aplicar (por exemplo, desabilitar) OBMC se (por exemplo, quando os dois vetores de movimento apontam, cada, para um quadro de referência diferente, ou se (por exemplo, quando) pelo menos um vetor de movimento não está disponível. Em outro exemplo onde o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar a diferença de vetor de movimento entre os vetores de movimento de dois ou mais blocos vizinhos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para não aplicar (por exemplo, desabilitar) OBMC se (Por exemplo, quando) pelo menos um vetor de movimento não está disponível.
[00150] Em outros exemplos, o fato de se deve aplicar (por exemplo, habilitar) OBMC) para um limite de bloco (por exemplo, um limite de CU, PU, sub-bloco ou bloco) pode ser baseado em se dois vetores de movimento de dois blocos vizinhos (por exemplo, um vetor de movimento para cada dos dois blocos vizinhos) que compartilham um limite com o bloco atual apontam, ambos, para as posições de pixel inteiro. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para determinar se dois vetores de movimento de dois blocos vizinhos (por exemplo, um vetor de movimento para cada dos dois blocos vizinhos) que compartilham um limite com o bloco atual apontam, ambos, para posições de pixel inteiro. Em alguns exemplos, se ambos os vetores de movimento apontam para posições de pixel inteiro, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para não aplicar (por exemplo, desabilitar) OBMC para o(s) limite(s). Em outros exemplos, se os dois vetores de movimento não apontam para posições de pixel inteiro, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para aplicar (por exemplo, habilitar) OBMC para o(s) limite(s).
[00151] Em outros exemplos, o fato de se deve aplicar (por exemplo, habilitar) OBMC para um limite de bloco (por exemplo, um limite de CU, PU, sub-bloco ou bloco) pode ser baseado na diferença de valor de amostra de dois blocos previstos derivados de dois vetores de movimento de dois blocos vizinhos que compartilham um limite com o bloco atual. Por exemplo, quando a diferença absoluta média dos dois blocos previstos está acima de certo limiar (por exemplo, como 80), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para não aplicar (por exemplo, desabilitar) o OBMD para o limite. Como outro exemplo, quando a diferença absoluta máxima entre as amostras dos dois blocos previstos está acima de certo limiar (por exemplo, como 80, 88 ou 96), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para não aplicar (por exemplo, desabilitar) OBMC para o limite. Como outro exemplo, quando a diferença absoluta máxima entre as amostras dos dois blocos previstos é menor ou igual a certo limiar (por exemplo, como 80, 88 ou 96), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para aplicar (por exemplo, habilitar) OBMC para o limite. Em alguns exemplos, o limiar pode ser um valor predefinido, e pode ou não ser sinalizado em um fluxo de bits de vídeo codificado. Nesses exemplos, o tamanho dos blocos previstos pode ser (i) o mesmo tamanho que o tamanho de sub-bloco descrito na quarta técnica dessa revelação acima, (ii), predefinido ou (iii) sinalizado em um fluxo de bits.
[00152] Como usado aqui, a desabilitação ou não aplicação de OBMC para um limiar pode se referir a não execução de OBMC ao limite e vice-versa. Similarmente, como usado aqui, a habilitação ou aplicação de OBMC para um limite pode se referir à execução de OBMC ao limite e vice- versa. Como usado aqui, qualquer referência referente a “para X” pode se referir a “a X” ou “em X”. Por exemplo, referência a “para um bloco” pode se referir a “a um bloco” ou “em um bloco”. É entendido que qualquer referência referente a “para X”, “a X” ou “em X” pode se referir a qualquer de “para X”, “a X”, e “em X”. Por exemplo, referência a “no sub-bloco” pode de modo similar se referir a “para o sub-bloco” ou “no sub-bloco”.
[00153] De acordo com uma décima primeira técnica dessa revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para habilitar ou desabilitar adaptavelmente (por exemplo, ligar ou desligar) OBMC no nível de CU, PU, sub-bloco, qualquer outro bloco. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para adaptavelmente habilitar ou desabilitar (por exemplo, ligar ou desligar) OBMC para cada CU, PU, sub-bloco ou bloco inter-codificado. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para adaptavelmente habilitar ou desabilitar (por exemplo, ligar ou desligar) OBMC implementando uma ou mais técnicas descritas com relação à nona técnica dessa revelação e uma ou mais técnicas descritas com relação à décima técnica dessa revelação. Por exemplo, quando o flag OBMC é sinalizado para uma CU ou PU, o decodificador de vídeo 30 pode ser configurado para executar (por exemplo, habilitar ou aplicar) ou não executar (por exemplo, desabilitar ou não aplicar) OBMC com base no valor do flag OBMC. Como outro exemplo, quando o flag OBMC não é sinalizado para uma CU ou PU, o decodificador de vídeo 30 pode ser configurado para executar (por exemplo, habilitar ou aplicar) ou não executar (por exemplo, desabilitar ou não aplicar) OBMC usando um ou mais métodos descritos acima com relação à décima técnica dessa revelação.
[00154] De acordo com uma décima segunda técnica dessa revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC em todos os limites de bloco compensados em movimento (MC). Em alguns exemplos o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC em todos os limites de bloco compensados em movi mento (MC) exceto os limites direito e inferior de um bloco (por exemplo, uma CU). Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC em componentes de luma e/ou croma.
[00155] Em HEVC, um bloco MC corresponde a uma PU. Quando uma PU é codificada com modo ATMVP em HEVC, cada sub-PU (4x4) é um bloco MC. Para processar limites de CU, PU ou sub-PU em um modo uniforme, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC de acordo com uma ou mais técnicas descritas aqui no nível de sub-bloco para todos os limites de bloco MC do bloco atual. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para definir o tamanho de sub-bloco igual a 4x4, como ilustrado na figura 8.
[00156] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar OBMC no sub-bloco atual. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para derivar um ou mais blocos de predição para o sub-bloco atual. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para derivar quatro blocos de predição para o sub-bloco atual usando vetores de movimento de quatro sub-blocos vizinhos conectados (por exemplo, quatro sub- blocos que compartilham uma fronteira com o sub-bloco atual) se disponíveis. Como outro exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para derivar quatro blocos de predição para o sub-bloco atual usando vetores de movimento de quatro sub- blocos vizinhos conectados (por exemplo, quatro sub-blocos que compartilham uma fronteira com o sub-bloco atual) se estiverem disponíveis e não forem idênticos ao vetor de movimento atual para o bloco atual. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada nesses múltiplos blocos de predição (por exemplo, os quatro blocos de predição com base nos quatro sub-blocos vizinhos conectados) com base em múltiplos vetores de movimento (por exemplo, um vetor de movimento associado a cada dos quatro blocos de predição, ou dois vetores de movimento associados a cada dos quatro blocos de predição como descrito abaixo). Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para executar uma média ponderada para gerar o bloco de perdição final do sub-bloco atual. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar múltiplos vetores de movimento para obter múltiplas amostras de predição, a seguir aplicar uma média ponderada às amostras. O bloco de predição final pode se referir a um bloco de pixels previstos para pixels no sub-bloco atual. Observe que os exemplos acima nesses parágrafos se aplicam a predição unidirecional, porém em exemplos envolvendo predição bidirecional, o bloco de predição nos exemplos acima pode ser gerado usando dois vetores de movimento a partir de cada dos quatro blocos vizinhos.
[00157] Em alguns exemplos, o bloco de predição baseado em um ou mais vetores de movimento de um sub-bloco vizinho pode ser indicado como PN, onde N é um índice para o sub-bloco vizinho. Dito de outro modo, N identifica se o bloco de predição é o sub-bloco vizinho acima, abaixo, à esquerda ou à direita. O bloco de predição baseado em um ou mais vetores de movimento do sub-bloco atual pode ser indicado como PC. Em alguns exemplos, todo pixel de PN é adicionado ao mesmo pixel em Pc (por exemplo, quatro fileiras e/ou colunas de PN são adicionados a PC). Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para usar os fatores de ponderação de {1/4, 1/8, 1/16, 1/32} para PN, e os fatores de ponderação de {3/4, 7/8, 15/16, 31/32} para PC. Para manter o custo computacional baixo para blocos MC pequenos (por exemplo, onde o tamanho de PU é igual a 8x4, 4x8, ou uma PU é codificada com modo ATMVP), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para somente adicionar duas fileiras e/ou colunas de PN a PC. Em tais exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para aplicar fatores de ponderação de {1/4, 1/8} para PN e fator de ponderação para {3/4, 7/8} para PC. Para cada PN gerado com base em um ou mais vetores de movimento de um sub-bloco vizinho vertical (Por exemplo, superior ou inferior), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para adicionar pixels na mesma fileira de PN a PC com um mesmo fator de ponderação. Para cada PN gerado com base em um ou mais vetores de movimento de um sub-bloco vizinho horizontal (por exemplo, esquerda ou direita), o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para adicionar pixels na mesma coluna de PN a PC com um mesmo fator de ponderação.
[00158] A figura 9 é um diagrama de blocos ilustrando um codificador de vídeo 20 que pode implementar as técnicas descritas nessa revelação. O codificador de vídeo 20 pode executar intra- e inter-codificação de blocos de vídeo nas fatias de vídeo. Intra-codificação se baseia em predição espacial para reduzir ou remover redundância espacial em vídeo em um dado quadro ou imagem de vídeo. Inter-codificação se baseia em predição temporal para reduzir ou remover redundância temporal em vídeo em quadros ou imagens adjacentes de uma sequência de vídeo. Intra-modo (modo I) pode se referir a qualquer de vários modos de compressão de base espacial. Inter-modos, como predição unidirecional (modo P) ou bi-predição (modo B) podem se referir a qualquer de vários modos de compressão de base temporal.
[00159] No exemplo da figura 9, o codificador de vídeo 20 inclui uma memória de dados de vídeo 33, unidade de divisão 35, unidade de processamento de predição 41, somador 50, unidade de processamento de transformada 52, unidade de quantização 54, unidade de codificação por entropia 56. A unidade de processamento de predição 41 inclui unidade de estimação de movimento (MEU) 42, unidade de compensação de movimento (MCU) 44 e unidade de intra predição 46. Para reconstrução de bloco de vídeo, o codificador de vídeo 20 também inclui unidade de quantização inversa 58, unidade de processamento de transformada inversa 60, somador 62, unidade de filtro 64 e buffer de imagem decodificada DPB) 66. Um ou mais componentes da figura 9 podem executar uma ou mais técnicas descritas nessa revelação.
[00160] Como mostrado na figura 9, o codificador de vídeo 20 recebe dados de vídeo e armazena os dados de vídeo recebidos na memória de dados de vídeo 33. A memória de dados de vídeo 33 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 33 podem ser obtidos, por exemplo, a partir da fonte de vídeo 18. DPB 66 pode ser uma memória de imagem de referência que armazena dados de vídeo de referência para uso na codificação de dados de vídeo pelo codificador de vídeo 20, por exemplo, em modos intra- ou inter- codificação. A memória de dados de vídeo 33 e DPB 66 podem ser formados por qualquer de uma variedade de dispositivos de memória, como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magneto resistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 33 e DPB 66 podem ser fornecidos pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 33 pode ser em-chip com outros componentes de codificador de vídeo 20, ou fora de chip em relação àqueles componentes.
[00161] A unidade de divisão 35 recupera os dados de vídeo a partir da memória de dados de vídeo 33 e divide os dados de vídeo em blocos de vídeo. Essa divisão pode incluir também dividir em fatias, tiles ou outras unidades maiores, bem como divisão de bloco de vídeo, por exemplo, de acordo com uma estrutura de quadtree de LCUs e CUs. O codificador de vídeo 20 ilustra em geral os componentes que codificam blocos de vídeo em uma fatia de vídeo a ser codificada. A fatia pode ser dividida em múltiplos blocos de vídeo (e possivelmente em conjuntos de blocos de vídeo mencionados como tiles). A unidade de processamento de predição 41 pode selecionar um de uma pluralidade de modos de codificação possíveis, como um de uma pluralidade de modos de intra codificação ou um de uma pluralidade de modos de inter codificação, para o bloco de vídeo atual com base em resultados de erro (por exemplo, taxa de codificação e o nível de distorção). A unidade de processamento de predição 41 pode fornecer o bloco intraou inter-codificado resultante para o somador 50 para gerar dados de bloco residual e para o somador 62 para reconstruir o bloco codificado para uso como uma imagem de referência.
[00162] A unidade de intra predição 46 na unidade de processamento de predição 41 pode executar codificação intra-preditiva do bloco de vídeo atual em relação a um ou mais blocos vizinhos no mesmo quadro ou fatia que o bloco atual a ser codificado para fornecer compressão espacial. A unidade de estimação de movimento 42 e unidade de compensação de movimento 44 na unidade de processamento de predição 41 executam codificação inter- preditiva do bloco de vídeo atual em relação a um ou mais blocos preditivos em uma ou mais imagens de referência para fornecer compressão temporal.
[00163] A unidade de estimação de movimento 42 pode ser configurada para determinar o modo de inter- predição para uma fatia de vídeo de acordo com um padrão predeterminado para uma sequência de vídeo. O padrão predeterminado pode designar fatias de vídeo na sequência como fatias P ou fatias B. a unidade de estimação de movimento 42 e a unidade de compensação de movimento 44 podem ser altamente integradas, porém são ilustradas separadamente para fins conceptuais. A estimação de movimento, executada pela unidade de estimação de movimento 42, é o processo de gerar vetores de movimento, que estimam movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de uma PU de um bloco de vídeo em um quadro ou imagem de vídeo atual em relação a um bloco preditivo compreendido em uma imagem de referência.
[00164] Um bloco preditivo é um bloco que se verificar casar estreitamente com a PU do bloco de vídeo a ser codificado em termos de diferença de pixel, que pode ser determinada pela soma de diferença absoluta (SAD), soma de diferença quadrada (SSD) ou outras métricas de diferença. Em alguns exemplos, o codificador de vídeo 20 pode calcular valores para posições de pixel de sub-inteiro de imagens de referência armazenadas em DPB 66. Por exemplo, o codificador de vídeo 20 pode interpolar valores de posições de pixel de um quarto, posições de pixel de um oitavo, ou outras posições de pixel fracional da imagem de referência. Portanto, a unidade de estimação de movimento 42 pode executar uma busca de movimento em relação às posições de pixel total e posições de pixel fracional e transmitir um vetor de movimento com precisão de pixel fracional.
[00165] A unidade de estimação de movimento 42 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia inter-codificada por comparar a posição da PU com a posição de um bloco preditivo de uma imagem de referência. A imagem de referência pode ser selecionada de uma primeira lista de imagem de referência (Lista 0) ou uma segunda lista de imagem de referência (Lista 1), cada uma das quais identifica uma ou mais imagens de referência armazenadas em DPB 66. A unidade de estimação de movimento 42 envia o vetor de movimento calculado para unidade de codificação por entropia 56 e unidade de compensação de movimento 44.
[00166] Compensação de movimento, executada pela unidade de compensação de movimento 44, pode envolver buscar ou gerar o bloco preditivo com base no vetor de movimento determinado pela estimação de movimento, possivelmente executando interpolações com precisão de subpixel. Após receber o vetor de movimento para a PU do bloco de vídeo atual, a unidade de compensação de movimento 44 pode localizar o bloco preditivo para o qual o vetor de movimento aponta em uma das listas de imagem de referência. O codificador de vídeo 20 forma um bloco de vídeo residual por subtrair valores de pixel do bloco preditivo a partir dos valores de pixel do bloco de vídeo atual sendo codificado, formando valores de diferença de pixel. Os valores de diferença de pixel formam dados residuais para o bloco, e podem incluir componentes de diferença tanto luma como croma. O somador 50 representa o componente ou componentes que executam essa operação de subtração. A unidade de compensação de movimento 44 pode gerar também elementos de sintaxe associados aos blocos de vídeo e a fatia de vídeo para uso pelo decodificador de vídeo 30 na decodificação dos blocos de vídeo da fatia de vídeo.
[00167] Após a unidade de processamento de predição 41 gerar o bloco preditivo para o bloco de vídeo atual, através de intra predição ou inter predição, o codificador de vídeo 20 forma um bloco de vídeo residual por subtrair o bloco preditivo a partir do bloco de vídeo atual. Os dados de vídeo residuais no bloco residual podem ser incluídos em uma ou mais TUs e aplicados à unidade de processamento de transformada 52. A unidade de processamento de transformada 52 transforma os dados de vídeo residuais em coeficientes de transformada residual usando uma transformada, como uma transformada de cosseno discreto (DCT) ou uma transformada conceptualmente similar. A unidade de processamento de transformada 52 pode converter os dados de vídeo residuais a partir de um domínio de pixel em um domínio de transformada, como um domínio de frequência.
[00168] A unidade de processamento de transformada 52 pode enviar os coeficientes de transformada resultantes para a unidade de quantização 54. A unidade de quantização 54 quantiza os coeficientes de transformada para reduzir adicionalmente a velocidade de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. O grau de quantização pode ser modificado por ajustar um parâmetro de quantização. Em alguns exemplos, a unidade de quantização 54 pode então executar uma varredura da matriz incluindo os coeficientes de transformada quantizada. Alternativamente, a unidade de codificação por entropia 56 pode executar a varredura.
[00169] Após quantização, a unidade de codificação por entropia 56 codifica por entropia os coeficientes de transformada quantizada. Por exemplo, a unidade de codificação por entropia 56 pode executar codificação de comprimento variável adaptável a contexto (CAVLC), codificação aritmética binária adaptável a contexto (CABAC), codificação aritmética binária adaptável a contexto baseada em sintaxe (SBAC), codificação por entropia de divisão de intervalo de probabilidade (PIPE) ou outra técnica ou metodologia de codificação por entropia. Após a codificação por entropia pela unidade de codificação por entropia 56, o fluxo de bits codificado pode ser transmitido para o decodificador de vídeo 30, ou arquivado para transmissão posterior ou recuperação pelo decodificador de vídeo 30. A unidade de codificação por entropia 56 pode também codificar por entropia os vetores de movimento e os outros elementos de sintaxe para a fatia de vídeo atual sendo codificada.
[00170] A unidade de quantização inversa 58 e a unidade de processamento de transformada inversa 60 aplicam quantização inversa e transformação inversa, respectivamente, para reconstruir o bloco residual no domínio de pixel para uso posterior como um bloco de referência de uma imagem de referência. A unidade de compensação de movimento 44 pode calcular um bloco de referência por adicionar o bloco residual a um bloco preditivo de uma das imagens de referência em uma das listas de imagem de referência. A unidade de compensação de movimento 44 pode também aplicar um ou mais filtros de interpolação ao bloco residual reconstruído para calcular os valores de pixel de sub-inteiro para uso em estimação de movimento. O somador 62 adiciona o bloco residual reconstruído ao bloco de predição compensado por movimento produzido pela unidade de compensação de movimento 44 para produzir um bloco reconstruído.
[00171] A unidade de filtro 64 filtra o bloco reconstruído (por exemplo, a saída do somador 62) e armazena o bloco reconstruído filtrado em DPB 66 para usos como um bloco de referência. O bloco de referência pode ser usado pela unidade de estimação de movimento 42 e unidade de compensação de movimento 44 como um bloco de referência para inter-prever um bloco em uma imagem ou quadro de vídeo subsequente. A unidade de filtro 64 pode aplicar um ou mais entre filtração de desbloqueio, filtração de deslocamento adaptável de amostra (SÃO), filtração de loop adaptável (ALF), ou outros tipos de filtração de loop. A unidade de filtro 64 pode aplicar filtração de desbloqueio a limites de bloco de filtro para remover artefatos de bloqueio a partir do vídeo reconstruído e pode aplicar outros tipos de filtração para melhorar a qualidade de codificação geral. Filtros de loop adicionais (em loop ou pós loop) também podem ser usados.
[00172] O codificador de vídeo 20 representa um exemplo de um codificador de vídeo configurado para executar OBMC baseado em sub-bloco, OBMC baseado em sub-PU, OBMC baseado em limite de CU, ou qualquer combinação dos mesmos.
[00173] A figura 10 é um diagrama de blocos ilustrando um decodificador de vídeo de exemplo 30 que pode implementar as técnicas descritas nessa revelação. No exemplo da figura 10, o decodificador de vídeo 30 inclui memória de dados de vídeo 78, unidade de decodificação por entropia 80, unidade de processamento por predição 81, unidade de quantização inversa 86, unidade de processamento de transformada inversa 88, somador 90 e DPB 94. A unidade de processamento por predição 81 inclui unidade de compensação de movimento 82 e unidade intra predição 84. O decodificador de vídeo 30 pode, em alguns exemplos, executar uma passagem de decodificação em geral recíproca com a passagem de codificação descrita com relação ao codificador de vídeo 20 a partir da figura 9. Um ou mais componentes da figura 10 pode executar uma ou mais técnicas descritas nessa revelação.
[00174] Durante o processo de decodificação, o decodificador de vídeo 30 recebe um fluxo de bits de vídeo codificado que representa blocos de vídeo de uma fatia de vídeo codificada e elementos de sintaxe associados a partir do codificador de vídeo 20. O decodificador de vídeo 30 armazena o fluxo de bits de vídeo codificado recebido na memória de dados de vídeo 78. A memória de dados de vídeo 78 pode armazenar dados de vídeo, como um fluxo de bits de vídeo codificado, para serem decodificados pelos componentes do decodificador de vídeo 30. Os dados de vídeo armazenados na memória de dados de vídeo 78 podem ser obtidos, por exemplo, através do link 16, a partir do dispositivo de armazenagem 26, ou a partir de uma fonte de vídeo local, como uma câmera, ou por acessar mídia de armazenagem de dados físicos. A memória de dados de vídeo 78 pode formar um buffer de imagem codificada (CPB) que armazena dados de vídeo codificados a partir de um fluxo de bits de vídeo codificado. DPB 94 pode ser uma memória de imagem de referência que armazena dados de vídeo de referência para uso na decodificação de dados de vídeo pelo decodificador de vídeo 30, por exemplo, em modos intra- ou inter-codificação. A memória de dados de vídeo 78 e DPB 94 podem ser formados por qualquer de uma variedade de dispositivos de memória, como DRAM, SDRAM, MRAM, RRAM, ou outros tipos de dispositivos de memória. A memória de dados de vídeo 78 e DPB 94 podem ser fornecidos pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 78 pode estar no chip com outros componentes do decodificador de vídeo 30 ou fora do chip em relação àqueles componentes.
[00175] A unidade de decodificação por entropia 80 do decodificador de vídeo 30 decodifica por entropia os dados de vídeo armazenados em memória de dados de vídeo 78 para gerar coeficientes quantizados, vetores de movimento e outros elementos de sintaxe. A unidade de decodificação por entropia 80 envia os vetores de movimento e outros elementos de sintaxe para a unidade de processamento de predição 81. O decodificador de vídeo 30 pode receber os elementos de sintaxe no nível de fatia de vídeo e/ou no nível de bloco de vídeo.
[00176] Quando a fatia de vídeo é codificada como uma fatia intra-codificada (I), a unidade de intra predição 84 da unidade de processamento de predição 81 pode gerar dados de predição para um bloco de vídeo da fatia de vídeo atual com base em um modo intra predição sinalizado e dados a partir de blocos anteriormente decodificados do quadro ou imagem atual. Quando o quadro de vídeo é codificado como uma fatia inter-codificada (isto é, B ou P), a unidade de compensação de movimento 82 da unidade de processamento de predição 81 produz blocos preditivos para um bloco de vídeo da fatia de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe recebidos a partir da unidade de decodificação por entropia 80. Os blocos preditivos podem ser produzidos a partir de uma das imagens de referência em uma das listas de imagem de referência. O decodificador de vídeo 30 pode construir as listas de quadro de referência, Lista 0 e Lista 1, usando técnicas de construção default com base em imagens de referência armazenadas em DPB 94.
[00177] A unidade de compensação de movimento 82 determina informações de perdição para um bloco de vídeo da fatia de vídeo atual por analisar os vetores de movimento e outros elementos de sintaxe, e usa as informações de predição para produzir os blocos preditivos para o bloco de vídeo atual sendo decodificado. Por exemplo, a unidade de compensação de movimento 82 usa alguns dos elementos de sintaxe recebidos para determinar um modo de predição (por exemplo, intra- ou inter-predição) usado para codificar os blocos de vídeo da fatia de vídeo, um tipo de fatia inter-predição (por exemplo, fatia B ou fatia P), informações de construção para uma ou mais das listas de imagem de referência para a fatia, vetores de movimento para cada bloco de vídeo Inter-codificado da fatia, status de inter-predição para cada bloco de vídeo inter-codificado da fatia, e outras informações para decodificar os blocos de vídeo na fatia de vídeo atual.
[00178] A unidade de compensação de movimento 82 pode executar também interpolação baseada em filtros de interpolação. A unidade de compensação de movimento 82 pode usar filtros de interpolação como usado pelo codificador de vídeo 20 durante codificação dos blocos de vídeo para calcular valores interpolados para pixels sub-inteiro de blocos de referência. Nesse caso, a unidade de compensação de movimento 82 pode determinar os filtros de interpolação usados pelo codificador de vídeo 20 a partir dos elementos de sintaxe recebidos e usar os filtros de interpolação para produzir blocos preditivos.
[00179] A unidade de quantização inversa 86 quantiza inverso, isto é, desquantiza, os coeficientes de transformada quantizada fornecidos no fluxo de bits e decodificados pela unidade de decodificação por entropia 80. O processo de quantização inversa pode incluir uso de um parâmetro de quantização calculado pelo codificador de vídeo 20 para cada bloco de vídeo na fatia de vídeo para determinar um grau de quantização e, de modo semelhante, um grau de quantização inversa que deve ser aplicado. A unidade de processamento de transformada inversa 88 aplica uma transformada inversa, por exemplo, uma DCT inversa, uma transformada de inteiro inversa, ou um processo de transformada inversa conceptualmente similar, aos coeficientes de transformada para produzir blocos residuais no domínio de pixel.
[00180] Após a unidade de processamento de predição gerar o bloco preditivo para o bloco de vídeo atual usando, por exemplo, intra ou inter predição, o decodificador de vídeo 30 forma um bloco de vídeo reconstruído por somar os blocos residuais a partir da unidade de processamento de transformada inversa 88 com os blocos preditivos correspondentes gerados pela unidade de compensação de movimento 82. O somador 90 representa o componente ou componentes que executam essa operação de soma. A unidade de filtro 92 filtra o bloco de vídeo reconstruído usando, por exemplo, um ou mais entre filtração de desbloqueio, filtração SÃO, filtração ALF, ou outros tipos de filtração. Outros filtros de loop (no loop de codificação ou após o loop de codificação) também podem ser usados para suavizar transições de pixel ou de outro modo melhorar a qualidade de vídeo. Os blocos de vídeo decodificados em um dado quadro ou imagem são então armazenados em DPB 94, que armazena imagens de referência usadas para compensação de movimento subsequente. DPB 94 pode ser parte de ou separado de memória adicional que armazena vídeo decodificado para apresentação posterior em um dispositivo de display, como dispositivo de display 32 da figura 1.
[00181] O decodificador de vídeo 30 representa um exemplo de um decodificador de vídeo configurado para executar OBMC baseado em sub-bloco, OBMC baseado em sub-PU, OBMC baseado em limite de CU, ou qualquer combinação dos mesmos. Por exemplo, o decodificador de vídeo 30 pode ser configurado para receber um primeiro bloco de dados de vídeo que é, nesse exemplo, um sub-bloco de uma unidade de predição. O decodificador de vídeo 30 pode ser configurado para receber um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo, determinar pelo menos um vetor de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo, e decodificar, usando compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo com base pelo menos em parte em pelo menos um vetor de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo.
[00182] A figura 11 é um fluxograma ilustrando um processo de exemplo para decodificar dados de vídeo compatíveis com técnicas dessa revelação. O processo da figura 11 é descrito em geral como sendo executado pelo decodificador de vídeo 30 para fins de ilustração, embora uma variedade de outros processadores também possa realizar o processo mostrado na figura 11. Em alguns exemplos, a memória de dados de vídeo 78, a unidade de decodificação por entropia 80 e/ou unidade de processamento de predição 81 podem executar um ou mais processos mostrados na figura 11.
[00183] No exemplo da figura 11, o decodificador de vídeo 30 pode ser configurado para receber um primeiro bloco de dados de vídeo (200). Em alguns exemplos, o primeiro bloco de dados de vídeo é um sub-bloco de uma unidade de predição. Em alguns exemplos, o primeiro bloco de dados de vídeo é um sub-bloco quadrado ou um sub- bloco não quadrado de uma unidade de predição.
[00184] O decodificador de vídeo 30 pode ser configurado para receber um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo (202). Em alguns exemplos, um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de vídeo são sub- blocos quadrados, sub-blocos não quadrados ou uma combinação de pelo menos um sub-bloco quadrado e pelo menos um sub-bloco não quadrado.
[00185] O decodificador de vídeo 30 pode ser configurado para determinar informações de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo (204). Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para determinar pelo menos um vetor de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo por decodificar pelo menos um bloco de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. O decodificador de vídeo 30 pode ser configurado para decodificar, usando compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo com base pelo menos em parte na informação de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo (206).
[00186] Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para determinar se pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo não é decodificado. Em tais exemplos, o decodificador de vídeo 30 pode ser configurado para decodificar o primeiro bloco de dados de vídeo sem usar informação de movimento correspondendo a pelo menos um bloco de um ou mais blocos determinados como sendo não decodificados.
[00187] Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para gerar um primeiro bloco de predição para o primeiro bloco de dados de vídeo. O primeiro bloco de predição pode incluir um valor para cada posição de pixel para o primeiro bloco de dados de vídeo. O decodificador de vídeo 30 pode ser configurado para gerar um bloco de predição vizinho para pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de vídeo. O bloco de predição vizinho pode incluir um valor para cada posição de pixel para pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de vídeo. O decodificador de vídeo 30 pode ser configurado para modificar um ou mais valores do primeiro bloco de predição com base em um ou mais valores do bloco de predição vizinho para gerar um primeiro bloco de predição modificado. O decodificador de vídeo 30 pode ser configurado para decodificar o primeiro bloco de dados de vídeo usando o primeiro bloco de predição modificado.
[00188] Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para atribuir um primeiro valor ponderado a um ou mais valores do primeiro bloco de predição. O decodificador de vídeo 30 pode ser configurado para atribuir um segundo valor ponderado a um ou mais valores do bloco de predição vizinho. O decodificador de vídeo 30 pode ser configurado para modificar um ou mais valores do primeiro bloco de predição com base no primeiro valor ponderado e o segundo valor ponderado para gerar o primeiro bloco de predição modificado.
[00189] Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para gerar um primeiro bloco de predição para o primeiro bloco de dados de vídeo. O primeiro bloco de predição pode incluir um valor para cada posição de pixel para o primeiro bloco de dados de vídeo. O decodificador de vídeo 30 pode ser configurado para atribuir, com base em um tamanho do primeiro bloco de dados de vídeo, um ou mais valores ponderados a um ou mais valores do primeiro bloco de predição. O decodificador de vídeo 30 pode ser configurado para decodificar o primeiro bloco de dados de vídeo usando um ou mais valores ponderados atribuídos a um ou mais valores do primeiro bloco de predição. Em tal exemplo, o decodificador de vídeo 30 pode ser configurado para gerar um primeiro bloco de predição vizinho com base na informação de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. O decodificador de vídeo 30 pode ser configurado para atribuir, com base em um tamanho do primeiro bloco de vizinho, um ou mais valores ponderados a um ou mais valores do primeiro bloco de predição vizinho. O decodificador de vídeo 30 pode ser configurado para decodificar o primeiro bloco de dados de vídeo usando um ou mais valores ponderados atribuídos a um ou mais valores do primeiro bloco de predição vizinho.
[00190] Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para modificar um ou mais valores do primeiro bloco de predição com base em um ou mais valores ponderados atribuídos a um ou mais valores do primeiro bloco de predição vizinho para gerar um primeiro bloco de predição modificado, e decodificar o primeiro bloco de dados de vídeo usando o primeiro bloco de predição modificado. Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para gerar um segundo bloco de predição vizinho com base na informação de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. Em tais exemplos, o decodificador de vídeo 30 pode ser configurado para atribuir, com base em um tamanho do segundo bloco vizinho, um ou mais valores ponderados a um ou mais valores do segundo bloco de predição vizinho. O decodificador de vídeo 30 pode ser configurado para modificar um ou mais valores do primeiro bloco e bloco de predição com base em um ou mais valores ponderados atribuídos a um ou mais valores do primeiro e segundo blocos de predição vizinhos para gerar o primeiro bloco de predição modificado.
[00191] Em alguns exemplos, o decodificador de vídeo 30 pode ser configurado para receber um elemento de sintaxe tendo um valor representativo de se o primeiro bloco de dados de vídeo é codificado de acordo com um modo de compensação de movimento de bloco sobreposto. Por exemplo, o elemento de sintaxe pode ser recebido em um fluxo de bits gerado por um codificador de vídeo (por exemplo, codificador de vídeo 20). O decodificador de vídeo 30 pode ser configurado para determinar que o primeiro bloco de dados de vídeo é codificado de acordo com o modo de compensação de movimento de bloco sobreposto com base no valor do elemento de sintaxe.
[00192] A figura 12 é um fluxograma ilustrando um processo de exemplo para codificar dados de vídeo compatíveis com técnicas dessa revelação. O processo da figura 12 é descrito em geral como sendo executado por um codificador de vídeo para fins de ilustração, embora uma variedade de outros processadores possa também realizar o processo mostrado na figura 12. Como usado aqui, um codificador de vídeo pode se referir a um codificador de vídeo e/ou um decodificador de vídeo (por exemplo, codificador de vídeo 20 e/ou decodificador de vídeo 30). Em alguns exemplos, a memória de dados de vídeo 33, unidade de divisão 35, unidade de processamento de predição 41, e/ou unidade de codificação por entropia 56 podem executar um ou mais processos mostrados na figura 12. Em alguns exemplos, a memória de dados de vídeo 78, unidade de decodificação por entropia 80, e/ou unidade de processamento de predição 81 podem executar um ou mais processos mostrados na figura 12.
[00193] No exemplo da figura 12, um codificador de vídeo pode ser configurado para armazenar um primeiro bloco de dados de vídeo em uma memória (220). Em alguns exemplos, um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de vídeo são sub-blocos quadrados, sub-blocos não quadrados, ou uma combinação de pelo menos um sub-bloco quadrado e pelo menos um sub-bloco não quadrado.
[00194] O codificador de vídeo pode ser configurado para armazenar um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo na memória (222). Em alguns exemplos, um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de vídeo são sub-blocos quadrados, sub-blocos não quadrados, ou uma combinação de pelo menos um sub-bloco quadrado e pelo menos um sub-bloco não quadrado.
[00195] O codificador de vídeo pode ser configurado para determinar informação de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo (224). Em alguns exemplos, o codificador de vídeo pode ser configurado para determinar pelo menos um vetor de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo por codificar pelo menos um bloco de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. Em alguns exemplos, o codificador de vídeo pode ser configurado para codificar, usando compensação de movimento de bloco sobreposto, o primeiro bloco de dados de vídeo com base pelo menos em parte na informação de movimento de pelo menos um de um ou mais blocos que são vizinhos do primeiro bloco de dados de vídeo (226).
[00196] Em alguns exemplos, o codificador de vídeo pode ser configurado para determinar se pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo não é codificado. Em tais exemplos, o codificador de vídeo pode ser configurado para codificar o primeiro bloco de dados de vídeo sem usar informação de movimento correspondendo a pelo menos um bloco de um ou mais blocos determinados como sendo não codificado.
[00197] Em alguns exemplos, o codificador de vídeo pode ser configurado para gerar um primeiro bloco de predição para o primeiro bloco de dados de vídeo. O primeiro bloco de predição pode incluir um valor para cada posição de pixel para o primeiro bloco de dados de vídeo. O codificador de vídeo pode ser configurado para gerar um bloco de predição vizinho para pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de vídeo. O bloco de predição vizinho pode incluir um valor para cada posição de pixel para pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de vídeo. O codificador de vídeo pode ser configurado para modificar um ou mais valores do primeiro bloco de predição com base em um ou mais valores do bloco de predição vizinho para gerar um primeiro bloco de predição modificado. O codificador de vídeo pode ser configurado para codificar o primeiro bloco de dados de vídeo usando o primeiro bloco de predição modificado.
[00198] Em alguns exemplos, o codificador de vídeo pode ser configurado para atribuir um primeiro valor ponderado a um ou mais valores do primeiro bloco de predição. O codificador de vídeo pode ser configurado para atribuir um segundo valor ponderado a um ou mais valores do bloco de predição vizinho. O codificador de vídeo pode ser configurado para modificar um ou mais valores do primeiro bloco de predição com base no primeiro valor ponderado e segundo valor ponderado para gerar o primeiro bloco de predição modificado.
[00199] Em alguns exemplos, o codificador de vídeo pode ser configurado para gerar um primeiro bloco de predição para o primeiro bloco de dados de vídeo. O primeiro bloco de predição pode incluir um valor para cada posição de pixel para o primeiro bloco de dados de vídeo. O codificador de vídeo pode ser configurado para atribuir, com base em um tamanho do primeiro bloco de dados de vídeo, um ou mais valores ponderados a um ou mais valores do primeiro bloco de predição. O codificador de vídeo pode ser configurado para codificar o primeiro bloco de dados de vídeo usando um ou mais valores ponderados atribuídos a um ou mais valores do primeiro bloco de predição. Em tais exemplos, o codificador de vídeo pode ser configurado para gerar um primeiro bloco de predição vizinho com base na informação de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. O codificador de vídeo pode ser configurado para atribuir, com base em um tamanho do primeiro bloco vizinho, um ou mais valores ponderados para um ou mais valores do primeiro bloco de predição vizinho. O codificador de vídeo pode ser configurado para codificar o primeiro bloco de dados de vídeo usando um ou mais valores ponderados atribuídos a um ou mais valores do primeiro bloco de predição vizinho.
[00200] Em alguns exemplos, o codificador de vídeo pode ser configurado para modificar um ou mais valores do primeiro bloco de predição com base em um ou mais valores ponderados atribuídos a um ou mais valores do primeiro bloco de predição vizinho para gerar um primeiro bloco de predição modificado, e codificar o primeiro bloco de dados de vídeo usando o primeiro bloco de predição modificado. Em alguns exemplos, o codificador de vídeo pode ser configurado para gerar um segundo bloco de predição vizinho com base na informação de movimento de pelo menos um de um ou mais blocos de dados de vídeo que são vizinhos do primeiro bloco de dados de vídeo. Em tais exemplos, o codificador de vídeo pode ser configurado para atribuir, com base em um tamanho do segundo bloco vizinho, um ou mais valores ponderados a um ou mais valores do segundo bloco de predição vizinho. O codificador de vídeo pode ser configurado para modificar um ou mais valores do primeiro bloco e bloco de perdição com base em um ou mais valores ponderados atribuídos a um ou mais valores do primeiro e segundo blocos de predição vizinhos para gerar o primeiro bloco de predição modificado.
[00201] Em alguns exemplos, o codificador de vídeo pode ser configurado para receber um elemento de sintaxe tendo um valor representativo de se o primeiro bloco de dados de vídeo é codificado de acordo com um modo de compensação de movimento de bloco sobreposto. Por exemplo, o elemento de sintaxe pode ser recebido em um fluxo de bits gerado por um codificador de vídeo (por exemplo, codificador de vídeo 20). O codificador de vídeo 30 pode ser configurado para determinar que o primeiro bloco de dados de vídeo é codificado de acordo com o modo de compensação de movimento de bloco sobreposto com base no valor do elemento de sintaxe.
[00202] Em alguns exemplos, o codificador de vídeo pode ser configurado para gerar um elemento de sintaxe tendo um valor representativo de se o primeiro bloco de dados de vídeo é codificado de acordo com um modo de compensação de movimento de bloco sobreposto. Em tais exemplos, o codificador de vídeo pode ser configurado para transmitir o elemento de sintaxe em um fluxo de bits, que pode ser recebido por um decodificador de vídeo (por exemplo, decodificador de vídeo 30).
[00203] Deve ser entendido que todas as técnicas descritas aqui podem ser usadas individualmente ou em combinação. Por exemplo, o codificador de vídeo 20 e/ou um ou mais componentes do mesmo e decodificador de vídeo 30 e/ou um ou mais componentes do mesmo podem executar as técnicas descritas nessa revelação em qualquer combinação. Como outro exemplo, as técnicas descritas aqui podem ser executadas pelo codificador de vídeo 20 (figuras 1 e 9) e/ou decodificador de vídeo 30 (figuras 1 e 10), ambos os quais podem ser mencionados em geral como um codificador de vídeo. De modo semelhante, a codificação de vídeo pode se referir à codificação de vídeo ou decodificação de vídeo, como aplicável.
[00204] Deve ser reconhecido que dependendo do exemplo, certos atos ou eventos de qualquer das técnicas descritas aqui podem ser executados em uma sequência diferente, podem ser adicionados, fundidos, ou deixados totalmente de fora (por exemplo, nem todos os atos ou eventos descritos são necessários para a prática das técnicas). Além disso, em certos exemplos, atos ou eventos podem ser executados simultaneamente, por exemplo, através de processamento multi-threaded, processamento de interrupção, ou múltiplos processadores, ao invés de sequencialmente. Além disso, embora certos aspectos dessa revelação sejam descritos como sendo executados por um único módulo ou unidade para fins de clareza, deve ser entendido que as técnicas dessa revelação podem ser executadas por uma combinação de unidades ou módulos associados a um codificador de vídeo.
[00205] Certos aspectos dessa revelação foram descritos com relação a um ou mais padrões de codificação de vídeo - quer liberados, em desenvolvimento ou similares - para fins de ilustração. Entretanto, as técnicas descritas nessa revelação podem ser úteis para outros processos de codificação de vídeo, incluindo outros processos de codificação de vídeo de propriedade ou padrão não desenvolvidos ainda.
[00206] De acordo com essa revelação, o termo “ou” pode ser interpretado como “e/ou” onde o contexto não determine de outro modo. Adicionalmente, embora frases como “um ou mais” ou “pelo menos um” ou similar podem ter sido usadas para algumas características reveladas aqui, porém não outras, as características para as quais tal linguagem não foi usada podem ser interpretadas como tendo tal significado implícito onde o contexto não determine de outro modo.
[00207] Embora combinações específicas de vários aspectos das técnicas sejam descritas acima, essas combinações são fornecidas meramente para ilustrar exemplos das técnicas descritas nessa revelação. Por conseguinte, as técnicas dessa revelação não devem ser limitadas a essas combinações de exemplo e podem abranger qualquer combinação concebível dos vários aspectos das técnicas descritas nessa revelação.
[00208] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Se implementado em software, as funções podem ser armazenadas em ou transmitidas sobre, como uma ou mais instruções ou código, uma mídia legível em computador e executadas por uma unidade de processamento baseada em hardware. Mídia legível em computador pode incluir mídia de armazenagem legível em computador, que corresponde a uma mídia tangível como mídia de armazenagem de dados, ou mídia de comunicação incluindo qualquer mídia que facilite a transferência de um programa de computador a partir de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Desse modo, mídia legível em computador pode corresponder em geral a (1) mídia de armazenagem legível em computador que é não transitória ou (2) uma mídia de comunicação como um sinal ou onda portadora. Mídia de armazenagem de dados pode ser qualquer mídia disponível que pode ser acessada por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e/ou estruturas de dados para implementação das técnicas descritas nessa revelação. Um produto de programa de computador pode incluir uma mídia legível em computador.
[00209] Como exemplo, e não limitação, tal mídia legível em computador pode compreender RAM, ROM, EEPROM, CD-ROM ou outra armazenagem de disco ótico, armazenagem de disco magnético ou outros dispositivos de armazenagem magnética, memória flash, ou qualquer outra mídia que possa ser usada para armazenar código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessada por um computador. Também, qualquer conexão é adequadamente denominada uma mídia legível em computador. Por exemplo, se instruções são transmitidas de um website, servidor ou outra fonte remota usando um cabo coaxial, cabo de fibra ótica, par torcido, linha de assinante digital (DSL) ou tecnologias sem fio como infravermelho (IR), rádio e micro-ondas, então o cabo coaxial, cabo de fibra ótica, par torcido, DSL ou tecnologias sem fio como infravermelho, rádio e micro-ondas são incluídas na definição de mídia. Deve ser entendido, entretanto, que mídia de armazenagem legível em computador e mídia de armazenagem de dados não incluem conexões, ondas portadoras, sinais ou outra mídia transiente, porém são ao invés dirigidas a mídia de armazenagem tangível, não transite. Disk e disco, como usado aqui, incluem compact disc (CD), disc laser, disc ótico, digital versatile disc (DVD), disco flexível, e disc Blu-ray onde disks normalmente reproduzem dados magneticamente, enquanto discos reproduzem dados oticamente com lasers. Combinações do acima devem ser também incluídas no escopo de mídia legível em computador.
[00210] Instruções podem ser executadas por um ou mais processadores, como um ou mais processadores de sinais digitais (DSPs), microprocessadores de propósito geral, circuitos integrados de aplicação específica (ASICs), disposições de porta programáveis em campo (FPGAs) ou outro conjunto de circuitos de lógica discreta ou integrado. Por conseguinte, o termo “processador” como usado aqui pode se referir a qualquer da estrutura supra ou qualquer outra estrutura adequada para implementação das técnicas descritas aqui. Além disso, em alguns aspectos, a funcionalidade descrita aqui pode ser fornecida nos módulos de hardware e/ou software dedicados configurados para codificação e decodificação, ou incorporados em um codec combinado. Também, as técnicas podem ser totalmente implementadas em um ou mais circuitos ou elementos de lógica.
[00211] As técnicas dessa revelação podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um aparelho telefônico sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nessa revelação para enfatizar aspectos funcionais de dispositivos configurados para executar as técnicas reveladas, porém não exigem necessariamente a realização por unidades de hardware diferentes. Ao invés, como descrito acima, várias unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por uma coleção de unidades de hardware inter- operativas, incluindo um ou mais processadores como descrito acima, em combinação com software e/ou firmware adequado.
[00212] Vários exemplos foram descritos aqui. Qualquer combinação dos sistemas, operações, funções ou exemplos descritos é considerada. Esses e outros exemplos estão compreendidos no escopo das reivindicações a seguir.

Claims (14)

1. Método para decodificar dados de vídeo, caracterizado pelo fato de que compreende: receber uma primeira unidade de codificação de dados de vídeo, em que a primeira unidade de codificação de dados de vídeo compreende uma pluralidade de sub-blocos incluindo um primeiro sub-bloco; receber um ou mais sub-blocos de uma segunda unidade de codificação de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo; receber um elemento de sintaxe tendo um valor representativo de se o primeiro sub-bloco de dados de vídeo é codificado de acordo com um modo de compensação de movimento de bloco sobreposto, em que o valor do elemento de sintaxe é um primeiro valor ou segundo valor, em que o primeiro valor indica que o primeiro sub-bloco de dados de vídeo é codificado de acordo com o modo de compensação de movimento de bloco sobreposto, e em que o segundo valor indica que o primeiro sub-bloco de dados de vídeo não é codificado de acordo com o modo de compensação de movimento de bloco sobreposto; determinar que o primeiro sub-bloco de dados de vídeo é codificado de acordo com o modo de compensação de movimento de bloco sobreposto com base no valor do elemento de sintaxe sendo igual ao primeiro valor; determinar informação de movimento de pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo; e decodificar, usando compensação de movimento de bloco sobreposto, o primeiro sub-bloco de dados de vídeo com base, pelo menos em parte, na informação de movimento do pelo menos um dentre o um ou mais sub-blocos que são vizinhos do primeiro sub-bloco de dados de vídeo.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: determinar se pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo não é decodificado; e decodificar o primeiro sub-bloco de dados de vídeo sem usar informação de movimento correspondente ao pelo menos um sub-bloco do um ou mais blocos determinados como não sendo decodificados.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: determinar a informação de movimento do pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo ao decodificar o pelo menos um sub-bloco dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: gerar um primeiro bloco de predição para o primeiro sub-bloco de dados de vídeo, em que o primeiro bloco de predição inclui um valor para cada posição de pixel para o primeiro sub-bloco de dados de vídeo; atribuir, com base em um tamanho do primeiro bloco de dados de vídeo, um ou mais valores ponderados a um ou mais valores do primeiro bloco de predição; e decodificar o primeiro sub-bloco de dados de vídeo usando o um ou mais valores ponderados atribuídos ao um ou mais valores do primeiro bloco de predição.
5. Método, de acordo com a reivindicação 4, caracterizado pelo fato de que compreende adicionalmente: gerar um primeiro bloco de predição de vizinho com base na informação de movimento de pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo; atribuir, com base em um tamanho do primeiro sub- bloco vizinho, um ou mais valores ponderados a um ou mais valores do primeiro bloco de predição vizinho; e decodificar o primeiro sub-bloco de dados de vídeo usando o um ou mais valores ponderados atribuídos ao um ou mais valores do primeiro bloco de predição vizinho.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que compreende adicionalmente: modificar, para gerar um primeiro bloco de predição modificado, um ou mais valores do primeiro bloco de predição com base no um ou mais valores ponderados atribuídos ao um ou mais valores do primeiro bloco de predição vizinho; e decodificar o primeiro sub-bloco de dados de vídeo usando o primeiro bloco de predição modificado.
7. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que compreende adicionalmente: gerar um segundo bloco de predição vizinho com base na informação de movimento de pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo; atribuir, com base em um tamanho do segundo sub- bloco vizinho, um ou mais valores ponderados a um ou mais valores do segundo bloco de predição vizinho; e modificar, para gerar o primeiro bloco de predição modificado, um ou mais valores do primeiro bloco e do bloco de predição com base no um ou mais valores ponderados atribuídos ao um ou mais valores do primeiro e segundo sub-blocos de predição vizinhos.
8. Aparelho para codificar dados de vídeo, caracterizado pelo fato de que compreende: meios para receber uma primeira unidade de codificação de dados de vídeo, em que a primeira unidade de codificação de dados de vídeo compreende uma pluralidade de sub-blocos incluindo um primeiro sub-bloco; meios para receber um ou mais sub-blocos de uma segunda unidade de codificação de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo; meios para receber um elemento de sintaxe tendo um valor representativo de se o primeiro sub-bloco de dados de vídeo é codificado de acordo com um modo de compensação de movimento de bloco sobreposto, em que o valor do elemento de sintaxe é um primeiro valor ou um segundo valor, em que o primeiro valor indica que o primeiro sub- bloco de dados de vídeo é codificado de acordo com o modo de compensação de movimento de bloco sobreposto, e em que o segundo valor indica que o primeiro sub-bloco de dados de vídeo não é codificado de acordo com o modo de compensação de movimento de bloco sobreposto; meios para determinar que o primeiro sub-bloco de dados de vídeo é codificado de acordo com o modo de compensação de movimento de bloco sobreposto com base no valor do elemento de sintaxe sendo igual ao primeiro valor; meios para determinar informação de movimento de pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo; e meios para codificar, usando compensação de movimento de bloco sobreposto, o primeiro sub-bloco de dados de vídeo com base, pelo menos em parte, na informação de movimento do pelo menos um dentre o um ou mais sub- blocos que são vizinhos do primeiro sub-bloco de dados de vídeo.
9. Aparelho, de acordo com a reivindicação 8, caracterizado pelo fato de que compreende adicionalmente: meios para determinar se pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo não é codificado; e meios para codificar o primeiro sub-bloco de dados de vídeo sem usar informação de movimento correspondente ao pelo menos um sub-bloco do um ou mais blocos determinados como não sendo codificados.
10. Aparelho, de acordo com a reivindicação 8, caracterizado pelo fato de que compreende adicionalmente: meios para determinar a informação de movimento do pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo ao codificar o pelo menos um sub-bloco dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo.
11. Aparelho, de acordo com a reivindicação 8, caracterizado pelo fato de que compreende adicionalmente: meios para gerar um primeiro bloco de predição para o primeiro sub-bloco de dados de vídeo, em que o primeiro bloco de predição inclui um valor para cada posição de pixel para o primeiro sub-bloco de dados de vídeo; meios para atribuir, com base em um tamanho do primeiro bloco de dados de vídeo, um ou mais valores ponderados a um ou mais valores do primeiro bloco de predição; e meios para codificar o primeiro sub-bloco de dados de vídeo usando o um ou mais valores ponderados atribuídos ao um ou mais valores do primeiro bloco de predição.
12. Aparelho, de acordo com a reivindicação 11, caracterizado pelo fato de que compreende adicionalmente: meios para gerar um primeiro bloco de predição vizinho com base na informação de movimento de pelo menos um dentre o um ou mais sub-blocos de dados de vídeo que são vizinhos do primeiro sub-bloco de dados de vídeo; meios para atribuir, com base em um tamanho do primeiro sub-bloco vizinho, um ou mais valores ponderados a um ou mais valores do primeiro bloco de predição vizinho; e meios para codificar o primeiro sub-bloco de dados de vídeo usando o um ou mais valores ponderados atribuídos ao um ou mais valores do primeiro bloco de predição vizinho.
13. Aparelho, de acordo com a reivindicação 12, caracterizado pelo fato de que compreende adicionalmente: meios para modificar, para gerar um primeiro bloco de predição modificado, um ou mais valores do primeiro bloco de predição com base no um ou mais valores ponderados atribuídos ao um ou mais valores do primeiro bloco de predição vizinho; e meios para codificar o primeiro sub-bloco de dados de vídeo usando o primeiro bloco de predição modificado.
14. Memória caracterizada pelo fato de que compreende instruções armazenadas na mesma, as instruções sendo executadas por um computador para realizar o método conforme definido em qualquer uma das reivindicações 1 a 7.
BR112017015533-8A 2015-01-26 2016-01-26 Compensação de movimento sobreposto para codificação de vídeo BR112017015533B1 (pt)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201562107964P 2015-01-26 2015-01-26
US62/107,964 2015-01-26
US201562116631P 2015-02-16 2015-02-16
US62/116,631 2015-02-16
US15/005,934 US10230980B2 (en) 2015-01-26 2016-01-25 Overlapped motion compensation for video coding
US15/005,934 2016-01-25
PCT/US2016/014857 WO2016123068A1 (en) 2015-01-26 2016-01-26 Overlapped motion compensation for video coding

Publications (2)

Publication Number Publication Date
BR112017015533A2 BR112017015533A2 (pt) 2018-03-13
BR112017015533B1 true BR112017015533B1 (pt) 2024-06-25

Family

ID=

Similar Documents

Publication Publication Date Title
JP7186745B2 (ja) ビデオコーディングのための重複動き補償
US10652571B2 (en) Advanced motion vector prediction speedups for video coding
EP3459245B1 (en) Confusion of multiple filters in adaptive loop filtering in video coding
US10687077B2 (en) Motion information propagation in video coding
BR112020006588A2 (pt) predição afim em codificação de vídeo
BR112020006232A2 (pt) codificação de informação de movimento de predição afim para codificação de vídeo
TW201842766A (zh) 於視訊解碼器中導出運動向量資訊
BR112018006408B1 (pt) Predição intra de vídeo melhorada usando combinação de predição dependente de posição para codificação de vídeo
KR20170131448A (ko) 비디오 코딩에서의 서브-블록들에 대한 모션 정보 유도
WO2014160943A1 (en) Memory reduction for video coding prediction
BR112014006185B1 (pt) Método e aparelho para decodificar dados de vídeo, método e aparelho para codificar dados de vídeo, e memória legível por computador
BR112013032141B1 (pt) Método e aparelho para codificar dados de vídeo e memória legível por comutador
KR101747058B1 (ko) 서브 pu 레벨 진보된 레지듀얼 예측
BR112017015533B1 (pt) Compensação de movimento sobreposto para codificação de vídeo
WO2023141338A1 (en) Methods and devices for geometric partitioning mode with split modes reordering
WO2023158765A1 (en) Methods and devices for geometric partitioning mode split modes reordering with pre-defined modes order
WO2023200907A1 (en) Methods and devices for geometric partitioning mode with adaptive blending
BR112017020635B1 (pt) Método para decodificar dados de vídeo, método e aparelho para codificar dados de vídeo, e memória legível por computador
BR112017020632B1 (pt) Métodos e dispositivo para processar dados de vídeo e memória legível por computador
BR112017020627B1 (pt) Derivação de vetor de movimento em codificação de vídeo