BR112017004041B1 - Método implementado por computador, mídia legível por computador e sistema de computação - Google Patents

Método implementado por computador, mídia legível por computador e sistema de computação Download PDF

Info

Publication number
BR112017004041B1
BR112017004041B1 BR112017004041-7A BR112017004041A BR112017004041B1 BR 112017004041 B1 BR112017004041 B1 BR 112017004041B1 BR 112017004041 A BR112017004041 A BR 112017004041A BR 112017004041 B1 BR112017004041 B1 BR 112017004041B1
Authority
BR
Brazil
Prior art keywords
current
ctu
image
prediction
wpp
Prior art date
Application number
BR112017004041-7A
Other languages
English (en)
Other versions
BR112017004041A2 (pt
Inventor
Bin Li
Jizheng Xu
Original Assignee
Microsoft Technology Licensing, Llc
Filing date
Publication date
Application filed by Microsoft Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Priority claimed from PCT/CN2014/087885 external-priority patent/WO2016049839A1/en
Publication of BR112017004041A2 publication Critical patent/BR112017004041A2/pt
Publication of BR112017004041B1 publication Critical patent/BR112017004041B1/pt

Links

Abstract

SISTEMA, MÉTODO E MEIO LEGÍVEL POR COMPUTADOR PARA FACIILITAR MODOS DE PREVISÃO INTRAIMAGEM QUANDO O PROCESSAMENTO PARALELO EM FRENTE DE ONDA ESTIVER HABILITADO. Trata-se de diversas inovações que facilitam o uso de modos de previsão intraimagem como modo de previsão de paleta, modo de cópia intrabloco, modo de cópia intralinha e modo de cópia intracoluna por um codificador ou decodificador quando o processamento paralelo em frente de onda ("WPP") estiver habilitado. Por exemplo, para um modo de codificação/decodificação de paleta, um codificador ou decodificador prevê uma paleta para uma unidade inicial em uma fileira de WPP atual de uma imagem com o uso de dados da paleta anterior provenientes de uma unidade anterior em uma fileira de WPP anterior da imagem. Ou, como outro exemplo, para um modo intracópia (por exemplo, modo de cópia intrabloco, modo de cópia intracoluna, modo de cópia intralinha), um codificador impõe uma ou mais restrições atribuíveis ao WPP, ou um decodificador recebe e decodifica dados codificados que satisfazem uma ou mais restrições atribuíveis ao WPP.

Description

ANTECEDENTES
[0001] Os engenheiros usam compressão (também denominada codificação de fonte) para reduzir a taxa de bits de vídeo digital. A compressão reduz o custo de armazenamento e transmissão de informações de vídeo convertendo-se as informações em uma forma de taxa de bits inferior. A descompressão (também denominada decodificação) reconstrói uma versão das informações originais a partir da forma compactada. Um “codec” é um sistema codificador/decodificador.
[0002] Ao longo dos últimos 25 anos, diversos padrões de codec de vídeo foram adotados, incluindo os padrões ITU-T H.261, H.262 (MPEG-2 ou ISO/IEC 13818-2), H.263 e H.264 (MPEG-4 AVC ou ISO/IEC 14496-10), os padrões MPEG-1 (ISO/IEC 11172-2) e MPEG-4 Visual (ISO/IEC 14496-2) e o padrão SMPTE 421M (VC-1). Mais recentemente, o padrão H.265/HEVC (ITU-T H.265 ou ISO/IEC 230082) foi aprovado. As extensões ao padrão H.265/HEVC (por exemplo, para codificação/decodificação de vídeo escalonável, para a codificação/decodificação de vídeo com maior fidelidade em termos de profundidade de bit de amostra ou taxa de amostragem de croma, para o conteúdo de captura de tela, ou para codificação/decodificação com múltiplas vistas) estão atualmente sob desenvolvimento. Um padrão de codec de vídeo tipicamente define opções para a sintaxe de um fluxo de dados de vídeo codificado, detalhando parâmetros no fluxo de dados quando recursos particulares forem usados na codificação e na decodificação. Em muitos casos, um padrão de codec de vídeo também fornece detalhes sobre as operações de decodificação que um decodificador deve realizar para alcançar os resultados correspondentes na decodificação. Além dos padrões de codec, diversos formatos de codec de proprietário definem outras opções para a sintaxe de um fluxo de dados de vídeo codificado e operações de decodificação correspondentes.
[0003] O processamento paralelo em frente de onda (“WPP”) é uma ferramenta disponível para a codificação e a decodificação no padrão H.265/HEVC. Quando o WPP estiver habilitado, uma porção de uma imagem é dividida em fileiras de seções especiais denominadas unidades de árvore de codificação (“CTUs”). Durante a codificação ou a decodificação, a primeira fileira de CTUs pode ser processada CTU após CTU, da esquerda para a direita. O processamento (codificação ou decodificação) das segundas fileiras de CTUs não precisa esperar pela conclusão do processamento para a primeira fileira de CTUs. Em vez disso, o processamento da segunda fileira pode começar após o processamento ser completo para diversas das CTUs da primeira fileira, o que fornece informações usadas quando se processa a CTU inicial da segunda fileira. De modo similar, o processamento da terceira fileira de CTUs pode começar após o processamento se completar para diversas das CTUs da segunda fileira. O WPP facilita o processamento paralelo de diferentes fileiras de CTUs. Diferentes threads ou cores de processamento podem realizar o processamento para diferentes fileiras de CTUs em uma base em zigue-zague com atraso de tempo.
[0004] A cópia intrabloco (“BC”) é um modo de previsão sob desenvolvimento para as extensões H.265/HEVC. Para o modo de previsão intra-BC, os valores de amostra de um bloco atual de uma imagem são previstos com o uso de valores de amostra reconstruídos anteriormente na mesma imagem. Um vetor de bloco (“BV”) indica um deslocamento do bloco atual para um bloco de referência da imagem que inclui os valores de amostra reconstruídos anteriormente usados para previsão. O BV é sinalizado no fluxo de dados. A previsão intra-BC é uma forma de previsão intraimagem-previsão intra-BC para um bloco de uma imagem não usa quaisquer valores de amostra que não sejam os valores de amostra na mesma imagem. O modo de cópia intracoluna (“SC”) e o modo de cópia intralinha (“LC”) são outros exemplos de modos de previsão intraimagem, que, o modo de BC, usam um valor de desvio para indicar um deslocamento a uma posição nos valores de amostra reconstruídos anteriormente usados para a previsão. Um modo de previsão de paleta, que é outro exemplo de modo de previsão intraimagem, prevê uma paleta usada para representar as cores em uma seção como uma unidade de codificação (“CU”). Conforme especificado atualmente para extensões ao padrão H.265/HEVC, diversos modos de previsão intraimagem não são usados efetivamente quando o WPP estiver habilitado.
SUMÁRIO
[0005] Em resumo, a descrição detalhada apresenta inovações nas regras impostas para modos de previsão intraimagem quando o processamento paralelo em frente de onda (“WPP”) estiver habilitado. Um elemento de sintaxe em um fluxo de dados pode indicar se o WPP está habilitado para uma sequência de vídeo, conjunto de imagens ou imagem. As inovações facilitam o uso de modos de previsão intraimagem como modo de previsão de paleta, modo de cópia intrabloco, modo de cópia intralinha e modo de cópia intracoluna por um codificador ou decodificador quando o WPP estiver habilitado.
[0006] De acordo com um aspecto das inovações descritas no presente documento, um codificador codifica uma imagem com o WPP habilitado. A codificação produz dados codificados. Para um modo de codificação de paleta, o codificador prevê uma paleta para uma unidade inicial em uma fileira de WPP atual da imagem com o uso de dados da paleta anterior provenientes de uma unidade anterior em uma fileira de WPP anterior da imagem. O codificador emite os dados codificados como parte de um fluxo de dados.
[0007] Um decodificador correspondente recebe dados codificados como parte de um fluxo de dados. O decodificador decodifica os dados codificados com o WPP habilitado. A decodificação reconstrói uma imagem. Para um modo de decodificação de paleta, o decodificador prevê uma paleta para uma unidade inicial em uma fileira de WPP atual da imagem com o uso de dados da paleta anterior provenientes de uma unidade anterior em uma fileira de WPP anterior da imagem.
[0008] De acordo com outro aspecto das inovações descritas no presente documento, um codificador codifica uma imagem com o WPP habilitado. A codificação produz dados codificados. Para um modo intracópia (por exemplo, modo de cópia intrabloco, modo de cópia intracoluna, modo de cópia intralinha), o codificador impõe uma ou mais restrições atribuíveis ao WPP. O codificador emite os dados codificados como parte de um fluxo de dados.
[0009] Um decodificador correspondente recebe dados codificados como parte de um fluxo de dados. Para um modo intracópia (por exemplo, modo de cópia intrabloco, modo de cópia intracoluna, modo de cópia intralinha), os dados codificados satisfazem uma ou mais restrições atribuíveis ao WPP. O decodificador decodifica os dados codificados com o WPP habilitado. A decodificação reconstrói uma imagem.
[00010] As inovações podem ser implantadas como parte de um método, como parte de um sistema de computação configurado para realizar o método ou como parte de meios legíveis por computador tangíveis que armazenam instruções executáveis por computador para fazer com que um sistema de computação realize o método. As diversas inovações podem ser usadas em combinação ou separadamente. Este sumário é fornecido para introduzir de forma simplificada uma seleção de conceitos que são descritos adicionalmente abaixo na descrição detalhada. Este sumário não está destinado a identificar recursos chave ou recursos essenciais da matéria reivindicada, nem está destinado a ser usado para limitar o escopo da matéria reivindicada. O supracitado e outros objetivos, recursos e vantagens da invenção se tornarão mais aparentes a partir da descrição detalhada a seguir, que prossegue com referência às Figuras anexas.
BREVE DESCRIÇÃO DOS DESENHOS
[00011] A Figura 1 é um diagrama de um sistema de computação exemplificativo no qual algumas modalidades descritas podem ser implantadas.
[00012] As Figuras 2a e 2b são diagramas de ambientes de rede exemplificativos nos quais algumas modalidades descritas podem ser implantadas.
[00013] A Figura 3 é um diagrama de um sistema codificador exemplificativo em conjunto com o qual algumas modalidades descritas podem ser implantadas.
[00014] A Figura 4 é um diagrama de um sistema decodificador exemplificativo em conjunto com o qual algumas modalidades descritas podem ser implantadas.
[00015] As Figuras 5a e 5b são diagramas que ilustram um codificador de vídeo exemplificativo em conjunto com o qual algumas modalidades descritas podem ser implantadas.
[00016] A Figura 6 é um diagrama que ilustra um decodificador de vídeo exemplificativo em conjunto com o qual algumas modalidades descritas podem ser implantadas.
[00017] A Figura 7 é um diagrama que ilustra a temporização do WPP, e a Figura 8 é um diagrama que ilustra o conteúdo reconstruído que pode ser usado para a previsão quando o WPP estiver habilitado.
[00018] As Figuras 9 e 10 são diagramas que ilustram aspectos da previsão de paleta de acordo com algumas modalidades descritas.
[00019] As Figuras 11 e 12 são fluxogramas que ilustram a codificação e a decodificação, respectivamente, com previsão de paleta, quando o WPP estiver habilitado, de acordo com algumas modalidades descritas.
[00020] As Figuras 13 e 14 são diagramas que ilustram aspectos de um exemplo de previsão de cópia intrabloco para um bloco atual de uma imagem.
[00021] As Figuras 15 e 16 são diagramas que ilustram aspectos de exemplos de previsão de cópia intralinha e previsão de cópia intracoluna, respectivamente.
[00022] A Figura 17 é um diagrama que ilustra a ordem de varredura z exemplificativa para unidades de uma imagem.
[00023] A Figura 18 é um diagrama que ilustra um exemplo de restrições na localização de uma região de referência para um modo intracópia quando o WPP estiver habilitado de acordo com algumas modalidades descritas.
[00024] As Figuras 19 e 20 são fluxogramas que ilustram a codificação e a decodificação, respectivamente, com regras impostas para o modo intracópia quando o WPP estiver habilitado, de acordo com algumas modalidades descritas.
DESCRIÇÃO DETALHADA
[00025] A descrição detalhada apresenta inovações nas regras impostas para modos de previsão intraimagem quando o processamento paralelo em frente de onda (“WPP”) estiver habilitado. Por exemplo, algumas das inovações se referem à previsão de paletas para um modo de codificação/decodificação de paleta quando o WPP estiver habilitado. Outras inovações se referem a restrições impostas durante um modo intracópia (como o modo de cópia intrabloco, o modo de cópia intralinha ou o modo de cópia intracoluna) quando o WPP estiver habilitado. As inovações facilitam o uso de modos de previsão intraimagem por um codificador ou decodificador quando o WPP estiver habilitado.
[00026] Embora as operações descritas no presente documento estejam em locais descritos como sendo realizados por um codificador de vídeo ou um decodificador de vídeo, em muitos casos, as operações podem ser realizadas por outro tipo de ferramenta de processamento de mídia (por exemplo, codificador de imagem ou decodificador de imagem).
[00027] Algumas das inovações descritas no presente documento são ilustradas com referência a termos específicos a extensões do padrão H.265/HEVC. Por exemplo, é feita referência à versão de rascunho JCTVC-R1005 das extensões de codificação/decodificação de conteúdo de tela para o padrão H.265/HEVC - “High Efficiency Video Coding (HEVC) Screen Content Coding: Draft 1, "JCTVC-R1005_v2, Augusto de 2014. As inovações descritas no presente documento também podem ser implantadas para outros padrões e formatos.
[00028] Muitas das inovações descritas no presente documento podem melhorar o desempenho de distorção de taxa quando codificar determinado conteúdo de vídeo “criado artificialmente” como o conteúdo de captura de tela. Em geral, o vídeo de captura de tela (também denominado vídeo de conteúdo de tela) é um vídeo que contém texto renderizado, gráficos de computador, conteúdo gerado por animação ou outros tipos similares de conteúdo capturado quando renderizado a um visor de computador, em oposição apenas ao conteúdo de vídeo capturado por câmera. O conteúdo de captura de tela tipicamente inclui estruturas repetidas (por exemplo, gráficos, caracteres de texto). O conteúdo de captura de tela normalmente é codificado em um formato (por exemplo, YUV 4:4:4 ou RGB 4:4:4) com alta resolução de amostragem de croma, embora o mesmo também possa ser codificado em um formato com resolução de amostragem de croma inferior (por exemplo, YUV 4:2:0). Os cenários comuns para codificação/decodificação de conteúdo de captura de tela incluem conferência de área de trabalho remota de codificação/decodificação de sobreposições de gráficos em vídeo natural ou outro vídeo de “conteúdo misto”. Diversas inovações descritas no presente documento são adaptadas para a codificação de vídeo de conteúdo de tela ou outro vídeo criado artificialmente. Essas inovações também podem ser usadas para vídeo natural, mas podem não ser tão efetivas.
[00029] De modo mais geral, diversas alternativas aos exemplos descritos no presente documento são possíveis. Por exemplo, alguns dos métodos descritos no presente documento podem ser alterados mudando-se o ordenamento dos atos de método descritos, dividindose, repetindo-se ou omitindo-se determinados atos de método, etc. Os diversos aspectos da tecnologia revelada podem ser usados em combinação ou separadamente. Diferentes modalidades usam uma ou mais das inovações descritas. Algumas das inovações descritas no presente documento se referem a um ou mais dos problemas observados nos antecedentes. Tipicamente, uma dada técnica/ferramenta não resolve todos os tais problemas.
I. SISTEMAS DE COMPUTAÇÃO EXEMPLIFICATIVOS.
[00030] A Figura 1 ilustra um exemplo generalizado de um sistema de computação adequado 100 no qual diversas inovações descritas podem ser implantadas. O sistema de computação 100 não está destinado a sugerir qualquer limitação quanto ao escopo de uso ou funcionalidade, já que as inovações podem ser implantadas em variados sistemas de computação de propósito geral ou de propósito especial.
[00031] Com referência à Figura 1, o sistema de computação 100 inclui uma ou mais unidades de processamento 110, 115 e memória 120, 125. As unidades de processamento 110, 115 executam instruções executáveis por computador. Uma unidade de processamento pode ser uma unidade de processamento central (“CPU”) de propósito geral, o processador em um circuito integrado de aplicação específica (“ASIC”) ou qualquer outro tipo de processador. Em um sistema de múltiplos processamentos, múltiplas unidades de processamento executam instruções executáveis por computador para aumentar a potência de processamento. Por exemplo, a Figura 1 mostra uma unidade de processamento central 110 assim como uma unidade de processamento ou counidade de processamento de gráficos 115. A memória tangível 120, 125 pode ser uma memória volátil (por exemplo, registros, cache, RAM), uma memória não volátil (por exemplo, ROM, EEPROM, memória flash, etc.), ou alguma combinação das duas, acessível pela unidade (ou unidades) de processamento. A memória 120, 125 armazena o software 180 que implanta uma ou mais inovações para as regras impostas para os modos de previsão intraimagem quando o WPP estiver habilitado, na forma de instruções executáveis por computador adequadas para a execução pela unidade (ou unidades) de processamento.
[00032] Um sistema de computação pode ter recursos adicionais. Por exemplo, o sistema de computação 100 inclui o armazenamento 140, um ou mais dispositivos de entrada 150, um ou mais dispositivos de saída 160, e uma ou mais conexões de comunicação 170. Um mecanismo de interconexão (não mostrado) como um barramento, um controlador ou uma rede interconecta os componentes do sistema de computação 100. Tipicamente, o software de sistema operacional (não mostrado) fornece um ambiente operacional para outro software em execução no sistema de computação 100, e coordena as atividades dos componentes do sistema de computação 100.
[00033] O armazenamento tangível 140 pode ser removível ou não removível, e inclui discos magnéticos, fitas magnéticas ou cassetes, CD- ROMs, DVDs, ou qualquer outro meio que possa ser usado para armazenar informações e que possa ser acessado dentro do sistema de computação 100. O armazenamento 140 armazena instruções para o software 180 que implanta uma ou mais inovações para as regras impostas para os modos de previsão intraimagem quando o WPP estiver habilitado.
[00034] O dispositivo (ou dispositivos) de entrada 150 pode ser um dispositivo de entrada sensível ao toque, como um teclado, mouse, caneta ou trackball, um dispositivo de entrada de voz, um dispositivo de varredura ou outro dispositivo que forneça entrada ao sistema de computação 100. Para o vídeo, o dispositivo (ou dispositivos) de entrada 150 pode ser uma câmera, cartão de vídeo, cartão de sintonizador de TV, módulo de captura de tela, ou dispositivo similar que aceite entrada de vídeo de forma análoga ou digital, ou um CD-ROM ou CD-RW que leia a entrada de vídeo no sistema de computação 100. O dispositivo (ou dispositivos) de saída 160 pode ser um visor, impressora, viva-voz, gravador de CD ou outro dispositivo que forneça saída do sistema de computação 100.
[00035] A conexão (ou conexões) de comunicação 170 habilita a comunicação por um meio de comunicação a outra entidade de computação. O meio de comunicação transporta informações como instruções executáveis por computador, entrada ou saída de áudio ou vídeo ou outros dados em um sinal de dados modulados. Um sinal de dados modulados é um sinal que tem uma ou mais de suas características definidas ou mudadas de tal modo a codificar informações no sinal. A título de exemplo, e não de limitação, os meios de comunicação podem usar uma portadora elétrica, óptica, RF ou outra.
[00036] As inovações podem ser descritas no contexto geral de meios legíveis por computador. Os meios legíveis por computador são quaisquer meios tangíveis disponíveis que possam ser acessados dentro de um ambiente de computação. A título de exemplo, e não de limitação, com o sistema de computação 100, os meios legíveis por computador incluem a memória 120, 125, o armazenamento 140 e combinações de quaisquer dos supracitados.
[00037] As inovações podem ser descritas no contexto geral de instruções executáveis por computador, como aquelas incluídas nos módulos de programa, que são executadas em um sistema de computação em um processador-alvo real ou virtual. Em geral, os módulos de programa incluem rotinas, programas, bibliotecas, objetos, classes, componentes, estruturas de dados, etc. que realizam tarefas particulares ou implantam tipos de dados abstratos particulares. A funcionalidade dos módulos de programa pode ser combinada ou dividida entre módulos de programa conforme desejado em diversas modalidades. As instruções executáveis por computador para os módulos de programa podem ser executadas dentro de um local ou sistema de computação distribuído.
[00038] Os termos “sistema” e “dispositivo” são usados de modo intercambiável no presente documento. A não ser que o contexto indique claramente o contrário, nenhum termo implica qualquer limitação em um tipo de sistema de computação ou dispositivo de computação. Em geral, um sistema de computação ou dispositivo de computação pode ser local ou distribuído, e pode incluir qualquer combinação de hardware de propósito especial e/ou hardware de propósito geral com o software que implanta a funcionalidade descrita no presente documento.
[00039] Os métodos revelados também podem ser implantados com o uso de hardware de computação especializado configurado para realizar qualquer um dos métodos revelados. Por exemplo, os métodos revelados podem ser implantados por um circuito integrado (por exemplo, um ASIC como um processador de sinal digital (“DSP”) de ASIC, uma unidade de processamento de gráficos (“GPU”), ou um dispositivo de lógica programável (“PLD”) como uma matriz de portal programável por campo (“FPGA”)) projetado ou configurado especialmente para implantar qualquer um dos métodos revelados.
[00040] Para o propósito de apresentação, a descrição detalhada usa termos como “determinar” e “usar” para descrever operações de computador em um sistema de computação. Esses termos são abstrações de alto nível para operações realizadas por um computador, e não devem ser confundidas com atos realizados por um ser humano. As operações de computador atuais que correspondem a esses termos variam dependendo da implantação.
II. AMBIENTES DE REDE EXEMPLIFICATIVOS.
[00041] As Figuras 2a e 2b mostram ambientes de rede exemplificativos 201, 202 que incluem codificadores de vídeo 220 e decodificadores de vídeo 270. Os codificadores 220 e decodificadores 270 estão conectados acima de uma rede 250 com o uso de um protocolo de comunicação apropriado. A rede 250 pode incluir a Internet ou outra rede de computador.
[00042] No ambiente de rede 201 mostrado na Figura 2a, cada ferramenta de comunicação em tempo real (“RTC”) 210 inclui tanto um codificador 220 quanto um decodificador 270 para a comunicação bidirecional. Um dado codificador 220 pode produzir uma saída compatível com uma variação ou extensão do padrão H.265/HEVC, do padrão SMPTE 421M, do padrão ISO/IEC 14496-10 (também conhecido como H.264 ou AVC), outro padrão, ou um formato de proprietário, com um decodificador correspondente 270 que aceita dados codificados a partir do codificador 220. A comunicação bidirecional pode fazer parte de uma conferência de vídeo, chamada de telefone de vídeo ou outro cenário de comunicação de duas partes ou múltiplas partes. Embora o ambiente de rede 201 na Figura 2a inclui duas ferramentas de comunicação em tempo real 210, o ambiente de rede 201 pode incluir, em vez disso, três ou mais ferramentas de comunicação em tempo real 210 que participam na comunicação com múltiplas partes.
[00043] Uma ferramenta de comunicação em tempo real 210 gerencia a codificação por um codificador 220. A Figura 3 mostra um sistema codificador exemplificativo 300 que pode ser incluído na ferramenta de comunicação em tempo real 210. Alternativamente, a ferramenta de comunicação em tempo real 210 usa outro sistema codificador. Uma ferramenta de comunicação em tempo real 210 também gerencia a decodificação por um decodificador 270. A Figura 4 mostra um sistema decodificador exemplificador 400, que pode ser incluído na ferramenta de comunicação em tempo real 210. Alternativamente, a ferramenta de comunicação em tempo real 210 usa outro sistema decodificador.
[00044] No ambiente de rede 202 mostrado na Figura 2b, uma ferramenta de codificação 212 inclui um codificador 220 que codifica o vídeo para entrega a múltiplas ferramentas de reprodução 214, que incluem os decodificadores 270. A comunicação unidirecional pode ser fornecida para um sistema de vigilância por vídeo, sistema de monitoramento por câmera da web, apresentação de conferência de área de trabalho remota, ou outro cenário no qual o vídeo seja codificado e enviado de uma localização para uma ou mais outras localizações. Embora o ambiente de rede 202 na Figura 2b inclua duas ferramentas de reprodução 214, o ambiente de rede 202 pode incluir mais ou menos ferramentas de reprodução 214. Em geral, uma ferramenta de reprodução 214 se comunica com a ferramenta de codificação 212 para determinar um fluxo de vídeo para que a ferramenta de reprodução 214 receba. A ferramenta de reprodução 214 recebe o fluxo, armazena temporariamente os dados codificados recebidos por um período apropriado, e começa a decodificação e a reprodução.
[00045] A Figura 3 mostra um sistema codificador exemplificativo 300 que pode ser incluído na ferramenta de codificação 212. Alternativamente, a ferramenta de codificação 212 usa outro sistema codificador. A ferramenta de codificação 212 também pode incluir lógica de controlador do lado do servidor para gerenciar conexões com uma ou mais ferramentas de reprodução 214. A Figura 4 mostra um sistema decodificador exemplificador 400, que pode ser incluído na ferramenta de reprodução 214. Alternativamente, a ferramenta de reprodução 214 usa outro sistema decodificador. Uma ferramenta de reprodução 214 também pode incluir lógica de controlador do lado do cliente para gerenciar conexões com a ferramenta de codificação 212.
III. SISTEMAS DE CODIFICADOR EXEMPLIFICATIVOS.
[00046] A Figura 3 é um diagrama de blocos de um sistema codificador exemplificativo 300 em conjunto com o qual algumas modalidades descritas podem ser implantadas. O sistema codificador 300 pode ser uma ferramenta de codificação de propósito geral com capacidade para operar em qualquer um dos múltiplos modos de codificação como um modo de codificação de baixa latência para comunicação em tempo real, um modo de transcodificação, e um modo de codificação de latência maior para produzir meios para reprodução a partir de um arquivo ou fluxo, ou o mesmo pode ser uma ferramenta de codificação de propósito especial adaptada para tal modo de codificação. O sistema codificador 300 pode ser adaptado para a codificação de um tipo particular de conteúdo (por exemplo, conteúdo de captura de tela). O sistema codificador 300 pode ser implantado como parte de um módulo de sistema operacional, como parte de uma biblioteca de aplicativo, como parte de um aplicativo independente ou com o uso de hardware de propósito especial. No geral, o sistema codificador 300 recebe uma sequência de imagens vídeo de fonte 311 de uma fonte de vídeo 310 e produz dados codificados como saída para um canal 390. A saída de dados codificados para o canal pode incluir o conteúdo codificado com o uso de regras impostas para modos de previsão intraimagem quando o WPP estiver habilitado.
[00047] A fonte de vídeo 310 pode ser uma câmera, uma placa sintonizadora, meios de armazenamento, um módulo de captura de tela ou outra fonte de vídeo digital. A fonte de vídeo 310 produz uma sequência de imagens de vídeo a uma taxa de quadros, por exemplo, de 30 quadros por segundo. Conforme usado no presente documento, o termo “imagem” geralmente se refere a dados de imagem de fonte, convertidos em código ou reconstruídos. Para o vídeo de varredura progressiva, uma imagem é um quadro de vídeo de varredura progressiva. Para o vídeo interlaçado, nas modalidades exemplificativas, um quadro de vídeo interlaçado pode ser desinterlaçado antes da codificação. Alternativamente, dois campos de vídeo interlaçado complementares são codificados juntos como um único quadro de vídeo ou codificados como dois campos codificados separadamente. Além de indicar um quadro de vídeo de varredura progressiva ou um quadro de vídeo de varredura interlaçada, o termo “imagem” pode indicar um único campo de vídeo não pareado, um par complementar de campos de vídeo, um plano de objeto de vídeo que representa um objeto de vídeo em um dado momento ou uma região de interesse em uma imagem maior. O plano de objeto de vídeo ou região pode fazer parte de uma imagem maior que inclui múltiplos objetos ou regiões de uma cena.
[00048] Uma imagem de fonte em chegada 311 está armazenada em uma área de armazenamento em memória temporária da imagem de fonte 320 que inclui múltiplas áreas de armazenamento temporário de imagem 321,322, ... , 32n. Um armazenamento temporário de imagem 321, 322, etc. retém uma imagem de fonte na área de armazenamento da imagem de fonte 320. Após uma ou mais das imagens de fonte 311 terem sido armazenadas nos armazenamentos temporários de imagem 321, 322, etc., um seletor de imagem 330 seleciona uma imagem de fonte individual a partir da área de armazenamento da imagem de fonte 320. A ordem na qual as imagens são selecionadas pelo seletor de imagem 330 para a entrada ao codificador 340 pode diferir da ordem na qual as imagens são produzidas pela fonte de vídeo 310, por exemplo, a codificação de algumas imagens pode ser atrasada em ordem, de modo a permitir que algumas imagens posteriores sejam codificadas primeiro e, dessa forma, facilitar a previsão temporalmente compatível com versões anteriores. Antes do codificador 340, o sistema codificador 300 pode incluir um pré-processador (não mostrado) que realiza pré- processamento (por exemplo, filtragem) da imagem selecionada 331 antes da codificação. O pré-processamento pode incluir a conversão de espaço de cor em componentes primário (por exemplo, luma) e secundário (por exemplo, diferenças de croma em direção ao vermelho e em direção ao azul) processamento de componentes e reamostragem (por exemplo, para reduzir a resolução espacial de componentes de croma) para codificação. Antes da codificação, o vídeo pode ser convertido para um espaço de cor como YUV, no qual os valores de amostra de um componente de luma (Y) representam valores de brilho ou intensidade, e valores de amostra de componentes de croma (U, V) representam valores de diferença de cor. As definições precisas dos valores de diferença de cor (e operações de conversão para/a partir do espaço de cor de YUV para outro espaço de cor como RGB) dependem de implantação. Em geral, conforme usado no presente documento, o termo YUV indica qualquer espaço de cor com um componente de luma (ou luminância) e um ou mais componentes de croma (ou crominância), incluindo Y’UV, YIQ, Y’IQ e YDbDr, assim como variações como YCbCr e YCoCg. Os valores de amostra de croma podem ser subamostrados a uma taxa de amostragem de croma inferior (por exemplo, para o formato YUV 4:2:0), ou os valores de amostra de croma podem ter a mesma resolução que os valores de amostra de luma (por exemplo, para o formato YUV 4:4:4). Ou, o vídeo pode ser codificado em outro formato (por exemplo, o formato RGB 4:4:4, o formato GBR 4:4:4 ou o formato BGR 4:4:4). Em particular, o vídeo de conteúdo de tela pode ser codificado no formato RGB 4:4:4, no formato GBR 4:4:4 ou no formato BGR 4:4:4.
[00049] O codificador 340 codifica a imagem selecionada 331para produzir uma imagem convertida em código 341 e também produz sinais de operação de controle de gerenciamento de memória (“MMCO”) 342 ou informações de conjunto de imagens de referência (“RPS”). O RPS é o conjunto de imagens que pode ser usado para referência na compensação de movimento para uma imagem atual ou qualquer imagem subsequente. Se a imagem atual não for a primeira imagem que foi codificada, quando realizar seu processo de codificação, o codificador 340 pode usar uma ou mais imagens codificadas/decodificadas anteriormente 369 que foram armazenadas em uma área de armazenamento em memória temporária da imagem decodificada 360. Tais imagens decodificadas armazenadas 369 são usadas como imagens de referência para previsão interimagem do conteúdo da imagem de fonte atual 331. As informações de MMCO/RPS 342 indicam a um decodificador quais imagens reconstruídas podem ser usadas como imagens de referência, e, portanto, devem ser armazenadas em uma área de armazenamento de imagem.
[00050] Em geral, o codificador 340 inclui múltiplos módulos de codificação que realizam tarefas de codificação como o particionamento em peças, estimativa e previsão intraimagem, estimativa de movimento e compensação, transformadas de frequência, codificação por quantização e entropia. As operações exatas realizadas pelo codificador 340 podem variar dependendo do formato de compactação. O formato dos dados codificados de saída pode ser uma variação ou extensão do formato H.265/HEVC, do formato Windows Media Video, do formato VC1, do formato MPEG-x (por exemplo, MPEG-1, MPEG-2 ou MPEG-4), do formato H.26x (por exemplo, H.261, H.262, H.263, H.264) ou outro formato.
[00051] O codificador 340 pode particionar uma imagem em múltiplas peças do mesmo tamanho ou de diferentes tamanhos. Por exemplo, o codificador 340 divide a imagem ao longo de fileiras de peças e colunas de peças que, com os limites de imagem, definem os limites horizontal e vertical de peças dentro da imagem, em que cada peça é uma região retangular. As peças são usadas frequentemente para fornecer opções para o processamento paralelo. Uma imagem também pode ser organizada como um ou mais fatias, em que uma fatia pode ser toda uma imagem ou uma seção da imagem. Uma fatia pode ser decodificada independentemente de outras fatias em uma imagem, o que melhora a resiliência ao erro. O conteúdo de uma fatia ou de uma peça é particionado adicionalmente em blocos ou outros conjuntos de valores de amostra para os propósitos de codificação e decodificação. As fileiras de certos blocos (por exemplo, as fileiras ee unidades de árvore de codificação de uma fatia de acordo com o padrão H.265/HEVC) podem ser codificadas em paralelo com o uso de WPP, conforme explicado adicionalmente abaixo.
[00052] Para a sintaxe de acordo com o padrão H.265/HEVC, o codificador divide o conteúdo de uma imagem (ou fatia ou peça) em unidades de árvore de codificação. Uma unidade de árvore de codificação (“CTU”) inclui valores de amostra de luma organizados como um bloco de árvore de codificação de luma (“CTB”) e valores de amostra de croma correspondentes organizados como dois CTBs de croma. O tamanho de uma CTU (e seus CTBs) é selecionado pelo codificador. Um CTB de luma pode conter, por exemplo, valores de amostra de luma de 64x64, 32x32 ou 16x16. Uma CTU inclui uma ou mais unidades de codificação. Uma unidade de codificação (“CU”) tem um bloco de codificação de luma (“CB”) e dois CBs de croma correspondentes. Por exemplo, uma CTU com um CTB de luma 64x64 e dois CTBs de croma 64x64 (formato YUV 4:4:4) podem ser divididas em quatro CUs, sendo que cada CU inclui um CB de luma 32x32 e dois CB de croma 32x32, e sendo que cada CU é possivelmente dividida ainda mais em Cus menores. Ou, como outro exemplo, uma CTU com um CTB de luma 64x64 e dois CTBs de croma 32x32 (formato YUV 4:2:0) podem ser divididos em quatro CUs, sendo que cada CU inclui um CB de luma 32x32 e dois CBs de croma 16x16, e sendo que cada CU é possivelmente dividida ainda mais em Cus menores. O menor tamanho permitido de CU (por exemplo, 8x8, 16x16) pode ser sinalizado no fluxo de dados.
[00053] Em geral, uma CU tem um modo de previsão, como inter ou intra. Uma CU inclui uma ou mais unidades de previsão para propósitos de sinalização das informações de previsão (como detalhes do modo de previsão, valores de deslocamento, etc.) e/ou processamento de previsão. Uma unidade de previsão (“PU”) tem um bloco de previsão de luma (“PB”) e dois PBs de croma. De acordo com o padrão H.265/HEVC, para uma CU intraprevista, a PU tem o mesmo tamanho que a CU, a não ser que a CU tenha o menor tamanho possível (por exemplo, 8x8). Nesse caso, a CU pode ser dividida em quatro PUs menores (por exemplo, cada 4x4 se o menor tamanho possível de CU for 8x8, para previsão intraimagem) ou a PU pode ter o menor tamanho possível de CU, conforme indicado por um elemento de sintaxe para a CU. Para partições simétricas ou assimétricas usadas na previsão intra- BC, entretanto, uma CU maior pode ser dividida em múltiplas PUs.
[00054] Uma CU também tem uma ou mais unidades de transformada para propósitos De codificação/decodificação residual, em que uma unidade de transformada (“TU”) tem um bloco de transformada de luma (“TB”) e dois TBs de croma. Uma PU em uma CU intraprevista pode conter uma única TU (igual em tamanho à PU) ou múltiplas TUs. O codificador decide como particionar o vídeo em CTUs, CUs, PUs, TUs, etc.
[00055] Nas implantações H.265/HEVC, uma fatia pode incluir um único segmento de fatia (segmento de fatia independente) ou ser dividido em múltiplos segmentos de fatia (segmento de fatia independente e um ou mais segmentos de fatia dependentes). Um segmento de fatia é um número inteiro de CTUs ordenadas em sequência em uma varredura de peça, contido em uma única unidade de camada de abstração em rede (“NAL”). Para um segmento de fatia independente, um cabeçalho de segmento de fatia inclui valores dos elementos de sintaxe que se aplicam para o segmento de fatia independente. Para um segmento de fatia dependente, um cabeçalho de segmento de fatia truncado inclui poucos valores de elementos de sintaxe que se aplicam para aquele segmento de fatia dependente, e os valores dos outros elementos de sintaxe para o segmento de fatia dependente são inferidos a partir dos valores para o segmento de fatia independente precedente na ordem de decodificação.
[00056] Conforme usado no presente documento, o termo “bloco” pode indicar um macrobloco, uma unidade de dados residual, CB, PB ou TB, ou algum outro conjunto de valores de amostra, dependendo do contexto. O termo “unidade” pode indicar um macrobloco, CTU, CU, PU, TU ou algum outro conjunto de blocos, ou pode indicar um único bloco, dependendo do contexto.
[00057] Retornando à Figura 3, o codificador representa um bloco, linha ou coluna intraconvertida em código de uma imagem de fonte 331 em termos de previsão a partir de outros valores de amostra reconstruídos anteriormente na imagem 331. Para a previsão intracópia, um estimador intraimagem estima o deslocamento de um bloco, linha ou coluna atual até uma posição nos outros valores de amostra reconstruídos anteriormente. Um bloco, linha ou coluna de referência de valores de amostra na imagem são usados para gerar valores de previsão para o bloco, linha ou coluna atual. Por exemplo, para a previsão de cópia intrabloco (“BC”), um estimador intraimagem estima o deslocamento a partir de um bloco atual até uma posição em valores de amostra reconstruídos anteriormente na imagem. Um bloco de referência é um bloco de valores de amostra na imagem que fornecem valores de previsão de BC para o bloco atual. O bloco de referência pode ser indicado com um valor de vetor de bloco (“BV”) (determinado na estimativa de BV). Como outro exemplo, para a previsão de cópia intralinha (“LC”), um estimador intraimagem estima o deslocamento a partir de uma linha atual (de um bloco atual) até uma posição e, valores de amostra reconstruídos anteriormente na imagem. Uma linha de referência é uma linha de valores de amostra na imagem que mostram valores de previsão de LC para a linha atual. A linha de referência pode ser indicada com um valor de desvio, que indica o deslocamento a partir da linha atual até a linha de referência. Como outro exemplo, para a previsão de cópia coluna (“SC”), um estimador intraimagem estima o deslocamento a partir de uma coluna atual (de um bloco atual) até uma posição e, valores de amostra reconstruídos anteriormente na imagem. Uma coluna de referência é uma série de valores de amostra na imagem que são usados para gerar valores de previsão de SC para a coluna atual. A coluna de referência pode ser indicada com um valor de desvio (que indica o deslocamento a partir da coluna atual até a coluna de referência) e um valor de comprimento de coluna. Dependendo da implantação, o codificador pode realizar a estimativa de desvio para um bloco, linha ou coluna com o uso de valores de amostra de entrada ou valores de amostra reconstruídos (valores de amostra anteriormente codificados na mesma imagem). Quando o WPP estiver habilitado, o estimador intraimagem pode determinar os deslocamentos (por exemplo, para valores de BV na previsão intra-BC ou para valores de desvio na previsão intra-SC ou na previsão intra-LC) consistente com restrições em localidades das regiões de referência, conforme explicado abaixo.
[00058] Para a previsão intraespacial para um bloco, o estimador intraimagem estima a extrapolação dos valores de amostra reconstruídos vizinhos no bloco.
[00059] O estimador intraimagem pode emitir informações de previsão (como valores de BV para previsão intra-BC, valores de desvio para previsão intra-LC ou previsão intra-SC, ou o modo de previsão (direção) para previsão intraespacial), que é convertida em código por entropia. Um previsor de previsão intraimagem aplica as informações de previsão para determinar valores de intraprevisão.
[00060] Para um modo de codificação da paleta, o codificador 340 representa pelo menos alguns dos valores de amostra de uma CU ou outra unidade com o uso de uma paleta. A paleta representa cores usadas na unidade. Por exemplo, a paleta mapeia valores de índice 0, 1, 2, ..., p a cores correspondentes. Durante a codificação da unidade, os valores de índice apropriados substituem os valores de amostra em posições na unidade. Um valor raro na unidade pode ser codificado com o uso de um valor de código de escape e valores literais, em vez de com o uso de um valor de índice na paleta. A paleta pode mudar de unidade para unidade, e as informações que especificam as paletas podem ser sinalizadas no fluxo de dados.
[00061] O codificador 340 representa um bloco previsto convertido em código por interimagem de uma imagem de fonte 331 em termos de previsão a partir das imagens de referência. Um estimador de movimento estima o movimento do bloco em relação a uma ou mais imagens de referência 369. Quando múltiplas imagens de referência forem usadas, as múltiplas imagens de referência podem ser provenientes de diferentes direções temporais ou da mesma direção temporal. Uma região de referência de previsão com movimento compensado é uma região de valores de amostra na imagem (ou imagens) de referência que são usadas para gerar valores de previsão com movimento compensado para um bloco de valores de amostra de uma imagem atual. O estimador de movimento emite informações de movimento como informações do vetor de movimento (“MV”), que são convertidas em código por entropia. Um compensador de movimento aplica MVs às imagens de referência 369 para determinar os valores de previsão com movimento compensado para a previsão interimagem.
[00062] O codificador pode determinar as diferenças (se houver) entre valores de previsão de um bloco (intra ou inter) e valores originais correspondentes. Esses valores de previsão residual são codificados adicionalmente com o uso de uma transformada de frequência (se a transformada de frequência não for ignorada), codificação por quantização e entropia. Por exemplo, o codificador 340 define valores para parâmetro de quantização (“QP”) a respeito de uma imagem, peça, fatia e/ou outra porção de vídeo, e quantiza os coeficientes de transformada, consequentemente. O conversor em código por entropia do codificador 340 compacta valores de coeficiente de transformada quantizados, assim como determinadas informações externas (por exemplo, informações de MV, informações de BV, valores de QP, decisões de modo, escolhas de parâmetro). As técnicas de codificação por entropia incluem codificação Exponencial-Golomb, codificação de Golomb-Rice, codificação aritmética, codificação diferencial, codificação de Huffman, codificação run-length, codificação de comprimento variável para comprimento variável (“V2V”), codificação de comprimento variável para comprimento fixo (“V2F”), codificação de Lempel-Ziv (“LZ”), codificação de dicionário, codificação por entropia de particionamento de intervalo de probabilidade (“PIPE”), e combinações do supracitado. O conversor em código por entropia pode usar diferentes técnicas de codificação para diferentes tipos de informações, pode aplicar múltiplas técnicas em combinação (por exemplo, aplicando-se a codificação de Golomb-Rice seguida pela codificação aritmética), e pode escolher de entre múltiplas tabelas de código dentro de uma técnica de codificação particular. Em algumas implantações, a transformada de frequência pode ser ignorada. Nesse caso, os valores de previsão residual podem ser quantizados e convertidos em código por entropia. Quando o modo de codificação da paleta for usado, o conversor em código por entropia pode codificar os dados de paleta. O codificador 340 pode usar a previsão de paleta conforme explicado abaixo.
[00063] Um filtro de deblocagem adaptável está incluído dentro do ciclo de compensação de movimento (ou seja, na filtragem “em ciclo”) no codificador 340 para suavizar as descontinuidades ao longo das fileiras e/ou colunas de limite de bloco em uma imagem decodificada. Outra filtragem (como a filtragem de desanelação, a filtragem em ciclo adaptável (“ALF”), ou a filtragem de desvio de amostra adaptável (“SAO”); não mostradas) pode ser aplicada alternativa ou adicionalmente como operações de filtragem em ciclo.
[00064] Os dados codificados produzidos pelo codificador 340 incluem elementos de sintaxe para diversas camadas da sintaxe de fluxo de dados. Para a sintaxe de acordo com o padrão H.265/HEVC, por exemplo, um conjunto de parâmetros de imagem (“PPS”) é uma estrutura de sintaxe que contém elementos de sintaxe que podem ser associados a uma imagem. Um PPS pode ser usado para uma única imagem, ou um PPS pode ser reusado para múltiplas imagens em uma sequência. Um PPS é sinalizado tipicamente separado dos dados codificados para uma imagem (por exemplo, uma unidade de camada de abstração em rede (“NAL”) para um PPS, e uma ou mais outras unidades de NAL para dados codificados para uma imagem). Dentro dos dados codificados para uma imagem, um elemento de sintaxe indica qual PPS deve ser usada para a imagem. De modo similar, para a sintaxe de acordo com o padrão H.265/HEVC, um conjunto de parâmetros de sequência (“SPS”) é uma estrutura de sintaxe que contém elementos de sintaxe que podem ser associados a uma sequência de imagens. Um fluxo de dados pode incluir um único SPS ou múltiplos SPSs. Um SPS é sinalizado tipicamente separado de outros dados para a sequência, e um elemento de sintaxe nos outros dados indicam qual SPS deve ser usado.
[00065] As imagens convertidas em código 341 e as informações de MMCO/RPS 342 (ou informações equivalentes às informações de MMCO/RPS 342, visto que as dependências e as estruturas de ordenação para as imagens já são conhecidas no codificador 340) são processadas por um emulador de processo de decodificação 350. O emulador de processo de decodificação 350 implanta parte da funcionalidade de um decodificador, por exemplo, tarefas de decodificação para reconstruir as imagens de referência. De modo consistente com as informações de MMCO/RPS 342, o emulador de processos de decodificação 350 determina se uma dada imagem convertida em código 341 precisa ser reconstruída e armazenada para uso como uma imagem de referência na previsão interimagem das imagens subsequentes que devem ser codificadas. Se uma imagem convertida em código 341 precisar ser armazenada, o emulador de processo de decodificação 350 modela o processo de decodificação que seria conduzido por um decodificador que recebe a imagem convertida em código 341 e produz uma imagem decodificada correspondente 351. Ao fazer isso, quando o codificador 340 tiver usado a imagem (ou imagens) decodificada 369 que foram armazenadas na área de armazenamento de imagem decodificada 360, o emulador de processo de decodificação 350 também usa a imagem (ou imagens) decodificada 369 proveniente da área de armazenamento 360 como parte do processo de decodificação.
[00066] A área de armazenamento em memória temporária da imagem decodificada 360 inclui múltiplas áreas de armazenamento temporário de imagem 361,362, ... , 36n. De modo consistente com as informações de MMCO/RPS 342, o emulador de processo de decodificação 350 gerencia o conteúdo da área de armazenamento 360 a fim de identificar quaisquer armazenamentos temporários de imagem 361, 362, etc. com imagens que não sejam mais necessárias pelo codificador 340 para uso como imagens de referência. Após modelar o processo de decodificação, o emulador de processo de decodificação 350 armazena uma imagem recém-decodificada 351 em um armazenamento temporário de imagem 361, 362, etc. que foi identificado desse modo.
[00067] As imagens convertidas em código 341 e as informações de MMCO/RPS 342 são armazenadas temporariamente em uma área de dados temporários convertidos em código 370. Os dados convertidos em código que estão agregados na área de dados convertidos em código 370 contêm, como parte da sintaxe de um fluxo de dados de vídeo convertidos em código elementar, dados codificados para uma ou mais imagens. Os dados convertidos em código que estão agregados na área de dados convertidos em código 370 também podem incluir metadados de mídia relacionados aos dados de vídeo convertidos em código (por exemplo, como um ou mais parâmetros em uma ou mais mensagens de informações de melhoria suplementares (“SEI”) ou mensagens de informações de usabilidade de vídeo (“VUI”)).
[00068] Os dados agregados 371 provenientes da área de dados temporários convertidos em código 370 são processados por um codificador de canal 380. O codificador de canal 380 pode empacotar e/ou multiplexar os dados agregados para a transmissão ou o armazenamento como um fluxo de mídia (por exemplo, de acordo com um formato de fluxo de programa de mídia ou fluxo de transporte como ITU-T H.222.0 | ISO/IEC 13818-1 ou um formato de protocolo de transporte em tempo real pela Internet como IETF RFC 3550), em qual caso o codificador de canal 380 pode adicionar elementos de sintaxe como parte da sintaxe do fluxo de transmissão de mídia. Ou, o codificador de canal 380 pode organizar os dados agregados para armazenamento como um arquivo (por exemplo, de acordo com um formato de recipiente de mídia como ISO/IEC 14496-12), em qual caso o codificador de canal 380 pode adicionar elementos de sintaxe como parte da sintaxe do arquivo de armazenamento de mídia. Ou, mais geralmente, o codificador de canal 380 pode implantar um ou mais protocolos de multiplexação ou protocolos de transporte de sistema de mídia, em qual caso o codificador de canal 380 pode adicionar elementos de sintaxe como parte da sintaxe do protocolo (ou protocolos). O codificador de canal 380 fornece saída a um canal 390, que representa o armazenamento, uma conexão de comunicações ou outro canal para a saída. O codificador de canal 380 ou o canal 390 também pode incluir outros elementos (não mostrados), por exemplo, para a codificação de correção de erro de encaminhamento (“FEC”) e modulação de sinal analógico.
IV. SISTEMAS DE DECODIFICADORES EXEMPLIFICATIVOS.
[00069] A Figura 4 é um diagrama de blocos de um sistema decodificador exemplificativo 400 em conjunto com o qual algumas modalidades descritas podem ser implantadas. O sistema decodificador 400 pode ser uma ferramenta de decodificação de propósito geral com capacidade para operar em qualquer um dos múltiplos modos de decodificação como um modo de decodificação de baixa latência para comunicação em tempo real e um modo de decodificação de latência maior para meios para reprodução a partir de um arquivo ou fluxo, ou o mesmo pode ser uma ferramenta de decodificação de propósito especial adaptada para tal modo de decodificação. O sistema decodificador 400 pode ser implantado como parte de um módulo de sistema operacional, como parte de uma biblioteca de aplicativo, como parte de um aplicativo independente ou com o uso de hardware de propósito especial. No geral, o sistema decodificador 400 recebe dados convertidos em código de um canal 410 e produz imagens reconstruídas como saída para um destino de saída 490. Os dados codificados recebidos podem incluir conteúdo codificado com o uso de regras impostas para modos de previsão intraimagem quando o WPP estiver habilitado.
[00070] O sistema decodificador 400 inclui um canal (410, que pode representar um armazenamento, uma conexão de comunicações ou outro canal para dados convertidos em código como entrada. O canal 410 produz dados convertidos em código que tiveram o canal convertido em código. Um decodificador de canal 420 pode processar os dados convertidos em código. Por exemplo, o decodificador de canal 420 desempacota e/ou demultiplexa dados que foram agregados para a transmissão ou o armazenamento como um fluxo de mídia (por exemplo, de acordo com um formato de fluxo de programa de mídia ou fluxo de transporte como ITU-T H.222.0 | ISO/IEC 13818-1 ou um formato de protocolo de transporte em tempo real pela Internet como IETF RFC 3550), em qual caso o decodificador de canal (420) possa adicionar elementos de sintaxe como parte da sintaxe do fluxo de transmissão de mídia. Ou, o decodificador de canal 420 separa dados de vídeo convertidos em código que foram agregados para o armazenamento como um arquivo (por exemplo, de acordo com um formato de recipiente de mídia como ISO/IEC 14496-12), em qual caso o decodificador de canal 420 pode analisar elementos de sintaxe adicionados como parte da sintaxe do arquivo de armazenamento de mídia. Ou, mais geralmente, o decodificador de canal 420 pode implantar um ou mais protocolos de demultiplexação ou protocolos de transporte de sistema de mídia, em qual caso o decodificador de canal 420 pode analisar elementos de sintaxe adicionados como parte da sintaxe do protocolo (ou protocolos). O canal 410 ou o decodificador canal 420 também pode incluir outros elementos (não mostrados), por exemplo, para a decodificação e a desmodulação de sinal analógico.
[00071] Os dados convertidos em código 421 que são emitidos do decodificador de canal 420 estão armazenados em uma área de dados temporários convertidos em código 430 até que uma quantidade suficiente de tais dados seja recebida. Os dados convertidos em código 421 incluem imagens convertidas em código 431 e informações de MMCO/RPS 432. Os dados convertidos em código 421 na área de dados convertidos em código 430 contêm, como parte da sintaxe de um fluxo de dados de vídeo convertidos em código elementar, dados convertidos em código para uma ou mais imagens. Os dados convertidos em código 421 na área de dados convertidos em código 430 também podem incluir metadados de mídia relacionados aos dados de vídeo convertidos em código (por exemplo, como um ou mais parâmetros em uma ou mais mensagens de SEI ou mensagens de VUI).
[00072] Em geral, a área de dados convertidos em código 430 armazena temporariamente os dados convertidos em código 421 até que tais dados convertidos em código 421 sejam usados pelo decodificador 450. Nesse ponto, os dados convertidos em código para uma imagem convertida em código 431 e as informações de MMCO/RPS432 são transferidos da área de dados convertidos em código 430 para o decodificador 450. Conforme a decodificação continua, novos dados convertidos em código são adicionados à área de dados convertidos em código 430 e os dados convertidos em código mais antigos permanecem na área de dados convertidos em código 430 são transferidos para o decodificador 450.
[00073] O decodificador 450 decodifica uma imagem convertida em código 431 para produzir uma imagem decodificada correspondente 451. Uma imagem pode ser particionada em múltiplas peças do mesmo tamanho ou de tamanhos diferentes. Uma imagem também pode ser organizada como uma ou mais fatias. O conteúdo de uma fatia ou peça pode ser particionado ainda mais em blocos ou outros conjuntos de valores de amostra. Se a imagem foi codificada com o WPP habilitado (com o uso de WPP, ou, de outro modo, de maneira consistente com o uso do WPP durante a decodificação), as fileiras de certos blocos (por exemplo, as fileiras de CTUs de acordo com o padrão H.265/HEVC) podem ser decodificadas em paralelo com o uso de WPP, conforme explicado adicionalmente abaixo.
[00074] Conforme apropriado, quando realizar seu processo de decodificação, o decodificador 450 pode usar uma ou mais imagens decodificadas anteriormente 469 como imagens de referência para a previsão interimagem. O decodificador 450 lê tais imagens decodificadas anteriormente 469 a partir de uma área de armazenamento em memória temporária da imagem decodificada 460. Em geral, o decodificador 450 inclui múltiplos módulos de decodificação que realizam as tarefas de decodificação como decodificação de entropia, previsão intraimagem, previsão interimagem com movimento compensado, quantização inversa, transformadas de frequência inversas (caso não ignoradas), e união de peças. As operações exatas realizadas pelo decodificador 450 podem variar dependendo do formato de compactação.
[00075] Por exemplo, o decodificador 450 recebe dados codificados para uma imagem compactada ou sequência de imagens e produz uma saída que inclui a imagem decodificada 451. No decodificador 450, um armazenamento temporário recebe dados codificados para uma imagem compactada e, em um armazenamento temporário, torna os dados codificados recebidos disponíveis para um decodificador por entropia. O decodificador por entropia decodifica por entropia os dados quantizados codificados por entropia assim como informações externas codificadas por entropia, que tipicamente aplicam o inverso da codificação por entropia realizada no codificador. Quando o modo de decodificação da paleta for usado, o decodificador por entropia pode decodificar os dados de paleta. O decodificador 450 pode usar a previsão de paleta conforme explicado abaixo.
[00076] Um compensador de movimento aplica informações de movimento a uma ou mais imagens de referência para formar valores de previsão com movimento compensado para quaisquer blocos interconvertidos em código da imagem que é reconstruída. Um módulo de previsão intraimagem pode prever espacialmente os valores de amostra de um bloco atual a partir de valores de amostra vizinhos reconstruídos anteriormente. Ou, para previsão intra-BC, previsão intra- LC ou previsão intra-SC, o módulo de previsão intraimagem pode prever valores de amostra de um bloco, uma linha ou uma coluna atual com o uso de valores de amostra reconstruídos anteriormente de um bloco, uma linha ou uma coluna de referência na imagem, o que é indicado com um valor de deslocamento. Especificamente, o bloco/linha/coluna de referência pode ser indicado com um valor de BV (para a previsão intra-BC), valor de desvio (para a previsão intra-LC) ou o valor de desvio e o valor de comprimento de coluna (para a previsão intra-SC). Quando o WPP estiver habilitado, os deslocamentos (por exemplo, para valores de BV na previsão intra-BC ou para valores de desvio na previsão intraSC ou na previsão intra-LC) são consistentes com restrições em localidades das regiões de referência, conforme explicado abaixo.
[00077] O decodificador 450 também reconstrói valores de previsão residual. Um quantizador inverso quantiza inversamente dados decodificados por entropia. Por exemplo, o decodificador 450 define valores para QP a respeito de uma imagem, peça, fatia e/ou outra porção de vídeo com base em elementos de sintaxe no fluxo de dados, e quantiza inversamente os coeficientes de transformada, consequentemente. Um transformador de frequência inversa converte os dados de domínio de frequência quantizados em dados de domínio espacial. Em algumas implantações, a transformada de frequência pode ser ignorada, em qual caso, a transformada de frequência inversa também é ignorada. Se for o caso, os valores de previsão residual podem ser decodificados por entropia e quantizadas inversamente. Para um bloco previsto interimagem, o decodificador 450 combina valores de previsão residual reconstruídos com valores de previsão com movimento compensado. O decodificador 450 pode combinar, de modo similar, valores de previsão residual com valores de previsão a partir de previsão intraimagem.
[00078] Para um modo de decodificação da paleta, o decodificador 450 usa uma paleta que representa pelo menos alguns dos valores de amostra de uma CU ou outra unidade. A paleta mapeia valores de índice a cores correspondentes. Durante a decodificação, para posições na unidade, os valores de índice provenientes da paleta são substituídos pelos valores de amostra apropriados. Um valor de escape convertido em código na unidade pode ser decodificado com o uso de um valor de código de escape e valores literais. A paleta pode mudar de unidade para unidade, e as informações que especificam as paletas podem ser sinalizadas no fluxo de dados.
[00079] Um filtro de deblocagem adaptável está incluído dentro do ciclo de compensação de movimento no decodificador de vídeo 450 para suavizar as descontinuidades ao longo das fileiras e/ou colunas de limite de bloco na imagem decodificada 451. Outra filtragem (como a filtragem de desanelação, ALF ou SAO; não mostradas) pode ser aplicada alternativa ou adicionalmente como operações de filtragem em ciclo.
[00080] A área de armazenamento em memória temporária da imagem decodificada 460 inclui múltiplas áreas de armazenamento temporário de imagem 461, 462, ... , 46n. A área de armazenamentode imagem decodificada 460 é um exemplo de um armazenamento temporário de imagem decodificada. O decodificador 450 usa as informações de MMCO/RPS 432 para identificar um armazenamento temporário de imagem 461, 462, etc. no qual o mesmo pode armazenar uma imagem decodificada 451. O decodificador 450 armazena a imagem decodificada 451 naquele armazenamento temporário de imagem.
[00081] Um sequenciador de saída 480 identifica quando a próxima imagem que deve ser produzia na ordem de saída está disponível na área de armazenamento de imagem decodificada 460. Quando a próxima imagem 481 a ser produzida na ordem de saída estiver disponível na área de armazenamento de imagem decodificada 460, a mesma é lida pelo sequenciador de saída 480 e emitida para o destino de saída 490 (por exemplo, visor). Em geral, a ordem na qual as imagens são emitidas da área de armazenamento de imagem decodificada 460 pelo sequenciador de saída 480 podem diferir da ordem na qual as imagens são decodificadas pelo decodificador 450.
V. CODIFICADORES DE VÍDEO EXEMPLIFICATIVOS.
[00082] As Figuras 5a e 5b são um diagrama de blocos de um codificador de vídeo generalizado 500 em conjunto com o qual algumas modalidades descritas podem ser implantadas. O codificador 500 recebe uma sequência de imagens de vídeo que inclui uma imagem atual como um sinal de vídeo de entrada 505 e produz dados codificados em um fluxo de dados de vídeo convertidos em código 595 como saída.
[00083] O codificador 500 tem base em bloco e usa um formato de bloco que depende da implantação. Os blocos podem ser subdivididos ainda mais em diferentes estágios, por exemplo, na previsão, na transformada de frequência e/ou na codificação por entropia estágios. Por exemplo, uma imagem pode ser dividida em blocos 64x64, blocos 32x32 ou blocos 16x16, que pode, por sua vez, ser dividida em blocos menores de valores de amostra para a codificação e a decodificação. Em implantações de codificação para o padrão H.265/HEVC, o codificador particiona uma imagem em CTUs (CTBs), CUs (CBs), PUs (PBs) e TU (TBs).
[00084] O codificador 500 compacta imagens com o uso de codificação intraimagem e/ou codificação interimagem. Muitos dos componentes do codificador 500 são usados tanto para a codificação intraimagem quanto para a codificação interimagem. As operações exatas realizadas por esses componentes podem variar dependendo do tipo de informações que são compressadas.
[00085] Um módulo de agrupamento em peças 510 particiona, opcionalmente, uma imagem em múltiplas peças do mesmo tamanho ou de tamanhos diferentes. Por exemplo, o módulo de agrupamento em peças 510 divide a imagem ao longo de fileiras de peças e colunas de peças que, com os limites de imagem, definem os limites horizontal e vertical de peças dentro da imagem, em que cada peça é uma região retangular. Em implantações H.265/HEVC, o codificador 500 particiona uma imagem em uma ou mais fatias, em que cada fatia inclui um ou mais segmentos de fatia. As fileiras de certos blocos (por exemplo, as fileiras de CTUs de uma fatia de acordo com o padrão H.265/HEVC) podem ser codificadas em paralelo com o uso de WPP, conforme explicado adicionalmente abaixo.
[00086] O controle de codificação geral 520 recebe imagens para o sinal de vídeo de entrada 505 assim como retroalimentação (não mostrado) a partir de diversos módulos do codificador 500. No geral, o controle de codificação geral 520 fornece sinais de controle (não mostrados) a outros módulos (como o módulo de agrupamento em peças 510, o transformador/escalonador/quantizador 530, o escalonador/transformador inverso 535, o estimador intraimagem 540, o estimador de movimento 550 e o comutador intra/inter) para definir e mudar os parâmetros de codificação durante a codificação. Em particular, o controle de codificação geral 520 pode decidir se e como usar a previsão de paleta, a previsão intra-BC, a previsão intra-LC e a previsão intra-SC durante a codificação. O controle de codificação geral 520 também pode avaliar resultados intermediários durante a codificação, por exemplo, realizar análise de taxa de distorção. O controle de codificação geral 520 produz dados de controle geral 522 que indicam decisões feitas durante a codificação, para que um decodificador correspondente possa tomar decisões consistentes. Os dados de controle geral 522 são fornecidos ao formatador/conversor em código por entropia do cabeçalho 590.
[00087] Se a imagem atual for prevista com o uso de previsão interimagem, um estimador de movimento 550 estima o movimento de blocos de valores de amostra de uma imagem atual do sinal de vídeo de entrada 505 em relação a uma ou mais imagens de referência. O armazenamento temporário de imagem decodificada 570 armazena temporariamente uma ou mais imagens reconstruídas convertidas em código anteriormente para uso como imagens de referência. Quando múltiplas imagens de referência forem usadas, as múltiplas imagens de referência podem ser provenientes de diferentes direções temporais ou da mesma direção temporal. O estimador de movimento 550 produz como dados de movimento de informações externas 552 como dados de MV, valores de índice de modo de união, e dados de seleção da imagem de referência. Os dados de movimento 552 são fornecidos ao formatador/conversor em código por entropia do cabeçalho 590 assim como o compensador de movimento 555.
[00088] O compensador de movimento 555 aplica MVs à imagem (ou imagens) de referência reconstruída proveniente do armazenamento temporário de imagem decodificada 570. O compensador de movimento 555 produz previsões com movimento compensado para a imagem atual.
[00089] Em uma trajetória separada dentro do codificador 500, um estimador intraimagem 540 determina como realizar a previsão intraimagem para os blocos dos valores de amostra de uma imagem atual do sinal de vídeo de entrada 505. A imagem atual pode ser convertida em código total ou parcialmente com o uso de codificação intraimagem. O uso de valores de uma reconstrução 538 da imagem atual, para a previsão intraespacial, o estimador intraimagem 540 determina como prever espacialmente os valores de amostra de um bloco atual da imagem atual a partir de valores de amostra vizinhos reconstruídos anteriormente da imagem atual.
[00090] Ou, para a previsão intracópia, um estimador intraimagem 540 estima o deslocamento de um bloco, linha ou coluna atual até uma posição nos outros valores de amostra reconstruídos anteriormente. Um bloco, linha ou coluna de referência de valores de amostra na imagem são usados para gerar valores de previsão para o bloco, linha ou coluna atual. Por exemplo, para a previsão intra-BC, o estimador intraimagem 540 estima o deslocamento desde um bloco atual até um bloco de referência, que pode ser indicado com um valor de BV. Como outro exemplo, para previsão intra-LC, o estimador intraimagem 540 estima o deslocamento desde uma linha atual (de um bloco atual) até uma linha de referência, que pode ser indicado com um valor de desvio (que indica o deslocamento desde a linha atual até a linha de referência). Como outro exemplo, para a previsão intra-SC, um estimador intraimagem estima o deslocamento desde uma coluna atual (de um bloco atual) até uma coluna de referência, que pode ser indicado com um valor de desvio (que indica o deslocamento desde a coluna atual até a coluna de referência) e um valor de comprimento de coluna. Quando o WPP estiver habilitado, o estimador intraimagem 540 pode determinar os deslocamentos (por exemplo, para valores de BV na previsão intra-BC ou para valores de desvio na previsão intra-SC ou na previsão intra-LC) consistente com restrições em localidades das regiões de referência, conforme explicado abaixo.
[00091] Dependendo da implantação, o estimador intraimagem 540 pode realizar a estimativa de desvio para o bloco, a linha ou a coluna atual com o uso de valores de amostra de entrada, valores de amostra reconstruídos antes da filtragem em ciclo ou valores de amostra reconstruídos após a filtragem em ciclo. Em geral, com o uso de valores de amostra de entrada ou não filtrados, os valores de amostra reconstruídos para a estimativa de desvio, o estimador intraimagem 540 pode evitar um gargalo de processamento sequencial (que pode resultar dos valores de amostra de filtragem reconstruídos de um bloco, uma linha, uma coluna de referência, etc. antes da estimativa de desvio/previsão intracópia). Por outro lado, armazenar os valores de amostra reconstruídos não filtrados usa memória adicional. Também, se a filtragem em ciclo for aplicada antes da estimativa de desvio, pode existir uma região de influência que se sobrepõe entre o processo de filtragem que serão aplicados após o bloco/linha/coluna atual ser decodificado e a região que é usada para a estimativa de desvio/previsão intracópia. Em tal caso, a estimativa de desvio/previsão intracópia pode ser aplicada antes daquele aspecto da operação de filtragem. Em algumas implantações, o codificador pode aplicar algumas operações de filtragem em ciclo antes da estimativa de desvio/previsão intracópia, e realizam filtragem adicional ou alternativa em um estágio de processamento anterior.
[00092] O estimador intraimagem 540 produz como informações externas os dados de intraprevisão 542, como informações que indicam se a intraprevisão usa previsão espacial, a previsão intra-BC, a previsão intra-LC ou a previsão intra-SC, a direção do modo de previsão (para a previsão intraespacial), os valores de BV (para a previsão intra-BC), os valores de desvio (para a previsão intra-LC) ou os valores de desvio e valores de comprimento (para previsão intra-SC). Os dados de intraprevisão 542 são fornecidos ao formatador/conversor em código por entropia do cabeçalho 590 assim como o previsor intraimagem 545.
[00093] De acordo com os dados de intraprevisão 542, o previsor intraimagem 545 prevê espacialmente os valores de amostra de um bloco atual da imagem atual a partir de valores de amostra vizinhos reconstruídos anteriormente da imagem atual. Ou, para a previsão intracópia, o previsor intraimagem 545 prevê os valores de amostra de um bloco, linha ou coluna atual ou outra seção com o uso de valores de amostra reconstruídos anteriormente de um bloco, uma linha, um coluna de referência ou outra seção, que é indicada por um deslocamento (o valor de BV, o valor de desvio, etc.) para o bloco, linha ou coluna atual, etc. Em alguns casos, um valor de BV (ou outro valor de desvio) pode ser um valor previsto. Em outros casos, o valor de BV (ou outro valor de desvio) pode ser diferente de seu valor previsto, em qual caso, um diferencial indica a diferença entre o valor previsto e o valor de BV (ou outro valor de desvio). Para o modo de intra-SC, o previsor intraimagem 545 também usa um valor de comprimento de coluna quando prevê os valores de amostra da coluna atual.
[00094] Para um modo de codificação da paleta, o codificador 500 representa pelo menos alguns dos valores de amostra de uma CU ou outra unidade com o uso de uma paleta. A paleta representa cores usadas na unidade. Por exemplo, a paleta mapeia valores de índice 0, 1,2, ... , p a cores correspondentes, que podem estar no formato RGB 4:4:4, no formato BGR 4:4:4, no formato GBR 4:4:4, no formato YUV 4:4:4 ou outro formato (espaço de cor, taxa de amostragem de cor). Um valor de índice pode representar um trípleto RGB, um trípleto BGR ou um trípleto GBR para um pixel, em que um pixel é um conjunto de valores de amostra colocalizados. Para a codificação da unidade, os valores de índice substituem os valores de amostra de pixels na unidade. Um valor raro na unidade pode ser codificado com o uso de um valor de código de escape e valores literais, em vez de com o uso de um valor de índice na paleta. A paleta pode mudar de unidade para unidade, e os dados de paleta que especificam as paletas podem ser sinalizadas no fluxo de dados.
[00095] O comutador intra/inter seleciona se a previsão 558 para um dado bloco será uma previsão com movimento compensado ou previsão intraimagem.
[00096] Em algumas implantações exemplificativas, nenhum resíduo é calculado para uma unidade codificada no modo de codificação da paleta ou um modo intracópia (previsão intra-BC, previsão intra-LC ou previsão intra-SC). Em vez disso, a codificação residual é ignorada, e os valores de amostra previstos são usados como os valores de amostra reconstruídos.
[00097] Quando a codificação residual não for ignorada, a diferença (se houver) entre um bloco da previsão 558 e uma parte correspondente da imagem atual original do sinal de vídeo de entrada 505 fornece valores do residual 518. Durante a reconstrução da imagem atual, quando os valores residuais forem codificados/sinalizados, os valores residuais reconstruídos são combinados com a previsão 558 para produzir uma reconstrução aproximada ou exata 538 do conteúdo original a partir do sinal de vídeo 505. (Na compactação com perda, algumas informações são perdidas do sinal de vídeo 505.)
[00098] Como parte da codificação residual, no transformador/escalonador/quantizador 530, quando uma transformada de frequência não for ignorada, um transformador de frequência converte informações de vídeo de domínio espacial em dados de domínio de frequência (isto é, espectral, de transformada). Para a codificação de vídeo com base em bloco, o transformador de frequência aplica uma transformada de cosseno discreta (“DCT”), uma aproximação de número inteiro do mesmo, ou outro tipo de transformada de bloco de encaminhamento (por exemplo, uma transformada de seno discreta ou uma aproximação de número inteiro do mesmo) para blocos de dados de previsão residual (ou dados de valor de amostra se a previsão 558 for nula), produzir blocos de coeficientes de transformada de frequência. O transformador/escalonador/quantizador 530 pode aplicar uma transformada com tamanhos de bloco variáveis. Nesse caso, o transformador/escalonador/quantizador 530 pode determinar quais tamanhos de bloco de transformadas devem ser usados para os valores residuais para um bloco atual. O escalonador/quantizador escalona e quantiza os coeficientes de transformada. Por exemplo, o quantizador aplica quantização escalar de zona morta a dados de domínio de frequência com um tamanho de etapa de quantização que varia em uma base imagem a imagem, base peça a peça, base fatia a fatia, base bloco a bloco, base de frequência específica ou outra base. Os dados de coeficiente de transformada quantizados 532 são fornecidos ao formatador/conversor em código por entropia do cabeçalho 590. Se a transformada de frequência for ignorada, o escalonador/quantizador pode escalonar e quantizar os blocos de dados de previsão residual (ou dados de valor de amostra, se a previsão 558 for nula), o que produz valores quantizados que são fornecidos ao formatador/conversor em código por entropia do cabeçalho 590.
[00099] Para reconstruir valores residuais, no escalonador/transformador inverso 535, um escalonador/quantizador inverso realiza escalonamento inverso e quantização inversa nos coeficientes de transformada quantizados. Quando o estágio de transformada não tiver sido ignorado, um transformador de frequência inversa realiza uma transformada de frequência inversa, que produz blocos de valores de previsão residual reconstruídos ou valores de amostra. Se o estágio de transformada foi ignorado, a transformada de frequência inversa também é ignorada. Nesse caso, o escalonador/quantizador inverso pode realizar escalonamento inverso e quantização inversa em blocos de dados de previsão residual (ou dados de valor de amostra), o que produz valores reconstruídos. Quando os valores residuais tiverem sido codificados/sinalizados, o codificador 500 combina valores residuais reconstruídos com valores da previsão 558 (por exemplo, valores de previsão com movimento compensado, valores de previsão intraimagem) para formar a reconstrução 538. Quando os valores residuais não tiverem sido codificados/sinalizados, o codificador 500 usa os valores da previsão 558 como a reconstrução 538.
[000100] Para a previsão intraimagem, os valores da reconstrução 538 podem ser retroalimentados ao estimador intraimagem 540 e ao previsor intraimagem 545. Os valores da reconstrução 538 podem ser usados para a previsão com movimento compensado das imagens subsequentes. Os valores da reconstrução 538 podem ser ainda mais filtrados. Um controle de filtragem 560 determina como a filtragem por deblocagem e a filtragem de SAO pode ser feita em valores da reconstrução 538, para uma dada imagem do sinal de vídeo 505. O controle de filtragem 560 produz dados de controle de filtro (562), que são fornecidos ao formatador/conversor em código por entropia do cabeçalho 590 e unidade de união/filtro (ou unidades de união/filtros) 565.
[000101] Na unidade de união/filtro (ou unidades de união/filtros) 565, o codificador 500 une o conteúdo de peças diferentes a uma versão reconstruída da imagem. O codificador 500 realiza de modo seletivo a filtragem por deblocagem e a filtragem de SAO de acordo com os dados de controle de filtro 562 e as regras para a adaptação de filtro, de modo a suavizar de modo adaptável as descontinuidades ao longo dos limites nas imagens. Outra filtragem (como a filtragem de desanelação ou ALF; não mostrada) pode ser aplicada alternativa ou adicionalmente. Os limites de união podem ser filtrados de modo seletivo ou totalmente não filtrados, dependendo das conimagens do codificador 500, e o codificador 500 pode fornecer elementos de sintaxe dentro do fluxo de dados convertido em código para indicar se tal filtragem foi aplicada ou não. O armazenamento temporário de imagem decodificada 570 armazena temporariamente a imagem atual reconstruída para o uso na previsão com movimento compensado subsequente.
[000102] O formatador/conversor em código por entropia do cabeçalho 590 formata e/ou codifica por entropia os dados de controle geral 522, os dados de coeficiente de transformada quantizados 532, os dados de intraprevisão 542, os dados de movimento 552 e os dados de controle de filtro 562. Para os dados de movimento 552, o formatador/conversor em código por entropia do cabeçalho 590 pode selecionar e converter em código por entropia os valores de índice de modo de união, ou um previsor de MV padrão pode ser usado. Em alguns casos, o formatador/conversor em código por entropia do cabeçalho 590 também determina diferenciais de MV para valores de MV (em relação a previsores de MV para os valores de MV), então, codifica por entropia os diferenciais de MV, por exemplo, com o uso de codificação aritmética de binário com contexto adaptável. Para os dados de intraprevisão 542, um valor de BV (ou outro valor de desvio) pode ser codificado com o uso de previsão. A previsão pode usar um previsor padrão (por exemplo, um valor de BV ou outro valor de desvio proveniente de um ou mais blocos vizinhos). Quando múltiplos previsores forem possíveis, um índice de previsor pode indicar quais dos múltiplos previsores devem ser usados para a previsão do valor de BV (ou outro valor de desvio). O formatador/conversor em código por entropia do cabeçalho 590 pode selecionar e converter em código por entropia os valores de índice de previsor (para previsão intracópia), ou um previsor padrão pode ser usado. Em alguns casos, o formatador/conversor em código por entropia do cabeçalho 590 também determina diferenciais (em relação a previsores para os valores de BV ou outros valores de desvio), então, codifica por entropia os diferenciais, por exemplo, com o uso de codificação aritmética de binário com contexto adaptável. Para o modo de codificação da paleta, o formatador/conversor em código por entropia do cabeçalho 590 pode codificar dados de paleta. Em particular, o formatador/conversor em código por entropia do cabeçalho 590 pode usar a previsão de paleta conforme explicado abaixo.
[000103] O formatador/conversor em código por entropia do cabeçalho 590 fornece os dados codificados no fluxo de dados de vídeo convertidos em código 595. O formato do fluxo de dados de vídeo convertidos em código 595 pode ser uma variação ou extensão do formato H.265/HEVC, do formato Windows Media Video, do formato VC1, do formato MPEG-x (por exemplo, MPEG-1, MPEG-2 ou MPEG-4), do formato H.26x (por exemplo, H.261, H.262, H.263, H.264) ou outro formato.
[000104] Dependendo da implantação e do tipo de compactação desejado, os módulos de um codificador 500 podem ser adicionados, omitidos, divididos em múltiplos módulos, combinados com outros módulos e/ou substituídos por módulos similares. Em modalidades alternativas, os codificadores com diferentes módulos e/ou outras conimagens de módulos realizam uma ou mais das técnicas descritas. As modalidades específicas dos codificadores tipicamente usam uma variação ou versão suplementada do codificador 500. As relações conforme mostradas entre os módulos dentro do codificador 500 indicam fluxos gerais de informações no codificador; outras relações não mostradas para o propósito de simplicidade.
VI. DECODIFICADORES DE VÍDEO EXEMPLIFICATIVOS.
[000105] A Figura 6 é um diagrama de blocos de um decodificador generalizado 600 em conjunto com o qual algumas modalidades descritas podem ser implantadas. O decodificador 600 recebe dados codificados em um fluxo de dados de vídeo convertidos em código 605 e produz a saída que inclui as imagens ou o vídeo reconstruído 695. O formato do fluxo de dados de vídeo convertidos em código 605 pode ser uma variação ou extensão do formato H.265/HEVC, do formato Windows Media Video, do formato VC-1, do formato MPEG-x (por exemplo, MPEG-1, MPEG-2 ou MPEG-4), do formato H.26x (por exemplo, H.261, H.262, H.263, H.264) ou outro formato.
[000106] Uma imagem pode ser organizada em múltiplas peças do mesmo tamanho ou de tamanhos diferentes. Uma imagem também pode ser organizada como uma ou mais fatias. O conteúdo de uma fatia ou peça pode ser organizado ainda mais como blocos ou outros conjuntos de valores de amostra. O decodificador 600 tem base em bloco e usa um formato de bloco que depende da implantação. Os blocos podem ser subdivididos adicionalmente em diferentes estágios. Por exemplo, uma imagem pode ser dividida em blocos 64x64, blocos 32x32 ou blocos 16x16, que pode, por sua vez, ser dividida em blocos menores de valores de amostra. Em implantações de decodificação para o padrão H.265/HEVC, uma imagem é particionada em CTUs (CTBs), CUs (CBs), PUs (PBs) e TU (TBs). Se a imagem foi codificada com o WPP habilitado (com o uso de WPP ou de maneira consistente com o uso do WPP durante a decodificação), as fileiras de certos blocos (por exemplo, as fileiras de CTUs de acordo com o padrão H.265/HEVC) podem ser decodificadas em paralelo com o uso de WPP, conforme explicado adicionalmente abaixo.
[000107] O decodificador 600 descompacta as imagens com o uso de decodificação intraimagem e/ou decodificação interimagem. Muitos dos componentes do decodificador 600 são usados tanto para a decodificação intraimagem quanto para a decodificação interimagem. As operações exatas realizadas por esses componentes podem variar dependendo do tipo de informações que são descompressadas.
[000108] Um armazenamento temporário recebe dados codificados no fluxo de dados de vídeo convertidos em código 605 e torna os dados codificados recebidos disponíveis para o analisador/decodificador por entropia 610. O analisador/decodificador por entropia 610 decodifica por entropia os dados convertidos em código por entropia, que aplicam tipicamente o inverso da codificação por entropia realizada no codificador 500 (por exemplo, decodificação aritmética binária com contexto adaptável). Como resultado da análise e da decodificação de entropia, o analisador/decodificador por entropia 610 produz dados de controle geral 622, dados de coeficiente de transformada quantizados 632, dados de intraprevisão 642, dados de movimento 652 e dados de controle de filtro 662. Para os dados de intraprevisão 642, se os valores de índice de previsor forem sinalizados, o analisador/decodificador por entropia 610 pode decodificar por entropia os valores de índice de previsor, por exemplo, com o uso de decodificação aritmética binária com contexto adaptável. Em alguns casos, o analisador/decodificador por entropia 610 também decodifica por entropia os diferenciais para valores de BV ou outros valores de desvio (por exemplo, com o uso de decodificação aritmética binária com contexto adaptável), então, combina os diferenciais com previsores correspondentes para reconstruir os valores de BV (ou outros valores de desvio). Em outros casos, o diferencial é omitido do fluxo de dados, e o valor de BV (ou outro valor de desvio) é simplesmente o previsor (por exemplo, indicado com o previsor valor de índice). Para o modo de decodificação da paleta, o analisador/decodificador por entropia 610 pode decodificar dados de paleta. Em particular, o analisador/decodificador por entropia 610 pode usar a previsão de paleta conforme explicado abaixo.
[000109] O controle de decodificação geral 620 recebe os dados de controle geral 622 e fornece sinais de controle (não mostrados) a outros módulos (como o escalonador/transformador inverso 635, o previsor intraimagem 645, o compensador de movimento 655 e o comutador intra/inter) para definir e mudar os parâmetros de decodificação durante a decodificação.
[000110] Se a imagem atual for prevista com o uso de previsão interimagem, um compensador de movimento 655 recebe os dados de movimento 652, como dados de MV, dados de seleção da imagem de referência e valores de índice de modo de união. O compensador de movimento 655 aplica MVs à imagem (ou imagens) de referência reconstruída proveniente do armazenamento temporário de imagem decodificada 670. O compensador de movimento 655 produz previsões com movimento compensado para blocos intercodificados da imagem atual. O armazenamento temporário de imagem decodificada 670 armazena uma ou mais imagens reconstruídas anteriormente para usar como imagens de referência.
[000111] Em uma trajetória separada dentro do decodificador 600, o previsor intraimagem 645 recebe os dados de intraprevisão 642, como informações que indicam se a previsão intraimagem usa previsão espacial, previsão intra-BC, previsão intra-LC ou previsão intra-SC, assim como a direção do modo de previsão (para a previsão intraespacial), valores de BV (para a previsão intra-BC), valores de desvio (para a previsão intra-LC) ou valores de desvio e valores de comprimento (para a previsão intra-SC). Para a previsão intraespacial, com o uso de valores de uma reconstrução 638 da imagem atual, de acordo com dados do modo de previsão, o previsor intraimagem 645 prevê espacialmente os valores de amostra de um bloco atual da imagem atual a partir de valores de amostra vizinhos reconstruídos anteriormente da imagem atual. Ou, para a previsão intracópia, o previsor intraimagem 645 prevê os valores de amostra de um bloco, linha ou coluna atual ou outra seção com o uso de valores de amostra reconstruídos anteriormente de um bloco, uma linha, um coluna de referência ou outra seção, que é indicada por um deslocamento (o valor de BV, o valor de desvio, etc.) para o bloco, linha ou coluna atual, etc. Em alguns casos, um valor de BV (ou outro valor de desvio) pode ser um valor previsto. Em outros casos, o valor de BV (ou outro valor de desvio) pode ser diferente de seu valor previsto, em qual caso o valor de BV (ou outro valor de desvio) é reconstruído com o uso de um diferencial e do valor previsto. Para o modo de intra-SC, o previsor intraimagem 645 também usa um valor de comprimento de coluna quando prevê os valores de amostra da coluna atual.
[000112] Para um modo de decodificação da paleta, o decodificador 600 usa uma paleta que representa pelo menos alguns dos valores de amostra de uma CU ou outra unidade. A paleta mapeia valores de índice a cores correspondentes usadas na unidade. Por exemplo, a paleta mapeia valores de índice 0, 1, 2, ... , p a cores correspondentes, que podem estar no formato RGB 4:4:4, no formato BGR 4:4:4, no formato GBR 4:4:4, no formato YUV 4:4:4 ou outro formato (espaço de cor, taxa de amostragem de cor). Um valor de índice pode representar um trípleto RGB, um trípleto BGR ou um trípleto GBR para um pixel. Durante a decodificação, para posições na unidade, os valores de índice provenientes da paleta são substituídos pelos valores de amostra apropriados. Um valor de escape convertido em código na unidade pode ser decodificado com o uso de um valor de código de escape e valores literais. A paleta pode mudar de unidade para unidade, com base em dados de paleta sinalizados no fluxo de dados.
[000113] O comutador intra/inter seleciona valores de uma previsão com movimento compensado ou previsão intraimagem para o uso como a previsão 658 para um dado bloco. Por exemplo, quando a sintaxe de H.265/HEVC for seguida, o comutador intra/inter pode ser controlado com base em um elemento de sintaxe codificado para uma CU de uma imagem que pode conter CUs intraprevistas e CUs interprevistas. Quando valores residuais tiverem sido codificados/sinalizados, o decodificador 600 combina a previsão 658 a valores residuais reconstruídos para produzir a reconstrução 638 do conteúdo proveniente do sinal de vídeo. Quando os valores residuais não tiverem sido codificados/sinalizados, o decodificador 600 usa os valores da previsão 658 como a reconstrução 638.
[000114] Para reconstruir o resíduo quando os valores residuais tiverem sido codificados/sinalizados, o escalonador/transformador inverso 635 recebe e processa os dados de coeficiente de transformada quantizados 632. No escalonador/transformador inverso 635, um escalonador/quantizador inverso realiza escalonamento inverso e quantização inversa nos coeficientes de transformada quantizados. Um transformador de frequência inversa realiza uma transformada de frequência inversa, produzir blocos de valores de previsão residual reconstruídos ou valores de amostra. Por exemplo, o transformador de frequência inversa aplica uma transformada de bloco inversa a coeficientes de transformada de frequência, que produz dados de valor de amostra ou dados de previsão residual. A transformada de frequência inversa pode ser uma DCT inversa, uma aproximação de número inteiro da mesma, ou outro tipo de transformada de frequência inversa (por exemplo, uma transformada de seno discreta inversa ou uma aproximação de número inteiro da mesma). Se a transformada de frequência foi ignorada durante a codificação, a transformada de frequência inversa também é ignorada. Nesse caso, o escalonador/quantizador inverso pode realizar escalonamento inverso e quantização inversa em blocos de dados de previsão residual (ou dados de valor de amostra), o que produz valores reconstruídos.
[000115] Para a previsão intraimagem, os valores da reconstrução 638 podem ser retroalimentados ao previsor intraimagem 645. Para a previsão interimagem, os valores da reconstrução 638 podem ser ainda mais filtrados. Na unidade de união/filtro (ou unidades de união/filtros) 665, o decodificador 600 une o conteúdo de peças diferentes a uma versão reconstruída da imagem. O decodificador 600 realiza de modo seletivo a filtragem por deblocagem e a filtragem de SAO de acordo com os dados de controle de filtro 662 e as regras para a adaptação de filtro, de modo a suavizar de modo adaptável as descontinuidades ao longo dos limites nas imagens. Outra filtragem (como a filtragem de desanelação ou ALF; não mostrada) pode ser aplicada alternativa ou adicionalmente. Os limites de união podem ser filtrados de modo seletivo ou totalmente não filtrados, dependendo das definições do decodificador 600 ou um elemento de sintaxe dentro dos dados de fluxo de dados codificados. O armazenamento temporário de imagem decodificada 670 armazena temporariamente a imagem atual reconstruída para o uso na previsão com movimento compensado subsequente.
[000116] O decodificador 600 também pode incluir um filtro de pós- processamento. O filtro de pós-processamento 608 pode incluir a filtragem por deblocagem, a filtragem de desanelação, a filtragem de Wiener adaptável, a filtragem de reprodução de granulação de película, a filtragem de SAO ou outro tipo de filtragem. Embora a filtragem “em ciclo” seja realizada em valores de amostra reconstruídos de imagens em um ciclo de compensação de movimento, e, portanto, afeta os valores de amostra de imagens de referência, o filtro de pós- processamento 608 é aplicado a valores de amostra reconstruídos fora do ciclo de compensação de movimento, antes da saída para o visor.
[000117] Dependendo da implantação e do tipo de descompactação desejado, os módulos do decodificador 600 podem ser adicionados, omitidos, divididos em múltiplos módulos, combinados com outros módulos e/ou substituídos por módulos similares. Em modalidades alternativas, os decodificadores com diferentes módulos e/ou outras conimagens de módulos realizam uma ou mais das técnicas descritas. As modalidades específicas dos decodificadores tipicamente usam uma variação ou versão suplementada do decodificador 600. As relações conforme mostradas entre os módulos dentro do decodificador 600 indicam fluxos gerais de informações no decodificador; outras relações não mostradas para o propósito de simplicidade.
VII. REGRAS PARA MODOS DE PREVISÃO INTRAIMAGEM QUANDO O WPP ESTIVER HABILITADO.
[000118] Essa seção apresenta exemplos de regras para os modos de previsão intraimagem quando o processamento paralelo em frente de onda (“WPP”) estiver habilitado. As inovações facilitam o uso de modos de previsão intraimagem como o modo de previsão de paleta, o modo de cópia intrabloco (“BC”), o modo de cópia intralinha (“LC”) e o modo de cópia intracoluna (“SC”) por um codificador ou decodificador quando o WPP estiver habilitado.
A. PROCESSAMENTO PARALELO DE FRENTE DE ONDA - INTRODUÇÃO.
[000119] Em geral, o WPP é uma ferramenta de codificação/decodificação que facilita o processamento paralelo atrasando-se de modo diferencial o início do processamento para as fileiras de unidades em uma imagem. Quando o WPP estiver habilitado, diferentes fileiras de unidades em uma imagem podem ser codificadas ou decodificadas em paralelo. Durante a codificação ou a decodificação, uma primeira fileira das unidades pode ser processada unidade após unidade, da esquerda para a direita. O processamento (codificação ou decodificação) de uma segunda fileira das unidades não precisa aguardar pela conclusão do processamento para toda a primeira fileira de unidades. Em vez disso, o processamento da segunda fileira de unidades pode começar após o processamento ser completo para diversas das unidades da primeira fileira, que fornecem informações usadas quando se processa a unidade inicial da segunda fileira. De modo similar, o processamento de uma terceira fileira de unidades pode começar após o processamento ser completado para diversas unidades da segunda fileira. Dessa forma, o WPP facilita o processamento paralelo de diferentes fileiras de threads de unidades diferentes ou as cores de processamento podem realizar o processamento para diferentes fileiras de unidades em uma base em zigue-zague com atraso de tempo.
[000120] Por exemplo, de acordo com o padrão H.265/HEVC, quando o WPP estiver habilitado, uma fatia é dividida em fileiras de CTUs. Durante a codificação ou a decodificação, a primeira fileira de CTUs pode ser processada CTU após CTU. O processamento da segunda fileira de CTUs pode começar após o processamento ser completado para as primeiras duas CTUs da primeira fileira, que fornece informações (por exemplo, valores de amostra reconstruídos, valores de MV reconstruídos ou valores de BV, informações de modelo de contexto) usadas quando o processamento da CTU inicial da segunda fileira. De modo similar, o processamento da terceira fileira de CTUs pode começar após o processamento ser completado para as primeiras duas CTUs da segunda fileira.
[000121] A Figura 7 ilustra a temporização 700 do WPP para uma imagem atual 710 de acordo com o padrão H.265/HEVC. A imagem 710 é particionada em CTUs, que são organizadas em colunas de CTU e fileiras de CTU. Diferentes fileiras de CTU podem ser codificadas ou decodificadas em paralelo com o uso de WPP. A temporização de WPP reflete as dependências entre CTUs durante a codificação ou a decodificação. Nesse exemplo, uma dada CTU pode depender de informações (como valores de amostra reconstruídos, valores de MV reconstruídos ou valores de BV, informações de modelo de contexto) provenientes de (1) a CTU (ou CTUs) vizinha à sua esquerda, (2) a CTU (ou CTUs) vizinha acima e à sua esquerda, (3) a CTU (ou CTUs) vizinha acima da dada CTU, e (4) a CTU (ou CTUs) vizinha acima e à direita da dada CTU, em que tais CTUs vizinhas de (1) a (4) estão disponíveis (por exemplo, estão dentro da imagem, na mesma fatia e na mesma peça). Cada CTU vizinha, por sua vez, pode depender de suas CTUs vizinhas de (1) a (4), caso disponível. A Figura 8 ilustra as dependências em cascata para a CTU inicial de uma quinta fileira de CTU. A CTU inicial da quinta fileira de CTU depende das primeiras duas CTUs da quarta fileira de CTU, que dependem, coletivamente, das primeiras três CTUs da terceira fileira de CTU, e assim em diante.
[000122] Com referência à Figura 7, para o WPP, a primeira fileira de CTU (ou seja, a fileira de CTU 0) é processada CTU após CTU para a onda 0. Para a onda 1, o processamento da CTU inicial na fileira de CTU 1 pode começar após a codificação/decodificação da segunda CTU na fileira de CTU 0 terminar. De modo similar, para a onda 2, o processamento da CTU inicial na fileira de CTU 2 pode começar após a codificação/decodificação da segunda CTU na fileira de CTU 1 terminar. Para a onda 3, o processamento da CTU inicial na fileira de CTU 3 pode começar após a codificação/decodificação da segunda CTU na fileira de CTU 2 terminar, e para a onda 4, o processamento da CTU inicial na fileira de CTU 4 começa após a codificação/decodificação da segunda CTU na fileira de CTU 3 terminar.
[000123] Mesmo quando as fileiras de CTU forem processadas em paralelo, esse processamento em zigue-zague com atraso de tempo garante que as dependências entre CTUs sejam satisfeitas quando o processamento começar para uma fileira de CTU. Na Figura 7, o lead com duas CTUs para cada fileira de CTU é mantido durante o processamento. Para cada fileira de CTU, o processamento para a CTU atual (mostrada na estrutura de tópicos em negrito) está duas CTUs à frente do processamento para a CTU atual na próxima fileira de CTU. Na prática, entretanto, o processamento para uma dada fileira de CTU pode parar ou ser reduzido, o que causa atrasos em cascata no processamento para fileiras de CTU posteriores que dependem da conclusão (direta ou indiretamente) do processamento para uma CTU na dada fileira de CTU. Para uma dada CTU de uma fileira de CTU posterior, as dependências vêm em cascata a partir das fileiras de CTU anteriores. No exemplo 800 mostrado na Figura 8, para a CTU inicial da quinta fileira de CTU do quadro 810, as primeiras duas CTUs da quarta fileira de CTU foram processadas. De outro modo, o processamento para a CTU inicial da quinta fileira de CTU não pode ser iniciado. Por extensão, a terceira CTU da terceira fileira de CTU foi processada, devido ao fato de que, de outro modo, o processamento para a segunda CTU da quarta fileira de CTU não poderia ter começado. De modo similar, a quarta CTU da segunda fileira de CTU foi processada, como uma pré-condição para o processamento para a terceira CTU da terceira fileira de CTU. Finalmente, a quinta CTU da primeira fileira de CTU foi processada, como uma pré-condição para o processamento para a quarta CTU da segunda fileira de CTU. A Figura 8, assim, mostra o conteúdo reconstruído garantido como disponível para a previsão da CTU inicial na onda 4 (a quinta fileira de CTU) quando o WPP estiver habilitado.
[000124] Em contraste, quando o WPP não estiver habilitado, as CTUs são processadas da esquerda para a direita em uma fileira de CTU, a fileira de CTU após a fileira de CTU do topo para o fundo de uma imagem (ou fatia e peça, caso usada). As informações de modelo de contexto (também denominadas informações de situação de CABAC ou informações de codificação por entropia) usadas para uma dada CTU pode levar em consideração os resultados do processamento de quaisquer CTUs anteriores na mesma fileira de CTU e quaisquer fileiras de CTU anteriores da imagem (ou fatia/peça), que sejam CTUs mais antecipadas na ordem de codificação/decodificação. Por exemplo, o processamento da segunda CTU em uma fileira de CTU depende de resultados do processamento da primeira CTU na fileira de CTU, e assim por diante. Como outro exemplo, o processamento para a CTU inicial em uma fileira de CTU depende de resultados do processamento para a última CTU na fileira de CTU anterior na imagem (ou fatia/peça).
[000125] Por outro lado, quando o WPP estiver habilitado, o processamento para a CTU inicial em uma fileira de CTU não depende de resultados do processamento para a última CTU na fileira de CTU anterior na imagem (ou fatia/peça). O processamento para a CTU inicial em uma fileira de CTU pode iniciar após o processamento terminar para a segunda CTU na fileira de CTU anterior na imagem (ou fatia/peça), mesmo que as informações de modelo de contexto provenientes da última CTU na fileira de CTU anterior estejam indisponíveis. O processamento da terceira CTU na fileira de CTU anterior continua a depender de resultados de processamento da segunda CTU naquela fileira de CTU, exatamente como quando o WPP não estiver habilitado.
[000126] Quando o WPP estiver habilitado, um codificador pode usar de fato o WPP durante a codificação ou não. Independentemente, a codificador impõe restrições e regras de previsão que se aplicam quando o WPP for usado de fato. De modo similar, quando o WPP estiver habilitado, um decodificador pode usar de fato o WPP durante a decodificação ou não. Um elemento de sintaxe em um fluxo de dados pode indicar se o WPP está habilitado para uma sequência de vídeo, conjunto de imagens ou imagem. Por exemplo, o elemento de sintaxe pode ser sinalizado em um SPS, PPS ou outra estrutura de sintaxe no fluxo de dados. Em implantações H.265/HEVC, por exemplo, o valor do elemento de sintaxe entropy_coding_sync_enabled_flag, que é sinalizado em uma estrutura de sintaxe de PPS, indica se o WPP está habilitado para a imagem (ou imagens) associada à estrutura de sintaxe de PPS. Se entropy_coding_sync_enabled_flag for igual a 1, o WPP está habilitado para a imagem (ou imagens). De outro modo, o WPP não está habilitado para a imagem (ou imagens).
B. MODOS DE CODIFICAÇÃO/DECODIFICAÇÃO DE PALETA E PREVISÃO DE PALETA - INTRODUÇÃO.
[000127] Em geral, a modo de codificação/decodificação de paleta usa uma paleta para representar pelo menos alguns dos valores de amostra de uma unidade (por exemplo, uma CU nas implantações H.265/HEVC ou outra unidade). Por exemplo, a paleta mapeia valores de índice 0, 1, 2, ... , p a cores correspondentes, que podem estar no formato RGB 4:4:4, no formato BGR 4:4:4, no formato GBR 4:4:4, no formato YUV 4:4:4 ou outro formato (espaço de cor, taxa de amostragem de cor). Um valor de índice pode representar um trípleto RGB, um trípleto BGR ou um trípleto GBR para um pixel. A Figura 9 mostra dois exemplos de paletas. A paleta para uma unidade atual (ou seja, a “paleta atual”) inclui p valores de índice 0, ... , p-1, que estão associadas a trípletos RGB. A paleta para uma unidade anterior (representada nos “dados da paleta anterior”) inclui q valores de índice 0,... , q-1, que estão associadas a trípletos RGB. Os valores de p e q podem ser iguais ou diferentes. Durante a codificação, um codificador pode substituir os valores de amostra de um pixel com o uso de um valor de índice, que pode ser ainda mais codificado, por exemplo, com o uso de codificação por entropia. Durante decodificação, um decodificador pode restaurar os valores de amostra do pixel a partir do valor de índice com o uso da paleta, por exemplo, após a decodificação de entropia do valor de índice.
[000128] Em particular, o modo de codificação/decodificação de paleta pode ser efetivo quando uma unidade incluir relativamente poucas cores distintas, que é uma característica comum para o vídeo de conteúdo de tela. Por exemplo, uma CU 64x64 no formato RGB 4:4:4 inclui 64x64 = 4.096 pixels, mas pode incluir bem menos cores (por exemplo, de 1 a 20 cores). Uma cor rara em uma unidade pode ser codificada com o uso de um valor de código de escape e valores literais (para os respectivos valores de amostra), em vez de incluir a cor rara diretamente na paleta.
[000129] Duas unidades podem usar a mesma paleta, mas as cores tipicamente mudam de unidade para unidade dentro de uma imagem. Como tal, as paletas tipicamente mudam de unidade para unidade dentro da imagem. Para as paletas, um codificador sinaliza dados de paleta, que podem ser convertidos em código por entropia, em um fluxo de dados. Um decodificador recebe e analisa os dados de paleta, decodifica por entropia o mesmo conforme apropriado, e reconstrói as paletas. O codificador e o decodificador podem usar a previsão de paleta para reduzir a taxa de bits associada à sinalização de dados de paleta.
[000130] Em geral, a previsão de paleta pode ser qualquer abordagem usada durante a codificação ou a decodificação para prever os valores da paleta para uma unidade atual (paleta atual) com o uso de dados de paleta provenientes de uma ou mais paletas para unidades anteriores (dados da paleta anterior). Embora as cores tipicamente mudem de unidade para unidade dentro de uma imagem, em muitos casos pelo menos algumas das cores em uma dada unidade também usadas em uma unidade adjacente. A previsão de paleta explora essa observação para reduzir a taxa de bits para dados de paleta.
[000131] A Figura 9 mostra um exemplo simplificado 900 de previsão de paleta na qual a paleta para uma unidade atual (paleta atual) é prevista com o uso da paleta para uma unidade anterior (representada nos dados da paleta anterior). Por exemplo, os dados da paleta anterior podem ser provenientes da paleta usada pela unidade anterior codificada ou decodificada antes da unidade atual, se a unidade anterior usou o modo de codificação/decodificação de paleta. Se a unidade anterior não usou o modo de codificação/decodificação de paleta, os dados da paleta anterior para a unidade atual podem ser “herdados” da unidade anterior. Ou seja, os dados da paleta anterior que estavam disponíveis à unidade anterior podem ser reusados como os dados da paleta anterior disponível à unidade atual. (Em algumas implantações exemplificativas, os dados da paleta anterior são, de fato, informações de situação ou estado para a unidade atual. Uma dada unidade que não usa, por si só, o modo de codificação/decodificação de paleta continua a ter dados da paleta anterior, que podem ser herdados pela próxima unidade.) Dessa forma, através de uma corrente de herança, os dados da paleta anterior para a unidade atual podem incluir dados de paleta provenientes da paleta da unidade mais recente processada anteriormente (se houver) que usou o modo de codificação/decodificação de paleta.
[000132] Para a previsão de paleta, o codificador pode determinar se a paleta atual é a mesma que os dados da paleta anterior. Se for o caso, o codificador pode simplesmente indicar que os dados da paleta anterior devem ser reusados como a paleta atual. De outro modo (a paleta atual é diferente dos dados da paleta anterior), o codificador determina mudanças entre os dados da paleta anterior e da paleta atual, e sinaliza elementos de sintaxe que indicam as mudanças. Por exemplo, conforme mostrado na Figura 9, para um dado valor de índice da paleta atual, o codificador sinaliza se a cor correspondente para o dado valor de índice for uma cor nos dados da paleta anterior (“anterior”) ou uma nova cor (“novo”). Se a cor correspondente for uma cor nos dados da paleta anterior, o codificador sinaliza o valor de índice (a partir dos dados da paleta anterior) para a cor nos dados da paleta anterior, que pode ser usada para popular a paleta atual. Na Figura 9, a cor para o valor de índice 1 dos dados da paleta anterior é reatribuída ao valor de índice 0 na paleta atual, e a cor para o valor de índice 0 dos dados da paleta anterior é reatribuída ao valor de índice 2 na paleta atual. Dessa forma, as cores podem mudar as posições de paleta a paleta, por exemplo, para que as cores mais comuns tenham os menores valores de índice, que podem melhorar a eficiência da codificação por entropia. Se a cor correspondente para um dado valor de índice for uma nova cor, o codificador sinaliza o trípleto para a nova cor. Na Figura 9, por exemplo, para o valor de índice 1 na paleta atual, o codificador sinaliza um novo trípleto 215, 170, 200, que é usado para atualizar a paleta atual.
[000133] Com base nos elementos de sintaxe sinalizados pelo codificador, o decodificador pode determinar se a paleta atual é a mesma dos dados da paleta anterior, que está disponível no decodificador. Se for o caso, o decodificador pode reusar os dados da paleta anterior como a paleta atual. De outro modo (a paleta atual é diferente dos dados da paleta anterior), o decodificador recebe e analisa os elementos de sintaxe que indicam as mudanças entre os dados da paleta anterior e a paleta atual. Por exemplo, conforme mostrado na Figura 9, para um dado valor de índice da paleta atual, o decodificador determina se a cor correspondente para o dado valor de índice for uma cor nos dados da paleta anterior (“anterior”) ou uma nova cor (“novo”). Se a cor correspondente for uma cor nos dados da paleta anterior, o decodificador recebe e analisa um elemento de sintaxe que indica o valor de índice (a partir dos dados da paleta anterior) para a cor nos dados da paleta anterior, que pode ser usada para popular a paleta atual. Se a cor correspondente para um dado valor de índice for uma nova cor, o decodificador recebe e analisa elementos de sintaxe que indicam a nova cor.
[000134] Após a construção da paleta atual, o codificador e o decodificador atualizam os dados da paleta anterior para que a próxima unidade armazene dados de paleta a partir da paleta atual. Esses novos “dados da paleta anterior” podem ser usados para prever a paleta para a próxima unidade.
[000135] A Figura 9 mostra um exemplo simplificado 900. Na prática, os elementos de sintaxe e as regras usadas para sinalizar os dados de paleta podem ser mais complicados. Para detalhes adicionais sobre a codificação/decodificação de paleta e a previsão de paleta nas implantações exemplificativos, consultar, por exemplo, as seções 7.3.8.8, 7.4.9.6 e 8.4.1 do documento JCTVC-R1005. Alternativamente, outra abordagem é usada para sinalizar os dados de paleta.
C. PREVISÃO DE PALETA QUANDO O WPP ESTIVER HABILITADO.
[000136] Em geral, os dados da paleta anterior para os propósitos de previsão de paleta são usados para prever a paleta de uma unidade atual (paleta atual). Por exemplo, os dados da paleta anterior podem ser dados de paleta reais provenientes da unidade vizinha codificada ou decodificada antes da unidade atual (se a unidade vizinha usou o modo de codificação/decodificação de paleta). Ou (se a unidade vizinha não usou o modo de codificação/decodificação de paleta), os dados da paleta anterior disponível à unidade vizinha podem ser reusados (ou “herdados”) como os dados da paleta anterior para a unidade atual.
[000137] Em algumas implantações exemplificativas, quando o WPP não estiver habilitado, para a unidade inicial na fileira atual, os dados da paleta anterior são provenientes da última unidade na fileira anterior (por exemplo, provenientes da paleta da última unidade se a última unidade usou o modo de codificação/decodificação de paleta; de outro modo, os dados da paleta anterior disponível à última unidade). Quando o WPP estiver habilitado, para a unidade inicial na fileira atual, os dados da paleta anterior provenientes da última unidade na fileira anterior pode não estar disponível. Redefinir a previsão de paleta no começo de cada fileira de unidades (no previsor para a previsão de paleta para a unidade inicial na unidade atual), entretanto, pode ter um impacto negativo na eficiência de codificação.
[000138] Em vez disso, quando o WPP estiver habilitado, o codificador ou o decodificador pode usar dados da paleta anterior provenientes de uma das primeiras duas unidades na fileira anterior (por exemplo, uma das primeiras duas CUs nas primeiras duas CTUs da fileira anterior), que já foram processadas em ordem para o processamento da unidade inicial na fileira atual iniciar. Por exemplo, para a unidade inicial na fileira atual, os dados da paleta anterior para os propósitos da previsão de paleta são provenientes da segunda unidade da fileira anterior (dados de paleta reais da segunda unidade, se a segunda unidade usou o modo de codificação/decodificação de paleta, ou os dados da paleta anterior disponíveis à segunda unidade da fileira anterior de outro modo). Dessa forma, para a unidade inicial na fileira atual, e a segunda unidade não usou o modo de codificação/decodificação de paleta, os dados da paleta anterior são, potencialmente, dados de paleta provenientes da primeira unidade na fileira anterior (se a primeira unidade usou o modo de codificação/decodificação de paleta) ou (se nenhuma das primeiras duas unidades na fileira anterior usou o modo de codificação/decodificação de paleta) os dados da paleta anterior provenientes da primeira unidade da fileira anterior, que podem depender de uma paleta para a segunda unidade da fileira antes da fileira anterior, e assim por diante. (Alternativamente, se nenhuma das primeiras duas unidades na fileira anterior usou o modo de codificação/decodificação de paleta, os dados da paleta anterior podem ser nulos - no previsor - ou usa um previsor padrão.) Após a unidade inicial na fileira atual, para uma unidade atual, os dados da paleta anterior para os propósitos de previsão de paleta são dados de paleta provenientes da unidade vizinha codificada ou decodificada antes da unidade atual (se a unidade vizinha usou o modo de codificação/decodificação de paleta) ou (se a unidade vizinha não usou o modo de codificação/decodificação de paleta) os dados da paleta anterior disponível à unidade vizinha, como quando o WPP não estiver habilitado.
[000139] A Figura 10 mostra dependências de previsão de paleta (1000) para uma imagem atual 1010 processada com o WPP habilitado de acordo com algumas implantações exemplificativas. A imagem 1010 é organizada por fileiras de CTU e colunas de CTU. No exemplo da Figura 10, cada CTU inclui uma única CU. De modo mais geral, uma dada CTU pode ser dividida de modo recursivo em múltiplas CUs (por exemplo, uma única CU pode ser dividida em quatro CUs, cada um dos quais pode ser dividido mais ainda em CUs menores). O estado do processamento (por exemplo, as CTUs atuais que são codificadas ou decodificadas) geralmente corresponde ao estado do processamento mostrado na Figura 7. As setas na Figura 10 mostram a direção da previsão de paleta quando o WPP estiver habilitado. Para a CU inicial na primeira fileira de CTU, não existe previsor. Alternativamente, um previsor padrão pode ser usado. Para cada CU posterior na primeira fileira de CTU, os dados da paleta anterior são provenientes da CU à esquerda. Para a CU inicial em qualquer fileira de CTU após a primeira fileira de CTU, os dados da paleta anterior são provenientes da segunda CU da fileira anterior. Para cada CU posterior em qualquer fileira de CTU após a primeira fileira de CTU, os dados da paleta anterior são provenientes da CU anterior na mesma fileira. Para qualquer CU que usa o modo de codificação/decodificação de paleta, sua paleta é usada para construir os dados da paleta anterior para a previsão da paleta da próxima CU. Se uma dada CU não usar o modo de codificação/decodificação de paleta, os dados da paleta anterior que estavam disponíveis à dada CU são retidos como os dados da paleta anterior da próxima CU.
[000140] Quando uma CTU incluir múltiplas CUs, com propósitos de previsão de paleta para uma CU atual, a CU anterior pode ser a CU mais antecipada na ordem de varredura z. A CU mais antecipada pode ser na mesma CTU ou em uma CTU diferente (para a primeira CU da CTU). Seção VII. D explica, com referência à Figura 17, exemplos de ordem de varredura z em algumas implantações exemplificativas.
[000141] O codificador e o decodificador podem usar memória para armazenar dados da paleta anterior usada para previsão de paleta. A quantidade de dados de paleta que é economizada para os dados da paleta anterior depende da implantação. Em geral, os dados da paleta anterior podem incluir uma contagem C de cores nos dados da paleta anterior e detalhes de valores de amostra (por exemplo, trípletos de cor no formato RGB 4:4:4, formato GBR 4:4:4, formato BGR 4:4:4, formato YUV 4:4:4, ou outro formato) para as cores. O codificador e o decodificador podem salvar todos os dados de paleta para uma paleta anterior. Salvar todos os dados de paleta para a paleta anterior, entretanto, pode consumir uma quantidade significante de memória para uma paleta grande. Alternativamente, para reduzir o consumo de memória em alguns casos, o codificador e o decodificador limitam C por uma contagem limite, em que a contagem limite depende da implantação. Nesse caso, o codificador e o decodificador salvam os dados da paleta anterior para as primeiras C cores diferentes na paleta anterior, em que C é limitado por uma contagem limite. Por exemplo, a contagem limite é 16 ou 32. Ou, quando o WPP estiver habilitado, para previsão de paleta para a unidade inicial de uma fileira atual, o codificador e o decodificador salvam os dados da paleta anterior para, no máximo, as primeiras C1 cores diferentes. Após isso, o codificador e o decodificador salvam dados da paleta anterior para, no máximo, as primeiras C2 cores diferentes para previsão de paleta dentro de uma fileira atual. Por exemplo, C1 é 16 ou 32, e C2 é 64.
[000142] A Figura 11 mostra uma técnica generalizada 1100 para a codificação que inclui a previsão de paleta, quando o WPP estiver habilitado. Um codificador como o codificador mostrado na Figura 3 ou nas Figuras 5a e 5b, ou outro codificador, pode realizar a técnica 1100. A Figura 12 mostra uma técnica generalizada 1200 para a decodificação que inclui a previsão de paleta, quando o WPP estiver habilitado. Um decodificador como o decodificador mostrado na Figura 4 ou na Figura 6, ou outro decodificador, pode realizar a técnica 1200.
[000143] Com referência à Figura 11, um codificador codifica 1110 uma imagem com o WPP habilitado. A codificação 1110 produz dados codificados. Como parte da codificação 1110, para um modo de codificação de paleta, o codificador prevê uma paleta para uma unidade inicial em uma fileira de WPP atual da imagem com o uso de dados da paleta anterior provenientes de uma unidade anterior em uma fileira de WPP anterior da imagem. O codificador emite 1120 os dados codificados como parte de um fluxo de dados.
[000144] Com referência à Figura 12, um decodificador recebe 1210 dados codificados como parte de um fluxo de dados. O decodificador decodifica 1220 os dados codificados com o WPP habilitado. A decodificação 1220 reconstrói uma imagem. Como parte da decodificação 1220, para um modo de decodificação de paleta, o decodificador prevê uma paleta para uma unidade inicial em uma fileira de WPP atual da imagem com o uso de dados da paleta anterior provenientes de uma unidade anterior em uma fileira de WPP anterior da imagem.
[000145] Em algumas implantações exemplificativas, no codificador ou no decodificador, a fileira de WPP atual e a fileira de WPP anterior são fileiras de CTUs, e a unidade inicial e a unidade anterior são CUs. Alternativamente, as fileiras de WPP são fileiras de outro tipo de unidade e/ou as unidades inicial e anterior são outro tipo de unidade. Um elemento de sintaxe no fluxo de dados pode indicar se o WPP está habilitado para uma sequência de vídeo, conjunto de imagens ou imagem. O elemento de sintaxe pode ser sinalizado em uma estrutura de sintaxe de SPS, uma estrutura de sintaxe de PPS (por exemplo, o elemento de sintaxe entropy_coding_sync_enabled_flag nas implantações H.265/HEVC) ou outra estrutura de sintaxe no fluxo de dados.
[000146] Em geral, durante a codificação ou a decodificação, a paleta para a unidade inicial na fileira de WPP atual representa pelo menos algumas cores usadas na unidade inicial na fileira de WPP atual. Os dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior podem representar pelo menos algumas cores usadas em uma paleta para a unidade anterior na fileira de WPP anterior (se a unidade anterior usou o modo de codificação/decodificação de paleta). Ou (se a unidade anterior não usar o modo de codificação/decodificação de paleta), os dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior podem ter sido herdados pela unidade anterior a partir de uma unidade mais antecipada, que pode ter usado o modo de codificação/decodificação de paleta ou o próprio herdado os dados da paleta anterior. As cores não representadas em uma paleta podem ser convertidas em código por escape. A fileira de WPP anterior pode ser a fileira de WPP imediatamente acima da fileira de WPP atual. A unidade anterior na fileira de WPP anterior pode estar acima da unidade inicial na fileira de WPP atual (por exemplo, a primeira unidade na fileira anterior na Figura 10), ou a mesma pode estar acima e à direita da unidade inicial na fileira de WPP atual (por exemplo, a segunda unidade na fileira anterior na Figura 10). Após o processamento da unidade inicial na fileira de WPP atual, para a paleta de uma unidade subsequente na fileira de WPP atual da imagem, o codificador ou decodificador pode prever a paleta (da unidade subsequente) com o uso de dados de paleta provenientes da paleta para a unidade inicial na fileira de WPP atual.
[000147] Durante a codificação ou a decodificação, a previsão de paleta pode incluir diversos estágios. Por exemplo, durante a codificação, o codificador pode determinar (com base em uma comparação da paleta atual aos dados da paleta anterior) a possibilidade de reusar os dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior como a paleta para a unidade inicial na fileira de WPP atual (paleta atual). Durante a decodificação, o decodificador pode determinar (com base em informações sinalizadas pelo codificador) a possibilidade de reusar os dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior como a paleta para a unidade inicial na fileira de WPP atual (paleta atual). Como outro exemplo, durante a codificação, quando houver mudanças à paleta, o codificador pode selecionar uma ou mais cores provenientes dos dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior que devem ser incluídas na paleta para a unidade inicial na fileira de WPP atual (paleta atual). O codificador sinaliza os elementos de sintaxe que indicam as cores selecionadas. Então, durante a decodificação, o decodificador pode receber e analisar os elementos de sintaxe e, com base nos elementos de sintaxe, selecionar uma ou mais cores provenientes dos dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior que devem ser incluídas na paleta para a unidade inicial na fileira de WPP atual (paleta atual). Alternativamente, o codificador e o decodificador podem usar outra abordagem para sinalizar dados de paleta.
[000148] O codificador e o decodificador podem armazenar todos os dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior. Por exemplo, o codificador e o decodificador podem salvar, para cada uma das C cores nos dados da paleta anterior provenientes da unidade anterior na fileira de WPP anterior, um ou mais valores de componente de cor. Alternativamente, pare reduzir o consumo de memória em alguns casos, o codificador e o decodificador podem limitar C por uma contagem limite para os dados da paleta anterior, de modo que os dados de paleta para as primeiras C cores, limitadas pela contagem limite, sejam armazenadas para a previsão de paleta.
D. PREVISÃO INTRACÓPIA - INTRODUÇÃO.
[000149] Em geral, um modo intracópia usa previsão intracópia na qual um bloco, linha, coluna atual ou outra seção em uma imagem é prevista com o uso de valores de amostra reconstruídos anteriormente em um bloco, uma linha, coluna de referência ou outra seção na mesma imagem. Por exemplo, o modo intracópia pode usar previsão de cópia intrabloco (“BC”), previsão de cópia intralinha (“LC”), ou previsão de cópia intracoluna (“SC”).
[000150] Em geral, um modo intra-BC usa previsão intra-BC na qual os valores de amostra de um bloco atual de uma imagem são previstos com o uso de valores de amostra na mesma imagem. Um valor de vetor de bloco (“BV”) indica um deslocamento do bloco atual para um bloco da imagem (o “bloco de referência”) que inclui os valores de amostra usados para previsão. O bloco de referência fornece valores previstos para o bloco atual. Os valores de amostra usados para previsão são valores de amostra reconstruídos anteriormente, os quais estão, desse modo, disponíveis no codificador durante a codificação e no decodificador durante a decodificação. O valor de BV é sinalizado no fluxo de dados, e um decodificador pode usar o valor de BV para determinar o bloco de referência da imagem para uso para previsão.
[000151] A Figura 13 mostra um exemplo 1300 de previsão intra-BC para um bloco atual 1330 de uma imagem atual 1310. O bloco atual pode ser um bloco de codificação (“CB”) de uma unidade de codificação (“CU”), um bloco de previsão (“PB”) de uma unidade de previsão (“PU”), um bloco de transformada (“TB”) de uma unidade de transformada (“TU”) ou outro bloco. O tamanho do bloco atual pode ser 64x64, 32x32, 16x16, 8x8 ou algum outro tamanho. Os blocos podem ser simétrica ou assimetricamente particionados em blocos menores para propósitos de previsão intra-BC. De modo mais geral, o tamanho do bloco atual é m x n, em que cada um dentre m e n é um número inteiro, e em que m e n podem ser iguais entre si ou podem ter valores diferentes. Dessa forma, o bloco atual pode ser quadrado ou retangular. Alternativamente, o bloco atual pode ter algum outro formato.
[000152] O BV 1340 indica um deslocamento (ou desvio) do bloco atual 1330 para um bloco de referência 1350 da imagem que inclui os valores de amostra usados para previsão. O bloco de referência 1350 pode ser idêntico ao bloco atual 1330, ou o mesmo pode ser uma aproximação do bloco atual 1330. Supõe-se que a posição de topo à esquerda de um bloco atual está na posição (x0, y0) na imagem atual, e supõe-se que a posição de topo à esquerda do bloco de referência está na posição (x1, y1) na imagem atual. O BV indica o deslocamento (x1-x0, y1-y0). Por exemplo, se a posição de topo à esquerda do bloco atual estiver na posição 256, 128, e a posição de topo à esquerda do bloco de referência estiver na posição 126, 104, o valor de BV é -130, -24. Nesse exemplo, um deslocamento horizontal negativo indica uma posição para a esquerda do bloco atual, e um deslocamento vertical negativo indica uma posição acima do bloco atual.
[000153] Uma previsão intra-BC pode melhorar a codificação eficiência explorando-se a redundância (como padrões repetidos dentro de uma imagem) com o uso de operações de BC. Encontrar um bloco de referência correspondente para um bloco atual pode ser complexo de modo computacional e demorado, entretanto, considerando o número de blocos de referência candidatos que o codificador pode avaliar. A Figura 14 mostra um exemplo 1400 que ilustra alguns dentre os blocos de referência candidatos para um bloco atual 1430 de uma imagem atual 1410 quando o WPP não estiver habilitado. Quatro BVs 1441, 1442, 1443, 1444 indicam deslocamentos para quatro blocos de referência candidatos. Quando WPP não estiver habilitado, os blocos de referência candidatos podem estar em qualquer lugar dentro do conteúdo reconstruído da imagem atual 1410. (Os blocos são geralmente convertidos em código da esquerda para direita, então, de cima para baixo.) Um bloco de referência candidato pode se sobrepor a outros blocos de referência candidatos, conforme mostrado para os blocos de referência candidatos indicados pelos BVs 1443, 1444. Em algumas implantações exemplificativas, um bloco de referência é restrito para estar dentro da mesma fatia e peça que o bloco atual. Tal previsão intra-BC não usa valores de amostra em outras fatias ou peças. A localização de um bloco de referência pode ser submetida a uma ou mais outras restrições, por exemplo, uma restrição quando o WPP estiver habilitado, conforme descrito abaixo.
[000154] Um bloco com modo de previsão de previsão intra-BC pode ser um CB, PB ou outro bloco. Quando o bloco for um CB, o BV para o bloco pode ser sinalizado em nível de CU (e outros CBs na CU usam o mesmo BV ou uma versão escalonada do mesmo). Ou, quando o bloco for um PB, o BV para o bloco pode ser sinalizado em nível de PU (e outros PBs na PU usam o mesmo BV ou uma versão escalonada do mesmo). De modo mais geral, o BV para um bloco de previsão intra-BC é sinalizado em um nível de sintaxe apropriado para o bloco.
[000155] Em geral, um modo intra-LC usa previsão intra-LC nos quais os valores de amostra de uma linha atual de um bloco atual de uma imagem são previstos com o uso de valores de amostra na mesma imagem. Um valor de desvio indica um deslocamento da linha atual para uma linha da imagem (a “linha de referência”) que inclui os valores de amostra usados para previsão. O valor de desvio é sinalizado no fluxo de dados, e um decodificador pode usar o valor de desvio para determinar a linha de referência para uso para previsão.
[000156] A Figura 15 ilustra um exemplo 1500 de previsão intra-LC para linhas de um bloco atual 1530 de uma imagem atual. O bloco atual pode ser um CB de uma CU, PB de uma PU, TB de uma TU ou outro bloco. O tamanho do bloco atual pode ser 64x64, 32x32, 16x16, 8x8 ou algum outro tamanho. De modo mais geral, o tamanho do bloco atual é m x n, em que cada um dentre m e n é um número inteiro, e em que m e n podem ser iguais entre si ou podem ter valores diferentes. Dessa forma, o bloco atual pode ser quadrado ou retangular. Para previsão intra-LC, um bloco é dividido em linhas horizontais ou linhas verticais. As linhas horizontais têm uma altura de 1 amostra e têm a largura do bloco atual. As linhas verticais têm uma largura de 1 amostra e têm a altura do bloco atual.
[000157] Na Figura 15, um primeiro desvio 1551 indica um deslocamento de uma primeira linha 1541 do bloco atual 1530 para uma linha de referência 1561 que inclui os valores de amostra usados para previsão da primeira linha 1541. Uma linha de referência pode ser idêntica a uma dada linha, ou pode ser uma aproximação da dada linha. Um segundo desvio 1552 indica um deslocamento de uma segunda linha 1542 do bloco atual 1530 para uma linha de referência 1562 que inclui os valores de amostra usados para previsão da segunda linha 1542. Um valor de desvio 1551, 1552 é similar a um valor de BV, em que o mesmo indica um deslocamento dentro da imagem atual. Embora a Figura 15 mostre linhas horizontais, o bloco atual 1530 pode, em vez disso, ser dividido em linhas verticais para previsão intra-LC. Um elemento de sintaxe por bloco, por unidade ou por imagem pode indicar se linhas horizontais ou verticais são usadas para previsão intra-LC.
[000158] Uma previsão intra-LC pode melhorar a codificação eficiência explorando-se a redundância (como padrões repetidos dentro de uma imagem) com o uso de operações de LC. Quando WPP não estiver habilitado, as linhas de referência candidatas podem estar em qualquer lugar dentro do conteúdo reconstruído da imagem atual. Uma linha de referência candidata pode se sobrepor a outras linhas de referência candidatas. Em algumas implantações exemplificativas, uma linha de referência é restrita para estar dentro da mesma fatia e peça que a linha atual. A localização de uma linha de referência pode ser submetida a uma ou mais outras restrições, por exemplo, uma restrição quando o WPP estiver habilitado, conforme descrito abaixo.
[000159] Em geral, um modo intra-SC usa previsão intra-SC nos quais os valores de amostra de uma coluna atual de um bloco atual de uma imagem são previstos com o uso de valores de amostra na mesma imagem. Um valor de desvio indica um deslocamento da coluna atual para uma coluna da imagem (a “coluna de referência”) que inclui os valores de amostra usados para previsão. Um valor de comprimento de coluna indica o comprimento da coluna em termos de valores de amostra. O valor de desvio e o valor de comprimento de coluna são sinalizados no fluxo de dados, e um decodificador pode usar o valor de desvio e o valor de comprimento de coluna para determinar a coluna de referência para uso para previsão.
[000160] A Figura 16 mostra um exemplo 1600 de previsão intra-SC para colunas de um bloco atual 1630 de uma imagem atual. O bloco atual pode ser um CB de uma CU, PB de uma PU, TB de uma TU ou outro bloco. O tamanho do bloco atual pode ser 64x64, 32x32, 16x16, 8x8 ou algum outro tamanho. De modo mais geral, o tamanho do bloco atual é m x n, em que cada um dentre m e n é um número inteiro, e em que m e n podem ser iguais entre si ou podem ter valores diferentes. Dessa forma, o bloco atual pode ser quadrado ou retangular. Para previsão intra-SC, um bloco é dividido em uma ou mais colunas. Na Figura 16, o bloco atual 1630 é dividido em três colunas. As colunas de um bloco podem ser varridas horizontalmente da esquerda para a direita em uma dada fileira, então, na próxima fileira, e assim por diante. Ou, as colunas de um bloco podem ser varridas verticalmente do topo para o fundo em uma dada coluna, então, na próxima coluna, e assim por diante. As colunas na Figura 16 são varridas horizontalmente.
[000161] Na Figura 16, um primeiro desvio 1651 indica um deslocamento de uma primeira coluna 1641 do bloco atual 1630 para uma coluna de referência 1661 que inclui os valores de amostra usados para previsão da primeira coluna 1641. O comprimento de cada uma dentre a primeira coluna 1641 e a coluna de referência correspondente 1661 é de 6 valores de amostra. Uma coluna de referência pode ser idêntica a uma dada coluna, ou a mesma pode ser uma aproximação da dada coluna. Um segundo desvio 1652 indica um deslocamento de uma segunda coluna 1642 do bloco atual 1630 para uma coluna de referência 1662 que inclui os valores de amostra usados para previsão da segunda coluna 1642. O comprimento de cada uma dentre a segunda coluna 1642 e a coluna de referência correspondente 1662 é de 14 valores de amostra. Nenhum desvio é mostrado para a terceira coluna do bloco atual 1630, que tem um comprimento de 44 amostras. Como um valor de BV, um valor de desvio 1651, 1652 indica um deslocamento dentro da imagem atual. Embora a Figura 16 mostre a varredura horizontal, o bloco atual 1630 pode, em vez disso, ser dividido em colunas que são varridas verticalmente para previsão intra-SC. Um elemento de sintaxe por bloco, por unidade ou por imagem pode indicar se a ordem de varredura horizontal ou vertical é usada para previsão intra-SC.
[000162] Uma previsão intra-SC pode melhorar a codificação eficiência explorando-se a redundância (como padrões repetidos dentro de uma imagem) com o uso de operações de SC. Uma previsão intraSC é mais flexível que uma previsão intra-BC ou uma previsão intra-LC (que permite particionamento em colunas arbitrárias, não apenas partições fixas), mas sinaliza mais informações (valores de comprimento de coluna além dos valores de desvio). Quando WPP não estiver habilitado, as colunas de referência candidatas podem estar em qualquer lugar dentro do conteúdo reconstruído da imagem atual. Uma coluna de referência candidata pode se sobrepor a outras colunas de referência candidatas. Em algumas implantações exemplificativas, uma coluna de referência é restrita para estar dentro da mesma fatia e peça que a coluna atual. A localização de uma coluna de referência pode ser submetida a uma ou mais outras restrições, por exemplo, uma restrição quando o WPP estiver habilitado, conforme descrito abaixo.
[000163] As operações de previsão intracópia para modo intra-BC, modo intra-LC ou modo de intra-SC podem ser aplicadas no nível de CB (quando um valor de BV ou outro valor de desvio for sinalizado por CB ou parte do mesmo) ou PB (quando um valor de BV ou outro desvio for sinalizado por PB ou parte do mesmo). Nesse caso, uma região de referência é restrita para não sobrepor a região atual ou bloco incluindo a região atual. Alternativamente, as operações de previsão intracópia podem ser aplicadas para seções menores dentro de um PB ou CB, mesmo quando o valor de BV ou outro valor de desvio for sinalizado para o PB ou CB (ou parte do mesmo). Por exemplo, para uma primeira seção de um bloco, a região de referência inclui posições fora do bloco. Para uma segunda seção do bloco, entretanto, a região de referência usada em operações de previsão intracópia pode incluir posições na primeira seção reconstruída anteriormente do mesmo bloco. Desse modo, um valor de BV ou valor de desvio pode se referir a posições no mesmo PB ou CB. Permitir que operações de previsão intracópia sejam aplicadas para seções dentro de um PB ou CB facilita o uso de valores de BV ou outros desvios com magnitudes relativamente pequenas.
[000164] Quando a região de referência para uma região atual em uma unidade atual puder incluir uma posição dentro da mesma unidade, um codificador pode verificar a validade do valor de BV ou outro valor de desvio considerando-se as ordens de varredura z da região atual e da região de referência (que estão na mesma fatia e na mesma peça). Por exemplo, o codificador verifica que a ordem de varredura z do bloco que contém a posição de fundo à direita da região de referência (x0+offsetx+m-1, y0+offsety+n-1) é menor que a ordem de varredura z do bloco que contém a posição de topo à esquerda da região atual (x0, y0), em que o desvio indica o valor de desvio e a região atual e a região de referência têm dimensões m x n. Se for o caso, o bloco que contêm a posição de fundo à direita da região de referência foram anteriormente reconstruídos (e, portanto, tem o resto da região de referência). O codificador também pode verificar que o valor de desvio satisfaz pelo menos uma dentre as condições offsetx+ m < 0 e offsety + n < 0, o que garante que a região de referência não sobrepõe a região atual.
[000165] Em geral, a ordem de varredura z segue uma ordem sequencialmente especificada de unidades que particionam uma imagem. A Figura 17 mostra a ordem de varredura z exemplificativa 1700 para uma região atual 1730 e unidades que podem incluir a posição de fundo à direita de uma região de referência. A região atual 1730pode ser um CB, um PB ou outro bloco, uma linha, ou um retângulo que inclui uma coluna. As ordens de varredura z são geralmente atribuídas a unidades sequencialmente da esquerda para direita em uma fileira, repetindo em fileiras sucessivas de cima para baixo. Quando uma unidade for dividida, ordens de varredura z são atribuídas dentro da unidade dividida, de modo recursivo. Para implantações de codificação/decodificação para o padrão H.265/HEVC, a ordem de varredura z procede CTU a CTU ao longo de um padrão de varredura de rastreamento de CTU (esquerda para direita em uma fileira de CTU, repetindo em fileiras sucessivas de CTU de cima para baixo). Se uma CTU for dividida, a ordem de varredura z segue um padrão de varredura de rastreamento para CUs de um quadtree dentro da CTU dividida. E, se uma CU for dividida (por exemplo, em múltiplas CUs, ou em múltiplas PUs), a ordem de varredura z segue um padrão de varredura de rastreamento para blocos dentro da CU dividida.
[000166] Em algumas implantações exemplificativas, um valor de BV ou outro valor de desvio é sinalizado para uma CU, PU ou outra unidade, e é aplicado para todos os blocos da unidade. Dependendo do espaço de cor e da taxa de amostragem de cor, o valor de BV ou outro valor de desvio pode ser usado para todos os blocos sem escalonamento, ou o mesmo pode ser escalonado para blocos em componentes de cor diferente. Alternativamente, os valores de BV diferentes ou outros valores de desvio podem ser sinalizados para os blocos diferentes de uma unidade. Em algumas implantações exemplificativas, o mesmo modo de previsão (por exemplo, modo intra-BC) se aplica para todos os blocos de uma unidade. Alternativamente, blocos diferentes podem ter modos de previsão diferentes.
E. RESTRIÇÕES PARA PREVISÃO INTRACÓPIA QUANDO O WPP ESTIVER HABILITADO.
[000167] Em geral, a previsão intra-BC, a previsão intra-LC e a previsão intra-SC usam valores de amostra reconstruídos anteriormente em uma imagem para prever os valores de amostra de um bloco, linha ou coluna atual da mesma imagem. Como regra, a área de uma imagem que inclui os valores de amostra reconstruídos anteriormente quando o WPP estiver habilitado é diferente da área da imagem que inclui os valores de amostra reconstruídos anteriormente quando o WPP não estiver habilitado. Para previsão intracópia, algumas restrições na localização de uma região de referência são impostas se WPP estiver ou não habilitado. Um ou mais outras restrições na localização da região de referência se aplicam quando o WPP estiver habilitado. As restrições na localização da região de referência podem tomar a forma de limites em valores de BV permitidos para previsão intra-BC ou limites em valores de desvio permitidos para previsão intra-LC ou previsão intraSC.
[000168] A Figura 18 mostra um exemplo 1800 de restrições na localização de uma região de referência para uma região atual 1830 de uma imagem 1810 quando o WPP estiver habilitado de acordo com algumas implantações exemplificativas. A imagem 1810 é organizada por fileiras de CTU e colunas de CTU.
[000169] A região atual 1830 é codificada ou é decodificada com um modo intracópia. A região atual 1830 faz parte de uma CTU atual. Para a CTU atual, as dependências vêm em cascata a partir das fileiras de CTU anteriores. Quando o WPP estiver habilitado, para processamento da CTU atual iniciar, a CTU (ou CTUs) à sua esquerda na mesma fileira foi processada, e as CTUs na fileira anterior até a CTU cima à direita foram processadas. De modo similar, para qualquer uma dentre essas CTUs já processadas, as CTUs à esquerda na mesma fileira e as CTUs na fileira anterior até a CTU acima à direita foram processadas. Conforme mostrado na Figura 18, essas CTUs processadas anteriormente fornecem o conteúdo reconstruído garantido a estar disponível para previsão intracópia quando o WPP estiver habilitado.
[000170] A Figura 18 mostra algumas das regiões de referência candidatas para a região atual 1830 da imagem atual 1810. Quatro valores de desvio 1841, 1842, 1843, 1844 indicam deslocamentos para quatro regiões de referência candidatas. Uma região de referência candidata pode se sobrepor a outras regiões de referência candidatas. As regiões de referência candidatas podem estar em qualquer lugar dentro do conteúdo reconstruído da imagem atual 1810. Quando WPP não estiver habilitado, o conteúdo reconstruído da imagem atual 1810 inclui geralmente CTUs à esquerda da CTU atual e todas as CTUs em fileiras de CTU anteriores. Quando o WPP estiver habilitado, entretanto, menos conteúdo reconstruído está disponível, conforme mostrado na Figura 18. Na Figura 18, três dentre os valores de desvio 1841, 1842, 1843 indicam regiões de referência válidas. Essas regiões de referência válidas incluem apenas valores de amostra dentro do conteúdo reconstruído garantido para estar disponível para previsão intracópia quando o WPP estiver habilitado. Um dentre os valores de desvio 1844 indica uma região de referência inválida, que inclui pelo menos alguns valores de amostra fora do conteúdo reconstruído garantido para estar disponível para previsão intracópia quando o WPP estiver habilitado.
1. CODIFICAÇÃO E DECODIFICAÇÃO COM RESTRIÇÕES NO MODO INTRACÓPIA QUANDO O WPP ESTIVER HABILITADO.
[000171] A Figura 19 mostra uma técnica generalizada 1900 para a codificação com regras impostas para o modo intracópia quando o WPP estiver habilitado. Um codificador como o codificador mostrado na Figura 3 ou nas Figuras 5a e 5b, ou outro codificador, pode realizar a técnica 1900. A Figura 20 mostra uma técnica generalizada 2000 para a decodificação com regras impostas para o modo intracópia quando o WPP estiver habilitado. Um decodificador como o decodificador mostrado na Figura 4 ou na Figura 6, ou outro decodificador, pode realizar a técnica 2000.
[000172] Com referência à Figura 19, um codificador codifica 1910 uma imagem com o WPP habilitado. A codificação 1910 produz dados codificados. Como parte da codificação 1910, para um modo intracópia (por exemplo, um modo com o uso de previsão intra-BC, previsão intra- LC ou previsão intra-SC), o codificador impõe uma ou mais restrições atribuíveis ao WPP. O codificador emite 1920 os dados codificados como parte de um fluxo de dados.
[000173] Com referência à Figura 20, um decodificador recebe 2010 dados codificados como parte de um fluxo de dados. Os dados codificados satisfazem, para um modo intracópia (por exemplo, um modo com o uso de previsão intra-BC, previsão intra-LC ou previsão intra-SC), uma ou mais restrições atribuíveis ao WPP. O decodificador decodifica 2020 os dados codificados com o WPP habilitado. A decodificação 2020 reconstrói uma imagem.
[000174] Um elemento de sintaxe no fluxo de dados pode indicar se o WPP está habilitado para uma sequência de vídeo, conjunto de imagens ou imagem. O elemento de sintaxe pode ser sinalizado em uma estrutura de sintaxe de SPS, uma estrutura de sintaxe de PPS (por exemplo, o elemento de sintaxe entropy_coding_sync_enabled_flag nas implantações H.265/HEVC) ou outra estrutura de sintaxe no fluxo de dados.
[000175] O modo intracópia pode ser o modo intra-BC. Nesse caso, para um bloco atual na imagem, um valor de desvio indica um deslocamento até um bloco de referência na imagem. O bloco de referência inclui valores de amostra reconstruídos anteriormente. Ou, o modo intracópia pode ser o modo intra-LC. Nesse caso, para uma linha atual em um bloco da imagem, um valor de desvio indica um deslocamento até uma linha de referência na imagem. A linha de referência inclui valores de amostra reconstruídos anteriormente que são varridos em uma direção de varredura de linha, que pode ser horizontal ou vertical. Ou, o modo intracópia pode ser o modo intra-SC. Nesse caso, para uma coluna atual em um bloco da imagem, um valor de desvio indica um deslocamento até uma coluna de referência na imagem. A coluna de referência inclui valores de amostra reconstruídos anteriormente que são varridos em uma ordem de varredura de coluna, que pode ser horizontal ou vertical. Para a coluna atual, um valor de comprimento indica o comprimento para cada uma dentre a coluna atual e a coluna de referência. Ou, o modo intracópia pode ser algum outro modo que usa um valor de desvio para encontrar um bloco, linha, coluna de referência ou outra seção em uma imagem, para um bloco, linha, coluna atual ou outra seção na mesma imagem, quando o bloco, linha, coluna de referência, etc. incluir valores de amostra reconstruídos anteriormente.
[000176] A restrição (ou restrições) atribuível ao WPP pode incluir uma restrição de que um valor de deslocamento horizontal desde uma região de referência até uma região atual é menor ou igual a um valor de deslocamento vertical desde a região atual até a região de referência. Por exemplo, o valor de deslocamento horizontal mede uma diferença de uma coluna de WPP que inclui uma borda direita da região de referência até uma coluna de WPP que inclui uma borda esquerda da região atual, e o valor de deslocamento vertical mede uma diferença de uma fileira de WPP que inclui uma borda de topo da região atual até uma fileira de WPP que inclui uma borda de fundo da região de referência. Em algumas implantações exemplificativas, cada uma das colunas de WPP é uma coluna de CTUs, e cada uma das fileiras de WPP é uma fileira de CTUs. Alternativamente, a restrição (ou restrições) atribuível ao WPP inclui uma ou mais restrições diferentes e/ou adicionais.
[000177] Se o modo intracópia for modo intra-BC, a região atual é um bloco atual e a região de referência é um bloco de referência. Se o modo intracópia for modo intra-LC, a região atual é uma linha atual e a região de referência é uma linha de referência. Se o modo intracópia for modo de cópia intra-SC, a região atual é um retângulo que inclui uma coluna atual e a região de referência é um retângulo que inclui uma coluna de referência. O codificador ou decodificador pode identificar o retângulo que inclui a coluna atual determinando-se um retângulo que inclui uma posição inicial da coluna atual, uma posição final da coluna atual, e quaisquer posições entre a posição inicial e a posição final da coluna atual em uma ordem de varredura de coluna (por exemplo, horizontal, vertical). O codificador ou decodificador pode identificar o retângulo que inclui a coluna de referência com o uso de um valor de desvio aplicado ao retângulo que inclui a coluna atual.
[000178] O codificador também pode impor uma ou mais outras restrições que não são atribuíveis a um WPP. Por exemplo, o codificador pode verificar que uma posição de topo à esquerda da região atual e uma posição de topo à esquerda da região de referência estão na mesma fatia, caso aplicável, e na mesma peça, caso aplicável. Como outro exemplo, o codificador pode verificar que a posição de topo à esquerda da região atual e uma posição de fundo à direita da região de referência estão na mesma fatia, caso aplicável, e na mesma peça, caso aplicável. Ainda como outro exemplo, o codificador pode verificar que uma das três condições a seguir seja satisfeita: (a) uma fileira de CTU que inclui uma borda de fundo da região de referência está acima de uma fileira de CTU que inclui uma borda de topo da região atual; (b) se a fileira de CTU que inclui a borda de fundo da região de referência for igual à fileira de CTU que inclui a borda de topo da região atual, então, uma coluna de CTU que inclui a borda direita da região de referência está à esquerda de uma coluna de CTU que inclui uma borda esquerda da região atual; e (c) se a fileira de CTU que inclui a borda de fundo da região de referência for igual à fileira de CTU que inclui a borda de topo da região atual, e se a coluna de CTU que inclui a borda direita da região de referência for igual à coluna de CTU que inclui a borda esquerda da região atual, então, a posição de fundo à direita da região de referência está mais antecipada na ordem de varredura z que a posição de topo à esquerda da região atual.
[000179] As seções a seguir detalham exemplos das restrições que o codificador pode impor para a previsão intra-BC, a previsão intra-LC e a previsão intra-SC, respectivamente, quando o WPP estiver habilitado, de acordo com algumas implantações exemplificativas.
2. RESTRIÇÕES EXEMPLIFICATIVAS EM VALORES DE BV PARA PREVISÃO INTRA-BC QUANDO O WPP ESTIVER HABILITADO.
[000180] Esta seção detalha exemplos de restrições que o codificador pode impor para a previsão intra-BC quando o WPP estiver habilitado. Para um bloco atual, as restrições verificam que um bloco de referência candidata indicada por um valor de BV inclui valores de amostra reconstruídos que estarão disponíveis quando o bloco atual for codificado ou decodificado, mesmo quando o WPP estiver habilitado.
[000181] Definições. O bloco atual inicia a partir da posição (x0, y0), em relação à posição de topo à esquerda da imagem atual. A largura e a altura do bloco atual são wblock e hblock, respectivamente. O bloco atual faz parte de uma CU atual. O tamanho de CTU é S. O CU inicia a partir de (xCU, yCU) em relação à posição de topo à esquerda da imagem. O vetor de bloco é (BVx, BVy).
[000182] O codificador verifica que todas as restrições a seguir são satisfeitas.
[000183] Primeira restrição. O codificador verifica que a posição (x0, y0) e a posição (x0+BVx, y0+BVy) estão na mesma fatia e na mesma peça. Ou seja, o codificador verifica que a posição de topo à esquerda do bloco atual e a posição de topo à esquerda do bloco de referência estão na mesma fatia e na mesma peça. Se as duas posições estiverem em fatias diferentes ou peças diferentes, a primeira restrição não é satisfeita.
[000184] Segunda restrição. O codificador verifica que a posição (x0, y0) e a posição (x0+BVx+wblock-1, y0+BVy+hblock-1) estão na mesma fatia e na mesma peça. Ou seja, o codificador verifica que a posição de topo à esquerda do bloco atual e a posição de fundo à direita do bloco de referência estão na mesma fatia e na mesma peça. Se as duas posições estiverem em fatias diferentes ou peças diferentes, a segunda restrição não é satisfeita.
[000185] Para a primeira e a segunda restrições, se múltiplas fatias não forem usadas, as duas posições que são verificadas estão necessariamente na mesma fatia, e a primeira e a segunda restrições para as fatias não precisam ser verificadas. De modo similar, se múltiplas peças não forem usadas, as duas posições que são verificadas estão necessariamente na mesma peça, e a primeira e a segunda restrições para as peças não precisam ser verificadas. Todas as posições do bloco atual estão em uma única fatia e em uma única peça. Se a primeira e a segunda restrições forem satisfeitas, todas as posições do bloco de referência também estão naquela fatia e naquela peça. O codificador verifica a primeira e a segunda restrições a respeito da possibilidade de o WPP estar habilitado ou não.
[000186] Terceira restrição. Para a terceira restrição, o codificador verifica que uma das três condições a seguir seja satisfeita. O codificador verifica a terceira restrição a respeito da possibilidade de o WPP estar habilitado ou não.
[000187] Primeira condição da terceira restrição. O codificador verifica se (y0+BVy+hblock-1) /S<y0/S. Ou seja, o codificador calcula a fileira de CTU que inclui a borda de fundo do bloco de referência: (y0+BVy+hblock- 1) /S. O codificador também calcula a fileira de CTU que inclui a borda de topo do bloco atual: y0/S. O codificador então, verifica se a fileira de CTU que inclui a borda de fundo do bloco de referência está acima da fileira de CTU que inclui a borda de topo do bloco atual. Se for o caso, o bloco de referência necessariamente inclui valores de amostra reconstruídos anteriormente, pelo menos quando o WPP não estiver habilitado.
[000188] Segunda condição da terceira restrição. Quando (yo+BVy+hbiock-1) /S==yo/S, o codificador verifica se (xo+BVx+Wbiock-1) /S<x0/S. Ou seja, se a fileira de CTU que inclui a borda de fundo do bloco de referência for igual à fileira de CTU que inclui a borda de topo do bloco atual (a mesma fileira de CTU), o codificador calcula (a) a coluna de CTU que inclui a borda direita do bloco de referência ((x0+BVx+wblock-1) /S), e (b) a coluna de CTU que inclui a borda esquerda do bloco atual (x0/S). O codificador, então, verifica se a coluna de CTU que inclui a borda direita do bloco de referência está à esquerda de uma coluna de CTU que inclui a borda esquerda do bloco atual. Se for o caso, o bloco de referência necessariamente inclui valores de amostra reconstruídos anteriormente.
[000189] Terceira condição da terceira restrição. Quando (yo+BVy+hbiock-1) /S==yo/Sand (xo+BVx+Wbiock-1) /S==xo/S, o codificador verifica se a ordem de varredura z da posição (x0+BVx+wblock- 1, y0+yBV+hblock-1) é menor que a ordem de varredura z da posição (x0, y0). Ou seja, se a fileira de CTU que inclui a borda de fundo do bloco de referência for igual à fileira de CTU que inclui a borda de topo do bloco atual (a mesma fileira de CTU), e a coluna de CTU que inclui a borda direita do bloco de referência for igual à coluna de CTU que inclui a borda esquerda do bloco atual (a mesma coluna de CTU), então, o codificador verifica se a posição de fundo à direita do bloco de referência está mais antecipada na ordem de varredura z que a posição de topo à esquerda do bloco atual. A terceira condição se aplica caso a previsão a partir de dentro da CU atual seja permitida. Se a previsão a partir de dentro da CU atual não for permitida, (x0, y0) deve ser (xCU, yCU).
[000190] Quarta restrição. O codificador verifica a quarta restrição quando o WPP estiver habilitado. Para a quarta restrição, o codificador verifica que (xo+BVx+Wbiock-1) /S-xo/S< = yo/S- (yo+BVy+hbiock-1) /S. Ou seja, o codificador calcula a diferença entre a coluna de CTU que inclui a borda direita do bloco de referência e a coluna de CTU que inclui a borda esquerda do bloco atual: (x0+BVx+wblock-1) /S-x0/S. O codificador também calcula a diferença entre a fileira de CTU que inclui a borda de topo do bloco atual e a fileira de CTU que inclui a borda de fundo do bloco de referência: y0/S- (y0+BVy+hblock-1) /S. O codificador verifica que a primeira diferença (entre colunas de CTU) é menor ou igual à segunda diferença (entre fileiras de CTU). Conforme mostrado na linha denteada das CTUs a partir da CTU atual para cima e à direita na Figura 8 ou na Figura 18, isso verifica que o bloco de referência faz parte do conteúdo reconstruído garantido como disponível para previsão quando o WPP estiver habilitado.
3. RESTRIÇÕES EXEMPLIFICATIVAS EM VALORES DE OFFSET PARA PREVISÃO INTRA-LC QUANDO O WPP ESTIVER HABILITADO.
[000191] Esta seção detalha exemplos de restrições que o codificador pode impor para a previsão intra-LC quando o WPP estiver habilitado. Para uma linha atual, as restrições verificam que uma linha de referência candidata indicada por um valor de desvio inclui valores de amostra reconstruídos que estarão disponíveis quando a linha atual for codificada ou decodificada, mesmo quando o WPP estiver habilitado.
[000192] Definições. O bloco atual inicia a partir da posição (x0, y0), em relação à posição de topo à esquerda da imagem atual. A largura e a altura do bloco atual são wblock e hblock, respectivamente. O bloco atual faz parte de uma CU atual. O tamanho de CTU é S. O valor de desvio para a linha atual é offsetx, offsety). L linhas do bloco atual já foram processadas.
[000193] O codificador define as posições inicial e final da linha atual do bloco atual. A posição (xcurr_line_start, ycurr_line_start) é a posição inicial da linha atual, e (xcurr_line_end, ycurr_line_end) é a posição final da linha atual. Quando a varredura horizontal (também denominada modo de fileira) for usada, cada linha é uma fileira do bloco atual: (xcurr_line_start, ycurr_line_start) = (Xθ, yo+L), e (Xcurr_line_end, ycurr_line_end) = (Xθ+ Wblock-1, yo+L).Quando a varredura vertical (também denominada modo de coluna) for usada, cada linha é uma coluna do bloco atual: (xcurr_line_start, ycurr_line_start) = (Xθ+L, yo), e (Xcurr_line_end, ycurr_line_end) = (Xo+L, yo+hblock-1).
[000194] O codificador também define as posições inicial e final de uma linha de referência candidata, que prevê a linha atual. A posição (xref_line_start, yref_line_start) é a posição inicial da linha de referência. A posição (xref_line_end, yref_line_end) é a posição final da linha de referência. Uma linha de referência pode ser uma fileira (quando a varredura horizontal for usada) ou uma coluna (quando a varredura vertical for usada). Se a varredura horizontal (modo de fileira) ou a varredura vertical (modo de coluna) for usada: (Xref_line_steirt, yref_line_start) =(xcurr_line_start, ycurr_line_start) + offsetx, offsety), e (xref_line_end, yref_end) =(xcurr_line_end, ycurr_line_end) + offsetx, offsety).
[000195] O codificador verifica que todas as restrições a seguir são satisfeitas. Para algumas dessas restrições, a posição de topo à esquerda (x0, y0) do bloco atual é considerada. Para tais restrições, alternativamente, a posição inicial (xcurr_line_start, ycurr_line_start) da linha atual pode ser verificada em vez da posição de topo à esquerda (x0, y0) do bloco atual.
[000196] Primeira restrição. O codificador verifica que a posição (x0, y0) e a posição (xref_line_start, yref_line_start) estão na mesma fatia e na mesma peça. Ou seja, o codificador verifica que a posição de topo à esquerda do bloco atual e a posição inicial da linha de referência estão na mesma fatia e na mesma peça. Se as duas posições estiverem em fatias diferentes ou peças diferentes, a primeira restrição não é satisfeita.
[000197] Segunda restrição. O codificador verifica que a posição (x0, y0) e a posição (xref_line_end, yref_line_end) estão na mesma fatia e na mesma peça. Ou seja, o codificador verifica que a posição de topo à esquerda do bloco atual e a posição final da linha de referência estão na mesma fatia e na mesma peça. Se as duas posições estiverem em fatias diferentes ou peças diferentes, a segunda restrição não é satisfeita.
[000198] Para a primeira e a segunda restrições, se múltiplas fatias não forem usadas, as duas posições que são verificadas estão necessariamente na mesma fatia, e a primeira e a segunda restrições para as fatias não precisam ser verificadas. De modo similar, se múltiplas peças não forem usadas, as duas posições que são verificadas estão necessariamente na mesma peça, e a primeira e a segunda restrições para as peças não precisam ser verificadas. Todas as posições da linha atual estão em uma única fatia e em uma única peça. Se a primeira e a segunda restrições forem satisfeitas, todas as posições da linha de referência também estão naquela fatia e naquela peça. O codificador verifica a primeira e a segunda restrições a respeito da possibilidade de o WPP estar habilitado ou não.
[000199] Terceira restrição. Para a terceira restrição, o codificador verifica que uma das três condições a seguir seja satisfeita. O codificador verifica a terceira restrição a respeito da possibilidade de o WPP estar habilitado ou não.
[000200] Primeira condição da terceira restrição. O codificador verifica se (yref_line_end/S<y0/S). Ou seja, o codificador calcula a fileira de CTU que inclui a borda de fundo ou a posição da linha de referência: yref_line_end/S. O codificador também calcula a fileira de CTU que inclui a borda de topo do bloco atual: y0/S. O codificador então, verifica se a fileira de CTU que inclui a borda de fundo ou a posição da linha de referência está acima da fileira de CTU que inclui a borda de topo do bloco atual. Se for o caso, a linha de referência necessariamente inclui valores de amostra reconstruídos anteriormente, pelo menos quando o WPP não estiver habilitado.
[000201] Segunda condição da terceira restrição. Quando yref_line_end/S = =yo/S, o codificador verifica se xref_iine_end/S<xo/S. Ou seja, se a fileira de CTU que inclui a borda de fundo ou a posição da linha de referência for igual à fileira de CTU que inclui a borda de topo do bloco atual (a mesma fileira de CTU), o codificador calcula (a) a coluna de CTU que inclui a borda direita ou a posição da linha de referência (xref_line_end/S), e (b) a coluna de CTU que inclui a borda esquerda do bloco atual (xo/S). O codificador, então, verifica se a coluna de CTU que inclui a borda direita ou a posição da linha de referência está à esquerda de uma coluna de CTU que inclui a borda esquerda do bloco atual. Se for o caso, a linha de referência necessariamente inclui valores de amostra reconstruídos anteriormente.
[000202] Terceira condição da terceira restrição. Quando yref_line_end/S = =yo/S e Xref_iine_end/S==xo/S, o codificador verifica se a ordem de varredura z da posição (xref_line_end, yref_line_end) é menor que a ordem de varredura z da posição (xcurr_line_start, ycurr_line_start). Ou seja, se a fileira de CTU que inclui a borda de fundo ou a posição da linha de referência for igual à fileira de CTU que inclui a borda de topo do bloco atual (a mesma fileira de CTU), e a coluna de CTU que inclui a borda direita ou a posição da linha de referência for igual à coluna de CTU que inclui a borda esquerda do bloco atual (a mesma coluna de CTU), então, o codificador verifica se a posição final da linha de referência está mais antecipada na ordem de varredura z que a posição inicial da linha atual. A terceira condição se aplica caso a previsão a partir de dentro da CU atual seja permitida. Se a previsão a partir de dentro da CU atual não for permitida, (xcurr_line_start, ycurr_line_start) deve ser (x0, y0).
[000203] Quarta restrição. O codificador verifica a quarta restrição quando o WPP estiver habilitado. Para a quarta restrição, o codificador verifica que xref_line_end/S-xo/S< = yo/S-yref_iine_end/S. Ou seja, o codificadorcalcula a diferença entre a coluna de CTU que inclui a borda direita ou a posição da iinha de referência e a coiuna de CTU que inciui a borda esquerda do bioco atuai: xref_iine_end/S-xo/S. O codificador também caicuia a diferença entre a fiieira de CTU que inciui a borda de topo do bioco atuai e a fiieira de CTU que inciui a borda de fundo ou a posição da iinha de referência: yo/S-yref_iine_end/S. O codificador verifica que a primeira diferença (entre coiunas de CTU) é menor ou iguai à segunda diferença (entre fiieiras de CTU).
4. RESTRIÇÕES EXEMPLIFICATIVAS EM VALORES DE OFFSET PARA PREVISÃO INTRA-SC QUANDO O WPP ESTIVER HABILITADO.
[000204] Esta seção detaiha exempios de restrições que o codificador pode impor para a previsão intra-SC quando o WPP estiver habiiitado. Para uma coiuna atuai, as restrições verificam que uma coiuna de referência candidata indicada por um vaior de desvio e o vaior de comprimento inclui valores de amostra reconstruídos que estarão disponíveis quando a coluna atual for codificada ou decodificada, mesmo quando o WPP estiver habilitado.
[000205] Definições. O bloco atual inicia a partir da posição (x0, y0), em relação à posição de topo à esquerda da imagem atual. A largura e a altura do bloco atual são wblock e hblock, respectivamente. O bloco atual faz parte de uma CU atual. O tamanho de CTU é S. O valor de desvio para a coluna atual é offsetx, offsety), e o valor de comprimento de coluna para a coluna atual é lengthstring. K pixels do bloco atual já foram processados com o uso de previsão intra-SC.
[000206] O codificador define as posições inicial e final da coluna atual do bloco atual. A posição (xcurr_string_start, ycurr_string_start) é a posição inicial da coluna atual, e (xcurr_string_end, ycurr_string_end) é a posição final da coluna atual. O codificador também define um retângulo delimitador que contém a posição inicial da coluna atual, a posição final da coluna atual, e quaisquer posições (na ordem de varredura de coluna) entre as posições inicial e final da coluna atual. A posição de topo à esquerda do retângulo delimitador é (xcurr_rect_TL, ycurr_rect_TL). A posição de fundo à direita do retângulo delimitador é (xcurr_rect_BR, ycurr_rect_BR). O codificador define um retângulo de referência (incluindo a coluna de referência) como o retângulo delimitador deslocado pelo valor de desvio. A posição de topo à esquerda do retângulo de referência é (xref_rect_TL, yref_rect_TL). A posição de fundo à direita do retângulo delimitador é (xref_rect_BR, yref_rect_BR).
[000207] Quando a varredura de coluna horizontal for usada (da esquerda para a direita em uma fileira do bloco atual, da fileira de topo para a fileira de fundo), a posição inicial é: (Xcurr_string_start, ycurr_string_start) =(XO+K% Wblock, yo+K/Wblock). A pOsiÇãO final é: (Xcurr_string_end, ycurr_string_end) = (XO+ (K+lengthstring-1) % Wblock, y0+ (K+lengthstring-1) /Wblock). Quando a posição inicial e a posição final da coluna atual estão na mesma fileira do blOCO atual, (Xcurr_rect_TL, ycurr_rect_TL) _ (Xcurr_string_start, ycurr_string_start), e (Xcurr_rect_BR, ycurr_rect_BR) = (Xcurr_string_end, ycurr_string_end). Dθ OutrO modo, a pOsiçãO de tOpO à esquerda dO retângulO delimitadOr é (xcurr_rect_TL, ycurr_rθct_TL) = (xo, yo+K/Wbiock), e a posição de fundo à direita do retângulo delimitador é (Xcurr_rect_BR, ycurr_rect_BR) = (Xθ+Wblock-1), yo+ (K+lengthstring- 1) /wblock).
[000208] Quando a varredura vertical for usada (do topo para o fundo em uma coluna do bloco atual, da coluna esquerda para a coluna direita), a posição inicial é: (Xcurr_string_start, ycurr_string_start) _ (Xo+K/hblock,yo+K% hblock). A posição final é: (Xcurr_string_end, ycurr_string_end) _ (Xo+ (K+lengthstring-1) /hblock, yo+ (K+lengthstring-1) % hblock). Quando a posição inicial e a posição final da coluna atual estão na mesma coluna do bloco atual, (xcurr_rect_TL, ycurr_rect_TL) (Xcurr_string_start, ycurr_string_start), e (Xcurr_rect_BR, ycurr_rect_BR) _ (Xcurr_string_end, ycurr_string_end). De outro modo, a posição de topo à esquerda do retângulo delimitador é (Xcurr_rect_TL, ycurr_rect_TL) =(x0+K/hblock, y0), e a posição de fundo à direita do retângulo delimitador é (Xcurr_rect_BR, ycurr_rect_BR) _ (Xo+ (K+lengthstring —1) /hblock), y0+hblock-1).
[000209] Se a varredura horizontal ou a varredura vertical for usada, a posição de topo à esquerda do retângulo de referência é (xref_rect_TL, yref_rect_TL) = (Xcurr_rect_TL, ycurr_rect_TL) + offsetx, offsety), e a posição de fundo à direita do retângulo de referência é (Xref_rect_BR, yref_rect_BR) = (xcurr_rect_BR, ycurr_rect_BR) + offsetx, offsety). Finalmente, a posição inicial da coluna de referência é (Xref_string_start, yref_string_start) = (Xcurr_string_start,ycurr_string_start) + offsetx, offsety).
[000210] O codificador verifica que todas as restrições a seguir são satisfeitas. Para algumas dessas restrições, a posição de topo à esquerda (x0, y0) do bloco atual é considerada. Para tais restrições, alternativamente, a posição inicial da coluna atual ou a posição de topo à esquerda do retângulo delimitador pode ser verificada em vez da posição de topo à esquerda (x0, y0) do bloco atual.
[000211] Primeira restrição. O codificador verifica que a posição (x0, y0) e a posição (xref_rect_TL, yref_rect_TL) estão na mesma fatia e na mesma peça. Ou seja, o codificador verifica que a posição de topo à esquerda do bloco atual e a posição de topo à esquerda do retângulo de referência estão na mesma fatia e na mesma peça. Se as duas posições estiverem em fatias diferentes ou peças diferentes, a primeira restrição não é satisfeita.
[000212] Segunda restrição. O codificador verifica que a posição (x0, y0) e a posição (xref_rect_BR, yref_rect_BR) estão na mesma fatia e na mesma peça. Ou seja, o codificador verifica que a posição de topo à esquerda do bloco atual e a posição de fundo à direita do retângulo de referência estão na mesma fatia e na mesma peça. Se as duas posições estiverem em fatias diferentes ou peças diferentes, a segunda restrição não é satisfeita.
[000213] Para a primeira e a segunda restrições, se múltiplas fatias não forem usadas, as duas posições que são verificadas estão necessariamente na mesma fatia, e a primeira e a segunda restrições para as fatias não precisam ser verificadas. De modo similar, se múltiplas peças não forem usadas, as duas posições que são verificadas estão necessariamente na mesma peça, e a primeira e a segunda restrições para as peças não precisam ser verificadas. Todas as posições da coluna atual estão em uma única fatia e em uma única peça. Se a primeira e a segunda restrições forem satisfeitas, todas as posições do retângulo de referência (e, portanto, a coluna de referência) também estão na fatia e na peça. O codificador verifica a primeira e a segunda restrições a respeito da possibilidade de o WPP estar habilitado ou não.
[000214] Terceira restrição. Para a terceira restrição, o codificador verifica que uma ou mais das condições a seguir sejam satisfeitas. O codificador verifica a terceira restrição a respeito da possibilidade de o WPP estar habilitado ou não.
[000215] Primeira condição da terceira restrição. O codificador verifica se yref_rect_BR/S<y0/S. Ou seja, o codificador calcula a fileira de CTU que inclui a borda de fundo do retângulo de referência: yref_rect_BR/S. O codificador também calcula a fileira de CTU que inclui a borda de topo do bloco atual: y0/S. O codificador então, verifica se a fileira de CTU que inclui a borda de fundo do retângulo de referência está acima da fileira de CTU que inclui a borda de topo do bloco atual. Se for o caso, o retângulo de referência necessariamente inclui valores de amostra reconstruídos anteriormente, pelo menos quando o WPP não estiver habilitado.
[000216] Segunda condição da terceira restrição. Quando yref_rect_BR/S = = yo/S, o codificador verifica se Xref_rect_BR/S<xo/S. Ou seja, se a fileira de CTU que inclui a borda de fundo do retângulo de referência for igual à fileira de CTU que inclui a borda de topo do bloco atual (a mesma fileira de CTU), o codificador calcula (a) a coluna de CTU que inclui a borda direita do retângulo de referência (xref_rect_BR/S), e (b) a coluna de CTU que inclui a borda esquerda do bloco atual (x0/S). O codificador, então, verifica se a coluna de CTU que inclui a borda direita do retângulo de referência está à esquerda da coluna de CTU que inclui a borda esquerda do bloco atual. Se for o caso, o retângulo de referência necessariamente inclui valores de amostra reconstruídos anteriormente.
[000217] Terceira condição da terceira restrição. Quando yref_rect_BR/S = =yo/S e Xref_rect_BR/S == xo/S, o codificador verifica se a ordem de varredura z da posição (xref_rect_BR, yref_rect_BR) é menor que a ordem de varredura z da posição (xo, yo). Ou seja, se a fileira de CTU que inclui a borda de fundo do retângulo de referência for igual à fileira de CTU que inclui a borda de topo do bloco atual (a mesma fileira de CTU), e a coluna de CTU que inclui a borda direita do retângulo de referência for igual à coluna de CTU que inclui a borda esquerda do bloco atual (a mesma coluna de CTU), então, o codificador verifica se a posição de fundo à direita do retângulo de referência está mais antecipada na ordem de varredura z que a posição de topo à esquerda do bloco atual.
[000218] Quarta condição da terceira restrição. Se a previsão a partir de dentro da CU atual for permitida, quando yref_string_start yo, o codificador verifica que xref_string_start<xo. Ou seja, se a previsão a partir de dentro da CU atual for permitida, a terceira restrição pode ser satisfeita se a coluna atual e a coluna de referência iniciarem na mesma fileira, e a coluna de referência iniciar à esquerda da coluna atual.
[000219] Quarta restrição. O codificador verifica a quarta restrição quando o WPP estiver habilitado. Para a quarta restrição, o codificador verifica que Xref_rect_BR/S-xo/S< = yo/S-yref_rect_BR/S. Ou seja, o codificador calcula a diferença entre a coluna de CTU que inclui a borda direita ou a posição do retângulo de referência e a coluna de CTU que inclui a borda esquerda do bloco atual: xref_rect_BR/S-xo/S. O codificador também calcula a diferença entre a fileira de CTU que inclui a borda de topo do bloco atual e a fileira de CTU que inclui a borda de fundo ou a posição do retângulo de referência: yo/S-yref_rect_BR/S. O codificador verifica que a primeira diferença (entre colunas de CTU) é menor ou igual à segunda diferença (entre fileiras de CTU).
[000220] Quinta restrição. Para a quinta restrição, o codificador verifica que K+ lengthstring< = Wblock*hblock. Ou seja, o codificador verifica que o bloco atual inclui posições suficientes para a coluna atual, considerando a contagem das posições que já foram processadas.
F. ALTERNATIVAS E VARIAÇÕES.
[000221] Em muitos dos exemplos descritos no presente documento, uma previsão intracópia e uma compensação de movimento são implantadas em componentes ou processos separados, e a estimativa de desvio e a estimativa de movimento são implantadas em componentes ou processos separados. Alternativamente, a previsão intracópia pode ser implantada como um caso especial da compensação de movimento, e a estimativa de desvio pode ser implantada como um caso especial da estimativa de movimento, para o qual a imagem atual é usada como uma imagem de referência. Em tais implantações, um valor de desvio pode ser sinalizado como um valor de MV, mas usado para a previsão intracópia (dentro da imagem atual) ao invés da previsão interimagem. Como o termo é usado no presente documento, a “previsão intracópia” indica a previsão dentro de uma imagem atual, se aquela previsão é fornecida com o uso de um módulo de previsão intraimagem, um módulo de compensação de movimento, ou algum outro módulo. De modo similar, um valor de BV ou outro valor de desvio pode ser representado com o uso de um valor de MV ou com o uso de um tipo distinto de parâmetro ou elemento de sintaxe, e a estimativa de desvio pode ser fornecida com o uso de um módulo de estimativa intraimagem, módulo de estimativa de movimento ou algum outro módulo.
[000222] Em vista das várias modalidades possíveis para as quais os princípios da invenção revelada podem ser aplicados, deve ser reconhecido que as modalidades ilustradas são apenas exemplos preferidos da invenção e não devem ser consideradas limitantes do escopo da invenção. Ao invés disso, o escopo da invenção é definido pelas reivindicações a seguir. Reivindicamos, portanto, como nossa invenção tudo que está dentro do escopo e espírito dessas reivindicações.

Claims (9)

1. Método implementado por computador (1900), caracterizado pelo fato de que compreende as etapas de: codificar (1910) uma imagem (1310, 1810) com o processamento paralelo em frente de onda (“WPP”) habilitado, em que a codificação produz dados codificados que incluem, para um modo intracópia, impor uma ou mais restrições atribuíveis consistentes com o WPP, uma ou mais restrições incluindo uma restrição de que um valor de desvio horizontal de uma região de referência (1350) para uma região atual (1330, 1830) é menor ou igual a um valor de desvio vertical da região atual (1330, 1830) para a região de referência (1350); e; e emitir (1920) os dados codificados como parte de um fluxo de dados.
2. Método implementado por computador (2000), de acordo com a reivindicação 1, caracterizado pelo fato de que: receber (2010) dados codificados como parte de um fluxo de dados, em que os dados codificados satisfazem, para o modo intracópia, uma ou mais restrições consistentes com processamento paralelo de frente de onda, WPP, uma ou mais restrições que inclui uma restrição de que um valor de desvio horizontal de uma região de referência (1350) para uma região atual (1330, 1830) é menor ou igual a um valor de desvio vertical da região atual (1330, 1830) para a região de referência (1350); e decodificar (2020) os dados codificados com o WPP habilitado, em que a decodificação reconstrói uma imagem (1310, 1810).
3. Método (1900, 2000), de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que: o valor de desvio horizontal mede uma diferença de uma unidades de árvore de codificação, coluna de WPP que inclui uma borda direita da região de referência (1350) até uma coluna de WPP que inclui uma borda esquerda da região atual (1330, 1830); e o valor de desvio vertical mede uma diferença de uma fileira de WPP que inclui uma borda de topo da região atual(1330, 1830) até uma fileira de WPP que inclui uma borda de fundo da região de referência (1350).
4. Método (1900, 2000), de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que o modo intracópia é um modo que usa a previsão de cópia intra-bloco, em que a região atual (1330, 1830) é um bloco atual em uma unidade de árvore de codificação, CTU, e em que a codificação inclui: calcular o valor de desvio horizontal como (x0 + BVx + wblock- 1)/S - x0/S1 onde x0 é uma posição horizontal do bloco atual, CTU, BVx é um componente horizontal de um vetor para a previsão de cópia intrabloco, WbIock é largura do bloco atual, e S indica o tamanho da CTU; e calcular o valor de desvio vertical como y0/S - (y0 + BVy + hblock -1)/S, onde y0 é uma posição vertical do bloco atual, BVy é um componente vertical do vetor para a previsão de cópia intra-bloco e hblock é altura do bloco atual.
5. Método (1900, 2000), de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que, para o modo intracópia, outras restrições incluem: (1) uma posição de topo à esquerda da região atual (1330, 1830) e uma posição de topo à esquerda da região de referência (1350) estarem na mesma fatia, caso aplicável, e na mesma peça, caso aplicável; (2) a posição de topo à esquerda da região atual (1330, 1830) e uma posição de fundo à direita da região de referência (1350) estarem na mesma fatia, caso aplicável, e na mesma peça, caso aplicável; e (3) uma das três condições a seguir ser satisfeita: (a) uma fileira de unidade de árvore de codificação (“CTU”) que inclui uma borda de fundo da região de referência (1350) está acima de uma fileira de CTU que inclui uma borda de topo da região atual (1330, 1830); (b) se a fileira de CTU que inclui a borda de fundo da região de referência (1350) é igual à fileira de CTU que inclui a borda de topo da região atual (1330, 1830), então uma coluna de CTU que inclui a borda direita da região de referência (1350) está à esquerda de uma coluna de CTU que inclui uma borda esquerda da região atual (1330, 1830); e (c) se a fileira de CTU que inclui a borda de fundo da região de referência (1350) é igual à fileira de CTU que inclui a borda de topo da região atual (1330, 1830), e se a coluna de CTU que inclui a borda direita da região de referência (1350) é igual à coluna de CTU que inclui a borda esquerda da região atual (1330, 1830), então a posição de fundo à direita da região de referência (1350) está mais antecipada na ordem de varredura z do que a posição de topo à esquerda da região atual (1330, 1830).
6. Método (1900, 2000), de acordo com qualquer reivindicação anterior, caracterizado pelo fato de que o modo de intracópia é um modo que usa uma previsão de cópia de intrabloco, a região atual (1330, 1830) é um bloco atual (1330, 1830) e a região de referência (1350) é um bloco de referência (1350).
7. Método (1900, 2000), de acordo com a reivindicação 6, caracterizado pelo fato de que, para o bloco atual (1330, 1830) na imagem, um valor de desvio indica um deslocamento para o bloco de referência (1350) na imagem, o bloco de referência (1350) incluindo valores de amostra previamente reconstruídos.
8. Mídia legível por computador (120, 125, 140) caracterizada pelo fato de que armazenar o método (1900, 2000), de acordo com qualquer uma das reivindicações 1 a 7.
9. Sistema de computação (100), caracterizado pelo fato de que está configurado para executar o método (1900, 2000), de acordo com qualquer uma das reivindicações 1 a 7.
BR112017004041-7A 2014-09-30 Método implementado por computador, mídia legível por computador e sistema de computação BR112017004041B1 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/087885 WO2016049839A1 (en) 2014-09-30 2014-09-30 Rules for intra-picture prediction modes when wavefront parallel processing is enabled

Publications (2)

Publication Number Publication Date
BR112017004041A2 BR112017004041A2 (pt) 2017-12-05
BR112017004041B1 true BR112017004041B1 (pt) 2023-06-27

Family

ID=

Similar Documents

Publication Publication Date Title
US11758162B2 (en) Rules for intra-picture prediction modes when wavefront parallel processing is enabled
US20230038995A1 (en) Encoder-side search ranges having horizontal bias or vertical bias
US10368091B2 (en) Block flipping and skip mode in intra block copy prediction
US10469863B2 (en) Block vector prediction in video and image coding/decoding
US20160277761A1 (en) Encoder-side decisions for block flipping and skip mode in intra block copy prediction
BR112017004490B1 (pt) Método para a construção de uma tabela de hash para correspondência de bloco baseada em hash, dispositivo de computação e meio de armazenamento legível por computador
BR122022001594B1 (pt) Sistema de computador e meio legível por computador não transitório
KR20160075705A (ko) 비디오 및 이미지 코딩에서의 해시 기반 블록 매칭
BR112016021529B1 (pt) Dispositivo de computação, método e meio legível por computador para ajuste de quantização/escalada e quantização/escalada inversa ao alternar áreas de cor
KR20160075709A (ko) 비디오 및 이미지 코딩 및 디코딩에서의 해시 값을 갖는 블록의 표현
JP6793778B2 (ja) 波面並列処理が可能にされた場合のピクチャ内予測モードに関する規則
BR112017004041B1 (pt) Método implementado por computador, mídia legível por computador e sistema de computação
BR122022001703B1 (pt) Método, sistema de computador, mídia legível por computador
JP2018088715A (ja) イントラブロックコピー予測におけるブロック反転及びスキップモード