BR112021009721A2 - informação de movimento triangular para codificação de vídeo - Google Patents

informação de movimento triangular para codificação de vídeo Download PDF

Info

Publication number
BR112021009721A2
BR112021009721A2 BR112021009721-0A BR112021009721A BR112021009721A2 BR 112021009721 A2 BR112021009721 A2 BR 112021009721A2 BR 112021009721 A BR112021009721 A BR 112021009721A BR 112021009721 A2 BR112021009721 A2 BR 112021009721A2
Authority
BR
Brazil
Prior art keywords
motion vector
value
index value
triangular
list
Prior art date
Application number
BR112021009721-0A
Other languages
English (en)
Inventor
Hongtao Wang
Yung-Hsuan Chao
Han Huang
Vadim SEREGIN
Wei-Jung Chien
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 BR112021009721A2 publication Critical patent/BR112021009721A2/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/537Motion estimation other than block-based
    • H04N19/543Motion estimation other than block-based using regions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/115Selection of the code volume for a coding unit prior to coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

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

Abstract

INFORMAÇÃO DE MOVIMENTO TRIANGULAR PARA CODIFICAÇÃO DE VÍDEO. Esta revelação descreve determinar blocos de predição triangulares para um bloco atual dividido em um modo triangular. Um codificador de vídeo pode determinar índices em uma lista de preditores de vetor de movimento para identificar preditores de movimento utilizados para determinar o bloco de predição triangular. Se um primeiro valor de índice na lista de preditores de movimento para um primeiro bloco de predição triangular for menor do que um segundo valor de índice na lista de preditores de vetor de movimento para um segundo bloco de predição triangular, o valor sinalizado ou recebido para o segundo bloco de predição triangular pode ser o segundo valor de índice reduzido por um deslocamento.

Description

“INFORMAÇÃO DE MOVIMENTO TRIANGULAR PARA CODIFICAÇÃO DE VÍDEO”
[0001] Este pedido reivindica a prioridade do Pedido U.S. Nº 16/703.495, depositado em 4 de dezembro de 2019, o qual reivindica o benefício do Pedido Provisório U.S. Nº 62/775.802, depositado em 5 de dezembro de 2018, cujos conteúdos em suas totalidades são incorporados por referência neste documento.
CAMPO TÉCNICO
[0002] Esta revelação se refere à codificação e decodificação de vídeo.
ANTECEDENTES
[0003] As capacidades de vídeo digital podem ser incorporadas a uma ampla variedade de dispositivos, incluindo televisores digitais, sistemas de broadcast digital direto, sistemas de broadcast não cabeado, assistentes digitais pessoais (PDAs), computadores laptops ou computadores de mesa, computadores tablets, leitores de e-book, câmeras digitais, dispositivos de gravação digital, reprodutores de mídia digital, dispositivos de videogame, consoles de videogame, telefones celulares ou de rádio via satélite, os chamados “smartphones”, dispositivos de teleconferência de vídeo, dispositivos de fluxo contínuo de vídeo e similares. Dispositivos de vídeo digital implementam técnicas de codificação de vídeo, tais como aquelas descritas nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264 / MPEG-4, Part 10, Codificação de Vídeo Avançada (AVC), o padrão Codificação de Vídeo de Alta Eficiência (HEVC), ITU-T H.265 / 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ção de vídeo digital de forma mais eficiente pela 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 (entre imagens) para reduzir ou remover a redundância inerente às sequências de vídeo. Para codificação de vídeo baseada em bloco, uma fatia de vídeo (por exemplo, uma imagem de vídeo ou uma parte de uma imagem de vídeo) pode ser dividida em blocos de vídeo, que também podem ser referidos como 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 intra (I) de uma imagem são codificados utilizando predição espacial com respeito às amostras de referência em blocos vizinhos na mesma imagem. Blocos de vídeo em uma fatia codificada inter (P ou B) de uma imagem podem utilizar predição espacial com respeito às amostras de referência em 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, esta revelação descreve técnicas para codificar unidades de codificação (CUs) e unidades de predição (PUs) de formato triangular. As CUs ou as PUs triangulares podem ser conceitualmente consideradas como um bloco retangular dividido em dois triângulos. Como um exemplo, o bloco retangular pode ser dividido a partir do canto superior esquerdo até o canto inferior direito. Como outro exemplo, o bloco retangular pode ser dividido a partir do canto superior direito até o canto inferior esquerdo. Um codificador de vídeo pode determinar a informação de movimento para cada uma dentre as duas CUs ou PUs triangulares utilizando técnicas ilustrativas descritas nesta revelação.
[0006] Uma maneira de determinar a informação de movimento para as PUs da CU é baseada em uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de blocos vizinhos. Um codificador de vídeo pode determinar um primeiro índice na lista de preditores de vetor de movimento para uma primeira PU triangular e um segundo índice na lista de preditores de vetor de movimento para uma segunda PU triangular.
[0007] Para reduzir a quantidade de informação que o codificador de vídeo precisa sinalizar, se o valor do segundo índice for maior do que o valor do primeiro índice, o codificador de vídeo pode subtrair um deslocamento do valor do segundo índice e sinalizar o valor resultante. O decodificador de vídeo recebe o valor e adiciona o deslocamento para determinar o valor do segundo índice. Desta maneira, as técnicas ilustrativas podem promover a eficiência da largura de banda.
[0008] Por exemplo, por subtrair um deslocamento a partir do valor do segundo índice, o valor resultante é menor do que o valor do segundo índice. Em alguns exemplos, menos bits são necessários para binarizar valores menores. Portanto, o número de bits que precisam ser sinalizados para o valor resultante da subtração do deslocamento do valor do segundo índice pode ser menor que o número de bits que precisam ser sinalizados para o valor do segundo índice.
[0009] Em um exemplo, a revelação descreve um método de decodificar dados de vídeo, o método compreendendo determinar que um bloco atual é dividido em um modo triangular, construir uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual, decodificar um primeiro valor para determinar um primeiro valor de índice na lista de preditores de vetor de movimento, determinar um primeiro bloco de predição triangular baseado no primeiro valor de índice, decodificar um segundo valor para determinar um segundo valor de índice na lista de preditores de vetor de movimento, determinar o segundo valor de índice baseado no segundo valor, em que determinar o segundo valor de índice compreende, baseado no segundo valor sendo maior ou igual ao primeiro valor, adicionar um deslocamento ao segundo valor para determinar o segundo valor de índice, determinar um segundo bloco de predição triangular baseado no segundo valor de índice, e reconstruir o bloco atual baseado no primeiro bloco de predição triangular e no segundo bloco de predição triangular.
[0010] Em um exemplo, a revelação descreve um dispositivo para decodificar dados de vídeo, o dispositivo compreendendo memória configurada para armazenar uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um bloco atual e sistema de circuitos de processamento. O sistemas de circuitos de processamento é configurado para determinar que o bloco atual está dividido em um modo triangular, construir a lista de preditores de vetor de movimento, para armazenamento na memória, a qual inclui a informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual, decodificar um primeiro valor para determinar um primeiro valor de índice na lista de preditores de vetor de movimento, determinar um primeiro bloco de predição triangular baseado no primeiro valor de índice, decodificar um segundo valor para determinar um segundo valor de índice na lista de preditores de vetor de movimento, determinar o segundo valor de índice baseado no segundo valor, em que para determinar o segundo valor de índice, o sistema de circuitos de processamento é configurado para, baseado no segundo valor sendo maior ou igual ao primeiro valor, adicionar um deslocamento ao segundo valor para determinar o segundo valor de índice, determinar um segundo bloco de predição triangular baseado no segundo valor de índice e reconstruir o bloco atual baseado no primeiro bloco de predição triangular e no segundo bloco de predição triangular.
[0011] Em um exemplo, a revelação descreve um método de codificação de dados de vídeo, o método compreendendo determinar que um bloco atual está dividido em um modo triangular, construir uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual, determinar um primeiro bloco de predição triangular, determinar um primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro bloco de predição triangular determinado, sinalizar um primeiro valor baseado no primeiro valor de índice, determinar um segundo bloco de predição triangular, determinar um segundo valor de índice na lista de preditores de vetor de movimento baseado no segundo bloco de predição triangular determinado e sinalizar um segundo valor baseado no segundo valor de índice, em que a sinalização do segundo valor compreende baseado no segundo valor de índice sendo maior do que o primeiro valor de índice subtrair um deslocamento a partir do segundo valor de índice para gerar o segundo valor.
[0012] Em um exemplo, a revelação descreve um dispositivo para codificar dados de vídeo, o dispositivo compreendendo memória configurada para armazenar uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um bloco atual e sistema de circuitos de processamento. O sistema de circuitos de processamento é configurado para determinar que o bloco atual está dividido em um modo triangular, construir a lista de preditores de vetor de movimento, para armazenamento na memória, que inclui a informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual, determinar um primeiro bloco de predição triangular, determinar um primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro bloco de predição triangular determinado, sinalizar um primeiro valor baseado no primeiro valor de índice, determinar um segundo bloco de predição triangular, determinar um segundo valor de índice na lista de preditores de vetor de movimento baseado no segundo bloco de predição triangular determinado, e sinalizar um segundo valor baseado no segundo valor de índice, em que para sinalizar o segundo valor, o sistema de circuitos de processamento é configurado para, baseado no segundo valor de índice sendo maior do que o primeiro valor de índice subtrair um deslocamento a partir do segundo valor de índice para gerar o segundo valor.
[0013] Os detalhes de um ou mais exemplos são expostos nos desenhos acompanhantes e na descrição abaixo. Outras características, objetivos, e vantagens serão evidentes a partir da descrição, desenhos e reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0014] A FIG. 1 é um diagrama de blocos ilustrando um sistema de codificação e decodificação de vídeo ilustrativo que pode executar as técnicas desta revelação.
[0015] As FIGS. 2A e 2B são diagramas conceituais ilustrando exemplos de unidades de predição (PUs) triangulares.
[0016] As FIGS. 3A e 3B são tabelas ilustrativas ilustrando mapas de combinação para informação de movimento da unidade de predição (PU) triangular.
[0017] A FIG. 4 é um diagrama conceitual ilustrando um exemplo de determinar informação de movimento.
[0018] A FIG. 5 é um fluxograma ilustrando um procedimento ilustrativo de combinação de vetor de movimento (MV).
[0019] As FIGS. 6A e 6B são diagramas conceituais ilustrando sub-blocos para o modo PU triangular.
[0020] A FIG. 7 é um diagrama de blocos ilustrando um codificador de vídeo ilustrativo que pode executar as técnicas desta revelação.
[0021] A FIG.8 é um diagrama de blocos ilustrando um decodificador de vídeo ilustrativo que pode executar as técnicas desta revelação.
[0022] A FIG. 9 é um fluxograma ilustrando um método ilustrativo de codificação de dados de vídeo.
[0023] A FIG. 10 é um fluxograma ilustrando um método ilustrativo de decodificação de dados de vídeo.
DESCRIÇÃO DETALHADA
[0024] Na codificação de vídeo de predição inter, um codificador de vídeo (por exemplo, codificador de vídeo ou decodificador de vídeo) determina uma unidade de predição (PU) para uma unidade de codificação (CU). O codificador de vídeo determina um resíduo (por exemplo, diferença) entre os valores de amostra de um bloco da CU e os valores de amostra de um bloco de predição da PU. O codificador de vídeo sinaliza a informação residual para um decodificador de vídeo junto com a informação que o decodificador de vídeo utiliza para determinar a PU. O decodificador de vídeo então adiciona a informação residual para a PU para reconstruir o bloco.
[0025] Em alguns exemplos, o codificador de vídeo codifica um bloco atual no modo triangular. No modo triangular, o codificador de vídeo divide (por exemplo, separa) um bloco atual em duas partições triangulares. Em tais exemplos, o codificador de vídeo pode determinar PUs para cada uma das duas partições triangulares. O codificador de vídeo pode determinar PUs baseado em vetores de movimento para as duas partições triangulares. Os vetores de movimento apontam para valores de amostra em imagens de referência que podem ser utilizadas para formar as PUs. Uma maneira de determinar os vetores de movimento para as duas partições triangulares é baseada na informação do vetor de movimento de um ou mais blocos vizinhos.
[0026] Por exemplo, o codificador de vídeo e o decodificador de vídeo podem construir uma lista de preditores de vetor de movimento que inclui a informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual. O codificador de vídeo pode sinalizar um primeiro valor de índice na lista de preditores de vetor de movimento para uma primeira partição triangular das duas partições triangulares do bloco atual e o decodificador de vídeo pode determinar o vetor de movimento para a primeira partição triangular baseado no primeiro valor de índice. O codificador de vídeo pode sinalizar um segundo valor de índice na lista de preditores de vetor de movimento para uma segunda partição triangular das duas partições triangulares do bloco atual.
[0027] O decodificador de vídeo pode determinar um primeiro bloco de predição para a primeira partição triangular baseado no vetor de movimento para a primeira partição triangular e determinar um segundo bloco de predição para a segunda partição triangular baseado no vetor de movimento para a segunda partição triangular. O decodificador de vídeo pode receber a informação residual indicativa da diferença entre a primeira partição triangular e o primeiro bloco de predição e a diferença entre a segunda partição triangular e o segundo bloco de predição. O decodificador de vídeo pode adicionar a respectiva informação residual com os respectivos primeiro ou segundo blocos de predição para reconstruir a primeira e a segunda partições triangulares e, desta forma, reconstruir o bloco atual.
[0028] Para o bloco atual codificado no modo triangular, podem existir algumas limitações nos vetores de movimento para as duas partições triangulares. Como exemplo, pode ser necessário que os dois vetores de movimento para as duas partições triangulares sejam diferentes. Se os dois vetores de movimento para as duas partições triangulares fossem iguais, então, os dois vetores de movimento se refeririam efetivamente a uma região que forma um bloco retangular. Nesse caso, não haveria diferença entre codificar o bloco atual no modo triangular ou no modo regular, onde o bloco atual não é dividido em partições triangulares. Por exemplo, se houver benefícios em codificar o bloco atual no modo triangular, então, o codificador de vídeo deve garantir que os vetores de movimento para as duas partições triangulares sejam diferentes. Se os vetores de movimento para as partições triangulares forem iguais, o codificador de vídeo deve codificar o bloco atual sem gastar recursos computacionais em dividir o bloco atual em partições triangulares.
[0029] Consequentemente, para garantir que os benefícios de codificar o bloco atual no modo triangular sejam alcançados, em alguns exemplos, o codificador de vídeo pode determinar diferentes valores de índice na lista de preditores de vetor de movimento. Por exemplo, ao construir a lista de preditores de vetor de movimento, o codificador de vídeo pode remover informação de vetor de movimento duplicada. Como um exemplo, se dois blocos vizinhos tiverem a mesma informação de vetor de movimento, a lista de preditores de vetor de movimento pode incluir a informação de vetor de movimento para somente um dos dois blocos vizinhos. Portanto, a informação do vetor de movimento em cada entrada da lista de preditores de vetor de movimento pode ser diferente. Uma vez que os valores de índice na lista de preditores de vetor de movimento para as duas partições triangulares são diferentes, pode existir uma alta probabilidade de que os vetores de movimento para as duas partições triangulares sejam diferentes porque a informação do vetor de movimento em cada entrada da lista de preditores de vetor de movimento pode ser diferente.
[0030] Em um ou mais exemplos, o codificador de vídeo pode alavancar o requisito de que o valor do índice na lista do preditores de vetor de movimento precisa ser diferente para a primeira partição triangular e a segunda partição triangular para reduzir a quantidade de informação que precisa ser sinalizada. Por exemplo, o codificador de vídeo pode determinar um primeiro valor de índice na lista de preditor de vetores de movimento para uma primeira partição triangular do bloco atual e sinalizar um primeiro valor baseado no primeiro valor de índice (por exemplo, o primeiro valor é igual ao primeiro valor de índice). O codificador de vídeo pode determinar um segundo valor de índice na lista de preditores de vetor de movimento para uma segunda partição triangular do bloco atual. Entretanto, neste exemplo, se o segundo valor de índice for maior do que o primeiro valor de índice, o codificador de vídeo pode subtrair um deslocamento do segundo valor de índice (por exemplo, subtraia um a partir do segundo valor de índice) para gerar um segundo valor. O codificador de vídeo pode então sinalizar o segundo valor.
[0031] Em alguns exemplos, a sinalização de valores menores requer menos bits do que sinalizar valores maiores. Portanto, por reduzir o valor que é sinalizado (por exemplo, sinalizando o segundo valor que é um resultado da subtração do deslocamento do segundo valor de índice ao invés do segundo valor de índice), o codificador de vídeo pode reduzir o número de bits que precisam ser sinalizados.
[0032] O decodificador de vídeo pode ser configurado para receber o primeiro valor e o segundo valor. O decodificador de vídeo pode determinar o primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro valor recebido (por exemplo, o primeiro valor de índice é igual ao primeiro valor recebido). Para determinar o segundo valor de índice, o decodificador de vídeo pode determinar se o segundo valor é maior ou igual ao primeiro valor. Se o segundo valor for maior ou igual ao primeiro valor, o decodificador de vídeo pode adicionar o deslocamento (por exemplo, um valor de um) ao segundo valor para determinar o segundo valor de índice na lista de preditores de vetor de movimento. Entretanto, se o segundo valor for menor do que o primeiro valor,
então, o decodificador de vídeo pode definir o segundo valor de índice igual ao segundo valor.
[0033] Como exemplo, podem existir cinco entradas na lista de preditores de vetor de movimento identificados por valores de índice: {0, 1, 2, 3 e 4}. Neste exemplo, o primeiro valor de índice na lista de preditores de vetor de movimento para a primeira partição triangular do bloco atual pode ser o valor de índice 2. O codificador de vídeo pode sinalizar um primeiro valor de 2 para o primeiro valor de índice. Em um caso, se o segundo valor de índice na lista de preditores de vetor de movimento para a segunda partição triangular for 3, o codificador de vídeo pode subtrair um deslocamento (por exemplo, valor de um) a partir do segundo valor de índice para gerar um segundo valor igual a 2 (por exemplo, 3 - 1 = 2). Neste exemplo, o codificador de vídeo pode sinalizar um segundo valor de 2.
[0034] O decodificador de vídeo pode receber o primeiro valor de 2 e definir o primeiro valor de índice na lista de preditores de vetor de movimento igual ao primeiro valor de 2. O decodificador de vídeo também pode receber o segundo valor de 2. Neste exemplo, devido ao segundo valor de 2 ser maior ou igual ao primeiro valor de 2, o decodificador de vídeo pode adicionar um deslocamento (por exemplo, valor de um) para o segundo valor para determinar o segundo valor de índice de 3 (por exemplo, 2 + 1 = 3) na lista de preditores de vetor de movimento.
[0035] Em outro caso, se o segundo valor de índice na lista de preditores de vetor de movimento para a segunda partição triangular for 1, o codificador de vídeo pode sinalizar o segundo valor como 1 (por exemplo, não subtrair um deslocamento). Nesse caso, o segundo valor de índice é menor do que o primeiro valor de índice e, portanto, o codificador de vídeo não subtrai um deslocamento. Neste exemplo, o decodificador de vídeo pode receber o segundo valor de 1. Como o segundo valor de 1 não é maior ou igual ao primeiro valor de 2, o decodificador de vídeo pode não adicionar um deslocamento. O decodificador de vídeo pode determinar que o segundo valor de índice é igual ao segundo valor de 1.
[0036] A FIG. l é um diagrama de blocos ilustrando um sistema de codificação e de decodificação de vídeo ilustrativo 100 que pode executar as técnicas desta revelação. As técnicas desta revelação são geralmente direcionadas para 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, não codificado, vídeo codificado, vídeo decodificado (por exemplo, reconstruído) e metadados de vídeo, tais como dados de sinalização.
[0037] Como apresentado na FIG. 1, o sistema 100 inclui um dispositivo fonte 102 que proporciona dados de vídeo codificados para serem decodificados e exibidos por um dispositivo destino 116, neste exemplo. Em particular, o dispositivo fonte 102 proporciona os dados de vídeo para o dispositivo destino 116 via um meio legível por computador 110. O dispositivo fonte 102 e o dispositivo destino 116 podem ser qualquer um dentre uma ampla variedade de dispositivos, incluindo computadores de mesa, computadores notebook (ou seja, laptop), computadores tablet, caixa decodificadora de sinais, aparelhos de telefone, tal como smartphones, televisores, câmeras, dispositivos de vídeo, reprodutores de mídia digital, consoles de videogame, dispositivo de fluxo contínuo de vídeo ou similares. Em alguns casos, o dispositivo fonte 102 e o dispositivo destino 116 podem ser equipados para comunicação não cabeada e, portanto, podem ser referidos como dispositivos de comunicação não cabeada.
[0038] No exemplo da FIG. 1, o dispositivo fonte 102 inclui a fonte de vídeo 104, a memória 106, o codificador de vídeo 200 e a interface de saída 108. O dispositivo destino 116 inclui a interface de entrada 122, o decodificador de vídeo 300, a memória 120 e o dispositivo de vídeo 118. De acordo com esta revelação, o codificador de vídeo 200 do dispositivo fonte 102 e o decodificador de vídeo 300 do dispositivo destino 116 podem ser configurados para aplicar as técnicas para codificar unidades de codificação (CUs) e unidades de predição (PUs) triangulares. Assim, o dispositivo fonte 102 representa um exemplo de um dispositivo de codificação de vídeo, enquanto o dispositivo destino 116 representa um exemplo de um dispositivo de decodificação de vídeo. Em outros exemplos, um dispositivo fonte e um dispositivo destino podem incluir outros componentes ou disposições. Por exemplo, o dispositivo fonte 102 pode receber dados de vídeo a partir de uma fonte de vídeo externa, tal como uma câmera externa. Da mesma forma, o dispositivo destino 116 pode realizar interface com um dispositivo de vídeo externo, ao invés de incluir um dispositivo de vídeo integrado.
[0039] 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 descritas nesta revelação. O dispositivo fonte 102 e o dispositivo destino 116 são meramente exemplos de tais dispositivos de codificação nos quais o dispositivo fonte 102 gera dados de vídeo codificados para transmissão para o dispositivo destino 116. Esta revelação se refere a um dispositivo de “codificação” como um dispositivo que executa a codificação (codificação e/ou decodificação) de dados. Desse modo, o codificador de vídeo 200 e o decodificador de vídeo 300 representam exemplos de dispositivos de codificação, em particular, um codificador de vídeo e um decodificador de vídeo, respectivamente. Em alguns exemplos, os dispositivos 102, 116 podem operar de uma maneira substancialmente simétrica, de modo que cada um dos dispositivos 102, 116 inclua componentes de codificação e de decodificação de vídeo. Portanto, o sistema 100 pode suportar transmissão de vídeo de forma unidirecional ou bidirecional entre dispositivos de vídeo 102, 116, por exemplo, para fluxo contínuo de vídeo, reprodução de vídeo, broadcasting de vídeo ou telefonia de vídeo.
[0040] Em geral, a fonte de vídeo 104 representa uma fonte de dados de vídeo (ou seja, dados de vídeo não codificados, brutos) e proporciona uma série sequencial de imagens (também denominadas “quadros”) dos dados de vídeo para o codificador de vídeo 200, o qual codifica os dados para as imagens. A fonte de vídeo 104 do dispositivo fonte 102 pode incluir um dispositivo de captura de vídeo, tal como uma câmera 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 vídeo de um provedor de conteúdo de vídeo. Como outra alternativa, a fonte de vídeo 104 pode gerar dados baseados em gráficos de computador como o vídeo fonte, 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 reorganizar as imagens a partir da ordem recebida (às vezes referida como “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 fonte 102 pode, então, enviar os dados de vídeo codificados via 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 destino 116.
[0041] A memória 106 do dispositivo fonte 102 e a memória 120 do dispositivo destino 116 representam memórias de propósito geral. Em alguns exemplos, as memórias 106, 120 podem armazenar dados de vídeo brutos, por exemplo, vídeo bruto a partir da fonte de vídeo 104 e, dados de vídeo brutos decodificados a partir do decodificador de vídeo 300. Adicionalmente ou alternativamente, 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 as memórias 106, 120 sejam apresentadas separadamente a partir do codificador de vídeo 200 e do decodificador de vídeo 300 neste exemplo, deve ser entendido 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. Além disso, as memórias 106, 120 podem armazenar dados de vídeo codificados, por exemplo, enviados a partir do codificador de vídeo 200 e informados para o decodificador de vídeo
300. Em alguns exemplos, partes de 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.
[0042] 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 fonte 102 para o dispositivo destino 116. Em um exemplo, o meio legível por computador 110 representa um meio de comunicação para permitir que o dispositivo fonte 102 transmita dados de vídeo codificados diretamente para o dispositivo destino 116 em tempo real, por exemplo, via uma rede de radiofrequência ou uma 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 demodular o sinal de transmissão recebido, de acordo com um padrão de comunicação, tal como um protocolo de comunicação não cabeada. O meio de comunicação pode incluir um ou ambos dentre um meio de comunicação não cabeada ou cabeada, tal como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão físicas. O meio de comunicação pode fazer parte de uma rede baseada em pacotes, tais como uma rede de área 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 pode ser útil para facilitar a comunicação a partir do dispositivo fonte 102 para o dispositivo destino 116.
[0043] Em alguns exemplos, o meio legível por computador 110 pode incluir o dispositivo de armazenamento
112. O dispositivo fonte 102 pode enviar dados codificados a partir da interface de saída 108 para o dispositivo de armazenamento 112. Similarmente, o dispositivo destino 116 pode acessar dados codificados a partir do dispositivo de armazenamento 112 via a interface de entrada 122. O dispositivo de armazenamento 112 pode incluir qualquer uma dentre uma variedade de mídias de armazenamento de dados distribuídas ou acessadas localmente, tais 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 outra mídia de armazenamento digital adequada para armazenar dados de vídeo codificados.
[0044] Em alguns exemplos, o meio legível por computador 110 pode incluir o servidor de arquivos 114 ou outro dispositivo de armazenamento intermediário que pode armazenar os dados de vídeo codificados gerados pelo dispositivo fonte 102. O dispositivo fonte 102 pode enviar dados de vídeo codificados para o servidor de arquivos 114 ou para outro dispositivo de armazenamento intermediário que pode armazenar o vídeo codificado gerado pelo dispositivo fonte 102. O dispositivo destino 116 pode acessar dados de vídeo armazenados a partir do servidor de arquivos 114 via fluxo contínuo ou download. O servidor de arquivos 114 pode ser qualquer tipo de dispositivo servidor capaz de armazenar dados de vídeo codificados e transmitir esses dados de vídeo codificados para o dispositivo destino
116. O servidor de arquivos 114 pode representar um servidor da 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 destino 116 pode acessar dados de vídeo codificados a partir do servidor de arquivos 114 através de qualquer conexão de dados padrão, incluindo uma conexão Internet. Isso pode incluir um canal não cabeado (por exemplo, uma conexão Wi-Fi), uma conexão cabeada (por exemplo, DSL, modem a cabo, etc.), ou uma combinação de ambas que seja adequada para acessar dados de vídeo codificados armazenados no 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 de fluxo contínuo, um protocolo de transmissão de download ou uma combinação dos mesmos.
[0045] A interface de saída 108 e a interface de entrada 122 podem representar transmissores / receptores não cabeados, modems, componentes de rede cabeados (por exemplo, placas Ethernet), componentes de comunicação não cabeada que operam de acordo com qualquer um de uma variedade de padrões IEEE 802.11 ou outros componentes físicos. Em exemplos em que a interface de saída 108 e a interface de entrada 122 incluem componentes não cabeados,
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, tais como 4G, 4G-LTE (Evolução à Longo Prazo), LTE Avançada, 5G ou similares. Em alguns exemplos onde a interface de saída 108 inclui um transmissor não cabeado, a interface de saída 108 e a interface de entrada 122 podem ser configuradas para transferir dados, tais como dados de vídeo codificado, de acordo com outros padrões não cabeados, tais como uma especificação IEEE 802.11, uma especificação IEEE 802.15 (por exemplo, ZigBee™), um padrão Bluetooth™ ou similares. Em alguns exemplos, o dispositivo fonte 102 e/ou o dispositivo destino 116 podem incluir respectivos dispositivos de sistema em um chip (SoC). Por exemplo, o dispositivo fonte 102 pode incluir um dispositivo SoC para executar a funcionalidade atribuída ao codificador de vídeo 200 e/ou à interface de saída 108, e o dispositivo destino 116 pode incluir um dispositivo SoC para executar a funcionalidade atribuída ao decodificador de vídeo 300 e/ou à interface de entrada 122.
[0046] As técnicas desta revelação podem ser aplicadas à codificação de vídeo no suporte de qualquer uma dentre uma variedade de aplicações de multimídia, tais como broadcast de televisão não cabeado, transmissões de televisão a cabo, transmissões de televisão via satélite, transmissões de fluxo contínuo de vídeo da Internet, tal como fluxo contínuo adaptativo dinâmico através de HTTP (DASH), vídeo digital codificado em um meio de armazenamento de dados, decodificação de vídeo digital armazenado em um meio de armazenamento de dados ou outros aplicativos.
[0047] A interface de entrada 122 do dispositivo destino 116 recebe um fluxo de bits de vídeo codificado a partir do meio legível por computador 110 (por exemplo, um meio de comunicação, dispositivo de armazenamento 112, servidor de arquivos 114 ou similares). O fluxo de bits de vídeo codificado pode incluir informação de sinalização definida pelo codificador de vídeo 200, a qual também é utilizada pelo decodificador de vídeo 300, tais como elementos de sintaxe com 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 ou similares). O dispositivo de vídeo 118 exibe imagens decodificadas dos dados de vídeo decodificados para um usuário. O dispositivo de vídeo 118 pode representar qualquer um dentre uma variedade de dispositivos de vídeo, tais como um tubo de raios catódicos (CRT), um vídeo de cristal líquido (LCD), um vídeo de plasma, um vídeo de diodo orgânico emissor de luz (OLED) ou outro tipo de dispositivo de vídeo.
[0048] Embora não apresentado 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 a um codificador de áudio e/ou decodificador de áudio e podem incluir unidades MUX-DEMUX apropriadas, ou outro hardware e/ou software, para lidar com fluxos multiplexados, incluindo tanto áudio como vídeo em um fluxo de dados comum. Se aplicável, as unidades MUX-DEMUX podem estar em conformidade com o protocolo do multiplexador ITU H.223 ou outros protocolos, tal como o protocolo de datagrama do usuário (UDP).
[0049] Cada um dentre o codificador de vídeo 200 e o decodificador de vídeo 300 pode ser implementado como qualquer um dentre uma variedade de sistemas de circuitos de codificador e/ou de decodificador adequados, tal como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados específicos de aplicação (ASICs), arranjos de portas programáveis em campo (FPGAs), lógica discreta, software, hardware, firmware ou qualquer combinação dos mesmos. Quando as técnicas são implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em um meio não temporário legível por computador adequado e executar as instruções em hardware utilizando um ou mais processadores para executar as técnicas desta 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 codificador de vídeo 200 e/ou o decodificador de vídeo 300 pode incluir um circuito integrado, um microprocessador e/ou um dispositivo de comunicação não cabeada, tal como um telefone celular.
[0050] 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 ITU-T H.265, também conhecido como Codificação de Vídeo de Alta Eficiência (HEVC) ou suas extensões, tais como as extensões de codificação de vídeo de multivista e/ou escalonável. Alternativamente, o codificador de vídeo 200 e o decodificador de vídeo 300 podem operar de acordo com outros padrões proprietários ou da indústria, tal como o Modelo Teste de Exploração Conjunta (JEM). As técnicas desta revelação, entretanto, não estão limitadas a nenhum padrão de codificação particular. Por exemplo, um novo padrão de codificação de vídeo conhecido como codificação de vídeo versátil (VVC) está atualmente em desenvolvimento. As técnicas ilustrativas podem ser aplicadas ao padrão VVC atualmente em desenvolvimento.
[0051] Em geral, o codificador de vídeo 200 e o decodificador de vídeo 300 podem executar codificação de imagens baseada em bloco. O termo "bloco" geralmente se refere a uma estrutura incluindo dados a serem processados (por exemplo, codificados, decodificados ou de outra forma utilizados 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 de 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). Ou seja, ao invés 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, onde os componentes de crominância podem incluir componentes de crominância de matiz vermelho e azul. Em alguns exemplos, o codificador de vídeo 200 converte dados formatados RGB recebidos em uma representação YUV antes da codificação e o decodificador de vídeo 300 converte a representação YUV para o formato RGB. Alternativamente, as unidades de pré e pós-processamento (não apresentadas) podem executar essas conversões.
[0052] Esta revelação pode geralmente se referir a codificação (por exemplo, codificação e decodificação) de imagens como incluindo o processo de codificação ou de decodificação de dados da imagem. Similarmente, esta revelação pode se referir à codificação de blocos de uma imagem como incluindo o processo de codificação ou de decodificação de dados para os blocos, por exemplo, predição e/ou codificação residual. Um fluxo de bits de vídeo codificado geralmente inclui uma série de valores para elementos de sintaxe representativos de decisões de codificação (por exemplo, modos de codificação) e divisão de imagens em blocos. Assim, as referências a codificar uma imagem ou bloco devem geralmente ser entendidas como codificar valores para elementos de sintaxe formando a imagem ou bloco.
[0053] A HEVC define vários blocos, incluindo as unidades de codificação (CUs), as unidades de predição (PUs) e as unidades de transformada (TUs). De acordo com HEVC, um codificador de vídeo (tal como codificador de vídeo 200) divide uma unidade de árvore de codificação (CTU) em CUs de acordo com uma estrutura de árvore quaternária. Ou seja, o codificador de vídeo divide CTUs e CUs em quatro quadrados iguais e não sobrepostos, e cada nó da árvore quaternária possui zero ou quatro nós filhos. Os nós sem nós filhos podem ser referidos como “nós folha”, e CUs de tais nós folha podem incluir uma ou mais PUs e/ou uma ou mais TUs. O codificador de vídeo pode ainda dividir
PUs e TUs. Por exemplo, em HEVC, uma árvore quaternária residual (RQT) representa a divisão TUs. Em HEVC, PUs representam dados de predição inter, enquanto TUs representam dados residuais. As CUs que são preditas intra incluem informação de predição intra, tal como uma indicação de modo intra.
[0054] Como outro exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para operar de acordo com JEM. De acordo com JEM, um codificador de vídeo (tal como o codificador de vídeo 200) divide uma imagem em várias CTUs. O codificador de vídeo 200 pode dividir uma CTU de acordo com uma estrutura de árvore, tal como uma estrutura de árvore binária de árvore quaternária (QTBT). A estrutura QTBT do JEM remove os conceitos de vários tipos de partição, tal como a separação entre CUs, PUs e TUs de HEVC. Uma estrutura QTBT do JEM inclui dois níveis: um primeiro nível dividido de acordo com a divisão de árvore quaternária, e um segundo nível dividido de acordo com a divisão de árvore binária. Um nó raiz da estrutura QTBT corresponde a uma CTU. Os nós folha das árvores binárias correspondem às unidades de codificação (CUs).
[0055] Em alguns exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem utilizar uma única estrutura QTBT para representar cada um dentre os componentes de luminância e crominância, enquanto em outros exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem utilizar 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 os respectivos componentes de crominância).
[0056] O codificador de vídeo 200 e o decodificador de vídeo 300 podem ser configurados para utilizar divisão de árvore quaternária por HEVC, divisão QTBT de acordo com JEM, ou outras estruturas de divisão. Para propósitos de explicação, a descrição das técnicas desta revelação é apresentada em relação à divisão QTBT, tal como em VVC. Entretanto, deve ser entendido que as técnicas desta revelação também podem ser aplicadas a codificadores de vídeo configurados para utilizar divisão de árvore quaternária, ou bem como outros tipos de divisão.
[0057] Esta revelação pode utilizar “N x N” e “N por N” de forma intercambiável para se referir às dimensões da amostra de um bloco (tal como uma CU ou outro bloco de vídeo) em termos de dimensões vertical e horizontal, por exemplo, amostras de 16 x 16 ou 16 por 16 amostras. Em geral, uma CU 16 x 16 terá 16 amostras na direção vertical (y = 16) e 16 amostras na direção horizontal (x = 16). Da mesma forma, uma CU N x N geralmente possui 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 organizadas em fileiras e colunas. Além disso, as CUs não precisam necessariamente possuir o mesmo número de amostras na direção horizontal como na direção vertical. Por exemplo, as CUs podem incluir N x M amostras, onde M não é necessariamente igual a N.
[0058] O codificador de vídeo 200 codifica dados de vídeo para as CUs representando a predição e/ou a informação residual e outras informações. A informação de predição indica como a CU deve ser predita de modo a formar um bloco de predição para a CU. A informação residual geralmente representa diferenças amostra por amostra entre as amostras da CU antes da codificação e do bloco de predição.
[0059] 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 de predição intra. A predição inter geralmente se refere à predição da CU a partir de dados de uma imagem previamente codificada, ao passo que a predição intra geralmente se refere à predição da CU a partir de dados previamente codificados da mesma imagem. Para executar a predição inter, o codificador de vídeo 200 pode gerar o bloco de predição utilizando um ou mais vetores de movimento. O codificador de vídeo 200 pode geralmente executar uma pesquisa de movimento para identificar um bloco de referência que corresponda intimamente a 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 utilizando uma soma da diferença absoluta (SAD), soma das diferenças quadradas (SSD), diferença média absoluta (MAD), diferenças médias quadradas (MSD) ou outros cálculos de diferença para determinar se um bloco de referência é muito parecido com a CU atual. Em alguns exemplos, o codificador de vídeo 200 pode predizer a CU atual utilizando predição unidirecional ou predição bidirecional.
[0060] JEM e VVC também proporcionam um modo de compensação de movimento afim, o qual 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 que não é translacional, tais como ampliar ou reduzir, rotação, movimento em perspectiva ou outros tipos de movimentos irregulares.
[0061] Para executar predição intra, o codificador de vídeo 200 pode selecionar um modo predição intra para gerar o bloco de predição. JEM e VVC proporcionam sessenta e sete modos de predição intra, incluindo 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 para um bloco atual (por exemplo, um bloco de uma CU) a partir do qual predizer amostras do bloco atual. Tais amostras podem geralmente estar acima, acima e à esquerda, ou à esquerda do bloco atual na mesma imagem do bloco atual, assumindo que o codificador de vídeo 200 codifica CTUs e CUs na ordem de varredura por rastreio (da esquerda para a direita, de cima para baixo).
[0062] O codificador de vídeo 200 codifica dados representando o modo de predição para um bloco atual. Por exemplo, para 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 é utilizado, bem como a informação de movimento para o modo correspondente. Para predição inter unidirecional ou bidirecional, por exemplo, o codificador de vídeo 200 pode codificar vetores de movimento utilizando predição de vetor de movimento avançada (AMVP) ou modo de mesclagem. O codificador de vídeo 200 pode utilizar modos similares para codificar vetores de movimento para o modo de compensação de movimento afim.
[0063] 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 utilizando 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 de transformada ao invés do domínio de amostra. Por exemplo, o codificador de vídeo 200 pode aplicar uma transformada de cosseno discreta (DCT), uma transformada de número 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, tais como uma transformada secundária não separável dependente de modo (MDNSST), uma transformada dependente de sinal, uma transformada de Karhunen-Loeve (KLT) ou similares. O codificador de vídeo 200 produz coeficientes de transformada após a aplicação de uma ou mais transformadas.
[0064] Como observado acima, após quaisquer transformadas para produzir coeficientes de transformada, o codificador de vídeo 200 pode executar a quantização dos coeficientes de transformada. A Quantização geralmente se refere a um processo no qual os coeficientes de transformada são quantizados para possivelmente reduzir a quantidade de dados utilizados para representar os coeficientes, proporcionando compactação adicional. Ao executar o processo de quantização, o codificador de vídeo 200 pode reduzir a profundidade de bits associada com alguns ou todos os coeficientes. Por exemplo, o codificador de vídeo 200 pode arredondar um valor de n bits para um valor de m bits durante a quantização, onde n é maior do que m. Em alguns exemplos, para executar a quantização, o codificador de vídeo 200 pode executar um deslocamento para a direita bit a bit do valor a ser quantizado.
[0065] 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 transformada de energia mais alta (e, portanto, frequência mais baixa) na frente do vetor e para colocar coeficientes de transformada de energia mais baixa (e, portanto, frequência mais alta) na parte de trás 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, em seguida, codificar por entropia os coeficientes de transformada quantizados do vetor. Em outros exemplos, o codificador de vídeo 200 pode executar uma varredura adaptativa. Depois de 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 adaptável ao contexto (CABAC). O codificador de vídeo 200 também pode codificar por entropia valores para elementos de sintaxe que descrevem metadados associados com dados de vídeo codificados para utilização pelo decodificador de vídeo 300 na decodificação dos dados de vídeo.
[0066] Para executar CABAC, o codificador de vídeo 200 pode atribuir um contexto dentro de um modelo de contexto para um símbolo a ser transmitido. O contexto pode estar relacionado, por exemplo, com se os valores vizinhos do símbolo possuem valor zero ou não. A determinação da probabilidade pode ser baseada em um contexto atribuído ao símbolo.
[0067] O codificador de vídeo 200 pode ainda gerar dados de sintaxe, tais como dados de sintaxe baseados em bloco, dados de sintaxe baseados em imagem e dados de sintaxe baseados em sequência, para o 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, tais como um conjunto de parâmetros de sequência (SPS), um conjunto de parâmetros de imagem (PPS), ou um conjunto de parâmetros de vídeo (VPS). O decodificador de vídeo 300 pode da mesma forma, decodificar tais dados de sintaxe para determinar como decodificar os dados de vídeo correspondentes.
[0068] 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 a divisão de uma imagem em blocos (por exemplo, as CUs) e a predição e/ou a informação residual para os blocos. Em última análise, o decodificador de vídeo 300 pode receber o fluxo de bits e decodificar os dados de vídeo codificados.
[0069] Em geral, o decodificador de vídeo 300 executa um processo recíproco ao executado 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 utilizando CABAC de uma maneira substancialmente similar, embora recíproca, ao processo de codificação CABAC do codificador de vídeo 200. Os elementos de sintaxe podem definir informação de divisão de uma imagem em CTUs e divisão de cada CTU de acordo com um estrutura de divisão correspondente, tal como uma estrutura QTBT, para definir CUs da CTU. Os elementos de sintaxe podem ainda definir predição e informação residual para blocos (por exemplo, as CUs) de dados de vídeo.
[0070] A informação residual pode ser representada, por exemplo, por coeficientes de transformada quantizados. O decodificador de vídeo 300 pode quantizar e transformar inversamente os coeficientes de transformada quantizados de um bloco para reproduzir um bloco residual para o bloco. O decodificador de vídeo 300 utiliza um modo de predição sinalizado (predição inter ou predição intra) 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 (amostra por amostra) para reproduzir o bloco original. O decodificador de vídeo 300 pode executar processamento adicional, tal como executar um processo de desagrupamento para reduzir artefatos visuais ao longo dos limites do bloco.
[0071] Esta revelação pode geralmente se referir a “sinalizar” algumas informações, tais como elementos de sintaxe. O termo “sinalizar” pode geralmente se referir à comunicação de valores para elementos de sintaxe e/ou outros dados utilizados 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, sinalizar refere-se a gerar um valor no fluxo de bits. Como observado acima, o dispositivo fonte 102 pode transportar o fluxo de bits para o dispositivo destino 116 substancialmente em tempo real, ou não em tempo real, como pode ocorrer quando armazenando elementos de sintaxe junto ao dispositivo de armazenamento 112 para recuperação posterior pelo dispositivo destino 116.
[0072] O dito a seguir descreve técnicas relacionadas à codificação de informação de movimento triangular. Em alguns exemplos, a informação de movimento de uma PU triangular é codificada de maneira combinada. Por exemplo, conforme descrito acima, o codificador de vídeo 200 e o decodificador de vídeo 300 podem codificar ou decodificar, respectivamente, um bloco no modo de mesclagem ou no modo AMVP. No modo de mesclagem ou no modo AMVP, o codificador de vídeo 200 e o decodificador de vídeo 300 constroem uma lista de preditores de vetor de movimento utilizando técnicas similares, de modo que a lista de preditores de vetor de movimento que o codificador de vídeo 200 constrói seja substancialmente a mesma, incluindo idêntica, à lista de preditores de vetor de movimento que o decodificador de vídeo 300 constrói.
[0073] Para construir a lista de preditores de vetor de movimento, o codificador de vídeo 200 e o decodificador de vídeo 300 podem determinar a informação de vetor de movimento de blocos espacialmente vizinhos e co- localizados. Blocos espacialmente vizinhos referem-se a blocos que estão na mesma imagem que o bloco atual sendo codificado ou decodificado e são imediatamente adjacentes ao bloco atual. Os blocos co-localizados referem-se a blocos que estão em uma imagem diferente da imagem que inclui o bloco atual sendo codificado ou decodificado e tendem a estar localizados na parte inferior direita ou centro do bloco atual, mas na outra imagem. Em alguns exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem avaliar um ou mais dos blocos espacialmente vizinhos e/ou blocos co-localizados e determinar a informação do vetor de movimento para os blocos espacialmente vizinhos e/ou co-localizados. O codificador de vídeo 200 e o decodificador de vídeo 300 podem construir a lista de preditores de vetor de movimento incluindo a informação de vetor de movimento dos blocos espacialmente vizinhos e co-localizados como entradas na lista de preditores de vetor de movimento. Em alguns exemplos, a predição de vetor de movimento baseada em histórico (HMVP) pode ser ativada. Em HMVP, a informação de vetor de movimento de blocos que não são imediatamente adjacentes ao bloco atual pode ser incluída na lista de preditores de vetor de movimento.
[0074] A informação do vetor de movimento na lista de preditores de vetor de movimento pode ser utilizada para predizer o vetor de movimento para o bloco atual. Por isso, as informações de vetor de movimento na lista de preditores de vetor de movimento podem ser referidas como preditores de vetor de movimento. Por exemplo, o codificador de vídeo 200 pode determinar um bloco de predição para o bloco atual (por exemplo, baseado em quais amostras de referência estão mais próximas dos dados de vídeo originais), e determinar um vetor de movimento que aponta para o bloco de predição (ou as amostras utilizada para gerar o bloco de predição).
[0075] No modo de mesclagem, o codificador de vídeo 200 identifica um preditor de vetor de movimento que é igual ao vetor de movimento determinado. Em alguns exemplos, o codificador de vídeo 200 pode utilizar os preditores de vetor de movimento para determinar um bloco de predição (por exemplo, selecionar o bloco de predição baseado em um dos preditores de vetor de movimento que está mais próximo dos dados de vídeo originais). Em ambos os exemplos, o codificador de vídeo 200 sinaliza a informação indicativa de um valor de índice (por exemplo, uma entrada) na lista de preditores de vetor de movimento para o preditor de vetor de movimento identificado (por exemplo, a informação de vetor de movimento de um bloco vizinho ou co- localizado armazenado na entrada da lista de preditores de vetor de movimento identificada pelo valor de índice).
[0076] O decodificador de vídeo 300 recebe a informação do valor de índice na lista de preditores de vetor de movimento e recupera o preditor de vetor de movimento na entrada (por exemplo, a informação de vetor de movimento de um bloco vizinho ou co-localizado armazenada na entrada da lista de preditores de vetor de movimento identificada pelo valor de índice). O decodificador de vídeo 300, então, define o vetor de movimento para o bloco atual igual à informação do vetor de movimento recuperada (por exemplo, igual ao preditor de vetor de movimento).
[0077] O modo AMVP é similar ao modo de mesclagem. Entretanto, no modo AMVP, ao invés do preditor de vetor de movimento e do vetor de movimento para o bloco atual serem iguais, o codificador de vídeo 200 pode sinalizar uma diferença de vetor de movimento (MVD) entre o preditor de vetor de movimento e o vetor de movimento para o bloco atual. No modo AMVP, o codificador de vídeo 200 sinaliza a informação indicativa do valor de índice na lista de preditores de vetor de movimento para o preditor de vetor de movimento e sinaliza um MVD. O decodificador de vídeo 300 recebe o valor de índice e recupera o preditor de vetor de movimento da lista de preditores de vetor de movimento. O decodificador de vídeo 300 então adiciona o MVD ao preditor de vetor de movimento para determinar o vetor de movimento para o bloco atual.
[0078] O VVC inclui um modo triangular. No modo triangular, o bloco atual (por exemplo, o bloco retangular) é dividido (por exemplo, “particionado” ou dividido) em duas partições triangulares. O codificador de vídeo 200 pode determinar vetores de movimento para cada uma das duas partições triangulares que identificam os blocos de predição para as duas partições triangulares. A direção de como um bloco atual de uma unidade de codificação é dividido em partições triangulares, cada uma possuindo suas respectivas PUs, é ilustrada nas FIGS. 2A e 2B. Por exemplo, a divisão pode ser diagonal (por exemplo, superior esquerdo para inferior direito) ou anti-diagonal (por exemplo, superior direito para inferior esquerdo) do bloco, o que divide a CU em duas PUs triangulares, como apresentado nas FIGS. 2A e 2B. Por exemplo, na FIG. 2A, um bloco atual é dividido a partir do canto superior esquerdo para o canto inferior direito para formar duas partições triangulares, cada uma possuindo as respectivas unidades de predição (PU1 124 e PU2 126), como apresentado na FIG. 2A. Conforme descrito acima, uma PU inclui blocos de predição de luma e blocos de predição de croma. Por isso, o termo “bloco de predição” é utilizado alternadamente com a PU. Na FIG. 2B, um bloco atual é dividido do canto superior direito para o canto inferior esquerdo para formar duas partições triangulares, cada uma com as respectivas unidades de predição (PU1 128 e PU2 130), como apresentado na FIG. 2B.
[0079] O modo de mesclagem e o modo AMVP podem ser estendidos para um bloco atual codificado no modo triangular. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem cada um, construir respectivas listas de preditores de vetor de movimento para o bloco atual. O codificador de vídeo 200 pode determinar preditores de vetor de movimento para cada uma das duas partições triangulares e sinalizar valores de índice indicativos da entrada na lista de preditores de vetor de movimento para os preditores de vetor de movimento determinados.
[0080] Algumas técnicas combinam informação indicativa da direção na qual um bloco atual é dividido para o modo triangular e os valores de índice na lista de preditores de vetor de movimento para as duas partições triangulares em um valor. Por exemplo, uma direção de divisão pode ser representada por um valor de 1 bit (por exemplo, 0 para uma direção de divisão e 1 para outra direção de divisão). Os valores de índice na lista de vetores de movimento para as duas partições triangulares e o valor de 1 bit para a direção de divisão podem ser combinados em um valor dentro da faixa de [0, 39]. O mapa de combinação no código VTM-3.0 é apresentado nas FIGS. 3A e 3B. Por exemplo, se a direção de divisão for 0 (ou seja, Dir0) e os valores de índice forem 0, 1 para as duas partições triangulares, respectivamente, o índice combinado será 3.
[0081] Por exemplo, o codificador de vídeo 200 pode sinalizar o valor de 3. Neste exemplo, o decodificador de vídeo 300 pode avaliar as duas tabelas apresentadas nas FIGS. 3A e 3B e determinar que o valor de 3 está localizado na tabela da FIG. 3A. Portanto, o decodificador de vídeo 300 pode determinar que o bloco atual é dividido na direção 0 (por exemplo, dividido como a FIG. 2A neste exemplo). Além disso, o decodificador de vídeo 300 pode determinar que “3” está localizado na fileira 0, coluna 1 na tabela da FIG. 3A. Baseado na fileira sendo 0, o decodificador de vídeo 300 pode determinar que um primeiro valor de índice na lista de preditores de vetor de movimento para uma primeira partição triangular do bloco atual é 0 e baseado na coluna sendo 1,
o decodificador de vídeo 300 pode determinar que um segundo valor de índice no vetor de movimento lista de preditores de vetor de movimento para uma segunda partição triangular do bloco atual é 1.
[0082] Entretanto, utilizar as tabelas ilustradas nas FIGS. 3A e 3B podem não ser eficientes em termos de memória ou de processamento. Por exemplo, no esquema de codificação que utiliza as tabelas das FIGS. 3A e 3B, a informação de movimento triangular podem precisar ser armazenada em uma tabela de consulta na memória. Além disso, o codificador de vídeo 200 e o decodificador de vídeo 300 podem precisar executar pesquisa de tabela para cada CU codificada triangular; portanto, a complexidade é alta. Por exemplo, o codificador de vídeo 200 e o decodificador de vídeo 300 podem precisar gastar ciclos de processamento executando operações de consulta de tabela para cada bloco codificado no modo triangular.
[0083] Esta revelação descreve técnicas ilustrativas para codificar a informação de movimento de CUs triangulares de forma eficiente. Para cada CU codificada triangular, um codificador de vídeo (por exemplo, o codificador de vídeo 200 ou o decodificador de vídeo 300) pode codificar (por exemplo, codificar ou decodificar) a direção de divisão e a informação de movimento das duas PUs triangulares correspondentes para as duas partições triangulares de ou para o fluxo de bits, respectivamente. As técnicas de codificação adaptáveis ao contexto podem ser aplicadas aos elementos de sintaxe para obter um desempenho de compactação mais alto.
[0084] Além disso, para obter um melhor desempenho de codificação da informação de movimento da PU triangular codificada em segundo lugar, o codificador de vídeo pode utilizar a informação de movimento codificada em primeiro lugar para remover ainda mais a redundância na informação de movimento. Por exemplo, se a informação de movimento de ambas as PUs triangulares é a mesma, então o bloco pode ser tratado como uma CU inteira com essa informação de movimento utilizada para predição. Tal bloco pode ser sinalizado fora do modo triangular, portanto, este caso introduz uma redundância. Em outras palavras, se a informação do vetor de movimento para ambas as partições triangulares for à mesma, então os dois blocos de predição para as duas partições triangulares formariam juntos um único bloco retangular. Nesse caso, não haveria nenhum propósito em codificar o bloco atual no modo triangular, onde cada uma das duas partições triangulares possui informação de vetor de movimento. Ao invés disso, pode ser mais simples codificar o bloco atual no modo não triangular sem desperdiçar recursos computacionais dividindo o bloco atual em partições triangulares e codificar cada uma das duas partições triangulares.
[0085] Portanto, podem existir requisitos de que os vetores de movimento (por exemplo, os valores dos vetores de movimento e/ou os blocos de predição para os quais os vetores de movimento apontam) para as duas partições triangulares devem ser diferentes. Em um exemplo, a informação de movimento de cada PU no modo triangular é sinalizada utilizando um valor de índice na lista de preditores de vetor de movimento. O valor do índice na lista do preditores de vetor de movimento para o modo de mesclagem é conhecido como índice de mesclagem. Por exemplo, um primeiro índice de mesclagem para uma primeira partição triangular pode identificar um preditor de vetor de movimento a partir do qual o decodificador de vídeo 300 determina um primeiro vetor de movimento para a primeira partição triangular, e um segundo índice de mesclagem para uma segunda partição triangular pode identificar um preditor de vetor de movimento a partir do qual o decodificador de vídeo 300 determina um segundo vetor de movimento para a segunda partição triangular.
[0086] Neste caso, para sinalizar o índice de mesclagem da segunda PU, o índice de mesclagem igual ao índice de mesclagem da primeira PU é removido (ou seja, pode não ser possível de ser utilizado). Em outras palavras, o índice de mesclagem utilizado para determinar o vetor de movimento para a primeira partição triangular não pode ser o índice de mesclagem utilizado para determinar o vetor de movimento para a segunda partição triangular. Desta maneira, as chances de que os vetores de movimento para a primeira e segunda partições triangulares sejam iguais podem ser bastante reduzidas.
[0087] Em um exemplo, ao invés de verificar um índice candidato de ambas as partições, a informação de movimento real (vetor de movimento (MV), índice de referência, parâmetros ponderados, etc.) é verificada. Candidatos possuindo a mesma informação de movimento que na primeira PU triangular são excluídos de serem utilizados ou sinalizados para a segunda PU. Por exemplo, ao invés de apenas garantir que os valores de índice na lista de preditores de vetor de movimento sejam diferentes, o codificador de vídeo 200 pode determinar o valor do vetor de movimento, o índice na lista de imagens de referência para a qual o vetor de movimento aponta parâmetros ponderados, e similares para uma entrada identificada por um primeiro valor de índice na lista de preditores de vetor de movimento. O codificador de vídeo 200 pode, então, não selecionar a informação do vetor de movimento identificada por um segundo valor de índice na lista de preditores de vetor de movimento se o valor do vetor de movimento, o índice na lista de imagens de referência para a qual o vetor de movimento aponta, parâmetros ponderados, e similares para o preditor de vetor de movimento na entrada identificada pelo segundo valor de índice, forem os mesmos. Ou seja, ao invés de somente garantir que os valores de índice para os preditores de vetor de movimento para a primeira e segunda partições triangulares sejam diferentes, o codificador de vídeo 200 pode garantir que a informação do vetor de movimento para a primeira e segunda partições triangulares seja diferente por ainda comparar a informação do vetor de movimento real armazenada nas diferentes entradas identificadas pelos diferentes valores de índice.
[0088] O modo triangular pode ser estendido para trabalhar com outros modos de predição inter, tal como AMVP (predição avançada de vetor de movimento), modo afim, etc. Em tais exemplos, um índice de mesclagem pode ser substituído por índice candidato do modo de acordo com um ou mais exemplos descritos nesta revelação.
[0089] Por exemplo, para o modo AMVP, quando o índice de referência, o índice preditor MV (vetor de movimento) e o MVD são sinalizados, o caso em que a segunda PU possui a mesma informação de movimento final, que é obtida por adicionar o MVP ao MVD, como na primeira PU, é impedido de ser utilizado (por exemplo, a informação de movimento para a primeira PU e a segunda PU não podem ser a mesma). Ou seja, a informação de movimento da segunda PU (por exemplo, o MVP mais o MVD para a segunda PU) pode não ter permissão de ser igual à informação de movimento para a primeira PU e, portanto, pode existir um MVP ou MVD diferente para garantir que a informação de movimento não seja a mesma que a da primeira PU ou o AMVP pode não estar disponível. Como um exemplo, garantir que a informação de movimento para a segunda PU não seja a mesma que a informação de movimento para a primeira PU pode ser feito como uma restrição de fluxo de bits ou restrição de sintaxe, onde a restrição de sintaxe significa que uma certa combinação de sintaxe não é possível e que a redundância pode ser removida para diminuir a sobrecarga.
[0090] Alguns exemplos de técnicas relacionadas à codificação de informação de movimento do triângulo são descritos. As técnicas ilustrativas podem ser utilizadas em conjunto ou separadamente.
[0091] Em uma ou mais técnicas ilustrativas descritas nesta revelação, o codificador de vídeo 200 pode reduzir a quantidade de informação que precisa ser sinalizada para o decodificador de vídeo 300 para promover eficiências de largura de banda. Conforme descrito acima, os valores de índice nas listas de preditores de vetor de movimento para a primeira e a segunda partições triangulares do bloco atual devem ser diferentes. Pode ser possível alavancar o requisito de que os dois valores de índice na lista de preditores de vetor de movimento precisam ser diferentes para reduzir a quantidade de dados que precisam ser sinalizados.
[0092] A FIG. 4 é um diagrama conceitual ilustrando um exemplo de determinação de informação de movimento. A FIG.4 ilustra o bloco atual 400 que é dividido na partição triangular 402A e na partição triangular 402B. A FIG. 4 também ilustra uma lista de preditores de vetor de movimento que inclui cinco entradas identificadas por valores de índice 0 a 4. Cada entrada inclui um preditor de movimento. Por exemplo, uma primeira entrada identificada pelo valor de índice 0 armazena MV0 possuindo valores de vetor de movimento de <x0, y0>, uma segunda entrada identificada pelo valor de índice 1 armazena MV1 possuindo valores de vetor de movimento de <x1, y1>, uma terceira entrada identificada por valor de índice 2 armazena MV2 possuindo valores de vetor de movimento <x2, y2>, uma quarta entrada identificada pelo valor de índice 3 armazena MV3 com valores de vetor de movimento de <x3, y3>, e uma quinta entrada identificada pelo valor de índice 4 armazena MV4 possuindo valores de vetor de movimento de <x4, y4>.
[0093] Neste exemplo, o codificador de vídeo 200 pode determinar que o bloco atual 400 é dividido em um modo triangular. O codificador de vídeo 200 pode construir uma lista de preditores de vetor de movimento que inclui a informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual 400, conforme ilustrado na FIG. 4.
[0094] Em alguns exemplos, o codificador de vídeo 200 pode determinar um primeiro bloco de predição triangular (por exemplo, para partição triangular 402A). Por exemplo, o codificador de vídeo 200 pode avaliar os preditores de vetor de movimento na lista de preditores de vetor de movimento e identificar vários blocos triangulares. O codificador de vídeo 200 pode comparar cada um dos blocos triangulares com a partição triangular 402A e pode determinar o bloco triangular que está mais próximo da primeira partição triangular como o primeiro bloco de predição triangular (por exemplo, em termos de SAD, SSD ou MAD, como alguns exemplos).
[0095] O codificador de vídeo 200 pode determinar um primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro bloco de predição triangular determinado. Por exemplo, conforme ilustrado na FIG. 4, para a partição triangular 402A, o codificador de vídeo 200 pode ter determinado que o preditor de vetor de movimento a ser utilizado é MV1 <x1, y1>, que é armazenado na entrada identificada pelo valor de índice 1. Neste exemplo, o primeiro valor de índice pode ser o valor de índice 1. O codificador de vídeo 200 pode sinalizar um primeiro valor baseado no primeiro valor de índice. Por exemplo, o codificador de vídeo 200 pode sinalizar um valor de 1 baseado no primeiro valor de índice sendo um valor de 1 neste exemplo.
[0096] Utilizando uma técnica similar à descrita acima, o codificador de vídeo 200 pode determinar um segundo bloco de predição triangular (por exemplo, para partição triangular 402B). Por exemplo, o codificador de vídeo 200 pode avaliar os preditores de vetor de movimento na lista de preditores de vetor de movimento e identificar vários blocos triangulares. O codificador de vídeo 200 pode comparar cada um dos blocos triangulares com a partição triangular 402B e pode determinar o bloco triangular que está mais próximo da segunda partição triangular como o segundo bloco de predição triangular.
[0097] O codificador de vídeo 200 pode determinar um segundo valor de índice na lista de preditores de vetor de movimento baseado no segundo bloco de predição triangular determinado. Por exemplo, conforme ilustrado na FIG. 4, para partição triangular 402B, codificador de vídeo 200 pode ter determinado que o preditor de vetor de movimento a ser utilizado é MV3 <x3, y3>, que está armazenado na entrada identificada pelo valor de índice 3. Neste exemplo, o segundo valor de índice pode ser o valor de índice 3.
[0098] De acordo com um ou mais exemplos descritos nesta revelação, devido ao segundo valor de índice ser maior do que o primeiro valor de índice, o codificador de vídeo 200 pode ser configurado para sinalizar um valor reduzido ao invés do valor do segundo valor de índice. Por exemplo, o codificador de vídeo 200 pode ser configurado para determinar um segundo valor por subtrair um deslocamento do segundo valor de índice. Como um exemplo, o deslocamento pode ser um. Portanto, neste exemplo, codificador de vídeo 200 pode determinar um segundo valor de 2 (por exemplo, o segundo valor de índice de 3 menos 1 é 2).
[0099] O codificador de vídeo 200 pode sinalizar o segundo valor (por exemplo, 2) ao invés do segundo valor de índice de 3. Em alguns exemplos, a sinalização de um valor menor resulta na necessidade de menos bits. Como exemplo, binarizar o valor de 2 requer menos bits do que binarizar o valor de 3. Como outro exemplo, quando a codificação CABAC é utilizada, quantos bits são necessários para codificar pode ser baseado em uma faixa de valores possíveis. Se a faixa for reduzida, o número de bits resultante da codificação CABAC é reduzido. Por exemplo, para o primeiro valor, a faixa i pode ser 0 a 4, mas para o segundo valor, a faixa é reduzida para 0 a 3 devido à subtração (por exemplo, não é possível que o segundo valor seja igual a 4).
[00100] O decodificador de vídeo 300 pode utilizar o primeiro e o segundo valores sinalizados para determinar os preditores de vetor de movimento para a partição triangular 402A e partição triangular 402B. Por exemplo, baseado na informação sinalizada sobre o bloco atual 400, o decodificador de vídeo 300 pode determinar que o bloco atual 400 é dividido no modo triangular. Similar ao codificador de vídeo 200, o decodificador de vídeo 300 pode construir uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual 400.
[00101] O decodificador de vídeo 300 pode decodificar um primeiro valor para determinar um primeiro valor de índice na lista de preditores de vetor de movimento (por exemplo, para determinar um primeiro valor de índice para a partição triangular 402A). No exemplo da
FIG. 4, o decodificador de vídeo 300 pode decodificar um valor de 1 para o primeiro valor e pode determinar um primeiro bloco de predição triangular baseado no primeiro valor de índice. Por exemplo, o decodificador de vídeo 300 pode determinar que o primeiro valor de índice é 1 baseado no primeiro valor sendo 1. O decodificador de vídeo 300 pode acessar a entrada da lista de preditores de vetor de movimento identificada pelo primeiro valor de índice de 1, que neste exemplo é MV1 <x1, y1>.
[00102] O decodificador de vídeo 300 pode determinar um primeiro vetor de movimento (por exemplo, para partição triangular 402A) baseado no MV1 <x1, y1>. Por exemplo, para o modo de mesclagem, o decodificador de vídeo 300 pode definir o primeiro vetor de movimento igual a MV1. Para o modo AMVP, o decodificador de vídeo 300 pode receber um MVD e pode adicionar o MVD à <x1, y1> para determinar o primeiro vetor de movimento. O decodificador de vídeo 300 pode então determinar o primeiro bloco de predição triangular como o bloco triangular apontado pelo primeiro vetor de movimento.
[00103] O decodificador de vídeo 300 pode decodificar um segundo valor para determinar um segundo valor de índice na lista de preditores de vetor de movimento (por exemplo, para determinar um segundo valor de índice para partição triangular 402B). No exemplo da FIG. 4, o decodificador de vídeo 300 pode decodificar um valor de 2 para o segundo valor. Como descrito acima, embora o segundo valor de índice real seja 3, o codificador de vídeo 200 pode ter sinalizado o valor de 2. Portanto, o decodificador de vídeo 300 pode decodificar um valor de 2 para o segundo valor.
[00104] O decodificador de vídeo 300 pode determinar o segundo valor de índice baseado no segundo valor. Por exemplo, o decodificador de vídeo 300 pode comparar o segundo valor (por exemplo, 2) com o primeiro valor (por exemplo, 1). Baseado no segundo valor sendo maior ou igual ao primeiro valor, o decodificador de vídeo 300 pode adicionar um deslocamento (por exemplo, 1 neste exemplo) ao segundo valor para determinar o segundo valor de índice (por exemplo, 2 + 1 é 3).
[00105] Em um ou mais exemplos, o decodificador de vídeo 300 pode determinar um segundo bloco de predição triangular baseado no segundo valor de índice. Por exemplo, o decodificador de vídeo 300 pode determinar que o segundo valor de índice é 3 por adicionar 1 ao segundo valor de 2. O decodificador de vídeo 300 pode acessar a entrada da lista de preditores de vetor de movimento identificada pelo segundo valor de índice de 3, que neste exemplo é MV3 <x3, y3>.
[00106] O decodificador de vídeo 300 pode determinar um segundo vetor de movimento (por exemplo, para a partição triangular 402B) baseado no MV3 <x3, y3>. Por exemplo, para o modo de mesclagem, o decodificador de vídeo 300 pode definir o segundo vetor de movimento igual a MV3. Para o modo AMVP, o decodificador de vídeo 300 pode receber um MVD e pode adicionar o MVD à <x3, y3> para determinar o segundo vetor de movimento. O decodificador de vídeo 300 pode então determinar o segundo bloco de predição triangular como o bloco triangular apontado pelo segundo vetor de movimento.
[00107] O decodificador de vídeo 300 pode, então, reconstruir o bloco atual 400 baseado no primeiro bloco de predição triangular e no segundo bloco de predição triangular. Por exemplo, o decodificador de vídeo 300 pode receber informação residual indicativas da diferença entre a partição triangular 402A e o primeiro bloco de predição triangular. O decodificador de vídeo 300 pode adicionar o primeiro bloco de predição triangular a diferença para reconstruir a partição triangular 402A. O decodificador de vídeo 300 pode receber informação residual indicativa da diferença entre a partição triangular 402B e o segundo bloco de predição triangular. O decodificador de vídeo 300 pode adicionar o segundo bloco de predição triangular para a diferença para reconstruir a partição triangular 402B.
[00108] No exemplo acima, o segundo valor de índice era maior do que o primeiro valor de índice e, portanto, o codificador de vídeo 200 subtraiu um deslocamento (por exemplo, 1) e o decodificador de vídeo 300 adicionou um deslocamento (por exemplo, 1). Entretanto, em alguns exemplos, o segundo valor de índice pode ser menor do que o primeiro valor de índice. Por exemplo, suponha que o preditor de vetor de movimento para a partição triangular 402B seja MV0 <x0, y0> ao invés de MV3 <x3, y3>.
[00109] Neste exemplo, o codificador de vídeo 200 pode determinar que o segundo valor é 0 baseado no segundo valor de índice sendo igual a 0 e pode sinalizar o segundo valor de 0. O decodificador de vídeo 300 pode decodificar um segundo valor de 0. O decodificador de vídeo 300 pode comparar o segundo valor de 0 com o primeiro valor de 1. Baseado no segundo valor de 0 não sendo maior ou igual ao primeiro valor de 1, o decodificador de vídeo 300 não pode adicionar um deslocamento. Ao invés disso, o decodificador de vídeo 300 pode determinar que o segundo valor de índice é igual ao segundo valor de 0 e pode determinar o preditor de vetor de movimento para a partição triangular 402B como sendo igual a MV0 <x0, y0>.
[00110] Conforme descrito acima, o decodificador de vídeo 300 pode determinar que o bloco atual 400 está dividido no modo triangular. Em alguns exemplos, o decodificador de vídeo 300 pode determinar uma direção de partição (por exemplo, direção de divisão) baseada em um elemento de sintaxe recebido, separado a partir do primeiro valor e do segundo valor. Por exemplo, em um exemplo, a direção da divisão é representada por um valor de 1 bit (D), e o valor é codificado via Codificação Aritmética Binária Adaptável ao Contexto (CABAC). Um contexto é designado especificamente para este valor. Deste modo, a informação indicativa da direção de partição pode ser um elemento de sintaxe separado da informação indicativa do índice na lista de preditores de vetor de movimento. Ou seja, o codificador de vídeo 200 pode sinalizar uma direção de partição para o bloco atual 400 baseado em um elemento de sintaxe (por exemplo, valor de 1 bit (D)), separado a partir do primeiro valor e do segundo valor (por exemplo, valores de 1 e 2 ou 1 e 0 no exemplo acima). O decodificador de vídeo 300 pode determinar uma direção de partição para o bloco atual 400 baseado em um elemento de sintaxe recebido (por exemplo, valor de 1 bit (D)), separado a partir do primeiro valor e do segundo valor (por exemplo, valores de 1 e 2 ou 1 e 0 no exemplo acima).
[00111] Em um ou mais exemplos, a informação de movimento de cada PU é representada por um índice de valor de número inteiro de um conjunto candidato correspondente a cada PU (I1 e I2). Tanto I1 como I2 também são codificados utilizando a codificação CABAC. Por exemplo, no exemplo da FIG. 4, MV1 é o preditor de vetor de movimento utilizado para determinar o vetor de movimento para partição triangular 402A, que é então utilizada para determinar o bloco de predição triangular para a partição triangular 402A. O valor de índice MV1 (por exemplo, 1) pode ser codificado por CABAC.
[00112] O conjunto candidato das partições triangulares 402A, 402B pode ser gerado separadamente. Os dois conjuntos são nomeados como C1 e C2, e os tamanhos dos conjuntos candidatos são N1 e N2. Neste exemplo, I1 é codificado primeiro e, em seguida, I2 é codificado em segundo lugar para ilustrar como o desempenho de codificação de I2 pode ser aprimorado por utilizar a informação de I1. Uma função pode ser definida, a qual retorna o índice de um vetor de movimento (MV) dentro de um conjunto candidato (C): Idx (C, MV) = {o menor I s.t. C[I] = MV se { se Se Idx (C2, MV1) < I2, então codifique, I`2 = I2 – 1 caso contrário, codifique I`2 = I2.
[00113] De acordo com o exemplo, se Idx (C2, MV1) ≠ +∞, então a faixa de I`2 torna-se [0, N2 - 2] ao invés de [0, N2 - 1], neste exemplo, MV1 se refere ao vetor de movimento ou ao preditor de vetor de movimento para determinar um primeiro bloco de predição triangular. Em alguns exemplos, MV1 pode não estar presente na lista de preditores de vetor de movimento de modo que o vetor de movimento para um segundo bloco de predição triangular não é o mesmo que o vetor de movimento para o primeiro bloco de predição triangular.
[00114] Em esquemas de codificação por entropia utilizados pelo codificador de vídeo 200 e pelo decodificador de vídeo 300, o número de bits consumidos por um índice de valor inteiro está geralmente relacionado à faixa desse valor. Diminuir o tamanho da faixa de valores pode aprimorar a eficiência da codificação. Em outras palavras, conforme descrito acima, para codificação CABAC, por diminuir o valor do segundo valor por um deslocamento, a faixa do segundo valor é reduzida (por exemplo, a faixa do segundo valor no exemplo da FIG. 4 pode ser apenas de 0 a 3). Entretanto, se não houver subtração do deslocamento, a faixa para o segundo valor seria de 0 a 4 (por exemplo, nenhuma redução na faixa). Uma vez que o número de bits consumidos pela sinalização do valor de 2 no exemplo da FIG. 4 é baseado na faixa do valor, então o número de bits consumidos pela sinalização 2 seria menor do que o número de bits consumidos pela sinalização 3 se a faixa do valor não fosse reduzida.
[00115] Em alguns exemplos, a direção de divisão é representada como um valor do 1 bit, e o valor é codificado via o modo de desvio de CABAC. Novamente, o codificador de vídeo 200 pode sinalizar uma direção de divisão para o bloco atual 400 baseado em um elemento de sintaxe (por exemplo, valor de 1 bit (D)), separado a partir do primeiro valor e do segundo valor (por exemplo, valores de 1 e 2 ou 1 e 0 no exemplo acima). O decodificador de vídeo 300 pode determinar uma direção de partição para o bloco atual 400 baseado em um elemento de sintaxe recebido (por exemplo, valor de 1 bit (D)), separado a partir do primeiro valor e do segundo valor (por exemplo, valores de 1 e 2 ou 1 e 0 no exemplo acima).
[00116] Ao mesmo tempo, as duas PUs triangulares compartilham um mesmo conjunto candidato (C1 = C2 = C, N= = N2 = N), neste caso, para qualquer vetor de movimento (MV), pode existir Idx (C1, MV) = Idx (C2, MV). A informação de I1 pode ser utilizada da seguinte forma ao codificar I2: Se I1 < I2, então codifique I’2 = I2 – 1, caso contrário, codifique I’2 = I2. Neste caso, a faixa de I1 é [0, N - 1] e a faixa de I’2 é sempre [0, N - 2]. O dito acima reafirma o exemplo onde baseado no segundo valor de índice sendo maior do que o primeiro valor de índice, o codificador de vídeo 200 subtrai um deslocamento do segundo valor de índice para gerar um segundo valor que o codificador de vídeo 200 sinaliza, e o decodificador de vídeo 300 adiciona um deslocamento ao segundo valor recebido baseado no segundo valor sendo maior ou igual ao primeiro valor para gerar o segundo valor de índice na lista de preditores de vetor de movimento.
[00117] O dito a seguir descreve técnicas para construir a lista de preditores de vetor de movimento para blocos codificados no modo triangular. Em VVC, o modo triangular possui seu próprio método de derivação de lista de candidatos de mesclagem, o qual é diferente da derivação de lista de candidatos de mesclagem utilizada no modo de mesclagem para modos não triangulares. Pode existir um aumento na carga de implementação devido às diferentes técnicas de derivação. A lista de candidatos do modo triangular VVC inclui cinco candidatos de vetor de movimento de uni-predição utilizados para codificação da PU triangular e são derivados por duas etapas.
[00118] Na etapa 1, até 7 vetores de movimento a partir de blocos vizinhos são utilizados para construir um conjunto candidato Cstep1. Em algumas técnicas, o procedimento para construir Cstep1 é utilizado exclusivamente pelo modo triangular. Entretanto, no modo de mesclagem normal, um conjunto de candidatos Cmerge é construído para um objetivo similares. Possuir lógicas diferentes de Cmerge e Cstep1 pode aumentar a complexidade do projeto de hardware e software.
[00119] Na etapa 2, os vetores de movimento em Cstep1 são repetidos várias vezes e até 5 MVs de uni- predição são derivados para o candidato final Cstep2. O procedimento detalhado é como segue.
1. Para cada MV em Cstep1, se o MV for uni- predição e o MV não estiver em Cstep2, adicione o MV a Cstep2.
2. Para cada MV em Cstep1, se o MV for bi-predição e a parte da Lista de Referência 0 do MV (MVpart0) não estiver em Cstep2, adicione MVpart0 para Cstep2·
3. Para cada MV em Cstep1, se o MV for bi-predição e a parte da Lista de Referência 1 do MV (MVpart1) não estiver no CSfep2, adicione MVpart1 ao Cstep2.
4. Para cada MV em Cstep1, se o MV for bi-predição e a média de MVpart0 e MVpart1 (MVavg) não estiver em Cstep2, adicione MVavg a Cstep2.
5. Se Sizeof(Cstep2) < 5, preencha as partições restantes com MVs de valor 0. Em qualquer etapa, se Sizeof(Cstep2) torna-se 5, o procedimento termina imediatamente.
[00120] Para executar a operação “média” utilizada na 4ª passagem da etapa 2, são necessários dois vetores de movimento que apontam para a mesma imagem de referência. Entretanto, a parte da lista de referência 0 e a parte da lista de referência 1 do vetor de movimento de bi-predição podem apontar para diferentes imagens de referência. Ou seja, os vetores de movimento de bi- predição incluem dois vetores de movimento. Um primeiro vetor de movimento aponta para uma imagem identificada em uma primeira lista de imagens de referência (lista 0) e um segundo vetor de movimento aponta para uma imagem identificada em uma segunda imagem de referência (lista 1). A parte da lista de referência 0 se refere ao primeiro vetor de movimento na imagem na lista de imagens de referência 0, e a parte da lista de referência 1 se refere ao segundo vetor de movimento na imagem na lista de imagens de referência 1. Em tais casos, a parte da lista de referências 1 do vetor de movimento de bi-predição pode precisar ser dimensionado para a mesma imagem de referência da parte da lista de referência 0. O dimensionamento é baseado em POCcurrent - POCreference_picture_list_0 e POCcurrent - POCreference_picture_list_1.
[00121] A etapa 2 descrita acima pode possuir dois problemas: • A etapa 2 funciona em várias passagens. A informação de movimento derivada a partir do último item de Cstep1 pode se tornar o primeiro item de Cstep2, de modo que a etapa 2 não pode começar até que a etapa 1 esteja completamente concluída. • O dimensionamento do vetor de movimento possui alta complexidade, especialmente para um projeto de codec de hardware. Enquanto isso, a 4ª passagem da etapa 2 pode possuir várias operações de dimensionamento que podem aumentar muito a complexidade do codec.
[00122] Esta revelação descreve técnicas ilustrativas que podem proporcionar uma abordagem mais unificada e simples em derivar a lista de candidatos de uni-predição. As técnicas ilustrativas podem utilizar um processo de derivação de lista de candidatos existente. Por exemplo, para o modo de mesclagem, a técnica pode ser derivação de lista de candidatos de mesclagem. A saída desse processo de derivação é conhecida como Cmerge. Uma vez que o modo triangular utiliza uni-predição para cada PU, então o MV de bi-predição na derivação da lista de mesclagem é dividido em dois: MVs uni-L0 e uni-L1, os quais podem ser adicionados à lista de candidatos (referida como Ctriangle) para o modo triangular. Em alguns exemplos, somente um pode ser adicionado à lista de candidatos. Nesse caso, a derivação da lista de candidatos é compartilhada com o modo de mesclagem e somente a divisão bi-MV em uni-MV precisa ser adicionada.
[00123] Em outras palavras, o codificador de vídeo 200 e o decodificador de vídeo 300 podem construir uma lista de preditores de vetor de movimento inicial que inclui vetores de movimento de bi-predição e de uni- predição. Os vetores de movimento de bi-predição referem- se a vetores de movimento de blocos vizinhos que são preditos inter com dois vetores de movimento: um que aponta para um bloco em uma imagem identificada em uma primeira lista de imagens de referência e outro que aponta para um bloco em uma imagem identificada em uma segunda lista de imagens de referência. Os vetores de movimento de uni- predição referem-se a vetores de movimento de blocos vizinhos que são preditos inter com um vetor de movimento.
[00124] Para o modo não triangular (por exemplo, o bloco atual não é dividido no modo triangular), a lista de preditores de vetor de movimento pode incluir vetores de movimento de bi-predição e de uni-predição. Entretanto, para o modo triangular, a lista de preditores de vetor de movimento pode incluir somente vetores de movimento de uni-predição. Consequentemente, para proporcionar alguma unificação na construção da lista de preditores de vetor de movimento, o codificador de vídeo 200 e o decodificador de vídeo 300 podem construir uma lista de preditores de vetor de movimento inicial de uma maneira similar ao modo não triangular, de modo que a lista de preditores de vetor de movimento inicial inclua ambos os vetores de movimento de bi-predição e os vetores de movimento de uni-predição. Então, o codificador de vídeo
200 e o decodificador de vídeo 300 podem construir a lista de preditores de vetor de movimento baseado na lista de preditores de vetor de movimento inicial (por exemplo, por separar os vetores de movimento de bi-predição em duas entradas separadas na lista de preditores de vetor de movimento, como um exemplo não limitante).
[00125] Os uni-MVs podem ser adicionados à lista um após o outro, ou um dos candidatos pode ser adicionado em uma posição posterior na lista de candidatos. Adicionalmente, a mesma lista de mesclagem derivada uma vez para a CU triangular pode ser utilizada para ambas as PUs. Em alguns exemplos, a remoção da redundância pode ser feita conforme descrito acima.
[00126] Em um exemplo de implementação, na primeira etapa da geração da lista de candidatos, a lista de candidatos de mesclagem Cmerge é gerada. Cmerge pode conter MVs de bi-predição e de uni-predição. Para ser utilizado para compensação de movimento de PU triangular, cada MV de bi-predição pode ser substituído por dois MVs de uni-predição (parte de uni-L0 e parte de uni-L1 do MV). Em outras palavras, o vetores de movimento de bi-predição são separados em dois vetores de movimento de uni-predição: um dentre os vetores de movimento de uni-predição aponta para um bloco em uma imagem na lista de imagens de referência 0 e outro dentre o vetor de movimento de uni-predição aponta para um bloco em uma imagem em lista de imagens de referência 1. Após a remoção da redundância, o Ctriangle final é gerado.
[00127] Os detalhes da conversão de Cmerge para Ctriangle do exemplo de implementação são descritos a seguir:
1 Iniciar Ctriangle para Vazio 2 Para cada MV em Cmerge 3 Se o MV é uni-predição 4 Se o MV já não está em Ctriangle 5 Adicionar o MV a Ctriangle 6 Se Sizeof(Ctriangle) == Ntriangle Então ir para 18 7 Senão 8 MV0 = parte RefList 0 do
MV 9 MV1 = parte RefList 1 do
MV 10 Se o MV0 já não está em Ctriangle 11 Adicionar MV0 para Ctriangle 12 Se Sizeof(Ctriangle) == Ntriangle Então ir para 18 13 Se o MV1 já não está em Ctriangle 14 Adicionar MV1 para Ctriangle 15 Se Sizeof(Ctriangle) == Ntriangle Então ir para 18 16 Se Sizeof(Ctriangle) não ==
Ntriangle 17 Preencher as partições restantes com MVs com valor 0 18 Emitir Ctriangle
[00128] Em outro exemplo de implementação, a geração de Cmerge e Ctriangle descrita acima é projetada de forma alinhada de modo que a latência de geração do conjunto candidato possa ser ainda mais reduzida, especialmente para um projeto de codec de hardware.
[00129] A geração de candidatos de mesclagem regulares Cmerge como um procedimento autônomo é descrita a seguir. O procedimento Pruning_test_succeeded chamado no pseudocódigo representa a remoção de redundância definida por um modo de mesclagem padrão (por exemplo, a saída Cmerge tem um tamanho máximo de Nmerge). 1 GENERATE_C_Merge (Nmerge) 2 Iniciar Cmerge para Vazio 3 Para cada MV a ser considerado 4 Se Pruning_test_succeeded(Cmerge, MV) e Sizeof(Cmerge) < Nmerge 5 Adicionar MV à Cmerge 6 Retornar Cmerge
[00130] A geração de Ctriangle compartilha a lógica de GENERATE_C_Merge() para a geração de Cmerge e converte os membros de Cmerge em membros de Ctriangle na hora.
O Ctriangle gerado possui um tamanho máximo de Ntriangle. 1 GENERATE_C_Triangle(Nmerge, Ntriangle) 2 Iniciar Ctriangle e Cmerge para Vazio 3 Para cada MV a ser considerado 4 Se Pruning_test_succeeded(Cmerge, MV) e Sizeof(Cmerge) < Nmerge 5 Adicionar MV a Cmerge 6 Se o MV é uni-predição 7 Se o MV já não está em Ctriangle 8 Adicionar o MV a Ctriangle 9 Se Sizeof(Ctriangle) == Ntriangle Então ir para 21
10 Senão 11 MV0 = parte RefList 0 do MV 12 MV1 = parte RefList 1 do MV 13 Se o MV0 já não está em Ctriangle 14 Adicionar MV0 para Ctriangle 15 Se Sizeof(Ctriangle) == Ntriangle Então ir para 21 16 Se o MV1 já não está em Ctriangle
17 Adicionar MV1 para Ctriangle 18 Se Sizeof(Ctriangle) == Ntriangle Então ir para 21 19 Se Sizeof(Ctriangle) não == Ntriangle 20 Preencher as partições restantes com MVs com valor 0 21 Retornar Cmerge
[00131] O dito a seguir descreve o armazenamento de informação de movimento. A variável NoBackwardPredFlag é derivada da seguinte maneira. NoBackwardPredFlag é um sinalizador para indicar se todas as imagens de referência de uma imagem específica possuem a contagem de ordem de imagem (POC) menor do que a imagem atual. Se todas as imagens de referência tiverem uma POC menor, NoBackwardPredFlag será VERDADEIRO. Caso contrário, uma ou mais imagens de referência possuem uma POC maior do que a imagem atual e NoBackwardPredFlag é FALSO. Por exemplo, se DiffPicOrderCnt(aPic, CurrPic) for menor ou igual a 0 para cada imagem aPic em RefPicListO ou RefPicListl da fatia atual, NoBackwardPredFlag é definido igual a 1. Caso contrário, NoBackwardPredFlag é definido igual a 0.
[00132] O procedimento de combinação de MV (vetor de movimento) é ilustrado na FIG. 5. O codificador de vídeo 200 e o decodificador de vídeo 300 podem determinar se os dois vetores de movimento para o bloco atual possuem listas de referência diferentes (por exemplo, o primeiro vetor de movimento para o bloco atual se refere a uma imagem na lista de imagens de referência 0 e o segundo vetor de movimento para o atual bloco refere-se a uma imagem na lista de imagens de referência 1) (500). Se os dois vetores de movimento para o bloco atual possuem listas de referência diferentes (SIM de 500), então os dois vetores de movimento podem ser combinados diretamente (expresso como MV1 + MV2 na FIG. 5) (502). Caso contrário (NÃO de 500), um dos MVs pode ser mapeado para a outra lista de referência para que a combinação MV possa ser realizada.
[00133] Por exemplo, se os dois MVs apontam para listas diferentes, então um Bi-MV pode ser gerado utilizando o MV que aponta para L0 (ou seja, lista de imagens de referência 0) como parte L0, e o outro MV que aponta para L1 (ou seja, lista de imagens de referência lista 1) como parte L1. Se os dois MVs apontam para uma lista (por exemplo, L0), então os dois MVs não podem ser combinados para um Bi-MV diretamente, devido a não haver nenhum Bi-MV que contém dois componentes L0, mas nenhum componente L1.
[00134] O MV2 é testado primeiro (504). Se a imagem de referência de MV2 também existe na outra lista de referência, então, o mapeamento é bem-sucedido (SUCESSO de 504), e o MV’2 de saída pode ser combinado com o MV1 (expresso como MV1 + MV’2) (506). Caso contrário (FALHA de 504), o mesmo mapeamento é executado em MV1 para MV’1 (508) para sucesso (SUCESSO de 508) com uma saída combinada de (MV’1 + MV2) (510). Se tanto MV’1 como MV’2 não existirem (FALHA de 508), então, a saída pode ser o MV1 de uni- predição como resultado (512).
[00135] A operação de mapeamento possui problemas de complexidade. O mapeamento de MV para MV' precisa percorrer a outra lista de referência para descobrir se a lista contém a imagem de referência de MV. Esta é uma operação computacionalmente cara para o codificador de vídeo 200 e para o decodificador de vídeo
300. Se o mapeamento de MV2 falhar, a mesma operação precisa ser executada em relação a MV1, de modo que a complexidade do pior caso é ainda aumentada.
[00136] Como apresentado nas FIGS. 6A e 6B, para as CUs codificadas com modo PU triangular, os sub- blocos na borda diagonal da direção de divisão fazem uso de valores com movimento compensado de MV1 e MV2; portanto, um vetor de movimento de bi-predição contendo informação de MV1 e MV2 deve ser armazenado como informação de movimento para esses sub-blocos. Por exemplo, a FIG. 6A ilustra o bloco 602 que inclui sub-blocos 606A e 606B. O sub-bloco 606A utiliza MV1 e o sub-bloco 606B utiliza MV2. A FIG. 6B ilustra o bloco 604 que inclui sub-blocos 608A e 608B. O Sub-bloco 608A utiliza MV1 e o sub-bloco 608B utiliza MV2.
[00137] Esta revelação descreve maneiras simplificadas de gerar MVs de bi-predição para o armazenamento de informação de movimento do modo PU triangular. Os dois MVs de uni-predição (por exemplo, os MVs de bi-predição são divididos em dois MVs de uni- predição) são combinados (se possível) baseado na configuração da lista de imagens de referência 0 e da lista de imagens de referência 1, por exemplo, baseado no valor de NoBackwardPredFlag. Em um exemplo, quando NoBackwardPredFlag é verdadeiro (ou seja, todas as imagens de referência são a partir do passado em comparação com a imagem atual), então dois MVs de uni-predição de PUs triangulares são combinados para formar um MV de bi- predição e armazenados em um bloco codificado com o modo triangular. Caso contrário, um MV de uni-predição é utilizado. Em um exemplo, uni-L0 é utilizado; no outro exemplo, uni-L1 é utilizado. Em ainda outro exemplo, o MV da primeira PU triangular é utilizado, e o MV da segunda PU triangular é utilizado. Em algumas técnicas ilustrativas, os valores de MV das PUs triangulares são verificados e baseado na verificação, a seleção de MV é feita. Em alguns exemplos, o índice de imagem de referência ou POC de imagem de referência dessa informação de movimento é verificado e um é selecionado baseado no processo de determinação. Por exemplo, o MV correspondente à imagem de referência mais próxima em relação à imagem atual é escolhido. Em um exemplo, as técnicas ilustrativas podem ser executadas sem qualquer operação de pesquisa através de uma lista de referência.
[00138] A descrição dos detalhes dos exemplos de implementação é como segue. Se a informação de movimento das duas PUs estiverem em listas de referência diferentes, a informação de movimento podem ser combinadas via o seguinte procedimento: 1 Combine_From_Different_List(MV1, MV2) 2 MV.prediction_dir = bi-predição 3 Se MV1 utiliza a lista de referência L0 4 MV.reference_index_L0 =
MV1.reference_index_L0 5 MV.reference_index_L1 = MV2.reference_index_L1 6 MV.motion_vector_L0 = MV1.motion_vector_L0 7 MV.motion_vector_L1 = MV2.motion_vector_L1 8 Senão 9 MV.reference_index_L0 = MV2.reference_index_L0 10 MV.reference_index_L1 = MV1.reference_index_L1 11 MV.motion_vector_L0 = MV2.motion_vector_L0 12 MV.motion_vector_L1 = MV1.motion_vector_L1 13 Emite MV
[00139] Se a informação de movimento das PUs estiver em listas de referência diferentes, a informação de movimento pode ser combinada via o seguinte procedimento: 1 Combine_From_Same_List(MV1, MV2) 2 Se NoBackwardPredFlag ==
FALSO 3 MV = MV1 4 Senão 5 MV.predition_dir = bi- predição
6 Se MV1 utiliza a lista de referência L0 7 MV.reference_index_L0 = MV1. reference_index_L0 8 MV.reference_index_L1 = MV2. reference_index_L1 9 MV.motion_vector_L0 = MV1.motion_vector_L0 10 MV.motion_vector_L1 = MV2.motion_vector_L0 11 Senão 12 MV.reference_index_L0 = MV2.reference_index_L1 13 MV.reference_index_L1 = MV1.reference_index_L1 14 MV.motion_vector_L0 = MV2.motion_vector_L1 15 MV.motion_vector_L1 = MV1.motion_vector_L1 16 Emite MV
[00140] Em um exemplo de implementação, o Combine_From_Different_List é igual ao exemplo acima. O procedimento de Combine_From_Same_List é projetado como segue, e as operações de pesquisa são executadas quando NoBackwardPredFlag é Falso, mas somente uma operação de pesquisa é necessária: 1 Combine_From_Same_List(MV1, MV2)
2 Se NoBackwardPredFlag ==
FALSO 3 MV = MV1 4 Senão 5 MV.prediction_dir = bi- predição RefPOC2 = POC de imagem de referência de MV2 6 Se MV1 utiliza a lista de referência L0 MappedRefIndex2 = Search_List_For_Poc(RefList1, RefPOC2) 7 MV.reference_index_L0 = MV1.reference_index_L0 8 MV.reference_index_L1 = MappedRefIndex2 9 MV.motion_vextor_L0 = MV1.motion_vector_L0 10 MV.motion_vextor_L1 = MV2.motion_vector_L0 11 Senão MappedRefIndex2 = Search_List_For_Poc(RefList0, RefPOC2) 12 MV.reference_index_L0 = MappedRefIndex2 13 MV.reference_index_L1 = MV1.reference_index_L1
14 MV.motion_vextor_L0 = MV2.motion_vector_L1 15 MV.motion_vextor_L1 = MV1.motion_vector_L1 16 Emite MV 17 Search_List_For_Poc(RefList, POC) 18 Para (I = 0; I < sizeof(RefList); I++) 19 If RefList[I].POC == POC 20 Retorna I 21 Retorna + ∞
[00141] A FIG.7 é um diagrama de blocos ilustrando um codificador de vídeo ilustrativo 200 que pode executar as técnicas desta revelação. A FIG. 7 é proporcionada para propósitos de explicação e não deve ser considerado uma limitação das técnicas conforme amplamente exemplificado e descrito nesta revelação. Para propósitos de explicação, esta 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 em desenvolvimento (por exemplo, VVC). Entretanto, as técnicas desta revelação não estão limitadas a esses padrões de codificação de vídeo e são geralmente aplicáveis à codificação e decodificação de vídeo.
[00142] No exemplo da FIG. 7, o codificador de vídeo 200 inclui memória de dados de vídeo 230, unidade de seleção de modo 202, unidade de geração residual 204,
unidade de processamento de transformada 206, unidade de quantização 208, unidade de quantização inversa 210, unidade de processamento de transformada inversa 212, unidade de reconstrução 214, unidade de filtro 216, armazenamento de imagem decodificada (DPB) 218, e unidade de codificação por entropia 220.
[00143] 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, por exemplo, a partir da fonte 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 utilização 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 pode ser formado por qualquer um dentre uma variedade de dispositivos de memória, tal como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magneto resistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória de dados de vídeo 230 e o DPB 218 podem ser proporcionados pelo mesmo dispositivo de memória ou por dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 230 pode estar no chip com outros componentes do codificador de vídeo 200, conforme ilustrado, ou fora do chip em relação a esses componentes.
[00144] Nesta revelação, a referência à memória de dados de vídeo 230 não deve ser interpretada como sendo limitada à memória interna para o codificador de vídeo 200,
a menos que especificamente descrito como tal, ou a memória externa para o codificador de vídeo 200, a menos que especificamente descrito como tal. Ao invés disso, a referência à memória de dados de vídeo 230 deve ser entendida como a 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 deve ser codificado). A Memória 106 da FIG. 1 também pode proporcionar armazenamento temporário de saídas das várias unidades do codificador de vídeo 200.
[00145] As várias unidades da FIG. 7 são ilustradas para auxiliar no entendimento das operações executadas 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 referem-se a circuitos que proporcionam uma funcionalidade particular, e estão predefinidos nas operações que podem ser executadas. Os circuitos programáveis referem-se a circuitos que podem ser programados para executar várias tarefas e proporcionam funcionalidade flexível nas operações que podem ser executadas. Por exemplo, os circuitos programáveis podem executar software ou firmware que causam que os circuitos programáveis operem da maneira definida pelas instruções do software ou do firmware. Os circuitos de função fixa podem executar instruções de software (por exemplo, para receber parâmetros ou para emitir parâmetros), mas os tipos de operações que os circuitos de função executam geralmente são imutáveis. Em alguns exemplos, uma ou mais das unidades podem ser blocos de circuitos distintos (de função fixa ou programáveis) e, em alguns exemplos, a uma ou mais unidades podem ser circuitos integrados.
[00146] O codificador de vídeo 200 pode incluir unidades 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. Em exemplos onde as operações do codificador de vídeo 200 são executadas utilizando software executado pelos circuitos programáveis, a memória 106 (FIG. 1) pode armazenar instruções (por exemplo, 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 apresentada) pode armazenar tais instruções.
[00147] 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 proporcionar os dados de vídeo para a unidade de geração residual 204 e para a 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 devem ser codificados.
[00148] A unidade de seleção de modo 202 inclui uma unidade de estimativa de movimento 222, uma 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 executar 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 (a qual pode ser parte da unidade de estimativa de movimento 222 e/ou da unidade de compensação de movimento 224), uma unidade afim, uma unidade de modelo linear (LM), ou similares.
[00149] A unidade de seleção de modo 202 geralmente coordena várias passagens de codificação para testar combinações de parâmetros de codificação e valores de distorção de taxa resultantes para tais combinações. Os parâmetros de codificação podem incluir divisão de 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, em última análise, selecionar a combinação de parâmetros de codificação possuindo valores de distorção de taxa que são melhores do que as outras combinações testadas.
[00150] O codificador de vídeo 200 pode dividir 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 dividir uma CTU da imagem de acordo com uma estrutura de árvore, tal como a estrutura QTBT ou a estrutura de árvore quaternária de HEVC descrita acima. Conforme descrito acima, o codificador de vídeo 200 pode formar uma ou mais CUs a partir do divisão de uma CTU de acordo com a estrutura em árvore. Tal CU também pode ser geralmente referida como um “bloco de vídeo” ou “bloco”.
[00151] Em geral, a unidade de seleção de modo 202 também controla os seus componentes (por exemplo, a unidade de estimativa 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 em HEVC, a parte sobreposta de uma PU e uma TU). Para predição inter de um bloco atual, a unidade de estimativa de movimento 222 pode executar uma pesquisa de movimento para identificar um ou mais blocos de referência mais correspondentes em uma ou mais imagens de referência (por exemplo, uma ou mais imagens previamente codificadas armazenadas no DPB 218). Em particular, a unidade de estimativa de movimento 222 pode calcular um valor representativo de quão similar um bloco de referência potencial é para o bloco atual, por exemplo, de acordo com a soma da diferença absoluta (SAD), com a soma das diferenças quadradas (SSD), com a diferença absoluta média (MAD), com as diferenças média quadradas (MSD) ou similares. A unidade de estimativa de movimento 222 pode geralmente executar esses cálculos utilizando diferenças de amostra por amostra entre o bloco atual e o bloco de referência sendo considerado. A unidade de estimativa de movimento 222 pode identificar um bloco de referência possuindo um valor mais baixo resultante desses cálculos, indicando um bloco de referência que mais se aproxima do bloco atual.
[00152] A unidade de estimativa 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 estimativa de movimento 222 pode então proporcionar os vetores de movimento para a unidade de compensação de movimento 224. Por exemplo, para predição inter unidirecional, a unidade de estimativa de movimento 222 pode proporcionar um único vetor de movimento, enquanto que para a predição inter bidirecional, a unidade de estimativa de movimento 222 pode proporcionar dois vetores de movimento. A unidade de compensação de movimento 224 pode, então, gerar um bloco de predição utilizando os vetores de movimento. Por exemplo, a unidade de compensação de movimento 224 pode recuperar dados do bloco de referência utilizando o vetor de movimento. Como outro exemplo, se o vetor de movimento possui precisão de amostra fracionária, 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 disso, para predição inter bidirecional, a unidade de compensação de movimento 224 pode recuperar dados para dois blocos de referência identificados pelos respectivos vetores de movimento e combinar os dados recuperados, por exemplo, através de média de amostra por amostra ou por média ponderada.
[00153] A unidade de seleção de modo 202, a unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem ser configuradas para executar uma ou mais técnicas ilustrativas descritas nesta revelação. Por exemplo, a unidade de seleção de modo 202 pode determinar que um primeiro bloco atual é dividido em um modo triangular. A unidade de estimativa de movimento 222 pode ser configurada para construir uma primeira lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos do primeiro bloco atual. Por exemplo, a unidade de estimativa de movimento 222 pode acessar o DPB 218 para a informação do vetor de movimento dos blocos vizinhos. Por exemplo, a unidade de estimativa de movimento 222 pode construir uma lista de preditores de vetor de movimento inicial que inclui vetores de movimento de bi-predição e de uni- predição e construir a primeira lista de preditores de vetor de movimento baseado na lista de preditores de vetor de movimento inicial.
[00154] A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem, em conjunto, determinar um primeiro bloco de predição triangular. Em um exemplo, a unidade de estimativa de movimento 222 pode determinar qual bloco de predição triangular está mais próximo da primeira partição triangular do bloco atual. A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem determinar um primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro bloco de predição triangular determinado. Por exemplo, a unidade de estimativa de movimento 222 pode determinar qual informação de vetor de movimento da lista de preditores de vetor de movimento deve ser utilizada como um preditor de vetor de movimento para predizer um primeiro vetor de movimento que aponta para o primeiro bloco de predição triangular. A unidade de estimativa de movimento 222 pode determinar um primeiro valor baseado no primeiro valor de índice (por exemplo, o primeiro valor é igual ao primeiro valor de índice) e causar que a unidade de codificação por entropia 220 codifique e sinalize o primeiro valor.
[00155] Similarmente, a unidade de estimativa de movimento 222 e a unidade de compensação de movimento
224 podem, em conjunto, determinar um segundo bloco de predição triangular, e determinar um segundo valor de índice na lista de preditores de vetor de movimento baseado no segundo bloco de predição triangular determinado. Neste exemplo, a unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem comparar o primeiro valor de índice e o segundo valor de índice. Baseado no segundo valor do índice sendo maior do que o primeiro valor do índice, a unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem subtrair um deslocamento (por exemplo, 1) a partir do segundo valor de índice para gerar um segundo valor. A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem causar que a unidade de codificação por entropia 220 codifique e sinalize o segundo valor.
[00156] A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem construir uma segunda lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um segundo bloco atual. Utilizando técnicas para determinar blocos de predição triangulares similares aos descritos acima, a unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem determinar um terceiro bloco de predição triangular e determinar um terceiro valor de índice na segunda lista de preditores de vetor de movimento baseado no terceiro bloco de predição triangular determinado. A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem causar que a unidade de codificação por entropia 220 codifique e sinalize um terceiro valor baseado no terceiro valor de índice.
[00157] A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem determinar um quarto bloco de predição triangular e determinar um quarto valor de índice na segunda lista de preditores de vetor de movimento baseado no quarto bloco de predição triangular determinado. A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem comparar o quarto índice com o terceiro índice e baseado no quarto valor do índice sendo menor do que o terceiro valor do índice determinar um quarto valor que é igual ao quarto valor do índice. A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem causar que a unidade de codificação por entropia 220 codifique e sinalize o quarto valor.
[00158] 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 de amostras vizinhas do bloco atual. Por exemplo, para modos direcionais, a unidade de predição intra 226 pode geralmente combinar matematicamente valores de amostras vizinhas e preencher esses valores calculados na direção definida através do bloco atual para produzir o bloco de predição. Como outro exemplo, para o modo DC, unidade de predição intra 226 pode calcular uma média das amostras vizinhas ao bloco atual e gerar o bloco de predição incluindo esta média resultante para cada amostra do bloco de predição.
[00159] A unidade de seleção de modo 202 proporciona o bloco de predição para a unidade de geração residual 204. A unidade de geração residual 204 recebe uma versão não codificada e bruta do bloco atual a partir da memória de dados de vídeo 230 e do bloco de predição da unidade de seleção de modo 202. A unidade de geração residual 204 calcula diferenças de 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 residual 204 também pode determinar diferenças entre os valores de amostra no bloco residual para gerar um bloco residual utilizando modulação de código de pulso diferencial residual (RDPCM). Em alguns exemplos, a unidade de geração residual 204 pode ser formada utilizando um ou mais circuitos subtratores que executam a subtração binária.
[00160] Em exemplos onde a unidade de seleção de modo 202 divide CUs em PUs, cada PU pode ser associada com uma unidade de predição de luma e unidades de predição de croma correspondente. O codificador de vídeo 200 e o decodificador de vídeo 300 podem suportar PUs com vários tamanhos. Conforme 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 luma da PU. Assumindo que o tamanho de uma CU particular é 2N x 2N, o codificador de vídeo 200 pode suportar tamanhos de PU de 2N x 2N ou N x N para predição intra e tamanhos de PU simétricos de 2N x 2N, 2N x N, N x 2N, N x N, ou similares para predição inter. O codificador de vídeo 200 e o decodificador de vídeo 300 também podem suportar divisão assimétrica para tamanhos de PU de 2N x nU, 2N x nD, nL x 2N e nR x 2N para predição inter.
[00161] Em exemplos onde a unidade de seleção de modo 202 não divide ainda mais uma CU em PUs, cada CU pode ser associada com um bloco de codificação de luma e com blocos de codificação de croma correspondentes. Como dito acima, 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 2N x 2N, 2N x N ou N x 2N.
[00162] Para outras técnicas de codificação de vídeo, como uma codificação de modo de cópia intra-bloco, uma codificação de modo afim e a codificação de modo de modelo linear (LM), como alguns exemplos, a unidade de seleção de modo 202, via as respectivas unidades associadas com as técnicas de codificação, gera um bloco de predição para o bloco atual sendo codificado. Em alguns exemplos, tal como codificação de modo paleta, a unidade de seleção de modo 202 pode não gerar um bloco de predição, e, ao invés disso, gera elementos de sintaxe que indicam a maneira na qual reconstruir o bloco baseado em uma paleta selecionada de valores de amostra. Em tais modos, a unidade de seleção de modo 202 pode proporcionar esses elementos de sintaxe para a unidade de codificação por entropia 220 para serem codificados.
[00163] Conforme 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 residual 204 calcula diferenças de amostra por amostra entre o bloco de predição e o bloco atual.
[00164] A unidade de processamento de transformada 206 aplica uma ou mais transformadas ao bloco residual para gerar um bloco de coeficientes de transformada (referido neste documento como um “bloco de coeficientes 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 executar várias transformadas em 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 para um bloco residual.
[00165] 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 quantizado. 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 com o 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 aplicada aos blocos de coeficientes de transformada associados ao bloco atual, por ajustar o valor QP associado à com a CU. A quantização pode introduzir perda de informação e, portanto, coeficientes de transformada quantizados podem possuir menor precisão do que os coeficientes de transformada originais produzidos pela unidade de processamento de transformada 206.
[00166] 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 correspondente ao bloco atual (embora potencialmente com algum grau de distorção) baseado 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 às amostras correspondentes do bloco de predição gerado pela unidade de seleção de modo 202 para produzir o bloco reconstruído.
[00167] A unidade de filtro 216 pode executar uma ou mais operações de filtro em blocos reconstruídos. Por exemplo, a unidade de filtro 216 pode executar operações de desagrupamento 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.
[00168] O codificador de vídeo 200 armazena blocos reconstruídos no DPB 218. Por exemplo, em exemplos onde as operações da unidade de filtro 216 não são necessárias, a unidade de reconstrução 214 pode armazenar os blocos reconstruídos no DPB 218. Em exemplos onde as operações da unidade de filtro 216 são necessárias, a unidade de filtro 216 pode armazenar os blocos reconstruídos filtrados no DPB 218. A unidade de estimativa de movimento 222 e a unidade de compensação de movimento 224 podem recuperar uma imagem de referência a partir do DPB 218, formada a partir dos blocos reconstruídos (e potencialmente filtrados), para predizer inter blocos de imagens codificadas subsequentemente. Adicionalmente, a unidade de predição intra 226 pode utilizar blocos reconstruídos no DPB 218 de uma imagem atual para predizer intra outros blocos na imagem atual.
[00169] Em geral, a unidade de codificação por entropia 220 pode codificar por entropia elementos de sintaxe recebidos 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 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, a informação de movimento para predição inter ou a informação de 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 executar 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, as unidade de codificação por entropia 220 pode executar uma operação de codificação de comprimento variável adaptável ao contexto (CAVLC), uma operação CABAC, uma operação de codificação de comprimento variável para variável (V2V), uma operação de codificação aritmética binária adaptável ao contexto baseada na sintaxe (SBAC), um operação de codificação por Entropia de Divisão de Intervalo de Probabilidade (PIPE), uma Operação de codificação Exponencial de Golomb 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 em modo de desvio, onde os elementos de sintaxe não são codificados por entropia.
[00170] O codificador de vídeo 200 pode emitir um fluxo de bits que inclui os elementos de sintaxe codificados por entropia necessários para reconstruir blocos de uma fatia ou imagem. Em particular, a unidade de codificação por entropia 220 pode enviar o fluxo de bits.
[00171] As operações descritas acima são descritas em relação a um bloco. Tal descrição deve ser entendida como sendo operações para um bloco de codificação de luma e/ou blocos de codificação de croma. Conforme 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 de 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 de croma de uma PU.
[00172] Em alguns exemplos, as operações executadas em relação 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 a imagem de referência para um bloco de codificação de luma não precisam ser repetidas para identificar um MV e a imagem de referência para os blocos de croma. Ao invés disso, o MV para o bloco de codificação de luma pode ser dimensionados 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.
[00173] A FIG. 8 é um diagrama de blocos ilustrando um decodificador de vídeo ilustrativo 300 que pode executar as técnicas desta revelação. A FIG. 8 é proporcionada para propósitos de explicação e não é limitante das técnicas conforme amplamente exemplificado e descrito nesta revelação. Para propósitos de explicação, esta revelação descreve o decodificador de vídeo 300 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 em desenvolvimento (por exemplo, VVC). Entretanto, as técnicas desta revelação podem ser executadas por dispositivos de codificação de vídeo que são configurados para operar de acordo com outros padrões de codificação de vídeo.
[00174] No exemplo da FIG. 8, o decodificador de vídeo 300 inclui a memória de armazenamento de imagem codificada (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 armazenamento de imagem decodificada (DPB) 314. A unidade de processamento de predição 304 inclui a unidade de compensação de movimento 316 e a unidade de predição intra
318. A unidade de processamento de predição 304 pode incluir unidades adicionais para executar 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 de intra-bloco (a qual pode fazer parte da unidade de compensação de movimento 316), uma unidade afim, uma unidade de modelo linear (LM) ou similares. Em outros exemplos, o decodificador de vídeo 300 pode incluir mais, menos ou diferentes componentes funcionais.
[00175] A memória CPB 320 pode armazenar dados de vídeo, tal como um fluxo de bits de vídeo codificado, para ser decodificado 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 de 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) a partir de um fluxo de bits de vídeo codificado. Além disso, a memória CPB 320 pode armazenar dados de vídeo que não sejam elementos de sintaxe de uma imagem codificada, tais como dados temporários que representam saídas das várias unidades do decodificador de vídeo 300. O DPB 314 geralmente armazena imagens decodificadas, as quais o decodificador de vídeo 300 pode emitir e/ou utilizar 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 um dentre uma variedade de dispositivos de memória, tal como a memória de acesso aleatório dinâmica (DRAM), incluindo a DRAM síncrona (SDRAM), a RAM magneto resistiva (MRAM), a RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória CPB 320 e o DPB 314 podem ser proporcionados pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória CPB 320 pode estar no chip com outros componentes do decodificador de vídeo 300 ou fora do chip em relação a esses componentes.
[00176] Adicionalmente ou alternativamente, 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 conforme discutido acima com a memória CPB 320. Da mesma forma, a memória 120 pode armazenar instruções a serem executadas pelo decodificador de vídeo 300, quando algumas ou todas as funcionalidades do decodificador de vídeo 300 são implementadas em software a ser executado pelo sistema de circuitos de processamento do decodificador de vídeo
300.
[00177] As várias unidades apresentadas na FIG. 8 são ilustradas para auxiliar com o 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. Similares à FIG. 7, os circuitos de função fixa referem-se a circuitos que proporcionam uma funcionalidade particular e são predefinidos nas operações que podem ser executadas. Os circuitos programáveis referem-se a circuitos que podem ser programados para executar várias tarefas, e proporcionar funcionalidade flexível nas operações que podem ser executadas. Por exemplo, os circuitos programáveis podem executar software ou firmware que causa que os circuitos programáveis operem da maneira definida pelas instruções de software ou de firmware. Os circuitos de função fixa podem executar instruções de software (por exemplo, para receber parâmetros ou emitir parâmetros), mas os tipos de operações que os circuitos de função fixa executam são geralmente imutáveis. Em alguns exemplos, uma ou mais das unidades podem ser blocos de circuitos distintos (de função fixa ou programável) e, em alguns exemplos, a uma ou mais unidades podem ser circuitos integrados.
[00178] 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. Em exemplos onde as operações do decodificador de vídeo 300 são executadas por software em execução 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.
[00179] 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 baseados nos elementos de sintaxe extraídos do fluxo de bits.
[00180] Em geral, o decodificador de vídeo 300 reconstrói uma imagem em uma base de bloco a bloco. O decodificador de vídeo 300 pode executar uma operação de reconstrução em cada bloco individualmente (onde o bloco atualmente sendo reconstruído, ou seja, decodificado, pode ser referido como um “bloco atual”).
[00181] A unidade de decodificação por entropia 302 pode decodificar elementos de sintaxe por entropia definindo coeficientes de transformada quantizada de um bloco de coeficientes de transformada quantizados, bem como informação de transformada, como um parâmetro de quantização (QP) e/ou indicação (indicações) de modo de transformada. A unidade de quantização inversa 306 pode utilizar o QP associado com o 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, executar uma operação de deslocamento à esquerda bit a bit para quantizar inversamente os coeficientes de transformada quantizados. A unidade de quantização inversa 306 pode, assim, formar um bloco de coeficiente de transformada incluindo coeficientes de transformada.
[00182] 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 com o bloco atual. Por exemplo, a unidade de processamento de transformada inversa 308 pode aplicar um DCT inversa, uma transformada de número inteiro inversa, uma transformada de Karhunen-Loeve inversa (KLT), uma transformada de rotação inversa, uma transformada direcional inversa ou outra transformada inversa para o bloco de coeficientes de transformada.
[00183] Além disso, 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 indicam que o bloco atual é predito 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 recuperar um bloco de referência, bem como um vetor de movimento que identifica 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 geralmente pode executar o processo de predição inter de uma maneira que é substancialmente similar à descrita em relação à unidade de compensação de movimento 224 (FIG. 7).
[00184] A unidade de compensação de movimento 316, juntamente com a unidade de decodificação por entropia 302, pode ser configurada para executar técnicas ilustrativas descritas nesta revelação. Por exemplo, a unidade de compensação de movimento 316 pode determinar que um primeiro bloco atual é dividido em um modo triangular. Como um exemplo, a unidade de decodificação por entropia 302 pode receber um elemento de sintaxe separado da informação utilizada para determinar a informação do vetor de movimento que indica uma direção de partição, e a unidade de compensação de movimento 316 pode determinar a direção de partição para o primeiro bloco atual baseada no elemento de sintaxe recebido.
[00185] A unidade de compensação de movimento 316 pode construir uma primeira lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual. Por exemplo, a unidade de compensação de movimento 316 pode construir uma lista de preditores de vetor de movimento inicial que inclui vetores de movimento de bi-predição e uni-predição e construir a primeira lista de preditores de vetor de movimento baseado na lista de preditores de vetor de movimento inicial. A primeira lista de preditores de vetor de movimento pode ser para o bloco atual codificado em um dentre o modo de mesclagem, modo de predição de vetor de movimento avançada (AMVP) ou modo afim
[00186] A unidade de decodificação por entropia 302 pode decodificar um primeiro valor para determinar um primeiro valor de índice na primeira lista de preditores de vetor de movimento e a unidade de compensação de movimento 316 pode determinar um primeiro bloco de predição triangular baseado no primeiro valor de índice. Por exemplo, a unidade de compensação de movimento 316 pode determinar uma primeira informação de vetor de movimento na primeira lista de preditores de vetor de movimento baseado no primeiro valor de índice, determinar um primeiro vetor de movimento baseado na primeira informação do vetor de movimento e determinar o primeiro bloco de predição triangular baseado no primeiro vetor de movimento.
[00187] A unidade de decodificação por entropia 302 pode decodificar um segundo valor para determinar um segundo valor de índice na primeira lista de preditores de vetor de movimento. Neste exemplo, a unidade de compensação de movimento 316 pode comparar o segundo valor com o primeiro valor. Baseado no segundo valor sendo maior ou igual ao primeiro valor, à unidade de compensação de movimento 316 pode adicionar um deslocamento (por exemplo, 1) ao segundo valor para determinar o segundo valor de índice.
[00188] A unidade de compensação de movimento 316 pode determinar um segundo bloco de predição triangular baseado no segundo valor de índice. Por exemplo, a unidade de compensação de movimento 316 pode determinar uma segunda informação de vetor de movimento na primeira lista de preditores de vetor de movimento baseado no segundo valor de índice, determinar um segundo vetor de movimento baseado na segunda informação de vetor de movimento e determinar o segundo bloco de predição triangular baseado no segundo movimento vetor.
[00189] No exemplo acima, a unidade de decodificação por entropia 302 pode decodificar o primeiro valor baseado em um primeiro intervalo para o primeiro valor (por exemplo, 0 a 4) e decodificar o segundo valor baseado em um segundo intervalo para o segundo valor (por exemplo, 0 a 3). O segundo intervalo pode ser menor do que o primeiro intervalo.
[00190] Conforme descrito em mais detalhes, a unidade de reconstrução 310 pode reconstruir o bloco atual baseado no primeiro bloco de predição triangular e no segundo bloco de predição triangular. Por exemplo, a unidade de reconstrução 310 pode adicionar o primeiro bloco de predição triangular a uma primeira informação residual para reconstruir uma primeira partição triangular do bloco atual e adicionar o segundo bloco de predição triangular a uma segunda informação residual para reconstruir uma segunda partição triangular do bloco atual.
[00191] Em alguns exemplos, a unidade de compensação de movimento 316 pode construir uma segunda lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um segundo bloco atual. A unidade de decodificação por entropia 302 pode decodificar um terceiro valor para determinar um terceiro valor de índice na segunda lista de preditores de vetor de movimento. A unidade de compensação de movimento 316 pode determinar um terceiro bloco de predição triangular baseado no terceiro valor de índice.
[00192] A unidade de decodificação por entropia 302 pode decodificar um quarto valor para determinar um quarto valor de índice na segunda lista de preditores de vetor de movimento. Neste exemplo, a unidade de compensação de movimento 316 pode comparar o quarto valor com o terceiro valor. Baseado no quarto valor sendo menor do que o terceiro valor, a unidade de compensação de movimento 316 pode definir o quarto valor de índice igual ao quarto valor. A unidade de compensação de movimento 316 pode determinar um quarto bloco de predição triangular baseado no quarto valor de índice, e a unidade de reconstrução 310 pode reconstruir o segundo bloco atual baseado no terceiro bloco de predição triangular e no quarto bloco de predição triangular.
[00193] Como outro exemplo, se os elementos de sintaxe de informação de predição indicam que o bloco atual é predito intra, a unidade de predição intra 318 pode gerar o bloco de predição de acordo com um modo predição intra indicado pelos elementos de sintaxe de informação de predição. Novamente, a unidade de predição intra 318 pode geralmente executar o processo de predição intra de uma maneira que é substancialmente similar à descrita em relação à unidade de predição intra 226 (FIG. 7). A unidade de predição intra 318 pode recuperar dados de amostras vizinhas ao bloco atual a partir do DPB 314.
[00194] A unidade de reconstrução 310 pode reconstruir o bloco atual utilizando 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.
[00195] A unidade de filtro 312 pode executar uma ou mais operações de filtro em blocos reconstruídos. Por exemplo, a unidade de filtro 312 pode executar operações de desagrupamento 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.
[00196] O decodificador de vídeo 300 pode armazenar os blocos reconstruídos no DPB 314. Por exemplo, nos exemplos em que as operações da unidade de filtro 312 não são executadas, a unidade de reconstrução 310 pode armazenar blocos reconstruídos no DPB 314. Nos exemplos em que as operações da unidade de filtro 312 são executadas, a unidade de filtro 312 pode armazenar os blocos reconstruídos filtrados no DPB 314. Como discutido acima, o DPB 314 pode proporcionar informação de referência, tais como amostras de uma imagem atual para predição intra e imagens previamente decodificadas para compensação de movimento subsequente, para a unidade de processamento de predição 304. Além disso, o decodificador de vídeo 300 pode emitir as imagens decodificadas a partir do DPB para apresentação subsequente em um dispositivo de vídeo, tal como o dispositivo de vídeo 118 da FIG. 1.
[00197] A FIG.9 é um fluxograma ilustrando um método ilustrativo de codificação de dados de vídeo. As técnicas ilustrativas da FIG. 9 são descritas em relação ao sistema de circuitos de processamento. Um exemplo do sistema de circuitos de processamento é o codificador de vídeo 200.
[00198] Por exemplo, o sistema de circuitos de processamento pode determinar que um bloco atual é dividido no modo triangular (900). Em adição, o sistema de circuitos de processamento pode construir uma lista de preditores de vetor de movimento baseado na informação do vetor de movimento de um ou mais blocos vizinhos (902).
[00199] O sistema de circuitos de processamento pode determinar um primeiro bloco de predição triangular (904). Por exemplo, o sistema de circuitos de processamento pode determinar um bloco de predição triangular que está mais próximo de uma primeira partição do bloco atual como o primeiro bloco de predição triangular. O primeiro bloco de predição triangular pode ser um bloco apontado por um preditor de vetor de movimento na lista de preditores de vetor de movimento, como um exemplo. Por exemplo, o sistema de circuitos de processamento pode determinar um primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro bloco de predição triangular (906). O sistema de circuitos de processamento pode sinalizar um primeiro valor baseado no primeiro valor de índice (908). Por exemplo, o sistema de circuitos de processamento pode definir o primeiro valor igual ao primeiro valor de índice e sinalizar o primeiro valor.
[00200] O sistema de circuitos de processamento pode determinar um segundo bloco de predição triangular (910). Por exemplo, o sistema de circuitos de processamento pode determinar um bloco de predição triangular que está mais próximo a uma segunda partição do bloco atual como o segundo bloco de predição triangular. O segundo bloco de predição triangular pode ser um bloco apontado por um preditor de vetor de movimento na lista de preditores de vetor de movimento, como um exemplo. Por exemplo, o sistema de circuitos de processamento pode determinar um segundo valor de índice na lista de preditores de vetor de movimento baseado no segundo bloco de predição triangular (912).
[00201] Em um ou mais exemplos, o sistema de circuitos de processamento pode determinar se o segundo valor de índice é maior do que o primeiro valor de índice (914). Baseado no segundo valor de índice sendo maior do que o primeiro valor de índice (SIM de 914), o sistema de circuitos de processamento pode subtrair um deslocamento do segundo valor de índice para gerar um segundo valor (916). Baseado no segundo valor do índice não sendo maior do que o primeiro valor do índice (NÃO de 914), o sistema de circuitos de processamento pode definir um segundo valor igual ao segundo valor de índice (918). O sistema de circuitos de processamento pode sinalizar o segundo valor (920).
[00202] A FIG. 10 é um fluxograma ilustrando um método ilustrativo de decodificar dados de vídeo. As técnicas ilustrativas da FIG. 10 são descritas em relação ao sistema de circuitos de processamento. Um exemplo do sistema de circuitos de processamento é o decodificador de vídeo 300.
[00203] Por exemplo, o sistema de circuitos de processamento pode determinar que um bloco atual é dividido no modo triangular (1000). Em adição, o sistema de circuitos de processamento pode construir uma lista de preditores de vetor de movimento baseado na informação do vetor de movimento de um ou mais blocos vizinhos (1002).
[00204] O sistema de circuitos de processamento pode decodificar um primeiro valor para determinar um primeiro valor de índice na lista de preditores de vetor de movimento (1004) e pode determinar um primeiro bloco de predição triangular baseado no primeiro valor de índice (1006). Por exemplo, o sistema de circuitos de processamento pode determinar uma primeira informação de vetor de movimento na lista de preditores de vetor de movimento baseado no primeiro valor de índice, determinar um primeiro vetor de movimento baseado na primeira informação de vetor de movimento e determinar o primeiro bloco de predição triangular baseado no primeiro vetor de movimento.
[00205] O sistema de circuitos de processamento pode decodificar um segundo valor para determinar um segundo valor de índice na lista de preditores de vetor de movimento (1008). O sistema de circuitos de processamento pode comparar o segundo valor com o primeiro valor (1010). Baseado no segundo valor sendo maior ou igual ao primeiro valor (SIM de 1010), o sistema de circuitos de processamento pode adicionar um deslocamento (por exemplo, 1) ao segundo valor para determinar o segundo valor de índice (1012). Baseado no segundo valor não sendo maior ou igual ao primeiro valor (NÃO de 1010), o sistema de circuitos de processamento pode definir o segundo valor de índice igual ao segundo valor (1014).
[00206] O sistema de circuitos de processamento pode determinar um segundo bloco de predição triangular baseado no segundo valor de índice (1016). Por exemplo, o sistema de circuitos de processamento pode determinar uma segunda informação de vetor de movimento na lista de preditores de vetor de movimento baseado no segundo valor de índice, determinar um segundo vetor de movimento baseado na segunda informação de vetor de movimento, e determinar o segundo bloco de predição triangular baseado no segundo vetor de movimento.
[00207] O sistema de circuitos de processamento pode reconstruir o bloco atual baseado no primeiro bloco de predição triangular e no segundo bloco de predição triangular (1018). Por exemplo, o sistema de circuitos de processamento pode receber a primeira informação residual para uma primeira partição triangular do bloco atual e pode adicionar a primeira informação residual ao primeiro bloco de predição triangular para reconstruir a primeira partição triangular do bloco atual. O sistema de circuitos de processamento pode receber a segunda informação residual para uma segunda partição triangular e pode adicionar a segunda informação residual ao segundo bloco de predição triangular para reconstruir a segunda partição triangular do bloco atual.
[00208] Deve-se reconhecer que, dependendo do exemplo, alguns atos ou eventos de qualquer uma das técnicas descritas neste documento podem ser executados em uma sequência diferente, podem ser adicionados, mesclados ou deixados de fora (por exemplo, nem todos os atos ou eventos descritos são necessários para a prática das técnicas). Além disso, em alguns exemplos, atos ou eventos podem ser executados simultaneamente, por exemplo, através de processamento encadeado, processamento de interrupção ou vários processadores, ao invés de sequencialmente.
[00209] 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 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. A mídia legível por computador pode incluir mídia de armazenamento legível por computador, a qual corresponde a um meio tangível, tal como mídia de armazenamento de dados ou mídia de comunicação incluindo qualquer meio que facilite a transferência de um programa de computador de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Desta forma, a mídia legível por computador geralmente pode corresponder a (1) mídia tangível de armazenamento legível por computador que não é temporária ou (2) um meio de comunicação, tal como um sinal ou uma onda portadora. A mídia de armazenamento de dados pode ser qualquer mídia disponível que pode ser acessada por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e/ou estruturas de dados para implementação das técnicas descritas nesta revelação. Um produto de programa de computador pode incluir um meio legível por computador.
[00210] A título ilustrativo, e não de limitação, tal mídia de armazenamento legível por computador pode incluir um ou mais de RAM, ROM, EEPROM, CD- ROM ou outro armazenamento de disco óptico, armazenamento em disco magnético ou outros dispositivos de armazenamento magnético, memória flash ou qualquer outro meio que possa ser utilizado para armazenar o código de programa desejado na forma de instruções ou de estruturas de dados e que possa ser acessado por um computador. Além disso, qualquer conexão é apropriadamente denominada meio legível por computador. Por exemplo, se instruções são transmitidas a partir de um website, servidor ou outra fonte remota utilizando um cabo coaxial, cabo de fibra ótica, par trançado, linha de assinante digital (DSL), ou tecnologias não cabeadas tais como infravermelho, rádio e microondas, então o cabo coaxial, cabo de fibra ótica, par trançado, linha de assinante digital (DSL), ou tecnologias não cabeadas tal como infravermelho, rádio e microondas estão incluídos na definição de meio. Entretanto, deve ser entendido que a mídia de armazenamento legível por computador e a mídia de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outra mídia temporária, mas ao invés disso são dirigidas para mídia não temporária de armazenamento tangível. Disco magnético e disco ótico, como utilizado neste documento, incluem disco ótico compacto (CD), disco ótico a laser, disco ótico, disco ótico versátil digital (DVD) e disco ótico Blu-ray onde discos magnéticos normalmente reproduzem dados magneticamente, enquanto disco óticos reproduzem dados opticamente com lasers. Combinações do dito acima também devem ser incluídas dentro do escopo da mídia legível por computador.
[00211] As instruções podem ser executadas por um ou mais processadores, tais como um ou mais DSPs, microprocessadores de propósito geral, ASICs, FPGAs, ou outro sistema de circuitos integrado ou de lógica separada equivalente. Consequentemente, o termo “processador”, conforme utilizado neste documento, pode se referir a qualquer uma das estruturas anteriores ou a qualquer outra estrutura adequada para a implementação das técnicas descritas neste documento. Em adição, em alguns aspectos, a funcionalidade descrita neste documento pode ser proporcionada dentro de módulos de hardware e/ou de software dedicados configurados para codificação e decodificação, ou incorporados em um codec combinado. Além disso, as técnicas poderiam ser totalmente implementadas em um ou mais circuitos ou elementos lógicos.
[00212] As técnicas desta revelação podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um monofone não cabeado, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos, ou unidades são descritos nesta revelação para enfatizar aspectos funcionais de dispositivos configurados para executar as técnicas reveladas, mas não necessariamente requerem realização por diferentes unidades de hardware. Ao invés disso, conforme descrito acima, várias unidades podem ser combinadas em uma unidade de hardware codec ou proporcionadas por uma coleção de unidades de hardware interoperativas, incluindo um ou mais processadores, conforme descrito acima, em conjunto com software e/ou firmware adequados.
[00213] Vários exemplos foram descritos. Estes e outros exemplos estão dentro do escopo das reivindicações seguintes.

Claims (25)

REIVINDICAÇÕES
1. Método para decodificar dados de vídeo, o método compreendendo: determinar que um bloco atual é dividido em um modo triangular; construir uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual; decodificar um primeiro valor para determinar um primeiro valor de índice na lista de preditores de vetor de movimento; determinar um primeiro bloco de predição triangular baseado no primeiro valor de índice; decodificar um segundo valor para determinar um segundo valor de índice na lista de preditores de vetor de movimento; determinar o segundo valor de índice baseado no segundo valor, em que determinar o segundo valor de índice compreende, baseado no segundo valor sendo maior ou igual ao primeiro valor, adicionar um deslocamento ao segundo valor para determinar o segundo valor de índice; determinar um segundo bloco de predição triangular baseado no segundo valor de índice; e reconstruir o bloco atual baseado no primeiro bloco de predição triangular e no segundo bloco de predição triangular.
2. Método, de acordo com a reivindicação 1, em que o deslocamento é um.
3. Método, de acordo com a reivindicação 1, adicionalmente compreendendo:
determinar uma direção de partição para o bloco atual baseado em um elemento de sintaxe recebido separadamente a partir do primeiro valor e do segundo valor.
4. Método, de acordo com a reivindicação 1, em que o bloco atual compreende um primeiro bloco atual, e em que a lista de preditores de vetor de movimento compreende uma primeira lista de preditores de vetor de movimento, o método adicionalmente compreendendo: construir uma segunda lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um segundo bloco atual; decodificar um terceiro valor para determinar um terceiro valor de índice na segunda lista de preditores de vetor de movimento; determinar um terceiro bloco de predição triangular baseado no terceiro valor de índice; decodificar um quarto valor para determinar um quarto valor de índice na segunda lista de preditores de vetor de movimento; determinar o quarto valor de índice baseado no quarto valor, em que determinar o quarto valor de índice compreende, baseado no quarto valor sendo menor do que o terceiro valor, definir o quarto valor de índice igual ao quarto valor; determinar um quarto bloco de predição triangular baseado no quarto valor de índice; e reconstruir o segundo bloco atual baseado no terceiro bloco de predição triangular e no quarto bloco de predição triangular.
5. Método, de acordo com a reivindicação 1, em que decodificar o primeiro valor compreende decodificar o primeiro valor baseado em um primeiro intervalo para o primeiro valor, em que decodificar o segundo valor compreende decodificar o segundo valor baseado em um segundo intervalo para o segundo valor e em que o segundo intervalo é menor do que o primeiro intervalo.
6. Método, de acordo com a reivindicação 1, em que construir a lista de preditores de vetor de movimento compreende: construir uma lista inicial de preditores de vetor de movimento que inclui vetores de movimento de bi- predição e de uni-predição; e construir a lista de preditores de vetor de movimento baseado na lista inicial de preditores de vetor de movimento.
7. 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 para o bloco atual em um dentre o modo de mesclagem, o modo de predição de vetor de movimento avançada (AMVP) ou o modo afim.
8. Método, de acordo com a reivindicação 1, em que determinar o primeiro bloco de predição triangular baseado no primeiro valor de índice compreende:
determinar a primeira informação do vetor de movimento na lista de preditores de vetor de movimento baseado no primeiro valor de índice; determinar um primeiro vetor de movimento baseado na primeira informação do vetor de movimento; e determinar o primeiro bloco de predição triangular baseado no primeiro vetor de movimento, em que determinar o segundo bloco de predição triangular baseado no segundo valor de índice compreende: determinar a segunda informação de vetor de movimento na lista de preditores de vetor de movimento baseado no segundo valor de índice; determinar um segundo vetor de movimento baseado na segunda informação de vetor de movimento; e determinar o segundo bloco de predição triangular baseado no segundo vetor de movimento.
9. Dispositivo para decodificar dados de vídeo, o dispositivo compreendendo: memória configurada para armazenar uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um bloco atual; e sistema de circuitos de processamento configurado para: determinar que o bloco atual é dividido em um modo triangular; construir a lista de preditores de vetor de movimento, para armazenamento na memória, que inclui a informação do vetor de movimento de um ou mais blocos vizinhos do bloco atual;
decodificar um primeiro valor para determinar um primeiro valor de índice na lista de preditores de vetor de movimento; determinar um primeiro bloco de predição triangular baseado no primeiro valor de índice; decodificar um segundo valor para determinar um segundo valor de índice na lista de preditores de vetor de movimento; determinar o segundo valor de índice baseado no segundo valor, em que para determinar o segundo valor de índice, o sistema de circuitos de processamento é configurado para, baseado no segundo valor sendo maior ou igual ao primeiro valor, adicionar um deslocamento ao segundo valor para determinar o segundo valor de índice; determinar um segundo bloco de predição triangular baseado no segundo valor de índice; e reconstruir o bloco atual baseado no primeiro bloco de predição triangular e no segundo bloco de predição triangular.
10. Dispositivo, de acordo com a reivindicação 9, em que o deslocamento é um.
11. Dispositivo, de acordo com a reivindicação 9, em que o sistema de circuitos de processamento é configurado para: determinar uma direção de partição para o bloco atual baseado em um elemento de sintaxe recebido separadamente do primeiro valor e do segundo valor.
12. Dispositivo, de acordo com a reivindicação 9, em que o bloco atual compreende um primeiro bloco atual ,em que a lista de preditores de vetor de movimento compreende uma primeira lista de preditores de vetor de movimento e em que o sistema de circuitos de processamento é configurado para: construir uma segunda lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um segundo bloco atual; decodificar um terceiro valor para determinar um terceiro valor de índice na segunda lista de preditores de vetor de movimento; determinar um terceiro bloco de predição triangular baseado no terceiro valor de índice; decodificar um quarto valor para determinar um quarto valor de índice na segunda lista de preditores de vetor de movimento; determinar o quarto valor de índice baseado no quarto valor, em que para determinar o quarto valor de índice, o sistema de circuitos de processamento é configurado para, baseado no quarto valor ser menor do que o terceiro valor, definir o quarto valor de índice igual ao quarto valor; determinar um quarto bloco de predição triangular baseado no quarto valor de índice; e reconstruir o segundo bloco atual baseado no terceiro bloco de predição triangular e no quarto bloco de predição triangular.
13. Dispositivo, de acordo com a reivindicação 9, em que para decodificar o primeiro valor, o sistema de circuitos de processamento é configurado para decodificar o primeiro valor baseado em um primeiro intervalo para o primeiro valor, em que para decodificar o segundo valor, o sistema de circuitos de processamento é configurado para decodificar o segundo valor baseado em um segundo intervalo faixa para o segundo valor e em que o segundo intervalo é menor do que o primeiro intervalo.
14. Dispositivo, de acordo com a reivindicação 9, em que para construir a lista de preditores de vetor de movimento, o sistema de circuitos de processamento é configurado para: construir uma lista de preditores de vetor de movimento inicial que inclui vetores de movimento de bi- predição e de uni-predição; e construir a lista de preditores de vetor de movimento baseado na lista de preditores de vetor de movimento inicial.
15. Dispositivo, de acordo com a reivindicação 9, em que para construir a lista de preditores de vetor de movimento, o sistema de circuitos de processamento é configurado para construir a lista de preditores de vetor de movimento para o bloco atual codificado em um dentre o modo de mesclagem, modo de predição de vetor de movimento avançada (AMVP) ou modo afim.
16. Dispositivo, de acordo com a reivindicação 9, em que para determinar o primeiro bloco de predição triangular baseado no primeiro valor de índice, o sistema de circuitos de processamento é configurado para: determinar a primeira informação do vetor de movimento na lista de preditores de vetor de movimento baseado no primeiro valor de índice;
determinar um primeiro vetor de movimento baseado na primeira informação do vetor de movimento; e determinar o primeiro bloco de predição triangular baseado no primeiro vetor de movimento, em que para determinar o segundo bloco de predição triangular baseado no segundo valor de índice, o sistema de circuitos de processamento é configurado para: determinar a segunda informação do vetor de movimento na lista de preditores de vetor de movimento baseado no segundo valor de índice; determinar um segundo vetor de movimento baseado na segunda informação de vetor de movimento; e determinar o segundo bloco de predição triangular baseado no segundo vetor de movimento.
17. Dispositivo, de acordo com a reivindicação 9, em que o dispositivo compreende um dispositivo de comunicação não cabeada.
18. Método para codificar dados de vídeo, o método compreendendo: determinar que um bloco atual é dividido em um modo triangular; construir uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual; determinar um primeiro bloco de predição triangular; determinar um primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro bloco de predição triangular determinado;
sinalizar um primeiro valor baseado no primeiro valor de índice; determinar um segundo bloco de predição triangular; determinar um segundo valor de índice na lista de preditores de vetor de movimento baseado no segundo bloco de predição triangular determinado; e sinalizar um segundo valor baseado no segundo valor de índice, em que sinalizar o segundo valor compreende, baseado no segundo valor de índice sendo maior do que o primeiro valor de índice, subtrair um deslocamento do segundo valor de índice para gerar o segundo valor.
19. Método, de acordo com a reivindicação 18, em que o deslocamento é um.
20. Método, de acordo com a reivindicação 18, adicionalmente compreendendo: sinalizar uma direção de partição para o bloco atual baseado em um elemento de sintaxe separado do primeiro valor e do segundo valor.
21. Método, de acordo com a reivindicação 18, em que o bloco atual compreende um primeiro bloco atual, e em que a lista de preditores de vetor de movimento compreende uma primeira lista de preditores de vetor de movimento, o método adicionalmente compreendendo: construir uma segunda lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um segundo bloco atual; determinar um terceiro bloco de predição triangular;
determinar um terceiro valor de índice na segunda lista de preditores de vetor de movimento baseado no terceiro bloco de predição triangular determinado; sinalizar um terceiro valor baseado no terceiro valor de índice; determinar um quarto bloco de predição triangular; determinar um quarto valor de índice na segunda lista de preditores de vetor de movimento baseado no quarto bloco de predição triangular determinado; e sinalizar um quarto valor baseado no quarto valor de índice, em que sinalizar o quarto valor compreende, baseado no quarto valor de índice sendo menor do que o terceiro valor de índice, sinalizar o quarto valor como o quarto valor de índice.
22. Dispositivo para codificar dados de vídeo, o dispositivo compreendendo: memória configurada para armazenar uma lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um bloco atual; e sistema de circuitos de processamento configurado para: determinar que o bloco atual é dividido em um modo triangular; construir a lista de preditores de vetor de movimento, para armazenamento na memória, que inclui a informação de vetor de movimento de um ou mais blocos vizinhos do bloco atual;
determinar um primeiro bloco de predição triangular; determinar um primeiro valor de índice na lista de preditores de vetor de movimento baseado no primeiro bloco de predição triangular determinado; sinalizar um primeiro valor baseado no primeiro valor de índice; determinar um segundo bloco de predição triangular; determinar um segundo valor de índice na lista de preditores de vetor de movimento baseado no segundo bloco de predição triangular determinado; e sinalizar um segundo valor baseado no segundo valor de índice, em que para sinalizar o segundo valor, o sistema de circuitos de processamento é configurado para, baseado no segundo valor de índice sendo maior do que o primeiro valor de índice, subtrair um deslocamento do segundo valor de índice para gerar o segundo valor.
23. Dispositivo, de acordo com a reivindicação 22, em que o deslocamento é um.
24. Dispositivo, de acordo com a reivindicação 22, em que o sistema de circuitos de processamento é configurado para: sinalizar uma direção de partição para o bloco atual baseado em um elemento de sintaxe, separado do primeiro valor e do segundo valor.
25. Dispositivo, de acordo com a reivindicação 22, em que o bloco atual compreende um primeiro bloco atual, em que a lista de preditores de vetor de movimento compreende uma primeira lista de preditores de vetor de movimento, e em que o sistema de circuitos de processamento é configurado para: construir uma segunda lista de preditores de vetor de movimento que inclui informação de vetor de movimento de um ou mais blocos vizinhos de um segundo bloco atual; determinar um terceiro bloco de predição triangular; determinar um terceiro valor de índice na segunda lista de preditores de vetor de movimento baseado no terceiro bloco de predição triangular determinado; sinalizar um terceiro valor baseado no terceiro valor de índice; determinar um quarto bloco de predição triangular; determinar um quarto valor de índice na segunda lista de preditores de vetor de movimento baseado no quarto bloco de predição triangular determinado; e sinalizar um quarto valor baseado no quarto valor de índice, em que para sinalizar o quarto valor, o sistema de circuitos de processamento é configurado para, baseado no quarto valor de índice sendo menor do que o terceiro valor de índice, sinalizar o quarto valor como o quarto valor de índice.
BR112021009721-0A 2018-12-05 2019-12-05 informação de movimento triangular para codificação de vídeo BR112021009721A2 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862775802P 2018-12-05 2018-12-05
US62/775,802 2018-12-05
US16/703,495 2019-12-04
US16/703,495 US10778977B2 (en) 2018-12-05 2019-12-04 Triangle motion information for video coding
PCT/US2019/064698 WO2020118064A1 (en) 2018-12-05 2019-12-05 Triangle motion information for video coding

Publications (1)

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

Family

ID=70972643

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021009721-0A BR112021009721A2 (pt) 2018-12-05 2019-12-05 informação de movimento triangular para codificação de vídeo

Country Status (9)

Country Link
US (1) US10778977B2 (pt)
EP (1) EP3891993A1 (pt)
JP (1) JP2022510297A (pt)
KR (1) KR20210093926A (pt)
CN (1) CN113475081B (pt)
BR (1) BR112021009721A2 (pt)
SG (1) SG11202104363XA (pt)
TW (1) TW202038611A (pt)
WO (1) WO2020118064A1 (pt)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
MX2021005504A (es) 2018-11-08 2021-06-18 Guangdong Oppo Mobile Telecommunications Corp Ltd Metodo de codificacion/decodificacion de se?al de imagen y aparato para ello.
CA3120877A1 (en) * 2018-11-22 2020-05-28 Huawei Technologies Co., Ltd. An encoder, a decoder and corresponding methods for inter prediction
US10893298B2 (en) * 2018-12-12 2021-01-12 Tencent America LLC Method and apparatus for video coding
US20220070475A1 (en) * 2018-12-18 2022-03-03 Electronics And Telecommunications Research Institute Image encoding/decoding method and apparatus, and recording media storing bitstream
GB2580084B (en) * 2018-12-20 2022-12-28 Canon Kk Video coding and decoding
CN113852815B (zh) * 2018-12-25 2022-12-27 北京达佳互联信息技术有限公司 利用三角形形状预测单元的视频编码方法、设备及介质
US11470329B2 (en) 2018-12-26 2022-10-11 Tencent America LLC Method and apparatus for video coding
KR102658346B1 (ko) * 2018-12-30 2024-04-18 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드 삼각형 예측을 위한 비디오 코딩 방법 및 장치
CN112954362A (zh) * 2019-03-08 2021-06-11 Jvc建伍株式会社 动图像编码装置和方法、以及动图像解码装置和方法
US11616966B2 (en) * 2019-04-03 2023-03-28 Mediatek Inc. Interaction between core transform and secondary transform
CN113163209B (zh) * 2019-06-24 2022-11-25 杭州海康威视数字技术股份有限公司 一种编解码方法、装置及其设备
CN114026871A (zh) * 2019-06-24 2022-02-08 鸿颖创新有限公司 用于对视频数据编码的装置和方法
US20220279163A1 (en) * 2019-08-21 2022-09-01 Lg Electronics Inc. Image encoding/decoding method and device for performing prediction on basis of hmvp candidate, and method for transmitting bitstream
US11496755B2 (en) * 2019-12-28 2022-11-08 Tencent America LLC Method and apparatus for video coding

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE9002647L (sv) 1990-08-15 1991-09-02 Televerket Metod foer roerelsekompensering och elastisk deformation i bildsekvenser
US9083983B2 (en) * 2011-10-04 2015-07-14 Qualcomm Incorporated Motion vector predictor candidate clipping removal for video coding
US9432683B2 (en) * 2011-11-08 2016-08-30 Kt Corporation Method and apparatus for encoding image, and method and apparatus for decoding image
US20130329007A1 (en) * 2012-06-06 2013-12-12 Qualcomm Incorporated Redundancy removal for advanced motion vector prediction (amvp) in three-dimensional (3d) video coding
US9699450B2 (en) * 2012-10-04 2017-07-04 Qualcomm Incorporated Inter-view predicted motion vector for 3D video
US9357214B2 (en) * 2012-12-07 2016-05-31 Qualcomm Incorporated Advanced merge/skip mode and advanced motion vector prediction (AMVP) mode for 3D video
US9509999B2 (en) * 2013-06-11 2016-11-29 Qualcomm Incorporated Inter-layer prediction types in multi-layer video coding
US10958927B2 (en) * 2015-03-27 2021-03-23 Qualcomm Incorporated Motion information derivation mode determination in video coding
US10200713B2 (en) * 2015-05-11 2019-02-05 Qualcomm Incorporated Search region determination for inter coding within a particular picture of video data
US10271064B2 (en) * 2015-06-11 2019-04-23 Qualcomm Incorporated Sub-prediction unit motion vector prediction using spatial and/or temporal motion information
CN104935938B (zh) * 2015-07-15 2018-03-30 哈尔滨工业大学 一种混合视频编码标准中帧间预测方法
US10368083B2 (en) * 2016-02-15 2019-07-30 Qualcomm Incorporated Picture order count based motion vector pruning
KR20190015216A (ko) 2016-05-05 2019-02-13 브이아이디 스케일, 인크. 인트라 코딩을 위한 제어 포인트 기반의 인트라 방향 표현
EP3975559A1 (en) 2016-10-04 2022-03-30 B1 Institute of Image Technology, Inc. Image data encoding/decoding method and apparatus
WO2019039322A1 (en) 2017-08-22 2019-02-28 Panasonic Intellectual Property Corporation Of America IMAGE ENCODER, IMAGE DECODER, IMAGE ENCODING METHOD, AND IMAGE DECODING METHOD
US10863175B2 (en) 2018-03-01 2020-12-08 Panasonic Intellectual Property Corporation Of America Encoder, and decoder, encoding method, decoding method
US10771781B2 (en) 2018-03-12 2020-09-08 Electronics And Telecommunications Research Institute Method and apparatus for deriving intra prediction mode
US11477474B2 (en) * 2018-06-08 2022-10-18 Mediatek Inc. Methods and apparatus for multi-hypothesis mode reference and constraints
US11051036B2 (en) * 2018-07-14 2021-06-29 Mediatek Inc. Method and apparatus of constrained overlapped block motion compensation in video coding
WO2020017423A1 (en) * 2018-07-17 2020-01-23 Panasonic Intellectual Property Corporation Of America Motion vector prediction for video coding
US11284066B2 (en) * 2018-10-10 2022-03-22 Tencent America LLC Method and apparatus for intra block copy in intra-inter blending mode and triangle prediction unit mode
EP3788779A4 (en) * 2018-10-23 2022-03-02 Tencent America LLC VIDEO CODING METHOD AND APPARATUS
MX2021005504A (es) * 2018-11-08 2021-06-18 Guangdong Oppo Mobile Telecommunications Corp Ltd Metodo de codificacion/decodificacion de se?al de imagen y aparato para ello.
CA3120877A1 (en) * 2018-11-22 2020-05-28 Huawei Technologies Co., Ltd. An encoder, a decoder and corresponding methods for inter prediction
US10893298B2 (en) * 2018-12-12 2021-01-12 Tencent America LLC Method and apparatus for video coding

Also Published As

Publication number Publication date
CN113475081B (zh) 2024-04-19
EP3891993A1 (en) 2021-10-13
TW202038611A (zh) 2020-10-16
JP2022510297A (ja) 2022-01-26
CN113475081A (zh) 2021-10-01
SG11202104363XA (en) 2021-06-29
WO2020118064A1 (en) 2020-06-11
US10778977B2 (en) 2020-09-15
KR20210093926A (ko) 2021-07-28
US20200186799A1 (en) 2020-06-11

Similar Documents

Publication Publication Date Title
BR112021009721A2 (pt) informação de movimento triangular para codificação de vídeo
BR112021002967A2 (pt) predição de movimento afim
BR112021000002A2 (pt) Mvps não adjacentes baseados em múltiplos históricos para processamento de frente de onda de código de vídeo
TWI688262B (zh) 用於視訊寫碼之重疊運動補償
BR112020006588A2 (pt) predição afim em codificação de vídeo
US10390048B2 (en) Efficient transform coding using optimized compact multi-pass transforms
BR112021009558A2 (pt) simplificação da predição de vetor de movimento baseada em histórico
BR112021005357A2 (pt) aprimoramentos em preditor de vetor de movimento baseado em histórico
WO2019147826A1 (en) Advanced motion vector prediction speedups for video coding
BR112020006568A2 (pt) combinações de predição de dependentes de posição em codificação de vídeo
TW201924345A (zh) 寫碼用於視頻寫碼之仿射預測移動資訊
BR112021015658A2 (pt) Restrições no refinamento de vetor de movimento no lado do decodificador
US20200053379A1 (en) Motion vector predictor list generation
BR112020026713A2 (pt) Modo de combinação dependente de suavização intra (mdis) com comutação de filtro de interpolação intra
BR112016006574B1 (pt) Predição de vetor de movimento temporal com base em unidade de subpredição (pu) em hevc e projeto de sub-pu em 3d-hevc
US10764605B2 (en) Intra prediction for 360-degree video
BR112021006798A2 (pt) suavização e interpolação de intrapredição de ângulo amplo
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
US10958932B2 (en) Inter-prediction coding of video data using generated motion vector predictor list including non-adjacent blocks
US10897617B2 (en) Rounding of motion vectors for adaptive motion vector difference resolution and increased motion vector storage precision in video coding
BR112020025982A2 (pt) sinalização de preditor de vetor de movimento de unidade de subpredição
BR112021014879A2 (pt) Modo de inter-intraprevisão para dados de vídeo
BR112021009732A2 (pt) padrões de predição de vetor de movimento espaço-temporal para codificação de vídeo
BR112021011060A2 (pt) Codificação de escape para níveis de coeficiente
BR112021003869A2 (pt) predição temporal de parâmetros de filtro de loop adaptativo com consumo reduzido de memória para codificação de vídeo