BR112014010360B1 - Método e dispositivo para codificar dados de vídeo, método e dispositivo para decodificar dados de vídeo e memória legível por computador - Google Patents

Método e dispositivo para codificar dados de vídeo, método e dispositivo para decodificar dados de vídeo e memória legível por computador Download PDF

Info

Publication number
BR112014010360B1
BR112014010360B1 BR112014010360-7A BR112014010360A BR112014010360B1 BR 112014010360 B1 BR112014010360 B1 BR 112014010360B1 BR 112014010360 A BR112014010360 A BR 112014010360A BR 112014010360 B1 BR112014010360 B1 BR 112014010360B1
Authority
BR
Brazil
Prior art keywords
image
video
segments
blocks
slice
Prior art date
Application number
BR112014010360-7A
Other languages
English (en)
Other versions
BR112014010360A2 (pt
Inventor
Marta Karczewicz
Ye-Kui Wang
Muhammed Zeyd Coban
Original Assignee
Qualcomm Incorporated
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112014010360A2 publication Critical patent/BR112014010360A2/pt
Publication of BR112014010360B1 publication Critical patent/BR112014010360B1/pt

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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
    • 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/174Methods 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 slice, e.g. a line of blocks or a group of blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

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

Abstract

ENCHIMENTO DE SEGMENTOS EM UNIDADES NAL DE FATIA CODIFICADA Um codificador de vídeo divide uma imagem em uma pluralidade de partições de imagem, tal como blocos de pixels adjacentes ou ondas de processamento paralelo de frente de onda (WPP). As partições de imagem são associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem. O codificador de vídeo gera uma unidade de camada de abstração de rede de fatia codificada (NAL) que inclui representações codificadas dos blocos de árvore associados com uma fatia da imagem. Os blocos de árvore codificados são agrupados dentro a unidade NAL de fatia codificada em segmentos associados com partições diferentes das partições de imagem. O codificador de vídeo preenche um ou mais dos segmentos de tal modo que cada um dos segmentos começa em um limite de byte.

Description

[001] Esse pedido reivindica o benefício do Pedido Provisional dos Estados Unidos N° 61/557.259, depositado em 9 de novembro de 2011, cujo conteúdo integral é aqui incorporado mediante referência. Esse pedido também reivindica o benefício do Pedido Provisional dos Estados Unidos 61/555.932 depositado em 4 de novembro de 2011.
CAMPO TÉCNICO
[002] Essa revelação se refere à codificação de vídeo (isto é, codificação ou decodificação de dados de vídeo).
ANTECEDENTES
[003] Capacidades de vídeo digital podem ser incorporadas em uma ampla gama de dispositivos, incluindo televisões digitais, sistemas digitais de difusão direta, sistemas de difusão sem fio, assistentes pessoais digitais (PDAs), computadores de mesa ou laptop, computadores tablet, leitores de livro eletrônico, câmeras digitais, dispositivos digitais de gravação, dispositivos de reprodução de mídia digital, dispositivo de videogame, consoles de videogame, telefones de rádio via satélite ou celulares, dispositivos de teleconferência de vídeo, e semelhantes. Os dispositivos de vídeo digital implementam técnicas de compactação de vídeo tais como aquelas descritas nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação Avançada de Vídeo (AVC), o padrão de Codificação de Vídeo de Alta Eficiência (HEVC) atualmente em desenvolvimento, e extensões de tais padrões para transmitir, receber, e armazenar mais eficientemente informação de vídeo digital.
[004] Técnicas de compactação de vídeo realizam predição espacial (imagem intra) e/ou predição temporal (imagem inter) para reduzir ou remover a redundância inerente nas sequências de vídeo. Para codificação de vídeo baseada em bloco, uma fatia de vídeo (isto é, um quadro de vídeo ou uma porção de um quadro de vídeo) pode ser dividida em blocos de vídeo, os quais também podem ser referidos como treeblocks, unidades de codificação (CUs) e/ou modos de codificação. Os blocos de vídeo em uma fatia codificada intra (I) de uma imagem são codificados utilizando a predição espacial com relação às amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia codificada inter (P ou B) de uma imagem podem usar predição espacial com relação às amostras de referência em blocos vizinhos na mesma imagem ou predição temporal com relação às amostras de referência em outras imagens de referência. As imagens podem ser referidas como quadros, e as imagens de referência podem ser referidas como quadros de referência.
SUMÁRIO
[005] Em geral, essa revelação descreve técnicas para codificar e decodificar dados de vídeo. Um codificador de vídeo pode dividir uma imagem em uma pluralidade de partições de imagem. As partições de imagem incluem subconjuntos não sobrepostos dos blocos de árvore da imagem. Tipos de exemplo de partições de imagem incluem pequenos blocos (tiles) e ondas de processamento paralelas de frente de onda (WPP). O codificador de vídeo pode gerar uma unidade de camada de abstração de rede (NAL) de fatia codificada que inclui representações codificadas dos blocos de árvore associados com uma fatia da imagem. O codificador de vídeo gera a unidade NAL de fatia codificada de tal modo que os blocos de árvore codificados são agrupados dentro da unidade NAL de fatia codificada mediante as partições de imagem às quais pertencem os blocos de árvore. O codificador de vídeo pode encher um ou mais dos segmentos de tal modo que cada um dos segmentos começa em um limite de byte. Um decodificador de vídeo pode decodificar os blocos de árvore codificados da unidade NAL de fatia codificada.
[006] Em um aspecto, essa revelação descreve um método para codificar dados de vídeo. O método compreende dividir uma imagem em uma pluralidade de partições de imagem. A imagem tem uma pluralidade de blocos de árvore. As partições de imagem são associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem. O método também compreende gerar uma unidade NAL de fatia codificada que inclui representações codificadas dos blocos de árvore que são associados com uma fatia da imagem, as representações codificadas dos blocos de árvore agrupadas dentro da unidade NAL de fatia codificada em segmentos associados com partições diferentes das partições de imagem, em que um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte.
[007] Em outro aspecto, essa revelação descreve um método de decodificar dados de vídeo. O método compreende armazenar uma unidade NAL de fatia codificada que inclui representações codificadas de blocos de árvore associados com uma fatia de uma imagem. A imagem é dividida em uma pluralidade de partições de imagem. As representações codificadas dos blocos de árvore são agrupadas em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte. O método também compreende a decodificação das representações codificadas dos blocos de árvore.
[008] Em outro aspecto, essa revelação descreve um dispositivo de codificação de vídeo que codifica os dados de vídeo. O dispositivo de codificação de vídeo compreende um ou mais processadores configurados para dividir uma imagem em uma pluralidade de partições de imagem. A imagem tem uma pluralidade de blocos de árvore. As partições de imagem são associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem. Um ou mais processadores também são configurados para gerar uma unidade NAL de fatia codificada que inclui representações codificadas dos blocos de árvore que são associadas com uma fatia da imagem. As representações codificadas dos blocos de árvore são agrupadas dentro da unidade NAL de fatia codificada em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte.
[009] Em outro aspecto, essa revelação descreve um dispositivo de decodificação de vídeo que decodifica os dados de vídeo. O dispositivo de decodificação de vídeo compreende uma memória que armazena uma unidade NAL de fatia codificada que inclui representações codificadas de blocos de árvore associados com uma fatia de uma imagem. A imagem é dividida em uma pluralidade de partições de imagem. As representações codificadas dos blocos de árvore são agrupadas em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte. O dispositivo de decodificação de vídeo compreende também um ou mais processadores que são configurados para decodificar as representações codificadas dos blocos de árvore.
[0010] Em outro aspecto, essa revelação descreve um produto de programa de computador que compreende um ou mais meios de armazenamento legíveis por computador que armazenam instruções que, quando executadas por um ou mais processadores, configuram um dispositivo de codificação de vídeo para dividir uma imagem em uma pluralidade de partições de imagem. A imagem tem uma pluralidade de blocos de árvore. As partições de imagem são associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem. As instruções também configuram o dispositivo de codificação de vídeo para gerar uma unidade NAL de fatia codificada que inclui representações codificadas dos blocos de árvore que são associados com uma fatia da imagem. As representações codificadas dos blocos de árvore são agrupadas dentro da unidade NAL de fatia codificada em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte.
[0011] Em outro aspecto, essa revelação descreve um produto de programa de computador que compreende um ou mais meios de armazenamento legíveis por computador que armazenam instruções que, quando executadas por um ou mais processadores, configuram um dispositivo de decodificação de vídeo para armazenar uma unidade NAL de fatia codificada que inclui representações codificadas de blocos de árvore associados com uma fatia de uma imagem. A imagem é dividida em uma pluralidade de partições de imagem. As representações codificadas dos blocos de árvore são agrupadas em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte. As instruções também configuram o dispositivo de decodificação de vídeo para decodificar as representações codificadas dos blocos de árvore.
[0012] Em outro aspecto, essa revelação descreve um dispositivo de codificação de vídeo que codifica os dados de vídeo. O dispositivo de codificação de vídeo compreende meios para dividir uma imagem em uma pluralidade de partições de imagem. A imagem tem uma pluralidade de blocos de árvore. As partições de imagem são associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem. O dispositivo de codificação de vídeo compreende também meios para gerar uma unidade NAL de fatia codificada que inclui representações codificadas dos blocos de árvore que são associados com uma fatia da imagem. As representações codificadas dos blocos de árvores são agrupadas dentro da unidade NAL de fatia codificada em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte.
[0013] Em outro aspecto, essa revelação descreve um dispositivo de decodificação de vídeo que decodifica os dados de vídeo. O dispositivo de decodificação de vídeo compreende meios para armazenar uma unidade NAL de fatia codificada que inclui representações codificadas de blocos de árvore associados com uma fatia de uma imagem. A imagem é dividida em uma pluralidade de partições de imagem. As representações codificadas dos blocos de árvore são agrupadas em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte. O dispositivo de decodificação de vídeo compreende meios para decodificar as representações codificadas dos blocos de árvore.
[0014] Os detalhes e um ou mais exemplos são apresentados nos desenhos anexos e na descrição abaixo. Outras características, objetos e vantagens serão evidentes a partir da descrição e dos desenhos, e a partir das reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0015] A Figura 1 é um diagrama de blocos ilustrando um sistema de codificação de vídeo exemplar que pode utilizar as técnicas dessa revelação.
[0016] A Figura 2 é um diagrama de blocos ilustrando um codificador de vídeo exemplar que é configurado para implementar as técnicas dessa revelação.
[0017] A Figura 3 é um diagrama de blocos ilustrando um decodificador de vídeo exemplar que é configurado para implementar as técnicas dessa revelação.
[0018] A Figura 4 é um fluxograma que ilustra uma operação exemplar para gerar os dados de fatia para uma fatia de uma imagem.
[0019] A Figura 5 é um fluxograma que ilustra uma operação exemplar para decodificar uma unidade NAL de fatia codificada.
[0020] A Figura 6 é um diagrama conceptual que ilustra processamento paralelo de frente de onda.
[0021] A Figura 7 é um diagrama conceptual que ilustra uma ordem de codificação exemplar quando uma imagem é dividida em uma pluralidade de pequenos blocos.
[0022] A Figura 8 é um diagrama conceptual que ilustra uma unidade NAL de fatia codificada exemplar.
DESCRIÇÃO DETALHADA
[0023] Uma imagem inclui uma pluralidade de blocos de árvore. Os blocos de árvore são associados com blocos de vídeo bidimensional dentro da imagem. Um codificador de vídeo divide a imagem em uma pluralidade de partições de imagem. Por exemplo, o codificador de vídeo pode dividir a imagem em pequenos blocos ou ondas de processamento paralelo de frente de onda (WPP). Em outras palavras, essa revelação pode usar o termo “partição de imagem” para se referir genericamente aos pequenos blocos ou ondas WPP. As partições de imagem são associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem. Por exemplo, cada bloco de árvore da imagem pode ser associado exatamente com uma das partições de imagem.
[0024] O codificador de vídeo pode gerar uma unidade de Camada de Abstração de Rede (NAL) de fatia codificada. A unidade NAL de fatia codificada pode incluir representações codificadas de cada bloco de árvore associado com uma fatia da imagem. Essa revelação pode se referir a uma representação codificada de um bloco de árvore como um bloco de árvore codificado. Um bloco de árvore codificado pode incluir uma sequência de bits que representa o bloco de vídeo associado com um bloco de árvore. A sequência de bits em um bloco de árvore codificado pode representar uma sequência de elementos de sintaxe.
[0025] O codificador de vídeo pode agrupar os blocos de árvore codificados dentro da unidade NAL de fatia codificada em segmentos. Os segmentos são associados com diferentes partições das partições de imagem. Cada um dos segmentos pode ser uma série consecutiva de bits, tal como os bits representando uma série de um ou mais blocos de árvore codificados e dados associados. Assim, a unidade NAL de fatia codificada pode incluir cada bloco de árvore codificado associado com uma primeira partição de imagem seguida por cada bloco de árvore codificado associado com uma segunda partição de imagem, seguida por cada bloco de árvore codificado associado com uma terceira partição de imagem, e assim por diante.
[0026] De acordo com as técnicas dessa revelação, o codificador de vídeo pode preencher um ou mais dos segmentos de tal modo que cada um dos segmentos começa em um limite de byte. Quando o codificador de vídeo preenche um segmento, o codificador de vídeo pode anexar bits de enchimento ao segmento. Os bits de enchimento podem não ter qualquer significado semântico, mas podem servir para garantir que um próximo segmento comece em um limite de byte. Desse modo, o codificador de vídeo pode prover alinhamento de bytes dos pequenos blocos ou ondas WPP quando os pequenos blocos ou ondas WPP são incluídos em uma unidade NAL de fatia codificada para fins de processamento paralelo.
[0027] Um decodificador de vídeo pode armazenar a unidade NAL de fatia codificada em memória endereçada por byte. O decodificador de vídeo pode então atribuir dois ou mais dos segmentos aos fluxos de execução de decodificação diferentes que operam em paralelo. Cada fluxo de execução de decodificação decodifica os blocos de árvore decodificados do segmento atribuído ao fluxo de execução de decodificação. Como cada um dos segmentos começa em um limite de byte, o decodificador de vídeo pode prover um endereço de memória de um segmento para um fluxo de execução de decodificação ao atribuir o segmento ao fluxo de execução de decodificação. Desse modo, garantindo- se que cada um dos segmentos comece em um limite de byte pode possibilitar que o decodificador de vídeo decodifique os segmentos em paralelo de uma forma mais simples do que quando os segmentos podem começar em posições de limite de não byte.
[0028] Isso pode ser o oposto dos codificadores de vídeo convencionais e decodificadores de vídeo convencionais que não garantem que os segmentos comecem em limites de byte. Como os segmentos podem não começar em limites de byte, um decodificador de vídeo convencional que utiliza endereçamento de memória no sentido de byte pode ser incapaz de decodificar os blocos de árvore codificados nos segmentos em paralelo. Um decodificador de vídeo convencional pode utilizar endereçamento de memória no sentido de bit ou endereçamento no sentido de byte mais no sentido de bit para possibilitar a decodificação dos blocos de árvore codificados nos segmentos em paralelo, mas com implementação e complexidades de computação aumentadas.
[0029] Os desenhos anexos ilustram exemplos. Os elementos indicados pelos números de referência nos desenhos anexos correspondem aos elementos indicados pelos números de referência semelhantes na descrição seguinte. Nessa revelação, os elementos que têm nomes que começam com palavras ordinais (por exemplo, “primeiro”, “segundo”, “terceiro” e assim por diante) não significam necessariamente que os elementos têm uma ordem específica. Mais propriamente, tais termos ordinais são usados meramente para se referir aos diferentes elementos de um mesmo tipo ou de tipo similar. Adicionalmente, na descrição seguinte, a “imagem atual” pode se referir a uma imagem que está sendo atualmente codificada ou decodificada.
[0030] A Figura 1 é um diagrama de blocos que ilustra um sistema de codificação de vídeo exemplar 10 que pode utilizar as técnicas dessa revelação. Conforme aqui descrito, o termo “codificador de vídeo” se refere genericamente tanto aos codificadores de vídeo como aos decodificadores de vídeo. Nessa revelação, os termos “codificação de vídeo” ou “codificação” pode se referir geralmente à codificação de vídeo e decodificação de vídeo.
[0031] Conforme mostrado na Figura 1, o sistema de codificação de vídeo 10 inclui um dispositivo de origem 12 e um dispositivo de destino 14. O dispositivo de origem 12 gera dados de vídeo codificado. Consequentemente, o dispositivo de origem 12 pode ser referido como um dispositivo de codificação de vídeo. O dispositivo de destino 14 pode decodificar os dados de vídeo codificados gerados pelo dispositivo de origem 12. Consequentemente, o dispositivo de destino 14 pode ser referido como um dispositivo de decodificação de vídeo. O dispositivo de origem 12 e o dispositivo de destino 14 podem ser exemplos de dispositivos de codificação de vídeo.
[0032] O dispositivo de origem 12 e o dispositivo de destino 14 podem compreender uma ampla gama de dispositivos, incluindo computadores de mesa, dispositivos de computação móvel, computadores notebook (por exemplo, laptop), computadores tablet, conversores de sinais de frequência, aparelhos telefônicos de mão, tal como os assim chamados telefones “inteligentes”, televisões, câmeras, dispositivos de exibição, aparelhos de reprodução de mídia digital, consoles de jogos de vídeo, computadores em carros, ou semelhante. Em alguns exemplos, o dispositivo de origem 12 e o dispositivo de destino 14 podem ser equipados para comunicação sem fio.
[0033] O dispositivo de destino 14 pode receber dados de vídeo codificado a partir do dispositivo de origem 12 por intermédio de um canal 16. O canal 16 pode compreender um tipo de meio ou dispositivo capaz de mover os dados de vídeo codificados a partir do dispositivo de origem 12 para o dispositivo de destino 14. Em um exemplo, o canal 16 pode compreender um meio de comunicação que possibilita ao dispositivo de origem 12 transmitir os dados de vídeo codificado diretamente para o dispositivo de destino 14 em tempo real. Nesse exemplo, o dispositivo de origem 12 pode modular os dados de vídeo codificado de acordo com um padrão de comunicação, tal como um protocolo de comunicação sem fio, e pode transmitir os dados de vídeo modulado para o dispositivo de destino 14. O meio de comunicação pode compreender um meio de comunicação sem fio ou cabeado, tal como um espectro de radiofrequência (RF) ou uma ou mais linhas físicas de transmissão. O meio de comunicação pode formar parte de uma rede baseada em pacote, tal como uma rede de área local, uma rede de área remota, ou uma rede global tal como a Internet. O meio de comunicação pode incluir roteadores, comutadores, estações base, ou outro equipamento que facilite a comunicação a partir do dispositivo de origem 12 para o dispositivo de destino 14.
[0034] Em outro exemplo, o canal 16 pode corresponder a um meio de armazenamento que armazena os dados de vídeo codificado gerados pelo dispositivo de origem 12. Nesse exemplo, o dispositivo de destino 14 pode acessar o meio de armazenamento por intermédio de acesso de disco ou acesso de cartão. O meio de armazenamento pode incluir diversos meios de armazenamento de dados acessados localmente tal como discos Blu-ray, DVDs, CD-ROMs, memória flash, ou outros meios de armazenamento digitais adequados para armazenar dados de vídeo codificado. Em um exemplo adicional, o canal 16 pode incluir um servidor de arquivo ou outro dispositivo de armazenamento intermediário que armazena o vídeo codificado gerado pelo dispositivo de origem 12. Nesse exemplo, o dispositivo de destino 14 pode acessar os dados de vídeo codificados armazenados no servidor de arquivo ou outro dispositivo de armazenamento intermediário por intermédio de fluxo contínuo ou transferência descendente. O servidor de arquivo pode ser um tipo de servidor capaz de armazenar os dados de vídeo codificados e transmitir os dados de vídeo codificados para o dispositivo de destino 14. Servidores de arquivo exemplares incluem servidores de rede (por exemplo, para um sítio de rede), servidores de protocolo de transferência de arquivo (FTP), dispositivos de armazenamento anexados à rede (NAS), e unidades de disco local. O dispositivo de destino 14 pode acessar os dados de vídeo codificado através de uma conexão de dados padrão, incluindo uma conexão de Internet. Tipos exemplares de conexões de dados podem incluir canais sem fio (por exemplo, conexões Wi-Fi), conexões cabeadas (por exemplo, DSL, modem a cabo, etc.) ou combinações de ambos que são adequadas para acessar os dados de vídeo codificado armazenados em um servidor de arquivo. A transmissão dos dados de vídeo codificado a partir do servidor de arquivo pode ser uma transmissão de fluxo contínuo, uma transmissão de transferência descendente, ou uma combinação das duas.
[0035] As técnicas dessa revelação não são limitadas às aplicações sem fio ou configurações. As técnicas podem ser aplicadas à codificação de vídeo em suporte de qualquer uma de uma variedade de aplicações de multimídia, tal como transmissões 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 de fluxo contínuo, por exemplo, por intermédio da Internet, codificação de vídeo digital para armazenamento em um meio de armazenamento de dados, decodificação de vídeo digital armazenado em um meio de armazenamento de dados, ou outras aplicações. Em alguns exemplos, o sistema de codificação de vídeo 10 pode ser configurado para suportar transmissão de vídeo de via única ou de duas vias para suportar aplicações tais como fluxo contínuo de vídeo, reprodução de vídeo, transmissão de vídeo e/ou telefonia de vídeo.
[0036] No exemplo da Figura 1, o dispositivo de origem 12 inclui uma fonte de vídeo 18, codificador de vídeo 20, e uma interface de saída 22. Em alguns casos, a interface de saída 22 pode incluir um modulador/demodulador (modem) e/ou um transmissor. No dispositivo de origem 12, a fonte de vídeo 18 pode incluir uma fonte tal como um dispositivo de captura de vídeo, por exemplo, uma câmera de vídeo, um arquivo de vídeo contendo dados de vídeo previamente capturados, uma interface de alimentação de vídeo para receber os dados de vídeo a partir de um provedor de conteúdo de vídeo, e/ou um sistema gráfico de computador para gerar os dados de vídeo, ou uma combinação de tais fontes.
[0037] O codificador de vídeo 20 pode codificar os dados de vídeo capturados, pré-capturados, ou gerados por computador. Os dados de vídeo codificados podem ser transmitidos diretamente para o dispositivo de destino 14 por intermédio da interface de saída 22 do dispositivo de origem 12. Os dados de vídeo codificados também podem ser armazenados em um meio de armazenamento ou em um servidor de arquivo para posterior acesso pelo dispositivo de destino 14 para decodificação e/ou reprodução.
[0038] No exemplo da Figura 1, o dispositivo de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30, e um dispositivo de exibição 32. Em alguns casos, a interface de entrada 28 pode incluir um receptor e/ou um modem. A interface de entrada 28 do dispositivo de destino 14 recebe os dados de vídeo codificados através do canal 16. Os dados de vídeo codificado podem incluir uma variedade de elementos de sintaxe gerados pelo codificador de vídeo 20 que representam os dados de vídeo. Tais elementos de sintaxe podem ser incluídos com os dados de vídeo codificado transmitidos em um meio de comunicação, armazenados em um meio de armazenamento, ou armazenados em um servidor de arquivo.
[0039] O dispositivo de exibição 32 pode ser integrado com, ou pode ser externo ao dispositivo de destino 14. Em alguns exemplos, o dispositivo de destino 14 pode incluir um dispositivo de exibição integrado e também pode ser configurado para estabelecer interface com um dispositivo de exibição externo. Em outros exemplos, o dispositivo de destino 14 pode ser um dispositivo de exibição. Em geral, o dispositivo de exibição 32 exibe os dados de vídeo decodificados a um usuário. O dispositivo de exibição 32 pode compreender qualquer um de uma variedade de dispositivos de exibição tal como um display de cristal líquido (LCD), um display de plasma, um display de diodo de emissão de luz orgânica (OLED), ou outro tipo de dispositivo de exibição.
[0040] O codificador de vídeo 20 e o decodificador de vídeo 30 podem operar de acordo com um padrão de compactação de vídeo, tal como o padrão de Codificação de Vídeo de Alta Eficiência (HEVC) atualmente em desenvolvimento, e pode estar de acordo com um Modelo de Teste HEVC (HM). Um esboço recente do padrão HEVC vindouro, referido como “HEVC Working Draft 6” ou “WD6”, é descrito no documento JCTVC-H1003, Bross e outros, “High efficiency video coding (HEVC) text specification draft 6”, Joint Collaborative Team on Video Coding (JCT-VC) de ITU-T SG16 WP3 e ISSO/IEC JTC1/SC29/WG11, 8° Encontro: San Jose, California, USA, February, 2012, de 1° de maio de 2012, o qual pode ser baixado a partir do http://phenix.int- evry.fr/jct/doc_end_user/documents/8_San%20Jose/wg11/JCTVC- H1003-v22.zip, cujo conteúdo integral é aqui incorporado mediante referência. Alternativamente, o codificador de vídeo 20 e o decodificador de vídeo 30 podem operar de acordo com outros padrões patenteados ou da indústria, tal como o padrão ITU-T H.264, referido alternativamente como MPEG-4, Parte 10, Codificação de Vídeo Avançada (AVC), ou extensões de tais padrões, quando técnicas de divisão de imagem como pequenos blocos ou processamento paralelo de frente de onda são incluídas. As técnicas dessa revelação, contudo, não são limitadas a qualquer padrão ou técnica de codificação específica. Outros exemplos de padrões e técnicas de compactação de vídeo incluem MPEG-2, ITU-T H.263 e formatos de compactação de fonte aberta ou patenteados tal como VP8 e formatos relacionados, quando técnicas de divisão de imagem como pequenos blocos ou processamento paralelo de frente de onda são incluídas.
[0041] Embora não mostrado no exemplo da Figura 1, o codificador de vídeo 20 e o decodificador de vídeo 30 podem ser integrados individualmente com um codificador de áudio e decodificador, e podem incluir unidades apropriadas de multiplexação/demultiplexação, ou outro hardware e software, para lidar com codificação tanto de áudio como de vídeo em um fluxo de dados comum ou fluxos de dados separados. Se aplicável, em alguns exemplos, as unidades de multiplexação-demultiplexação podem estar de acordo com o protocolo de multiplexador ITU H.223, ou outros protocolos tais como o protocolo de datagrama de usuários (UDP).
[0042] Outra vez, a Figura 1 é apenas um exemplo e as técnicas dessa revelação podem ser aplicadas às configurações de codificação de vídeo (por exemplo, codificação de vídeo ou decodificação de vídeo) que não incluem necessariamente qualquer comunicação de dados entre os dispositivos de codificação e de decodificação. Em outros exemplos, os dados podem ser recuperados a partir de uma memória local, transferidos em fluxo contínuo através de uma rede, ou semelhante. Um dispositivo de codificação pode codificar e armazenar os dados em memória, e/ou um dispositivo de decodificação pode recuperar e decodificar os dados a partir da memória. Em muitos exemplos, a codificação e a decodificação são realizadas por dispositivos que não se comunicam entre si, mas simplesmente codificam os dados para memória e/ou recuperam e decodificam os dados a partir da memória.
[0043] O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser implementados individualmente como qualquer uma de uma variedade de conjuntos de circuitos adequados, tal como um ou mais micro processadores, processadores de sinal digital (DSPs), circuitos integrados de aplicação específica (ASICs), arranjos de portas programáveis no campo (FPGAs), lógica discreta, hardware, ou qualquer combinação dos mesmos. Quando as técnicas são implementadas parcialmente em software, um dispositivo pode armazenar as instruções para o software em um meio de armazenamento legível por computador não transitório, adequado e pode executar as instruções em hardware utilizando um ou mais processadores para realizar as técnicas dessa revelação. Cada 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 um dispositivo respectivo.
[0044] Conforme mencionado resumidamente acima, o codificador de vídeo 20 codifica os dados de vídeo. Os dados de vídeo podem compreender uma ou mais imagens. Cada uma das imagens é uma imagem estática formando parte de um vídeo. Em alguns casos, uma imagem pode ser referida como um “quadro” de vídeo ou um “campo” de vídeo. Quando o codificador de vídeo 20 codifica os dados de vídeo, o codificador de vídeo 20 pode gerar um fluxo de bits. O fluxo de bits pode incluir uma sequência de bits que forma uma representação codificada dos dados de vídeo. O fluxo de bits pode incluir imagens codificadas e dados associados. Uma imagem codificada é uma representação codificada de uma imagem.
[0045] Para gerar o fluxo de bits, o codificador de vídeo 20 pode realizar operações de codificação em cada imagem nos dados de vídeo. Quando o codificador de vídeo 20 realiza operações de codificação nas imagens, o codificador de vídeo 20 pode gerar uma série de imagens codificadas e dados associados. Os dados associados podem incluir conjuntos de parâmetros de sequência, conjuntos de parâmetro de imagem, conjuntos de parâmetros de adaptação, e outras estruturas de sintaxe. Um conjunto de parâmetros de sequência (SPS) pode conter parâmetros aplicáveis a zero ou mais sequências de imagens. Sequências de imagens podem ser referidas como sequências de vídeo codificado, como em H.264/AVC e HEVC. Um conjunto de parâmetros de imagem (PPS) pode conter parâmetros aplicáveis a zero ou mais imagens. Um conjunto de parâmetros de adaptação (APS) pode conter parâmetros aplicáveis a zero ou mais imagens. Os parâmetros em um APS podem ser parâmetros que mais provavelmente mudam do que os parâmetros em um PPS.
[0046] Para gerar uma imagem codificada, o codificador de vídeo 20 pode dividir uma imagem em blocos de vídeo igualmente dimensionados. O bloco de vídeo pode ser um arranjo bidimensional de amostras. Cada um dos blocos de vídeo é associado a um bloco de árvore. Em alguns casos, um bloco de árvore pode ser referido como uma unidade de codificação maior (LCU) ou um bloco de árvore de codificação. Os blocos de árvore de HEVC podem ser amplamente análogos aos macro blocos dos padrões anteriores, tal como H.264/AVC. Contudo, um bloco de árvore não é necessariamente limitado a um tamanho específico e pode incluir uma ou mais unidades de codificação (CUs). O codificador de vídeo 20 pode usar divisão quadtree para dividir os blocos de vídeo de blocos de árvore em blocos de vídeo associados com as CUs, por essa razão o nome “blocos de árvore”.
[0047] Em alguns exemplos, o codificador de vídeo 20 pode dividir uma imagem em uma pluralidade de fatias. Cada uma das fatias pode incluir um número inteiro de blocos de árvore consecutivamente codificados. Em alguns casos, cada uma das fatias pode incluir um número inteiro de CUs consecutivamente codificadas. Como parte da realização de uma operação de codificação em uma imagem, o codificador de vídeo 20 pode realizar operações de codificação em cada fatia da imagem. Quando o codificador de vídeo 20 realiza uma operação de codificação em uma fatia, o codificador de vídeo 20 pode gerar dados codificados associados com a fatia. Os dados codificados associados com a fatia podem ser referidos como uma “fatia codificada”.
[0048] Para gerar uma fatia codificada, o codificador de vídeo 20 pode realizar operações de codificação em cada bloco de árvore em uma fatia. Quando o codificador de vídeo 20 realiza uma operação de codificação em um bloco de árvore, o codificador de vídeo 20 pode gerar um bloco de árvore codificado. O bloco de árvore codificado pode compreender dados representando uma versão codificada do bloco de árvore.
[0049] Quando o codificador de vídeo 20 gera uma fatia codificada, o codificador de vídeo 20 pode realizar operações de codificação (isto é, codificar) os blocos de árvore na fatia de acordo com uma ordem de varredura por rastreio. Em outras palavras, o codificador de vídeo 20 pode codificar os blocos de árvore da fatia em uma ordem que prossegue da esquerda para a direita através de uma fileira mais elevada dos blocos de árvore na fatia, então prossegue da esquerda para a direita através de uma próxima fileira inferior de blocos de árvore, e assim por diante até que o codificador de vídeo 20 tenha codificado cada um dos blocos de árvore na fatia.
[0050] Como um resultado da codificação dos blocos de árvore de acordo com a ordem de varredura por rastreio, os blocos de árvore acima e à esquerda de um determinado bloco de árvore podem ter sido codificados, mas os blocos de árvore abaixo e à direita do bloco de árvore determinado ainda não foram codificados. Consequentemente, o codificador de vídeo 20 pode ser capaz de acessar informação gerada pelos blocos de árvore de codificação acima e à esquerda do bloco de árvore determinado quando codificando o bloco de árvore determinado. Contudo, o codificador de vídeo 20 pode ser incapaz de acessar informação gerada pela codificação dos blocos de árvore abaixo e à direita do bloco de árvore determinado quando codificando o bloco de árvore determinado.
[0051] Para gerar um bloco de árvore codificado, o codificador de vídeo 20 pode realizar de forma recursiva divisão quadtree no bloco de vídeo do bloco de árvore para dividir o bloco de vídeo em blocos de vídeo progressivamente menores. Cada um dos blocos de vídeo menores pode ser associado com uma CU diferente. Por exemplo, o codificador de vídeo 20 pode dividir o bloco de vídeo de um bloco de árvore em quatro sub-blocos igualmente dimensionados, dividir um ou mais dos sub-blocos em quatro sub-sub-blocos igualmente dimensionados, e assim por diante. Uma CU dividida pode ser uma Cu cujo bloco de vídeo é dividido em blocos de vídeo associados com outras CUs. Uma CU não dividida pode ser uma CU cujo bloco de vídeo não é dividido em blocos de vídeo associados com outras CUS.
[0052] Um ou mais elementos de sintaxe no fluxo de bits pode indicar um número máximo de vezes que o codificador de vídeo 20 pode dividir o bloco de vídeo de um bloco de árvore. Um bloco de vídeo de uma CU pode ser de formato quadrado. O tamanho do bloco de vídeo de uma CU (isto é, o tamanho da CU) pode variar de 8x8 pixels até o tamanho de um bloco de vídeo de um bloco de árvore (isto é, o tamanho do bloco de árvore) com um máximo de 64x64 pixels ou maior.
[0053] O codificador de vídeo 20 pode realizar operações de codificação (isto é, codificação) em cada CU do bloco de árvore de acordo com uma ordem de varredura z. Em outras palavras, o codificador de vídeo 20 pode codificar uma CU superior esquerda, uma CU superior direita, uma CU inferior esquerda, e então uma CU direita inferior, nessa ordem. Quando o codificador de vídeo 20 realiza uma operação de codificação em uma CU dividida, o codificador de vídeo 20 pode codificar as CUs associadas com os sub-blocos do bloco de vídeo da CU dividida de acordo com a ordem de varredura z. Em outras palavras, o codificador de vídeo 20 pode codificar uma CU associada com um sub-bloco superior esquerdo, uma CU associada com um sub-bloco superior direito, uma CU associada com um sub- bloco inferior esquerdo, e então uma CU associada com um sub-bloco inferior direito, nessa ordem.
[0054] Como um resultado da codificação das CUs de um bloco de árvore de acordo com uma ordem de varredura z, as CUs acima e à esquerda, acima e à direita, esquerda, e abaixo e à esquerda de uma CU podem ter sido codificadas. As CUs abaixo e à direita da CU determinada ainda não foram codificadas. Consequentemente, o codificador de vídeo 20 pode ser capaz de acessar informação gerada mediante codificação de algumas CUs que são adjacentes a CU determinada ao codificar a CU determinada. Contudo, o codificador de vídeo 20 pode ser incapaz de acessar informação gerada mediante codificação de outras CUs que estejam adjacentes a CU determinada quando da codificação da CU determinada.
[0055] Quando o codificador de vídeo 20 codifica uma CU não dividida, o codificador de vídeo 20 pode gerar uma ou mais unidades de predição (PUs) para a CU. Cada uma das PUs da CU pode ser associada com um bloco de vídeo diferente dentro do bloco de vídeo da CU. O codificador de vídeo 20 pode gerar um bloco de vídeo predito para cada PU da CU. O bloco de vídeo predito de uma PU pode ser um bloco de amostras. O codificador de vídeo 20 pode usar predição intra ou predição inter para gerar o bloco de vídeo predito para uma PU.
[0056] Quando o codificador de vídeo 20 utiliza predição intra para gerar o bloco de vídeo predito de uma PU, o codificador de vídeo 20 pode gerar o bloco de vídeo predito da PU com base nas amostras decodificadas da imagem associada com a PU. Se o codificador de vídeo 20 utiliza intra predição para gerar os blocos de vídeo preditos das PUs de uma CU, a CU é uma CU intra predita. Quando o codificador de vídeo 20 utiliza inter predição para gerar o bloco de vídeo predito da PU, o codificador de vídeo 20 pode gerar o bloco de vídeo predito da PU com base nas amostras decodificadas de uma ou mais imagens exceto a imagem associada com a PU. Se o codificador de vídeo 20 utiliza inter predição para gerar os blocos de vídeo preditos das PUs de uma CU, a CU é uma CU inter predita.
[0057] Adicionalmente, quando o codificador de vídeo 20 utiliza inter predição para gerar um bloco de vídeo predito para uma PU, o codificador de vídeo 20 pode gerar informação de movimento para a PU. A informação de movimento para uma PU pode indicar um ou mais blocos de referência da PU. Cada bloco de referência da PU pode ser um bloco de vídeo dentro de uma imagem de referência. A imagem de referência pode ser uma imagem exceto a imagem associada com a PU. Em alguns casos, um bloco de referência de uma PU também pode ser referido como a “amostra de referência” da PU. O codificador de vídeo 20 pode gerar o bloco de vídeo predito para a PU com base nos blocos de referência da PU.
[0058] Após o codificador de vídeo 20 gerar blocos de vídeo preditos para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar dados residuais para a CU com base nos blocos de vídeo preditos para as PUs da CU. Os dados residuais para a CU podem indicar diferenças entre amostras nos blocos de vídeo preditos para as PUs da CU e o bloco de vídeo original da CU.
[0059] Adicionalmente, como parte da realização de uma operação de codificação em uma CU não dividida, o codificador de vídeo 20 pode realizar divisão quadtree recursiva nos dados residuais da CU para dividir os dados residuais da CU em um ou mais blocos de dados residuais (isto é, blocos de vídeo residuais) associados com as unidades de transformada (TUs) da CU. Cada TU de uma CU pode ser associada com um bloco de vídeo residual diferente.
[0060] O codificador de vídeo 20 pode aplicar uma ou mais transformadas aos blocos de vídeo residuais associados com as TUs para gerar blocos de coeficientes de transformada (isto é, blocos de coeficientes de transformada) associados com as TUs. De forma conceptual, um bloco de coeficiente de transformada pode ser uma matriz bidimensional (2D) de coeficientes de transformada.
[0061] Após gerar um bloco de coeficiente de transformada, o codificador de vídeo 20 pode realizar um processo de quantização no bloco de coeficiente de transformada. A quantização geralmente se refere a um processo no qual os coeficientes de transformada são quantizados para possivelmente reduzir a quantidade de dados usados para representar os coeficientes de transformada, proporcionando compactação adicional. O processo de quantização pode reduzir a profundidade de bis associada com alguns ou todos os coeficientes de transformada. Por exemplo, um coeficiente de transformada de n bits pode ser arredondado para baixo para um coeficiente de transformada m bits durante a quantização, onde n é maior do que m.
[0062] O codificador de vídeo 20 pode associar cada CU com um valor de parâmetro de quantização (QP). O valor QP associado com uma CU pode determinar a forma como o codificador de vídeo 20 quantiza os blocos de coeficiente de transformada associados com a CU. O codificador de vídeo 20 pode ajustar o grau de quantização aplicado aos blocos de coeficiente de transformada associados com uma CU mediante ajuste do valor QP associado com a CU.
[0063] Após o codificador de vídeo 20 quantizar um bloco de coeficiente de transformada, o codificador de vídeo 20 pode gerar conjuntos de elementos de sintaxe que representam os coeficientes de transformada no bloco de coeficiente de transformada quantizado. O codificador de vídeo 20 pode aplicar operações de codificação de entropia, tal como operações de Codificação Aritmética Binária Adaptativa de Contexto (CABAC), a alguns desses elementos de sintaxe.
[0064] O fluxo de bits gerado pelo codificador de vídeo 20 pode incluir uma série de unidades de Camada de Abstração de Rede (NAL). Cada uma das unidades NAL pode ser uma estrutura de sintaxe contendo uma indicação de um tipo de dados na unidade NAL e bytes contendo os dados. Por exemplo, uma unidade NAL pode conter dados representando um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem, uma fatia codificada, uma ou mais mensagens de informação de aperfeiçoamento suplementar (SEI), um delimitador de unidade de acesso, dados de enchimento, ou outro tipo de dados. Os dados em uma unidade NAL podem incluir várias estruturas de sintaxe.
[0065] O decodificador de vídeo 30 pode receber o fluxo de bits gerado pelo codificador de vídeo 20. O fluxo de bits pode incluir uma representação codificada dos dados de vídeo codificados pelo codificador de vídeo 20. Quando o decodificador de vídeo 30 recebe o fluxo de bits, o decodificador de vídeo 30 pode realizar uma operação de análise no fluxo de bits. Quando o decodificador de vídeo 30 realiza a operação de análise, o decodificador de vídeo 30 pode extrair elementos de sintaxe a partir do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base nos elementos de sintaxe extraídos a partir do fluxo de bits. O processo para reconstruir os dados de vídeo com base nos elementos de sintaxe pode ser geralmente recíproco ao processo realizado pelo codificador de vídeo 20 para gerar os elementos de sintaxe.
[0066] Após o decodificador de vídeo 30 extrair os elementos de sintaxe associados com uma CU, o decodificador de vídeo 30 pode gerar os blocos de vídeo preditos para as PUs da CU com base nos elementos de sintaxe. Além disso, o decodificador de vídeo 30 pode transformar por quantização inversa os blocos de coeficiente associados com as TUs da CU. O decodificador de vídeo 30 pode realizar transformadas inversas nos blocos de coeficiente de transformada para reconstruir os blocos de vídeo residuais associados com as TUs da CU. Após gerar os blocos de vídeo preditos e reconstruir os blocos de vídeo residuais, o decodificador de vídeo 30 pode reconstruir o bloco de vídeo da CU com base nos blocos de vídeo preditos e nos blocos de vídeo residuais. Desse modo, o decodificador de vídeo 30 pode reconstruir os blocos de vídeo das CUs com base nos elementos de sintaxe no fluxo de bits.
[0067] O decodificador de vídeo 20 pode dividir a imagem atual em uma pluralidade de partições de imagem. As partições de imagem podem ser associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem atual. O codificador de vídeo 20 pode dividir a imagem atual em pluralidade de partições de imagem de várias formas. Conforme descrito abaixo, o codificador de vídeo 20 pode dividir a imagem atual em uma pluralidade de pequenos blocos (tiles) ou em uma pluralidade de ondas de processamento paralelo de frente de onda (WPP). Essa revelação pode usar o termo “partição de imagem” para se referir genericamente tanto aos pequenos blocos como as ondas WPP. O processo de dividir a imagem atual em partições de imagem pode ser referido como “divisão” da imagem atual em partições de imagem.
[0068] Conforme mencionado acima, o codificador de vídeo 20 pode dividir a imagem atual em um ou mais pequenos blocos. Cada um dos pequenos blocos pode compreender um número inteiro de blocos de árvore na imagem atual. O codificador de vídeo 20 pode dividir a imagem atual em pequenos blocos mediante definição de dois ou mais limites verticais de pequeno bloco e dois ou mais limites horizontais de pequeno bloco. Cada lado vertical da imagem atual pode ser considerado como sendo um limite de pequeno bloco vertical. Cada lado horizontal da imagem atual pode ser considerado como um limite de pequeno bloco horizontal. Por exemplo, se o codificador de vídeo 20 definir quatro limites de pequeno bloco vertical e três limites de pequeno bloco horizontal para a imagem atual, a imagem atual é dividida em seis pequenos blocos.
[0069] Um codificador de vídeo, tal como o codificador de vídeo 20 ou decodificador de vídeo 30 pode codificar os pequenos blocos da imagem atual de acordo com a ordem de varredura por rastreio. Além disso, quando o codificador de vídeo codifica um pequeno bloco, o codificador de vídeo pode codificar cada bloco de árvore dentro do pequeno bloco de acordo com uma ordem de varredura por rastreio. Desse modo, o codificador de vídeo pode codificar cada bloco de árvore de um determinado pequeno bloco da imagem atual antes de codificar qualquer bloco de árvore de outro pequeno bloco da imagem atual. Consequentemente, a ordem na qual o codificador de vídeo codifica os blocos de árvore da imagem atual pode ser diferente quando o codificador de vídeo divide a imagem atual em múltiplos pequenos blocos do que quando o codificador de vídeo não divide a imagem atual em múltiplos pequenos blocos.
[0070] Além disso, em alguns casos, o codificador de vídeo pode usar informação associada com as CUs espacialmente adjacentes para realizar predição intra em uma CU determinada na imagem, desde que a CU determinada e as CUs espacialmente adjacentes pertençam ao mesmo pequeno bloco. As CUs espacialmente adjacentes são CUs que pertencem à fatia atual da imagem atual. Em alguns casos, o codificador de vídeo pode usar informação associada com as CUs espacialmente adjacentes para selecionar um contexto para codificação CABAC de um elemento de sintaxe da CU determinada, desde que a CU determinada e as CUs espacialmente adjacentes estejam dentro do mesmo pequeno bloco. Devido a essas restrições, o codificador de vídeo pode ser capaz de codificar os blocos de árvore em paralelo de múltiplos pequenos blocos.
[0071] Em outros exemplos, o codificador de vídeo pode codificar a imagem atual utilizando processamento em paralelo de frente de onda (WPP). Quando o codificador de vídeo codifica a imagem atual utilizando WPP, o codificador de vídeo pode dividir os blocos de árvore da imagem atual em uma pluralidade de “ondas WPP”. Cada uma das ondas WPP pode corresponder a uma fileira diferente de blocos de árvore na imagem atual. Quando o codificador de vídeo codifica a imagem atual utilizando WPP, o codificador de vídeo pode começar a codificar uma fileira superior dos blocos de árvore. Quando o codificador de vídeo tiver codificado dois ou mais blocos de árvore da fileira superior, o codificador de vídeo pode iniciar a codificação de uma segunda fileira superior dos blocos de árvore em paralelo com a codificação da fileira superior dos blocos de árvore. Quando o codificador de vídeo tiver codificado dois ou mais blocos de árvore da segunda fileira superior, o codificador de vídeo pode iniciar a codificação de uma terceira fileira superior de bloco de árvore em paralelo com a codificação das fileiras superiores dos blocos de árvore. Esse padrão pode continuar descendentemente pelas fileiras de blocos de árvore na imagem atual.
[0072] Quando o codificador de vídeo estiver codificando a imagem atual utilizando WPP, o codificador de vídeo pode usar informação associada com as CUs espacialmente adjacentes fora de um bloco de árvores atual para realizar intra predição em uma determinada CU no bloco de árvores atual, desde que as CUs espacialmente adjacentes estejam à esquerda, acima à esquerda, acima, ou acima à direita do bloco de árvore atual. Se o bloco de árvore atual for a árvore de bloco mais à esquerda em uma fileira exceto a fileira mais alta, o codificador de vídeo pode usar informação associada com o segundo bloco de árvore da fileira imediatamente mais alta para selecionar um contexto para codificar CABAC um elemento de sintaxe do bloco de árvore atual. De outro modo, se o bloco de árvore atual não for o bloco de árvore mais à esquerda na fileira, o codificador de vídeo pode usar informação associada com um bloco de árvore para a esquerda do bloco de árvore atual para selecionar um contexto para codificar CABAC um elemento de sintaxe do bloco de árvore atual. Desse modo, o codificador de vídeo pode inicializar os estados CABAC de uma fileira com base nos estados CABAC da fileira imediatamente mais alta após codificar dois ou mais blocos de árvore da fileira imediatamente mais alta.
[0073] Em alguns exemplos, quando o codificador de vídeo estiver codificando a imagem atual utilizando WPP, os únicos limites de pequeno bloco da imagem atual são as bordas horizontais e verticais da imagem atual. Assim, o único pequeno bloco da imagem atual pode ser do mesmo tamanho que o da imagem atual. O codificador de vídeo pode dividir a imagem atual, e assim o único pequeno bloco da imagem atual, em múltiplas ondas WPP.
[0074] Conforme mencionado acima, o codificador de vídeo 20 pode gerar uma unidade NAL de fatia codificada que inclui uma representação codificada de uma fatia. A fatia pode ser associada com um número inteiro de blocos de árvore consecutivamente codificados. A unidade NAL de fatia codificada pode incluir um cabeçalho de fatia e dados de fatia. Os dados de fatia podem incluir representações codificadas de cada bloco de árvore associado com a fatia. O codificador de vídeo 20 pode gerar a unidade NAL de fatia codificada de tal modo que representações codificadas dos blocos de árvore são agrupadas dentro dos dados de fatia em segmentos de acordo com as partições de imagem as quais pertencem os blocos de árvore. Por exemplo, a unidade NAL de fatia codificada pode incluir cada bloco de árvore codificado associado com uma primeira partição e imagem, seguido por cada bloco de árvore codificado associado com uma segunda partição de imagem, seguido por cada bloco de árvore codificada associado com uma terceira partição de imagem, e assim por diante.
[0075] De acordo com as técnicas dessa revelação, o codificador de vídeo 20 pode preencher um ou mais dos segmentos de tal modo que cada um dos segmentos começa em um limite de byte. A unidade NAL de fatia codificada pode ser dividida em uma série de bytes. Um segmento pode começar em um limite de byte quando um primeiro bit do segmento é o primeiro bit de um dos bytes da unidade NAL de fatia codificada. Adicionalmente, um segmento pode ser um byte alinhado se o primeiro bit de um segmento for o primeiro bit de um dos bytes da unidade NAl de fatia codificada. Quando o codificador de vídeo 20 preenche um segmento, um codificador de vídeo 20 pode anexar bits de enchimento ao segmento. Por exemplo, o codificador de vídeo 20 pode adicionar um ou mais bits de enchimento a um segmento de tal modo que o número de bits no segmento é divisível por 8 sem deixar um resto. Os bits de enchimento podem não ter qualquer significado semântico, mas podem servir para garantir que o próximo segmento comece em um limite de byte.
[0076] Quando o decodificador de vídeo 30 recebe a unidade NAL de fatia codificada, o codificador de vídeo 30 pode armazenar a unidade NAL de fatia codificada na memória. Para decodificar as partições de imagem em paralelo, o decodificador de vídeo 30 pode atribuir os segmentos aos diferentes fluxos de execução de decodificação que executam em paralelo. Para atribuir os segmentos aos diferentes fluxos de execução de decodificação, o decodificador de vídeo 30 pode precisar indicar os endereços de memória associados com os inícios dos segmentos. O decodificador de vídeo 30 pode usar endereçamento de memória no sentido de byte. Consequentemente, o decodificador de vídeo 30 pode ser incapaz de indicar o endereço de memória associado com o início de um segmento se o início do segmento ocorrer dentro de um byte. Portanto, o decodificador de vídeo 30 pode não ser capaz de decodificar os blocos de árvore codificados nos segmentos em paralelo se um ou mais dos segmentos começar dentro de um byte. Alternativamente, o decodificador de vídeo 30 pode usar endereçamento de memória no sentido de bit ou endereçamento no sentido de byte mais endereçamento no sentido de bit para possibilitar a decodificação dos blocos de árvore codificados nos segmentos em paralelo, mas com complexidades de computação e implementação, aumentadas.
[0077] Desse modo, o codificador de vídeo 20 pode dividir uma imagem em uma pluralidade de partições de imagem. A imagem tem uma pluralidade de blocos de árvore. As partições de imagem são associadas com subconjuntos não sobrepostos dos blocos de árvore da imagem. O codificador de vídeo 20 pode gerar uma unidade NAL de fatia codificada que inclui representações codificadas dos blocos de árvore que são associados com uma fatia da imagem. As representações codificadas dos blocos de árvore são agrupadas dentro da unidade NAL de fatia codificada em segmentos associados com diferentes partições das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte.
[0078] Além disso, o decodificador de vídeo 30 pode armazenar uma unidade NAL de fatia codificada que inclui representações codificadas de blocos de árvore associados com uma fatia de uma imagem. A imagem pode ser dividida em uma pluralidade de partições de imagem. As representações codificadas dos blocos de árvore podem ser agrupadas em segmentos associados com partições diferentes das partições de imagem. Um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte. O decodificador de vídeo 30 pode decodificar as representações codificadas dos blocos de árvore. Em alguns casos, o decodificador de vídeo 30 pode decodificar as representações codificadas dos blocos de árvore em dois ou mais dos segmentos em paralelo.
[0079] A Figura 2 é um diagrama de blocos que ilustra um codificador de vídeo exemplar 20 que é configurado para implementar as técnicas dessa revelação. A Figura 2 é provida com o propósito de explanação e não deve ser considerada como limitadoras das técnicas conforme amplamente exemplificadas e descritas nessa revelação. Com o propósito de explanação, essa revelação descreve o codificador de vídeo 20 no contexto de codificação HEVC. Contudo, as técnicas dessa revelação podem ser aplicáveis a outros padrões ou métodos de codificação.
[0080] No exemplo da Figura 2, o codificador de vídeo 20 inclui vários componentes funcionais. Os componentes funcionais do codificador de vídeo 20 incluem um módulo de predição 100, um módulo de geração residual 102, um módulo de transformada 104, um módulo de quantização 106, um módulo de quantização inversa 108, um módulo de transformada inversa 110, um módulo de reconstrução 112, um módulo de filtro 113, um armazenador temporário de imagem decodificada 114, e um módulo de codificação de entropia 116. O módulo de predição 100 inclui um módulo de inter predição 121, módulo de estimação de movimento 122, um módulo de compensação de movimento 124, e um módulo de intra predição 126. Em outros exemplos, o codificador de vídeo 20 pode incluir mais, menos ou diferentes componentes funcionais. Adicionalmente, o módulo de estimação de movimento 122 e o módulo de compensação de movimento 124 podem ser altamente integrados, mas são representados no exemplo da Figura 2 separadamente com o propósito de explanação.
[0081] O codificador de vídeo 20 pode receber dados de vídeo. O codificador de vídeo 20 pode receber os dados de vídeo a partir de várias fontes. Por exemplo, o codificador de vídeo 20 pode receber os dados de vídeo a partir da fonte de vídeo 18 (Figura 1) ou outra fonte. Os dados de vídeo podem representar uma série de imagens. Para codificar os dados de vídeo, o codificador de vídeo 20 pode realizar uma operação de codificação em cada uma das imagens. Como parte da execução da operação de codificação em uma imagem, o codificador de vídeo 20 pode realizar operações de codificação em cada fatia da imagem. Como parte da realização de uma operação de codificação em uma fatia, o codificador de vídeo 20 pode realizar operações de codificação em blocos de árvore na fatia.
[0082] Como parte da realização de uma operação de codificação em um bloco de árvore, o módulo de predição 100 pode realizar partição quadtree no bloco de vídeo do bloco de árvore para dividir o bloco de vídeo em blocos de vídeo progressivamente menores. Cada um dos blocos de vídeo menores pode ser associado com uma CU diferente. Por exemplo, o módulo de predição 100 pode dividir um bloco de vídeo de um bloco de árvore em quarto sub-blocos igualmente dimensionados, dividir um ou mais dos sub-blocos em quatro sub-sub-blocos igualmente dimensionados, e assim por diante.
[0083] Os tamanhos dos blocos de vídeo associados com as CUs podem variar de amostras de 8x8 até o tamanho do bloco de árvore com um máximo de amostras 64x64 ou maiores. Nessa revelação, “NxN” e “N por N” podem ser usados de forma permutável para se referir às dimensões de amostra de um bloco de vídeo em termos de dimensões verticais e horizontais, por exemplo, amostras de 16x16 ou amostras de 16 por 16. Em geral, um bloco de vídeo de 16x16 tem 16 amostras em uma direção vertical (y = 16) e 16 amostras em uma direção horizontal (x = 16). Similarmente, um bloco NxN geralmente tem N amostras em uma direção vertical e N amostras em uma direção horizontal, onde N representa um valor de número inteiro não negativo.
[0084] Adicionalmente, como parte da realização da operação de codificação em um bloco de árvore, o módulo de predição 100 pode gerar uma estrutura de dados quadtree hierárquica para o bloco de árvore. Por exemplo, o bloco de árvore pode corresponder a um nó raiz da estrutura de dados quadtree. Se o módulo de predição 100 dividir o bloco de vídeo do bloco de árvore em quatro sub- blocos, o nó raiz tem quatro nós filho na estrutura de dados quadtree. Cada um dos nós filho corresponde a uma CU associada com um dos sub-blocos. Se o módulo de predição 100 divide um dos sub-blocos em quatro sub-sub-blocos, o nó correspondendo a CU associada com o sub-bloco pode ter quatro nós filho, da um dos quais corresponde a uma CU associada com um dos sub-sub-blocos.
[0085] Cada nó da estrutura de dados quadtree pode conter dados de sintaxe (por exemplo, elementos de sintaxe) para o bloco de árvore correspondente ou CU. Por exemplo, um nó no quadtree pode incluir um sinalizador (flag) de divisão que indica se o bloco de vídeo da CU correspondendo ao nó está dividido (isto é, separado) em quatro sub-blocos. Os elementos de sintaxe para uma CU podem ser definidos de forma recursiva, e podem depender de se o bloco de vídeo da CU é dividido em sub-blocos. Uma CU cujo bloco de vídeo não é dividido pode corresponder a um nó folha na estrutura de dados quadtree. Um bloco de árvore codificado pode incluir dados com base na estrutura de dados quadtree para um bloco de árvore correspondente.
[0086] O codificador de vídeo 20 pode realizar operações de codificação em cada CU não dividida de um bloco de árvore. Quando o codificador de vídeo 20 realiza uma operação de codificação em uma CU não dividida, o codificador de vídeo 20 gera dados representando uma representação codificada da CU não dividida.
[0087] Como parte da realização de uma operação de codificação em uma CU, o módulo de predição 100 pode dividir o bloco de vídeo da CU entre uma ou mais PUs da CU. O codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar diversos tamanhos de PU. Supondo que o tamanho de uma CU específica seja 2Nx2N, o codificador de vídeo 20 e o decodificador de vídeo 30 podem suportar tamanhos de PU de 2Nx2N ou NxN, e inter predição em tamanhos simétricos de PU de 2Nx2N, 2NxN, Nx2N, NxN, 2NxnU, nLx2N, nRx2N ou similar. O codificador de vídeo 20 e o decodificador de vídeo 30 também podem suportar divisão assimétrica para tamanhos de PU de 2NxnU, 2NxnD, nLx2N, e nRx2N. Em alguns exemplos, o módulo de predição 100 pode realizar divisão geométrica para dividir o bloco de vídeo de uma CU entre PUs da CU ao longo de um limite que não encontra os lados do bloco de vídeo da CU em ângulos retos.
[0088] O módulo de inter predição 121 pode realizar inter predição em cada PU da CU. Inter predição pode prover compactação temporal. Para realizar inter predição em uma PU, o módulo de estimação de movimento 122 pode gerar informação de movimento para a PU. O módulo de compensação de movimento 124 pode gerar um bloco de vídeo predito para a PU com base na informação de movimento e amostras decodificadas de imagens exceto a imagem associada com a CU (isto é, imagens de referência). Nessa revelação, um bloco de vídeo predito gerado pelo módulo de compensação de movimento 124 pode ser referido como um bloco de vídeo inter predito.
[0089] Fatias podem ser fatias I, fatias P, ou fatias B. O módulo de estimação de movimento 102 e o módulo de compensação de movimento 124 podem realizar operações diferentes para uma PU de uma CU dependendo de se a PU está em uma fatia I, uma fatia P, ou uma fatia B. Em uma fatia I, todas as PUs são intra preditas. Portanto, se a PU está em uma fatia I, o módulo de estimação de movimento 122 e o módulo de compensação de movimento 124 não realizam inter predição na PU.
[0090] Se a PU está em uma fatia P, a imagem contendo a PU é associada com uma lista de imagens de referência referidas como “lista zero”. Cada uma das imagens de referência na lista zero contém amostras que podem ser usadas para inter predição de outras imagens. Quando o módulo de estimação de movimento 122 realiza a operação de estimação de movimento com relação a uma PU em uma fatia P, o módulo de estimação de movimento 122 pode procura nas imagens de referência na lista zero por um bloco de referência para a PU. O bloco de referência da PU pode ser um conjunto de amostras, por exemplo, um bloco de amostras, que corresponde mais estreitamente com as amostras no bloco de vídeo da PU. O módulo de estimação de movimento 122 pode usar uma variedade de métricas para determinar quão estreitamente um conjunto de amostras em uma imagem de referência corresponde às amostras no bloco de vídeo de uma PU. Por exemplo, o módulo de estimação de movimento 122 pode determinar quão estreitamente um conjunto de amostras em uma imagem de referência corresponde às amostras no bloco de vídeo de uma PU mediante soma da diferença absoluta (SAD), soma da diferença quadrática (SSD), ou outras métricas de diferença.
[0091] Após identificar um bloco de referência de uma PU em uma fatia P, o módulo de estimação de movimento 122 pode gerar um índice de referência que indica a imagem de referência na lista zero contendo o bloco de referência e um vetor de movimento que indica um deslocamento espacial entre a PU e o bloco de referência. Em vários exemplos, o módulo de estimação de movimento 122 pode gerar vetores de movimento para graus variáveis de exatidão. Por exemplo, o módulo de estimação de movimento 122 pode gerar vetores de movimento em precisão de amostra de um quarto, precisão de amostra de um oitavo, ou outra precisão de amostra fracionária. No caso de precisão de amostra fracionária, os valores de bloco de referência podem ser interpolados a partir dos valores de amostra de posição de número inteiro na imagem de referência. O módulo de estimação de movimento 122 pode produzir o índice de referência e o vetor de movimento como a informação de movimento da PU. O módulo de compensação de movimento 124 pode gerar um bloco de vídeo predito da PU com base no bloco de referência identificado pela informação de movimento da PU.
[0092] Se a PU estiver em uma fatia B, a imagem contendo a PU pode ser associada com duas listas de imagens de referência, referidas como “lista 0” e “lista 1”. Em alguns exemplos, uma imagem contendo uma fatia B pode ser associada com uma combinação de lista que é uma combinação de lista 0 e lista 1.
[0093] Adicionalmente, se a PU estiver em uma fatia B, o módulo de estimação de movimento 122 pode realizar predição unidirecional ou predição bidirecional para a PU. Quando o módulo de estimação de movimento 122 realiza predição unidirecional para a PU, o módulo de estimação de movimento 122 pode procurar as imagens de referência da lista 0 ou da lista 1 por um bloco de referência para a PU. O módulo de estimação de movimento 122 pode então gerar um índice de referência que indica a imagem de referência na lista 0 ou lista 1 que contém o bloco de referência e um vetor de movimento que indica um deslocamento espacial entre a PU e o bloco de referência. O módulo de estimação de movimento 122 pode produzir o índice de referência, um indicador de direção de predição, e o vetor de movimento como a informação de movimento da PU. O indicador de direção de predição pode indicar se o índice de referência indica uma imagem de referência na lista 0 ou lista 1. O módulo de compensação de movimento 124 pode gerar o bloco de vídeo predito da PU com base no bloco de referência indicado pela informação de movimento da PU.
[0094] Quando o módulo de estimação de movimento 122 realiza predição bidirecional para uma PU, o módulo de estimação de movimento 122 pode procurar as imagens de referência na lista 1 para um bloco de referência para a PU e também pode procurar as imagens de referência na lista 1 para outro bloco de referência para a PU. O módulo de estimação de movimento 122 pode então gerar índices de referência que indicam as imagens de referência na lista 0 e lista 1 contendo os blocos de referência e vetores de movimento que indicam deslocamentos espaciais entre os blocos de referência e a PU. O módulo de estimação de movimento 122 pode produzir os índices de referência e os vetores de movimento da PU como a informação de movimento da PU. O módulo de compensação de movimento 124 pode gerar o bloco de vídeo predito da PU com base nos blocos de referência indicados pela informação de movimento da PU.
[0095] Em alguns casos, o módulo de estimação de movimento 122 não produz um conjunto completo de informação de movimento para uma PU para o módulo de codificação e entropia 116. Mais propriamente, o módulo de estimação de movimento 122 pode sinalizar a informação de movimento de uma PU com referência à informação de movimento de outra PU. Por exemplo, o módulo de estimação de movimento 122 pode determinar que a informação de movimento da PU seja suficientemente similar à informação de movimento de uma PU adjacente. Nesse exemplo, o módulo de estimação de movimento 122 pode indicar, em uma estrutura de sintaxe associada com a PU, um valor que indica para o decodificador de vídeo 30 que a PU tem a mesma informação de movimento que a PU adjacente. Em outro exemplo, o módulo de estimação de movimento 122 pode identificar, em uma estrutura de sintaxe associada com a PU, uma PU adjacente e uma diferença de vetor de movimento (MVD). A diferença de vetor de vetor de movimento indica uma diferença entre o vetor de movimento da PU e o vetor de movimento da PU adjacente indicada. O decodificador de vídeo 30 pode usar o vetor de movimento da PU adjacente indicada e a diferença de vetor de movimento para determinar o vetor de movimento da PU. Mediante referência à informação de movimento de uma primeira PU ao sinalizar a informação de movimento de uma segunda PU, o codificador de vídeo 20 pode ser capaz de sinalizar a informação de movimento da segunda PU utilizando um número menor de bits.
[0096] Como parte da realização de uma operação de codificação em uma CU, o módulo de intra predição 126 pode realizar intra predição nas PUs da CU. A intra predição pode prover compactação espacial. Quando um módulo de intra predição 126 realiza intra predição em uma PU, o módulo de intra predição 126 pode gerar dados de predição para a PU com base nas amostras decodificadas de outras PUs na mesma imagem. Os dados de predição para a PU podem incluir um bloco de vídeo predito e vários elementos de sintaxe. O módulo intra predição 126 pode realizar intra predição nas PUs em fatias I, fatias P, e fatias B.
[0097] Para realizar intra predição em uma PU, o módulo de intra predição 126 pode usar múltiplos modos de intra predição para gerar múltiplos conjuntos de dados de predição para a PU. Quando o módulo de intra predição 126 utiliza um modo de intra predição pra gerar um conjunto de dados de predição para a PU, o módulo de intra predição 126 pode estender as amostras a partir dos blocos de vídeo de PUs adjacentes através do bloco de vídeo da PU em uma direção e/ou gradiente associado com o modo de intra predição. As PUs adjacentes podem estar acima, acima e à direita, acima e à esquerda, ou à esquerda da PU, supondo uma ordem de codificação da esquerda para a direita, de cima para baixo para as PUs, CUs, e blocos de árvores. O módulo de intra predição 126 pode usar vários números de modos de intra predição, por exemplo, 33 modos de intra predição direcionais dependendo do tamanho da PU.
[0098] O módulo de predição 100 pode selecionar os dados de predição para uma PU dentre os dados de predição gerados pelo módulo de compensação de movimento 124 para a PU ou os dados de predição gerados pelo módulo de intra predição 126 para a PU. Em alguns exemplos, o módulo de predição 100 seleciona os dados de predição para a PU com base na métrica de taxa/distorção dos conjuntos de dados de predição.
[0099] Se o módulo de predição 100 seleciona os dados de predição gerados pelo módulo de intra predição 126, o módulo de predição 100 pode sinalizar o modo de intra predição que foi usado para gerar os dados de predição para as PUs, isto é, o modo de intra predição selecionado. O módulo de predição 100 pode sinalizar o modo de intra predição selecionada de diversas formas. Por exemplo, é provável que o modo de intra predição selecionado seja o mesmo que o modo de intra predição de uma PU adjacente. Em outras palavras, o modo de intra predição da PU adjacente pode ser o modo mais provável para a PU atual. Assim, o módulo de predição 100 pode gerar um elemento de sintaxe para indicar que o modo de intra predição selecionado é o mesmo que o modo de intra predição da PU adjacente.
[00100] Após o módulo de predição 100 selecionar os dados de predição para as PUs de uma CU, o módulo de geração residual 102 pode gerar dados residuais para a CU mediante subtração dos blocos de vídeo preditos das PUs da CU a partir do bloco de vídeo da CU. Os dados residuais de uma CU podem incluir blocos de vídeo residuais 2D que correspondem aos diferentes componentes de amostra das amostras no bloco de vídeo da CU. Por exemplo, os dados residuais podem incluir um bloco de vídeo residual que corresponde às diferenças entre componentes de luminância das amostras nos blocos de vídeo preditos das PUs da CU e componentes de luminância de amostras no bloco de vídeo original da CU. Além disso, os dados residuais da CU podem incluir blocos de vídeo residuais que correspondem às diferenças entre os componentes de crominância das amostras nos blocos de vídeo preditos das PUs da CU e os componentes de crominância das amostras no bloco de vídeo original da CU.
[00101] O bloco de predição 100 pode realizar divisão quadtree para dividir os blocos de vídeo residuais de uma CU em sub-blocos. Cada bloco de vídeo residual não dividido pode ser associado com uma TU diferente da CU. Os tamanhos e posições dos blocos de vídeo residuais associados com as TUs de uma CU podem ou não se basear nos tamanhos e posições dos blocos de vídeo associados com as PUs da CU. Uma estrutura quadtree conhecida como uma “árvore quad residual” (RQT) pode incluir nós associados com cada um dos blocos de vídeo residuais. As TUs de uma CU podem corresponder aos nós de folha da RQT.
[00102] O módulo de transformada 104 pode gerar um ou mais blocos de coeficiente de transformada para cada TU de uma CU mediante aplicação de uma ou mais transformadas a um bloco de vídeo residual associado com a TU. Cada um dos blocos de coeficiente de transformada pode ser uma matriz 2D dos coeficientes de transformada. O módulo de transformada 104 pode aplicar várias transformadas ao bloco de vídeo residual associado com uma TU. Por exemplo, o módulo de transformada 104 pode aplicar uma transformada de cosseno discreta (DCT), uma transformada direcional, ou uma transformada similar no modo conceptual ao bloco de vídeo residual associado com uma TU.
[00103] Após o módulo de transformada 104 gerar um bloco de coeficiente de transformada associado com uma TU, o módulo de quantização 106 pode quantizar os coeficientes de transformada no bloco de coeficiente de transformada. O módulo de quantização 106 pode quantizar um bloco de coeficiente de transformada associado com uma TU de uma CU com base em um valor QP associado com a CU.
[00104] O codificador de vídeo 20 pode associar um valor QP com uma CU de diversas formas. Por exemplo, o codificador de vídeo 20 pode realizar uma análise de distorção de taxa em um bloco de árvore associado com a CU. Na análise de distorção de taxa, o codificador de vídeo 20 pode gerar múltiplas representações codificadas do bloco de árvore mediante realização de uma operação de codificação múltiplas vezes no bloco de árvore. O codificador de vídeo 20 pode associar diferentes valores QP com a CU quando o codificador de vídeo 20 gera diferentes representações codificadas do bloco de árvore. O codificador de vídeo 20 pode sinalizar que um determinado valor QP seja associado com a CU quando o valor QP determinado é associado com a CU em uma representação codificada do bloco de árvore que tem a taxa de bit e a métrica de distorção, mais baixas.
[00105] O módulo de quantização inversa 108 e o módulo de transformada inversa 110 podem aplicar quantização inversa e transformadas inversas ao bloco de coeficiente de transformada, respectivamente, para reconstruir o bloco de vídeo residual a partir do bloco de coeficiente de transformada. O módulo de reconstrução 112 pode adicionar o bloco de vídeo residual reconstruído às amostras correspondentes a partir de um ou mais blocos de vídeo preditos gerados pelo módulo de predição 100 para produzir um bloco de vídeo reconstruído associado com uma TU. Mediante reconstrução dos blocos de vídeo para cada TU de uma CU desse modo, o codificador de vídeo 20 pode reconstruir o bloco de vídeo da CU.
[00106] Após o módulo de reconstrução 112 reconstruir o bloco de vídeo de uma CU, o módulo de filtro 113 pode realizar uma operação de desblocagem para reduzir os artefatos de blocagem no bloco de vídeo associado com a CU. Após realizar uma ou mais operações de desblocagem, o módulo de filtro 113 pode armazenar o bloco de vídeo reconstruído da CU no armazenador temporário de imagem decodificada 114. O módulo de estimação de movimento 122 e o módulo de compensação de movimento 124 podem usar uma imagem de referência que contém o bloco de vídeo reconstruído para realizar inter predição nas PUs de imagens subsequentes. Além disso, o módulo de intra predição 126 pode usar os blocos de vídeo reconstruídos no armazenador temporário de imagem decodificada 114 para realizar intra predição nas PUs na mesma imagem que a CU.
[00107] O módulo de codificação de entropia 116 pode receber os dados a partir de outros componentes funcionais do codificador de vídeo 20. Por exemplo, o módulo de codificação de entropia 116 pode receber blocos de coeficiente de transformada a partir do módulo de quantização 106 e pode receber elementos de sintaxe a partir do módulo de predição 100. Quando o módulo de codificação de entropia 116 recebe os dados, o módulo de codificação de entropia 116 pode realizar uma ou mais operações de codificação de entropia para gerar os dados codificados de entropia. Por exemplo, o codificador de vídeo 20 pode realizar uma operação de codificação de comprimento variável de contexto adaptativo (CAVLC), uma operação CABAC, uma operação de codificação de comprimento variável para variável (V2V), uma operação de codificação aritmética binária adaptativa de sintaxe baseado em contexto (SBAC), uma operação de codificação de Entropia de Partição de Intervalo de Probabilidade (PIPE), ou outro tipo de operação de codificação de entropia nos dados. O módulo de codificação de entropia 116 pode produzir um fluxo de bits que inclui os dados codificados de entropia.
[00108] Como parte da realização de uma operação de codificação de entropia nos dados, o módulo de codificação de entropia 116 pode selecionar um modelo de contexto. Se o módulo de codificação de entropia 116 estiver realizando uma operação CABAC, o módulo de contexto pode indicar estimativas de probabilidades de binários específicos tendo valores específicos. No contexto de CABAC, o termo “binário” é usado para se referir a um bit de versões binarizadas de um elemento de sintaxe.
[00109] O codificador de vídeo 20 pode gerar uma unidade NAL de fatia codificada para cada fatia da imagem atual. A unidade NAL de fatia codificada para uma fatia pode incluir um cabeçalho de fatia e dados de fatia. Os dados de fatia podem incluir uma pluralidade de segmentos. Cada um dos segmentos inclui blocos de árvore codificados associados com uma partição de imagem diferente. O codificador de vídeo 20 pode encher os segmentos de tal modo que cada um dos segmentos comece em um limite de byte dentro dos dados de fatia. Por exemplo, os segmentos em uma unidade NAL de fatia codificada podem incluir um determinado segmento. Nesse exemplo, o codificador de vídeo 20 pode gerar a unidade NAL de fatia codificada ao menos em parte mediante realização de uma operação de enchimento que anexa os bits ao segmento determinado se um próximo bloco de árvore estiver dentro da fatia atual e for associado com uma partição de imagem diferente do que o segmento determinado.
[00110] Em alguns exemplos, o codificador de vídeo 20 pode gerar o cabeçalho de fatia de uma unidade NAL de fatia codificada de tal modo que o cabeçalho de fatia indica os pontos de entrada para os segmentos nos dados de fatia da unidade NAL de fatia codificada. Os pontos de entrada podem indicar as posições dentro dos dados de fatia dos segmentos. Por exemplo, os pontos de entrada podem indicar deslocamentos de byte dos segmentos. Nesse exemplo, os deslocamentos de byte podem ser relativos ao primeiro bit da unidade NAL de fatia codificada, o primeiro bit dos dados de fatia, ou outro bit na unidade NAL de fatia codificada. Em outro exemplo, os pontos de entrada podem indicar os números de bits ou bytes dentro de cada um dos segmentos. Em alguns exemplos, o cabeçalho de fatia não indica um ponto de entrada para um primeiro segmento nos dados de fatia.
[00111] Em alguns exemplos, o codificador de vídeo 20 pode determinar se um sinalizador tem um primeiro valor (por exemplo, 1). Se o sinalizador tiver o primeiro valor, o codificador de vídeo 20 pode encher um ou mais dos segmentos de tal modo que cada segmento começa em um limite de byte. Quando o sinalizador tiver um segundo valor (por exemplo, 0), o codificador de vídeo 20 não enche os segmentos. Como um resultado, os segmentos podem ou não começar em posições de bytes alinhados. Em tais exemplos, um conjunto de parâmetros de sequência, um conjunto de parâmetros de imagem, um conjunto de parâmetros de adaptação, ou um cabeçalho de fatia podem incluir o sinalizador. Assim, em alguns exemplos, o codificador de vídeo 20 pode gerar um conjunto de parâmetros associado com a imagem atual, o conjunto de parâmetros incluindo um sinalizador. Quando o sinalizador tiver um primeiro valor, um ou mais dos segmentos são preenchidos de tal modo que os segmentos começam nos limites de byte. Quando o sinalizador tiver um segundo valor, os segmentos podem ou não começar em limites de byte.
[00112] Adicionalmente, em alguns exemplos, o codificador de vídeo 20 pode dividir a imagem atual em uma pluralidade de pequenos blocos. Se o codificador de vídeo 20 permitir predição em imagem através dos limites de pequeno bloco (isto é, quando dois ou mais dos pequenos blocos dependem um do outro), o codificador de vídeo 20 não enche os segmentos. Como um resultado, os segmentos podem ou não começar em posições de bytes alinhados. Contudo, se o codificador de vídeo não permitir perdição em imagem através dos limites de pequeno bloco, o codificador de vídeo 20 pode encher um ou mais dos segmentos de tal modo que cada um dos segmentos começa em um limite de byte. Assim, o codificador de vídeo 20 pode gerar uma unidade NAL de fatia codificada pelo menos em parte mediante realização de uma operação de enchimento que garante que os segmentos comecem em limites apenas após a determinação de que os pequenos blocos são independentes uns dos outros.
[00113] A Figura 3 é um diagrama de blocos que ilustra um decodificador de vídeo exemplar 30 que é configurado para implementar as técnicas dessa revelação. A Figura 3 é provida com o propósito de explanação e não de limitação das técnicas conforme amplamente exemplificado e descrito nessa revelação. Com o propósito de explanação, essa revelação descreve o codificador de vídeo 30 no contexto de codificação HEVC. Contudo, as técnicas dessa revelação podem ser aplicáveis a outros padrões ou métodos de codificação.
[00114] No exemplo da Figura 3, o decodificador de vídeo 30 inclui uma pluralidade de componentes funcionais. Os componentes funcionais do decodificador de vídeo 30 incluem um módulo de decodificação de entropia 150, um módulo de predição 152, um módulo de quantização inversa 154, um módulo de transformada inversa 156, um módulo de reconstrução 158, um módulo de filtro 159, e um armazenador temporário de imagem decodificada 160. O módulo de predição 152 inclui um módulo de compensação de movimento 162 e um módulo de intra predição 164. Em alguns exemplos, o decodificador de vídeo 30 pode realizar uma passagem de decodificação geralmente recíproca à passagem de codificação descrita com relação ao codificador de vídeo 20 da Figura 2. Em outros exemplos, o decodificador de vídeo 30 pode incluir um número maior, menor, ou diferente de componentes funcionais.
[00115] O decodificador de vídeo 30 pode receber um fluxo de bits que compreende os dados de vídeo codificado. O fluxo de bits pode incluir uma pluralidade de elementos de sintaxe. Quando o decodificador de vídeo 30 recebe o fluxo de bits, o módulo de decodificação de entropia 150 pode realizar uma operação de análise no fluxo de bits. Como um resultado da realização da operação de análise no fluxo de bits, o módulo de decodificação de entropia 150 pode extrair os elementos de sintaxe a partir do fluxo de bits. Como parte da realização da operação de análise, o módulo de decodificação de entropia 150 pode decodificar por entropia os elementos de sintaxe codificados por entropia no fluxo de bits. O módulo de predição 152, o módulo de quantização inversa 154, o módulo de transformada inversa 156, o módulo de reconstrução 158, e o módulo de filtro 159 podem realizar uma operação de reconstrução que gera os dados de vídeo decodificados com base nos elementos de sintaxe extraídos do fluxo de bits.
[00116] Conforme discutido acima, o fluxo de bits pode compreender uma série de unidades NAL. As unidades NAL do fluxo de bits podem incluir unidades NAL de conjunto de parâmetros de sequência, unidades NAL de conjunto de parâmetros de imagem, unidades NAL de SEI, e assim por diante. Como parte da realização da operação de análise no fluxo de bits, o módulo de decodificação de entropia 150 pode realizar operações de análise que extraem e decodificam por entropia os conjuntos de parâmetros de sequência a partir das unidades NAL de conjunto de parâmetros de sequência, os conjuntos de parâmetro de imagem a partir das unidades NAL de conjunto de parâmetros de imagem, os dados SEI a partir das unidades NAL de SEI, e assim por diante.
[00117] Além disso, as unidades NAL do fluxo de bits podem incluir unidades NAL de fatia codificada. Como parte da realização da operação de análise no fluxo de bits, o decodificador de vídeo 30 pode realizar operações de análise que extraem e decodificam por entropia as fatias codificadas a partir das unidades NAL de fatia codificada. Cada uma das fatias codificadas pode incluir um cabeçalho de fatia e dados de fatia. O cabeçalho de fatia pode conter elementos de sintaxe que pertencem a uma fatia. Os elementos de sintaxe no cabeçalho de fatia podem incluir um elemento de sintaxe que identifica um conjunto de parâmetros de imagem associado com uma imagem que contém a fatia.
[00118] Os dados de fatia de uma unidade NAL de fatia codificada podem incluir múltiplos segmentos. Cada um dos segmentos pode incluir blocos de árvore codificados associados com uma partição de imagem diferente (por exemplo, um pequeno bloco ou uma onda WPP). Um ou mais dos segmentos nos dados de fatia podem ser preenchidos de tal modo que cada um dos segmentos comece em um limite de byte. O cabeçalho de fatia da unidade NAL de fatia codificada pode indicar pontos de entrada para os segmentos. Nesse caso, como os segmentos sempre começam nos limites de byte, o decodificador de vídeo 30 pode ser capaz de atribuir diferentes segmentos dos segmentos de diferentes fluxos de execução de codificação de uma forma simples mediante uso de endereçamento de memória no sentido de byte. Os diferentes fluxos de execução de decodificação podem analisar os blocos de árvore codificados dos segmentos e reconstruir os dados de vídeo associados com os blocos de árvore correspondentes em paralelo.
[00119] Como parte da extração dos dados de fatia a partir das unidades NAL de fatia codificada, o módulo de decodificação de entropia 150 pode realizar operações de análise que extraem os elementos de sintaxe a partir das CUs codificadas. Os elementos de sintaxe extraídos podem incluir elementos de sintaxe associados com os blocos de coeficiente de transformada. O módulo de decodificação de entropia 150 pode então realizar operações de decodificação CABAC em alguns dos elementos de sintaxe.
[00120] Após o módulo de decodificação de entropia 150 realizar uma operação de análise em uma CU não dividida, o decodificador de vídeo 30 pode realizar uma operação de reconstrução na CU não dividida. Para realizar a operação de reconstrução em uma CU não dividida, o decodificador de vídeo 30 pode realizar uma operação de reconstrução em cada TU da CU. Mediante realização da operação de reconstrução para cada TU da CU, o decodificador de vídeo 30 pode reconstruir o bloco de vídeo residual associado com a CU.
[00121] Como parte da realização de uma operação de reconstrução em uma TU, o módulo de quantização inversa 154 pode quantizar de forma inversa, isto é, dequantizar, um bloco de coeficiente de transformada associado com a TU. O módulo de quantização inversa 154 pode quantizar inversamente o bloco de coeficiente de transformada de uma maneira similar aos processos de quantização inversa propostos para HEVC ou definidos pelo padrão de decodificação H.264. O módulo de quantização inversa 154 pode usar um parâmetro de quantização QP calculado pelo codificador de vídeo 20 para uma CU do bloco de coeficiente de transformada para determinar um grau de quantização e, similarmente, um grau de quantização inversa para aplicação pelo módulo de quantização inversa 154.
[00122] Após o módulo de quantização inversa 154 quantizar inversamente um bloco de coeficiente de transformada, o módulo de transformada inversa 156 pode gerar um bloco de vídeo residual para a TU associada com o bloco de coeficiente de transformada. O módulo de transformada inversa 156 pode aplicar uma transformada inversa ao bloco de coeficiente de transformada para gerar o bloco de vídeo residual para a TU. Por exemplo, o módulo de transformada inversa 156 pode aplicar uma DT inversa, uma transformada inversa de número inteiro, uma transformada inversa Karhunen-Loeve (KLT), uma transformada rotacional inversa, uma transformada direcional inversa, ou outra transformada inversa ao bloco de coeficiente de transformada.
[00123] Em alguns exemplos, o módulo de transformada inversa 156 pode determinar uma transformada inversa a ser empregada no bloco de coeficiente de transformada com base na sinalização a partir do codificador de vídeo 20. Em tais exemplos, o módulo de transformada inversa 156 pode determinar a transformada inversa com base em uma transformada sinalizada no nó raiz de uma quadtree para um bloco de árvore associado com o bloco de coeficiente de transformada. Em outros exemplos, o módulo de transformada inversa 156 pode inferir a transformada inversa a partir de uma ou mais características de codificação, tal como o tamanho de bloco, o modo de codificação, ou semelhante. Em alguns exemplos, o módulo de transformada inversa 156 pode aplicar uma transformada inversa em cascata.
[00124] Em alguns exemplos, o módulo de compensação de movimento 162 pode aperfeiçoar o bloco de vídeo predito de uma PU mediante realização de interpolação com base nos filtros de interpolação. Identificadores para os filtros de interpolação a serem usados para compensação de movimento com exatidão de sub-amostra podem ser incluídos nos elementos de sintaxe. O módulo de compensação de movimento 162 pode usar os mesmos filtros de interpolação usados pelo codificador de vídeo 20 durante a geração do bloco de vídeo predito da PU para calcular os valores interpolados para amostras de sub-inteiro de um bloco de referência. O módulo de compensação de movimento 162 pode determinar os filtros de interpolação usados pelo codificador de vídeo 20 de acordo com informação de sintaxe recebida e usar os filtros e interpolação para produzir o bloco de vídeo predito.
[00125] Se uma PU é codificada utilizando intra predição, o módulo de intra predição 164 pode realizar intra predição para gerar um bloco de vídeo predito para a PU. Por exemplo, o módulo de intra predição 164 pode determinar um modo de intra predição para a PU com base em elementos de sintaxe no fluxo de bits. O fluxo de bits pode incluir elementos de sintaxe que o módulo de intra predição 164 pode usar para determinar o modo de intra predição da PU.
[00126] Em alguns casos, os elementos de sintaxe podem indicar que o módulo de intra predição 164 deva usar o modo de intra predição de outra PU para determinar o modo de intra predição da PU atual. Por exemplo, pode ser provável que o modo de intra predição da PU atual seja o mesmo que o modo de intra predição de uma PU adjacente. Em outras palavras, o modo de intra predição da PU adjacente pode ser o modo mais provável para a PU atual. Portanto, nesse exemplo, o fluxo de bits pode incluir um pequeno elemento de sintaxe que indica que o modo de intra predição da PU é o mesmo que o modo de intra predição da PU vizinha. O módulo de intra predição 164 pode então utilizar o modo de intra predição para gerar os dados de predição (por exemplo, amostras preditas) para a PU com base nos blocos de vídeo de PUs espacialmente adjacentes.
[00127] O módulo de reconstrução 158 pode usar os blocos de vídeo residuais associados com as TUs de uma CU e os blocos de vídeo preditos das PUs da CU, isto é, dados de intra predição ou dados de inter predição, conforme aplicável, para reconstruir o bloco de vídeo da CU. Assim, o decodificador de vídeo 30 pode gerar um bloco de vídeo predito e um bloco de vídeo residual com base em elementos de sintaxe no fluxo de bits e pode gerar um bloco de vídeo com base no bloco de vídeo predito e no bloco de vídeo residual.
[00128] Após o módulo de reconstrução 158 reconstruir o bloco de vídeo da CU, o módulo de filtro 159 pode realizar uma operação de desblocagem para reduzir os artefatos de blocagem associados com a CU. Após o módulo de filtro 159 realizar uma operação de desblocagem para reduzir os artefatos de blocagens associadas com a CU, o decodificador de vídeo 30 pode armazenar o bloco de vídeo da CU no armazenador temporário de imagem decodificada 160. O armazenador temporário de imagem decodificada 160 pode prover imagens de referência para compensação de movimento subsequente, intra predição, e apresentação em um dispositivo de exibição, tal como o dispositivo de exibição 32 da Figura 1. Por exemplo, o decodificador de vídeo 30 pode realizar, com base nos blocos de vídeo no armazenador temporário de imagem decodificada 160, operações de intra predição ou de inter predição nas PUs de outras CUs.
[00129] A Figura 4 é um fluxograma que ilustra uma operação exemplar 200 para gerar dados de fatia para uma fatia. Um codificador de vídeo, tal como o codificador de vídeo 20 (Figuras 1 e 2), pode realizar operação 200. O exemplo da Figura 4 é apenas um exemplo. Outras operações exemplares podem gerar dados de fatia de outras formas.
[00130] Após o codificador de vídeo iniciar operação 200, o codificador de vídeo pode inicializar um endereço de bloco de árvore de tal modo que o endereço de bloco de árvore identifica um bloco de árvore inicial de uma fatia atual (202). A fatia atual pode ser uma fatia que o codificador de vídeo está atualmente codificando. O bloco de árvore inicial da fatia atual pode ser o primeiro bloco de árvore associado com a fatia atual de acordo com uma ordem de codificação de bloco de árvore para a imagem atual. Para facilidade de explanação, essa revelação pode se referir ao bloco de árvore identificado pelo endereço de bloco e árvore como o bloco de árvore atual.
[00131] O codificador de vídeo pode anexar elementos de sintaxe para o bloco de árvore atual aos dados de fatia de uma unidade NAL de fatia codificada para a fatia atual (204). Os elementos de sintaxe para o bloco de árvore atual podem incluir elementos de sintaxe na quadtree do bloco de árvore atual. Os elementos de sintaxe na quadtree do bloco de árvore atual podem incluir elementos de sintaxe que indicam modos de intra predição, informação de movimento, elementos de sintaxe que indicam níveis de coeficiente de transformada, e assim por diante.
[00132] Adicionalmente, o codificador de vídeo pode determinar se há mais dados na fatia atual (206). Pode haver mais dados na fatia atual se o bloco de árvore indicado pelo endereço de bloco de árvore estiver dentro da fatia atual. Em resposta à determinação de que não haja mais dados na fatia atual (“NÃO” de 206), o codificador de vídeo pode terminar a operação 200 porque o codificador de vídeo adicionou todos os elementos de sintaxe necessários aos dados de fatia.
[00133] O codificador de vídeo pode determinar se há mais dados na fatia atual de várias formas. Por exemplo, o codificador de vídeo pode invocar uma função “coding_tree( )” para produzir os elementos de sintaxe para um bloco de árvore. Nesse exemplo, a função “coding_tree( )” pode retornar um “moreDataFlag” que indica se há mais dados na fatia atual.
[00134] Em resposta à determinação de que haja mais dados associados com a fatia atual (“SIM” de 206), o codificador de vídeo pode determinar se os pequenos blocos da imagem atual são independentes e se o próximo bloco de árvore da fatia atual está em um pequeno bloco diferente do bloco de árvore atual da fatia atual (208). Conforme descrito acima, os pequenos blocos de uma imagem podem ser independentes se predição em imagem (por exemplo, intra predição, inter predição utilizando dados na imagem atual, e seleção de contexto CABAC com base em dados a partir de outros pequenos blocos da imagem atual) for proibida. O codificador de vídeo pode determinar se os pequenos blocos da imagem atual são independentes de diversas formas. Por exemplo, um conjunto de parâmetros de sequência associado com a imagem atual pode incluir um elemento de sintaxe “tile_boundary_independence_ide”. Nesse exemplo, se “tile_boundary_independence_ide” for igual a 0, os pequenos blocos da imagem atual não são independentes e predição em imagem através dos limites de pequeno bloco é permitida. Se “tile_boundary_independence_ide” for igual a 0, a predição em imagem através dos limites de fatia ainda pode ser proibida. Se “tile_boundary_independence_ide” for igual a 1, os pequenos blocos da imagem atual são independentes e predição em imagem através dos limites de pequeno bloco não é permitida.
[00135] O codificador de vídeo pode determinar em várias formas se o próximo bloco de árvore da fatia atual está em um pequeno bloco diferente do que o bloco de árvore atual da fatia atual. Por exemplo, o codificador de vídeo pode determinar o endereço do bloco de árvore do próximo bloco de árvore da fatia atual. Nesse exemplo, o codificador de vídeo pode invocar uma função “NewTile(...)” que considera o endereço de bloco de árvore do próximo bloco de árvore como um parâmetro e retornar um valor “newTileFlag” que indica se o próximo bloco de árvore está em um pequeno bloco diferente do bloco de árvore atual.
[00136] Se os pequenos blocos da imagem atual não forem independentes ou se o próximo bloco de árvore não estiver em um pequeno bloco diferente do bloco de árvore atual (“NÃO” de 208), o codificador de vídeo pode determinar se a imagem atual está sendo codificada utilizando WPP e o próximo bloco de árvore da fatia atual está em uma onda WPP diferente do bloco de árvore atual da fatia atual (210). O codificador de vídeo pode determinar de diversas formas se o próximo bloco de árvore da fatia atual está em uma onda WPP diferente do que o bloco de árvore atual da fatia atual. Por exemplo, o codificador de vídeo pode determinar o endereço de bloco de árvore do próximo bloco de árvore da fatia atual. Nesse exemplo, o codificador de vídeo pode invocar uma função “NewWave(...)” que considera o endereço de bloco de árvore do próximo bloco de árvore como um parâmetro e retornar um valor “newWaveFlag” que indica se o próximo bloco de árvore está em uma onda WPP diferente do que o bloco de árvore atual.
[00137] Em resposta à determinação de que a imagem atual está sendo codificada utilizando WPP e o próximo bloco de árvore está em uma onda WPP diferente do bloco de árvore (“SIM” de 210) ou em resposta à determinação de que os pequenos blocos da imagem atual são independentes e o próximo bloco de árvore está em um pequeno bloco diferente do bloco de árvore atual (“SIM” de 208), o codificador de vídeo pode determinar se o segmento atual é alinhado em bytes (212). Em outras palavras, o codificador de vídeo pode determinar se o segmento atual termina em um limite de byte. O segmento atual é o segmento associado com a partição de imagem (por exemplo, pequeno bloco ou onda WPP) com o qual o bloco de árvore atual é associado. Em resposta à determinação de que o segmento atual não é alinhado em byte (“NÃO” de 212), o codificador de vídeo pode anexar um bit de enchimento à extremidade do segmento atual (214). O bit de enchimento pode ter vários valores. Por exemplo, o bit de enchimento pode sempre ter um valor igual a 1. Em outros exemplos, o bit de enchimento pode ter sempre um valor igual a 0.
[00138] Após anexar o bit de enchimento à extremidade do segmento atual, o codificador de vídeo pode outra vez determinar se o segmento atual é alinhado em byte (212). Desse modo, o codificador de vídeo pode continuar a anexar os bits de enchimento à extremidade dos dados de fatia até que o segmento atual seja alinhado em byte.
[00139] Em resposta à determinação de que os dados de fatia são alinhados em byte (“SIM” de 212), o codificador de vídeo pode atualizar o endereço de bloco de árvore (216). O codificador de vídeo pode atualizar o endereço de bloco de árvore e de tal modo que o endereço de bloco de árvore indique o próximo bloco de árvore de acordo com a ordem de codificação de bloco de árvore da imagem atual. Por exemplo, quando o codificador de vídeo atualiza o endereço de bloco de árvore, o endereço de bloco de árvore pode identificar um bloco de árvore para a direita do bloco de árvore previamente indicado pelo endereço de bloco de árvore. A Figura 7, descrita em detalhe abaixo, é um diagrama conceptual que ilustra uma ordem de codificação de bloco de árvore exemplar que é dividido em múltiplos pequenos blocos.
[00140] Após atualizar o endereço de bloco de árvore, o codificador de vídeo pode determinar se há mais dados na fatia atual (218). Em resposta à determinação de que haja mais dados na fatia atual (“SIM” de 218) ou em resposta à determinação de que a imagem atual não está sendo codificada utilizando WPP e o próximo bloco de árvore não esteja em um pequeno bloco diferente do bloco de árvore atual (“NÃO” de 210), o codificador de vídeo pode anexar os elementos e sintaxe para o bloco de árvore atual aos dados de fatia (204). Desse modo, o codificador de vídeo pode anexar os elementos de sintaxe para cada bloco de árvore da fatia atual aos dados de fatia e pode garantir que os elementos associados com diferentes partições de imagem sejam preenchidos de tal modo que os segmentos comecem nos limites de byte.
[00141] Em resposta à determinação de que não haja mais dados na fatia atual (“NÃO” de 218), o codificador de vídeo pode terminar a operação 200 porque o codificador de vídeo pode ter anexado todos os elementos de sintaxe da fatia atual aos dados de fatia.
[00142] A Figura 5 é um fluxograma que ilustra uma operação exemplar 250 para decodificar uma unidade NAL de fatia codificada. Um decodificador de vídeo, tal como decodificador de vídeo 30 (Figuras 1 e 3), pode realizar operação 250. O exemplo da Figura 5 é apenas um exemplo. Outras operações exemplares podem realizar outras operações para decodificar as unidades NAL de fatia codificada.
[00143] No exemplo da Figura 5, o decodificador de vídeo pode armazenar uma unidade NAL de fatia codificada na memória de byte endereçado (252). A unidade NAL de fatia codificada pode incluir um cabeçalho de fatia e dados de fatia. Os dados de fatia podem incluir uma pluralidade de segmentos. Um ou mais dos segmentos podem ser preenchidos de tal modo que cada segmento comece em um limite de byte.
[00144] Após armazenar a unidade NAL de fatia codificada em memória, o decodificador de vídeo pode identificar posições dos segmentos dentro dos dados de fatia da unidade NAL de fatia codificada (254). O decodificador de vídeo pode identificar as posições dos segmentos de várias formas. Por exemplo, o decodificador de vídeo pode identificar as posições dos segmentos com base nos elementos de sintaxe no cabeçalho de fatia da unidade NAL de fatia codificada que indica os deslocamentos de byte dos segmentos. Nesse exemplo, o cabeçalho de fatia pode não incluir um deslocamento de byte para o primeiro segmento dos dados de fatia porque a posição do primeiro segmento pode vir imediatamente após o término do cabeçalho de fatia. Em outro exemplo, o decodificador de vídeo pode identificar as posições dos segmentos com base nos marcadores de ponto de entrada nos dados de fatia. Os marcadores de ponto de entrada podem ser valores dispostos entre os segmentos.
[00145] Após identificar as posições dos segmentos dentro dos dados de fatia, o decodificador de vídeo pode atribuir dois ou mais dos segmentos a dois ou mais dos diferentes fluxos de execução de decodificação (256). Cada um dos fluxos de execução de decodificação pode analisar os elementos de sintaxe de blocos de árvore codificados no segmento atribuído ao fluxo de execução de decodificação e reconstruir os blocos de vídeo para os blocos de árvore correspondentes conforme descrito acima.
[00146] A Figura 6 é um diagrama conceptual que ilustra o processamento paralelo de frente de onda. Como descrito acima, uma imagem pode ser dividida em blocos de vídeo, cada um dos quais é associado a um bloco de árvore. A Figura 6 ilustra os blocos de vídeo associados com os blocos de árvore como uma grade de quadrados brancos. A imagem inclui fileiras de blocos de árvore 300A-300E (coletivamente, “fileiras de bloco de árvore 300”).
[00147] Um primeiro fluxo de execução pode estar codificando blocos de árvore na fileira de bloco de árvore 300A. Atualmente, outros fluxos de execução podem estar codificando bloco de árvore em fileiras de bloco de árvore 300B, 300C e 300D. No exemplo da Figura 6, o primeiro fluxo de execução está codificando atualmente um bloco de árvore 302A, um segundo fluxo de execução está codificando atualmente um bloco de árvore 302B, um terceiro fluxo de execução está atualmente codificando um bloco de árvore 302C, e um quarto fluxo de execução está atualmente codificando um bloco de árvore 302D. Essa revelação pode se referir aos blocos de árvore 302A, 302B, 302C e 302D coletivamente como “blocos de árvore atuais 302”. Como o codificador de vídeo pode começar a codificar uma fileira de bloco de árvore após mais do que dois blocos de árvore de uma fileira imediatamente superior terem sido codificados, os blocos de árvore atuais 302 são deslocados horizontalmente entre si pelas larguras de dois blocos de árvore.
[00148] No exemplo da Figura 6, os fluxos de execução podem utilizar dados a partir de blocos de árvore indicados pelas setas cinza grossas ao realizar intra predição ou inter predição para as CUs nos blocos de árvore atuais 302. (Quando os fluxos de execução realizam inter predição para as CUs, os fluxos de execução também podem utilizar dados a partir de um ou mais quadros de referência). Quando um fluxo de execução codifica um determinado bloco de árvore, o fluxo de execução pode selecionar um ou mais contextos CABAC com base na informação associada com os blocos de árvore previamente codificados. O fluxo de execução pode usar o um ou mais contextos CABAC para realizar codificação CABAC em elementos de sintaxe associados com a primeira CU do bloco de árvore determinado. Se o bloco de árvore determinado não for o bloco de árvore mais à esquerda de uma fileira, o fluxo de execução pode selecionar o um ou mais contextos CABAC com base na informação associada com uma última CU do bloco de árvore à esquerda do bloco de árvore determinado. Se o bloco de árvore determinado for o bloco de árvore mais à esquerda de uma fileira, o fluxo de execução pode selecionar um ou mais contextos CABAC com base na informação associada com uma última CU de um bloco de árvore que está acima e dois blocos de árvore à direita do bloco de árvore determinado. Os fluxos de execução podem usar dados a partir das últimas CUs dos blocos de árvore indicados pelas setas pretas finas para selecionar os contextos CABAC para as primeiras CUs dos blocos de árvore atuais 302.
[00149] A Figura 7 é um diagrama conceptual que ilustra uma ordem de codificação de bloco de árvore exemplar para uma imagem 305 que é dividida em múltiplos pequenos blocos 352A, 352B e 352C. Cada bloco branco quadrado na imagem 350 representa um bloco de vídeo associado com um bloco de árvore. As linhas tracejadas verticais grossas indicam limites de pequeno bloco verticais exemplares. A linha cinza grossa indica um limite de fatia exemplar.
[00150] Os números nos blocos de vídeo indicam as posições dos blocos de árvore correspondentes (LCUs) em uma ordem de codificação de bloco de árvore para a imagem 350. Conforme ilustrado no exemplo da Figura 7, cada um dos blocos de árvore no pequeno bloco mais à esquerda 352A ocorre na ordem de codificação de bloco de árvore antes de qualquer bloco de árvore no pequeno bloco intermediários 352B. Cada um dos blocos de árvore no pequeno bloco intermediários 352B ocorre na ordem de codificação de bloco de árvore antes de qualquer bloco de árvore no pequeno bloco mais à esquerda 352C. Dentro de cada um dos pequenos blocos 352A, 352B e 352C, os blocos de árvore são codificados de acordo com uma ordem de varredura por rastreio.
[00151] Um codificador de vídeo pode gerar duas unidades NAL de fatia codificada para a imagem 350. A primeira unidade NAL de fatia codificada pode ser associada com a fatia esquerda da imagem 350. A primeira unidade NAL de fatia codificada pode incluir representações codificadas de blocos de árvore 1-23. Os dados de fatia da primeira unidade NAL de fatia codificada podem incluir dois segmentos. O primeiro segmento pode incluir as representações codificadas dos blocos de árvore 1-15. O segundo segmento pode incluir as representações codificadas dos blocos de árvore 16-30. De acordo com as técnicas dessa revelação, o primeiro segmento pode ser preenchido de tal modo que o segundo segmento começa em um limite de byte.
[00152] Uma segunda unidade NAL de fatia codificada pode ser associada com a fatia direita da imagem 350. A segunda unidade NAL de fatia codificada pode incluir representações codificadas dos blocos de árvore 24-45. Os dados de fatia da segunda unidade NAL de fatia codificada podem incluir dois segmentos. O primeiro segmento pode incluir as representações codificadas dos blocos de árvore 24-30. O segundo segmento pode incluir as representações codificadas de blocos de árvore 31-45. O primeiro segmento pode ser preenchido de tal modo que o segundo segmento começa em um limite de byte.
[00153] A Figura 8 é um diagrama conceptual que ilustra uma unidade NAL de fatia codificada exemplar 400. Conforme ilustrado no exemplo da Figura 8, a unidade NAL de fatia codificada 400 inclui um cabeçalho de fatia 402 e dados de fatia 404. Os dados de fatia 404 incluem um primeiro segmento 406 e um segundo segmento 408. O segmento 406 inclui blocos de árvore codificados 410A-410N e dados de enchimento 412. O segmento 408 inclui blocos de árvore codificados 414A-414N.
[00154] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Se implementada em software, as funções podem ser armazenadas no, ou transmitidas através do, como uma ou mais instruções ou código, meio legível por computador e executadas por uma unidade de processamento baseado em hardware. Meios legíveis por computador podem incluir meios de armazenamento legíveis por computador, os quais correspondem a um meio tangível; tal como os meios de armazenamento de dados, ou meios de comunicação incluindo qualquer meio que facilita a transferência de um programa de computador de um local para outro, por exemplo, de acordo com um protocolo de comunicação. Dessa maneira, meios legíveis por computador geralmente podem corresponder a (1) meios de armazenamento tangíveis legíveis por computador os quais são não transitórios ou (2) um meio de comunicação tal com um sinal ou onda portadora. Os meios de armazenamento de dados podem ser quaisquer meios disponíveis que podem ser acessados por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e/ou estruturas de dados para implementação das técnicas descritas nessa revelação. Um produto de programa de computador pode incluir um meio legível por computador.
[00155] Como um exemplo, e não como limitação, tais meios de armazenamento legíveis por computador podem compreender RAM, ROM, EEPROM, CD-ROM ou qualquer outro meio de armazenamento de dados de estado sólido, ótico ou magnético, incluindo armazenamento de disco ótico, armazenamento de disco magnético, ou outros dispositivos de armazenamento magnético, ou qualquer outro meio que possa ser usado para armazenar código de programa desejado na forma de instruções ou estruturas de dados e que possam ser acessados por um computador. Além disso, qualquer conexão é propriamente denominada meio legível por computador. Por exemplo, se as instruções forem transmitidas a partir de um sítio de rede, servidor, ou outra fonte remota utilizando um cabo coaxial, cabo de fibras óticas, par de fios torcidos, linha de assinante digital (DSL), ou tecnologias sem fio tal como infravermelho, rádio e micro-ondas, então o cabo axial, cabo de fibras óticas, par de fios torcidos, DSL, ou tecnologias sem fio tais como infravermelho, rádio e micro-ondas são incluídos na definição de meio. Deve ser entendido, contudo, que meios de armazenamento tangíveis legíveis por computador e meios de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios transientes, mas em vez disso são dirigidos aos meios de armazenamento não transientes, tangíveis. Disco magnético e disco ótico, conforme aqui usado, incluem disco compacto (CD), disco a laser, disco ótico, disco digital versátil (DVD), disquete e disco Blu-ray, onde discos magnéticos normalmente reproduzem os dados magneticamente, enquanto que os discos óticos reproduzem os dados oticamente com laseres. Combinações dos mencionados acima também devem ser incluídas no escopo de meios legíveis por computador.
[00156] Instruções podem ser executadas por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados de aplicação específica (ASICs), arranjos lógicos programáveis no campo (FPGAs), ou outros circuitos lógicos integrados ou discretos equivalentes. Consequentemente, o termo ”processador”, conforme aqui usado pode se referir a qualquer uma da estrutura precedente ou qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disso, em alguns aspectos, a funcionalidade aqui descrita pode ser provida dentro de módulos de hardware e/ou software, dedicados configurados para codificar e decodificar, ou incorporados em um codec combinado. Além disso, as técnicas poderiam ser completamente implementadas em um ou mais circuitos ou elementos lógicos.
[00157] As técnicas dessa revelação podem ser implementadas em uma ampla variedade de dispositivos ou equipamentos, incluindo um aparelho telefônico sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chip). Vários componentes, módulos ou unidades são descritos nessa revelação para enfatizar os aspectos funcionais de dispositivos configurados para realizar as técnicas reveladas, mas não necessariamente requerem a realização por diferentes unidades de hardware. Mais propriamente, conforme descrito acima, as várias unidades podem ser combinadas em uma unidade de hardware de codec ou providas por um grupo de unidades de hardware inter operativas, incluindo um ou mais processadores conforme descrito acima, em conjunto com software e/ou firmware adequado.
[00158] Vários exemplos foram descritos. Esses e outros exemplos estão abrangidos pelo escopo das reivindicações a seguir.

Claims (16)

1. Método para codificar dados de vídeo, o método compreendendo: dividir uma imagem em uma pluralidade de partições de imagem, a imagem possuindo uma pluralidade de blocos de árvore, as partições de imagem associadas a subconjuntos não sobrepostos dos blocos de árvore da imagem; e gerar uma unidade de camada de abstração de rede (NAL) de fatia codificada que inclui representações codificadas dos blocos de árvore que são associadas com uma fatia da imagem, as representações codificadas dos blocos de árvore agrupadas dentro da unidade NAL de fatia codificada em segmentos associados a diferentes partições dentre as partições de imagem, caracterizado pelo fato de que: um ou mais dos segmentos são preenchidos tal que cada um dos segmentos começa em um limite de byte; os segmentos incluem um determinado segmento; e gerar a unidade NAL de fatia codificada compreende realizar uma operação de enchimento que anexa bits ao determinado segmento se um próximo bloco de árvore estiver dentro da fatia e for associado a uma partição de imagem diferente da do determinado segmento.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que gerar a unidade NAL de fatia codificada compreende gerar um cabeçalho de fatia que indica pontos de entrada para um ou mais dos segmentos.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que os pontos de entrada para os segmentos indicam deslocamentos de byte dos segmentos.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que, as partições de imagem são pequenos blocos ou ondas de processamento paralelo de frente de onda (WPP).
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente gerar um conjunto de parâmetros associado com a imagem, o conjunto de parâmetros incluindo um sinalizador que tem um primeiro valor, o primeiro valor indicado que os um ou mais dos segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte, e em que quando o sinalizador tem um segundo valor, os segmentos podem ou não começar em limites de byte.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que as partições de imagem são pequenos blocos; e em que gerar a unidade NAL de fatia codificada compreende realizar uma operação de enchimento que assegura que os segmentos comecem em limites de byte somente após determinar que os pequenos blocos são independentes entre si.
7. Método para decodificar dados de vídeo, os dados de vídeo compreendendo uma imagem (350) dividida em uma pluralidade de fatias, compreendendo: armazenar uma unidade de camada de abstração de rede (NAL) de fatia codificada que inclui representações codificadas de blocos de árvore associadas com uma fatia de uma imagem, a imagem particionada em uma pluralidade partições de imagem, as representações codificadas dos blocos de árvore agrupadas em segmentos associados a diferentes partições dentre as partições de imagem, caracterizado pelo fato de que: um ou mais dos segmentos são preenchidos tal que cada um dos segmentos começa em um limite de byte; os segmentos incluem um determinado segmento; e a unidade NAL de fatia codificada inclui bits anexados ao determinado segmento se um próximo bloco de árvore estiver dentro da fatia e for associado a uma partição de imagem diferente da do determinado segmento; e o método compreendendo adicionalmente decodificar as representações codificadas dos blocos de árvore.
8. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que a unidade NAL de fatia codificada compreende um cabeçalho de fatia que indica pontos de entrada para um ou mais dos segmentos.
9. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que os pontos de entrada para os segmentos indicam deslocamentos de byte dos segmentos.
10. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que as partições de imagem são pequenos blocos ou ondas de processamento paralelo de frente de onda (WPP).
11. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que compreende adicionalmente armazenar um conjunto de parâmetros associado com a imagem, o conjunto de parâmetros incluindo um sinalizador que tem um primeiro valor, o primeiro valor indicando que os um ou mais dentre os segmentos são preenchidos de tal modo que cada um dos segmentos começa em um limite de byte, e em que quando o sinalizador tem um segundo valor, os segmentos podem ou não começar nos limites de byte.
12. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que as partições de imagem são pequenos blocos; e em que um ou mais dos segmentos são preenchidos de modo que os segmentos começam em limites de byte quando os pequenos blocos são independentes entre si.
13. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que decodificar as representações codificadas dos blocos de árvore compreende decodificar as representações codificadas dos blocos de árvore em dois ou mais dos segmentos em paralelo.
14. Dispositivo para codificar vídeo caracterizado pelo fato de que compreende meios para realizar o método conforme definido em qualquer uma das reivindicações 1 a 6.
15. Dispositivo para decodificar vídeo caracterizado pelo fato de que compreende meios para realizar o método conforme definido em qualquer uma das reivindicações 7 a 13.
16. Memória legível por computador, caracterizada pelo fato de que contém gravado na mesma o método conforme definido em qualquer uma das reivindicações 1 a 6 ou 7 a 13.
BR112014010360-7A 2011-11-04 2012-11-01 Método e dispositivo para codificar dados de vídeo, método e dispositivo para decodificar dados de vídeo e memória legível por computador BR112014010360B1 (pt)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201161555932P 2011-11-04 2011-11-04
US61/555,932 2011-11-04
US201161557259P 2011-11-08 2011-11-08
US61/557,259 2011-11-08
US13/548,825 2012-07-13
US13/548,825 US9077998B2 (en) 2011-11-04 2012-07-13 Padding of segments in coded slice NAL units
PCT/US2012/063027 WO2013067158A1 (en) 2011-11-04 2012-11-01 Padding of segments in coded slice nal units

Publications (2)

Publication Number Publication Date
BR112014010360A2 BR112014010360A2 (pt) 2017-04-18
BR112014010360B1 true BR112014010360B1 (pt) 2022-05-17

Family

ID=47221570

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112014010360-7A BR112014010360B1 (pt) 2011-11-04 2012-11-01 Método e dispositivo para codificar dados de vídeo, método e dispositivo para decodificar dados de vídeo e memória legível por computador

Country Status (15)

Country Link
US (1) US9077998B2 (pt)
EP (1) EP2774369B1 (pt)
JP (1) JP5893747B2 (pt)
KR (1) KR101589851B1 (pt)
CN (1) CN103959781B (pt)
AU (1) AU2012332417B2 (pt)
BR (1) BR112014010360B1 (pt)
CA (1) CA2853956C (pt)
ES (1) ES2928248T3 (pt)
HU (1) HUE060217T2 (pt)
IL (1) IL232259B (pt)
MY (1) MY167651A (pt)
SG (1) SG11201401498WA (pt)
WO (1) WO2013067158A1 (pt)
ZA (1) ZA201404051B (pt)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9215473B2 (en) 2011-01-26 2015-12-15 Qualcomm Incorporated Sub-slices in video coding
US8620097B2 (en) * 2011-08-11 2013-12-31 Panasonic Corporation Image coding method, image decoding method, image coding apparatus, image decoding apparatus, and image coding and decoding apparatus
US9124895B2 (en) 2011-11-04 2015-09-01 Qualcomm Incorporated Video coding with network abstraction layer units that include multiple encoded picture partitions
JP6080375B2 (ja) * 2011-11-07 2017-02-15 キヤノン株式会社 画像符号化装置、画像符号化方法及びプログラム、画像復号装置、画像復号方法及びプログラム
KR102657113B1 (ko) 2011-12-29 2024-04-15 엘지전자 주식회사 비디오 인코딩 및 디코딩 방법과 이를 이용하는 장치
US9621905B2 (en) * 2012-06-29 2017-04-11 Qualcomm Incorporated Tiles and wavefront parallel processing
KR101918808B1 (ko) 2012-09-26 2018-11-14 선 페이턴트 트러스트 화상 복호 방법, 화상 부호화 방법, 화상 복호 장치, 화상 부호화 장치 및 화상 부호화 복호 장치
EP2903269B1 (en) * 2012-09-26 2019-01-02 Velos Media International Limited Image decoding method and image decoding apparatus
US9788002B2 (en) * 2012-11-29 2017-10-10 Samsung Electronics Co., Ltd. Image processing apparatus and method
KR102304687B1 (ko) * 2013-07-22 2021-09-27 소니그룹주식회사 정보 처리 장치 및 방법
RU2634847C2 (ru) * 2013-08-30 2017-11-07 Нек Корпорейшн Устройство оптической передачи, устройство оптического приема, устройство оптической связи, система оптической связи и способы управления ими
US9596470B1 (en) 2013-09-27 2017-03-14 Ambarella, Inc. Tree-coded video compression with coupled pipelines
US10257529B2 (en) * 2014-06-30 2019-04-09 Intel Corporation Techniques for generating wave front groups for parallel processing a video frame by a video encoder
US9854261B2 (en) 2015-01-06 2017-12-26 Microsoft Technology Licensing, Llc. Detecting markers in an encoded video signal
US10158874B2 (en) * 2015-09-30 2018-12-18 Apple Inc. Parallel bypass and regular bin coding
US10200707B2 (en) 2015-10-29 2019-02-05 Microsoft Technology Licensing, Llc Video bit stream decoding
JP6906940B2 (ja) 2015-12-28 2021-07-21 株式会社半導体エネルギー研究所 半導体装置
US10291923B2 (en) * 2016-05-24 2019-05-14 Qualcomm Incorporated Mapping of tile grouping and samples in HEVC and L-HEVC file formats
ES2883258T3 (es) * 2016-08-04 2021-12-07 Sz Dji Technology Co Ltd Codificación de vídeo en paralelo
KR20230117492A (ko) * 2017-04-11 2023-08-08 브이아이디 스케일, 인크. 면 연속성을 사용하는 360 도 비디오 코딩
WO2019234612A1 (en) 2018-06-05 2019-12-12 Beijing Bytedance Network Technology Co., Ltd. Partition tree with four sub-blocks symmetric or asymmetric
CN110868604B (zh) 2018-08-28 2023-04-11 北京字节跳动网络技术有限公司 与扩展四叉树相关的分割的二值化
CN111131822B (zh) 2018-10-31 2023-08-01 北京字节跳动网络技术有限公司 具有从邻域导出的运动信息的重叠块运动补偿
CN109587490B (zh) * 2018-11-05 2022-05-31 深圳威尔视觉传媒有限公司 一种Tile分片填充方法、装置、设备、存储介质和解码方法
CN113767624A (zh) * 2019-03-08 2021-12-07 瑞典爱立信有限公司 提供相关/独立分区编码/解码的方法和有关装置
CN114424539B (zh) 2019-06-14 2024-07-12 北京字节跳动网络技术有限公司 处理视频单元边界和虚拟边界
CN113994671B (zh) 2019-06-14 2024-05-10 北京字节跳动网络技术有限公司 基于颜色格式处理视频单元边界和虚拟边界
JP7323711B2 (ja) 2019-09-18 2023-08-08 北京字節跳動網絡技術有限公司 ビデオコーディングにおける適応ループフィルタの二部分シグナリング
CN114503594B (zh) 2019-09-22 2024-04-05 北京字节跳动网络技术有限公司 自适应环路滤波中样点填充的选择性应用
US11159827B2 (en) * 2019-09-23 2021-10-26 Tencent America LLC Method for signaling output layer set with sub picture
CN114450954B (zh) 2019-09-27 2024-06-25 北京字节跳动网络技术有限公司 不同视频单元之间的自适应环路滤波
WO2021068906A1 (en) 2019-10-10 2021-04-15 Beijing Bytedance Network Technology Co., Ltd. Padding process at unavailable sample locations in adaptive loop filtering
WO2021083259A1 (en) 2019-10-29 2021-05-06 Beijing Bytedance Network Technology Co., Ltd. Signaling of cross-component adaptive loop filter
WO2021101066A1 (ko) * 2019-11-22 2021-05-27 엘지전자 주식회사 비디오 또는 영상 코딩 시스템에서의 엔트리 포인트 관련 정보에 기반한 영상 코딩 방법
EP4070544A4 (en) 2019-12-11 2023-03-01 Beijing Bytedance Network Technology Co., Ltd. SAMPLE FILLING FOR ADAPTIVE LOOP FILTERING BETWEEN COMPONENTS
WO2022002007A1 (en) 2020-06-30 2022-01-06 Beijing Bytedance Network Technology Co., Ltd. Boundary location for adaptive loop filtering

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5471248A (en) * 1992-11-13 1995-11-28 National Semiconductor Corporation System for tile coding of moving images
AU5632394A (en) 1993-03-05 1994-09-08 Sony Corporation Apparatus and method for reproducing a prediction-encoded video signal
US5532744A (en) 1994-08-22 1996-07-02 Philips Electronics North America Corporation Method and apparatus for decoding digital video using parallel processing
JP2003174650A (ja) * 2001-09-27 2003-06-20 Canon Inc 画像符号化装置、可変長符号化装置、制御装置およびそれらの方法
US6919826B1 (en) 2003-12-19 2005-07-19 Sun Microsystems, Inc. Systems and methods for efficient and compact encoding
US7595743B1 (en) 2005-10-26 2009-09-29 Lsi Corporation System and method for reducing storage requirements for content adaptive binary arithmetic coding
JP5199123B2 (ja) 2006-01-12 2013-05-15 エルジー エレクトロニクス インコーポレイティド 多視点ビデオの処理
BRPI0710048A2 (pt) 2006-03-30 2011-08-02 Lg Electronics Inc método e aparelho para decodificar / codificar um sinal de vìdeo
US8699583B2 (en) 2006-07-11 2014-04-15 Nokia Corporation Scalable video coding and decoding
KR101065228B1 (ko) 2006-07-13 2011-09-16 퀄컴 인코포레이티드 사이클-정렬된 프래그먼트를 이용하는 fgs 비디오 코딩
WO2008052278A1 (en) * 2006-11-02 2008-05-08 Canon Kabushiki Kaisha Mixed content image compression with two edge data representations
US8494046B2 (en) 2007-03-23 2013-07-23 Lg Electronics Inc. Method and an apparatus for decoding/encoding a video signal by performing illumination compensation
DK3399756T3 (da) * 2007-04-12 2020-10-12 Dolby Int Ab Tiling i videokodning og -afkodning
US8619874B2 (en) 2007-04-13 2013-12-31 Apple Inc. Method and system for video encoding and decoding
JP2010525724A (ja) 2007-04-25 2010-07-22 エルジー エレクトロニクス インコーポレイティド ビデオ信号をデコーディング/エンコーディングする方法および装置
US9648325B2 (en) 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8542748B2 (en) 2008-03-28 2013-09-24 Sharp Laboratories Of America, Inc. Methods and systems for parallel video encoding and decoding
US20110110436A1 (en) 2008-04-25 2011-05-12 Thomas Schierl Flexible Sub-Stream Referencing Within a Transport Data Stream
US8311111B2 (en) * 2008-09-11 2012-11-13 Google Inc. System and method for decoding using parallel processing
CN102257819A (zh) 2008-10-30 2011-11-23 Gvbb控股股份有限公司 图像编码装置、图像编码方法和图像编码程序
JP2010183305A (ja) 2009-02-05 2010-08-19 Sony Corp 信号処理装置及び信号処理方法
US8949695B2 (en) 2009-08-27 2015-02-03 Cleversafe, Inc. Method and apparatus for nested dispersed storage
FR2951896A1 (fr) 2009-10-23 2011-04-29 France Telecom Procede d'encapsulation de sous-flux de donnees, procede de desencapsulation et programmes d'ordinateur correspondants
US8995527B2 (en) * 2010-02-19 2015-03-31 Qualcomm Incorporated Block type signalling in video coding
US20120075436A1 (en) 2010-09-24 2012-03-29 Qualcomm Incorporated Coding stereo video data
US9313514B2 (en) 2010-10-01 2016-04-12 Sharp Kabushiki Kaisha Methods and systems for entropy coder initialization
IL210169A0 (en) 2010-12-22 2011-03-31 Yehuda Binder System and method for routing-based internet security
US10244239B2 (en) 2010-12-28 2019-03-26 Dolby Laboratories Licensing Corporation Parameter set for picture segmentation
US9215473B2 (en) 2011-01-26 2015-12-15 Qualcomm Incorporated Sub-slices in video coding
US9325999B2 (en) 2011-03-10 2016-04-26 Sharp Kabushiki Kaisha Video decoder for slices
US9124895B2 (en) 2011-11-04 2015-09-01 Qualcomm Incorporated Video coding with network abstraction layer units that include multiple encoded picture partitions

Also Published As

Publication number Publication date
JP2014535220A (ja) 2014-12-25
EP2774369B1 (en) 2022-09-21
CA2853956A1 (en) 2013-05-10
US9077998B2 (en) 2015-07-07
AU2012332417B2 (en) 2015-08-20
CA2853956C (en) 2017-01-03
KR101589851B1 (ko) 2016-02-02
IL232259A0 (en) 2014-06-30
CN103959781B (zh) 2017-04-19
HUE060217T2 (hu) 2023-02-28
SG11201401498WA (en) 2014-06-27
WO2013067158A1 (en) 2013-05-10
RU2014122537A (ru) 2015-12-10
ES2928248T3 (es) 2022-11-16
ZA201404051B (en) 2016-03-30
MY167651A (en) 2018-09-21
CN103959781A (zh) 2014-07-30
US20130114736A1 (en) 2013-05-09
IL232259B (en) 2018-02-28
BR112014010360A2 (pt) 2017-04-18
EP2774369A1 (en) 2014-09-10
KR20140090230A (ko) 2014-07-16
JP5893747B2 (ja) 2016-03-23
AU2012332417A1 (en) 2014-05-29

Similar Documents

Publication Publication Date Title
BR112014010360B1 (pt) Método e dispositivo para codificar dados de vídeo, método e dispositivo para decodificar dados de vídeo e memória legível por computador
AU2018282523B2 (en) Intra filtering applied together with transform processing in video coding
ES2874848T3 (es) Restricción de unidades de predicción en segmentos b a interpredicción unidireccional
ES2633947T3 (es) Predicción de paletas en la codificación de vídeo basada en paleta
ES2972503T3 (es) Subflujos para el procesamiento paralelo de frente de onda en la codificación de vídeo
BR112019011883A2 (pt) modo de predição por modelo linear com acesso de amostra para codificação de vídeo
BR112019013645A2 (pt) estrutura em árvore multi-tipo para codificação de vídeo
BR112014010330B1 (pt) Codificação de vídeo com unidades de camadas de abstração de rede que incluem múltiplas partições de imagens codificadas
CA3092999A1 (en) Position dependent intra prediction combination extended with angular modes
BR112018004180B1 (pt) Método de decodificação de dados de vídeo, método de codificação de dados de vídeo e dispositivo para converter dados de vídeo em código
BR112013032040B1 (pt) Método e aparelho para codificação de vídeo, e memória legível por computador
BR112017003073B1 (pt) Unificação de cópia de intrabloco e interpredição
TW201713116A (zh) 在區塊內複製模式中之參考圖像清單結構
KR20140130466A (ko) B 슬라이스에서의 예측 유닛의 단방향성 인터 예측으로의 제한
BR112015007763B1 (pt) Método de decodificação e codificação de dados de vídeo, dispositivo de decodificação e codificação de vídeo e memória legível por computador
BR112014006185B1 (pt) Método e aparelho para decodificar dados de vídeo, método e aparelho para codificar dados de vídeo, e memória legível por computador
BR112016027428B1 (pt) Inicialização de paleta de preditor em codificação de vídeo com base em paleta
BR112016015546B1 (pt) Codificação de índice de cor para codificação de vídeo com base em paleta
KR20140029533A (ko) 비디오 코딩에서 최종 유의 변환 계수의 스캔 순서의 위치 도출
BR112016030530B1 (pt) Método e aparelho para decodificação de dados de vídeo e método e aparelho para codificação de dados de vídeo em um fluxo de bits
JP2017507539A (ja) マルチレイヤコーディングにおいて回復点補足エンハンスメント情報(sei)メッセージと領域リフレッシュ情報seiメッセージとをコーディングするための方法
BR112015007116B1 (pt) Aparelho configurado para decodificar e codificar dados de vídeo, método de decodificação e codificação de dados de vídeo, e, memória legível por computador
BR112021012649A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes
RU2575397C2 (ru) Заполнение незначащей информацией сегментов в блоках уровня абстракции сети кодированного слайса
BR112016015568B1 (pt) Método e aparelho para codificar ou decodificar dados de vídeo e memória legível por computador

Legal Events

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

Ipc: H04N 19/436 (2014.01), H04N 19/17 (2014.01), H04N

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

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