BR112014015056B1 - Realizando predição de vetor de movimento para codificação de vídeo - Google Patents

Realizando predição de vetor de movimento para codificação de vídeo Download PDF

Info

Publication number
BR112014015056B1
BR112014015056B1 BR112014015056-7A BR112014015056A BR112014015056B1 BR 112014015056 B1 BR112014015056 B1 BR 112014015056B1 BR 112014015056 A BR112014015056 A BR 112014015056A BR 112014015056 B1 BR112014015056 B1 BR 112014015056B1
Authority
BR
Brazil
Prior art keywords
motion vectors
motion vector
video data
video
candidate
Prior art date
Application number
BR112014015056-7A
Other languages
English (en)
Other versions
BR112014015056A2 (pt
Inventor
Xianglin Wang
Marta Karczewicz
Ye-Kui Wang
Muhammed Zeyd Coban
Jianle Chen
Weijung Chien
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 BR112014015056A2 publication Critical patent/BR112014015056A2/pt
Publication of BR112014015056B1 publication Critical patent/BR112014015056B1/pt

Links

Images

Classifications

    • 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
    • H04N19/463Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • H04N19/197Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters including determination of the initial value of an encoding parameter
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

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

Abstract

REALIZANDO PREDIÇÃO DE VETOR DE MOVIMENTO PARA CODIFICAÇÃO DE VÍDEO. Em geral, são descritas técnicas para realizar predição de vetor de movimento para codificação de vídeo. Um dispositivo de codificação de vídeo compreendendo um processador pode realizar as técnicas. O processador pode ser configurado para determinar uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar o processo de predição de vetor de movimento e escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados. O processador pode ser então configurado para modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada.

Description

[0001] Esse pedido reivindica o benefício do Pedido Provisional dos Estados Unidos N° 61/579.465, depositado em 22 de dezembro de 2011 e Pedido Provisional dos Estados Unidos N° 61/584.096, depositado em 6 de janeiro de 2012 cada um dos quais é aqui incorporado integralmente mediante referência.
CAMPO TÉCNICO
[0002] Es sa revelação se refere à codificação de vídeo e, mais especificamente, aos aspectos de compensação de movimento de codificação de vídeo.
ANTECEDENTES
[0003] Capacidades de vídeo digital podem ser incorporadas em uma ampla gama de dispositivos, incluindo televisões digitais, sistemas de transmissão direta digital, sistemas de transmissão sem fio, assistentes pessoais digitais (PDAs), computadores de mesa ou laptop, câmeras digitais, dispositivos de gravação digital, dispositivos de reprodução de mídia digital, dispositivos de jogos de vídeo, consoles de jogos de vídeo, radiotelefones celulares ou via satélite, dispositivos de teleconferência de vídeo, e semelhantes. Dispositivos de vídeo digital implementam técnicas de compactação de vídeo, tais como aquelas descritas nos padrões definidos por MPEG- 2, MPEG-4, ITU-T H.263 ou ITU-T H.264/MPEG-4, Parte 10, Codificação Avançada de Vídeo (AVC), e extensões de tais padrões, para transmitir e receber de forma mais eficiente a informação de vídeo digital. Novos padrões de codificação de vídeo, tal como o padrão High Efficiency Video Coding (HEVC) sendo desenvolvido pelo “Joint Collaborative Team - Video Coding” (JCT-VC), que é uma colaboração entre MPEG e ITU-T, estão sendo desenvolvidos. O padrão HEVC emergente é algumas vezes referido como H.265, embora tal designação não tenha sido formalmente feita.
SUMÁRIO
[0004] Em geral, essa revelação descreve técnicas para limitar a faixa de candidatos de vetor de movimento usados em um processo de predição de vetor de movimento para estar dentro de uma faixa especificada. Predição de vetor de movimento é comumente empregada na codificação de vídeo como uma forma de aperfeiçoar a eficiência na qual é realizada a estimação de movimento. Mais propriamente do que realizar uma busca para os blocos nos quadros de referência que combinam um bloco atual mediante realização do que é normalmente referido como “estimação de movimento”, o codificador de vídeo pode determinar esses vetores de movimento candidatos a partir dos blocos que são vizinhos espaciais ou temporais para o bloco atual dos dados de vídeo e selecionar um desses vetores de movimento candidatos como o preditor de vetor de movimento para o bloco atual dos dados de vídeo. Em alguns casos, esses vetores de movimento candidatos podem ser escalados. Quando um vetor de movimento candidato escalado é selecionado como o preditor de vetor de movimento, as técnicas podem possibilitar que o codificador de vídeo limite a faixa de um ou mais de um componente horizontal e de um componente vertical desses vetores de movimento, candidatos, escalados.
[0005] Em um exemplo, um método de codificar dados de vídeo compreende determinar uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar um processo de predição de vetor de movimento, escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados e modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada. O método compreende ainda selecionar um da pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo e codificar o bloco atual de dados de vídeo com base no preditor de vetor de movimento.
[0006] Em outro exemplo, um dispositivo de codificação de vídeo configurado para realizar um processo de predição de vetor de movimento para codificar dados de vídeo compreende um processador configurado para determinar uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar o processo de predição de vetor de movimento, escalar um da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados, modificar os vetores de movimento, candidatos, escalados de modo a estar dentro de uma faixa especificada, selecionar um da pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo e codificar o bloco atual de dados de vídeo com base no preditor de vetor de movimento.
[0007] Em outro exemplo, um dispositivo de codificação de vídeo configurado para realizar um processo de predição de vetor de movimento para codificar dados de vídeo compreende meio para determinar uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar o processo de predição de vetor de movimento e meio para escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados. O dispositivo de codificação de vídeo compreende ainda meio para modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada, meio para selecionar um da pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo, e meio para codificar o bloco atual de dados de vídeo com base no preditor de vetor de movimento.
[0008] Em outro exemplo, um meio de armazenamento não transitório legível por computador tem instrução armazenada no mesmo que, quando executada, faz com que um ou mais processadores determinem uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar um processo de predição de vetor de movimento, escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados, modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada, selecionar um da pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo e codificar o bloco atual de dados de vídeo com base no preditor de vetor de movimento.
[0009] Os detalhes de um ou mais exemplos são apresentados nos desenhos anexos e na descrição abaixo. Outras características, objetivos e vantagens serão evidentes a partir da descrição e desenhos, e a partir das reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0010] A Figura 1 é um diagrama de blocos ilustrando um sistema de codificação e decodificação de vídeo exemplar que pode ser configurado para utilizar as técnicas descritas nessa revelação para limitar a faixa de vetores de movimento candidatos ao realizar um processo de predição de vetor de movimento.
[0011] A Figura 2 é um diagrama de blocos ilustrando um exemplo de um codificador de vídeo que pode implementar as técnicas descritas nessa revelação para limitar a faixa de MVPs.
[0012] A Figura 3 é um diagrama de blocos ilustrando um exemplo de um decodificador de vídeo que implementa as técnicas de predição de vetor de movimento descritas nessa revelação.
[0013] A FIGURA 4 é um fluxograma ilustrando operação exemplar de um codificador de vídeo ao realizar aspectos das técnicas de predição de vetor de movimento descritas nessa revelação.
[0014] A Figura 5 é um fluxograma ilustrando operação exemplar de um codificador de vídeo em implementar outros aspectos das técnicas de predição de vetor de movimento descritas nessa revelação.
[0015] A Figura 6 é um diagrama ilustrando um arranjo exemplar de unidades preditivas vizinhas adjacentes (PUs) e PU co-localizada temporal para uma PU atual.
DESCRIÇÃO DETALHADA
[0016] Modalidades das técnicas descritas nessa revelação possibilitam aos codificadores de vídeo (os quais podem representar um termo usado nessa descrição para se referir a um ou a ambos, codificador e decodificador de vídeo) limitem a faixa de vetores de movimento candidatos selecionados para estar dentro de uma faixa especificada ou realizar um processo de predição de vetor de movimento. Em outras palavras, as técnicas possibilitam que o codificador de vídeo determine uma lista de vetores de movimento candidatos (onde esses vetores de movimento candidatos também podem ser referidos como “candidatos de preditor de vetor de movimento” e a lista pode ser referida como uma “lista de candidatos”) para um bloco atual de dados de vídeo e selecionar um dos vetores de movimento candidatos nessa lista para representar o preditor de vetor de movimento (MVP) para o bloco atual de dados de vídeo. O codificador de vídeo pode então determinar se o vetor de movimento candidato selecionado foi escalado. A partir da determinação de que esse vetor de movimento candidato selecionado foi escalado, o codificador de vídeo pode então determinar se um componente horizontal e/ou um componente vertical do vetor de movimento candidato selecionado é incluído dentro de uma faixa especificada de valores de componentes horizontais e/ou uma faixa especificada de valores de componentes verticais, respectivamente. Essas faixas especificadas podem representar efetivamente o que pode ser referido como uma limitação de deslocamento horizontal e/ou uma limitação de deslocamento vertical. Se não estiver incluído na faixa especificada de valores de componentes horizontais e/ou na faixa vertical de valores de componentes verticais, o codificador de vídeo pode então cortar os valores de modo que os valores de componentes horizontais e/ou verticais sejam incluídos dentro da faixa especificada de valores de componentes horizontais e/ou da faixa especificada de valores de componentes verticais.
[0017] Desse modo, as técnicas podem modificar o processo de geração de lista de candidatos do que pode ser referido como um processo de corte de candidatos de preditor de vetor de movimento. Por exemplo, o codificador de vídeo pode cortar um componente vertical de um vetor de movimento candidato para permanecer dentro dos limites de uma faixa de vetor de movimento. Similarmente, o codificador de vídeo pode cortar um componente horizontal do vetor de movimento candidato para permanecer dentro dos limites da faixa de vetor de movimento. Adicionalmente, o codificador de vídeo pode escalar um vetor de movimento para permanecer dentro dos limites da faixa de vetor de movimento. Essas técnicas podem ser aplicadas a alguns ou todos os vetores de movimento candidatos intermediários, ou apenas a um preditor de vetor de movimento selecionado final para um bloco de vídeo atual.
[0018] Em outras palavras, quando um vetor de movimento candidato da lista de candidatos aponta para um bloco de predição localizado além de um limite de deslocamento de vetor de movimento, o codificador de vídeo (o qual também pode ser referido como um “dispositivo de codificação de vídeo”) pode cortar ou de outro modo truncar o valor do vetor de movimento candidato. O codificador de vídeo pode então codificar o bloco de vídeo atual com base em um vetor de movimento candidato cortado selecionado da lista de candidatos.
[0019] Mediante limitação ou de outra forma restringindo a faixa de valores de componentes horizontais e/ou verticais do vetor de movimento, candidato, selecionado; em certos casos (tal como quando esse vetor de movimento candidato selecionado é escalado), as técnicas podem garantir que os vetores de movimento horizontal e/ou vertical não requerem mais do que certo número de bits para expressar seus valores inteiros com sinal. Em outras palavras, os valores de componentes de vetores de movimento, que são valores de números inteiros com sinal, são comumente expressos utilizando 16 bits. Os decodificadores de vídeo, portanto alocam 16 bits por componente de vetor de movimento ao definir os vetores de movimento. Permitir que os vetores de movimento excedessem 16 bits pode complicar significativamente o modelo de decodificador de vídeo quando implementado em hardware, uma vez que memória física adicional precisa ser provida para armazenar esses componentes de vetor de movimento exigindo mais do que 16 bits para ser expressos.
[0020] Adicionalmente, mediante limitação da faixa de componentes de vetor de movimento em certos casos para estar dentro de uma faixa especificada, as técnicas podem promover utilização mais eficiente de largura de banda de memória. Para ilustrar, dado que a codificação de vídeo de um quadro de dados de vídeo tipicamente prossegue na ordem de varredura de rastreio (que está comumente na ordem de leitura de cima para baixo, da esquerda para a direita), limitar o componente vertical dos vetores de movimento pode restringir a quantidade de dados de vídeo do quadro de referência para o qual o vetor de movimento se refere exigido para ser carregado na memória em chip. Um componente vertical de vetor de movimento menor pode ser em codificação de vídeo de varredura de rastreio, considerado uma forma eficaz de limitar a quantidade de memória em chip que é exigida em implementações de hardware do codificador de vídeo. Componentes verticais de vetor de movimento excessivamente grandes podem resultar nos casos onde múltiplos blocos fazem referência às porções completamente diferentes do mesmo quadro de referência que então exigem que o decodificador de vídeo troque frequentemente essas porções diferentes do quadro de referência entre memória fora de chip e memória em chip. Mediante limitação da faixa de componentes de vetor de movimento em certos casos, as técnicas podem promover utilização mais eficiente de largura de banda de memória.
[0021] A Figura 1 é um diagrama de blocos ilustrando um sistema de codificação e de decodificação de vídeo exemplar 10 que pode ser configurado para utilizar as técnicas descritas nessa revelação para limitar a faixa de vetores de movimento candidatos ao realizar um processo de predição de vetores de movimento. Como mostrado exemplo da Figura 1, o sistema 10 inclui um dispositivo de origem 12 que gera vídeo codificado para decodificação pelo dispositivo de destino 14. O dispositivo de origem 12 pode transmitir o vídeo codificado para o dispositivo de destino 14 por intermédio do canal de comunicação 16 ou pode armazenar o vídeo codificado em um meio de armazenamento 34 ou um servidor de arquivo 36, de tal modo que o vídeo codificado pode ser acessado pelo dispositivo de destino 14 conforme desejado. O dispositivo de origem 12 e o dispositivo de destino 14 podem compreender qualquer um de uma ampla variedade de dispositivos, incluindo computadores de mesa, computadores notebook (isto é, laptop), computadores tablet, conversores de sinais de frequência, aparelhos telefônicos (incluindo telefones celulares ou aparelhos telefônicos de mão e os assim chamados telefones inteligentes), televisões, câmeras, dispositivos de exibição, aparelhos de reprodução de mídia digital, consoles de jogos de vídeo, ou semelhantes.
[0022] Em muitos casos, tais dispositivos podem ser equipados para comunicação sem fio. Portanto, o canal de comunicação 16 pode compreender um canal sem fio. Alternativamente, o canal de comunicação 16 pode compreender um canal cabeado, uma combinação de canais cabeados e sem fio ou qualquer outro tipo de canal de comunicação ou combinação de canais de comunicação adequados para a transmissão de dados de vídeo codificado, tal como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão física. Em alguns exemplos, o canal de comunicação 16 pode formar parte de uma rede baseada em pacote, tal como uma rede de área local (LAN), uma rede de área remota (WAN), ou uma rede global tal como a Internet. O canal de comunicação 16, portanto geralmente representa qualquer meio de comunicação adequado, ou grupo de meios de comunicação diferentes, para transmitir dados de vídeo a partir do dispositivo de origem 12 para o dispositivo de destino 14, incluindo qualquer combinação adequada de meios cabeados ou sem fio. O canal de comunicação 16 pode incluir roteadores, comutadores, estações base, ou qualquer outro equipamento que pode ser útil para facilitar a comunicação a partir do dispositivo de origem 12 para o dispositivo de destino 14.
[0023] Como mostrado adicionalmente no exemplo da Figura 1, o dispositivo de origem 12 inclui uma fonte de vídeo 18, codificador de vídeo 20, um modulador/demodulador 22 (“modem 22”) e um transmissor 24. No dispositivo de origem 12, a fonte de vídeo 18 pode incluir uma fonte tal como um dispositivo de captura de vídeo. O dispositivo de captura de vídeo, como exemplo, pode incluir um ou mais de uma câmera de vídeo, um arquivo de vídeo contendo vídeo previamente capturado, interface de alimentação de vídeo para receber vídeo a partir de um provedor de conteúdo de vídeo, e/ou um sistema gráfico de computador para gerar dados gráficos de computador como o vídeo de origem. Como um exemplo, se a fonte de vídeo 18 for uma câmera de vídeo, o dispositivo de origem 12 e o dispositivo de destino 14 podem formar os assim chamados fones de câmera ou fones de vídeo. As técnicas descritas nessa revelação, contudo não são limitadas às aplicações ou configurações sem fio, e podem ser aplicadas aos dispositivos que não são de tecnologia sem fio incluindo capacidades de codificação e/ou decodificação de vídeo. O dispositivo de origem 12 e o dispositivo de destino 14, portanto são apenas exemplos de dispositivos de codificação que podem suportar as técnicas aqui descritas.
[0024] O codificador de vídeo 20 pode codificar o vídeo capturado, pré-capturado ou gerado por computador. Quando codificado, o codificador de vídeo 20 pode emitir esse vídeo codificado para o modem 22. O modem 22 pode então modular o vídeo codificado de acordo com um padrão de comunicação, tal como um protocolo de comunicação sem fio, após o que o transmissor 24 pode transmitir os dados de vídeo codificado, modulados para o dispositivo de destino 14. O modem 22 pode incluir vários misturadores, filtros, amplificadores ou outros componentes projetados para modulação de sinal. O transmissor 24 pode incluir circuitos projetados para transmitir dados, incluindo amplificadores, filtros, e uma ou mais antenas.
[0025] O vídeo capturado, pré-capturado, ou gerado por computador que é codificado pelo codificador de vídeo 20 pode ser também armazenado em um meio de armazenamento 34 ou em um servidor de arquivo 36 para posterior recuperação, decodificação e consumo. O meio de armazenamento 34 pode incluir discos Blu-ray, DVDs, CD- ROMs, memória flash ou qualquer outra mídia de armazenamento digital adequada para armazenar vídeo codificado. O dispositivo de destino 14 pode acessar o vídeo codificado armazenado no meio de armazenamento 34 ou no servidor de arquivo 36, decodificar esse vídeo codificado para gerar vídeo decodificado e reproduzir esse vídeo decodificado.
[0026] O servidor de arquivos 36 pode ser qualquer tipo de servidor capaz de armazenar vídeo codificado e transmitir esse vídeo codificado para o dispositivo de destino 14. Servidores de arquivo exemplares incluem um servidor de rede (por exemplo, para um sítio da rede), um servidor FTP, dispositivo de armazenamento ligados em rede (NAS), uma unidade de disco local, ou qualquer outro tipo de dispositivo capaz de armazenar dados de vídeo codificado e transmitir os mesmos para um dispositivo de destino. A transmissão de dados de vídeo codificado a partir do servidor de arquivo 36 pode ser uma transmissão de fluxo contínuo, uma transmissão de transferência baixada, ou uma combinação das duas. O servidor de arquivo 36 pode ser acessado pelo dispositivo de destino 14 através de qualquer conexão padrão de dados, incluindo uma conexão de Internet. Isso pode incluir um canal sem fio (por exemplo, uma conexão Wi-Fi), uma conexão cabeada (por exemplo, DSL, modem a cabo, Ethernet, USB, etc.), ou uma combinação das duas que seja adequada para acessar os dados de vídeo codificado armazenados em um servidor de arquivos.
[0027] O dispositivo de destino 14, no exemplo da Figura 1, inclui um receptor 26, um modem 28, um decodificador de vídeo 30, e um dispositivo de exibição 32. O receptor 26 do dispositivo de destino 14 recebe informação através do canal 16, e o modem 28 demodula a informação para produzir um fluxo de bits demodulado para o decodificador de vídeo 30. A informação comunicada através do canal 16 pode incluir uma variedade de informação de sintaxe gerada pelo codificador de vídeo 20 para uso pelo decodificador de vídeo 30 na decodificação dos dados de vídeo. Tal sintaxe também pode ser incluída com os dados de vídeo codificados armazenados no meio de armazenamento 34 ou servidor de arquivo 36. Cada um do codificador de vídeo 20 e decodificador de vídeo 30 pode formar parte de um codificador-decodificador respectivo (CODEC) que é capaz de codificar ou decodificar os dados de vídeo.
[0028] O dispositivo de exibição 32 do dispositivo de destino 14 representa qualquer tipo de display capaz de apresentar dados de vídeo para consumo por um espectador. Embora mostrado como integrado com o dispositivo de destino 14, o dispositivo de exibição 32 pode ser integrado com, ou externo ao dispositivo de destino 14. Em alguns exemplos, o dispositivo de destino 14 pode incluir um dispositivo de exibição integrado e ser também configurado para estabelecer interface com um dispositivo de exibição externo. Em outros exemplos, o dispositivo de destino 14 pode ser um dispositivo de exibição. Em geral, o dispositivo de exibição 32 exibe os dados de vídeo decodificados a um usuário, e pode compreender qualquer um de uma variedade de dispositivos de exibição tal como um display de cristal líquido (LCD), um display de plasma, um display de diodos de emissão de luz orgânica (OLED), ou outro tipo de dispositivo de exibição.
[0029] Essa revelação pode ser referir geralmente ao codificador de vídeo “sinalizando” a informação de sintaxe para outro dispositivo, tal como decodificador de vídeo 30. Deve ser entendido, contudo que o codificador de vídeo 20 pode sinalizar informação mediante associação dos elementos de sintaxe com várias porções codificadas de dados de vídeo. Isto é, o codificador de vídeo 20 pode “sinalizar” os dados mediante armazenamento de certos elementos de sintaxe para cabeçalhos de várias porções codificadas de dados de vídeo. Em alguns casos, tais elementos de sintaxe podem ser codificados e armazenados (por exemplo, armazenados no meio de armazenamento 34 do servidor de arquivo 36) antes de serem recebidos e decodificados pelo decodificador de vídeo 30. Assim, o termo “sinalizando” pode se referir geralmente à comunicação de sintaxe ou outros dados usados para decodificar os dados de vídeo compactados, se tal comunicação ocorrer em tempo real ou em tempo quase real ou através de um período de tempo, tal como poderia ocorrer ao armazenar elementos de sintaxe em um meio no momento da codificação, os quais podem então ser recuperados por um dispositivo de decodificação a qualquer momento após ser armazenado nesse meio.
[0030] O codificador de vídeo 20 e o decodificador de vídeo 30 podem operar de acordo com um padrão de compactação de vídeo, tal como o padrão de Codificação de Vídeo de Alta Eficiência (HEVC) atualmente em desenvolvimento, e pode estar de acordo com o Modelo de Teste HEVC (HM). Alternativamente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem operar de acordo com outros padrões patenteados ou da indústria, tal como o padrão ITU-T H.264, referido alternativamente como MPEG-4, Parte 10, Codificação Avançada de Vídeo (AVC), ou extensões de tais padrões. As técnicas dessa revelação, contudo não são limitadas a qualquer padrão de codificação específica. Outros exemplos incluem MPEG-2 e ITU-T (H.263).
[0031] HM se refere a um bloco de dados de vídeo como uma unidade de codificação (CU). Em geral, uma CU tem uma finalidade similar para um macrobloco codificado de acordo com H.264, exceto que uma CU não tem a distinção de tamanho associada com os macroblocos de H.264. Assim, uma CU pode ser dividida em sub-CUs. Em geral, referências nessa revelação a uma CU podem se referir a uma unidade de codificação maior (LCU) de uma imagem ou uma sub-CU de uma LCU. Por exemplo, dados de sintaxe dentro de um fluxo de bits podem definir a LCU, que é uma unidade de codificação maior em termos do número de pixels. Uma LCU pode ser dividida em sub-CUs, e cada sub-CU pode ser dividida em sub-CUs. Os dados de sintaxe para um fluxo de bits podem definir um número máximo de vezes que uma LCU pode ser dividida, referido como uma profundidade máxima de CU. Consequentemente, um fluxo de bits também pode definir uma unidade de codificação menor (SCU).
[0032] Uma LCU pode ser associada com uma estrutura de dados quadtree hierárquica. Em geral, uma estrutura de dados quadtree inclui um nó por CU, onde um nó raiz corresponde a uma LCU. Se uma CU foi dividida em quatro sub-CUs, o nó correspondendo a CU inclui uma referência para cada um dos quatro nós que correspondem a sub-CUs. Cada nó da estrutura de dados quadtree pode prover dados de sintaxe para a CU correspondente. Por exemplo, um nó na quadtree pode incluir um sinalizador de divisão, indicando se a CU correspondente ao nó é dividida em sub- CUs. Os elementos de sintaxe para uma CU podem ser definidos de forma recursiva, e podem depender de se a CU é dividida em sub-CUs.
[0033] Uma CU que não é dividida pode incluir uma ou mais unidades de predição (PUs). Em geral, uma PU representa toda ou uma porção da CU correspondente, e inclui dados para recuperar uma amostra de referência para a PU. Por exemplo, quando a PU é codificada no modo intra, a PU pode incluir dados descrevendo um modo de predição intra para a PU. Como outro exemplo, quando a PU é codificada no modo inter, a PU pode incluir dados definindo um ou mais vetores de movimento para a PU. Um vetor de movimento geralmente identifica uma CU co-localizada em um ou mais quadros de referência, onde o termo “quadro de referência” se refere a um quadro que ocorre temporalmente a antes ou após o quadro no qual está localizada a PU. Dados para a CU definindo a PU(s) também podem descrever, por exemplo, divisão da CU em uma ou mais PUs. Os modos de divisão podem diferir entre se a CU é codificada no modo de predição intra ou não codificada, ou codificada no modo de predição inter.
[0034] Os dados definindo o vetor de movimento podem descrever, por exemplo, um componente horizontal do vetor de movimento, um componente vertical do vetor de movimento, uma resolução para o vetor de movimento (por exemplo, exatidão de um quarto de pixel ou exatidão de um oitavo de pixel), um quadro de referência para o qual aponta o vetor de movimento, uma direção de predição que identifica se o quadro de referência identificado está antes ou após o quadro atual, e/ou uma lista de referência (por exemplo, lista 0 ou lista 1) para o vetor de movimento. Alternativamente, os dados definindo o vetor de movimento podem descrever o vetor de movimento em termos do que é referido como um preditor de vetor de movimento (MVP). Um preditor de vetor de movimento pode incluir um vetor de movimento de uma PU adjacente ou uma PU temporalmente co-localizada. Tipicamente, uma lista de cinco vetores de movimento candidatos é formada em uma forma definida (tal como, listagem dos vetores de movimento candidatos começando com aqueles que têm a maior amplitude para aqueles que têm menor amplitude, isto é, maior ou menor deslocamento entre a PU atual a ser codificada e a PU de referência, ou listagem dos vetores de movimento candidatos com base na localização, isto é, blocos acima, blocos esquerdos, blocos de canto, blocos temporais), onde quatro dos cinco vetores de movimento candidatos são vetores de movimento espacial selecionados a partir de quatro PUs vizinhas e o quinto vetor de movimento candidato é um vetor de movimento temporalmente co-localizado selecionado a partir de uma PU temporalmente co-localizado no quadro de referência.
[0035] Embora tipicamente o vetor de movimento candidato temporal seja co-localizado na mesma porção do quadro de referência que aquela porção atual do quadro atual, as técnicas não devem ser limitadas estritamente aos vetores de movimento candidatos temporais co-localizados. Em vez disso, as técnicas podem ser implementadas com relação a qualquer vetor de movimento, candidato temporal, seja ele co-localizado ou não. Em alguns casos, o codificador de vídeo pode identificar um vetor de movimento candidato temporal que não é co-localizado com o bloco atual ou porção do quadro atual e usar esse vetor de movimento candidato temporal ao realizar o processo de predição de vetor de movimento. Comumente, o codificador de vídeo pode sinalizar que um vetor de movimento candidato temporal não co-localizado foi usado ou, em alguns casos, um contexto determinado pode indicar que um vetor de movimento candidato temporal não co-localizado foi usado (em cujo caso, o codificador de vídeo pode não sinalizar se um vetor de movimento candidato temporal não co-localizado ou não selecionado como o MVP).
[0036] Após formar a lista de cinco vetores de movimento candidatos, o codificador de vídeo 20 pode acessar cada um dos vetores de movimento candidatos para determinar qual proporciona as melhores características de distorção e taxa que combinem melhor com um perfil de distorção e taxa determinada selecionado para codificação do vídeo. O codificador de vídeo 20 pode realizar um procedimento de otimização de distorção de taxa (RDO) com relação a cada um dos cinco vetores de movimento candidatos, selecionando um dos vetores de movimento candidato tendo os melhores resultados RDO como o MVP. Alternativamente, o codificador de vídeo 20 pode selecionar um dos cinco vetores de movimento candidatos armazenado para a lista que melhor se aproxima de um vetor de movimento determinado para a PU atual como o MVP.
[0037] Em todo caso, o codificador de vídeo 20 pode especificar o vetor de movimento utilizando os dados que compreendem um índice identificando o vetor selecionado dentre os vetores de movimento candidatos na lista de cinco vetores de movimento candidatos, um ou mais quadros de referência para os quais o vetor de movimento aponta (frequentemente na forma de lista) e uma direção de predição identificando se a predição é unidirecional ou bidirecional. Alternativamente, os dados definindo o vetor de movimento não apenas especificam o índice do vetor de movimento candidato selecionado na lista de cinco vetores de movimento candidatos sem especificar o quadro de referência e a direção de predição, o que sinaliza para os decodificadores de vídeo que o vetor selecionado dos vetores de movimento candidatos deve ser usado integralmente para a PU atual.
[0038] Além de ter uma ou mais PUs que definem um ou mais vetores de movimento, uma CU pode incluir uma ou mais unidades de transformada (TUs). Após a predição utilizando uma PU, um codificador de vídeo pode calcular um valor residual para a porção da CU correspondendo a PU, onde esse valor residual também pode ser referido como dados residuais. O valor residual pode ser transformado, quantizado e escaneado. Uma TU não é necessariamente limitada ao tamanho de uma PU. Assim, as TUs podem ser maiores ou menores do que as PUs correspondentes para a mesma CU. Em alguns exemplos, o tamanho máximo de uma TU pode ser o tamanho da CU correspondente. Essa revelação também utiliza o termo “bloco” para se referir a qualquer uma ou combinação de uma CU, PU e/ou TU.
[0039] Em geral, os dados de vídeo codificado podem incluir dados de predição e dados residuais. O codificador de vídeo 20 pode produzir os dados de predição durante um modo de predição intra ou um modo de predição inter. Predição intra geralmente envolve predizer os valores de pixel em um bloco de uma imagem relativa às amostras de referência em blocos vizinhos, previamente codificados da mesma imagem. Predição intra geralmente envolve predizer os valores de pixel em um bloco de uma imagem relativa aos dados de uma imagem previamente codificada.
[0040] Em seguida à predição intra ou inter, o codificador de vídeo 20 pode calcular valores de pixels residuais para o bloco. Os valores residuais geralmente correspondem às diferenças entre os dados de valores de pixels preditos para o bloco e os dados de valores de pixel verdadeiros do bloco. Por exemplo, os valores residuais podem incluir valores de diferença de pixel indicando diferenças entre os pixels codificados e os pixels preditivos. Em alguns exemplos, os pixels codificados podem ser associados com um bloco de pixels a serem codificados, e os pixels preditivos podem ser associados com um ou mais blocos de pixels usados para predizer o bloco codificado.
[0041] Para compactar adicionalmente o valor residual de um bloco, o valor residual pode ser transformado em um conjunto de coeficientes de transformada que compactam o máximo possível de dados (também referido como “energia”) em um menor número possível de coeficientes. As técnicas de transformada podem compreender um processo de transformada discreta de cosseno (DCT) ou processo similar de modo conceptual, transformadas de número inteiro, transformadas de ondaleta, ou outros tipos de transformadas. A transformada converge os valores residuais dos pixels a partir do domínio espacial para um domínio de transformada. Os coeficientes de transformada correspondem a uma matriz bidimensional de coeficientes que tem normalmente o mesmo tamanho que o bloco original. Em outras palavras, existem tantos coeficientes de transformada quantos pixels no bloco original. Contudo, devido à transformada, muitos dos coeficientes de transformada podem ter valores iguais a zero.
[0042] O codificador de vídeo 20 pode então quantizar os coeficientes de transformada para compactar adicionalmente os dados de vídeo. A quantização geralmente envolve mapear os valores dentro de uma faixa relativamente grande para valores em uma faixa relativamente pequena, reduzindo assim a quantidade de dados necessários para representar os coeficientes de transformada quantizados. Mais especificamente, a quantização pode ser aplicada de acordo com um parâmetro de quantização (QP), o qual pode ser definido no nível de LCU. Consequentemente, o mesmo nível de quantização pode ser aplicado a todos os coeficientes de transformada nas TUs associadas com diferentes PUs das CUs dentro de uma LCU. Contudo, mais propriamente do que sinalizar o próprio QP, uma mudança (isto é, um delta) no QP pode ser sinalizado com a LCU. O delta QP define uma mudança no parâmetro de quantização para a LCU em relação a algum QP de referência, tal como o QP de uma LCU previamente comunicada.
[0043] Após a quantização, o codificador de vídeo 20 pode escanear os coeficientes de transformada, produzindo um vetor unidimensional a partir da matriz bidimensional incluindo os coeficientes quantizados de transformada. O codificador de vídeo 20 pode então realizar codificação estatística sem perda (que é comumente referida pela designação incorreta “codificação de entropia”) para codificar o arranjo resultante para até mesmo compactar adicionalmente os dados. Em geral, a codificação de entropia compreende um ou mais processos que compactam de forma coletiva uma sequência de coeficientes quantizados de transformada e/ou outra informação de sintaxe. Por exemplo, elementos de sintaxe, tais como os delta QPs, vetores de predição, modos de codificação, filtros, deslocamentos, ou outra informação, também podem ser incluídos no fluxo de bits codificados por entropia. Os coeficientes escaneados são então codificados por entropia conjuntamente com qualquer informação de sintaxe, por exemplo, por intermédio de codificação de comprimento variável de conteúdo adaptativo (CAVLC), codificação aritmética binária de contexto adaptativo (CABAC), ou qualquer outro processo de codificação sem perda estatística.
[0044] Conforme observado acima, os dados definindo os vetores de movimento para as PUs podem assumir um número de formas. O codificador de vídeo 20 pode implementar diferentes formas através das quais os vetores de movimento podem ser expressos para compactar os dados de vetor de movimento. O codificador de vídeo 20 pode implementar o que é referido como um “modo de fusão” para expressar os vetores de movimento como um índice identificando um vetor de movimento candidato quando armazenado em uma lista de vetores de movimento candidatos construída de uma maneira definida. O decodificador de vídeo 30, ao implementar o inverso desse modo de fusão, recebe esse índice, reconstrói a lista de cinco vetores de movimento candidatos de acordo com a forma definida e seleciona um dos cinco vetores de movimento candidatos na lista indicada pelo índice como o MVP para o bloco atual dos dados de vídeo sendo decodificados. O decodificador de vídeo 3 então justifica o vetor selecionado do vetor de movimento candidato como o MVP para a PU associada na mesma resolução do vetor selecionado dentre os vetores de movimento candidatos e que aponta para o mesmo quadro de referência para o qual aponta o vetor selecionado dentre os vetores de movimento candidatos. Ao implementar o modo de fusão, o codificador de vídeo 20 pode não precisar realizar estimação de movimento na extensão completa necessária para derivar um vetor de movimento, especificar os componentes horizontais e verticais do vetor de movimento, a resolução do vetor de movimento, a direção do vetor de movimento (significando, se o vetor de movimento aponta para um quadro de forma temporal antes ou após o quadro atual) ou o índice de quadro de referência, desse modo reduzindo potencialmente os ciclos de processamento exigidos para determinar um vetor de movimento e compactar dados de vetor de movimento.
[0045] O codificador de vídeo 20 também pode implementar um modo de predição de vetor de movimento adaptativo (AMVP) que, similar ao modo de fusão, inclui expressar os vetores de movimento como um índice identificando um dos vetores de movimento candidatos como um MVP. Contudo, contrário ao modo de fusão, o codificador de vídeo 20 também pode especificar a direção de predição e o quadro de referência, cancelando eficazmente essas porções dos vetores selecionados dentre os vetores de movimento candidatos. Na implementação do modo AMVP, o codificador de vídeo 20 pode não precisar realizar estimação de movimento na extensão total necessária para derivar um vetor de movimento, especificar componentes horizontais e verticais do vetor de movimento, e a resolução do vetor de movimento, desse modo reduzindo potencialmente os ciclos de processamento exigidos para determinar um vetor de movimento e compactar os dados de vetor de movimento.
[0046] Ge ralmente, padrões de codificação de vídeo predecessores ao padrão atualmente proposto, HEVC, definiram vários limites para restringir o tamanho dos componentes verticais e horizontais de vetor de movimento. Esses limites podem, como observado acima, ser definidos como faixas que limitam o deslocamento vertical e/ou horizontal a valores máximos e mínimos. Em HEVC, essas faixas de componentes de vetor de movimento (denotadas comumente como “mvrange”) foram primeiramente propostas e adotadas com base no uso dessas faixas nos padrões predecessores de codificação de vídeo, tal como H.264. Contudo, mais recentemente, essas faixas em deslocamento horizontal e/ou vertical foram abandonadas a partir de HEV de modo a possibilitar que os vetores de movimento se refiram geralmente a qualquer porção do quadro de referência. Os vetores de movimento também foram definidos em HEVC tendo valores que são individualmente de 16 bits de comprimento, os quais proporcionaram tipicamente bits suficientes para expressar os valores de componentes de vetor de movimento grandes dirigidos a quase qualquer porção do quadro de referência. Ao possibilitar que os vetores de movimento se refiram geralmente a qualquer porção do quadro de referência, os codificadores de vídeo podem realizar buscas mais exaustivas pelas porções do quadro de referência que resultam na menor quantidade de dados residuais (que é outra forma de dizer compactação mais eficiente do bloco atual dos dados de vídeo).
[0047] Ainda em certas circunstâncias, limitar a faixa de vetores de movimento pode ser vantajoso. Por exemplo, ao realizar um dos processos de predição de vetor de movimento acima (por exemplo, modo de fusão ou modo AMVP), um ou mais dos candidatos de vetor de movimento podem ser escalados antes de serem adicionados à lista de candidatos. Esses componentes de vetor de movimento escalados podem então exceder o comprimento de 16 bits normalmente definido para cada componente de vetor de movimento. Quando tais vetores de movimento escalados são maiores do que o comprimento de 16 bits, o codificador de vídeo 20 pode determinar que o modo de fusão não esteja disponível ou, em outras palavras, que o modo de fusão não pode ser realizado. Esse mesmo problema pode surgir ao realizar o modo AMVP quando um ou mais dos vetores de movimento podem ser escalados ao realizar AMVP. Limitar o uso de qualquer um ou de ambos, o modo de fusão e o modo AMVP podem resultar em ineficiências de compactação.
[0048] De acordo com as técnicas descritas nessa revelação, o codificador de vídeo 20 pode determinar uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar um processo de predição de vetor de movimento. Isto é, o codificador de vídeo 20 pode identificar um ou mais blocos vizinhos do bloco atual de dados de vídeo (onde esses blocos vizinhos também podem ser referidos como “blocos candidatos de dados de vídeo” ou “blocos de vídeo candidatos”). O codificador de vídeo 20 pode identificar um ou mais (e, comumente, quatro) blocos vizinhos espaciais e um ou mais (e, comumente, um único) blocos vizinhos temporais. A localização desses blocos vizinhos espaciais e temporais com relação ao bloco atual é mostrada abaixo em detalhe com relação à Figura 6. Após identificar esses blocos vizinhos, o codificador de vídeo 20 pode então determinar os vetores de movimento associados com cada um desses blocos vizinhos, onde os vetores de movimento podem representar vetores de movimento candidatos para o processo de predição de vetor de movimento.
[0049] Ao determinar esses vetores de movimento, o codificador de vídeo 20 pode, em certos casos, escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados. Para ilustrar quando realizar um modo de fusão do processo de predição de vetor de movimento, o codificador de vídeo 20 pode determinar um vetor de movimento associado com o bloco vizinho temporal, onde esse bloco vizinho temporal se refere a um bloco de dados de vídeo co-localizados na mesma posição de um quadro de referência que o bloco atual de dados de vídeo. Esse quadro de referência pode ser associado com uma contagem de ordem de imagem, que se refere a um número atribuído a cada quadro dos dados de vídeo que identifica a ordem na qual o quadro deve ser exibido em relação aos outros quadros. Comumente, o codificador de vídeo 20 pode escalar o vetor de movimento candidato temporal com base na diferença na contagem de ordem de imagem entre o quadro de referência no qual reside o bloco co-localizado de dados de vídeo e o quadro atual no qual reside o bloco atual de dados de vídeo.
[0050] Como outro exemplo, ao realizar um modo de predição de vetor de movimento avançado (AMVP) do processo de predição de vetor de movimento, o codificador de vídeo 20 pode similarmente escalar o vetor de movimento candidato temporal com base na diferença em contagem de ordem de imagem entre o quadro de referência no qual reside o bloco co-localizado de dados de vídeo e o quadro atual no qual reside o bloco atual de dados de vídeo. Contudo, como observado acima, o modo AMVP do processo de predição de vetor de movimento permite que vários aspectos dos vetores de movimento candidatos sejam efetivamente anulados. Como um resultado, no modo AMVP do processo de predição de vetor de movimento, o codificador de vídeo 20 pode anular o quadro de referência associado com os vetores de movimento espacial, candidatos, que pode resultar na escalação de vetores de movimento espacial, candidatos com base na diferença em contagem de ordem de imagem entre o quadro de referência especificado (ou anular) e o quadro atual no qual reside o bloco atual de dados de vídeo. Consequentemente, o codificador de vídeo 20 pode escalar os dois vetores de movimento candidatos, temporal e espacial, ao realizar o modo AMVP do processo de predição de vetor de movimento.
[0051] O codificador de vídeo 20 pode então limitar a faixa em um ou mais dos vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada antes de selecionar um da pluralidade de vetores de movimento candidatos como o MVP para o bloco atual. Em outras palavras, o codificador de vídeo 20 pode modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada antes de selecionar um dos vetores de movimento candidatos como o MVP para o bloco atual. Ao modificar um ou mais dos vetores de movimento, candidatos, escalados antes de selecionar um dos vetores de movimento candidatos como o MVP para o bloco atual, o codificador de vídeo 20 pode modificar cada um dos vetores de movimento, candidatos, escalados para garantir que esses vetores de movimento, candidatos, escalados sejam limitados à faixa especificada (a qual também pode ser referida como “limites de deslocamento”). A faixa especificada, como um exemplo, é especificada como [-32768, 32767] em unidades de um quarto de pixel.
[0052] Após selecionar um dos vetores de movimento candidatos como o MVP para o bloco atual (e potencialmente modificar o vetor selecionado dentre os vetores de movimento candidatos), o codificador de vídeo 20 pode então codificar o bloco atual de dados de vídeo utilizando o MVP. Isto é, o codificador de vídeo 20 pode usar o MVP para identificar um bloco de referência em um quadro de referência e gerar um bloco residual de dados de vídeo como a diferença entre o bloco atual e o bloco de referência. O codificador de vídeo 20 pode então realizar as operações de transformada assinaladas acima para transformar esse bloco residual de dados de vídeo a partir do domínio espacial para o domínio de frequência, gerando um bloco de coeficientes de transformada. O codificador de vídeo 20 pode a seguir quantizar os coeficientes de transformada, codificar em comprimento de execução os coeficientes quantizados de transformada, e codificar por entropia (que é outra forma de se referir à codificação estatística sem perda) os coeficientes de transformada, quantizados codificados em comprimento de execução. O codificador de vídeo 20 pode emitir esses dados de vídeo codificados em um fluxo de bits com elementos de sintaxe associados.
[0053] O decodificador de vídeo 30 pode receber esse fluxo de bits e decodificar o fluxo de bits de acordo com os elementos de sintaxe. O decodificador de vídeo 30 pode realizar geralmente operações recíprocas àquelas descritas acima com relação ao codificador de vídeo 20. Isto é, o decodificador de vídeo 30 pode decodificar por entropia cada bloco de dados de vídeo codificado, realizar quantização inversa para quantizar inversamente o bloco de dados de vídeo codificado e aplicar uma transformada inversa para transformar o bloco quantizado inversamente de dados de vídeo codificado transformando o domínio de frequência em domínio espacial. Esse bloco transformado de dados de vídeo codificado pode representar uma versão reconstruída dos dados residuais. O decodificador de vídeo 30 pode determinar a partir dos elementos de sintaxe associados com o bloco atual de dados de vídeo codificado, qual nesse caso pode se referir à versão reconstruída dos dados residuais, que o vetor de movimento para esse bloco atual deve ser derivado utilizando o processo de predição de vetor de movimento.
[0054] Supondo que o decodificador de vídeo 30 determine que o vetor de movimento para esse bloco atual deve ser derivado utilizando o processo de predição de vetor de movimento, o decodificador de vídeo 30 pode então realizar geralmente as mesmas operações que aquelas descritas acima com relação ao codificador de vídeo 20 para derivar o preditor de vetor de movimento para o bloco atual de dados de vídeo codificado. Assim, o decodificador de vídeo 30 pode determinar uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar um processo de predição de vetor de movimento. Isto é, o decodificador de vídeo 30 pode identificar um ou mais blocos vizinhos do bloco atual de dados de vídeo. O decodificador de vídeo 30 pode identificar um ou mais blocos vizinhos espaciais e um ou mais blocos vizinhos temporais. Outra vez, a localização desses blocos vizinhos, espaciais e temporais com relação ao bloco atual é mostrada abaixo em detalhe com relação à Figura 6. Após identificar esses blocos vizinhos, o decodificador de vídeo 30 pode então determinar os vetores de movimento associados com cada um desses blocos vizinhos, onde os vetores de movimento podem representar vetores de movimento candidatos para o processo de predição de vetor de movimento.
[0055] Ao determinar esses vetores de movimento, o decodificador de vídeo 30 pode, nos casos descritos acima com relação ao codificador de vídeo 20, escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados. O decodificador de vídeo 30 pode então restringir a faixa em um ou mais dos vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada antes de selecionar um da pluralidade de vetores de movimento candidatos como o MVP para o bloco atual. Em outras palavras, o decodificador de vídeo 30 pode modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada antes de selecionar um dos vetores de movimento, candidatos como o MVP para o bloco atual. Ao modificar um ou mais dos vetores de movimento, candidatos, escalados antes de selecionar um dos vetores de movimento candidatos como o MVP para o bloco atual, o decodificador de vídeo 30 pode modificar cada um dos vetores de movimento, candidatos, escalados para garantir que esses vetores de movimento, candidatos, escalados sejam limitados à faixa especificada (a qual também pode ser referida como “limites de deslocamento”). Desse modo, o decodificador de vídeo 30 pode modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada.
[0056] O decodificador de vídeo 30 pode determinar qual dos vetores de movimento candidatos selecionar com base em um ou mais elementos de sintaxe (tal como um elemento de sintaxe de índice de preditor de vetor de movimento (“mvp_idx”) associados com o bloco atual de dados de vídeo (que foram previamente especificados pelo codificador de vídeo 20 no fluxo de bits). O decodificador de vídeo 30, utilizando esse elemento de sintaxe mvp_idx, por exemplo, pode selecionar um dos vetores de movimento candidatos. O decodificador de vídeo 30 pode então reconstruir o bloco atual de dados de vídeo utilizando o vetor de movimento candidato para identificar um bloco de referência de dados de vídeo, cujo decodificador de vídeo 30 então adiciona aos dados residuais para reconstruir o bloco atual de dados de vídeo. O decodificador de vídeo 30 então armazena esse bloco reconstruído de dados de vídeo.
[0057] Dessa maneira, as técnicas descritas nessa revelação podem geralmente possibilitar que os codificadores de vídeo (qualquer um ou os dois, por exemplo, codificador de vídeo 20 e decodificador de vídeo 30) modifiquem esses vetores de movimento candidatos que foram escalados. Isto é, as técnicas podem possibilitar que tais codificadores de vídeo modifiquem apenas aqueles vetores de movimento candidatos de um processo de predição de vetor de movimento a ser escalado sem modificar ou de outro modo sem considerar adicionalmente aqueles vetores de movimento candidatos que não foram escalados. A esse respeito, as técnicas podem prover um compromisso entre modificar todos os vetores de movimento candidatos e modificar nenhum dos vetores de movimento candidatos de tal modo que apenas aqueles vetores de movimento candidatos que foram escalados sejam considerados para modificação.
[0058] As técnicas para limitar o deslocamento de componentes de vetor de movimento descritas com relação aos exemplos dessa revelação podem ser aplicadas na codificação de vídeo em suporte de qualquer uma ou de uma variedade de aplicações de multimídia, tal como transmissões de televisão aberta, transmissões de televisão a cabo, transmissões de televisão por satélite, transmissões de vídeo de fluxo contínuo, por exemplo, por intermédio da Internet, codificação de vídeo digital para armazenamento 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. Em alguns exemplos, o sistema 10 pode ser configurado para suportar a transmissão de vídeo em sentido único ou em dois sentidos para aplicações tais como fluxo contínuo de vídeo, reprodução de vídeo, transmissão de vídeo, e/ou telefonia de vídeo.
[0059] Embora não mostrado na figura 1, em alguns aspectos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser individualmente integrados com um codificador e decodificador de áudio, e podem incluir unidades apropriadas MUX-DEMUX, ou outro hardware e software, para lidar com a codificação de áudio e vídeo em um fluxo de dados comum ou fluxos de dados separados. Se for o caso, as unidades MUX-DEMUX podem estar de acordo com o protocolo multiplexador ITU H.223, ou outros protocolos, como o Protocolo de Datagrama de Usuário (UDP).
[0060] O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser individualmente implementados como qualquer um de uma variedade de circuitos de codificador adequado, tal como um ou mais processadores, incluindo os microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados de aplicação específica (ASICs), conjunto de porta programável no campo (FPGAs), lógica discreta, software, hardware, firmware ou qualquer combinação desses. Quando as técnicas são aplicadas parcialmente em software, um dispositivo pode armazenar instruções de software num meio de leitura por computador adequado, não transitório e executar as instruções em hardware utilizando um ou mais processadores para executar as técnicas desta revelação. Cada codificador de vídeo 20 e decodificador de vídeo 30 pode ser incluído em um ou mais transdutores ou decodificadores, cada um dos quais pode ser integrado como parte de um codificador/decodificador combinada (CODEC) num respectivo dispositivo.
[0061] A Figura 2 é um diagrama de blocos ilustrando um exemplo de codificador de vídeo 20 que pode implementar técnicas para especificar preditores de vetor de movimento. O codificador de vídeo 20 pode realizar codificação, intra e codificação inter, de blocos dentro de quadros de vídeo, incluindo macroblocos, ou partições ou sub-partições de macroblocos. Codificação intra se baseia em predição espacial para reduzir ou remover a redundância espacial em vídeo dentro de um determinado quadro de vídeo. A codificação inter se baseia em predição temporal para reduzir ou remover a redundância temporal em vídeo dentro de quadros adjacentes de uma sequência de vídeo. O modo intra (modo-I) pode se referir a qualquer um de vários modos de compactação de base espacial e modos inter tal como predição unidirecional (modo-P) ou predição bidirecional (modo-B) pode se referir a qualquer um dos vários modos de compactação de base temporal. Embora os componentes para codificação de modo inter sejam ilustrados na Figura 2, deve ser entendido que o codificador de vídeo 20 pode adicionalmente incluir componentes para codificação de modo intra. Contudo, tais componentes não são ilustrados com o propósito de brevidade e clareza.
[0062] Conforme mostrado na Figura 2, o codificador de vídeo 20 recebe um bloco de vídeo atual dentro de um quadro de vídeo a ser codificado. No exemplo da Figura 2, o codificador de vídeo 20 inclui unidade de compensação de movimento 44, unidade de estimação de movimento 42, memória 64, somador 50, unidade de transformada 52, unidade de quantização 54, e unidade de codificação de entropia 56. Para reconstrução de bloco de vídeo, o codificador de vídeo 20 também inclui unidade de quantização inversa 58, unidade de transformada inversa 60 e somador 62. Um filtro de desblocagem (não mostrado na Figura 2) também pode ser incluído para filtrar limites de bloco para remover artefatos de blocagem a partir do vídeo reconstruído. Se desejado, o filtro de desblocagem tipicamente filtraria a saída do somador 62. Embora descrito como incluindo memória 64, que geralmente se refere à memória de acesso aleatório (RAM), RAM dinâmica (DRAM), RAM estática (SRAM), memória Flash ou outro meio de armazenamento baseado em chip, persistente ou não persistente, qualquer tipo de meio legível por computador não transitório pode ser utilizado, incluindo unidades de disco rígido, unidades óticas, unidades de disco, e semelhantes.
[0063] Durante o processo de codificação, o codificador de vídeo 20 recebe um quadro de vídeo ou fatia a ser codificada. O quadro ou fatia pode ser dividido em múltiplos blocos de vídeo. A unidade de estimação de movimento 42 e a unidade de compensação de movimento 44 realizam codificação inter preditiva do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para prover compactação temporal. A unidade de predição intra 46 também pode realizar codificação preditiva intra do bloco de vídeo recebido em relação a um ou mais blocos vizinhos no mesmo quadro ou fatia que o bloco a ser codificado para prover compactação espacial.
[0064] Conforme mostrado ainda no exemplo da Figura 2, o codificador de vídeo 20 também inclui uma unidade de seleção de modo 40. A unidade de seleção de modo 40 pode selecionar um dos modos de codificação, intra ou inter, por exemplo, com base em resultados de erro, e prover o bloco codificado intra ou inter resultante ao somador 50 para gerar os dados de blocos residuais e ao somador 62 para reconstruir o bloco codificado para uso como um quadro de referência.
[0065] A unidade de estimação de movimento 42 e a unidade de compensação de movimento 44 podem ser altamente integradas, mas são ilustradas separadamente para propósitos conceptuais. A estimação do movimento é o processo de gerar vetores de movimento, os quais estimam movimento para os blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de um bloco preditivo dentro de um quadro de referência preditivo (ou outra unidade codificada) em relação ao bloco atual sendo codificado dentro do quadro atual (ou outra unidade codificada). Um bloco preditivo é um bloco que é considerado como combinando estreitamente com o bloco a ser codificado, em termos de diferença de pixel, que pode ser determinado pela soma de diferença absoluta (SAD); soma de diferença ao quadrado (SSD); ou outra métrica de diferença. Um vetor de movimento também pode indicar o deslocamento de uma partição de um macro bloco. A compensação de movimento pode envolver buscar ou gerar o bloco preditivo com base no vetor de movimento determinado pela estimação de movimento. Outra vez, a unidade de estimação de movimento 42 e a unidade de compensação de movimento 44 podem ser funcionalmente integradas, em alguns exemplos.
[0066] A unidade de estimação de movimento 42 calcula um vetor de movimento para o bloco de vídeo de um quadro codificado inter mediante comparação do bloco de vídeo com os blocos de vídeo de um quadro de referência na memória 64. A unidade de compensação de movimento 44 também pode interpolar pixels de sub-inteiro do quadro de referência, por exemplo, um quadro-I ou um quadro-P. O padrão HEVC emergente (e o padrão ITU H.264) armazena os quadros de referência por intermédio de uma ou mais estruturas de dados de lista, que são referidas comumente como “listas”. Portanto, os dados armazenados na memória 64 também podem ser considerados como listas. A unidade de estimação de movimento 42 compara os blocos de um ou mais quadros de referência (ou listas) a partir da memória 64 com um bloco a ser codificado de um quadro atual, por exemplo, um quadro-P ou um quadro-B. Quando os quadros de referência na memória 64 incluem valores para pixels de sub-inteiro, um vetor de movimento calculado pela unidade de estimação de movimento 42 pode se referir a um local de pixel de sub-inteiro de um quadro de referência. A unidade de estimação de movimento 42 envia o vetor de movimento calculado para a unidade de codificação de entropia 56 e unidade de compensação de movimento 44. O bloco de quadro de referência (o qual pode compreender uma CU) identificado por um vetor de movimento pode ser referido como um bloco preditivo. A unidade de compensação de movimento 44 calcula os valores de erro para o bloco preditivo do quadro de referência.
[0067] A unidade de compensação de movimento 44 pode calcular os dados de predição com base no bloco preditivo. O codificador de vídeo 20 forma um bloco de vídeo residual mediante subtração dos dados de predição a partir da unidade de compensação de movimento 44 a partir do bloco de vídeo original sendo codificado. O somador 50 representa o componente, ou componentes, que realizam essa operação de subtração. A unidade de transformada 52 aplica uma transformada, tal como uma transformada discreta de cosseno (DCT) ou uma transformada similar de modo conceptual ao bloco residual produzindo um bloco de vídeo compreendendo valores de coeficientes de transformada residual. A unidade de transformada 52 pode realizar outras transformadas, tais como aquelas definidas pelo padrão H.264, que são similares de modo conceptual ao DCT. Transformadas de ondaleta, transformadas de inteiros, transformadas de sub-banda ou outros tipos de transformadas também poderiam ser usados. Em todo caso, a unidade de transformada 52 aplica a transformada ao bloco residual, produzindo um bloco de coeficientes de transformada residual. A transformada pode converter a informação residual a partir de um domínio de valor de pixel para um domínio de transformada, tal como um domínio de frequência. A unidade de quantização 54 quantiza os coeficientes de transformada residual para reduzir adicionalmente a taxa de bits. O processo de quantização pode reduzir a profundidade de bits associada com alguns ou todos os coeficientes. O grau de quantização pode ser modificado mediante ajuste de um parâmetro de quantização.
[0068] Após a quantização, a unidade de codificação de entropia 56 codifica por entropia os coeficientes de transformada quantizados. Por exemplo, a unidade de codificação de entropia 56 pode realizar codificação de comprimento variável de conteúdo adaptativo (CAVLC), codificação aritmética binária de contexto adaptativo (CABAC), ou outra técnica de codificação de entropia. Após a codificação de entropia por intermédio da unidade de codificação de entropia 56, o vídeo codificado pode ser transmitido para outros dispositivos ou arquivado para posterior transmissão ou recuperação. No caso de codificação aritmética binária de contexto adaptativo, o contexto pode se basear em macroblocos vizinhos.
[0069] Em alguns casos, a unidade de codificação de entropia 56 ou outra unidade de codificação de vídeo 20 pode ser configurada para realizar outras funções de codificação, além de codificação de entropia. Por exemplo, a unidade de codificação de entropia 56 pode ser configurada para determinar os valores CBP para os macro blocos e partições. Além disso, em alguns casos, a unidade de codificação de entropia 56 pode realizar codificação de extensão de execução dos coeficientes em um seu macro bloco ou partição. Especificamente, a unidade de codificação de entropia 56 pode aplicar uma varredura em ziguezague ou outro padrão de varredura para realizar a varredura dos coeficientes de transformada em um macro bloco ou partição e codificar séries de zeros para compactação adicional. A unidade de codificação de entropia 56 também pode construir informação de cabeçalho com elementos de sintaxe apropriados para transmissão no fluxo de bits de vídeo codificado.
[0070] A unidade de quantização inversa 58 e a unidade de transformada inversa 60 aplicam quantização inversa e transformação inversa, respectivamente, para reconstruir o bloco residual no domínio de pixel, por exemplo, para posterior uso como um bloco de referência. A unidade de compensação de movimento 44 pode calcular um bloco de referência mediante adição do bloco residual a um bloco preditivo de um dos quadros de um armazenamento de quadro de referência na memória 64. A unidade de compensação de movimento 44 também pode aplicar um ou mais filtros de interpolação ao bloco residual reconstruído para calcular valores de pixel de sub-inteiro para uso em estimação de movimento. O somador 62 adiciona o bloco residual reconstruído ao bloco de predição de movimento compensado produzido pela unidade de compensação de movimento 44 para produzir um bloco de vídeo reconstruído para armazenamento no meio de armazenamento de quadro de referência da memória 64. O bloco de vídeo reconstruído pode ser usado pela unidade de estimação de movimento 42 e pela unidade de compensação de movimento 44 como um bloco de referência para codificação inter de um bloco em um quadro de vídeo subsequente.
[0071] Conforme observado acima, a unidade de estimação de movimento 42 pode, em alguns casos, não calcular um vetor de movimento, mas em vez disso determinar uma lista de vetores de movimento candidatos (por exemplo, uma assim chamada “lista de candidatos”), quatro dos quais são vetores de movimento espacial, candidatos e um dos quais é um vetor de movimento candidato temporal. Tipicamente, a unidade de estimação de movimento 42 abandona o cálculo de vetor de movimento para reduzir a complexidade de computação da estimação de movimento e desse modo aperfeiçoar a velocidade na qual os dados de vídeo podem ser codificados enquanto também reduzindo o consumo de energia.
[0072] De acordo com as técnicas descritas nessa revelação, a unidade de estimação de movimento 42 pode determinar uma pluralidade de vetores de movimento candidatos para um bloco atual dos dados de vídeo de modo a realizar um processo de predição de vetor de movimento e escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados. Como observado acima, esse processo de escalação pode se basear em uma diferença entre contagens de ordem de imagem para um quadro de referência e um quadro atual. Mais especificamente, a unidade de estimação de movimento 42 pode determinar um assim chamado fator de escala de distância (o qual pode ser representado em HEVC como uma variável “DistScaleFactor”) quando um preditor de vetor de movimento é derivado a partir de um vetor de movimento candidato apontando para um quadro ou imagem de referência diferente.
[0073] Nesse processo de escalação de vetor de movimento, a unidade de estimação de movimento 42 pode computar o DistScaleFactor, o qual pode ser definido pela seguinte equação (1):
Figure img0001
Na equação (1), POC se refere à contagem de ordem de imagem, onde POCcurr denota a contagem de ordem de imagem para a imagem ou quadro atual, POCref se refere à contagem de ordem de imagem do quadro ou imagem de referência, POCmvp_blk denota a contagem de ordem de imagem do quadro ou imagem na qual o bloco vizinho ou candidato tendo o vetor selecionado dentre os vetores de movimento candidatos (ou, em outras palavras, o MVP) reside e POCmvp_blk_ref denota a contagem de ordem de imagem da imagem ou quadro no qual reside o bloco de referência para o qual aponta o MVP. A variável “td” na equação (1), portanto representa a diferença de contagem de ordem de imagem (ou, em outras palavras, distância) entre o bloco MVP_BLK e seu bloco de referência, enquanto que a variável “tb” na equação (1) representa a distância POC entre o bloco atual e seu bloco de referência.
[0074] A unidade de estimação de movimento 42 pode computar ainda um fator de escalação, denotado como “tx”, de acordo com a seguinte equação (2):
Figure img0002
A unidade de estimação de movimento 42 pode então computar o DistScaleFactor de acordo com a seguinte equação (3):
Figure img0003
DistanceScaleFactor pode, portanto ser computado como uma função de tb e tx, mas cortado para estar dentro de uma faixa especificada de -4096 e 4095. Utilizando esse DistScaleFactor, a unidade de estimação de movimento 42 pode escalar um ou mais dos vetores de movimento candidatos de acordo com a seguinte equação (4):
Figure img0004
Na equação (4), ScaledMV denota um vetor de movimento candidato escalado, “sinal” se refere a uma função que mantém os sinais, “abs” se refere a uma função que computa o valor absoluto do valor e “>>” denota deslocamento à direita no sentido dos bits.
[0075] Conforme observado acima, o ScaledMV baseado em distâncias POC pode exceder a faixa especificada (a qual pode ser referida como uma “faixa de vetor de movimento” ou, alternativamente, “faixa), que pode ser definida de acordo com um perfil ou nível de codificação de vídeo. Como um resultado, a unidade de estimação de movimento 42 pode realizar as técnicas descritas nessa revelação para modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada. Além disso, a unidade de estimação de movimento 42 pode modificar os vetores de movimento, candidatos, escalados sem modificar quaisquer dos outros vetores de movimento candidatos que não foram escalados.
[0076] A unidade de estimação de movimento 42 pode modificar os vetores de movimento, candidatos, escalados em um número de formas. Por exemplo, a unidade de estimação de movimento 42 pode cortar um componente vertical do vetor de movimento candidato escalado para permanecer dentro dos limites da faixa de vetores de movimento. Em outras palavras, a unidade de estimação de movimento 42 pode efetivamente limitar o valor de vetor de movimento vertical para a faixa de componentes de vetor de movimento vertical máxima/mínima.
[0077] Como outro exemplo, a unidade de estimação de movimento 42 pode escalar o vetor de movimento, candidato, escalado para permanecer dentro dos limites da faixa de vetor de movimento. Para ilustrar, para um determinado vetor de movimento escalado tendo um componente horizontal (mv_x) e um componente vertical (mv_y) que cede a faixa especificada dos limites de vetor de movimento vertical, a unidade de estimação de movimento 42 pode limitar os componentes y a mv_y’, que corresponde ao limite mv vertical. A unidade de estimação de movimento 42 também pode escalar o componente horizontal, mv_x de acordo com a seguinte equação (5):
Figure img0005
Na equação (5), mv_x’ denota o componente horizontal escalado do vetor de movimento candidato escalado. A unidade de estimação de movimento 42 pode realizar essa operação de escalação expressa como equação (5) em vários níveis de exatidão utilizando aproximações da operação de divisão para produzir um vetor de movimento escalado modificado tendo potencialmente ambos, um componente horizontal modificado, mv_x’, e um componente vertical modificado, mv_y’.
[0078] Embora descrito acima com relação a um número de formas diferentes através das quais SE modifica um ou mais dos vetores de movimento escalados, as técnicas podem ser realizadas em um número de modos para modificar os vetores de movimento candidatos ao realizar um processo de predição de vetor de movimento. Por exemplo, a unidade de estimação de movimento 42 pode cortar os vetores de movimento, candidatos, escalados antes de selecionar um da pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo.
[0079] Ainda como outro exemplo, a unidade de estimação de movimento 42 pode cortar um componente vertical dos vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada vertical e cortar um componente horizontal dos vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada horizontal. Nesses casos, as operações de corte podem estar de acordo com a seguinte equação (6):
Figure img0006
Na equação (6), a equação de corte inclui a equação de escalação mostrada acima como equação (4), cortando um, ou os dois componentes, horizontal e vertical, do vetor de movimento escalado para uma faixa especificada de -32768 a 32767. O vetor de movimento escalado é denotado na equação (6) como “mvLXA”. Em outras palavras, a faixa especificada pode ser especificada como [-32768, 32767] em unidades de um quarto de pixel, onde essa faixa especificada pode, em alguns casos, ser fixada e codificada de forma permanente em um ou mais de um decodificador de vídeo e um codificador de vídeo.
[0080] Em alguns casos, a faixa especificada pode especificar, conforme observado acima, um limite de deslocamento de vetor de movimento que inclui um limite de deslocamento vertical, onde a unidade de estimação de movimento 42 pode cortar um componente vertical dos vetores de movimento, candidatos, escalados de tal modo que o componente vertical dos vetores de movimento, candidatos, escalados esteja dentro do limite de deslocamento vertical.
[0081] Em alguns casos, mais propriamente do que cortar os dois componentes, horizontal e vertical, a unidade de estimação de movimento 42 pode cortar apenas o componente horizontal do vetor de movimento candidato escalado. Outra vez, a faixa especificada pode especificar um limite de deslocamento de vetor de movimento que inclui um limite de deslocamento horizontal, e a unidade de estimação de movimento 42 pode cortar um componente horizontal dos vetores de movimento, candidatos, escalados de tal modo que o componente horizontal dos vetores de movimento, candidatos, escalados esteja dentro do limite de deslocamento horizontal. Conforme observado acima, a unidade de estimação de movimento 42 pode cortar um dos componentes, horizontal ou vertical, e então escalar o outro componente não cortado (o qual pode ser o componente vertical e não deve ser limitado ao exemplo acima) de tal modo que os vetores de movimento, candidatos, escalados são limitados por um ou mais limites de deslocamento de vetor de movimento. Consequentemente, as técnicas não devem ser limitadas a qualquer uma das modificações exemplares descritas acima.
[0082] Para selecionar um dos vetores de movimento candidatos como o preditor de vetor de movimento, a unidade de compensação de movimento 44 pode então identificar um bloco de quadros de referência (o qual, outra vez, pode ser referido como um bloco de predição) para cada um dos vetores de movimento candidatos incluídos na lista. A unidade de compensação de movimento 44 pode então calcular os dados de predição com base no bloco preditivo determinado para cada um dos vetores de movimento candidatos. O codificador de vídeo 20 pode então determinar os dados residuais para cada um dos dados de predição computados para um vetor correspondente dos vetores de movimento candidatos; transformar os dados residuais; quantizar os dados residuais transcodificados e, então, codificar por entropia os dados residuais quantizados na forma descrita acima. O codificador de vídeo 20 pode então realizar operações inversas para decodificar esses dados residuais codificados por entropia gerados com relação a cada um dos vetores de movimento candidatos permanecendo após o corte para reproduzir os dados de referência na forma de blocos de vídeo reconstruídos. A unidade de seleção de modo 40 pode analisar cada um dos blocos de vídeo reconstruídos gerados com relação a cada um dos vetores de movimento candidatos para selecionar um dos vetores de movimento candidatos. A unidade de seleção de modo 40 pode selecionar um dos vetores de movimento candidatos que proporciona a melhor relação de taxa/distorção através de um processo comumente referido como “otimização de taxa/distorção”, que é tipicamente abreviado como “RDO”.
[0083] RDO geralmente envolve comparar um quadro, fatia ou bloco reconstruído, compactado para obter certa taxa (a qual geralmente se refere a uma taxa de bits na qual os dados de vídeo compactados que incluem o quadro, a fatia ou bloco compactado podem ser enviadas) com o quadro, fatia ou bloco original e determinar uma quantidade de distorção entre o quadro, fatia ou bloco original e o quadro, fatia ou bloco reconstruído na taxa determinada. A unidade de seleção de modo 40 pode codificar os mesmos dados de vídeo utilizando diferentes métricas múltiplas que obtêm ou tentam obter uma determinada taxa, realizando o processo de otimização de distorção com relação a essas várias métricas. Nesse caso, a unidade de seleção de modo 40 pode comparar a saída RD de cada bloco de vídeo reconstruído e selecionar aquela que proporciona a menor distorção na taxa alvo.
[0084] A unidade de seleção de modo 40 pode então indicar essa seleção para a unidade de estimação de movimento 42, que prossegue para estabelecer interface com a unidade de codificação de entropia 56 para informar a unidade de codificação de entropia 56 sobre a seleção. Tipicamente, a unidade de estimação de movimento 42 estabelece interface com a unidade de codificação de entropia 56 para indicar que a predição de vetor de movimento foi realizada conjuntamente com o índice identificando o vetor de movimento, candidato, selecionado. Conforme observado acima, a unidade de estimação de movimento 42 pode arranjar os vetores de movimento candidatos de uma maneira definida, tal como por intermédio da mais alta amplitude para a mais baixa amplitude ou mais baixa amplitude para mais alta amplitude ou em qualquer outra forma definida. Alternativamente, a unidade de estimação de movimento 42 também pode sinalizar para a unidade de codificação de entropia 56 uma forma através da qual os vetores de movimento candidatos foram arranjados nessa lista de candidatos. A unidade de codificação de entropia 56 pode então codificar esse índice conjuntamente com qualquer outra informação que possa ser necessária para indicar que o processo de predição de vetor de movimento foi realizado para codificar os dados de movimento. A unidade de codificação de entropia 56 pode produzir o índice codificado como um elemento de sintaxe (o qual pode ser denotado como “mvp_idx”) em um fluxo de bits, o qual pode ser armazenado ou transmitido da maneira descrita acima com relação ao exemplo da Figura 1. Dessa maneira, o codificador de vídeo 20 pode selecionar um da pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo e codificar o bloco atual dos dados de vídeo com base no preditor de vetor de movimento.
[0085] Em alguns casos, a unidade de codificação de entropia 56 realiza uma forma de codificação de entropia referida como codificação aritmética binária de contexto adaptativo (CABAC). Na realização de CABAC, a unidade de codificação de entropia 56 pode selecionar um de uma pluralidade dos assim chamados contextos (os quais são tabelas de códigos diferentes especificadas para contexto diferente de modo a compactar mais eficientemente os dados associados com o contexto correspondente) e codificar os dados residuais compactados de acordo com a tabela de códigos definida para o contexto selecionado. A unidade de codificação de entropia 56 pode selecionar um dos contextos com base na informação de contexto, que pode incluir o índice de referência determinado ao realizar predição de vetor de movimento, o número de candidatos de vetor de movimento singulares e a direção de predição determinada ao realizar a predição de vetor de movimento.
[0086] A figura 3 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo 30, que decodifica uma sequência de vídeo codificado. No exemplo da figura 3, decodificador de vídeo 30 inclui uma unidade de decodificação de entropia 70, uma unidade de compensação de movimento 72, uma unidade predição intra 74, uma unidade de quantização inversa 76, uma unidade de transformada inversa 78, um armazenador de imagem de referência 82 e um somador 80. O decodificador de vídeo 30 pode, em alguns exemplos, realizar uma passagem de decodificação geralmente recíproca à passagem de codificação descrita com relação a um codificador de vídeo, tal como o codificador de vídeo 20 mostrado nos exemplos da Figura 1 e 2. Embora geralmente recíproco, o decodificador de vídeo 30 pode, em alguns casos, realizar técnicas similares àquelas realizadas pelo codificador de vídeo 20. Em outras palavras, o decodificador de vídeo 30 pode realizar processos substancialmente similares àqueles realizados pelo codificador de vídeo 20. Além disso, conforme descrito acima, o codificador de vídeo 20 pode realizar a decodificação de vídeo no processo de realizar a codificação de vídeo. Para ilustrar, a unidade de quantização inversa 58, a unidade de transformada inversa 60, e o somador 62 do codificador de vídeo 20 podem realizar operações substancialmente similares à unidade de quantização inversa 76, unidade de transformada inversa 78 e somador 80 do decodificador de vídeo 30.
[0087] Conforme mostrado no exemplo da Figura 3, a unidade de decodificação de entropia 70 recebe um fluxo de bits codificado, o qual com o propósito de ilustração supostamente inclui um índice codificado unário ou truncado unário identificando um vetor de movimento candidato selecionado (onde, outra vez, esses vetores de movimento candidatos podem ser referidos como vetores de movimento candidatos ou preditores de vetores de movimento candidatos (“MVPs candidatos”)). A unidade de decodificação de entropia 70 pode, na realização de um processo geralmente recíproco à unidade de codificação de entropia 56 do codificador de vídeo 20, receber um elemento de sintaxe ou outros dados de codificação para a PU atual indicando que um processo de predição de vetor de movimento foi realizado para determinar um vetor de movimento para a PU atual. Em resposta a esse elemento de sintaxe ou outros dados de codificação, a unidade de decodificação de entropia 70 analisa o índice de preditor de vetor de movimento (mvp_idx) a partir do fluxo de bits, provendo esse índice de preditor de vetor de movimento à unidade de compensação de movimento 72. A unidade de decodificação de entropia 70 também decodifica o bloco codificado de dados de vídeo ao qual esse índice de preditor de vetor de movimento é associada, fornecendo esse bloco codificado de dados de vídeo à unidade de quantização inversa 76.
[0088] A unidade de compensação de movimento 72 recupera os vetores de movimento espacial, candidatos para as PUs adjacentes à PU atual e um vetor de movimento candidato temporal para uma PU co-localizada no quadro de referência. A unidade de decodificação de entropia 70 também pode prover a unidade de compensação de movimento 72 com o quadro de referência identificado para a PU atual (tipicamente como outro elemento de sintaxe no fluxo de bits). Alternativamente, a unidade de compensação de movimento 72 pode ser configurada com relação ao modo de fusão ou AMVP para recuperar o vetor de movimento candidato temporal a partir de um quadro de referência identificado de uma maneira definida (por exemplo, tal como um, dois ou qualquer outro número para frente ou para trás a partir do quadro atual no qual a PU atual está localizada).
[0089] A unidade de compensação de movimento 72 pode então construir a lista de candidatos que inclui os quatro vetores de movimento espacial, candidatos e o vetor de movimento candidato temporal. Ao gerar essa lista de candidatos, a unidade de compensação de movimento 72 pode escalar um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento, candidatos, escalados. Como observado acima, esse processo de escalação pode se basear em uma diferença entre contagens de ordem de imagem para o quadro de referência e atual. Além disso, o vetor de movimento escalado com base nas distâncias POC pode exceder a faixa especificada (a qual pode ser referida como uma “faixa de vetor de movimento”), a qual pode ser definida de acordo com um perfil ou nível de codificação de vídeo. Como resultado, a unidade de compensação de movimento 72 pode realizar as técnicas descritas nessa revelação para modificar os vetores de movimento, candidatos, escalados para estar dentro de uma faixa especificada. Além disso, a unidade de compensação de movimento 72 pode modificar os vetores de movimento, candidatos, escalados sem modificar quaisquer dos outros vetores de movimento candidatos que não foram escalados.
[0090] A unidade de compensação de movimento 72 pode modificar os vetores de movimento, candidatos, escalados em qualquer número de formas descritas acima com relação à unidade de estimação de movimento 42 do codificador de vídeo 20 mostrado nos exemplos das Figuras 1, 2. Por exemplo, a unidade de compensação de movimento 72 pode cortar um componente vertical do vetor de movimento candidato escalado para permanecer dentro dos limites da faixa de vetores de movimento. Em outras palavras, a unidade de compensação de movimento 72 pode efetivamente limitar o valor de vetor de movimento vertical para a faixa de componentes de vetor de movimento vertical, máxima/mínima. A unidade de compensação de movimento 72 também pode cortar um componente horizontal do vetor de movimento candidato escalado para permanecer dentro dos limites da faixa de vetor de movimento. Em outras palavras, a unidade de compensação de movimento 72 pode efetivamente limitar o valor de vetor de movimento horizontal à faixa de componentes de vetores de movimento horizontal, máxima/mínima.
[0091] Como outro exemplo, a unidade de compensação de movimento 72 pode escalar o vetor de movimento, candidato, escalado para permanecer dentro dos limites da faixa de vetores de movimento. Para ilustrar, para um determinado vetor de movimento escalado tendo um componente horizontal (mv_y) e um componente vertical (mv_x) que excede a faixa especificada dos limites de vetor de movimento vertical, a unidade de compensação de movimento 72 pode limitar os componentes y a mv_y’, que corresponde ao limite mv vertical.
[0092] Em todo caso, após formar essa lista de candidatos, a unidade de compensação de movimento 72 seleciona então um dos vetores de movimento candidatos a partir da lista de candidatos identificada pelo índice de preditor de vetor de movimento. Para um bloco codificado inter, a unidade de compensação de movimento 72 pode então gerar dados de predição inter com base no vetor de movimento identificado. A unidade de compensação de movimento 72 pode usar esse vetor de movimento para identificar um bloco de predição nos quadros de referência armazenados na memória 82. Para os blocos codificados intra, a unidade de predição intra 74 pode usar os modos de predição intra recebidos no fluxo de bits para formar um bloco de predição a partir dos blocos espacialmente adjacentes. A unidade de quantização inversa 76 quantiza inversamente, isto é, quantiza inversamente os coeficientes de blocos quantizados providos no fluxo de bits e decodificados pela unidade de decodificação de entropia 70. O processo de quantização inversa pode incluir um processo convencional, por exemplo, conforme definido pelo padrão de decodificação H.264. O processo de quantização inversa também pode incluir o uso de um parâmetro de quantização QPg calculado pelo somador 50 para cada macro bloco para determinar um grau de quantização e, similarmente, um grau de quantização inversa que deve ser aplicado.
[0093] A unidade de transformada inversa 60 aplica uma transformada inversa, por exemplo, um DCT inverso, uma transformada de inteiro inversa ou um processo de transformada inversa similar de forma conceptual, aos coeficientes de transformada para produzir blocos residuais no domínio de pixel. A unidade de compensação de movimento 72 produz blocos de movimento compensado, possivelmente realizando interpolação com base nos filtros de interpolação. Identificadores para os filtros de interpolação a serem usados para estimação de movimento com exatidão de subpixel podem ser incluídos nos elementos de sintaxe. A unidade de compensação de movimento 72 pode usar filtros de interpolação como usados pelo codificador de vídeo 20 durante a codificação do bloco de vídeo para calcular os valores interpolados para pixels de sub-inteiro de um bloco de referência. A unidade de compensação de movimento 72 pode determinar os filtros de interpolação suados pelo codificador de vídeo 20 de acordo com a informação de sintaxe recebida e usar os filtros de interpolação para produzir blocos preditivos.
[0094] A unidade de compensação de movimento 72 utiliza alguma da informação de sintaxe para determinar os tamanhos das CUs usadas para codificar quadro(s) da sequência de vídeo codificado, informação de partição que descreve como cada CU de um quadro da sequência de vídeo codificada é dividida, modos indicando como cada CU é codificada, um ou mais quadros de referência (ou listas) para cada CU codificada inter, e outra informação para decodificar a sequência de vídeo codificado.
[0095] O somador 80 combina os blocos residuais com os blocos de predição correspondentes gerados pela unidade de compensação de movimento 72 ou pela unidade de predição intra 74 para formar blocos decodificados. Se desejado, um filtro de desblocagem também pode ser aplicado para filtrar os blocos decodificados para remover os artefatos de blocagem. Os blocos de vídeo decodificado são então armazenados no armazenador de quadros de referência 82, que proporciona blocos de referência para compensação de movimento subsequente e também produz vídeo decodificado para apresentação em um dispositivo de exibição (tal como o dispositivo de exibição 32 da Figura 1).
[0096] Em alguns casos, o vetor de movimento candidato temporal pode não estar disponível, tal como quando uma fatia que especifica o vetor de movimento candidato temporal é perdida, isto é, não recuperada ou recebida no fluxo de bits codificado como um exemplo. Quando esse vetor de movimento candidato temporal não está disponível, a unidade de compensação de movimento 72 pode estabelecer esse vetor de movimento candidato temporal em um valor padrão ou de outro modo determinar informação de vetor de movimento padrão para esse vetor de movimento candidato temporal. Em alguns casos, essa informação de vetor de movimento padrão para o vetor de movimento candidato temporal pode ser reconstruído dependendo de se o quadro de referência foi codificado intra. Quando o quadro de referência é determinado como sendo codificado intra, a unidade de compensação de movimento 72 pode derivar a informação de vetor de movimento padrão para um vetor de movimento candidato padrão com base nos vetores de movimento espaciais determinados para a porção do quadro de referência co-localizado no mesmo local do quadro de referência que a porção atual no quadro atual. Similarmente, um ou mais dos vetores de movimento candidatos, espaciais temporalmente preditos podem estar indisponíveis ou perdidos e podem derivar a informação de vetor de movimento padrão para um vetor de movimento candidato padrão com base nos vetores de movimento espacial determinados para a porção do quadro de referência co- localizado no mesmo local do quadro de referência que a porção atual no quadro atual.
[0097] Como observado acima, há dois tipos de predição de vetor de movimento: modo de fusão e AMVP. Para o modo de fusão, a unidade de compensação de movimento 72 determina a amplitude de vetor de movimento, direção de predição e índice de referência ao determinar a informação de movimento padrão. Para AMVP, a unidade de compensação de movimento 72 determina uma amplitude de vetor de movimento, mas não precisa determinar a direção de predição e o índice de referência uma vez que esses são sinalizados separadamente no fluxo de bits para a PU atual. Assim, a unidade de compensação de movimento 72 pode basear a determinação da informação de movimento padrão com base no modo sinalizado para realizar predição de vetor de movimento, isto é, se o tipo de predição de vetor de movimento sinalizado é o modo de fusão ou AMVP para a PU atual.
[0098] A Figura 4 é um fluxograma ilustrando a operação exemplar de um codificador de vídeo, tal como o codificador de vídeo 20 mostrado no exemplo da Figura 2 e/ou o decodificador de vídeo 30 mostrado no exemplo da Figura 3, na realização de aspectos das técnicas de predição de vetor de movimento descritas nessa revelação. Inicialmente, com referência em primeiro lugar ao codificador de vídeo 20, a unidade de estimação de movimento 42, como descrito acima, pode determinar os vetores de movimento espacial, candidatos para uma PU atual correspondendo a uma CU atual (90). A unidade de estimação de movimento 42 pode a seguir determinar um vetor de movimento candidato temporal para a PU atual a partir de uma PU co-localizada em um quadro de referência, outra vez, como descrito acima (92). Ao determinar qualquer um ou os dois vetores de movimento espacial, candidatos e o vetor de movimento candidato temporal, a unidade de estimação de movimento 42 pode escalar um ou mais dos vetores de movimento candidatos na maneira descrita acima (94). Adicionalmente, a unidade de estimação de movimento 42 pode modificar um ou mais dos vetores de movimento escalados, conforme descrito acima (95).
[0099] Após modificar o um ou mais vetores de movimento escalados, a unidade de estimação de movimento 42 pode formar uma lista de candidatos de vetores de movimento candidatos, espaciais e temporais e selecionar um dos vetores de movimento candidatos como o MVP para a PU atual (96, 98). Essa seleção pode, como observado acima, envolver o codificador de vídeo 20 realizando uma análise RDO, onde o vetor selecionado dentre os vetores de movimento candidatos é usado para codificar o bloco dos dados de vídeo da maneira descrita acima. A unidade de codificação de entropia 56 pode especificar o vetor selecionado dentre os vetores de movimento candidatos como um índice de preditor de vetor de movimento (mvp_idx) no fluxo de bits, desse modo habilitando o decodificador de vídeo para identificar o vetor selecionado dentre os vetores de movimento candidatos.
[0100] Com relação ao decodificador de vídeo 30, a unidade de compensação de movimento 72 pode realizar operações similares àquelas descritas acima com relação à unidade de estimação de movimento 42. Isto é, a unidade de compensação de movimento 72, como descrito acima, pode determinar os vetores de movimento espacial, candidatos para uma PU atual correspondendo a uma CU atual (90). A unidade de compensação de movimento 72 pode a seguir determinar um vetor de movimento candidato temporal para a PU atual a partir de uma PU co-localizada em um quadro de referência, outra vez, como descrito acima (92). Ao determinar qualquer um ou os dois vetores de movimento espacial, candidatos e o vetor de movimento candidato temporal, a unidade de compensação de movimento 72 pode escalar um ou mais dos vetores de movimento candidatos na forma descrita acima (94). Adicionalmente, a unidade de compensação de movimento 72 pode modificar um ou mais dos vetores de movimento escalados para estar dentro de uma faixa especificada, como descrito acima (95).
[0101] Após modificar um ou mais vetores de movimento escalados, a unidade de compensação de movimento 72 pode formar uma lista de candidatos de vetores de movimento espacial, candidatos e temporais e selecionar um dos vetores de movimento candidatos como o MVP para a PU atual (96, 98). A unidade de decodificação de entropia 70 pode analisar o índice de preditor de vetor de movimento (mvp_idx) a partir do fluxo de bits e prover esse índice de preditor de vetor de movimento à unidade de compensação de movimento 72 para uso na seleção de um dos vetores de movimento candidatos como o MVP para a PU atual.
[0102] A Figura 5 é um fluxograma ilustrando a operação exemplar de um codificador de vídeo, tal como o codificador de vídeo 20 mostrado no exemplo da Figura 2 e/ou o decodificador de vídeo 30 mostrado no exemplo da Figura 3, na realização de outros aspectos das técnicas de predição de vetor de movimento descritas nessa revelação. Inicialmente, com referência em primeiro lugar ao codificador de vídeo 20, a unidade de estimação de movimento 42, como descrito acima, pode determinar os vetores de movimento espacial, candidatos para uma PU atual correspondendo a uma CU atual (100). A unidade de estimação de movimento 42 pode a seguir determinar um vetor de movimento candidato temporal para a PU atual a partir de uma PU co-localizada em um quadro de referência, outra vez, conforme descrito acima (102). Ao determinar qualquer um ou os dois dentre os vetores de movimento espacial candidatos e o vetor de movimento temporal candidato, a unidade de estimação de movimento 42 pode escalar um ou mais dos vetores de movimento candidatos na forma descrita acima (104).
[0103] A seguir, a unidade de estimação de movimento 42 pode formar uma lista de candidatos de vetores de movimento, espaciais e temporais, candidatos e selecionar um dos vetores de movimento candidatos como o MVP para a PU atual (106, 108). Essa seleção pode, como observado acima, envolver o codificador de vídeo 20 realizando uma análise RDO, onde o vetor selecionado dentre os vetores de movimento candidatos é então usado para codificar o bloco de dados de vídeo da forma descrita acima. Antes de realizar essa análise RDO, a unidade de estimação de movimento 42 pode em primeiro lugar determinar se o vetor selecionado dentre os vetores de movimento candidatos foi escalado (109). Se não foi escalado (“NÃO” 109), a unidade de estimação de movimento 42 pode não realizar quaisquer operações adicionais na consideração do vetor atual dentre os vetores de movimento candidatos. Contudo, se escalado (“SIM” 109), a unidade de estimação de movimento 42 pode modificar o vetor selecionado dentre os vetores de movimento candidatos para estar dentro de uma faixa especificada na forma descrita acima (110). Conforme observado acima, a unidade de codificação de entropia 56 pode especificar o selecionado dentre os vetores de movimento candidatos como um índice de preditor de vetor de movimento (mvp_idx) no fluxo de bits, desse modo habilitando o decodificador de vídeo a identificar o vetor selecionado dentre os vetores de movimento candidatos.
[0104] Com relação ao decodificador de vídeo 30, a unidade de compensação de movimento 72 pode, conforme descrito acima, determinar os vetores de movimento espacial candidatos para uma PU atual correspondendo a uma CU atual (100). A unidade de compensação de movimento 72 pode a seguir determinar um vetor de movimento temporal candidato para a PU atual a partir de uma PU co-localizada em um quadro de referência, outra vez, conforme descrito acima (102). Ao determinar qualquer um ou os dois dentre os vetores de movimento espacial candidatos e o vetor de movimento temporal candidato, a unidade de compensação de movimento 72 pode escalar um ou mais dos vetores de movimento candidatos na forma descrita acima (104).
[0105] A seguir, a unidade de compensação de movimento 72 pode formar uma lista de candidatos de vetores de movimento espaciais e temporais candidatos e selecionar um dos vetores de movimento candidatos como o MVP para a PU atual (106, 108). Para selecionar um dos vetores de movimento candidatos, a unidade de decodificação de entropia 70 pode analisar o índice de preditor de vetor de movimento (mvp_idx) a partir do fluxo de bits e fornecer esse índice de preditor de vetor de movimento à unidade de compensação de movimento 72 para uso na seleção de um dos vetores de movimento candidatos como o MVP para a PU atual. A unidade de compensação de movimento 72 pode então determinar se o vetor selecionado dentre os vetores de movimento candidatos foi escalado (109). Se não foi escalado (“NÃO” 109), a unidade de compensação de movimento 72 pode não realizar qualquer operação adicional ao considerar o vetor atual dos vetores de movimento candidatos. Contudo, se escalado (“SIM” 109), a unidade de compensação de movimento 72 pode modificar o vetor selecionado dentre os vetores de movimento candidatos na maneira descrita acima (110).
[0106] A Figura 6 é um diagrama conceptual ilustrando blocos vizinhos, espaciais e temporais a partir dos quais os candidatos de preditor de vetor de movimento são gerados para modos de predição de vetor de movimento. No modelo de teste HEVC (HM) atual, dois modos de predição de vetor de movimento são suportados: o modo de fusão e o modo de predição de vetor de movimento adaptativo (AMVP). Em qualquer um dos modos, cada um de codificador de vídeo 20 e decodificador de vídeo 30 gera a mesma lista de candidatos de preditor de vetor de movimento a partir da qual determinar um vetor de movimento para um bloco de vídeo atual ou PU 112. Os candidatos de preditor de vetor de movimento no modo de fusão e no modo AMVP podem incluir vetores de movimento para blocos vizinhos espaciais da PU atual 112, por exemplo, blocos vizinhos A, B, C, D e E ilustrados na Figura 6. Os candidatos de preditor de vetor de movimento também podem incluir vetores de movimento para blocos vizinhos temporais de um bloco co-localizado 114 da PU atual 112, por exemplo, blocos vizinhos T1 e T2 ilustrados na Figura 4. Em alguns casos, os candidatos de preditor de vetor de movimento podem incluir combinações de vetores de movimento para dois ou mais dos blocos vizinhos, por exemplo, uma média, mediana ou média ponderada dos dois ou mais vetores de movimento.
[0107] No caso do modo AMVP, a lista de candidatos de preditor de vetor de movimento pode ser gerada para incluir os vetores de movimento para os blocos vizinhos, espaciais e temporais. O codificador de vídeo 20 então seleciona o candidato de preditor de vetor de movimento mais exato para a PU atual 112 a partir da lista de candidatos. Em um exemplo, o codificador de vídeo 20 pode selecionar um candidato de preditor de vetor de movimento gerado a partir do vetor de movimento de um dos blocos vizinhos como o preditor de vetor de movimento para a PU atual 112. Em outro exemplo, o codificador de vídeo 20 pode selecionar um candidato de preditor de vetor de movimento gerado a partir dos vetores de movimento de dois ou mais dos blocos vizinhos como o preditor de vetor de movimento para PU atual 112. Nesse caso, o preditor de vetor de movimento pode ser calculado como a média, mediana, ou valor de média ponderada dos dois ou mais vetores de movimento. O codificador de vídeo 20 então determina a diferença de vetor de movimento entre o preditor de vetor de movimento e o vetor de movimento para a PU atual 112. O codificador de vídeo 20 então sinaliza a diferença de vetor de movimento e um índice de preditor de vetor de movimento para a PU atual 112 para o decodificador de vídeo 30.
[0108] O decodificador de vídeo 30 recebe um fluxo de bits representando um bloco de vídeo codificado incluindo diferenças de vetor de movimento e índices de preditor de vetor de movimento para o bloco de vídeo. Para decodificar o bloco de vídeo, o decodificador de vídeo 30 gera uma lista de candidatos de preditor de vetor de movimento da mesma maneira que o codificador de vídeo 20. O decodificador de vídeo 30 seleciona um preditor de vetor de movimento para a PU atual 12 mediante aplicação do índice de preditor de vetor de movimento sinalizado para a PU atual 112 para a lista de candidatos. O decodificador de vídeo 30 então combina a diferença de vetor de movimento sinalizado com o preditor de vetor de movimento selecionado para reconstruir o vetor de movimento para a PU atual 112. O decodificador de vídeo 30 utiliza o vetor de movimento para a PU atual 112 para localizar um bloco preditivo em uma imagem de referência para reconstruir o bloco de vídeo codificado.
[0109] No caso do modo de fusão, a lista de candidatos de preditor de vetor de movimento pode ser gerada para incluir toda informação de movimento, incluindo o vetor de movimento, o índice de imagem de referência, e a direção de predição, para cada um dos blocos vizinhos, espacial ou temporal. O codificador de vídeo 20 então seleciona a informação de movimento mais exata para a PU atual 112 a partir dos blocos vizinhos na lista de candidatos. Em vez de sinalizar uma diferença de vetor de movimento, um índice de imagem de referência, e uma direção de predição para a PU atual 112 para decodificador de vídeo 30, o codificador de vídeo 20 utiliza diretamente a informação de movimento selecionado para o bloco vizinho como a informação de movimento final para a PU atual 112. Desse modo, o codificador de vídeo 20 apenas sinaliza um índice para indicar o bloco vizinho a partir do qual toda a informação de movimento deve ser derivada para a PU atual 112 para o decodificador de vídeo 30.
[0110] O decodificador de vídeo 30 recebe um fluxo de bits representando um bloco de vídeo codificado incluindo valores de índice para o bloco de vídeo. Para decodificar o bloco de vídeo, o decodificador de vídeo 30 gera uma lista de candidatos de preditor de vetor de movimento da mesma maneira que o codificador de vídeo 20. O decodificador de vídeo 30 determina toda informação de movimento, incluindo o vetor de movimento, o índice de imagem de referência, e a direção de predição, para a PU atual 112 mediante aplicação do índice sinalizado para a lista de candidatos para selecionar a informação de movimento do bloco vizinho. O decodificador de vídeo 30 então utiliza o vetor de movimento para a PU atual 112 para localizar um bloco preditivo para reconstruir o bloco de vídeo codificado.
[0111] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos, Se implementadas em software, as funções podem ser armazenadas em, ou transmitidas através de uma ou mais instruções ou códigos em um meio legível por computador. Os meios legíveis por computador podem incluir meios de armazenamento de dados de computador ou meios de comunicação incluindo qualquer meio que facilite a transferência de um programa de computador de um lugar para outro. Os meios de armazenamento de dados podem ser quaisquer meios disponíveis que possam ser acessados por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e/ou estruturas de dados para implementação das técnicas descritas nessa revelação. Como um exemplo, e não como limitação, tais meios de armazenamento legíveis por computador podem compreender RAM, ROM, EEPROM, CD-ROM ou qualquer outro meio de armazenamento de dados de estado sólido, ótico ou magnético, incluindo armazenamento de disco ótico, armazenamento de disco magnético, ou outros dispositivos de armazenamento magnético, ou qualquer outro meio que possa ser usado para armazenar código de programa desejado na forma de instruções ou estruturas de dados e que possam ser acessados por um computador. Além disso, qualquer conexão é propriamente denominada meio legível por computador. Por exemplo, se as instruções forem transmitidas a partir de um sítio de rede, servidor, ou outra fonte remota utilizando um cabo coaxial, cabo de fibras óticas, par de fios torcidos, linha de assinante digital (DSL), ou tecnologias sem fio tal como infravermelho, rádio e micro-ondas, então o cabo axial, cabo de fibras óticas, par de fios torcidos, DSL, ou tecnologias sem fio tais como infravermelho, rádio e micro-ondas são incluídos na definição de meio. Deve ser entendido, contudo, que meios de armazenamento tangíveis legíveis por computador e meios de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios transientes, mas em vez disso são dirigidos aos meios de armazenamento não transientes, tangíveis. Disco magnético e disco ótico, conforme aqui usado, incluem disco compacto (CD), disco a laser, disco ótico, disco digital versátil (DVD), disquete e disco Blu-ray, onde discos magnéticos normalmente reproduzem os dados magneticamente, enquanto que os discos óticos reproduzem os dados oticamente com laseres. Combinações dos mencionados acima também devem ser incluídas no escopo de meios legíveis por computador.
[0112] O código pode ser executado por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados de aplicação específica (ASICs), arranjos lógicos programáveis no campo (FPGAs), ou outros circuitos lógicos integrados ou discretos equivalentes. Consequentemente, o termo ”processador”, conforme aqui usado pode se referir a qualquer uma de estrutura precedente ou qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disso, em alguns aspectos, a funcionalidade aqui descrita pode ser provida dentro de módulos de hardware e/ou software, dedicados configurados para codificar e decodificar, ou incorporados em um codec combinado. Além disso, as técnicas poderiam ser completamente implementadas em um ou mais circuitos ou elementos lógicos.
[0113] As técnicas dessa revelação podem ser implementadas em uma ampla variedade de dispositivos ou equipamentos, incluindo um aparelho telefônico sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chip). Vários componentes, módulos, ou unidades, são descritos nessa revelação para enfatizar os aspectos funcionais de dispositivos configurados para realizar as técnicas reveladas, mas não necessariamente requerem a realização por diferentes unidades de hardware. Mais propriamente, conforme descrito acima, as várias unidades podem ser combinadas em uma unidade de hardware de codec ou providas por um grupo de unidades de hardware inter operativas, incluindo um ou mais processadores conforme descrito acima, em conjunto com software e/ou firmware adequado.
[0114] Vários exemplos foram descritos. Esses e outros exemplos estão dentro do escopo das reivindicações a seguir.

Claims (15)

1. Método para codificar dados de vídeo, o método caracterizado pelo fato de que compreende: determinar, para executar um processo de predição de vetor de movimento, uma pluralidade de vetores de movimento candidatos para um bloco atual em uma imagem atual dos dados de vídeo com base em vetores de movimento determinados para blocos vizinhos espacialmente e um bloco localizado temporariamente para o bloco atual; escalonar, com base em um valor de contagem de ordem de imagem associado à imagem atual, um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento candidatos escalonados; cortar o um ou mais os vetores de movimento candidatos escalonados para estar dentro de uma faixa especificada, a faixa especificada estando em unidades de quarto de pixel, e a pluralidade de vetores de movimento candidato incluindo os vetores de movimento candidato em cortados escalonados; selecionar, depois de cortar o um ou mais vetores de movimento candidatos escalonados, um dentre a pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo; e codificar o bloco atual dos dados de vídeo com base no preditor de vetor de movimento.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o corte do um ou mais vetores de movimento candidato escalonados compreende o corte do um ou mais vetores de movimento candidato escalonado sem cortar nenhum dos outros vetores de movimento candidato que não foram escalonados.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o processo de predição de vetor de movimento é um dentre um modo de fusão e um modo de predição de vetor de movimento avançado.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a faixa especificada é definida por um perfil ou nível de codificação de vídeo.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a faixa especificada é fixada e de codificação rígida em um ou mais dentre um decodificador de vídeo e um codificador de vídeo.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que cortar o um ou mais vetores de movimento escalonados inclui: cortar um componente vertical do um ou mais vetores de movimento candidatos escalonados para estarem dentro de uma faixa especificada vertical; e cortar um componente horizontal do um ou mais vetores de movimento candidatos escalonados para estarem dentro de uma faixa especificada horizontal.
7. Método, de acordo com a reivindicação 1, caracterizada pelo fato de que: a faixa especificada especifica um limite de deslocamento de vetor de movimento que inclui um limite de deslocamento vertical; em que os vetores de movimento candidatos escalonados se estendem além do limite de deslocamento vertical; e em que cortar o um ou mais vetores de movimento candidatos escalonados compreende ainda cortar um componente vertical dos vetores do um ou mais vetores de movimento candidatos escalonados tal que o componente vertical do um ou mais vetores de movimento candidatos escalonados esteja dentro do limite de deslocamento vertical.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que: a faixa especificada especifica um limite de deslocamento de vetor de movimento que inclui um limite de deslocamento horizontal; em que os vetores de movimento candidatos escalonados se estendem além do limite de deslocamento horizontal; em que cortar o um ou mais vetores de movimento candidatos escalonados compreende ainda cortar um componente horizontal do um ou mais vetores de movimento candidatos escalonados tal que o componente horizontal do um ou mais vetores de movimento candidatos escalonados esteja dentro do limite de deslocamento horizontal.
9. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que cortar o um ou mais vetores de movimento candidato escalonados compreende escalonar o um ou mais vetores de movimento candidato escalonados, de modo que o um ou mais vetores de movimento candidato escalonados seja delimitado pelo um ou mais limites de deslocamento de vetor de movimento.
10. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda determinar um vetor de movimento para o bloco atual de dados de vídeo com base no selecionado da pluralidade de vetores de movimento candidatos para o bloco atual de dados de vídeo, em que o vetor de movimento determinado identifica um bloco de predição de dados de vídeo, em que codificar o bloco atual de dados de vídeo compreende decodificar o bloco atual de dados de vídeo em relação ao bloco de predição de dados de vídeo.
11. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda determinar um vetor de movimento para o bloco atual de dados de vídeo com base no selecionado da pluralidade de vetores de movimento candidatos para o bloco atual de dados de vídeo, em que o vetor de movimento determinado identifica um bloco de predição de dados de vídeo e, em que a codificação do bloco atual de dados de vídeo compreende a codificação do bloco atual de dados de vídeo em relação ao bloco de predição de dados de vídeo.
12. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda: decodificar um índice de preditor de vetor de movimento para identificar o selecionado da pluralidade de vetores de movimento candidatos para o bloco atual de dados de vídeo, de modo a executar um modo avançado de predição de vetor de movimento do processo de predição de vetor de movimento; e decodificar uma diferença de vetor de movimento entre o selecionado da pluralidade de vetores de movimento candidatos e um vetor de movimento para o bloco atual de dados de vídeo para determinar um vetor de movimento para o bloco atual de dados de vídeo, em que a codificação do bloco atual de dados de vídeo compreende decodificar o bloco atual de dados de vídeo usando o vetor de movimento determinado para o bloco atual de dados de vídeo.
13. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda: decodificar um índice para identificar o selecionado da pluralidade de vetores de movimento candidatos para o bloco atual de dados de vídeo, de modo a executar um modo de fusão do processo de predição de vetor de movimento; e determinar um vetor de movimento para o bloco atual de dados de vídeo para ser equivalente ao selecionado da pluralidade de vetores de movimento candidatos, em que a codificação do bloco atual de dados de vídeo compreende decodificar o bloco atual de dados de vídeo usando o vetor de movimento determinado para o bloco atual dos dados de vídeo.
14. Dispositivo de codificação de vídeo configurado para executar um processo de predição de vetor de movimento para codificar dados de vídeo, o dispositivo de codificação de vídeo caracterizado pelo fato de que compreende: meios para determinar, para executar um processo de predição de vetor de movimento, uma pluralidade de vetores de movimento candidatos para um bloco atual em uma imagem atual dos dados de vídeo com base em vetores de movimento determinados para blocos vizinhos espacialmente e um bloco co-localizado temporariamente para o bloco atual; meios para escalonar, com base em um valor de contagem de ordem de imagem associado à imagem atual, um ou mais da pluralidade de vetores de movimento candidatos determinados para o bloco atual dos dados de vídeo para gerar um ou mais vetores de movimento candidatos escalonados; meios para cortar o um ou mais vetores de movimento candidatos escalonados para estar dentro de uma faixa especificada, a faixa especificada em unidades de um quarto de pixel, e a pluralidade de vetores de movimento candidato incluindo os vetores de movimento candidato escalonados cortados; meios para selecionar, após cortar o um ou mais vetores de movimento candidatos escalonados, um da pluralidade de vetores de movimento candidatos como um preditor de vetor de movimento para o bloco atual dos dados de vídeo; e meios para codificar o bloco atual dos dados de vídeo com base no preditor de vetor de movimento.
15. Memória caracterizada pelo fato de que compreende instruções armazenadas na mesma, as instruções sendo executadas por um computador para realizar o método conforme definido em qualquer uma das reivindicações 1 a 13.
BR112014015056-7A 2011-12-22 2012-12-11 Realizando predição de vetor de movimento para codificação de vídeo BR112014015056B1 (pt)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201161579465P 2011-12-22 2011-12-22
US61/579,465 2011-12-22
US201261584096P 2012-01-06 2012-01-06
US61/584,096 2012-01-06
US13/709,555 2012-12-10
US13/709,555 US9762904B2 (en) 2011-12-22 2012-12-10 Performing motion vector prediction for video coding
PCT/US2012/069000 WO2013096018A1 (en) 2011-12-22 2012-12-11 Performing motion vector prediction for video coding

Publications (2)

Publication Number Publication Date
BR112014015056A2 BR112014015056A2 (pt) 2017-06-13
BR112014015056B1 true BR112014015056B1 (pt) 2022-07-12

Family

ID=48654534

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112014015056-7A BR112014015056B1 (pt) 2011-12-22 2012-12-11 Realizando predição de vetor de movimento para codificação de vídeo

Country Status (18)

Country Link
US (1) US9762904B2 (pt)
EP (1) EP2795900A1 (pt)
JP (2) JP2015506606A (pt)
KR (1) KR102057350B1 (pt)
CN (1) CN104012096A (pt)
AU (1) AU2012355669B2 (pt)
BR (1) BR112014015056B1 (pt)
CA (1) CA2858979C (pt)
HK (1) HK1197330A1 (pt)
IL (1) IL232776A (pt)
IN (1) IN2014CN04420A (pt)
MY (1) MY167467A (pt)
PH (1) PH12014501244B1 (pt)
RU (1) RU2573227C1 (pt)
SG (2) SG10201605087YA (pt)
TW (1) TWI535269B (pt)
UA (1) UA114617C2 (pt)
WO (1) WO2013096018A1 (pt)

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011146451A1 (en) * 2010-05-20 2011-11-24 Thomson Licensing Methods and apparatus for adaptive motion vector candidate ordering for video encoding and decoding
CN103765886B (zh) 2011-08-29 2017-06-13 苗太平洋控股有限公司 以amvp模式产生预测区块的方法
RU2628226C2 (ru) * 2011-12-16 2017-08-15 Сан Пэтент Траст Способ кодирования видеоизображений, устройство кодирования видеоизображений, способ декодирования видеоизображений, устройство декодирования видеоизображений и устройство кодирования/декодирования видеоизображений
CN110868588B (zh) * 2012-01-18 2023-09-15 韩国电子通信研究院 视频解码装置、视频编码装置和计算机可读记录介质
US20130235926A1 (en) * 2012-03-07 2013-09-12 Broadcom Corporation Memory efficient video parameter processing
KR101682999B1 (ko) * 2012-04-16 2016-12-20 노키아 테크놀로지스 오와이 비디오 코딩 및 디코딩을 위한 장치, 방법 및 컴퓨터 프로그램
US9313021B2 (en) * 2013-08-29 2016-04-12 National Chiao Tung University Secret communication method with self-authentication capability
KR102318785B1 (ko) 2013-10-14 2021-10-27 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 비디오 및 영상 코딩 및 디코딩에 대한 기본 색상 인덱스 맵 모드의 특징
WO2015054811A1 (en) 2013-10-14 2015-04-23 Microsoft Corporation Features of intra block copy prediction mode for video and image coding and decoding
EP3058736B1 (en) 2013-10-14 2019-02-27 Microsoft Technology Licensing, LLC Encoder-side options for intra block copy prediction mode for video and image coding
US10382752B2 (en) * 2013-10-15 2019-08-13 Sony Corporation Image processing device and method
US10390034B2 (en) 2014-01-03 2019-08-20 Microsoft Technology Licensing, Llc Innovations in block vector prediction and estimation of reconstructed sample values within an overlap area
BR112016015080A2 (pt) 2014-01-03 2017-08-08 Microsoft Technology Licensing Llc Predição de vetor de bloco em codificação / decodificação de vídeo e imagem
US11284103B2 (en) 2014-01-17 2022-03-22 Microsoft Technology Licensing, Llc Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
AU2014385769B2 (en) 2014-03-04 2018-12-06 Microsoft Technology Licensing, Llc Block flipping and skip mode in intra block copy prediction
US10785486B2 (en) 2014-06-19 2020-09-22 Microsoft Technology Licensing, Llc Unified intra block copy and inter prediction modes
US10856009B2 (en) 2014-09-04 2020-12-01 Mediatek Inc. Method of block vector clipping and coding for screen content coding and video coding
CA3171803A1 (en) 2014-09-30 2016-04-07 Microsoft Technology Licensing, Llc Rules for intra-picture prediction modes when wavefront parallel processing is enabled
US9992512B2 (en) * 2014-10-06 2018-06-05 Mediatek Inc. Method and apparatus for motion vector predictor derivation
CN110719468B (zh) * 2014-10-08 2021-06-25 联发科技股份有限公司 视频编码方法
US9591325B2 (en) 2015-01-27 2017-03-07 Microsoft Technology Licensing, Llc Special case handling for merged chroma blocks in intra block copy prediction mode
CN106664405B (zh) 2015-06-09 2020-06-09 微软技术许可有限责任公司 用调色板模式对经逸出编码的像素的稳健编码/解码
CN106331722B (zh) * 2015-07-03 2019-04-26 华为技术有限公司 图像预测方法和相关设备
US10873760B2 (en) * 2017-04-07 2020-12-22 Futurewei Technologies, Inc. Motion vector (MV) constraints and transformation constraints in video coding
WO2018210315A1 (en) * 2017-05-18 2018-11-22 Mediatek Inc. Method and apparatus of motion vector constraint for video coding
EP3410717A1 (en) * 2017-05-31 2018-12-05 Thomson Licensing Methods and apparatus for candidate list pruning
US10785494B2 (en) * 2017-10-11 2020-09-22 Qualcomm Incorporated Low-complexity design for FRUC
WO2019077197A1 (en) * 2017-10-16 2019-04-25 Nokia Technologies Oy METHOD, APPARATUS AND COMPUTER PROGRAM PRODUCT FOR VIDEO ENCODING AND DECODING
CN111247806B (zh) * 2017-10-27 2023-11-14 松下电器(美国)知识产权公司 解码装置和解码方法
WO2019089933A1 (en) * 2017-11-01 2019-05-09 Vid Scale, Inc. Sub-block motion derivation and decoder-side motion vector refinement for merge mode
US10986349B2 (en) 2017-12-29 2021-04-20 Microsoft Technology Licensing, Llc Constraints on locations of reference blocks for intra block copy prediction
WO2019194513A1 (ko) * 2018-04-01 2019-10-10 엘지전자 주식회사 어파인 예측을 이용하여 비디오 신호를 처리하는 방법 및 장치
WO2019199141A1 (ko) * 2018-04-13 2019-10-17 엘지전자 주식회사 비디오 코딩 시스템에서 인터 예측 방법 및 장치
CN108401115A (zh) * 2018-04-28 2018-08-14 北京心领神绘科技有限公司 一种便携图像采集终端的自动修正采集装置及方法
US10873748B2 (en) * 2018-05-12 2020-12-22 Qualcomm Incorporated Storage of high precision motion vectors in video coding
WO2020003274A1 (en) 2018-06-29 2020-01-02 Beijing Bytedance Network Technology Co., Ltd. Checking order of motion candidates in lut
CN110662057B (zh) 2018-06-29 2022-06-21 北京字节跳动网络技术有限公司 视频处理方法、装置、设备以及存储比特流的方法
EP3791589A1 (en) 2018-06-29 2021-03-17 Beijing Bytedance Network Technology Co. Ltd. Which lut to be updated or no updating
BR112020024202A2 (pt) 2018-06-29 2021-02-17 Beijing Bytedance Network Technology Co., Ltd. método de processamento de dados de vídeo, aparelho de processamento de vídeo e meios de armazenamento e gravação legíveis por computador não transitório
MX2020013828A (es) 2018-06-29 2021-03-25 Beijing Bytedance Network Tech Co Ltd Interaccion entre lut y amvp.
CN115134599A (zh) 2018-06-29 2022-09-30 抖音视界有限公司 更新查找表(lut)的条件
TWI752331B (zh) 2018-06-29 2022-01-11 大陸商北京字節跳動網絡技術有限公司 當向Merge/AMVP添加HMVP候選時的部分/完全修剪
TWI723444B (zh) 2018-06-29 2021-04-01 大陸商北京字節跳動網絡技術有限公司 使用一個或多個查找表來按順序存儲先前編碼的運動信息並使用它們來編碼後面的塊的概念
CN113163211B (zh) * 2018-06-30 2023-01-03 Oppo广东移动通信有限公司 基于合并模式的帧间预测方法及装置
JP7181395B2 (ja) 2018-07-02 2022-11-30 北京字節跳動網絡技術有限公司 イントラ予測モードを有するルックアップテーブルおよび非隣接ブロックからのイントラモード予測
WO2020055169A1 (ko) * 2018-09-11 2020-03-19 김기백 인터 예측을 이용한 영상 부호화/복호화 방법 및 장치
TWI820211B (zh) 2018-09-12 2023-11-01 大陸商北京字節跳動網絡技術有限公司 取決於總數減去k的開始檢查hmvp候選的條件
US11381807B2 (en) 2018-11-21 2022-07-05 Telefonaktiebolaget Lm Ericsson (Publ) Methods of video picture coding with sub-block merge simplification and related apparatuses
WO2020125754A1 (en) * 2018-12-21 2020-06-25 Beijing Bytedance Network Technology Co., Ltd. Motion vector derivation using higher bit-depth precision
KR20240010576A (ko) 2019-01-10 2024-01-23 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 Lut 업데이트의 호출
CN113383554B (zh) 2019-01-13 2022-12-16 北京字节跳动网络技术有限公司 LUT和共享Merge列表之间的交互
JP7201906B2 (ja) * 2019-01-15 2023-01-11 日本電信電話株式会社 参照領域決定装置及びプログラム
WO2020147772A1 (en) 2019-01-16 2020-07-23 Beijing Bytedance Network Technology Co., Ltd. Motion candidates derivation
CN113615193A (zh) 2019-03-22 2021-11-05 北京字节跳动网络技术有限公司 Merge列表构建和其他工具之间的交互
CN112333450B (zh) * 2019-08-05 2023-07-14 腾讯美国有限责任公司 一种视频编解码的方法和装置

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5151784A (en) 1991-04-30 1992-09-29 At&T Bell Laboratories Multiple frame motion estimation
TW321748B (pt) 1994-02-23 1997-12-01 Rca Thomson Licensing Corp
EP1819173B1 (en) 1997-06-25 2009-07-29 Nippon Telegraph and Telephone Corporation Motion vector predictive encoding apparatus and decoding apparatus
US6862372B2 (en) 2001-12-27 2005-03-01 Koninklijke Philips Electronics N.V. System for and method of sharpness enhancement using coding information and local spatial features
US7177356B2 (en) 2002-01-11 2007-02-13 Webtv Networks, Inc. Spatially transcoding a video stream
HUP0301368A3 (en) 2003-05-20 2005-09-28 Amt Advanced Multimedia Techno Method and equipment for compressing motion picture data
US8064520B2 (en) 2003-09-07 2011-11-22 Microsoft Corporation Advanced bi-directional predictive coding of interlaced video
AU2003282462A1 (en) 2003-10-09 2005-05-26 Thomson Licensing Direct mode derivation process for error concealment
US20060120612A1 (en) 2004-12-08 2006-06-08 Sharath Manjunath Motion estimation techniques for video encoding
GB2431798A (en) 2005-10-31 2007-05-02 Sony Uk Ltd Motion vector selection based on integrity
RU2395174C1 (ru) 2006-03-30 2010-07-20 ЭлДжи ЭЛЕКТРОНИКС ИНК. Способ и устройство для декодирования/кодирования сигнала видео
EP2005752A4 (en) 2006-03-30 2010-06-09 Lg Electronics Inc METHOD AND APPARATUS FOR DECODING / ENCODING A VIDEO SIGNAL
JP2008067194A (ja) * 2006-09-08 2008-03-21 Toshiba Corp フレーム補間回路、フレーム補間方法、表示装置
US8213509B2 (en) 2006-10-06 2012-07-03 Calos Fund Limited Liability Company Video coding on parallel processing systems
US9883202B2 (en) 2006-10-06 2018-01-30 Nxp Usa, Inc. Scaling video processing complexity based on power savings factor
JP4999859B2 (ja) 2006-10-30 2012-08-15 日本電信電話株式会社 予測参照情報生成方法、動画像符号化及び復号方法、それらの装置、及びそれらのプログラム並びにプログラムを記録した記憶媒体
US8265157B2 (en) 2007-02-07 2012-09-11 Lsi Corporation Motion vector refinement for MPEG-2 to H.264 video transcoding
US8160150B2 (en) * 2007-04-10 2012-04-17 Texas Instruments Incorporated Method and system for rate distortion optimization
US8660176B2 (en) 2008-09-26 2014-02-25 Qualcomm Incorporated Resolving geometric relationships among video data units
JP5401071B2 (ja) 2008-10-09 2014-01-29 株式会社Nttドコモ 動画像符号化装置、動画像復号装置、動画像符号化方法、動画像復号方法、動画像符号化プログラム、動画像復号プログラム、動画像処理システムおよび動画像処理方法
US8411750B2 (en) 2009-10-30 2013-04-02 Qualcomm Incorporated Global motion parameter estimation using block-based motion vectors
US8879632B2 (en) 2010-02-18 2014-11-04 Qualcomm Incorporated Fixed point implementation for geometric motion partitioning
US9124898B2 (en) 2010-07-12 2015-09-01 Mediatek Inc. Method and apparatus of temporal motion vector prediction
RU2628226C2 (ru) * 2011-12-16 2017-08-15 Сан Пэтент Траст Способ кодирования видеоизображений, устройство кодирования видеоизображений, способ декодирования видеоизображений, устройство декодирования видеоизображений и устройство кодирования/декодирования видеоизображений

Also Published As

Publication number Publication date
PH12014501244A1 (en) 2014-09-15
US20130163668A1 (en) 2013-06-27
KR20140110957A (ko) 2014-09-17
WO2013096018A1 (en) 2013-06-27
BR112014015056A2 (pt) 2017-06-13
PH12014501244B1 (en) 2014-09-15
CA2858979A1 (en) 2013-06-27
RU2573227C1 (ru) 2016-01-20
JP2018050308A (ja) 2018-03-29
IL232776A (en) 2017-09-28
TW201334552A (zh) 2013-08-16
CN104012096A (zh) 2014-08-27
AU2012355669A1 (en) 2014-07-24
UA114617C2 (uk) 2017-07-10
CA2858979C (en) 2020-04-14
SG11201402601SA (en) 2014-08-28
SG10201605087YA (en) 2016-08-30
US9762904B2 (en) 2017-09-12
TWI535269B (zh) 2016-05-21
KR102057350B1 (ko) 2019-12-18
HK1197330A1 (en) 2015-01-09
AU2012355669B2 (en) 2017-04-06
MY167467A (en) 2018-08-29
EP2795900A1 (en) 2014-10-29
IN2014CN04420A (pt) 2015-09-04
JP2015506606A (ja) 2015-03-02
IL232776A0 (en) 2014-07-31

Similar Documents

Publication Publication Date Title
US10652571B2 (en) Advanced motion vector prediction speedups for video coding
BR112014015056B1 (pt) Realizando predição de vetor de movimento para codificação de vídeo
US9319716B2 (en) Performing motion vector prediction for video coding
US11528503B2 (en) Picture prediction method and apparatus, and codec
AU2012273398B2 (en) Unified merge mode and adaptive motion vector prediction mode candidates selection
JP5778299B2 (ja) 動きベクトル予測
CN111200735B (zh) 一种帧间预测的方法及装置
US20220094942A1 (en) Sub-block temporal motion vector prediction for video coding
WO2020042758A1 (zh) 一种帧间预测的方法及装置

Legal Events

Date Code Title Description
B15K Others concerning applications: alteration of classification

Ipc: H04N 7/00 (2011.01)

B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B350 Update of information on the portal [chapter 15.35 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 11/12/2012, OBSERVADAS AS CONDICOES LEGAIS