BR122024004671A2 - Codificador de vídeo, decodificador de vídeo e métodos correspondentes - Google Patents
Codificador de vídeo, decodificador de vídeo e métodos correspondentes Download PDFInfo
- Publication number
- BR122024004671A2 BR122024004671A2 BR122024004671-7A BR122024004671A BR122024004671A2 BR 122024004671 A2 BR122024004671 A2 BR 122024004671A2 BR 122024004671 A BR122024004671 A BR 122024004671A BR 122024004671 A2 BR122024004671 A2 BR 122024004671A2
- Authority
- BR
- Brazil
- Prior art keywords
- subpicture
- picture
- subpictures
- sub
- bit stream
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 118
- 238000000638 solvent extraction Methods 0.000 claims description 45
- 238000012545 processing Methods 0.000 claims description 29
- 238000001914 filtration Methods 0.000 claims description 27
- 238000005192 partition Methods 0.000 claims description 17
- 238000004458 analytical method Methods 0.000 claims description 14
- 230000005540 biological transmission Effects 0.000 claims description 12
- 230000007246 mechanism Effects 0.000 abstract description 16
- 230000033001 locomotion Effects 0.000 description 110
- 241000023320 Luma <angiosperm> Species 0.000 description 69
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical group COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 69
- 230000008569 process Effects 0.000 description 35
- 239000013598 vector Substances 0.000 description 32
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 31
- 238000013139 quantization Methods 0.000 description 26
- 238000000605 extraction Methods 0.000 description 22
- 230000002123 temporal effect Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 18
- 230000011664 signaling Effects 0.000 description 18
- 238000007906 compression Methods 0.000 description 15
- 230000006835 compression Effects 0.000 description 14
- 238000004891 communication Methods 0.000 description 11
- 230000003044 adaptive effect Effects 0.000 description 9
- 230000002829 reductive effect Effects 0.000 description 9
- 238000009795 derivation Methods 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 230000003247 decreasing effect Effects 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 4
- 230000004927 fusion Effects 0.000 description 4
- 238000011144 upstream manufacturing Methods 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 239000010410 layer Substances 0.000 description 3
- 230000001629 suppression Effects 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000000153 supplemental effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 235000019580 granularity Nutrition 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000035807 sensation Effects 0.000 description 1
- 235000019615 sensations Nutrition 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 108010004034 stable plasma protein solution Proteins 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Abstract
Um mecanismo de codificação de vídeo é revelado. O mecanismo inclui receber um fluxo de bits que compreende uma pluralidade de subimagens particionadas a partir de uma imagem tal que uma união das subimagens cubra uma área total da imagem sem sobreposição. O fluxo de bits é analisado para obter a uma ou mais subimagens. A uma ou mais subimagens são decodificadas para criar uma sequência de vídeo. A sequência de vídeo é encaminhada para exibição.
Description
[0001] A presente revelação refere-se, de modo geral, a codificação de vídeo e, de modo específico, a gerenciamento de subimagem em codificação de vídeo.
[0002] A quantidade de dados de vídeo necessária para representar até mesmo um vídeo relativamente curto pode ser substancial, que pode resultar em dificuldades quando os dados precisam ser transmitidos ou comunicados de outro modo através de uma rede de comunicações com capacidade de largura de banda limitada. Desse modo, os dados de vídeo são, de modo geral, comprimidos antes de serem comunicados através de redes de telecomunicações atuais. O tamanho de um vídeo também pode ser uma questão quando o vídeo é armazenado em um dispositivo de armazenamento, visto que os recursos de memória podem ser limitados. Os dispositivos de compressão de vídeo normalmente usam software e/ou hardware na origem para codificar os dados de vídeo antes de transmissão ou armazenamento, diminuindo, desse modo, a quantidade de dados necessária para representar imagens de vídeo digitais. Os dados comprimidos são, então, recebidos no destino por um dispositivo de descompressão de vídeo que decodifica os dados de vídeo. Com recursos de rede limitados e demandas crescentes por maior qualidade de vídeo, as técnicas de compressão e descompressão aperfeiçoadas que aperfeiçoam a razão de compressão com pouco ou nenhum comprometimento na qualidade de imagem são desejáveis.
[0003] Em uma modalidade, a revelação inclui um método implementado em um decodificador, o método compreende: receber, por um receptor do decodificador, um fluxo de bits que compreende uma pluralidade de subimagens particionadas a partir de uma imagem tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; analisar, por um processador do decodificador, o fluxo de bits para obter a uma ou mais subimagens; decodificar, pelo processador, a uma ou mais subimagens para criar uma sequência de vídeo; e encaminhar, pelo processador, a sequência de vídeo para exibição. Alguns sistemas de codificação de vídeo permitem que esquemas de particionamento de subimagem incluam gaps e sobreposições. Isso cria o potencial para que grupos de tiles/fatias sejam associados a múltiplas subimagens. Se isso for permitido no codificador, decodificadores precisam ser construídos para suportar tal esquema de codificação até mesmo quando o esquema de decodificação for raramente usado. Os exemplos revelados restringem subimagens para cobrir uma imagem sem gap ou sobreposição. Proibindo-se gaps e sobreposições de subimagem, a complexidade do decodificador pode ser diminuída visto que não é exigido que o decodificador seja responsável por potenciais gaps e sobreposições ao determinar tamanhos e localizações de subimagem. Além disso, proibindo-se gaps e sobreposições de subimagem reduz a complexidade de processos de otimização de taxa distorção (RDO) no codificador visto que codificador pode omitir consideração de casos de gap e sobreposição ao selecionar uma codificação para uma sequência de vídeo. Assim, evitar gaps e sobreposições pode reduzir o uso de recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0004] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que a união das subimagens cobre adicionalmente a área total da imagem sem gap.
[0005] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que cada subimagem inclui uma largura de subimagem que é um número inteiro múltiplo de um tamanho de unidade de árvore de codificação (CTU) quando a cada subimagem incluir uma borda direita que não coincide com uma borda direita da imagem.
[0006] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que cada subimagem inclui uma altura de subimagem que é um número inteiro múltiplo do tamanho de CTU quando a cada subimagem incluir uma borda inferior que não coincide com uma borda inferior da imagem.
[0007] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o fluxo de bits compreende adicionalmente um conjunto de parâmetros de sequência (SPS) que compreende um tamanho de subimagem para as subimagens e uma localização de subimagem para cada uma dentre as subimagens.
[0008] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o SPS compreende adicionalmente identificadores (IDs) de subimagem para cada uma dentre as subimagens.
[0009] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o SPS compreende adicionalmente uma indicação de que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
[0010] Em uma modalidade, a revelação inclui um método implementado em um codificador, o método compreende: particionar, por um processador do codificador, uma imagem em uma pluralidade de subimagens tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; codificar, pelo processador, uma ou mais dentre as subimagens em um fluxo de bits; e armazenar, em uma memória do codificador, o fluxo de bits para comunicação em direção a um decodificador. Alguns sistemas de codificação de vídeo permitem que esquemas de particionamento de subimagem incluam gaps e sobreposições. Isso cria o potencial para que grupos de tiles/fatias sejam associados a múltiplas subimagens. Se isso for permitido no codificador, decodificadores precisam ser construídos para suportar tal esquema de codificação até mesmo quando o esquema de decodificação for raramente usado. Os exemplos revelados restringem subimagens para cobrir uma imagem sem gap ou sobreposição. Proibindo-se gaps e sobreposições de subimagem, a complexidade do decodificador pode ser diminuída visto que não é exigido que o decodificador seja responsável por potenciais gaps e sobreposições ao determinar tamanhos e localizações de subimagem. Além disso, proibindo-se gaps e sobreposições de subimagem reduz a complexidade de processos de otimização de taxa distorção (RDO) no codificador visto que codificador pode omitir consideração de casos de gap e sobreposição ao selecionar uma codificação para uma sequência de vídeo. Assim, evitar gaps e sobreposições pode reduzir o uso de recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0011] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que a união das subimagens cobre adicionalmente a área total da imagem sem gap.
[0012] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que cada subimagem inclui uma largura de subimagem que é um número inteiro múltiplo de um tamanho de CTU quando a cada subimagem incluir uma borda direita que não coincide com uma borda direita da imagem.
[0013] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que cada subimagem inclui uma altura de subimagem que é um número inteiro múltiplo do tamanho de CTU quando a cada subimagem incluir uma borda inferior que não coincide com uma borda inferior da imagem.
[0014] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, que compreende adicionalmente codificar, pelo processador, um SPS no fluxo de bits, o SPS compreendendo um tamanho de subimagem para as subimagens e uma localização de subimagem para cada uma das subimagens.
[0015] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o SPS compreende adicionalmente IDs de subimagem para cada uma das subimagens.
[0016] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o SPS compreende adicionalmente uma indicação de que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
[0017] Em uma modalidade, a revelação inclui um dispositivo de codificação de vídeo que compreende: um processador, uma memória, um receptor acoplado ao processador e um transmissor acoplado ao processador, o processador, a memória, o receptor e o transmissor configurados para realizar o método de qualquer um dos aspectos antecedentes.
[0018] Em uma modalidade, a revelação inclui uma mídia legível por computador não transitória que compreende um produto de programa de computador para uso por um dispositivo de codificação de vídeo, o produto de programa de computador compreendendo instruções executáveis por computador armazenadas na mídia legível por computador não transitória tal que, quando executadas por um processador, fazem com que o dispositivo de codificação de vídeo realize o método de qualquer um dos aspectos antecedentes.
[0019] Em uma modalidade, a revelação inclui um decodificador que compreende: um meio de recebimento para receber um fluxo de bits que compreende uma pluralidade de subimagens particionadas a partir de uma imagem tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; um meio de análise para analisar o fluxo de bits para obter a uma ou mais subimagens; um meio de decodificação para decodificar a uma ou mais subimagens para criar uma sequência de vídeo; e um meio de encaminhamento para encaminhar a sequência de vídeo para exibição.
[0020] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o decodificador é configurado adicionalmente para realizar o método de qualquer um dos aspectos antecedentes.
[0021] Em uma modalidade, a revelação inclui um codificador que compreende: um meio de particionamento para particionar uma imagem em uma pluralidade de subimagens tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; um meio de codificação para codificar uma ou mais dentre as subimagens em um fluxo de bits; e um meio de armazenamento para armazenar o fluxo de bits para comunicação em direção a um decodificador.
[0022] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o codificador é adicionalmente configurado para realizar o método de qualquer um dos aspectos antecedentes.
[0023] Para fins de clareza, qualquer uma dentre as modalidades antecedentes pode ser combinada com qualquer uma ou mais dentre as outras modalidades antecedentes para criar uma nova modalidade dentro do escopo da presente revelação.
[0024] Esses e outros atributos serão mais claramente entendidos a partir da descrição detalhada a seguir obtida em conjunto com os desenhos anexos e reivindicações.
[0025] Para um entendimento mais completo desta revelação, referência é feita à breve descrição a seguir, obtida em conjunto com os desenhos anexos e descrição detalhada, em que referências numéricas similares representam partes similares.
[0026] A Figura 1 é um fluxograma de um método exemplificativo de codificação de um sinal de vídeo.
[0027] A Figura 2 é um diagrama esquemático de um sistema de codificação e decodificação (codec) exemplificativo para codificação de vídeo.
[0028] A Figura 3 é um diagrama esquemático que ilustra um codificador de vídeo exemplificativo.
[0029] A Figura 4 é um diagrama esquemático que ilustra um decodificador de vídeo exemplificativo.
[0030] A Figura 5 é um diagrama esquemático que ilustra um fluxo de bits exemplificativo e subfluxo de bits extraído do fluxo de bits.
[0031] A Figura 6 é um diagrama esquemático que ilustra uma imagem exemplificativa particionada em subimagens.
[0032] A Figura 7 é um diagrama esquemático que ilustra um mecanismo exemplificativo para relacionar fatias a um layout de subimagem.
[0033] A Figura 8 é um diagrama esquemático que ilustra outra imagem exemplificativa particionada em subimagens.
[0034] A Figura 9 é um diagrama esquemático de um dispositivo de codificação de vídeo exemplificativo.
[0035] A Figura 10 é um fluxograma de um método exemplificativo de codificação de um fluxo de bits de subimagens com restrições de posição.
[0036] A Figura 11 é um fluxograma de um método exemplificativo de decodificação de um fluxo de bits de subimagens com restrições de posição.
[0037] A Figura 12 é um diagrama esquemático de um sistema exemplificativo para sinalização de um fluxo de bits de subimagens com restrições de posição.
[0038] Deve-se entender inicialmente que, embora uma implementação ilustrativa de uma ou mais modalidades seja fornecida abaixo, os sistemas e/ou métodos revelados podem ser implementados com o uso de qualquer número de técnicas, sejam atualmente conhecidas ou em existência. A revelação não deve, de modo algum, ser limitada às implementações ilustrativas, desenhos e técnicas ilustrados abaixo, incluindo os projetos e implementações exemplificativos ilustrados e descritos no presente documento, mas pode ser modificada dentro do escopo das reivindicações anexas em conjunto com seu escopo inteiro de equivalentes.
[0039] Vários acrônimos são empregados na presente invenção, tais como bloco de árvore de codificação (CTB), unidade de árvore de codificação (CTU), unidade de codificação (CU), sequência de vídeo codificada (CVS), Equipe de Especialistas em Vídeo Conjunta (JVET), conjunto de tiles com restrição de movimento (MCTS), unidade de transferência máxima (MTU), camada de abstração de rede (NAL), contagem de ordem de imagem (POC), carga útil de sequência de byte bruto (RBSP), conjunto de parâmetros de sequência (SPS), codificação de vídeo versátil (VVC) e projeto de trabalho (WD).
[0040] Muitas técnicas de compressão de vídeo podem ser empregadas para reduzir o tamanho de arquivos de vídeo com perda mínima de dados. Por exemplo, as técnicas de compressão de vídeo podem incluir realizar predição espacial (por exemplo, imagem intra) e/ou predição temporal (por exemplo, imagem inter) para reduzir ou remover redundância de dados em sequências de vídeo. Para codificação de vídeo com base em bloco, uma fatia de vídeo (por exemplo, uma imagem de vídeo ou uma porção de uma imagem de vídeo) pode ser particionada em blocos de vídeo, que também podem ser denominados blocos de árvore, blocos de árvore de codificação (CTBs), unidades de árvore de codificação (CTUs), unidades de codificação (CUs) e/ou nós de codificação. Os blocos de vídeo em uma fatia codificada de modo intra (I) de uma imagem são codificados com o uso de predição espacial em relação a amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia de predição unidirecional (P) ou predição bidirecional (B) codificada de modo inter de uma imagem podem ser codificados empregando-se predição espacial em relação a amostras de referência em blocos vizinhos na mesma imagem ou predição temporal em relação a amostras de referência em outras imagens de referência. As imagens podem ser denominadas quadros e/ou figuras, e imagens de referência podem ser denominadas quadros de referência e/ou imagens de referência. A predição espacial ou temporal resulta em um bloco preditivo que representa um bloco de imagem. Os dados residuais representam diferenças de pixel entre o bloco de imagem original e o bloco preditivo. Assim, um bloco codificado de modo inter é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência que formam o bloco preditivo, e os dados residuais indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco codificado de modo intra é codificado de acordo com um modo de codificação intra e os dados residuais. Para compressão adicional, os dados residuais podem ser transformados do domínio de pixel para um domínio de transformada. Isso resulta em coeficientes de transformada residuais, que podem ser quantizados. Os coeficientes de transformada quantizados podem ser inicialmente dispostos em um arranjo bidimensional. Os coeficientes de transformada quantizados podem ser submetidos à varredura a fim de produzir um vetor unidimensional de coeficientes de transformada. A codificação de entropia pode ser aplicada para alcançar ainda mais compressão. Tais técnicas de compressão de vídeo são discutidas e mais detalhes abaixo.
[0041] Para garantir que um vídeo codificado possa ser decodificado de maneira acurada, o vídeo é codificado e decodificado de acordo com padrões de codificação de vídeo correspondentes. Os padrões de codificação de vídeo incluem União Internacional de Telecomunicação (ITU) Setor de Padronização (ITU-T) H.261, Organização Internacional para Padronização/Comissão Eletrotécnica Internacional (ISO/IEC) Grupo de Especialistas de Imagem em Movimento (MPEG)-1 Parte 2, ITU-T H.262 ou ISO/IEC MPEG-2 Parte 2, ITU-T H.263, ISO/IEC MPEG-4 Parte 2, Codificação de Vídeo Avançada (AVC), também conhecida como ITU-T H.264 ou ISO/IEC MPEG-4 Parte 10 e Codificação de Vídeo de Alta Eficiência (HEVC), também conhecida como ITU-T H.265 ou MPEG- H Parte 2. AVC inclui extensões, tais como Codificação de Vídeo Escalável (SVC), Codificação de Vídeo Multivista (MVC) e Codificação de Vídeo Multivista mais Profundidade (MVC+D), e AVC tridimensional (3D) (3D-AVC). HEVC inclui extensões, tais como HEVC Escalável (SHVC), HEVC Multivista (MV-HEVC) e 3D HEVC (3D-HEVC). A equipe de especialistas em vídeo conjunta (JVET) de ITU-T e ISO/IEC deu início ao desenvolvimento de um padrão de codificação de vídeo denominado Codificação de Vídeo Versátil (VVC). A VVC está incluída em um Projeto de Trabalho (WD), que inclui JVET-L1001-v9.
[0042] A fim de codificar uma imagem de vídeo, a imagem é primeiro particionada, e as partições são codificadas em um fluxo de bits. Vários esquemas de particionamento de imagem estão disponíveis. Por exemplo, uma imagem pode ser particionada em fatias regulares, fatias dependentes, tiles e/ou de acordo com Processamento Paralelo de Wavefront (WPP). Por questão de simplicidade, HEVC restringe codificadores de modo que apenas fatias regulares, fatias dependentes, tiles, WPP e combinações dos mesmos possam ser usados ao particionar uma fatia em grupos de CTBs para codificação de vídeo. Tal particionamento pode ser aplicado para suportar compatibilidade de tamanho de Unidade de Transferência Máxima (MTU), processamento paralelo e retardo fim a fim reduzido. MTU denota a quantidade máxima de dados que pode ser transmitida em um único pacote. Se uma carga útil de pacote estiver em excesso da MTU, essa carga útil é repartida em dois pacotes através de um processo denominado fragmentação.
[0043] Uma fatia regular, também denominada simplesmente uma fatia, é uma porção particionada de uma imagem que pode ser reconstruída independentemente de outras fatias regulares dentro da mesma imagem, a despeito de algumas interdependências devido a operações de filtragem loop. Cada fatia regular é encapsulada em sua própria unidade de Camada de Abstração de Rede (NAL) para transmissão. Além disso, predição em imagem (predição de amostra intra, predição de informações de movimento, predição de modo de codificação) e dependência de codificação de entropia através de delimitações de fatia podem ser desabilitadas para suportar reconstrução independente. Tal reconstrução independente suporta paralelização. Por exemplo, paralelização com base em fatia regular emprega comunicação mínima interprocessador ou internúcleo. Entretanto, visto que cada fatia regular é independente, cada fatia é associada a um cabeçalho de fatia separado. O uso de fatias regulares pode incorrer uma sobrecarga de codificação substancial devido ao custo de bit do cabeçalho de fatia para cada fatia e devido à falta de predição através das delimitações de fatia. Além disso, fatias regulares podem ser empregadas para suportar compatibilidade para exigências de tamanho de MTU. Especificamente, visto que uma fatia regular é encapsulada em uma unidade de NAL separada e pode ser codificada de maneira independente, cada fatia regular deve ser menor do que a MTU em esquemas de MTU para evitar rompimento da fatia em múltiplos pacotes. Como tal, o objetivo de paralelização e o objetivo de compatibilidade de tamanho de MTU podem colocar demandas contraditórias a um layout de fatia em uma imagem.
[0044] As fatias dependentes são similares a fatias regulares, mas têm cabeçalhos de fatia menores e permitem o particionamento das delimitações de bloco de árvore de imagem sem romper a predição em imagem. Assim, as fatias dependentes permitem que uma fatia regular seja fragmentada em múltiplas unidades de NAL, que fornece retardo fim a fim reduzido permitindo-se que uma parte de uma fatia regular seja enviada antes de a codificação de toda a fatia regular ser concluída.
[0045] Um tile é uma porção particionada de uma imagem criada por delimitações horizontais e verticais que criam colunas e linhas de tiles. Os tiles podem ser codificados em ordem de varredura raster (da direita para a esquerda e do topo para baixo). A ordem de varredura de CTBs é local dentro de um tile. Assim, CTBs em um primeiro tile são codificados em ordem de varredura raster, antes de prosseguir para os CTBs no próximo tile. De modo similar a fatias regulares, tiles rompem dependências de predição em imagem bem como dependências de decodificação de entropia. Entretanto, tiles podem não estar incluídos em unidades de NAL individuais e, portanto, tiles podem não ser usados para compatibilidade de tamanho de MTU. Cada tile pode ser processado por um processador/núcleo, e a comunicação interprocessador/internúcleo empregada para predição em imagem entre unidades de processamento que decodificam tiles vizinhos pode ser limitada a transportar um cabeçalho de fatia compartilhado (quando tiles adjacentes estão na mesma fatia), e realizar compartilhamento relacionado à filtragem loop de amostras reconstruídas e metadados. Quando mais de um tile está incluído em uma fatia, o deslocamento de byte de ponto de entrada para cada tile diferente do primeiro deslocamento de ponto de entrada na fatia pode ser sinalizado no cabeçalho de fatia. Para cada fatia e tile, pelo menos uma dentre as seguintes condições deve ser satisfeita: 1) todos os blocos de árvore codificados em uma fatia pertencem ao mesmo tile; e 2) todos os blocos de árvore codificados em um tile pertencem à mesma fatia.
[0046] Em WPP, a imagem é particionada em únicas linhas de CTBs. Os mecanismos de decodificação de entropia e predição podem usar dados de CTBs em outras linhas. O processamento paralelo se torna possível através de decodificação paralela de linhas de CTB. Por exemplo, uma linha atual pode ser decodificada em paralelo com uma linha antecedente. Entretanto, a decodificação da linha atual é atrasada em relação ao processo de decodificação das linhas antecedentes por dois CTBs. Esse retardo garante que dados relacionados ao CTB acima e o CTB acima e à direita do CTB atual na linha atual estejam disponíveis antes de o CTB atual ser codificado. Essa abordagem aparece como um wavefront quando representada graficamente. Esse início progressivo permite paralelização com até uma quantidade de processadores/núcleos igual à quantidade de linhas de CTB da imagem. Visto que predição em imagem entre linhas de bloco de árvore vizinhas dentro de uma imagem é permitida, a comunicação interprocessador/internúcleo para possibilitar predição em imagem pode ser substancial. O particionamento de acordo com WPP considera tamanhos de unidade de NAL. Portanto, WPP não suporta compatibilidade de tamanho de MTU. Entretanto, fatias regulares podem ser usadas em conjunto com WPP, com certa sobrecarga de codificação, para implementar compatibilidade de tamanho de MTU conforme desejado.
[0047] Tiles também podem incluir conjuntos de tiles com restrição de movimento. Um conjunto de tiles com restrição de movimento (MCTS) é um conjunto de tiles projetado tal que vetores de movimento associados sejam restritos para apontar para localizações de amostra inteira dentro do MCTS e para localizações de amostra fracionada que exigem apenas localizações de amostra inteira dentro do MCTS para interpolação. Além disso, o uso de candidatos de vetor de movimento para predição de vetor de movimento temporal derivada de blocos fora do MCTS é proibido. Desse modo, cada MCTS pode ser decodificado de maneira independente sem a existência de tiles não incluídos no MCTS. As mensagens de informações de aprimoramento suplementares (SEI) de MCTSs temporal podem ser usadas para indicar a existência de MCTSs no fluxo de bits e sinalizar os MCTSs. A mensagem de MCTSs SEI fornece informações suplementares que podem ser usadas na extração de subfluxo de bits de MCTS (especificada como parte da semântica da mensagem de SEI) para gerar um fluxo de bits em conformidade para um conjunto de MCTS. As informações incluem um número de conjuntos de informações de extração, cada um definindo um número de conjuntos de MCTS e contendo bytes de carga útil de sequência de bytes brutos (RBSP) dos conjuntos de parâmetros de vídeo de substituição (VPSs), conjuntos de parâmetros de sequência (SPSs) e conjuntos de parâmetros de imagem (PPSs) a serem usados durante o processo de extração de subfluxo de bits de MCTS. Ao extrair um subfluxo de bits de acordo com o processo de extração de subfluxo de bits de MCTS, conjuntos de parâmetros (VPSs, SPSs e PPSs) podem ser reescritos ou substituídos, e cabeçalhos de fatia podem ser atualizados, visto que um ou todos os elementos de sintaxe relacionados a endereço de fatia (incluindo first_slice_segment_in_pic_flag e slice_segment_address) podem empregar diferentes valores no subfluxo de bits extraído.
[0048] Uma imagem também pode ser particionada em uma ou mais subimagens. Uma subimagem é um conjunto retangular de grupos de tiles/fatias que inicia com um grupo de tiles que tem um tile_group_address igual a zero. Cada subimagem pode se referir a um PPS separado e pode ter, portanto, um particionamento de tile separado. As subimagens podem ser tratadas como imagens no processo de decodificação. As subimagens de referência para decodificar uma subimagem atual são geradas extraindo-se a área, colocalizada com a subimagem atual, das imagens de referência no buffer de imagem decodificada. A área extraída é tratada como uma subimagem decodificada. A predição inter pode ocorrer entre subimagens do mesmo tamanho e da mesma localização dentro da imagem. Um grupo de tiles, também conhecido como uma fatia, é uma sequência de tiles relacionados em uma imagem ou uma subimagem. Diversos itens podem ser derivados para determinar uma localização da subimagem em uma imagem. Por exemplo, cada subimagem atual pode ser posicionada na próxima localização não ocupada em ordem de varredura raster de CTU dentro de uma imagem que é grande o suficiente para conter a subimagem atual dentro das delimitações da imagem.
[0049] De modo adicional, particionamento de imagem pode se basear em tiles de nível de imagem e tiles de nível de sequência. Os tiles de nível de sequência podem incluir a funcionalidade de MCTS, e podem ser implementados como subimagens. Por exemplo, um tile de nível de imagem pode ser definido como uma região retangular de blocos de árvore de codificação dentro de uma coluna de tile particular e uma linha de tile particular em uma imagem. Um tile de nível de sequência pode ser definido como um conjunto de regiões retangulares de blocos árvore de codificação incluídos em diferentes quadros em que cada região retangular compreende adicionalmente um ou mais tiles de nível de imagem e o conjunto de regiões retangulares de blocos de árvore de codificação é independentemente decodificável de qualquer outro conjunto de regiões retangulares similares. Um conjunto de grupo de tiles de nível de sequência (STGPS) é um grupo de tais tiles de nível de sequência. O STGPS pode ser sinalizado em uma unidade NAL de camada de codificação de não vídeo (VCL) com um identificador (ID) associado no cabeçalho de unidade NAL.
[0050] O esquema de particionamento com base em subimagem antecedente pode estar associado a certos problemas. Por exemplo, quando subimagens são habilitadas, tiling dentro de subimagens (particionamento de subimagens em tiles) pode ser usado para suportar processamento paralelo. O particionamento de tile de subimagens para fins de processamento paralelo pode mudar de imagem para imagem (por exemplo, para fins de balanceamento de carga de processamento paralelo) e, portanto, pode ser gerenciado no nível de imagem (por exemplo, no PPS). Entretanto, o particionamento de subimagem (particionamento de imagens em subimagens) pode ser empregado para suportar região de interesse (ROI) e acesso de imagem com base em subimagem. Em tal caso, a sinalização de subimagens ou MCTS no PPS não é eficiente.
[0051] Em outro exemplo, quando qualquer subimagem em uma imagem for codificada como uma subimagem com restrição de movimento temporal, todas as subimagens na imagem podem ser codificadas como subimagens com restrição de movimento temporal. Tal particionamento de imagem pode ser limitante. Por exemplo, a codificação de uma subimagem como uma subimagem com restrição de movimento temporal pode reduzir a eficiência de codificação em troca de funcionalidade adicional. Entretanto, em aplicações com base em região de interesse, normalmente apenas uma ou algumas dentre as subimagens usam funcionalidade com base em subimagem com restrição de movimento temporal. Portanto, as subimagens remanescentes sofrem de eficiência de codificação reduzida sem fornecer qualquer benefício prático.
[0052] Em outro exemplo, os elementos de sintaxe para especificar o tamanho de uma subimagem podem ser especificados em unidades de tamanhos de CTU de luma. Assim, tanto a largura quanto a altura de subimagem devem ser um número inteiro múltiplo de CtbSizeY. Esse mecanismo de especificar largura e altura de subimagem pode resultar em várias questões. Por exemplo, o particionamento de subimagem é apenas aplicável a imagens com largura de imagem e/ou altura de imagem que são um número inteiro múltiplo de CtbSizeY. Isso torna o particionamento de subimagem indisponível para imagens que contêm dimensões que não são número inteiro múltiplos de CTbSizeY. Se o particionamento de subimagem fosse aplicado à largura e/ou altura de de imagem quando a dimensão de imagem não for um número inteiro múltiplo de CtbSizeY, a derivação de largura de subimagem e/ou altura de subimagem em amostras de luma para a subimagem mais à direita e subimagem mais abaixo seria incorreta. Tal derivação incorreta causaria resultados errôneos em algumas ferramentas de codificação.
[0053] Em outro exemplo, a localização de uma subimagem em uma imagem pode não ser sinalizada. A localização, em vez disso, é derivada usando a regra a seguir. A subimagem atual é posicionada na próxima localização não ocupada em ordem de varredura raster de CTU dentro de uma imagem que é grande o suficiente para conter a subimagem dentro das delimitações de imagem. A derivação de localizações de subimagem de tal modo pode causar erros em alguns casos. Por exemplo, se uma subimagem se perder na transmissão, então, as localizações de outras subimagens são derivadas de maneira incorreta e as amostras decodificadas são colocadas em localizações errôneas. O mesmo problema se aplica quando as subimagens chegam na ordem errada.
[0054] Em outro exemplo, a decodificação de uma subimagem pode exigir extração de subimagens colocalizadas em imagens de referência. Isso pode impor complexidade adicional e custos resultantes em termos de uso de recurso de processador e memória.
[0055] Em outro exemplo, quando uma subimagem é designada como uma subimagem com restrição de movimento temporal, filtros loop que atravessam a delimitação de subimagem são desabilitados. Isso ocorre independentemente de filtros loop que atravessam delimitações de tile serem habilitados. Tal restrição pode ser muito restritiva e pode resultar em artefatos visuais para imagens de vídeo que empregam múltiplo de subimagens.
[0056] Em outro exemplo, a relação entre o SPS, STGPS, PPS e cabeçalhos de grupo de tiles é da maneira a seguir. O STGPS se refere ao SPS, o PPS se refere ao STGPS e os cabeçalhos de grupo de tiles/cabeçalhos de fatia se referem ao PPS. Entretanto, o STGPS e o PPS devem ser ortogonais em vez do PPS se referindo ao STGPS. A disposição precedente também pode proibir que todos os grupos de tiles da mesma imagem se refiram ao mesmo PPS.
[0057] Em outro exemplo, cada STGPS pode conter IDs para quatro lados de uma subimagem. Tais IDs são usados para identificar subimagens que compartilham a mesma borda de modo que sua relação espacial relativa possa ser definida. Entretanto, tais informações podem não ser suficientes para derivar as informações de posição e tamanho para um conjunto de grupo de tile de nível de sequência em alguns casos. Em outros casos, a sinalização das informações de posição e tamanho pode ser redundante.
[0058] Em outro exemplo, um STGPS ID pode ser sinalizado em um cabeçalho de unidade NAL de uma unidade VCL NAL usando oito bits. Isso pode auxiliar com extração de subimagem. Tal sinalização pode aumentar, desnecessariamente, o comprimento do cabeçalho de unidade NAL. Outra questão é que, a menos que os conjuntos de grupo de tiles de nível de sequência sejam restritos para evitar sobreposições, um grupo de tiles pode ser associado a múltiplos conjuntos de grupo de tiles de nível de sequência.
[0059] São revelados na presente invenção vários mecanismos para abordar um ou mais dentre os problemas mencionados acima. Em um primeiro exemplo, as informações de layout para subimagens são incluídas em um SPS em vez de um PPS. As informações de layout de subimagem incluem localização de subimagem e tamanho de subimagem. A localização de subimagem é um deslocamento entre a amostra superior esquerda da subimagem e a amostra superior esquerda da imagem. O tamanho de subimagem é a altura e largura da subimagem, conforme medido em amostras de luma. Conforme observado acima, alguns sistemas incluem informações de tiling no PPS visto que tiles podem mudar de imagem para imagem. Entretanto, as subimagens podem ser usadas para suportar aplicações de ROI e acesso com base em subimagem. Essas funções não mudam em uma base por imagem. Além disso, uma sequência de vídeo pode incluir um único SPS (ou um por segmento de vídeo), e pode incluir tantos quanto um PPS por imagem. A colocação de informações de layout para subimagens no SPS garante que o layout seja apenas sinalizado uma vez para uma sequência/segmento em vez de ser sinalizado de maneira redundante para cada PPS. Assim, a sinalização de layout de subimagem no SPS aumenta a eficiência de codificação e, portanto, reduz o uso de recursos de rede, recursos de memória e/ou recursos de processamento no codificador e no decodificador. Além disso, alguns sistemas têm as informações de subimagem derivadas pelo decodificador. A sinalização das informações de subimagem reduz a possibilidade de erro em caso de pacotes perdidos e suporta funcionalidade adicional em termos de extração de subimagens. Assim, a sinalização de layout de subimagem no SPS aperfeiçoa a funcionalidade de um codificador e/ou decodificador.
[0060] Em um segundo exemplo, larguras de subimagem e alturas de subimagem são restritas para ser múltiplos de tamanho de CTU. Entretanto, essas restrições são removidas quando uma subimagem é posicionada na borda direita da imagem ou na borda inferior da imagem, respectivamente. Conforme observado acima, alguns sistemas de vídeo podem limitar subimagens para incluir alturas e larguras que são múltiplos de tamanho de CTU. Isso impede que subimagens operem corretamente com muitos layouts de imagem. Permitindo-se que as subimagens inferior e direita incluam alturas e larguras, respectivamente, que não são múltiplos de tamanho de CTU, as subimagens podem ser usadas com qualquer imagem sem causar erros de decodificação. Isso resulta em funcionalidade crescente de codificador e decodificador. Além disso, a funcionalidade aumentada permite que um codificador codifique imagens de modo mais eficiente, que reduz o uso de recursos de rede, recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0061] Em um terceiro exemplo, as subimagens são restritas para cobrir uma imagem sem gap ou sobreposição. Conforme observado acima, alguns sistemas de codificação de vídeo permitem que subimagens incluam gaps e sobreposições. Isso cria o potencial para que grupos de tiles/fatias sejam associados a múltiplas subimagens. Se isso for permitido no codificador, decodificadores precisam ser construídos para suportar tal esquema de codificação até mesmo quando o esquema de decodificação for raramente usado. Proibindo-se gaps e sobreposições de subimagem, a complexidade do decodificador pode ser diminuída visto que não é exigido que o decodificador seja responsável por potenciais gaps e sobreposições ao determinar tamanhos e localizações de subimagem. Além disso, proibindo-se gaps e sobreposições de subimagem reduz a complexidade de processos de otimização de taxa distorção (RDO) no codificador visto que o codificador pode omitir consideração de casos de gap e sobreposição ao selecionar uma codificação para uma sequência de vídeo. Assim, evitar gaps e sobreposições pode reduzir o uso de recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0062] Em um quarto exemplo, uma flag pode ser sinalizada no SPS para indicar quando uma subimagem for uma subimagem com restrição de movimento temporal. Conforme observado acima, alguns sistemas podem definir, coletivamente, todas as subimagens como subimagens com restrição de movimento temporal ou proibir completamente o uso de subimagens com restrição de movimento temporal. Tais subimagens com restrição de movimento temporal fornecem funcionalidade de extração independente ao custo de eficiência de codificação diminuída. Entretanto, em aplicações com base em região de interesse, a região de interesse deve ser codificada para extração independente enquanto as regiões fora da região de interesse não necessitam de tal funcionalidade. Portanto, as subimagens remanescentes sofrem de eficiência de codificação reduzida sem fornecer qualquer benefício prático. Assim, a flag permite uma mistura de subimagens com restrição de movimento temporal que fornece funcionalidade de extração independente e subimagens de movimento não restrito para eficiência de codificação aumentada quando extração independente não é desejada. Portanto, a flag permite funcionalidade aumentada e/ou eficiência de codificação aumentada, que reduz o uso de recursos de rede, recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0063] Em um quinto exemplo, um conjunto completo de IDs de subimagem é sinalizado no SPS, e cabeçalhos de fatia incluem um ID de subimagem que indica a subimagem que contém as fatias correspondentes. Conforme observado acima, alguns sistemas sinalizam posições de subimagem em relação a outras subimagens. Isso causa um problema se subimagens estiverem perdidas ou forem extraídas de maneira separada. Designando-se cada subimagem por um ID, as subimagens podem ser posicionadas e dimensionadas sem referência a outras subimagens. Isso, por sua vez, suporta correção de erro bem como aplicações que extraem apenas algumas dentre as subimagens e evitam a transmissão de outras subimagens. Uma lista completa de todos os IDs de subimagem pode ser enviada no SPS em conjunto com informações de dimensionamento relevantes. Cada cabeçalho de fatia pode conter um ID de subimagem que indica a subimagem que inclui a fatia correspondente. Desse modo, subimagens e fatias correspondentes podem ser extraídas e posicionadas sem referência a outras subimagens. Portanto, os IDs de subimagem suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, que reduz o uso de recursos de rede, recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0064] Em um sexto exemplo, níveis são sinalizados para cada subimagem. Em alguns sistemas de codificação de vídeo, níveis são sinalizados para imagens. Um nível indica recursos de hardware necessários para decodificar a imagem. Conforme observado acima, diferentes subimagens podem ter diferentes funcionalidades em alguns casos e, portanto, podem ser tratadas de maneira diferente durante o processo de codificação. Como tal, um nível com base em imagem pode não ser útil para decodificar algumas subimagens. Portanto, a presente revelação inclui níveis para cada subimagem. Desse modo, cada subimagem pode ser codificada independentemente de outras subimagens sem sobrecarregar de maneira desnecessária o decodificador definindo-se exigências de decodificação muito altas para subimagens codificadas de acordo com mecanismos menos complexos. As informações de nível de subimagem sinalizadas suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, que reduz o uso de recursos de rede, recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0065] A Figura 1 é um fluxograma de um método operacional exemplificativo 100 de codificação de um sinal de vídeo. Especificamente, um sinal de vídeo é codificado em um codificador. O processo de codificação comprime o sinal de vídeo empregando-se vários mecanismos para reduzir o tamanho de arquivo de vídeo. Um tamanho de arquivo menor permite que o arquivo de vídeo comprimido seja transmitido em direção a um usuário, enquanto reduz sobrecarga de largura de banda associada. O decodificador decodifica, então, o arquivo de vídeo comprimido para reconstruir o sinal de vídeo original para exibição para um usuário final. O processo de decodificação geralmente reflete o processo de codificação para permitir que o decodificador reconstrua, de maneira consistente, o sinal de vídeo.
[0066] Na etapa 101, o sinal de vídeo é inserido no codificador. Por exemplo, o sinal de vídeo pode ser um arquivo de vídeo não comprimido armazenado na memória. Conforme outro exemplo, o arquivo de vídeo pode ser capturado por um dispositivo de captura de vídeo, tal como uma câmera de vídeo, e codificado para suportar transmissão em tempo real do vídeo. O arquivo de vídeo pode incluir tanto um componente de áudio quanto um componente de vídeo. O componente de vídeo contém uma série de quadros de imagem que, quando vista em uma sequência, proporciona a impressão visual de movimento. Os quadros contêm pixels que são expressos em termos de luz, denominados, na presente invenção, componentes de luma (ou amostras de luma), e cor, denominados componentes de croma (ou amostras de cor). Em alguns exemplos, os quadros também podem conter valores de profundidade para suportar visualização tridimensional.
[0067] Na etapa 103, o vídeo é particionado em blocos. O particionamento inclui subdividir os pixels em cada quadro em blocos quadrangulares e/ou retangulares para compressão. Por exemplo, em Codificação de Vídeo de Alta Eficiência (HEVC) (também conhecida como H.265 e MPEG-H Parte 2) o quadro pode ser primeiro dividido em unidades de árvore de codificação (CTUs), que são blocos de um tamanho predefinido (por exemplo, sessenta e quatro pixels por sessenta e quatro pixels). As CTUs contêm amostras de luma e croma. As árvores de codificação podem ser empregadas para dividir as CTUs em blocos e, então, subdividir, de modo recursivo, os blocos até que configurações sejam alcançadas que suportam codificação adicional. Por exemplo, componentes de luma de um quadro podem ser subdivididos até que os blocos individuais contenham valores de iluminação relativamente homogêneos. Além disso, componentes de croma de um quadro podem ser subdivididos até que os blocos individuais contenham valores de cor relativamente homogêneos. Assim, os mecanismos de particionamento variam dependendo do conteúdo dos quadros de vídeo.
[0068] Na etapa 105, vários mecanismos de compressão são empregados para comprimir os blocos de imagem particionados na etapa 103. Por exemplo, predição inter e/ou predição intra pode ser empregada. A predição inter é projetada para obter vantagem do fato de que objetos em uma cena comum tendem a aparecer em quadros sucessivos. Assim, um bloco que retrata um objeto em um quadro de referência não precisa ser descrito de maneira repetida em quadros adjacentes. Especificamente, um objeto, tal como uma tabela, pode permanecer em uma posição constante através de múltiplos quadros. Portanto, a tabela é descrita uma vez e quadros adjacentes podem se referir novamente ao quadro de referência. Os mecanismos de compatibilidade padrão podem ser empregados para compatibilizar objetos através de múltiplos quadros. Além disso, objetos em movimento podem ser representados através de múltiplos quadros, por exemplo, devido a movimento de objeto ou movimento de câmera. Conforme um exemplo particular, um vídeo pode mostrar um automóvel que se move através da tela através de múltiplos quadros. Os vetores de movimento podem ser empregados para descrever tal movimento. Um vetor de movimento é um vetor bidimensional que fornece um deslocamento a partir das coordenadas de um objeto em um quadro para as coordenadas do objeto em um quadro de referência. Como tal, a predição inter pode codificar um bloco de imagem em um quadro atual como um conjunto de vetores de movimento indicando um deslocamento a partir de um bloco correspondente em um quadro de referência.
[0069] A predição intra codifica blocos em um quadro comum. A predição intra obtém vantagem do fato de que componentes de luma e croma tendem a se aglomerar em um quadro. Por exemplo, um patch de verde em uma porção de uma árvore tende a ser posicionado de modo adjacente a patches similares de verde. A predição intra emprega múltiplos modos de predição direcionais (por exemplo, trinta e três em HEVC), um modo plano e um modo de corrente contínua (DC). Os modos direcionais indicam que um bloco atual é similar/igual a amostras de um bloco vizinho em uma direção correspondente. O modo plano indica que uma série de blocos ao longo de uma linha/coluna (por exemplo, um plano) pode ser interpolada com base em blocos vizinhos nas bordas da linha. O modo plano, de fato, indica uma transição suave de luz/cor através de uma linha/coluna empregando-se uma inclinação relativamente constante na mudança de valores. O modo DC é empregado para suavização de delimitação e indica que um bloco é similar/igual a um valor médio associado a amostras de todos os blocos vizinhos associados às direções angulares dos modos de predição direcionais. Assim, blocos de predição intra podem representar blocos de imagem como vários valores de modo de predição relacional em vez dos valores reais. Além disso, blocos de predição inter podem representar blocos de imagem como valores de vetor de movimento em vez dos valores reais. Em qualquer caso, os blocos de predição podem não representar exatamente os blocos de imagem em alguns casos. Quaisquer diferenças são armazenadas em blocos residuais. As transformadas podem ser aplicadas aos blocos residuais para comprimir adicionalmente o arquivo.
[0070] Na etapa 107, várias técnicas de filtragem podem ser aplicadas. Em HEVC, os filtros são aplicados de acordo com um esquema de filtragem in loop. A predição com base em bloco discutida acima pode resultar na criação de imagens em bloco no decodificador. Além disso, o esquema de predição com base em bloco pode codificar um bloco e, então, reconstruir o bloco codificado para uso posterior como um bloco de referência. O esquema de filtragem in-loop aplica, de modo iterativo, filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptativo e filtros de deslocamento adaptativo de amostra (SAO) aos blocos/quadros. Esses filtros mitigam tais artefatos de blocagem de modo que o arquivo codificado possa ser reconstruído de maneira acurada. Além disso, esses filtros mitigam artefatos nos blocos de referência reconstruídos de modo que seja menos provável que artefatos criem artefatos adicionais em blocos subsequentes que são codificados com base nos blocos de referência reconstruídos.
[0071] Uma vez que o sinal de vídeo tiver sido particionado, comprimido e filtrado, os dados resultantes são codificados em um fluxo de bits na etapa 109. O fluxo de bits inclui os dados discutidos acima bem como quaisquer dados de sinalização desejados para suportar a reconstrução de sinal de vídeo apropriada no decodificador. Por exemplo, tais dados podem incluir dados de partição, dados de predição, blocos residuais e várias flags que fornecem instruções de codificação ao decodificador. O fluxo de bits pode ser armazenado em memória para transmissão em direção a um decodificador mediante solicitação. O fluxo de bits também pode ser transmitido por broadcast e/ou multicast em direção a uma pluralidade de decodificadores. A criação do fluxo de bits é um processo iterativo. Assim, as etapas 101, 103, 105, 107 e 109 podem ocorrer de maneira contínua e/ou simultânea através de muitos quadros e blocos. A ordem mostrada na Figura 1 é apresentada por questão de clareza e para facilitar a discussão, e não se destina a limitar o processo de codificação de vídeo a uma ordem particular.
[0072] O decodificador recebe o fluxo de bits e inicia o processo de decodificação na etapa 111. Especificamente, o decodificador emprega um esquema de decodificação de entropia para converter o fluxo de bits em dados de vídeo e sintaxe correspondentes. O decodificador emprega os dados de sintaxe a partir do fluxo de bits para determinar as partições para os quadros na etapa 111. O particionamento deve ser compatível com os resultados de particionamento de bloco na etapa 103. A codificação/decodificação de entropia, conforme empregado na etapa 111, é descrita. O codificador faz muitas escolhas durante o processo de compressão, tais como seleção de esquemas de particionamento de bloco a partir de várias escolhas possíveis com base no posicionamento espacial de valores na imagem(ns) de entrada. A sinalização das escolhas exatas pode empregar um grande número de bins. Conforme usado na presente invenção, um bin é um valor binário que é tratado como uma variável (por exemplo, um valor de bit que pode variar dependendo do contexto). A codificação de entropia permite que o codificador descarte quaisquer opções que sejam claramente inviáveis para um caso particular, deixando um conjunto de opções permitidas. Atribui-se, então, a cada opção permitida, uma palavra-código. O comprimento das palavras-código se baseia no número de opções permitidas (por exemplo, um bin para duas opções, dois bins para três a quatro opções, etc.) O codificador codifica, então, a palavra-código para a opção selecionada. Esse esquema reduz o tamanho das palavras-código, visto que as palavras-código são tão grandes quanto desejado para indicar unicamente uma seleção a partir de um subconjunto pequeno de opções permitidas em oposição à indicação única da seleção a partir de um conjunto potencialmente grande de todas as opções possíveis. O decodificador decodifica, então, a seleção determinando-se o conjunto de opções permitidas de um modo similar ao codificador. Ao determinar o conjunto de opções permitidas, o decodificador pode ler a palavra-código e determinar a seleção feita pelo codificador.
[0073] Na etapa 113, o decodificador realiza decodificação de bloco. Especificamente, o decodificador emprega transformadas inversas para gerar blocos residuais. Então, o decodificador emprega os blocos residuais e blocos de predição correspondentes para reconstruir os blocos de imagem de acordo com o particionamento. Os blocos de predição podem incluir blocos de predição intra e blocos de predição inter, conforme gerado no codificador na etapa 105. Os blocos de imagem reconstruídos são, então, posicionados em quadros de um sinal de vídeo reconstruído de acordo com os dados de particionamento determinados na etapa 111. A sintaxe para a etapa 113 também pode ser sinalizada no fluxo de bits através de codificação de entropia, conforme discutido acima.
[0074] Na etapa 115, a filtragem é realizada nos quadros do sinal de vídeo reconstruído de um modo similar à etapa 107 no codificador. Por exemplo, filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptativo e filtros SAO podem ser aplicados aos quadros para remover artefatos de blocagem. Uma vez que os quadros são filtrados, o sinal de vídeo pode ser emitido a um display na etapa 117 para visualização por um usuário final.
[0075] A Figura 2 é um diagrama esquemático de um sistema de codificação e decodificação (codec) exemplificativo 200 para codificação de vídeo. Especificamente, o sistema codec 200 fornece funcionalidade para suportar a implementação do método operacional 100. O sistema codec 200 é generalizado para retratar componentes empregados tanto em um codificador quanto em um decodificador. O sistema codec 200 recebe e particiona um sinal de vídeo conforme discutido em relação às etapas 101 e 103 no método operacional 100, que resulta em um sinal de vídeo particionado 201. O sistema codec 200 comprime, então, o sinal de vídeo particionado 201 em um fluxo de bits codificado ao atuar como um codificador, conforme discutido em relação às etapas 105, 107 e 109 no método 100. Ao atuar como um decodificador, o sistema codec 200 gera um sinal de vídeo de saída a partir do fluxo de bits, conforme discutido em relação às etapas 111, 113, 115 e 117 no método operacional 100. O sistema codec 200 inclui um componente de controle de codificador geral 211, um componente de quantização e escalonamento de transformada 213, um componente de estimação de imagem intra 215, um componente de predição de imagem intra 217, um componente de compensação de movimento 219, um componente de estimação de movimento 221, um componente de transformada inversa e escalonamento 229, um componente de análise de controle de filtro 227, um componente de filtros in-loop 225, um componente de buffer de imagem decodificada 223 e um componente de codificação aritmética binária adaptativa ao contexto (CABAC) e formatação de cabeçalho 231. Tais componentes são acoplados conforme mostrado. Na Figura 2, linhas escuras indicam movimento de dados a serem codificados/decodificados enquanto linhas tracejadas indicam movimento de dados de controle que controlam a operação de outros componentes. Os componentes do sistema codec 200 podem estar todos presentes no codificador. O decodificador pode incluir um subconjunto dos componentes do sistema codec 200. Por exemplo, o decodificador pode incluir o componente de predição de imagem intra 217, o componente de compensação de movimento 219, o componente de transformada inversa e escalonamento 229, o componente de filtros in-loop 225 e o componente de buffer de imagem decodificada 223. Esses componentes serão descritos a seguir.
[0076] O sinal de vídeo particionado 201 é uma sequência de vídeo capturada que foi particionada em blocos de pixels por uma árvore de codificação. Uma árvore de codificação emprega vários modos de repartição para subdividir um bloco de pixels em blocos menores de pixels. Esses blocos podem ser, então, subdivididos adicionalmente em blocos menores. Os blocos podem ser denominados nós na árvore de codificação. Nós-pai maiores são repartidos em nós-filho menores. O número de vezes que um nó é subdividido é denominado a profundidade do nó/árvore de codificação. Os blocos divididos podem ser incluídos em unidades de codificação (CUs) em alguns casos. Por exemplo, uma CU pode ser uma subporção de uma CTU que contém um bloco de luma, bloco(s) de croma (Cr) de diferença de vermelho e um bloco(s) de croma (Cb) de diferença de azul em conjunto com instruções de sintaxe correspondentes para a CU. Os modos de repartição podem incluir uma árvore binária (BT), árvore tripla (TT) e uma quadtree (QT) empregadas para particionar um nó em dois, três ou quatro nós-filho, respectivamente, de formatos variados dependendo dos modos de repartição empregados. O sinal de vídeo particionado 201 é encaminhado para o componente de controle de codificador geral 211, o componente de quantização e escalonamento de transformada 213, o componente de estimação de imagem intra 215, o componente de análise de controle de filtro 227 e o componente de estimação de movimento 221 para compressão.
[0077] O componente de controle de codificador geral 211 é configurado para tomar decisões relacionadas à codificação das imagens da sequência de vídeo no fluxo de bits de acordo com restrições de aplicação. Por exemplo, o componente de controle de codificador geral 211 gerencia a otimização de tamanho de taxa de bit/fluxo de bits versus qualidade de reconstrução. Tais decisões podem ser tomadas com base em disponibilidade de largura de banda/espaço de armazenamento e solicitações de resolução de imagem. O componente de controle de codificador geral 211 também gerencia a utilização de buffer à luz de velocidade de transmissão para mitigar questões de insuficiência e de saturação de buffer. Para gerenciar essas questões, o componente de controle de codificador geral 211 gerencia particionamento, predição e filtragem pelos outros componentes. Por exemplo, o componente de controle de codificador geral 211 pode aumentar dinamicamente a complexidade de compressão para aumentar a resolução e aumentar o uso de largura de banda ou diminuir a complexidade de compressão para diminuir a resolução e o uso de largura de banda. Portanto, o componente de controle de codificador geral 211 controla os outros componentes do sistema codec 200 para equilibrar a qualidade de reconstrução de sinal de vídeo com preocupações de taxa de bits. O componente de controle de codificador geral 211 cria dados de controle, que controlam a operação dos outros componentes. Os dados de controle também são encaminhados para o componente de CABAC e formatação de cabeçalho 231 para serem codificados no fluxo de bits para sinalizar parâmetros para decodificação no decodificador.
[0078] O sinal de vídeo particionado 201 também é enviado ao componente de estimação de movimento 221 e ao componente de compensação de movimento 219 para predição inter. Um quadro ou fatia do sinal de vídeo particionado 201 pode ser dividido em múltiplos blocos de vídeo. O componente de estimação de movimento 221 e o componente de compensação de movimento 219 realizam codificação preditiva de modo inter do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para fornecer predição temporal. O sistema codec 200 pode realizar múltiplas passas de codificação, por exemplo, para selecionar um modo de codificação apropriado para cada bloco de dados de vídeo.
[0079] O componente de estimação de movimento 221 e o componente de compensação de movimento 219 podem ser altamente integrados, mas são ilustrados de forma separada para fins conceituais. A estimação de movimento, realizada pelo componente de estimação de movimento 221, é o processo de geração de vetores de movimento, que estimam movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de um objeto codificado em relação a um bloco preditivo. Constata-se que um bloco preditivo é um bloco que é estritamente compatível com o bloco a ser codificado, em termos de diferença de pixel. Um bloco preditivo também pode ser denominado um bloco de referência. Tal diferença de pixel pode ser determinada pela soma da diferença absoluta (SAD), soma da diferença quadrática (SSD) ou outra métrica de diferença. HEVC emprega vários objetos codificados incluindo uma CTU, blocos de árvore de codificação (CTBs) e CUs. Por exemplo, uma CTU pode ser dividida em CTBs, que podem, então, ser divididos em CBs para inclusão em CUs. Uma CU pode ser codificada como uma unidade de predição (PU) contendo dados de predição e/ou uma unidade de transformada (TU) contendo dados residuais transformados para a CU. O componente de estimação de movimento 221 gera vetores de movimento, PUs e TUs usando-se uma análise de taxa-distorção como parte de um processo de otimização de taxa distorção. Por exemplo, o componente de estimação de movimento 221 pode determinar múltiplos blocos de referência, múltiplos vetores de movimento, etc. para um bloco/quadro atual, e pode selecionar os blocos de referência, vetores de movimento, etc. que têm as melhores características de taxa-distorção. As melhores características de taxa- distorção equilibram qualidade de reconstrução de vídeo (por exemplo, quantidade de perda de dados por compressão) com eficiência de codificação (por exemplo, tamanho da codificação final).
[0080] Em alguns exemplos, o sistema codec 200 pode calcular valores para posições de pixel de número subinteiro de imagens de referência armazenadas no componente de buffer de imagem decodificada 223. Por exemplo, o sistema codec de vídeo 200 pode interpolar valores de posições de pixel de um quarto, posições de pixel de um oitavo ou outras posições de pixel fracionadas da imagem de referência. Portanto, o componente de estimação de movimento 221 pode realizar uma busca de movimento em relação às posições de pixel inteiras e posições de pixel fracionadas e emitir um vetor de movimento com precisão de pixel fracionada. O componente de estimação de movimento 221 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia codificada de modo inter comparando-se a posição da PU com a posição de um bloco preditivo de uma imagem de referência. O componente de estimação de movimento 221 emite o vetor de movimento calculado como dados de movimento para o componente de CABAC e formatação de cabeçalho 231 para codificação e movimento para o componente de compensação de movimento 219.
[0081] A compensação de movimento, realizada pelo componente de compensação de movimento 219, pode envolver buscar ou gerar o bloco preditivo com base no vetor de movimento determinado pelo componente de estimação de movimento 221. Novamente, o componente de estimação de movimento 221 e o componente de compensação de movimento 219 podem ser funcionalmente integrados, em alguns exemplos. Mediante o recebimento do vetor de movimento para a PU do bloco de vídeo atual, o componente de compensação de movimento 219 pode localizar o bloco preditivo para onde o vetor de movimento aponta. Um bloco de vídeo residual é, então, formado subtraindo-se valores de pixel do bloco preditivo dos valores de pixel do bloco de vídeo atual sendo codificado, formando valores de diferença de pixel. Em geral, o componente de estimação de movimento 221 realiza estimação de movimento em relação a componentes de luma, e o componente de compensação de movimento 219 usa vetores de movimento calculados com base nos componentes de luma para componentes de croma e componentes de luma. O bloco preditivo e o bloco residual são encaminhados ao componente de quantização e escalonamento de transformada 213.
[0082] O sinal de vídeo particionado 201 também é enviado ao componente de estimação de imagem intra 215 e ao componente de predição de imagem intra 217. Assim como com o componente de estimação de movimento 221 e com o componente de compensação de movimento 219, o componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 podem ser altamente integrados, mas são ilustrados de maneira separada para fins conceituais. O componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 predizem de modo intra um bloco atual em relação a blocos em um quadro atual, como uma alternativa à predição inter realizada pelo componente de estimação de movimento 221 e pelo componente de compensação de movimento 219 entre quadros, conforme descrito acima. Em particular, o componente de estimação de imagem intra 215 determina um modo de predição intra a ser usado para codificar um bloco atual. Em alguns exemplos, o componente de estimação de imagem intra 215 seleciona um modo de predição intra apropriado para codificar um bloco atual a partir de múltiplos modos de predição intra testados. Os modos de predição intra selecionados são, então, encaminhados ao componente de CABAC 231 e formatação de cabeçalho para codificação.
[0083] Por exemplo, o componente de estimação de imagem intra 215 calcula valores de taxa-distorção usando uma análise de taxa-distorção para os vários modos de predição intra testados, e seleciona o modo de predição intra que tem as melhores características de taxa-distorção entre os modos testados. A análise de taxa-distorção geralmente determina uma quantidade de distorção (ou erro) entre um bloco codificado e um bloco não codificado original que foi codificado para produzir o bloco codificado, bem como uma taxa de bits (por exemplo, um número de bits) usada para produzir o bloco codificado. O componente de estimação de imagem intra 215 calcula razões das distorções e taxas para os vários blocos codificados para determinar qual modo de predição intra exibe o melhor valor de taxa-distorção para o bloco. Além disso, o componente de estimação de imagem intra 215 pode ser configurado para codificar blocos de profundidade de um mapa de profundidade usando um modo de modelagem de profundidade (DMM) com base em otimização de taxa-distorção (RDO).
[0084] O componente de predição de imagem intra 217 pode gerar um bloco residual a partir do bloco preditivo com base nos modos de predição intra selecionados determinados pelo componente de estimação de imagem intra 215 quando implementado em um codificador ou ler o bloco residual a partir do fluxo de bits quando implementado em um decodificador. O bloco residual inclui a diferença em valores entre o bloco preditivo e o bloco original, representada como uma matriz. O bloco residual é, então, encaminhado para o componente de quantização e escalonamento de transformada 213. O componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 podem operar em componentes de luma e croma.
[0085] O componente de quantização e escalonamento de transformada 213 é configurado para comprimir adicionalmente o bloco residual. O componente de quantização e escalonamento de transformada 213 aplica uma transformada, tal como uma transformada discreta de cosseno (DCT), uma transformada discreta de seno (DST) ou uma transformada conceitualmente similar, ao bloco residual, produzindo um bloco de vídeo que compreende valores de coeficiente de transformada residual. As transformadas de wavelet, transformadas de número inteiro, transformadas de sub-banda ou outros tipos de transformadas também podem ser usados. A transformada pode converter as informações residuais de um domínio de valor de pixel para um domínio de transformada, tal como um domínio de frequência. O componente de quantização e escalonamento de transformada 213 também é configurado para escalonar as informações residuais transformadas, por exemplo, com base em frequência. Tal escalonamento envolve aplicar um fator de escala às informações residuais de modo que diferentes informações de frequência sejam quantizadas em diferentes granularidades, o que pode afetar a qualidade visual final do vídeo reconstruído. O componente de quantização e escalonamento de transformada 213 também é configurado para quantizar os coeficientes de transformada para reduzir adicionalmente taxa de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. O grau de quantização pode ser modificado ajustando-se um parâmetro de quantização. Em alguns exemplos, o componente de quantização e escalonamento de transformada 213 pode realizar, então, uma varredura da matriz incluindo os coeficientes de transformada quantizados. Os coeficientes de transformada quantizados são encaminhados para o componente de CABAC e formatação de cabeçalho 231 para serem codificados no fluxo de bits.
[0086] O componente de transformada inversa e escalonamento 229 aplica uma operação inversa do componente de quantização e escalonamento de transformada 213 para suportar estimação de movimento. O componente de transformada inversa e escalonamento 229 aplica escalonamento inverso, transformação e/ou quantização para reconstruir o bloco residual no domínio de pixel, por exemplo, para uso posterior como um bloco de referência que pode se tornar um bloco preditivo para outro bloco atual. O componente de estimação de movimento 221 e/ou o componente de compensação de movimento 219 pode calcular um bloco de referência adicionando-se o bloco residual novamente a um bloco preditivo correspondente para uso em estimação de movimento de um bloco/quadro posterior. Os filtros são aplicados aos blocos de referência reconstruídos para mitigar artefatos criados durante escalonamento, quantização e transformada. Tais artefatos podem causar, de outro modo, predição não acurada (e criar artefatos adicionais) quando blocos subsequentes são preditos.
[0087] O componente de análise de controle de filtro 227 e o componente de filtros in-loop 225 aplicam os filtros aos blocos residuais e/ou a blocos de imagem reconstruídos. Por exemplo, o bloco residual transformado do componente de transformada inversa e escalonamento 229 pode ser combinado com um bloco de predição correspondente do componente de predição de imagem intra 217 e/ou componente de compensação de movimento 219 para reconstruir o bloco de imagem original. Os filtros podem ser aplicados, então, ao bloco de imagem reconstruído. Em alguns exemplos, em vez disso, os filtros podem ser aplicados aos blocos residuais. Assim como com outros componentes na Figura 2, o componente de análise de controle de filtro 227 e o componente de filtros in-loop 225 são altamente integrados e podem ser implementados em conjunto, mas são retratados de maneira separada para fins conceituais. Os filtros aplicados aos blocos de referência reconstruídos são aplicados a regiões espaciais particulares e incluem múltiplos parâmetros para ajustar o modo como tais filtros são aplicados. O componente de análise de controle de filtro 227 analisa os blocos de referência reconstruídos para determinar onde tais filtros devem ser aplicados e define parâmetros correspondentes. Tais dados são encaminhados para o componente de CABAC e formatação de cabeçalho 231 como dados de controle de filtro para codificação. O componente de filtros in-loop 225 aplica tais filtros com base nos dados de controle de filtro. Os filtros podem incluir um filtro de desblocagem, um filtro de supressão de ruído, um filtro SAO e um filtro loop adaptativo. Tais filtros podem ser aplicados no domínio espacial/pixel (por exemplo, em um bloco de pixel reconstruído) ou no domínio de frequência, dependendo do exemplo.
[0088] Ao operar como um codificador, o bloco de predição, bloco residual e/ou bloco de imagem reconstruído filtrado são armazenados no componente de buffer de imagem decodificada 223 para uso posterior em estimação de movimento, conforme discutido acima. Ao operar como um decodificador, o componente de buffer de imagem decodificada 223 armazena e encaminha os blocos reconstruídos e filtrados em direção a um display como parte de um sinal de vídeo de saída. O componente de buffer de imagem decodificada 223 pode ser qualquer dispositivo de memória capaz de armazenar blocos de predição, blocos residuais e/ou blocos de imagem reconstruídos.
[0089] O componente de CABAC e formatação de cabeçalho 231 recebe os dados dos vários componentes do sistema codec 200 e codifica tais dados em um fluxo de bits codificado para transmissão em direção a um decodificador. Especificamente, o componente de CABAC e formatação de cabeçalho 231 gera vários cabeçalhos para codificar dados de controle, tais como dados de controle gerais e dados de controle de filtro. Além disso, dados de predição, incluindo dados de predição intra e movimento, bem como dados residuais na forma de dados de coeficiente de transformada quantizado são todos codificados no fluxo de bits. O fluxo de bits final inclui todas as informações desejadas pelo decodificador para reconstruir o sinal de vídeo particionado original 201. Tais informações também podem incluir tabelas de índice de modo de predição intra (também denominadas tabelas de mapeamento de palavra-código), definições de contextos de codificação para vários blocos, indicações de modos de predição intra mais prováveis, uma indicação de informações de partição, etc. Tais dados podem ser codificados empregando-se codificação de entropia. Por exemplo, as informações podem ser codificadas empregando-se codificação de comprimento variável adaptativa ao contexto (CAVLC), CABAC, codificação aritmética binária com base em sintaxe adaptativa ao contexto (SBAC), codificação de entropia de particionamento de intervalo de probabilidade (PIPE) ou outra técnica de codificação de entropia. Após a codificação de entropia, o fluxo de bits codificado pode ser transmitido para outro dispositivo (por exemplo, um decodificador de vídeo) ou arquivado para transmissão ou recuperação posterior.
[0090] A Figura 3 é um diagrama de blocos que ilustra um codificador de vídeo exemplificativo 300. O codificador de vídeo 300 pode ser empregado para implementar as funções de codificação do sistema codec 200 e/ou implementar as etapas 101, 103, 105, 107 e/ou 109 do método operacional 100. O codificador 300 particiona um sinal de vídeo de entrada, resultando em um sinal de vídeo particionado 301, que é substancialmente similar ao sinal de vídeo particionado 201. O sinal de vídeo particionado 301 é, então, comprimido e codificado em um fluxo de bits por componentes do codificador 300.
[0091] Especificamente, o sinal de vídeo particionado 301 é encaminhado para um componente de predição de imagem intra 317 para predição intra. O componente de predição de imagem intra 317 pode ser substancialmente similar ao componente de estimação de imagem intra 215 e ao componente de predição de imagem intra 217. O sinal de vídeo particionado 301 também é encaminhado a um componente de compensação de movimento 321 para predição inter com base em blocos de referência em um componente de buffer de imagem decodificada 323. O componente de compensação de movimento 321 pode ser substancialmente similar ao componente de estimação de movimento 221 e ao componente de compensação de movimento 219. Os blocos de predição e os blocos residuais do componente de predição de imagem intra 317 e do componente de compensação de movimento 321 são encaminhados a um componente de transformada e quantização 313 para transformada e quantização dos blocos residuais. O componente de transformada e quantização 313 pode ser substancialmente similar ao componente de quantização e escalonamento de transformada 213. Os blocos residuais transformados e quantizados e os blocos de predição correspondentes (em conjunto com dados de controle associados) são encaminhados a um componente de codificação de entropia 331 para codificação em um fluxo de bits. O componente de codificação de entropia 331 pode ser substancialmente similar ao componente de CABAC e formatação de cabeçalho 231.
[0092] Os blocos residuais transformados e quantizados e/ou os blocos de predição correspondentes também são encaminhados a partir do componente de transformada e quantização 313 para um componente de quantização e transformada inversa 329 para reconstrução em blocos de referência para uso pelo componente de compensação de movimento 321. O componente de quantização e transformada inversa 329 pode ser substancialmente similar ao componente de transformada inversa e escalonamento 229. Os filtros in-loop em um componente de filtros in-loop 325 também são aplicados aos blocos residuais e/ou blocos de referência reconstruídos, dependendo do exemplo. O componente de filtros in-loop 325 pode ser substancialmente similar ao componente de análise de controle de filtro 227 e ao componente de filtros in-loop 225. O componente de filtros in-loop 325 pode incluir múltiplos filtros, conforme discutido em relação ao componente de filtros in-loop 225. Os blocos filtrados são, então, armazenados em um componente de buffer de imagem decodificada 323 para uso como blocos de referência pelo componente de compensação de movimento 321. O componente de buffer de imagem decodificada 323 pode ser substancialmente similar ao componente de buffer de imagem decodificada 223.
[0093] A Figura 4 é um diagrama de blocos que ilustra um decodificador de vídeo exemplificativo 400. O decodificador de vídeo 400 pode ser empregado para implementar as funções de decodificação do sistema codec 200 e/ou implementar as etapas 111, 113, 115 e/ou 117 do método operacional 100. O decodificador 400 recebe um fluxo de bits, por exemplo, a partir de um codificador 300, e gera um sinal de vídeo de saída reconstruído com base no fluxo de bits para exibição para um usuário final.
[0094] O fluxo de bits é recebido por um componente de decodificação de entropia 433. O componente de decodificação de entropia 433 é configurado para implementar um esquema de decodificação de entropia, tal como codificação de CAVLC, CABAC, SBAC, PIPE ou outras técnicas codificação de entropia. Por exemplo, o componente de decodificação de entropia 433 pode empregar informações de cabeçalho para fornecer um contexto para interpretar dados adicionais codificados como palavras-código no fluxo de bits. As informações decodificadas incluem quaisquer informações desejadas para decodificar o sinal de vídeo, tais como dados de controle gerais, dados de controle de filtro, informações de partição, dados de movimento, dados de predição e coeficientes de transformada quantizados a partir de blocos residuais. Os coeficientes de transformada quantizados são encaminhados para um componente de quantização e transformada inversa 429 para reconstrução em blocos residuais. O componente de quantização e transformada inversa 429 pode ser similar ao componente de quantização e transformada inversa 329.
[0095] Os blocos de predição e/ou blocos residuais reconstruídos são encaminhados para o componente de predição de imagem intra 417 para reconstrução em blocos de imagem com base em operações de predição intra. O componente de predição de imagem intra 417 pode ser similar ao componente de estimação de imagem intra 215 e a um componente de predição de imagem intra 217. Especificamente, o componente de predição de imagem intra 417 emprega modos de predição para localizar um bloco de referência no quadro e aplica um bloco residual ao resultado para reconstruir blocos de imagem preditos de modo intra. Os blocos de imagem preditos de modo intra reconstruídos e/ou os blocos residuais e dados de predição inter correspondentes são encaminhados para um componente de buffer de imagem decodificada 423 através de um componente de filtros in-loop 425, que pode ser substancialmente similar ao componente de buffer de imagem decodificada 223 e ao componente de filtros in-loop 225, respectivamente. O componente de filtros in-loop 425 filtra os blocos residuais, blocos de predição e/ou blocos de imagem reconstruídos, e tais informações são armazenadas no componente de buffer de imagem decodificada 423. Os blocos de imagem reconstruídos do componente de buffer de imagem decodificada 423 são encaminhados para um componente de compensação de movimento 421 para predição inter. O componente de compensação de movimento 421 pode ser substancialmente similar ao componente de estimação de movimento 221 e/ou ao componente de compensação de movimento 219. Especificamente, o componente de compensação de movimento 421 emprega vetores de movimento a partir de um bloco de referência para gerar um bloco de predição e aplica um bloco residual ao resultado para reconstruir um bloco de imagem. Os blocos reconstruídos resultantes também podem ser encaminhados através do componente de filtros in-loop 425 ao componente de buffer de imagem decodificada 423. O componente de buffer de imagem decodificada 423 continua a armazenar blocos de imagem reconstruídos adicionais, que podem ser reconstruídos em quadros através das informações de partição. Tais quadros também podem ser colocados em uma sequência. A sequência é emitida em direção a um display como um sinal de vídeo de saída reconstruído.
[0096] A Figura 5 é um diagrama esquemático que ilustra um fluxo de bits exemplificativo 500 e subfluxo de bits 501 extraído do fluxo de bits 500. Por exemplo, o fluxo de bits 500 pode ser gerado por um sistema codec 200 e/ou um codificador 300 para decodificação por um sistema codec 200 e/ou um decodificador 400. Conforme outro exemplo, o fluxo de bits 500 pode ser gerado por um codificador na etapa 109 do método 100 para uso por um decodificador na etapa 111.
[0097] O fluxo de bits 500 inclui um conjunto de parâmetros de sequência (SPS) 510, uma pluralidade de conjuntos de parâmetro de imagem (PPSs) 512, uma pluralidade de cabeçalhos de fatia 514, dados de imagem 520 e uma ou mais mensagens de SEI 515. Um SPS 510 contém dados de sequência comuns a todas as imagens na sequência de vídeo contida no fluxo de bits 500. Tais dados podem incluir tamanho de imagem, profundidade de bit, parâmetros de ferramenta de codificação, restrições de taxa de bit, etc. O PPS 512 contém parâmetros que são específicos a uma ou mais imagens correspondentes. Portanto, cada imagem em uma sequência de vídeo pode se referir a um PPS 512. O PPS 512 pode indicar ferramentas de codificação disponíveis para tiles em imagens correspondentes, parâmetros de quantização, deslocamentos, parâmetros de ferramenta de codificação específicos de imagem (por exemplo, controles de filtro), etc. O cabeçalho de fatia 514 contém parâmetros que são específicos a uma ou mais fatias correspondentes 524 em uma imagem. Portanto, cada fatia 524 na sequência de vídeo pode se referir a um cabeçalho de fatia 514. O cabeçalho de fatia 514 pode conter informações de tipo de fatia, contagens de ordem de imagem (POCs), listas de imagem de referência, pesos de predição, pontos de entrada de tile, parâmetros de desblocagem, etc. Em alguns exemplos, as fatias 524 podem ser denominadas grupos de tiles. Em tal caso, o cabeçalho de fatia 514 pode ser denominado um cabeçalho de grupo de tiles. As mensagens de SEI 515 são mensagens opcionais que contêm metadados que não são necessários para decodificação de bloco, mas podem ser empregados para fins relacionados, tais como indicar temporização de saída de imagem, definições de exibição, detecção de perda, ocultação de perda, etc.
[0098] Os dados de imagem 520 contêm dados de vídeo codificados de acordo com predição inter e/ou predição intra bem como dados residuais transformados e quantizados correspondentes. Tais dados de imagem 520 são ordenados de acordo com um particionamento usado para particionar a imagem antes de codificação. Por exemplo, a sequência de vídeo é dividida em imagens 521. As imagens 521 podem ser divididas adicionalmente em subimagens 522, que são divididas em fatias 524. As fatias 524 podem ser divididas adicionalmente em tiles e/ou CTUs. As CTUs são adicionalmente divididas em blocos de codificação com base em árvores de codificação. Os blocos de codificação podem ser, então, codificados/decodificados de acordo com mecanismos de predição. Por exemplo, uma imagem 521 pode conter uma ou mais subimagens 522. Uma subimagem 522 pode conter uma ou mais fatias 524. A imagem 521 se refere ao PPS 512 e as fatias 524 se referem ao cabeçalho de fatia 514. As subimagens 522 podem ser particionadas de maneira consistente ao longo de toda uma sequência de vídeo (também conhecida como um segmento) e, portanto, podem se referir ao SPS 510. Cada fatia 524 pode conter um ou mais tiles. Cada fatia 524 e, portanto, imagem 521 e subimagem 522, também podem conter uma pluralidade de CTUs.
[0099] Cada imagem 521 pode conter um conjunto inteiro de dados visuais associados a uma sequência de vídeo para um momento correspondente no tempo. Entretanto, certas aplicações podem desejar exibir apenas uma porção de uma imagem 521 em alguns casos. Por exemplo, um sistema de realidade virtual (VR) pode exibir uma região selecionada por usuário da imagem 521, que cria a sensação de estar presente na cena retratada na imagem 521. A região que um usuário pode desejar visualizar não é conhecida quando o fluxo de bits 500 é codificado. Assim, a imagem 521 pode conter cada possível região que um usuário pode potencialmente visualizar como subimagens 522, que podem ser decodificadas e exibidas de forma separada com base em entrada de usuário. Outras aplicações podem exibir separadamente uma região de interesse. Por exemplo, um televisor com uma imagem em uma imagem pode desejar exibir uma região particular e, portanto, uma subimagem 522, de uma sequência de vídeo ao longo de uma imagem 521 de uma sequência de vídeo não relacionada. Em ainda outro exemplo, sistemas de teleconferência podem exibir toda uma imagem 521 de um usuário que está atualmente discursando e uma subimagem 522 de um usuário que não está atualmente discursando. Assim, uma subimagem 522 pode conter uma região definida da imagem 521. Uma subimagem 522 que é temporariamente com restrição de movimento pode ser decodificável de forma separada do restante da imagem 521. Especificamente, uma subimagem com restrição de movimento temporal é codificada sem referência a amostras fora da subimagem com restrição de movimento temporal e, portanto, contém informações suficientes para decodificação completa sem referência ao restante da imagem 521.
[0100] Cada fatia 524 pode ser um retângulo definido por uma CTU em um canto esquerdo superior e uma CTU em um canto direito inferior. Em alguns exemplos, uma fatia 524 inclui uma série de tiles e/ou CTUs em uma ordem de varredura raster que prossegue da esquerda para a direita e do topo para baixo. Em outros exemplos, uma fatia 524 é uma fatia retangular. Uma fatia retangular pode não atravessar toda a largura de uma imagem de acordo com uma ordem de varredura raster. Em vez disso, uma fatia retangular pode conter uma região retangular e/ou quadrangular de uma imagem 521 e/ou subimagem 522 definida em termos de uma CTU e/ou linhas de tile e uma CTU e/ou colunas de tile. Uma fatia 524 é a menor unidade que pode ser separadamente exibida por um decodificador. Portanto, fatias 524 de uma imagem 521 podem ser atribuídas a diferentes subimagens 522 para retratar separadamente regiões desejadas de uma imagem 521.
[0101] Um decodificador pode exibir uma ou mais subimagens 523 da imagem 521. As subimagens 523 são um subgrupo selecionado por usuário ou predefinido de subimagens 522. Por exemplo, uma imagem 521 pode ser dividida em nove subimagens 522, mas o decodificador pode exibir apenas uma única subimagem 523 do grupo de subimagens 522. As subimagens 523 contêm fatias 525, que são um subgrupo selecionado ou predefinido de fatias 524. Para permitir exibição separada das subimagens 523, um subfluxo de bits 501 pode ser extraído 529 do fluxo de bits 500. A extração 529 pode ocorrer no lado de codificador de modo que o decodificador apenas receba o subfluxo de bits 501. Em outros casos, todo o fluxo de bits 500 é transmitido ao decodificador e o decodificador extrai 529 o subfluxo de bits 501 para decodificação separada. Deve-se observar que o subfluxo de bits 501 também pode ser denominado, de modo geral, um fluxo de bits em alguns casos. Um subfluxo de bits 501 inclui o SPS 510, o PPS 512, as subimagens selecionadas 523, bem como cabeçalhos de fatia 514, e mensagens de SEI 515 que são relevantes para as subimagens 523 e/ou fatias 525.
[0102] A presente revelação sinaliza vários dados para suportar codificação eficiente das subimagens 522 para seleção e exibição das subimagens 523 no decodificador. O SPS 510 inclui um tamanho de subimagem 531, uma localização de subimagem 532 e IDs de subimagem 533 relacionados ao conjunto completo de subimagens 522. O tamanho de subimagem 531 inclui uma altura de subimagem em amostras de luma e uma largura de subimagem em amostras de luma para uma subimagem correspondente 522. A localização de subimagem 532 inclui uma distância de deslocamento entre uma amostra esquerda-superior de uma subimagem correspondente 522 e uma amostra esquerda-superior da imagem 521. A localização de subimagem 532 e o tamanho de subimagem 531 definem um layout da subimagem correspondente 522. O ID de subimagem 533 contém dados que identificam exclusivamente uma subimagem correspondente 522. O ID de subimagem 533 pode ser um índice de varredura raster de subimagem 522 ou outro valor definido. Portanto, um decodificador pode ler o SPS 510 e determinar o tamanho, localização e ID de cada subimagem 522. Em alguns sistemas de codificação de vídeo, dados relacionados às subimagens 522 podem ser incluídos no PPS 512 visto que uma subimagem 522 é particionada a partir de uma imagem 521. Entretanto, partições usadas para criar subimagens 522 podem ser usadas por aplicações, tais como aplicações com base em ROI, aplicações de VR, etc., que dependem de partições de subimagem 522 consistentes ao longo de uma sequência/segmento de de vídeo. Como tal, as partições de subimagem 522 geralmente não mudam em uma base por imagem. A colocação de informações de layout para subimagens 522 no SPS 510 garante que o layout seja apenas sinalizado uma vez para uma sequência/segmento em vez de ser sinalizado de maneira redundante para cada PPS 512 (que pode ser sinalizado para cada imagem 521 em alguns casos). Além disso, a sinalização das informações de subimagem 522, em vez de depender do decodificador para derivar tais informações, reduz a possibilidade de erro em caso de pacotes perdidos e suporta funcionalidade adicional em termos de extração de subimagens 523. Assim, a sinalização do layout de subimagem 522 no SPS 510 aperfeiçoa a funcionalidade de um codificador e/ou decodificador.
[0103] O SPS 510 também contém flags de subimagens com restrição de movimento 534 relacionadas ao conjunto completo de subimagens 522. As flags de subimagens com restrição de movimento 534 indicam se cada subimagem 522 é uma subimagem com restrição de movimento temporal. Portanto, o decodificador pode ler as flags de subimagens com restrição de movimento 534 e determinar qual dentre as subimagens 522 pode ser extraída e exibida separadamente sem decodificar outras subimagens 522. Isso permite que subimagens selecionadas 522 sejam codificadas como subimagens com restrição de movimento temporal enquanto permite que outras subimagens 522 sejam codificadas sem tais restrições para eficiência de codificação aumentada.
[0104] Os IDs de subimagem 533 também são incluídos nos cabeçalhos de fatia 514. Cada cabeçalho de fatia 514 contém dados relevantes para um conjunto correspondente de fatias 524. Assim, o cabeçalho de fatia 514 contém apenas os IDs de subimagem 533 que correspondem às fatias 524 associadas ao cabeçalho de fatia 514. Como tal, um decodificador pode receber uma fatia 524, obter um ID de subimagem 533 a partir do cabeçalho de fatia 514 e determinar qual subimagem 522 contém a fatia 524. O decodificador também pode usar o ID de subimagem 533 do cabeçalho de fatia 514 para correlacionar com dados relacionados no SPS 510. Como tal, o decodificador pode determinar como posicionar as subimagens 522/523 e fatias 524/525 lendo-se o SPS 510 e cabeçalhos de fatia relevantes 514. Isso permite que as subimagens 523 e fatias 525 sejam decodificadas até mesmo se algumas subimagens 522 se perderem na transmissão ou forem omitidas propositalmente para aumentar a eficiência de codificação.
[0105] A mensagem de SEI 515 também pode conter um nível de subimagem 535. O nível de subimagem 535 indica recursos de hardware necessários para decodificar uma subimagem correspondente 522. Desse modo, cada subimagem 522 pode ser codificada independentemente de outras subimagens 522. Isso garante a alocação, para cada subimagem 522, da quantidade correta de recursos de hardware no decodificador. Sem tal nível de subimagem 535, cada subimagem 522 será alocada com recursos suficientes para decodificar a subimagem mais complexa 522. Portanto, o nível de subimagem 535 impede que o decodificador aloque excessivamente recursos de hardware se subimagens 522 estiverem associadas a exigências de recurso de hardware variadas.
[0106] A Figura 6 é um diagrama esquemático que ilustra uma imagem exemplificativa 600 particionada em subimagens 622. Por exemplo, uma imagem 600 pode ser codificada em e decodificada a partir de um fluxo de bits 500, por exemplo, por um sistema codec 200, um codificador 300 e/ou um decodificador 400. Além disso, a imagem 600 pode ser particionada e/ou incluída em um subfluxo de bits 501 para suportar codificação e decodificação de acordo com o método 100.
[0107] A imagem 600 pode ser substancialmente similar a uma imagem 521. De modo adicional, a imagem 600 pode ser particionada em subimagens 622, que são substancialmente similares às subimagens 522. As subimagens 622 incluem, cada uma, um tamanho de subimagem 631, que pode ser incluído em um fluxo de bits 500 como um tamanho de subimagem 531. O tamanho de subimagem 631 inclui largura de subimagem 631a e uma altura de subimagem 631b. A largura de subimagem 631a é a largura de uma subimagem correspondente 622 em unidades de amostras de luma. A altura de subimagem 631b é a altura de uma subimagem correspondente 622 em unidades de amostras de luma. As subimagens 622 incluem, cada uma, um ID de subimagem 633, que pode ser incluído em um fluxo de bits 500 como um ID de subimagem 633. O ID de subimagem 633 pode ser qualquer valor que identifica exclusivamente cada subimagem 622. No exemplo mostrado, o ID de subimagem 633 é um índice de subimagem 622. As subimagens 622 incluem, cada uma, uma localização 632, que pode ser incluída em um fluxo de bits 500 como uma localização de subimagem 532. A localização 632 é expressa como um deslocamento entre a amostra superior esquerda de uma subimagem correspondente 622 e uma amostra superior esquerda 642 da imagem 600.
[0108] Também conforme mostrado, algumas subimagens 622 podem ser subimagens com restrição de movimento temporal 634 e outras subimagens 622 podem não ser. No exemplo mostrado, a subimagem 622 com um ID de subimagem 633 de cinco é uma subimagem com restrição de movimento temporal 634. Isso indica que a subimagem 622 identificada como cinco é codificada sem referência a qualquer outra subimagem 622 e pode, portanto, ser extraída e decodificada de forma separada sem considerar dados das outras subimagens 622. Uma indicação de quais subimagens 622 são subimagens com restrição de movimento temporal 634 pode ser sinalizada em um fluxo de bits 500 em flags de subimagens com restrição de movimento 534.
[0109] Conforme mostrado, as subimagens 622 podem ser restringidas para cobrir uma imagem 600 sem um gap ou uma sobreposição. Um gap é uma região de uma imagem 600 que não está incluída em qualquer subimagem 622. Uma sobreposição é uma região de uma imagem 600 que está incluída em mais de uma subimagem 622. No exemplo mostrado na Figura 6, as subimagens 622 são particionadas a partir da imagem 600 para evitar gaps e sobreposições. Os gaps fazem com que as amostras de imagem 600 sejam deixadas fora das subimagens 622. As sobreposições fazem com que fatias associadas sejam incluídas em múltiplas subimagens 622. Portanto, gaps e sobreposições podem fazer com que amostras sejam impactadas por tratamento diferencial quando subimagens 622 são codificadas de forma diferente. Se isso for permitido no codificador, um decodificador precisa suportar tal esquema de codificação até mesmo quando o esquema de decodificação for raramente usado. Proibindo-se gaps e sobreposições de subimagem 622, a complexidade do decodificador pode ser diminuída visto que não é exigido que o decodificador seja responsável por potenciais gaps e sobreposições ao determinar tamanhos 631 e localizações 632 de subimagem. Além disso, proibindo-se gaps e sobreposições de subimagem 622 reduz a complexidade de processos de RDO no codificador. Isso se deve ao fato de que o codificador pode omitir consideração de casos de gap e sobreposição ao selecionar uma codificação para uma sequência de vídeo. Assim, evitar gaps e sobreposições pode reduzir o uso de recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0110] A Figura 7 é um diagrama esquemático que ilustra um mecanismo exemplificativo 700 para relacionar fatias 724 a um layout de subimagem 722. Por exemplo, o mecanismo 700 pode ser aplicado à imagem 600. De modo adicional, o mecanismo 700 pode ser aplicado com base em dados em um fluxo de bits 500, por exemplo, por um sistema codec 200, um codificador 300 e/ou um decodificador 400. Além disso, o mecanismo 700 pode ser empregado para suportar codificação e decodificação de acordo com o método 100.
[0111] O mecanismo 700 pode ser aplicado a fatias 724 em uma subimagem 722, tais como fatias 524/525 e subimagens 522/523, respectivamente. No exemplo mostrado, a subimagem 722 inclui uma primeira fatia 724a, uma segunda fatia 724b e uma terceira fatia 724c. Os cabeçalhos de fatia para cada uma dentre as fatias 724 incluem um ID de subimagem 733 para a subimagem 722. O decodificador pode compatibilizar o ID de subimagem 733 do cabeçalho de fatia com o ID de subimagem 733 no SPS. O decodificador pode, então, determinar a localização 732 e tamanho da subimagem 722 do SPS com base no ID de subimagem 733. Usando a localização 732, a subimagem 722 pode ser colocada em relação à amostra superior esquerda no canto esquerdo superior 742 da imagem. O tamanho pode ser usado para definir a altura e a largura da subimagem 722 em relação à localização 732. As fatias 724 podem ser, então, incluídas na subimagem 722. Assim, as fatias 724 podem ser posicionadas na subimagem correta 722 com base no ID de subimagem 733 sem referência a outras subimagens. Isso suporta correção de erro visto que outras subimagens perdidas não alteram a decodificação de subimagem 722. Isso também suporta aplicações que extraem apenas uma subimagem 722 e evitam a transmissão de outras subimagens. Portanto, os IDs de subimagem 733 suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, que reduz o uso de recursos de rede, recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0112] A Figura 8 é um diagrama esquemático que ilustra outra imagem exemplificativa 800 particionada em subimagens 822. A imagem 800 pode ser substancialmente similar à imagem 600. Além disso, uma imagem 800 pode ser codificada em e decodificada a partir de um fluxo de bits 500, por exemplo, por um sistema codec 200, um codificador 300 e/ou um decodificador 400. Além disso, a imagem 800 pode ser particionada e/ou incluída em um subfluxo de bits 501 para suportar codificação e decodificação de acordo com o método 100 e/ou o mecanismo 700.
[0113] A imagem 800 inclui subimagens 822, que podem ser substancialmente similares às subimagens 522, 523, 622 e/ou 722. As subimagens 822 são divididas em uma pluralidade de CTUs 825. Uma CTU 825 é uma unidade de codificação básica em sistemas de codificação de vídeo padronizados. Uma CTU 825 é subdividida por uma árvore de codificação em blocos de codificação, que são codificados de acordo com predição inter ou predição intra. Conforme mostrado, algumas subimagens 822a são restritas para incluir larguras de subimagem e alturas de subimagem que são múltiplos de tamanho de CTU 825. No exemplo mostrado, as subimagens 822a têm uma altura de seis CTUs 825 e uma largura de cinco CTUs 825. Essa restrição é removida para subimagens 822b posicionadas na borda direita de imagens 801 e para subimagens 822c posicionadas na borda inferior de imagens 802. No exemplo mostrado, as subimagens 822b têm uma largura entre cinco e seis CTUs 825. Entretanto, as subimagens 822b que não estão posicionadas na borda inferior de imagens 802 ainda são restringidas para manter uma altura de subimagem que é um múltiplo de tamanho de CTU 825. No exemplo mostrado, as subimagens 822c têm uma altura entre seis e sete CTUs 825. Entretanto, subimagens 822c que não estão posicionadas na borda direita de imagens 801 ainda são restringidas para manter uma largura de subimagem que é um múltiplo de tamanho de CTU 825.
[0114] Conforme observado acima, alguns sistemas de vídeo podem limitar as subimagens 822 para incluir alturas e larguras que são múltiplos de tamanho de CTU 825. Isso pode impedir que subimagens 822 operem corretamente com muitos layouts de imagem, por exemplo, com uma imagem 800 que contém uma largura ou altura total que não é um múltiplo de tamanho de CTU 825. Permitindo-se que as subimagens inferiores 822c e subimagens à direita 822b incluam alturas e larguras, respectivamente, que não são múltiplos de tamanho de CTU 825, as subimagens 822 podem ser usadas com qualquer imagem 800 sem causar erros de decodificação. Isso resulta em funcionalidade crescente de codificador e decodificador. Além disso, a funcionalidade aumentada permite que um codificador codifique imagens de modo mais eficiente, que reduz o uso de recursos de rede, recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0115] Conforme descrito na presente invenção, a presente revelação descreve projetos para particionamento de imagem com base em subimagem em codificação de vídeo. Uma subimagem é uma área retangular dentro de uma imagem que pode ser decodificada de maneira independente usando um processo de decodificação similar ao que é usado para uma imagem. A presente revelação se refere à sinalização de subimagens em uma sequência de vídeo codificada e/ou fluxo de bits bem como o processo para extração de subimagem. As descrições das técnicas se baseiam em VVC pelo JVET de ITU-T e ISO/IEC. Entretanto, as técnicas também se aplicam a outras especificações de codec de vídeo. O conteúdo a seguir são modalidades exemplificativas descritas na presente invenção. Tais modalidades podem ser aplicadas individualmente ou em combinação.
[0116] As informações relacionadas a subimagens que podem estar presentes na sequência de vídeo codificada (CVS) podem ser sinalizadas em um conjunto de parâmetros de nível de sequência, tal como um SPS. Tal sinalização pode incluir as informações a seguir. O número de subimagens que estão presentes em cada imagem da CVS pode ser sinalizado no SPS. No contexto do SPS ou de uma CVS, as subimagens colocalizadas para todas as unidades de acesso (AUs) podem ser denominadas coletivamente uma sequência de subimagem. Um loop para especificar adicionalmente informações que descrevem propriedades de cada subimagem também pode ser incluído no SPS. Essas informações podem compreender a identificação de subimagem, a localização da subimagem (por exemplo, a distância de deslocamento entre a amostra de luma de canto esquerdo-superior da subimagem e a amostra de luma de canto esquerdo-superior da imagem), e o tamanho da subimagem. Além disso, o SPS pode sinalizar se cada subimagem é uma subimagem com restrição de movimento (contendo a funcionalidade de um MCTS). As informações de perfil, tier e nível para cada subimagem também podem ser sinalizadas ou deriváveis no decodificador. Tais informações podem ser empregadas para determinar informações de perfil, tier e nível para um fluxo de bits criado extraindo-se subimagens do fluxo de bits original. O perfil e tier de cada subimagem podem ser derivados para serem iguais ao perfil e tier de todo o fluxo de bits. O nível para cada subimagem pode ser sinalizado de maneira explícita. Tal sinalização pode estar presente no loop contido no SPS. Os parâmetros de decodificador de referência hipotética de nível de sequência (HRD) podem ser sinalizados na seção de informações de usabilidade de vídeo (VUI) do SPS para cada subimagem (ou de modo equivalente, cada sequência de subimagem).
[0117] Quando uma imagem não é particionada em duas ou mais subimagens, as propriedades da subimagem (por exemplo, localização, tamanho, etc.), exceto o ID de subimagem, podem não estar presentes / sinalizadas no fluxo de bits. Quando uma subimagem de imagens em uma CVS é extraída, cada unidade de acesso no novo fluxo de bits pode não conter subimagens. Neste caso, a imagem em cada AU no novo fluxo de bits não é particionada em múltiplas subimagens. Desse modo, não há necessidade de sinalizar propriedades de subimagem, tais como localização e tamanho no SPS, visto que tais informações podem ser derivadas das propriedades de imagem. Entretanto, a identificação de subimagem ainda pode ser sinalizada visto que o ID pode ser referido por unidades de VCL NAL / grupos de tiles que são incluídos na subimagem extraída. Isso pode permitir que os IDs de subimagem permaneçam o mesmo ao extrair a subimagem.
[0118] A localização de uma subimagem na imagem (deslocamento x e deslocamento y) pode ser sinalizada em unidades de amostras de luma. A localização representa a distância entre a amostra de luma de canto esquerdo- superior da subimagem e amostra de luma de canto esquerdo-superior da imagem. Alternativamente, a localização de uma subimagem na imagem pode ser sinalizada em unidades do tamanho de bloco de luma de codificação mínimo (MinCbSizeY). Alternativamente, a unidade de deslocamentos de localização de subimagem pode ser indicada de maneira explícita por um elemento de sintaxe em um conjunto de parâmetros. A unidade pode ser CtbSizeY, MinCbSizeY, amostra de luma ou outros valores.
[0119] O tamanho de uma subimagem (largura de subimagem e altura de subimagem) pode ser sinalizado em unidades de amostras de luma. De modo alternativo, o tamanho de uma subimagem pode ser sinalizado em unidades do tamanho de bloco de luma de codificação mínimo (MinCbSizeY). De modo alternativo, a unidade de valores tamanho de subimagem pode ser explicitamente indicada por um elemento de sintaxe em um conjunto de parâmetros. A unidade pode ser CtbSizeY, MinCbSizeY, amostra de luma ou outros valores. Quando a borda direita de uma subimagem não coincidir com a borda direita de imagem, pode-se exigir que a largura da subimagem seja um número inteiro múltiplo de tamanho de CTU de luma (CtbSizeY). Da mesma forma, quando a borda inferior da subimagem não coincidir com a borda inferior de imagem, pode-se exigir que a altura da subimagem seja um número inteiro múltiplo de tamanho de CTU de luma (CtbSizeY). Se a largura de uma subimagem não for um número inteiro múltiplo de tamanho de CTU de luma, pode-se exigir que a subimagem seja localizado em uma posição mais à direita na imagem. Da mesma forma, se a altura de uma subimagem não for um número inteiro múltiplo de tamanho de CTU de luma, pode-se exigir que a subimagem seja localizada em uma posição mais abaixo na imagem. Em alguns casos, a largura de uma subimagem pode ser sinalizada em unidades de tamanho de CTU de luma, mas a largura de uma subimagem não é um número inteiro múltiplo de tamanho de CTU de luma. Neste caso, a largura real em amostras de luma pode ser derivada com base na localização de deslocamento de subimagem. A largura da subimagem pode ser derivada com base em tamanho de CTU de luma e a altura da imagem pode ser derivada com base em amostras de luma. Da mesma forma, a altura de uma subimagem pode ser sinalizada em unidades de tamanho de CTU de luma, mas a altura da subimagem não é um número inteiro múltiplo de tamanho de CTU de luma. Em tal caso, a altura real em amostra de luma pode ser derivada com base na localização de deslocamento de subimagem. A altura da subimagem pode ser derivada com base em tamanho de CTU de luma e a altura da imagem pode ser derivada com base em amostras de luma.
[0120] Para qualquer subimagem, o ID de subimagem pode ser diferente do índice de subimagem. O índice de subimagem pode ser o índice da subimagem conforme sinalizado em um loop de subimagens no SPS. O ID de subimagem pode ser o índice da subimagem em ordem de varredura raster de subimagem na imagem. Quando o valor do ID de subimagem de cada subimagem for igual ao índice de subimagem, o ID de subimagem pode ser sinalizado ou derivado. Quando o ID de subimagem de cada subimagem for diferente do índice de subimagem, o ID de subimagem é explicitamente sinalizado. O número de bits para sinalização de IDs de subimagem pode ser sinalizado no mesmo conjunto de parâmetros que contém propriedades de subimagem (por exemplo, no SPS). Alguns valores para ID de subimagem podem ser reservados para certas finalidades. Por exemplo, quando cabeçalhos de grupo de tiles contiverem IDs de subimagem para especificar qual subimagem contém um grupo de tiles, o valor zero pode ser reservado e não usado para subimagens para garantir que os primeiros bits de um cabeçalho de grupo de tiles não sejam todos zeros para evitar inclusão acidental de um código de prevenção de emulação. Em casos opcionais em que subimagens de uma imagem não cobrem toda a área da imagem sem gap e sem sobreposição, um valor (por exemplo, valor um) pode ser reservado para grupos de tiles que não são parte de qualquer subimagem. Alternativamente, o ID de subimagem da área remanescente é sinalizado de maneira explícita. O número de bits para sinalização de ID de subimagem pode ser restrito da maneira a seguir. A faixa de valor deve ser suficiente para identificar exclusivamente todas as subimagens em uma imagem, incluindo os valores reservados de ID de subimagem. Por exemplo, o número mínimo de bits para ID de subimagem pode ser o valor de Ceil( Log2( número de subimagens em uma imagem + número de ID de subimagem reservado ).
[0121] Pode-se restringir que a união de subimagens precisa cobrir toda a imagem sem gap e sem sobreposição. Quando essa restrição é aplicada, para cada subimagem, uma flag pode estar presente para especificar se a subimagem é uma subimagem com restrição de movimento, que indica que a subimagem pode ser extraída. Alternativamente, a união de subimagens pode não cobrir toda a imagem, mas sobreposições podem não ser permitidas.
[0122] Os IDs de subimagem podem estar presentes imediatamente após o cabeçalho de unidade de NAL para auxiliar o processo de extração de subimagem sem exigir que o extrator analise o restante dos bits de unidade de NAL. Para unidades de VCL NAL, o ID de subimagem pode estar presente nos primeiros bits de cabeçalhos de grupo de tiles. Para unidade não-VCL NAL, o conteúdo a seguir pode se aplicar. Para SPS, o ID de subimagem não precisa estar presente imediatamente após o cabeçalho de unidade de NAL. Para PPS, se todos os grupos de tiles da mesma imagem forem restritos para se referir ao mesmo PPS, o ID de subimagem não precisa estar presente imediatamente após seu cabeçalho de unidade de NAL. Se for permitido que grupos de tiles da mesma imagem se refiram a diferentes PPSs, o ID de subimagem pode estar presente nos primeiros bits de PPS (por exemplo, imediatamente após o cabeçalho de unidade de NAL). Nesse caso, pode-se permitir que quaisquer grupos de tiles de uma imagem compartilhem o mesmo PPS. Alternativamente, quando é permitido que grupos de tiles da mesma imagem se refiram a diferentes PPSs, e quando também é permitido que diferentes grupos de tiles da mesma imagem compartilhem o mesmo PPS, nenhum ID de subimagem pode estar presente na sintaxe de PPS. Alternativamente, quando é permitido que grupos de tiles da mesma imagem se refiram a diferentes PPSs, e quando também é permitido que diferentes grupos de tiles da mesma imagem compartilhem o mesmo PPS, uma lista de IDs de subimagem pode estar presente na sintaxe de PPS. A lista indica as subimagens às quais o PPS se aplica. Para outras unidades não-VCL NAL, se a unidade não-VCL se aplicar ao nível de imagem ou acima (por exemplo, delimitador de unidade de acesso, fim de sequência, fim de fluxo de bits, etc.), então, o ID de subimagem pode não estar presente imediatamente após o cabeçalho de unidade de NAL. De outro modo, o ID de subimagem pode estar presente imediatamente após o cabeçalho de unidade NAL.
[0123] Com a sinalização de SPS acima, o particionamento de tile dentro de subimagens individuais pode ser sinalizado no PPS. Pode-se permitir que os grupos de tiles dentro da mesma imagem se refiram a diferentes PPSs. Neste caso, o agrupamento de tile só pode estar dentro de cada subimagem. O conceito de agrupamento de tile é particionamento de uma subimagem em tiles.
[0124] Alternativamente, um conjunto de parâmetros para descrever o particionamento de tile dentro de subimagens individuais é definido. Tal conjunto de parâmetros pode ser denominado Conjunto de Parâmetros de Subimagem (SPPS). O SPPS se refere a SPS. Um elemento de sintaxe que se refere ao SPS ID está presente em SPPS. O SPPS pode conter um ID de subimagem. Para fins de extração de subimagem, o elemento de sintaxe que se refere ao ID de subimagem é o primeiro elemento de sintaxe em SPPS. O SPPS contém uma estrutura de tile (por exemplo, um número de colunas, um número de linhas, espaçamento de tile uniforme, etc.) O SPPS pode conter uma flag para indicar se um filtro loop é ou não habilitado através de delimitações de subimagem associadas. Alternativamente, as propriedades de subimagem para cada subimagem podem ser sinalizadas no SPPS em vez de no SPS. O particionamento de tile dentro de subimagens individuais ainda pode ser sinalizado no PPS. É permitido que os grupos de tiles dentro da mesma imagem se refiram a diferentes PPSs. Uma vez que um SPPS é ativado, o SPPS permanece por uma sequência de AUs consecutivas em ordem de decodificação. Entretanto, o SPPS pode ser desativado/ativado em uma AU que não é o início de uma CVS. Em qualquer momento durante o processo de decodificação de um fluxo de bits de camada única com múltiplas subimagens em algumas AUs, múltiplos SPPSs podem estar ativos. Um SPPS pode ser compartilhado por diferentes subimagens de uma AU. Alternativamente, SPPS e PPS podem ser fundidos em um conjunto de parâmetros. Em tal caso, pode não ser exigido que todos os grupos de tiles da mesma imagem se refiram ao mesmo PPS. Uma restrição pode ser aplicada tal que todos os grupos de tiles na mesma subimagem possam se referir ao mesmo conjunto de parâmetros que resulta da fusão entre SPPS e PPS.
[0125] O número de bits usado para sinalização de ID de subimagem pode ser sinalizado em um cabeçalho de unidade NAL. Quando presente em um cabeçalho de unidade de NAL, tais informações podem auxiliar processos de extração de subimagem na análise de valor de ID de subimagem no início de uma carga útil de unidade de NAL (por exemplo, os primeiros bits imediatamente após cabeçalho de unidade de NAL). Para tal sinalização, alguns dos bits reservados (por exemplo, sete bits reservados) em um cabeçalho de unidade de NAL podem ser usados para evitar o aumento do comprimento de cabeçalho de unidade NAL. O número de bits para tal sinalização pode cobrir o valor de sub-picture-ID-bit-len. Por exemplo, quatro bits dentre sete bits reservados de um cabeçalho de unidade VVCs NAL podem ser usados para esta finalidade.
[0126] Ao decodificar uma subimagem, a localização de cada boco de árvore de codificação (por exemplo, xCtb e yCtb) pode ser ajustada para uma localização de amostra de luma real na imagem em vez de uma localização de amostra de luma na subimagem. Desse modo, a extração de uma subimagem colocalizada a partir de cada imagem de referência pode ser evitada visto que o boco de árvore de codificação é decodificado com referência à imagem em vez da subimagem. Para ajustar a localização de um boco de árvore de codificação, as variáveis SubpictureXOffset e SubpictureYOffset podem ser derivadas com base na posição de subimagem (subpic_x_offset e subpic_y_offset). Os valores das variáveis podem ser adicionados aos valores das coordenadas x e y de localização de amostra de luma, respectivamente, de cada boco de árvore de codificação na subimagem.
[0127] Um processo de extração de subimagem pode ser definido da maneira a seguir. A entrada para o processo é a subimagem alvo a ser extraída. Isso pode ser na forma de ID de subimagem ou localização de subimagem. Quando a entrada for uma localização de subimagem, o ID de subimagem associado pode ser solucionado analisando-se as informações de subimagem no SPS. Para unidades não VCL NAL, o conteúdo a seguir se aplica. Os elementos de sintaxe no SPS relacionado a tamanho e nível de imagem podem ser atualizados com as informações de tamanho e nível de subimagem. As seguintes unidades não VCL NAL são mantidas sem mudança: PPS, Delimitador de Unidade de Acesso (AUD), Fim de Sequência (EOS), Fim de Fluxo de bits (EOB) e quaisquer outras unidades não VCL NAL que são aplicáveis a nível de imagem ou acima. As unidades não-VCL NAL remanescentes com ID de subimagem diferente do ID de subimagem alvo podem ser removidas. As unidades VCL NAL com ID de subimagem diferente do ID de subimagem alvo também podem ser removidas.
[0128] Uma mensagem de SEI que aninha subimagem de nível de sequência pode ser usada para aninhamento de mensagens de SEI de nível de AU ou nível de subimagem para um conjunto de subimagens. Isso pode incluir um período de buffering, temporização de imagem e mensagens de SEI não-HRD. A sintaxe e semântica dessa mensagem de SEI que aninha subimagem podem ser da maneira a seguir. Para operações de sistemas, tais como em ambientes de formato de mídia omnidirecional (OMAF), um conjunto de sequências de subimagem que cobre um visor pode ser solicitado e decodificado pelo reprodutor de OMAF. Portanto, a mensagem de SEI de nível de sequência é usada para portar informações de um conjunto de sequências de subimagem que cobrem coletivamente uma região de imagem retangular. As informações podem ser usadas por sistemas, e as informações são indicativas da capacidade de decodificação necessária bem como da taxa de bits do conjunto de sequências de subimagem. As informações indicam o nível do fluxo de bits incluindo apenas o conjunto de sequências de subimagem. Essas informações também indicam a taxa de bit do fluxo de bits contendo apenas o conjunto de sequências de subimagem. De modo opcional, um processo de extração de subfluxo de bits pode ser especificado para um conjunto de sequências de subimagem. O benefício disso é que o fluxo de bits incluindo apenas um conjunto de sequências de subimagem também pode estar em conformidade. Uma desvantagem é que, ao considerar diferentes possibilidades de tamanho de visor, pode haver muitos tais conjuntos além dos possíveis números já grandes de sequências de subimagem individuais.
[0129] Em uma modalidade exemplificativa, um ou mais dentre os exemplos revelados podem ser implementados da maneira a seguir. Uma subimagem pode ser definida como uma região retangular de um ou mais grupos de tiles dentro de uma imagem. Um processo de repartição binária permitido pode ser definido da maneira a seguir. As entradas para esse processo são: um modo de repartição binária btSplit, uma largura de bloco de codificação cbWidth, uma altura de bloco de codificação cbHeight, uma localização ( x0, y0 ) da amostra de luma esquerda-superior do bloco de codificação considerado em relação à amostra de luma esquerda-superior da imagem, uma profundidade de árvore de múltiplos tipos mttDepth, uma profundidade máxima de árvore de múltiplos tipos com deslocamento maxMttDepth, um tamanho máximo de árvore binária maxBtSize e um índice de partição partIdx. A saída desse processo é a variável allowBtSplit.
[0130] As variáveis parallelTtSplit e cbSize são derivadas conforme especificado acima. A variável allowBtSplit é derivada da maneira a seguir. Se uma ou mais dentre as condições a seguir forem verdadeiras, allowBtSplit é definido como igual a FALSE: cbSize é menor do que ou igual a MinBtSizeY, cbWidth é maior do que maxBtSize, cbHeight é maior do que maxBtSize, e mttDepth é maior do que ou igual a maxMttDepth. De outro modo, se todas dentre as condições a seguir forem verdadeiras, allowBtSplit é definido como igual a FALSE: btSplit é igual a SPLIT_BT_VER, e y0 + cbHeight é maior do que SubPicBottomBorderInPic. De outro modo, se todas dentre as condições a seguir forem verdadeiras, allowBtSplit é definido como igual a FALSE, btSplit é igual a SPLIT_BT_HOR, x0 + cbWidth é maior do que SubPicRightBorderInPic, e y0 + cbHeight é menor do que ou igual a SubPicBottomBorderInPic. De outro modo, se todas dentre as condições a seguir forem verdadeiras, allowBtSplit é definido como igual a FALSE: mttDepth é maior do que zero, partIdx é igual a um, e MttSplitMode[ x0 ][ y0 ][ mttDepth - 1 ] é igual a parallelTtSplit. De outro modo, se todas dentre as condições a seguir forem verdadeiras, allowBtSplit é definido como igual a FALSE: btSplit é igual a SPLIT_BT_VER, cbWidth é menor do que ou igual a MaxTbSizeY, e cbHeight é maior do que MaxTbSizeY. De outro modo, se todas dentre as condições a seguir forem verdadeiras, allowBtSplit é definido como igual a FALSE: btSplit é igual a SPLIT_BT_HOR, cbWidth é maior do que MaxTbSizeY e cbHeight é menor do que ou igual a MaxTbSizeY. De outro modo, allowBtSplit é definido como igual a TRUE.
[0131] Um processo de repartição ternária permitido pode ser definido da maneira a seguir. Entradas para esse processo são: um modo de repartição ternária ttSplit, uma largura de bloco de codificação cbWidth, uma altura de bloco de codificação cbHeight, uma localização ( x0, y0 ) da amostra de luma esquerda- superior do bloco de codificação considerado em relação à amostra de luma esquerda-superior da imagem, uma profundidade de árvore de múltiplos tipos mttDepth, uma profundidade máxima de árvore de múltiplos tipos com deslocamento maxMttDepth, e um tamanho máximo de árvore binária maxTtSize. A saída desse processo é a variável allowTtSplit.
[0132] A variável cbSize é derivada conforme especificado acima. A variável allowTtSplit é derivada do modo a seguir. Se uma ou mais dentre as condições a seguir forem verdadeiras, allowTtSplit é definido como igual a FALSE: cbSize é menor do que ou igual a 2 * MinTtSizeY, cbWidth é maior do que Min( MaxTbSizeY, maxTtSize ), cbHeight é maior do que Min( MaxTbSizeY, maxTtSize ), mttDepth é maior do que ou igual a maxMttDepth, x0 + cbWidth é maior do que SubPicRightBorderInPic, e y0 + cbHeight é maior do que SubPicBottomBorderInPic. De outro modo, allowTtSplit é definido como igual a TRUE.
[0133] A sintaxe e semântica de RBSP de conjunto de parâmetros de sequência são da maneira a seguir.
[0134] A pic_width_in_luma_samples especifica a largura de cada imagem decodificada em unidades de amostras de luma. pic_width_in_luma_samples não deve ser igual a zero e deve ser um número inteiro múltiplo de MinCbSizeY. A pic_height_in_luma_samples especifica a altura de cada imagem decodificada em unidades de amostras de luma. pic_height_in_luma_samples não deve ser igual a zero e deve ser um número inteiro múltiplo de MinCbSizeY. A num_subpicture_minus1 mais 1 especifica que o número de subimagens particionadas em imagens codificadas pertence à sequência de vídeo codificada. A subpic_id_len_minus1 mais 1 especifica o número de bits usado para representar o elemento de sintaxe subpic_id[ i ] em SPS, spps_subpic_id em SPPS que se refere ao SPS e tile_group_subpic_id em cabeçalhos de grupo de tiles que se referem ao SPS. O valor de subpic_id_len_minus1 deve estar na faixa de Ceil( Log2( num_subpic_minus1 + 2 ) a oito, inclusive. O subpic_id[ i ] especifica o ID de subimagem da i-ésima subimagem de imagens que se referem ao SPS. O comprimento de subpic_id[ i ] é subpic_id_len_minus1 + 1 bits. O valor de subpic_id[i] deve ser maior do que zero. O subpic_level_idc[ i ] indica um nível ao qual a CVS que resultou de extração das i-ésimas subimagens se conforma com as exigências de recurso especificadas. Os fluxos de bits não devem conter valores de subpic_level_idc[ i ] diferentes daqueles especificados. Outros valores de subpic_level_idc[ i ] são reservados. Quando não presente, infere-se que o valor de subpic_level_idc[ i ] seja igual ao valor de general_level_idc.
[0135] O subpic_x_offset[ i ] especifica o deslocamento horizontal do canto esquerdo-superior da i-ésima subimagem em relação ao canto esquerdo- superior da imagem. Quando não presente, infere-se que o valor de subpic_x_offset[ i ] seja igual a 0. O valor de deslocamento de x de subimagem é derivado da seguinte maneira: SubpictureXOffset[ i ] = subpic_x_offset[ i ]. O subpic_y_offset[ i ] especifica o deslocamento vertical do canto esquerdo-superior da i-ésima subimagem em relação ao canto esquerdo-superior da imagem. Quando não presente, infere-se que o valor de subpic_y_offset[ i ] seja igual a zero. O valor de deslocamento y de subimagem é derivado da seguinte maneira: SubpictureYOffset[ i ] = subpic_y_offset[ i ]. A subpic_width_in_luma_samples[ i ] especifica a largura da i-ésima subimagem decodificada para a qual esse SPS é o SPS ativo. Quando a soma de SubpictureXOffset[ i ] e subpic_width_in_luma_samples[ i ] for menor do que pic_width_in_luma_samples, o valor de subpic_width_in_luma_samples[ i ] deve ser um número inteiro múltiplo de CtbSizeY. Quando não presente, infere-se que o valor de subpic_width_in_luma_samples[ i ] seja igual ao valor de pic_width_in_luma_samples. A subpic_height_in_luma_samples[ i ] especifica a altura da i-ésima subimagem decodificada para a qual esse SPS é o SPS ativo. Quando a soma de SubpictureYOffset[ i ] e subpic_height_in_luma_samples[ i ] for menor do que pic_height_in_luma_samples, o valor de subpic_height_in_luma_samples[ i ] deve ser um número inteiro múltiplo de CtbSizeY. Quando não presente, infere-se que o valor de subpic_height_in_luma_samples[ i ] seja igual ao valor de pic_height_in_luma_samples.
[0136] É uma exigência de conformidade de fluxo de bits que a união de subimagens deva cobrir toda a área de uma imagem sem sobreposição e gap. A subpic_motion_constrained_flag[ i ] igual a um especifica que a i-ésima subimagem é uma subimagem com restrição de movimento temporal. A subpic_motion_constrained_flag[ i ] igual a zero especifica que a i-ésima subimagem pode ou não ser uma subimagem com restrição de movimento temporal. Quando não presente, infere-se que o valor de subpic_motion_constrained_flag seja igual a zero.
[0137] As variáveis SubpicWidthInCtbsY, SubpicHeightInCtbsY, SubpicSizeInCtbsY, SubpicWidthInMinCbsY, SubpicHeightInMinCbsY, SubpicSizeInMinCbsY, SubpicSizeInSamplesY, SubpicWidthInSamplesC e SubpicHeightInSamplesC são derivadas da seguinte maneira:
[0138] A sintaxe e semântica de RBSP de conjunto de parâmetros de subimagem são da maneira a seguir.
[0139] O spps_subpic_id identifica a subimagem a qual o SPPS pertence. O comprimento de spps_subpic_id é subpic_id_len_minus1 + 1 bits. O spps_subpic_parameter_set_id identifica o SPPS para referência por outros elementos de sintaxe. O valor de spps_subpic_parameter_set_id deve estar na faixa de zero a sessenta e três, inclusive. O spps_seq_parameter_set_id especifica o valor de sps_seq_parameter_set_id para o SPS ativo. O valor de spps_seq_parameter_set_id deve estar na faixa de zero a quinze, inclusive. O single_tile_in_subpic_flag igual a um especifica que há apenas um tile em cada subimagem que se refere ao SPPS. A single_tile_in_subpic_flag igual a zero especifica que há mais de um tile em cada subimagem que se refere ao SPPS. A num_tile_columns_minus1 mais 1 especifica o número de colunas de tile que particiona a subimagem. O num_tile_columns_minus1 deve estar na faixa de zero a PicWidthInCtbsY[ spps_subpic_id ] - 1, inclusive. Quando não presente, infere- se que o valor de num_tile_columns_minus1 seja igual a zero. A num_tile_rows_minus1 mais 1 especifica o número de linhas de tile que particiona a subimagem. A num_tile_rows_minus1 deve estar na faixa de zero a PicHeightInCtbsY[ spps_subpic_id ] - 1, inclusive. Quando não presente, infere- se que o valor de num_tile_rows_minus1 seja igual a zero. A variável NumTilesInPic é definida como igual a ( num_tile_columns_minus1 + 1 ) * ( num_tile_rows_minus1 + 1 ).
[0140] Quando single_tile_in_subpic_flag é igual a zero, NumTilesInPic deve ser maior do que zero. O uniform_tile_spacing_flag igual a um especifica que delimitações de coluna de tile e, da mesma forma, delimitações de linha de tile são distribuídas de maneira uniforme através da subimagem. O uniform_tile_spacing_flag igual a zero especifica que delimitações de coluna de tile e, da mesma forma, delimitações de linha de tile não são distribuídas de maneira uniforme através da subimagem, mas sinalizadas explicitamente usando os elementos de sintaxe tile_column_width_minus1[ i ] e tile_row_height_minus1[ i ]. Quando não presente, infere-se que o valor de uniform_tile_spacing_flag seja igual a um. O tile_column_width_minus1[ i ] mais 1 especifica a largura da i-ésima coluna de tile em unidades de CTBs. O tile_row_height_minus1[ i ] mais 1 especifica a altura da i-ésima linha de tile em unidades de CTBs.
[0141] As variáveis a seguir são derivadas invocando-se o processo de conversão de varredura tile e raster de CTB: a lista ColWidth[ i ] para i na faixa de zero a num_tile_columns_minus1, inclusive, que especifica a largura da i-ésima coluna de tile em unidades de CTBs; a lista RowHeight[ j ] para j na faixa de zero a num_tile_rows_minus1, inclusive, que especifica a altura da j-ésima linha de tile em unidades de CTBs; a lista ColBd[ i ] para i na faixa de zero a num_tile_columns_minus1 + 1, inclusive, que especifica a localização da i-ésima delimitação de coluna de tile em unidades de CTBs; a lista RowBd[ j ] para j na faixa de zero a num_tile_rows_minus1 + 1, inclusive, que especifica a localização da j-ésima delimitação de linha de tile em unidades de CTBs; a lista CtbAddrRsToTs[ ctbAddrRs ] para ctbAddrRs na faixa de zero a PicSizeInCtbsY - 1, inclusive, que especifica a conversão de um endereço de CTB na varredura raster de CTB de uma imagem para um endereço de CTB na varredura tile; a lista CtbAddrTsToRs[ ctbAddrTs ] para ctbAddrTs na faixa de zero a PicSizeInCtbsY - 1, inclusive, que especifica a conversão de um endereço de CTB na varredura tile para um endereço de CTB na varredura raster de CTB de uma imagem; a lista TileId[ ctbAddrTs ] para ctbAddrTs na faixa de zero a PicSizeInCtbsY - 1, inclusive, que especifica a conversão de um endereço de CTB em varredura tile para um ID de tile; a lista NumCtusInTile[ tileIdx ] para tileIdx na faixa de zero a PicSizeInCtbsY - 1, inclusive, que especifica a conversão de um índice de tile para o número de CTUs no tile; a lista FirstCtbAddrTs[ tileIdx ] para tileIdx na faixa de zero a NumTilesInPic - 1, inclusive, que especifica a conversão de um ID de tile para o endereço de CTB em varredura tile do primeiro CTB no tile; a lista ColumnWidthInLumaSamples[ i ] para i na faixa de zero a num_tile_columns_minus1, inclusive, que especifica a largura da i-ésima coluna de tile em unidades de amostras de luma; e a lista RowHeightInLumaSamples[ j ] para j na faixa de zero a num_tile_rows_minus1, inclusive, que especifica a altura da j-ésima linha de tile em unidades de amostras de luma. Os valores de ColumnWidthInLumaSamples[ i ] para i na faixa de zero a num_tile_columns_minus1, inclusive, e RowHeightInLumaSamples[ j ] para j na faixa de zero a num_tile_rows_minus1, inclusive, devem ser todos maiores do que zero.
[0142] A loop_filter_across_tiles_enabled_flag igual a um especifica que operações de filtragem in-loop podem ser realizadas através de delimitações de tile em subimagens que se referem ao SPPS. A loop_filter_across_tiles_enabled_flag igual a zero especifica que operações de filtragem in-loop não são realizadas através de delimitações de tile em subimagens que se referem ao SPPS. As operações de filtragem in-loop incluem as operações de filtro de desblocagem, filtro de deslocamento adaptativo de amostra e filtro loop adaptativo. Quando não presente, infere-se que o valor de loop_filter_across_tiles_enabled_flag seja igual a um. A loop_filter_across_subpic_enabled_flag igual a um especifica que operações de filtragem in-loop podem ser realizadas através de delimitações de subimagem em subimagens que se referem ao SPPS. A loop_filter_across_subpic_enabled_flag igual a zero especifica que operações de filtragem in-loop não são realizadas através de delimitações de subimagem em subimagens que se referem ao SPPS. As operações de filtragem in-loop incluem as operações de filtro de desblocagem, filtro de deslocamento adaptativo de amostra e filtro loop adaptativo. Quando não presente, infere-se que o valor de loop_filter_across_subpic_enabled_flag seja igual ao valor de loop_filter_across_tiles_enabled_flag.
[0143] A sintaxe e semântica de cabeçalho de grupo de tiles gerais são da maneira a seguir.
[0144] O valor do elemento de sintaxe de cabeçalho de grupo de tiles tile_group_pic_parameter_set_id e tile_group_pic_order_cnt_lsb deve ser o mesmo em todos os cabeçalhos de grupo de tiles de uma imagem codificada. O valor do elemento de sintaxe de cabeçalho de grupo de tiles tile_group_subpic_id deve ser o mesmo em todos os cabeçalhos de grupo de tiles de uma subimagem codificada. O tile_group_subpic_id identifica a subimagem a qual o grupo de tiles pertence. O comprimento de tile_group_subpic_id é subpic_id_len_minus1 + 1 bits. O tile_group_subpic_parameter_set_id especifica o valor de spps_subpic_parameter_set_id para o SPPS em uso. O valor de tile_group_spps_parameter_set_id deve estar na faixa de zero a sessenta e três, inclusive.
[0145] As seguintes variáveis são derivadas e substituem as respectivas variáveis derivadas do SPS ativo:
[0146] A sintaxe de unidade de árvore de codificação é da maneira a seguir.
[0147] A sintaxe e semântica de quadtree de codificação são da maneira a seguir.
[0148] O qt_split_cu_flag[ x0 ][ y0 ] especifica se uma unidade de codificação é repartida em unidades de codificação com metade de tamanho horizontal e vertical. Os índices de arranjo x0, y0 especificam a localização ( x0, y0 ) da amostra de luma esquerda-superior do bloco de codificação considerado em relação à amostra de luma esquerda-superior da imagem. Quando qt_split_cu_flag[ x0 ][ y0 ] não estiver presente, o seguinte se aplica: Se uma ou mais dentre as condições a seguir forem verdadeiras, infere-se que o valor de qt_split_cu_flag[ x0 ][ y0 ] seja igual a um. x0 + ( 1 << log2CbSize ) é maior do que SubPicRightBorderInPic e ( 1 << log2CbSize ) é maior do que MaxBtSizeC se treeType for igual a DUAL_TREE_CHROMA ou maior do que MaxBtSizeY de outro modo. y0 + ( 1 << log2CbSize ) é maior do que SubPicBottomBorderInPic e ( 1 << log2CbSize ) é maior do que MaxBtSizeC se treeType for igual a DUAL_TREE_CHROMA ou maior do que MaxBtSizeY de outro modo.
[0149] De outro modo, se todas dentre as condições a seguir forem verdadeiras, infere-se que o valor de qt_split_cu_flag[ x0 ][ y0 ] seja igual a 1: x0 + ( 1 << log2CbSize ) é maior do que SubPicRightBorderInPic, y0 + ( 1 << log2CbSize ) é maior do que SubPicBottomBorderInPic, e ( 1 << log2CbSize ) é maior do que MinQtSizeC se treeType for igual a DUAL_TREE_CHROMA ou maior do que MinQtSizeY de outro modo. De outro modo, infere-se que o valor de qt_split_cu_flag[ x0 ][ y0 ] seja igual a zero.
[0150] A sintaxe e semântica de árvore de múltiplos tipos são da maneira a seguir.
[0151] O mtt_split_cu_flag igual a zero especifica que uma unidade de codificação não é repartida. O mtt_split_cu_flag igual a um especifica que uma unidade de codificação é repartida em duas unidades de codificação usando uma repartição binária ou em três unidades de codificação usando uma repartição ternária, conforme indicado pelo elemento de sintaxe mtt_split_cu_binary_flag. A repartição binária ou ternária pode ser vertical ou horizontal, conforme indicado pelo elemento de sintaxe mtt_split_cu_vertical_flag. Quando mtt_split_cu_flag não está presente, infere-se que o valor de mtt_split_cu_flag seja da maneira a seguir. Se uma ou mais dentre as condições a seguir forem verdadeiras, infere-se que o valor de mtt_split_cu_flag seja igual a 1: x0 + cbWidth é maior do que SubPicRightBorderInPic, e y0 + cbHeight é maior do que SubPicBottomBorderInPic. De outro modo, infere-se que o valor de mtt_split_cu_flag seja igual a zero.
[0152] O processo de derivação para predição de vetor de movimento de luma temporal é da maneira a seguir. As saídas desse processo são: a predição de vetor de movimento mvLXCol em acurácia de amostra fracionada de 1/16, e a flag de disponibilidade availableFlagLXCol. A variável currCb especifica o bloco de codificação de luma atual em localização de luma ( xCb, yCb ). As variáveis mvLXCol e availableFlagLXCol são derivadas da maneira a seguir. Se tile_group_temporal_mvp_enabled_flag for igual a zero, ou se a imagem de referência for a imagem atual, ambos os componentes de mvLXCol são definidos como iguais a zero e availableFlagLXCol é definido como igual a zero. De outro modo, (tile_group_temporal_mvp_enabled_flag é igual a um e a imagem de referência não é a imagem atual), as etapas ordenadas a seguir se aplicam. O vetor de movimento colocalizado direito inferior é derivado da seguinte maneira:
[0153] Se yCb >> CtbLog2SizeY for igual a yColBr >> CtbLog2SizeY, yColBr for menor do que SubPicBottomBorderInPic e xColBr for menor do que SubPicRightBorderInPic, o conteúdo a seguir se aplica. A variável colCb especifica o bloco de codificação de luma que cobre a localização modificada fornecida por ( ( xColBr >> 3 ) << 3, ( yColBr >> 3 ) << 3 ) dentro da imagem colocalizada especificada por ColPic. A localização de luma ( xColCb, yColCb ) é definida como igual à amostra esquerda-superior do bloco de codificação de luma colocalizado especificado por colCb em relação à amostra de luma esquerda-superior da imagem colocalizada especificada por ColPic. O processo de derivação para vetores de movimento colocalizados é invocado com currCb, colCb, ( xColCb, yColCb ), refIdxLX e sbFlag definidos como iguais a zero como entradas, e a saída é atribuída a mvLXCol e availableFlagLXCol. De outro modo, ambos os componentes de mvLXCol são definidos como iguais a zero e availableFlagLXCol é definido como igual a zero.
[0154] O processo de derivação para candidatos de fusão de triângulo temporais é da maneira a seguir. As variáveis mvLXColC0, mvLXColC1, availableFlagLXColC0 e availableFlagLXColC1 são derivadas da maneira a seguir. Se tile_group_temporal_mvp_enabled_flag for igual a zero, ambos os componentes de mvLXColC0 e mvLXColC1 são definidos como iguais a zero e availableFlagLXColC0 e availableFlagLXColC1 são definidos como iguais a zero. De outro modo, (tile_group_temporal_mvp_enabled_flag é igual a 1), as etapas ordenadas a seguir se aplicam. O vetor de movimento colocalizado direito inferior mvLXColC0 é derivado da seguinte maneira:
[0155] Se yCb >> CtbLog2SizeY for igual a yColBr >> CtbLog2SizeY, yColBr for menor do que SubPicBottomBorderInPic e xColBr for menor do que SubPicRightBorderInPic, o conteúdo a seguir se aplica. A variável colCb especifica o bloco de codificação de luma que cobre a localização modificada fornecida por ( ( xColBr >> 3 ) << 3, ( yColBr >> 3 ) << 3 ) dentro da imagem colocalizada especificada por ColPic. A localização de luma ( xColCb, yColCb ) é definida como igual à amostra esquerda-superior do bloco de codificação de luma colocalizado especificado por colCb em relação à amostra de luma esquerda-superior da imagem colocalizada especificada por ColPic. O processo de derivação para vetores de movimento colocalizados é invocado com currCb, colCb, ( xColCb, yColCb ), refIdxLXC0 e sbFlag definidos como iguais a zero como entradas, e a saída é atribuída a mvLXColC0 e availableFlagLXColC0. De outro modo, ambos os componentes de mvLXColC0 são definidos como iguais a zero e availableFlagLXColC0 é definido como igual a zero.
[0156] O processo de derivação para candidatos de fusão de vetor de movimento de ponto de controle afim construídos é da maneira a seguir. O quarto vetor de movimento de ponto de controle (colocalizado direito-inferior) cpMvLXCorner[ 3 ], índice de referência refIdxLXCorner[ 3 ], flag de utilização de lista de predição predFlagLXCorner[ 3 ] e a flag de disponibilidade availableFlagCorner[ 3 ] com X sendo 0 e 1 são derivados da maneira a seguir. Os índices de referência para o candidato de fusão temporal, refIdxLXCorner[ 3 ], com X sendo zero ou um, são definidos como iguais a zero. As variáveis mvLXCol e availableFlagLXCol, com X sendo zero ou um, são derivadas da maneira a seguir. Se tile_group_temporal_mvp_enabled_flag for igual a zero, ambos os componentes de mvLXCol são definidos como iguais a zero e availableFlagLXCol é definido como igual a zero. De outro modo (tile_group_temporal_mvp_enabled_flag é igual a um), o seguinte se aplica:
[0157] Se yCb >> CtbLog2SizeY for igual a yColBr >> CtbLog2SizeY, yColBr for menor do que SubPicBottomBorderInPic e xColBr for menor do que SubPicRightBorderInPic, o conteúdo a seguir se aplica. A variável colCb especifica o bloco de codificação de luma que cobre a localização modificada fornecida por ( ( xColBr >> 3 ) << 3, ( yColBr >> 3 ) << 3 ) dentro da imagem colocalizada especificada por ColPic. A localização de luma ( xColCb, yColCb ) é definida como igual à amostra esquerda-superior do bloco de codificação de luma colocalizado especificado por colCb em relação à amostra de luma esquerda-superior da imagem colocalizada especificada por ColPic. O processo de derivação para vetores de movimento colocalizados é invocado com currCb, colCb, ( xColCb, yColCb ), refIdxLX e sbFlag definidos como iguais a zero como entradas, e a saída é atribuída a mvLXCol e availableFlagLXCol. De outro modo, ambos os componentes de mvLXCol são definidos como iguais a 0 e availableFlagLXCol é definido como igual a zero. Substituir todas as ocorrências de pic_width_in_luma_samples por PicWidthInLumaSamples. Substituir todas as ocorrências de pic_height_in_luma_samples por PicHeightInLumaSamples.
[0158] Em uma segunda modalidade exemplificativa, a sintaxe e semântica de RBSP de conjunto de parâmetros de sequência são da maneira a seguir.
[0159] A subpic_id_len_minus1 mais um especifica o número de bits usado para representar o elemento de sintaxe subpic_id[ i ] em SPS, spps_subpic_id em SPPS que se refere ao SPS e tile_group_subpic_id em cabeçalhos de grupo de tiles que se referem ao SPS. O valor de subpic_id_len_minus1 deve estar na faixa de Ceil( Log2( num_subpic_minus1 + 3 ) a oito, inclusive. É uma exigência de conformidade de fluxo de bits que não haja sobreposição entre subimagem[i] para i de 0 a num_subpic_minus1, inclusive. Cada subimagem pode ser uma subimagem com restrição de movimento temporal.
[0160] As semânticas de cabeçalho de grupo de tiles gerais são da maneira a seguir. O tile_group_subpic_id identifica a subimagem a qual o grupo de tiles pertence. O comprimento de tile_group_subpic_id é subpic_id_len_minus1 + 1 bits. O tile_group_subpic_id igual a um indica que o grupo de tiles não pertence a qualquer subimagem.
[0161] Em uma terceira modalidade exemplificativa, a sintaxe e semântica de cabeçalho de unidade NAL são da maneira a seguir.
[0162] O nuh_subpicture_id_len especifica o número de bits usado para representar o elemento de sintaxe que especifica ID de subimagem. Quando o valor de nuh_subpicture_id_len for maior do que zero, os primeiros nuh_subpicture_id_len-ésimos bits após nuh_reserved_zero_4bits especificam o ID da subimagem a qual a carga útil da unidade NAL pertence. Quando nuh_subpicture_id_len for maior do que zero, o valor de nuh_subpicture_id_len deve ser igual ao valor de subpic_id_len_minus1 no SPS ativo. O valor de nuh_subpicture_id_len para unidades não-VCL NAL é restrito da maneira a seguir. Se nal_unit_type for igual a SPS_NUT ou PPS_NUT, nuh_subpicture_id_len deve ser igual a zero. O nuh_reserved_zero_3bits deve ser igual a '000'. Decodificadores devem ignorar (por exemplo, remover do fluxo de bits e descartar) unidades de NAL com valores de nuh_reserved_zero_3bits diferentes de '000'.
[0163] Em uma quarta modalidade exemplificativa, sintaxe que aninha subimagem é da maneira a seguir.
[0164] O all_sub_pictures_flag igual a um especifica que as mensagens de SEI aninhadas se aplicam a todas as subimagens. all_sub_pictures_flag igual a um especifica que as subimagens às quais as mensagens de SEI aninhadas se aplicam são sinalizadas de maneira explícita pelos elementos de sintaxe subsequentes. O nesting_num_sub_pictures_minus1 mais 1 especifica o número de subimagens às quais as mensagens de SEI aninhadas se aplicam. O nesting_sub_picture_id[ i ] indica o ID de subimagem da i-ésima subimagem à qual as mensagens de SEI aninhadas se aplicam. O elemento de sintaxe nesting_sub_picture_id[ i ] é representado por Ceil( Log2( nesting_num_sub_pictures_minus1 + 1 ) ) bits. O sub_picture_nesting_zero_bit deve ser igual a zero.
[0165] A Figura 9 é um diagrama esquemático de um dispositivo de codificação de vídeo exemplificativo 900. O dispositivo de codificação de vídeo 900 é adequado para implementar os exemplos/modalidades revelados, conforme descrito na presente invenção. O dispositivo de codificação de vídeo 900 compreende portas a jusante 920, portas a montante 950 e/ou unidades transceptoras (Tx/Rx) 910, incluindo transmissores e/ou receptores para comunicar dados a montante e/ou a jusante através de uma rede. O dispositivo de codificação de vídeo 900 também inclui um processador 930 que inclui uma unidade lógica e/ou unidade central de processamento (CPU) para processar os dados e uma memória 932 para armazenar os dados. O dispositivo de codificação de vídeo 900 também pode compreender componentes elétricos, ópticos para elétricos (OE), componentes elétricos para ópticos (EO) e/ou componentes de comunicação sem fio acoplados às portas a montante 950 e/ou portas a jusante 920 para comunicação de dados através de redes de comunicação elétricas, ópticas ou sem fio. O dispositivo de codificação de vídeo 900 também pode incluir dispositivos de entrada e/ou saída (I/O) 960 para comunicar dados a partir de um usuário e para o mesmo. Os dispositivos de I/O 960 podem incluir dispositivos de saída, tais como um display para exibir dados de vídeo, alto-falantes para emitir dados de áudio, etc. Os dispositivos de I/O 960 também podem incluir dispositivos de entrada, tais como um teclado, mouse, trackball, etc., e/ou interfaces correspondentes para interagir com tais dispositivos de saída.
[0166] O processador 930 é implementado por hardware e software. O processador 930 pode ser implementado como um ou mais chips de CPU, núcleos (por exemplo, como um processador de múltiplos núcleos), arranjos de portas programáveis em campo (FPGAs), circuitos integrados de aplicação específica (ASICs) e processadores de sinal digital (DSPs). O processador 930 está em comunicação com as portas a jusante 920, Tx/Rx 910, portas a montante 950 e a memória 932. O processador 930 compreende um módulo de codificação 914. O módulo de codificação 914 implementa as modalidades reveladas descritas acima, tais como os métodos 100, 1000, 1100, e/ou mecanismo 700, que podem empregar um fluxo de bits 500, uma imagem 600 e/ou uma imagem 800. O módulo de codificação 914 também pode implementar qualquer outro método/mecanismo descrito na presente invenção. Além disso, o módulo de codificação 914 pode implementar um sistema codec 200, um codificador 300 e/ou um decodificador 400. Por exemplo, o módulo de codificação 914 pode ser empregado para sinalizar e/ou obter localizações e tamanhos de subimagem em um SPS. Em outro exemplo, o módulo de codificação 914 pode restringir larguras de subimagem e alturas de subimagem para que sejam múltiplos de tamanho de CTU a menos que tais subimagens sejam posicionadas na borda direita da imagem ou na borda inferior da imagem, respectivamente. Em outro exemplo, o módulo de codificação 914 pode restringir subimagens para cobrir uma imagem sem gap ou sobreposição. Em outro exemplo, o módulo de codificação 914 pode ser empregado para sinalizar e/ou obter dados que indicam que algumas subimagens são subimagens com restrição de movimento temporal e outras subimagens não são. Em outro exemplo, o módulo de codificação 914 pode sinalizar um conjunto completo de IDs de subimagem no SPS e incluir um ID de subimagem em cada cabeçalho de fatia para indicar a subimagem que contém fatias correspondentes. Em outro exemplo, o módulo de codificação 914 pode sinalizar níveis para cada subimagem. Como tal, o módulo de codificação 914 faz com que o dispositivo de codificação de vídeo 900 forneça funcionalidade adicional, evite certo processamento para reduzir sobrecarga de processamento e/ou aumente a eficiência de codificação ao particionar e codificar dados de vídeo. Assim, o módulo de codificação 914 aperfeiçoa a funcionalidade do dispositivo de codificação de vídeo 900 bem como aborda problemas que são específicos às técnicas de codificação de vídeo. Além disso, o módulo de codificação 914 realiza uma transformação do dispositivo de codificação de vídeo 900 para um estado diferente. De modo alternativo, o módulo de codificação 914 pode ser implementado como instruções armazenadas na memória 932 e executadas pelo processador 930 (por exemplo, como um produto de programa de computador armazenado em uma mídia não transitória).
[0167] A memória 932 compreende um ou mais tipos de memória, tais como discos, unidades de fita, unidades de estado sólido, memória somente leitura (ROM), memória de acesso aleatório (RAM), memória flash, memória ternária de conteúdo endereçável (TCAM), memória de acesso aleatório estática (SRAM), etc. A memória 932 pode ser usada como um dispositivo de armazenamento de dados de sobrefluxo, para armazenar programas quando tais programas são selecionados para execução, e para armazenar instruções e dados que são lidos durante a execução de programa.
[0168] A Figura 10 é um fluxograma de um método exemplificativo 1000 de codificação de um fluxo de bits, tal como fluxo de bits 500 e/ou subfluxo de bits 501, de subimagens, tais como subimagens 522, 523, 622, 722 e/ou 822, com restrições de posição. O método 1000 pode ser empregado por um codificador, tal como um sistema codec 200, um codificador 300 e/ou um dispositivo de codificação de vídeo 900 ao realizar o método 100.
[0169] O método 1000 pode começar quando um codificador recebe uma sequência de vídeo incluindo uma pluralidade de imagens e determina codificar aquela sequência de vídeo em um fluxo de bits, por exemplo, com base em entrada de usuário. A sequência de vídeo é particionada em imagens/figuras/quadros para particionamento adicional antes de codificação. Na etapa 1001, uma imagem é particionada em uma pluralidade de subimagens de acordo com restrições de posição. Especificamente, uma união das subimagens resultantes cobre uma área total da imagem sem gap e/ou sem sobreposição. Em alguns exemplos, uma restrição de tamanho adaptativa também é aplicada. Por exemplo, quando uma subimagem atual incluir uma borda direita que não coincide com uma borda direita da imagem, a largura de subimagem da subimagem atual é restrita para ser um número inteiro múltiplo de uma CTU (por exemplo, subimagens 822 diferentes de 822b). Assim, pelo menos uma dentre as subimagens (por exemplo, subimagens 822b) pode incluir uma largura de subimagem que não é um número inteiro múltiplo do tamanho de CTU quando a cada subimagem incluir uma borda direita que coincide com a borda direita da imagem. De modo adicional, quando uma subimagem atual incluir uma borda inferior que não coincide com uma borda inferior da imagem, a altura de subimagem da subimagem atual é restrita para ser um número inteiro múltiplo de uma CTU (por exemplo, subimagens 822 diferentes de 822c). Assim, pelo menos uma dentre as subimagens (por exemplo, subimagens 822c) pode incluir uma altura de subimagem que não é um número inteiro múltiplo do tamanho de CTU quando a cada subimagem incluir uma borda inferior que coincide com a borda inferior da imagem.
[0170] Na etapa 1003, um SPS é codificado no fluxo de bits. O SPS pode compreender um tamanho de subimagem para as subimagens e uma localização de subimagem para cada uma dentre as subimagens. O SPS também pode compreender IDs de subimagem para cada uma dentre as subimagens. O SPS também pode compreender uma indicação de que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
[0171] Na etapa 1005, uma ou mais dentre as subimagens são codificadas em um fluxo de bits. O fluxo de bits é armazenado para comunicação em direção a um decodificador na etapa 1007. O fluxo de bits pode, então, ser transmitido em direção ao decodificador, conforme desejado. Em alguns exemplos, um subfluxo de bits pode ser extraído do fluxo de bits codificado. Em tal caso, o fluxo de bits transmitido é um subfluxo de bits. Em outros exemplos, o fluxo de bits codificado pode ser transmitido para extração de subfluxo de bits no decodificador. Em ainda outros exemplos, o fluxo de bits codificado pode ser decodificado e exibido sem extração de subfluxo de bits. Em qualquer um dentre esses exemplos, restrições de posição garantem que gaps e/ou sobreposições de subimagem sejam proibidos. Removendo-se essas opções de codificação, a complexidade do processo de RDO é diminuída. Além disso, a complexidade de decodificação também é diminuída. Como resultado, evitar gaps e sobreposições entre subimagens pode reduzir o uso de recursos de memória e/ou recursos de processamento no codificador e no decodificador.
[0172] A Figura 11 é um fluxograma de um método exemplificativo 1100 de decodificação de um fluxo de bits, tal como fluxo de bits 500 e/ou subfluxo de bits 501, de subimagens, tais como subimagens 522, 523, 622, 722 e/ou 822, com restrições de posição. O método 1100 pode ser empregado por um decodificador, tal como um sistema codec 200, um decodificador 400 e/ou um dispositivo de codificação de vídeo 900 ao realizar o método 100. Por exemplo, o método 1100 pode ser aplicado para decodificar um fluxo de bits criado como resultado do método 1000.
[0173] O método 1100 pode iniciar quando um decodificador começa a receber um fluxo de bits contendo subimagens. O fluxo de bits pode incluir uma sequência de vídeo completa ou o fluxo de bits pode ser um subfluxo de bits contendo um conjunto reduzido de subimagens para extração separada. Na etapa 1101, um fluxo de bits é recebido. O fluxo de bits compreende uma pluralidade de subimagens particionadas a partir de uma imagem de acordo com restrições de posição. Especificamente, uma união das subimagens resultantes cobre uma área total da imagem sem gap e/ou sem sobreposição. Em alguns exemplos, uma restrição de tamanho adaptativa também é aplicada. Por exemplo, quando uma subimagem atual incluir uma borda direita que não coincide com uma borda direita da imagem, a largura de subimagem da subimagem atual é restrita para ser um número inteiro múltiplo de uma CTU (por exemplo, subimagens 822 diferentes de 822b). Assim, pelo menos uma dentre as subimagens (por exemplo, subimagens 822b) pode incluir uma largura de subimagem que não é um número inteiro múltiplo do tamanho de CTU quando a cada subimagem incluir uma borda direita que coincide com a borda direita da imagem. Além disso, quando uma subimagem atual incluir uma borda inferior que não coincide com uma borda inferior da imagem, a altura de subimagem da subimagem atual é restrita para ser um número inteiro múltiplo de uma CTU (por exemplo, subimagens 822 diferentes de 822c). Assim, pelo menos uma dentre as subimagens (por exemplo, subimagens 822c) pode incluir uma altura de subimagem que não é um número inteiro múltiplo do tamanho de CTU quando a cada subimagem incluir uma borda inferior que coincide com a borda inferior da imagem.
[0174] Na etapa 1103, um SPS no fluxo de bits é analisado para obter um tamanho de subimagem para as subimagens, uma localização de subimagem para cada uma dentre as subimagens, IDs de subimagem para cada uma dentre as subimagens e/ou uma indicação de que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
[0175] Na etapa 1105, o fluxo de bits é analisado para obter a uma ou mais subimagens. Na etapa 1107, a uma ou mais subimagens são decodificadas para criar uma sequência de vídeo. A sequência de vídeo pode, então, ser encaminhada para exibição. As restrições de posição garantem que gaps e/ou sobreposições de subimagem sejam proibidos. Removendo-se essas opções de codificação, a complexidade do processo de decodificação é diminuída. Como resultado, evitar gaps e sobreposições entre subimagens pode reduzir o uso de recursos de memória e/ou recursos de processamento no decodificador.
[0176] A Figura 12 é um diagrama esquemático de um sistema exemplificativo 1200 para sinalização de um fluxo de bits, tal como fluxo de bits 500 e/ou subfluxo de bits 501, de subimagens, tais como subimagens 522, 523, 622, 722 e/ou 822, com restrições de posição. O sistema 1200 pode ser implementado por um codificador e um decodificador, tal como um sistema codec 200, um codificador 300, um decodificador 400 e/ou um dispositivo de codificação de vídeo 900. Além disso, o sistema 1200 pode ser empregado ao implementar o método 100, 1000 e/ou 1100.
[0177] O sistema 1200 inclui um codificador de vídeo 1202. O codificador de vídeo 1202 compreende um módulo de particionamento 1201 para particionar uma imagem em uma pluralidade de subimagens tal que uma união das subimagens cubra uma área total da imagem sem sobreposição. O codificador de vídeo 1202 compreende adicionalmente um módulo de codificação 1203 para codificar uma ou mais dentre as subimagens em um fluxo de bits. O codificador de vídeo 1202 compreende adicionalmente um módulo de armazenamento 1205 para armazenar o fluxo de bits para comunicação em direção a um decodificador. O codificador de vídeo 1202 compreende adicionalmente um módulo de transmissão 1207 para transmitir o fluxo de bits incluindo as subimagens em direção ao decodificador. O codificador de vídeo 1202 pode ser adicionalmente configurado para realizar qualquer uma das etapas do método 1000.
[0178] O sistema 1200 também inclui um decodificador de vídeo 1210. O decodificador de vídeo 1210 compreende um módulo de recebimento 1211 para receber um fluxo de bits que compreende uma pluralidade de subimagens particionadas a partir de uma imagem tal que uma união das subimagens cubra uma área total da imagem sem sobreposição. O decodificador de vídeo 1210 compreende adicionalmente um módulo de análise 1213 para analisar o fluxo de bits para obter a uma ou mais subimagens. O decodificador de vídeo 1210 compreende adicionalmente um módulo de decodificação 1215 para decodificar a uma ou mais subimagens para criar uma sequência de vídeo. O decodificador de vídeo 1210 compreende adicionalmente um módulo de encaminhamento 1217 para encaminhar a sequência de vídeo para exibição. O decodificador de vídeo 1210 pode ser adicionalmente configurado para realizar qualquer uma das etapas do método 1100.
[0179] Um primeiro componente é acoplado diretamente a um segundo componente quando não houver componentes intermediários, exceto uma linha, um traço ou outro meio entre o primeiro componente e o segundo componente. O primeiro componente é acoplado indiretamente ao segundo componente quando houver componentes intermediários diferentes de uma linha, um traço ou outro meio entre o primeiro componente e o segundo componente. O termo “acoplado” e suas variantes incluem tanto acoplado diretamente quanto acoplado indiretamente. O uso do termo “cerca de” significa uma faixa que inclui ±10% do número subsequente, a menos que estabelecido de outra maneira.
[0180] Deve-se entender também que não é exigido que as etapas dos métodos exemplificativos estabelecidos na presente invenção sejam necessariamente realizadas na ordem descrita, e a ordem das etapas de tais métodos deve ser entendida apenas como exemplificativa. Da mesma maneira, as etapas adicionais podem ser incluídas em tais métodos, e determinadas etapas podem ser omitidas ou combinadas, em métodos consistentes com várias modalidades da presente revelação.
[0181] Embora diversas modalidades tenham sido fornecidas na presente revelação, pode-se entender que os sistemas e métodos revelados podem ser incorporados a muitas outras formas específicas sem se afastar do espírito ou escopo da presente revelação. Os presentes exemplos devem ser considerados como ilustrativos e não restritivos, e a intenção não deve ser limitada aos detalhes fornecidos no presente documento. Por exemplo, os vários elementos ou componentes podem ser combinados ou integrados em outro sistema ou determinados atributos podem ser omitidos, ou não implementados.
[0182] Além disso, técnicas, sistemas, subsistemas e métodos descritos e ilustrados nas várias modalidades como distintos ou separados podem ser combinados ou integrados a outros sistemas, componentes, técnicas ou métodos sem se afastar do escopo da presente revelação. Outros exemplos de mudanças, substituições e alterações são verificados por um técnico no assunto e podem ser realizados sem se afastar do espírito e escopo revelados no presente documento.
Claims (25)
1. Método implementado em um decodificador, CARACTERIZADO pelo fato de que o método compreende: receber um fluxo de bits que compreende uma pluralidade de subimagens particionadas a partir de uma imagem tal que uma união das subimagens cubra uma área total da imagem sem sobreposição, e uma flag que especifica se operações de filtragem in-loop através de delimitações de subimagem são habilitadas; em que a flag igual a um especifica que operações de filtragem in-loop através de delimitações de subimagem são habilitadas; a flag igual a zero especifica que operações de filtragem in-loop através de delimitações de subimagem são desabilitadas; em que o fluxo de bits compreende adicionalmente um conjunto de parâmetros de sequência (SPS), o SPS compreendendo um identificador (ID) de subimagem, um tamanho de subimagem e uma localização de subimagem para cada uma dentre a pluralidade de subimagens; analisar o fluxo de bits para obter a flag; analisar o SPS para obter o ID de subimagem, o tamanho de subimagem e a localização de subimagem para cada uma dentre a pluralidade de subimagens; analisar o fluxo de bits para obter a uma ou mais subimagens com base na flag, no ID de subimagem, no tamanho de subimagem e na localização de subimagem para cada uma dentre a pluralidade de subimagens.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que a união da pluralidade de subimagens cobre adicionalmente a área total da imagem sem gap.
3. Método, de acordo com qualquer uma das reivindicações 1 a 2, CARACTERIZADO pelo fato de que se uma primeira subimagem incluir uma borda direita que não coincide com uma borda direita da imagem, a primeira subimagem inclui uma largura de subimagem que é um número inteiro múltiplo de um tamanho de unidade de árvore de codificação (CTU).
4. Método, de acordo com qualquer uma das reivindicações 1 a 3, CARACTERIZADO pelo fato de que se uma segunda subimagem incluir uma borda inferior que não coincide com uma borda inferior da imagem, a segunda subimagem inclui uma altura de subimagem que é um número inteiro múltiplo do tamanho de CTU.
5. Método, de acordo com qualquer uma das reivindicações 1 a 4, CARACTERIZADO pelo fato de que quando a largura de subimagem não for um número inteiro múltiplo do tamanho de CTU, as CTUs na fronteira direita estão incompletas.
6. Método, de acordo com qualquer uma das reivindicações 1 a 5, CARACTERIZADO pelo fato de que quando a altura de subimagem não for um número inteiro múltiplo do tamanho de CTU, as CTUs na fronteira inferior estão incompletas.
7. Método implementado em um codificador, CARACTERIZADO pelo fato de que o método compreende: particionar uma imagem em uma pluralidade de subimagens tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; codificar uma flag em um fluxo de bits, em que a flag especifica se operações de filtragem in-loop através de delimitações de subimagem são habilitadas, em que a flag igual a um especifica que operações de filtragem in-loop através de delimitações de subimagem são habilitadas; a flag igual a zero especifica que operações de filtragem in-loop através de delimitações de subimagem são desabilitadas; codificar um conjunto de parâmetros de sequência (SPS) no fluxo de bits, em que o SPS compreende um identificador (ID) de subimagem, um tamanho de subimagem e uma localização de subimagem para cada uma dentre a pluralidade de subimagens; codificar a pluralidade de subimagens no fluxo de bits.
8. Método, de acordo com a reivindicação 7, CARACTERIZADO pelo fato de que a união das subimagens cobre adicionalmente a área total da imagem sem gap.
9. Método, de acordo com qualquer uma das reivindicações 7 a 8, CARACTERIZADO pelo fato de que se uma primeira subimagem inclui uma borda direita que não coincide com uma borda direita da imagem, a primeira subimagem inclui uma largura de subimagem que é um número inteiro múltiplo de um tamanho de unidade de árvore de codificação (CTU).
10. Método, de acordo com qualquer uma das reivindicações 7 a 9, CARACTERIZADO pelo fato de que se uma segunda subimagem incluir uma borda inferior que não coincide com uma borda inferior da imagem, a segunda subimagem inclui uma altura de subimagem que é um número inteiro múltiplo do tamanho de CTU.
11. Método, de acordo com qualquer uma das reivindicações 7 a 10, CARACTERIZADO pelo fato de que quando a largura de subimagem não for um número inteiro múltiplo do tamanho de CTU, as CTUs na fronteira direita estão incompletas.
12. Método, de acordo com qualquer uma das reivindicações 7 a 11, CARACTERIZADO pelo fato de que quando a altura de subimagem não for um número inteiro múltiplo do tamanho de CTU, as CTUs na fronteira inferior estão incompletas.
13. Dispositivo de codificação de vídeo, CARACTERIZADO pelo fato de que compreende: um processador, uma memória, um receptor acoplado ao processador, e um transmissor acoplado ao processador, o processador, memória, receptor, e transmissor configurados para realizar o método conforme definido em qualquer uma das reivindicações 1 a 12.
14. Mídia legível por computador não transitória, CARACTERIZADA pelo fato de que compreende um conjunto de instruções para uso por um dispositivo de codificação de vídeo, o conjunto de instruções compreendendo instruções executáveis por computador armazenadas na mídia legível por computador não transitória tal que quando executadas por um processador fazem com que o dispositivo de codificação de vídeo realize o método conforme definido em qualquer uma das reivindicações 1 a 12.
15. Decodificador, CARACTERIZADO pelo fato de que compreende: uma unidade de recebimento, configurada para receber um fluxo de bits que compreende uma pluralidade de subimagens particionadas a partir de uma imagem tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; e uma flag que especifica se operações de filtragem in-loop através de delimitações de subimagem são habilitadas, em que a flag igual a um especifica que operações de filtragem in-loop através de delimitações de subimagem são habilitadas; a flag igual a zero especifica que operações de filtragem in-loop através de delimitações de subimagem são desabilitadas; em que o fluxo de bits compreende adicionalmente um conjunto de parâmetros de sequência (SPS), o SPS compreendendo um identificador (ID) de subimagem, um tamanho de subimagem e uma localização de subimagem para cada uma dentre a pluralidade de subimagens; uma unidade de análise, configurada para analisar o fluxo de bits para obter a flag; a unidade de análise, configurada para analisar o SPS para obter o ID de subimagem, o tamanho de subimagem e a localização de subimagem para cada uma dentre a pluralidade de subimagens; a unidade de análise, configurada para analisar o fluxo de bits para obter a uma ou mais subimagens com base na flag, no ID de subimagem, no tamanho de subimagem e na localização de subimagem para cada uma dentre a pluralidade de subimagens.
16. Decodificador, de acordo com a reivindicação 15, CARACTERIZADO pelo fato de que o decodificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 1 a 6.
17. Codificador, CARACTERIZADO pelo fato de que compreende: uma unidade de particionamento, configurada para particionar uma imagem em uma pluralidade de subimagens tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; uma unidade de codificação, configurada para codificar uma flag em um fluxo de bits, em que em que a flag especifica se operações de filtragem in-loop através de delimitações de subimagem são habilitadas, em que a flag igual a um especifica que operações de filtragem in-loop através de delimitações de subimagem são habilitadas; a flag igual a zero especifica que operações de filtragem in-loop através de delimitações de subimagem são desabilitadas; a unidade de codificação, configurada para codificar um conjunto de parâmetros de sequência (SPS) no fluxo de bits, em que o SPS compreende um identificador (ID) de subimagem, um tamanho de subimagem e uma localização de subimagem para cada uma dentre a pluralidade de subimagens; a unidade de codificação, configurada para codificar as subimagens no fluxo de bits.
18. Codificador, de acordo com a reivindicação 17, CARACTERIZADO pelo fato de que o codificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 8 a 12.
19. Fluxo de bits, CARACTERIZADO pelo fato de que compreende dados codificados de uma pluralidade de subimagens particionadas a partir de uma imagem tal que uma união das subimagens cubra uma área total da imagem sem sobreposição; um conjunto de parâmetros de sequência (SPS), o SPS compreendendo um identificador (ID) de subimagem, um tamanho de subimagem e uma localização de subimagem para cada uma dentre a pluralidade de subimagens; e uma flag que especifica se operações de filtragem in-loop através de delimitações de subimagem são habilitadas, em que quando a flag for igual a um especifica que operações de filtragem in-loop através de delimitações de subimagem são habilitadas; quando a flag for igual a zero especifica que operações de filtragem in-loop através de delimitações de subimagem são desabilitadas.
20. Fluxo de bits, de acordo com a reivindicação 19, CARACTERIZADO pelo fato de que se uma largura da imagem não for um número inteiro múltiplo do tamanho de CTU, as CTUs na fronteira direita estão incompletas.
21. Fluxo de bits, de acordo com a reivindicação 19 ou 20, CARACTERIZADO pelo fato de que se uma altura da imagem não for um número inteiro múltiplo do tamanho de CTU, as CTUs na fronteira inferior estão incompletas.
22. Dispositivo para codificação, CARACTERIZADO pelo fato de que compreende: unidade de recebimento, configurada para receber um fluxo de bits para decodificação; unidade de transmissão acoplada à unidade de recebimento, a unidade de transmissão, configurada para transmitir uma imagem decodificada a uma unidade de exibição; unidade de armazenamento acoplada a pelo menos uma dentre a unidade de recebimento ou a unidade de transmissão, a unidade de armazenamento, configurada para armazenar instruções; e unidade de processamento acoplada à unidade de armazenamento, a unidade de processamento, configurada para executar as instruções armazenadas na unidade de armazenamento para realizar o método conforme definido em qualquer uma das reivindicações 1 a 6.
23. Decodificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido nas reivindicações 1 a 6.
24. Codificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 7 a 12.
25. Mídia legível por computador não transitória, CARACTERIZADA pelo fato de que porta um conjunto de instruções que, quando executadas por um dispositivo de computador, fazem com que o dispositivo de computador realize o método conforme definido em qualquer uma das reivindicações 1 a 12.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US62/790,207 | 2019-01-09 |
Publications (1)
Publication Number | Publication Date |
---|---|
BR122024004671A2 true BR122024004671A2 (pt) | 2024-08-20 |
Family
ID=
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11917173B2 (en) | Sub-picture sizing in video coding | |
US20240171738A1 (en) | Sub-Picture Motion Vectors In Video Coding | |
US11729384B2 (en) | Explicit address signaling in video coding | |
BR122022009674A2 (pt) | Método implementado por um codificador, dispositivo e aparelho de codificação, sistema e meio para codificação | |
BR112021011398A2 (pt) | Método e aparelho de codificação de vídeo | |
BR122024004671A2 (pt) | Codificador de vídeo, decodificador de vídeo e métodos correspondentes | |
BR122024003872A2 (pt) | Codificador de vídeo, decodificador de vídeo e métodos correspondentes |