BR112021009558A2 - simplificação da predição de vetor de movimento baseada em histórico - Google Patents

simplificação da predição de vetor de movimento baseada em histórico Download PDF

Info

Publication number
BR112021009558A2
BR112021009558A2 BR112021009558-6A BR112021009558A BR112021009558A2 BR 112021009558 A2 BR112021009558 A2 BR 112021009558A2 BR 112021009558 A BR112021009558 A BR 112021009558A BR 112021009558 A2 BR112021009558 A2 BR 112021009558A2
Authority
BR
Brazil
Prior art keywords
motion vector
hmvp
candidate
current block
vector predictor
Prior art date
Application number
BR112021009558-6A
Other languages
English (en)
Inventor
Yu Han
Wei-Jung Chien
Han Huang
Marta Karczewicz
Original Assignee
Qualcomm Incorporated
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112021009558A2 publication Critical patent/BR112021009558A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • H04N19/139Analysis of motion vectors, e.g. their magnitude, direction, variance or reliability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/56Motion estimation with initialisation of the vector search, e.g. estimating a good candidate to initiate a search
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/58Motion compensation with long-term prediction, i.e. the reference frame for a current frame not being the temporally closest one
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/583Motion compensation with overlapping blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation

Landscapes

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

Abstract

SIMPLIFICAÇÃO DA PREDIÇÃO DE VETOR DE MOVIMENTO BASEADA EM HISTÓRICO. Trata-se de um método de codificação de dados de vídeo, incluindo construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual, construir uma lista de preditores de vetor de movimento, e adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento. Adicionar os um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP compreende comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e com nenhuma outra entrada, e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP é diferente de ambas as duas entradas na lista de preditores de vetor de movimento. O método também inclui codificar o bloco atual de dados de vídeo usando a lista de preditores de vetor de movimento.

Description

“SIMPLIFICAÇÃO DA PREDIÇÃO DE VETOR DE MOVIMENTO BASEADA EM HISTÓRICO”
[0001] O presente pedido reivindica prioridade o ao Pedido US N 16/696,008, depositado em 26 de novembro de 2019, que reivindica o benefício do Pedido US Provisório No 62/771,981, depositado em 27 de novembro de 2018, sendo o inteiro teor dos quais incorporado no presente para fins de referência.
CAMPO TÉCNICO
[0002] A presente revelação relaciona-se à codificação de vídeo e à decodificação de vídeo.
ANTECEDENTES DA INVENÇÃO
[0003] Os recursos de vídeos digitais podem ser incorporados em uma vasta gama de dispositivos, incluindo televisões digitais, sistemas de difusão digital direta, sistemas de difusão sem fio, assistentes pessoais digitais (PDAs), computadores laptop ou de mesa (desktop), computadores tablet, leitoras de livros digitais (e-books), câmeras digitais, dispositivos de gravação digital, reprodutores de mídia digital, dispositivos de jogos, consoles de jogos, telefones celulares ou de rádio por satélite, os chamados “smartphones”, dispositivos de videoconferência, dispositivos de transmissão em fluxo contínuo (streaming) de vídeo, entre outros. Os dispositivos de vídeo digital implementam técnicas de codificação de vídeo, tais como as descritas nos padrões definidos pelo MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação de Vídeo Avançada (AVC), o padrão de Codificação de Vídeo de Alta Eficiência (HEVC), o padrão de Codificação de Vídeo de Alta Eficiência
(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 de maneira mais eficiente por meio da implementação de tais técnicas de codificação de vídeo.
[0004] As técnicas de codificação de vídeo incluem predição espacial (intra-imagem) e/ou predição temporal (inter-imagem) para reduzir ou remover a redundância inerente nas sequências de vídeo. Para a codificação de vídeo baseada em blocos, uma fatia de vídeo (por exemplo, uma imagem/quadro de vídeo ou uma parte de uma imagem de vídeo) pode ser particionada em blocos de vídeo, que também podem ser denominados unidades de árvore de codificação (CTUs), unidades de codificação (CUs) e/ou nós de codificação. Os blocos de vídeo em uma fatia codificada no modo intra (I) de uma imagem são codificados usando predição espacial com respeito às amostragem de referência nos blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia codificada no modo inter (P ou B) de uma imagem podem usar predição espacial com respeito às amostras de referência nos blocos vizinhos na mesma imagem ou predição temporal com respeito às amostras de referência em outras imagens de referência. As imagens podem ser chamadas de quadros, e as imagens de referência podem ser chamadas de quadros de referência.
SUMÁRIO
[0005] Em geral, a presente revelação descreve técnicas para predição inter e reconstrução de vetor de movimento na codificação de vídeo. Mais especificamente, a presente revelação descreve técnicas para construção de lista de candidatos de vetor de movimento em predição inter (também chamada de lista de preditores de vetor de movimento) baseado na predição de vetor de movimento baseada em histórico (HMVP).Como descrito em mais detalhes, um codificador de vídeo (por exemplo, codificador de vídeo ou decodificador de vídeo) pode ser configurado para realizar uma operação de poda ("pruning") simplificada. A operação de poda, nesta revelação, refere-se de maneira geral a operações para determinar se um candidato HMVP a partir de uma tabela de histórico de candidatos HMVP deverá ser adicionado ou não a uma lista de preditores de vetor de movimento. Em alguns casos, a operação de poda pode se referir à remoção de um candidato HMVP da lista de preditores de vetor de movimento. Como um exemplo da operação de poda simplificada, o codificador de vídeo pode comparar um subconjunto de candidatos HMVP em uma tabela de histórico de candidatos HMVP com apenas um subconjunto de entradas em uma lista de preditores de vetor de movimento para determinar se o subconjunto de candidatos HMVP é igual ou diferente em relação ao subconjunto de entradas na lista de preditores de vetor de movimento.
[0006] O codificador de vídeo pode adicionar um ou mais dos candidatos HMVP no subconjunto de candidatos HMVP à lista de preditores de vetor de movimento somente se os um ou mais dos candidatos HMVP no subconjunto de candidatos HMVP for diferente do subconjunto de entradas na lista de preditores de vetor de movimento. Desta maneira, o codificador de vídeo pode limitar o número de operações de comparação que são necessárias para determinar quais candidatos HMVP deverão ser adicionados à lista de preditores de vetor de movimento. Limitar o número de operações de comparação pode reduzir a quantidade de tempo necessária para construir a lista de preditores de vetor de movimento, dessa forma reduzindo a quantidade de tempo necessária para codificar ou decodificar os dados de vídeo e aprimorar a operação geral do codificador de vídeo.
[0007] Em um exemplo, a revelação descreve um método para codificar dados de vídeo, o método compreendendo construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual dos dados de vídeo, construir uma lista de preditores de vetor de movimento, adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento, em que adicionar os um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP compreende comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento, e codificar o bloco atual de dados de vídeo usando a lista de preditores de vetor de movimento.
[0008] Em um exemplo, a revelação descreve um dispositivo para codificar dados de vídeo, o dispositivo compreendendo memória configurada para armazenar uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento dos blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual dos dados de vídeo e uma lista de preditores de vetor de movimento. O dispositivo inclui um conjunto de circuitos de processamento configurado para construir a tabela de histórico de candidatos HMVP para armazenamento na memória, construir a lista de preditores de vetor de movimento para armazenamento na memória, adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento, em que adicionar os um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP, o conjunto de circuitos de processamento é configurado para comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento, e codificar o bloco atual de dados de vídeo usando a lista de preditores de vetor de movimento armazenada na memória.
[0009] Em um exemplo, a revelação descreve o meio de armazenamento legível não-temporário legível por computador armazenando instruções no mesmo que, quando executadas, levam um ou mais processadores a construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual dos dados de vídeo, construir uma lista de preditores de vetor de movimento, adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento, em que as instruções que levam os um ou mais processadores a adicionar os um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP compreendem instruções que levam os um ou mais processadores a comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento e adicionar o primeiro candidato HMVP à lista de preditores de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento, e codificar o bloco atual dos dados de vídeo usando a lista de preditores de vetor de movimento.
[0010] Os detalhes de um ou mais dos exemplos são apresentados nos desenhos acompanhantes e na descrição a seguir. Outros aspectos, objetivos e vantagens ficarão aparentes a partir da descrição, dos desenhos, e das reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0011] A FIG. 1 é um diagrama de blocos ilustrando um exemplo de sistema de codificação e decodificação de vídeo que pode executar as técnicas da presente revelação.
[0012] A FIG. 2 é um diagrama de blocos ilustrando um exemplo de codificador de vídeo que pode executar as técnicas da presente revelação.
[0013] A FIG. 3 é um diagrama de blocos ilustrando um exemplo de decodificador de vídeo que pode executar as técnicas da presente revelação.
[0014] A FIG. 4A é um diagrama conceitual mostrando candidatos vizinhos espaciais para o modo de combinação.
[0015] A FIG. 4B é um diagrama conceitual mostrando candidatos vizinhos espaciais para o modo de predição de vetor de movimento avançada (AMVP).
[0016] A FIG. 5 é um diagrama conceitual mostrando um candidato de preditor de vetor de movimento temporal (TMVP) e escalonamento de vetor de movimento.
[0017] A FIG. 6 é um diagrama conceitual mostrando a busca de candidatos de combinação espacial não- adjacentes.
[0018] A FIG. 7 é um fluxograma ilustrando um método de codificação ilustrativo.
[0019] A FIG. 8 é um fluxograma ilustrando um método de decodificação ilustrativo.
[0020] A FIG. 9 é um fluxograma ilustrando um método de codificação ilustrativo.
DESCRIÇÃO DETALHADA
[0021] A codificação de vídeo (por exemplo, codificação de vídeo ou decodificação de vídeo) inclui predição inter ou cópia intra-bloco (IBC). Tanto na predição inter quanto na IBC, um codificador de vídeo determina um bloco de predição baseado em um vetor de movimento (para IBC, o vetor de movimento pode ser um vetor de bloco) para um bloco atual, determina uma informação residual (por exemplo, diferença) entre o bloco de predição e o bloco atual, e sinaliza a informação residual. Um decodificador de vídeo recebe a informação residual. Além disso, o decodificador de vídeo determina um vetor de movimento para o bloco atual e determina o bloco de predição baseado no vetor de movimento. O decodificador de vídeo adiciona a informação residual ao bloco de predição para reconstruir o bloco atual.
[0022] Uma forma em que o decodificador de vídeo determina o vetor de movimento para o bloco atual se baseia em uma lista de preditores de vetor de movimento. Tanto o codificador de vídeo quanto o decodificador de vídeo utilizam um processo similar para construir respectivas listas de preditores de vetor de movimento, de modo que a lista de preditores de vetor de movimento construída pelo codificador de vídeo e a lista de preditores de vetor de movimento construída pelo decodificador de vídeo sejam a mesma. A lista de preditores de vetor de movimento inclui informação de vetor de movimento de blocos codificados anteriormente, tais como blocos espacialmente adjacentes (por exemplo, blocos que são vizinhos do bloco atual na mesma imagem que o bloco atual) e blocos co-localizados (por exemplo, blocos que estão localizados em localizações específicas em outras imagens).
[0023] O codificador de vídeo determina uma entrada na lista de preditores de vetor de movimento e sinaliza informações indicativas da entrada. O decodificador de vídeo determina informação de vetor de movimento a partir da lista de preditores de vetor de movimento com base na entrada e determina o vetor de movimento para o bloco atual com base na informação de vetor de movimento determinada. Como exemplo, o decodificador de vídeo pode definir o vetor de movimento para o bloco atual igual à informação de vetor de movimento determinada (por exemplo, tal como no modo de combinação). Como outro exemplo, o decodificador de vídeo pode adicionar uma diferença de vetor de movimento (MVD), sinalizada pelo codificador de vídeo, à informação de vetor de movimento determinada para determinar o vetor de movimento para o bloco atual (por exemplo, tal como no modo de predição de vetor de movimento avançada (AMVP)).
[0024] Além dos blocos espacialmente vizinhos ou blocos co-localizados, o codificador de vídeo e o decodificador de vídeo podem construir a lista de preditores de vetor de movimento usando candidatos de predição de vetor de movimento baseada em histórico (HMVP). Os candidatos HMVP podem ser usados como parte da predição HMVP na qual o codificador de vídeo e o decodificador de vídeo constroem uma tabela de histórico de candidatos HMVP que inclui os candidatos HMVP. Os candidatos HMVP podem incluir informação de vetor de movimento de blocos codificados anteriormente que são mais estendidos do que os blocos espacialmente vizinhos (por exemplo, mais distantes do bloco atual do que um bloco espacialmente vizinho).
[0025] Em algumas técnicas, o codificador de vídeo e o decodificador de vídeo adicionam candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento. Entretanto, a adição de candidatos HMVP à lista de preditores de vetor de movimento pode resultar em entradas duplicadas na lista de preditores de vetor de movimento. Como um exemplo, a informação de vetor de movimento de um candidato HMVP pode ser a mesma que a informação de vetor de movimento, já na lista de preditores de vetor de movimento, para um bloco espacialmente vizinho. Por conseguinte, em alguns exemplos, o codificador de vídeo e o decodificador de vídeo realizam uma operação de poda na qual um candidato HMVP é adicionado somente se o candidato HMVP for diferente das entradas já na lista de preditores de vetor de movimento. Por exemplo, o codificador de vídeo e o decodificador de vídeo comparam um candidato HMVP com entradas na lista de preditores de vetor de movimento e somente adicionam o candidato HMVP se for diferente das entradas na lista de preditores de vetor de movimento.
[0026] Pode haver alguns problemas técnicos em tais operações de poda. Por exemplo, comparar cada um dos candidatos HMVP com cada entrada na lista de preditores de vetor de movimento pode exigir muitas operações de comparação, o que pode retardar o processo de codificação. Entretanto, ter candidatos duplicados na lista de preditores de vetor de movimento também pode impactar a eficiência de codificação. O tamanho máximo da lista de preditores de vetor de movimento pode ser fixo. Portanto, se a lista de preditores de vetor de movimento incluir entradas duplicadas e a lista de preditores de vetor de movimento estiver cheia (por exemplo, número de entradas igual ao tamanho máximo), então há a possibilidade de que uma entrada potencial que ofereceria melhor eficiência de codificação fosse deixada de fora, mas as duplicatas da mesma entrada estariam presentes, o que poderia impactar negativamente os ganhos de codificação.
[0027] A presente revelação descreve técnicas ilustrativas para construir a lista de preditores de vetor de movimento usando candidatos HMVP de uma forma que equilibra os ganhos de reduzir as operações de comparação com os custos de se ter entradas duplicadas na lista de preditores de vetor de movimento. Pode haver um subconjunto de candidatos HMVP e um subconjunto de entradas na lista de preditores de vetor de movimento para a qual há uma maior probabilidade de haver duplicatas se comparado com os candidatos HMVP restantes e as entradas restantes na lista de preditores de vetor de movimento.
[0028] Em um ou mais exemplos descritos na presente revelação, o codificador de vídeo e o decodificador de vídeo podem comparar o subconjunto de candidatos HMVP com apenas o subconjunto de entradas na lista de preditores de vetor de movimento para determinar se deverá adicionar candidatos HMVP do subconjunto de candidatos HMVP. Para os candidatos HMVP restantes, o codificador de vídeo e o decodificador de vídeo podem não comparar os candidatos HMVP com quaisquer das entradas na lista de preditores de vetor de movimento.
[0029] Como exemplo, uma entrada na lista de preditores de vetor de movimento pode incluir informação de vetor de movimento de um bloco vizinho esquerdo do bloco atual. Um primeiro candidato HMVP pode incluir informação de vetor de movimento de um primeiro bloco vizinho ao bloco vizinho esquerdo à esquerda, e um segundo candidato HMVP pode incluir informação de vetor de movimento de um segundo bloco vizinho ao primeiro bloco à esquerda.
[0030] Neste exemplo, há uma maior probabilidade de que a informação de movimento do primeiro bloco (por exemplo, primeiro candidato HMVP) seja a mesma que a informação de movimento do bloco vizinho esquerdo, logo, a probabilidade de que a informação de movimento do segundo bloco (por exemplo, segundo candidato HMVP) seja a mesma que a informação de movimento do bloco vizinho esquerdo. Além disso, a probabilidade de que o primeiro candidato HMVP seja o mesmo que algumas outras entradas na lista de preditores de vetor de movimento pode ser relativamente pequena, uma vez que as outras entradas na lista de preditores de vetor de movimento pode não ser vizinhas ou ser relativamente próximas à primeira HMVP.
[0031] O fato de o primeiro candidato HMVP ter uma maior probabilidade de ter a mesma informação de vetor de movimento que o bloco vizinho esquerdo pode ser devido à proximidade do primeiro bloco com o bloco vizinho esquerdo. Em geral, há maior probabilidade de a informação de vetor de movimento dos blocos mais próximos um dos outros ser a mesma que a probabilidade de a informação de vetor de movimento dos blocos mais distantes ser a mesma.
[0032] Em alguns exemplos, o codificador de vídeo e o decodificador de vídeo podem comparar o primeiro candidato HMVP com a entrada na lista de preditores de vetor de movimento para a informação de vetor de movimento do bloco vizinho esquerdo, e possivelmente algumas poucas mais entradas limitadas (por exemplo, mais uma entrada) na lista de preditores de vetor de movimento, mas pode não comparar o primeiro candidato HMVP com quaisquer das entradas restantes na lista de preditores de vetor de movimento. Se o primeiro candidato HMVP for diferente das entradas no subconjunto da lista de preditores de vetor de movimento, o codificador de vídeo e o decodificador de vídeo podem adicionar o primeiro candidato HMVP na lista de preditores de vetor de movimento. Se o primeiro candidato HMVP for o mesmo que quaisquer das entradas no subconjunto da lista de preditores de vetor de movimento, o codificador de vídeo e o decodificador de vídeo podem não adicionar o primeiro candidato HMVP na lista de preditores de vetor de movimento.
[0033] Desta maneira, o número de operações de comparação é reduzida (por exemplo, o codificador de vídeo e o decodificador de vídeo podem comparar o primeiro candidato HMVP com somente um subconjunto de entradas na lista de preditores de vetor de movimento). Em alguns exemplos, pode haver uma chance de que haja entradas duplicadas na lista de preditores de vetor de movimento. Como exemplo, há a possibilidade de que uma das entradas na lista de preditores de vetor de movimento que não foi comparada com o primeiro candidato HMVP tenha a mesma informação de vetor de movimento que o primeiro candidato HMVP. Neste caso, pode haver informação de vetor de movimento duplicada na lista de preditores de vetor de movimento. Entretanto, em alguns exemplos, as entradas na lista de preditores de vetor de movimento com a qual o primeiro candidato HMVP não foi comparado podem ser para blocos que estão relativamente distantes do primeiro candidato HMVP.
[0034] Portanto, pode haver uma probabilidade relativamente baixa de que o primeiro candidato HMVP seja o mesmo que qualquer das entradas restantes na lista de preditores de vetor de movimento com a qual o primeiro candidato HMVP não é comparado. Por conseguinte, o número de operações realizadas para poda pode ser reduzido enquanto se mantém baixa a probabilidade de informação de vetor de movimento duplicada. Por exemplo, como parte da operação de poda da lista de preditores de vetor de movimento, o codificador de vídeo e o decodificador de vídeo podem comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento. Neste exemplo, embora o primeiro candidato HMVP não seja comparado com as entradas restantes na lista de preditores de vetor de movimento, a probabilidade de que uma das entradas restantes na lista de preditores de vetor de movimento seja uma duplicata do primeiro candidato HMVP é baixa devido ao primeiro candidato HMVP ser para um bloco que não está próximo dos blocos cuja informação de vetor de movimento é usada para construir as entradas restantes na lista de preditores de vetor de movimento.
[0035] A FIG. 1 é um diagrama de blocos ilustrando um exemplo de sistema de codificação e decodificação de vídeo 100 que pode executar as técnicas da presente revelação. As técnicas da presente revelação estão de modo geral direcionadas à codificação (codificação e/ou decodificação) de dados de vídeo. Em geral, os dados de vídeo incluem quaisquer dados para processamento de um vídeo. Assim, os dados de vídeo podem incluir vídeo bruto, vídeo não codificado, vídeo codificado, decodificado (por exemplo, reconstruído), e metadados de vídeo, tais como dados de sinalização.
[0036] Como ilustrado na FIG. 1, o sistema 100 inclui um dispositivo de origem 102 que fornece dados de vídeo codificados para serem decodificados e exibidos por um dispositivo de destino 116, neste exemplo. Mais especificamente, o dispositivo de origem 102 fornece os dados de vídeo ao dispositivo de destino 116 por meio de um meio legível por computador 110. O dispositivo de origem 102 e o dispositivo de destino 116 pode compreender qualquer um dentre uma vasta gama de dispositivos, inclusive computadores de mesa (desktop), notebooks (ou seja, laptops), computadores tablet, decodificadores de sinais, aparelhos telefônicos, tais como smartphones, televisões, câmeras, dispositivos de exibição, reprodutores de mídia digital, consoles de jogos, dispositivos de transmissão em fluxo contínuo (streaming) de vídeo, entre outros. Em alguns casos, o dispositivo de origem 102 e o dispositivo de destino 116 podem ser equipados para comunicação sem fio, e, dessa forma, podem ser chamados de dispositivos de comunicação sem fio.
[0037] No exemplo da FIG. 1, o dispositivo de origem 102 inclui a origem de vídeo 104, a memória 106, o codificador de vídeo 200 e a interface de saída 108. O dispositivo de destino 116 inclui a interface de entrada 122, o decodificador de vídeo 300, a memória 120 e o dispositivo de exibição 118. De acordo com a presente revelação, o codificador de vídeo 200 do dispositivo de origem 102 e o decodificador de vídeo 300 do dispositivo de destino 116 podem ser configurados para aplicar as técnicas para predição de vetor de movimento baseada em histórico. Assim, o dispositivo de origem 102 representa um exemplo de um dispositivo de codificação de vídeo, enquanto que o dispositivo de destino 116 representa um exemplo de um dispositivo de decodificação de vídeo. Em outros exemplos, um dispositivo de origem e um dispositivo de destino podem incluir outros componentes ou disposições. Por exemplo, o dispositivo de origem 102 pode receber dados de vídeo a partir de uma fonte de vídeo externa, tal como uma câmera externa. De forma similar, o dispositivo de destino 116 pode fazer interface com um dispositivo de exibição externo, em vez de incluir um dispositivo de exibição integrado.
[0038] O sistema 100, como apresentado na FIG. 1, é meramente um exemplo. Em geral, qualquer dispositivo de codificação e/ou decodificação de vídeo digital pode executar técnicas para predição de vetor de movimento baseada em histórico. O dispositivo de origem 102 e o dispositivo de destino 116 são meros exemplos de tais dispositivos de codificação nos quais o dispositivo de origem 102 gera dados de vídeo codificados para transmissão ao dispositivo de destino 116. A presente revelação refere- se a um dispositivo de “codificação” como um dispositivo que executa a codificação (codificação e/ou decodificação) dos dados. Assim, o codificador de vídeo 200 e o decodificador de vídeo 300 representam exemplos de dispositivos de codificação, mais especificamente, um codificador de vídeo e um decodificador de vídeo, respectivamente. Em alguns exemplos, os dispositivos 102, 116 podem operar de forma substancialmente simétrica de modo que cada um dos dispositivos 102, 116 inclua componentes de codificação e decodificação de vídeo. Por conseguinte, o sistema 100 pode suportar transmissão de vídeo unidirecional ou bidirecional entre os dispositivos 102, 116, por exemplo, para transmissão em fluxo contínuo (streaming) de vídeo, reprodução de vídeo, difusão (broadcasting) de vídeo, ou videotelefonia.
[0039] Em geral, a origem de vídeo 104 representa uma origem de dados de vídeo (isto é, dados de vídeo brutos, não codificados) e fornece uma série sequencial de imagens (também chamadas de “quadros”) dos dados de vídeo ao codificador de vídeo 200, que codifica dados para as imagens. A fonte de vídeo 104 do dispositivo de origem 102 pode incluir um dispositivo de captura de vídeo, tal como uma câmara de vídeo, um arquivo de vídeo contendo vídeo bruto capturado anteriormente, e/ou uma interface de alimentação de vídeo para receber dados de vídeo a partir de um provedor de conteúdo de vídeo. Como uma alternativa adicional, a fonte de vídeo 104 pode gerar dados baseados em gráficos de computador como o vídeo de origem, ou uma combinação de vídeo ao vivo, vídeo arquivado e vídeo gerado por computador. Em cada caso, o codificador de vídeo 200 codifica os dados de vídeo capturados, pré-
capturados ou gerados por computador. O codificador de vídeo 200 pode reordenar as imagens a partir da ordem recebida (algumas vezes chamada de "ordem de exibição") em uma ordem de codificação para codificação. O codificador de vídeo 200 pode gerar um fluxo de bits incluindo dados de vídeo codificados. O dispositivo de origem 102 pode então emitir os dados de vídeo codificados por meio da interface de saída 108 para o meio legível por computador 110 para recepção e/ou recuperação, por exemplo, pela interface de entrada 122 do dispositivo de destino 116.
[0040] A memória 106 do dispositivo de origem 102 e a memória 120 do dispositivo de destino 116 representam memórias de uso geral. Em alguns exemplos, as memórias 106, 120 podem armazenar dados de vídeo brutos, por exemplo, vídeo bruto a partir da origem de vídeo 104 e dados de vídeo brutos decodificados a partir do decodificador de vídeo 300. Adicionalmente ou como alternativa, as memórias 106, 120 podem armazenar instruções de software executáveis, por exemplo, pelo codificador de vídeo 200 e pelo decodificador de vídeo 300, respectivamente. Embora ilustrados separadamente do codificador de vídeo 200 e do decodificador de vídeo 300 neste exemplo, deve-se entender que o codificador de vídeo 200 e o decodificador de vídeo 300 também podem incluir memórias internas para finalidades funcionalmente similares ou equivalentes. Adicionalmente, as memórias 106, 120 podem armazenar dados de vídeo codificados, por exemplo, emitidos a partir do codificador de vídeo 200 e transmitidos ao decodificador de vídeo 300. Em alguns exemplos, partes das memórias 106, 120 podem ser alocadas como um ou mais armazenadores (buffers) de vídeo, por exemplo, para armazenar dados de vídeo brutos, decodificados e/ou codificados.
[0041] O meio legível por computador 110 pode representar qualquer tipo de meio ou dispositivo capaz de transportar os dados de vídeo codificados a partir do dispositivo de origem 102 para o dispositivo de destino
116. Em um exemplo, o meio legível por computador 110 representa um meio de comunicação para permitir que o dispositivo de origem 102 transmita dados de vídeo codificados diretamente ao dispositivo de destino 116 em tempo real, por exemplo, através de uma rede de radiofrequência ou rede baseada em computador. A interface de saída 108 pode modular um sinal de transmissão incluindo os dados de vídeo codificados, e a interface de entrada 122 pode modular o sinal de transmissão recebido, de acordo com uma norma de comunicação, tal como um protocolo de comunicação sem fio. O meio de comunicação pode compreender qualquer meio de comunicação sem fio ou com fio, tal como um espectro de radiofrequência (RF) ou uma ou mais linhas físicas de transmissão. O meio de comunicação pode formar parte de uma rede baseada em pacotes, tal como uma rede local, uma rede de longa distância, ou uma rede global, tal como a Internet. O meio de comunicação pode incluir roteadores, comutadores, estações base, ou qualquer outro equipamento que possa ser útil para facilitar a comunicação a partir do dispositivo de origem 102 para o dispositivo de destino 116.
[0042] Em alguns exemplos, o dispositivo de origem 102 pode emitir dados codificados a partir da interface de saída 108 ao dispositivo de armazenamento 112. Similarmente, o dispositivo de destino 116 pode acessar dados codificados a partir do dispositivo de armazenamento 112 por meio da interface de entrada 122. Exemplos do dispositivo de armazenamento 112 podem incluir qualquer dentre uma variedade de meios de armazenamento de dados acessados localmente ou distribuídos, tal como uma unidade de disco rígido, discos Blu-ray, DVDs, CD-ROMs, memória flash, memória volátil ou não-volátil, ou qualquer outro meio de armazenamento digital adequado para armazenamento de dados de vídeo codificados.
[0043] Em alguns exemplos, o dispositivo de origem 102 pode emitir dados de vídeo codificados ao servidor de arquivos 114 ou outro dispositivo de armazenamento intermediário que possa armazenar o vídeo codificado gerado pelo dispositivo de origem 102. O dispositivo de destino 116 pode acessar dados de vídeo armazenados a partir do servidor de arquivos 114 por meio de transmissão em fluxo contínuo ou download. O servidor de arquivos 114 pode ser qualquer tipo de servidor capaz de armazenar dados de vídeo codificados e transmitir esses dados de vídeo codificados ao dispositivo de destino 116. O servidor de arquivos 114 pode representar um servidor Web (por exemplo, para um site), um servidor de Protocolo de Transferência de Arquivos (FTP), um dispositivo de rede de distribuição de conteúdo, ou um dispositivo de armazenamento conectado à rede (NAS). O dispositivo de destino 116 pode acessar os dados de vídeo codificados a partir do servidor de arquivos 114, através de qualquer conexão de dados convencional, inclusive uma conexão com a
Internet. Isto pode incluir um canal sem fio (por exemplo, uma conexão Wi-Fi), uma conexão com fio (por exemplo, DSL, modem a cabo, etc.), ou uma combinação de ambos que seja adequada para acessar dados de vídeo codificados armazenados em um servidor de arquivos 114. O servidor de arquivos 114 e a interface de entrada 122 podem ser configurados para operar de acordo com um protocolo de transmissão em fluxo contínuo, um protocolo de transmissão por download, ou uma combinação dos mesmos.
[0044] A interface de saída 108 e a interface de entrada 122 podem representar transmissores/receptores sem fio, modems, componentes de rede com fio (por exemplo, placas Ethernet), componentes de comunicação sem fio que operam de acordo com qualquer dentre uma variedade de padrões IEEE 802.11, ou outros componentes físicos. Nos exemplos em que a interface de saída 108 e a interface de entrada 122 compreendem componentes sem fio, a interface de saída 108 e a interface de entrada 122 podem ser configuradas para transferir dados, tais como dados de vídeo codificados, de acordo com um padrão de comunicação celular, tal como 4G, 4G-LTE (Long-Term Evolution), LTE Avançada, 5G, entre outros. Em alguns exemplos em que a interface de saída 108 compreende um transmissor sem fio, a interface de saída e a interface de entrada 122 podem ser configuradas para transferir dados, tais como dados de vídeo codificados, de acordo com outros padrões sem fio, tal como uma especificação IEEE 802.11, uma especificação IEEE 802.15 (por exemplo, ZigBee®), um padrão Bluetooth®, entre outros. Em alguns exemplos, o dispositivo de origem 102 e/ou o dispositivo de destino 116 podem incluir respectivos dispositivos de “sistema em um chip” (SoC – “system-on-a-chip”). Por exemplo, o dispositivo de origem 102 pode incluir um dispositivo SoC para realizar a funcionalidade atribuída ao codificador de vídeo 200 e/ou à interface de saída 108, e o dispositivo de destino 116 pode incluir um dispositivo SoC para realizar a funcionalidade atribuída ao decodificador de vídeo 300 e/ou à interface de saída 122.
[0045] As técnicas desta revelação podem ser aplicadas à codificação de vídeo no suporte de qualquer de uma variedade de aplicações multimídia, tais como as teledifusões “pelo ar” (over-the-air), transmissões de televisão a cabo, transmissões de televisão via satélite, transmissões de vídeo em fluxo contínuo pela Internet, tal como transmissão em fluxo contínuo dinâmica adaptativa via HTTP (DASH), vídeo digital que é codificado em um meio de armazenamento de dados, decodificação de vídeo digital armazenado em um meio de armazenamento de dados, ou outras aplicações.
[0046] A interface de entrada 122 do dispositivo de destino 116 recebe um fluxo de bits de vídeo codificado a partir do meio legível por computador 110 (por exemplo, o dispositivo de armazenamento 112, o servidor de arquivos 114, entre outros). O meio legível por computador de fluxo de bits de vídeo codificado 110 pode incluir informação de sinalização definida pelo codificador de vídeo 200, que é também usada pelo decodificador de vídeo 300, tais como elementos de sintaxe possuindo valores que descrevem características e/ou processamento de blocos de vídeo ou outras unidades codificadas (por exemplo, fatias,
imagens, grupos de imagens, sequências, entre outros). O dispositivo de exibição 118 exibe imagens decodificadas dos dados de vídeo decodificados a um usuário. O dispositivo de exibição 118 pode representar qualquer um dentre uma variedade de dispositivos de exibição, tal como um tubo de raios catódicos (CRT), um visor de cristal líquido (LCD), um visor de plasma, um visor de diodo emissor de luz orgânico (OLED), ou outro tipo de dispositivo de exibição.
[0047] Embora não seja ilustrado na FIG. 1, em alguns exemplos, cada um dentre o codificador de vídeo 200 e o decodificador de vídeo 300 pode ser integrado com um codificador de áudio e/ou um decodificador de áudio, e pode incluir unidades MUX-DEMUX apropriadas, ou outro hardware e/ou software, para processar fluxos multiplexados incluindo tanto áudio quanto vídeo em um fluxo de dados comum. Se aplicável, as unidades MUX-DEMUX podem se conformar ao protocolo multiplexador ITU H.223, ou a outros protocolos, tal como o protocolo de datagrama do usuário (UDP).
[0048] Cada um dentre o codificador de vídeo 200 e o decodificador de vídeo 300 pode ser implementado como qualquer dentre uma variedade de conjuntos de circuitos codificadores e/ou decodificadores adequados, tais como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados de aplicação específica (ASICs), arranjos de portas programáveis em campo (FPGAs), lógica discreta, software, hardware, firmware ou quaisquer combinações dos mesmos. Quando as técnicas são implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em um meio legível por computador não-temporário adequado e executar as instruções em hardware usando um ou mais processadores para executar as técnicas da presente revelação. Cada um dentre o codificador de vídeo 200 e o decodificador de vídeo 300 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 respectivo dispositivo. Um dispositivo incluindo o codificador de vídeo 200 e/ou o decodificador de vídeo 300 pode compreender um circuito integrado, um microprocessador e/ou um dispositivo de comunicação sem fio, tal como um telefone celular.
[0049] Os padrões de codificação de vídeo incluem ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 ou ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO IEC MPEG-4 Visual e ITU-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC), incluindo suas extensões de Codificação de Vídeo Escalonável (SVC) e Codificação de Vídeo com Múltiplas Vistas (MVC).
[0050] A Codificação de Vídeo de Alta Eficiência (HEVC) ou o padrão ITU-T H.265 (G. J. Sullivan, J.-R. Ohm, W.-J. Han, T. Wiegand "Overview of the High Efficiency Video Coding (HEVC) Standard," IEEE Transactions on Circuits and Systems for Video Technology, vol.22, no.12. págs. 1649-1668, dezembro de 2012), incluindo sua extensão de alcance, extensão de múltiplas vistas (MV-HEVC) e extensão escalonável (SHVC), foi desenvolvida pela Joint Collaboration Team on Video Coding (JCT-VC) bem como pelo Joint Collaboration Team on 3D Video Coding Extension
Development (JCT-3V) do ITU-T Video Coding Experts Group (VCEG) e do ISO/IEC Motion Picture Experts Group (MPEG).
[0051] Uma especificação do esboço HEVC, e denominada aqui como HEVC WD posteriormente, encontra-se disponível em http://phenix.int- evry.fr/jct/doc_end_user/documents/14_Vienna/wgl l/JCTVC- N1003-vl.zip. A versão mais recente do Final Draft of International Standard (FDIS) da HEVC pode ser encontrada em http://phenix.it- sudparis.eu/jct/doc_end_user/documents/12_Geneva/wgl l/JCTVC-L1003-v34.zip. Os grupos ITU-T VCEG (Q6/16) e ISO/IEC MPEG (JTC 1/SC 29/WG 11) têm se dedicado atualmente ao estudo da possível necessidade de padronização da tecnologia de codificação de vídeo futura com uma capacidade de compressão que supere significativamente à do padrão HEVC atual (inclusive suas extensões atuais e extensões de curto prazo para codificação de conteúdo na tela e codificação de alta faixa dinâmica). Os grupos estão trabalhando juntos nesta atividade de exploração em um esforço de colaboração conjunto conhecido como o Joint Video Exploration Team (JVET) para avaliar esquemas de tecnologias de compressão propostos por seus especialistas nesta área. The JVET first met during 19-21 October 2015. Uma versão do software de referência, isto é, do Joint Exploration Model 7 (JEM 7) poderia ser baixada a partir de: https://jvet.hhi.fraunhofer.de/svn/svn_HMJEMSoftware/tags/H M- 16.6-JEM-7.2/. Uma descrição de algoritmo do Joint Exploration Test Model 7 (JEM-7) é descrita em J. Chen, E. Alshina, G. J. Sullivan, J.-R. Ohm, J. Boyce, "Algorithm
Description of Joint Exploration Test Model 7", JVET-G1001, julho, 2017.
[0052] O codificador de vídeo 200 e o decodificador de vídeo 300 podem operar de acordo com um padrão de codificação de vídeo, tal como o ITU-T H.265, também chamado de Codificação de Vídeo de Alta Eficiência (HEVC) ou extensões do mesmo, tais como as extensões de codificação de vídeo de múltiplas vistas e/ou escalonáveis. Como alternativa, o codificador de vídeo 200 e o decodificador de vídeo 300 podem operar de acordo com outros padrões de propriedade particular ou industriais, tal como o Joint Exploration Test Model (JEM) e/ou o Versatile Video Coding (VVC). As técnicas desta revelação, entretanto, não se limitam a nenhum padrão de codificação em especial.
[0053] Em geral, o codificador de vídeo 200 e o decodificador de vídeo 300 podem realizar a codificação de imagens baseada em blocos. O termo “bloco” refere-se, de modo geral, a uma estrutura incluindo dados a serem processados (por exemplo, codificados, decodificados ou de alguma outra forma usados no processo de codificação e/ou decodificação). Por exemplo, um bloco pode incluir uma matriz bidimensional de amostras de dados de luminância e/ou crominância. Em geral, o codificador de vídeo 200 e o decodificador de vídeo 300 podem codificar dados de vídeo representados em um formato YUV (por exemplo, Y, Cb, Cr). Isto é, em vez de codificar dados de vermelho, verde e azul (RGB) para amostras de uma imagem, o codificador de vídeo 200 e o decodificador de vídeo 300 podem codificar componentes de luminância e crominância, em que os componentes de crominância podem incluir tanto componentes de crominância de matiz vermelho quanto de matiz azul. Em alguns exemplos, o codificador de vídeo 200 converte dados formatados em RGB recebidos para uma representação YUV antes da codificação, e o decodificador de vídeo 300 converte a representação YUV para of formato RGB. Como alternativa, unidades de pré- e pós-processamento (não ilustradas) podem realizar essas conversões.
[0054] A presente revelação pode se referir em geral à codificação (por exemplo, codificação e decodificação) de imagens para incluir o processo de codificar ou decodificar dados da imagem. De maneira similar, a presente revelação pode se referir à codificação dos blocos de uma imagem para incluir o processo de codificar ou decodificar dados para os blocos, por exemplo, predição e/ou codificação residual. Um fluxo de bits de vídeo codificado em geral inclui uma série de valores para elementos de sintaxe representativos das decisões de codificação (por exemplo, modos de codificação) e particionamento das imagens em blocos. Assim, referências à codificação de uma imagem ou um bloco deverão ser compreendidas de forma geral como valores de codificação para elementos de sintaxe formando a imagem ou bloco.
[0055] O HEVC define vários blocos, inclusive unidades de codificação (CUs), unidades de predição (PUs) e unidades de transformada (TUs). De acordo com a HEVC, um codificador de vídeo (tal como o codificador de vídeo 200) particiona uma unidade de árvore de codificação (CTU) em CUs de acordo com uma estrutura de árvore quaternária. Isto é, o codificador de vídeo particiona CTUs e CUs em quatro quadrados iguais, não sobrepostos, e cada nó da árvore quaternária tem zero ou quatro nós filhos. Os nós sem nós filhos podem ser chamados de “nós folha”, e as CUs de tais nós folha podem incluir uma ou mais PUs e/ou uma ou mais TUs. O codificador de vídeo pode adicionalmente particionar PUs e TUs. Por exemplo, na HEVC, uma árvore quaternária residual (RQT) representa particionamentos de TUs. Na HEVC, as PUs representam dados de predição inter, enquanto que as TUs representam dados residuais. As CUs que são preditas no modo intra incluem informação de predição intra, tal como uma indicação do modo intra.
[0056] Como outro exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para operar de acordo com exemplos do JEM e/ou do VVC. De acordo com exemplos do JEM/VVC, um codificador de vídeo (tal como o codificador de vídeo 200) particiona uma imagem em uma pluralidade de unidades de árvore de codificação (CTUs). O codificador de vídeo 200 pode particionar uma CTU de acordo com uma estrutura em árvore, tal como uma estrutura de árvore quaternária-árvore binária (QTBT). A estrutura QTBT dos exemplos do JEM/VVC remove os conceitos de múltiplos tipos de partição, tal como a separação entre CUs, PUs e TUs da HEVC. Uma estrutura QTBT dos exemplos da JEM/VVC inclui dois níveis: um primeiro nível particionado de acordo com o particionamento em árvore quaternária, e um segundo nível particionado de acordo com o particionamento em árvore binária. Um nó raiz da estrutura QTBT corresponde a uma CTU. Os nós folha das árvores binárias correspondem a unidades de codificação (CUs).
[0057] Em alguns exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem usar uma única estrutura QTBT para representar cada um dos componentes de luminância e crominância, enquanto que, em outros exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem usar duas ou mais estruturas QTBT, tal como uma estrutura QTBT para o componente de luminância e outra estrutura QTBT para ambos os componentes de crominância (ou duas estruturas QTBT para respectivos componentes de crominância).
[0058] O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para usar particionamento em árvore quaternária por particionamento HBEC, QTBT de acordo com os exemplos do JEM/VVC, ou outras estruturas de particionamento. Para fins de explicação, a descrição das técnicas da presente revelação é apresentada com respeito ao particionamento QTBT. Entretanto, deve-se entender que as técnicas da presente revelação também podem ser aplicadas a codificadores de vídeo configurados para usar particionamento em árvore quaternária, ou também outros tipos de particionamento.
[0059] A presente revelação pode usar “Nx” e “N por N” de forma intercambiável para se referir às dimensões de amostra de um bloco (tal como uma CU ou outro bloco de vídeo) em termos de dimensões verticais e horizontais, por exemplo, 16x16 amostras ou 16 por 16 amostras. Em geral, uma CU de 16x16 terá 16 amostras em uma direção vertical (y = 16) e 16 amostras em uma direção horizontal (x = 16). De maneira similar, uma CU NxN em geral tem N amostras em uma direção vertical e N amostras em uma direção horizontal, onde N representa um valor inteiro não-negativo. As amostras em uma CU podem ser dispostas em linhas e colunas. Além disso, as CUs não precisam necessariamente ter o mesmo número de amostras na direção horizontal que na direção vertical. Por exemplo, as CUs podem compreender NxM amostras, onde M não é necessariamente igual a N.
[0060] O codificador de vídeo 200 codifica dados de vídeo para CUs representando informação de predição e/ou residual, e outras informações. A informação de predição indica como a CU deverá ser predita de modo a formar um bloco de predição para a CU. A informação residual de modo geral representa diferenças de amostra por amostra entre as amostras da CU antes da codificação e o bloco de predição.
[0061] Para predizer uma CU, o codificador de vídeo 200 pode geralmente formar um bloco de predição para a CU através de predição inter ou predição intra. A predição inter em geral se refere à predição da CU a partir dos dados de uma imagem codificada anteriormente, ao passo que a predição intra em geral se refere à predição da CU a partir de dados codificados anteriormente da mesma imagem. Para realizar a predição inter, o codificador de vídeo 200 pode gerar o bloco de predição usando um ou mais vetores de movimento. O codificador de vídeo 200 pode em geral realizar uma busca de movimento para identificar um bloco de referência que melhor corresponda à CU, por exemplo, em termos de diferenças entre a CU e o bloco de referência. O codificador de vídeo 200 pode calcular uma métrica de diferença usando uma soma da diferença absoluta (SAD), a soma das diferenças quadráticas (SSD), a diferença absoluta média (MAD), a média das diferenças quadráticas (MSD), ou outros tais cálculos de diferença para determinar se um bloco de referência melhor corresponde à CU atual. Em alguns exemplos, o codificador de vídeo 200 pode predizer a CU atual usando predição unidirecional ou predição bidirecional.
[0062] O JEM ou VVC também propõe um modo de compensação de movimento afim, que pode ser considerado um modo de predição inter. No modo de compensação de movimento afim, o codificador de vídeo 200 pode determinar dois ou mais vetores de movimento que representam movimento não- translacional, tal como aumentar zoom ou reduzir zoom, rotação, movimento em perspectiva, ou outros tipos de movimento irregulares.
[0063] Para realizar a predição intra, o codificador de vídeo 200 pode selecionar um modo de predição intra para gerar o bloco de predição. O JEM ou VVC oferece sessenta e sete modos de predição intra, inclusive vários modos direcionais, bem como modo planar e modo DC. Em geral, o codificador de vídeo 200 seleciona um modo de predição intra que descreve amostras vizinhas a um bloco atual (por exemplo, um bloco de uma CU) a partir das quais irá predizer amostras do bloco atual. Tais amostras podem geralmente estar acima, acima e à esquerda, ou à esquerda do bloco atual na mesma imagem que o bloco atual, presumindo-se que o codificador de vídeo 200 codifique CTUs e CUs na ordem de varredura por rastreio (da esquerda para a direita, de cima para baixo).
[0064] O codificador de vídeo 200 codifica dados representando o modo de predição para um bloco atual. Por exemplo, para os modos de predição inter, o codificador de vídeo 200 pode codificar dados representando qual dos vários modos de predição inter disponíveis é usado, bem como informações de movimento para o modo correspondente. Para a predição inter unidirecional ou bidirecional, por exemplo, o codificador de vídeo 200 pode codificar vetores de movimento usando predição de vetor de movimento avançada (AMVP) ou o modo de combinação. O codificador de vídeo 200 pode usar modos similares para codificar vetores de movimento para o modo de compensação de movimento afim.
[0065] Após a predição, tal como a predição intra ou a predição inter de um bloco, o codificador de vídeo 200 pode calcular dados residuais para o bloco. Os dados residuais, tal como um bloco residual, representam diferenças de amostra por amostra entre o bloco e um bloco de predição para o bloco, formado usando o modo de predição correspondente. O codificador de vídeo 200 pode aplicar uma ou mais transformadas ao bloco residual, para produzir dados transformados em um domínio da transformada em vez do domínio da amostra. Por exemplo, o codificador de vídeo 200 pode aplicar uma transformada discreta de cosseno (DCT), uma transformada de inteiro, uma transformada de ondaleta, ou uma transformada conceitualmente similar aos dados de vídeo residuais. Adicionalmente, o codificador de vídeo 200 pode aplicar uma transformada secundária após a primeira transformada, tal como uma transformada secundária não- separável dependente do modo (MDNSST), uma transformada dependente do sinal, uma transformada de Karhunen-Loeve
(KLT), entre outras. O codificador de vídeo 200 produz coeficientes de transformada após a aplicação das uma ou mais transformadas. Como observado acima, após quaisquer transformadas para produzir coeficientes de transformada, o codificador de vídeo 200 pode realizar a quantização dos coeficientes de transformada.
[0066] A quantização refere-se, de forma geral, a um processo no qual os coeficientes de transformada são quantizados para possivelmente reduzir a quantidade de dados usados para representar os coeficientes, proporcionando compressão adicional. Ao efetuar o processo de quantização, o codificador de vídeo 200 pode reduzir a profundidade de bits associada a parte dos coeficientes ou todos. Por exemplo, o codificador de vídeo 200 pode arredondar um valor de bit n para baixo para um valor de bit m durante a quantização, em que n é maior do que m. Em alguns exemplos, para realizar a quantização, o codificador de vídeo 200 pode realizar um deslocamento de bits para a direita do valor a ser quantizado.
[0067] Após a quantização, o codificador de vídeo 200 pode varrer os coeficientes de transformada, produzindo um vetor unidimensional a partir da matriz bidimensional incluindo os coeficientes de transformada quantizados. A varredura pode ser projetada para colocar coeficientes de maior energia (e, portanto, menor frequência) na frente do vetor e colocar coeficientes de transformada de menor energia (e, portanto, maior frequência) na parte posterior do vetor. Em alguns exemplos, o codificador de vídeo 200 pode utilizar uma ordem de varredura predefinida para varrer os coeficientes de transformada quantizados para produzir um vetor serializado, e então codificar por entropia os coeficientes de transformada quantizados do vetor. Em outros exemplos, o codificador de vídeo 200 pode realizar uma varredura adaptativa. Após varrer os coeficientes de transformada quantizados para formar o vetor unidimensional, o codificador de vídeo 200 pode codificar por entropia o vetor unidimensional, por exemplo, de acordo com a codificação aritmética binária adaptativa ao contexto (CABAC). O codificador de vídeo 200 também pode codificar por entropia valores para elementos de sintaxe descrevendo metadados associados com os dados de vídeo codificados para uso pelo decodificador de vídeo 300 ao decodificar os dados de vídeo.
[0068] Para realizar a CABAC, o codificador de vídeo 200 pode atribuir um contexto dentro de um modelo de contexto a um símbolo a ser transmitido. O contexto pode se relacionar, por exemplo, a se os valores vizinhos do símbolo são de valor zero ou não. A determinação de probabilidade pode ser baseada em um contexto atribuído ao símbolo.
[0069] O codificador de vídeo 200 pode adicionalmente gerar dados de sintaxe, tais como dados de sintaxe baseados em bloco, dados de sintaxe de baseados em imagem, e dados de sintaxe baseados em sequência, ao decodificador de vídeo 300, por exemplo, em um cabeçalho de imagem, um cabeçalho de bloco, um cabeçalho de fatia, ou outros dados de sintaxe, tal como um conjunto de parâmetros de sequência (SPS), conjunto de parâmetros de imagem (PPS) ou conjunto de parâmetros de vídeo (VPS). O decodificador de vídeo 300 pode similarmente decodificar tais de dados de sintaxe para determinar como decodificar dados de vídeo correspondentes.
[0070] Desta maneira, o codificador de vídeo 200 pode gerar um fluxo de bits incluindo dados de vídeo codificados, por exemplo, elementos de sintaxe descrevendo o particionamento de uma imagem em blocos (por exemplo, CUs) e informação de predição e/ou residual para os blocos. Por fim, o decodificador de vídeo 300 pode receber o fluxo de bits e decodificar os dados de vídeo codificados.
[0071] Em geral, o decodificador de vídeo 300 realiza um processo recíproco ao realizado pelo codificador de vídeo 200 para decodificar os dados de vídeo codificados do fluxo de bits. Por exemplo, o decodificador de vídeo 300 pode decodificar valores para elementos de sintaxe do fluxo de bits usando CABAC de uma forma substancialmente similar, embora recíproca ao processo de codificação CABAC do codificador de vídeo 200. Os elementos de sintaxe podem definir informações de particionamento de uma imagem em CTUs, e o particionamento de cada CTU de acordo com uma estrutura de partição correspondente, tal como uma estrutura QTBT, para definir CUs da CTU. Os elementos de sintaxe podem adicionalmemte definir informação de predição e residual para blocos (por exemplo, CUs) de dados de vídeo.
[0072] A informação residual pode ser representada, por exemplo, por coeficientes de transformada quantizados. O decodificador de vídeo 300 pode quantizar inversamente e realizar a transformada inversa dos coeficientes de transformada quantizados de um bloco para reproduzir um bloco residual para o bloco. O decodificador de vídeo 300 usa um modo de predição sinalizado (predição intra ou inter) e informação de predição relacionada (por exemplo, informação de movimento para predição inter) para formar um bloco de predição para o bloco. O decodificador de vídeo 300 pode então combinar o bloco de predição e o bloco residual (em uma base de amostra por amostra) para reproduzir o bloco original. O decodificador de vídeo 300 pode realizar processamento adicional, tal como realizar um processo de remoção do efeito de blocos para reduzir artefatos visuais ao longo dos contornos do bloco.
[0073] Como descrito acima, em alguns exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para codificar ou decodificar um bloco atual usando predição inter. Na predição inter, o codificador de vídeo 200 e o decodificador de vídeo 300 determinam um bloco de predição baseado em um vetor de movimento para o bloco atual. Por exemplo, o vetor de movimento para o bloco atual aponta para um bloco de predição em outra imagem ou possivelmente na mesma imagem para o modo de cópia intra bloco (IBC).
[0074] Em alguns exemplos, em vez de o codificador de vídeo 200 sinalizar o valor do vetor de movimento para o bloco atual, o codificador de vídeo 200 pode sinalizar informação de um preditor de vetor de movimento, que o decodificador de vídeo 300 usa para determinar o vetor de movimento para o bloco atual. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para construir uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de blocos codificados ou decodificados anteriormente. A informação de vetor de movimento dos blocos codificados ou decodificados anteriormente pode ser considerada como preditores de vetor de movimento. O codificador de vídeo 200 e o decodificador de vídeo 300 podem realizar operações similares para construir as listas de preditores de vetor de movimento.
[0075] O codificador de vídeo 200 pode sinalizar informação indicativa de uma entrada para a lista de preditores de vetor de movimento que identifica um preditor de vetor de movimento específico. O decodificador de vídeo 300 pode determinar o preditor de vetor de movimento com base na entrada para a lista de preditores de vetor de movimento. Para o modo de intercalação, o decodificador de vídeo 300 pode definir o preditor de vetor de movimento igual ao vetor de movimento para o bloco atual. Para o modo AMVP, o decodificador de vídeo 300 pode adicionalmente receber, a partir do codificador de vídeo 200, uma diferença de vetor de movimento (MVD) entre o preditor de vetor de movimento e o vetor de movimento para o bloco atual.
[0076] O decodificador de vídeo 300 pode adicionar a MVD ao preditor de vetor de movimento para determinar o vetor de movimento para o bloco atual. A lista de preditores de vetor de movimento pode incluir, como preditores de vetor de movimento, a informação de vetor de movimento dos blocos espacialmente vizinhos (por exemplo, blocos que são adjacentes ao bloco atual e estão na mesma imagem que o bloco atual) e a informação de vetor de movimento de blocos co-localizados (por exemplo, blocos que estão em outra imagem em localizações específicas). O bloco co-localizado pode ser chamado de bloco temporalmente vizinho.
[0077] O codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar informação de vetor de movimento dos blocos espacialmente vizinhos e dos blocos co-localizados na lista de candidatos de vetor de movimento para construir a lista de candidatos de vetor de movimento. Em um ou mais exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para adicionalmente adicionar candidatos de predição de vetor de movimento baseada em histórico (HMVP) a partir de uma tabela de histórico de candidatos HMVP à lista de candidatos de vetor de movimento.
[0078] Os candidatos HMVP referem-se à informação de vetor de movimento dos blocos que se estendem para além dos blocos vizinhos adjacentes do bloco atual. Por exemplo, um bloco adjacente ao bloco atual e à esquerda do bloco atual pode ser um exemplo de um bloco vizinho esquerdo que é um bloco espacialmente vizinho. A informação de movimento do bloco vizinho esquerdo pode ser incluída na lista de candidatos de vetor de movimento. Um bloco adjacente ao bloco vizinho esquerdo não é um bloco espacialmente vizinho, e a informação de movimento de tal bloco é um exemplo de candidato HMVP que é parte da tabela de histórico de candidatos HMVP.
[0079] A presente revelação descreve exemplos de técnicas que o codificador de vídeo 200 e o decodificador de vídeo 300 podem realizar para adicionar candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento. Como um exemplo, a tabela de histórico de candidatos HMVP pode ser considerada como incluindo um primeiro subconjunto de candidatos HMVP e um segundo subconjunto de candidatos HMVP. Em um exemplo, o primeiro subconjunto de candidatos HMVP inclui dois (por exemplo, dois primeiros) candidatos HMVP da tabela de histórico de candidatos HMVP, e o segundo subconjunto de candidatos HMVP inclui os candidatos HMVP restantes na tabela de histórico de candidatos HMVP.
[0080] O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para comparar cada um dos candidatos HMVP no primeiro subconjunto de candidatos HMVP com um subconjunto de entradas (por exemplo, menor do que todas as entradas) na lista de candidatos de vetor de movimento. Como um exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem construir a lista de candidatos de vetor de movimento baseado na informação de vetor de movimento dos blocos espacialmente vizinhos e dos blocos co-localizados. O codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar cada um dos candidatos HMVP no primeiro subconjunto de candidatos HMVP com duas entradas da lista de candidatos de vetor de movimento, e adicionar os candidatos HMVP no primeiro subconjunto de candidatos HMVP se os candidatos HMVP forem diferentes das entradas na lista de candidatos de vetor de movimento.
[0081] Por exemplo, o primeiro subconjunto de candidatos HMVP pode incluir um primeiro candidato HMVP e um segundo candidato HMVP. Neste exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar o primeiro candidato HMVP com uma primeira entrada na lista de candidatos de vetor de movimento e uma segunda entrada na lista de candidatos de vetor de movimento, e com nenhuma outra entrada na lista de candidatos de vetor de movimento. Se o primeiro candidato HMVP for diferente da primeira entrada e da segunda entrada, o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar o primeiro candidato HMVP à lista de candidatos de vetor de movimento.
[0082] O codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar o segundo candidato HMVP com a primeira entrada na lista de candidatos de vetor de movimento e com a segunda entrada na lista de candidatos de vetor de movimento, e com nenhuma outra entrada na lista de candidatos de vetor de movimento. Se o segundo candidato HMVP for diferente da primeira entrada e da segunda entrada, o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar o segundo candidato HMVP à lista de candidatos de vetor de movimento.
[0083] O primeiro candidato HMVP e o segundo candidato HMVP são usados para indicar que dois candidatos HMVP são selecionados a partir dos candidatos HMVP. O primeiro candidato HMVP e o segundo candidato HMVP podem ser os primeiros dois candidatos na tabela de histórico de candidatos HMVP, mas as técnicas ilustrativas não se limitam a isto. De forma similar, a primeira entrada e a segunda entrada na lista de preditores de vetor de movimento podem ser as primeiras duas entradas na lista de preditores de vetor de movimento, mas as técnicas ilustrativas não se limitam a isto.
[0084] Se, após a adição de um ou mais (por exemplo, um ou ambos) candidatos HMVP do primeiro subconjunto de candidatos HMVP, o número total de entradas na lista de preditores de vetor de movimento é menor do que o número máximo de entradas na lista de preditores de vetor de movimento, então o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar candidatos HMVP do segundo subconjunto de candidatos HMVP até que o tamanho da lista de preditores de vetor de movimento atinja o tamanho máximo ou não haja mais candidatos HMVP restantes no segundo subconjunto de candidatos HMVP. Em um ou mais exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar candidatos HMVP a partir do segundo subconjunto de candidatos HMVP sem comparar os candidatos HMVP do segundo subconjunto de candidatos HMVP com as entradas na lista de preditores de vetor de movimento.
[0085] O codificador de vídeo 200 e o decodificador de vídeo 300 podem construir a lista de preditores de vetor de movimento para incluir candidatos HMVP, ao mesmo tempo equilibrando o custo de realizar as operações de comparação com os benefícios de se minimizar a duplicação das entradas na lista de preditores de vetor de movimento. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar candidatos HMVP à lista de preditores de vetor de movimento sem realizar quaisquer operações de comparação para determinar se os candidatos HMVP são duplicatas das entradas já existentes na lista de preditores de vetor de movimento. Neste caso, existe uma possibilidade de que a lista de preditores de vetor de movimento se torne cheia, mas candidatos a preditores de vetor de movimento potencialmente bons (por exemplo, vetores de movimento que estão próximos ao vetor de movimento real) são excluídos, uma vez que vetores de movimento duplicados estão presentes na lista de preditores de vetor de movimento e a lista de preditores de vetor de movimento está cheia. Entretanto, comparar cada candidato HMVP com cada entrada na lista de preditores de vetor de movimento para excluir quaisquer duplicatas pode aumentar o tempo de processamento necessário para construir a lista de preditores de vetor de movimento, o que, por sua vez, aumenta o tempo do processo de codificação ou decodificação.
[0086] De acordo com um ou mais exemplos descritos na presente revelação, ao limitar o número de comparações entre os candidatos HMVP e as entradas na lista de preditores de vetor de movimento para determinar se há duplicatas, o número de operações de comparação que precisam ser executadas é limitado. Por exemplo, como descrito acima, o codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar um primeiro subconjunto dos candidatos HMVP (por exemplo, dois candidatos HMVP) com um subconjunto de entradas na lista de preditores de vetor de movimento (por exemplo, duas entradas na lista de preditores de vetor de movimento). O codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar um ou mais dos candidatos HMVP a partir do primeiro subconjunto que são diferentes do subconjunto de entradas da lista de preditores de vetor de movimento e excluir um ou mais dos candidatos HMVP do primeiro subconjunto que são iguais a uma das entradas no subconjunto de entradas da lista de preditores de vetor de movimento. Desta maneira, o número de comparações é reduzido se comparado ao caso em que todos os candidatos HMVP são comparados com todas as entradas na lista de preditores de vetor de movimento, diminuindo assim a quantidade de tempo necessária para construir a lista de preditores de vetor de movimento.
[0087] Adicionalmente, a probabilidade de que um candidato HMVP em particular seja uma duplicata de uma entrada na lista de preditores de vetor de movimento pode ser baseada em uma localização de um bloco do candidato HMVP e em um bloco cuja informação de vetor de movimento está incluída na lista de preditores de vetor de movimento. Por exemplo, uma primeira entrada na lista de preditores de vetor de movimento pode incluir informação de vetor de movimento de um bloco vizinho esquerdo e uma segunda entrada no preditor de vetor de movimento pode incluir informação de vetor de movimento de um bloco vizinho acima. Em alguns exemplos, um primeiro candidato HMVP pode ser informação de vetor de movimento de um bloco que é vizinho à esquerda do bloco vizinho esquerdo e um segundo candidato HMVP pode ser informação de vetor de movimento de um bloco que está acima do bloco vizinho acima.
[0088] Devido às localizações relativas do bloco para o primeiro candidato HMVP em relação aos blocos vizinhos esquerdo e acima, há uma maior probabilidade de que o primeiro candidato HMVP seja similar à primeira entrada ou à segunda entrada da lista de preditores de vetor de movimento do que qualquer outra entrada na lista de preditores de vetor de movimento. De forma similar, devido às localizações relativas do bloco para o segundo candidato HMVP em relação aos blocos vizinhos esquerdo e acima, há uma maior probabilidade de que o segundo candidato HMVP seja similar à primeira entrada ou à segunda entrada da lista de preditores de vetor de movimento do que qualquer outra entrada na lista de preditores de vetor de movimento.
[0089] Devido às localizações relativas do bloco para o primeiro candidato HMVP em relação ao bloco para a segunda HMVP, pode haver uma probabilidade relativamente baixa de que o primeiro candidato HMVP e o segundo candidato HMVP sejam iguais a qualquer uma das outras entradas (por exemplo, excluindo-se a primeira e segunda entradas) na lista de preditores de vetor de movimento. Além disso, devido às localizações relativas de seus respectivos blocos, há uma probabilidade relativamente baixa de que os candidatos HMVP restantes (por exemplo, excluindo-se o primeiro e segundo candidatos HMVP) sejam os mesmos que quaisquer das entradas na lista de preditores de vetor de movimento. Por conseguinte, em um ou mais exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar um segundo subconjunto dos candidatos HMVP à lista de preditores de vetor de movimento sem comparar os candidatos HMVP com quaisquer das entradas na lista de preditores de vetor de movimento até que a lista de preditores de vetor de movimento esteja cheia ou não haja mais candidatos HMVP disponíveis.
[0090] Novamente, no exemplo acima, o primeiro subconjunto dos candidatos HMVP que inclui o primeiro e segundo candidatos HMVP pode ser os primeiros dois candidatos HMVP na tabela de histórico de candidatos HMVP, mas as técnicas ilustrativas não se limitam a isto. Além disso, o segundo subconjunto de candidatos HMVP pode incluir os candidatos HMVP restantes excluindo-se o primeiro e segundo candidatos HMVP. Além do mais, o subconjunto de entradas na lista de preditores de vetor de movimento pode ser as primeiras duas entradas na lista de preditores de vetor de movimento, mas as técnicas ilustrativas não se limitam a isto.
[0091] A presente revelação pode se referir de forma geral à “sinalização” de certas informações, tais como elementos de sintaxe. O termo “sinalização” pode se referir, de forma geral, à comunicação de elementos de sintaxe de valores e/ou outros dados usados para decodificar dados de vídeo codificados. Ou seja, o codificador de vídeo 200 pode sinalizar valores para elementos de sintaxe no fluxo de bits. Em geral, a sinalização refere-se à geração de um valor no fluxo de bits. Como observado acima, o dispositivo de origem 102 pode transportar o fluxo de bits ao dispositivo de destino 116 substancialmente em tempo real, ou não em tempo real, tal como poderia ocorrer ao armazenar elementos de sintaxe no dispositivo de armazenamento 112 para recuperação posterior pelo dispositivo de destino 116.
[0092] Exemplos do codificador de vídeo 200 e do decodificador de vídeo 300 são ilustrados e descritos em mais detalhes com respeito às FIGS. 2 e 3. Antes de descreve4r as FIGS. 2 e 3, o que se segue descreve alguns detalhes adicionais do processo de codificação de vídeo,
tal como predição de vetor de movimento, com respeito às FIGS. 4A, 4B, 5 e à FIG. 6.
[0093] O que se segue é uma análise da estrutura de CU e da predição de vetor de movimento na HEVC. Na HEVC, a maior unidade de codificação em uma fatia é chamada de bloco de árvore de codificação (CTB) ou unidade de árvore de codificação (CTU). Um CTB contém uma árvore quaternária, cujos nós são unidades de codificação.
[0094] O tamanho de uma CTB pode variar de 16x16 a 64x64 no perfil principal da HEVC (ainda que, tecnicamente, tamanhos de CTB de 8x8 CTB possam ser suportados). Uma unidade de codificação (CU) poderia ser do mesmo tamanho de um CTB até um tamanho tão pequeno quanto 8x8. Cada unidade de codificação é codificada com um modo, tal como codificada no modo inter ou codificada no modo intra. A codificação no modo inter também pode ser chamada de codificação por predição inter ou predita no modo inter. A codificação no modo intra também pode ser chamada de codificação por predição intra ou predita no modo intra.
[0095] Quando uma CU é codificada no modo inter, a CU pode ser adicionalmente particionada em 2 ou 4 unidades de predição (PUs) ou pode ser uma PU quando a partição adicional não é aplicada. Quando duas PUs estão presentes em uma CU, as PUs podem ser semi-retângulos retângulos de tamanho duplo com ¼ ou ¾ do tamanho da CU. Quando a CU é codificada no modo inter, cada PU tem um conjunto de informações de movimento, que é derivado com um modo de predição inter.
[0096] O que se segue é uma visão geral da predição de vetor de movimento. No padrão HEVC, há dois modos de predição inter, chamados de modo de combinação (“merge”) (o salto é considerado como um caso especial de combinação) e modo de predição de vetor de movimento avançada (AMVP), respectivamente, para uma unidade de predição (PU). Tanto no modo AMVP quanto no modo de combinação, uma lista de candidatos de vetor de movimento (MV) é mantida para múltiplos preditores de vetor de movimento. A lista de candidatos MV pode ser chamada de lista de preditores de vetor de movimento. O(s) vetor(es) de movimento, bem como os índices de referência no modo de combinação, da PU atual, são gerados obtendo-se um candidato a partir da lista de candidatos MV. A lista de candidatos MV pode conter até 5 candidatos para o modo de combinação e apenas dois candidatos para o movo AMVP. Um candidato de combinação pode conter um conjunto de informações de movimento, por exemplo, vetores de movimento correspondendo a ambas as listas de imagem de referência (lista 0 e lista 1) e aos índices de referência. Se um candidato de combinação for identificado por um índice de combinação, as imagens de referência usadas para a predição do bloco atual, bem como os vetores de movimento associados, são determinados. Em outras palavras, o vetor de movimento e a imagem de referência identificados na lista de preditores de vetor de movimento pelo índice de combinação são definidos igual ao vetor de movimento e à imagem de referência do bloco atual.
[0097] Por outro lado, no modo AMVP, para cada direção de predição em potencial tanto da lista 0 quanto da lista 1, um índice de referência precisa ser sinalizado explicitamente, junto com um índice de preditor MV (MVP)
para a lista de candidatos MV, uma vez que o candidato AMVP contém apenas um vetor de movimento. No modo AMVP, os vetores de movimento preditos podem ser adicionalmente refinados (por exemplo, com base em uma diferença de vetor de movimento (MVD) descrita acima). Os candidatos para ambos os modos são derivados de maneira similar a partir dos mesmos blocos espaciais e temporais vizinhos.
[0098] O que se segue é uma visão geral dos blocos espaciais vizinhos cuja informação de vetor de movimento se forma como preditores de vetor de movimento. Em alguns exemplos, os candidatos MV espaciais (por exemplo, preditores de vetor de movimento espacial) são derivados a partir dos blocos vizinhos ilustrados nas FIGS. 4A e 4B para uma PU específica (PU0) 434 e 438, respectivamente, embora os métodos para gerar os candidatos a partir dos blocos divirjam para os modos de combinação e AMVP. A FIG. 4A é um diagrama conceitual mostrando candidatos vizinhos espaciais para o modo de combinação. A FIG. 4B é um diagrama conceitual mostrando candidatos vizinhos espaciais para o modo AMVP.
[0099] No modo de combinação, em alguns exemplos, até cinco candidatos MV espaciais podem ser derivados com a ordem ilustrada na FIG. 4A, e a ordem é a seguinte: esquerda (0, A1), superior (1, B1), superior- direita (2, B0), inferior-esquerda (3, A0), e superior- esquerda (4, B2), como mostra a FIG. 4A. Por exemplo, para PU0 434, o bloco A1 é identificado como 0 e está à esquerda da PUO 434, o bloco B1 é identificado como 1 e está acima da PUO 434, o bloco B0 é identificado como 2 e está acima à direita da PUO 434 e acima da PU1 436, o bloco A0 pé identificado como 3 e está abaixo à esquerda da PUO 434, e o bloco B2 é identificado como 4 e está acima à esquerda da PUO 434.
[00100] No modo AMVP, em alguns exemplos, os blocos vizinhos são divididos em dois grupos: um grupo esquerdo que inclui o bloco0 e 1 que estão abaixo à esquerda e à esquerda da PUO 438, respectivamente, e um grupo acima que inclui os blocos 2, 3 e 4 que estão acima à direita, acima e acima à esquerda da PU0 438 como ilustrado na FIG. 4B. O bloco 2 está acima da PU1 440. Para cada grupo, o candidato em potencial é um bloco vizinho referindo-se à mesma imagem de referência que a indicada pelo índice de referência sinalizado tem a maior prioridade para ser escolhido para formar um candidato final do grupo. Todos os blocos vizinhos podem não conter 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 pode ser escalonado para formar o candidato final, e assim, as diferenças de distância temporal podem ser compensadas.
[00101] O que se segue é uma visão geral da predição de vetor de movimento temporal com a FIG. 5. A FIG. 5 é um diagrama conceitual ilustrando um candidato de preditor de vetor de movimento temporal (TMVP) e o escalonamento de vetor de movimento para TMVP.
[00102] Em alguns exemplos, um candidato TMVP, se habilitado e disponível, é adicionado à lista de candidatos MV (por exemplo, lista de preditores de vetor de movimento0 após candidatos de vetor de movimento espacial (por exemplo, informação de vetor de movimento dos blocos espacialmente vizinhos). O processo de derivação de vetor de movimento para o candidato TMVP é o mesmo tanto para os modos de combinação quanto de AMVP, entretanto, o índice de referência alvo para o candidato TMVP no modo de combinação é definido como 0.
[00103] Em alguns exemplos, a localização do bloco primário para derivação do candidato TMVP é o bloco inferior direito fora da PU-colocalizada, como mostra a FIG. 5 como um bloco T 540. A localização do bloco T 540 pode ser para compensar o viés para os blocos acima e esquerdo usados para gerar candidatos vizinhos espaciais. Entretanto, se o bloco T 540 estiver localizado fora da linha de CTB atual ou a informação de movimento não estiver disponível para o bloco T 540, o bloco T 540 é substituído por um bloco central 541 da PU.
[00104] Na FIG. 5, um vetor de movimento 548 para o candidato TMVP na imagem atual 550 é derivado da PU co-localizada da imagem co-localizada 546, indicada no nível de fatia. O vetor de movimento (MV) para a PU co- localizada é chamado de MV co-localizado 542. Para derivar o vetor de movimento de candidato TMVP, o MV co-localizado 542 pode ser escalonado para compensar as diferenças de distância temporal, como mostra a FIG. 5. Por exemplo, a diferença temporal entre a imagem co-localizada 546 e a imagem de referência co-localizada 544 e a diferença temporal entre a imagem atual 550 e a imagem de referência atual 552 é usada para escalonar o MV co-localizado 542 para gerar o vetor de movimento 548.
[00105] O que se segue é uma análise de alguns outros aspectos da predição de movimento na HEVC. Vários aspectos dos modos de combinação e AMVP são descritos abaixo.
[00106] Escalonamento do vetor de movimento: O valor dos vetores de movimento pode ser proporcional à distância das 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 contentora). Quando se utiliza um vetor de movimento para predizer o outro vetor de movimento, a distância da imagem contentora e da imagem de referência é calculada com base nos valores de Contagem de Ordem de Imagem (POC).
[00107] Para um vetor de movimento ser predito, tanto sua imagem contentora associada quanto a imagem de referência podem ser diferentes. Portanto, uma nova distância (baseada na POC) é calculada, e o vetor de movimento é escalonado com base nessas duas distâncias POC. Para um candidato vizinho espacial, as imagens contentoras para os dois vetores de movimento são as mesmas, enquanto que as imagens de referência são diferentes. Na HEVC, o escalonamento de vetor de movimento se aplica tanto à TMVP quanto à AMVP para candidatos vizinhos espaciais e temporais.
[00108] Geração de candidatos de vetor de movimento artificiais: Se uma lista de candidatos de vetor de movimento não estiver completo (por exemplo, menos candidatos do que um número predeterminado), candidatos de vetor de movimento artificial são gerados e inseridos no final da lista de candidatos até que a lista de candidatos tenha todos os candidatos. No modo de combinação, há dois tipos de candidatos de MV artificiais: candidato combinado derivado apenas para fatias B e zero candidatos usado somente para AMVP se o candidato combinado derivado somente para fatias B não fornecer candidatos artificiais suficientes para preencher a lista de candidatos.
[00109] Para cada par de candidatos que já estão na lista de candidatos e possuem a 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 referindo-se a uma imagem na lista 0 e do vetor de movimento de um segundo candidato referindo-se a uma imagem na lista 1.
[00110] Processo de poda para inserção candidatos: Pode ocorrer de candidatos de diferentes blocos serem os mesmos, o que diminui a eficiência de uma lista de candidatos de combinação / AMVP. Um processo de poda é aplicado para enfrentar este problema. O processo de poda compara um candidato com os outros na lista de candidatos atual para evitar a inserção de candidatos idênticos. Para reduzir a complexidade, somente um número limitado de processos de poda é aplicado para evitar comparar cada candidato em potencial com todos os outros candidatos existentes na lista.
[00111] O desenvolvimento da VVC inclui predição de vetor de movimento aprimorada. Por exemplo, várias ferramentas de codificação inter foram propostas, as quais derivam ou refinam a lista de candidatos de predição de vetor de movimento ou predição de combinação para um bloco atual. Vários exemplos são descritos abaixo.
[00112] O que se segue descreve a predição de movimento baseada em histórico (HMVP), como descrito em L.
Zhang, K. Zhang, H. Liu, Y. Wang, P. Zhao e D. Hong,“CE4- related: History-based Motion Vector Prediction”, JVET- K0104, julho, 2018. A HMVP é um método baseado em histórico no qual o codificador de vídeo 200 e o decodificador de vídeo 300 determinam um preditor MV para cada bloco a partir de uma lista de MVs decodificados do passado, além dos MVs em campos de movimento vizinho causal imediatamente adjacentes (por exemplo, MVs de blocos imediatamente espacialmente vizinhos são exemplos de MVs em campos de movimento vizinho causal imediatamente adjacentes). O HMVP inclui o codificador de vídeo 200 e o decodificador de vídeo 300 construindo uma tabela para vetores de movimento decodificados anteriormente como candidatos HMVP.
[00113] Em algumas modalidades, o codificador de vídeo 200 e o decodificador de vídeo 300 podem construir uma tabela com múltiplos candidatos HMVP durante o processo de codificação/decodificação. Construir a tabela pode incluir adicionar candidatos HMVP à tabela, bem como remover candidatos HMVP da tabela. O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para esvaziar a tabela (por exemplo, remover os candidatos HMVP) quando uma nova fatia é encontrada para codificação ou decodificação. Sempre que houver um bloco codificado no modo inter, o codificador de vídeo 200 e o decodificador de vídeo 300 pode ser configurado para inserir a informação de movimento associada na tabela no esquema “Primeiro a entrar, Primeiro a sair” (FIFO) como um novo candidato HMVP. Então, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para aplicar uma regra FIFO de restrição. Em algumas técnicas, ao inserir um candidato HMVP na tabela, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para primeiro aplicar uma verificação de redundância (por exemplo, poda) para determinar se há um candidato HMVP idêntico na tabela. Se encontrado, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para remover esse candidato HMVP específico da tabela e todos os candidatos HMVP após esse candidato são movidos.
[00114] O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para usar candidatos HMVP no processo de construção de lista de candidatos de combinação. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para inserir todos os candidatos HMVP da última entrada para a primeira entrada na tabela após o candidato TMVP. O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para aplicar poda nos candidatos HMVP. Uma vez que o número total de candidatos de fusão disponíveis alcance o número máximo predeterminado ou sinalizado de candidatos de combinação permitidos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para terminar o processo de construção de lista de candidatos de combinação. A construção de lista de candidatos de combinação é um exemplo de construção de uma lista de preditores de vetor de movimento.
[00115] De maneira similar, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para usar candidatos HMVP no processo de construção de lista de candidatos AMVP para construir uma lista de candidatos AMVP. O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para inserir os vetores de movimento dos últimos K candidatos HMVP na tabela após o candidato TMVP. O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para usar somente candidatos HMVP com a mesma imagem de referência que a imagem de referência alvo AMVP para construir a lista de candidatos AMVP O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para aplicar poda nos candidatos HMVP. A construção de lista de candidatos AMVP é outro exemplo de construção de uma lista de preditores de vetor de movimento.
[00116] O que se segue descreve candidatos de combinação espacial não-adjacentes. A construção de candidatos de combinação espacial não-adjacentes, como descrita em R. Yu, et. al., “CE 4-2.1 : Adding non-adjacent spatial merge candidates”, Joint Video Experts Team (JVET) da ITU-T SG 16 WP 3 e em ISO/IEC JTC 1/SC 29/WG 11, 11th Meeting: Ljubljana, SI, 10-18 de julho de 2018 (doravante “JVET-K0228”), envolve a derivação de novos candidatos espaciais a partir de duas posições vizinhas não- adjacentes. Por exemplo, como mostra a FIG. 6, o codificador de vídeo 200 e o decodificador de vídeo 300 podem derivar novos candidatos espaciais a partir do bloco não-adjacente mais próximo 650 acima do bloco atual 648 e/ou a partir do bloco não-adjacente mais próximo 652 à esquerda do bloco atual 648. Por exemplo, a FIG. 6 ilustra o bloco atual 648 com os blocos vizinhos A0, A1, B2, B1 e B0. Em alguns exemplos, os candidatos de combinação espacial não-adjacentes incluem informação de movimento do bloco HN 652 e do bloco VN 650 da FIG. 6 que não estão espacialmente vizinhos ao bloco atual 648.
[00117] Isto é, a FIG. 6 ilustra exemplos de blocos cuja informação de vetor de movimento pode ser usada para construir a tabela de histórico de candidato HMVP. Os blocos 650 e 652 são limitados dentro de uma distância máxima de 1 CTU para o bloco atual 648. O processo de busca dos candidatos não-adjacentes inicia com o rastreamento dos blocos decodificados anteriores na direção vertical. O rastreamento inverso vertical para quando um bloco inter é encontrado ou a distância rastreada de volta atinge o tamanho de 1 CTU.
[00118] O processo de busca então rastreia os blocos decodificados anteriores na direção horizontal. O critério para interromper o processo de busca horizontal depende de se há um candidato vertical não-adjacente sendo buscado com êxito ou não. Se nenhum candidato não-adjacente vertical for buscado, o processo de busca horizontal para quando um bloco codificado no modo inter é encontrado ou a distância rastreada de volta excede o limiar de tamanho de um CTU. Se houver um candidato não-adjacente vertical buscado, então o processo de busca horizontal para quando um bloco codificado no modo inter que contém um MV diferente do candidato não-adjacente vertical é encontrado ou a distância rastreada de volta excede o limiar de tamanho de uma CTU. Os candidatos vizinhos não-adjacentes buscados são adicionados antes do candidato TMVP na lista de candidatos de combinação.
[00119] O que se segue descreve candidatos de média em pares.
Os candidatos de média em pares são usados no VTM3.0 (Modelo de Teste VVC 3.0). O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para gerar candidatos de média em pares pelo cálculo da média de pares predefinidos de candidatos na lista de candidatos de combinação atual (inclui candidatos espaciais, TMVP, e HMVP). Em um exemplo, os pares predefinidos são definidos como {(0, 1), (0, 2), (1, 2), (0, 3), (1, 3), (2, 3)}, onde os números denotam os índices de combinação para a lista de candidatos de combinação.
O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para calcular os vetores de movimento com média calculada separadamente para cada lista de referência.
Se ambos os vetores de movimento estiverem disponíveis em uma lista, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para calcular a média desses dois vetores de movimento, mesmo quando os dois vetores de movimento apontam para imagens de referência diferentes.
Se somente um vetor de movimento estiver disponível, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para usar o um vetor de movimento diretamente.
Se nenhum vetor de movimento estiver disponível, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para manter a(s) lista(s) de imagem de referência (por exemplo, uma ou ambas da lista 0 e da lista 1) inválida(s). Os candidatos de média em pares substituem os candidatos combinados no padrão HEVC.
[00120] Por exemplo, na predição bidirecional, um candidato de vetor de movimento pode incluir dois vetores de movimento apontando para duas referências na lista 0 e na lista 1, ou o candidato de vetor de movimento pode incluir somente um vetor de movimento apontando para a lista 0 (ou para a lista 1). Portanto, para o candidato unidirecional, uma lista é inválida (por exemplo, se o vetor de movimento estiver apontando para a lista 0, então a lista 1 é inválida, e vice-versa).
[00121] O que se segue descreve um exemplo de determinação do candidato médio em pares para o candidato 0 e o candidato 1, onde o candidato 0 é um candidato de bi- predição e inclui dois vetores de movimento: (MV0_list0(x_list0, y list0)) e (MV0_list1(x_list1, y_list1)) e o candidato 1 é uma predição unidirecional incluindo somente um vetor de movimento (MV1_list0(x_list0, y list0)). Neste exemplo, a lista 1 é inválida para o candidato 1, e o candidato em pares gerado é o MV bidirecional ((MV0_list0+MV1_list0/2), MV0_list1).
[00122] Como descrito acima, o modo de predição HMVP usa uma tabela de consulta baseada em histórico que armazena MVs decodificados do passado. A tabela de consulta HMVP (também chamada de tabela de histórico de candidatos HMVP) pode ser aplicada nos modos de predição inter, tal como no modo de combinação e no modo AMVP. Ao adicionar um candidato HMVP da tabela de histórico a uma lista de combinação ou uma lista AMVP, o codificador de vídeo 200 e o codificador de vídeo 300 podem ser configurados para aplicar uma verificação de redundância para descobrir se há um candidato idêntico (por exemplo, duplicado) na lista. Em alguns exemplos, como descrito acima, a aplicação de uma verificação de redundância completa pode ser complexa demais (por exemplo, exigir muitos recursos computacionais ou ciclos de clock), especialmente para implementação em hardware. Em alguns exemplos, a tabela de histórico de candidatos HMVP deverá ser atualizada após codificar/decodificar uma CU inter. Além disso, ao adicionar um novo candidato HMVP à tabela de histórico de candidatos HMVP, uma verificação de redundância também é aplicada.
[00123] Em virtude dessas desvantagens, a presente revelação descreve várias técnicas em que o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para construir uma tabela de histórico de candidatos HMVP usando um processo de construção modificado. Além disso, a presente revelação descreve técnicas adicionais em que o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para determinar um candidato a partir da tabela de histórico de candidato HMVP para usar em uma lista de preditores de vetor de movimento (por exemplo, para uma lista de preditores de vetor de movimento de combinação, para uma lista de preditores de vetor de movimento afim e/ou para uma lista de preditores de vetor de movimento AMVP).
[00124] Em um exemplo da revelação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para adicionar um novo candidato HMVP à tabela de histórico de candidatos HMVP sem realizar uma verificação de redundância. Se o número dos candidatos
HMVP atingir o tamanho máximo permitido da tabela de histórico de candidatos HMVP, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para remover o candidato HMVP mais antigo na tabela, e então adicionar o novo candidato HMVP.
[00125] Em outro exemplo da revelação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para subamostrar a tabela de histórico de candidatos HMVP ao adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP a uma lista de preditores de vetor de movimento, tal como uma lista de candidatos de combinação, lista de candidatos AMVP ou lista de candidatos afins. Por exemplo, o tamanho da tabela de histórico de candidatos HMVP pode ser N, a taxa de subamostragem pode ser R, e a posição inicial na tabela de históricos de candidatos HMVP pode ser S. Em um exemplo, N = 10, R = 3, S = 1. Logo, a tabela de histórico de candidatos HMVP é {c1, c2, c3, c4, c5, c6, c7, c8, c9, c10}. Na ordem natural, os candidatos HMVP selecionados são {c1, c4, c7, c10}. Se usando a ordem inversa para selecionar os candidatos, os candidatos HMVP selecionados são {c10, c7, c4, c1}.
[00126] Isto é, em um exemplo, os candidatos HMVP incluem {c1, c2, c3, c4, c5, c6, c7, c8, c9, c10}. Se a taxa de subamostragem for 3, então o codificador de vídeo 200 e o decodificador de vídeo 300 podem selecionar toda terceira amostra. Se a posição da subamostragem for 1, então o codificador de vídeo 200 e o decodificador de vídeo 300 selecionam o primeiro candidato HMVP e então selecionam cada terceira amostra. Por exemplo, na direção para frente,
a primeira amostra é c1, seguido de c4 (terceira amostra após c1), então c7 (terceira amostra após c4) e c10. Na direção para trás, partindo de c10, o resultado da subamostragem é {c10, c7, c4, c1}.
[00127] A subamostragem é oferecida como um exemplo, e as técnicas não se limitam a tal. Em alguns exemplos, pode não haver subamostragem da tabela de histórico de candidatos HMVP.
[00128] Em outro exemplo da revelação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para usar um algoritmo de poda simplificado para adicionar candidatos HMVP a partir da tabela de histórico de candidatos HMVP a listas de preditores de vetor de movimento (tal como uma lista de candidatos de combinação, uma lista de candidatos AMVP ou uma lista de candidatos afins). Em exemplo, ao adicionar um candidato HMVP da tabela de histórico de candidatos HMVP a uma lista de preditores de vetor de movimento (por exemplo, lista de combinação), o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar os candidatos HMVP por candidatos predefinidos. O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar cada candidato HMVP pelos mesmos candidatos predefinidos ou por candidatos predefinidos diferentes. Os candidatos predefinidos podem ser especificados pelas posições ou tipos dos candidatos.
[00129] Por exemplo, o número de candidatos predefinidos é Y. Ao adicionar um candidato HMVP a uma lista de predição de vetores de movimento, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar o candidato HMVP usando um subconjunto de candidatos de Y. Para um exemplo, no VTM e no software de avaliação de desempenho Benchmark Set (BMS), como mostram as FIGS. 4A, 4B e 5, o conjunto de candidatos espaciais e temporais é {A1, B1, B0, A0, B2, TMVP}. Como descrito acima, A1 é identificado pelo número 0 na FIG. 4A, B1 é identificado como o número 1 na FIG. 4A, B0 é identificado como o número 2 na FIG. 4A, A0 é identificado como o número 3 na FIG. 4A, e B2 é identificado como o número 4 na FIG. 4A. O bloco TMVP é identificado como o bloco T 540 na FIG. 5.
[00130] Um HMVPi candidato pode ser podado por uma comparação com um subconjuntoi de Y candidatos. Y também pode incluir candidatos HMVP. Como um exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar um primeiro candidato HMVP (por exemplo, HMVP1) com um primeiro subconjunto (por exemplo, subconjunto1) de Y candidatos na lista de preditores de vetor de movimento e comparar um segundo candidato HMVP (por exemplo, HMVP2)( com o primeiro subconjunto de Y candidatos na lista de preditores de vetor de movimento. Neste exemplo, o subconjunto1 pode incluir duas entradas na lista de preditores de vetor de movimento (por exemplo, Y candidatos na lista de preditores de vetor de movimento é igual a duas entradas na lista de preditores de vetor de movimento).
[00131] Como um exemplo, Y é {A1, B1, B0, A0, B2, TMVP, HMVP1}. Como outro exemplo, Y é {A1, B1, B0, A0, B2, TMVP} (por exemplo, a lista de preditores de vetor de movimento é construída com base na informação de vetor de movimento dos blocos espacialmente e temporalmente vizinhos).
[00132] O subconjunto1 de Y é {A1 e B1} para indicar duas entradas na lista de preditores de vetor de movimento. Por exemplo, a informação de vetor de movimento do bloco A1 (por exemplo, bloco 0 na FIG. 4A) e a informação de vetor de movimento do bloco B1 (por exemplo, bloco 1 na FIG. 4A) pode ser duas entradas, e possivelmente as primeiras duas entradas, na lista de preditores de vetor de movimento.
[00133] Neste exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar o primeiro candidato HMVP com a informação de vetor de movimento do bloco A1 (por exemplo, bloco 0 na FIG. 4A) e com a informação de vetor de movimento do bloco B1 (por exemplo, bloco 1 na FIG. 4A). Se o primeiro candidato HMVP for diferente da informação de vetor de movimento do bloco A1 e da informação de vetor de movimento do bloco B1, então o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar o primeiro HMVP à lista de preditores de vetor de movimento. Se o primeiro candidato HMVP for igual à informação de vetor de movimento tanto do bloco A1 quanto do bloco B1, o codificador de vídeo 200 e o decodificador de vídeo 300 podem não adicionar o primeiro HMVP à lista de preditores de vetor de movimento.
[00134] Similarmente, neste exemplo, codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar o segundo candidato HMVP com a informação de vetor de movimento do bloco A1 (por exemplo, bloco 0 na FIG. 4A) e com a informação de vetor de movimento do bloco
B1 (por exemplo, bloco 1 na FIG. 4A). Se o segundo candidato HMVP for diferente da informação de vetor de movimento do bloco A1 e da informação de vetor de movimento do bloco B1, então o codificador de vídeo 200 e o decodificador de vídeo 300 podem adicionar o segundo HMVP à lista de preditores de vetor de movimento. Se o segundo candidato HMVP for igual à informação de vetor de movimento tanto do bloco A1 quanto do bloco B1, o codificador de vídeo 200 e o decodificador de vídeo 300 podem não adicionar o segundo HMVP à lista de preditores de vetor de movimento.
[00135] No exemplo acima, o primeiro e segundo candidatos HMVP podem ser considerados como sendo “podados” por {A1, B1}. Por exemplo, somente se o primeiro candidato HMVP for diferente da informação de vetor de movimento de A1 e B1 é que o primeiro candidato HMVP é adicionado à lista de preditores de vetores de movimento, e somente se o segundo candidato HMVP for diferente da informação de vetor de movimento de A1 e B1 é que o segundo candidato HMVP é adicionado à lista de preditores de vetor de movimento.
[00136] Em alguns exemplos, todos os candidatos HMVP são podados por {A1, B1}. Em outro exemplo, os candidatos HMVP são podados por {A1, B1, B0, A0}. Em outro exemplo, diferentes candidatos HMVP podem ser podados por diferentes candidatos. Por exemplo, no caso acima, o tamanho da tabela de histórico de candidatos HMVP é 10. O codificador de vídeo 200 e o decodificador 300 podem selecionar um dentre cada 3 candidatos HMVP para adicionar na lista de combinação {c1, c4, c7, c10}. O candidato c1 é podado por {A1, B1, B0}. O candidato c4 é podado por {A1,
B1}. O candidato c7 é podado por {A1}. O candidato de c10 não é podado. Em outro exemplo, os candidatos HMVP podem ser podados pelos outros candidatos HMVP.
[00137] Em outro exemplo, ao adicionar um candidato HMVP da tabela de histórico de candidatos HMVP a uma lista de preditores de vetor de movimento, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar os candidatos HMVP por candidatos predefinidos na lista de preditores de vetor de movimento (tal como a lista de candidatos de combinação, a lista de candidatos AMVP ou a lista de candidatos afins). Por exemplo, como descrito acima, ao adicionar candidatos HMVP à lista de combinação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar os candidatos HMVP pelos primeiros M candidatos na lista de combinação. Por exemplo, M=2. Ao adicionar um candidato HMVP a partir da tabela de histórico de candidatos HMVP à lista de combinação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar o candidato HMVP pelos primeiros dois candidatos na lista de combinação.
[00138] Dito de outra forma, o codificador de vídeo 200 e o decodificador de vídeo 300 podem construir uma lista de preditores de vetor de movimento (por exemplo, lista de combinação ou lista AMVP). O codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento (por exemplo, M=2 e as duas entradas são as primeiras duas entradas na lista de preditores de vetor de movimento) e com nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento. O codificador de vídeo 200 e o decodificador de vídeo 300 podem comparar um segundo candidato HMVP na tabela de histórico de candidatos HMVP com as duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o segundo candidato HMVP à lista de preditores de vetor de movimento quando o segundo candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento.
[00139] Em outro exemplo, ao adicionar um candidato HMVP à lista de combinação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar o candidato HMVP por tipos especificados de candidatos na lista de combinação. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar o novo candidato HMVP pelos candidatos espaciais adicionados anteriormente na lista de combinação. Como outro exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar o novo candidato HMVP pelos candidatos espaciais, e/ou pelos candidatos TMVP e/ou pelos candidatos HMVP na lista de combinação.
[00140] Como outro exemplo, ao adicionar um candidato HMVP à lista de combinação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar o candidato HMVP por um número especificado de candidatos de tipos especificados na lista de combinação. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para o candidato HMVP pelos primeiros M candidatos espaciais na lista de combinação.
[00141] Para outro exemplo, ao adicionar candidatos HMVP à lista de combinação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar os candidatos HMVP pelos W candidatos mais próximos na lista de combinação. Por exemplo, W = 2 e 4 candidatos podem ter sido adicionados na lista de combinação. Ao adicionar um novo candidato HMVP à lista de combinação, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar o novo candidato HMVP pelo terceiro e quarto candidatos na lista de combinação.
[00142] Para outro exemplo, ao adicionar candidatos HMVP à lista AMVP 0 (por exemplo, lista de imagens de referência 0), o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para selecionar os candidatos HMVP usando a mesma referência (mesmo índice de referência, ou mesmo POC) que o bloco de codificação atual. O codificador de vídeo 200 e o decodificador de vídeo 300 podem verificar os candidatos HMVP na ordem para frente ou na ordem para trás, como descrito acima. O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para podar um primeiro número M de candidatos HMVP pelo número especificado N de candidatos AMVP na lista. Para predição bidirecional, a lista AMVP 1 pode ser gerada da mesma maneira que a lista 0. Por exemplo, no modelo de teste virtual (VTM), o tamanho da lista AMVP é 2. Se M=1 e N=1, então somente o primeiro candidato HMVP é podado pelo primeiro candidato AMVP na lista. Se M=0, nenhuma poda é aplicada.
[00143] Em outro exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para definir um bloco (região) de tamanho WxH. O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para usar a mesma tabela de histórico de candidatos HMVP para blocos de codificação dentro da mesma região WxH.
[00144] A próxima seção está relacionada à organização da lista de combinação. Em um exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para não usar candidatos HMVP para geração de candidatos de média em pares. Para um exemplo, os pares predefinidos são definidos como {(0, 1), (0, 2), (1, 2), (0, 3), (1, 3), (2, 3)}, onde os números denotam os índices de combinação para a lista de candidatos de combinação. Se qualquer um dos candidatos no par for um candidato HMVP, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para não usar este par para gerar um candidato em pares.
[00145] Em outro exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para colocar os candidatos de média em pares na frente dos candidatos HMVP. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para reduzir o número de pares de candidatos em pares para ser N e colocar os N candidatos em pares na frente dos candidatos HMVP. Por exemplo, quando N=2, o codificador de vídeo 200 e o decodificador de vídeo 300 podem usar somente {(0,1), (0,2)} para gerar candidatos em pares e colocá-los na frente dos candidatos HMVP. Como outro exemplo, quando N=1, o codificador de vídeo 200 e o decodificador de vídeo 300 podem usar somente {(0,1)} para gerar candidatos em pares e colocá-los na frente dos candidatos HMVP.
[00146] Em um exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para realizar a poda por meio da comparação da direção de referência, e/ou do índice de referência, e/ou da POC, e/ou do vetor de movimento (com / sem escalonamento) entre dois preditores de vetor de movimento. Se uma ou mais das comparações corresponderem, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para não adicionar este preditor de vetor de movimento à lista de candidatos.
[00147] Em outro exemplo, o tamanho da tabela HMVP (N), a taxa de subamostragem (R), a posição inicial (S), o número de tabelas HMVP, os métodos de seleção, o método de poda e/ou o tamanho de região de WxH no qual os blocos de codificação compartilham a mesma tabela de histórico podem ser predefinidos tanto no codificador de vídeo 200 quanto no decodificador de vídeo 300, ou pode ser definido como um valor sinalizado a partir do codificador de vídeo 200 para o decodificador de vídeo 300 no nível de sequência, no nível de imagem, no nível de fatia ou no nível de bloco. Por exemplo, tal informação de exemplo pode ser sinalizada em um Conjunto de Parâmetros de Sequência (SPS), um Conjunto de Parâmetros de Imagem (PPS), um Cabeçalho de Fatia (SH), uma Unidade de Árvore de Codificação (CTU) ou uma Unidade de Codificação (CU).
[00148] A FIG. 2 é um diagrama de blocos ilustrando um exemplo de codificador de vídeo 200 que pode executar as técnicas da presente revelação. A FIG. 2 é proporcionada para fins de explicação e não deve ser considerada como limitação às técnicas conforme extensamente exemplificadas e descritas na presente revelação. Para fins de explicação, a presente revelação descreve o codificador de vídeo 200 no contexto de padrões de codificação de vídeo, tal como o padrão de codificação de vídeo HEVC e o padrão de codificação de vídeo H.266/VVC em desenvolvimento. Entretanto, as técnicas da presente revelação não se limitam a esses padrões de codificação de vídeo, e são aplicáveis de forma geral à codificação e decodificação de vídeo.
[00149] No exemplo da FIG. 2, o codificador de vídeo 200 inclui a memória de dados de vídeo 230, a unidade de seleção de modo 202, a unidade de geração de residual 204, a unidade de processamento de transformada 206, a unidade de quantização 208, a unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, a unidade de filtro 216, o armazenador de imagens decodificadas (DPB) 218 e a unidade de codificação por entropia.
[00150] A memória de dados de vídeo 230 pode armazenar dados de vídeo a serem codificados pelos componentes do codificador de vídeo 200. O codificador de vídeo 200 pode receber os dados de vídeo armazenados na memória de dados de vídeo 230 a partir, por exemplo, da origem de vídeo 104 (FIG. 1). O DPB 218 pode atuar como uma memória de imagem de referência que armazena dados de vídeo de referência para uso na predição de dados de vídeo subsequentes pelo codificador de vídeo 200. A memória de dados de vídeo 230 e o DPB 218 podem ser formados por qualquer de uma variedade de dispositivos de memória, tal como uma memória de acesso aleatório dinâmica (DRAM), inclusive DRAM síncrona (DRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória de dados de vídeo 230 e o DPB 218 podem ser proporcionados pelo mesmo dispositivo de memória ou por dispositivos de memória separados. Nos vários exemplos, a memória de dados de vídeo 230 pode estar no mesmo chip com outros componentes do codificador de vídeo 200, como ilustrado, ou fora do chip em relação a esses componentes.
[00151] Nesta revelação, referências à memória de dados de vídeo 230 não deverão ser interpretadas como sendo limitadas à memória interna ao codificador de vídeo 200, a menos que descrito especificamente como tal, ou à memória externa ao codificador de vídeo 200, a menos que descrito especificamente como tal. Em vez disso, referências à memória de dados de vídeo 230 deverão ser entendidas como memória de referência que armazena dados de vídeo que o codificador de vídeo 200 recebe para codificação (por exemplo, dados de vídeo para um bloco atual que deverá ser codificado). A memória 106 da FIG. 1 também pode proporcionar armazenamento temporário das saídas a partir das várias unidades do codificador de vídeo
200.
[00152] As várias unidades da FIG. 2 são ilustradas para auxiliar no entendimento das operações realizadas pelo codificador de vídeo 200. As unidades podem ser implementadas como circuitos de função fixa, circuitos programáveis ou uma combinação dos mesmos. Os circuitos de função fixa se referem a circuitos que oferecem funcionalidade específica, e são predefinidos nas operações que podem ser realizadas. Os circuitos programáveis se referem a circuitos que podem ser programados para executar tarefas diversas, e oferecem funcionalidade flexível nas operações que podem ser realizadas. Por exemplo, os circuitos programáveis podem executar software ou firmware que faz os circuitos programáveis operar da maneira definida pelas instruções do software ou firmware. Os circuitos de função fixa podem executar instruções de software (por exemplo, para receber parâmetros ou parâmetros de saída), mas os tipos de operações que os circuitos de função fixa executam são geralmente imutáveis. Em alguns exemplos, as uma ou mais das unidades podem ser blocos de circuito distintos (função fixa ou programáveis), e, em alguns exemplos, as uma ou mais unidades podem ser circuitos integrados.
[00153] O codificador de vídeo 200 pode incluir unidades de lógica aritmética (ALUs), unidades de função elementar (EFUs), circuitos digitais, circuitos analógicos e/ou núcleos programáveis, formados a partir de circuitos programáveis. Nos exemplos em que as operações do codificador de vídeo 200 são realizadas usando software executado pelos circuitos programáveis, a memória 106 (FIG. 1) pode armazenar o código-objeto do software que o codificador de vídeo 200 recebe e executa, ou outra memória dentro do codificador de vídeo 200 (não ilustrada) pode armazenar tais instruções.
[00154] A memória de dados de vídeo 230 é configurada para armazenar dados de vídeo recebidos. O codificador de vídeo 200 pode recuperar uma imagem dos dados de vídeo a partir da memória de dados de vídeo 230 e fornecer os dados de vídeo à unidade de geração residual 204 e à unidade de seleção de modo 202. Os dados de vídeo na memória de dados de vídeo 230 podem ser dados de vídeo brutos que deverão ser codificados.
[00155] A unidade de seleção de modo 202 inclui uma unidade de estimação de movimento 222, a unidade de compensação de movimento 224 e uma unidade de predição intra 226. A unidade de seleção de modo 202 pode incluir unidades funcionais adicionais para realizar predição de vídeo de acordo com outros modos de predição. Como exemplos, a unidade de seleção de modo 202 pode incluir uma unidade de paleta, uma unidade de cópia intra-bloco (que pode ser parte da unidade de estimação de movimento 222 e/ou da unidade de compensação de movimento 224), uma unidade de afinidade, uma unidade de modelo linear (LM), entre outras.
[00156] A unidade de seleção de modo 202 em geral coordena múltiplos passes de codificação para testar combinações de parâmetros de codificação e valores de taxa- distorção resultantes para tais combinações. Os parâmetros de codificação podem incluir particionamento das CTUs em CUs, modos de predição para as CUs, tipos de transformada para dados residuais das CUs, parâmetros de quantização para dados residuais das CUs, e assim por diante. A unidade de seleção de modo 202 pode, por fim, selecionar a combinação de parâmetros de codificação possuindo valores de taxa-distorção que são melhores do que as outras combinações testadas.
[00157] O codificador de vídeo 200 pode particionar uma imagem recuperada a partir da memória de dados de vídeo 230 em uma série de CTUs, e encapsular uma ou mais CTUs dentro de uma fatia. A unidade de seleção de modo 202 pode particionar uma CTU da imagem de acordo com uma estrutura em árvore, tal como a estrutura QTBT ou a estrutura de árvore quaternária da HEVC descrita acima. Como descrito acima, o codificador de vídeo 200 pode formar uma ou mais CUs a partir do particionamento de uma CTU de acordo com a estrutura em árvore. Tal CTU também pode ser chamada geralmente de “bloco de vídeo” ou “bloco”.
[00158] Em geral, a unidade de seleção de modo 202 também controla os componentes da mesma (por exemplo, a unidade de estimação de movimento 222, a unidade de compensação de movimento 224 e a unidade de predição intra 226) para gerar um bloco de predição para um bloco atual (por exemplo, uma CU atual, ou na HEVC, a parte sobreposta de uma PU e uma TU). Para a predição inter de um bloco atual, a unidade de estimação de movimento 222 pode realizar uma busca de movimento para identificar um ou mais blocos de referência que melhor correspondem em uma ou mais imagens de referência (por exemplo, uma ou mais imagens codificadas anteriormente armazenadas no DPB 218). Mais especificamente, a unidade de estimação 222 pode calcular um valor representativo de o quão similar um bloco de referência em potencial é em relação ao bloco atual, por exemplo, de acordo com a soma da diferença absoluta (SAD), a soma das diferenças quadráticas (SSD), a diferença absoluta média (MAD), as diferenças quadráticas médias (MSD), entre outros. A unidade de estimação de movimento 222 pode de maneira geral realizar esses cálculos usando diferenças de amostra por amostra entre o bloco atual e o bloco de referência sendo considerado. A unidade de estimação de movimento 222 pode identificar um bloco de referência possuindo um menor valor resultando desses cálculos, indicando um bloco de referência que melhor corresponda ao bloco atual.
[00159] A unidade de estimação de movimento 222 pode formar um ou mais vetores de movimento (MVs) que definem as posições dos blocos de referência nas imagens de referência em relação à posição do bloco atual em uma imagem atual. A unidade de estimação de movimento 222 pode então fornecer os vetores de movimento à unidade de compensação de movimento 224. Por exemplo, para predição inter unidirecional, a unidade de estimação de movimento 222 pode fornecer um único vetor de movimento, ao passo que, para a predição inter bidirecional, a unidade de estimação de movimento 222 pode fornecer dois vetores de movimento. A unidade de compensação de movimento 224 pode então gerar um bloco de predição usando os vetores de movimento. Por exemplo, a unidade de compensação de movimento 224 pode recuperar dados do bloco de referência usando o vetor de movimento. Como outro exemplo, se o vetor de movimento tiver precisão de amostra fracional, a unidade de compensação de movimento 224 pode interpolar valores para o bloco de predição de acordo com um ou mais filtros de interpolação. Além do mais, para predição inter bidirecional, a unidade de compensação de movimento 224 pode recuperar dados para dois blocos de referência identificados por respectivos vetores de movimento e combinar os dados recuperados, por exemplo, através de cálculo de média ou média ponderada amostra por amostra.
[00160] De acordo com as técnicas da presente revelação, a unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem realizar técnicas de predição inter e de predição de vetor de movimento usando uma tabela de histórico de candidatos HMVP. Por exemplo, como será explicado em mais detalhes abaixo, a unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem ser configuradas para construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP), adicionar um ou mais candidatos HMVP a partir da tabela de histórico de candidatos HMVP a uma lista de preditores de vetor de movimento, e codificar um bloco de dados de vídeo usando a lista de preditores de vetor de movimento.
[00161] Por exemplo, a unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem ser configuradas para construir uma tabela de histórico de candidato de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual. Por exemplo, a tabela de histórico de candidatos HMVP inclui candidatos HMVP, tal como informação de vetor de movimento de blocos que não são imediatamente adjacentes ao bloco atual. O bloco atual pode ser codificado em um modo de combinação, mas outros modos, como AMVP e/ou modo de cópia intra bloco (IBC), são possíveis.
[00162] A unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 também podem construir uma lista de preditores de vetor de movimento. A lista de preditores de vetor de movimento inclui informação de vetor de movimento de blocos espacialmente vizinhos ou blocos co-localizados (por exemplo, blocos temporalmente vizinhos). Como um exemplo, a lista de preditores de vetor de movimento pode incluir informação de vetor de movimento de um ou mais dos blocos espacialmente vizinhos A1, B1, B0, A0 e B2, em que, na FIG. 4A, o bloco A1 é identificado como 0 e está à esquerda da PU0 434, o bloco B1 é identificado como 1 e está acima da PU0 434, o bloco B0 é identificado como 2 e está acima à direita da PU0 434 e acima da PU1 436, o bloco A0 é identificado como 3 está abaixo à esquerda da PU0 434, e o bloco B2 é identificado como 4 e está acima à esquerda da PU0 434. A lista de preditores de vetor de movimento também pode incluir informação de vetor de movimento do bloco temporalmente vizinho T 540.
[00163] A unidade de estimação de movimento 222 e a unidade de compensação 224 podem adicionar um ou mais candidatos HMVP a partir da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento. Por exemplo, para adicionar os um ou mais candidatos HMVP a partir da tabela de histórico de candidatos HMVP, a unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem ser configuradas para comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento. A unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 também podem ser configuradas para comparar um segundo candidato HMVP na tabela de histórico de candidatos HMVP com as duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o segundo candidato HMVP à lista de preditores de vetor de movimento quando o segundo candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento.
[00164] Em alguns exemplos, uma primeira entrada das duas entradas na lista de preditores de vetor de movimento pode incluir a informação de vetor de movimento do bloco vizinho esquerdo (por exemplo, bloco A1 representado como 0 na FIG. 4A). Uma segunda entrada das duas entradas na lista de preditores de vetor de movimento pode incluir a informação de vetor de movimento do bloco vizinho acima (por exemplo, bloco B1 representado como 1 na FIG. 4A). A primeira entrada e a segunda entrada na lista de preditores de vetor de movimento podem ser as primeiras duas entradas na lista de preditores de vetor de movimento, mas as técnicas não se limitam a isto. Além disso, o primeiro candidato HMVP e o segundo candidato HMVP podem ser os primeiros dois candidatos na tabela de histórico de candidatos HMVP.
[00165] Em algumas exemplos, mesmo após a unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 incluírem um ou ambos do primeiro e segundo candidatos HMVP na lista de preditores de vetor de movimento, o tamanho da lista de preditores de vetor de movimento pode não ter alcançado seu tamanho máximo. Em tais casos, o primeiro e segundo candidatos HMVP podem ser considerados como um exemplo de um primeiro subconjunto de candidatos HMVP, embora mais candidatos HMVP possam ser incluídos no primeiro subconjunto de candidatos HMVP. A unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem adicionar um ou mais candidatos HMVP a partir de um segundo subconjunto de um ou mais candidatos HMVP que seguem o primeiro subconjunto de um ou mais candidatos HMVP na tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento sem comparar os um ou mais candidatos HMVP do segundo subconjunto com as entradas na lista de preditores de vetor de movimento.
[00166] A unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem ser configuradas para determinar um vetor de movimento para o bloco atual usado para identificar um bloco de predição. A unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem determinar uma entrada na lista de preditores de vetor de movimento com base no vetor de movimento determinado para o bloco atual. Por exemplo, para o modo de combinação, a unidade de estimação 222 e a unidade de compensação de movimento 224 podem determinar uma entrada na lista de preditores de vetor de movimento que possua a mesma informação de vetor de movimento que a informação de vetor de movimento do vetor de movimento determinado. Por o modo AMVP, a unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem determinar uma entrada na lista de preditores de vetor de movimento que possua a informação de vetor de movimento similar à informação de vetor de movimento do vetor de movimento determinado. A unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 também podem determinar uma diferença de vetor de movimento (MVD) entre a informação de vetor de movimento da entrada e o vetor de movimento determinado para o bloco atual.
[00167] Como outro exemplo, para predição intra, ou codificação de predição intra, a unidade de predição intra 226 pode gerar o bloco de predição a partir das amostras vizinhas ao bloco atual. Por exemplo, para modos direcionais, a unidade de predição intra 226 pode de modo geral combinar matematicamente valores de amostras vizinhas e preencher esses valores calculados na direção definida ao longo do bloco atual para produzir o bloco de predição. Como outro exemplo, para o modo DC, a unidade de predição intra 226 pode calcular uma média das amostras vizinhas para o bloco atual e gerar o bloco de predição para incluir esta média resultante para cada amostra do bloco de predição.
[00168] A unidade de seleção de modo 202 fornece o bloco de predição para a unidade de geração de residual 204. A unidade de geração de residual 204 recebe uma versão bruta, não codificada, do bloco atual a partir da memória de dados de vídeo 230 e do bloco de predição a partir da unidade de seleção de modo 202. A unidade de geração de residual 204 calcula diferenças amostra por amostra entre o bloco atual e o bloco de predição. As diferenças de amostra por amostra resultantes definem um bloco residual para o bloco atual. Em alguns exemplos, a unidade de geração de residual 204 também pode determinar diferenças entre valores de amostra no bloco residual para gerar um bloco residual usando modulação de código de pulso diferencial residual (RDPCM).
[00169] Em alguns exemplos, a unidade de geração residual 204 pode ser formada usando um ou mais circuitos subtratores que realizam a subtração binária.
[00170] Nos exemplos em que a unidade de seleção de modo 202 particiona CUs em PUs, cada PU pode ser associada a uma unidade de predição de luma e a unidades de predição de croma correspondentes. O codificador de vídeo 200 e o decodificador de vídeo 300 podem suportar PUs com vários tamanhos. Como indicado acima, o tamanho de uma CU pode se referir ao tamanho do bloco de codificação de luma da CU e o tamanho de uma PU pode se referir ao tamanho de uma unidade de predição de luma da PU. Supondo-se que o tamanho de uma CU específica seja 2N×2N, o codificador de vídeo 200 pode suportar tamanhos de PU de 2N×2N ou N×N para predição intra, e tamanhos de PU simétricos de 2N×2N, 2N×N, N×2N, N×N ou similar para predição inter. O codificador de vídeo 200 e o decodificador de vídeo 300 também podem suportar o particionamento assimétrico para tamanhos de PU de 2N×nU, 2N×nD, nL×2N e nR×2N para predição inter.
[00171] Nos exemplos em que a unidade de seleção de modo não particiona adicionalmente uma CU em PUs, cada CU pode ser associada a um bloco de codificação de luma e blocos de codificação de croma correspondentes. Como antes, o tamanho de uma CU pode se referir ao tamanho do bloco de codificação de luma da CU. O codificador de vídeo 200 e o decodificador de vídeo 300 podem suportar tamanhos de CU de 2Nx2N, 2NxN ou Nx2N.
[00172] Para outras técnicas de codificação de vídeo, tal como uma codificação no modo de cópia intra- bloco, uma codificação no modo afim e uma codificação no modo de modelo linear (LM), como alguns exemplos, a unidade de seleção de modo 202, via respectivas unidades associadas às técnicas de codificação, gera um bloco de predição para o bloco atual sendo codificado. Em alguns exemplos, tal como codificação no modo de paleta, a unidade de seleção de modo 202 pode não gerar um bloco de predição, e, em vez disso, gerar elementos de sintaxe que indicam a maneira em que deverá ser reconstruído o bloco baseado em uma paleta selecionada. Em tais modos, a unidade de seleção de modo 202 pode fornecer esses elementos de sintaxe à unidade de codificação por entropia 220 para serem codificados.
[00173] Como descrito acima, a unidade de geração residual 204 recebe os dados de vídeo para o bloco atual e o bloco de predição correspondente. A unidade de geração residual 204 então gera um bloco residual para o bloco atual. Para gerar o bloco residual, a unidade de geração de residual 204 calcula diferenças amostra por amostra entre o bloco de predição e o bloco atual.
[00174] A unidade de processamento de transformada 206 aplica uma ou mais transformadas ao bloco residual para gerar um bloco de coeficientes de transformada (chamado aqui de “bloco de coeficiente de transformada”). A unidade de processamento de transformada 206 pode aplicar várias transformadas a um bloco residual para formar o bloco de coeficientes de transformada. Por exemplo, a unidade de processamento de transformada 206 pode aplicar uma transformada discreta de cosseno (DCT), uma transformada direcional, uma transformada de Karhunen- Loeve (KLT), ou uma transformada conceitualmente similar a um bloco residual. Em alguns exemplos, a unidade de processamento de transformada 206 pode realizar múltiplas transformadas para um bloco residual, por exemplo, uma transformada primária e uma transformada secundária, tal como uma transformada rotacional. Em alguns exemplos, a unidade de processamento de transformada 206 não aplica transformadas a um bloco residual.
[00175] A unidade de quantização 208 pode quantizar os coeficientes de transformada em um bloco de coeficientes de transformada, para produzir um bloco de coeficientes de transformada quantizados. A unidade de quantização 208 pode quantizar coeficientes de transformada de um bloco de coeficientes de transformada de acordo com um valor de parâmetro de quantização (QP) associado ao bloco atual. O codificador de vídeo 200 (por exemplo,
através da unidade de seleção de modo 202) pode ajustar o grau de quantização aplicado aos blocos de coeficientes associados ao bloco atual por meio do ajuste do valor QP associado à CU. A quantização pode introduzir perda de informação, e, portanto, os coeficientes de transformada quantizados podem ter uma precisão menor do que os coeficientes de transformada originais produzidos pela unidade de processamento de transformada 206.
[00176] A unidade de quantização inversa 210 e a unidade de processamento de transformada inversa 212 podem aplicar quantização inversa e transformadas inversas a um bloco de coeficientes de transformada quantizado, respectivamente, para reconstruir um bloco residual a partir do bloco de coeficientes de transformada. A unidade de reconstrução 214 pode produzir um bloco reconstruído correspondendo ao bloco atual (embora potencialmente com o mesmo grau de distorção) com base no bloco residual reconstruído e em um bloco de predição gerado pela unidade de seleção de modo 202. Por exemplo, a unidade de reconstrução 214 pode adicionar amostras do bloco residual reconstruído a amostras correspondentes do bloco de predição geradas pela unidade de seleção de modo 202 para produzir o bloco reconstruído.
[00177] A unidade de filtro 216 pode realizar uma ou mais operações de filtro nos blocos reconstruídos. Por exemplo, a unidade de filtro 216 pode realizar operações de remoção do efeito de blocos para reduzir artefatos de blocagem ao longo das bordas das CUs. As operações da unidade de filtro 216 podem ser ignoradas, em alguns exemplos.
[00178] O codificador de vídeo 200 armazena blocos reconstruídos no DPB 218. Por exemplo, nos exemplos em que as operações da unidade de filtro 216 não são necessárias, a unidade de reconstrução 214 pode armazenar blocos reconstruídos para o DPB 218. Nos exemplos em que as operações de uma unidade de filtro 216 são necessárias, a unidade de filtro 216 pode armazenar os blocos reconstruídos filtrados para o DPB 218. A unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem recuperar uma imagem de referência a partir do DPB 218, formado a partir dos blocos reconstruídos (e potencialmente filtrados), para predizer no modo inter blocos de imagens subsequentemente codificadas. Além disso, a unidade de predição intra 226 pode usar blocos reconstruídos no DPB 218 de uma imagem atual para predizer, no modo intra, outros blocos na imagem atual.
[00179] Em geral, a unidade de codificação por entropia 220 pode codificar por entropia elementos de sintaxe recebidos a partir de outros componentes funcionais do codificador de vídeo 200. Por exemplo, a unidade de codificação por entropia 220 pode codificar por entropia blocos de coeficientes de transformada quantizados a partir da unidade de quantização 208. Como outro exemplo, a unidade de codificação por entropia 220 pode codificar por entropia elementos de sintaxe de predição (por exemplo, informação de movimento para predição inter ou informação no modo intra para predição intra) a partir da unidade de seleção de modo 202. A unidade de codificação por entropia 220 pode realizar uma ou mais operações de codificação por entropia nos elementos de sintaxe, que são outro exemplo de dados de vídeo, para gerar dados codificados por entropia. Por exemplo, a unidade de codificação por entropia 220 pode realizar uma operação de codificação de comprimento variável adaptativa ao contexto (CAVLC), uma operação CABAC, uma operação de codificação de comprimento de variável-para-variável (V2V), uma operação de codificação aritmética binária adaptável ao contexto baseada em sintaxe (SBAC), uma operação de codificação de Entropia de Particionamento de Intervalo de Probabilidade (PIPE), uma operação de codificação de Golomb Exponencial, ou outro tipo de operação de codificação por entropia nos dados. Em alguns exemplos, a unidade de codificação por entropia 220 pode operar no modo de desvio, em que os elementos de sintaxe não são codificados por entropia.
[00180] Como ilustrado, em alguns exemplos, a unidade de codificação por entropia 220 pode receber informação a partir da unidade de seleção de modo 202. Como um exemplo, a unidade de estimação de movimento 222 e a unidade de compensação de movimento 224 podem ser configuradas para emitir informação indicativa da entrada na lista de preditores de vetor de movimento (por exemplo, conforme construída usando as técnicas de exemplo descritas acima). A unidade de codificação por entropia 220 pode codificar e sinalizar a informação indicativa da entrada na lista de preditores de vetor de movimento. A unidade de codificação por entropia 220 também pode codificar e sinalizar informação indicativa de uma diferença entre o bloco de predição, identificado pelo vetor de movimento para o bloco atual, e o bloco atual.
[00181] O codificador de vídeo 200 pode emitir um fluxo de bits que inclui os elementos de sintaxe codificados necessários para reconstruir blocos de uma fatia ou imagem. Mais especificamente, a unidade de codificação por entropia 220 pode emitir o fluxo de bits.
[00182] As operações descritas acima são descritas com respeito a um bloco. Tal descrição deverá ser entendida como sendo operações para um bloco de codificação de luma e/ou blocos de codificação de croma. Como descrito acima, em alguns exemplos, o bloco de codificação de luma e os blocos de codificação de croma são componentes de luma e croma de uma CU. Em alguns exemplos, o bloco de codificação de luma e os blocos de codificação de croma são componentes de luma e croma de uma PU.
[00183] Em alguns exemplos, as operações realizadas com respeito a um bloco de codificação de luma não precisam ser repetidas para os blocos de codificação de croma. Como um exemplo, as operações para identificar um vetor de movimento (MV) e imagem de referência para um bloco de codificação de luma não precisam ser repetidas para identificar um MV e imagem de referência para os blocos de croma. Em vez disso, o MV para o bloco de codificação de luma pode ser escalonado para determinar o MV para os blocos de croma, e a imagem de referência pode ser a mesma. Como outro exemplo, o processo de predição intra pode ser o mesmo para os blocos de codificação de luma e os blocos de codificação de croma.
[00184] A FIG. 3 é um diagrama de blocos ilustrando um exemplo de decodificador de vídeo 300 que pode executar as técnicas da presente revelação. A FIG. 3 é proporcionada para fins de explicação e não é limitante às técnicas conforme extensamente exemplificadas e descritas na presente revelação. Para fins de explicação, a presente revelação descreve o decodificador de vídeo 300 de acordo com as técnicas de H.266/VVC, JEM e HEVC. Entretanto, as técnicas da presente revelação podem ser executadas por dispositivos de codificação de vídeo que são configurados para outros padrões de codificação de vídeo.
[00185] No exemplo da FIG. 3, o decodificador de vídeo 300 inclui a memória de armazenador de imagens codificadas (CPB) 320, a unidade de decodificação por entropia 302, a unidade de processamento de predição 304, a unidade de quantização inversa 306, a unidade de processamento de transformada inversa 308, a unidade de reconstrução 310, a unidade de filtro 312 e o armazenador de imagens decodificadas (DPB) 314. A unidade de processamento de predição 304 inclui a unidade de compensação de movimento 316 e a unidade de processamento de predição intra 318. A unidade de processamento de predição 304 pode incluir unidades adicionais para realizar predição de acordo com outros modos de predição. Como exemplos, a unidade de processamento de predição 304 pode incluir uma unidade de paleta, uma unidade de cópia intra- bloco (que pode ser parte da unidade de estimação de movimento), uma unidade afim, uma unidade de modelo linear (LM), entre outras. Em outros exemplos, o decodificador de vídeo 300 pode incluir mais componentes funcionais, menos componentes funcionais, ou componentes funcionais diferentes.
[00186] A memória CPB 320 pode armazenar dados de vídeo, tal como um fluxo de bits de vídeo codificado, para serem decodificados pelos componentes do decodificador de vídeo 300. Os dados de vídeo armazenados na memória CPB 320 podem ser obtidos, por exemplo, a partir do meio legível por computador 110 (FIG. 1). A memória CPB 320 pode incluir um CPB que armazena dados de vídeo codificados (por exemplo, elementos de sintaxe) de um fluxo de bits de vídeo codificado. Além disso, a memória CPB 320 pode armazenar outros dados de vídeo além dos elementos de sintaxe de uma imagem codificada, tais como dados temporários representando saídas das várias unidades do decodificador de vídeo 300. O DPB 314 em geral armazena imagens decodificadas, que o decodificador de vídeo 300 pode emitir e/ou usar como dados de vídeo de referência ao decodificar dados ou imagens subsequentes do fluxo de bits de vídeo codificado. A memória CPB 320 e o DPB 314 podem ser formados por qualquer de uma variedade de dispositivos de memória, tal como uma memória de acesso aleatório dinâmica (DRAM), inclusive DRAM síncrona (DRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. A memória CPB e o DPB 314 podem ser proporcionados pelo mesmo dispositivo de memória ou por dispositivos de memória separados. Nos vários exemplos, a memória CPB 320 pode estar no mesmo chip com outros componentes do decodificador de vídeo 300, ou fora do chip em relação a esses componentes.
[00187] Adicionalmente ou como alternativa, em alguns exemplos, o decodificador de vídeo 300 pode recuperar dados de vídeo codificados a partir da memória
120 (FIG. 1). Ou seja, a memória 120 pode armazenar dados como discutido acima com a memória CPB 320. De modo similar, a memória 120 pode armazenar instruções a serem executadas pelo decodificador de vídeo 300, quando toda ou parte da funcionalidade do decodificador de vídeo 300 é implementada em software a ser executado pelo conjunto de circuitos de processamento do decodificador de vídeo 300.
[00188] As várias unidades ilustradas na FIG. 3 são ilustradas para auxiliar no entendimento das operações executadas pelo decodificador de vídeo 300. As unidades podem ser implementadas como circuitos de função fixa, circuitos programáveis ou uma combinação dos mesmos. De maneira similar à FIG. 2, os circuitos de função fixa se referem a circuitos que oferecem funcionalidade específica, e são predefinidos nas operações que podem ser realizadas. Os circuitos programáveis se referem a circuitos que podem ser programados para executar tarefas diversas, e oferecem funcionalidade flexível nas operações que podem ser realizadas. Por exemplo, os circuitos programáveis podem executar software ou firmware que faz os circuitos programáveis operar da maneira definida pelas instruções do software ou firmware. Os circuitos de função fixa podem executar instruções de software (por exemplo, para receber parâmetros ou parâmetros de saída), mas os tipos de operações que os circuitos de função fixa executam são geralmente imutáveis. Em alguns exemplos, as uma ou mais das unidades podem ser blocos de circuito distintos (função fixa ou programáveis), e, em alguns exemplos, as uma ou mais unidades podem ser circuitos integrados.
[00189] O decodificador de vídeo 300 pode incluir ALUs, EFUs, circuitos digitais, circuitos analógicos e/ou núcleos programáveis formados a partir de circuitos programáveis. Nos exemplos em que as operações do decodificador de vídeo 300 são executadas por software sendo executado nos circuitos programáveis, a memória no chip ou fora do chip pode armazenar instruções (por exemplo, código-objeto) do software que o decodificador de vídeo 300 recebe e executa.
[00190] A unidade de decodificação por entropia 302 pode receber dados de vídeo codificados a partir do CPB e decodificar por entropia os dados de vídeo para reproduzir elementos de sintaxe. A unidade de processamento de predição 304, a unidade de quantização inversa 306, a unidade de processamento de transformada inversa 308, a unidade de reconstrução 310 e a unidade de filtro 312 podem gerar dados de vídeo decodificados com base nos elementos de sintaxe extraídos a partir do fluxo de bits.
[00191] Em geral, o decodificador de vídeo 300 reconstrói uma imagem em uma base de bloco por bloco. O decodificador de vídeo 300 pode realizar uma operação de reconstrução em cada bloco individualmente (em que o bloco atualmente sendo reconstruído, ou seja, decodificado, pode ser designado por “bloco atual”).
[00192] A unidade de decodificação por entropia 302 pode decodificar por entropia elementos de sintaxe definindo coeficientes de transformada quantizados de um bloco de coeficientes de transformada quantizado, bem como informação de transformada, tal como um parâmetro de quantização (QP) e/ou indicação(ões) de modo de transformada. A unidade de quantização inversa 306 pode usar o QP associado ao bloco de coeficientes de transformada quantizados para determinar um grau de quantização e, similarmente, um grau de quantização inversa para a unidade de quantização inversa 306 aplicar. A unidade de quantização inversa 306 pode, por exemplo, realizar uma operação de deslocamento de bits para a esquerda para quantizar inversamente os coeficientes de transformada quantizados A unidade de quantização inversa 306 pode, dessa maneira, formar um bloco de coeficientes de transformada incluindo coeficientes de transformada.
[00193] Após a unidade de quantização inversa 306 formar o bloco de coeficientes de transformada, a unidade de processamento de transformada inversa 308 pode aplicar uma ou mais transformadas inversas ao bloco de coeficientes de transformada para gerar um bloco residual associado ao bloco atual. Por exemplo, a unidade de processamento de transformada inversa 308 pode aplicar uma DCT inversa, uma transformada de inteiro inversa, uma transformada de Karhunen-Loeve inversa (KLT), uma transformada rotacional inversa, uma transformada direcional inversa, ou outra transformada inversa ao bloco de coeficientes.
[00194] Adicionalmente, a unidade de processamento de predição 304 gera um bloco de predição de acordo com elementos de sintaxe de informação de predição que foram decodificados por entropia pela unidade de decodificação por entropia 302. Por exemplo, se os elementos de sintaxe de informação de predição indicarem que o bloco atual é predito no modo inter, a unidade de compensação de movimento 316 pode gerar o bloco de predição. Neste caso, os elementos de sintaxe de informação de predição podem indicar uma imagem de referência no DPB 314 a partir da qual será recuperado um bloco de referência, bem como um vetor de movimento identificando uma localização do bloco de referência na imagem de referência em relação à localização do bloco atual na imagem atual. A unidade de compensação de movimento 316 pode em geral realizar o processo de predição inter de uma forma que é substancialmente similar à descrita com respeito à unidade de compensação de movimento 223 (FIG. 2).
[00195] De acordo com as técnicas da presente revelação, a unidade de compensação de movimento 316 pode realiza técnicas de predição inter e de predição de vetor de movimento ao codificar um bloco usando uma tabela de histórico de candidatos HMVP. Por exemplo, como será explicado em mais detalhes abaixo, a unidade de compensação de movimento 316 pode ser configurada para construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP), adicionar um ou mais candidatos HMVP a partir da tabela de histórico de candidatos HMVP a uma lista de preditores de vetor de movimento, e codificar um bloco de dados de vídeo usando a lista de preditores de vetor de movimento.
[00196] Por exemplo, a unidade de compensação de movimento 316 pode ser configurada para construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual. Por exemplo, a tabela de histórico de candidatos HMVP inclui candidatos HMVP, tal como informação de vetor de movimento de blocos que não são imediatamente adjacentes ao bloco atual. Como descrito abaixo, o bloco atual pode ser codificado em um modo de combinação, mas outros modos, como AMVP e/ou modo de cópia intra bloco (IBC), também são possíveis.
[00197] A unidade de compensação de movimento 316 também pode construir uma lista de preditores de vetor de movimento. A lista de preditores de vetor de movimento inclui informação de vetor de movimento de blocos espacialmente vizinhos ou blocos co-localizados (por exemplo, blocos temporalmente vizinhos). Como um exemplo, a lista de preditores de vetor de movimento pode incluir informação de vetor de movimento de um ou mais dos blocos espacialmente vizinhos A1, B1, B0, A0 e B2, em que, na FIG. 4A, o bloco A1 é identificado como 0 e está à esquerda da PU0 434, o bloco B1 é identificado como 1 e está acima da PU0 434, o bloco B0 é identificado como 2 e está acima à direita da PU0 434 e acima da PU1 436, o bloco A0 é identificado como 3 está abaixo à esquerda da PU0 434, e o bloco B2 é identificado como 4 e está acima à esquerda da PU0 434. A lista de preditores de vetor de movimento também pode incluir informação de vetor de movimento do bloco temporalmente vizinho T 540.
[00198] A unidade de compensação de movimento 316 pode adicionar um ou mais candidatos HMVP a partir da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento. Por exemplo, para adicionar os um ou mais candidatos HMVP a partir da tabela de histórico de candidatos HMVP, a unidade de compensação de movimento 316 pode ser configurada para comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento. A unidade de compensação de movimento 316 também pode ser configurada para comparar um segundo candidato HMVP na tabela de histórico de candidatos HMVP com as duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o segundo candidato HMVP à lista de preditores de vetor de movimento quando o segundo candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento.
[00199] Em alguns exemplos, uma primeira entrada das duas entradas na lista de preditores de vetor de movimento pode incluir a informação de vetor de movimento do bloco vizinho esquerdo (por exemplo, bloco A1 representado como 0 na FIG. 4A). Uma segunda entrada das duas entradas na lista de preditores de vetor de movimento pode incluir a informação de vetor de movimento do bloco vizinho acima (por exemplo, bloco B1 representado como 1 na FIG. 4A). A primeira entrada e a segunda entrada na lista de preditores de vetor de movimento podem ser as primeiras duas entradas na lista de preditores de vetor de movimento,
mas as técnicas não se limitam a isto. Além disso os primeiros candidatos HMVP e os segundos candidatos HMVP podem ser os primeiros dois candidatos na tabela de histórico de candidatos HMVP.
[00200] Em alguns exemplos, mesmo após a unidade de compensação de movimento 316 incluir um ou ambos do primeiro e segundo candidatos HMVP na lista de preditores de vetor de movimento, o tamanho da lista de preditores de vetor de movimento pode não ter alcançado seu tamanho máximo. Em tais casos, o primeiro e segundo candidatos HMVP podem ser considerados como um exemplo de um primeiro subconjunto de candidatos HMVP, embora mais candidatos HMVP possam ser incluídos no primeiro subconjunto de candidatos HMVP.
[00201] A unidade de compensação de movimento 316 pode adicionar um ou mais candidatos HMVP a partir de um segundo subconjunto de um ou mais candidatos HMVP que seguem o primeiro subconjunto de um ou mais candidatos HMVP na tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento sem comparar os um ou mais candidatos HMVP do segundo subconjunto com as entradas na lista de preditores de vetor de movimento.
[00202] Em alguns exemplos, a unidade de decodificação por entropia 302 pode decodificar informação indicativa de uma entrada na lista de preditores de vetor de movimento. A unidade de compensação de movimento 316 pode receber informação indicativa da entrada na lista de preditores de vetor de movimento e recuperar a informação de vetor de movimento a partir da entrada da lista de preditores de vetor de movimento.
[00203] A unidade de compensação de movimento 316 pode determinar o vetor de movimento para o bloco atual com base na informação de vetor de movimento recuperada. Por exemplo, no modo de combinação, a unidade de compensação de movimento 316 pode definir o vetor de movimento para o bloco atual igual à informação de vetor de movimento recuperada. No modo AMVP, a unidade de compensação de movimento 316 também pode receber uma diferença de vetor de movimento (MVD) entre a informação de vetor de movimento recuperada e o vetor de movimento real. A unidade de compensação de movimento 316 pode adicionar a MVD à informação de vetor de movimento recuperada determinar o vetor de movimento para o bloco atual.
[00204] A unidade de compensação de movimento 316 pode determinar um bloco de predição para o bloco atual com base no vetor de movimento para o bloco atual. Por exemplo, a unidade de compensação de movimento 316 pode recuperar valores de amostra a partir de uma imagem de referência que inclui um bloco de referência que é identificado pelo vetor de movimento. A unidade de compensação de movimento 316 pode determinar o bloco de predição com base nas amostras recuperadas.
[00205] Como outro exemplo, se os elementos de sintaxe de informação de predição indicarem que o bloco atual é predito no modo intra, a unidade de predição intra 318 pode gerar o bloco de predição de acordo com um modo de predição intra indicado pelos elementos de sintaxe de informação de predição. Novamente, a unidade de predição intra 318 pode em geral realizar o processo de predição intra de uma forma que é substancialmente similar à descrita com respeito à unidade de predição intra 226 (FIG. 2). A unidade de predição intra 318 pode recuperar dados de amostras vizinhas ao bloco atual a partir do DPB 314.
[00206] A unidade de reconstrução 310 pode reconstruir o bloco atual usando o bloco de predição e o bloco residual. Por exemplo, a unidade de reconstrução 310 pode adicionar amostras do bloco residual às amostras correspondentes do bloco de predição para reconstruir o bloco atual. Em outras palavras, a unidade de reconstrução 310 pode adicionar o bloco de predição à informação residual recebida indicativa de uma diferença entre o bloco de predição e o bloco atual para reconstruir o bloco atual.
[00207] A unidade de filtro 312 pode realizar uma ou mais operações de filtro nos blocos reconstruídos. Por exemplo, a unidade de filtro 312 pode realizar operações de remoção do efeito de blocos para reduzir artefatos de blocagem ao longo das bordas dos blocos reconstruídos. As operações da unidade de filtro 312 não são necessariamente executadas em todos os exemplos.
[00208] O decodificador de vídeo 300 pode armazenar os blocos reconstruídos no DPB 314. Como discutido acima, o DPB 314 pode fornecer informação de referência, tais como amostras de uma imagem atual para predição intra e imagens decodificadas anteriormente para compensação de movimento subsequente, à unidade de processamento de predição 304. Ademais, o decodificador de vídeo 300 pode emitir imagens decodificadas a partir do DPB para apresentação subsequente em um dispositivo de exibição, tal como o dispositivo de exibição 118 da FIG. 1.
[00209] Desta maneira, o decodificador de vídeo 300 representa um exemplo de um dispositivo de decodificação de vídeo incluindo uma memória configurada para armazenar dados de vídeo, e uma ou mais unidades de processamento implementadas em conjunto de circuitos e configurada para construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP), e adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP a uma lista de preditores de vetor de movimento, e codificar um bloco de dados de vídeo usando a lista de preditores de vetor de movimento.
[00210] A FIG. 7 é um fluxograma ilustrando um exemplo de método para codificação de um bloco atual. O bloco atual pode compreender uma CU atual. Embora descrito com respeito ao codificador de vídeo 200 (FIGS. 1 e 2), deve-se entender que outros dispositivos podem ser configurados para executar um método similar ao da FIG. 7.
[00211] Neste exemplo, o codificador de vídeo 200 inicialmente prediz o bloco atual (350). Por exemplo, o codificador de vídeo 200 pode formar um bloco de predição para o bloco atual. Em um ou mais exemplos, o codificador de vídeo 200 pode ser configurado para formar o bloco de predição baseado em um vetor de movimento. O codificador de vídeo 200 pode ser configurado para construir uma lista de preditores de vetor de movimento utilizando as técnicas ilustrativas descritas nesta revelação e informação de sinal para uma entrada na lista de preditores de vetor de movimento que o decodificador de vídeo 300 utiliza para determinar o vetor de movimento.
[00212] O codificador de vídeo 200 pode então calcular um bloco residual para o bloco atual (352). Para calcular o bloco residual, o codificador de vídeo 200 pode calcular uma diferença entre o bloco original, não- codificado, e o bloco de predição para o bloco atual. O codificador de vídeo 200 pode então transformar e quantizar coeficientes do bloco residual (354). Em seguida, o codificador de vídeo 200 pode varrer os coeficientes de transformada quantizados do bloco residual (356). Durante a varredura, ou após a varredura, o codificador de vídeo 200 pode codificar por entropia os coeficientes (358). Por exemplo, o codificador de vídeo 200 pode codificar os coeficientes usando CAVLC ou CABAC. O codificador de vídeo 200 pode então emitir os dados codificados por entropia do bloco (360).
[00213] A FIG. 8 é um fluxograma ilustrando um exemplo de método para decodificação de um bloco atual de dados de vídeo. O bloco atual pode compreender uma CU atual. Embora descrito com respeito ao decodificador de vídeo 300 (FIGS. 1 e 3), deve-se entender que outros dispositivos podem ser configurados para executar um método similar ao da FIG. 8.
[00214] O decodificador de vídeo 300 pode receber dados codificados por entropia para o bloco atual, tal como informação de predição codificada por entropia e dados codificados por entropia para coeficientes de um bloco residual correspondendo ao bloco atual (370). O decodificador de vídeo 300 pode decodificar por entropia os dados codificados por entropia para determinar a informação de predição para o bloco atual e reproduzir coeficientes do bloco residual (372). O decodificador de vídeo 300 pode predizer o bloco atual (374), por exemplo, usando um modo de predição intra ou inter, como indicado pela informação de predição para o bloco atual, para calcular um bloco de predição para o bloco atual.
[00215] Como um exemplo, o decodificador de vídeo 300 pode ser configurado para construir uma lista de preditores de vetor de movimento usando as técnicas ilustrativas descritas na presente revelação. O decodificador de vídeo 300 pode então receber uma entrada para a lista de preditores de vetor de movimento e pode determinar o vetor de movimento para o bloco atual baseado na informação de vetor de movimento na entrada da lista de preditores de vetor de movimento. O decodificador de vídeo 300 pode então calcular um bloco de predição com base no vetor de movimento determinado.
[00216] O decodificador de vídeo 300 pode então varrer inversamente os coeficientes reproduzidos (376), para criar um bloco de coeficientes de transformada quantizados. O decodificador de vídeo 300 pode então quantizar inversamente e transformar inversamente os coeficientes para produzir um bloco residual (378). O decodificador de vídeo 300 pode, por fim, decodificar o bloco atual através da combinação do bloco de predição e do bloco residual (380).
[00217] A FIG. 9 é um fluxograma ilustrando um método de codificação ilustrativo. Em prol da simplicidade da descrição, o exemplo da FIG. 9 é descrito com respeito a um conjunto de circuitos de processamento. Exemplos do conjunto de circuitos de processamento incluem conjunto de circuitos de processamento de função fixa e/ou programáveis que formam o codificador de vídeo 200 ou o decodificador de vídeo 300. Por exemplo, tanto o codificador de vídeo 200 quanto o decodificador de vídeo 300 podem ser configurados para realizar as técnicas ilustrativas descritas na presente revelação.
[00218] O conjunto de circuitos de processamento pode ser configurado para construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual (400). Por exemplo, o conjunto de circuitos de processamento pode acessar a memória (por exemplo, a memória de dados de vídeo 230 ou o DPB 314) em busca de informação de vetor de movimento de blocos codificados previamente que não são vizinhos imediato do bloco atual. O conjunto de circuitos de processamento pode adicionar a informação de vetor de movimento desses blocos codificados previamente à tabela de histórico de candidatos HMVP.
[00219] O conjunto de circuitos de processamento pode construir uma lista de preditores de vetor de movimento (402). O conjunto de circuitos de processamento pode construir a lista de preditores de vetor de movimento com informação de movimento de um ou mais blocos espacialmente vizinhos ou blocos co-localizados (por exemplo, blocos temporalmente vizinhos). Por exemplo, o conjunto de circuitos de processamento pode adicionar informação de vetor de movimento de blocos espacialmente vizinhos ou blocos co-localizados à lista de preditores de vetor de movimento para construir a lista de preditores de vetor de movimento.
[00220] Nas técnicas descritas na presente revelação, o conjunto de circuitos de processamento pode adicionalmente acrescentar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento para o bloco atual (404). O conjunto de circuitos de processamento pode adicionar os um ou mais candidatos HMVP para o bloco atual que é codificado em um modo de combinação, e, em geral, o conjunto de circuitos de processamento pode adicionar os um ou mais HMVP para o bloco atual que é codificado em um dentre um modo de combinação, um modo de predição de vetor de movimento avançada (AMVP) ou um modo de combinação de cópia intra bloco (IBC).
[00221] Para adicionar os um ou mais candidatos HMVP a partir da tabela de histórico de candidatos HMVP, o conjunto de circuitos de processamento pode ser configurado para comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento. Além disso, o conjunto de circuitos de processamento pode ser configurado para comparar um segundo candidato HMVP na tabela de histórico de candidatos HMVP com as duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento, e adicionar o segundo candidato HMVP à lista de preditores de vetor de movimento quando o segundo candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento. Em alguns exemplos, as duas entradas na lista de preditores de vetor de movimento podem ser uma primeira entrada para um bloco vizinho esquerdo do bloco atual e uma segunda entrada para um bloco vizinho acima do bloco atual.
[00222] Em alguns exemplos, o primeiro e segundo candidatos HMVP podem ser considerados como um primeiro subconjunto de candidatos HMVP. Entretanto, pode haver mais de dois candidatos HMVP no primeiro subconjunto de candidatos. O conjunto de circuitos de processamento pode ser adicionalmente configurado para adicionar um ou mais candidatos HMVP a partir de um segundo subconjunto de um ou mais candidatos HMVP que seguem o primeiro subconjunto de um ou mais candidatos HMVP na tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento sem comparar os um ou mais candidatos HMVP do segundo subconjunto com as entradas na lista de preditores de vetor de movimento.
[00223] O conjunto de circuitos de processamento pode ser configurado para codificar o bloco atual de dados de vídeo usando a lista de preditores de vetor de movimento (406). Como um exemplo, quando o conjunto de circuitos de processamento representa o decodificador de vídeo 300, o conjunto de circuitos de processamento pode ser configurado para recuperar informação de vetor de movimento a partir de uma entrada da lista de preditores de vetor de movimento, determinar um vetor de movimento para o bloco atual baseado na informação de vetor de movimento recuperada, determinar um bloco de predição com base no vetor de movimento, e adicionar o bloco de predição à informação residual recebida indicativa de uma diferença entre o bloco de predição e o bloco atual para reconstruir o bloco atual. Como outro exemplo, quando o conjunto de circuitos de processamento representa o codificador de vídeo 200, o conjunto de circuitos de processamento pode ser configurado para determinar um vetor de movimento para o bloco atual usado para identificar um bloco de predição, informação de sinal indicativa de uma entrada para a lista de preditores de vetor de movimento baseado no vetor de movimento determinado para o bloco atual, e informação residual de sinal indicativa de uma diferença entre o bloco de predição e o bloco atual.
[00224] Deve-se reconhecer que, dependendo do exemplo, certos atos ou eventos de qualquer uma das técnicas descritas aqui podem ser realizados em uma sequência diferente, podem ser adicionados, combinados, 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). Ademais, em certos exemplos, os atos ou eventos podem ser realizados simultaneamente, por exemplo, através de processamento multitarefa, processamento de interrupções ou múltiplos processadores, em vez de sequencialmente.
[00225] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Se implementadas em software, as funções podem ser armazenadas em ou transmitidas como uma ou mais instruções ou código em um meio legível por computador e executadas por uma unidade de processamento baseada em hardware. Os meios legíveis por computador podem incluir meios de armazenamento legíveis por computador, que correspondem a um meio tangível, tais como meios de armazenamento de dados, ou meios de comunicação incluindo qualquer meio que facilite a transferência de um programa de computador de um local para outro, por exemplo, de acordo com um protocolo de comunicação. Desta maneira, os meios legíveis por computador podem corresponder de forma geral a (a) meios de armazenamento legíveis por computador tangíveis que não são temporários, ou (2) a um meio de comunicação, tal como um sinal ou onda portadora. Os meios de armazenamento de dados podem ser qualquer meio disponível que possa ser acessado 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 na presente revelação. Um produto de programa de computador pode incluir um meio legível por computador.
[00226] A título de exemplo, e não limitação, tal meio de armazenamento legível por computador pode compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento em disco óptico, armazenamento em disco magnético ou outros dispositivos de armazenamento magnético, memória flash, ou qualquer outro meio que possa ser usado para armazenar código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessado por um computador. Além disso, qualquer conexão é designada apropriadamente como meio legível por computador. Por exemplo, se as instruções forem transmitidas a partir de um site da Internet, servidor ou outra fonte remota usando um cabo coaxial, cabo de fibra óptica, par trançado, linha digital do assinante (DSL), ou tecnologias sem fio, tal como infravermelho, rádio e microondas, então o cabo coaxial, cabo de fibra óptica, par trançado, DSL ou tecnologias sem fio, tal como infravermelho, rádio e microondas são incluídos na definição do meio. Deve-se compreender, entretanto, que os meios de armazenamento legíveis por computador e os meios de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios temporários, mas, em vez disso, são direcionados a meios de armazenamento tangíveis, não- temporários. O termo disco, como utilizado aqui, inclui disco compacto (CD), disco a laser, disco óptico, disco versátil digital (DVD), disco flexível e disco Blu-ray, em que os discos geralmente reproduzem dados magneticamente, ao passo que os discos reproduzem dados opticamente com laser. Combinações dos itens listados acima também deverão ser incluídas no escopo dos meios legíveis por computador.
[00227] As instruções podem ser executadas por um ou mais processadores, tais como um ou mais processadores de sinais digitais (DSPs), microprocessadores de uso geral, circuitos integrados de aplicação específica (ASICs), arranjos de portas programáveis em campo (FPGAs), ou outros conjuntos de circuitos de lógica discreta ou integrada equivalentes. Por conseguinte, o termo “processador”, como utilizado aqui, pode se referir a qualquer uma das estruturas anteriores ou a qualquer outra estrutura adequada para implementação das técnicas descrita aqui. Além disso, em alguns aspectos, a funcionalidade descrita aqui pode ser proporcionada dentro de módulos de hardware e/ou software dedicados configurados para codificação e decodificação, ou incorporados em um codec combinado. Além disso, as técnicas poderiam ser plenamente implementadas em um ou mais circuitos ou elementos lógicos.
[00228] As técnicas da presente revelação podem ser implementadas em uma grande variedade de dispositivos ou equipamentos, inclusive em um aparelho móvel sem fio, em um circuito integrado (IC) ou em um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nesta revelação para enfatizar aspectos funcionais dos dispositivos configurados para realizar as técnicas reveladas, mas não necessariamente precisam ser realizados por unidades de hardware diferentes. Em vez disso, como descrito acima, várias unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por um conjunto de unidades de hardware interoperacionais, incluindo um ou mais processadores como descrito acima, em conjunto com software e/ou firmware adequado.
[00229] Vários exemplos foram descritos. Esses e outros exemplos estão dentro do escopo das reivindicações a seguir.

Claims (25)

REIVINDICAÇÕES
1. Método de codificação de dados de vídeo, o método compreendendo: construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual dos dados de vídeo; construir uma lista de preditores de vetor de movimento; adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento, em que adicionar os um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP compreende: comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento; e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP é diferente de ambas as duas entradas na lista de preditores de vetor de movimento; e codificar o bloco atual de dados de vídeo usando a lista de preditores de vetor de movimento.
2. Método, de acordo com a reivindicação 1, em que adicionar um ou mais candidatos HMVP adicionalmente compreende: comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento; e adicionar o segundo candidato HMVP à lista de preditores de vetor de movimento quando o segundo candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento.
3. Método, de acordo com a reivindicação 1, em que a adição dos um ou mais candidatos HMVP compreende adicionar os um ou mais candidatos HMVP para o bloco atual que é codificado em um dentre um modo de combinação, um modo de predição de vetor de movimento avançada (AMVP), ou em um modo de combinação de cópia intra bloco (IBC).
4. Método, de acordo com a reivindicação 1, em que as duas entradas na lista de preditores de vetor de movimento compreendem uma primeira entrada para um bloco vizinho esquerdo do bloco atual e uma segunda entrada para um bloco vizinho acima do bloco atual.
5. Método, de acordo com a reivindicação 1, em que adicionar os um ou mais candidatos HMVP compreende adicionar um primeiro subconjunto de um ou mais candidatos HMVP, o método adicionalmente compreendendo: adicionar um ou mais candidatos HMVP a partir de um segundo subconjunto de um ou mais candidatos HMVP que seguem o primeiro subconjunto de um ou mais candidatos HMVP na tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento sem comparar os um ou mais candidatos HMVP do segundo subconjunto com as entradas na lista de preditores de vetor de movimento.
6. Método, de acordo com a reivindicação 1, em que construir a lista de preditores de vetor de movimento compreende construir a lista de preditores de vetor de movimento com informação de movimento de um ou mais blocos espacialmente vizinhos ou blocos co-localizados.
7. Método, de acordo com a reivindicação 1, em que codificar o bloco atual compreende decodificar o bloco atual, e em que decodificar o bloco atual compreende: recuperar informação de vetor de movimento a partir de uma entrada da lista de preditores de vetor de movimento; determinar um vetor de movimento para o bloco atual baseado na informação de vetor de movimento recuperada; determinar um bloco de predição baseado no vetor de movimento; e adicionar o bloco de predição à informação residual recebida indicativa de uma diferença entre o bloco de predição e o bloco atual para reconstruir o bloco atual.
8. Método, de acordo com a reivindicação 1, em que codificar o bloco atual compreende codificar o bloco atual, e em que codificar o bloco atual compreende: determinar um vetor de movimento para o bloco atual usado para identificar um bloco de predição; sinalizar informação indicativa de uma entrada na lista de preditores de vetor de movimento baseado no vetor de movimento determinado para o bloco atual; e sinalizar informação residual indicativa de uma diferença entre o bloco de predição e o bloco atual.
9. Dispositivo para codificação de dados de vídeo, o dispositivo compreendendo: uma memória configurada para armazenar:
uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual dos dados de vídeo, e uma lista de preditores de vetor de movimento; e um conjunto de circuitos de processamento configurado para: construir a tabela de histórico de candidatos HMVP para armazenamento na memória; construir a lista de preditores de vetor de movimento para armazenamento na memória; adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento, em que, para adicionar os um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP, o conjunto de circuitos de processamento é configurado para: comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento; e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento; e codificar o bloco atual de dados de vídeo usando a lista de preditores de vetor de movimento armazenada na memória.
10. Dispositivo, de acordo com a reivindicação 9, em que, para adicionar um ou mais candidatos HMVP, o conjunto de circuitos de processamento é configurado para: comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento; e adicionar o segundo candidato HMVP à lista de preditores de vetor de movimento quando o segundo candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento.
11. Dispositivo, de acordo com a reivindicação 9, em que, para adicionar os um ou mais candidatos HMVP, o conjunto de circuitos de processamento é configurado para adicionar os um ou mais candidatos HMVP para o bloco atual que é codificado em um dentre um modo de combinação, um modo de predição de vetor de movimento avançada (AMVP), ou em um modo de combinação de cópia intra bloco (IBC).
12. Dispositivo, de acordo com a reivindicação 9, em que as duas entradas na lista de preditores de vetor de movimento compreendem uma primeira entrada para um bloco vizinho esquerdo do bloco atual e uma segunda entrada para um bloco vizinho acima do bloco atual.
13. Dispositivo, de acordo com a reivindicação 9, em que, para adicionar os um ou mais candidatos HMVP, o conjunto de circuitos de processamento é configurado para adicionar um primeiro subconjunto dos um ou mais candidatos HMVP, e em que o conjunto de circuitos de processamento é configurado para:
adicionar um ou mais candidatos HMVP a partir de um segundo subconjunto de um ou mais candidatos HMVP que seguem o primeiro subconjunto de um ou mais candidatos HMVP na tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento sem comparar os um ou mais candidatos HMVP do segundo subconjunto com as entradas na lista de preditores de vetor de movimento.
14. Dispositivo, de acordo com a reivindicação 9, em que, para construir a lista de preditores de vetor de movimento compreende, o conjunto de circuitos de processamento é configurado para construir a lista de preditores de vetor de movimento com informação de movimento de um ou mais blocos espacialmente vizinhos ou blocos co-localizados.
15. Dispositivo, de acordo com a reivindicação 9, em que, para codificar o bloco atual, o conjunto de circuitos de processamento é configurado para decodificar o bloco atual, e em que, para decodificar o bloco atual, o conjunto de circuitos de processamento é configurado para: recuperar informação de vetor de movimento a partir de uma entrada da lista de preditores de vetor de movimento; determinar um vetor de movimento para o bloco atual baseado na informação de vetor de movimento recuperada; determinar um bloco de predição baseado no vetor de movimento; e adicionar o bloco de predição à informação residual recebida indicativa de uma diferença entre o bloco de predição e o bloco atual para reconstruir o bloco atual.
16. Dispositivo, de acordo com a reivindicação 9, em que, para codificar o bloco atual, o conjunto de circuitos de processamento é configurado para codificar o bloco atual, e em que, para codificar o bloco atual, o conjunto de circuitos de processamento é configurado para: determinar um vetor de movimento para o bloco atual usado para identificar um bloco de predição; sinalizar informação indicativa de uma entrada na lista de preditores de vetor de movimento baseado no vetor de movimento determinado para o bloco atual; e sinalizar informação residual indicativa de uma diferença entre o bloco de predição e o bloco atual.
17. Dispositivo, de acordo com a reivindicação 9, em que o dispositivo é um dispositivo de comunicação sem fio.
18. Meio de armazenamento não-temporário legível por computador armazenando instruções nele que, quando executadas, levam um ou mais processadores a: construir uma tabela de histórico de candidatos de predição de vetor de movimento baseada em histórico (HMVP) que inclui informação de vetor de movimento de blocos codificados anteriormente que se estendem para além dos blocos vizinhos adjacentes de um bloco atual dos dados de vídeo; construir uma lista de preditores de vetor de movimento; adicionar um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento, em que as instruções que fazem os um ou mais processadores adicionar os um ou mais candidatos HMVP da tabela de histórico de candidatos HMVP compreendem instruções que levam os um ou mais processadores a: comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento; e adicionar o primeiro candidato HMVP à lista de preditores de vetor de movimento quando o primeiro candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento; e codificar o bloco atual de dados de vídeo usando a lista de preditores de vetor de movimento.
19. Meio de armazenamento legível por computador, de acordo com a reivindicação 18, em que as instruções que levam os um ou mais processadores a adicionar um ou mais candidatos HMVP compreendem instruções que levam os um ou mais processadores a: comparar um primeiro candidato HMVP na tabela de histórico de candidatos HMVP com duas entradas na lista de preditores de vetor de movimento e nenhuma outra entrada na lista de preditores de vetor de movimento; e adicionar o segundo candidato HMVP à lista de preditores de vetor de movimento quando o segundo candidato HMVP for diferente de ambas as duas entradas na lista de preditores de vetor de movimento.
20. Meio de armazenamento legível por computador, de acordo com a reivindicação 18, em que as instruções que levam os um ou mais processadores a adicionar os um ou mais candidatos HMVP compreendem instruções que levam os um ou mais processadores a adicionar os um ou mais candidatos
HMVP para o bloco atual que é codificado em um de um modo de combinação,um modo de predição de vetor de movimento avançada (AMPV), ou em um modo de combinação de cópia intra bloco (IBC).
21. Meio de armazenamento legível por computador, de acordo com a reivindicação 18, em que as duas entradas na lista de preditores de vetor de movimento compreendem uma primeira entrada para um bloco vizinho esquerdo do bloco atual e uma segunda entrada para um bloco vizinho acima do bloco atual.
22. Meio de armazenamento legível por computador, de acordo com a reivindicação 18, em que as instruções que levam os um ou mais processadores a adicionar os um ou mais candidatos HMVP compreendem instruções que levam os um ou mais processadores a adicionar um primeiro subconjunto de um ou mais candidatos HMVP, em que as instruções adicionalmente compreendem instruções que levam os um ou mais processadores a: adicionar um ou mais candidatos HMVP a partir de um segundo subconjunto de um ou mais candidatos HMVP que seguem o primeiro subconjunto de um ou mais candidatos HMVP na tabela de histórico de candidatos HMVP à lista de preditores de vetor de movimento sem comparar os um ou mais candidatos HMVP do segundo subconjunto com as entradas na lista de preditores de vetor de movimento.
23. Meio de armazenamento legível por computador, de acordo com a reivindicação 18, em que as instruções que levam os um ou mais processadores a construir a lista de preditores de vetor de movimento compreendem instruções que levam os um ou mais processadores a construir a lista de preditores de vetor de movimento com informação de movimento de um ou mais blocos espacialmente vizinhos ou blocos co-localizados.
24. Meio de armazenamento legível por computador, de acordo com a reivindicação 18, em que as instruções que levam os um ou mais processadores a decodificar o bloco atual compreendem instruções que levam os um ou mais processadores a decodificar o bloco atual, e em que as instruções que levam os um ou mais processadores a decodificar o bloco atual compreendem instruções que levam os um ou mais processadores a: recuperar informação de vetor de movimento a partir de uma entrada da lista de preditores de vetor de movimento; determinar um vetor de movimento para o bloco atual baseado na informação de vetor de movimento recuperada; determinar um bloco de predição baseado no vetor de movimento; e adicionar o bloco de predição à informação residual recebida indicativa de uma diferença entre o bloco de predição e o bloco atual para reconstruir o bloco atual.
25. Meio de armazenamento legível por computador, de acordo com a reivindicação 18, em que as instruções que levam os um ou mais processadores a codificar o bloco atual compreendem instruções que levam os um ou mais processadores a codificar o bloco atual, e em que as instruções que levam os um ou mais processadores a decodificar o bloco atual compreendem instruções que levam os um ou mais processadores a:
determinar um vetor de movimento para o bloco atual usado para identificar um bloco de predição; sinalizar informação indicativa de uma entrada na lista de preditores de vetor de movimento baseado no vetor de movimento determinado para o bloco atual; e sinalizar informação residual indicativa de uma diferença entre o bloco de predição e o bloco atual.
BR112021009558-6A 2018-11-27 2019-11-27 simplificação da predição de vetor de movimento baseada em histórico BR112021009558A2 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862771981P 2018-11-27 2018-11-27
US62/771,981 2018-11-27
US16/696,008 US11184633B2 (en) 2018-11-27 2019-11-26 Simplification of history-based motion vector prediction
US16/696,008 2019-11-26
PCT/US2019/063674 WO2020113052A1 (en) 2018-11-27 2019-11-27 Simplification of history-based motion vector prediction

Publications (1)

Publication Number Publication Date
BR112021009558A2 true BR112021009558A2 (pt) 2021-08-17

Family

ID=68966059

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021009558-6A BR112021009558A2 (pt) 2018-11-27 2019-11-27 simplificação da predição de vetor de movimento baseada em histórico

Country Status (10)

Country Link
US (2) US11184633B2 (pt)
EP (1) EP3888369A1 (pt)
JP (1) JP7367018B2 (pt)
KR (1) KR20210091174A (pt)
CN (1) CN113170180A (pt)
BR (1) BR112021009558A2 (pt)
CL (1) CL2021001351A1 (pt)
SG (1) SG11202103959QA (pt)
TW (1) TW202107894A (pt)
WO (1) WO2020113052A1 (pt)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI719525B (zh) 2018-06-29 2021-02-21 大陸商北京字節跳動網絡技術有限公司 Lut與amvp之間的交互
EP3791586A1 (en) * 2018-06-29 2021-03-17 Beijing Bytedance Network Technology Co. Ltd. Concept of using one or multiple look up tables to store motion information of previously coded in order and use them to code following blocks
BR112020024142A2 (pt) 2018-06-29 2021-03-02 Beijing Bytedance Network Technology Co., Ltd. método para processamento de vídeo, aparelho para codificação de dados de vídeo, meio de armazenamento e meio de gravação legíveis por computador não transitório
EP3794825A1 (en) 2018-06-29 2021-03-24 Beijing Bytedance Network Technology Co. Ltd. Update of look up table: fifo, constrained fifo
EP4322533A3 (en) 2018-06-29 2024-03-06 Beijing Bytedance Network Technology Co., Ltd. Checking order of motion candidates in lut
JP7460617B2 (ja) 2018-06-29 2024-04-02 北京字節跳動網絡技術有限公司 Lut更新条件
WO2020003282A1 (en) 2018-06-29 2020-01-02 Beijing Bytedance Network Technology Co., Ltd. Managing motion vector predictors for video coding
CN114900694A (zh) 2018-06-29 2022-08-12 抖音视界(北京)有限公司 哪个查找表需要更新或不更新
TWI748202B (zh) 2018-07-02 2021-12-01 大陸商北京字節跳動網絡技術有限公司 Lamvr中取整和修剪的順序
CN111064961B (zh) 2018-09-12 2023-06-09 北京字节跳动网络技术有限公司 视频处理方法和装置
US11184633B2 (en) 2018-11-27 2021-11-23 Qualcomm Incorporated Simplification of history-based motion vector prediction
CN113170150B (zh) * 2018-12-03 2024-02-27 北京字节跳动网络技术有限公司 基于历史的运动矢量预测(hmvp)模式的部分修剪方法
KR102615471B1 (ko) 2018-12-12 2023-12-19 엘지전자 주식회사 히스토리 기반 모션 벡터 예측을 기반으로 비디오 신호를 처리하기 위한 방법 및 장치
KR20200078378A (ko) * 2018-12-21 2020-07-01 한국전자통신연구원 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체
EP3905691A4 (en) 2018-12-28 2022-12-21 Godo Kaisha IP Bridge 1 IMAGE DECODING DEVICE, IMAGE DECODING METHOD AND IMAGE DECODING PROGRAM
JP2020150530A (ja) * 2018-12-28 2020-09-17 株式会社Jvcケンウッド 画像符号化装置、画像符号化方法及び画像符号化プログラム
TWI829386B (zh) * 2018-12-28 2024-01-11 日商Jvc建伍股份有限公司 影像編碼裝置、影像編碼方法、影像編碼程式、影像解碼裝置、影像解碼方法及影像解碼程式
US20220078407A1 (en) * 2019-01-01 2022-03-10 Lg Electronics Inc. Method and apparatus for processing video signal on basis of inter prediction
KR102443965B1 (ko) * 2019-01-01 2022-09-19 엘지전자 주식회사 히스토리 기반 모션 벡터 예측을 기반으로 비디오 신호를 처리하기 위한 방법 및 장치
WO2020143741A1 (en) 2019-01-10 2020-07-16 Beijing Bytedance Network Technology Co., Ltd. Invoke of lut updating
CN113383554B (zh) 2019-01-13 2022-12-16 北京字节跳动网络技术有限公司 LUT和共享Merge列表之间的交互
CN113302937A (zh) 2019-01-16 2021-08-24 北京字节跳动网络技术有限公司 运动候选推导
US20220103854A1 (en) * 2019-01-31 2022-03-31 Mediatek Inc. Method and Apparatus of Combined Inter and Intra Prediction for Video Coding
US11595662B2 (en) * 2019-02-06 2023-02-28 Tencent America LLC Method and apparatus for neighboring block availability in video coding
CA3130472A1 (en) 2019-02-24 2020-08-27 Beijing Bytedance Network Technology Co., Ltd. Independent coding of palette mode usage indication
KR20210088688A (ko) * 2019-03-04 2021-07-14 후아웨이 테크놀러지 컴퍼니 리미티드 Ibc 병합 리스트를 사용하는 인코더, 디코더 및 대응하는 방법들
US11166015B2 (en) * 2019-03-06 2021-11-02 Tencent America LLC Method and apparatus for video coding
WO2020192611A1 (en) 2019-03-22 2020-10-01 Beijing Bytedance Network Technology Co., Ltd. Interaction between merge list construction and other tools
WO2020192726A1 (en) * 2019-03-27 2020-10-01 Beijing Bytedance Network Technology Co., Ltd. History-based motion vector prediction
CN117459744A (zh) 2019-07-20 2024-01-26 北京字节跳动网络技术有限公司 调色板模式使用指示的条件相关编解码
CN114145013B (zh) * 2019-07-23 2023-11-14 北京字节跳动网络技术有限公司 调色板模式编解码的模式确定
WO2021018166A1 (en) 2019-07-29 2021-02-04 Beijing Bytedance Network Technology Co., Ltd. Scanning order improvements for palette mode coding
CN113141507B (zh) * 2020-01-17 2022-07-15 腾讯科技(深圳)有限公司 视频编解码中的运动信息列表构建方法、装置及设备
CN113840148A (zh) * 2020-06-24 2021-12-24 Oppo广东移动通信有限公司 帧间预测方法、编码器、解码器以及计算机存储介质
CN113159921A (zh) * 2021-04-23 2021-07-23 上海晓途网络科技有限公司 一种逾期预测方法、装置、电子设备及存储介质
CN113794877B (zh) * 2021-06-30 2022-11-25 杭州海康威视数字技术股份有限公司 解码方法、编码方法、装置、设备及机器可读存储介质
WO2023030504A1 (en) * 2021-09-03 2023-03-09 Beijing Bytedance Network Technology Co., Ltd. Method, device, and medium for video processing

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7899117B2 (en) * 2004-05-26 2011-03-01 Panasonic Corporation Apparatus and method for encoding motion vector, and program and medium therefor
KR100829169B1 (ko) 2006-07-07 2008-05-13 주식회사 리버트론 H.264 코딩의 압축모드 예측 장치 및 방법
CN104885467B (zh) 2013-01-30 2018-08-17 英特尔公司 用于下一代视频编码的内容自适应参数变换
US10887597B2 (en) * 2015-06-09 2021-01-05 Qualcomm Incorporated Systems and methods of determining illumination compensation parameters for video coding
BR112020024142A2 (pt) 2018-06-29 2021-03-02 Beijing Bytedance Network Technology Co., Ltd. método para processamento de vídeo, aparelho para codificação de dados de vídeo, meio de armazenamento e meio de gravação legíveis por computador não transitório
US11212550B2 (en) * 2018-09-21 2021-12-28 Qualcomm Incorporated History-based motion vector prediction for affine mode
CN118055249A (zh) * 2018-09-22 2024-05-17 Lg 电子株式会社 使用间预测处理视频信号的方法和装置
WO2020065518A1 (en) 2018-09-24 2020-04-02 Beijing Bytedance Network Technology Co., Ltd. Bi-prediction with weights in video coding and decoding
US11184633B2 (en) 2018-11-27 2021-11-23 Qualcomm Incorporated Simplification of history-based motion vector prediction

Also Published As

Publication number Publication date
SG11202103959QA (en) 2021-06-29
US11184633B2 (en) 2021-11-23
JP2022507682A (ja) 2022-01-18
US11616974B2 (en) 2023-03-28
JP7367018B2 (ja) 2023-10-23
WO2020113052A1 (en) 2020-06-04
KR20210091174A (ko) 2021-07-21
CL2021001351A1 (es) 2021-12-17
TW202107894A (zh) 2021-02-16
CN113170180A (zh) 2021-07-23
US20200169745A1 (en) 2020-05-28
US20220046273A1 (en) 2022-02-10
EP3888369A1 (en) 2021-10-06

Similar Documents

Publication Publication Date Title
BR112021009558A2 (pt) simplificação da predição de vetor de movimento baseada em histórico
US10863193B2 (en) Buffer restriction during motion vector prediction for video coding
ES2954447T3 (es) Predicción de vectores de movimiento
AU2017340631B2 (en) Motion vector prediction for affine motion models in video coding
BR112021002219A2 (pt) lista de candidatos baseada em histórico com classificação
US11206396B2 (en) Local illumination compensation in video coding
BR112021000002A2 (pt) Mvps não adjacentes baseados em múltiplos históricos para processamento de frente de onda de código de vídeo
BR112020016133A2 (pt) Cópia intra-bloco para codificação de vídeo
BR112021002967A2 (pt) predição de movimento afim
BR112021009606A2 (pt) refinamento de vetor de movimento no lado do decodificador
BR112020006588A2 (pt) predição afim em codificação de vídeo
JP2019526988A (ja) 候補リストの構築のためのジオメトリベースの優先度
BR112021009721A2 (pt) informação de movimento triangular para codificação de vídeo
US20200053379A1 (en) Motion vector predictor list generation
BR112021015658A2 (pt) Restrições no refinamento de vetor de movimento no lado do decodificador
EP3756352A1 (en) Simplified local illumination compensation
BR112021014603A2 (pt) Geração de lista de preditores de vetor de movimento para modo de cópia de intrabloco em codificação de vídeo
BR112021009732A2 (pt) padrões de predição de vetor de movimento espaço-temporal para codificação de vídeo
US10958932B2 (en) Inter-prediction coding of video data using generated motion vector predictor list including non-adjacent blocks
BR112020025982A2 (pt) sinalização de preditor de vetor de movimento de unidade de subpredição
US11601666B2 (en) Derivation of temporal motion vector prediction candidates in video coding
BR112021000640A2 (pt) Arredondamento de vetores de movimento para resolução de diferença de vetor de movimento adaptativa e precisão de armazenamento de vetor de movimento aumentada em codificação de vídeo
KR102669354B1 (ko) 모션 벡터 예측
KR20240074911A (ko) 모션 벡터 예측