BR112021000640A2 - Arredondamento de vetores de movimento para resolução de diferença de vetor de movimento adaptativa e precisão de armazenamento de vetor de movimento aumentada em codificação de vídeo - Google Patents

Arredondamento de vetores de movimento para resolução de diferença de vetor de movimento adaptativa e precisão de armazenamento de vetor de movimento aumentada em codificação de vídeo Download PDF

Info

Publication number
BR112021000640A2
BR112021000640A2 BR112021000640-0A BR112021000640A BR112021000640A2 BR 112021000640 A2 BR112021000640 A2 BR 112021000640A2 BR 112021000640 A BR112021000640 A BR 112021000640A BR 112021000640 A2 BR112021000640 A2 BR 112021000640A2
Authority
BR
Brazil
Prior art keywords
motion vector
value
current block
predictor
resolution
Prior art date
Application number
BR112021000640-0A
Other languages
English (en)
Inventor
Han Huang
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 BR112021000640A2 publication Critical patent/BR112021000640A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • H04N19/139Analysis of motion vectors, e.g. their magnitude, direction, variance or reliability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/11Selection of coding mode or of prediction mode among a plurality of spatial predictive coding modes
    • 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/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • 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

Landscapes

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

Abstract

arredondamento de vetores de movimento para resolução de diferença de vetor de movimento adaptativa e precisão de armazenamento de vetor de movimento aumentada em codificação de vídeo. um método de exemplo inclui a codificação de um valor de uma diferença de vetor de movimento (mvd) para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento (mv), um valor de um preditor de vetor de movimento (mvp) para o bloco atual de dados de vídeo; determinar uma resolução do valor do mvd para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para mvs; arredondar, com base na quantidade de deslocamento da resolução de armazenamento, o valor do mvd obtido do buffer mv diretamente para a resolução do valor do mvd; adicionar o valor arredondado do mvp ao valor do mvd para obter um valor de um mv para o bloco atual; obter, com base no mv para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor.

Description

“ARREDONDAMENTO DE VETORES DE MOVIMENTO PARA RESOLUÇÃO DE DIFERENÇA DE VETOR DE MOVIMENTO ADAPTATIVA E PRECISÃO DE ARMAZENAMENTO DE VETOR DE MOVIMENTO AUMENTADA EM CODIFICAÇÃO DE VÍDEO”
[0001] Este pedido reivindica a prioridade do Pedido de Patente dos EUA No. 16/514.326, depositado em 17 de julho de 2019, que reivindica o benefício do Pedido Provisório dos EUA No. 62/702.737 depositado em 24 de julho de 2018, todo o conteúdo de cada um dos quais é incorporado aqui por referência.
CAMPO TÉCNICO
[0002] Esta divulgação se refere à encodificação e decodificação de vídeo.
FUNDAMENTOS
[0003] Os recursos de vídeo digital podem ser incorporados a uma ampla gama de dispositivos, incluindo televisores digitais, sistemas de broadcast digital direta, sistemas de broadcast sem fio, assistentes pessoais digitais (PDAs), laptops ou desktops, tablets, leitores de e-book, câmeras digitais, dispositivos digitais de gravação, leitores de mídia digital, dispositivos de videogame, consoles de videogame, telefones celulares ou de rádio via satélite, os chamados "telefones inteligentes", dispositivos de teleconferência de vídeo, dispositivos de streaming de vídeo e semelhantes. Dispositivos de vídeo digital implementam técnicas de codificação de vídeo, como aquelas descritas nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação de Vídeo Avançada (AVC), o padrão de 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, encodificar, decodificar e/ou armazenar informações de vídeo digital de forma mais eficiente, implementando tais técnicas de codificação de vídeo.
[0004] As técnicas de codificação de vídeo incluem predição espacial (intraimagem) e/ou predição temporal (interimagem) 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 porção de uma imagem de vídeo) pode ser particionada 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 intracodificada (I) de uma imagem são codificados usando predição espacial com respeito a amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia intercodificada (P ou B) de uma imagem podem usar predição espacial em relação a amostras de referência em blocos vizinhos na mesma imagem ou predição temporal em relação a 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 divulgação descreve técnicas para reduzir erros incorridos ao arredondar vetores de movimento na codificação de vídeo. Um decodificador de vídeo pode determinar um vetor de movimento para um bloco adicionando uma diferença de vetor de movimento (MVD) a um preditor de vetor de movimento (MVP). A MVD pode ser sinalizado no fluxo de bits (bitstream) por um codificador de vídeo e o MVP pode ser o vetor de movimento de um bloco codificado anteriormente. Ao usar resolução de vetor de movimento adaptativo (por exemplo, AMVR ou AMVR local (LAMVR)), o codificador de vídeo pode sinalizar MVDs usando várias resoluções (por exemplo, precisão de amostra de um quarto de luma, precisão de amostra de luma inteiro ou para precisão de amostra de luma). Além disso, o decodificador de vídeo pode armazenar determinados vetores de movimento em uma resolução aumentada (por exemplo, sobre uma resolução padrão/unidade padrão). Como os vetores de movimento (que são usados como MVPs), as MVDs e a resolução padrão podem ser todos diferentes, o decodificador de vídeo pode realizar múltiplas operações de arredondamento ao calcular vetores de movimento, o que pode introduzir erro.
[0006] De acordo com uma ou mais técnicas desta divulgação, um codificador de vídeo (por exemplo, um codificador de vídeo ou um decodificador de vídeo) pode realizar um processo de arredondamento conjunto ao determinar vetores de movimento. Por exemplo, ao contrário de primeiro arredondar um MVP da resolução de armazenamento para a unidade padrão e, em seguida, arredondar o resultado para a resolução da MVD (por exemplo, como a resolução de armazenamento é diferente da resolução da MVD), o codificador de vídeo pode arredondar o MVP uma vez com base na resolução da MVD e na resolução de armazenamento. Desta forma, o codificador de vídeo pode reduzir o erro introduzido ao determinar os vetores de movimento. Ao reduzir o erro introduzido, o codificador de vídeo pode reduzir o número de bits necessários para representar os dados de vídeo, resultando em compressão aprimorada.
[0007] Como um exemplo, um método inclui codificar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença do vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar, com base na quantidade de deslocamento de resolução de armazenamento, o valor do preditor de vetor de movimento obtido do buffer de vetor de movimento diretamente para a resolução do valor da diferença do vetor de movimento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
[0008] Como outro exemplo, um dispositivo de codificação de vídeo inclui uma memória configurada para armazenar dados de vídeo; e uma ou mais unidades de processamento implementadas em circuitos e configuradas para: codificar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença do vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar, com base na quantidade de deslocamento de resolução de armazenamento, o valor do preditor de vetor de movimento obtido do buffer de vetor de movimento diretamente para a resolução do valor da diferença do vetor de movimento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
[0009] Como outro exemplo, um dispositivo de codificação de vídeo inclui meios para codificar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; meios para obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; meios para determinar uma resolução do valor da diferença do vetor de movimento para o bloco atual; meios para obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; meios para arredondar, com base na quantidade de deslocamento da resolução de armazenamento, o valor do preditor do vetor de movimento obtido do buffer do vetor de movimento diretamente para a resolução do valor da diferença do vetor de movimento; meios para adicionar o valor arredondado do preditor do vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; meios para obter, com base no vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e meios para reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
[0010] Como outro exemplo, um meio de armazenamento legível por computador armazena instruções que, quando executadas, fazem um ou mais processadores: codificar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença do vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar, com base na quantidade de deslocamento de resolução de armazenamento, o valor do preditor de vetor de movimento obtido do buffer de vetor de movimento diretamente para a resolução do valor da diferença do vetor de movimento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
[0011] Os detalhes de um ou mais exemplos são apresentados nos desenhos anexos e na descrição abaixo. Outras características, objetos e vantagens serão evidentes a partir da descrição, desenhos e reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0012] A FIG. 1 é um diagrama de blocos que ilustra um exemplo de um sistema de codificação e decodificação de vídeo que pode realizar as técnicas desta divulgação.
[0013] A FIG. 2 é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo que pode realizar as técnicas desta divulgação.
[0014] A FIG. 3 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que pode realizar as técnicas desta divulgação.
[0015] A FIG. 4 é um fluxograma que ilustra um exemplo do método para codificar um bloco atual.
[0016] A FIG. 5 é um fluxograma que ilustra um exemplo do método para decodificar um bloco atual.
[0017] A FIG. 6 é um fluxograma que ilustra um exemplo do método para predizer um bloco atual.
DESCRIÇÃO DETALHADA
[0018] Em HEVC, as diferenças do vetor de movimento (MVDs) (entre o vetor de movimento e o vetor de movimento predito de uma unidade de predição (PU)) são sinalizadas em unidades de amostras de um quarto de luma quando use_integer_mv_flag é igual a 0 no cabeçalho da fatia. No entanto, no Modelo de Teste de Exploração
Conjunta (JEM) rascunho 7 (Descrição do Algoritmo do Modelo de Teste de Exploração Conjunta 7 (JEM 7), Equipe de Exploração de Vídeo Conjunta (JVET) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 7ª Reunião: Torino, IT, 13-21 de julho de 2017, Documento: JVET-G1001-v1 disponível em http: //phenix.it- sudparis.eu/jvet/doc_end_user/documents/7_Torino/wg11/JVET -G1001-v1.zip, doravante denominado “JEM7”), é introduzida uma resolução de vetor de movimento adaptável localmente (LAMVR). Em JEM7, um codificador de vídeo (por exemplo, codificador de vídeo ou decodificador de vídeo) pode codificar um MVD em unidades de precisão de amostra de um quarto de luma, precisão de amostra de luma inteiro ou precisão de amostra de quatro luma. Antes de adicionar a MVD ao preditor de vetor de movimento selecionado (MVP) para o vetor de movimento construído (MV), um codificador de vídeo (por exemplo, codificador de vídeo 200 e/ou decodificador de vídeo 300 como discutido abaixo) arredonda o MVP com a mesma precisão que a MVD. Além disso, no JEM7, a precisão do armazenamento do vetor de movimento é aumentada (em 2). O MVP que o codificador de vídeo busca do buffer do vetor de movimento pode necessitar ser arredondado para a precisão de um quarto de amostra de luma antes de adicionar a MVD. Portanto, o codificador de vídeo pode realizar dois processos de arredondamento se a MVD não for de precisão de um quarto de luma.
[0019] Os valores de MV ou MVP são geralmente representados por números inteiros e a precisão é representada por um deslocamento. Por exemplo, para 1 em unidade de amostra de um quarto de luma, o valor de deslocamento pode ser 2. Dado o valor de deslocamento N, o codificador de vídeo pode realizar o processo de arredondamento da seguinte forma: - A variável RoundingOffset é definida igual a 1 << (N- 1) - mv[0] = (mv[0] >= 0? (mv[0] + RoundingOffset) >> N: - ((-mv[0] + RoundingOffset) >> N)) << N - mv[1] = (mv[1] >= 0? (mv[1] + RoundingOffset) >> N: - ((-mv[1] + RoundingOffset) >> N)) << N em que mv[0] é o componente x do MV e mv[1] é o componente y do MV.
[0020] Conforme discutido acima, os dois processos de arredondamento descritos acima podem resultar em erros de arredondamento, que podem se acumular. O exemplo a seguir ilustra o erro: • A unidade padrão está na precisão de amostra de um quarto de luma e o armazenamento MV está na precisão de amostra de 1/16 luma. • O MVP obtido a partir do buffer MV é (7,0) na precisão de amostra de 1/16 luma. • O deslocamento N é 2 e o MVP é primeiro arredondado para a precisão da amostra de um quarto de luma para (8, 0) na precisão de amostra de 1/16 luma. o Neste ponto, o erro de arredondamento é 1 na precisão de amostra de 1/16 luma. • Se a MVD está na precisão da amostra de luma inteiro, o valor (8,0) é mais arredondado para (16, 0) na precisão de amostra de 1/16 luma. o O erro de arredondamento no 2º arredondamento é 8 na precisão de amostra de 1/16 luma.
• O erro de arredondamento total é de 9 em precisão de amostra de 1/16 luma (16-7), que é acumulado nos dois processos de arredondamento.
[0021] De acordo com uma ou mais técnicas, um codificador de vídeo pode utilizar um processo de arredondamento conjunto. Para ilustrar, uma variável ImvShift pode indicar a resolução da diferença do vetor de movimento (por exemplo, a resolução da MVD conforme sinalizado). Em alguns exemplos, o valor de ImvShift pode indicar a resolução MVD de modo que 1 << ImvShift represente o número de unidades na precisão da amostra de um quarto de luma. Por exemplo, ImvShift igual a 0 indica precisão de amostra de um quarto de luma, ImvShift igual a 1 indica precisão de amostra de luma inteiro e ImvShift igual a 2 indica precisão de amostra de quatro luma.
[0022] Uma variável MvStorageShift pode indicar a precisão de MV aumentada no armazenamento, de modo que 1/(1 << MvStorageShift) representa a precisão de MV em unidade de precisão da amostra de um quarto de luma. Por exemplo, MvStorageShift igual a 2 indica que a precisão MV no armazenamento é aumentada de precisão de amostra de um quarto de luma para precisão de amostra de 1/16 luma.
[0023] mvpLX[0] denota o componente x do MVP e mvpLX[1] denota o componente y do MVP. Se a unidade padrão for a precisão da amostra de um quarto de luma, o codificador de vídeo pode realizar o processo de arredondamento para o MVP da seguinte forma: • MvShift = ImvShift + MvStorageShift • A variável RoundingOffset é definida igual a 1 << (MvShift - 1)
• mvpLX[0] = (mvpLX[0] >= 0? (mvpLX[0] + RoundingOffset) >> MvShift: -((-mvpLX[0] + RoundingOffset) >> MvShift)) << ImvShift • mvpLX[1] = (mvpLX[1] >= 0? (mvpLX[1] + RoundingOffset) >> MvShift: -((-mvpLX[1] + RoundingOffset) >> MvShift)) << ImvShift
[0024] Se a unidade padrão for a mesma do armazenamento MV, o codificador de vídeo pode realizar o processo de arredondamento para o MVP da seguinte forma: • MvShift = ImvShift + MvStorageShift • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = (mvpLX[0] >= 0? (mvpLX[0] + RoundingOffset) >> MvShift: -((-mvpLX[0] + RoundingOffset) >> MvShift)) << MvShift • mvpLX[1] = (mvpLX[1] >= 0? (mvpLX[1] + RoundingOffset) >> MvShift: -((-mvpLX[1] + RoundingOffset) >> MvShift)) << MvShift
[0025] Em outro exemplo, o codificador de vídeo pode arredondar os vetores de movimento da seguinte forma, onde MvShift é uma variável que depende da precisão de arredondamento desejada. • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = (mvpLX[0] >= 0? (mvpLX[0] + RoundingOffset-1) >> MvShift: -((-mvpLX[0] + RoundingOffset) >> MvShift)) << MvShift • mvpLX[1] = (mvpLX[1] >= 0? (mvpLX[1] + RoundingOffset-l) >> MvShift: -((-mvpLX[1] + RoundingOffset) >> MvShift)) << MvShift
[0026] Dado o mesmo exemplo acima, (7,0) é arredondado para (0,0) pelo processo de arredondamento conjunto proposto. O erro de arredondamento é de 7 em precisão de amostra de 1/16 luma em vez de 9. Portanto, ao realizar o processo de arredondamento conjunto como descrito nesta divulgação, o codificador de vídeo pode reduzir o erro introduzido ao arredondar os vetores de movimento. Ao permitir que o codificador de vídeo reduza a quantidade de erro introduzida, as técnicas desta divulgação podem melhorar a eficiência da compressão de vídeo (por exemplo, reduzir a taxa de bits).
[0027] Em alguns exemplos, o valor negativo de um vetor (por exemplo, um preditor de vetor de movimento) pode ser arredondado para 0. Em comparação com o processo de arredondamento descrito acima, o codificador de vídeo pode evitar ter que determinar o sinal do valor do vetor de movimento sendo arredondado (ou seja, a operação "mvpLX[0] >= 0" pode ser evitada), reduzindo assim a complexidade. Ao reduzir a complexidade dos vetores de movimento de arredondamento, as técnicas desta divulgação podem permitir que o codificador de vídeo realize a codificação/decodificação com recursos de computação reduzidos.
[0028] Se a unidade padrão for a precisão da amostra de um quarto de luma, o codificador de vídeo pode realizar o processo de arredondamento para o MVP da seguinte forma: • MvShift = ImvShift + MvStorageShift • A variável RoundingOffset é definida igual a 1 << (MvShift - 1)
• mvpLX[0] = ((mvpLX[0] + RoundingOffset) >> MvShift) << ImvShift • mvpLX[1] = ((mvpLX[1] + RoundingOffset) >> MvShift) << ImvShift
[0029] Se a unidade padrão for a mesma do armazenamento MV, o codificador de vídeo pode realizar o processo de arredondamento para o MVP da seguinte forma: • MvShift = ImvShift + MvStorageShift • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = ((mvpLX[0] + RoundingOffset) >> MvShift) << MvShift • mvpLX[1] = ((mvpLX[1] + RoundingOffset) >> MvShift) << MvShift
[0030] Em alguns exemplos, o codificador de vídeo pode realizar a operação de arredondamento conjunto para cada MVP possível antes que o MVP seja considerado adicionado à lista de candidatos de MVP. Desta forma, o processo de arredondamento pode ser realizado antes de um processo de remoção da lista de candidatos MVP (por exemplo, onde os candidatos MVPs, como MVPs redundantes, são removidos de uma lista de candidatos MVP). Em exemplos onde a operação de arredondamento conjunta é realizada antes de adicionar MVP à lista de candidatos MVP, o processo de remoção é realizado no MVP arredondado. Em outros exemplos, o codificador de vídeo pode realizar a operação de arredondamento conjunta para o MVP selecionado após a lista de candidatos de MVP ser construída. Portanto, o processo de poda pode ser realizado no MVP antes do arredondamento.
[0031] De acordo com uma ou mais técnicas desta divulgação, o codificador de vídeo pode utilizar um processo de arredondamento unificado para todas as operações de arredondamento do vetor de movimento. Por exemplo, o codificador de vídeo pode utilizar o processo de arredondamento descrito acima em resolução de vetor de movimento adaptável e resolução de MV aumentada. Em alguns exemplos, o codificador de vídeo pode aplicar o mesmo processo de arredondamento quando no processo de derivação de vetor de movimento afim, o processo de derivação de preditor de vetor de movimento temporal, escalonamento MV de acordo com a contagem de ordem de imagem da imagem atual e imagens de referência, etc.
[0032] Ao utilizar um procedimento de arredondamento unificado (ou seja, o mesmo) para todos os processos de arredondamento, a complexidade do codificador de vídeo pode ser reduzida. Por exemplo, o mesmo módulo/funcional pode ser usado para todas as operações de arredondamento do vetor de movimento. Em alguns exemplos, a única diferença entre o arredondamento pode ser o número de deslocamento de entrada, denotado como MvShift.
[0033] Em um exemplo, o codificador de vídeo pode realizar o procedimento de arredondamento unificado da seguinte forma: • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = (mvpLX[0] >= 0? (mvpLX[0] + RoundingOffset - 1) >> MvShift: -((-mvpLX[0] + RoundingOffset) >> MvShift)) << MvShift
• mvpLX[1] = (mvpLX[1] >= 0? (mvpLX[1] + RoundingOffset - 1) >> MvShift: -((-mvpLX[1] + RoundingOffset) >> MvShift)) << MvShift
[0034] Em outro exemplo, o codificador de vídeo pode realizar o procedimento de arredondamento unificado da seguinte forma: • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = (mvpLX[0] >= 0? (mvpLX[0] + RoundingOffset) >> MvShift: -((-mvpLX[0] + RoundingOffset) >> MvShift)) << MvShift • mvpLX[1] = (mvpLX[1] >= 0? (mvpLX[1] + RoundingOffset) >> MvShift: -((-mvpLX[1] + RoundingOffset) >> MvShift)) << MvShift
[0035] Em outro exemplo, o codificador de vídeo pode realizar o procedimento de arredondamento unificado da seguinte forma: • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = ((mvpLX[0] + RoundingOffset) >> MvShift) << MvShift • mvpLX[1] = ((mvpLX[1] + RoundingOffset) >> MvShift) << MvShift
[0036] A FIG. 1 é um diagrama de blocos que ilustra um exemplo de um sistema de codificação e decodificação de vídeo 100 que pode realizar as técnicas desta divulgação. As técnicas desta divulgação são geralmente direcionadas à codificação (codificação e/ou decodificação) de dados de vídeo. Em geral, os dados de vídeo incluem quaisquer dados para processamento de um vídeo. Assim, os dados de vídeo podem incluir vídeo bruto, vídeo não codificado, vídeo codificado, vídeo decodificado (por exemplo, reconstruído) e metadados de vídeo, como dados de sinalização.
[0037] Como mostrado na FIG. 1, o sistema 100 inclui um dispositivo fonte 102 que fornece dados de vídeo codificados para serem decodificados e exibidos por um dispositivo de destino 116, neste exemplo. Em particular, o dispositivo fonte 102 fornece os dados de vídeo para o dispositivo de destino 116 por meio de um meio legível por computador 110. O dispositivo fonte 102 e o dispositivo de destino 116 podem compreender qualquer um de uma ampla gama de dispositivos, incluindo computadores desktop, notebooks (ou seja, laptop), tablets, decodificadores, aparelhos de telefone, tais como smartphones, televisores, câmeras, dispositivos de exibição, leitores de mídia digital, consoles de jogos de vídeo, dispositivo de streaming de vídeo ou semelhantes. Em alguns casos, o dispositivo fonte 102 e o dispositivo de destino 116 podem ser equipados para comunicação sem fio e, portanto, podem ser referidos como dispositivos de comunicação sem fio.
[0038] No exemplo da FIG. 1, o dispositivo fonte 102 inclui a fonte de vídeo 104, memória 106, codificador de vídeo 200 e interface de saída 108. O dispositivo de destino 116 inclui interface de entrada 122, decodificador de vídeo 300, memória 120 e dispositivo de exibição 118. De acordo com esta divulgação, o codificador de vídeo 200 do dispositivo fonte 102 e o decodificador de vídeo 300 do dispositivo de destino 116 podem ser configurados para aplicar as técnicas para realizar a resolução de diferença de vetor de movimento adaptativa com maior precisão de vetores de movimento armazenados. Assim, o dispositivo fonte 102 representa um exemplo de um dispositivo de codificação de vídeo, enquanto o dispositivo de destino 116 representa um exemplo de um dispositivo de decodificação de vídeo. Em outros exemplos, um dispositivo fonte e um dispositivo de destino podem incluir outros componentes ou arranjos. Por exemplo, o dispositivo fonte 102 pode receber dados de vídeo de uma fonte de vídeo externa, como uma câmera externa. Da mesma forma, o dispositivo de destino 116 pode interagir com um dispositivo de exibição externo, em vez de incluir um dispositivo de exibição integrado.
[0039] Sistema 100, como mostrado na FIG. 1 é apenas um exemplo. Em geral, qualquer dispositivo de codificação e/ou decodificação de vídeo digital pode realizar técnicas para realizar a resolução de diferença de vetor de movimento adaptável com maior precisão de vetores de movimento armazenados. O dispositivo fonte 102 e o dispositivo de destino 116 são meramente exemplos de tais dispositivos de codificação em que o dispositivo fonte 102 gera dados de vídeo codificados para transmissão para o dispositivo de destino 116. Esta divulgação se refere a um dispositivo de "codificação" como um dispositivo que realiza a codificação (codificação e/ou decodificação) de dados. Assim, 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 decodificação de vídeo. Portanto, o sistema 100 pode suportar transmissão de vídeo unilateral ou bidirecional entre dispositivos de vídeo 102, 116, por exemplo, para streaming de vídeo, reprodução de vídeo, transmissão 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 brutos e não codificados) e fornece uma série sequencial de imagens (também referida como "quadros") dos dados de vídeo para o codificador de vídeo 200, que codifica dados para as imagens. A fonte de vídeo 104 do dispositivo fonte 102 pode incluir um dispositivo de captura de vídeo, 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 uma 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 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, emitir os dados de vídeo codificados através da interface de saída 108 no meio legível por computador 110 para recepção e/ou recuperação por, por exemplo, interface de entrada 122 do dispositivo de destino 116.
[0041] A memória 106 do dispositivo fonte 102 e a memória 120 do dispositivo de destino 116 representam memórias de uso geral. Em alguns exemplos, as memórias 106, 120 podem armazenar dados de vídeo brutos, por exemplo, vídeo bruto da fonte de vídeo 104 e dados de vídeo decodificados e brutos do decodificador de vídeo 300. Adicionalmente ou alternativamente, as memórias 106, 120 podem armazenar instruções de software executáveis por, por exemplo, codificador de vídeo 200 e decodificador de vídeo 300, respectivamente. Embora mostrado separadamente 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 semelhantes ou equivalentes. Além disso, as memórias 106, 120 podem armazenar dados de vídeo codificados, por exemplo, saída do codificador de vídeo 200 e entrada para o decodificador de vídeo 300. Em alguns exemplos, porções de memórias 106, 120 podem ser alocadas como um ou mais 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 do dispositivo fonte 102 para o dispositivo de destino 116. Em um exemplo, 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 de destino 116 em tempo real, por exemplo, através de uma rede de radiofrequência ou rede baseada em computador. A interface de saída 108 pode modular um sinal de transmissão incluindo os dados de vídeo codificados e a interface de entrada 122 pode modular o sinal de transmissão recebido, de acordo com um padrão de comunicação, como um protocolo de comunicação sem fio. O meio de comunicação pode compreender qualquer meio de comunicação sem fio ou com fio, 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, como uma rede de área local, uma rede ampla ou uma rede global, como a Internet. O meio de comunicação pode incluir roteadores, switches, estações base ou qualquer outro equipamento que pode ser útil para facilitar a comunicação do dispositivo fonte 102 para o dispositivo de destino 116.
[0043] Em alguns exemplos, o dispositivo fonte 102 pode emitir dados codificados da interface de saída 108 para o dispositivo de armazenamento 116. Da mesma forma, o dispositivo de destino 116 pode acessar dados codificados do dispositivo de armazenamento 116 por meio da interface de entrada 122. O dispositivo de armazenamento 116 pode incluir qualquer uma de uma variedade de mídias de armazenamento de dados distribuídas ou acessadas localmente, como um 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 adequado para armazenar dados de vídeo codificados.
[0044] Em alguns exemplos, o dispositivo fonte 102 pode emitir dados de vídeo codificados para o servidor de arquivos 114 ou outro dispositivo de armazenamento intermediário que pode armazenar o vídeo codificado gerado pelo dispositivo fonte 102. O dispositivo de destino 116 pode acessar dados de vídeo armazenados a partir do servidor de arquivos 114 via streaming ou download. O servidor de arquivos 114 pode ser qualquer tipo de dispositivo de servidor capaz de armazenar dados de vídeo codificados e transmitir esses dados de vídeo codificados para o dispositivo de 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 de destino 116 pode acessar dados de vídeo codificados do servidor de arquivos 114 por meio de qualquer conexão de dados padrão, incluindo uma conexão de Internet. Isso pode incluir um canal sem fio (por exemplo, uma conexão Wi-Fi), uma conexão com fio (por exemplo, DSL, modem a cabo, etc.), ou uma combinação de ambos que é 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 streaming, 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 sem fio, modems, componentes de rede com fio (por exemplo,
placas Ethernet), componentes de comunicação sem fio 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 compreendem componentes sem fio, a interface de saída 108 e a interface de entrada 122 podem ser configuradas para transferir dados, como dados de vídeo codificados, de acordo com um padrão de comunicação celular, como 4G, 4G-LTE (Long-Term Evolution), LTE Advanced, 5G ou semelhante. Em alguns exemplos em que a interface de saída 108 compreende um transmissor sem fio, a interface de saída 108 e a interface de entrada 122 podem ser configuradas para transferir dados, como dados de vídeo codificados, de acordo com outros padrões sem fio, como uma especificação IEEE 802.11, uma especificação IEEE 802.15 (por exemplo, ZigBee™), um padrão Bluetooth™ ou semelhante. Em alguns exemplos, o dispositivo fonte 102 e/ou dispositivo de destino 116 pode incluir respectivos dispositivos de sistema em um chip (SoC). Por exemplo, o dispositivo fonte 102 pode incluir um dispositivo SoC para realizar a funcionalidade atribuída ao codificador de vídeo 200 e/ou interface de saída 108, e o dispositivo de destino 116 pode incluir um dispositivo SoC para realizar a funcionalidade atribuída ao decodificador de vídeo 300 e/ou interface de entrada 122.
[0046] As técnicas desta divulgação podem ser aplicadas à codificação de vídeo no suporte de qualquer uma de uma variedade de aplicações de multimídia, como broadcasts de televisão pelo ar, transmissões de televisão a cabo, transmissões de televisão por satélite,
transmissões de vídeo streaming de Internet, como streaming adaptativo dinâmico sobre HTTP (DASH), vídeo digital que é codificado em um meio de armazenamento de dados, decodificação de vídeo digital armazenado em um meio de armazenamento de dados ou outras aplicações.
[0047] A interface de entrada 122 do dispositivo de destino 116 recebe um fluxo de bits de vídeo codificado do meio legível por computador 110 (por exemplo, dispositivo de armazenamento 112, servidor de arquivos 114 ou semelhantes). O meio legível por computador de fluxo de bits de vídeo codificado 110 pode incluir informações de sinalização definidas pelo codificador de vídeo 200, que também é usado pelo decodificador de vídeo 300, tal 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 semelhantes). O dispositivo de exibição 118 exibe imagens decodificadas dos dados de vídeo decodificados para um usuário. O dispositivo de exibição 118 pode representar qualquer um de uma variedade de dispositivos de exibição, como um tubo de raios catódicos (CRT), um display de cristal líquido (LCD), um display de plasma, um display de diodo orgânico emissor de luz (OLED) ou outro tipo de dispositivo de exibição.
[0048] Embora não mostrado na FIG. 1, em alguns exemplos, o codificador de vídeo 200 e o decodificador de vídeo 300 podem, cada um, ser integrados com 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 ambos áudio e vídeo em um fluxo de dados comum. Se aplicável, as unidades MUX-DEMUX podem estar em conformidade com o protocolo multiplexador ITU H.223 ou outros protocolos, como o protocolo de datagrama do usuário (UDP).
[0049] O codificador de vídeo 200 e o decodificador de vídeo 300, cada um, podem ser implementados como qualquer um de uma variedade de codificadores e/ou circuitos decodificadores adequados, como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados específicos de aplicação (ASICs), matrizes 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 legível por computador não transitório adequado e executar as instruções em hardware usando um ou mais processadores para realizar as técnicas desta divulgação. Cada um dos codificadores de vídeo 200 e decodificadores 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 decodificador de vídeo 300 pode compreender um circuito integrado, um microprocessador e/ou um dispositivo de comunicação sem fio, 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, como ITU-T H.265, também conhecido como Codificação de Vídeo de Alta Eficiência (HEVC) ou extensões deste, como extensões de codificação de vídeo multi-view e/ou escalá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, como o Modelo de Teste de Exploração Conjunta (JEM). As técnicas desta divulgação, no entanto, não estão limitadas a qualquer padrão de codificação particular.
[0051] Em geral, o codificador de vídeo 200 e o decodificador de vídeo 300 podem realizar a codificação de imagens baseada em blocos. O termo "bloco" geralmente se refere a uma estrutura incluindo dados a serem processados (por exemplo, codificados, decodificados ou de outra forma usados no processo de codificação e/ou decodificação). Por exemplo, um bloco pode incluir uma matriz bidimensional de amostras de dados de luminância e/ou crominância. Em geral, o codificador de vídeo 200 e o decodificador de vídeo 300 podem codificar dados de vídeo representados em um formato YUV (por exemplo, Y, Cb, Cr). Isto é, em vez de codificar dados de vermelho, verde e azul (RGB) para amostras de uma imagem, o codificador de vídeo 200 e o decodificador de vídeo 300 podem codificar componentes de luminância e crominância, onde os componentes de crominância podem incluir componentes de crominância de matiz vermelha 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 no formato RGB.
Alternativamente, unidades de pré e pós-processamento (não mostradas) podem realizar essas conversões.
[0052] Esta divulgação pode geralmente referir-se à codificação (por exemplo, codificação e decodificação) de imagens para incluir o processo de codificação ou decodificação de dados da imagem. Da mesma forma, esta divulgação pode se referir à codificação de blocos de uma imagem para incluir o processo de codificação ou 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 particionamento de imagens em blocos. Assim, as referências à codificação de uma imagem ou bloco devem geralmente ser entendidas como valores de codificação para elementos de sintaxe que formam a imagem ou bloco.
[0053] HEVC define vários blocos, incluindo unidades de codificação (CUs), unidades de predição (PUs) e unidades de transformação (TUs). De acordo com HEVC, um codificador de vídeo (como o codificador de vídeo 200) particiona uma unidade de árvore de codificação (CTU) em CUs de acordo com uma estrutura quadtree. Ou seja, o codificador de vídeo particiona CTUs e CUs em quatro quadrados iguais, não sobrepostos, e cada nó da quadtree tem 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 um ou mais PUs e/ou um ou mais TUs. O codificador de vídeo pode ainda particionar PUs e TUs. Por exemplo, em HEVC, uma quadtree residual (RQT) representa a partição de TUs. Em HEVC, PUs representam dados de interpredição, enquanto TUs representam dados residuais. CUs que são intrapreditos incluem informações intrapredição, como uma indicação intramodo.
[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 (como o codificador de vídeo 200) particiona uma imagem em uma pluralidade de unidades de árvore de codificação (CTUs). O codificador de vídeo 200 pode particionar uma CTU de acordo com uma estrutura de árvore, tal como uma estrutura de árvore binária quadtree (QTBT). A estrutura QTBT do JEM remove os conceitos de vários tipos de partição, como a separação entre CUs, PUs e TUs de HEVC. Uma estrutura QTBT do JEM inclui dois níveis: um primeiro nível particionado de acordo com o particionamento quadtree e um segundo nível particionado de acordo com o particionamento 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 usar uma única estrutura QTBT para representar cada um dos 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 usar duas ou mais estruturas QTBT, 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 usar particionamento quadtree por HEVC, particionamento QTBT de acordo com JEM ou outras estruturas de particionamento. Para fins de explicação, a descrição das técnicas desta divulgação é apresentada com relação ao particionamento QTBT. No entanto, deve ser entendido que as técnicas desta divulgação também podem ser aplicadas a codificadores de vídeo configurados para usar particionamento quadtree ou outros tipos de particionamento também.
[0057] Esta divulgação pode usar "NxN" e "N por N" alternadamente para se referir às dimensões da amostra de um bloco (como um CU ou outro bloco de vídeo) em termos de dimensões verticais e horizontais, por exemplo, amostras de 16x16 ou amostras de 16 por 16. Em geral, uma CU 16x16 terá 16 amostras na direção vertical (y = 16) e 16 amostras na direção horizontal (x = 16). Da mesma forma, uma CU NxN geralmente tem N amostras em uma direção vertical e N amostras em uma direção horizontal, onde N representa um valor inteiro não negativo. As amostras em uma CU podem ser organizadas em linhas e colunas. Além disso, as CUs não precisam necessariamente ter o mesmo número de amostras na direção horizontal e vertical. Por exemplo, CUs podem compreender amostras NxM, onde M não é necessariamente igual a N.
[0058] O codificador de vídeo 200 codifica dados de vídeo para CUs que representam predição e/ou informação residual e outras informações. A informação de predição indica como a CU deve ser predita para formar um bloco de predição para a CU. A informação residual geralmente representa diferenças de 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 por meio de interpredição ou intrapredição. A interpredição geralmente se refere à predição da CU a partir de dados de uma imagem codificada anteriormente, enquanto que a intrapredição geralmente se refere à predição da CU a partir de dados previamente codificados da mesma imagem. Para realizar a interpredição, o codificador de vídeo 200 pode gerar o bloco de predição usando um ou mais vetores de movimento. O codificador de vídeo 200 pode realizar uma pesquisa de movimento para identificar um bloco de referência que corresponda intimamente à 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 diferença métrica usando 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 usando predição unidirecional ou predição bidirecional.
[0060] JEM também fornece um modo de compensação de movimento afim, que pode ser considerado um modo de interpredição. No modo de compensação de movimento afim, o codificador de vídeo 200 pode determinar dois ou mais vetores de movimento que representam movimento não translacional, como aumentar ou diminuir o zoom, rotação, movimento em perspectiva ou outros tipos de movimento irregular.
[0061] Para realizar intrapredição, o codificador de vídeo 200 pode selecionar um modo de intrapredição para gerar o bloco de predição. O JEM oferece sessenta e sete modos de intrapredição, incluindo vários modos direcionais, bem como modo planar e modo DC. Em geral, o codificador de vídeo 200 seleciona um modo de intrapredição que descreve amostras vizinhas a um bloco atual (por exemplo, um bloco de uma CU) a partir do qual predizer amostras do bloco atual. Essas 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 em ordem de varredura raster (da esquerda para a direita, de cima para baixo).
[0062] O codificador de vídeo 200 codifica dados que representam o modo de predição para um bloco atual. Por exemplo, para modos de interpredição, o codificador de vídeo 200 pode codificar dados que representam qual dos vários modos de interpredição disponíveis é usado, bem como informações de movimento para o modo correspondente. Para interpredição unidirecional ou bidirecional, por exemplo, o codificador de vídeo 200 pode codificar vetores de movimento usando predição de vetor de movimento avançada (AMVP) ou modo de mesclagem. O codificador de vídeo 200 pode usar modos semelhantes para codificar vetores de movimento para o modo de compensação de movimento afim.
[0063] Após a predição, como intrapredição ou interpredição de um bloco, o codificador de vídeo 200 pode calcular dados residuais para o bloco. Os dados residuais, como um bloco residual, representam diferenças de amostra por amostra entre o bloco e um bloco de predição para o bloco, formado usando o modo de predição correspondente. O codificador de vídeo 200 pode aplicar uma ou mais transformações ao bloco residual, para produzir dados transformados em um domínio de transformação em vez do domínio de amostra. Por exemplo, o codificador de vídeo 200 pode aplicar uma transformada discreta de cosseno (DCT), uma transformada de inteiro, uma transformada de wavelet ou uma transformada conceitualmente semelhante a dados de vídeo residuais. Além disso, o codificador de vídeo 200 pode aplicar uma transformada secundária após a primeira transformada, 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 semelhante. 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 realizar 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 usados para representar os coeficientes, proporcionando uma compressão adicional. Ao realizar o processo de quantização, o codificador de vídeo
200 pode reduzir a profundidade de bits associada a 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 que m. Em alguns exemplos, para realizar a quantização, o codificador de vídeo 200 pode realizar 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 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 realizar uma varredura adaptativa. Depois de escanear 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 aos dados de vídeo codificados para uso pelo decodificador de vídeo 300 na decodificação dos dados de vídeo.
[0066] Para realizar CABAC, o codificador de vídeo 200 pode atribuir um contexto dentro de um modelo de contexto a um símbolo a ser transmitido. O contexto pode estar relacionado, por exemplo, se os valores vizinhos do símbolo têm 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, como dados de sintaxe baseado em bloco, dados de sintaxe baseado em imagem e dados de sintaxe baseado 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, como um conjunto de parâmetros de sequência (SPS), conjunto de parâmetros de imagem (PPS) ou conjunto de parâmetros de vídeo (VPS). O decodificador de vídeo 300 pode de a mesma forma decodificar tais dados de sintaxe para determinar como decodificar os dados de vídeo correspondentes.
[0068] Desta forma, o codificador de vídeo 200 pode gerar um fluxo de bits incluindo dados de vídeo codificados, por exemplo, elementos de sintaxe que descrevem o particionamento de uma imagem em blocos (por exemplo, CUs) e predição e/ou 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 realiza um processo recíproco ao realizar pelo codificador de vídeo 200 para decodificar os dados de vídeo codificados do fluxo de bits. Por exemplo, o decodificador de vídeo 300 pode decodificar valores para elementos de sintaxe do fluxo de bits usando CABAC de uma maneira substancialmente semelhante, embora recíproca, ao processo de codificação CABAC do codificador de vídeo 200. Os elementos de sintaxe podem definir informações de particionamento de uma imagem em CTUs e particionamento de cada CTU de acordo com uma estrutura de partição correspondente, 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, CUs) de dados de vídeo.
[0070] A informação residual pode ser representada por, por exemplo, 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 usa um modo de predição sinalizado (intra ou interpredição) e informações de predição relacionadas (por exemplo, informações de movimento para interpredição) para formar um bloco de predição para o bloco. O decodificador de vídeo 300 pode, então, combinar o bloco de predição e o bloco residual (em uma base de amostra por amostra) para reproduzir o bloco original. O decodificador de vídeo 300 pode realizar processamento adicional, como realizar um processo de desbloqueio para reduzir artefatos visuais ao longo dos limites do bloco.
[0071] De acordo com as técnicas desta divulgação, o codificador de vídeo 200 e/ou o decodificador de vídeo 300 podem reduzir o erro introduzido ao arredondar vetores de movimento (por exemplo, ao realizar resolução de diferença de vetor de movimento adaptativo com maior precisão de vetores de movimento armazenados). Por exemplo, o decodificador de vídeo 300 pode decodificar, a partir de um fluxo de bits de vídeo codificado, um valor de uma diferença de vetor de movimento (MVD) para um bloco atual de dados de vídeo. O decodificador de vídeo 300 pode obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento (MVP) para um bloco atual de dados de vídeo.
[0072] Conforme discutido acima, vários vetores de movimento, MVPs e MVDs podem ser sinalizados/armazenados ou representados de outra forma em diferentes resoluções/precisões. Por exemplo, a MVD pode ser codificada em unidades de amostras de um quarto de luma, amostras de luma inteiro ou amostras de quatro luma (por exemplo, precisão de amostra de um quarto de luma, precisão de amostra de luma inteiro ou precisão de amostra de quatro luma). Como um vetor de movimento é calculado como uma soma de um MVP e uma MVD, pode ser necessário para o decodificador de vídeo 300 arredondar um valor do MVP e/ou um valor da MVD ao calcular o valor de um vetor de movimento. Essas operações de arredondamento podem introduzir erros, o que é indesejável. Esta divulgação fornece técnicas para reduzir a quantidade de erro introduzida removendo pelo menos uma operação de arredondamento que de outra forma seria realizada (por exemplo, onde a remoção de pelo menos uma operação de arredondamento pode ser realizada realizando um processo de arredondamento conjunto). O processo de arredondamento conjunto pode ser considerado "conjunto" na medida em que pode gerar um resultado de duas operações de arredondamento em uma única operação de arredondamento, o que introduz menos erro do que as duas operações de arredondamento.
[0073] Para realizar o processo de arredondamento conjunto, o decodificador de vídeo 300 pode determinar uma resolução do valor da diferença do vetor de movimento para o bloco atual e determinar uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento. Por exemplo, o decodificador de vídeo 300 pode determinar a resolução do valor da MVD com base em um sinalizador LAMVR. O decodificador de vídeo 300 pode determinar a quantidade de deslocamento da resolução de armazenamento como uma constante para todos os dados de vídeo ou de forma adaptativa para a imagem ou bloco atual. Por exemplo, onde os dados de vídeo são codificados de acordo com JEM, o decodificador de vídeo 300 pode determinar que a precisão para armazenamento do vetor de movimento é aumentada em 2 bits (por exemplo, em relação à precisão sinalizada das MVDs).
[0074] O decodificador de vídeo 300 pode arredondar o valor do preditor de vetor de movimento obtido do buffer de vetor de movimento com base na resolução do valor da diferença do vetor de movimento e a quantidade de deslocamento de resolução de armazenamento. Por exemplo, o decodificador de vídeo 300 pode determinar um primeiro valor de deslocamento (por exemplo, MvShift) com base na resolução do valor da diferença do vetor de movimento e a quantidade de deslocamento de resolução de armazenamento. O decodificador de vídeo 300 pode deslocar para a direita, pelo primeiro valor de deslocamento, o valor do preditor de vetor de movimento obtido do buffer de vetor de movimento mais um offset de arredondamento (por exemplo, mvpLX[0] >= 0? (mvpLX[0] + RoundingOffset) >> MvShift: -((-mvpLX[0] + RoundingOffset) >> MvShift)). O decodificador de vídeo 300 pode deslocar para a esquerda o valor deslocado para a direita do preditor de vetor de movimento por um segundo valor de deslocamento (por exemplo, ImvShift ou MvShift) para obter o valor arredondado do preditor de vetor de movimento.
[0075] O decodificador de vídeo 300 pode selecionar o segundo valor de deslocamento com base em se uma resolução padrão para o bloco de dados de vídeo é a mesma que uma resolução de armazenamento para o bloco de dados de vídeo. Como um exemplo, onde a resolução padrão não é a mesma que a resolução de armazenamento, o decodificador de vídeo 300 pode selecionar o segundo valor de deslocamento como a resolução do valor da diferença do vetor de movimento. Como outro exemplo, onde a resolução padrão é a mesma que a resolução de armazenamento (por exemplo, onde a unidade padrão são amostras de um quarto de luma), o decodificador de vídeo 300 pode selecionar o segundo valor de deslocamento como o primeiro valor de deslocamento (por exemplo, primeiro valor de deslocamento = segundo valor de deslocamento = MvShift).
[0076] O decodificador de vídeo 300 pode utilizar o valor arredondado do preditor de vetor de movimento para reconstruir amostras do bloco atual. Por exemplo, o decodificador de vídeo 300 pode adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual de um buffer de imagem de referência; e reconstruir as amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
[0077] O codificador de vídeo 200 pode utilizar o processo de arredondamento conjunto de uma maneira semelhante (por exemplo, em um loop de reconstrução). Desta forma, o codificador de vídeo 200 e/ou o decodificador de vídeo 300 podem reduzir a quantidade de erro introduzido. Reduzir a quantidade de erro introduzido pode resultar em predições mais precisas, o que pode resultar em dados residuais menores. Como tal, as técnicas desta divulgação habilitam compressão aprimorada de dados de vídeo.
[0078] Esta divulgação pode geralmente se referir a "sinalizar" certas informações, como elementos de sintaxe. O termo "sinalização" pode geralmente referir-se à comunicação de elementos de sintaxe de valores e/ou outros dados usados para decodificar dados de vídeo codificados. Ou seja, o codificador de vídeo 200 pode sinalizar valores para elementos de sintaxe no fluxo de bits. Em geral, a sinalização se refere à geração de um valor no fluxo de bits. Como observado acima, o dispositivo fonte 102 pode transportar o fluxo de bits para o dispositivo de destino 116 substancialmente em tempo real, ou não em tempo real, como pode ocorrer ao armazenar elementos de sintaxe para o dispositivo de armazenamento 112 para recuperação posterior pelo dispositivo de destino 116.
[0079] A FIG. 2 é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo 200 que pode realizar as técnicas desta divulgação. A FIG. 2 é fornecida para fins de explicação e não deve ser considerada uma limitação das técnicas conforme amplamente exemplificada e descrita nesta divulgação. Para fins de explicação, esta divulgação descreve o codificador de vídeo 200 no contexto de padrões de codificação de vídeo, como o padrão de codificação de vídeo HEVC e o padrão de codificação de vídeo versátil (VVC) atualmente em desenvolvimento, que pode se tornar o padrão ITU-T H.266. No entanto, as técnicas desta divulgaçã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.
[0080] No exemplo da FIG. 2, 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, buffer de imagem decodificada (DPB) 218 e unidade de codificação de entropia 220.
[0081] 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, da fonte de vídeo 104 (FIG. 1). DPB 218 pode atuar como uma memória de imagem de referência que armazena dados de vídeo de referência para uso na predição de dados de vídeo subsequentes pelo codificador de vídeo 200. Adicionalmente ou alternativamente, DBP 218 pode incluir um buffer de vetor de movimento que armazena vetores de movimento para blocos de dados de vídeo (por exemplo, que pode ser usado para predizer vetores de movimento para outros blocos de dados de vídeo). A memória de dados de vídeo 230 e DPB 218 pode ser formada por qualquer um de uma variedade de dispositivos de memória, como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magneto resistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória de dados de vídeo 230 e DPB 218 podem ser fornecidos pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 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.
[0082] Nesta divulgaçã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 memória externa para o codificador de vídeo 200, a menos que especificamente descrito como tal. Em vez disso, a referência à memória de dados de vídeo 230 deve ser entendida como memória de referência que armazena dados de vídeo que o codificador de vídeo 200 recebe para codificação (por exemplo, dados de vídeo para um bloco atual que deve ser codificado). Memória 106 da FIG. 1 também pode fornecer armazenamento temporário de saídas das várias unidades do codificador de vídeo 200.
[0083] As várias unidades da FIG. 2 são ilustrados para ajudar a compreender as operações realizadas pelo codificador de vídeo 200. As unidades podem ser implementadas como circuitos de função fixa, circuitos programáveis ou uma combinação dos mesmos. Os circuitos de função fixa referem-se a circuitos que fornecem funcionalidade específica e são predefinidos nas operações que podem ser realizadas. Os circuitos programáveis referem-se a circuitos que podem ser programados para realizar várias tarefas e fornecer funcionalidade flexível nas operações que podem ser realizadas. Por exemplo, os circuitos programáveis podem executar software ou firmware que faz com que os circuitos programáveis operem da maneira definida pelas instruções do software ou firmware. Os circuitos de função fixa podem executar instruções de software (por exemplo, para receber parâmetros ou parâmetros de saída), mas os tipos de operações que os circuitos de função fixa realizam são geralmente imutáveis. Em alguns exemplos, uma ou mais das unidades podem ser blocos de circuito distintos (função fixa ou programável) e, em alguns exemplos, uma ou mais unidades podem ser circuitos integrados.
[0084] O codificador de vídeo 200 pode incluir unidades lógicas aritméticas (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 realizadas usando software executado pelos circuitos programáveis, a memória 106 (FIG. 1) pode armazenar o código-objeto do software que o codificador de vídeo 200 recebe e executa, ou outra memória dentro do codificador de vídeo 200 (não mostrado) pode armazenar tais instruções.
[0085] 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 da memória de dados de vídeo 230 e fornecer os dados de vídeo para a unidade de geração residual 204 e 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.
[0086] A unidade de seleção de modo 202 inclui uma unidade de estimativa de movimento 222, unidade de compensação de movimento 224 e uma unidade de intrapredição
226. A unidade de seleção de modo 202 pode incluir unidades funcionais adicionais para realizar predição de vídeo de acordo com outros modos de predição. Como exemplos, a unidade de seleção de modo 202 pode incluir uma unidade de paleta, uma unidade de cópia intrabloco (que pode ser parte da unidade de estimativa de movimento 222 e/ou unidade de compensação de movimento 224), uma unidade afim, uma unidade de modelo linear (LM), ou semelhante.
[0087] 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 taxa de distorção resultantes para tais combinações. Os parâmetros de codificação podem incluir particionamento de
CTUs em CUs, modos de predição para CUs, tipos de transformadas para dados residuais dos CUs, parâmetros de quantização para dados residuais de 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 com valores de taxa de distorção que são melhores do que as outras combinações testadas.
[0088] O codificador de vídeo 200 pode particionar uma imagem recuperada da memória de dados de vídeo 230 em uma série de CTUs e encapsular uma ou mais CTUs dentro de uma fatia. A unidade de seleção de modo 202 pode particionar uma CTU da imagem de acordo com uma estrutura de árvore, tal como a estrutura QTBT ou a estrutura de quadtree de HEVC descrita acima. Conforme descrito acima, o codificador de vídeo 200 pode formar uma ou mais CUs a partir do particionamento de uma CTU de acordo com a estrutura de árvore. Tal CU também pode ser referida geralmente como um "bloco de vídeo" ou "bloco.”
[0089] Em geral, a unidade de seleção de modo 202 também controla os componentes do mesmo (por exemplo, unidade de estimativa de movimento 222, unidade de compensação de movimento 224 e unidade de intrapredição 226) para gerar um bloco de predição para um bloco atual (por exemplo, uma CU atual, ou em HEVC, a porção sobreposta de uma PU e uma TU). Para interpredição de um bloco atual, a unidade de estimativa de movimento 222 pode realizar uma pesquisa de movimento para identificar um ou mais blocos de referência próximos 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 semelhante um bloco de referência potencial é ao bloco atual, por exemplo, de acordo com a soma da diferença absoluta (SAD), soma das diferenças quadradas (SSD), diferença absoluta média (MAD)), diferenças quadradas médias (MSD) ou semelhantes. A unidade de estimativa de movimento 222 pode geralmente realizar esses cálculos usando diferenças de amostra por amostra entre o bloco atual e o bloco de referência sendo considerado. A unidade de estimativa de movimento 222 pode identificar um bloco de referência com um valor mais baixo resultante desses cálculos, indicando um bloco de referência que mais se aproxima do bloco atual.
[0090] 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, fornecer os vetores de movimento para a unidade de compensação de movimento 224. Por exemplo, para interpredição unidirecional, a unidade de estimativa de movimento 222 pode fornecer um único vetor de movimento, enquanto para a interpredição bidirecional, a unidade de estimativa de movimento 222 pode fornecer dois vetores de movimento. A unidade de compensação de movimento 224 pode, então, gerar um bloco de predição usando os vetores de movimento. Por exemplo, a unidade de compensação de movimento 224 pode recuperar dados do bloco de referência usando o vetor de movimento. Como outro exemplo, se o vetor de movimento tem precisão de amostra fracionada, 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 interpredição 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, por meio de média amostra por amostra ou média ponderada.
[0091] Como outro exemplo, para intrapredição ou codificação intrapredição, a unidade de intrapredição 226 pode gerar o bloco de predição a partir de amostras vizinhas ao bloco atual. Por exemplo, para modos direcionais, a unidade de intrapredição 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, a unidade de intrapredição 226 pode calcular uma média das amostras vizinhas ao bloco atual e gerar o bloco de predição para incluir esta média resultante para cada amostra do bloco de predição.
[0092] A unidade de seleção de modo 202 fornece o bloco de predição para a unidade de geração residual 204. A unidade de geração residual 204 recebe uma versão bruta não codificada do bloco atual da memória de dados de vídeo 230 e o bloco de predição da unidade de seleção de modo 202. A unidade de geração residual 204 calcula as diferenças de amostra por amostra entre o bloco atual e o bloco de predição. As diferenças da 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 usando modulação de código de pulso diferencial residual (RDPCM). Em alguns exemplos, a unidade de geração residual 204 pode ser formada usando um ou mais circuitos subtratores que realizam a subtração binária.
[0093] Em exemplos em que a unidade de seleção de modo 202 particiona CUs em PUs, cada PU pode ser associado a uma unidade de predição de luma e unidades de predição de croma correspondentes. O codificador de vídeo 200 e o decodificador de vídeo 300 podem suportar PUs com vários tamanhos. 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 de luma da PU. Assumindo que o tamanho de uma CU específica é 2Nx2N, o codificador de vídeo 200 pode suportar tamanhos de PU de 2Nx2N ou NxN para intrapredição e tamanhos de PU simétricos de 2Nx2N, 2NxN, Nx2N, NxN ou semelhante para interpredição. O codificador de vídeo 200 e o decodificador de vídeo 300 também podem suportar particionamento assimétrico para tamanhos de PU de 2NxnU, 2NxnD, nLx2N e nRx2N para interpredição.
[0094] Em exemplos em que a unidade de seleção de modo não particiona ainda mais uma CU em PUs, cada CU pode ser associada a um bloco de codificação de luma e blocos de codificação de croma correspondentes. Como 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 2Nx2N, 2NxN ou Nx2N.
[0095] Para outras técnicas de codificação de vídeo, como uma codificação de modo de cópia intrabloco, uma codificação de modo afim e codificação de modo de modelo linear (LM), como alguns exemplos, a unidade de seleção de modo 202, por meio das respectivas unidades associadas às técnicas de codificação, gera um bloco de predição para o bloco atual sendo codificado. Em alguns exemplos, como a codificação de modo de paleta, a unidade de seleção de modo 202 pode não gerar um bloco de predição e, em vez disso, gerar elementos de sintaxe que indicam a maneira pela qual reconstruir o bloco com base em uma paleta selecionada. Em tais modos, a unidade de seleção de modo 202 pode fornecer esses elementos de sintaxe para a unidade de codificação de entropia 220 para serem codificados.
[0096] 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.
[0097] 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 coeficiente de transformada"). A unidade de processamento de transformada 206 pode aplicar várias transformadas a um bloco residual para formar o bloco de coeficiente 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 semelhante a um bloco residual. Em alguns exemplos, a unidade de processamento de transformada 206 pode realizar várias transformadas em um bloco residual, por exemplo, uma transformada primária e uma transformada secundária, como uma transformada rotacional. Em alguns exemplos, a unidade de processamento de transformada 206 não aplica transformadas a um bloco residual.
[0098] A unidade de quantização 208 pode quantizar os coeficientes de transformada em um bloco de coeficiente de transformada, para produzir um bloco de coeficiente de transformação quantizado. A unidade de quantização 208 pode quantizar os coeficientes de transformada de um bloco de coeficiente de transformada de acordo com um valor de parâmetro de quantização (QP) associado ao bloco atual. O codificador de vídeo 200 (por exemplo, via unidade de seleção de modo 202) pode ajustar o grau de quantização aplicado aos blocos de coeficiente associados ao bloco atual, ajustando o valor QP associado à CU. A quantização pode introduzir perda de informação e, assim, os coeficientes de transformada quantizados podem ter menor precisão do que os coeficientes de transformada originais produzidos pela unidade de processamento de transformada 206.
[0099] 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 coeficiente de transformada quantizado, respectivamente, para reconstruir um bloco residual a partir do bloco de coeficiente 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) com base no bloco residual reconstruído e 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.
[0100] A unidade de filtro 216 pode realizar uma ou mais operações de filtro em blocos reconstruídos. Por exemplo, a unidade de filtro 216 pode realizar operações de desbloqueio para reduzir artefatos de bloqueio ao longo das bordas de CUs. As operações da unidade de filtro 216 podem ser ignoradas, em alguns exemplos.
[0101] 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 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 do DPB 218, formada a partir dos blocos reconstruídos (e potencialmente filtrados), para blocos de interpredição das imagens subsequentemente codificadas. Além disso, a unidade de intrapredição 226 pode usar blocos reconstruídos no DPB 218 de uma imagem atual para intrapredizer outros blocos na imagem atual.
[0102] Em geral, a unidade de codificação de 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 de 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 de entropia 220 pode codificar por entropia elementos de sintaxe de predição (por exemplo, informação de movimento para interpredição ou informação intramodo para intrapredição) da unidade de seleção de modo 202. A unidade de codificação de entropia 220 pode realizar uma ou mais operações de codificação de entropia nos elementos de sintaxe, que são outro exemplo de dados de vídeo, para gerar dados codificados por entropia. Por exemplo, a unidade de codificação de entropia 220 pode realizar 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 codificação aritmética binária adaptável ao contexto baseada na sintaxe (SBAC), uma operação de codificação de Entropia Particionada no Intervalo de Probabilidade (PIPE), uma operação de codificação Exponencial-Golomb ou outro tipo de operação de codificação de entropia nos dados. Em alguns exemplos, a unidade de codificação de entropia 220 pode operar em modo de desvio, onde os elementos de sintaxe não são codificados por entropia.
[0103] 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 de entropia 220 pode emitir o fluxo de bits.
[0104] 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 croma de uma PU.
[0105] Em alguns exemplos, as operações realizadas 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 imagem de referência para um bloco de codificação de luma não precisam ser repetidas para identificar um MV e imagem de referência para os blocos de croma. Em vez disso, o MV para o bloco de codificação de luma pode ser escalado 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 intrapredição pode ser o mesmo para os blocos de codificação de luma e os blocos de codificação de croma.
[0106] Como discutido acima, a unidade de estimativa de movimento 222 pode formar um vetor de movimento (MV) para um bloco atual que define uma posição de um bloco de referência em relação ao bloco atual. A unidade de estimativa de movimento 222 pode gerar um ou mais elementos de sintaxe com valores para codificar o valor do MV para o bloco atual. Por exemplo, a unidade de estimativa de movimento 222 pode gerar elementos de sintaxe que habilitem um decodificador de vídeo (isto é, decodificador de vídeo 300 da FIG. 3) reconstruir o valor do MV para o bloco atual com base em um preditor de vetor de movimento (MVP) e uma diferença de vetor de movimento (MVD). A unidade de estimativa de movimento 222 pode obter o MVP com base em um MV de um bloco codificado anteriormente ou um ou mais valores padrão. Em alguns exemplos, a unidade de estimativa de movimento 222 pode obter uma pluralidade de MVPs candidatos de várias fontes (por exemplo, MVs de blocos vizinhos espaciais, MVs de blocos vizinhos temporais e valores padrão).
[0107] A unidade de estimativa de movimento 222 pode selecionar o MVP da pluralidade de MVPs candidatos que mais se aproximam do MV para o bloco atual. A unidade de estimativa de movimento 222 pode calcular uma diferença entre o MV para o bloco atual e o MVP selecionado. A unidade de estimativa de movimento 222 pode gerar elementos de sintaxe que indicam o MVP selecionado (por exemplo, um índice em uma lista de candidatos ao MVPs) e elementos de sintaxe que indicam o valor da MVD. A unidade de codificação de entropia 220 pode codificar os elementos de sintaxe gerados no fluxo de bits.
[0108] Conforme discutido acima e de acordo com uma ou mais técnicas desta divulgação, a unidade de estimativa de movimento 222 pode realizar um processo de arredondamento conjunto ao determinar os vetores de movimento. Por exemplo, ao contrário de primeiro arredondar um valor de um MVP da resolução de armazenamento para a resolução da unidade padrão e, em seguida, arredondar o resultado para a resolução da MVD, a unidade de estimativa de movimento 222 pode arredondar o MVP uma vez com base na resolução da MVD e a resolução de armazenamento. Desta forma, a unidade de estimativa de movimento 222 pode reduzir o erro introduzido ao determinar os vetores de movimento. Ao reduzir o erro introduzido, a unidade de estimativa de movimento 222 pode reduzir o número de bits usados para representar os dados de vídeo, produzindo compressão aprimorada.
[0109] Desta forma, o codificador de vídeo 200 representa um exemplo de um dispositivo de codificação de vídeo incluindo uma memória configurada para armazenar dados de vídeo e uma ou mais unidades de processamento implementadas em circuitos e configuradas para determinar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença do vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar o valor do preditor do vetor de movimento obtido do buffer do vetor de movimento com base na resolução do valor da diferença do vetor de movimento e a quantidade de deslocamento da resolução de armazenamento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
[0110] A FIG. 3 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo 300 que pode realizar as técnicas desta divulgação. A FIG. 3 é fornecida para fins de explicação e não é limitante nas técnicas conforme amplamente exemplificada e descrita nesta divulgação. Para fins de explicação, esta divulgação descreve o decodificador de vídeo 300 de acordo com as técnicas de JEM e HEVC. No entanto, as técnicas desta divulgação podem ser realizadas por dispositivos de codificação de vídeo que são configurados para outros padrões de codificação de vídeo.
[0111] No exemplo da FIG. 3, o decodificador de vídeo 300 inclui memória de buffer de imagem codificada (CPB) 320, unidade de decodificação de entropia 302, unidade de processamento de predição 304, unidade de quantização inversa 306, unidade de processamento de transformada inversa 308, unidade de reconstrução 310, unidade de filtro 312 e buffer de imagem decodificada (DPB)
314. A unidade de processamento de predição 304 inclui unidade de compensação de movimento 316 e unidade de intrapredição 318. A unidade de processamento de predição
304 pode incluir unidades de adição para realizar a 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 intrabloco (que pode fazer parte da unidade de compensação de movimento 316), uma unidade afim, uma unidade de modelo linear (LM) ou semelhante. Em outros exemplos, o decodificador de vídeo 300 pode incluir mais, menos ou diferentes componentes funcionais.
[0112] A memória CPB 320 pode armazenar dados de vídeo, como um fluxo de bits de vídeo codificado, para serem decodificados pelos componentes do decodificador de vídeo 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) 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, 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, cujo decodificador de vídeo 300 pode emitir e/ou usar como dados de vídeo de referência ao decodificar dados ou imagens subsequentes do fluxo de bits de vídeo codificado. A memória CPB 320 e DPB 314 podem ser formadas por qualquer um de uma variedade de dispositivos de memória, como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magneto resistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória CPB 320 e DPB 314 podem ser fornecidas 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.
[0113] Adicionalmente ou alternativamente, em alguns exemplos, o decodificador de vídeo 300 pode recuperar dados de vídeo codificados 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 para serem executadas pelos circuitos de processamento do decodificador de vídeo 300.
[0114] As várias unidades mostradas na FIG. 3 são ilustradas para ajudar a compreender as operações realizadas 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. Semelhante à FIG. 2, os circuitos de função fixa referem-se a circuitos que fornecem funcionalidade específica e são predefinidos nas operações que podem ser realizadas. Os circuitos programáveis referem-se a circuitos que podem ser programados para realizar várias tarefas e fornecer funcionalidade flexível nas operações que podem ser realizadas. Por exemplo, os circuitos programáveis podem executar software ou firmware que faz com que os circuitos programáveis operem da maneira definida pelas instruções do software ou firmware. Os circuitos de função fixa podem executar instruções de software (por exemplo, para receber parâmetros ou emitir parâmetros), mas os tipos de operações que os circuitos de função fixa realizam são geralmente imutáveis. Em alguns exemplos, uma ou mais das unidades podem ser blocos de circuito distintos (função fixa ou programável) e, em alguns exemplos, uma ou mais unidades podem ser circuitos integrados.
[0115] O decodificador de vídeo 300 pode incluir ALUs, EFUs, circuitos digitais, circuitos analógicos e/ou núcleos programáveis formados a partir de circuitos programáveis. Nos exemplos em que as operações do decodificador de vídeo 300 são realizadas por software em execução nos circuitos programáveis, memória no chip ou fora do chip podem armazenar instruções (por exemplo, código de objeto) do software que o decodificador de vídeo 300 recebe e executa.
[0116] A unidade de decodificação de entropia 302 pode receber dados de vídeo codificados do CPB e decodificar por entropia os dados de vídeo para reproduzir elementos de sintaxe. Unidade de processamento de predição 304, unidade de quantização inversa 306, unidade de processamento de transformada inversa 308, unidade de reconstrução 310 e unidade de filtro 312 podem gerar dados de vídeo decodificados com base nos elementos de sintaxe extraídos do fluxo de bits.
[0117] Em geral, o decodificador de vídeo 300 reconstrói uma imagem bloco a bloco. O decodificador de vídeo 300 pode realizar uma operação de reconstrução em cada bloco individualmente (onde o bloco atualmente sendo reconstruído, isto é, decodificado, pode ser referido como um "bloco atual").
[0118] A unidade de decodificação de entropia 302 pode decodificar por entropia elementos de sintaxe definindo coeficientes de transformada quantizados de um bloco de coeficiente de transformada quantizado, bem como informações de transformada, como um parâmetro de quantização (QP) e/ou indicação(ões) de modo de transformada. A unidade de quantização inversa 306 pode usar o QP associado ao bloco de coeficiente de transformada quantizada para determinar um grau de quantização e, da mesma forma, um grau de quantização inversa para a unidade de quantização inversa 306 aplicar. A unidade de quantização inversa 306 pode, por exemplo, realizar uma operação de deslocamento à 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.
[0119] Após a unidade de quantização inversa 306 formar o bloco de coeficiente de transformada, a unidade de processamento de transformada inversa 308 pode aplicar uma ou mais transformadas inversas ao bloco de coeficiente de transformada para gerar um bloco residual associado ao bloco atual. Por exemplo, a unidade de processamento de transformada inversa 308 pode aplicar uma DCT inversa, uma transformada de inteiro inverso, uma transformada de Karhunen-Loeve inversa (KLT), uma transformada de rotação inversa, uma transformada direcional inversa ou outra transformada inversa ao bloco de coeficiente.
[0120] Além disso, a unidade de processamento de predição 304 gera um bloco de predição de acordo com os elementos de sintaxe de informação de predição que foram decodificados por entropia pela unidade de decodificação de entropia 302. Por exemplo, se os elementos de sintaxe de informações de predição indicam que o bloco atual é interpredito, a unidade de compensação de movimento 316 pode gerar o bloco de predição. Neste caso, os elementos de sintaxe de informações 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 pode geralmente realizar o processo de interpredição de uma maneira que é substancialmente semelhante àquela descrita com respeito à unidade de compensação de movimento 224 (FIG. 2).
[0121] Como outro exemplo, se os elementos de sintaxe de informação de predição indicam que o bloco atual é intrapredito, a unidade de intrapredição 318 pode gerar o bloco de predição de acordo com um modo de intrapredição indicado pelos elementos de sintaxe de informação de predição. Novamente, a unidade de intrapredição 318 pode geralmente realizar o processo de intrapredição de uma maneira que é substancialmente semelhante àquela descrita em relação à unidade de intrapredição 226 (FIG. 2). A unidade de intrapredição 318 pode recuperar dados de amostras vizinhas ao bloco atual do DPB 314.
[0122] A unidade de reconstrução 310 pode reconstruir o bloco atual usando o bloco de predição e o bloco residual. Por exemplo, a unidade de reconstrução 310 pode adicionar amostras do bloco residual às amostras correspondentes do bloco de predição para reconstruir o bloco atual.
[0123] A unidade de filtro 312 pode realizar uma ou mais operações de filtro em blocos reconstruídos. Por exemplo, a unidade de filtro 312 pode realizar operações de desbloqueio para reduzir artefatos de bloqueio ao longo das bordas dos blocos reconstruídos. As operações da unidade de filtro 312 não são necessariamente realizadas em todos os exemplos.
[0124] O decodificador de vídeo 300 pode armazenar os blocos reconstruídos no DPB 314. Como discutido acima, DPB 314 pode fornecer informações de referência, como amostras de uma imagem atual para intrapredição 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 imagens decodificadas do DPB para apresentação subsequente em um dispositivo de exibição, como o dispositivo de exibição 118 da FIG. 1.
[0125] Como discutido acima, a unidade de compensação de movimento 316 pode obter um valor de um vetor de movimento (MV) para um bloco atual que define uma posição de um bloco de referência em relação ao bloco atual. A unidade de compensação de movimento 316 pode obter o valor do vetor de movimento com base em um preditor de vetor de movimento (MVP) e uma diferença de vetor de movimento (MVD). A unidade de compensação de movimento 316 pode obter o MVP com base em um MV de um bloco codificado anteriormente ou um ou mais valores padrão. Em alguns exemplos, a unidade de compensação de movimento 316 pode obter uma pluralidade de MVPs candidatos de várias fontes (por exemplo, MVs de blocos vizinhos espaciais, MVs de blocos vizinhos temporais e valores padrão). A unidade de compensação de movimento 316 pode obter a pluralidade de MVPs candidatos de uma maneira semelhante ao codificador de vídeo 200, de modo que a pluralidade de MVPs candidatos obtidos pela unidade de compensação de movimento 316 corresponda à pluralidade de MVPs candidatos obtidos pelo codificador de vídeo 200. A unidade de compensação de movimento 316 pode obter o valor da MVD com base em um ou mais elementos de sintaxe que indicam o valor da MVD.
[0126] Conforme discutido acima, os vários vetores de movimento (isto é, MVP, MVD e MV) podem ter diferentes resoluções. Em alguns exemplos, como quando a resolução adaptativa do vetor de movimento (AMVR) é usada, a MVD pode ser sinalizada em resolução l/4-pel, integer-pel e quad-pel. Em alguns exemplos, como onde AMVR é usada, o MVP pode ser armazenado em resolução de l/16-pel, enquanto a unidade padrão pode ter resolução de l/4-pel.
[0127] A fim de adicionar corretamente os valores do MVP e MVD para obter o MV, a unidade de compensação de movimento 316 pode realizar uma ou mais operações de arredondamento. Por exemplo, a unidade de compensação de movimento 316 pode realizar uma primeira operação de arredondamento para arredondar o MVP para a unidade padrão. Então, se a MVD é sinalizada em uma resolução que é diferente da unidade padrão, a unidade de compensação de movimento 316 pode realizar uma segunda operação de arredondamento para arredondar o MVP da resolução da unidade padrão para a resolução da MVD.
[0128] Conforme discutido acima e de acordo com uma ou mais técnicas desta divulgação, a unidade de compensação de movimento 316 pode realizar um processo de arredondamento conjunto ao determinar os vetores de movimento. Por exemplo, ao contrário de primeiro arredondar um valor de um MVP da resolução de armazenamento para a resolução da unidade padrão e, em seguida, arredondar o resultado para a resolução da MVD, a unidade de compensação de movimento 316 pode arredondar o MVP uma vez com base na resolução da MVD e a resolução de armazenamento. Desta forma, a unidade de compensação de movimento 316 pode reduzir o erro introduzido ao determinar os vetores de movimento. Ao reduzir o erro introduzido, a unidade de compensação de movimento 316 pode reduzir o número de bits necessários para representar os dados de vídeo, produzindo compressão aprimorada.
[0129] Desta forma, o decodificador de vídeo 300 representa um exemplo de um dispositivo de decodificação de vídeo incluindo uma memória configurada para armazenar dados de vídeo e uma ou mais unidades de processamento implementadas em circuitos e configuradas para decodificar, a partir de um fluxo de bits de vídeo codificado, um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença do vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar o valor do preditor do vetor de movimento obtido do buffer do vetor de movimento com base na resolução do valor da diferença do vetor de movimento e a quantidade de deslocamento da resolução de armazenamento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
[0130] A FIG. 4 é um fluxograma que ilustra um exemplo de um método para codificar um bloco atual. O bloco atual pode compreender uma CU atual. Embora descrito em relação ao codificador de vídeo 200 (FIGS. 1 e 2), deve ser entendido que outros dispositivos podem ser configurados para realizar um método semelhante ao da FIG. 4.
[0131] Neste exemplo, o codificador de vídeo 200 prediz inicialmente o bloco atual (350). Por exemplo, o codificador de vídeo 200 pode formar um bloco de predição para o bloco atual. O codificador de vídeo 200 pode então calcular um bloco residual para o bloco atual (352). Para calcular o bloco residual, o codificador de vídeo 200 pode calcular uma diferença entre o bloco original, o bloco não codificado e o bloco de predição para o bloco atual. O codificador de vídeo 200 pode então transformar e quantizar os coeficientes do bloco residual (354). Em seguida, o codificador de vídeo 200 pode varrer os coeficientes de transformada quantizados do bloco residual (356). Durante a varredura, ou após a varredura, o codificador de vídeo 200 pode codificar por entropia os coeficientes (358). Por exemplo, o codificador de vídeo 200 pode codificar os coeficientes usando CAVLC ou CABAC. O codificador de vídeo 200 pode, então, emitir os dados codificados de entropia do bloco (360).
[0132] O codificador de vídeo 200 pode decodificar o bloco atual codificado de dados de vídeo como parte de um loop de reconstrução. Como parte da decodificação, o codificador de vídeo 200 pode realizar o processo de arredondamento conjunto descrito acima ao determinar um valor de um vetor de movimento para o bloco atual.
[0133] A FIG. 5 é um fluxograma que ilustra um exemplo de um método para decodificar um bloco atual de dados de vídeo. O bloco atual pode compreender uma CU atual. Embora descrito em relação ao decodificador de vídeo 300 (FIGS. 1 e 3), deve ser entendido que outros dispositivos podem ser configurados para realizar um método semelhante ao da FIG. 5.
[0134] O decodificador de vídeo 300 pode receber dados codificados por entropia para o bloco atual, como informação de predição codificada por entropia e dados codificados por entropia para coeficientes de um bloco residual correspondente ao bloco atual (370). O decodificador de vídeo 300 pode decodificar por entropia os dados codificados por entropia para determinar a informação de predição para o bloco atual e para reproduzir os coeficientes do bloco residual (372). Por exemplo, o decodificador de vídeo 300 pode determinar um valor de um vetor de movimento para o bloco atual usando o processo de arredondamento conjunto aqui descrito.
[0135] O decodificador de vídeo 300 pode predizer o bloco atual (374), por exemplo, usando um modo intra ou interpredição como indicado pela informação de predição para o bloco atual, para calcular um bloco de predição para o bloco atual. O decodificador de vídeo 300 pode então fazer a varredura inversa dos coeficientes reproduzidos (376), para criar um bloco de coeficientes de transformada quantizados. O decodificador de vídeo 300 pode, então, quantizar e transformar inversamente os coeficientes para produzir um bloco residual (378). O decodificador de vídeo 300 pode, em última instância, decodificar o bloco atual combinando o bloco de predição e o bloco residual (380).
[0136] A FIG. 6 é um fluxograma que ilustra um exemplo de um método para predizer um bloco atual de dados de vídeo. O bloco atual pode compreender uma CU atual. Embora descrito em relação ao decodificador de vídeo 300 (FIGS. 1 e 3), deve ser entendido que outros dispositivos podem ser configurados para realizar um método semelhante ao da FIG. 6. Por exemplo, o codificador de vídeo 200 pode realizar o método da FIG. 6 como parte de um loop de reconstrução.
[0137] O decodificador de vídeo 300 pode obter um valor de uma diferença de vetor de movimento (MVD) para um bloco atual (702). Por exemplo, a unidade de compensação de movimento 316 pode obter (por exemplo, da unidade de decodificação de entropia 302) valores de um ou mais elementos de sintaxe que indicam o valor da MVD. Como um exemplo, a unidade de compensação de movimento 316 pode obter um valor de um primeiro elemento de sintaxe que especifica se o valor absoluto da MVD é maior que 0 (por exemplo, abs_mvd_greater0_flag), um segundo elemento de sintaxe que especifica se o valor absoluto de a MVD é maior que 1 (por exemplo, abs_mvd_greater1_flag), um terceiro elemento de sintaxe que especifica o valor absoluto da MVD (por exemplo, abs_mvd_minus2) e/ou um quarto elemento de sintaxe que especifica o sinal do valor da MVD (por exemplo, mvd_sign_flag).
[0138] O decodificador de vídeo 300 pode obter um valor de um preditor de vetor de movimento (MVP) para o bloco atual (704). Por exemplo, a unidade de compensação de movimento 316 pode obter, a partir de um buffer de vetor de movimento, um valor de um vetor de movimento (MV) de um bloco previamente codificado (por exemplo, um bloco vizinho do bloco atual). O buffer de vetor de movimento pode armazenar valores de vetores de movimento de blocos codificados previamente de dados de vídeo. O decodificador de vídeo 300 pode manter o buffer de vetor de movimento na memória (por exemplo, como parte do DPB 314). Em alguns exemplos, o MVP pode ser referido como um MVP candidato. Por exemplo, a unidade de compensação de movimento 316 pode obter uma pluralidade de MVPs candidatos do buffer de vetor de movimento. Os exemplos de MVPs candidatos incluem: MVP espaciais candidatos, MVP temporais candidatos, valores padrão e semelhantes.
[0139] O decodificador de vídeo 300 pode determinar uma resolução do valor da MVD (706). Conforme discutido acima, em alguns exemplos, como quando a resolução de vetor de movimento adaptativo (AMVR) é usada, o valor da MVD pode ser sinalizado (por exemplo, codificada no fluxo de bits) em diferentes resoluções (por exemplo, uma de 1/4 de amostra de luma, amostra de luma inteiro e resolução de amostra de luma quad). A unidade de compensação de movimento 316 pode obter (por exemplo, da unidade de decodificação de entropia 302) valores de um ou mais elementos de sintaxe que especificam a resolução do valor da MVD (por exemplo, ImvShift).
[0140] O decodificador de vídeo 300 pode obter uma quantidade de deslocamento de resolução de armazenamento (708). Por exemplo, a unidade de compensação de movimento 316 pode determinar a resolução na qual os vetores de movimento são armazenados (por exemplo, no buffer de vetor de movimento) em relação a uma resolução de uma unidade padrão. Por exemplo, a unidade de compensação de movimento 316 pode determinar um valor de uma variável que especifica a resolução do vetor de movimento aumentada no armazenamento (por exemplo, MvStorageShift). Em alguns exemplos, 1/(1 << MvStorageShift) pode representar a precisão MV em unidade de precisão de amostra de um quarto de luma. Por exemplo, MvStorageShift é igual a 2 indica que a resolução/precisão de MV no armazenamento aumentou de precisão de amostra de um quarto de luma para precisão de amostra de 1/16 luma. Em alguns exemplos, o valor da variável que especifica a resolução aumentada do vetor de movimento no armazenamento pode ser codificado no fluxo de bits. Em alguns exemplos, o valor da variável que especifica a resolução do vetor de movimento aumentada no armazenamento pode ser predeterminado. Por exemplo, o valor da variável que especifica o aumento da resolução do vetor de movimento no armazenamento pode ser predeterminado como 2, onde a resolução/precisão do MV no armazenamento é aumentada da precisão de amostra de um quarto de luma (por exemplo, a resolução da unidade padrão) para precisão da amostra de 1/16 de luma.
[0141] O decodificador de vídeo 300 pode arredondar, com base na quantidade de deslocamento da resolução de armazenamento, o valor do MVP diretamente para a resolução da MVD (710). Por exemplo, ao contrário de primeiro arredondar o valor do MVP para a resolução da unidade padrão e, em seguida, reverter o primeiro valor arredondado do MVP para a resolução da MVD, a unidade de compensação de movimento 316 pode realizar uma única operação de arredondamento para arredondar o valor do MVP diretamente da resolução na qual ele está armazenado para a resolução da MVD. Como um exemplo, a unidade de compensação de movimento 316 pode arredondar o valor do MVP de acordo com as seguintes equações, onde ImvShift representa a resolução do valor da MVD e MvStorageShift representa a resolução do vetor de movimento aumentada no armazenamento: • MvShift = ImvShift + MvStorageShift • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = (mvpLX[0] >= 0? (mvpLX[0] + RoundingOffset) >> MvShift: -((-mvpLX[0] + RoundingOffset) >> MvShift)) << MvShift
• mvpLX[1] = (mvpLX[1] >= 0? (mvpLX[1] + RoundingOffset) >> MvShift: -((-mvpLX[1] + RoundingOffset) >> MvShift))<< MvShift
[0142] Como mostrado acima, em alguns exemplos, a unidade de compensação de movimento 316 pode avaliar um sinal do valor do MVP como parte do processo de arredondamento para determinar se arredondar para 0 ou longe de zero. Em particular, como mostrado acima, a unidade de compensação de movimento 316 avalia se o valor do MVP é maior ou igual a zero (isto é, mvpLX[0] >= 0) para determinar se deve arredondar por (mvpLX[0] + RoundingOffset) << MvShift ou por -((-mvpLX[0] + RoundingOffset) >> MvShift)) << MvShift. Em alguns exemplos, a unidade de compensação de movimento 316 pode realizar o processo de arredondamento conjunto, embora sempre arredondando para 0. Por exemplo, a unidade de compensação de movimento 316 pode arredondar o valor do MVP de acordo com as seguintes equações, onde ImvShift representa a resolução do valor da MVD e MvStorageShift representa a resolução do vetor de movimento aumentada no armazenamento: • MvShift = ImvShift + MvStorageShift • A variável RoundingOffset é definida igual a 1 << (MvShift - 1) • mvpLX[0] = ((mvpLX[0] + RoundingOffset) >> MvShift) << MvShift • mvpLX[1] = ((mvpLX[1] + RoundingOffset) >> MvShift ) << MvShift
[0143] Desta forma, o decodificador de vídeo 300 pode evitar o uso de duas técnicas de arredondamento diferentes com base no sinal do valor do MVP. Como tal, as técnicas desta divulgação podem reduzir a complexidade do processo de arredondamento.
[0144] O decodificador de vídeo 300 pode adicionar o valor arredondado do MVP ao valor da MVD para obter um valor de um vetor de movimento para o bloco atual (712). Por exemplo, com os valores do MVP e MVD estando na mesma resolução, a unidade de compensação do movimento 316 pode adicionar os valores do MVP e MVD para obter o valor do MV para o bloco atual.
[0145] O decodificador de vídeo 300 pode obter, com base no valor do MV, amostras de um bloco preditor (714). Por exemplo, a unidade de compensação de movimento 316 pode obter amostras de um bloco preditor identificado pelo MV para o bloco atual. Conforme discutido acima com referência à FIG. 5, o decodificador de vídeo 300 pode obter as amostras do bloco preditor na etapa 374 da FIG. 5. O decodificador de vídeo 300 pode reconstruir amostras do bloco atual com base nas amostras do bloco preditor. Por exemplo, como mostrado no bloco 380 da FIG. 5, o decodificador de vídeo 300 pode formar um bloco residual e combinar amostras do bloco residual com amostras do bloco preditor para obter amostras reconstruídas do bloco atual.
[0146] Como discutido acima, em alguns exemplos, a unidade de compensação de movimento 316 pode obter uma pluralidade de MVPs candidatos a partir do buffer de vetor de movimento. Em alguns exemplos, a unidade de compensação de movimento 316 pode realizar um processo de remoção (pruning) na pluralidade de MVPs candidatos (por exemplo, para remover duplicatas). A unidade de compensação de movimento 316 pode realizar o processo de remoção em vários pontos. Como um exemplo, a unidade de compensação de movimento 316 pode realizar o processo de remoção antes de arredondar os valores dos MVPs. Por exemplo, a unidade de compensação de movimento 316 pode realizar o processo de remoção nos valores arredondados dos candidatos ao MVPs para gerar uma lista de candidatos ao MVP. Como outro exemplo, a unidade de compensação de movimento 316 pode realizar o processo de remoção após arredondar os valores dos MVPs. Por exemplo, a unidade de compensação de movimento 316 pode realizar o processo de remoção nos valores não arredondados dos candidatos MVPs para gerar uma lista de candidatos MVP e, em seguida, realizar o processo de arredondamento nos MVPs na lista de candidatos MVP.
[0147] Deve-se reconhecer que, dependendo do exemplo, certos atos ou eventos de qualquer uma das técnicas aqui descritas pode ser realizados em uma sequência diferente, podem ser adicionados, fundidos 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 certos exemplos, atos ou eventos podem ser realizados simultaneamente, por exemplo, por meio de processamento multiencadeado, processamento de interrupção ou processadores múltiplos, em vez de sequencialmente.
[0148] 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, que corresponde a um meio tangível, 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 de armazenamento legível por computador tangível que é não transitória ou (2) um meio de comunicação, como um sinal ou 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 divulgação. Um produto de programa de computador pode incluir um meio legível por computador.
[0149] A título de exemplo, e não como limitação, tal mídia de armazenamento legível por computador pode compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco óptico, armazenamento de disco magnético ou outros dispositivos de armazenamento magnético, memória flash ou qualquer outro meio que pode ser usado para armazenar o código do programa desejado na forma de instruções ou estruturas de dados e que pode ser acessado por um computador. Além disso, qualquer conexão é apropriadamente denominada meio legível por computador. Por exemplo, se as instruções são transmitidas de um site, servidor ou outra fonte remota usando um cabo coaxial, cabo de fibra óptica, par trançado, linha de assinante digital (DSL) ou tecnologias sem fio, como infravermelho, rádio e micro- ondas, então o cabo coaxial, cabo de fibra óptica, par trançado, DSL ou tecnologias sem fio, como infravermelho, rádio e micro-ondas, estão incluídos na definição de meio. Deve ser entendido, no entanto, que as mídias de armazenamento legíveis por computador e as mídias de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outras mídias transitórias, mas são direcionados para não transitórios, mídia de armazenamento tangíveis. Disk e disco, conforme usado aqui, inclui disco compacto (CD), disco laser, disco óptico, disco versátil digital (DVD), disquete e disco Blu-ray, onde os disks geralmente reproduzem dados magneticamente, enquanto os discos reproduzem dados opticamente com lasers. As combinações dos itens acima também devem ser incluídas no escopo da mídia legível por computador.
[0150] As instruções podem ser executadas por um ou mais processadores, como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados específicos de aplicação (ASICs), matrizes de portas programáveis em campo (FPGAs) ou outros circuitos integrados equivalentes ou lógica discreta. Por conseguinte, o termo "processador", conforme usado neste documento, pode se referir a qualquer uma das estruturas anteriores ou qualquer outra estrutura adequada para a implementação das técnicas descritas neste documento. Além disso, em alguns aspectos, a funcionalidade aqui descrita pode ser fornecida em módulos de hardware e/ou software dedicados configurados para codificação e decodificação ou incorporados em um codec combinado. Além disso, as técnicas podem ser totalmente implementadas em um ou mais circuitos ou elementos lógicos.
[0151] As técnicas desta divulgação podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um handset sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nesta divulgação para enfatizar os aspectos funcionais dos dispositivos configurados para realizar as técnicas divulgadas, mas não necessariamente requerem a realização por diferentes unidades de hardware. Em vez disso, conforme descrito acima, várias unidades podem ser combinadas em uma unidade de hardware codec ou fornecidas 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.
[0152] Vários exemplos foram descritos. Estes e outros exemplos estão dentro do escopo das seguintes reivindicações.

Claims (29)

REIVINDICAÇÕES
1. Método de codificação de dados de vídeo, o método compreendendo: codificar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença de vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar, com base na quantidade de deslocamento de resolução de armazenamento, o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença de vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no valor do vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
2. Método, de acordo com a reivindicação 1, em que arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento compreende:
obter um valor de deslocamento com base na resolução do valor da diferença de vetor de movimento e a quantidade de deslocamento de resolução de armazenamento; deslocar para direita, pelo valor de deslocamento, um valor que representa uma soma do valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento e um offset de arredondamento; deslocar para esquerda, pelo valor de deslocamento, o valor deslocado para direita que representa a soma do preditor de vetor de movimento e o offset de arredondamento para obter o valor arredondado do preditor de vetor de movimento.
3. Método, de acordo com a reivindicação 2, compreendendo adicionalmente determinar o offset de arredondamento como um deslocado para esquerda por uma diferença do valor de deslocamento e 1.
4. Método, de acordo com a reivindicação 2, em que determinar o valor de deslocamento compreende adicionar um valor que representa a resolução do valor da diferença de vetor de movimento a um valor que representa a quantidade de deslocamento de resolução de armazenamento para obter o valor de deslocamento.
5. Método, de acordo com a reivindicação 4, em que o valor que representa a quantidade de deslocamento da resolução de armazenamento é 2.
6. Método, de acordo com a reivindicação 5, em que o valor que representa a resolução do valor da diferença de vetor de movimento indica se a resolução do valor da diferença de vetor de movimento é um de precisão de amostra de quarto de luma, precisão de amostra de luma inteiro ou precisão de amostra de quatro luma.
7. Método, de acordo com a reivindicação 1, em que arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento compreende arredondar para zero.
8. Método, de acordo com a reivindicação 1, em que o preditor de vetor de movimento é um primeiro preditor de vetor de movimento, o método compreendendo adicionalmente: obter, a partir do buffer de vetor de movimento, valores de uma pluralidade de preditores de vetor de movimento candidatos para o bloco atual de dados de vídeo, em que a pluralidade de preditores de vetor de movimento candidatos inclui o primeiro preditor de vetor de movimento, em que arredondar o valor do primeiro preditor de vetor de movimento obtido a partir do buffer de vetor de movimento compreende arredondar os valores da pluralidade de preditores de vetor de movimento candidatos obtidos a partir do buffer de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento; e realizar um processo de remoção nos valores arredondados dos preditores de vetor de movimento candidatos para gerar uma lista de candidatos de preditor de vetor de movimento.
9. Método, de acordo com a reivindicação 1, em que o preditor de vetor de movimento é um primeiro preditor de vetor de movimento, o método compreendendo adicionalmente:
obter, a partir do buffer de vetor de movimento, valores de uma pluralidade de preditores de vetor de movimento candidatos para o bloco atual de dados de vídeo, em que a pluralidade de preditores de vetor de movimento candidatos inclui o primeiro preditor de vetor de movimento; realizar um processo de remoção nos valores da pluralidade de preditores de vetor de movimento candidatos obtidos a partir do buffer de vetor de movimento para gerar uma lista de candidatos de preditor de vetor de movimento candidato, em que a lista de candidatos de preditor de vetor de movimento inclui o primeiro preditor de vetor de movimento; em que arredondar o valor do primeiro preditor de vetor de movimento obtido a partir do buffer de vetor de movimento compreende arredondar os valores da pluralidade de preditores de vetor de movimento candidatos incluídos na lista de candidatos de preditor de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento.
10. Método, de acordo com a reivindicação 1, em que arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento compreende arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento de acordo com um processo de arredondamento unificado para todas as operações de arredondamento de vetor de movimento.
11. Método, de acordo com a reivindicação 1, em que codificar compreende decodificar, o método compreendendo adicionalmente:
obter, a partir do fluxo de bits de vídeo codificado, valores residuais para o bloco atual, em que reconstruir as amostras do bloco atual compreende adicionar os valores residuais para o bloco atual às amostras do bloco preditor.
12. Método, de acordo com a reivindicação 1, em que codificar compreende encodificar, o método compreendendo adicionalmente: encodificar, no fluxo de bits de vídeo codificado, valores residuais para o bloco atual, em que reconstruir as amostras do bloco atual compreende adicionar os valores residuais para o bloco atual às amostras do bloco preditor.
13. Método, de acordo com a reivindicação 1, em que arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento compreende: realizar uma única operação de arredondamento para arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento de uma resolução de armazenamento para a resolução do valor da diferença de vetor de movimento.
14. Dispositivo de codificação de vídeo, compreendendo: uma memória configurada para armazenar dados de vídeo; e uma ou mais unidades de processamento implementadas em circuitos e configuradas para:
codificar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença de vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar, com base na quantidade de deslocamento de resolução de armazenamento, o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença de vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no valor do vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
15. Dispositivo, de acordo com a reivindicação 14, em que, para arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento, uma ou mais unidades de processamento são configuradas para:
obter um valor de deslocamento com base na resolução do valor da diferença de vetor de movimento e a quantidade de deslocamento de resolução de armazenamento; deslocar para direita, pelo valor de deslocamento, um valor que representa uma soma do valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento e um offset de arredondamento; deslocar para esquerda, pelo valor de deslocamento, o valor deslocado para a direita que representa a soma do preditor de vetor de movimento e o offset de arredondamento para obter o valor arredondado do preditor de vetor de movimento.
16. Dispositivo, de acordo com a reivindicação 15, em que uma ou mais unidades de processamento são configuradas para determinar o deslocamento de arredondamento como um deslocado para esquerda por uma diferença do valor de deslocamento e 1.
17. Dispositivo, de acordo com a reivindicação 15, em que, para determinar o valor de deslocamento, uma ou mais unidades de processamento são configuradas para adicionar um valor que representa a resolução do valor da diferença do vetor de movimento para um valor que representa a quantidade de deslocamento de resolução de armazenamento para obter o valor de deslocamento.
18. Dispositivo, de acordo com a reivindicação 17, em que o valor que representa a quantidade de deslocamento da resolução de armazenamento é 2.
19. Dispositivo, de acordo com a reivindicação 18, em que o valor que representa a resolução do valor da diferença do vetor de movimento indica se a resolução do valor da diferença de vetor de movimento é um de precisão de amostra de quarto de luma, precisão de amostra de luma inteiro ou precisão de amostra de quatro luma.
20. Dispositivo, de acordo com a reivindicação 14, em que, para arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento, uma ou mais unidades de processamento são configuradas para arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento para zero.
21. Dispositivo, de acordo com a reivindicação 14, em que o preditor de vetor de movimento é um primeiro preditor de vetor de movimento, uma ou mais unidades de processamento sendo configuradas para: obter, a partir do buffer de vetor de movimento, valores de uma pluralidade de preditores de vetor de movimento candidatos para o bloco atual de dados de vídeo, em que a pluralidade de preditores de vetor de movimento candidatos inclui o primeiro preditor de vetor de movimento, em que, para arredondar o valor do primeiro preditor de vetor de movimento obtido a partir do buffer de vetor de movimento, uma ou mais unidades de processamento são configuradas para arredondar os valores da pluralidade de preditores de vetor de movimento candidatos obtidos a partir do buffer de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento; e realizar um processo de remoção nos valores arredondados dos preditores de vetor de movimento candidato para gerar uma lista de candidatos de preditor de vetor de movimento.
22. Dispositivo, de acordo com a reivindicação 14, em que o preditor de vetor de movimento é um primeiro preditor de vetor de movimento, uma ou mais unidades de processamento sendo configuradas para: obter, a partir do buffer de vetor de movimento, valores de uma pluralidade de preditores de vetor de movimento candidatos para o bloco atual de dados de vídeo, em que a pluralidade de preditores de vetor de movimento candidatos inclui o primeiro preditor de vetor de movimento; realizar um processo de remoção nos valores da pluralidade de preditores de vetor de movimento candidatos obtidos a partir do buffer de vetor de movimento para gerar uma lista de candidatos de preditor de vetor de movimento candidato, em que a lista de candidatos de preditor de vetor de movimento inclui o primeiro preditor de vetor de movimento; em que, para arredondar o valor do primeiro preditor de vetor de movimento obtido a partir do buffer de vetor de movimento, uma ou mais unidades de processamento são configuradas para arredondar os valores da pluralidade de preditores de vetor de movimento candidatos incluídos na lista de candidatos de preditor de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento.
23. Dispositivo, de acordo com a reivindicação 14, em que, para arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento, uma ou mais unidades de processamento são configuradas para arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento de acordo com um processo de arredondamento unificado para todas as operações de arredondamento de vetor de movimento.
24. Dispositivo, de acordo com a reivindicação 14, em que o dispositivo de codificação de vídeo compreende um dispositivo de decodificação de vídeo, as uma ou mais unidades de processamento sendo configuradas para: obter, a partir de um fluxo de bits de vídeo codificado, valores residuais para o bloco atual, em que, para reconstruir as amostras do bloco atual, uma ou mais unidades de processamento são configuradas para adicionar os valores residuais para o bloco atual às amostras do bloco preditor.
25. Dispositivo, de acordo com a reivindicação 24, compreendendo adicionalmente um visor configurado para exibir a reconstrução das amostras do bloco atual.
26. Dispositivo, de acordo com a reivindicação 14, em que o dispositivo de codificação de vídeo compreende um dispositivo de encodificação de vídeo, as uma ou mais unidades de processamento sendo configuradas para: encodificar, em um fluxo de bits de vídeo codificado, valores residuais para o bloco atual, em que, para reconstruir as amostras do bloco atual, as uma ou mais unidades de processamento são configuradas para adicionar os valores residuais para o bloco atual às amostras do bloco preditor.
27. Dispositivo, de acordo com a reivindicação 26, em que o dispositivo é um dispositivo de comunicação sem fio, o dispositivo compreendendo adicionalmente uma câmera configurada para capturar os dados de vídeo.
28. Dispositivo, de acordo com a reivindicação 14, em que, para arredondar o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento, uma ou mais unidades de processamento são configuradas para: realizar uma única operação de arredondamento para arredondar o valor do preditor do vetor de movimento obtido a partir do buffer do vetor de movimento de uma resolução de armazenamento para a resolução do valor da diferença de vetor de movimento.
29. Meio de armazenamento legível por computador que armazena instruções que, quando executadas, fazem um ou mais processadores: codificar um valor de uma diferença de vetor de movimento para um bloco atual de dados de vídeo; obter, a partir de um buffer de vetor de movimento, um valor de um preditor de vetor de movimento para o bloco atual de dados de vídeo; determinar uma resolução do valor da diferença de vetor de movimento para o bloco atual; obter uma quantidade de deslocamento de resolução de armazenamento para vetores de movimento; arredondar, com base na quantidade de deslocamento de resolução de armazenamento, o valor do preditor de vetor de movimento obtido a partir do buffer de vetor de movimento diretamente para a resolução do valor da diferença de vetor de movimento; adicionar o valor arredondado do preditor de vetor de movimento ao valor da diferença do vetor de movimento para obter um valor de um vetor de movimento para o bloco atual; obter, com base no valor do vetor de movimento para o bloco atual, amostras de um bloco preditor para o bloco atual; e reconstruir amostras do bloco atual com base nas amostras do bloco preditor para o bloco atual.
BR112021000640-0A 2018-07-24 2019-07-18 Arredondamento de vetores de movimento para resolução de diferença de vetor de movimento adaptativa e precisão de armazenamento de vetor de movimento aumentada em codificação de vídeo BR112021000640A2 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862702737P 2018-07-24 2018-07-24
US62/702,737 2018-07-24
US16/514,326 US10897617B2 (en) 2018-07-24 2019-07-17 Rounding of motion vectors for adaptive motion vector difference resolution and increased motion vector storage precision in video coding
US16/514,326 2019-07-17
PCT/US2019/042401 WO2020023280A1 (en) 2018-07-24 2019-07-18 Rounding of motion vectors for adaptive motion vector difference resolution and increased motion vector storage precision in video coding

Publications (1)

Publication Number Publication Date
BR112021000640A2 true BR112021000640A2 (pt) 2021-04-06

Family

ID=69178863

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021000640-0A BR112021000640A2 (pt) 2018-07-24 2019-07-18 Arredondamento de vetores de movimento para resolução de diferença de vetor de movimento adaptativa e precisão de armazenamento de vetor de movimento aumentada em codificação de vídeo

Country Status (7)

Country Link
US (1) US10897617B2 (pt)
EP (1) EP3827590A1 (pt)
CN (1) CN112673636B (pt)
BR (1) BR112021000640A2 (pt)
SG (1) SG11202013091SA (pt)
TW (1) TWI826487B (pt)
WO (1) WO2020023280A1 (pt)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020103944A1 (en) 2018-11-22 2020-05-28 Beijing Bytedance Network Technology Co., Ltd. Sub-block based motion candidate selection and signaling
WO2020262408A1 (ja) * 2019-06-25 2020-12-30 日本放送協会 イントラ予測装置、画像復号装置、及びプログラム
CN114208184A (zh) * 2019-08-13 2022-03-18 北京字节跳动网络技术有限公司 基于子块的帧间预测中的运动精度
CN114762330A (zh) 2019-09-22 2022-07-15 北京字节跳动网络技术有限公司 视频的子图片编码和解码
WO2023207649A1 (en) * 2022-04-29 2023-11-02 Mediatek Inc. Method and apparatus for decoder-side motion derivation in video coding system

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013053309A1 (en) * 2011-10-11 2013-04-18 Mediatek Inc. Method and apparatus of motion and disparity vector derivation for 3d video coding and hevc
US9325991B2 (en) * 2012-04-11 2016-04-26 Qualcomm Incorporated Motion vector rounding
US20150016533A1 (en) * 2013-07-12 2015-01-15 Qualcomm Incorporated Intra motion compensation extensions
US10531116B2 (en) * 2014-01-09 2020-01-07 Qualcomm Incorporated Adaptive motion vector resolution signaling for video coding
CN111741311B (zh) * 2014-10-31 2024-04-02 三星电子株式会社 用于对运动矢量进行编码/解码的方法和装置
US20160337662A1 (en) * 2015-05-11 2016-11-17 Qualcomm Incorporated Storage and signaling resolutions of motion vectors

Also Published As

Publication number Publication date
US20200036980A1 (en) 2020-01-30
US10897617B2 (en) 2021-01-19
TW202019173A (zh) 2020-05-16
CN112673636B (zh) 2023-12-26
TWI826487B (zh) 2023-12-21
CN112673636A (zh) 2021-04-16
EP3827590A1 (en) 2021-06-02
WO2020023280A1 (en) 2020-01-30
SG11202013091SA (en) 2021-02-25

Similar Documents

Publication Publication Date Title
AU2019302660B2 (en) Multiple history based non-adjacent MVPs for wavefront processing of video coding
BR112021002967A2 (pt) predição de movimento afim
BR112021002219A2 (pt) lista de candidatos baseada em histórico com classificação
BR112021009558A2 (pt) simplificação da predição de vetor de movimento baseada em histórico
BR112020006588A2 (pt) predição afim em codificação de vídeo
WO2019147826A1 (en) Advanced motion vector prediction speedups for video coding
BR112021009721A2 (pt) informação de movimento triangular para codificação de vídeo
TW201841501A (zh) 用於視訊寫碼之多種類型樹架構
BR112021003315A2 (pt) redução de compartimento codificado regular para codificação de coeficiente com o uso de limite e parâmetro de rice
WO2020069329A1 (en) Ultimate motion vector expression with adaptive directional information set
BR112021015697A2 (pt) Codificação de sub-bloco por intra predição generalizada em codificação de vídeo
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
BR112020026713A2 (pt) Modo de combinação dependente de suavização intra (mdis) com comutação de filtro de interpolação intra
BR112021006798A2 (pt) suavização e interpolação de intrapredição de ângulo amplo
BR112021000640A2 (pt) Arredondamento de vetores de movimento para resolução de diferença de vetor de movimento adaptativa e precisão de armazenamento de vetor de movimento aumentada em codificação de vídeo
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
CN113994694A (zh) 视频译码中的简化帧内色度模式译码
TW202021354A (zh) 運動向量預測器清單產生
TW202046721A (zh) 用於視訊寫碼之以梯度為基礎的預測細化
CN114731415A (zh) 针对多类型树块结构的合并估计区域
BR112021009732A2 (pt) padrões de predição de vetor de movimento espaço-temporal para codificação de vídeo
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
BR112021009714A2 (pt) redução de bin codificado regular para decodificação de coeficiente usando limite e parâmetro rice
BR112021005354A2 (pt) restrições afins para redução da largura de banda de pior caso na codificação de vídeo