BR112013014415B1 - Método e dispositivo para decodificar dados de vídeo e método e dispositivo para codificar dados de vídeo - Google Patents

Método e dispositivo para decodificar dados de vídeo e método e dispositivo para codificar dados de vídeo Download PDF

Info

Publication number
BR112013014415B1
BR112013014415B1 BR112013014415-7A BR112013014415A BR112013014415B1 BR 112013014415 B1 BR112013014415 B1 BR 112013014415B1 BR 112013014415 A BR112013014415 A BR 112013014415A BR 112013014415 B1 BR112013014415 B1 BR 112013014415B1
Authority
BR
Brazil
Prior art keywords
integer pixel
sub
filter
pixel
video
Prior art date
Application number
BR112013014415-7A
Other languages
English (en)
Other versions
BR112013014415A2 (pt
Inventor
Rahul P. Panchal
Marta Karczewicz
Peisong Chen
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 BR112013014415A2 publication Critical patent/BR112013014415A2/pt
Publication of BR112013014415B1 publication Critical patent/BR112013014415B1/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/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
    • 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/523Motion estimation or motion compensation with sub-pixel accuracy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • H04N19/15Data rate or code amount at the encoder output by monitoring actual compressed data size at the memory before deciding storage at the transmission buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/154Measured or subjectively estimated visual quality after decoding, e.g. measurement of distortion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/182Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a pixel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation

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

suporte adaptativo para interpolação de valores de subpixels para codificação de vídeo. essa descrição descreve as técnicas para calcular os valores dos pixels subinteiros aplicados por um codificador e um decodificador para codificar os blocos de dados de vídeo. em um exemplo, um codificador de vídeo é configurado para receber valores para posições de pixel inteiro completo de uma amostra de referência, aplicar um filtro de interpolação a um primeiro conjunto de valores para as posições de pixel inteiro completo para calcular um valor para um primeiro pixel subinteiro de uma das posições de pixel inteiro completo, aplicar o filtro de interpolação a um segundo conjunto diferente de valores para as posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo, codificar um bloco atual de pixels utilizando um vetor de movimento que aponta para um primeiro pixel subinteiro e o segundo pixel subinteiro.

Description

Campo da Invenção
[0001] Essa descrição se refere ao campo decodificação de vídeo, por exemplo, codificação e decodificação de dados de vídeo.
Descrição da Técnica Anterior
[0002] Capacidades de vídeo digital podem serincorporadas a uma ampla faixa de dispositivos, incluindo televisões digitais, sistemas de difusão direta digital, dispositivos de comunicação sem fio, tal como aparelhos de telefonia por rádio, sistemas de difusão sem fio, assistentes digitais pessoais (PDASs), computadores laptop ou desktop, câmeras digitais, dispositivos de gravação digital, dispositivos de jogos de vídeo, consoles de jogos de vídeo, e similares. Os dispositivos de vídeo digital implementam técnicas de compressão de vídeo, tal como MPEG-2, MPEG-4, ou H.264/MPEG-4, parte 10, Codificação de Vídeo Avançada (AVC), para transmitir e receber vídeo digital de forma mais eficiente. As técnicas de compressão de vídeo realizam previsão espacial e temporal para reduzir ou remover a redundância inerente às sequências de vídeo.
Sumário da Invenção
[0003] Essa descrição descreve técnicas defiltragem que podem ser aplicadas por um codificador e umdecodificador durante o estágio interprevisão de um processo de codificação e/ou decodificação de vídeo. As técnicas de filtragem descritas podem melhorar a precisão dos dados de previsão utilizados durante a interpolação de pixel fracionado, e em alguns casos, pode aumentar os ganhos de codificação. Existem vários aspectos para essa descrição, incluindo técnicas para interpolar os valores para as posições de subpixel com base na aplicação de filtro de interpolação para várias combinações de posições de pixel completo. Os valores em que um filtro de interpolação é aplicado são tipicamente referidos como “suporte”. Essas técnicas também incluem a seleção de suporte em que aplicar um filtro de interpolação para uma posição de subpixel com base em fatores tal como, por exemplo, quadros codificados anteriormente ou codificação atual de quadros.
[0004] Em um aspecto, um método de codificação de dados de vídeo compreende o recebimento de valores para uma posição de pixel inteiro completo de uma amostra de referência. O método também inclui a aplicação de um filtro de interpolação a um primeiro conjunto de valores para as posições de pixel inteiro completo para calcular um valor para um primeiro pixel subinteiro de uma das posições de pixel inteiro completo. Adicionalmente, o método também inclui a aplicação do filtro de interpolação a um segundo conjunto diferente de valores para as posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo. O método compreende adicionalmente a codificação de um bloco de pixels utilizando um vetor de movimento que aponta para um dentre o primeiro pixel subinteiro e o segundo pixel subinteiro.
[0005] Em outro aspecto, um dispositivo compreende um codificador de vídeo que é configurado para receber valores para uma posição de pixel inteiro completo de uma amostra de referência. O codificador de vídeo também é configurado para aplicar um filtro de interpolação a um primeiro conjunto de valores para as posições de pixel inteiro completo para calcular um valor para um primeiro pixel subinteiro de uma das posições de pixel inteiro completo. De forma similar, o codificador de vídeo é configurado para aplicar o filtro de interpolação a um segundo conjunto diferente de valores para as posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo. O codificador de vídeo é adicionalmente configurado para codificar um bloco de pixels utilizando um vetor de movimento que aponta para um dentre o primeiro pixel subinteiro e o segundo pixel subinteiro.
[0006] Em outro aspecto, um meio legível por computador compreende instruções que mediante execução em um dispositivo de codificação de vídeo fazem com que o dispositivo codifique os blocos de vídeo. Em particular, as instruções fazem com que o dispositivo receba valores para uma posição de pixel inteiro completo de uma amostra de referência e aplique um filtro de interpolação a um primeiro conjunto de valores para as posições de pixel inteiro completo para calcular um valor para um primeiro pixel subinteiro de um dentre as posições de pixel inteiro completo. As instruções também fazem com que o dispositivo aplique o filtro de interpolação a um segundo conjunto diferente de valores para as posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo. As instruções fazem adicionalmente com que o dispositivo codifique um bloco de pixels utilizando um vetor de movimento que aponta para um dentre o primeiro pixel subinteiro e o segundo pixel subinteiro.
[0007] Em outro aspecto, um dispositivo é provido compreendendo meios para o recebimento de valores para uma posição de pixel inteiro completo de uma amostra de referência. O dispositivo compreende adicionalmente meios de aplicação de um filtro de interpolação a um primeiro conjunto de valores para as posições de pixel de inteiro completo para calcula um valor para um primeiro pixel subinteiro de uma das posições de pixel inteiro completo. Além disso, o dispositivo compreende meios para aplicação do filtro de interpolação para um segundo conjunto diferente de valores para as posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo e meios para codificar um bloco de pixels utilizando um vetor de movimento que aponta para um dentre o primeiro pixel subinteiro, e um segundo pixel subinteiro.
[0008] Em outro aspecto adicional, um método de decodificação de dados de vídeo compreende recebendo uma amostra de referência compreendendo posições de pixel completo. O método também inclui o recebimento de uma indicação de um conjunto de posições de pixel inteiro completo da amostra de referência utilizada para interpolar um valor para um pixel subinteiro da amostra de referência. Adicionalmente, o método também inclui a aplicação de um filtro de interpolação ao conjunto de posições de pixel inteiro completo para calcular o valor do pixel subinteiro da amostra de referência. O método compreende adicionalmente a decodificação de um bloco de pixels com relação ao valor calculado do pixel subinteiro.
[0009] Em outro aspecto, um dispositivo compreende um decodificador de vídeo que é configurado para receber uma amostra de referência compreendendo uma posição de pixel inteiro completo. O decodificador de vídeo também é configurado para receber uma indicação de um conjunto de posições de pixel inteiro completo da amostra de referência utilizada para interpolar um valor para um pixel subinteiro da amostra de referência. De forma similar, o decodificador de vídeo é configurado para aplicar um filtro de interpolação ao conjunto de posições de pixel inteiro completo para calcular o valor do pixel subinteiro da amostra de referência. O decodificador de vídeo é adicionalmente configurado para decodificar um bloco de pixels com relação ao valor calculado do pixel subinteiro.
[0010] Em outro aspecto, um meio legível por computador compreende instruções que mediante execução em um dispositivo de codificação de vídeo fazem com que o dispositivo codifique os blocos de vídeo. Em particular, as instruções fazem com que o dispositivo receba uma amostra de referência compreendendo uma posição de pixel inteiro completo e receba uma indicação de um conjunto de posições de pixel inteiro completo da amostra de referência utilizado para interpolar um valor para um pixel subinteiro da amostra de referência. As instruções também fazem com que o dispositivo aplique um filtro de interpolação ao conjunto de posições de pixel inteiro completo para calcular o valor do pixel subinteiro da amostra de referência. As instruções fazem adicionalmente com que o dispositivo decodifique um bloco de pixels com relação ao valor calculado do pixel subinteiro.
[0011] Em outro aspecto, um dispositivo compreende meios para o recebimento de uma amostra de referência compreendendo uma posição de pixel completo e meios para receber uma indicação de um conjunto de posições de pixel inteiro completo da amostra de referência para uso de interpolação de um valor de um pixel subinteiro da amostra de referência. O dispositivo compreende adicionalmente meios para calcular o valor do pixel subinteiro da amostra de referência utilizando o conjunto de posições de pixel inteiro completo. O dispositivo inclui adicionalmente meios para decodificação de um bloco de pixels com relação ao valor calculado do pixel subinteiro.
[0012] As técnicas descritas nessa descriçãopodem ser implementadas em hardware, software, firmware, ou qualquer combinação dos mesmos. Se implementadas em software, o software pode ser executado em um processador, que pode se referir a um ou mais processadores, tal como um microprocessador, circuito integrado específico deaplicativo (ASIC), conjunto de porta programável em campo (FPGA), ou processador de sinal digital (DSP), ou outro conjunto de circuito lógico discreto ou integrado equivalente. Software compreendendo instruções para execução das técnicas pode ser inicialmente armazenado em um meio legível por computador e carregado e executado por um processador.
[0013] De acordo, essa descrição tambémcontempla mídia legível por computador compreendendo instruções para fazer com que um processador realize qualquer uma dentre uma variedade de técnicas como descrito nessa descrição. Em alguns casos, o meio legível por computador pode formar parte de um produto de programa de computador, que pode ser vendido para fabricantes e/ou utilizado em um dispositivo. O produto de programa de computador pode incluir um meio legível por computador, e em alguns casos, também pode incluir materiais de empacotamento.
[0014] Essa descrição também pode ser aplicadaa sinais eletromagnéticos portando informação. Por exemplo, um sinal eletromagnético pode compreender informação referente ao suporte de pixel completo utilizado para interpolar um valor para um pixel subinteiro de uma amostra de referência. Em alguns exemplos, um sinal pode ser gerado a partir de ou transmitido por um dispositivo implementando as técnicas descritas aqui. Em outros exemplos, essa descrição pode ser aplicada a sinais que podem ser recebidos em um dispositivo implementando as técnicas descritas aqui.
[0015] Os detalhes de um ou mais aspectos da descrição são apresentados nos desenhos em anexo e na descrição abaixo. Outras características, objetivos e vantagens das técnicas descritas nessa descrição se tornarão aparentes a partir da descrição de dos desenhos, e a partir das reivindicações.
Breve Descrição dos Desenhos
[0016] A figura 1 é um diagrama em bloco ilustrando um exemplo de um sistema de codificação e decodificação de vídeo que pode ser utilizado para implementar uma ou mais das técnicas dessa descrição;
[0017] A figura 2 é um diagrama em bloco ilustrando um exemplo do codificador de vídeo da figura 1 em maiores detalhes;
[0018] A figura 3 é um diagrama conceitual ilustrando um exemplo de posições de pixel inteiro associadas aos dados de previsão, e posições de subpixel associadas aos dados de previsão interpolados;
[0019] A figura 4 é um diagrama conceitual ilustrando um exemplo de um suporte de filtro de seis pixels diagonais com relação a um local de pixel subinteiro;
[0020] A figura 5 é um diagrama conceitual ilustrando um exemplo de um suporte de filtro de doze pixels em formato de x com relação a um local de pixel subinteiro;
[0021] A figura 6 é um diagrama conceitual ilustrando um exemplo de um suporte de filtro de doze pixels com relação às três posições de subpixel horizontais e três posições de subpixel verticais;
[0022] A figura 7 é um diagrama conceitual ilustrando um exemplo de um suporte de filtro de doze pixels com relação a um local de subpixel;
[0023] A figura 8 é um diagrama conceitual ilustrando um exemplo de um suporte de filtro de quatro pixels de formato quadrado com relação a um local de pixel subinteiro;
[0024] A figura 9 é um diagrama conceitual ilustrando um exemplo de um suporte de filtro de seis pixels de formato retangular com relação a um local de pixel subinteiro;
[0025] A figura 10 é um diagrama em bloco ilustrando um exemplo do decodificador de vídeo da figura 1 em maiores detalhes;
[0026] A figura 11 é um fluxograma ilustrando uma operação ilustrativa de um codificador de vídeo que utiliza o suporte de filtro de pixel consistente com essa descrição;
[0027] A figura 12 é um fluxograma ilustrando outra operação ilustrativa de um codificador de vídeo que utiliza o suporte de filtro de pixel consistente com essa descrição;
[0028] A figura 13 é um fluxograma ilustrando um método ilustrativo de determinação de suporte de filtro para o pixel subinteiro consistente com essa descrição;
[0029] A figura 14 é um fluxograma ilustrando outro método ilustrativo de determinação do suporte de filtro para o pixel subinteiro consistente com essa descrição;
[0030] A figura 15 é um fluxograma ilustrando uma operação ilustrativa de um decodificador de vídeo que utiliza o suporte de filtro consistente com essa descrição;
[0031] A figura 16 é um fluxograma ilustrando outra operação ilustrativa de um decodificador de vídeo que utiliza o suporte de filtro consistente com essa descrição.
Descrição Detalhada da Invenção
[0032] Essa descrição descreve técnicas defiltragem que podem ser aplicadas por um codificador e um decodificador durante o estágio de interprevisão de um processo de codificação e/ou decodificação de vídeo. As técnicas de filtragem descritas podem melhorar a precisão de dados de previsão utilizados durante a interpolação de pixel fracionado, e em alguns casos, pode aumentar os ganhos de codificação. Essa descrição utiliza os termos “subpixel”, “pixel subinteiro”, “pixel fracionado” e “sub-pel” de forma intercambiável. Existem vários aspectos para essa descrição, incluindo técnicas para interpolar uma localização de subpixel com base em qualquer combinação de qualquer número de localizações de pixel completo, e técnicas para selecionar o suporte para filtros de interpolação para as posições de subpixel com base em quadros codificados previamente ou codificação atual de quadros. Essas e outras técnicas são descritas em detalhes abaixo.
[0033] A intercodificação baseada em bloco éuma técnica de codificação que se baseia em previsão temporal para reduzir ou remover a redundância temporal entre os blocos de vídeo de unidades codificadas sucessivamente de uma sequência de vídeo. As unidades codificadas podem compreender quadros de vídeo, cortes de quadros de vídeo, grupos de imagens, ou outra unidade definida de blocos de vídeo codificados. Para intercodificação, um codificador de vídeo realizada estimativa de movimento e a compensação de movimento para estimar o movimento entre os blocos de vídeo de duas ou mais unidades codificadas adjacentes. Utilizando- se asa técnicas de estimativa de movimento, o codificador de vídeo gera vetores de movimento, que podem indicar o deslocamento de blocos de vídeo com relação aos blocos de vídeo de previsão correspondentes em um ou mais quadros de referência ou outras unidades codificadas. Utilizando-se as técnicas para compensação de movimento, o codificador de vídeo pode utilizar os vetores de movimento para gerar blocos de vídeo de previsão de um ou mais quadros de referência ou outras unidades codificadas. Depois da compensação de movimento, o codificador de vídeo pode calcular blocos de vídeo residuais pela subtração de blocos de vídeo de previsão dos blocos de vídeo originais sendo codificados.
[0034] O codificador de vídeo também pode aplicar processos de codificação por transformação, quantização e entropia para reduzir ainda mais a taxa de bits associada à comunicação de blocos residuais. As técnicas de transformação podem compreender transformações de cosseno discreto (DCTs) ou processos conceitualmente similares. Alternativamente, as transformações de wavelet, transformações de inteiro ou outros tipos de transformações podem ser utilizados. Em um processo DCT, como um exemplo, um conjunto de valores de pixel pode ser convertido em coeficientes de transformação, que pode representar a energia dos valores de pixel no domínio de frequência. O codificador de vídeo também pode quantizar os coeficientes de transformação, que podem geralmente envolver um processo que reduz o número de bits associado ao coeficiente de transformação correspondente. A codificação por entropia pode incluir um ou mais processos que comprimem coletivamente dados para envio para uma sequência de bits, onde os dados comprimidos podem incluir, por exemplo, uma sequência de modos de codificação, informação de movimento, padrões de bloco codificado, e coeficientes de transformação quantizados. Exemplos de codificação por entropia incluem, mas não estão limitados à codificação de comprimento variável e contexto adaptativo (CAVLC) e codificação aritmética binária de contexto adaptativo (CABAC).
[0035] Um bloco de vídeo codificado pode serrepresentado pela informação de previsão que pode ser utilizada para criar ou identificar um bloco de previsão, e um bloco residual de dados que pode ser aplicado ao bloco de previsão para recriar o bloco original. A informação de previsão pode compreender um ou mais vetores de movimento que são utilizados para identificar o bloco de previsão de dados. Utilizando-se os vetores de movimento, o decodificador pode ser capaz de reconstruir os blocos de previsão que foram utilizados para codificar os blocos residuais. Dessa forma, de acordo com um conjunto de blocos residuais e um conjunto de vetores de movimento (e possivelmente alguma sintaxe adicional), o decodificador pode reconstruir um quadro de vídeo que foi originalmente codificado. A intercodificação com base na estimativa de movimento e compensação de movimento pode alcançar quantidades relativamente altas de compressão sem perda de dados excessiva, visto que os quadros de vídeo sucessivos ou outros tipos de unidades codificadas são frequentemente similares. Uma sequência de vídeo codificada pode compreender blocos de dados residuais, vetores de movimento(quando codificada por interprevisão), indicações de modos de intraprevisão para intraprevisão, e possivelmente outrosdados, tal como tipos de sintaxe.
[0036] As técnicas de interpolação de pixelsubinteiro têm sido desenvolvidas a fim de aperfeiçoar a precisão de previsão para um nível de compressão que pode ser alcançado na intercodificação. Nesse caso, os dados de previsão gerados durante a compensação de movimento, que são utilizados para codificar um bloco de vídeo, podem corresponder a pixels subinteiros, cujos valores podem ser interpolados a partir de valores para pixels completos de blocos de vídeo de um quadro de vídeo de referência ou outra unidade codificada à qual um vetor de movimento se refere. O codificador de vídeo pode calcular valores para as posições de pixel subinteiro utilizando técnicas de interpolação, por exemplo, pela aplicação de filtros de interpolação a um conjunto de suportes, por exemplo, valores para pixels inteiros completos e/ou valores previamente codificados de outras posições de pixel subinteiro. As posições de pixel subinteiro podem ter vários graus de resolução em vários exemplos, tal como resoluções de meio pixel, um quarto de pixel, um oitavo de pixel, uma décima sexta parte de pixel ou outras resoluções. De acordo, o codificador de vídeo pode calcular um vetor de movimento durante a estimativa de movimento que possui precisão de subpixel.
[0037] A figura 1 é um diagrama em bloco ilustrando um exemplo de um sistema de codificação e decodificação de vídeo 10 que pode ser utilizado para implementar uma ou mais das técnicas dessa descrição. Como ilustrado na figura 1, o sistema 10 inclui um dispositivo fonte 12 que transmite o vídeo codificado para um dispositivo de destino 16 através de um canal de comunicação 15. O dispositivo fonte 12 e o dispositivo de destino 16 podem compreender qualquer faixa ampla de dispositivos. Em alguns casos, um ou ambos o dispositivo fonte 12 e o dispositivo de destino 16 pode compreender dispositivos de comunicação sem fio, tal como aparelhos sem fio, os chamados radiotelefones via satélite ou celulares, ou quaisquer dispositivos sem fio que possam comunicar informação de vídeo através de um canal de comunicação 15, caso em que o canal de comunicação 15 é sem fio. As técnicas dessa descrição, no entanto, que se referem à filtragem e geração de dados de previsão durante a codificação de previsão, não são necessariamente limitados às aplicações ou configurações sem fio. As técnicas também podem ser úteis em uma ampla faixa de outras configurações e dispositivos, incluindo os dispositivos que se comunicam através de fios físicos, fibras óticas ou outra mídia física ou sem fio. Adicionalmente, as técnicas de codificação ou decodificação também podem ser aplicadas em um dispositivo isolado que não se comunica necessariamente com qualquer outro dispositivo.
[0038] No exemplo da figura 1, o dispositivo fonte 12 pode incluir uma fonte de vídeo 20, codificador de vídeo 22, modulador/demodulador (modem) 23 e transmissor 24. O dispositivo de destino 16 pode incluir um receptor 26, modem 27, decodificador de vídeo 28, dispositivo de exibição 30. De acordo com essa descrição, o codificador de vídeo 22 do dispositivo fonte 12 pode ser configurado para aplicar uma ou mais das técnicas dessa descrição como parte de um processo de codificação de vídeo. De forma similar, o decodificador de vídeo 28 do dispositivo de destino 16 pode ser configurado para aplicar uma ou mais das técnicas dessa descrição como parte de um processo de decodificação de vídeo.
[0039] Novamente, o sistema ilustrado 10 da figura 1 é meramente ilustrativo. As várias técnicas dessa descrição podem ser realizadas por qualquer dispositivo de codificação que suporta a codificação de previsão com base em bloco, ou por qualquer dispositivo de decodificação que suporta a decodificação de previsão com base em bloco. O dispositivo fonte 12 e o dispositivo de destino 16 são meramente exemplos de tais dispositivos de codificação nos quais o dispositivo fonte 12 gera os dados de vídeo codificados para transmissão para o dispositivo de destino 16. Em alguns casos, os dispositivos 12, 16 podem operar de uma forma substancialmente simétrica, de modo que cada um dos dispositivos 12, 16 inclua componentes de codificação e decodificação de vídeo. Dessa forma, o sistema 10 pode suportar a transmissão de vídeo de via única e duas vias entre os dispositivos de vídeo 12, 16, pode exemplo, parasequenciamento de vídeo, reprodução de vídeo, difusão de vídeo ou vídeo telefonia.
[0040] A fonte de vídeo 20 do dispositivo fonte12 pode incluir um dispositivo de captura de vídeo, tal como uma câmera de vídeo, um arquivo de vídeo contendo vídeo capturado previamente, ou uma alimentação de vídeo de um provedor de conteúdo de vídeo. Como uma alternativa, a fontede vídeo 20 pode gerar dados com base em gráficos de computador como o vídeo fonte, ou uma combinação de vídeo aovivo, vídeo arquivado, e/ou vídeo gerado por computador. Em alguns casos, se a fonte de vídeo 20 for uma câmera de vídeo,o dispositivo fonte 12 e o dispositivo de destino 16 podem formar os chamados telefones com câmera ou vídeo telefones,ou outros dispositivos móveis configurados para manipular os dados de vídeo, tal como dispositivos de computação tipo tablet. Em cada caso, o vídeo capturado, pré-capturado ou gerado por computador pode ser codificado pelo codificador de vídeo 22. A informação de vídeo codificada pode então ser modulada pelo modem 23 de acordo com um padrão de comunicação, por exemplo, tal como um acesso múltiplo por divisão de código (CDMA), ou outro padrão de comunicação, por exemplo, tal como acesso múltiplo por divisão de código(CDMA) ou outro padrão de comunicação, e transmitido para odispositivo de destino 16 através do transmissor 24 e canal de comunicação 15. O modem 23 pode incluir vários misturadores, filtros, amplificadores ou outros componentes projetados para modulação de sinal. O transmissor 24 pode incluir circuitos projetados para transmissão de dados, incluindo amplificadores, filtros e uma ou mais antenas.
[0041] O receptor 26 do dispositivo de destino16 recebe informação através do canal de comunicação 15 e modem 27 demodula a informação. Como o transmissor 24, o receptor 26 pode incluir circuitos projetados para receber dados, incluindo amplificadores, filtros e uma ou mais antenas. Em alguns casos, o transmissor 24 e/ou o receptor 26 pode ser incorporado dentro de um único componente transceptor que inclui ambos o conjunto de circuito de recebimento e transmissão. O modem 27 pode incluir vários misturadores, filtros, amplificadores ou outros componentes projetados para demodulação de sinal. Em alguns casos, os modems 23 e 27 podem incluir componentes para a realização de modulação e demodulação.
[0042] Novamente, o processo de codificação devídeo realizado pelo codificador de vídeo 22 pode implementar uma ou mais das técnicas descritas aqui durante a codificação de interprevisão que pode incluir a estimativa de movimento e compensação de movimento. O processo de decodificação de vídeo realizado pelo decodificador de vídeo 28 também pode realizar tais técnicas durante um estágio de compensação de movimento do processo de decodificação. O termo “codificador” é utilizado aqui para fazer referência a um dispositivo de computador especializado ou aparelho que realiza a codificação de vídeo ou decodificação de vídeo. O termo “codificador” geralmente se refere a qualquer codificador de vídeo, decodificador de vídeo, ou codificador/decodificador combinado (codec). O termo “codificação” se refere à codificação ou decodificação. O dispositivo de exibição 30 exibe os dados de vídeo decodificados para um usuário, e pode compreender qualquer um dentre uma variedade de dispositivos de exibição tal como um tubo de raio catodo (CRT), um monitor de cristal líquido(LCD), um monitor de plasma, um monitor de diodo de emissão de luz orgânico (OLED) ou qualquer outro tipo de dispositivode exibição.
[0043] No exemplo da figura 1, o canal decomunicação 15 pode compreender qualquer meio de comunicaçãosem ou com fio, tal como um espectro de frequência de rádio(RF) ou uma ou mais linhas de transmissão física, ou qualquercombinação de mídia sem e com fio. O canal de comunicação 15pode formar parte de uma rede com base em pacote, tal comouma rede de área local, uma rede de área ampla, ou uma redeglobal tal como a Internet. O canal de comunicação 15 representa geralmente qualquer meio de comunicação adequado, ou coleção de diferentes mídias de comunicação para transmissão de dados de vídeo do dispositivo fonte 12 para o dispositivo de destino 16. O canal de comunicação 15 pode incluir roteadores, comutadores, estações base ou qualquer outro equipamento que possa ser útil para facilitar a comunicação a partir do dispositivo fonte 12 para o dispositivo de destino 16.
[0044] O codificador de vídeo 22 e odecodificador de vídeo 28 podem operar de acordo com um padrão de compressão de vídeo, tal como o padrão ITU-T H.264, alternativamente descrito como MPEG-4, parte 10, Codificação de Vídeo Avançada (AVC). AS técnicas dessa descrição, no entanto, não estão limitadas a qualquer padrão de codificação de vídeo em particular. Apesar de não ilustrado na figura 1, em alguns aspectos, o codificador de vídeo 22 e o decodificador de vídeo 28 podem, cada um, ser integrados com um codificador e decodificador de áudio, e podem incluir unidades MUX-DEMUX adequadas, ou outro hardware e software, para manusear a codificação de ambos o áudio e vídeo em uma sequência de dados comum ou sequências de dados separadas. Se aplicável, as unidades MUX-DEMUX podem se conformar ao protocolo de multiplexador ITU H.233, outros protocolos tais como o protocolo de datagrama de usuário (UDP).
[0045] O codificador de vídeo 22 e odecodificador de vídeo 28 podem, cada um, ser implementados com um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados de aplicação específica (ASICs), matrizes de portas programáveis em campo (FPGAs), lógica discreta, software, hardware, firmware ou qualquer combinação dos mesmos. Quando toda e qualquer uma das técnicas dessa descrição é implementada de software, um dispositivo de implementação pode incluir adicionalmente hardware para o armazenamento e/ou execução de instruçõespara o software, por exemplo, uma memória para armazenar asinstruções e uma ou mais unidades de processamento para execução das instruções. Cada um dentre o codificador de vídeo 22 e o decodificador de vídeo 28 pode ser incluído emum ou mais codificadores ou decodificadores, qualquer um dos quais pode ser integrado como parte de um codec combinadoque provê as capacidades de codificação e decodificação em um dispositivo móvel respectivo, dispositivo de assinante, dispositivo de difusão, servidor, ou similar.
[0046] Uma sequência de vídeo incluitipicamente uma série de quadros de vídeo, também referido como imagens de vídeo. O codificador de vídeo 22 opera nos blocos de vídeo dentro dos quadros de vídeo individuais a fim de codificar os dados de vídeo. Os blocos de vídeo podem ter tamanhos fixos ou variáveis, e podem diferir de tamanho de acordo com um padrão de codificação especificado. Cada quadro de vídeo inclui uma série de cortes. No padrão ITU-T H.264, por exemplo, cada corte pode incluir uma série de macroblocos, que podem ser dispostos em sub-blocos. O padrão H.264 suporta a intraprevisão em vários tamanhos de bloco, tal como 16 por 16, 8 por 8, ou 4 por 4 para componentesluma e 8x8 para componentes de crominância, além de interprevisão em vários tamanhos de bloco tal como 16 x 16, 16 x 8, 8 x 16, 8 x 8, 8 x 4, 4 x 8, e 4 x 4 para componentes luma e tamanhos escalonados correspondentes para componentes de crominância. Blocos de vídeo podem compreender blocos de dados de pixel, ou blocos de coeficientes de transformação, por exemplo, seguindo um processo de transformação tal como uma transformação de cosseno discreta (DCT) ou um processo de transformação conceitualmente similar.
[0047] Blocos de vídeo menores podem prover melhor resolução, e podem ser utilizados para localizações de um quadro de vídeo que incluem altos níveis de detalhamento. Em geral, os macroblocos e os vários sub-blocos podem ser considerados blocos de vídeo. Adicionalmente, um corte pode ser considerado como sendo uma série de blocos de vídeo, tal como os macroblocos e/ou sub-blocos. Cada corte pode ser uma unidade decodificável independentemente de um quadro de vídeo. Alternativamente, os quadros propriamente ditos podem ser unidades decodificáveis, ou outras partes de um quadro podem ser definidas como unidades decodificáveis. O termo “unidade codificada” se refere a qualquer unidade independentemente decodificável de um quadro de vídeo tal como todo um quadro, um corte de um quadro, um bloco de dados de vídeo, ou outra unidade independentemente decodificável definida de acordo com as técnicas de codificação utilizadas.
[0048] Para se codificar os blocos de vídeo, o codificador de vídeo 22 realiza intraprevisão e interprevisão para gerar um bloco de previsão. O codificador de vídeo 22 subtrai os blocos de previsão dos blocos de vídeo originais a serem codificados para gerar os blocos residuais. Dessa forma, os blocos residuais podem representar diferenças de pixel por pixel entre os blocos sendo codificados e os blocos de previsão. O codificador de vídeo 22 pode realizar uma transformação nos blocos residuais para gerar blocos de coeficientes de transformação. Depois da codificação com base em intra ou interprevisão e técnicas de transformação, o codificador de vídeo 22 pode quantizar os coeficientes de transformação. A quantização geralmente se refere a um processo em que os coeficientes são quantizados para reduzir possivelmente a quantidade de dados utilizados para representar os coeficientes. Depois da quantização, a codificação por entropia pode ser realizada de acordo com uma metodologia de codificação por entropia, tal como a codificação de comprimento variável de contexto adaptativo (CAVLC) ou a codificação aritmética binária de contexto adaptativo (CABAC). Detalhes adicionais de um processo de codificação realizado pelo codificador de vídeo 22 são descritos abaixo com relação à figura 2.
[0049] Esforços estão atualmente em andamentono sentido de se desenvolver um novo padrão de codificação de vídeo, atualmente referido como Codificação de Vídeo de Alta Eficiência (HEVC). O padrão futuro também é referido como H.265. Os esforços de padronização são baseados em um modelo de um dispositivo de codificação de vídeo referido como Modelo de Teste HEVC (HM). HM presume várias capacidades de dispositivos de codificação de vídeo através de dispositivos de acordo com, por exemplo, ITU-T, H.264/AVC. Por exemplo, ao passo que H.264 provê nove modos de codificação intraprevisão, HM provê tanto quanto trinta e três modos de codificação intraprevisão.
[0050] HM se refere a um bloco de dados de vídeocomo uma unidade de codificação (CU). Os dados de sintaxe dentro de uma sequência de bits podem definir uma unidade de codificação maior (LCU), que é uma maior unidade de codificação em termos de número de pixels. Em geral, uma CU possui uma finalidade similar a um macro bloco de H.264, exceto que uma CU não possui uma distinção de tamanho. Dessa forma, uma CU pode ser dividida em sub-CUs. Em geral, referências nessa descrição a uma CU podem se referir a uma unidade de codificação maior de uma imagem ou uma sub-CU de uma LCU. Uma LCU pode ser dividida em sub-CUs e cada sub-CU pode ser dividida em sub-CUs. Os dados de sintaxe para uma sequência de bits podem definir um número máximo de vezes que uma LCU pode ser dividida, referida com profundidade de CU. DE acordo, uma sequência de bits também pode definir uma menor unidade de codificação (SCU). Essa descrição também utiliza o termo “bloco” para fazer referência a qualquer uma dentre uma CU, unidade de previsão (PU), ou unidade de transformação (TU).
[0051] Uma LCU pode ser associada a uma estrutura de dados quadtree. Em geral, uma estrutura de dados quadtree inclui um nó por CU, onde um nó raiz corresponde à LCU. Se uma CU for dividida em quatro sub-CUs, o nó correspondente à CU inclui quatro nós folha, cada um dos quais corresponde a uma das 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 indicador dividido, indicando se a CU correspondente ao nó foi dividida em sub-CUs. Os elementos de sintaxe para uma CU podem ser definidos de forma recursiva, e podem depender de se a CU foi dividida em sub-CUs.
[0052] Uma CU que não foi dividida pode incluir uma ou mais unidades de previsão (PUs). Em geral, uma PU representa toda ou uma parte da CU correspondente, e inclui dados para a recuperação de uma amostra de referência para a PU. Por exemplo, quando a PU é codificada intramodo, a PU pode incluir dados descrevendo um modo intraprevisão para a PU. Como outro exemplo, quando a PU é codificada intermodo, a PU pode incluir dados definindo um vetor de movimento para a PU. Os dados definindo o vetor de movimento podem descrever, por exemplo, um componente horizontal do vetor de movimento, um componente vertical co vetor de movimento, uma resolução para o vetor de movimento (por exemplo, uma precisão de um quarto de pixel ou uma precisão de um oitavo de pixel), um quadro de referência ao qual o vetor de movimento aponta, e/ou uma lista de referência (por exemplo, lista 0 ou lista 1) para o vetor de movimento. Os dados para a CU definindo as PUs também podem descrever, por exemplo, a divisão da CU em uma ou mais PUs. Os modos de divisão podem diferir entre se a CU não está codificada, codificada pelo modo de intraprevisão, ou codificada pelo modo de interprevisão.
[0053] Uma CU possuindo uma ou mais PUs também pode incluir uma ou mais unidades de transformação (TUs). Depois da previsão utilizando uma PU, um codificador de vídeo pode calcular um valor residual para a parte da CU correspondente à PU. O valor residual pode ser transformado, digitalizado e quantizado. Uma TU não é necessariamente limitada ao tamanho de uma PU. Dessa forma, TUs pode ser maior ou menor que as PUs correspondentes para a mesma CU. Em alguns exemplos, o tamanho máximo de uma TU pode corresponder ao tamanho da CU correspondente.
[0054] Como notado acima, intraprevisão inclui a previsão de uma PU de uma CU atual de uma imagem a partir de CUs previamente codificadas da mesma imagem. Mais especificamente, um codificador de vídeo pode intraprever uma CU atual de uma imagem utilizando um modo de intraprevisão particular. Um codificador HM pode ser configurado com até trinta e três modos de intraprevisão. Portanto, para suportar um mapeamento de um para um entre os modos de intraprevisão direcional e transformações direcionais, os codificadores e decodificadores HM podem precisar armazenar 66 matrizes para cada tamanho de transformação suportado. Adicionalmente, os tamanhos de bloco para os quais todos os trinta e três modos de intraprevisão são suportados podem ser blocos relativamente grandes, por exemplo, 32 x 32 pixels, 64 x 64 pixels, ou ainda maiores.
[0055] No dispositivo de destino 16, odecodificador de vídeo 28 recebe os dados de vídeo codificados. O decodificador de vídeo 28 decodifica por entropia os dados de vídeo recebidos de acordo com uma metodologia de codificação por entropia, tal como CAVLC ou CABAC, para obter coeficientes quantizados, O decodificador de vídeo 28 aplica a quantização invertida (dequantização) e a transformação invertida para reconstruir o bloco residual no domínio de pixel. O decodificador de vídeo 28 também gera um bloco de previsão com base na informação de controle ouinformação de sintaxe (por exemplo, modo de codificação, vetores de movimento, sintaxe que define os coeficientes defiltro e similares) incluída nos dados de vídeo codificados. O decodificador de vídeo 28 pode calcular uma soma de bloco de previsão e bloco residual reconstruído para produzir um bloco de vídeo reconstruído par exibição. Os detalhes adicionais de um processo de decodificação ilustrativo realizado pelo decodificador de vídeo 28 são descritos abaixo com relação à figura 10.
[0056] Como descrito aqui, Y pode representarluminescência, e Cb e Cr podem representar dois valores diferentes de crominância de um espaço de cor YCbCr tridimensional. Cada localização de pixel pode, na verdade, definir três valores de pixel para um espaço de cor tridimensional. As técnicas dessa descrição, no entanto, podem se referir à previsão com relação a uma dimensão para fins de simplicidade. Até onde as técnicas são descritas com relação aos valores de pixel em uma dimensão, técnicas similares podem ser estendidas para outras dimensões.
[0057] De acordo com as técnicas dessadescrição, o codificador de vídeo 22 e o decodificador de vídeo 28 podem utilizar as uma ou mais técnicas de filtragem por interpolação durante a compensação de movimento. Em particular, de acordo com um aspecto dessa descrição, o codificador de vídeo 22 e/ou o decodificador de vídeo 28 pode obter um bloco de pixels, onde o bloco de pixels inclui valores de pixel inteiro correspondentes às posições de pixel inteiro dentro do bloco de pixels. O codificador de vídeo 22 e/ou o decodificador de vídeo 28 podem computar valores para as posições de subpixel associadas ao bloco de pixels com base nos valores de pixel inteiro, onde a computação dos valores de subpixel compreende a aplicação de um filtro de interpolação a vários conjuntos de suporte de filtro, onde cada um dos conjuntos de suporte de filtro corresponde a um conjunto de uma ou mais posições de pixel inteiro no bloco de pixels. O codificador de vídeo 22 e/ou decodificador de vídeo 28 também pode gerar um bloco de previsão com base em pelo menos alguns dos valores de subpixel para codificar ou decodificar de um bloco de pixels.
[0058] De acordo com um aspecto dessadescrição, o codificador de vídeo 22 e/ou decodificador de vídeo 28 pode aplicar um filtro de interpolação para suportar o filtro compreendendo qualquer combinação de posições de pixel inteiro completo. O codificador de vídeo 22 pode determinar uma pluralidade de conjuntos de coeficientes de filtro para um número de posições de subpixel diferentes (por exemplo, quinze) associadas a uma posição de pixel inteiro completo e enviar os quinze conjuntos de coeficientes de filtro pra outro dispositivo como parte de uma sequênciade bits codificada. Dessa forma, a pluralidade de conjuntosde coeficientes de filtro pode definir todos os coeficientes de filtro para todas as quinze posições de meio pixel e um quarto de pixel. Em alguns exemplos, os conjuntos de coeficientes de filtro para cada meio pixel e um quarto de pixel associado à posição de pixel inteiro completo pode ser singular. Em outros exemplos, alguns ou todos os conjuntos de coeficientes de filtro para os meios-pel e um quarto de pels associados à posição de pixel inteiro completo podem ser iguais.
[0059] O codificador de vídeo 28 do dispositivo de destino 16 pode receber um ou mais conjuntos de coeficientes de filtro como parte de uma sequência de bits de vídeo codificada e gerar quinze conjuntos de coeficientes de filtro correspondentes às quinze posições de subpixel diferentes com base em um ou mais conjuntos de coeficientes de filtro. O decodificador de vídeo 28 também pode gerar valores de sub-pel para a decodificação de vídeo com base em um dentre a pluralidade de conjuntos de coeficientes de filtro, onde os dados de previsão interpolados correspondem a uma das quintas posições de subpixel diferentes, e decodificar um ou mais blocos de vídeo com base nos dados de previsão interpolados.
[0060] De açodo com outro aspecto dessa descrição, o codificador de vídeo 22 pode receber valores para uma pluralidade de posições de pixel inteiro completo de uma amostra de referência, aplicar um filtro de interpolação a um primeiro conjunto de valores para a pluralidade de posições de pixel inteiro completo para calcular um valor para um primeiro pixel subinteiro de uma dentre a pluralidade de posições de pixel inteiro completo, aplicar o mesmo filtro de interpolação a um segundo conjunto diferente de valores para a pluralidade de posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo, e codificar um bloco atual de pixels utilizando um vetor de movimento que aponta para um dentre o primeiro pixel subinteiro e o segundo pixel subinteiro. Em alguns exemplos, o filtro de interpolação é um primeiro filtro de interpolação, e o codificador de vídeo 22 pode aplicar adicionalmente um segundo filtro de interpolação diferente a um terceiro conjunto de valores para a pluralidade de posições de pixel inteiro completo para calcular um valor para um terceiro pixel subinteiro de uma dentre a pluralidade de posições de pixel inteiro completo. Em outros exemplos, filtros ou conjuntos adicionais de valores para a pluralidade de posições de pixel inteiro completo são utilizados para calcular os valores adicionais para as posições de pixel subinteiro.
[0061] O codificador de vídeo 22 pode prover uma indicação do filtro de interpolação utilizado para calcular o valor para o primeiro pixel subinteiro. A indicação pode compreender uma indicação explícita do suporte. Alternativamente, a indicação pode corresponder a um índice ou outro identificador, quando o codificador de vídeo 22 e o decodificador de vídeo 28 são pré-configurados com os conjuntos de suporte. A indicação pode ser provida em um dentre um nível de unidade de previsão, um nível de unidade de codificação, um nível de quadro, um nível de corte, ou um nível de sequência, onde cada nível está relacionado com o bloco atual de pixels. Em alguns exemplos, a indicação pode ser provida em um conjunto de parâmetros de sequência (SPS) ou um conjunto de parâmetros de imagem (PPS). O codificador de vídeo 22 pode enviar a indicação para outro dispositivo como parte de uma sequência de bits codificada. Em alguns exemplos, o filtro de interpolação é um filtro de interpolação ITU-T H.264, um filtro de interpolação fixo (por exemplo, selecionado a partir de um conjunto de filtros de interpolação), ou um filtro de interpolação adaptativo. Ademais, o codificador de vídeo 22 pode prover indicações de suporte para cada um dos pixels subinteiros de um pixel completo utilizando técnicas similares às descritas acima.
[0062] O filtro de interpolação pode ser um filtro separável ou um filtro não separável. Um filtro não separável é um filtro de interpolação em que o suporte de filtro pode ser modificado para gerar diretamente um sub-pel sem realizar uma etapa de filtragem intermediária. Em contraste, um filtro separável é um em que a filtragem pode depender de outra etapa de filtragem. Por exemplo, na filtragem bilinear, um filtro pode ser primeiramente aplicado em uma direção horizontal para gerar um valor para um primeiro local de sub-pel. Então, o filtro pode ser transposto e aplicado através do primeiro local de sub-pel em uma direção vertical para gerar um valor para um segundo local de sub-pel.
[0063] Em outro exemplo, um método pode compreender o recebimento de uma amostra de referência compreendendo uma pluralidade de posições de pixel completo, recebendo uma indicação de um conjunto de posições de pixel inteiro completo da amostra de referência utilizada para interpolar um valor para um pixel subinteiro da amostra de referência, aplicando um filtro de interpolação ao conjunto de posições de pixel inteiro completo para calcular o valor do pixel subinteiro da amostra de referência e decodificando um bloco atual de pixels com relação ao valor calculado do pixel subinteiro.
[0064] A figura 2 é um diagrama em bloco ilustrando um exemplo do codificador de vídeo 22 da figura 1 em maiores detalhes. O codificador de vídeo 22 que pode realizar as técnicas de interprevisão consistentes com essa descrição. O codificador de vídeo 22 é um exemplo de um dispositivo de computador de vídeo especializado ou aparelho referido aqui como um “codificador”. Como ilustrado na figura 2, o codificador de vídeo 22 corresponde ao codificador de vídeo 22 do dispositivo 20. No entanto, em outros exemplos, o codificador de vídeo 22 pode corresponder a um dispositivo diferente. Em exemplos adicionais, outras unidades (tal como, por exemplo, outro codificador/decodificador (CODECS)) também podem realizar técnicas similares como codificador de vídeo 22.
[0065] O codificador de vídeo 22 pode realizar a intra ou intercodificação de blocos dentro dos quadros de vídeo, apesar de os componentes de intracodificação não serem ilustrados na figura 2 para facilitar a ilustração. A intracodificação se baseia na previsão espacial para reduzir ou remover a redundância espacial no vídeo dentro de um quadro de vídeo determinado. A intercodificação se baseia em previsão temporal para reduzir ou remover a redundância temporal no vídeo dentro de quadros adjacentes de uma sequência de vídeo. Intramodo (modo I) pode se referir ao modo de compressão com base em espaço. Os intermodos tal como uma previsão (modo P) ou bidirecional (modo B) podem se referir aos modos de compressão com base em tempo. As técnicas dessa descrição se aplicam durante a intercodificação, e, portanto, unidades de intracodificação tal como unidade de previsão espacial não são ilustradas na figura 2 por motivos de simplicidade e facilidade de ilustração.
[0066] Como ilustrado na figura 2, um codificador de vídeo 22 recebe um bloco de vídeo dentro de um quadro de vídeo a ser codificado. No exemplo da figura 2, o codificador de vídeo 22 inclui uma unidade de codificação de previsão (MCU) 32, memória 34, um somador 48, uma unidade de transformação 38, uma unidade de quantização 40, e uma unidade de codificação por entropia 46. Para a reconstrução de bloco de vídeo, o codificador de vídeo 22 também inclui uma unidade de quantização invertida 42, uma unidade de transformação invertida 44, e um somador 51. Em alguns exemplos, um filtro de desbloqueio também pode ser incluído para os limites de bloco de filtro para remover os artefatos de bloqueio do vídeo reconstruído. Se desejável, o filtro de desbloqueio iria tipicamente filtrar a saída do somador 51. Em um exemplo, como ilustrado na figura 2, a unidade de transformação 38 pode ser um bloco funcional, não uma “TU” em termos de HEVC.
[0067] A unidade de previsão 32 pode incluiruma unidade de estimativa de movimento (ME) 35 e uma unidade de compensação de movimento (MC) 37. Um ou mais filtros de interpolação 39 (referidos aqui como “filtro 39”) podem ser incluídos na unidade de previsão 32 e podem ser invocados por uma ou ambas a unidade ME 35 e a unidade MC 37 para realizar a interpolação como parte da estimativa de movimento e/ou compensação de movimento, de acordo com essa descrição. Outras técnicas podem ser incluídas nas quais um valor para um subpixel é calculado com base nos valores para pixels completos vizinhos e/ou valores calculados previamente parasubpixels vizinhos. O filtro 39 pode na verdade representaruma pluralidade de diferentes filtros para facilitar os inúmeros tipos diferentes de interpolação e filtragem de tipo de interpolação como descrito aqui. Dessa forma, a unidade de previsão 32 pode incluir uma pluralidade de filtros de interpolação ou tipo de interpolação. Durante o processo de codificação, o codificador de vídeo 22 recebe um bloco de vídeo a ser codificado (rotulado “BLOCO DE VÍDEO” na figura 2), e a unidade de previsão 32 realiza a codificação interprevisão para gerar um bloco de previsão (rotulado “BLOCO DE PREVISÃO” na figura 2). Especificamente, a unidade ME 35 pode realizar a estimativa de movimento para identificar o bloco de previsão na memória 34, e a unidade MC 37 pode realizar a compensação de movimento para gerar o bloco de previsão.
[0068] A estimativa de movimento é tipicamenteconsiderada o processo de geração de vetores de movimento, que estimam o movimento dos blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de um bloco de previsão dentro de um quadro de previsão ou referência (ou outra unidade codificada, por exemplo, corte) com relação ao bloco a ser codificado dentro do quadro atual (ou outra unidade codificada). De acordo com as técnicas dessa descrição, o vetor de movimento pode ter a precisão depixel subinteiro. Por exemplo, ambos um componente horizontal e um componente vertical do vetor de movimentopodem ter componentes inteiros completos respectivos e componentes subinteiros. O quadro de referência (ou parte do quadro) pode ser localizado de forma temporal antes de ou depois do quadro de vídeo (ou parte do quadro de vídeo) ao qual o bloco de vídeo atual pertence. A compensação de movimento é tipicamente considerada o processo de recolhimento ou geração de bloco de previsão a partir da memória 34, que pode incluir a interpolação ou de outra forma a geração de dados de previsão com base no vetor de movimento determinado pela estimativa de movimento.
[0069] A unidade ME 35 calcula o vetor demovimento para o bloco de vídeo a ser codificado pela comparação do bloco de vídeo com os blocos de referência de um ou mais quadros de referência (por exemplo, um quadro anterior e/ou subsequente). Os dados para os quadros de referência podem ser armazenados na memória 34. A unidade ME 35 pode realizar a estimativa de movimento com precisão de pixel fracionada, algumas vezes referida como pixel fracionado, pel fracionado, subinteiro ou estimativa de movimento de subpixel. Com tal, os termos pixel fracionado, pel fracionado, subinteiro e estimativa de movimento de subpixel podem ser utilizados de forma intercambiável. Na estimativa de movimento de pixel fracionado, a unidade ME 35 pode calcular um vetor de movimento que indica o deslocamento para um local diferente de um local de pixel inteiro. Dessa forma, o vetor de movimento pode ter a precisão de pixel fracionado, por exemplo, a precisão de meio pixel, a precisão de um quarto de pixel, a precisão de um oitavo de pixel, ououtra precisão de pixel fracionado. Dessa forma, a estimativa de movimento de pixel fracionado permite que a unidade deprevisão 32 estime o movimento com maior precisão do que os locais de pixel inteiro (ou pixel completo), e, dessa forma, a unidade de previsão 32 pode gerar um bloco de previsão mais preciso. A estimativa de movimento de pixel fracionado pode ter uma precisão de meio pixel, uma precisão de um quarto de pixel, uma precisão de um oitavo de pixel, ou qualquer outra precisão de subpixel mais fina. A unidade ME 35 pode invocar os filtros 38 para quaisquer interpolações necessárias durante o processo de estimativa de movimento.Em alguns exemplos, a memória 34 pode armazenar os valoresinterpolados para os pixels subinteiros, que podem ser calculados, por exemplo, pelo somador 51 utilizando os filtros 39. Por exemplo, o somador 51 pode aplicar os filtros 39 aos blocos reconstruídos que devem ser armazenados na memória 34.
[0070] Para se realizar a compensação demovimento de pixel fracionado, a unidade MC 37 pode realizar a interpolação (algumas vezes referida como filtragem porinterpolação) a fim de gerar dados na resolução de subpixel(referida aqui como valores de pixel fracionado ou subpixel).A unidade MC 37 pode invocar os filtros 38 para essa interpolação. A unidade de previsão 32 pode realizar a interpolação (ou filtragem tipo interpolação de pixels inteiros) utilizando as técnicas descritas aqui. Dessa forma, a unidade de previsão 32 pode calcular os valores para as posições de pixel subinteiro de um bloco de referência, que podem então ser utilizados para produzir um bloco de previsão de dados de vídeo.
[0071] Uma vez que o vetor de movimento para o bloco de vídeo a ser codificado é calculado pela unidade ME 35, a unidade MC 37 gera o bloco de vídeo de previsão associado ao esse vetor de movimento. A unidade MC 37 pode recolher o bloco de previsão da memória 34 com base no vetor de movimento determinado pela unidade MC 35. No caso de um vetor de movimento com precisão de pixel fracionado, a unidade MC 37 pode filtrar os dados da memória 34 para interpolar tais dados com a resolução de subpixel, por exemplo, invocando os filtros 39 para esse processo. Em alguns casos, as posições de pixel inteiro completo correspondentes aos coeficientes de filtro utilizados para interpolar tais dados para a resolução de subpixel podem ser indicadas como um ou mais elementos de sintaxe de interpolação para a unidade de codificação por entropia 46 para inclusão na sequência de bits codificada. De forma similar, a técnica de filtragem por interpolação ou modo que foi utilizado para gerar os dados de previsão de subpixel também pode ser indicada como um ou mais elementos de sintaxe de interpolação para a unidade de codificação por entropia 46 para inclusão na sequência de bits codificada.
[0072] Uma vez que a unidade de previsão 32 gera o bloco de previsão, o codificador 22 forma um bloco de vídeo residual (rotulado “BLOCO RESIDUAL” na figura 2) pela subtração do bloco de previsão do bloco de vídeo original sendo codificado. O somador 48 representa os um ou mais componentes que realizam essa operação de subtração. A unidade de transformação 38 aplica uma transformação, tal como uma transformação de cosseno discreto (DCT) ou uma transformação conceitualmente similar, ao bloco residual, produzindo um bloco de vídeo compreendendo coeficientes de bloco de transformação residuais. A unidade de transformação 38, por exemplo, pode realizar outras transformações, tal como as definidas pelo padrão H.264, que são conceitualmente similares a DCT. Tais transformações podem incluir, por exemplo, transformações direcionais (tal como transformações de teorema de Karhunen-Loeve), transformações de wavelet, transformações de inteiro, transformações de sub-banda, ou outros tipos de transformações. Em qualquer caso, a unidade de transformação 38 se aplica à transformação do bloco residual, produzindo um bloco de coeficientes de transformação residual. A transformação pode converter a informação residual de um domínio de pixel em um domínio de frequência.
[0073] A unidade de quantização 40 quantiza os coeficientes de transformação residual para reduzir ainda mais a taxa de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. Depois da quantização, a unidade de codificação por entropia 46 codifica por entropia os coeficientes de transformação quantizados. Por exemplo, a unidade de codificação por entropia 46 pode realizar CAVLC, CABAC ou outra metodologia de codificação por entropia.
[0074] A unidade de codificação por entropia 46 também pode codificar um ou mais vetores de movimento e suportar informação obtida a partir da unidade de previsão 32 ou outro componente do codificador de vídeo 22. Os um ou mais elementos de sintaxe de previsão podem incluir um modo de codificação, dados para um ou mais dos vetores de movimento (por exemplo, componentes horizontais e verticais, identificadores de lista de referência, índices de lista, e/ou informação de sinalização de resolução de vetor de movimento), uma indicação de uma técnica de interpolação que foi utilizada para gerar os dados de subpixel, um conjunto ou subconjunto de coeficientes de filtro, um conjunto de posições de pixel completo ou subinteiro utilizado como um suporte de filtro, ou outra informação associada à geração do bloco de precisão. Depois da codificação por entropia pela unidade de codificação por entropia 46, os elementos de sintaxe e vídeo codificado podem ser transmitidos para outro dispositivo ou arquivados (por exemplo, na memória 34) para transmissão ou recuperação futura.
[0075] A unidade de quantização invertida 42 e a unidade de transformação invertida 44 aplicam a quantização invertida e a transformação invertida, respectivamente, para reconstruir o bloco residual no domínio de pixel, por exemplo, para uso posterior como um bloco de referência. O bloco residual reconstruído (rotulado “BLOCO RESIDUAL RECONSTRUÍDO” na figura 2) pode representar uma versão reconstruída do bloco residual provido para a unidade de transformação 38. O bloco residual reconstruído pode diferir do bloco residual gerado pelo somador 48 devido à perda de detalhes causada pelas operações de quantização e quantização invertida. O somador 51 soma o bloco residual reconstruído ao bloco de previsão de movimento compensado produzido pela unidade de previsão 32 para produzir um bloco de vídeo reconstruído para armazenamento na memória 34. O bloco de vídeo reconstruído pode ser utilizado pela unidade de previsão 32 como um bloco de referência que pode ser utilizado para codificar de forma subsequente um bloco em um quadro de vídeo subsequente ou unidade codificada subsequente.
[0076] Como descrito acima, a unidade deprevisão 32 pode realizar a estimativa de movimento com a precisão de pixel fracionado (ou subpixel). Quando a unidade de previsão 32 utiliza a estimativa de movimento de pixelfracionado, a unidade de previsão 32 pode gerar dados naresolução de subpixel (por exemplo, valores de pixel fracionado ou subpixel) utilizando operações de interpolação descritas nessa descrição. Em outras palavras, as operações de interpolação podem ser utilizadas para computar os valores nas posições entre as posições de pixel inteiro. As posições de subpixel localizadas a meia distância entre as posições de pixel inteiro podem ser referidas como posições de meio pixel (meio pel), posições de subpixel localizadas a meia distância entre uma posição de pixel inteiro e uma posição de meio pixel podem ser referidas como posições de um quarto de pixel (um quarto de pel), posições de subpixel localizadas a meia distância entre uma posição de pixel inteiro (ou posição de meio pixel) e uma posição de um quarto de pixel são referidas como posições de um oitavo de pixel (um oitavo de pel) e similares.
[0077] De acordo com as técnicas dessadescrição, o mesmo filtro de interpolação 39 pode ser aplicado a dois ou mais conjuntos diferentes de suporte, para calcular os valores para dois pixels subinteiros do mesmo pixel inteiro. Como descrito em maiores detalhes abaixo, a unidade de previsão 32, por exemplo, pode aplicar um dos filtros 39 a um primeiro conjunto de suporte para calcular um valor para um primeiro pixel subinteiro de um pixel inteiro, e aplicar o mesmo filtro de interpolação a um segundo conjunto diferente de suporte para calcular um valor para um segundo pixel subinteiro do mesmo pixel inteiro. Ademais, os conjuntos de suporte podem ter vários formatos, por exemplo, linear (horizontal, vertical, diagonal, inclinado a partir do lado superior esquerdo para o lado inferior direito, diagonal inclinado do lado superior direito para o lado inferior esquerdo, e similares), e um cruzamento em formato de X no pixel inteiro, circular (por exemplo, pixels em um formato circular em torno do pixel completo), matriz (por exemplo, dois ou mais pixels em múltiplas fileiras de pixels completos), ou outros formatos.
[0078] Dessa forma, o codificador de vídeo 33 representa um exemplo de um codificador de vídeo configurado para receber valores para uma pluralidade de posições de pixel inteiro completo de uma amostra de referência, aplicar um filtro de interpolação a um primeiro conjunto de valores para a pluralidade de posições de pixel inteiro completo para calcular um valor para um primeiro pixel subinteiro de uma dentre a pluralidade de posições de pixel inteiro completo, aplicar o mesmo filtro de interpolação a um segundo conjunto diferente de valores para a pluralidade de posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo, codificar um bloco atual de pixels utilizando um vetor de movimento que aponta para uma dentre o primeiro pixel subinteiro e um segundo pixel subinteiro.
[0079] A figura 3 é um diagrama conceitual ilustrando as posições de pixel inteiro (ou pixel completo) associadas aos dados de previsão, e as posições de subpixel (ou pixel fracionado) associadas aos dados de previsão interpolados. Na ilustração conceitual da figura 3, as caixas diferentes representam posições de pixel e subpixel, dentro de um quadro ou um bloco de um quadro. As letras maiúsculas com números (nas caixas com linhas sólidas) representam locais de pixel inteiro, enquanto as letras minúsculas (nas caixas com linhas pontilhadas) representam as posições de subpixel. em particular, as localizações de pixel A1-A6, B1- B6,a C1-C6, D1-D6, E1-E6 e F1-F6 representam um conjunto de 6 por 6 de localizações de pixel inteiro dentro de um quadro, corte, ou outra unidade codificada. As posições de subpixel “a” a “o” representam quinze posições de subpixel associadas ao pixel inteiro C3, por exemplo, entre as localizações de pixel inteiro C3, C4, D3 e D4. Posições de subpixel similares podem existir para cada localização de pixel inteiro. As posições de subpixel “a” a “o” representam as posições de pixel de meio pel e um quarto de pel associadas ao pixel inteiro C3. Como descrito em maiores detalhes abaixo, o mesmo filtro de interpolação pode ser utilizado para calcular valores para dois ou mais subpixels, a-o, por exemplo, pela aplicação do mesmo filtro de interpolação a diferentes conjuntos de suporte.
[0080] As localizações de pixel inteiro podem ser associadas a um elemento de sensor físico, tal como um fotodiodo quando os dados de vídeo foram originalmente gerados. O fotodiodo pode medir uma intensidade de uma fonte de luz no local do sensor e associar um valor de intensidade de pixel com o local de pixel inteiro. Novamente, cada local de pixel inteiro pode ter um conjunto associado de quinze posições de subpixel (ou possivelmente mais ou menos). O número de posições de subpixel associado às localizações de pixel inteiro pode depender da precisão desejada. No exemplo ilustrado na figura 3, a precisão desejada é a precisão de um quarto de pixel, caso em que, cada uma das localizações de pixel inteiro se relaciona com as quinze posições de subpixel diferentes. Mais ou menos posições de subpixel podem ser associadas a cada localização de pixel inteiro com base na precisão desejada. Para a precisão de meio pixel, por exemplo, cada localização de pixel inteiro pode corresponder a três posições de subpixel. Como outro exemplo, cada uma das localizações de pixel inteiro pode corresponder a sessenta e três posições de subpixel para uma precisão de um oitavo de pixel. Cada localização de pixel pode definir um ou mais valores de pixel, por exemplo, um ou mais valores de luminescência e crominância.
[0081] No exemplo da figura 3, as posições de subpixel associadas ao pixel inteiro “C3” são ilustradas para precisão de um quarto de pixel. As quinze posições de subpixel associadas ao pixel C3 são rotuladas como “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j”, “k”, “l”, “m”, “n” e “o”. A maior parte das localizações fracionadas associadas aoutras localizações de pixel inteiro não são ilustradas por motivos de simplicidade (além das utilizadas para gerar uma ou mais das 15 localizações fracionadas diferentes associadas à localização de pixel C3, como descrito em maiores detalhes abaixo). As posições de subpixel “b”, “h”, e “j” podem ser referidas como localizações de meio pixel e posições de subpixel “a”, “c”, “d”, “e”, “f”, “g”, “i”, “k”, “l”, “m”, “n” e “o” podem ser referidas como localizações de um quarto de pixel.
[0082] A unidade de previsão 32 do codificador de vídeo 40 pode determinar os valores de pixel para as posições de subpixel “a” a “o” utilizando a filtragem por interpolação pela unidade MC 37. A unidade de previsão 32 pode determinar os valores de pixel para as posições de subpixel “a” a “o” utilizando um filtro de interpolação de 36 saídas. A unidade de previsão 32 pode aplicar o filtro de interpolação a todas as 36 posições de pixel inteiro completo para cada uma das posições de subpixel. Em outros exemplos, subconjuntos das posições de pixel inteiro completo são utilizados como suporte de filtro para interpolar os valores para as posições de subpixel.
[0083] Em um exemplo, a unidade de previsão 32 do codificador de vídeo 40 pode determinar os valores de pixel para as posições de subpixel “a” a “o” utilizando a filtragem por interpolação pela MCU 37 utilizando um filtro de interpolação consistente com o padrão ITU-T H.264. Consistente com o padrão ITU-T H.264, por exemplo, a unidade de previsão 32 pode determinar os valores de pixel para localizações de meio pixel utilizando um filtro de interpolação de 6 saídas, tal como um filtro Wiener. No caso do padrão H.264, os coeficientes de filtro podem ser utilizados. A unidade de previsão 32 pode aplicar o filtro de interpolação a qualquer conjunto de seis posições de pixel inteiro completo. Em um exemplo, para a posição de meio pixel “b”, as saídas do filtro de 6 saídas pode corresponder a B3, B4, C3, C4, D3, D4. Em outros exemplos, as saídas do filtro de 6 saídas para a posição de meio pixel “b” podem ser outro conjunto de seis posições de pixel inteiro completo. Da mesma forma, em um exemplo, para a posição de meio pixel “h”, as saídas do filtro de 6 saídas pode corresponder a C2, C3, C4, D2, D3, D4. Por exemplo, os valores de pixel para a posição de subpixel “j” podem ser computados utilizando-se as equações (1) ou (2):j = ((Al -5*B2+20*C3 + 20*D4 - 5*E5 + F6) + 16)/32 (1)j = ((A6-5*B5+20*C4 + 20*D3-5*E2 + Fl)+ 16)/32 (2)
[0084] As equações 1 e 2 ilustradas acima ilustram um exemplo de como os valores das posições de pixel inteiro completo podem ser associados a diferentes coeficientes do filtro de 6 saídas. Em outros exemplos, os valores das posições de pixel inteiro completo podem corresponder a diferentes coeficientes do filtro de 6 saídas. Em um exemplo, as posições de pixel inteiro completo no suporte de filtro para uma posição de subpixel que estão mais próximas da posição de subpixel recebem coeficientes de ponderação mais altos no filtro, enquanto as posições de pixel inteiro completo adicionalmente da posição de subpixel recebem a menor ponderação. Em outros exemplos, outros métodos de determinação de qual posição de pixel inteiro completo corresponde a quais coeficientes são utilizados.
[0085] Diferentes sub-pels do mesmo pel completo podem ser calculados utilizando suporte diferente. Por exemplo, algumas posições de subpixel (tal como “b” e “h” associadas à posição de pixel completo C3, descrito acima) podem ser calculadas com o mesmo ou diferentes subconjuntos de posições de pixel inteiro completo, um local de subpixel pode ser determinado com base em outras posições de subpixel. Por exemplo, a posição de subpixel “j”, também associada à localização de pixel completo C3, pode ser calculada utilizando-se um filtro de interpolação bilinear que depende das posições de subpixel. Para a posição de meio pixel “j”, as saídas do filtro de 6 saídas correspondem as mesmas a interpolação horizontal entre as posições C1-C6 e D1-D6, ou verticalmente entre as posições A3-F3 e A4-F4. A localização de meio pixel “j” pode ser computada com um filtro de 6 saídas que utiliza os valores de pixel interpolados previamente das posições de meio pixel, por exemplo, de acordo com uma das equações (3) ou (4):Ij = ((aa-5*bb+20*b + 20*hh-5*ii+jj) + 16)/32 (3)j = ((cc - 5*dd +20*h + 20*ee - 5*ff + gg) + 16)/32 (4)onde (como ilustrado na figura 3) aa corresponde a uma interpolação entre A3 e A4, bb corresponde a uma interpolação entre B3 e B4, b corresponde a uma interpolação entre C3 e C4, hh corresponde a uma interpolação entre D3 e D4, ii corresponde a uma interpolação entre E3 e E4 e jj corresponde a uma interpolação entre F3 e F4. Na equação 4, cc corresponde a uma interpolação entre C1 e D1, dd corresponde a uma interpolação entre C2 e D2, h corresponde a uma interpolação entre C3 e D3, ee corresponde a uma interpolação entre C4 e D4, ff corresponde a uma interpolação entre C5 e D5 e gg corresponde a uma interpolação entre C6 e D6.
[0086] Consistente com o padrão H.264, a unidade de previsão 32 pode determinar alguns valores de pixel nas localizações de um quarto de pixel “a”, “c”, “d”, “e”, “f”, “g”, “i”, “k”, “l”, “m”, “n”, “o” utilizando um filtro de interpolação bilinear e os valores de pixel das localizações de meio pixel e pixel inteiro circundantes. Por exemplo, a unidade de previsão 32 pode determinar um valor de pixel associado à posição de subpixel “a” utilizando valores de pixel de C3 e “b” determina um valor de pixel associado à posição de subpixel “c” utilizando os valores de pixel “b” e C4, e similares.
[0087] O filtro real que é aplicado pela unidade MC 37 para gerar dados interpolados nas posições de subpixel pode ser submetido a uma ampla variedade de implementações. Como um exemplo, a unidade de previsão 32 pode utilizar a filtragem por interpolação adaptativa (AIF), como descrito abaixo, para definir os valores interpolados. O comitê ITU- T SG16/Q.6/VCEG (Grupo de Especialistas em Codificação de Vídeo) tem explorado as tecnologias de codificação que oferecem maior eficiência de codificação que H.264 e, em particular, AIF. AIF oferece um grande ganho de codificação sobre a filtragem por interpolação utilizada no padrão H.264, especialmente em sequências de vídeo com alta resolução (por exemplo 720i/p ou 1080i/p). Em AIF, o filtro de interpolação para cada posição de subpixel é analiticamente calculado para cada quadro de vídeo pela minimização da energia de erro de previsão. Isso ajuda a solucionar entre outras coisas, erros de quantização e estimativa de movimento, ruído de câmera e outros artefatos contidos nos quadros de vídeo originais e de referência. Os coeficientes de filtro adaptativos derivados analiticamente para cada quadro podem então ser previstos, quantizados, codificados e enviados na sequência de bits de vídeo. Algumas técnicas dessa descrição podem funcionar dentro de um esquema AIF, além de muitos outros esquemas de interpolação.
[0088] Existem muitos tipos diferentes de esquemas AIF consistentes com os aspectos dessa descrição. Por exemplo, um primeiro esquema é um AIF não separável bidimensional (NS-AIF). Apesar de cada um desses esquemas AIF utilizar técnicas de interpolação diferentes e suporte, todos os três esquemas AIF pode utilizar os processos analíticos similares para derivar os coeficientes de filtro, que é explicado abaixo utilizando-se AIF não separável como um exemplo. Qualquer um dos esquemas AIF pode ser utilizado com diferentes posições de pixel inteiro completo diferentes para qualquer posição de subpixel determinada.
[0089] Assume-se que um filtro não separávelbidimensional 6 por 6 possua coeficientes ,7 onde i,j = 0...5 e SP representa uma das 15 posições de subpixel (“a” a “o”) ilustradas na figura 3. Note-se que 6 das 15 posições de subpixel, isso é, “a”, “b”, “c”, “d”, “h”, e “l” são posições de subpixel unidimensionais (1D), e a unidade de previsão 32 pode utilizar um filtro de interpolação de 6 saídas para interpolar tais dados. As posições de subpixel “a”, “b”, “c”, “d”, “h” e “l” são 1D no sentido de serem localizadas em uma linha horizontal ou vertical entre duas posições de pixel inteiro. Além disso, assume-se que os pixels de previsão nas posições de pixel inteiro (A1 a F6 na figura 3 no quadro de referência assuma os valores e pixel de Pi,j onde i,j=0...5. Isso é, A1 assume o valor de P0,0,...A6 assume o valor de P5,0, ..., F1 assume o valor de P5,0,...,e F6 assume o valor de P5,5. Então, o valor interpolado PSP na posição de subpixel SP, SP e{a,...,ü}, pode ser calculado pela unidade de previsão 32 utilizando a seguinte equação:
Figure img0001
[0090] Considere-se Sx,y o valor de pixel noquadro de vídeo atual na posição (x,y).
Figure img0002
onde (mvx, mvy) no vetor de movimento (LmvxJ, LmvyJ) é o componente inteiro do vetor de movimento e FO é o desviode filtro. O valor é a posição de pixel correspondentenos quadros de referência. Por exemplo, no caso do filtro de 6 saídas, FO = 6/2 - 1 = 2. Para cada posição de subpixelSP, a energia de erro de previsão (eSP)2 entre o valor de pixel real no quadro atual e o valor interpolado pode ser acumulado pela unidade de previsão 32 para todos os pixels que possuem precisão de vetor de movimento correspondente à posição de subpixel SP. A energia de erro de previsão (eSP)2 pode ser calculada pela unidade de previsão 32 utilizando a seguinte equação:
Figure img0003
[0091] Para cada uma das posições de subpixel aa o, a unidade MC 37 pode configurar um conjunto individual de equações pela computação da derivação de (eSP)2 com relação aos coeficientes de filtro hSPi,j. O número de equações nesse caso é igual ao número de coeficientes de filtro utilizados para a posição de subpixel atual SP. Para cada posição de subpixel, a unidade de previsão 32 pode utilizar um filtro de interpolação 1D de 6 por 6 saídas (por exemplo, filtro de 6 saídas 1D). Em outros exemplos, a unidade de previsão 32 pode utilizar filtros de interpolação de saída diferentes (por exemplo, um filtro de 12 saídas 1D). NO caso de um filtro de 6 saídas 1D, um sistema de seis equações pode sersolucionado pela unidade MC 37:
Figure img0004
[0092] Os filtros 39 podem representar um filtro ou um conjunto de muitos filtros diferentes que podem ser utilizados pela unidade MC 37 para gerar os dados de previsão.
[0093] Dessa forma, um processo ilustrativo de derivação e aplicação de filtros AIF pode ter as seguintes etapas. que podem ser realizadas pela unidade de previsão 32:
[0094] Estimativa de vetores de movimento (mvx, mvy) para cada bloco de vídeo a ser codificado. Durante a estimativa de movimento, um filtro de interpolação fixo (por exemplo, processo de interpolação de H.264/AVC) pode ser aplicado.
[0095] Utilização desses vetores de movimento, acúmulo de energia de erro de previsão para cada posição de subpixel SP através do quadro de vídeo atual. Então, cálculo de coeficientes de filtro adaptativos hSPi,j para cada posição de subpixel SP independentemente pela minimização da energia de erro de previsão como nas duas equações de energia de previsão acima.
[0096] Estimativa de novos vetores demovimento. Durante esse processo de estimativa de movimento, os filtros de interpolação adaptativos computados na etapa 2 podem ser aplicados. A utilização de filtros de interpolação adaptativos, erros de estimativa de movimento (causados por aliasing, ruído de câmera, etc.) podem ser reduzidos e uma melhor precisão de movimento é alcançada.
[0097] Diferentes esquemas AIF podem utilizar omesmo processo analítico que o provido acima. As diferenças entre os diferentes esquemas se encontram basicamente no número de coeficientes de filtro singulares utilizados, se os filtros de interpolação são separáveis ou n ao, e ao suporte de filtro utilizado (tal como posições de pixel inteiro utilizadas para interpolar pelo menos uma parte das posições de subpixel). Em cada um desses esquemas, diferentes conjuntos de posições de pixel inteiro e completo podem ser utilizados para diferentes posições de subpixel.
[0098] Para NS-AIF, por exemplo, a unidade MC37 da unidade de precisão 32 pode interpolar as posições de subpixel 1D “a”, “b”, “c”, “d”, “h”,e “l” utilizando umfiltro de interpolação de 6 saídas 1D (também referido como um filtro de 6 posições visto que cada saída corresponde a uma posição de pixel inteiro), que exige seis coeficientes. Os seis coeficientes dos filtros de 6 posições utilizados para interpolar os subpixels correspondem, cada um, a uma das posições de pixel inteiro ilustradas na figura 3. Porexemplo, para posições de subpixel “a”, as seis posições de pixel inteiro correspondentes aos coeficientes podem ser C1, C2, C3, C4, C5 e C6. Em outros exemplos, qualquer um dossubconjuntos de seis elementos da posição de pixel inteiro completo pode ser utilizado para calcular o valor para a posição de subpixel “a”. Essas posições de pixel inteiro representam exemplos do “suporte de filtro” do filtro de interpolação. Em alguns exemplos, o suporte de filtro pode incluir valores calculados previamente para outros pixels subinteiros.
[0099] Em outro esquema AIF, isso é, S-AIF, a unidade de previsão 32 pode utilizar filtros de interpolação separáveis utilizando qualquer subconjunto de posições de pixel inteiro e completo, ao invés de filtros de interpolação não separáveis como utilizado em NS-AIF. Por exemplo, para as posições de subpixel 1D, a unidade de previsão 32 (por exemplo, unidade MC 37 da unidade de previsão 32) aplica apenas a filtros direcionais horizontais, apenas filtros direcionais verticais, apenas filtros diagonais (ver figuras 4 e 5), apenas um filtro direcional horizontal e vertical combinado (ver figura 5), apenas filtros retangulares (ver figuras 7 e 8), ou qualquer outra combinação de suporte de filtro, dependendo da localização de subpixel. Em um exemplo, um filtro diagonal compreende um filtro de 6 posições (ou 6 saídas). A unidade de previsão 32 aplica os filtros diagonais para as posições de subpixel “e”, “j” e “o” com as posições de pixel inteiro A1, B2, C3, D4, E5 e F6 (ver figura 4) como suporte de filtro e aplica os filtros direcionais verticais para as posições de subpixel “d”, “h”, e “l” com as posições de pixel inteiro A3, B3, C3, D3, E3 e F3 (ver figura 6) como suporte de filtro. Para as posições de subpixel restantes, isso é, as posições de subpixel 2D, a unidade de previsão 32 pode aplicar filtragem diagonal seguida de filtragem vertical, ou filtragem vertical seguida por filtragem diagonal. Novamente, os coeficientes de filtro utilizados para os filtros diagonal e vertical separáveis podem ser computados de acordo com a equação (7) acima, em exemplos direcionados para a filtragem por interpolação adaptativa. Em outros exemplos, qualquer subconjunto e formato de suporte de filtro pode ser utilizado para calcular valores para as posições de subpixel.
[0100] A unidade MC 37 da unidade de previsão 32 pode utilizar uma ou mais das técnicas de interpolação descritas aqui, que pode aumentar os ganhos de codificação durante a interpolação dos valores para as posições de subpixel e/ou aumentar a capacidade de variação do suporte de filtro utilizado para interpolação das posições de subpixel. Essa descrição descreve outros exemplos de conjuntos de suporte de filtro que podem ser utilizados para interpolação (tal como suporte diagonal, ou um suporte de filtro de doze pixels com um formato radial) em maiores detalhes abaixo. Adicionalmente, as técnicas para seleção entre os filtros de interpolação, técnicas para a seleção de suporte de filtro, e técnicas para a codificação de previsão de coeficientes de filtro também são descritas.
[0101] A figura 4 é um diagrama conceitual ilustrando um suporte de pixel de seis pixels diagonal com relação a um local de pixel subinteiro. De acordo com essa descrição, a unidade MC 37 pode computar os valores de subpixel para qualquer uma das posições de subpixel “a” a “o” com base nos valores de pixel inteiro sombreados. Nesse caso, a computação de quaisquer valores de subpixel compreende a aplicação de um filtro de interpolação que utiliza um conjunto diagonal de posições de suporte de filtro correspondentes a um conjunto de seis posições de pixel inteiro (ou possivelmente mais) que são diagonais com uma posição de pixel inteiro e completo associada às posições de subpixel como ilustrado na figura 4. As posições de suporte de filtro são ilustradas com o sombreamento e letras maiúsculas, e as posições de subpixel são ilustradas como caixas com linhas pontilhadas e letras minúsculas. A unidade MC 37 pode interpolar os pixels dessa forma para apenas um subconjunto de pixels em um bloco de vídeo, e pode gerar um bloco de previsão com base na interpolação dos valores de subpixel. Em outros exemplos, a unidade MC 37 pode interpolar pixels dessa forma para cada pixel do bloco de vídeo.
[0102] O suporte de filtro de seis posições possui um formato diagonal nesse exemplo. No entanto, em outros exemplos, qualquer outro suporte de filtro de seis posições pode ter qualquer outro formato. O conjunto de seis ou mais posições de pixel inteiro pode correr de forma diagonal apesar de as posições de subpixel serem ilustradas com sombreamento na figura 4. O suporte de filtro pode incluir duas das quatro posições inteiras cercando as posições de subpixel, C3 e D4, além de quatro posições de pixel inteiro A1, B2, E5 e F6 ao longo de uma linha diagonal através de C3 e D4. Tal filtragem pode formar parte da compensação de movimento durante um processo de codificação de vídeo pelo codificador de vídeo 22 (figura 2) ou durante um processo de decodificação de vídeo pelo decodificador de vídeo 28 (figura 10). Durante o processo de codificação de vídeo, a unidade de previsão 32 pode enviar uma pluralidade de conjuntos de valores de coeficiente para a unidade de codificação por entropia 46 como parte dos elementos de sintaxe de previsão.
[0103] Como ilustrado na figura 4, o conjunto de seis ou mais posições de pixel inteiro que cercam as posições de subpixel possui um formato diagonal. Em outro exemplo, o suporte de filtro pode incluir duas das quatro posições de inteiro cercando as posições de subpixel C4 e D3, além de quatro posições de pixel inteiro A6, B5, E2 e F1 ao longo de uma linha diagonal através de C4 e D3). Em alguns exemplos, apenas um subconjunto de posições de subpixel “a” a “o” é determinado utilizando-se o suporte de filtro diagonal. Em outros exemplos, todas as posições de subpixel “a” a “o” são determinadas utilizando-se o suporte de filtro diagonal.
[0104] A unidade de codificação por entropia 46 pode codificar os conjuntos de valores de coeficiente e enviar os valores de coeficiente do filtro de interpolação como parte de uma sequência de bits codificada, que pode então ser transmitida para outro dispositivo. Cada um dentre a pluralidade de conjuntos de valores de coeficiente definidos com relação a cada localização de subpixel diferente ilustrada na figura 4 pode definir diferentes ponderações para as seis ou mais posições de pixel inteiro. A unidade de codificação por entropia 46 também pode codificar os conjuntos de suporte de filtro e saída de conjuntos de suporte de filtro como parte de uma sequência de bits codificada, que pode então ser transmitida para outros dispositivos. Diferentes conjuntos de posições de pixel subinteiro podem ter diferentes conjuntos de suporte de filtro. Adicionalmente, os conjuntos diferentes de suporte de filtro podem ser aplicados aos mesmos filtros de interpolação ou a filtros diferentes.
[0105] A figura 5 é um diagrama conceitual ilustrando um suporte de filtro de doze pixels em formato de x com relação a um local de pixel subinteiro. De acordo com essa descrição, a unidade MC 37 pode computar os valores de subpixel para qualquer uma das posições de subpixel “a” a “o” com base nos valores de pixel inteiro sombreados. Nesse caso, a computação de qualquer um dos valores de subpixel compreende a aplicação de um filtro de interpolação que define um conjunto em formato de x de posições de suporte de filtro correspondentes a um conjunto de doze (ou possivelmente mais) posições de pixel inteiro que são diagonais com quatro posições de pixel inteiro completo cercando as posições de subpixel como ilustrado na figura 5. As posições de suporte de filtro são ilustradas com sombreamento e letras maiúsculas, e as posições de subpixel são ilustradas como caixas com linhas pontilhadas e letras minúsculas. A unidade MC 37 pode interpolar os pixels dessa forma com base na interpolação dos valores de subpixel. Em outros exemplos, a unidade MC 37 pode interpolar os pixels dessa forma para cada pixel do bloco de vídeo.
[0106] O suporte de filtro de doze posições possui um formato de X. No entanto, em outros exemplos, qualquer suporte de filtro de doze posições para qualquer uma das posições de subpixel pode ter qualquer outro formato. O conjunto de doze ou mais posições de pixel inteiro que correm em formato de X através das posições de subpixel são ilustradas com sombreamento na figura 5. O suporte de filtro pode incluir quatro posições de inteiro cercando as posições de subpixel C3, C4, D3 e D4 além de quatro posições de pixel inteiro A1, B2, E5 e F6 ao longo de uma linha diagonal através de C3 e D4, e quatro posições de pixel inteiro A6, B5, E2 e F1 ao longo de uma linha diagonal através de C4 e D3. Tal filtragem pode formar parte da compensação de movimento durante um processo de codificação de vídeo pelo codificador de vídeo 22 (figura 2) ou durante um processo de decodificação de vídeo pelo decodificador de vídeo 28 (figura 10). Durante o processo de codificação de vídeo, a unidade de previsão 32 pode enviar uma pluralidade de conjuntos de valores de coeficiente para a unidade de codificação por entropia 46 como parte dos elementos de sintaxe de previsão.
[0107] Em alguns exemplos, apenas um subconjunto de posições de subpixel “a” a “o” são determinadas utilizando-se o suporte de filtro em formato de X. Em outros exemplos, todas as posições de subpixel “a” a “o” são determinadas utilizando-se o suporte de filtro em formato de X.
[0108] A unidade de codificação por entropia 46 pode codificar os conjuntos de valores de coeficiente e enviar os valores de coeficiente do filtro de interpolação como parte de uma sequência de bits codificada, que pode então ser transmitida para outro dispositivo. Cada um dentre a pluralidade de conjuntos de valores de coeficiente definidos com relação a cada localização de subpixel diferente ilustrada na figura 5 pode definir diferentes ponderações para as doze ou mais posições de pixel inteiro. A unidade de codificação por entropia 46 também pode codificar os conjuntos de suporte de filtro e enviar os conjuntos de suporte de filtro como parte de uma sequência de bits codificada, que pode então ser transmitida para outro dispositivo.
[0109] A figura 6 é um diagrama conceitual ilustrando um suporte de filtro de doze pixels e formato cruzado com relação a pelo menos uma posição de subpixel. De acordo com essa descrição, a unidade MC 37 pode computar valores de subpixel para quaisquer posições de subpixel associadas a uma posição de pixel completo com base nos valores de pixel inteiro sombreados. Nesse caso, a computação de quaisquer dos valores de subpixel compreende a aplicação de um filtro de interpolação que define um conjunto em formato de t de posições de suporte de filtro correspondendo a um conjunto de doze posições de pixel inteiro (ou possivelmente mais) que podem incluir as quatro posições de pixel inteiro completo cercando as posições de subpixel (por exemplo, C3, C4, D3 e D4), além de posições de pixel inteiro verticais (por exemplo, A3, B3, E3 e F3), e posições de pixel inteiro horizontais (por exemplo, C1, C2, C5 e C6). As posições de suporte de filtro são ilustradas com sombreamento e letras maiúsculas, e algumas das posições de subpixel são ilustradas como caixas com linhas pontilhadas e letras minúsculas. A unidade MC 37 pode interpolar os pixels dessa forma para apenas um subconjunto de pixels em um bloco de vídeo, e pode gerar um bloco de previsão com base na interpolação dos valores de subpixel. Em outros exemplos, a unidade MC 37 pode interpolar pixels dessa forma para cada pixel no bloco de vídeo.
[0110] Como ilustrado na figura 6, três posições de subpixel horizontais “a”, “b” e “c”, e três posições de subpixel verticais “d, “h”, e “l” podem ser previstas com o suporte de filtro de doze pixels. No entanto, em outros exemplos, qualquer posição de subpixel associada a uma posição de pixel completo (tal como, C3 ilustrado na figura 6) pode ser prevista utilizando-se o suporte de filtro de doze pixels ilustrado na figura 6.
[0111] Da mesma forma, a unidade de codificação por entropia 46 pode codificar os conjuntos de valores de coeficiente e enviar os valores de coeficiente do filtro de interpolação como parte da sequência de bits codificada, que pode então ser transmitida para outro dispositivo. Cada um dentre a pluralidade de conjuntos de valores de coeficientes definido com relação a cada localização de subpixel diferente ilustrada na figura 5 pode definir ponderações diferentes para as doze ou mais posições de pixel inteiro. A unidade de codificação por entropia 46 também pode codificar os conjuntos de suporte de filtro e enviar os conjuntos de suporte de filtro como parte de uma sequência de bits codificada, que pode então ser transmitida para outro dispositivo.
[0112] A figura 7 é um diagrama conceitual ilustrando um suporte de filtro de doze pixels de formato circular (também referido como um formato radial) com relação a uma localização de subpixel. Similar aos exemplos de diferentes suportes de filtro descritos acima, a unidade MC 37 pode computar os valores de subpixel para qualquer posição de subpixel com base nos valores de pixel inteiro sombreados. Nesse caso, a computação dos valores de subpixel compreende a aplicação de um filtro de interpolação que define um conjunto bidimensional de posições de suporte de filtro correspondendo a um conjunto de doze posições de pixel inteiro (ou possivelmente mais ou menos) que cercam as posições de subpixel como ilustrado na figura 7. As posições de suporte de filtro são ilustradas com sombreamento de letras maiúsculas e as posições de subpixel são ilustradas como caixas com linhas pontilhadas e letras minúsculas. A unidade MC 37 pode interpolar os pixels dessa forma para qualquer pixel de um bloco de vídeo, e pode gerar um blocode previsão com base no valor de subpixel interpolado. O suporte de filtro de 12 posições possui um formato radial,e possui uma resposta de frequência similar a um suporte de filtro de 36 posições utilizado em NS-AIF, mas com complexidade de interpolação reduzida.
[0113] O conjunto de doze ou mais posições depixel inteiro que cercam as posições de subpixel são ilustradas com sombreamento na figura 4, e podem incluir quatro posições de pixel inteiro C3, C4, D3 e D4 cercando osquinze valores de meio pel e um quarto de pel, e as oito posições de pixel inteiro B3, B4, C2, C5, D2, D5, E3 e E4cercando as quatro posições de pixel inteiro. Cada uma das posições de suporte de filtro no conjunto bidimensional das posições de suporte de filtro ilustradas na figura 7 estão dentro das duas posições de pixel inteiro com relação às posições de subpixel. Tal filtragem pode formar parte da compensação de movimento durante um processo de codificação de vídeo pelo codificador de vídeo 22 (figura 2) ou durante um processo de decodificação de vídeo pelo decodificador de vídeo 28 (figura 16). Durante o processo de codificação de vídeo, a unidade de previsão 32 envia uma pluralidade de conjuntos de valores de coeficiente para a unidade de codificação por entropia 46 como parte dos elementos de sintaxe de previsão.
[0114] Como ilustrado na figura 4, o conjunto de doze posições de pixel inteiros que cercam as posições de subpixel possui um formato radial e pode compreender um conjunto de posições de pixel inteiro espacialmente mais próximos aos valores de sub-pel definidos pelo filtro de interpolação (por exemplo, filtros 39 na figura 2). Em outros exemplos, o formato radial ilustrado na figura 7 pode ser alterado, por exemplo, um pixel inteiro para a esquerda ou para a direita. Em outros exemplos, qualquer conjunto de qualquer número de posições de pixel inteiro completo é utilizado para prever uma posição de sub-pel com um filtro de interpolação.
[0115] A figura 8 é um diagrama conceitual ilustrando um suporte de filtro de quatro pixels em formato quadrado com relação à pelo menos uma localização de pixel subinteiro. De acordo com essa descrição, a unidade MC 37 pode computar valores de subpixel para quaisquer posições de subpixel associadas a uma posição de pixel completo com base nos valores de pixel inteiro sombreados. Nesse caso, a computação de quaisquer valores de subpixel compreende a aplicação de um filtro de interpolação que define um conjunto de formato quadrado das posições de suporte de filtro correspondentes a um conjunto de quatro posições de pixel inteiro. No exemplo ilustrado na figura 8, as quatro posições de pixel inteiro incluem a posição de quatro pixels inteiros completos cercando as posições de subpixel, isso é, C3, C4, D3 e D4. As posições de suporte de filtro são ilustradas com sombreamento e letras maiúsculas, e algumas posições de subpixel são ilustradas como caixas com linhas pontilhadas e letras minúsculas.
[0116] A unidade MC 37 pode interpolar pixels dessa forma para apenas um subconjunto de pixels em um bloco de vídeo, e pode gerar um bloco de previsão com base na interpolação dos valores de subpixel. Em outros exemplos, a unidade MC 37 pode interpolar os pixels dessa forma para cada pixel do bloco de vídeo. A unidade MC 37 pode utilizar qualquer tipo adequado de filtro de interpolação para prever uma posição de subpixel utilizando essas quatro posições de pixel integral. Em outros exemplos, a unidade MC 37 pode interpolar as posições de subpixel utilizando qualquer conjunto de quatro posições de pixel inteiro completo.
[0117] A figura 9 é um diagrama conceitual ilustrando um suporte de filtro de seis pixels retangular com relação a uma localização de pixel subinteiro. Nesse exemplo, a unidade MC 37 pode computar os valores de subpixel para quaisquer posições de subpixel associada a uma posição de pixel completo com base nos valores de pixel inteiro sombreados. As posições de suporte de filtro são ilustradas com sombreamento e letras maiúsculas, e algumas posições de subpixel são ilustradas como caixas com linhas pontilhadas e letras minúsculas. Nesse caso, a computação de quaisquer valores de subpixel compreende a aplicação de um filtro de interpolação que define um conjunto retangular de posições de suporte de filtro correspondentes a um conjunto de seis posições de pixel inteiro. No exemplo ilustrado na figura 8, seis posições de pixel inteiro incluem a posição de quatro pixels inteiros completos cercando as posições de subpixel, além de duas posições de pixel inteiro completo adicionais adjacentes à posição de quatro pixels inteiros completos cercando as posições de subpixel. Visto que a posição de subpixel “f” é prevista na figura 9, o suporte de filtro inclui quatro posições de pixel inteiro localizadas em torno do subpixel “f” C3, C4, D3, e D4, além de posições de pixel completo adjacentes B3 e B4.
[0118] Em outros exemplos, as posições de pixel completo adjacentes podem incluir C2 e D2, C5 e D5 ou E3 e E4. Em outros exemplos, a unidade MC 37 pode interpolar as posições de subpixel utilizando qualquer conjunto de seis posições de pixel inteiro completo. Qualquer filtro de interpolação de 6 saídas adequado pode ser utilizado para prever a posição de pixel subinteiro.
[0119] A unidade de codificação por entropia 46 pode codificar os conjuntos de valores de coeficiente e enviar os valores de coeficiente do filtro de interpolação como parte de uma sequência de bits codificada, que pode então ser transmitida para outro dispositivo. Cada um dentre a pluralidade de conjuntos de valores de coeficiente definidos com relação a cada localização de subpixel diferente ilustrada na figura 9 pode definir diferentes ponderações para as doze ou mais posições de pixel inteiro. A unidade de codificação por entropia 46 também pode codificar os conjuntos de suporte de filtro e enviar os conjuntos de suporte de filtro como parte de uma sequência de bits codificada, que pode então ser transmitida para outro dispositivo.
[0120] Com referência novamente à figura 3, diferentes conjuntos de posições de pixel subinteiro dentro de uma única unidade de previsão podem ter aplicado o mesmo filtro de interpolação a diferentes conjuntos de suporte de filtro a partir do mesmo quadro de imagem. Adicionalmente, os mesmos ou diferentes filtros de interpolação podem ser aplicados a diferentes conjuntos de suporte de filtro dentro de uma única unidade de previsão. Por exemplo, a posição de subpixel “e” pode ser prevista utilizando seis suportes diagonais como ilustrado na figura 4. O suporte de filtro para o subpixel “e” pode incluir posições de pixel inteiro completo A1, B2, C3, D4, E5 e F6. O filtro de interpolação utilizado para o subpixel “e” pode ser um filtro Wiener de 6 saídas. Dentro da mesma unidade de previsão, a posição de subpixel “j” pode ser prevista utilizando-se um conjunto de doze posições de pixel inteiro completo possuindo um formato de x como ilustrado na figura 5. O suporte de filtro para o subpixel “j” pode incluir posições de pixel inteiro completo A1, A6, B2, B5, C3, C4, D3, D4, E2, E5, F1 e F6. O filtro de interpolação utilizado para o subpixel “e” pode ser um filtro Wiener de doze saídas.
[0121] Adicionalmente, a posição de pixel subinteiro “h” pode ser prevista utilizando o suporte de formato cruzado como ilustrado na figura 6. O suporte de filtro para o subpixel “h” pode incluir doze posições de pixel inteiro completo incluindo A3, B3, C1, C2, C3, C4, C5, C6, D3, D4, E3 e F3. O filtro de interpolação utilizado para prever o subpixel “h” pode ser um filtro separável ou não separável de doze saídas. Outra posição de sub-pel, “k” pode ser prevista como ilustrado na figura 7. O suporte de filtro de formato redondo para o subpixel “k” pode incluir doze posições de pixel inteiro completo incluindo B3, B4, C2, C3, C4, C5, D2, D3, D4, D5, E3 e E4. O filtro de interpolação utilizado para prever o subpixel “h” pode ser um filtro de doze saídas.
[0122] Adicionalmente, como ilustrado na figura 8, a posição de pixel subinteiro “m” pode ser prevista utilizando-se as quatro posições de pixel inteiro completo mais próximas do subpixel “m”. Um filtro de interpolação de quatro saídas pode ser utilizado com o suporte de filtro incluindo C3, C4, D3 e D4 para o subpixel “m”. Como outro exemplo, a posição de pixel de subinteiro “f” pode ser prevista utilizando-se o suporte em formato retangular como ilustrado na figura 9. O suporte de filtro para o subpixel “f” pode incluir seis posições de pixel inteiro completo incluindo B3, B4, C3, C4, D3 e D4. O filtro de interpolação utilizado para prever o subpixel “f” pode ser um filtro separável ou não separável de 12 saídas.
[0123] Descritos acima se encontra apenas alguns poucos exemplos de diferentes conjuntos de suporte de filtro utilizados para prever as posições de subpixels para uma unidade de previsão. Como descrito aqui, as posições de subpixel “e”, “j”, “h”, “k”, “m”, e “f” são previstas utilizando-se o mesmo filtro de interpolação. Por exemplo, o subpixel “e” e “f” podem ser ambos previstos utilizando- se um filtro Wiener de seis saídas. Outras posições de subpixel podem ser previstas utilizando-se filtros de interpolação diferentes das outras posições de subpixel.
[0124] Em outros exemplos, algumas posições de pixel inteiro completo podem ser repetidas no cálculo de um valor de uma posição de subpixel. Por exemplo, se um filtro de interpolação de 6 saídas 1D estiver sendo utilizado, o suporte para a posição de subpixel pode compreender um conjunto de menos que seis posições de pixel inteiro completo. Em tal exemplo, uma ou mais posições de pixel inteiro completo são repetidas. Em um exemplo, essas posições de pixel inteiro completo que estão mais perto da posição de subpixel são as que são repetidas. Da mesma forma, em um exemplo, para a posição de meio pixel “e”, as saídas do filtro de 6 saídas podem corresponder a B3, C3, C4, D3 e D4. Por exemplo, os valores de pixel para a posição de subpixel “e” podem ser computados utilizando a equação (8):e = ((B3 - 5*C4 + 20*C3 - 5*D3 + D4) + 16)/32 (8)
[0125] Como descrito nesses exemplos em particular, nenhuma posição de sub-pel depende de outra posição de sub-pel. No entanto, em outros exemplos, uma posição de sub-pel pode depender de outra posição de sub- pel. Muitos outros exemplos são possíveis, incluindo qualquer combinação do suporte de filtro e qualquer escolha de filtro de interpolação para cada posição de subpixel. Muitos outros tamanhos e formatos de filtro podem ser utilizados de acordo com a filtragem de sub-pel.
[0126] A figura 10 é um diagrama em bloco ilustrando um exemplo de um decodificador de vídeo 28, que pode decodificar uma sequência de vídeo que é codificada da forma descrita aqui. O decodificador de vídeo 28 é um exemplo de um dispositivo ou aparelho de computador de vídeo especializado referido aqui como um “codificador”. Como ilustrado na figura 10, o decodificador de vídeo 28 corresponde ao decodificador de vídeo 28 do dispositivo 20. No entanto, em outros exemplos, o decodificador de vídeo 28 pode corresponder a um dispositivo diferente. Em exemplos adicionais, outras unidades (tal como, por exemplo, outro codificador/decodificador (CODECS)) também podem realizar técnicas similares que o decodificador de vídeo 28.
[0127] O decodificador de vídeo 28 inclui uma unidade de decodificação por entropia 52 que decodifica por entropia a sequência de bits recebida para gerar coeficientes quantizados e os elementos de sintaxe de previsão. Os elementos de sintaxe de previsão podem incluir um modo de codificação, um ou mais vetores de movimento, informação identificando uma técnica de interpolação para gerar dados de subpixel, coeficientes para uso na filtragem por interpolação, e/ou informação associada à geração do bloco de previsão.
[0128] Os elementos de sintaxe de previsão, por exemplo, os coeficientes, são enviados para a unidade de previsão 55. Se a previsão for utilizada para codificar os coeficientes com relação aos coeficientes de um filtro fixo, ou com relação um ao outro, a unidade de previsão de coeficiente e quantização invertida 53 pode decodificar os elementos de sintaxe para definir os coeficientes reais. Além disso, se a quantização for aplicada a qualquer um dentre sintaxe de previsão, unidade de previsão de coeficiente e quantização invertida 53 também pode remover tal quantização. Coeficientes de filtro, por exemplo, podem ser codificados de forma previsível e quantizados de acordo com essa descrição, e nesse caso, a unidade de previsão de coeficiente e quantização invertida 53 pode ser utilizada pelo decodificador de vídeo 28 para decodificar por previsão e dequantizar tais coeficientes.
[0129] A unidade de previsão 55 pode gerar dados de previsão com base nos elementos de sintaxe de previsão e um ou mais blocos previamente decodificados que são armazenados na memória 62, quase que da mesma forma que a descrita em detalhes acima com relação à unidade de previsão 32 do codificador de vídeo 22. Em particular, a unidade de previsão 55 pode realizar uma ou mais das técnicas de filtragem por interpolação dessa descrição durante a compensação de movimento para gerar um bloco de previsão com uma precisão particular, tal como uma precisão de um quarto de pixel. Como tal, uma ou mais das técnicas dessa descrição podem ser utilizadas pelo decodificador de vídeo 28 na geração de um bloco de previsão. A unidade de previsão 55 pode incluir uma unidade de compensação de movimento que compreende filtros utilizados para interpolação e técnicas de filtragem tipo interpolação dessa descrição. O componente de compensação de movimento não é ilustrado na figura 10 por motivos de simplicidade e facilidade de ilustração.
[0130] A unidade de quantização invertida 56 quantiza de forma invertida, isso é, dequantiza, os coeficientes quantizados. O processo de quantização invertida pode ser um processo definido para decodificação H.264 ou para qualquer outro padrão de decodificação. A unidade de transformação invertida 58 aplica uma transformação invertida, por exemplo, um DCT invertido ou o processo de transformação invertida conceitualmente similar, aos coeficientes de transformação a fim de produzir blocos residuais no domínio de pixel. O somador 64 soma o bloco residual com o bloco de previsão correspondente gerado pela unidade de previsão 55 para formar uma versão reconstruída do bloco original codificado pelo codificador de vídeo 22. Se desejado, um filtro de desbloqueio também pode ser aplicado ao filtro de blocos decodificados a fim de remover os artefatos de bloqueio. Os blocos de vídeo decodificados são então armazenados na memória 62, que provê blocos de referência para a compensação de movimento subsequente e também produz vídeo decodificado para acionar o dispositivo de exibição (tal como o dispositivo 28 da figura 1).
[0131] Utilizando-se as técnicas de filtragem por interpolação dessa descrição, o decodificador de vídeo 28 pode computar valores de pixel para as posições de subpixel utilizando um filtro de interpolação possuindo qualquer tamanho ou formato de suporte de filtro. Em um exemplo, o decodificador de vídeo 28 utiliza técnicas NS-AIF para computar os valores de pixel para um subpixel utilizando um suporte de filtro de 36 posições (isso é, um suporte de filtro 6x6 2D, como ilustrado na figura 3). Como outro exemplo, S-AIF pode utilizar posições de pixel inteiros separáveis como suporte de filtro para a filtragem por interpolação. Em outro exemplo, D-AIF computa as posições de subpixel utilizando um filtro de interpolação possuindo um suporte de filtro de seis posições ou um suporte de filtro diagonal de doze posições. Outros filtros de interpolação, tais como qualquer filtro de interpolação ITU-T H.264, podem ser utilizados para computar as posições de subpixel. Qualquer filtro de interpolação adequado conhecido agora ou contemplado no futuro pode ser utilizado para codificar ou decodificar uma posição de subpixel. Adicionalmente, o decodificador de vídeo 28 pode utilizar filtros de interpolação que são filtros de interpolação fixos, filtros de interpolação comutados, ou filtros de interpolação adaptativos, ou combinações dos mesmos. Os filtros de interpolação podem, adicionalmente, ser separáveis ou não separáveis. Em um exemplo, o decodificador de vídeo ilustrativo 28 pode utilizar filtros de interpolação que são filtros de interpolação fixos, filtros de interpolação comutados ou filtros de interpolação adaptativos, ou combinações dos mesmos. Os filtros de interpolação podem ser adicionalmente separáveis ou não separáveis. Em um exemplo, o decodificador de vídeo 28 pode receber uma indicação do filtro para aplicar, além de uma indicação do conjunto de suporte de filtro ao qual aplicar o filtro, em uma sequência de bits recebida (por exemplo, do codificador de vídeo 22).
[0132] Em alguns casos, o suporte de filtro pode ser escolhido com base em sua provável correlação com um determinado subpixel. Por exemplo, uma desvantagem de se utilizar o suporte de filtro diagonal como em D-AIF é que as posições de pixel inteiro utilizadas na filtragem são mais distantes da posição atual a ser interpolada. À medida que a distância entre a posição atual a ser interpolada e as posições dos pixels utilizados como suporte de filtro aumenta, a correlação de pixel espacial diminui. Como tal, o suporte de filtro diagonal utilizado em D-AIF é menos adequado para a formação de uma previsão precisa.
[0133] A fim de prover uma melhor previsão utilizando pixels com maior correlação com a posição a ser interpolada (isso é, posições de pixel que estão mais pertoou a uma distância mais curta da posição a ser interpolada), enquanto mantém a mesma baixa complexidade oferecida por D-AIF, um conjunto mais adequado de suporte de filtro pode ser utilizado para o subpixel (por exemplo, o suporte de filtro de quatro posições ilustrado na figura 8 pode ser utilizadopara interpolação). As posições de pixel inteiro utilizadasno suporte de filtro de quatro posições descrito nessa descrição incluem as quatro posições de pixel inteiro cercando as posições de subpixel, isso é, posições de pixel inteiro C3, C4, D3 e D4, que podem ser referidas comoposições de pixel inteiro de “canto” visto que são localizadas perto dos cantos das posições de subpixel. Em adição às posições de pixel inteiro de canto, uma ou mais posições de pixel inteiro imediatamente adjacentes às posições de pixel inteiro de canto também podem ser utilizadas no suporte de filtro, como ilustrado na figura 9. As posições de pixel inteiro imediatamente adjacentes às posições de pixel inteiro de canto podem incluir posições de pixel inteiro diretamente acima (na direção do topo ou norte) ou diretamente abaixo (na direção do fundo ou sul) as posições de pixel inteiro de canto além de posições de pixel inteiro diretamente para a esquerda (ou oeste) ou diretamente para a direita (ou leste) das posições de pixel inteiro de canto. Todas essas posições de pixel inteiro estão localizadas dentro de duas posições de pixel inteiro do subpixel a ser interpolado, nesses exemplos em particular.
[0134] O suporte de filtro de acordo com astécnicas dessa descrição pode, no entanto, incluir localizações de pixel inteiro adicionais. Por exemplo, o suporte de filtro pode incluir localizações de pixel inteiro que são localizadas dentro de três posições de pixel inteiro da posição de subpixel a ser interpolada e forma um formato radial. Adicionalmente, o suporte de filtro pode incluir localizações de pixel inteiro que são localizadas dentro de quatro ou mais posições de pixel inteiro da posição de subpixel. Em alguns exemplos, o suporte de filtro pode incluir qualquer subconjunto de posições de pixel inteiro completo no bloco codificado determinado.
[0135] Mesmo posições de um quarto de pixel ou resolução mais fina podem ser interpoladas com base nas posições de pixel inteiro localizadas dentro de pelo menos duas posições de pixel inteiro. Além disso, o suporte de filtro pode ser escolhido com base em uma correlação das posições de pixel inteiro completo com a posição de subpixel. Dessa forma, as técnicas de suporte de filtro dessa descrição proveem uma melhor previsão de interpolação utilizando pixels inteiros com uma correlação maior com a posição a ser interpolada. Adicionalmente, qualquer sub-pel pode ser previsto ou decodificado sem ter que prever ou decodificar outro sub-pel do qual depende.
[0136] A figura 11 é um fluxograma ilustrando uma operação ilustrativa de um codificador de vídeo que utiliza o suporte de filtro de pixel consistente com essa descrição. A técnica da figura 11 será descrita a partir da perspectiva do codificador de vídeo 22 da figura 2, apesar de outros dispositivos poderem realizar técnicas similares. O codificador de vídeo 22 pode receber valores para uma pluralidade de posições de pixel inteiro completo de uma amostra de referência (102).
[0137] O codificador de vídeo 22 pode aplicar um filtro de interpolação a um primeiro conjunto de valores para a pluralidade de posições de pixel inteiro completo para calcular um valor para um primeiro pixel subinteiro de uma dentre a pluralidade de posições de pixel inteiro completo (104). O codificador de vídeo 22 pode aplicar o mesmo filtro de interpolação a um segundo conjunto diferente de valores para a pluralidade de posições de pixel inteiro completo para calcular um valor para um segundo pixel subinteiro diferente de uma das posições de pixel inteiro completo (106). Com base nesses valores calculados, o codificador de vídeo 22 pode codificar um bloco atual de pixel sutilizando um vetor de movimento que aponta para um dentre primeiro pixel subinteiro e o segundo pixel subinteiro. As técnicas similares à operação ilustrativa do codificador de vídeo 22 descrito com relação à figura 11 serão explicadas adicionalmente nas figuras 12 e 13.
[0138] A figura 12 é um fluxograma ilustrando outra operação ilustrativa de um codificador de vídeo que utiliza o suporte de filtro de pixel consistente com essa descrição. A técnica da figura 12 será descrita a partir da perspectiva do codificador de vídeo 22 da figura 2 apesar de outros dispositivos poderem realizar técnicas similares. Como ilustrado, na figura 12, a unidade MC 37 da unidade de previsão 32 obtém um bloco de pixels a partir da memória 34 que inclui os valores de pixel inteiro correspondendo às posições de pixel inteiro (112). Para cada posição de subpixel, o codificador 22 determina o suporte de filtro que compreende um subconjunto de posições de pixel inteiro e completo no bloco de pixels (114). Os métodos de determinação de suporte de filtro são descritos abaixo com relação às figuras 12 e 13. Os métodos de determinação de suporte de filtro podem depender de características específicas do codificador sendo utilizado, tal como o codificador de vídeo 22.
[0139] Os filtros 39 computam os valores de subpixel com base em um conjunto de suporte de filtro que compreende qualquer número de posições de pixel inteiro completo que cercam as posições de subpixel (116). Como explicado em maiores detalhes acima, o suporte de filtro pode ser utilizado para gerar quaisquer interpolações de subpixel possíveis.
[0140] Uma vez que o suporte de filtro é determinado, a unidade MC 37 então gera um bloco de previsão com base nos valores de subpixel computados (118). Em particular, a unidade MC 37 pode gerar e enviar um bloco de previsão interpolado compreendendo os valores de subpixel interpolados. O somador 48 pode então codificar um bloco de vídeo atual com base no bloco de previsão interpolado (120), por exemplo, pela subtração do bloco de previsão interpolado a partir do bloco de vídeo sendo codificado para gerar um bloco residual. O bloco residual pode então ser transformado e quantizado pela unidade de transformação 38 e unidade de quantização 40, respectivamente. Seguindo a codificação por entropia pela unidade de codificação por entropia 46, o codificador de vídeo 22 pode enviar uma corrente de bits de vídeo codificada e informação de filtro (122). A informação de filtro, como descrito aqui, pode compreender uma indicação de qual suporte de filtro foi utilizado para codificar cada posição de subpixel. A informação de filtro também pode incluir uma indicação de qual filtro de interpolação foi utilizado para uma posição de subpixel particular. A informação de filtro pode ser enviada uma vez por unidade codificada, ou possivelmente várias vezes por unidade codificada se diferentes áreas de uma unidade codificada utilizarem diferentes tipos de interpolação sub-pel.
[0141] A figura 13 é um fluxograma ilustrando um método ilustrativo de determinação de suporte de filtro para um pixel subinteiro consistente com essa descrição. A técnica da figura 13 será descrita a partir da perspectiva do codificador de vídeo 22 da figura 2 apesar de outros dispositivos poderem realizar técnicas similares. O codificador de vídeo 22 pode empregar técnicas de múltiplas passagens para determinar qual suporte de filtro utilizar para cada posição de subpixel em um bloco de pixels.
[0142] Como ilustrado, na figura 13, ocodificador de vídeo 22 calcula um primeiro vetor de movimento para o bloco de pixels com base em uma posição de subpixel interpolada utilizando um primeiro conjunto de posições de pixel inteiro completo (132). Um vetor de movimento pode ser calculado para o quadro utilizando, por exemplo, um método de estimativa de movimento convencional.Como descrito acima, qualquer formato ou número de posições de pixel inteiro completo pode ser utilizado para prever uma posição de sub-pel. O codificador de vídeo 22 pode calcularum primeiro valor de erro para o primeiro vetor de movimento (134). Em um exemplo, o codificador 22 pode calcular o primeiro valor de erro utilizando um erro de quadrado médio da previsão para a posição de sub-pel.
[0143] O codificador de vídeo 22 pode calcularum segundo vetor de movimento para o bloco de pixels combase na posição de subpixel interpolada utilizando um segundo conjunto de posições de pixel inteiro completo (136). O primeiro conjunto de posições de pixel inteiro completo pode ser diferente do segundo conjunto de posições de pixel inteiro completo. O codificador de vídeo 22 pode calcular um segundo valor de erro para o segundo vetor de movimento (138). De forma similar, o segundo valor de erro pode ser calculado utilizando um cálculo de erro de quadrado médio.
[0144] Com base em uma comparação dos primeiroe segundo valores de erro, o codificador 22 pode selecionar um dos primeiro e segundo conjuntos de posições de pixel inteiro completo (140). Por exemplo, um conjunto de posições de pixel inteiro completo pode ser selecionado como um suporte de filtro para uma posição de subpixel visto que o conjunto de posições de pixel inteiro completo resulta em um erro menor para a posição de subpixel. A técnica ilustrada na figura 13 pode ser aplicada para cada posição de subpixel em um bloco de pixels. Em outros exemplos, a técnica ilustrada na figura 13 pode ser uma vez por bloco de pixels para uma posição de subpixel única.
[0145] Em um exemplo, essa determinação pode ser feita subpixel por subpixel. Adicionalmente, esse método ilustrativo pode ser realizado para cada um dentre uma pluralidade de filtros de interpolação diferentes. Em tal exemplo, um suporte de filtro e filtro de interpolação pode ser escolhido para um determinado fator, tal como o provimento de erro médio.
[0146] Para todos os blocos que apontam para um sub-pel, por exemplo, o sub-pel “b”, o codificador 22 prevê o sub-pel “b” utilizando uma pluralidade de conjuntos de localizações de pixel inteiro completo. O codificador 22 pode então calcular o erro de quadrado médio para várias previsões do sub-pel “b”, e seleciona o conjunto de localizações de pixel inteiro completo que correspondem à previsão do sub-pel “b” que provê o erro médio. O codificador de vídeo 22 pode repetir esse processo para cada posição de subpixel. Em outros exemplos, o codificador de vídeo 22 aplica conjuntos similares do suporte de filtro a posições de subpixel situadas de forma similar.
[0147] A figura 14 é um fluxograma ilustrando outro método ilustrativo de determinação de suporte de filtro para um pixel subinteiro consistente com essa descrição. Nesse exemplo, o suporte de filtro é determinado para cada localização de subpixel em um primeiro quadro previamente codificado (152). Em um exemplo, o suporte de filtro é determinado para o primeiro quadro como descrito com relação à figura 13. O codificador de vídeo 22 pode aplicar os mesmos conjuntos de suporte de filtro a cada subpixel em um segundo quadro subsequente à medida que os conjuntos de suporte de filtro são aplicados ao subpixel correspondente no quadro anterior (154). O método ilustrativo evita a realização de técnicas de múltiplas passagens.
[0148] Outros métodos de seleção de suporte de filtro para uma posição de sub-pel podem incluir a seleção de um subconjunto de qualquer número de posições de pixel inteiro completo que cercam a posição de subpixel. As posições de pixel inteiro completo podem ser selecionadas com base em qualquer número de fatores, incluindo a localização da posição de subpixel a ser prevista, uma correlação da posição de pixel inteiro completo com a posição de subpixel, ou proximidade da posição de pixel inteiro completo da posição de subpixel.
[0149] Alguns conjuntos ilustrativos do suporte de filtro para um valor de subpixel podem ser baseados em um conjunto de suporte de filtro que compreende doze ou mais posições que cercam as posições de subpixel, como ilustrado nas figuras 3 e 7. Em outro exemplo, os filtros 39 computam os valores de subpixel com base em um conjunto de suporte de filtro que compreende seis ou mais posições que incluem uma posição de pixel inteiro completo associada à posição de subpixel, como ilustrado nas figuras de 4 a 7 e 9. Em outro exemplo, os filtros 39 computam valores de subpixel com base em um conjunto de suporte de filtro que compreende quatro posições de pixel inteiro completo cercando a posição de subpixel como ilustrado na figura 8.
[0150] A figura 15 é um fluxograma ilustrando uma operação ilustrativa de um decodificador de vídeo que utiliza o suporte de filtro consistente com essa descrição. Dessa forma, o processo da figura 15 pode ser considerado o processo de decodificação alternada para o processo de codificação da figura 11. A figura 14 será descrita a partir da perspectiva do decodificador de vídeo 28 da figura 10 apesar de outros dispositivos poderem realizar técnicas similares.
[0151] O decodificador de vídeo 28 pode receber uma amostra de referência compreendendo uma pluralidade de posições de pixel inteiro completo (172). Em um exemplo, o decodificador de vídeo 28 recebe a amostra de referência de um codificador de vídeo, tal como o codificador de vídeo 22. O decodificador de vídeo 28 pode receber uma indicação de um conjunto de posições de pixel inteiro completo da amostra de referência (174). O conjunto de posições de pixel inteiro completo pode ter sido utilizado para interpolar um valor para um pixel subinteiro da amostra de referência.
[0152] O filtro de interpolação pode ser aplicado ao conjunto de posições de pixel inteiro completo pelo codificador de vídeo 28 para calcular o valor do pixel subinteiro da amostra de referência (176). O decodificador de vídeo 28 também pode decodificar um bloco atual de pixels com relação ao valor calculado do pixel subinteiro (178). As técnicas similares à operação ilustrativa do decodificador de vídeo 28 descrita com relação à figura 15 serão explicadas adicionalmente na figura 16.
[0153] A figura 16 é um fluxograma ilustrando outra operação ilustrativa de um decodificador de vídeo que utiliza suporte de filtro consistente com essa descrição. Dessa forma, o processo da figura 16 pode ser considerado o processo de decodificação alternado ao processo de codificação da figura 12. A figura 14 será descrita a partir da perspectiva do decodificador de vídeo 28 da figura 10 apesar de outros dispositivos poderem realizar técnicas similares.
[0154] Como ilustrado na figura 14, o decodificador de vídeo 28 recebe um bloco de vídeo codificado e informação de filtro (202). A unidade de decodificação por entropia 52 pode decodificar essa informação recebida. A unidade de previsão 55 realiza a compensação de movimento interpolativa de acordo com as técnicas dessa descrição. Em particular, a unidade de previsão 55 obtém um bloco de pixels a partir da memória 62 que inclui valores de pixel inteiro correspondentes às posições de pixel inteiro (204). A unidade de previsão 55 pode utilizar os vetores de movimento recebidos para determinar como realizar a interpolação.
[0155] Com base nos vetores de movimento, a unidade de previsão 55 pode computar o subpixel com base em um conjunto de suporte de filtro e um tipo de filtro de interpolação (206). Em alguns exemplos, o tipo de filtro de interpolação permanece igual para algumas posições de subpixel. Em um exemplo, uma indicação do conjunto de posições de pixel inteiro completo utilizada para codificar o bloco atual de pixels é provido para o decodificador 28 em pelo menos um dentre um nível de unidade de previsão, um nível de unidade de codificação, um nível de quadro, um nível de corte ou um nível de sequência do bloco atual de pixels. Dessa forma, a unidade de previsão 55 utiliza a interpolação para gerar o bloco de previsão (208). O bloco de previsão pode ser utilizado par decodificar um bloco de vídeo residual invocando o somador 64 para adicionar o bloco de previsão para o bloco residual (210). Os vários aspectos da interpolação descritos aqui, incluindo o uso de um dos conjuntos diferentes de suporte de filtro para as posições de subpixel, podem aperfeiçoar a codificação de vídeo pelo provimento de uma maior qualidade de dados interpolados que as técnicas convencionais.
[0156] As técnicas descritas nessa descrição podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Quaisquer características descritas como unidades ou componentes podem ser implementadas em um dispositivo lógico integrado em conjunto ou separadamente, como dispositivos lógicos discretos, mas interoperacionais. Se implementadas em software, as técnicas podem ser realizadas pelo menos em parte por um meio legível por computador compreendendo instruções que, quando executadas, realizam um ou mais métodos descritos acima. O meio legível por computador pode formar parte de um produto de programa de computador, que pode incluir materiais de empacotamento. O meio legível por computador pode compreender memória de acesso randômico (RAM) tal como memória de acesso randômico dinâmico sincronizado (SDRAM), memória somente de leitura (ROM), memória de acesso randômico não volátil (NVRAM), memória somente de apenas eletricamente programável e apagável (EEPROM), memória FLASH, mídia de armazenamento de dados magnética ou ótica, e similares. As técnicas adicionalmente ou alternativamente podem ser realizadas pelo menos em parte por um meio de comunicação legível por computador que porta ou comunica código na forma de instruções ou estruturas de dados e que podem ser acessados, lidos e/ou executados por um computador.
[0157] O código pode ser executado por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs), microprocessadores de finalidade geral, circuitos integrados de aplicação específica (ASICs), matrizes lógicas programáveis em campo (FPGAs), ou outro conjunto de circuito lógico discreto ou integrado equivalente. De acordo, o termo “processador”, como utilizado aqui pode se referir a qualquer estrutura acima ou qualquer outra estrutura adequada para implementação das técnicas descritas aqui. Adicionalmente, em alguns aspectos, a funcionalidade descrita aqui pode ser provida dentro de unidades de software dedicadas ou unidades de hardware configuradas para codificação e decodificação, ou incorporadas em um codificador-decodificador de vídeo combinado (CODEC). A apresentação de diferentes características como unidades deve destacar diferentes aspectos funcionais dos dispositivos ilustrados e não implica necessariamente que tais unidades devam ser realizadas por componentes de hardware ou software separados. Ao invés disso, a funcionalidade associada as uma ou mais unidades pode ser integrada com componentes de hardware ou software comuns ou separados.
[0158] Vários exemplos dessa descrição foram descritos. Esses e outros exemplos estão dentro do escopo das reivindicações a seguir.

Claims (10)

1. Método para decodificar dados de vídeo, o método compreendendo:gerar (208) um bloco de predição a partir de um quadro de dados de vídeo com base em valores de pixel subinteiro interpolados do quadro; eaplicar (210) um bloco residual ao bloco de predição para recriar um bloco original,caracterizado pelo fato de que gerar o bloco de predição compreende:computar um dado valor de pixel subinteiro com base em um conjunto de suportes de filtro e um filtro de interpolação quando um vetor de movimento indica uma localização de pixel subinteiro, em que o dado valor de pixel subinteiro está entre os valores de pixel subinteiro interpolados, a localização de pixel subinteiro do dado pixel subinteiro sendo uma dentre quinze localizações de pixel subinteiro diferentes associados a um pixel inteiro completo do quadro, cada uma dentre as localizações de pixel subinteiro associada ao pixel inteiro completo possuindo um conjunto de suportes de filtro diferentes,em que cada um dos conjuntos de suporte de filtro compreende uma respectiva combinação diferente de um ou mais pixels inteiros completos do quadro e/ou pixels subinteiros do quadro.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que para cada respectiva localização de pixel subinteiro das localizações de pixel subinteiro associadas ao pixel inteiro completo, o conjunto de suportes para a respectiva localização de pixel subinteiro possui um formato horizontal ou vertical.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que cada uma das localizações de pixel subinteiro associada ao pixel inteiro completo utiliza um filtro de interpolação diferente.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente:selecionar, com base em quadros codificados previamente, o conjunto de suportes de filtro no qual o dado valor de pixel subinteiro é baseado.
5. Método para codificar dados de vídeo, o método compreendendo:gerar (118) um bloco de predição a partir do quadro de dados de vídeo com base em valores de pixel subinteiros interpolados do quadro; esubtrair o bloco de predição de um bloco de vídeo sendo codificado para gerar um bloco residual;caracterizado pelo fato de que gerar (118) o bloco de predição compreende:computar (116) um dado valor de pixel subinteiro com base em um conjunto de suportes de filtro e um filtro de interpolação quando um vetor de movimento indica uma localização de pixel subinteiro, em que o dado valor de pixel subinteiro está entre os valores de pixel subinteiro interpolados, a localização de pixel subinteiro sendo uma dentre quinze localizações de pixel subinteiro diferentes associadas a um pixel inteiro completo do quadro, cada uma dentre as localizações de pixel subinteiro associada ao pixel inteiro completo possuindo um conjunto de suportes de filtro diferentes,em que cada um dos conjuntos de suporte de filtro compreende uma respectiva combinação diferente de um ou mais pixels inteiros completos do quadro e/ou pixels subinteiros do quadro.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que para cada respectiva localização de pixel subinteiro das localizações de pixel subinteiro associadas ao pixel inteiro completo, o conjunto de suportes para a respectiva localização de pixel subinteiro possui um formato horizontal ou vertical.
7. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que cada uma dentre as localizações de pixel subinteiro associadas ao pixel inteiro completo utiliza um filtro de interpolação diferente.
8. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que compreende adicionalmente:selecionar, com base em quadros codificados previamente, o conjunto de suportes de filtro no qual o dado valor de pixel subinteiro é baseado.
9. Dispositivo para decodificar dados de vídeo compreendendo:uma memória armazenando dados de vídeo; eum ou mais processadores configurados para gerar(208) um bloco de predição a partir de um quadro de dados de vídeo com base em valores de pixel subinteiro interpolados do quadro, e aplicar (210) um bloco residual ao bloco de predição para recriar um bloco original;o dispositivo caracterizado pelo fato de que os um ou mais processadores são configurados de forma que quando geram o bloco de predição, os um ou mais processadores: computam um dado valor de pixel subinteiro com base em um conjunto de suportes de filtro e um filtro de interpolação quando um vetor de movimento indica uma localização de pixel subinteiro, em que o dado valor de pixel subinteiro está entre os valores de pixel subinteiro interpolados, a localização de pixel subinteiro do dado pixel subinteiro sendo uma dentre quinze diferentes localizações de pixel subinteiro associadas a um pixel inteiro completo do quadro, cada uma dentre as localizaçõesde pixel subinteiro associada ao pixel inteiro completo possuindo um conjunto de suportes de filtro diferentes,em que cada um dos conjuntos de suporte de filtro compreende uma respectiva combinação diferente de um ou mais pixels inteiros completos do quadro e/ou pixels subinteiros do quadro.
10. Dispositivo para codificar dados de vídeo compreendendo:uma memória armazenando dados de vídeo; eum ou mais processadores configurados para gerar (118) um bloco de predição a partir de um quadro de dados de vídeo com base em valores de pixel subinteiro interpolados, e subtrair o bloco de predição de um bloco de vídeo sendo codificado para gerar um bloco residual;o dispositivo caracterizado pelo fato de que os um ou mais processadores são configurados de forma que quando geram (118) o bloco de predição, um ou mais processadores: computam (116) um dado valor de pixelsubinteiro com base em um conjunto de suportes de filtro e um filtro de interpolação quando um vetor de movimento indica uma localização de pixel subinteiro, em que o dado valor de pixel subinteiro está entre valores de pixel subinteiros interpolados, a localização de pixel subinteiro sendo uma dentre quinze diferentes localizações de pixel subinteiro associadas a um pixel inteiro completo do quadro, cada uma dentre as localizações de pixels subinteiro associada ao pixel inteiro completo possuindo um conjunto de suportes de filtro diferentes,em que cada um dos conjuntos de suporte de filtro compreende uma respectiva combinação diferente de um ou mais pixels inteiros completos do quadro e/ou pixels subinteiros do quadro.
BR112013014415-7A 2010-12-10 2011-12-07 Método e dispositivo para decodificar dados de vídeo e método e dispositivo para codificar dados de vídeo BR112013014415B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US42205110P 2010-12-10 2010-12-10
US61/422,051 2010-12-10
US13/311,755 2011-12-06
US13/311,755 US10045046B2 (en) 2010-12-10 2011-12-06 Adaptive support for interpolating values of sub-pixels for video coding
PCT/US2011/063730 WO2012078748A1 (en) 2010-12-10 2011-12-07 Adaptive support for interpolating values of sub-pixels for video coding

Publications (2)

Publication Number Publication Date
BR112013014415A2 BR112013014415A2 (pt) 2016-09-27
BR112013014415B1 true BR112013014415B1 (pt) 2022-02-15

Family

ID=46199372

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112013014415-7A BR112013014415B1 (pt) 2010-12-10 2011-12-07 Método e dispositivo para decodificar dados de vídeo e método e dispositivo para codificar dados de vídeo

Country Status (15)

Country Link
US (1) US10045046B2 (pt)
EP (2) EP3203740A1 (pt)
JP (3) JP2014502800A (pt)
KR (2) KR101528989B1 (pt)
CN (2) CN105704492B (pt)
AU (1) AU2011338449B2 (pt)
BR (1) BR112013014415B1 (pt)
CA (1) CA2820061C (pt)
HK (1) HK1221101A1 (pt)
IL (1) IL226438B (pt)
MY (1) MY180273A (pt)
RU (1) RU2564245C2 (pt)
SG (1) SG190847A1 (pt)
UA (1) UA109923C2 (pt)
WO (1) WO2012078748A1 (pt)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10045046B2 (en) 2010-12-10 2018-08-07 Qualcomm Incorporated Adaptive support for interpolating values of sub-pixels for video coding
US20120163460A1 (en) * 2010-12-23 2012-06-28 Qualcomm Incorporated Sub-pixel interpolation for video coding
WO2013109867A1 (en) * 2012-01-19 2013-07-25 Futurewei Technologies, Inc. Simplification of mode dependent intra smoothing
GB2501535A (en) * 2012-04-26 2013-10-30 Sony Corp Chrominance Processing in High Efficiency Video Codecs
CN102665080B (zh) * 2012-05-08 2015-05-13 开曼群岛威睿电通股份有限公司 用于移动补偿的电子装置及移动补偿方法
EP2853096A4 (en) * 2012-05-21 2016-07-06 Mediatek Singapore Pte Ltd METHOD AND APPARATUS FOR FILTERING BETWEEN LAYERS FOR SCALABLE VIDEO CODING
KR20160101994A (ko) * 2013-12-20 2016-08-26 엘지전자 주식회사 적응적 샘플링을 이용한 비디오 신호의 인코딩, 디코딩 방법 및 그 장치
US9942560B2 (en) 2014-01-08 2018-04-10 Microsoft Technology Licensing, Llc Encoding screen capture data
US9774881B2 (en) * 2014-01-08 2017-09-26 Microsoft Technology Licensing, Llc Representing motion vectors in an encoded bitstream
US9749642B2 (en) 2014-01-08 2017-08-29 Microsoft Technology Licensing, Llc Selection of motion vector precision
WO2016072722A1 (ko) * 2014-11-04 2016-05-12 삼성전자 주식회사 영상 특성을 반영한 보간 필터를 이용하는 비디오 부호화 방법 및 장치, 비디오 복호화 방법 및 장치
CN104683819A (zh) * 2015-01-31 2015-06-03 北京大学 一种自适应环路滤波方法及装置
US10291932B2 (en) 2015-03-06 2019-05-14 Qualcomm Incorporated Method and apparatus for low complexity quarter pel generation in motion search
JP6101722B2 (ja) 2015-03-10 2017-03-22 富士重工業株式会社 車室前部用支持体
US20160345018A1 (en) * 2015-05-19 2016-11-24 Microsoft Technology Licensing, Llc Video encoding and decoding
JP6715467B2 (ja) * 2015-07-01 2020-07-01 パナソニックIpマネジメント株式会社 符号化方法、復号方法、符号化装置、復号装置および符号化復号装置
US10341659B2 (en) * 2016-10-05 2019-07-02 Qualcomm Incorporated Systems and methods of switching interpolation filters
CN107959855B (zh) * 2016-10-16 2020-02-14 华为技术有限公司 运动补偿预测方法和设备
BR112020008896A2 (pt) * 2017-11-07 2020-10-20 Huawei Technologies Co., Ltd. filtro de interpolação para um aparelho e método de interpredição para codificação de vídeo
JP7154957B2 (ja) 2017-11-08 2022-10-18 キヤノンメディカルシステムズ株式会社 磁気共鳴イメージング装置および電力供給方法
CN109961199A (zh) * 2017-12-25 2019-07-02 北京京东尚科信息技术有限公司 一种分析数据波动的方法和装置
JP7109558B2 (ja) * 2018-02-14 2022-07-29 ホアウェイ・テクノロジーズ・カンパニー・リミテッド 適応型補間フィルタ
US10638137B2 (en) * 2018-03-07 2020-04-28 Tencent America LLC Method and apparatus for video coding
BR112020019740A2 (pt) * 2018-03-29 2021-02-17 Huawei Technologies Co., Ltd. aparelho e método de processamento de imagem
IL313311A (en) * 2018-06-11 2024-08-01 Samsung Electronics Co Ltd An encoding method and device for it, and a decoding method and device for it
CN108833916B (zh) * 2018-06-20 2021-09-24 腾讯科技(深圳)有限公司 视频编码、解码方法、装置、存储介质和计算机设备
PT3891980T (pt) * 2018-12-21 2024-07-22 Huawei Tech Co Ltd Método e aparelho de filtragem de interpolação para codificação preditiva
US11350108B2 (en) * 2019-03-18 2022-05-31 Tencent America LLC Affine inter prediction refinement with optical flow

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020172288A1 (en) 2001-03-08 2002-11-21 Nyeongku Kwon Device and method for performing half-pixel accuracy fast search in video coding
GB2379820A (en) 2001-09-17 2003-03-19 Nokia Corp Interpolating values for sub-pixels
US6950469B2 (en) 2001-09-17 2005-09-27 Nokia Corporation Method for sub-pixel value interpolation
HU228615B1 (en) * 2002-01-14 2013-04-29 Nokia Corp Method of coding of digital video pictures
MXPA05000335A (es) * 2002-07-09 2005-03-31 Nokia Corp Metodo y sistema para seleccionar tipo de filtro de interpolacion en codificacion de video.
KR100472476B1 (ko) 2002-08-31 2005-03-10 삼성전자주식회사 움직임 보상을 위한 보간 방법 및 그 장치
EP1578137A2 (en) 2004-03-17 2005-09-21 Matsushita Electric Industrial Co., Ltd. Moving picture coding apparatus with multistep interpolation process
KR20070030223A (ko) 2004-06-23 2007-03-15 코닌클리케 필립스 일렉트로닉스 엔.브이. 픽셀 보간
US7653132B2 (en) * 2004-12-21 2010-01-26 Stmicroelectronics, Inc. Method and system for fast implementation of subpixel interpolation
US7623575B2 (en) 2005-01-05 2009-11-24 Lsi Corporation Method and apparatus for sub-pixel motion compensation
WO2006108654A2 (en) * 2005-04-13 2006-10-19 Universität Hannover Method and apparatus for enhanced video coding
US8208564B2 (en) * 2005-06-24 2012-06-26 Ntt Docomo, Inc. Method and apparatus for video encoding and decoding using adaptive interpolation
CA2631336A1 (en) 2005-11-30 2007-06-07 Kabushiki Kaisha Toshiba Image encoding/image decoding method, image encoding/image decoding apparatus
KR100772390B1 (ko) 2006-01-23 2007-11-01 삼성전자주식회사 방향 보간 방법 및 그 장치와, 그 보간 방법이 적용된부호화 및 복호화 방법과 그 장치 및 복호화 장치
JP2007201880A (ja) 2006-01-27 2007-08-09 Victor Co Of Japan Ltd 画像符号化装置および画像復号装置
CN1889691A (zh) 2006-07-19 2007-01-03 四川长虹电器股份有限公司 一种像素插值方法
WO2008084378A2 (en) 2007-01-09 2008-07-17 Nokia Corporation Adaptive interpolation filters for video coding
CN100563322C (zh) 2007-02-07 2009-11-25 扬智科技股份有限公司 滤波动态补偿的非反馈插值器
EP1983759A1 (en) 2007-04-19 2008-10-22 Matsushita Electric Industrial Co., Ltd. Estimation of separable adaptive interpolation filters for hybrid video coding
EP2208181A2 (en) 2007-10-05 2010-07-21 Nokia Corporation Video coding with pixel-aligned directional adaptive interpolation filters
CN101453646B (zh) 2007-12-04 2012-02-22 华为技术有限公司 图像插值方法、装置及插值系数的获取方法
KR20090094595A (ko) 2008-03-03 2009-09-08 삼성전자주식회사 복수 참조에 의한 움직임 예측을 이용한 부호화 방법 및장치, 그리고 복수 참조에 의한 움직임 예측을 이용한복호화 방법 및 장치
US8462842B2 (en) 2008-04-10 2013-06-11 Qualcomm, Incorporated Symmetry for interpolation filtering of sub-pixel positions in video coding
US8831086B2 (en) 2008-04-10 2014-09-09 Qualcomm Incorporated Prediction techniques for interpolation in video coding
US9077971B2 (en) 2008-04-10 2015-07-07 Qualcomm Incorporated Interpolation-like filtering of integer-pixel positions in video coding
US8804831B2 (en) 2008-04-10 2014-08-12 Qualcomm Incorporated Offsets at sub-pixel resolution
US8705622B2 (en) * 2008-04-10 2014-04-22 Qualcomm Incorporated Interpolation filter support for sub-pixel resolution in video coding
US9967590B2 (en) 2008-04-10 2018-05-08 Qualcomm Incorporated Rate-distortion defined interpolation for video coding based on fixed filter or adaptive filter
US20090257499A1 (en) 2008-04-10 2009-10-15 Qualcomm Incorporated Advanced interpolation techniques for motion compensation in video coding
US8811484B2 (en) 2008-07-07 2014-08-19 Qualcomm Incorporated Video encoding by filter selection
EP2157799A1 (en) * 2008-08-18 2010-02-24 Panasonic Corporation Interpolation filter with local adaptation based on block edges in the reference frame
US8750378B2 (en) 2008-09-23 2014-06-10 Qualcomm Incorporated Offset calculation in switched interpolation filters
US9078007B2 (en) 2008-10-03 2015-07-07 Qualcomm Incorporated Digital video coding with interpolation filters and offsets
US8634456B2 (en) 2008-10-03 2014-01-21 Qualcomm Incorporated Video coding with large macroblocks
US8831087B2 (en) 2008-10-06 2014-09-09 Qualcomm Incorporated Efficient prediction mode selection
WO2010063881A1 (en) 2008-12-03 2010-06-10 Nokia Corporation Flexible interpolation filter structures for video coding
US10045046B2 (en) 2010-12-10 2018-08-07 Qualcomm Incorporated Adaptive support for interpolating values of sub-pixels for video coding

Also Published As

Publication number Publication date
JP2015046907A (ja) 2015-03-12
BR112013014415A2 (pt) 2016-09-27
WO2012078748A1 (en) 2012-06-14
US20120147967A1 (en) 2012-06-14
AU2011338449A1 (en) 2013-06-20
IL226438A0 (en) 2013-07-31
MY180273A (en) 2020-11-26
HK1221101A1 (zh) 2017-05-19
EP2649800A1 (en) 2013-10-16
KR101784668B1 (ko) 2017-10-12
JP2016201814A (ja) 2016-12-01
CN105704492A (zh) 2016-06-22
US10045046B2 (en) 2018-08-07
EP3203740A1 (en) 2017-08-09
SG190847A1 (en) 2013-07-31
CA2820061C (en) 2019-12-03
KR20130086390A (ko) 2013-08-01
CN103250414A (zh) 2013-08-14
AU2011338449B2 (en) 2015-03-12
CN103250414B (zh) 2017-03-08
RU2564245C2 (ru) 2015-09-27
CN105704492B (zh) 2019-09-27
IL226438B (en) 2019-05-30
KR101528989B1 (ko) 2015-06-15
UA109923C2 (uk) 2015-10-26
RU2013131778A (ru) 2015-01-20
CA2820061A1 (en) 2012-06-14
JP6301401B2 (ja) 2018-03-28
JP6254063B2 (ja) 2017-12-27
JP2014502800A (ja) 2014-02-03
KR20140140120A (ko) 2014-12-08

Similar Documents

Publication Publication Date Title
BR112013014415B1 (pt) Método e dispositivo para decodificar dados de vídeo e método e dispositivo para codificar dados de vídeo
KR102653005B1 (ko) 휘도 샘플을 이용한 색차 블록의 화면 내 예측 방법 및 이러한 방법을 사용하는 장치
US9288501B2 (en) Motion vector predictors (MVPs) for bi-predictive inter mode in video coding
KR101202632B1 (ko) 비디오 코딩에서의 보간을 위한 예측 기술
KR101242958B1 (ko) 비디오 코딩에서의 서브-픽셀 해상도를 위한 보간 필터 서포트
KR101202633B1 (ko) 고정된 필터 또는 적응형 필터에 기초한 비디오 코딩을 위한 레이트 왜곡 정의된 보간
KR101214021B1 (ko) 비디오 코딩에서의 정수-픽셀 포지션들의 보간형 필터링
US9219921B2 (en) Mixed tap filters
KR20170126890A (ko) 움직임 검색에서 낮은 복잡도 1/4 화소 생성을 위한 방법 및 장치
JP2022159392A (ja) ビデオ符号化のための位置依存の空間変化変換
JP2013059132A (ja) 画像処理装置および方法、並びに記録媒体
JP2013059131A (ja) 画像処理装置および方法、並びに記録媒体
KR20240049364A (ko) 디코더측 인트라 모드 도출을 위한 방법 및 디바이스

Legal Events

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

Ipc: H04N 19/523 (2014.01), H04N 19/117 (2014.01), H04N

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]
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 07/12/2011, OBSERVADAS AS CONDICOES LEGAIS. PATENTE CONCEDIDA CONFORME ADI 5.529/DF, QUE DETERMINA A ALTERACAO DO PRAZO DE CONCESSAO.