BRPI0919839B1 - Método, aparelho e mídia de armazenamento não transitória legível por computador para codificação de vídeo com macroblocos grandes - Google Patents

Método, aparelho e mídia de armazenamento não transitória legível por computador para codificação de vídeo com macroblocos grandes Download PDF

Info

Publication number
BRPI0919839B1
BRPI0919839B1 BRPI0919839-3A BRPI0919839A BRPI0919839B1 BR PI0919839 B1 BRPI0919839 B1 BR PI0919839B1 BR PI0919839 A BRPI0919839 A BR PI0919839A BR PI0919839 B1 BRPI0919839 B1 BR PI0919839B1
Authority
BR
Brazil
Prior art keywords
coded block
block
partition
partitions
video
Prior art date
Application number
BRPI0919839-3A
Other languages
English (en)
Inventor
Peisong Chen
Marta Karczewicz
Yan Ye
Original Assignee
Velos Media International Limited
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 Velos Media International Limited filed Critical Velos Media International Limited
Publication of BRPI0919839A2 publication Critical patent/BRPI0919839A2/pt
Publication of BRPI0919839B1 publication Critical patent/BRPI0919839B1/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/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/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • 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/147Data rate or code amount at the encoder output according to rate distortion criteria
    • 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/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding

Landscapes

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

Abstract

codificação de vídeo com macroblocos grandes. são descritas técnicas para codificar e descodificar dados de vídeo digitais utilizando macroblocos que são maiores do que os macroblocos determinados por padrões de codificado e decodificação de vídeo convencionais. por exemplo, as técnicas incluem codificar e decodificar um fluxo de vídeo utilizando macroblocos compreendendo maiores do que 16x16 pixels, por exemplo, 64x64 pixeis. em um exemplo, um equipamento inclui um codificador de vídeo configurado para codificar um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, gerar informações de sintaxe de tipo de bloco que indicam o tamanho do bloco, e gerar um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero. o codificador pode definir o valor de padrão de bloco codificado em zero quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero. o codificador pode definir o valor de padrão de bloco codificado em zero quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero ou definir o valor de padrão de bloco codificado em um quando o bloco codificado inclui um coeficiente diferente de zero.

Description

[001] O presente pedido reivindica o benéfico dos pedidos provisionais US números 61/102.787 depositado em 3 de outubro de 2008, 61/144.357 depositado em 13 de janeiro de 2009, e 61/166.631 depositado em 3 de abril de 2009, cada um dos quais é incorporado aqui a título de referência na íntegra.
[002] O presente pedido é relacionado aos pedidos de patente US, todos depositados na mesma data que o presente pedido, todos possuindo o mesmo título, “VIDEO CODING WITH LARGE MACROBLOCKS,” (temporariamente mencionados pelos números de referência do advogado 090033U2, 09033U3, 090033U4, que são todos cedidos ao cedente do presente e pelo presente expressamente incorporados a título de referência na íntegra para todas as finalidades.
CAMPO DA INVENÇÃO
[003] A presente revelação refere-se à codificação de vídeo digital e mais particularmente codificação de vídeo baseado em bloco.
DESCRIÇÃO DA TÉCNICA ANTERIOR
[004] As capacidades de vídeo digital podem ser incorporadas em uma ampla gama de dispositivos, incluindo televisões digitais, sistemas de radiodifusão direto digital, sistemas de radiodifusão sem fio, assistentes pessoais digitais (PDAs), computadores de laptop ou de mesa, câmeras digitais, dispositivos de gravação digital, dispositivos de jogos de vídeo, consoles de videogame, telefones celulares ou de rádio de satélite, e similares. Aparelhos de vídeo digital implementam técnicas de compressão de vídeo, com aquelas descritas nos padrões definidos por MPEG-2, MPEG-4, ITU T H.263 ou ITU-T H.264/MPEG-4, parte 10, Codificação avançada de vídeo (AVC), e extensões de tais padrões para transmitir e receber mais eficientemente informações digitais de vídeo.
[005] Técnicas de compressão de vídeo executam previsão espacial e/ou previsão temporal para reduzir ou remover redundância inerente a sequências de vídeo. Para codificação de vídeo baseada em bloco, um quadro ou fatia de vídeo pode ser dividida em macroblocos. Cada macrobloco pode ser adicionalmente dividido. Macroblocos em um quadro ou fatia intracodificado (I) são codificados utilizando previsão espacial com relação à macroblocos vizinhos. Macroblocos em um quadro ou fatia intercodificado (P ou B) podem utilizar previsão espacial com relação à macroblocos vizinhos no mesmo quadro ou fatia ou previsão temporal com relação a outros quadros de referência.
SUMÁRIO DA INVENÇÃO
[006] Em geral, a presente revelação descreve técnicas para codificar dados de vídeo digitais utilizando macroblocos grandes. Macroblocos grandes são maiores do que macroblocos genericamente prescritos por padrões de codificação de vídeo existentes. A maioria dos padrões de codificação de vídeo determinam o uso de um macrobloco na forma de um conjunto de pixels de 16x16. De acordo com apresente revelação, um codificador e decodificador podem utilizar macroblocos grandes que são maiores do que 16x16 pixels em tamanho. Como exemplos, um macrobloco grande pode ter um conjunto de pixels de 32x32, 64x64 ou maior.
[007] A codificação de vídeo se baseia em redundância espacial e/ou temporal para suportar compressão de dados de vídeo. Quadros de vídeo gerados com resolução espacial mais elevada e/ou velocidade de quadro mais elevada podem suportar mais redundância. O uso de macroblocos grandes, como descrito nessa revelação, pode permitir que uma técnica de codificação de vídeo utilize graus maiores de redundância produzida como resolução espacial e/ou aumento de velocidade de quadro. De acordo com a presente revelação, técnicas de codificação de vídeo podem utilizar uma variedade de características para suportar codificação de macroblocos grandes.
[008] Como descrito nessa revelação, uma técnica de codificação de macrobloco grande pode dividir um macrobloco grande em partições, e utilizar tamanhos de partição diferentes e modos de codificação diferentes, por exemplo, modos espacial (I) ou temporal (P ou B) diferentes, para partições selecionadas. Como outro exemplo, uma técnica de codificação pode utilizar valores de padrão de bloco codificado (CBP) hierárquicos para identificar eficientemente macroblocos codificados e partições possuindo coeficientes diferente de zero em um macrobloco grande. Como exemplo adicional, uma técnica de codificação pode comparar métricas de distorção de taxa produzidas por codificação utilizando macroblocos grandes e pequenos para selecionar um tamanho de macrobloco que produza resultados mais favoráveis.
[009] Em um exemplo, a revelação provê um método que compreende codificação, com um codificador de vídeo, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, gerar informações de sintaxe de tipo de bloco que indicam o tamanho do bloco, e gerar um valor de padrão codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero.
[010] Em outro exemplo, a revelação provê um aparelho que compreende um codificador de vídeo configurado para codificar um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, gear informações de sintaxe de tipo de bloco que indica o tamanho do bloco, e gerar um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero.
[011] Em outro exemplo, a revelação provê um meio legível por computador codificado com instruções para fazer com que um aparelho de codificação de vídeo codifique, com um codificador de vídeo, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, gerar informações de sintaxe de tipo de bloco que indicam o tamanho do bloco, e gerar um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero.
[012] Em um exemplo adicional, a revelação provê um método que compreende receber, com um decodificador de vídeo, um bloco de vídeo codificado possuindo um tamanho maior do que 16x16 pixels, receber informações de sintaxe de tipo bloco que indicam o tamanho do bloco codificado, receber um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e
[013] Decodificar o bloco codificado com base nas informações de sintaxe do tipo de bloco e o valor de padrão de bloco codificado para o bloco codificado.
[014] Em um exemplo adicional, a revelação provê um aparelho que compreende um decodificador de vídeo configurado para receber um bloco de vídeo codificado possuindo um tamanho maior do que 16x16 pixels, receber informações de sintaxe do tipo de bloco que indicam o tamanho do bloco codificado, receber um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e decodificar o bloco codificado com base nas informações de sintaxe do tipo de bloco e o valor de padrão de bloco codificado para o bloco codificado.
[015] Em outro exemplo, a revelação provê um meio legível por computador que compreende instruções para fazer com que um decodificador de vídeo receba um bloco de vídeo codificado possuindo um tamanho maior do que 16x16 pixels, receber informações de sintaxe de tipo bloco que indicam o tamanho do bloco codificado, receber um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e decodificar o bloco codificado com base nas informações de sintaxe de tipo bloco e o valor de padrão de bloco codificado para o bloco codificado.
[016] Em outro exemplo, a revelação provê um método que compreende receber, com um codificador de vídeo, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, dividir o bloco em partições, codificar uma das partições utilizando um primeiro modo de codificação, codificar outra das partições utilizando um segundo modo de codificação diferente do primeiro modo de codificação, e gerar informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificam as partições e modos de codificação utilizados para codificar as partições.
[017] Em um exemplo adicional, a revelação provê um aparelho que compreende um codificador de vídeo configurado para receber um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, dividir o bloco em partições, codificar uma das partições utilizando um primeiro modo de codificação, codificar outra das partições utilizando um segundo modo de codificação diferente do primeiro modo de codificação, gerar informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificar as partições e os modos de codificação utilizados para codificar as partições.
[018] Em outro exemplo, a revelação provê um meio legível por computador codificado com instruções para fazer com que um codificador de vídeo receba um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, dividir o bloco em partições, codificar uma das partições utilizando um primeiro modo de codificação, codificar outra das partições utilizando um segundo modo de codificação diferente do primeiro modo de codificação, e gerar informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificam as partições e os modos de codificação utilizados para codificar as partições.
[019] Em um exemplo adicional, a revelação provê um método que compreende Recber, com um decodificador de vídeo, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, em que o bloco é dividido em partições, uma das partições é codificada com um primeiro modo de codificação e outra das partições é codificada com um segundo modo de codificação diferente do primeiro modo de codificação, receber informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificam as partições e os modos de codificação utilizados para codificar as partições, e decodificar o bloco de vídeo baseado nas informações de sintaxe do tipo de bloco.
[020] Em outro exemplo, a revelação provê um aparelho que compreende um decodificador de vídeo configurado para receber um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, em que o bloco é dividido em partições, uma das partições é codificada com um primeiro modo de codificação e outra das partições é codificada com um segundo modo de codificação diferente do primeiro modo de codificação, receber informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificam as partições e os modos de codificação utilizados para codificar as partições, e decodificar o bloco de vídeo baseado nas informações de sintaxe de tipo bloco.
[021] Em um exemplo adicional, a revelação provê um meio legível por computador codificado com instruções para fazer com que um decodificador de vídeo receba, com um decodificador de vídeo, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, em que o bloco é dividido em partições, uma das partições é codificada com um primeiro modo de codificação e outra das partições é codificada com um segundo modo de codificação diferente do primeiro modo de codificação, receber informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificam as partições e os modos de codificação utilizados para codificar as partições, e decodificar o bloco de vídeo com base nas informações de sintaxe do tipo de bloco.
[022] Em outro exemplo, a revelação provê um método que compreende receber, com um codificador de vídeo digital, uma unidade de codificação de vídeo, determinar uma primeira métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando primeiros blocos de vídeo com tamanhos de 16x16 pixels, determinar uma segunda métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando segundos blocos de vídeo com tamanhos maiores do que 16x16 pixels, codificar a unidade de codificação de vídeo utilizando os primeiros blocos de vídeo quando a primeira métrica de distorção de taxa é menor do que a segunda métrica de distorção de taxa, e codificar a unidade de codificação de vídeo utilizando os segundos blocos de vídeo quando a segunda métrica de distorção de taxa é menor do que a primeira métrica de distorção de taxa.
[023] Em um exemplo adicional, a revelação provê um aparelho que compreende um codificador de vídeo configurado para receber uma unidade de codificação de vídeo, determinar uma primeira métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando primeiros blocos de vídeo com tamanhos de 16x16 pixels, determinar uma segunda métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando segundos blocos de vídeo com tamanhos maiores do que 16x16 pixels, codificar a unidade de codificação de vídeo utilizando os segundos blocos de vídeo quando a segunda métrica de distorção de taxa é menor do que a primeira métrica de distorção de taxa.
[024] Em outro exemplo, a revelação provê um meio legível por computador codificado com instruções para fazer com que um codificador de vídeo receba uma unidade de codificação de vídeo, determinar uma primeira métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando primeiros blocos de vídeo com tamanhos de 16x16 pixels, determinar uma segunda métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando segundos blocos de vídeo com tamanhos maiores do que 16x16 pixels, codificar a unidade de codificação de vídeo utilizando os primeiros blocos de vídeo quando a primeira métrica de distorção de taxa é menor do que a segunda métrica de distorção de taxa, e codificar a unidade de codificação de vídeo utilizando os segundos blocos de vídeo quando a segunda métrica de distorção de taxa é menor do que a primeira métrica de distorção de taxa.
[025] Em outro exemplo, a revelação provê um método que compreende codificar, com um codificador de vídeo, uma unidade codificada que compreende uma pluralidade de blocos de vídeo, em que pelo menos um da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x126 pixels, e gerar informações de sintaxe para a unidade codificada que inclui um valor de tamanho máximo, em que o valor de tamanho máximo indica um tamanho de um maior da pluralidade de blocos de vídeo na unidade codificada.
[026] Em outro exemplo, a revelação provê um aparelho que compreende um codificador de vídeo configurado para codificar uma unidade codificada compreendendo uma pluralidade de blocos de vídeo, em que pelo menos um da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x16 pixels e gerar informações de sintaxe para a unidade codificada que inclui um valor de tamanho máximo, em que o valor de tamanho máximo indica um tamanho de um maior da pluralidade de blocos de vídeo na unidade codificada.
[027] Em outro exemplo, a revelação provê um aparelho que compreende aparelho compreendendo meios para codificar uma unidade codificada compreendendo uma pluralidade de blocos de vídeo, em que pelo menos um da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x16 pixels, e meios para gerar informações de sintaxe para a unidade codificada que inclui um valor de tamanho máximo, em que o valor de tamanho máximo indica um tamanho de um maior da pluralidade de blocos de vídeo na unidade codificada.
[028] Em outro exemplo, a revelação provê um meio de armazenamento legível por computador codificado com instruções para fazer com que um processador programável codifique uma unidade codificada compreendendo uma pluralidade de blocos de vídeo, em que pelo menos uma da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x16 pixels, e gerar informações de sintaxe para a unidade codificada que incluem um valor de tamanho máximo, em que o valor de tamanho máximo indica um tamanho de um maior da pluralidade de blocos de vídeo na unidade codificada.
[029] Em outro exemplo, a revelação provê um método que compreende receber, com um decodificador de vídeo, uma unidade codificada compreendendo uma pluralidade de blocos de vídeo, em que pelo menos um da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x16 pixels, receber informações de sintaxe para a unidade codificada que inclui um valor de tamanho máximo, em que o valor de tamanho máximo indica um tamanho de um maior da pluralidade de blocos de vídeo na unidade codificada, selecionar um decodificador de sintaxe de tipo bloco de acordo com o valor de tamanho máximo e decodificar cada da pluralidade de blocos de vídeo na unidade codificada utilizando o decodificador de sintaxe de tipo bloco selecionado.
[030] Em outro exemplo, a revelação provê um aparelho que compreende um decodificador de vídeo configurado para receber uma unidade codificada compreendendo uma pluralidade de blocos de vídeo, em que pelo menos um da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x16 pixels, receber informações de sintaxe para a unidade codificada que inclui um valor de tamanho máximo em que o valor de tamanho máximo indica um tamanho de um maior da pluralidade de blocos de vídeo na unidade codificada, selecionar um decodificar de sintaxe de tipo bloco de acordo com o valor de tamanho máximo, e decodificar cada da pluralidade de blocos de vídeo na unidade codificada utilizando o decodificador de sintaxe de tipo bloco selecionado.
[031] Em outro exemplo, a revelação provê meios para receber uma unidade codificada que compreende uma pluralidade de blocos de vídeo, em que pelo menos um da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x16 pixels, meios para receber informações de sintaxe para a unidade codificada que inclui um valor de tamanho máximo, em que o valor de tamanho máximo indica um tamanho da maior pluralidade de blocos de vídeo na unidade codificada, meios para selecionar um decodificador de sintaxe de tipo bloco de acordo com o valor de tamanho máximo, e meios para decodificar cada da pluralidade de blocos de vídeo na unidade codificada utilizando o decodificador de sintaxe de tipo bloco selecionado.
[032] Em outro exemplo, a revelação provê um meio de armazenamento legível por computador codificado com instruções para fazer com que um processador programável receba uma unidade codificada compreendendo uma pluralidade de blocos de vídeo, em que pelo menos um da pluralidade de blocos de vídeo compreende um tamanho maior do que 16x16 pixels, receber informações de sintaxe para a unidade codificada que incluem um valor de tamanho máximo, em que o valor de tamanho máximo indica um tamanho de um maior da pluralidade de blocos de vídeo na unidade codificada, selecionar um decodificador de sintaxe de tipo bloco de acordo com o valor de tamanho máximo, e decodificar cada da pluralidade de blocos de vídeo na unidade codificada utilizando o decodificador de sintaxe de tipo bloco selecionado.
[033] Os detalhes de um ou mais exemplos são expostos nos desenhos em anexo e na descrição abaixo. Outras características, objetivos e vantagens serão evidentes a partir da descrição e desenhos, e das reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[034] A figura 1 é um diagrama de blocos que ilustra um exemplo de sistema de codificação e decodificação de vídeo que codifica e decodifica dados de vídeo digitais utilizando macroblocos grandes.
[035] A figura 2 é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo que implementa técnicas para codificar macroblocos grandes.
[036] A figura 3 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que implementa técnicas para codificar macroblocos grandes.
[037] A figura 4A é um diagrama conceptual que ilustra a partição entre vários níveis de um macrobloco grande.
[038] A figura 4B é um diagrama conceptual que ilustra atribuição de modos de codificação diferentes para partições diferentes de um macrobloco grande.
[039] A figura 5 é um diagrama conceptual que ilustra uma vista hierárquica de vários níveis de um macrobloco grande.
[040] A figura 6 é um fluxograma que ilustra um método de exemplo para definir um valor de padrão de bloco codificado (CBP) de um macrobloco grande 64x64 pixels.
[041] A figura 7 é um fluxograma que ilustra um método de exemplo para definir um valor CBP de uma partição de 32x32 pixels de um macrobloco grande de 64x64 pixels.
[042] A figura 8 é um fluxograma que ilustra um método de exemplo para definir um valor CBP de uma partição de 16x16 pixels de uma partição de 32x32 pixels de um macrobloco grande de 64x64 pixels.
[043] A figura 9 é um fluxograma que ilustra um método de exemplo para determinar um valor luma 16x8_CBP de dois bits.
[044] A figura 10 é um diagrama de blocos que ilustra um arranjo de exemplo de um macrobloco grande de 64x64 pixels.
[045] A figura 11 é um fluxograma que ilustra um método de exemplo para calcular métodos de partição e codificação ótima para um bloco de vídeo grande de NxN pixels.
[046] A figura 12 é um diagrama de blocos que ilustra um macrobloco de 64x64 pixels de exemplo com várias partições e métodos de codificação selecionados para cada partição.
[047] A figura 13 é um fluxograma que ilustra um método de exemplo para determinar um tamanho ótimo de um macrobloco para codificar um quadro de uma sequência de vídeo.
[048] A figura 14 é um diagrama de blocos que ilustra um dispositivo de comunicação sem fio de exemplo que inclui um codificador/decodificador de vídeo (CODEC) que codifica dados de vídeo digitais utilizando macroblocos grandes.
[049] A figura 15 é um diagrama de blocos que ilustra uma representação de conjunto de exemplo de uma representação CBP hierárquica para um macrobloco grande.
[050] A figura 16 é um diagrama de blocos que ilustra uma estrutura de árvore de exemplo correspondendo à representação CBP hierárquica da figura 15.
[051] A figura 17 é um fluxograma que ilustra um método de exemplo para utilizar informações de sintaxe de uma unidade codificada para indicar e selecionar codificadores e decodificadores de sintaxe baseados em bloco para blocos de vídeo da unidade codificada.
DESCRIÇÃO DETALHADA DA INVENÇÃO
[052] A revelação descreve técnicas para codificar e decodificar dados de vídeo digitais utilizando macroblocos grandes. Macroblocos grandes são maiores do que macroblocos genericamente determinados por padrões de codificação de vídeo existentes. A maioria dos padrões de codificação de vídeo determina o uso de um macrobloco na forma de um conjunto de pixels 16x16. De acordo com a presente revelação, um codificador e/ou um decodificador pode utilizar macroblocos grandes que são maiores do que 16x16 pixels em tamanho. Como exemplos, um macrobloco grande pode ter um conjunto de pixels de 32x32, 64x64 ou possivelmente maior.
[053] Em geral, um macrobloco, como aquele termo é utilizado na presente revelação, pode se referir a uma estrutura de dados para um conjunto de pixels que compreende um tamanho definido expresso como NxN pixels, onde N é um valor inteiro positivo. O macrobloco pode definir quatro blocos de luminância, cada compreendendo um conjunto de (N/2)x(N/2) pixels, dois blocos de crominância, cada compreendendo um conjunto de NxN pixels, e um cabeçalho compreendendo informações do tipo macrobloco e informações de padrão de bloco codificado (CBP), como discutido em maior detalhe abaixo.
[054] Padrões de codificação de vídeo convencionais determinam comumente que o tamanho de macrobloco definido é um conjunto de pixels 16x16. De acordo com várias técnicas descritas nessa revelação, macroblocos podem compreender NxN conjuntos de pixels onde N pode ser maior do que 16. De modo semelhante, padrões de codificação de vídeo convencionais determinam que um macrobloco intercodificado é tipicamente atribuído a um vetor de movimento único. De acordo com várias técnicas descritas nessa revelação, uma pluralidade de vetores de movimento pode ser atribuída para partições intercodificadas de um macrobloco NxN, como descrito em maior detalhe abaixo. Referências a “macroblocos grandes” ou frases similares genericamente se referem à macroblocos com conjuntos de pixels maiores do que 16x16.
[055] Em alguns casos, grandes macroblocos podem suportar aperfeiçoamentos em eficiência de codificação e/ou reduções em transmissão de dados overhead enquanto mantém ou possivelmente melhora a qualidade de imagem. Por exemplo, o uso de macroblocos grandes pode permitir que um codificador e/ou decodificador de vídeo tire proveito de redundância aumentada fornecida por dados de vídeo gerados com resolução espacial aumentada (por exemplo, 1280x720 ou 1920x1080 pixels por quadro) e/ou velocidade aumentada de quadros (por exemplo, 30 ou 60 quadros por segundo).
[056] Como ilustração, uma sequência de vídeo digital com uma resolução espacial de 1280x720 pixels por quadro e uma velocidade de quadro de 60 quadros por segundo é espacialmente 36 vezes maior do que e temporalmente 4 vezes mais rápida do que uma sequência de vídeo digital com uma resolução espacial de 176x144 pixels por quadro e uma velocidade de quadros de 15 quadros por segundo. Com tamanho aumentado de macrobloco, um codificador e/ou decodificador de vídeo pode explorar melhorar redundância espacial e/ou temporal aumentada para suportar a compressão de dados de vídeo.
[057] Além disso, por utilizar macroblocos maiores, um número menor de blocos pode ser codificado para um dado quadro ou fatia, reduzindo a quantidade de informações overhead que necessitam ser transmitidas. Em outras palavras, macroblocos maiores podem permitir uma redução no número geral de macroblocos codificados por quadro ou fatia. Se a resolução espacial de um quadro for aumentada em quatro vezes, por exemplo, então quatro vezes tantos quanto 16x16 macroblocos seriam necessários para os pixels no quadro. Nesse exemplo, com 64x64 macroblocos, o número de macroblocos necessário para tratar da resolução espacial aumentada é reduzido. Com um número reduzido de macroblocos por quadro ou fatia, por exemplo, a quantidade cumulativa de informações de codificação como informações de sintaxe, dados de vetor de movimento e similar pode ser reduzida.
[058] Nessa revelação o tamanho de um macrobloco se refere genericamente ao número de pixels contidos no macrobloco, por exemplo, 64x64, 32x32, 16x16 ou similar. Consequentemente, um macrobloco grande (por exemplo, 64x64 ou 32x32) pode ser grande no sentido de que contém um número maior de pixels do que um macrobloco de 16x16. Entretanto, a área espacial definida pelas dimensões vertical e horizontal de um macrobloco grande, isto é, como uma fração da área definida pelas dimensões vertical e horizontal de um quadro de vídeo, pode ser maior ou não do que a área de um macrobloco 16x16 convencional. Em alguns exemplos, a área do macrobloco grande pode ser igual ou similar a um macrobloco de 16x16 convencional. Entretanto, o macrobloco grande tem uma resolução espacial mais elevada caracterizada por um número mais elevado e densidade espacial mais elevada de pixels compreendidos no macrobloco.
[059] O tamanho do macrobloco pode ser configurado com Bse pelo menos em parte no número de pixels no quadro, isto é, a resolução espacial no quadro. Se o quadro tiver um número mais elevado de pixels, um macrobloco grande pode ser configurado para ter um número mais elevado de pixels. Como ilustração, um codificador de vídeo pode ser configurado para utilizar um macrobloco de 32x32 pixels para um quadro de 1280x720 pixels exibido em 30 quadros por segundo. Como outra ilustração, um codificador de vídeo pode ser configurado para utilizar um macrobloco de 64x64 pixels para um quadro de 1280x720 pixels exibido em 60 quadros por segundo.
[060] Cada macrobloco codificado por um codificador pode exigir dados que descrevem uma ou mais características do macrobloco. Os dados podem indicar, por exemplo, dados do tipo macrobloco para representar o tamanho do macrobloco, o modo no qual o macrobloco é dividido, e o modo de codificação (espacial ou temporal) aplicado ao macrobloco e/ou suas partições. Além disso, os dados podem incluir dados de diferença de vetor de movimento (mvd) juntamente com outros elementos de sintaxe que representam informações de vetor de movimento para o macrobloco e/ou suas partições. Além disso, os dados podem incluir um valor de padrão de bloco codificado (CBP) juntamente com outros elementos de sintaxe para representar informações residuais após previsão. Os dados do tipo macrobloco podem ser fornecidos em um cabeçalho de macrobloco único para o macrobloco grande.
[061] Como mencionado acima, por utilizar um macrobloco grande, o codificador pode reduzir o número de macroblocos por quadro ou fatia, e desse modo reduzir a quantidade de overhead líquido que necessita ser transmitido para cada quadro ou fatia. Além disso, por utilizar um macrobloco grande, o número total de macroblocos pode diminuir para um quadro ou fatia específico, o que pode reduzir artefatos de bloco em vídeo exibido para um usuário.
[062] Técnicas de codificação de vídeo descritas nessa revelação podem utilizar uma ou mais características para suportar codificação de macroblocos grandes. Por exemplo, um macrobloco grande pode ser dividido em partições menores. Modos de codificação diferentes, por exemplo, modos de codificação espacial (I) ou temporal (P ou B) diferentes, podem ser aplicados para partições selecionadas em um macrobloco grande. Além disso, valores de padrão de bloco codificado hierárquicos (CBP) podem ser utilizados para identificar eficientemente macroblocos codificados e partições possuindo coeficientes de transformada diferente de zero que representam dados residuais. Além disso, métrica de distorção de taxa pode ser comparada para codificação utilizando tamanhos de macrobloco grande e pequeno para selecionar um tamanho de macrobloco que produza resultados favoráveis. Adicionalmente, uma unidade codificada (por exemplo, um quadro, fatia, sequência ou grupo de imagens) compreendendo macroblocos de tamanhos variáveis pode incluir um elemento de sintaxe que indica o tamanho do macrobloco maior na unidade codificada. Como descrito em maior detalhe abaixo, macroblocos grandes compreendem uma sintaxe de nível de bloco diferente do que blocos de 16x16 pixels padrão. Por conseguinte, por indicar o tamanho do macrobloco maior na unidade codificada, um codificador pode sinalizar para um decodificador um decodificador de sintaxe de nível de bloco a aplicar nos macroblocos da unidade codificada.
[063] O uso de modos de codificação diferentes para partições diferentes em um macrobloco grande pode ser mencionado como uma codificação de modo misturado de macroblocos grandes. Em vez de codificar um macrobloco grande uniformemente de tal modo que todas as partições tenham o mesmo modo de intraou intercodificação, um macrobloco grande pode ser codificado de tal modo que algumas partições tenham modos de codificação diferentes, como modos intra- codificação diferentes (por exemplo I_16x16, I_8x8, (I_4x4) ou modos de intra- e intercodificação.
[064] Se um macrobloco grande for dividido em duas ou mais partições, por exemplo, pelo menos uma partição pode ser codificada com um primeiro modo e outra partição pode ser codificada com um segundo modo que é diferente do primeiro modo. Em alguns casos, o primeiro modo pode ser um primeiro modo I e o segundo modo pode ser um segundo modo I, diferente do primeiro modo I. em outros casos, o primeiro modo pode ser um modo I e o segundo modo pode ser um modo P ou B. Consequentemente, em alguns exemplos, um macrobloco grande pode incluir uma ou mais partições temporalmente codificadas (P ou B) e uma ou mais partições espacialmente codificadas (I), ou uma ou mais partições espacialmente codificadas com modos I diferentes.
[065] Um ou mais valores de padrão de bloco codificado hierárquicos (CBP) podem ser utilizados para descrever eficientemente se quaisquer partições em um macrobloco grande têm pelo menos um coeficiente de transformada diferente de zero e, em caso positivo, quais partições. Os coeficientes de transformada codificam dados residuais para o macrobloco grande. Um bit CBP de nível de macrobloco grande indica se quaisquer partições no macrobloco grande incluem um coeficiente quantizado, diferente de zero. Em caso negativo, não há necessidade de considerar se quaisquer das partições tem um coeficiente diferente de zero, visto que o macrobloco grande inteiro é conhecido por não ter coeficientes diferente de zero. Nesse caso, um macrobloco preditivo pode ser utilizado para decodificar o macrobloco sem dados residuais.
[066] Alternativamente, se o valor CBP de nível de macrobloco indicar que pelo menos uma partição no macrobloco grande tem um coeficiente diferente de zero, então valores CBP de nível de partição podem ser analisados para identificar quais das partições inclui pelo menos um coeficiente diferente de zero. O decodificador pode então recuperar dados residuais apropriados para as partições possuindo pelo menos um coeficiente diferente de zero, e decodificar as partições utilizando os dados residuais e dados de bloco preditivos. Em alguns casos, uma ou mais partições podem ter coeficientes diferente de zero, e portanto incluem valores CBP de nível de partição com a indicação apropriada. Tanto o macrobloco grande como pelo menos algumas das partições podem ser maiores do que 16x16 pixels.
[067] Para selecionar tamanhos de macrobloco que fornecem métrica de distorção de taxa favorável, métrica de distorção de taxa pode ser analisada tanto para macroblocos grandes (por exemplo, 32x32 ou 64x64) como macroblocos pequenos (por exemplo, 16x16). Por exemplo, um codificador pode comparar métrica de distorção de taxa entre macroblocos 16x16, macroblocos 32x32, e macroblocos 64x64 para uma unidade codificada como um quando ou uma fatia. O codificador pode então selecionar o tamanho de macrobloco que resulte na melhor distorção de taxa e codificar a unidade codificada utilizando o tamanho de macrobloco selecionado, isto é, o tamanho de macrobloco com a melhor distorção de taxa.
[068] A seleção pode ser baseada na codificação do quadro ou fatia em três ou mais passagens, por exemplo, uma primeira passagem utilizando macroblocos de 16x16 pixels, uma segunda passagem utilizando macroblocos de 32x32 pixels, e uma terceira passagem utilizando macroblocos de 64x64 pixels, e comparando métrica de distorção de taxa para cada passagem. Desse modo, um codificador pode otimizar distorção de taxa por variar o tamanho de macrobloco e selecionar o tamanho de macrobloco que resulte na melhor distorção de taxa ou distorção de taxa ótima para uma dada unidade de codificação, como uma fatia ou quadro. O codificador pode transmitir ainda informações de sintaxe para a unidade codificada, por exemplo, como parte de um cabeçalho de quadro ou um cabeçalho de fatia, que identifica o tamanho dos macroblocos utilizados na unidade codificada. Como discutido em maior detalhe abaixo, as informações de sintaxe para a unidade codificada podem compreender um indicador de tamanho máximo que indica um tamanho máximo de macroblocos utilizados na unidade codificada. Desse modo, o codificador pode informar um decodificador com relação a qual sintaxe esperar para macroblocos da unidade codificada. Quando o tamanho máximo de macroblocos compreende 16x16 pixels, o decodificador pode esperar sintaxe H.264 padrão e analisar os macroblocos de acordo com sintaxe especificada por H.264. entretanto, quando o tamanho máximo de macroblocos é maior do que 16x16, por exemplo compreende 64x64 pixels, o decodificador pode esperar elementos de sintaxe modificados e/ou adicionais que se referem a processamento de macroblocos maiores, como descrito por essa revelação e analisar os macroblocos de acordo com tal sintaxe modificada ou adicional.
[069] Para alguns quadros ou fatias de vídeo, macroblocos grandes podem apresentar economia de taxa de bit substancial e desse modo produzir os melhores resultados de distorção de taxa, dada distorção relativamente baixa. Para outros quadros ou fatias de vídeo, entretanto, macroblocos menores podem apresentar menos distorção, excedendo a taxa de bit na análise de custo de distorção de taxa. Consequentemente, em casos diferentes, 64x64, 32x32 ou 16x16 podem ser apropriado para quadros ou fatias de vídeo diferentes, por exemplo, dependendo do conteúdo e complexidade de vídeo.
[070] A figura 1 é um diagrama de blocos que ilustra um sistema de codificação e decodificação de vídeo de exemplo 10 que pode utilizar técnicas para codificar/decodificar dados de vídeo digitais utilizando um macrobloco grande, isto é, um macrobloco que contém mais pixels do que um macrobloco de 16x16. Como mostrado na figura 1, o sistema 10 inclui um dispositivo de origem 12 que transmite vídeo codificado para um dispositivo de destino 14 através de um canal de comunicação 16. O dispositivo de origem 12 e dispositivo de destino 14 podem compreendem qualquer de uma ampla gama de dispositivos. Em alguns casos, o dispositivo de origem 12 e dispositivo de destino 14 podem compreender dispositivos de comunicação sem fio, como aparelhos telefônicos sem fio, radiotelefones denominados de celular ou satélite, ou quaisquer dispositivos sem fio que possam comunicar informações de vídeo através de um canal de comunicação 16, em cujo caso o canal de comunicação 16 é sem fio. As técnicas dessa revelação, entretanto, que se referem a uso de um macrobloco grande compreendendo mais pixels do que macroblocos prescritos por padrões de codificação de vídeo convencionais, não são necessariamente limitadas a ajustes ou aplicações sem fio. Por exemplo, essas técnicas podem se aplicar a radiodifusão de televisão pelo ar, transmissões de televisão a cabo, transmissões de televisão por satélite, transmissões de vídeo da Internet, vídeo digital codificado que é codificado sobre um meio de armazenamento, ou outros cenários. Por conseguinte, o canal de comunicação 16 pode compreender qualquer combinação de mídia sem fio ou cabeada apropriada para transmissão de dados de vídeo codificados.
[071] No exemplo da figura 1, o dispositivo de origem 12 pode incluir uma fonte de vídeo 18, codificador de vídeo 20, um modulador/demodulador (modem) 22 e um transmissor 24. O dispositivo de destino 14 pode incluir um receptor 26, um modem 28, um decodificador de vídeo 30, e um dispositivo de exibição 32. De acordo com essa revelação, o codificador de vídeo 20 do dispositivo de origem 12 pode ser configurado para aplicar uma ou mais das técnicas para utilizar, em um processo de codificação de vídeo, um macrobloco grande possuindo um tamanho que é maior do que um tamanho de macrobloco prescrito por padrões de codificação de vídeo convencionais. Similarmente, o decodificador de vídeo 30 do dispositivo de destino 14 pode ser configurado para aplicar uma ou mais das técnicas para utilizar, em um processo de decodificação de vídeo, um tamanho de macrobloco que é maior do que um tamanho de macrobloco prescrito por padrões de codificação de vídeo convencionais.
[072] O sistema ilustrado 10 da figura 1 é meramente um exemplo. As técnicas para utilizar um macrobloco grande como descrito nessa revelação podem ser executadas por qualquer dispositivo de codificação e/ou decodificação de vídeo digital. O dispositivo de origem 12 e dispositivo de destino 14 são meramente exemplos de tais dispositivos de codificação nos quais o dispositivo de origem 12 gera dados de vídeo codificados para transmissão para o dispositivo de destino 14. Em alguns exemplos, os dispositivos 12, 14 podem operar em um modo substancialmente simétrico de tal modo que cada dos dispositivos 12, 14 inclui componentes de codificação e decodificação de vídeo. Consequentemente, o sistema 10 pode suportar uma transmissão de vídeo simples ou duplex entre dispositivos de vídeo 12, 14, etc., para fluxo contínuo de vídeo, repetição de vídeo, radiodifusão de vídeo ou telefonia de vídeo.
[073] A fonte de vídeo 18 do dispositivo de origem 12 pode incluir um dispositivo de captura de vídeo, como uma câmera de vídeo, um arquivo de vídeo contendo vídeo anteriormente capturado, e/ou uma alimentação de vídeo a partir de um fornecedor de conteúdo de vídeo. Como alternativa adicional, a fonte de vídeo 18 pode gerar dados baseados em gráfico de computador como o vídeo de fonte, ou uma combinação de vídeo ao vivo, vídeo arquivado e vídeo gerado por computador. Em alguns casos, se a fonte de vídeo 18 for uma câmera de vídeo, o dispositivo de origem 12 e dispositivo de destino 14 podem formar os denominados fones de câmera ou fones de vídeo. Como mencionado acima, entretanto, as técnicas descritas nessa revelação podem ser aplicáveis à codificação de vídeo em geral, e podem ser aplicadas a aplicações sem fio ou cabeadas. Em cada caso, o vídeo capturado, pré-capturado, ou gerado por computador pode ser codificado por codificador de vídeo 20. As informações de vídeo codificadas podem ser então moduladas pelo modem 22 de acordo com um padrão de comunicação, e transmitidas para o dispositivo de destino 14 através do transmissor 24. O modem 22 pode incluir vários misturadores, filtros, amplificadores ou outros componentes projetados para modulação de sinais. O transmissor 24 pode incluir circuitos projetados para transmissão de dados, incluindo amplificadores, filtros e uma ou mais antenas.
[074] O receptor 26 do dispositivo de destino 14 recebe informações através do canal 16, e o modem 28 demodula as informações. Novamente, o processo de codificação de vídeo pode implementar uma ou mais das técnicas descritas aqui para utilizar um macrobloco grande, por exemplo, maior do que 16x16 para inter (isto é, temporal) e /ou intra (isto é, espacial) codificação de dados de vídeo. O processo de decodificação de vídeo executado pelo decodificador de vídeo 30 também pode utilizar tais técnicas durante o processo de decodificação. As informações comunicadas através do canal 16 podem incluir informações de sintaxe definidas por codificador de vídeo 20, que também é utilizado pelo decodificador de vídeo 30, que inclui elementos de sintaxe que descrevem características e/ou processamento dos macroblocos grandes, como discutido em maior detalhe abaixo. As informações de sintaxe podem ser incluídas em qualquer ou todos de um cabeçalho de quadro, um cabeçalho de fatia, um cabeçalho de sequência (por exemplo, com relação a H.264, utilizando perfil e nível ao qual a sequência de vídeo codificada se conforma) ou um cabeçalho de macrobloco. O dispositivo de exibição 32 exibe os dados de vídeo decodificado para um usuário, e pode compreender qualquer de uma variedade de dispositivos de exibição, como tubo de raio catódico (CRT), um display de cristal líquido (LCD), um display de plasma, um display de diodo de emissão de luz orgânica (OLED), ou outro tipo de dispositivo de exibição.
[075] No exemplo da figura 1, o canal de comunicação 16 pode compreender qualquer meio de comunicação sem fio ou cabeado, como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão física, ou qualquer combinação de mídia sem fio e cabeada. O canal de comunicação 16 pode fazer parte de uma rede baseada em pacote, como uma rede de área local, uma rede de área remota, ou uma rede global como a Internet. O canal de comunicação 16 representa genericamente qualquer meio de comunicação apropriado, ou coleção de mídia de comunicação diferente, para transmitir dados de vídeo a partir do dispositivo de origem 12 para o dispositivo de destino 14, incluindo qualquer combinação apropriada de mídia cabeada ou sem fio. O canal de comunicação 16 pode incluir roteadores, comutadores, estações base, ou qualquer outro equipamento que possa ser útil para facilitar a comunicação a partir do dispositivo de origem 12 para o dispositivo de destino 14.
[076] O codificador de vídeo 20 e decodificador de vídeo 30 podem operar de acordo com um padrão de compressão de vídeo como o padrão ITU-T H.264, alternativamente descrito como MPEG-4, parte 10, Codificação avançada de vídeo (AVC). As técnicas dessa revelação, entretanto, não são limitadas a nenhum padrão de codificação específico. Outros exemplos incluem MPEG-2 e ITU-T H.263. embora não mostrado na figura 1, em alguns aspectos, o codificador de vídeo 20 e decodificador de vídeo 30 podem individualmente ser integrados com um codificador e decodificador de áudio, e podem incluir unidades MUX-DEMUX apropriadas, ou outro hardware e software, para tratar da codificação tanto de áudio como de vídeo em um fluxo de dados comum ou fluxos de dados separados. Se aplicável, unidades MUXD-DEMUX podem se conformar ao protocolo de multiplexor IT UH.223, ou outros protocolos como o protocolo de datagrama de usuário (UDP).
[077] O padrão ITU-T H.264/MPEG-4 (AVC) foi formulado pelo ITU-T Video coding experts group (VCEG) juntamente com o ISO/IEC Moving Picture experts group (MPEG) como o produto de uma sociedade coletiva conhecida como Joint Video Team (JVT). Em alguns aspectos, as técnicas descritas nessa revelação podem ser aplicadas a dispositivos que genericamente se conformam ao padrão H.264. o padrão H.264 é descrito na Recomendação de ITU-T H.264, Codificação avançada de vídeo para serviços de audiovisual genéricos, pelo grupo de estudo ITU-T, e datado de março de 2005, que pode ser mencionado aqui como o padrão H.264 ou especificação H.264, ou o padrão ou especificação H.264/AVC. O Joint Video team (JVT) continua a trabalhar em extensões para H.264/MPEG-4 AVC.
[078] O codificador de vídeo 20 e decodificador de vídeo 30 podem ser, individualmente, implementados como qualquer de uma variedade de conjunto de circuitos de codificador apropriado, como um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados de aplicação específica (ASICs), disposições de porta programável em campo (FPGAs), lógica discreta, software, hardware, firmware ou quaisquer combinações dos mesmos. Cada do codificador de vídeo 20 e decodificador de vídeo 30 pode ser incluído em um ou mais codificadores ou decodificadores, qualquer um dos quais pode ser integrado como parte de um codificador/decodificador combinado (CODEC) em uma câmera respectiva, computador, dispositivo móvel, dispositivo de assinante, dispositivo de radiodifusão, decodificador de sinais, servidor ou similar.
[079] Uma sequência de vídeo inclui tipicamente uma série de quadros de vídeo. O codificador de vídeo 20 opera em blocos de vídeo nos quadros de vídeo individuais para codificar os dados de vídeo. Um bloco de vídeo pode corresponder a um macrobloco ou uma partição de um macrobloco. Um bloco de vídeo pode compreender ainda a uma partição de uma partição. Os blocos de vídeo podem ter tamanhos fixos ou variáveis, e podem diferir em tamanho de acordo com um padrão de codificação especificado ou de acordo com as técnicas dessa revelação. Cada quadro de vídeo pode incluir uma pluralidade de fatias. Cada fatia pode incluir uma pluralidade de macroblocos, que podem ser dispostas em partições, também mencionadas como sub-blocos.
[080] Como exemplo, o padrão ITU-T H.264 suporta intrapredição em vários tamanho s de bloco, como 16 por 16, 8 por 8 ou 4 por 4 para componentes luma, e 8x8 para componentes de croma, bem como inter predição em vários tamanhos de bloco, como 16x16, 16x8, 8x16, 8x8, 8x4, 4x8 e 4x4 para componentes luma e tamanhos escalonados correspondentes para componentes de croma. Nessa revelação, “x” e “por” podem ser utilizados de forma intercambiável para se referir às dimensões de pixel do bloco em termos de dimensões vertical e horizontal, por exemplo, 16x16 pixels ou 16 por 16 pixels. Em geral, um loco 16x16 terá 16 pixels em uma direção vertical e 16 pixels em uma direção horizontal. De modo semelhante, um bloco NxN tem genericamente N pixels em uma direção vertical e N pixels em uma direção horizontal, onde N representa um valor inteiro positivo que pode ser maior do que 16. Os pixels em um bloco podem ser dispostos em linhas e colunas.
[081] Os tamanhos de bloco que são menores do que 16 por 16 podem ser mencionados como partições de um macrobloco de 16 por 16. De modo semelhante, para um bloco NxN, tamanhos de bloco menores do que NxN podem ser mencionados como partições do bloco NxN. As técnicas dessa revelação descrevem intra- e intercodificação para macroblocos maiores do que o macrobloco de 16x16 pixels convencional, como macroblocos de 32x32 pixels, macroblocos de 64x64 pixels ou macroblocos maiores. Blocos de vídeo podem compreender blocos de dados de pixel no domínio de pixel, ou blocos de coeficientes de transformada no domínio de transformada, por exemplo, após aplicação de uma transformada como uma transformada de cosseno discreta (DCT), uma transformada de número inteiro, uma transformada de ondinha ou uma transformada similar de forma conceptual aos dados de bloco de vídeo residual que representam diferenças de pixel entre blocos de vídeo codificados e blocos de vídeo preditivo. Em alguns casos, um bloco de vídeo pode compreender blocos de coeficientes de transformada quantizada no domínio de transformada.
[082] Blocos de vídeo menores podem fornecer melhor resolução, e podem ser utilizados para locais de um quadro de vídeo que incluem níveis elevados de detalhe. Em geral, macroblocos e as várias partições às vezes mencionadas como sub-blocos, podem ser considerados como sendo blocos de vídeo. Além disso, uma fatia pode ser considerada como sendo uma pluralidade de blocos de vídeo, como macroblocos e/ou sub-blocos. Cada fatia pode ser uma unidade independentemente decodificável de um quadro de vídeo. Alternativamente, os próprios quadros podem ser unidades decodificáveis, ou outras porções de um quadro podem ser definidas como unidades decodificáveis. O termo “unidade codificada” ou “unidade de codificação” pode se referir a qualquer unidade independentemente decodificável de um quadro de vídeo como um quadro inteiro, uma fatia de um quadro, um grupo de imagens (GOP) também mencionado com uma sequência, ou outra unidade independentemente decodificável de acordo com técnicas de codificação aplicáveis.
[083] Após codificação intrapreditiva ou interpreditiva para produzir dados preditivos e dados residuais, e após quaisquer transformadas (como a transformada de número inteiro 4x4 ou 8x8 utilizada em H.264/AVC ou uma transformada de cosseno discreto DCT) para produzir coeficientes de transformada, quantização de coeficientes de transformada pode ser executada. A quantização se refere genericamente a um processo no qual coeficientes de transformada são quantizados para reduzir possivelmente a quantidade de dados utilizados para representar os coeficientes. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. Por exemplo, um valor de bit n pode ser arredondado para baixo para um valor de bit m durante quantização, onde n é maior do que m.
[084] Após quantização, codificação de entropia dos dados quantizados pode ser executada, por exemplo, de acordo com codificação de comprimento variável adaptável (CAVLC), codificação aritmética binária adaptável de contexto (CABAC) ou outra metodologia de codificação de entropia. Uma unidade de processamento configurada para codificação de entropia, ou outra unidade de processamento, pode executar outras funções de processamento, como codificação de comprimento de curso zero de coeficientes quantizados e/ou geração de informações de sintaxe como valores CBP, tipo de macrobloco, modo de codificação, tamanho máximo de macrobloco para uma unidade codificada (como um quadro, fatia, macrobloco, ou sequência) ou similar.
[085] De acordo com várias técnicas da presente revelação, o codificador de vídeo 20 pode utilizar um macrobloco que é maior do que aquele prescrito por padrões de codificação de vídeo convencionais para codificar dados de vídeo digitais. Em um exemplo, o codificador de vídeo 20 pode codificar, com um codificador de vídeo, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, gerar informações de sintaxe de tipo bloco que indicam o tamanho do bloco, e gerar um valor CBP para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero. As informações de sintaxe de tipo bloco de macrobloco podem ser fornecidas em um cabeçalho de macrobloco para o macrobloco grande. As informações de sintaxe de tipo bloco de macrobloco podem indicar um endereço ou posição do macrobloco em um quadro ou fatia, ou um número de macrobloco que identifica a posição do macrobloco, um tipo de modo de codificação aplicado ao macrobloco, um valor de quantização para o macrobloco, quaisquer informações de vetor de movimento para o macrobloco e um valor CBP para o macrobloco.
[086] Em outro exemplo, o codificador de vídeo 20 pode receber um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, o dividindo o bloco em partições, codificar uma das partições utilizando um primeiro modo de codificação, codificar outra das partições utilizando um segundo modo de codificação diferente do primeiro modo de codificação, e gerar informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificar as partições e os modos de codificação utilizados para codificar as partições.
[087] Em um exemplo adicional, o codificador de vídeo 20 pode receber uma unidade de codificação de vídeo, como um quadro ou fatia, determinar uma primeira métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando primeiros blocos de vídeo com tamanhos de 16x16 pixels, determinar uma segunda métrica de distorção de taxa para codificar a unidade de codificação de vídeo utilizando segundos blocos de vídeo com tamanhos maiores do que 16x16 pixels, codificar a unidade de codificação de vídeo utilizando os primeiros blocos de vídeo quando a primeira métrica de distorção de taxa é menor do que a segunda métrica de distorção de taxa, e codificar a unidade de codificação de vídeo utilizando os segundos blocos de vídeo quando a segunda métrica de distorção de taxa é menor do que a primeira métrica de distorção de taxa.
[088] Em um exemplo, o decodificador de vídeo 30 pode receber um bloco de vídeo codificado possuindo um tamanho maior do que 16x16 pixels, receber informações de sintaxe do tipo de bloco que indicam o tamanho do bloco codificado, receber um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e decodificar o bloco codificado com base nas informações de sintaxe de tipo bloco e o valor de padrão de bloco codificado para o bloco codificado.
[089] Em outro exemplo, o decodificador de vídeo 30 pode receber um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, em que o bloco é dividido em partições, uma das partições é intracodificada e outra das partições é intracodificada, recebe informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificam as partições e os modos de codificação utilizados para codificar as partições, e decodificar o bloco de vídeo com base nas informações de sintaxe de tipo bloco.
[090] A figura 2 é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo 50 que pode implementar técnicas para utilizar um macrobloco grande compatível com essa revelação. O codificador de vídeo 50 pode corresponder ao codificador de vídeo 20 de dispositivo de origem 12, ou um codificador de vídeo de um dispositivo diferente. O codificador de vídeo 50 pode executar intracodificação e intercodificação de blocos nos quadros de vídeo, incluindo macroblocos grandes, ou partições ou subpartições de macroblocos grandes. Intracodificação se baseia em previsão espacial para reduzir ou remover redundância espacial em vídeo em um dado quadro de vídeo. Intercodificação se baseia em previsão temporal para reduzir ou remover redundância temporal em vídeo em quadros adjacentes de uma sequência de vídeo.
[091] Intramodo (modo-I) se refere a qualquer de vários modos de compressão baseado em espaço e intermodos como predição (modo-P) ou bidirecional (modo-B) podem se referir a qualquer de vários modos de compressão baseados em tempo. As técnicas dessa revelação podem ser aplicadas tanto durante intercodificação como Intracodificação. Em alguns casos, as técnicas dessa revelação também podem ser aplicadas à codificação de imagens digitais não de vídeo. Isto é, um codificador de imagem fixa digital pode utilizar as técnicas dessa revelação para intracodificar uma imagem fixa digital utilizando macroblocos grandes em um modo similar à codificação de macroblocos intracodificados em quadros de vídeo em uma sequência de vídeo.
[092] Como mostrado na figura 2, o codificador de vídeo 50 recebe um bloco de vídeo atual em um quadro de vídeo a ser codificado. No exemplo da figura 2, o codificador de vídeo 50 inclui unidade de compensação de movimento 35, unidade de estimação de movimento 36, unidade de intrapredição 37, unidade de seleção de modo 39, armazenamento de quadro de referência 34, somador 48, unidade de transformada 38, unidade de quantização 40, e unidade de codificação de entropia 46. Para reconstrução de bloco de vídeo, o codificador de vídeo 50 também inclui unidade de quantização inversa 42, unidade de transformada inversa 44 e somador 51. Um filtro de desbloqueio (não mostrado na figura 2) também pode ser incluído para filtrar limites de bloco para remover artefatos de bloco de vídeo reconstruído. Se desejado, o filtro de desbloqueio filtraria tipicamente a saída do somador 51.
[093] Durante o processo de codificação, o codificador de vídeo 50 recebe um quadro ou fatia de vídeo a ser codificado. O quadro ou fatia pode ser dividido em múltiplos blocos de vídeo, incluindo macroblocos grandes. A unidade de estimação de movimento 36 e unidade de compensação de movimento 35 executam codificação interpreditiva do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para fornecer compressão temporal. A unidade de intrapredição 37 executa codificação intrapreditiva do bloco de vídeo recebido em relação a um ou mais blocos vizinhos no mesmo quadro ou fatia que o bloco a ser codificado para fornecer compressão espacial.
[094] A unidade de seleção de modo 39 pode selecionar um dos modos de codificação, intra ou inter, por exemplo, com Bse em resultados de erro, e provê o bloco intra- ou intercodificado resultante para o somador 48 para gerar dados de bloco residual e ao somador 51 para reconstruir o bloco codificado para uso como um quadro de referência. De acordo com as técnicas dessa revelação, o bloco de vídeo a ser codificado pode compreender um macrobloco que é maior do que aquele prescrito por padrões de codificação convencionais, isto é, maior do que um macrobloco de 16x 16 pixels. Por exemplo, o bloco de vídeo grande pode compreender um macrobloco de 64x64 pixels ou um macrobloco de 32x32 pixels.
[095] A unidade de estimação de movimento 36 e unidade de compensação de movimento 35 podem ser altamente integradas, porém são ilustradas separadamente para fins conceptuais. A estimação de movimento é o processo de gerar vetores de movimento, que estimam movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de um bloco preditivo em um quadro de referência preditivo (ou outra unidade codificada) relativo ao bloco atual sendo codificado no quadro atual (ou outra unidade codificada). Um bloco preditivo é um bloco que se verifica casa estreitamente com o bloco a ser codificado, em termos de diferença de pixel, que pode ser determinada pela de diferença absoluta (SAD), soma de diferença de quadrado (SDD) ou outras métricas de diferença.
[096] Um vetor de movimento também pode indicar deslocamento de uma partição de um macrobloco grande. Em um exemplo com relação a um macrobloco de 64x64 pixels com uma partição de 32x64 e duas partições de 32x32, um primeiro vetor de movimento pode indicar deslocamento da partição 32x64, um segundo vetor de movimento pode indicar deslocamento de uma primeira das partições 32x32, e um terceiro vetor de movimento pode indicar deslocamento de uma segunda das partições 32x32, todos relativos a partições correspondentes em um quadro de referência. Tais partições também podem ser consideradas blocos de vídeo, como aqueles termos são utilizados nessa revelação. A compensação de movimento pode envolver a busca ou geração do bloco preditivo com base no vetor de movimento determinado pela estimação de movimento. Novamente, a unidade de estimação de movimento 36 e unidade de compensação de movimento 35 podem ser funcionalmente integradas.
[097] A unidade de estimação de movimento 36 calcula um vetor de movimento para o bloco de vídeo de um quadro intercodificado por comparar o bloco de vídeo com blocos de vídeo de um quadro de referência na armazenamento de quadro de referência 34. A unidade de compensação de movimento 35 também pode interpolar pixels sub-inteiros do quadro de referência, por exemplo, um quadro I ou um quadro P. o padrão ITU H.264 se refere a quadros de referência como “listas”. Portanto, dados armazenados no armazenamento de quadro de referência 34 também podem ser considerados listas. A unidade de estimação de movimento 36 compara blocos de um ou mais quadros de referência (ou listas) a partir da armazenamento de quadro de referência 34 com um bloco a ser codificado de um quadro atual, por exemplo, um quadro P ou um quadro B. quando os quadros de referência na armazenamento de quadro de referência 34 incluem valores para pixels de sub-inteiro, um vetor de movimento calculado pela unidade de estimação de movimento 36 pode se referir a um local de pixel de sub-inteiro de um quadro de referência. A unidade de estimação de movimento 36 envia o vetor de movimento calculado para a unidade de codificação de entropia 46 e unidade de compensação de movimento 35. O bloco de quadro de referência identificado por um vetor de movimento pode ser mencionado como um bloco preditivo. A unidade de compensação de movimento 35 calcula valores de erro para o bloco preditivo do quadro de referência.
[098] A unidade de compensação de movimento 35 pode calcular dados de predição com base no bloco preditivo. O codificador de vídeo 50 forma um bloco de vídeo residual por subtrair os dados de predição a partir da unidade de compensação de movimento 35 do bloco de vídeo original sendo codificado. O somador 48 representa o componente ou componentes que executam essa operação de subtração. A unidade de transformada 38 aplica uma transformada, como transformada de cosseno discreto (DCT) ou uma transformada similar de modo conceptual, ao bloco residual, produzindo um bloco de vídeo que compreende valores de coeficiente de transformada residual. A unidade de transformada 38 pode executar outras transformadas, como aquelas definidas pelo padrão H.264, que são similares de forma conceptual a DCT. Transformadas de ondinha, transformadas de número inteiro, transformadas de sub-banda ou outros tipos de transformadas poderiam ser também utilizadas. Em qualquer caso, a unidade de transformada 38 aplica a transformada ao bloco residual, produzindo um bloco de coeficientes de transformada residual. A transformada pode converter informações residuais de um domínio de valor de pixel em um domínio de transformada, como um domínio de frequência.
[099] A unidade de quantização 40 quantiza os coeficientes de transformada residual para reduzir adicionalmente a taxa de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. Em um exemplo, a unidade de quantização 40 pode estabelecer um grau diferente de quantização para cada macrobloco de 64x64 pixels de acordo com um parâmetro de quantização de luminância, mencionado nessa revelação como QPy. a unidade de quantização 40 pode modificar adicionalmente o parâmetro de quantização de luminância utilizado durante quantização de um macrobloco de 64x64 com base em um modificador de parâmetro de quantização, mencionado aqui como um “MB64_delta_QP”, e um macrobloco de 64x64 pixels anteriormente codificado.
[0100] Cada macrobloco grande de 64x64 pixels pode compreender um valor MB64_delta_QP individual, na faixa entre -26 e +25 inclusive. Em geral, o codificador de vídeo 50 pode estabelecer o valor MB64_delta_QP para um bloco específico com base em uma taxa de bits desejada para transmitir a versão codificada do bloco. O valor MB64_delta_QP de um primeiro macrobloco de 64x64 pixels pode ser igual ao valor QP de um quadro ou fatia que inclui o primeiro macrobloco de 64x64 pixels, por exemplo, no cabeçalho de quadro/fatia. QPy para um macrobloco de 64x64 pixels atual pode ser calculado de acordo com a fórmula:
[0101] QPY = ( QPYPREV+MB 64 _ delta _ QP+52)%52
[0102] Onde QPY,PREV se refere ao valor de QPy do macrobloco de 64x64 pixels anterior na ordem de decodificação do quadro/fatia atual, e onde “%” se refere ao operador módulo de tal modo que N%52 retorna um resultado entre 0 e 51, inclusive, correspondendo ao valor restante de N dividido por 52. Para um primeiro macrobloco em um quadro/fatia, QPY,PREV pode ser definido igual ao quadro/fatia QP enviado no cabeçalho de quadro/fatia.
[0103] Em um exemplo, a unidade de quantização 40 presume que o valor MB64_deltaQP é igual a zero quando um valor MB64_delta_QP não é definido para um macrobloco de 64x64 pixels específico, incluindo macroblocos do tipo “skip”, como tipos de macrobloco P_Skip e B_Skip. Em alguns exemplos, valores delta_QP adicionais (genericamente mencionados como valores de modificação de parâmetro de quantização) podem ser definidos para controle de partições de quantização de grão mais fino em um macrobloco de 64x64 pixels, como valores MB32_delta_QP para cada partição de 32x32 pixels de um macrobloco de 64x64 pixels. Em alguns exemplos, cada partição de um macrobloco de 64x64 pode ser atribuído um parâmetro de quantização individual. Utilizando um parâmetro de quantização individualizado para cada partição pode resultar em quantização mais eficiente de um macrobloco, por exemplo, para ajustar melhor a quantização para uma área não homogênea, em vez de utilizar um único QP para um macrobloco 64x64. Cada valor de modificação de parâmetro de quantização pode ser incluído como informações de sintaxe com o bloco codificado correspondente, e um decodificador pode decodificar o bloco codificado por desquantizar, isto é, quantizar inverso, o bloco codificado de acordo com o valor de modificação de parâmetro de quantização.
[0104] Após quantização, a unidade de codificação de entropia 46 codifica em entropia os coeficientes de transformada quantizados. Por exemplo, a unidade de codificação de entropia 46 pode executar codificação de comprimento variável adaptável a conteúdo (CAVLC), codificação aritmética binária adaptável a contexto (CABAC) ou outra técnica de codificação de entropia. Após a codificação de entropia por unidade de codificação de entropia 46, o vídeo codificado pode ser transmitido para outro dispositivo ou arquivado para transmissão ou recuperação posterior. O fluxo de bits codificado pode incluir blocos de coeficiente de transformada residual codificado por entropia, vetores de movimento para tais blocos, valores MB64_delta- QP para cada macrobloco de 64x64 pixels, e outros elementos de sintaxe incluindo, por exemplo, valores identificadores do tipo macrobloco, cabeçalhos de unidade codificada indicando o tamanho máximo de macroblocos na unidade codificada, valores QPy, valores de padrão de bloco codificado (CBP), valores que identificam um método de partição de um macrobloco ou sub-bloco, e valores de indicado de tamanho de transformada, como discutido em maior detalhe abaixo. No caso de codificação aritmética binária adaptável a contexto, contexto pode ser baseado em macroblocos vizinhos.
[0105] Em alguns casos, a unidade de codificação de entropia 46 ou outra unidade de codificador de vídeo 50 pode ser configurada para executar outras funções de codificação, além de codificação de entropia. Por exemplo, a unidade de codificação de entropia 46 pode ser configurada para determinar os valores CBP para os macroblocos grandes e partições. A unidade de codificação de entropia 46 pode aplicar um esquema CBP hierárquico para fornecer um valor CBP para um grande macrobloco que indica se quaisquer partições no macrobloco incluem valores de coeficiente de transformada diferente de zero e, em caso positivo, outros valores CBP para indicar se partições específicas no macrobloco grande têm valores de coeficiente de transformada diferente de zero. Além disso, em alguns casos, a unidade de codificação de entropia 46 pode executar codificação de comprimento de curso dos coeficientes em um macrobloco grande ou subpartição. Em particular, a unidade de codificação de entropia 46 pode aplicar uma varredura em ziguezague ou outro padrão de varredura para varrer os coeficientes de transformada em um macrobloco ou partição e codificar cursos de zeros para compressão adicional. A unidade de codificação de entropia 46 também pode construir informações de cabeçalho com elementos de sintaxe apropriados para transmissão no fluxo de bit de vídeo codificado.
[0106] A unidade de quantização inversa 42 e unidade de transformada inversa 44 aplicam quantização inversa e transformação inversa, respectivamente, para reconstruir o bloco residual no domínio de pixels, por exemplo, para uso posterior como um bloco de referência. A unidade de compensação de movimento 35 pode calcular um bloco de referência por adicionar o bloco residual a um bloco preditivo de um dos quadros de armazenamento de quadro de referência 34. A unidade de compensação de movimento 35 também pode aplicar um ou mais filtros de interpolação ao bloco residual reconstruído para calcular valores de pixel de sub- inteiro. O somador 51 adiciona o bloco residual reconstruído ao bloco de previsão compensada de movimento produzido pela unidade de compensação de movimento 35 para produzir um bloco de vídeo reconstruído para armazenamento na armazenamento de quadro de referência 34. O bloco de vídeo reconstruído pode ser utilizado por unidade de estimação de movimento 36 e unidade de compensação de movimento 35 como um bloco de referência para intercodificar um bloco em um quadro de vídeo subsequente. O macrobloco grande pode compreender um macrobloco de 64x64 pixels, um macrobloco de 32x32 pixels, ou outro macrobloco que é maior do que o tamanho prescrito por padrões de codificação de vídeo convencionais.
[0107] A figura 3 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo 60, que decodifica uma sequência de vídeo que é codificada no modo descrito nessa revelação. A sequência de vídeo codificada pode incluir macroblocos codificados que são maiores do que o tamanho prescrito por padrões de codificação de vídeo convencionais. Por exemplo, os macroblocos codificados podem ser macroblocos de 32x32 pixels ou 64x64 pixels. No exemplo da figura 3, o decodificador de vídeo 60 inclui uma unidade de decodificação de entropia 52, unidade de compensação de movimento 54, unidade de intrapredição 55, unidade de quantização inversa 56, unidade de transformação inversa 58, armazenamento de quadro de referência 62 e somador 64. O decodificador de vídeo 60 pode, em alguns exemplos, executar uma passagem de decodificação genericamente recíproca à passagem de codificação descrita com relação ao codificador de vídeo 50 (figura 2). A unidade de compensação de movimento 54 pode gerar dados de previsão com base em vetores de movimento recebidos da unidade de decodificação de entropia 52.
[0108] A unidade de decodificação de entropia 52 decodifica por entropia o fluxo de bits recebido para gerar coeficientes quantizados e elementos de sintaxe (por exemplo, vetores de movimento, valores CBP, valores QPy, valores de indicador de tamanho de transformada, valores MB64_delta_QP). A unidade de decodificação de entropia 52 pode analisar o fluxo de bits para identificar informações de sintaxe em unidades codificadas como quadros, fatias e/ou cabeçalhos de macrobloco. As informações de sintaxe para uma unidade codificada compreendendo uma pluralidade de macroblocos podem indicar o tamanho máximo dos macroblocos, por exemplo, 16x16 pixels, 32x32 pixels, 64x64 pixels, ou outros macroblocos de tamanho maior na unidade codificada. As informações de sintaxe para um bloco são emitidas da unidade de codificação de entropia 52 para a unidade de compensação de movimento 54 ou unidade de intrapredição 55, por exemplo, dependendo do modo de codificação do bloco. Um decodificador pode utilizar o indicador de tamanho máximo na sintaxe de uma unidade codificada para selecionar um decodificador de sintaxe para a unidade codificada. Utilizando o decodificador de sintaxe especificado para o tamanho máximo, o decodificador pode então interpretar adequadamente e processar os macroblocos de tamanho grande incluídos na unidade codificada.
[0109] A unidade de compensação de movimento 54 pode utilizar vetores de movimento recebidos no fluxo de bits para identificar um bloco de previsão em quadros de referência na armazenamento de quadro de referência 62. A unidade de intrapredição 55 pode utilizar modos de intrapredição recebidos no fluxo de bits para formar um bloco de predição a partir de blocos espacialmente adjacentes. A unidade de quantização inversa 56 quantiza de forma inversa, isto é desquantiza, os coeficientes de bloco quantizados fornecidos no fluxo de bits e decodificados pela unidade de decodificação de entropia 52. O processo de quantização inversa pode incluir um processo convencional, por exemplo, como definido pelo padrão de decodificação H.264. o processo de quantização inverso pode incluir também o uso de um parâmetro de quantização QPy calculado pelo codificador 50 para cada macrobloco de 64x64 para determinar um grau de quantização e, de modo semelhante, um grau de quantização inversa que deve ser aplicado.
[0110] A unidade de transformada inversa 58 aplica uma transformada inversa, por exemplo, um DCT inverso, uma transformada de número inteiro inverso, ou um processo de transformada inversa similar de modo conceptual, aos coeficientes de transformada para produzir blocos residuais no domínio de pixel. A unidade de compensação de movimento 54 produz blocos de movimento compensado, possivelmente executando interpolação com base em filtros de interpolação. Identificadores para filtros de interpolação a serem utilizados para estimação de movimento com precisão de sub-pixel podem ser incluídos nos elementos de sintaxe. A unidade de compensação de movimento 54 pode utilizar filtros de interpolação como utilizado pelo codificador de vídeo 50 durante codificação do bloco de vídeo para calcular valores interpolados para pixels de sub- inteiro de um bloco de referência. A unidade de compensação de movimento 54 pode determinar os filtros de interpolação utilizados pelo codificador de vídeo 50 de acordo com informações de sintaxe recebidas e utilizar os filtros de interpolação para produzir blocos preditivos.
[0111] A unidade de compensação de movimento 54 utiliza algumas das informações de sintaxe para determinar tamanhos de macroblocos utilizados para codificar quadro(s) da sequência de vídeo codificado, dividir informações que descrevem como cada macrobloco de um quadro da sequência de vídeo codificado é dividida, modos indicando como cada partição é codificada, um ou mais quadros de referência (ou listas) para cada macrobloco intercodificado ou divisa, e outras informações para desedificar a sequência de vídeo codificada.
[0112] O somador 64 soma os blocos residuais com os blocos de predição correspondentes gerados pela unidade de compensação de movimento 54 ou unidade de intrapredição para formar blocos decodificados. Se desejado, um filtro de desbloqueio pode ser aplicado também para filtrar os blocos decodificados para remover artefatos de bloco. Os blocos de vídeo decodificados são então armazenados na armazenamento de quadro de referência 62, que provê blocos de referência para compensação de movimento subsequente e também produz vídeo decodificado para apresentação em um dispositivo de exibição (como o dispositivo 32 da figura 1). Os blocos de vídeo decodificados podem individualmente compreender um macrobloco de 64x64 pixels, macrobloco de 32x32 pixels, ou outro macrobloco maior do que padrão. Alguns macroblocos podem incluir partições com uma variedade de tamanhos de partição diferentes.
[0113] A figura 4A é um diagrama conceptual que ilustra partição de exemplo entre vários níveis de partição de um macrobloco grande. Blocos de cada nível de partição incluem um número de pixels correspondendo ao nível específico. Quatro padrões de partição são também mostrados para cada nível, onde um primeiro padrão de partição inclui o bloco inteiro, um segundo padrão de partição inclui duas partições horizontais de tamanho igual, um terceiro padrão de partição inclui duas partições verticais de tamanho igual, e um quarto padrão de partição inclui quatro partições de tamanho igual. Um dos padrões de partição pode ser escolhido para cada partição em cada nível de partição.
[0114] No exemplo da figura 4A, o nível O corresponde a uma partição de macrobloco de 64x64 pixels de amostras de luma e amostras de croma associadas. O nível I corresponde a um bloco de 32x32 pixels de amostras de luma e amostras de croma associadas. O nível 2 corresponde a um bloco de 16x16 pixels de amostras de luma e amostras de croma associadas, e o nível 3 corresponde a um bloco de 8x8 pixels de amostras de luma e amostras de croma associadas.
[0115] Em outros exemplos, níveis adicionais poderiam ser introduzidos para utilizar números de pixels maiores ou menores. Por exemplo, o nível O poderia começar com um macrobloco de 128x128 pixels, um macrobloco de 256x256 pixels, ou outro macrobloco de tamanho maior. O nível de número mais elevado, em alguns exemplos, poderia ser um grão tão fino quanto um único pixel, isto é, um bloco de 1x1. Consequentemente, a partir dos níveis mais baixo para mais elevado, a partição pode ser cada vez mais subdividida, de tal modo que o macrobloco seja dividido, as partições sejam adicionalmente divididas, partições adicionais são ainda adicionalmente divididas, e assim por diante. Em alguns casos, as partições abaixo do nível O, isto é, partições de partições, podem ser mencionadas como subpartições.
[0116] Quando um bloco em um nível é dividido utilizando quatro sub- blocos de tamanho igual, qualquer ou todos os sub-blocos podem ser divididos de acordo com os padrões de partição do nível seguinte. Isto é, para um bloco NxN que foi dividido no nível x em quatro sub-blocos de tamanho igual (N/2)x(N/2), quaisquer dos sub-blocos (N/2)x(N/2) podem ser adicionalmente divididos de acordo com qualquer dos padrões de partição do nível x+1. Desse modo, um sub-bloco de 32x32 pixels de um macrobloco de 64x64 pixels no nível 0 pode ser adicionalmente dividido de acordo com qualquer um dos padrões mostrados na figura 4A no nível I, por exemplo, 32x32, 32x16, e 32x16, 16x32 e 16x32, ou 16x16, 16x16, 16x16 e 16x16. De modo semelhante, onde quatro sub-blocos de 16x16 pixels resultam de um sub- bloco de 32-32 pixels sendo dividido, cada dos sub-blocos de 16x16 pixels pode ser adicionalmente dividido de acordo com qualquer um dos padrões mostrados na figura 4A no nível 2. Onde quatro sub-blocos de 8x8 pixels resultam de um sub-bloco de 16x16 pixels sendo dividido, cada dos sub-blocos de 8x8 pixels pode ser adicionalmente dividido de acordo com qualquer um dos padrões mostrados na figura 4A no nível 3.
[0117] Utilizando o exemplo de quatro níveis de partições mostradas na figura 4A, áreas homogêneas grandes e alterações esporádicas finas podem ser adaptavelmente representadas por um codificador que implementa a estrutura e técnicas dessa revelação. Por exemplo, o codificador de vídeo 50 pode determinar níveis de partição diferentes para diferentes macroblocos, bem como modos de codificação a aplicar em tais partições, por exemplo, baseado em análise de distorção de taxa. Além disso, como descrito em maior detalhe abaixo, o codificador de vídeo 50 pode codificar pelo menos algumas das partições finais de forma diferente, utilizando predição espacial (codificada-P ou codificada B) ou temporal (codificada I), por exemplo, com base em resultados de métrica de distorção de taxa ou outras considerações.
[0118] Em vez de codificar um macrobloco grande uniformemente de tal modo que todas as partições tenham o mesmo modo de intra- ou intercodificação, um macrobloco grande pode ser codificado de tal modo que algumas partições tenham modo de codificação diferente. Por exemplo, algumas (pelo menos uma) partições podem ser codificadas com modos de Intracodificação diferentes (por exemplo, 1_x16x16, 1_8x8< 1_4x4) em relação a outras (pelo menos uma) partições no mesmo macrobloco. Além disso, algumas (pelo menos uma) partições podem ser intracodificadas enquanto outras (pelo menos uma) partições no mesmo macrobloco são intercodificadas.
[0119] Por exemplo, o codificador de vídeo 50 pode, para um bloco de 32x32 com quatro partições de 16x16, codificar algumas das partições 16x16 utilizando predição espacial e outras partições 16x16 utilizando predição temporal. Como outro exemplo, o codificador de vídeo 50 pode, para um bloco 32x32 com quatro partições de 16x16, codificar uma ou mais das partições 16x16 utilizando um primeiro modo de predição (por exemplo, um de 1_16x16, 1_8x8, 1_4x4) e um ou mais outras partições de 16x16 utilizando um modo de predição espacial diferente (por exemplo, um de I_16x16, I_8x8, I_4x4).
[0120] A figura 4B é um diagrama conceptual que ilustra atribuição de modos de codificação diferentes a diferentes partições de um macrobloco grande. Em particular, a figura 4B ilustra atribuição de um modo de Intracodificação I_16x16 a um bloco de 16x16 esquerdo superior de um macrobloco 32x32 grande, modos de Intracodificação I_8x8 aos blocos de 16x16 direito superior e esquerdo inferior do macrobloco de 32x32 grande, e um modo de Intracodificação I_4x4 a um bloco de 16x16 direito inferior do macrobloco 32x32 grande. Em alguns casos, os modos de codificação ilustrados na figura 4B podem ser modos de Intracodificação H.264 para codificação luma.
[0121] No modo descrito, cada partição pode ser adicionalmente dividida em uma base seletiva, e cada partição final pode ser seletivamente codificada utilizando predição temporal ou predição espacial, e utilizando modos de codificação temporal ou espacial selecionados. Consequentemente, é possível codificar um macrobloco grande com modos misturados de tal modo que algumas partições no macrobloco são intracodificadas e outras partições no mesmo macrobloco são intercodificadas, ou algumas partições no mesmo macrobloco são codificadas com modos de Intracodificação diferentes ou modos de intercodificação diferentes.
[0122] O codificador de vídeo 50 pode definir adicionalmente cada partição de acordo com um tipo de macrobloco. O tipo de macrobloco pode ser incluído como um elemento de sintaxe em um fluxo de bits codificado, por exemplo, como um elemento de sintaxe em um cabeçalho de macrobloco. Em geral, o tipo de macrobloco pode ser utilizado para identificar como o macrobloco é dividido, e os métodos ou modos respectivos para codificar cada das partições do macrobloco, como discutido acima. Os métodos para codificar as partições podem incluir não somente intra- e intercodificação, como também modos específicos de Intracodificação (por exemplo, I_16x16, I_8x8, I_4x4) ou intercodificação (por exemplo, P_ ou B_16x16, 16x8, 8x16, 8x8, 8x4, 4x8 e 4x4).
[0123] Como discutido com relação ao exemplo da tabela 1 abaixo em maior detalhe para blocos-P e com relação ao exemplo da tabela 2 abaixo para blocos-B,l blocos 0 de nível de partição podem ser definidos de acordo com um elemento de sintaxe do tipo MB64_, representativo de um macrobloco com 64x64 pixels. Definições de tipo similar podem ser formadas para qualquer MB[N]_type, onde [N] se refere a um bloco com NxN pixels, onde N é um número inteiro positivo que pode ser maior do que 16. Quando um bloco NxN tem quatro partições de tamanho (N/2)x(N/2), como mostrado na última coluna da figura 4A, cada das quatro partições pode Recber suas próprias definições de tipo, por exemplo, MB[N/2]_type. Por exemplo, para um bloco de 64x64 pixels (do tipo MB64_type) com quatro partições de 32x32 pixels, o codificador de vídeo 50 pode introduzir um MB32_type para cada das quatro partições de 32x32 pixels. Esses elementos de sintaxe do tipo macrobloco podem auxiliar o decodificador 60 em decodificar macroblocos grandes e várias partições de macroblocos grandes, como descrito nessa revelação. cada macrobloco de NxN pixel onde N é maior do que 16 corresponde genericamente a uma definição de tipo exclusivo. Por conseguinte, o codificador pode gerar sintaxe apropriada para o macrobloco específico e indicar ao decodificar o tamanho máximo de macroblocos em uma unidade codificada, como um quadro, fatia, ou sequência de macroblocos. Desse modo, o decodificador pode receber uma indicação de um decodificador de sintaxe para aplicar nos macroblocos da unidade codificada. Isso também assegura que o decodificador pode ser compatível para trás com padrões de codificação existentes, como H.264, em que o codificador pode indicar o tipo de decodificadores de sintaxe a aplicar nos macroblocos, por exemplo, padrão H.264 ou aqueles especificados para processamento de macroblocos maiores de acordo com as técnicas da presente revelação.
[0124] Em geral, cada definição de MB[N]_type pode representar, para um tipo correspondente, um número de pixels em um bloco do tipo correspondente (por exemplo, 64x64), um quadro de referência (ou lista de referência) para o bloco, um número de partições para o bloco, o tamanho de cada partição do bloco, como cada partição é codificada (por exemplo, modos intra ou inter e específico) e o quadro de referência (ou lista de referência) para cada partição do bloco quando a partição é intercodificada. Para blocos 16x16 e menores, o codificador de vídeo 50 pode, em alguns exemplos, utilizar definições do tipo convencional como os tipos dos blocos, como tipos especificados pelo padrão H.264. em outros exemplos, o codificador de vídeo 50 pode aplicar tipos de bloco recentemente definidos para blocos 16x16 e menores.
[0125] O codificador de vídeo 50 pode avaliar métodos tanto inter- como Intracodificação convencionais utilizando tamanhos de macrobloco normais e partições, como métodos prescritos pelo ITU H.264, e métodos de inter- ou Intracodificação utilizando os macroblocos maiores e partições descritas por essa revelação, e comparar as características de distorção de taxa de cada abordagem para determinar qual método resulta no melhor desempenho de distorção de taxa. O codificador de vídeo 50 então pode selecionar e aplicar ao bloco a ser codificado, a melhor abordagem de codificação, incluindo inter- ou Intramodo, tamanho de macrobloco (grande, maior ou normal) e partição, com base em resultados ótimos ou aceitáveis de distorção de taxa para a abordagem de codificação. Como ilustração, o codificador de vídeo 50 pode selecionar o uso de macroblocos 64x64, macroblocos 32x32 ou macroblocos 16x16 para codificar um quadro ou fatia específica com base em resultados de distorção de taxa produzidos quando o codificador de vídeo utiliza tais tamanhos de macrobloco.
[0126] Em geral, duas abordagens diferentes podem ser utilizadas para projetar intra modos utilizando macroblocos grandes. Como exemplo, durante Intracodificação, a predição espacial pode ser executada para um bloco com base em blocos vizinhos diretamente. De acordo com as técnicas dessa revelação, o codificador de vídeo 50 pode gerar blocos 32x32 preditivos espaciais com base em seus pixels vizinhos diretamente e gerar blocos 64x64 preditivos espaciais com base em seus pixels vizinhos diretamente. Desse modo, a predição espacial pode ser executada em uma escala maior em comparação com intra blocos 16x16. Portanto, essas técnicas podem, em alguns exemplos, resultar em alguma economia de taxa de bit, por exemplo, com um número menor de blocos ou partições por quadro ou fatia.
[0127] Como outro exemplo, o codificador de vídeo 50 pode agrupar quatro blocos NxN juntos para gerar um bloco (N*2)x(N*2), e então codificar o bloco (N*2)x(N*2). Utilizando modos de Intracodificação H.264 existentes, o codificador de vídeo 50 pode agrupar quatro blocos intracodificados juntos, desse modo formando um grande macrobloco intracodificado. Por exemplo, quatro blocos intracodificados, cada possuindo um tamanho de 16x16, podem ser agrupados juntos para formar um grande bloco intracodificado 32x32. O codificador de vídeo 50 pode codificar cada dos quatro blocos NxN correspondentes utilizando um modo de codificação diferente, por exemplo, I_16x16, I_8x8 ou I_4x4 de acordo com H.264. desse modo, cada bloco 16x16 pode ser atribuído o seu próprio modo de predição espacial por codificador de vídeo 50, por exemplo, para promover resultados de codificação favoráveis.
[0128] O codificador de vídeo 50 pode projetar intra modos de acordo com qualquer um dos dois métodos diferentes discutidos acima, e analisar os métodos diferentes para determinar qual abordagem fornece melhores resultados de codificação. Por exemplo, o codificador de vídeo 50 pode aplicar as abordagens de intra modo diferentes, e colocar as mesmas em um único pool de candidatos para permitir que as mesmas compitam entre si para o melhor desempenho de distorção de taxa. Utilizando uma comparação de distorção de taxa entre as abordagens diferentes, o codificador de vídeo 50 pode determinar como codificar cada partição e/ou macrobloco. Em particular, o codificador de vídeo 50 pode selecionar os modos de codificação que produzem o melhor desempenho de distorção de taxa para um macrobloco dado, e aplicar aqueles modos de codificação para codificar o macrobloco.
[0129] A figura 5 é um diagrama conceptual que ilustra uma vista hierárquica de vários níveis de partição de um macrobloco grande. A figura 5 também representa as relações entre vários níveis de partição de um macrobloco grande como descrito com relação à figura 4A. cada bloco de um nível de partição, como ilustrado no exemplo da figura 5, pode ter um valor de padrão de bloco codificado correspondente (CBP). Os valores de CBP fazem parte das informações de sintaxe que descrevem um bloco ou macrobloco. Em um exemplo, os valores de CBP são individualmente valores de sintaxe de um bit que indicam se há ou não quaisquer valores de coeficiente de transformada diferente de zero em um dado bloco após operações de transformada e quantização.
[0130] Em alguns casos, um bloco de predição pode ser muito próximo em teor de pixel a um bloco a ser codificado de tal modo que todos os coeficientes de transformada residual sejam quantizados para zero, em cujo caso pode não haver necessidade de transmitir coeficientes de transformada para o bloco codificado. Em vez disso, o valor CBP para o bloco pode ser ajustado em zero para indicar que o bloco codificado não inclui coeficientes diferente de zero. Alternativamente, se um bloco inclui pelo menos um coeficiente diferente de zero, o valor CBP pode ser ajustado em um. O decodificador 60 pode utilizar valores CBP para identificar blocos residuais que são codificados, isto é, com um ou mais coeficientes de transformada diferente de zero, versus blocos que não são codificados, isto é, não incluindo coeficientes de transformada diferente de zero.
[0131] De acordo com algumas das técnicas descritas nessa revelação, um codificador pode atribuir valores CBP a macroblocos grandes hierarquicamente baseados em se esses macroblocos, incluindo suas partições, tem pelo menos um coeficiente diferente de zero, e atribuem valores CBP às partições para indicar quais partições têm coeficientes diferente de zero. CBP hierárquico para macroblocos grandes pode facilitar o processamento de macroblocos grandes para rapidamente identificar macroblocos grandes codificados e macroblocos grandes não codificados. e permitem identificação de partições codificadas em cada nível de partição para o grande macrobloco para determinar se é necessário utilizar dados residuais para decodificar os blocos.
[0132] Em um exemplo, um macrobloco de 64x64 pixels no nível zero pode incluir informações de sintaxe compreendendo um valor CBP64, por exemplo, um valor de um bit, para indicar se o macrobloco de 64x64 pixels inteiro, incluindo quaisquer partições, tem coeficientes diferente de zero ou não. Em um exemplo, o codificador de vídeo 50 “ajusta” o bit CBP64, por exemplo, a um valor de “1” para representar que o macrobloco de 64x64 pixels inclui pelo menos um coeficiente diferente de zero. Desse modo, quando o valor CBP64 é ajustado, por exemplo, a um valor de “1”, o macrobloco de 64x64 pixels inclui pelo menos um coeficiente diferente de zero em algum lugar no macrobloco. Em outro exemplo, o codificador de vídeo 50 “libera” o valor CBP64, por exemplo, a um valor de “0”, para representar que o macrobloco de 64x64 pixels tem coeficientes todos zero. Desse modo, quando o valor CBP64 é liberado, por exemplo, para um valor de “0”, o macrobloco de 64x64 pixels é indicado como possuindo coeficientes todos zero. Macroblocos com valores CBP64 de “0” não exigem genericamente transmissão de dados residuais no fluxo de bits, ao passo que macroblocos com valores CBP64 de “1” genericamente exigem transmissão de dados residuais no fluxo de bits para uso na decodificação de tais macroblocos.
[0133] Um macrobloco de 64x63 pixels que tem coeficientes todos zeros não necessita incluir valores CBP para partições ou sub-blocos do mesmo. Isto é, como o macrobloco de 64x63 pixels tem coeficientes todos zeros, cada das partições tem também necessariamente coeficientes todos zero. Ao contrário, um macrobloco de 64x654 pixels que inclui pelo menos um coeficiente diferente de zero pode incluir ainda valores CBP para as partições no nível de partição seguinte. Por exemplo, um CBP64 com um valor de um pode incluir informações de sintaxe adicionais na forma de um valor de um bit CBP32 para cada partição 32x32 do bloco 64x64. Isto é, em um exemplo, cada partição de 32x32 pixels (como os quatro blocos de partição do nível 1 na figura 5) de um macrobloco de 64x64 pixels é atribuído um valor CBP32 como parte das informações de sintaxe do macrobloco de 64x64 pixels. Como com o valor CBP64, cada valor CBP32 pode compreender um bit que é ajustado em um valor de um quando o bloco de 32xe32 pixels correspondente tem pelo menos um coeficiente diferente de zero e que é liberado para um valor de zero quando o bloco de 32x32 pixels correspondente tem coeficientes todos zero. O codificador pode indicar ainda, em sintaxe de uma unidade codificada compreendendo uma pluralidade de macroblocos, como um quadro, fatia, ou sequência, o tamanho máximo de um macrobloco na unidade codificada, para indicar ao decodificador como interpretar as informações de sintaxe de cada macrobloco, por exemplo, qual decodificador de sintaxe utilizar para processamento de macroblocos na unidade codificada.
[0134] Desse modo, um macrobloco de 64x64 pixels que tem coeficientes todos zeros pode utilizar um único bit para representar o fato de que o macrobloco tem coeficientes todos zero, ao passo que um macrobloco de 64x64 pixels com pelo menos um coeficiente diferente de zero pode incluir informações de sintaxe CBP compreendendo pelo menos cinco bits, um primeiro bit para representar que o macrobloco de 64x645 pixels tem um coeficiente diferente de zero e quatro bits adicionais, cada representativo de se uma partição correspondente de quatro partições de 32x32 pixels do macrobloco inclui pelo menos um coeficiente diferente de zero. Em alguns exemplos, quando os três primeiros dos quatro bits adicionais são zero, o quarto bit adicional pode não ser incluído, o que o decodificador pode interpretar como a última partição sendo um. Isto é, o codificador pode determinar que o último bit tenha um valor de um quando os três primeiros bits são zero e quando o bit representativo da hierarquia de nível mais elevado tem um valor de um. Por exemplo, um prefixo de um valor CBP64 de “10001” pode ser encurtado para “1000”, como o primeiro bit indica que pelo menos uma das quatro partições tem coeficientes diferente de zero, e os três zeros seguintes indicam que as três primeiras partições têm coeficientes todos zero. Portanto, um decodificador pode deduzir que é a última partição que inclui um coeficiente diferente de zero, sem o bit explícito informando ao decodificador desse fato, por exemplo, da série de bits “1000.” Isto é, o decodificador pode interpretar o prefixo CBP64 “1000” como “10001”.
[0135] De modo semelhante, um CBP32 de um bit pode ser ajustado em um valor de “1” quando a partição de 32x32 pixels inclui pelo menos um coeficiente diferente de zero, e a um valor de “0” quando todos os coeficientes têm um valor de zero. Se uma partição de 32x32 pixels tiver um valor CBP de 1’, então as partições daquela partição 32x32 no nível de partição seguinte podem ser atribuídas valores CBP para indicar se as partições respectivas incluem quaisquer coeficientes diferente de zero. Consequentemente, os valores CBP podem ser atribuídos em um modo hierárquico em cada nível de partição até que não haja nível de partição adicional ou nenhuma partição incluindo coeficientes diferente de zero.
[0136] No modo acima, codificadores e/ou decodificadores podem utilizar valores CBP hierárquicos para representar se um grande macrobloco (por exemplo, 64x64 ou 32x32) e partições do mesmo incluem pelo menos um coeficiente diferente de zero ou coeficientes todos zero. Por conseguinte, um codificador pode codificar um macrobloco grande de uma unidade codificada de um fluxo de vídeo digital, de tal modo que o bloco de macrobloco compreende mais de 16x16 pixels, gera informações de sintaxe de tipo bloco que identificam o tamanho do bloco, gera um valor CBP para o bloco, de tal modo que o valor CBP identifica se o bloco inclui pelo menos um coeficiente diferente de zero, e gera valores CBP adicionais para vários níveis de partição do bloco, se aplicável.
[0137] Em um exemplo, os valores CBP hierárquicos podem compreender um conjunto de bits (por exemplo, um vetor de bits) cujo comprimento depende dos valores do prefixo. O conjunto pode representar ainda uma hierarquia de valores CBP, como uma estrutura de árvore, como mostrado na figura 5. O conjunto pode representar nós da árvore em um modo de largura primeiro, onde cada nó corresponde a um bit no conjunto. Quando um nó da árvore tem um bit que é ajustado em “1”, em um exemplo, o nó tem quatro ramificações (correspondendo a quatro partições) e quando o bit é liberado para “0”, o nó não tem ramificações.
[0138] Nesse exemplo, para identificar os valores dos nós que ramificam de um nó específico, X, um codificador e/ou decodificador pode determinar os quatro bits consecutivos iniciando no nó Y que representam os nós que ramificam do nó x por calcular:
Figure img0001
[0139] Onde tree[] corresponde ao conjunto de bits com um índice de partida de 0, i é um índice de número inteiro no conjunto tree[], x corresponde ao índice de n ó X no tree[], e y corresponde ao índice de nó Y que é o primeiro nó de ramificação do nó X. As três posições de conjunto subsequentes (isto é, y+1, y+2, e y+3) correspondem aos outros nós de ramificação do nó X.
[0140] Um codificador, como codificador de vídeo 50 (figura 2), pode atribuir valores CBP para partições de 16x16 pixels das partições de 32x32 pixels com pelo menos um coeficiente diferente de zero utilizando métodos existentes, como métodos prescritos por ITU H.264 para ajustar valores CBP para blocos 16x16, como parte da sintaxe do macrobloco de 64x64 pixels. O codificador também pode selecionar valores CBP para as partições das partições de 32x32 pixels que têm pelo menos um coeficiente diferente de zero com base no tamanho das partições, um tipo de bloco correspondendo às partições (por exemplo, bloco de croma ou bloco de luma), ou outras características das partições. Os métodos de exemplo para ajustar um valor CBP de uma partição de partição de 32x32 pixels são discutidos em detalhe adicional com relação às figuras 8 e 9.
[0141] As figuras 6-9 são fluxogramas que ilustram métodos de exemplo para ajustar vários valores de padrão de bloco codificado (VBP) de acordo com as técnicas dessa revelação. Embora os métodos de exemplo das figuras 6-9 sejam discutidos com relação a um macrobloco de 64x64 pixels, deve ser entendido que técnicas similares podem se aplicar para atribuir valores CBP hierárquicos para outros tamanhos de macroblocos. Embora os exemplos das figuras 6-9 sejam discutidos com relação ao codificador de vídeo 50 (figura 2), deve ser entendido que outros codificadores podem empregar métodos similares para atribuir valores CBP a macroblocos maiores do que padrão. De modo semelhante, decodificadores podem utilizar métodos similares, embora recíprocos para interpretar o significado de um valor CBP específico para um macrobloco. Por exemplo, se um macrobloco intercodificado recebido no fluxo de bits tiver um valor CBP de “0”, o decodificador pode não receber dados residuais para o macrobloco e pode simplesmente produzir um bloco preditivo identificado por um vetor de movimento como o macrobloco decodificado, ou um grupo de blocos preditivos identificados por vetores de movimento com relação a partições do macrobloco.
[0142] A figura 6 é um fluxograma que ilustra um método de exemplo para ajustar um valor CBP64 de um macrobloco de 64x65 pixels de exemplo. Métodos similares podem ser aplicados para macroblocos maiores do que 64x64. Inicialmente, o codificador de vídeo 50 recebe um macrobloco de 64x645 pixels (100). A unidade de estimação de movimento 36 e unidade de compensação de movimento 35 podem então gerar um ou mais vetores de movimento e um ou mais blocos residuais para codificar o macrobloco, respectivamente. A saída da unidade de transformada 38 compreende genericamente um conjunto de valores de coeficiente de transformada residual para um bloco intracodificado ou um bloco residual de um bloco intercodificado, cujo conjunto é quantizado pela unidade de quantização 40 para produzir uma série de coeficientes de transformada quantizados.
[0143] A unidade de codificação de entropia 46 pode fornecer codificação de entropia e outras funções de codificação separadas de codificação de entropia. Por exemplo, além de CAVLC, CABAC, ou outras funções de codificação de entropia, a unidade de codificação de entropia 46 ou outra unidade de codificador de vídeo 50 pode determinar valores CBP para os macroblocos grandes e partições. Em particular, a unidade de codificação de entropia 46 pode determinar o valor de CBP64 para um macrobloco de 64x64 pixels por determinar primeiramente se o macrobloco tem pelo menos um coeficiente de transformada quantizada diferente de zero (102). Quando a unidade de codificação de entropia 46 determina que todos os coeficientes de transformada tivessem um valor de zero (ramificação “NÃO” de 102), a unidade de codificação de entropia 46 libera o valor CBP64 para o macrobloco 64x64, por exemplo, redefine um bit para o valor CBP64 em “0” (104). Quando a unidade de codificação de entropia 46 identifica pelo menos um coeficiente diferente de zero (ramificação “SIM” de 102) para o macrobloco 64x65, a unidade de codificação de entropia 46 define o valor CBP64, por exemplo, define um bit para o valor CBP64 em “1” (106).
[0144] Quando o macrobloco tem coeficientes todos zero, a unidade de codificação de entropia 46 não necessita estabelecer nenhum valor CBP adicional para as partições do macrobloco, o que pode reduzir overhead. Em um exemplo, quando o macrobloco tem pelo menos um coeficiente diferente de zero, entretanto, a unidade de codificação de entropia 46 prossegue para determinar valores de CBP para cada das quatro partições de 32x32 pixels do macrobloco de 64x65 pixels (108). A unidade de codificação de entropia 46 pode utilizar o método descrito com relação à figura 7 quatro vezes, uma vez para cada das quatro partições, para estabelecer quatro valores CBP32, cada correspondendo a uma diferente das quatro partições de 32x32 pixels do macrobloco 64x64. Desse modo, quando um macrobloco tem coeficientes todos zero, a unidade de codificação de entropia 46 pode transmitir um único bit com um valor de “0” para indicar que o macrobloco tem coeficientes todos zero, ao passo que quando o macrobloco tem pelo menos um coeficiente diferente de zero, a unidade de codificação de entropia 46 pode transmitir cinco bits, um bit para o macrobloco e quatro bits, cada correspondendo a uma das quatro partições do macrobloco. Além disso, quando uma partição inclui pelo menos um coeficiente diferente de zero, dados residuais para a partição podem ser enviados no fluxo de bits codificado. Como com o exemplo do CBP64 discutido acima, quando os três primeiros dos quatro bits adicionais são zero, o quarto bit adicional pode não ser necessário, porque o decodificador pode determinar que tenha um valor de um. Desse modo em alguns exemplos, o codificador pode somente enviar três zeros, isto é, “000”, em vez de três zeros e um, isto é “0001”.
[0145] A figura 7 é um fluxograma que ilustra um método de exemplo para ajustar um valor de CBP32 de uma partição de 32x32 pixels de um macrobloco de 64x64 pixels. Inicialmente para o nível de partição seguinte, a unidade de codificação de entropia 46 recebe uma partição de 32x32 pixels do macrobloco (110), por exemplo, uma das quatro partições mencionadas com relação à figura 6. A unidade de codificação de entropia 46 então determina um valor CBP32 para a partição de 32x32 pixels primeiramente determinando se a partição inclui pelo menos um coeficiente diferente de zero (112). Quando a unidade de codificação de entropia 46 determina que todos os coeficientes para a partição tivessem um valor de zero (ramificação “NÃO” de 112), a unidade de codificação de entropia 46 libera o valor CBP32, por exemplo, redefine um bit para o valor CBP32 em “0” (114). Quando a unidade de codificação de entropia 46 identifica pelo menos um coeficiente diferente de zero da partição (ramificação “SIM” de 112), a unidade de codificação de entropia 46 define o valor CBP32, por exemplo, define um bit para o valor CBP32 em um valor de “1” (116).
[0146] Em um exemplo, quando a partição tem coeficientes todos zero, a unidade de codificação de entropia 46 não estabelece nenhum valor CBP adicional para a partição. Quando uma partição inclui pelo menos um coeficiente diferente de zero, entretanto, a unidade de codificação de entropia 46 determina valores CBP para cada das quatro partições de 16x16 pixels da partição de 32x32 pixels do macrobloco. A unidade de codificação de entropia 46 pode utilizar o método descrito com relação à figura 8 para estabelecer valores CBP16 cada correspondendo a uma das quatro partições de 16x16 pixels.
[0147] Desse modo, quando uma partição tem coeficientes todos zero, a unidade de codificação de entropia 46 pode definir um bit com um valor de “0” para indicar que a partição tem coeficientes todos zero, ao passo que quando a partição tem pelo menos um coeficiente diferente de zero, a unidade de codificação de entropia 46 pode incluir cinco bits, um bit para a partição e quatro bits cada correspondendo a uma subpartição diferente das quatro subpartições da partição do macrobloco. Consequentemente, cada nível de partição adicional pode apresentar quatro bits CBP adicionais quando a partição no nível de partição anterior tinha pelo menos um valor de coeficiente de transformada diferente de zero. Como exemplo, se um macrobloco de 64x64 tiver um valor CBP de 1, e quatro partições 32x32 tiverem valores CBP de 1, 0, 1 e 1, respectivamente, o valor CBP geral até aquele ponto é 11011. Bits de CBP adicionais podem ser adicionados para partições adicionais das partições 32x32, por exemplo, em partições 16x16.
[0148] A figura 8 é um fluxograma que ilustra um método de exemplo para definir um valor CBP16 de uma partição de 16x16 pixels de uma partição de 32x32 pixels de um macrobloco de 64x64 pixels. Para certas partições de 16x16 pixels, o codificador de vídeo 50 pode utilizar valores CBP como determinado por um padrão de codificação de vídeo, como ITU H.264 como discutido abaixo. Para outras partições 16x16, o codificador de vídeo 50 pode utilizar valores CBP de acordo com outras técnicas dessa revelação. Inicialmente, como mostrado na figura 8, a unidade de codificação de entropia 46 recebe uma partição 16x16 (120), pro exemplo, uma das partições 16x16 de uma partição 32x32 descrita com relação á figura 7.
[0149] A unidade de codificação de entropia 46 pode determinar então se uma partição de movimento para a partição de 16x16 pixels é maior do que um bloco de 8x8 pixels (122). Em geral, uma partição de movimento descreve uma partição na qual movimento é concentrado, por exemplo, uma partição de 16x16 pixels com somente um vetor de movimento pode ser considerada uma partição de movimento 16x16. Similarmente, para uma partição de 16x16 pixels com duas partições 8x16, cada possuindo um vetor de movimento, cada das duas partições 8x16 pode ser considerada uma partição de movimento de 8x16. Em qualquer caso, quando a partição de movimento não é maior do que um bloco de 8x8 pixels (ramificação “NÃO” de 122), a unidade de codificação de entropia 46 atribui um valor CBP à partição de 16x16 pixels do mesmo modo como determinado por ITU H.264 (124), no exemplo da figura 8.
[0150] Quando existe uma partição de movimento para a partição de 16x16 pixels que é maior do que um bloco de 8x8 pixels (ramificação “SIM” de 122), a unidade de codificação de entropia 46 constrói e envia um valor lumacbp16 (125) utilizando as etapas após a etapa 125. No exemplo da figura 8, para construir o valor lumacbp16, a unidade de codificação de entropia 46 determina se o componente luma 16x16 pixels da partição tem pelo menos um coeficiente diferente de zero (126). Quando o componente luma de 16x16 pixels tem coeficientes todos zeros (ramificação “NÃO” de 126), a unidade de codificação de entropia 46 atribui o valor CBP16 de acordo com a porção de Croma de Padrão de bloco codificado de ITU H.264 (128), no exemplo da figura 8.
[0151] Quando a unidade de codificação de entropia 46 determinar que o componente luma 16x16 pixels tem pelo menos um coeficiente de diferente de zero (ramificação “SIM” de 126), a unidade de codificação de entropia 46 determina um indicador de tamanho de transformada para a partição de 16x16 pixels (130). O indicador de tamanho de transformada indica uma transformada sendo utilizada para a partição. A transformada representada pelo indicador de tamanho de transformada pode incluir uma entre uma transformada de 4x4, uma transformada de 8x8, uma transformada de 16x16, ou uma transformada de 8x16. O indicador de tamanho de transformada pode compreender um valor inteiro que corresponde a um valor enumerado que identifica uma das possíveis transformadas. A unidade de codificação de entropia 46 pode determinar então se o indicador de tamanho de transformada representa que o tamanho de transformada é maior ou igual a 16x8 (ou 8x16) (132).
[0152] Quando o indicador de tamanho de transformada não indicar que o tamanho de transformada é maior ou igual a 16x8 (ou 8x16)(ramificação “NÃO” de 132), a unidade de codificação de entropia 46 atribui um valor para CBP16 de acordo com ITU H.264 (134), no exemplo da figura 8. Quando o indicador de tamanho de transformada indicar que o tamanho de transformada é maior ou igual a 16x8 (ou 8x16) (ramificação “SIM” de 132), a unidade de codificação de entropia 46 então determina se um tipo para a partição de 16x16 pixels são duas partições 16x8 ou duas partições de 8x16 pixels (136).
[0153] Quando o tipo para a partição de 16x16 pixels não forem duas partições 16x8 e não forem duas partições 8x16 pixels (ramificação “NÃO” de 138), a unidade de codificação de entropia 46 atribui o valor CBP16 de acordo com a partição de bloco codificado de croma determinada por ITU H.264 (140), no exemplo da figura 8. Quando o tipo para a partição de 16x16 pixels forma duas partições 16x8 ou duas partições de 8x16 pixels (ramificação “SIM” de 136), a unidade de codificação de entropia 46 utiliza também o Padrão de bloco codificado por croma determinado por ITU H.264, porém, além disso, atribui o valor CBP16 um valor luma16x8_CBP de dois bits (142), por exemplo, de acordo com o método descrito com relação à figura 9.
[0154] A figura 9 é um fluxograma que ilustra um método de exemplo para determinar um valor de luma16x8_CBP de dois bits. A unidade de codificação de entropia 46 recebe uma partição de 16x16 pixels que é adicionalmente dividida em duas partições de 16x8 ou duas partições 8x16 pixels (150). A unidade de codificação de entropia 46 cede genericamente cada bit de luma16x8_CBP de acordo com se o sub-bloco correspondente da partição de 16x16 pixels inclui pelo menos um coeficiente diferente de zero.
[0155] A unidade de codificação de entropia 46 determina se um primeiro sub-bloco da partição de 16x16 pixels tem pelo menos um coeficiente diferente de zero para determinar se o primeiro sub-bloco tem pelo menos um coeficiente de diferente de zero (152). Quando o primeiro sub-bloco tem coeficientes todos zeros (ramificação “NÃO” de 152), a unidade de codificação de entropia 46 libera o primeiro bit de luma16x8_CBP, cede luma16x8_CNP[0] um valor de “0” (154). Quando o primeiro sub-bloco tem pelo menos um coeficiente diferente de zero (ramificação “SIM” de 152), a unidade de codificação de entropia 46 define o primeiro bit de luma16x8_CBP, por exemplo, atribui luma16x8_CBP[0] um valor de “1” (156).
[0156] A unidade de codificação de entropia 46 determina também se uma segunda subpartição da partição de 16x16 pixels tem pelo menos um coeficiente diferente de zero (158). Quando a segunda subpartição tem coeficientes todos zeros (ramificação “NÃO” de 158), a unidade de codificação de entropia 46 libera o segundo bit de luma16x8_CBP, por exemplo, atribui luma16x8_CBP[1] um valor de “0” (160). Quando o segundo sub-bloco tem pelo menos um coeficiente diferente de zero (ramificação “SIM” de 158), a unidade de codificação de entropia 46 então define o segundo bit de luma16x8_CBP, por exemplo, atribui luma16x8_CBP[1] um valor de “1” (162).
[0157] O seguinte pseudocódigo provê uma implementação de exemplo dos métodos descritos com relação às figuras 8 e 9:
Figure img0002
Figure img0003
[0158] No pseudocódigo, “lumacbp16” corresponde a uma operação de anexar um indicador de um bit indicando se um bloco luma 16x16 inteiro tem coeficientes diferente de zero ou não. Quando “lumacbp16” é igual a um, há pelo menos um coeficiente diferente de zero. A função “Transform_size_flag” se refere a um cálculo executado possuindo um resultado que indica a transformada sendo utilizada, por exemplo, uma de uma transformada 4x4, transformada 8x8, transformada 16x16 (para partição de movimento igual ou maior do que 16x16), a transformada 16x8 (para P_16x8) ou a transformada 8x16 (para P_8x16). TRANSFORM_SIZE_GREATER_THAN_16x8 é um valor enumerado (por exemplo, “2”) que é utilizado para indicar que um tamanho de transformada é maior ou igual a 16x8 ou 8x16. O resultado do transform_size_flag é incorporado nas informações de sintaxe do macrobloco de 64x64 pixels.
[0159] “Luma16x8_cbp” se refere a um cálculo que produz um número de dois bits com cada bit indicando se uma das duas partições de P_16x8 ou P_8x16 tem coeficientes diferente de zero ou não. O número de dois bits resultando de luma16x8_cbp é incorporado na sintaxe do macrobloco de 64x64 pixels. O valor “Chroma_cbp” pode ser calculado do mesmo modo que o CodeBlockPatternChroma como determinado por ITU H.264. o valor Chroma_cbp calculado é incorporado nas informações de sintaxe do macrobloco de 64x645 pixels. A função h264_cbp pode ser calculada do mesmo modo que a CBP definida em ITU H.264. o valor H264_cbp calculado é incorporado nas informações de sintaxe do macrobloco de 64x64 pixels.
[0160] Em geral, um método de acordo com as figuras 6-9 pode incluir codificação, com um codificador de vídeo, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, geração de informações de sintaxe de tipo bloco que indicam o tamanho do bloco, e geração de um valor de padrão de bloco codificado para o bloco codificado, em que o valor de padrão de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero.
[0161] A figura 10 é um diagrama de blocos que ilustra um arranjo de exemplo de um macrobloco de 64x654 pixels. O macrobloco da figura 10 compreende quatro partições de 32x32, rotuladas A, B, C e D na figura 10. Como discutido com relação à figura 4A, em um exemplo, um bloco pode ser dividido em qualquer de quatro modos: o bloco inteiro (64x64) sem subpartições, duas partições horizontais de tamanho igual (32x64 e 32x64), duas partições verticais de tamanho igual (64x32 e 64x32) ou quatro partições quadradas de tamanho igual (32x32, 32x32, 32x32 e 32x32).
[0162] No exemplo da figura 10, a partição de bloco inteiro compreende cada dos blocos A, B, C e D; uma primeira das duas partições horizontais de tamanho igual compreende A e B, enquanto uma segunda das duas partições horizontais de tamanho igual compreende C e D; uma primeira das duas partições verticais de tamanho igual compreende A e C, enquanto uma segunda das duas partições verticais de tamanho igual compreende B e D; e as quatro partições quadradas de tamanho igual correspondem a uma de cada de A, B, C e D. esquemas de partição similares podem ser utilizados para qualquer bloco DCE tamanho, por exemplo, maior do que 64x64 pixels, 32x32 pixels, 16x16 pixels, 8x8 pixels ou outros tamanhos de blocos de vídeo.
[0163] Quando um bloco de vídeo é intracodificado, vários métodos podem ser utilizados para dividir o bloco de vídeo. Além disso, cada das partições pode ser intracodificado diferentemente, isto é, com um modo diferente, como intramodos diferentes. Por exemplo, uma partição de 32x32, como partição A da figura 109, pode ser adicionalmente dividida em quatro blocos de tamanho igual de tamanho 16x16 pixels. Como exemplo, ITU H.264 descreve três métodos diferentes para intracodificação de um macrobloco 16x16, incluindo intracodificação no nível 16x16, Intracodificação no nível 8x8, e intracodificação no nível 4x4. Entretanto, ITU H.264 determina codificação de cada partição de um macrobloco de 16x16 utilizando o mesmo modo de intracodificação. Portanto, de acordo com ITU H.264, se um sub- bloco de um macrobloco 16x16 for para ser intracodificado no nível 4x4, todo sub- bloco do macrobloco 16x16 deve ser intracodificado no nível 4x4.
[0164] Um codificador configurado de acordo com as técnicas dessa revelação, por outro lado, pode aplicar uma abordagem de modo misto. Para Intracodificação, por exemplo, um macrobloco grande pode ter várias partições codificadas com diferentes modos de codificação. Como ilustração, em uma partição 32x32, uma partição 16x16 pode ser intracodificada no nível 4x4 pixel, enquanto outras partições 16x16 podem ser intracodificadas no nível 8x8 pixel, e uma partição 16x16 pode ser intracodificada no nível 16x16, por exemplo, como mostrado na figura 4B.
[0165] Quando um bloco de vídeo deve ser dividido em quatro sub-blocos de tamanho igual para Intracodificação, o primeiro bloco a ser intracodificado pode ser o bloco esquerdo superior, seguido pelo bloco imediatamente à direita do primeiro bloco, seguido pelo bloco imediatamente abaixo do primeiro bloco, e finalmente seguido pelo bloco embaixo e à direita do primeiro bloco. Com referência ao bloco de exemplo da figura 10, a ordem de Intracodificação prosseguiria de A para B para C e finalmente para D. embora a figura 10 represente um macrobloco de 64x64 pixel, Intracodificação de um bloco dividido de um tamanho diferente pode seguir essa mesma ordenação.
[0166] Quando um bloco de vídeo deve ser intercodificado como parte de um quadro P ou fatia P, o bloco pode ser dividido em qualquer das quatro partições acima descritas, cada uma das quais pode ser separadamente codificada. Isto é, cada partição do bloco pode ser codificada de acordo com um modo de codificação diferente, intracodificado (codificado-I) ou intercodificado com referência a um quadro/fatia/lista de referência única (codificado-P). a tabela 1 abaixo resume informações de intercodificação para cada partição em potencial de um bloco de tamanho NxN. Onde a Tabela 1 se refere a “M”, M = N/2. Na tabela 1 abaixo, L0 se refere a “lista 0”, isto é, o quadro/fatia/lista de referência. Ao decidir como dividir melhor o bloco NxN, um codificador, como codificador de vídeo 50, pode analisar informações de custo de distorção de taxa para cada MB_N_type (isto é, cada tipo de partição) com base em um multiplicador Lagrange, como discutido em maior detalhe com relação à figura 11, selecionando o custo mais baixo como o método de melhor partição. Tabela 1
Figure img0004
[0167] Na tabela 1 acima, elementos da coluna “MB_N_tyupe” são chaves para cada tipo de partição de um bloco NxN. Elementos da coluna “Nome do MB_N_type” são nomes de tipos de partição diferentes de um bloco NxN. “P” no nome se refere ao bloco sendo intercodificado utilizando codificação P, isto é, com referência a uma lista/fatia/quadro único. “L0” no nome se refere à lista/fatia/quadro de referência, por exemplo, “lista 0” utilizado como quadros de referência ou fatias para codificação P. “NxN” se refere à partição sendo o bloco inteiro, “NxM” se refere à partição sendo duas partições de largura N e altura M, “MxN” se refere à partição sendo duas partições de largura M e altura N, “MxM” se refere à partição sendo quatro partições de tamanho igual cada com largura M e altura M.
[0168] Na tabela 1, PN_Skips indica que o bloco foi “pulado”, porque o bloco resultando de codificação tinha coeficientes todos zero. Elementos da coluna “Modo de predição parte 1” se referem à lista/fatia/quadro de referência para a subpartição 1 da partição, enquanto elementos da coluna “Modo de predição parte 2” se referem à lista/fatia/quadro de referência para a subpartição 2 da partição. Como P_LO_NxN tem somente uma única partição, o elemento correspondente de “Modo de predição parte 2” é “N/A”, visto que não segunda subpartição. Para PN_MxM, existem quatro blocos de partição que podem ser codificados separadamente. Portanto, as duas colunas de modo de predição para PN_MxM incluem “N/A”. PN_Skip, como com P_L0_NxN, tem somente uma única parte, de modo que o elemento correspondente da coluna “Modo de predição parte 2” é “N/A.
[0169] A tabela 2, abaixo, inclui colunas similares e elementos àqueles da tabela 2. Entretanto, a tabela 2 corresponde a vários modos de codificação para um bloco intercodificado utilizando predição bidirecional (codificado B). portanto, cada partição pode ser codificada por qualquer um ou ambos de um primeiro quadro/fatia/lista (L0) e um segundo quadro/fatia/lista (L1). “BiPred” se refere à partição correspondente sendo prevista tanto de L0 como de L1. Na tabela 2, rótulos de coluna e valores são similares em significado àqueles utilizados na tabela 1. Tabela 2
Figure img0005
Figure img0006
Figure img0007
[0177] A figura 11 é um fluxograma que ilustra um método de exemplo para calcular métodos ótimos de partição e codificação para um bloco de vídeo de NxN pixel. Em geral, o método da figura 11 compreende calcular o custo para cada método de codificação diferente (por exemplo, vários modos espaciais ou temporais) como aplicado em cada método de partição diferente mostrado, por exemplo, na figura 4A, e selecionar a combinação de modo de codificação e método de partição com o melhor custo de distorção de taxa para o bloco de vídeo de NxN pixel. Custo pode ser genericamente calculado utilizando um multiplicador Lagrange com valores de taxa e distorção, de tal modo que o custo de distorção de taxa = distorção + taxa X*, onde distorção representa erro entre um bloco original e um bloco codificado e taxa representa a taxa de bit necessária para suportar o modo de codificação. Em alguns casos, taxa e distorção podem ser determinadas em um macrobloco, partição, fatia ou nível de quadro.
[0178] Inicialmente, o codificador de vídeo 50 recebe um bloco de vídeo NxN a ser codificado (170). Por exemplo, o codificador de vídeo 50 pode receber um macrobloco grande de 64x64 ou uma partição do mesmo, como, por exemplo, uma partição de 32x32 ou 16x16, para a qual o codificador de vídeo 50 deve selecionar um método de codificação e partição. O codificador de vídeo 50 então calcula o custo para codificar o bloco NxN (172) utilizando uma variedade de modos de codificação diferentes, como modos intra- e intercodificação diferentes. Para calcular o custo para codificar espacialmente o bloco NxN, o codificador de vídeo 50 pode calcular a distorção e a taxa de bit necessária para codificar o bloco NxN com um modo de codificação dado, e então calcular custo = distorção(modo, NxN) + taxa X * (modo, NxN). O codificador de vídeo 50 pode codificar o macrobloco utilizando a técnica de codificação especificada e determinar a distorção e custo de taxa de bit resultantes. A distorção pode ser determinada com base em uma diferença de pixel entre os pixels no macrobloco codificado e os pixels no macrobloco original, por exemplo, baseado em uma soma de métrica de diferença absoluta (SAD), soma de métrica de diferença quadrada (SSD) ou outra métrica de diferença de pixel.
[0179] O codificador de vídeo 50 pode dividir então o bloco NxN em duas partições Nx(N/2) horizontais de não sobreposição igualmente dimensionadas. O codificador de vídeo 50 pode calcular o custo para codificar cada das partições utilizando vários modos de codificação (176). Por exemplo, para calcular o custo para codificar a primeira partição Nx(N/2), o codificador de vídeo 50 pode calcular a distorção e a taxa de bits para codificar a primeira partição Nx(N/2), e então calcular custo = distorção(modo, PRIMIERA PARTIÇÃO, Nx(N/2)) + taxa X * (modo, PRIMEIRA PARTIÇÃO, (N/2)xN). O codificador de vídeo 50 pode executar um cálculo similar para o custo para codificar a segunda das partições de macrobloco (N/2)xN.
[0180] O codificador de vídeo 50 pode então dividir o bloco NxN em quatro partições (N/2)x(N/2) de não sobreposição igualmente dimensionadas. O codificador de vídeo 50 pode calcular o custo para codificar as partições utilizando vários modos de codificação (180). Para calcular o custo para codificar as partições (N/2)x(N/2), o codificador de vídeo 50 pode primeiramente calcular a distorção e a taxa de bits para codificar a partição esquerda superior (N/2)x(N/2) e encontrar o custo da mesma como custo(Modo, ESQUERDO SUPERIOR, (N/2)x(N/2)) = distorção(Modo, ESQUERDO SUPERIOR, (N/2)x(N/2)) + taxa X * (Modo, ESQUERDO SUPERIOR, (N/2)x(N/2)). O codificador de vídeo 50 pode similarmente calcular o custo de cada bloco (N/2)x(N/2) na ordem: 1) partição esquerda superior, (2) partição direita superior, (3) partição esquerda inferior, (4) partição direita inferior. O codificador de vídeo 50 pode, em alguns exemplos, fazer chamadas recursivas a esse método em uma ou mais das partições (N/2)x(N/2) para calcular o custo de partição e codificação em separado de cada das partições (N/2)x(N/2) adicionalmente, por exemplo, como partições (N/2)x(N/4), partições (N/4)x(N/2), e partições (N/4)x(N/4).
[0181] A seguir, o codificador de vídeo 50 pode determinar qual combinação de modo de partição e codificação produziu o melhor, isto é, mais baixo, custo em termos de taxa e distorção (182). Por exemplo, o codificador de vídeo 50 pode comparar o melhor custo de codificar duas partições (N/2)x(N/2) adjacentes com o melhor custo de codificar a partição Nx(N/2) compreendendo as duas partições (N/2)x(N/2) adjacentes. Quando o custo agregado de codificar as duas partições (N/2)x(N/2) adjacentes excede o custo de codificar a partição Nx(N/2) que as compreende, o codificador de vídeo 50 pode selecionar a opção de custo inferior de codificar a partição Nx(N/2). Em geral, o codificador de vídeo 50 pode aplicar toda combinação de método de partição e modo de codificação para cada partição para identificar um método de partição e codificação de custo mais baixo. Em alguns casos, o codificador de vídeo 50 pode ser configurado para avaliar um conjunto mais limitado de combinações de modo de partição e codificação.
[0182] Após determinar os melhores métodos de partição e codificação, por exemplo, custo mais baixo, o codificador de vídeo 50 pode codificar o macrobloco NxN utilizando o método determinado de custo melhor (184). Em alguns casos, o resultado pode ser um macrobloco grande possuindo partições que são codificadas utilizando modos de codificação diferentes. A capacidade de aplicar codificação de modo misturado em um macrobloco grande, de tal modo que modos de codificação diferentes sejam aplicados em partições diferentes no macrobloco grande, pode permitir que o macrobloco seja codificado com custo reduzido.
[0183] Em alguns exemplos, o método para codificar com modos misturados pode incluir receber, com o codificador de vídeo 50, um bloco de vídeo possuindo um tamanho maior do que 16x16 pixels, dividir o bloco em partições, codificar uma das partições com um primeiro modo de codificação, codificar outra das partições com um segundo modo de codificação diferente do primeiro modo de codificação, e gerar informações de sintaxe de tipo bloco que indicam o tamanho do bloco e identificam as partições e os modos de codificação utilizados para codificar as partições.
[0184] A figura 12 é um diagrama de blocos que ilustra um macrobloco grande de 64x64 pixels de exemplo com várias partições e métodos de codificação selecionados diferentes para cada partição. No exemplo da figura 12, cada partição é rotulada com um de uma “I”, “P” ou “B”. partições rotuladas “I” são partições para as quais um codificador escolheu utilizar intracodificação, por exemplo, com base em avaliação de distorção de taxa. Partições rotuladas “P” são partições para as quais o codificador escolheu utilizar intercodificação de referência única, por exemplo, com base em avaliação de distorção de taxa. Partições rotuladas “B” são partições para as quais o codificador escolheu utilizar intercodificação bipredito, por exemplo, baseado em avaliação de distorção de taxa. No exemplo da figura 12, partições diferentes compreendidas no mesmo macrobloco grande têm modos de codificação diferentes incluindo tamanhos de partição ou subpartição diferentes e modos de intra- ou intercodificação diferentes.
[0185] O macrobloco grande é um macrobloco identificado por um elemento de sintaxe de macrobloco que identifica o tipo de macrobloco, por exemplo, mb64_type ou mb32_type, para um dado padrão de codificação como uma extensão do padrão de codificação H.264. o elemento de sintaxe do tipo macrobloco pode ser fornecido como um elemento de sintaxe de cabeçalho de macrobloco no fluxo de bits de vídeo codificado. As partições codificadas I, P e B ilustradas na figura 12 podem ser codificadas de acordo com modos de codificação diferentes, por exemplo, modos de intra- ou interpredição com vários tamanhos de bloco, incluindo modos de tamanho de bloco grandes para grandes partições maiores do que 16x16 em tamanho ou modos H.264 para partições que são menores ou iguais a 16x16 em tamanho.
[0186] Em um exemplo, um codificador, como codificador de vídeo 50, pode utilizar o método de exemplo descrito com relação à figura 11 para selecionar vários modos de codificação e tamanhos de partição para diferentes partições e sub- partições do macrobloco grande de exemplo da figura 12. Por exemplo, o codificador de vídeo 50 pode receber um macrobloco de 64x64, executar o método da figura 11, e produzir o macrobloco de exemplo da figura 12 com vários tamanhos de partição e modos de codificação como resultado. Deve ser entendido, entretanto, que seleções para modos de partição e codificação podem resultar de aplicação do método da figura 11, por exemplo, baseado no tipo de quadro a partir do qual o macrobloco foi selecionado e baseado no macrobloco de entrada no qual o método é executado. Por exemplo, quando o quadro compreende um quadro I, cada partição será intracodificado. Como outro exemplo, quando o quadro compreende um quadro P, cada partição pode ser intracodificada ou intercodificada com base em um quadro de referência única (isto é, sem bi-predição).
[0187] O macrobloco de exemplo da figura 12 é assumido como possuindo sido selecionado de um quadro bipredito (quadro-B) para fins de ilustração. Em outros exemplos, onde um macrobloco é selecionado de um quadro-P, o codificador de vídeo 50 não codificaria uma partição utilizando predição bidirecional. De modo semelhante, onde um macrobloco é selecionado de um quadro-I, o codificador de vídeo 50 não codificaria uma partição utilizando intercodificação, codificação P ou codificação B., entretanto, em qualquer caso, o codificador de vídeo 50 pode selecionar vários tamanhos de partição para diferentes porções do macrobloco e escolher codificar cada partição utilizando qualquer modo de codificação disponível.
[0188] No exemplo da figura 12, é assumido que uma combinação de partição e seleção de modo com base em análise de distorção de taxa resultou em uma partição codificada B 32x32, uma partição codificada-P 32x32, uma partição codificada-I 16x32, uma partição codificada-B 32x16, uma partição codificada-P 16x16, uma partição codificada P 16x8, uma partição codificada-P 8x16, uma partição codificada P 8x8, uma partição codificada B 8x8, uma partição codificada-I 8x8, e inúmeras subpartições menores possuindo vários modos de codificação. O exemplo da figura 12 é fornecido para fins de ilustração conceptual de codificação de modo misturado de partições em um macrobloco grande, e não deve ser necessariamente considerado representativo de resultados de codificação efetivos para um macrobloco 64x64 grande específico.
[0189] A figura 13 é um fluxograma que ilustra um método de exemplo para determinar um tamanho ótimo de um macrobloco para codificar um quadro ou fatia de uma sequência de vídeo. Embora descrito com relação à seleção de um tamanho ótimo de um macrobloco para um quadro, um método similar àquele descrito com relação à figura 13 pode ser utilizado para selecionar um tamanho ótimo de um macrobloco para uma fatia. De modo semelhante, embora o método da figura 13 seja descrito com relação ao codificador de vídeo 50, deve ser entendido que qualquer codificador pode utilizar o método de exemplo da figura 13 para determinar um tamanho ótimo (Por exemplo, custo mínimo) de um macrobloco para codificar um quadro de uma sequência de vídeo. Em geral, o método da figura 13 compreende executar uma passagem de codificação três vezes, uma vez para cada de um macrobloco 16x16, um macrobloco 32x32, e um macrobloco 64x64, e um codificador de vídeo pode calcular métricas de distorção de taxa para cada passagem para determinar qual tamanho de macrobloco provê a melhor distorção de taxa.
[0190] O codificador de vídeo 50 pode primeiramente codificar um quadro utilizando macroblocos de 16x16 pixels durante uma primeira passagem de codificação (190), por exemplo, utilizando uma função codificar (quadro, MB16_type) para produzir um quadro codificador F16. Após a primeira passagem de codificação, o codificador de vídeo 50 pode calcular a taxa de bit e distorção com base no uso de macroblocos de 16x16 pixels como R16 e D16, respectivamente (192). O codificador de vídeo 50 pode então calcular uma métrica de distorção de taxa na forma do custo de utilizar macroblocos de 16x16 pixels C16 utilizando o multiplicador Lagrange C16 = D16 + X * R16 (194). Modos de codificação e tamanhos de partição podem ser selecionados para os macroblocos de 16x16 pixels, por exemplo, de acordo com o padrão H.264.
[0191] O codificador de vídeo 50 pode então codificar o quadro utilizando macroblocos de 32x32 pixels durante uma segunda passagem de codificação (196), por exemplo, utilizando uma função codificar (quadro, MB32_type), para produzir um quadro codificado F32. Após a segunda passagem de codificação, o codificador de vídeo 50 pode calcular a taxa de bits e distorção com base no uso de macroblocos de 32x32 pixels como R32 e D32, respectivamente (198). O codificador de vídeo 50 pode calcular então uma métrica de distorção de taxa na forma do custo de utilizar macroblocos de 32x32 pixels C32 utilizando o multiplicador Lagrange C32 = D32 + X * R32 (200). Modos de codificação e tamanhos de partição podem ser selecionados para os macroblocos de 32x32 pixels, por exemplo, utilizando técnicas de avaliação de distorção e taxa como descrito com referência às figuras 11 e 12.
[0192] O codificador de vídeo 50 pode então codificar o quadro utilizando macroblocos de 64x64 pixels durante uma terceira passagem de codificação (202), por exemplo, utilizando uma função codificar (quadro, MB64_type), para produzir um quadro codificado F64. Após a terceira passagem de codificação, o codificador de vídeo 50 pode calcular a taxa de bit e distorção com base no uso de macroblocos de 64x64 pixels como R64 e D64, respectivamente (204). O codificador de vídeo 50 pode então calcular uma métrica de distorção de taxa na forma do custo de utilizar macroblocos de 64x654 pixels C64 utilizando o multiplicador Lagrange C64 = D64 + A. * R64 (206). Modos de codificação e tamanhos de partição podem ser selecionados para os macroblocos de 64x64 pixels, por exemplo, utilizando técnicas de avaliação de taxa e distorção como descrito com referência às figuras 11 e 12.
[0193] A seguir, o codificador de vídeo 50 pode determinar qual das métricas C16, C32 e C64 é mais baixa para o quadro (208). O codificador de vídeo 50 pode escolher utilizar o quadro codificado com o tamanho de macrobloco que resultou no custo mais baixo (210). Desse modo, por exemplo, quando C16 é mais baixo, o codificador de vídeo 50 pode emitir quadro F16, codificado com os macroblocos 16x16 como o quadro codificado em um fluxo de bits para armazenamento ou transmissão para um decodificador. Quando C32 é mais baixa, o codificador de vídeo 50 pode emitir F32, codificada com os macroblocos 32x32. Quando C64 é mais baixa, o codificador de vídeo 50 pode emitir F64, codificado com os macroblocos 64x64.
[0194] Em outros exemplos, o codificador de vídeo 50 pode executar as passagens de codificação em qualquer ordem. Por exemplo, o codificador de vídeo 50 pode começar com a passagem de codificação de macrobloco 64x64, executar a passagem de codificação de macrobloco 32x32 em segundo, e terminar com a passagem de codificação de macrobloco 16x16. Além disso, métodos similares podem ser utilizados para codificar outras unidades codificadas compreendendo uma pluralidade de macroblocos, como fatias com diferentes tamanhos de macroblocos. Por exemplo, o codificador de vídeo 50 pode aplicar um método similar àquele da figura 13 para selecionar um tamanho de macrobloco ótimo para codificar fatias de um quadro, em vez do quadro inteiro.
[0195] O codificador de vídeo 50 pode transmitir também um identificador do tamanho dos macroblocos para uma unidade codificada específica (por exemplo, um quadro ou uma fatia) no cabeçalho da unidade codificada para uso por um decodificador. De acordo com o método da figura 13, um método pode incluir receber com um codificador de vídeo digital, uma unidade codificada de um fluxo de vídeo digital, calcular uma primeira métrica de distorção de taxa correspondendo a uma distorção de taxa para codificar a unidade codificada utilizando uma primeira pluralidade de blocos cada compreendendo 16x16 pixels, calcular uma segunda métrica de distorção de taxa correspondendo a uma distorção de taxa para codificar a unidade codificada utilizando uma segunda pluralidade de blocos cada compreendendo mais de 16x16 pixels, e determinar qual da primeira métrica de distorção de taxa e segunda métrica de distorção de taxa é mais baixa para a unidade codificada. O método pode incluir ainda, quando a primeira métrica de distorção de taxa é determinada como sendo a mais baixa, codificar a unidade codificada utilizando a primeira pluralidade de blocos, e quando a segunda métrica de distorção de taxa é determinada como sendo a mais baixa, codificar a unidade codificada utilizando a segunda pluralidade de blocos.
[0196] A figura 14 é um diagrama de blocos que ilustra um dispositivo de comunicação sem fio de exemplo 230 incluindo um codificador/decodificador de vídeo CODEC 234 que pode codificar e/ou decodificar dados de vídeo digital utilizando os macroblocos maiores do que padrão, utilizando qualquer de uma variedade das técnicas descritas nessa revelação. No exemplo da figura 14, o dispositivo de comunicação sem fio 230 inclui câmera de vídeo 232, codificador- decodificador de vídeo (CODEC) 234, modulador/demodulador (modem) 236, transceptor 238, processador 240, interface de usuário 242, memória 244, dispositivo de armazenamento de dados 246, antena 248 e barramento 250.
[0197] Os componentes incluídos no dispositivo de comunicação sem fio 230 ilustrados na figura 14 podem ser realizados por qualquer combinação apropriada de hardware, software e/ou firmware. No exemplo ilustrado, os componentes são representados como unidades separadas. Entretanto, em outros exemplos, os vários componentes podem ser integrados em unidades combinadas no hardware comum e/ou software. Como exemplo, a memória 244 pode armazenar instruções executáveis pelo processador 240 correspondendo a várias funções de CODEC de vídeo 234. Como outro exemplo, a câmera de vídeo 232 pode incluir um CODEC de vídeo que executa as funções de CODEC de vídeo 234, por exemplo, codificando e/ou decodificando dados de vídeo.
[0198] Em um exemplo, a câmera de vídeo 232 pode corresponder à fonte de vídeo 18 (figura 1). Em geral, a câmera de vídeo 232 pode gravar dados de vídeo capturados por um conjunto de sensores para gerar dados de vídeo digitais. A câmera de vídeo 232 pode enviar dados de vídeo digitais gravados brutos para o CODEC de vídeo 234 para codificar e então para o dispositivo de armazenamento de dados 246 através do barramento 250 para armazenamento de dados. O processador 240 pode enviar sinais para a câmera de vídeo 232 através do barramento 250 em relação a um modo no qual gravar vídeo, uma taxa de quadro na qual gravar vídeo, um tempo no qual terminar a gravação ou alterar os modos de taxa de quadro, um tempo no qual enviar dados de vídeo para o CODEC de vídeo 234, ou sinais indicando outros modos ou parâmetros.
[0199] A interface de usuário 242 pode compreender uma ou mais interfaces, como interfaces de entrada e saída. Por exemplo, a interface de usuário 242 pode incluir uma tela sensível a toque, um bloco de teclas, botões, uma tela que pode atuar como um visor, um microfone, um alto-falante ou outras interfaces. Como a câmera de vídeo 232 recebe dados de vídeo, o processador 240 pode sinalizar a câmera de vídeo 232 para enviar os dados de vídeo para a interface de usuário 242 para serem exibidos no visor.
[0200] O CODEC de vídeo 234 pode codificar dados de vídeo a partir da câmera de vídeo 232 e decodificar dados de vídeo recebidos através da antena 248, transceptor 238 e modem 236. O CODEC de vídeo 234 pode adicionalmente ou alternativamente decodificar dados anteriormente codificados recebidos do dispositivo de armazenamento de dados 246 para repetição. O CODEC de vídeo 234 pode codificar e/ou decodificar dados de vídeo digitais utilizando macroblocos que são maiores do que o tamanho de macroblocos prescritos por padrões de codificação de vídeo convencionais. Por exemplo, CODEC de vídeo 234 pode codificar e/ou decodificar dados de vídeo digitais utilizando um macrobloco grande compreendendo 64x64 pixels ou 32x32 pixels. O macrobloco grande pode ser identificado com um elemento de sintaxe do tipo macrobloco de acordo com um padrão de vídeo, como uma extensão do padrão H.264.
[0201] O CODEC de vídeo 234 pode executar as funções de qualquer um ou ambos codificador de vídeo 50 (figura 2) e/ou desedificador de vídeo 60 (figura 3), bem como quaisquer outras funções ou técnicas de codificação/decodificação como descrito nessa revelação. Por exemplo, o CODEC 234 pode dividir um macrobloco grande em uma variedade de partições de tamanho diferente, menores, e utilizar modos de codificação diferentes, por exemplo, espacial (I) ou temporal (P ou B) para partições selecionadas. A seleção de tamanhos de partição e modos de codificação pode ser baseada em resultados de distorção de taxa para tais tamanhos de partição e modos de codificação. O CODEC 234 também pode utilizar valores de padrão de bloco codificado hierárquicos (CBP para identificar macroblocos codificados e partições possuindo coeficientes diferente de zero em um macrobloco grande. Além disso, em alguns exemplos, CODEC 234 pode comparar métricas de distorção de taxa para macroblocos grandes e pequenos para selecionar um tamanho de macrobloco que produza resultados mais favoráveis para um quadro, fatia ou outra unidade de codificação.
[0202] Um usuário pode interagir com a interface de usuário 242 para transmitir uma sequência de vídeo gravada em dispositivo de armazenamento de dados 246 para outro dispositivo, como outro dispositivo de comunicação sem fio, através de modem 236, transceptor 238, e antena 248. A sequência de vídeo pode ser codificada de acordo com um padrão de codificação como MPEG-2, MPEG-3, MPEG-4, H.263, H.264, ou outros padrões de codificação de vídeo, sujeito a extensões ou modificações descritas nessa revelação. Por exemplo, a sequência de vídeo pode ser também codificada utilizando macroblocos maiores do que padrão, como descrito nessa revelação. O dispositivo de comunicação sem fio 230 pode receber também um segmento de vídeo codificado e armazenar a sequência de vídeo recebido no dispositivo de armazenamento de dados 246.
[0203] Macroblocos da sequência de vídeo codificada, recebida podem ser maiores do que macroblocos especificados por padrões de codificação de vídeo convencionais. Para exibir um segmento de vídeo codificado no dispositivo de armazenamento de dados 246, como uma sequência de vídeo gravada ou um segmento de vídeo recebido, o CODEC de vídeo 234 pode decodificar a sequência de vídeo e enviar quadros decodificados do segmento de vídeo para a interface de usuário 242. Quando uma sequência de vídeo inclui dados de áudio, CODEC de vídeo 234 pode decodificar o áudio, ou dispositivo de comunicação sem fio 230 pode incluir ainda um codec de áudio (não mostrado) para decodificar o áudio. Desse modo, o CODEC de vídeo 234 pode executar tanto as funções de um codificador como de um decodificador.
[0204] A memória 244 do dispositivo de comunicação sem fio 230 da figura 14 pode ser codificada com instruções legíveis por computador que fazem com que o processador 240 e/ou CODEC de vídeo 234 execute várias tarefas, além de armazenar dados de vídeo codificados. Tais instruções podem ser carregadas na memória 244 a partir de um dispositivo de armazenamento de dados como dispositivo de armazenamento de dados 246. Por exemplo, as instruções podem fazer com que o processador 240 execute as funções descritas com relação ao CODEC de vídeo 234.
[0205] A figura 15 é um diagrama de blocos que ilustra um padrão de bloco codificado hierárquico (CBP) 260. O exemplo de CBP 260 corresponde genericamente a uma porção das informações de sintaxe para um macrobloco de 64x64 pixels. No exemplo da figura 15, CBP 260 compreende um valor CBP64 262, quadro valores CBP32 264, 266, 268, 270, e quatro valores CBP16 272, 274, 276, 278. Cada bloco de CBP 260 pode incluir um ou mais bits. Em um exemplo, quando o valor de CBP64 262 é um bit com um valor de “1”, indicando que há pelo menos um coeficiente diferente de zero no macrobloco grande, CBP 260 inclui os quatro valores CBP32 264, 266, 268, 270 para quatro partições 32x32 do macrobloco 64x64 grande, como mostrado no exemplo da figura 15.
[0206] Em outro exemplo, quando o valor CBP64 262 é um bit com um valor de “0”, CBP 260 pode consistir somente em CBP64, como um valor de “0” pode indicar que o bloco correspondendo a CBP 260 tem coeficientes de valor todos zeros. Em um exemplo, quando um CBP64 é um bit com um valor de “1”, e um dos valores CBP32 para uma partição 32x32 específica é um bit com um valor de “1”, o valor CBP32 para a partição 32x32 tem quatro ramificações, representativas de valores CBP16, por exemplo, como mostrado com relação ao valor CBP32 266. Em um exemplo, quando um valor CBP32 é um bit com um valor de “0”, o CBP32 não tem nenhuma ramificação. No exemplo da figura 15, CBP260 pode ter um prefixo de cinco bits de “10100”, indicando que o valor CBP64 é “1”, e que uma das partições 32x32 tem um valor CBP32 de “1”. Embora somente um único valor CBP32 seja mostrado como possuindo um valor de “1” no exemplo da figura 15, em outros exemplos, duas, três ou todas as quatro partições 32x32 podem ter valores CBP32 de “1”, em cujo caso múltiplas ocorrências de quatro partições 16x16 com valores CBP16 correspondentes seriam necessárias.
[0207] No exemplo da figura 15, os quatro valores CBP16 272, 274, 276, 278 para as quatro partições 16x16 podem ser calculados de acordo com vários métodos, por exemplo, de acordo com os métodos das figuras 8 e 9. Todos ou quaisquer dos valores CBP16 272, 274, 276, 278 podem incluir um valor “lumacbp16”, um transform_size_flag, e/ou um luma16x8_cbp. Valores CBP16 272, 274, 276, 278 também podem ser calculados de acordo com um valor CBP como definido em ITU H.264 ou como um CodedBlockPatternChroma em ITU H.264, como discutido com relação às figuras 8 e 9. No exemplo da figura 15, considerando que CPB16 278 tem um valor de “1”, e os outros valores CBP 16 272, 274, 276 têm valores de “0”, o valor CBP de nove bits para o macrobloco 64x64 seria “101000001”, onde cada bit corresponde a uma das partições em um nível respectivo na hierarquia CBP/partição.
[0208] A figura 16 é um diagrama de blocos que ilustra um exemplo de estrutura de árvore 280 correspondendo a CBP 260 (figura 15). O nó CBP64 282 corresponde ao valor CBP64 262, nós CBP32 284, 286, 288, 290 cada correspondem a valores respectivos de valores CBP32 264, 266, 268, 270, e nós CBP16 292, 294, 296, 298 cada correspondem a valores respectivos de valores CBP16 272, 274, 276, 278. Desse modo, um valor de padrão de bloco codificado como definido nessa revelação pode corresponder a um CBP hierárquico. Cada nó que fornece outra ramificação na árvore corresponde a um valor CBP respectivo de “1”. Nos exemplos das figuras 15 e 16, CPB64 282 e CBP32 286 têm ambos valores de “1” e fornecem partições adicionais com valores CBP possíveis de “1”, isto é, onde, pelo menos uma partição no nível de partição seguinte inclui pelo menos um valor de coeficiente de transformada diferente de zero.
[0209] A figura 17 é um fluxograma que ilustra um método de exemplo para utilizar informações de sintaxe de uma unidade codificada para indicar e selecionar codificadores e decodificadores de sintaxe baseados em bloco para blocos de vídeo da unidade codificada. Em geral, as etapas 300 a 310 da figura 17 podem ser executadas por um codificador de vídeo, como codificador de vídeo 20 (figura 1) além de e em combinação com a codificação de uma pluralidade de blocos de vídeo para uma unidade codificada. Uma unidade codificada pode compreender um quadro de vídeo, uma fatia, ou um grupo de imagens (também mencionado como uma “sequência”). As etapas 312 a 316 da figura 17 podem ser executadas por um decodificador de vídeo, como decodificador de vídeo 30 (figura 1), além de e em combinação com a decodificação da pluralidade de blocos de vídeo da unidade codificada.
[0210] Inicialmente, o codificador de vídeo 20 pode receber um conjunto de blocos de vários tamanhos para uma unidade codificada, como um quadro, fatia, ou grupo de imagens (300). De acordo com as técnicas dessa revelação, um ou mais dos blocos podem compreender mais de 16x165 pixels, por exemplo, 32x32 pixels, 64x64 pixels, etc., entretanto, os blocos não necessitam individualmente incluir o mesmo número de pixels. Em geral, o codificador de vídeo 20 pode codificar cada dos blocos utilizando a mesma sintaxe baseada em bloco. Por exemplo, o codificador de vídeo 20 pode codificar cada dos blocos utilizando um padrão de bloco codificado hierárquico, como descrito acima.
[0211] O codificador de vídeo 20 pode selecionar a sintaxe baseada em bloco para utilizar com base em um bloco maior, isto é, tamanho máximo de bloco, no conjunto de blocos para a unidade codificada. O tamanho máximo de bloco pode corresponder ao tamanho de um macrobloco maior incluído na unidade codificada. por conseguinte, o codificador de vídeo 20 pode determinar o bloco de tamanho maior no conjunto (302). No exemplo da figura 17, o codificador de vídeo 20 pode determinar também o bloco de tamanho menor no conjunto (304). Como discutido acima, o padrão de bloco codificador hierárquico de um bloco tem um comprimento que corresponde a se partições do bloco têm um coeficiente quantizado, diferente de zero. Em alguns exemplos, o codificador de vídeo 20 pode incluir um valor de tamanho mínimo em informações de sintaxe para uma unidade codificada. Em alguns exemplos, o valor de tamanho mínimo indica o tamanho de partição mínima na unidade codificada. O tamanho de partição mínima, por exemplo, o menor bloco em uma unidade codificada, desse modo pode ser utilizado para determinar um comprimento máximo para o padrão de bloco codificado hierárquico.
[0212] O codificador de vídeo 20 pode então codificar cada bloco do conjunto para a unidade codificada de acordo com a sintaxe correspondendo ao bloco maior (306). Por exemplo, considerando que o bloco maior compreende um bloco de 64x64 pixels, o codificador de vídeo 20 pode utilizar sintaxe como aquela definida acima para MB64_type. Como outro exemplo, considerando que o maior bloco compreende um bloco de 32x32 pixels, o codificador de vídeo 20 pode utilizar a sintaxe como aquela definida acima para MB32_type.
[0213] O codificador de vídeo 20 também gera informações de sintaxe de unidade codificada, que incluem valores correspondendo ao bloco maior na unidade codificada e o bloco menor na unidade codificada (308). O codificador de vídeo 20 pode então transmitir a unidade codificada, incluindo as informações de sintaxe para a unidade codificada e cada dos blocos da unidade codificada, para o decodificador de vídeo 30.
[0214] O decodificador de vídeo 30 pode Recber a unidade codificada e as informações de sintaxe para a unidade codificada a partir do codificador de vídeo 20 (312). O decodificador de vídeo 30 pode selecionar um decodificador de sintaxe baseado em bloco com base na indicação nas informações de sintaxe de unidade codificada do bloco maior na unidade codificada (314). Por exemplo, considerando que as informações de sintaxe de unidade codificada indicaram que o bloco maior na unidade codificada compreendida 64x64 pixels, o decodificador de vídeo 30 pode selecionar um decodificador de sintaxe para blocos MB64_type. O decodificador de vídeo 30 pode então aplicar o decodificador de sintaxe selecionado para blocos da unidade codificada para decodificar os blocos da unidade codificada (316). O decodificador de vídeo 30 pode determinar também quando um bloco não tem subpartições separadamente codificadas adicionais com base na indicação nas informações de sintaxe de unidade codificada da partição codificada menor. Por exemplo, se o bloco maior for 64x64 pixels e o bloco menor for também 64x64 pixels, então pode ser determinado que os blocos 64x64 não são divididos em subpartições menores do que o tamanho 64x64. Como outro exemplo, se o bloco maior for 64x64 pixels e o bloco menor for 32x32 pixels, então pode ser determinado que os blocos 64x64 são divididos em subpartições não menores do que 32x32.
[0215] Desse modo, o decodificador de vídeo 30 pode permanecer compatível para trás com padrões de codificação existentes, como H.264. por exemplo, quando o bloco maior em uma unidade codificada compreende 16x16 pixels, o codificador de vídeo 20 pode indicar isso nas informações de sintaxe de unidade codificada, e o decodificador de vídeo 30 pode aplicar decodificadores de sintaxe baseado em bloco H.264 padrão. Entretanto, quando o bloco maior em uma unidade codificada compreende mais de 16x16 pixels, o codificador de vídeo 20 pode indicar isso nas informações de sintaxe de unidade codificada, e o decodificador de vídeo 30 pode seletivamente aplicar um decodificador de sintaxe baseado em bloco de acordo com as técnicas dessa revelação para decodificar os blocos da unidade codificada.
[0216] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Se implementadas em software, as funções podem ser armazenadas em ou transmitidas através como uma ou mais instruções ou código em um meio legível por computador. Mídia legível por computador inclui tanto mídia de armazenamento em computador como mídia de comunicação incluindo qualquer meio que facilite transferência de um programa de computador a partir de um lugar para outro. Uma mídia de armazenamento pode ser qualquer mídia disponível que possa ser acessada por um computador. Como exemplo, e não limitação, tal mídia legível por computador pode compreender RAM, ROM, EEPROM, CD-ROM, ou outra armazenamento de disco óptica, armazenamento de disco magnética ou outros dispositivos de armazenamento magnética, ou qualquer outro meio que possa ser utilizado para transportar ou armazenar código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessado por um computador. Além disso, qualquer conexão é adequadamente denominada um meio legível por computador. Por exemplo, se o software for transmitido de um website, servidor, ou outra fonte remota utilizando um cabo coaxial, cabo de fibra óptica, par torcido, linha digital de assinante (DSL), ou tecnologias sem fio como infravermelho, rádio e microondas,então o cabo coaxial, cabo de fibra óptica, par torcido, DSL, ou tecnologias sem fio como infravermelho, rádio e micro-ondas são incluídos na definição de meio. Disco e disc, como utilizados aqui, incluem compact disc (CD), disc laser, disc óptico, digital versatile disc (DVD), disco flexível e disc blu-ray onde discos normalmente reproduzem dados magneticamente, enquanto discs reproduzem dados opticamente com lasers. Combinações do acima devem ser também incluídas no escopo de mídia legível por computador.
[0217] Vários exemplos foram descritos. Esses e outros exemplos estão compreendidos no escopo das seguintes reivindicações.

Claims (26)

1. Método, CARACTERIZADO pelo fato de que compreende: - codificar, com um codificador de vídeo (20, 50), um bloco de vídeo possuindo um tamanho de 64x64 pixels; - gerar informações de sintaxe de tipo de bloco que indica o tamanho do bloco; e - gerar dados de indicador de bloco codificado para o bloco codificado, em que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, em que gerar os dados de indicador de bloco codificado compreende: - quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero, gerar um único bit para os dados de indicador de bloco codificado e configurar o valor do único bit para zero; - quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, gerar um primeiro bit dos dados de indicador de bloco codificado e configurar o primeiro bit para um, gerar quatro bits de partição para os dados de indicador de bloco codificado, cada um dos quatro bits de partição correspondendo a uma partição diferente dentre quatro partições igualmente dimensionadas do bloco codificado, configurar os quatro bits de partição para respectivos valores representando se a partição correspondente dentre as quatro partições igualmente dimensionadas inclui pelo menos um coeficiente diferente de zero, e, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e uma partição de 16x16 pixels, identificar a partição de 16x16 pixels do bloco codificado, gerar dados de indicador de bloco codificado de partição para a partição de 16x16 pixels como uma porção dos dados de indicador de bloco codificado gerados, e anexar os dados de indicador de bloco codificado de partição aos dados de indicador de bloco codificado seguinte aos quatro bits de partição.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que compreende adicionalmente: gerar um fluxo de bits de vídeo codificado compreendendo dados de vídeo codificados para o bloco codificado, as informações de sintaxe de tipo de bloco, e os dados de indicador de bloco codificado quando o primeiro bit dos dados de indicador de bloco codificado é um.
3. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que compreende adicionalmente, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, gerar dados de indicador de bloco codificado compreende gerar um primeiro bit luma_16x8 e um segundo bit luma_16x8, o primeiro bit luma_16x8 representando se uma partição 16x8 da partição 16x16 do bloco inclui pelo menos um coeficiente diferente de zero e o segundo bit luma_16x8 representando se uma segunda partição 16x8 da partição 16x16 do bloco inclui pelo menos um coeficiente diferente de zero.
4. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que os dados de indicador de bloco codificado indicam se o bloco codificado incluir pelo menos um coeficiente diferente de zero, e quando o bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de primeiro nível do bloco codificado incluem pelo menos um coeficiente diferente de zero, e quando pelo menos uma partição dentre as partições de primeiro nível do bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de segundo nível das partições de primeiro nível incluem pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado inclui um padrão de bits correspondendo ao bloco codificado, às partições de primeiro nível do bloco codificado e às partições de segundo nível dentre as partições de primeiro nível.
5. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que compreende adicionalmente: gerar um valor de modificação de parâmetro de quantização para o bloco codificado, em que a codificação do bloco de vídeo compreende quantizar o bloco de vídeo de acordo com o valor de modificação de parâmetro de quantização; e incluir o valor de modificação de parâmetro de quantização como informações de sintaxe para o bloco codificado.
6. Aparelho, CARACTERIZADO pelo fato de que compreende: - meios para codificar um bloco de vídeo possuindo um tamanho de 64x64 pixels; - meios para gerar informações de sintaxe de tipo de bloco que indica o tamanho do bloco; e - meios para gerar dados de indicador de bloco codificado para o bloco codificado, em que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, em que os meios para gerar os dados de indicador de bloco codificado compreendem: - meios para gerar um único bit para os dados de indicador de bloco codificado quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero e configurar o valor do único bit para zero; e - meios para gerar um primeiro bit dos dados de indicador de bloco codificado quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e configurar o primeiro bit para um, meios para gerar quatro bits de partição para os dados de indicador de bloco codificado, cada um dos quatro bits de partição correspondendo a uma partição diferente dentre quatro partições igualmente dimensionadas do bloco codificado, e meios para configurar os quatro bits de partição para os respectivos valores representando se uma partição correspondente dentre as quatro partições igualmente dimensionadas inclui pelo menos um coeficiente diferente de zero, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e uma partição de 16x16 pixels, meios para identificar a partição de 16x16 pixels do bloco codificado, meios para gerar dados de indicador de bloco codificado de partição para a partição de 16x16 pixels como uma porção dos dados de indicador de bloco codificado gerados, e meios para anexar os dados de indicador de bloco codificado de partição aos dados de indicador de bloco codificado seguinte aos quatro bits de partição.
7. Aparelho, de acordo com a reivindicação 6, CARACTERIZADO pelo fato de que compreende adicionalmente: meios para gerar um fluxo de bits de vídeo codificado compreendendo dados de vídeo codificados para o bloco codificado, as informações de sintaxe de tipo de bloco, e os dados de indicador de bloco codificado quando o primeiro bit dos dados de indicador de bloco codificado é um.
8. Aparelho, de acordo com a reivindicação 6, CARACTERIZADO pelo fato de que compreende adicionalmente, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, meios para gerar dados de indicador de bloco codificado compreende gerar um primeiro bit luma_16x8 e um segundo bit luma_16x8, o primeiro bit luma_16x8 representando se uma partição 16x8 da partição 16x16 do bloco inclui pelo menos um coeficiente diferente de zero e o segundo bit luma_16x8 representando se uma segunda partição 16x8 da partição 16x16 do bloco inclui pelo menos um coeficiente diferente de zero.
9. Aparelho, de acordo com a reivindicação 6, CARACTERIZADO pelo fato de que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e quando o bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de primeiro nível do bloco codificado incluem pelo menos um coeficiente diferente de zero, e quando pelo menos uma das partições de primeiro nível do bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de segundo nível das partições de primeiro nível incluem pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado inclui um padrão de bits correspondendo ao bloco codificado, às partições de primeiro nível do bloco codificado e às partições de segundo nível das partições de primeiro nível.
10. Mídia de armazenamento não transitória legível por computador, CARACTERIZADA pelo fato de ter armazenado na mesma, um conjunto de instruções para fazer um aparelho de codificação de vídeo: - codificar, com um codificador de vídeo (20, 50), um bloco de vídeo possuindo um tamanho de 64x64 pixels; - gerar informações de sintaxe de tipo de bloco que indica o tamanho do bloco; e - gerar dados de indicador de bloco codificado para o bloco codificado, em que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, em que as instruções que fazem com que o aparelho gere os dados de indicador de bloco codificado compreendem instruções que fazem o aparelho: - quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero, gerar um único bit para os dados de indicador de bloco codificado e configurar o valor do único bit para zero; e - quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, gerar um primeiro bit dos dados de indicador de bloco codificado e configurar o primeiro bit para um, gerar quatro bits de partição para os dados de indicador de bloco codificado, cada um dos quatro bits de partição correspondendo a uma partição diferente dentre quatro partições igualmente dimensionadas do bloco codificado, e configurar os quatro bits de partição para respectivos valores representando se a partição correspondente dentre as quatro partições igualmente dimensionadas inclui pelo menos um coeficiente diferente de zero, e, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e uma partição de 16x16 pixels, identificar a partição de 16x16 pixels do bloco codificado, gerar dados de indicador de bloco codificado de partição para a partição de 16x16 pixels como uma porção dos dados de indicador de bloco codificado gerados e anexar os dados de indicador de bloco codificado de partição aos dados de indicador de bloco codificado seguinte aos quatro bits de partição.
11. Mídia de armazenamento não transitória legível por computador, de acordo com a reivindicação 10, CARACTERIZADA pelo fato de que compreende adicionalmente instruções para fazer com que o aparelho de codificação de vídeo: gerar um fluxo de bits de vídeo codificado compreendendo dados de vídeo codificados para o bloco codificado, as informações de sintaxe de tipo de bloco, e os dados de indicador de bloco codificado quando o primeiro bit dos dados de indicador de bloco codificado é um.
12. Mídia de armazenamento não transitória legível por computador, de acordo com a reivindicação 10, CARACTERIZADA pelo fato de que compreende adicionalmente instruções para fazer com que o aparelho de codificação de vídeo, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, gerar para os dados de indicador de bloco codificado um primeiro bit luma_16x8 e um segundo bit luma_16x8, o primeiro bit luma_16x8 representando se uma partição 16x8 da partição 16x16 do bloco inclui pelo menos um coeficiente diferente de zero e o segundo bit luma_16x8 representando se uma segunda partição 16x8 da partição 16x16 do bloco inclui pelo menos um coeficiente diferente de zero.
13. Mídia de armazenamento não transitória legível por computador, de acordo com a reivindicação 10, CARACTERIZADA pelo fato de que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e quando o bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de primeiro nível do bloco codificado incluem pelo menos um coeficiente diferente de zero, e quando pelo menos uma das partições de primeiro nível do bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de segundo nível das partições de primeiro nível incluem pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado inclui um padrão de bits correspondendo ao bloco codificado, às partições de primeiro nível do bloco codificado e às partições de segundo nível das partições de primeiro nível.
14. Método, CARACTERIZADO pelo fato de que compreende: - receber, com um decodificador de vídeo (30, 60), um bloco de vídeo codificado possuindo um tamanho de 64x64 pixels; - receber informações de sintaxe de tipo de bloco que indica o tamanho do bloco codificado; - receber dados de indicador de bloco codificado para o bloco codificado, em que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado são um único bit quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero e o valor do único bit é zero, e quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, os dados de indicador de bloco codificado incluem um primeiro bit e o primeiro bit é um, e quatro bits de partição, cada um dos bits de partição correspondendo a uma partição diferente dentre quatro partições igualmente dimensionadas do bloco codificado, em que os quatro bits de partição são configurados para valores respectivos representando se a partição correspondente dentre as quatro partições igualmente dimensionadas inclui pelo menos um coeficiente diferente de zero, em que os dados de indicador de bloco codificado incluem, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e uma partição de 16x16 pixels, dados de indicador de bloco codificado de partição para a partição de 16x16 pixels, e - decodificar o bloco codificado com base na informações de sintaxe de tipo de bloco e nos dados de indicador de bloco codificado para o bloco codificado.
15. Método, de acordo com a reivindicação 14, CARACTERIZADO pelo fato de que o método compreende adicionalmente receber dados de vídeo codificados para o bloco codificado quando o primeiro bit dos dados de indicador de bloco codificado for um.
16. Método, de acordo com a reivindicação 14, CARACTERIZADO pelo fato de que os dados de indicador de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e quando o bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de primeiro nível do bloco codificado incluem pelo menos um coeficiente diferente de zero, e quando pelo menos uma das partições de primeiro nível do bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de segundo nível das partições de primeiro nível incluem pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado inclui um padrão de bits correspondendo ao bloco codificado, às partições de primeiro nível do bloco codificado e às partições de segundo nível das partições de primeiro nível.
17. Método, de acordo com a reivindicação 14, CARACTERIZADO pelo fato de que compreende adicionalmente: receber um valor de modificação de parâmetro de quantização, em que decodificar o bloco codificado compreende desquantizar o bloco codificado de acordo com o valor de modificação de parâmetro de quantização.
18. Método, de acordo com a reivindicação 14, CARACTERIZADO pelo fato de que decodificar o bloco codificado compreende: recuperar dados residuais para partições possuindo pelo menos um coeficiente diferente de zero, como indicado pelos dados de indicador de bloco codificado; decodificar as partições possuindo pelo menos um coeficiente diferente de zero usando dados residuais recuperados e blocos preditivos; e decodificar as partições que não possuem pelo menos um coeficiente diferente de zero usando blocos preditivos e sem usar dados residuais.
19. Aparelho, CARACTERIZADO pelo fato de que compreende: - meios para receber um bloco de vídeo codificado possuindo um tamanho de 64x64 pixels; - meios para receber informações de sintaxe de tipo de bloco que indica o tamanho do bloco codificado; - meios para receber dados de indicador de bloco codificado para o bloco codificado, em que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado são um único bit quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero e o valor do único bit é zero, e, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, os dados de indicador de bloco codificado incluem um primeiro bit e o primeiro bit é um, e, quatro bits de partição, cada um dos bits de partição correspondendo a uma partição diferente dentre as quatro partições igualmente dimensionadas do bloco codificado, em que os quatro bits de partição são configurados para os respectivos valores representando se uma partição correspondente dentre as quatro partições igualmente dimensionadas inclui pelo menos um coeficiente diferente de zero, em que os dados de indicador de bloco codificado incluem, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e uma partição de 16x16 pixels, dados de indicador de bloco codificado de partição para a partição de 16x16 pixels, e - meios para decodificar o bloco codificado baseado na informações de sintaxe de tipo de bloco e nos dados de indicador de bloco codificado para o bloco codificado.
20. Aparelho, de acordo com a reivindicação 19, CARACTERIZADO pelo fato de que o aparelho compreende adicionalmente meios para receber dados de vídeo codificados para o bloco codificado quando o primeiro bit dos dados de indicador de bloco codificado for um.
21. Aparelho, de acordo com a reivindicação 19, CARACTERIZADO pelo fato de que os dados de indicador de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e quando o bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de primeiro nível do bloco codificado incluem pelo menos um coeficiente diferente de zero, e quando pelo menos uma das partições de primeiro nível do bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de segundo nível das partições de primeiro nível incluem pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado inclui um padrão de bits correspondendo ao bloco codificado, às partições de primeiro nível do bloco codificado e às partições de segundo nível das partições de primeiro nível.
22. Aparelho, de acordo com a reivindicação 19, CARACTERIZADO pelo fato de que meios para decodificar o bloco codificado compreende: meios para recuperar dados residuais para partições possuindo pelo menos um coeficiente diferente de zero, como indicado pelos dados de indicador de bloco codificado; meios para decodificar as partições possuindo pelo menos um coeficiente diferente de zero usando dados residuais recuperados e blocos preditivos; e meios para decodificar as partições que não possuem pelo menos um coeficiente diferente de zero usando blocos preditivos e sem usar dados residuais.
23. Mídia de armazenamento não transitória legível por computador, CARACTERIZADA pelo fato de que compreende armazenada na mesma um conjunto de instruções para fazer um decodificador de vídeo: - receber, com um codificador de vídeo, um bloco de vídeo codificado possuindo um tamanho de 64x64 pixels; - receber informações de sintaxe de tipo de bloco que indica o tamanho do bloco codificado; - receber dados de indicador de bloco codificado para o bloco codificado, em que os dados de indicador de bloco codificado indicam se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado é um único bit quando o bloco codificado não inclui pelo menos um coeficiente diferente de zero e o valor do único bit é zero, e, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero, os dados de indicador de bloco codificado incluem um primeiro bit e o primeiro bit é um, e, quatro bits de partição, cada um dos bits de partição correspondendo a uma partição diferente dentre as quatro partições igualmente dimensionadas do bloco codificado, em que os quatro bits de partição são configurados para os respectivos valores representando se uma partição correspondente dentre as quatro partições igualmente dimensionadas inclui pelo menos um coeficiente diferente de zero, em que os dados de indicador de bloco codificado incluem, quando o bloco codificado inclui pelo menos um coeficiente diferente de zero e uma partição de 16x16 pixels, dados de indicador de bloco codificado de partição para a partição de 16x16 pixels, e - decodificar o bloco codificado baseado nas informações de sintaxe de tipo de bloco e nos dados de indicador de bloco codificado para o bloco codificado.
24. Mídia de armazenamento não transitória legível por computador, de acordo com a reivindicação 23, CARACTERIZADA pelo fato de que o método compreende adicionalmente receber dados de vídeo codificados para o bloco codificado quando o primeiro bit dos dados de indicador de bloco codificado for um.
25. Mídia de armazenamento não transitória legível por computador, de acordo com a reivindicação 23, CARACTERIZADA pelo fato de que os dados de indicador de bloco codificado indica se o bloco codificado inclui pelo menos um coeficiente diferente de zero, e quando o bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de primeiro nível do bloco codificado incluem pelo menos um coeficiente diferente de zero, e quando pelo menos uma das partições de primeiro nível do bloco codificado incluir pelo menos um coeficiente diferente de zero, indicar se quaisquer partições de segundo nível das partições de primeiro nível incluem pelo menos um coeficiente diferente de zero, e em que os dados de indicador de bloco codificado inclui um padrão de bits correspondendo ao bloco codificado, às partições de primeiro nível do bloco codificado e às partições de segundo nível das partições de primeiro nível.
26. Mídia de armazenamento não transitória legível por computador, de acordo com a reivindicação 23, CARACTERIZADA pelo fato de que as instruções que fazem com que o decodificador de vídeo decodifique o bloco codificado compreende instruções que fazem com que o decodificador de vídeo: recuperar dados residuais para partições possuindo pelo menos um coeficiente diferente de zero, como indicado pelos dados de indicador de bloco codificado; decodificar as partições possuindo pelo menos um coeficiente diferente de zero usando dados residuais recuperados e blocos preditivos; e decodificar as partições que não possuem pelo menos um coeficiente diferente de zero usando blocos preditivos e sem usar dados residuais.
BRPI0919839-3A 2008-10-03 2009-09-29 Método, aparelho e mídia de armazenamento não transitória legível por computador para codificação de vídeo com macroblocos grandes BRPI0919839B1 (pt)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US10278708P 2008-10-03 2008-10-03
US61/102,787 2008-10-03
US14435709P 2009-01-13 2009-01-13
US61/144,357 2009-01-13
US16663109P 2009-04-03 2009-04-03
US61/166,631 2009-04-03
US12/562,412 US8634456B2 (en) 2008-10-03 2009-09-18 Video coding with large macroblocks
US12/562,412 2009-09-18
PCT/US2009/058844 WO2010039733A2 (en) 2008-10-03 2009-09-29 Video coding with large macroblocks

Publications (2)

Publication Number Publication Date
BRPI0919839A2 BRPI0919839A2 (pt) 2015-12-15
BRPI0919839B1 true BRPI0919839B1 (pt) 2021-10-05

Family

ID=41667500

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0919839-3A BRPI0919839B1 (pt) 2008-10-03 2009-09-29 Método, aparelho e mídia de armazenamento não transitória legível por computador para codificação de vídeo com macroblocos grandes

Country Status (15)

Country Link
US (1) US8634456B2 (pt)
EP (1) EP2347593A2 (pt)
JP (1) JP5384652B2 (pt)
KR (1) KR101344115B1 (pt)
CN (1) CN102172025B (pt)
AU (1) AU2009298648B2 (pt)
BR (1) BRPI0919839B1 (pt)
CA (1) CA2738037C (pt)
HK (1) HK1161464A1 (pt)
IL (1) IL211766A (pt)
MY (1) MY165997A (pt)
RU (1) RU2502218C2 (pt)
TW (1) TWI419567B (pt)
WO (1) WO2010039733A2 (pt)
ZA (1) ZA201102426B (pt)

Families Citing this family (97)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101456279B1 (ko) * 2008-01-03 2014-11-04 한국전자통신연구원 참조 블록 파형 정보에 기반하여 인트라 영상을 부호화하는 장치 및 복호화 하는 장치
US8483285B2 (en) * 2008-10-03 2013-07-09 Qualcomm Incorporated Video coding using transforms bigger than 4×4 and 8×8
US8619856B2 (en) * 2008-10-03 2013-12-31 Qualcomm Incorporated Video coding with large macroblocks
US8503527B2 (en) 2008-10-03 2013-08-06 Qualcomm Incorporated Video coding with large macroblocks
KR101648776B1 (ko) * 2008-10-06 2016-08-17 엘지전자 주식회사 비디오 신호 처리 방법 및 장치
JP2012504925A (ja) 2008-10-06 2012-02-23 エルジー エレクトロニクス インコーポレイティド ビデオ信号の処理方法及び装置
WO2010041858A2 (en) 2008-10-06 2010-04-15 Lg Electronics Inc. A method and an apparatus for decoding a video signal
WO2010131903A2 (en) 2009-05-12 2010-11-18 Lg Electronics Inc. Method and apparatus for processing a video signal
JP5326828B2 (ja) * 2009-06-03 2013-10-30 富士通株式会社 動画像符号化装置及び動画像符号化方法
KR101712351B1 (ko) * 2009-06-26 2017-03-06 에스케이 텔레콤주식회사 다차원 정수 변환을 이용한 영상 부호화/복호화 장치 및 방법
KR101527085B1 (ko) * 2009-06-30 2015-06-10 한국전자통신연구원 인트라 부호화/복호화 방법 및 장치
KR20120052267A (ko) * 2009-07-01 2012-05-23 톰슨 라이센싱 비디오 인코더 및 디코더용 대형 블록에 대한 인트라 예측을 시그널링하기 위한 방법 및 장치
JP5359657B2 (ja) * 2009-07-31 2013-12-04 ソニー株式会社 画像符号化装置および方法、記録媒体、並びにプログラム
KR101624649B1 (ko) * 2009-08-14 2016-05-26 삼성전자주식회사 계층적인 부호화 블록 패턴 정보를 이용한 비디오 부호화 방법 및 장치, 비디오 복호화 방법 및 장치
KR101456498B1 (ko) * 2009-08-14 2014-10-31 삼성전자주식회사 계층적 부호화 단위의 스캔 순서를 고려한 비디오 부호화 방법 및 장치, 비디오 복호화 방법 및 장치
KR20110017719A (ko) * 2009-08-14 2011-02-22 삼성전자주식회사 비디오 부호화 방법 및 장치, 비디오 복호화 방법 및 장치
CN104935934B (zh) 2009-10-21 2018-04-03 Sk电信有限公司 视频编码装置
KR101504887B1 (ko) 2009-10-23 2015-03-24 삼성전자 주식회사 데이터 단위 레벨의 독립적 파싱 또는 복호화에 따른 비디오 복호화 방법 및 그 장치, 그리고 데이터 단위 레벨의 독립적 파싱 또는 복호화를 위한 비디오 부호화 방법 및 그 장치
KR101457894B1 (ko) * 2009-10-28 2014-11-05 삼성전자주식회사 영상 부호화 방법 및 장치, 복호화 방법 및 장치
US20110274162A1 (en) 2010-05-04 2011-11-10 Minhua Zhou Coding Unit Quantization Parameters in Video Coding
KR101703327B1 (ko) * 2010-01-14 2017-02-06 삼성전자 주식회사 계층적 데이터 단위의 패턴 정보를 이용하는 비디오 부호화 방법과 그 장치, 및 비디오 복호화 방법과 그 장치
KR101675118B1 (ko) * 2010-01-14 2016-11-10 삼성전자 주식회사 스킵 및 분할 순서를 고려한 비디오 부호화 방법과 그 장치, 및 비디오 복호화 방법과 그 장치
AU2015203387B2 (en) * 2010-01-14 2016-06-30 Samsung Electronics Co., Ltd. Method and apparatus for encoding video and method and apparatus for decoding video by considering skip and split order
KR101495724B1 (ko) * 2010-02-02 2015-02-25 삼성전자주식회사 계층적 데이터 단위의 스캔 순서에 기반한 비디오 부호화 방법과 그 장치, 및 비디오 복호화 방법과 그 장치
WO2011121715A1 (ja) * 2010-03-30 2011-10-06 株式会社 東芝 画像復号化方法
US8942282B2 (en) 2010-04-12 2015-01-27 Qualcomm Incorporated Variable length coding of coded block pattern (CBP) in video compression
RS64605B1 (sr) 2010-04-13 2023-10-31 Ge Video Compression Llc Kodiranje videa primenom podele sa više stabala na slikama
CN105872562B (zh) * 2010-04-13 2019-05-17 Ge视频压缩有限责任公司 跨平面预测
KR102166520B1 (ko) 2010-04-13 2020-10-16 지이 비디오 컴프레션, 엘엘씨 샘플 영역 병합
NO2991355T3 (pt) 2010-04-13 2018-04-14
BR122020007923B1 (pt) * 2010-04-13 2021-08-03 Ge Video Compression, Llc Predição interplano
JP2012019447A (ja) * 2010-07-09 2012-01-26 Sony Corp 画像処理装置および方法
US8873617B2 (en) * 2010-07-15 2014-10-28 Sharp Laboratories Of America, Inc. Method of parallel video coding based on same sized blocks
US8855188B2 (en) * 2010-07-15 2014-10-07 Sharp Laboratories Of America, Inc. Method of parallel video coding based on mapping
US8848779B2 (en) * 2010-07-15 2014-09-30 Sharp Laboratories Of America, Inc. Method of parallel video coding based on block size
BR112013001354B1 (pt) * 2010-07-21 2022-03-29 Velos Media International Limited Método e dispositivo para codificação de imagem
US9398308B2 (en) 2010-07-28 2016-07-19 Qualcomm Incorporated Coding motion prediction direction in video coding
KR20120016980A (ko) 2010-08-17 2012-02-27 한국전자통신연구원 영상 부호화 방법 및 장치, 그리고 복호화 방법 및 장치
LT2955918T (lt) * 2010-08-17 2018-08-10 Samsung Electronics Co., Ltd. Vaizdo dekodavimas, naudojant kintamos medžio struktūros transformacijos vienetą
KR20120035096A (ko) * 2010-10-04 2012-04-13 한국전자통신연구원 쿼드 트리 변환 구조에서 부가 정보의 시그널링 방법 및 장치
KR101479130B1 (ko) * 2010-10-18 2015-01-07 에스케이 텔레콤주식회사 차분 움직임벡터 부호화/복호화 장치 및 방법, 및 그것을 이용한 영상 부호화/복호화 장치 및 방법
US9172963B2 (en) 2010-11-01 2015-10-27 Qualcomm Incorporated Joint coding of syntax elements for video coding
US9066102B2 (en) 2010-11-17 2015-06-23 Qualcomm Incorporated Reference picture list construction for generalized P/B frames in video coding
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
US9490839B2 (en) 2011-01-03 2016-11-08 Qualcomm Incorporated Variable length coding of video block coefficients
JP5850214B2 (ja) 2011-01-11 2016-02-03 ソニー株式会社 画像処理装置および方法、プログラム、並びに記録媒体
CN102595116B (zh) * 2011-01-14 2014-03-12 华为技术有限公司 多图像块划分的编解码方法和装置
US10171813B2 (en) 2011-02-24 2019-01-01 Qualcomm Incorporated Hierarchy of motion prediction video blocks
EP2685718B1 (en) * 2011-03-10 2018-08-29 Sharp Kabushiki Kaisha Image decoding apparatus
WO2012169952A2 (en) * 2011-06-10 2012-12-13 Telefonaktiebolaget L M Ericsson (Publ) Signaling of end of slices
US8989270B2 (en) * 2011-06-23 2015-03-24 Apple Inc. Optimized search for reference frames in predictive video coding system
JP5745175B2 (ja) * 2011-06-28 2015-07-08 サムスン エレクトロニクス カンパニー リミテッド 適応的な量子化パラメータ差分値を用いた映像の符号化及び復号化方法と装置
KR101654673B1 (ko) * 2011-06-28 2016-09-22 삼성전자주식회사 영상의 인트라 예측 부호화, 복호화 방법 및 장치
TW201309036A (zh) * 2011-06-28 2013-02-16 Samsung Electronics Co Ltd 使用亮度成分影像的預測色度成分影像用的裝置與方法
US9516316B2 (en) 2011-06-29 2016-12-06 Qualcomm Incorporated VLC coefficient coding for large chroma block
US9338456B2 (en) 2011-07-11 2016-05-10 Qualcomm Incorporated Coding syntax elements using VLC codewords
US20130016769A1 (en) * 2011-07-17 2013-01-17 Qualcomm Incorporated Signaling picture size in video coding
CN103828366B (zh) * 2011-07-21 2017-10-20 黑莓有限公司 一种编码和解码方法、编码和解码设备
US9451271B2 (en) 2011-07-21 2016-09-20 Blackberry Limited Adaptive filtering based on pattern information
US9584819B2 (en) * 2011-10-24 2017-02-28 Qualcomm Incorporated Grouping of tiles for video coding
KR20130049525A (ko) 2011-11-04 2013-05-14 오수미 잔차 블록 복원을 위한 역변환 방법
US9014265B1 (en) 2011-12-29 2015-04-21 Google Inc. Video coding using edge detection and block partitioning for intra prediction
CN104137545B (zh) * 2012-01-19 2018-06-05 寰发股份有限公司 编码块旗标的编码及视频比特流的解码方法与装置
WO2013107027A1 (en) 2012-01-19 2013-07-25 Mediatek Singapore Pte. Ltd. Methods and apparatuses of cbf coding in hevc
AU2012200319B2 (en) * 2012-01-19 2015-11-26 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding the significance map for residual coefficients of a transform unit
AU2012200345B2 (en) 2012-01-20 2014-05-01 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding the significance map residual coefficients of a transform unit
US9106918B2 (en) * 2012-01-20 2015-08-11 Sony Corporation Coefficient coding harmonization in HEVC
US9462275B2 (en) * 2012-01-30 2016-10-04 Qualcomm Incorporated Residual quad tree (RQT) coding for video coding
US9106932B2 (en) * 2012-02-29 2015-08-11 Broadcom Corporation Parallel pyramid entropy coding for video and image compression
US9749645B2 (en) 2012-06-22 2017-08-29 Microsoft Technology Licensing, Llc Coded-block-flag coding and derivation
US9497465B2 (en) * 2012-06-29 2016-11-15 Electronics And Telecommunications Research Institute Method and device for encoding/decoding images
MY200990A (en) * 2012-07-02 2024-01-29 Samsung Electronics Co Ltd Entrophy Coding of a Video and Entropy Decoding of a Video
US11284133B2 (en) * 2012-07-10 2022-03-22 Avago Technologies International Sales Pte. Limited Real-time video coding system of multiple temporally scaled video and of multiple profile and standards based on shared video coding information
US20140056347A1 (en) 2012-08-23 2014-02-27 Microsoft Corporation Non-Transform Coding
WO2014053517A1 (en) 2012-10-01 2014-04-10 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Scalable video coding using derivation of subblock subdivision for prediction from base layer
US9210424B1 (en) 2013-02-28 2015-12-08 Google Inc. Adaptive prediction block size in video coding
US9832478B2 (en) 2013-05-14 2017-11-28 Mediatek Inc. Video encoding method and apparatus for determining size of parallel motion estimation region based on encoding related information and related video decoding method and apparatus
CN104159106B (zh) * 2013-05-14 2017-12-01 联发科技股份有限公司 视频编码方法和视频解码方法及其装置
US9313493B1 (en) 2013-06-27 2016-04-12 Google Inc. Advanced motion estimation
CN103491369B (zh) * 2013-09-18 2016-09-28 华为技术有限公司 一种帧间预测编码方法和编码器
US10362336B2 (en) * 2014-03-25 2019-07-23 Qualcomm Incorporated Palette predictor signaling with run length code for video coding
FR3029333A1 (fr) * 2014-11-27 2016-06-03 Orange Procede de codage et decodage d'images, dispositif de codage et decodage et programmes d'ordinateur correspondants
CN105992000B (zh) * 2015-03-06 2019-03-22 扬智科技股份有限公司 影像流的处理方法及其影像处理装置
US10929353B2 (en) 2015-04-29 2021-02-23 Box, Inc. File tree streaming in a virtual file system for cloud-based shared content
US9807416B2 (en) 2015-09-21 2017-10-31 Google Inc. Low-latency two-pass video coding
CN109328461B (zh) 2016-04-29 2023-09-05 世宗大学校产学协力团 视频信号编码/解码方法和设备
CN116916004A (zh) 2016-04-29 2023-10-20 世宗大学校产学协力团 视频信号编码/解码方法和设备
WO2017195476A1 (ja) * 2016-05-13 2017-11-16 ソニー株式会社 画像処理装置および方法
CN116886898A (zh) 2017-01-16 2023-10-13 世宗大学校产学协力团 影像解码/编码方法以及传送比特流的方法
US10999576B2 (en) * 2017-05-03 2021-05-04 Novatek Microelectronics Corp. Video processing method
US11470131B2 (en) 2017-07-07 2022-10-11 Box, Inc. User device processing of information from a network-accessible collaboration system
KR102476204B1 (ko) * 2017-10-19 2022-12-08 삼성전자주식회사 멀티 코덱 인코더 및 이를 포함하는 멀티 코덱 인코딩 시스템
US11259037B2 (en) * 2017-12-06 2022-02-22 V-Nova International Limited Method and apparatus for decoding a received set of encoded data
FI3806476T3 (fi) * 2018-06-03 2023-08-15 Lg Electronics Inc Menetelmä ja laite videosignaalin käsittelemiseksi redusoitua muunnosta käyttäen
US11272198B2 (en) 2019-01-30 2022-03-08 Tencent America LLC Method and apparatus for improved sub-block partitioning intra sub-partitions coding mode
CN111683258B (zh) * 2020-06-12 2022-04-22 上海集成电路研发中心有限公司 一种图像数据的压缩方法以及接口电路

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH082106B2 (ja) 1986-11-10 1996-01-10 国際電信電話株式会社 動画像信号のハイブリツド符号化方式
US5107345A (en) * 1990-02-27 1992-04-21 Qualcomm Incorporated Adaptive block size image compression method and system
US6633611B2 (en) 1997-04-24 2003-10-14 Mitsubishi Denki Kabushiki Kaisha Method and apparatus for region-based moving image encoding and decoding
US6600836B1 (en) * 2000-01-28 2003-07-29 Qualcomm, Incorporated Quality based image compression
DE10022331A1 (de) 2000-05-10 2001-11-15 Bosch Gmbh Robert Verfahren zur Transformationscodierung von Bewegtbildsequenzen
JP4163618B2 (ja) 2001-08-28 2008-10-08 株式会社エヌ・ティ・ティ・ドコモ 動画像符号化伝送システム、動画像符号化伝送方法、これらに用いて好適な符号化装置、復号化装置、符号化方法、復号化方法及びプログラム
US6980596B2 (en) * 2001-11-27 2005-12-27 General Instrument Corporation Macroblock level adaptive frame/field coding for digital video content
CN1640146A (zh) 2002-03-05 2005-07-13 皇家飞利浦电子股份有限公司 用于分层视频编码的方法和系统
US6795584B2 (en) * 2002-10-03 2004-09-21 Nokia Corporation Context-based adaptive variable length coding for adaptive block transforms
EP1582063B1 (en) * 2003-01-07 2018-03-07 Thomson Licensing DTV Mixed inter/intra video coding of macroblock partitions
EP1639827B1 (en) 2003-06-25 2010-04-14 Thomson Licensing Fast mode-decision encoding for interframes
US7830963B2 (en) * 2003-07-18 2010-11-09 Microsoft Corporation Decoding jointly coded transform type and subblock pattern information
US8064520B2 (en) * 2003-09-07 2011-11-22 Microsoft Corporation Advanced bi-directional predictive coding of interlaced video
US7366462B2 (en) 2003-10-24 2008-04-29 Qualcomm Incorporated Method and apparatus for seamlessly switching reception between multimedia streams in a wireless communication system
US8116374B2 (en) * 2004-05-07 2012-02-14 Broadcom Corporation Method and system for generating a transform size syntax element for video decoding
WO2006028088A1 (ja) * 2004-09-08 2006-03-16 Matsushita Electric Industrial Co., Ltd. 動画像符号化方法および動画像復号化方法
DE102004056446A1 (de) 2004-11-23 2006-06-29 Siemens Ag Verfahren zur Transcodierung sowie Transcodiervorrichtung
US20060133495A1 (en) 2004-12-22 2006-06-22 Yan Ye Temporal error concealment for video communications
US20060203905A1 (en) * 2005-03-14 2006-09-14 Shih-Chang Hsia Video coding system
US8169953B2 (en) * 2005-05-17 2012-05-01 Qualcomm Incorporated Method and apparatus for wireless multi-carrier communications
US7881384B2 (en) * 2005-08-05 2011-02-01 Lsi Corporation Method and apparatus for H.264 to MPEG-2 video transcoding
EP3229472B1 (en) 2005-09-26 2020-07-01 Mitsubishi Electric Corporation Moving image coding apparatus
JP2007243427A (ja) 2006-03-07 2007-09-20 Nippon Hoso Kyokai <Nhk> 符号化装置及び復号化装置
US8750387B2 (en) * 2006-04-04 2014-06-10 Qualcomm Incorporated Adaptive encoder-assisted frame rate up conversion
CN101507280B (zh) 2006-08-25 2012-12-26 汤姆逊许可公司 用于降低分辨率划分的方法和装置
CN101175210B (zh) * 2006-10-30 2010-08-11 中国科学院计算技术研究所 用于视频预测残差系数解码的熵解码方法及熵解码装置
TWI392368B (zh) 2006-11-17 2013-04-01 Lg Electronics Inc 視訊訊號之解碼方法、解碼裝置及其電腦可讀取媒介
US8335261B2 (en) * 2007-01-08 2012-12-18 Qualcomm Incorporated Variable length coding techniques for coded block patterns
JP4901772B2 (ja) * 2007-02-09 2012-03-21 パナソニック株式会社 動画像符号化方法及び動画像符号化装置
US8428133B2 (en) * 2007-06-15 2013-04-23 Qualcomm Incorporated Adaptive coding of video block prediction mode
US8503527B2 (en) * 2008-10-03 2013-08-06 Qualcomm Incorporated Video coding with large macroblocks
US8483285B2 (en) * 2008-10-03 2013-07-09 Qualcomm Incorporated Video coding using transforms bigger than 4×4 and 8×8
US8619856B2 (en) * 2008-10-03 2013-12-31 Qualcomm Incorporated Video coding with large macroblocks
US20100086031A1 (en) * 2008-10-03 2010-04-08 Qualcomm Incorporated Video coding with large macroblocks

Also Published As

Publication number Publication date
KR101344115B1 (ko) 2013-12-20
HK1161464A1 (en) 2012-08-24
WO2010039733A3 (en) 2010-06-10
IL211766A0 (en) 2011-06-30
TW201028010A (en) 2010-07-16
AU2009298648B2 (en) 2014-05-15
TWI419567B (zh) 2013-12-11
RU2011117582A (ru) 2012-11-10
AU2009298648A1 (en) 2010-04-08
ZA201102426B (en) 2011-12-28
US8634456B2 (en) 2014-01-21
KR20110063858A (ko) 2011-06-14
IL211766A (en) 2015-04-30
CN102172025A (zh) 2011-08-31
CA2738037C (en) 2014-07-08
EP2347593A2 (en) 2011-07-27
MY165997A (en) 2018-05-21
US20100086029A1 (en) 2010-04-08
RU2502218C2 (ru) 2013-12-20
JP5384652B2 (ja) 2014-01-08
CA2738037A1 (en) 2010-04-08
CN102172025B (zh) 2015-01-07
WO2010039733A2 (en) 2010-04-08
BRPI0919839A2 (pt) 2015-12-15
JP2012504910A (ja) 2012-02-23

Similar Documents

Publication Publication Date Title
US11039171B2 (en) Device and method for video decoding video blocks
JP6672226B2 (ja) 大型マクロ・ブロックを用いたビデオ・コーディング
BRPI0919839B1 (pt) Método, aparelho e mídia de armazenamento não transitória legível por computador para codificação de vídeo com macroblocos grandes
US20110194613A1 (en) Video coding with large macroblocks
US20100086031A1 (en) Video coding with large macroblocks

Legal Events

Date Code Title Description
B25A Requested transfer of rights approved

Owner name: VELOS MEDIA INTERNATIONAL LIMITED (IE)

B15K Others concerning applications: alteration of classification

Ipc: H04N 19/103 (2014.01), H04N 19/147 (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]
B15K Others concerning applications: alteration of classification

Free format text: AS CLASSIFICACOES ANTERIORES ERAM: H04N 19/103 , H04N 19/147 , H04N 19/176 , H04N 19/46 , H04N 19/61, H04N 19/70

Ipc: H04N 19/103 (2014.01), H04N 19/147 (2014.01), H04N

Free format text: AS CLASSIFICACOES ANTERIORES ERAM: H04N 19/103 , H04N 19/147 , H04N 19/176 , H04N 19/46 , H04N 19/61 , H04N 19/70

Ipc: H04N 19/103 (2014.01), H04N 19/147 (2014.01), H04N

B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B07A Application suspended after technical examination (opinion) [chapter 7.1 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 29/09/2009, OBSERVADAS AS CONDICOES LEGAIS. PATENTE CONCEDIDA CONFORME ADI 5.529/DF, QUE DETERMINA A ALTERACAO DO PRAZO DE CONCESSAO.

B25A Requested transfer of rights approved

Owner name: QUALCOMM INCORPORATED (US)