BR122024003872A2 - 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 PDF

Info

Publication number
BR122024003872A2
BR122024003872A2 BR122024003872-2A BR122024003872A BR122024003872A2 BR 122024003872 A2 BR122024003872 A2 BR 122024003872A2 BR 122024003872 A BR122024003872 A BR 122024003872A BR 122024003872 A2 BR122024003872 A2 BR 122024003872A2
Authority
BR
Brazil
Prior art keywords
image
sub
subimage
sps
images
Prior art date
Application number
BR122024003872-2A
Other languages
English (en)
Inventor
Ye-Kui Wang
Fnu HENDRY
Original Assignee
Huawei Technologies Co., Ltd.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co., Ltd. filed Critical Huawei Technologies Co., Ltd.
Publication of BR122024003872A2 publication Critical patent/BR122024003872A2/pt

Links

Abstract

Um mecanismo de codificação de vídeo é revelado. O mecanismo inclui receber um fluxo de bits compreendendo um conjunto de parâmetros de sequência (SPS), uma ou mais subimagens particionadas a partir de uma imagem, e um ou mais cabeçalhos de fatia associados a uma ou mais fatias. O SPS é analisado para obter identificadores (IDs) de subimagem para a uma ou mais subimagens. Os cabeçalhos de fatia são analisados para obter um ID de subimagem atual associado a uma subimagem atual. O ID de subimagem atual indicando que as fatias estão incluídas na subimagem atual da uma ou mais subimagens. A subimagem atual é decodificada com base no ID de subimagem atual para criar uma sequência de vídeo. A sequência de vídeo é encaminhada para exibição

Description

CAMPO DA TÉCNICA
[0001] A presente revelação é de modo geral relacionada a codificação de vídeo, e é especificamente relacionada a gerenciamento de subimagem em codificação de vídeo.
FUNDAMENTOS
[0002] O montante de dados de vídeo necessário para representar mesmo um vídeo relativamente curto pode ser substancial, o que pode resultar em dificuldades quando os dados devem ser transmitidos por streaming ou comunicados de outro modo através de uma rede de comunicações com capacidade de largura de banda limitada. Desse modo, dados de vídeo são de modo geral comprimidos antes de serem comunicados através de redes de telecomunicações dos dias de hoje. O tamanho de um vídeo poderia também ser um problema quando o vídeo é armazenado em um dispositivo de armazenamento porque os recursos de memória podem ser limitados. Dispositivos de compressão de vídeo frequentemente usam software e/ou hardware na fonte para codificar os dados de vídeo antes de transmissão ou armazenamento, desse modo diminuindo a quantidade de dados necessários 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 sempre crescentes de qualidade de vídeo mais alta, técnicas de compressão e descompressão aperfeiçoadas que aperfeiçoam a razão de compressão com pouco a nenhum prejuízo em qualidade de imagem são desejáveis.
SUMÁRIO
[0003] Em uma modalidade, a revelação inclui um método implementado em um decodificador, o método compreendendo: receber, por um receptor do decodificador, um fluxo de bits compreendendo um conjunto de parâmetros de sequência (SPS), uma ou mais subimagens particionadas de uma imagem, e um ou mais cabeçalhos de fatia associados a uma ou mais fatias; analisar, por um processador do decodificador, o SPS para obter identificadores (IDs) de subimagem para a uma ou mais subimagens; analisar, pelo processador, os cabeçalhos de fatia para obter um ID de subimagem atual associado a uma subimagem atual, o ID de subimagem atual indicando que as fatias estão incluídas na subimagem atual a partir da uma ou mais subimagens; decodificar, pelo processador, a subimagem atual com base no ID de subimagem atual 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 sinal de sinalizam posições de subimagem relativas a outras subimagens. Isso causa um problema se subimagens são perdidas em trânsito ou transmitidas separadamente para o propósito de separar extraídas. No presente exemplo, um conjunto completo de IDs de subimagem são sinalizados no SPS. Além disso, cabeçalhos de fatia incluem um ID de subimagem indicando a subimagem que contém fatias correspondentes aos cabeçalhos de fatia. 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 aplicativos que extraem somente algumas das subimagens e evitam transmitir outras subimagens. Uma lista completa de todos os IDs de subimagem pode ser enviada no SPS juntamente com informações de dimensionamento relevantes. Cada cabeçalho de fatia pode conter um ID de subimagem indicando a subimagem que inclui a fatia correspondente. Dessa maneira, subimagens e fatias correspondentes podem ser extraídas e posicionadas sem referência a outras subimagens. Logo, os IDs de subimagem suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, o que reduz o uso de recursos de rede, recursos de memória, e/ou recursos de processamento no codificador e no decodificador.
[0004] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o SPS adicionalmente compreende um tamanho de subimagem para cada subimagem particionada da imagem.
[0005] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o SPS adicionalmente compreende a localização de subimagem para cada subimagem particionada da imagem.
[0006] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que decodificar a subimagem atual inclui: corresponder as fatias à subimagem atual com base no ID de subimagem atual; e posicionar as fatias com base no tamanho de subimagem e na localização de subimagem para a subimagem atual.
[0007] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que a localização de subimagem inclui uma distância de desvio entre uma amostra superior esquerda da subimagem atual e uma amostra superior esquerda da imagem.
[0008] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o tamanho de subimagem inclui uma altura de subimagem em amostras de luma e uma largura de subimagem em amostras de luma.
[0009] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o SPS adicionalmente compreende uma indicação 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 compreendendo: particionar, por um processador do codificador, uma imagem em uma pluralidade de subimagens; particionar, pelo processador, cada uma da pluralidade de subimagens em uma ou mais fatias; codificar em um fluxo de bits, pelo processador, um SPS compreendendo IDs de subimagem para a pluralidade de subimagens particionadas da imagem; codificar no fluxo de bits, pelo processador, cabeçalhos de fatia compreendendo IDs de subimagem indicando que as fatias estão incluídas em subimagens indicadas; codificar, pelo processador, uma ou mais da pluralidade de subimagens no 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 sinal de sinalizam posições de subimagem relativas a outras subimagens. Isso causa um problema se subimagens são perdidas em trânsito ou transmitidas separadamente para o propósito de separar extraídas. No presente exemplo, um conjunto completo de IDs de subimagem são sinalizados no SPS. Além disso, cabeçalhos de fatia incluem um ID de subimagem indicando uma subimagem que contém fatias correspondente para os cabeçalhos de fatia. 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 aplicativos que extraem somente algumas das subimagens e evitam transmitir outras subimagens. Uma lista completa de todos os IDs de subimagem pode ser enviada no SPS juntamente com informações de dimensionamento relevantes. Cada cabeçalho de fatia pode conter um ID de subimagem indicando a subimagem que inclui a fatia correspondente. Dessa maneira, subimagens e fatias correspondentes podem ser extraídas e posicionadas sem referência a outras subimagens. Logo, os IDs de subimagem suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, o que reduz o uso de recursos de rede, recursos de memória, e/ou recursos de processamento no codificador e no decodificador.
[0011] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o SPS adicionalmente compreende um tamanho de subimagem para cada uma da pluralidade de subimagens.
[0012] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o SPS adicionalmente compreende uma localização de subimagem para cada uma da pluralidade de subimagens.
[0013] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que a localização de subimagem inclui uma distância de desvio entre uma amostra superior esquerda de uma subimagem correspondente e uma amostra superior esquerda da imagem.
[0014] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o tamanho de subimagem inclui uma altura de subimagem em amostras de luma e uma largura de subimagem em amostras de luma.
[0015] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o SPS adicionalmente compreende uma indicação que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
[0016] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que uma união da pluralidade de subimagens cobre uma área total da imagem sem lacuna e sem sobreposição.
[0017] Em uma modalidade, a revelação inclui um dispositivo de codificação de vídeo compreendendo: 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 de qualquer dos aspectos precedentes.
[0018] Em uma modalidade, a revelação inclui uma mídia legível por computador não transitória compreendendo 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 de modo que quando executadas por um processador fazem com que o dispositivo de codificação de vídeo realize o método de qualquer dos aspectos precedentes.
[0019] Em uma modalidade, a revelação inclui um decodificador compreendendo: meios de recebimento para receber um fluxo de bits compreendendo um SPS, uma ou mais subimagens particionadas de uma imagem, e um ou mais cabeçalhos de fatia associados a uma ou mais fatias; mios de análise para: analisar o SPS para obter identificadores (IDs) de subimagem para a uma ou mais subimagens; e analisar os cabeçalhos de fatia para obter um ID de subimagem atual associado a uma subimagem atual, o ID de subimagem atual indicando que as fatias estão incluídas na subimagem atual a partir da uma ou mais subimagens; meios de decodificação para decodificar a subimagem atual com base no ID de subimagem atual para criar uma sequência de vídeo; e meios de encaminhamento para encaminhar a sequência de vídeo para exibição.
[0020] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o decodificador é adicionalmente configurado para realizar o método de qualquer dos aspectos precedentes.
[0021] Em uma modalidade, a revelação inclui um codificador compreendendo: meios de particionamento para: particionar uma imagem em uma pluralidade de subimagens; e particionar cada uma da pluralidade de subimagens em uma ou mais fatias; meios de codificação para: codificar em um fluxo de bits um SPS compreendendo IDs de subimagem para a pluralidade de subimagens particionadas da imagem; codificar no fluxo de bits cabeçalhos de fatia compreendendo IDs de subimagem indicando que as fatias estão incluídas em subimagens indicadas; e codificar uma ou mais da pluralidade de subimagens no fluxo de bits; e meios de armazenamento para armazenar o fluxo de bits para comunicação em direção a um decodificador.
[0022] Opcionalmente, em qualquer um dentre os aspectos precedentes, uma outra implementação do aspecto se fornece, em que o codificador é adicionalmente configurado para realizar o método de qualquer dos aspectos precedentes.
[0023] Com o propósito de clareza, qualquer uma das modalidades anteriores pode ser combinada com qualquer uma ou mais dentre as outras modalidades anteriores para criar uma nova modalidade dentro do escopo da presente revelação.
[0024] Essas e outras particularidades serão mais claramente entendidas a partir da seguinte descrição detalhada tomada em conjunto com os desenhos e reivindicações anexos.
BREVE DESCRIÇÃO DOS DESENHOS
[0025] Para um mais completo entendimento dessa revelação, referência é feita agora à breve descrição seguinte, tomada em conexão com os desenhos anexos e descrição detalhada, em que referências numéricas iguais representam partes iguais.
[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 exemplo de sistema de codificação e decodificação (codec) para codificação de vídeo.
[0028] A Figura 3 é um diagrama esquemático ilustrando um exemplo de codificador de vídeo.
[0029] A Figura 4 é um diagrama esquemático ilustrando um exemplo de decodificador de vídeo.
[0030] A Figura 5 é um diagrama esquemático ilustrando um exemplo de fluxo de bits e de subfluxo de bits extraído do fluxo de bits.
[0031] A Figura 6 é um diagrama esquemático ilustrando um exemplo de imagem particionada em subimagens.
[0032] A Figura 7 é um diagrama esquemático ilustrando um exemplo de mecanismo para relacionar fatias a um gabarito de subimagem.
[0033] A Figura 8 é um diagrama esquemático ilustrando um outro exemplo de imagem particionada em subimagens.
[0034] A Figura 9 é um diagrama esquemático de um exemplo de dispositivo de codificação de vídeo.
[0035] A Figura 10 é um fluxograma de um método exemplificativo de codificar identificadores (IDs) de subimagem em um fluxo de bits para suportar decodificação de subimagens.
[0036] A Figura 11 é um fluxograma de um método exemplificativo de decodificar um fluxo de bits de subimagens com base em IDs de subimagem.
[0037] A Figura 12 é um diagrama esquemático de um exemplo de sistema para sinalizar IDs de subimagem por meio de um fluxo de bits.
DESCRIÇÃO DETALHADA
[0038] Deve ser entendido desde o começo que embora uma implementação ilustrativa de uma ou mais modalidades são fornecidas abaixo, os sistemas e/ou métodos revelados podem ser implementados usando um número qualquer de técnicas, sejam atualmente conhecidas ou existentes. A revelação não deve absolutamente ser limitada às implementações ilustrativas, desenhos, e técnicas ilustradas abaixo, incluindo os projetos e implementações exemplificativas ilustradas e descritas no presente documento, mas pode ser modificada dentro do escopo das reivindicações anexas juntamente com seu escopo completo de equivalentes.
[0039] Vários acrônimos são empregados no presente documento, 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), Time de Especialistas de Vídeo Conjunto (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 bytes brutos (RBSP), conjunto de parâmetros de sequência (SPS), codificação de vídeo versátil (VVC) e rascunho 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 mínima perda de dados. Por exemplo, 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ência de vídeos. Para codificação de vídeo com base 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, os quais podem também ser referidos como 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. Blocos de vídeo em uma fatia codificada de modo intra (I) de uma imagem são codificados usando predição espacial com relação a amostras de referência em blocos vizinhos na mesma imagem. Blocos de vídeo em uma predição unidirecional (P) codificada de modo inter ou fatia de predição bidirecional (B) de uma imagem podem ser codificados empregando-se predição espacial com relação a amostras de referência em blocos vizinhos na mesma imagem ou predição temporal com relação a amostras de referência em outras imagens de referência. Imagens podem ser referidas como quadros e/ou imagens, e imagens de referência podem ser referidas como quadros de referência e/ou imagens de referência. Predição espacial ou temporal resulta em um bloco preditivo representando um bloco de imagem. Dados residuais representam diferenças de pixel entre o bloco de imagem original e o bloco preditivo. Consequentemente, um bloco codificado de modo inter é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência formando o bloco preditivo e os dados residuais indicando 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 com os dados residuais. Para compressão adicional, os dados residuais podem ser transformados do domínio de pixel para um domínio de transformada. Esses resultam em coeficientes de transformada residuais, os quais podem ser quantizados. Os coeficientes de transformada quantizados podem inicialmente ser dispostos em um arranjo bidimensional. Os coeficientes de transformada quantizados podem ser examinados a fim de produzir um vetor de coeficientes de transformada unidimensional. Codificação de entropia pode ser aplicada para se conseguir ainda mais compressão. Tais técnicas de compressão de vídeo são discutidas em maior detalhe abaixo.
[0041] Para assegurar que um vídeo codificado possa ser precisamente decodificado, o vídeo é codificado e decodificado de acordo com padrões de codificação de vídeo correspondentes. Padrões de codificação de vídeo incluem o Setor de Padronização da União de Telecomunicação Internacional (ITU) (ITU-T) H.261, Grupo de Especialistas em Imagens com Movimento (MPEG)-1 Parte 2 da Organização Internacional para Padronização/Comissão Eletrotécnica Internacional (ISO/IEC), ITU-T H.262 ou MPEG-2 Parte 2 da ISO/IEC, ITU-T H.263, MPEG-4 Parte 2 da ISO/IEC, Codificação de Vídeo Avançada (AVC), também conhecida como ITU-T H.264 ou MPEG-4 parte 10 da ISO/IEC, 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 HEVC 3D (3D-HEVC). O Time de Especialistas de Vídeo Conjunto (JVET) de ITU-T e ISO/IEC começou a desenvolver um padrão de codificação de vídeo referido como Codificação de Vídeo Versátil (VVC). VVC é incluída em um Rascunho de Trabalho (WD), o qual inclui JVET-L1001-v9.
[0042] A fim de codificar uma imagem de vídeo, a imagem primeiramente é 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 normais, fatias dependentes, tiles, e/ou de acordo com Processamento Paralelo de Arquivo Wavefront (WPP). Para simplificar, HEVC restringe os codificadores de modo que somente fatias normais, fatias dependentes, tiles, WPP, e combinações dos mesmos possam ser usados quando se está partindo uma fatia em grupos de CTBs para codificação de vídeo. Tal particionamento pode ser aplicada para suportar correspondência de tamanho de Unidade de Transferência Máxima (MTU), processamento paralelo, e atraso reduzido de ponta a ponta. A MTU denota o máximo montante de dados que pode ser transmitido em um único pacote. Se uma carga útil de pacote está além da capacidade da MTU, aquela carga útil é dividida em dois pacotes através de um processo chamado fragmentação.
[0043] Uma fatia normal, também referida simplesmente como uma fatia, é uma porção particionada de uma imagem que pode ser reconstruída independentemente a partir de outras fatias normais dentro da mesma imagem, a despeito de algumas interdependências devidas a operações de filtragem loop. Cada fatia normal é encapsulada em sua própria unidade de Camada de Abstração de Rede (NAL) para transmissão. Além disso, predição de imagem in (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 fronteiras 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 normal emprega mínima comunicação entre processadores ou entre núcleos. No entanto, como cada fatia normal é independente, cada fatia é associada a um cabeçalho de fatia separado. O uso de fatias normais pode incorrer em uma substancial sobrecarga de codificação devido ao custo de bit do cabeçalho de fatia para cada fatia e devido à falta de predição através das fronteiras de fatia. Além disso, fatias normais podem ser empregadas para suportar correspondência para exigências de tamanho de MTU. Especificamente, como uma fatia normal é encapsulada em uma unidade de NAL separada e pode ser independentemente codificada, cada fatia normal deve ser menor que a MTU em esquemas de MTU para evitar quebrar a fatia em múltiplos pacotes. Sendo assim, a meta de paralelização e a meta de correspondência de tamanho de MTU podem colocar demandas contraditórias para um gabarito de fatia em uma imagem.
[0044] Fatias dependentes são similares a fatias normais, mas têm cabeçalhos de fatia encurtados e permitem particionamento das fronteiras de bloco de árvore na imagem sem quebrar predição de imagem in. Consequentemente, fatias dependentes permitem que uma fatia normal seja fragmentada em múltiplas unidades de NAL, o que fornece atraso reduzido de ponta a ponta permitindo-se que uma parte de uma fatia normal seja enviada para fora antes que a codificação da fatia normal inteira esteja completa.
[0045] Uma tile é uma porção particionada de uma imagem criada por fronteiras horizontais e verticais que criam colunas e fileiras de tiles. Tiles podem ser codificadas em ordem de exame de varredura (da direita para a esquerda e de cima para baixo). A ordem de exame de CTBs é local dentro de uma tile. Consequentemente, CTBs em uma primeira tile são codificadas em ordem de exame de varredura, antes de prosseguir para os CTBs na próxima tile. Similar às fatias normais, tiles rompem dependências de predição de imagem in bem como dependências de decodificação de entropia. No entanto, tiles podem não ser incluídas em unidades de NAL individuais, e logo tiles podem não ser usadas para correspondência de tamanho de MTU. Cada tile pode ser processado por um processador/núcleo, e a comunicação entre processadores/entre núcleos empregada para predição de imagem in entre unidades de processamento que decodificam tiles vizinhos pode ser limitada a levar um cabeçalho de fatia compartilhado (quando tiles adjacentes estão na mesma fatia), e realizar compartilhamento relacionado a filtragem loop de amostras reconstruídas e metadados. Quando mais que um tile está incluído em uma fatia, o desvio de byte de ponto de entrada para cada tile que não o primeiro desvio de ponto de entrada na fatia pode ser sinalizado no cabeçalho de fatia. Para cada fatia e tile, pelo menos uma das seguintes condições deve ser atendida: 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 fileiras individuais de CTBs. Decodificação de entropia e mecanismos de predição podem usar dados a partir de CTBs em outras fileiras. Processamento paralelo é tornado possível através de decodificação paralela de fileiras de CTB. Por exemplo, uma fileira atual pode ser decodificada em paralelo com uma fileira precedente. No entanto, a decodificação da fileira atual é atrasada em relação ao processo de decodificação das fileiras precedentes por dois CTBs. Esse atraso assegura que dados relacionados ao CTB acima e que o CTB acima e à direita do CTB atual na fileira atual é disponível antes do CTB atual ser codificado. Essa abordagem aparece como um arquivo wavefront quando representada graficamente. Essa particionada escalonada permite paralelização com até quantos processadores/núcleos uma vez que a imagem contém fileiras de CTB. Como a predição de imagem in entre fileiras de bloco de árvore vizinhas dentro de uma imagem é permitida, a comunicação entre processadores/entre núcleos para habilitar predição de imagem in pode ser substancial. O particionamento de WPP considera tamanhos de unidade de NAL. Logo, WPP não suporta correspondência de tamanho de MTU. No entanto, fatias normais podem ser usadas em conjunto com WPP, com determinada sobrecarga de codificação, para implementar correspondência de tamanho de MTU conforme desejado.
[0047] Tiles podem também incluir conjuntos de tiles com restrição de movimento. Um conjunto de tiles com restrição de movimento (MCTS) é um conjunto de tiles projetado de modo que vetores de movimento associados sejam restritos a apontar para localizações de amostra completa do lado de dentro do MCTS e para localizações de fração de amostra que exigem somente localizações de amostra completa do lado de dentro do MCTS para interpolação. Além disso, o uso de candidatos a vetor de movimento para predição de vetor de movimento temporal derivado a partir de blocos do lado de fora dos MCTS é proibido. Desse modo, cada MCTS pode ser independentemente decodificado sem a existência de tiles não incluídas no MCTS. Mensagens de informações de melhoramento suplementar (SEI) de MCTSs Temporais podem ser usadas para indicar a existência de MCTSs no fluxo de bits e sinalizar os MCTSs. A mensagem de SEI quanto a MCTSs fornece informações suplementares que podem ser usadas na extração de subfluxo de bits de MCTS (especificadas como parte da semântica da mensagem de SEI) para gerar um fluxo de bits que se conforma a 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 bruta (RBSP) dos conjuntos de parâmetros de vídeo substitutos (VPSs), conjuntos de parâmetros de sequências (SPSs), e conjuntos de parâmetros de imagem (PPSs) para serem usados durante o processo de extração de subfluxo de bits de MCTS. Quando se extrai um subfluxo de bits de acordo com a extração de subfluxo de bits de processo MCTS, conjuntos de parâmetros (VPSs, SPSs e PPSs) podem ser regravados ou substituídos, e cabeçalhos de fatia podem atualizados porque um ou todos dos 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 pode também ser particionada em uma ou mais subimagens. Uma subimagem é um conjunto retangular de grupos de tiles/fatias que começa 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, portanto, ter um particionamento em tiles separada. 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 localizada junto com a subimagem atual a partir das imagens de referência no buffer de imagem decodificada. A área extraída é tratada como uma subimagem decodificada. Predição inter pode acontecer 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 relacionadas 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 desocupada em ordem de exame de varredura de CTU dentro de uma imagem que é grande o bastante para conter a subimagem atual dentro das fronteiras de imagem.
[0049] Além disso, o particionamento de imagem pode ser com base em tiles a nível de imagem e tiles a nível de sequência. Tiles a nível de sequência podem incluir a funcionalidade do MCTS, e podem ser implementadas como subimagens. Por exemplo, uma tile a nível de imagem pode ser definida como uma região retangular de blocos de árvore de codificação dentro de uma coluna de tiles em particular e dentro de uma fileira de tiles em particular em uma imagem. Tile a nível de sequência pode ser definido como um conjunto de regiões retangulares de blocos de árvore de codificação incluídos em diferentes quadros onde cada região retangular adicionalmente compreende uma ou mais tiles a nível de imagem e o conjunto de regiões retangulares de blocos de árvore de codificação são independentemente decodificáveis a partir de qualquer outro conjunto de regiões retangulares similares. Um conjunto de grupo de tiles a nível de sequência (STGPS) é um grupo de tais tiles a nível de sequência. O STGPS pode ser sinalizado em uma unidade de NAL de não codificação de camada de vídeo (VCL) com um identificador (ID) associado no cabeçalho da unidade de NAL.
[0050] O esquema de particionamento com base em subimagem precedente pode ser associado a determinados problemas. Por exemplo, quando subimagens são habilitadas o agrupamento lado a lado dentro de subimagens (particionar de subimagens em tiles) pode ser usado para suportar processamento paralelo. O particionamento em tiles de subimagens com propósitos de processamento paralelo pode mudar de imagem para imagem (por exemplo, com propósitos de equilíbrio de carga em processamento paralelo), e, portanto, pode ser gerenciada ao nível de imagem (por exemplo, no PPS). No entanto, particionamento de subimagem (particionamento de imagens em subimagens) pode ser empregada para suportar região de interesse (ROI) e acesso a imagem com base em subimagem. Em um caso como esse, sinalização de subimagens ou MCTS no PPS não é eficiente.
[0051] Em um outro exemplo, quando qualquer subimagem em uma imagem é codificada como uma subimagem com restrição de movimento temporal, todas as subimagens na imagem podem ser codificadas como subimagens temporais com restrição de movimento. Tal particionamento de imagem pode ser limitante. Por exemplo, codificar uma subimagem como uma subimagem com restrição de movimento temporal pode reduzir a eficiência de codificação em troca de funcionalidade adicional. No entanto, em região de aplicações com base em interesse, normalmente somente uma ou algumas poucas das subimagens usam funcionalidade com base em subimagem com restrição de movimento temporal. Logo, as subimagens restantes sofrem de eficiência de codificação reduzida sem fornecer qualquer benefício prático.
[0052] Em um outro exemplo, os elementos de sintaxe para especificar o tamanho de uma subimagem podem ser especificados em unidades de tamanhos de CTU de luma. Consequentemente, 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ários problemas. Por exemplo, particionamento de subimagem é aplicável somente para imagens com largura e/ou altura de imagem de imagem que são um número inteiro múltiplo de CtbSizeY. Isso torno particionamento de subimagem indisponível para imagens que contêm dimensões que não são números inteiros múltiplos de CTbSizeY. Se particionamento de subimagem fosse aplicada para largura e/ou altura de imagem quando a dimensão de imagem não é 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 a subimagem mais inferior estaria incorreta. Tal derivação incorreta causaria resultados errôneos em algumas ferramentas de codificação.
[0053] Em um 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 tal localização desocupada em ordem de exame de varredura de CTU dentro de uma imagem que é grande o bastante para conter a subimagem dentro das fronteiras de imagem. Derivar localização de subimagens de tal maneira pode causar erros em alguns casos. Por exemplo, se uma subimagem é perdida na transmissão, então as localizações de outras subimagens são derivadas incorretamente 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 um outro exemplo, decodificar uma subimagem pode exigir extração de subimagens colocalizadas em imagens de referência. Isso pode impor complexidade e adicional e encargos resultantes em termos de processador e uso de recurso de memória.
[0055] Em um outro exemplo, quando uma subimagem é designada como uma subimagem com restrição de movimento temporal, filtros loop que atravessam a fronteira de subimagem são desabilitados. Isso ocorre independente de se filtros loop que atravessam fronteiras de tile estão ou não habilitados. Uma restrição como essa pode ser muito restritiva e pode resultar em artefatos visuais para imagens de vídeo que empregam um múltiplo de subimagens.
[0056] Em um outro exemplo, a relação entre o SPS, STGPS, PPS e cabeçalhos de grupo de tiles é conforme a seguir. O STGPS faz referência ao SPS, o PPS faz referência ao STGPS, e os cabeçalhos de grupo de tiles/cabeçalhos de fatia fazem referência ao PPS. No entanto, o STGPS e o PPS devem ser ortogonais e não o PPS fazer referência ao STGPS. A disposição precedente pode também proibir todos os grupos de tiles da mesma imagem de fazer referência ao mesmo PPS.
[0057] Em um 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 fronteira de modo que sua relação espacial mútua possa ser definida. No entanto, tais informações podem não ser suficientes para derivar as informações de posição e tamanho para um conjunto de grupo de tiles a nível de sequência em alguns casos. Em outros casos, sinalizar as informações de posição e tamanho pode ser redundante.
[0058] Em um outro exemplo, um STGPS ID pode ser sinalizado em um cabeçalho de unidade de 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 de NAL. Um outro problema é que a menos que o conjunto de grupo de tiles a nível de sequências seja restrito para evitar sobreposições, um grupo de tiles pode ser associado a múltiplos conjuntos de grupos de tiles a nível de sequência.
[0059] São revelados no presente documento vários mecanismos para tratar de um ou mais dentre os problemas mencionados acima. Em um primeiro exemplo, as informações de gabarito para subimagens são incluídas em um SPS e não em um PPS. Informações de gabarito de subimagem incluem localização e tamanho de subimagem de subimagem. Localização de subimagem é um desvio entre a amostra superior esquerda da subimagem e a amostra superior esquerda da imagem. Tamanho de subimagem é a altura e largura da subimagem conforme medida em amostras de luma. Como indicado acima, alguns sistemas incluem informações agrupamento lado a lado no PPS uma vez que as tiles podem mudar de imagem para imagem. No entanto, subimagens podem ser usadas para suportar aplicativos ROI e acesso com base em subimagem. Essas funções não mudam em uma base de imagem 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 um PPS por imagem. Colocar informações de gabarito para subimagens no SPS assegura que o gabarito é sinalizado somente uma vez para uma sequência/um segmento e não redundantemente sinalizado para cada PPS. Consequentemente, sinalizar gabarito de subimagem no SPS aumenta a eficiência de codificação e logo 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. Sinalizar as informações de subimagem reduz a possibilidade de erro em caso de pacotes perdidos e suporta funcionalidade adicional em termos de extrair subimagens. Consequentemente, sinalizar gabarito 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 a serem múltiplos do tamanho da CTU. No entanto, essas restrições são retiradas quando uma subimagem é posicionada na fronteira à direita da imagem ou na fronteira inferior da imagem, respectivamente. Como indicado acima, alguns sistemas de vídeo podem limitar subimagens para incluir alturas e larguras que são múltiplas do tamanho da CTU. Isso impede que as subimagens operem corretamente com muitos gabaritos de imagem. Permitindo se que subimagens ao fundo e à direita incluam alturas e larguras, respectivamente, que não devem ser múltiplas do tamanho da CTU, subimagens podem ser usadas com qualquer imagem sem causar erros de decodificação. Isso resulta em aumentar funcionalidade de codificador e decodificador. Além disso, a funcionalidade aumentada permite a um codificador codificar imagens mais eficientemente, o 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, subimagens são restritas a cobrir uma imagem sem lacuna ou sobreposição. Como indicado acima, alguns sistemas de codificação de vídeo permitem que subimagens incluam lacunas e sobreposições. Isso cria o potencial para grupos de tiles/fatias serem associados a múltiplas subimagens. Se isso é permitido no codificador, decodificadores têm de ser construídos para suportar um esquema de codificação mesmo quando o esquema de decodificação é raramente usado. Proibindo-se lacunas e sobreposições de subimagem, a complexidade do decodificador pode ser diminuída uma vez que não se exige ao decodificador que responda por potenciais lacunas e sobreposições quando se determina localizações e tamanhos de subimagem. Além disso, proibir lacunas e sobreposições de subimagem reduz a complexidade de processos de otimização de distorção de taxa (RDO) no codificador uma vez que o codificador pode omitir considerar casos de lacuna e sobreposição quando se está selecionando uma codificação para uma sequência de vídeo. Consequentemente, evitar lacunas 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 é uma subimagem com restrição de movimento temporal. Como indicado acima, alguns sistemas podem coletivamente estabelecer todas as subimagens para serem subimagens temporais com restrição de movimento ou proibir completamente uso de subimagens temporais com restrição de movimento. Tais subimagens temporais com restrição de movimento fornecem funcionalidade de extração independente ao custo de eficiência de codificação diminuída. No entanto, em região de aplicações com base em interesse, uma região de interesse deve ser codificada para extração independente enquanto as regiões do lado de fora da região de interesse não precisam dessa funcionalidade. Logo, as subimagens restantes sofrem de eficiência de codificação reduzida sem fornecer qualquer benefício prático. Consequentemente, a flag permite uma mistura de subimagens temporais com restrição de movimento que fornecem funcionalidade de extração independente e subimagens sem restrição de movimento para eficiência de codificação aumentada quando extração independente não é desejada. Logo, a flag permite funcionalidade aumentada e/ou eficiência de codificação aumentada, o 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 são sinalizados no SPS, e cabeçalhos de fatia incluem um ID de subimagem indicando a subimagem que contém as fatias correspondentes. Como indicado acima, alguns sistemas sinalizam posições de subimagem relativas a outras subimagens. Isso causa um problema se subimagens são perdidas ou são extraídas separadamente. 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 aplicativos que extraem somente algumas das subimagens e evitam transmitir outras subimagens. Uma lista completa de todos os IDs de subimagem pode ser enviada no SPS juntamente com informações de dimensionamento relevantes. Cada cabeçalho de fatia pode conter um ID de subimagem indicando a subimagem que inclui a fatia correspondente. Dessa maneira, subimagens e fatias correspondentes podem ser extraídas e posicionadas sem referência a outras subimagens. Logo, os IDs de subimagem suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, o 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. Como indicado acima, diferentes subimagens podem ter funcionalidade diferente em alguns casos e logo podem ser tratadas diferentemente durante o processo de codificação. Sendo assim, um nível com base em imagem pode não ser útil para decodificar algumas subimagens. Logo, a presente revelação inclui níveis para cada subimagem. Dessa maneira, cada subimagem pode ser codificada independentemente de outras subimagens sem desnecessariamente sobretaxar o decodificador estabelecendo-se exigências de decodificação muito altas para subimagens codificadas de acordo com mecanismos menos complexos. As informações sinalizadas a nível de subimagem suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, o 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 exemplificativo operacional 100 de codificar 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 então decodifica 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 de modo geral espelha o processo de codificação para permitir que o decodificador reconstrua consistentemente 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. Como um 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 streaming do vídeo ao vivo. O arquivo de vídeo pode incluir tanto um componente de áudio e um componente de vídeo. O componente de vídeo contém uma série de quadros de imagem que, quando visualizada em uma sequência, dá a impressão visual de movimento. Os quadros contêm pixels que são expressos em termos de luz, referidos no presente documento como componentes de luma (ou amostras de luma), e cor, o que é referido como componentes de croma (ou amostras de cor). Em alguns exemplos, os quadros podem também 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 quadrados 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 primeiro ser dividido em unidades de árvore de codificação (CTUs), as quais são blocos de um tamanho predefinido (por exemplo, sessenta e quatro pixels por sessenta e quatro pixels). As CTUs contêm tanto amostras de luma quanto de croma. Árvores de codificação podem ser empregadas para dividir as CTUs em blocos e então recursivamente subdividir os blocos até configurações serem conseguidas que suportam codificação adicional. Por exemplo, componentes de luma de um quadro podem ser subdivididos até os blocos individuais conterem relativamente homogêneos valores de iluminação homogêneos. Além disso, componentes de croma de um quadro podem ser subdivididos até que os blocos individuais contenham relativamente valores de cor homogêneos. Consequentemente, 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. Predição inter é projetada para tirar vantagem do fato de que objetos em uma passagem comum tendem a aparecer em quadros sucessivos. Consequentemente, um bloco representando um objeto em um quadro de referência não precisa ser repetidamente descrito em quadros adjacentes. Especificamente, um objeto, tal como uma mesa, pode permanecer em uma posição constante por múltiplos quadros. Logo a mesa é descrita uma vez e quadros adjacentes podem se referir de volta ao quadro de referência. Mecanismos de correspondência padrão podem ser empregados para corresponder objetos por 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. Como um exemplo em particular, um vídeo pode mostrar um automóvel que se move através da tela por múltiplos quadros. Vetores de movimento podem ser empregados para descrever tal movimento. Um vetor de movimento é um vetor bidimensional que fornece um desvio das coordenadas de um objeto em um quadro para as coordenadas do objeto em um quadro de referência. Sendo assim, predição inter pode codificar um bloco de imagem em um quadro atual como um conjunto de vetores de movimento indicando um desvio do bloco correspondente em um quadro de referência.
[0069] Predição intra codifica blocos em um quadro comum. Predição intra tira vantagem do fato de que componentes de luma e de croma tendem a se aglomerar em um quadro. Por exemplo, um fragmento de verde em uma porção de uma árvore tende a ser posicionado adjacente a fragmentos de verde similares. Predição intra emprega múltiplos modos de predição direcional (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 às amostras de um bloco vizinho em uma direção correspondente. Modo plano indica que uma série de blocos ao longo de uma fileira/coluna (por exemplo, um plano) pode ser interpolada com base em blocos vizinhos nas bordas da fileira. Modo plano, com efeito, indica uma suave transição de luz/cor através de uma fileira/coluna empregando-se uma inclinação relativamente constante em mudar valores. Modo CC é empregado para suavizar a fronteira 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 direcionais de predição. Consequentemente, blocos de predição intra podem representar blocos de imagem como vários valores de modo de predição relacionais 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. 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 iterativamente aplica filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptáveis, e filtros de desvio adaptável a amostra (SAO) para os blocos/quadros. Esses filtros atenuam tais artefatos de blocagem de modo que o arquivo codificado possa ser precisamente reconstruído. Além disso, esses filtros atenuam artefatos nos blocos de referência reconstruídos de modo que artefatos tenham menos probabilidade de criar 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 tenha 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 reconstrução de sinal de vídeo adequada no decodificador. Por exemplo, tais dados podem incluir dados de partição, dados de predição, blocos residuais, e várias flags fornecendo instruções de codificação para o decodificador. O fluxo de bits pode ser armazenado na memória para transmissão em direção a um decodificador mediante solicitação. O fluxo de bits pode também 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. Consequentemente, as etapas 101, 103, 105, 107, e 109 podem ocorrer continuamente e/ou simultaneamente por muitos quadros e blocos. A ordem mostrada na Figura 1 é apresentada para clareza e facilidade de discussão, e não é destinada a limitar o processo de codificação de vídeo para uma ordem em particular.
[0072] O decodificador recebe o fluxo de bits e começa 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 sintaxe e vídeo 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 corresponder os resultados de particionamento de bloco na etapa 103. Codificação/decodificação de entropia como empregada na etapa 111 é descrita agora. O codificador faz muitas escolhas durante o processo de compressão, tal como selecionar esquemas de particionamento de bloco a partir de diversas escolhas possíveis com base no posicionamento espacial de valores na(s) imagem (imagens) inserida(s). Sinalizar as escolhas exatas pode empregar um grande número de bins. Conforme usado no presente documento, um bin é um valor binário que é tratado como uma variável (por exemplo, um valor de bit que pode variar dependendo do contexto). Codificação de entropia permite ao codificador descartar quaisquer opções que sejam claramente não viáveis para um caso em particular, deixando um conjunto de opções permissíveis. A cada opção permissível é então atribuída uma palavra-código. O comprimento das palavras-código é com base no número de opções permissíveis (por exemplo, um bin para duas opções, dois bins para três a quatro opções, etc.); O codificador então codifica a palavra-código para a opção selecionada. Esse esquema reduz o tamanho das palavras-código uma vez que as palavras-código são tão grandes quanto desejado para indicar exclusivamente uma seleção a partir de um pequeno subconjunto de opções permissíveis em vez de exclusivamente indicar a seleção a partir de um conjunto potencialmente grande de todas as opções possíveis. O decodificador então decodifica a seleção pela determinação do conjunto de opções permissíveis de uma maneira similar ao codificador. Pela determinação do conjunto de opções permissíveis, 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 tanto blocos de predição intra quanto blocos de predição inter conforme gerados 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 pode também ser sinalizada no fluxo de bits por meio de codificação de entropia conforme discutido acima.
[0074] Na etapa 115, filtragem é realizada nos quadros do sinal de vídeo reconstruído de uma maneira similar à etapa 107 no codificador. Por exemplo, filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptáveis, 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 para a exibição na etapa 117 para visualização por um usuário final.
[0075] A Figura 2 é um diagrama esquemático de um exemplo de sistema de codificação e decodificação (codec) 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 representar componentes empregados tanto em um codificador quanto em um decodificador. O sistema codec 200 recebe e particiona um sinal de vídeo conforme discutido com relação às etapas 101 e 103 no método operacional 100, o que resulta em um sinal de vídeo particionado 201. O sistema codec 200 então comprime o sinal de vídeo particionado 201 em um fluxo de bits codificado quando atuando como um codificador conforme discutido com relação às etapas 105, 107, e 109 no método 100. Quando atuando como um decodificador o sistema codec 200 gera um sinal de vídeo emitido a partir do fluxo de bits conforme discutido com 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 escalonamento e quantização de transformada 213, um componente de estimativa de imagem intra intra 215, um componente de predição de imagem intra 217, um componente de compensação de movimento 219, um componente de estimativa de movimento 221, um componente de escalonamento e transformada inversa 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 formatação de cabeçalho e codificação aritmética binária adaptável ao contexto (CABAC) 231. Tais componentes são acoplados conforme mostrado. Na Figura 2, linhas negras cheias 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 todos estar 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 intra 217, o componente de compensação de movimento 219, o componente de escalonamento e transformada inversa 229, o componente de filtros in-loop 225, e o componente de buffer de imagem decodificada 223. Esses componentes são agora descritos.
[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 divisão para subdividir um bloco de pixels em blocos de pixels menores. Esses blocos podem então ser adicionalmente subdivididos em blocos menores. Os blocos podem ser referidos como nós na árvore de codificação. Nós pais maiores são divididos em nós filhos menores. O número de vezes que um nó é subdividido é referido como 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 diferença de croma vermelha (Cr), e bloco(s) de uma diferença de croma azul (Cb) juntamente com instruções de sintaxe correspondentes para a CU. Os modos divididos podem incluir uma árvore binária (BT), árvore tripla (TT), e uma árvore quaternária (QT) empregada para particionar um nó em dois, três, ou quatro nós filhos, respectivamente, de variados formatos dependendo dos modos de divisão empregados. O sinal de vídeo particionado 201 é encaminhado para o componente de controle de codificador geral 211, o componente de escalonamento e quantização de transformada 213, o componente de estimativa intra de imagem 215, o componente de análise de controle de filtro 227, e o componente de estimativa 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 aplicativo. Por exemplo, o componente de controle de codificador geral 211 gerencia otimização de tamanho de taxa de bits/fluxo de bits versus qualidade de reconstrução. Tais decisões podem ser tomadas com base em disponibilidade de espaço de armazenamento/largura de banda e solicitações de resolução de imagem. O componente de controle de codificador geral 211 também gerencia utilização de buffer à luz da velocidade de transmissão para atenuar problemas de insuficiência e saturação de buffer. Para gerenciar esses problemas, o componente de controle de codificador geral 211 gerencio 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 resolução e aumentar uso de largura de banda ou diminuir complexidade de compressão para diminuir uso de resolução e largura de banda. Logo, o componente de controle de codificador geral 211 controla os outros componentes do sistema codec 200 para equilibrar qualidade de reconstrução de sinal de vídeo no tocante à taxa de bits. O componente de controle de codificador geral 211 cria dados de controle, o que controla a operação dos outros componentes. Os dados de controle são também encaminhados para o componente de formatação de cabeçalho e CABAC 231 para serem codificados no fluxo de bits em parâmetros de sinal para decodificação no decodificador.
[0078] O sinal de vídeo particionado 201 é também enviado para o componente de estimativa de movimento 221 e para o 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 estimativa de movimento 221 e o componente de compensação de movimento 219 realizam codificação preditiva inter do bloco de vídeo recebido relativo 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últiplos passos de codificação, por exemplo, para selecionar um modo apropriado de codificação para cada bloco de dados de vídeo.
[0079] O componente de estimativa de movimento 221 e o componente de compensação de movimento 219 podem ser altamente integrados, mas são ilustrados separadamente para propósitos conceituais. Estimativa de movimento, realizada pelo componente de estimativa de movimento 221, é o processo de gerar vetores de movimento, os quais estimam movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de um objeto codificado relativo a um bloco preditivo. Um bloco preditivo é um bloco que é encontrado para corresponder estreitamente o bloco a ser codificado, em termos de diferença de pixel. Um bloco preditivo pode também ser referido como um bloco de referência. Tal diferença de pixel pode ser determinada pela soma de diferença absoluta (SAD), soma de diferença quadrada (SSD), ou outra métrica de diferenças. HEVC emprega diversos objetos codificados incluindo uma CTU, blocos de árvore de codificação (CTBs), e CUs. Por exemplo, uma CTU pode ser dividida em CTBs, as quais podem então ser divididas 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 estimativa de movimento 221 gera vetores de movimento, PUs, e TUs usando-se uma análise de distorção de taxa como parte de um processo de otimização de distorção de taxa. Por exemplo, o componente de estimativa 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. tendo as melhores características de distorção de taxa. As melhores características de distorção de taxa equilibram tanto a qualidade de vídeo (por exemplo, montante 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 abaixo de número inteiro de pixel 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 um quarto de pixel, posições de um oitavo de pixel, ou outras posições fracionárias de pixel da imagem de referência. Portanto, o componente de estimativa de movimento 221 pode realizar uma busca de movimento relativa às posições completas de pixel e posições fracionárias de pixel e emitir um vetor de movimento com precisão fracionária de pixel. O componente de estimativa de movimento 221 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia codificada de modo inter por comparar a posição da PU à posição de um bloco preditivo de uma imagem de referência. O componente de estimativa de movimento 221 emite o vetor de movimento calculado como dados de movimento para o componente de formatação de cabeçalho e CABAC 231 para codificação e movimento para o componente de compensação de movimento 219.
[0081] Compensação de movimento, realizada pelo componente de compensação de movimento 219, pode envolver obter ou gerar o bloco preditivo com base no vetor de movimento determinado pelo componente de estimativa de movimento 221. Mais uma vez, o componente de estimativa de movimento 221 e o componente de compensação de movimento 219 podem ser funcionalmente integrados, em alguns exemplos. Mediante 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 o qual 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 estimativa de movimento 221 realiza estimativa de movimento relativa a componentes de luma, e o componente de compensação de movimento 219 usa vetores de movimento calculados com base nos componentes de luma tanto para componentes de croma quanto para componentes de luma. O bloco preditivo e o bloco residual são encaminhados para o componente de escalonamento e quantização de transformada 213.
[0082] O sinal de vídeo particionado 201 é também enviado para o componente de estimativa de imagem intra intra 215 e para o componente de predição de imagem intra intra 217. Assim como com o componente de estimativa de movimento 221 e o componente de compensação de movimento 219, o componente de estimativa de imagem intra 215 e o componente de predição de imagem intra 217 podem ser altamente integrados, mas são ilustrados separadamente para propósitos conceituais. O componente de estimativa de imagem intra 215 e o componente de predição de imagem intra 217 predizem de modo intra um bloco atual relativo a blocos em um quadro atual, como uma alternativa à predição inter realizada pelo componente de estimativa de movimento 221 e pelo componente de compensação de movimento 219 entre quadros, como descrito acima. Em particular, o componente de estimativa de imagem intra 215 determina um modo de predição intra a usar para codificar um bloco atual. Em alguns exemplos, o componente de estimativa 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 para o componente de formatação de cabeçalho e CABAC 231 para codificação.
[0083] Por exemplo, o componente de estimativa de imagem intra 215 calcula valores de distorção de taxa usando uma análise de distorção de taxa para os vários modos de predição intra testados, e seleciona o modo de predição intra tendo as melhores características de distorção de taxa entre os modos testados. A análise de distorção de taxa de modo geral determina um montante 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 estimativa de imagem intra 215 calcula razões a partir das distorções e taxas para os vários blocos codificados para determinar qual modo de predição intra exibe o melhor valor de distorção de taxa para o bloco. Além disso, o componente de estimativa de imagem intra 215 pode ser configurado para codificar blocos de profundidade de um mapa de profundidade usando um modo de modelar profundidade (DMM) com base em otimização de distorção de taxa (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 estimativa 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, representado como uma matriz. O bloco residual é então encaminhado para o componente de escalonamento e quantização de transformada 213. O componente de estimativa de imagem intra 215 e o componente de predição de imagem intra 217 podem operar tanto em componentes de luma quanto de croma.
[0085] O componente de escalonamento e quantização de transformada 213 é configurado para comprimir adicionalmente o bloco residual. O componente de escalonamento e quantização de transformada 213 aplica uma transformada, tal como uma transformada de cosseno discreta (DCT), uma transformada de seno discreta (DST), ou uma transformada similar conceitualmente, para o bloco residual, produzindo um bloco de vídeo compreendendo valores de coeficiente de transformada residual. Transformadas wavelet, transformadas de número inteiro, transformadas de sub-banda ou outros tipos de transformadas poderiam também ser usadas. A transformada pode converter as informações residuais a partir de um domínio de valor de pixel para um domínio de transformada, tal como um domínio da frequência. O componente de escalonamento e quantização 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 para as 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 escalonamento e quantização de transformada 213 é também configurado para quantizar os coeficientes de transformada para reduzir adicionalmente a taxa de bit. O processo de quantização pode reduzir a profundidade de bit associada a alguns dos ou a 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 escalonamento e quantização de transformada 213 pode então realizar um exame da matriz incluindo os coeficientes de transformada quantizados. Os coeficientes de transformada quantizados são encaminhados para o componente de formatação de cabeçalho e CABAC 231 para serem codificados no fluxo de bits.
[0086] O componente de escalonamento e transformada inversa 229 aplica uma operação inversa do componente de escalonamento e quantização de transformada 213 para suportar estimativa de movimento. O componente de escalonamento e transformada inversa 229 aplica escalonamento, transformação, e/ou quantização inversos para reconstruir o bloco residual no domínio de pixel, por exemplo, para uso posterior como um bloco de referência o qual pode se tornar um bloco preditivo para um outro bloco atual. O componente de estimativa de movimento 221 e/ou o componente de compensação de movimento 219 pode(m) calcular um bloco de referência adicionando-se o bloco residual de volta a um bloco preditivo correspondente para uso em estimativa de movimento de um bloco/quadro posterior. Filtros são aplicados aos blocos de referência reconstruídos para atenuar artefatos criados durante escalonamento, quantização e transformada. Tais artefatos poderiam de outro modo causar predição não exata (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 nos blocos residuais e/ou em blocos de imagem reconstruídos. Por exemplo, o bloco residual transformado a partir do componente de escalonamento e transformada inversa 229 pode ser combinado com um bloco de predição correspondente a partir do componente de predição de imagem intra 217 e/ou do componente de compensação de movimento 219 para reconstruir o bloco de imagem original. Os filtros podem então ser aplicados ao bloco de imagem reconstruído. Em alguns exemplos, os filtros podem em vez disso 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 juntos, mas são representados separadamente para propósitos conceituais. Filtros aplicados aos blocos de referência reconstruídos são aplicados em regiões espaciais particulares e incluem múltiplos parâmetros para ajustar 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 estabelece parâmetros correspondentes. Tais dados são encaminhados para o componente de formatação de cabeçalho e CABAC 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 adaptável. Tais filtros podem ser aplicados no domínio espacial/de pixel (por exemplo, em um bloco de pixel reconstruído) ou no domínio da frequência, dependendo do exemplo.
[0088] Quando operando como um codificador, o bloco de imagem reconstruído filtrado, o bloco residual, e/ou o bloco de predição são armazenados no componente de buffer de imagem decodificada 223 para uso posterior em estimativa de movimento conforme discutido acima. Quando operando 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 emitido. O componente de buffer de imagem decodificada 223 pode ser qualquer dispositivo de memória com capacidade de armazenar blocos de predição, blocos residuais, e/ou blocos de imagem reconstruídos.
[0089] O componente de formatação de cabeçalho e CABAC 231 recebe os dados a partir 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 formatação de cabeçalho e CABAC 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 de movimento, bem como dados residuais na forma de dados de coeficiente de transformada quantizados 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 podem também incluir tabelas de índice de modo de predição intra (também referidas como 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 adaptável a contexto (CAVLC), CABAC, codificação aritmética binária adaptável a contexto com base em sintaxe (SBAC), codificação de entropia com particionamento de intervalo de probabilidade (PIPE), ou uma outra técnica de codificação de entropia. Em seguida à codificação de entropia, o fluxo de bits codificado pode ser transmitido para um 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 ilustrando um exemplo de codificador de vídeo 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 etapas 101, 103, 105, 107, e/ou 109 do método operacional 100. O codificador 300 particiona um sinal de vídeo inserido, resultando em um sinal de vídeo particionado 301, o qual é 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 estimativa de imagem intra 215 e ao componente de predição de imagem intra 217. O sinal de vídeo particionado 301 é também encaminhado para 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 estimativa de movimento 221 e ao componente de compensação de movimento 219. Os blocos de predição e blocos residuais a partir do componente de predição de imagem intra 317 e do componente de compensação de movimento 321 são encaminhados para um componente de transformada e quantização 313 para efetuar transformada e quantização dos blocos residuais. O componente de transformada e quantização 313 pode ser substancialmente similar ao componente de escalonamento e quantização de transformada 213. Os blocos residuais transformados e quantizados e os blocos de predição correspondentes (juntamente com dados de controle associados) são encaminhados para 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 formatação de cabeçalho e CABAC 231.
[0092] Os blocos residuais transformados e quantizados e/ou os blocos de predição correspondentes são também encaminhados a partir do componente de transformada e quantização 313 para um componente de transformada e quantização inversas 329 para reconstrução em blocos de referência para uso pelo componente de compensação de movimento 321. O componente de transformada e quantização inversas 329 pode ser substancialmente similar ao componente de escalonamento e transformada inversa 229. Filtros in-loop em um componente de filtros in-loop 325 são também aplicados aos blocos residuais e/ou aos 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 com 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 ilustrando um exemplo de decodificador de vídeo 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 de 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 emitido 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 CAVLC, CABAC, SBAC, PIPE codificação, ou outras técnicas de 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 transformada e quantização inversas 429 para reconstrução em blocos residuais. O componente de transformada e quantização inversas 429 pode ser similar ao componente de transformada e quantização inversas 329.
[0095] Os blocos residuais reconstruídos e/ou os blocos de predição 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 estimativa 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 de predição intra. Os blocos de imagem de predição intra e/ou os blocos residuais reconstruídos e os dados de predição inter correspondentes são encaminhados para um componente de buffer de imagem decodificada 423 por meio de um componente de filtros in-loop 425, o qual 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 de imagem, blocos residuais e/ou os blocos de predição reconstruídos, e tais informações são armazenadas no componente de buffer de imagem decodificada 423. Os blocos de imagem reconstruídos a partir 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 estimativa 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 podem também ser encaminhados por meio do componente de filtros in-loop 425 para o componente de buffer de imagem decodificada 423. O componente de buffer de imagem decodificada 423 continua a armazenar blocos de imagem reconstruídos adicionais, os quais podem ser reconstruídos em quadros por meio das informações de partição. Tais quadros podem também ser colocados em uma sequência. A sequência é emitida em direção a um display como um sinal de vídeo emitido reconstruído.
[0096] A Figura 5 é um diagrama esquemático ilustrando um exemplo de fluxo de bits 500 e subfluxo de bits 501 extraído a partir 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 por um decodificador 400. Como um outro exemplo, o fluxo de bits 500 pode ser gerado por um codificador na etapa 109 de 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âmetros de imagem (PPSs) 512, uma pluralidade de cabeçalhos de fatia 514, dados de imagem 520, e um ou mais mensagens SEI 515. Um SPS 510 contém dados em sequência comuns a todas as imagens na sequência de vídeo contida no fluxo de bits 500. Tais dados podem incluir dimensionamento 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 para uma ou mais imagens correspondentes. Logo, 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, desvios, 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 para uma ou mais fatias correspondentes 524 em uma imagem. Logo, 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 da predição, pontos de entrada em tile, parâmetros de desblocagem, etc. Em alguns exemplos, fatias 524 podem ser referidas como grupos de tiles. Em um caso como esse, o cabeçalho de fatia 514 pode ser referido como um cabeçalho de grupo de tiles. As mensagens SEI 515 são mensagens opcionais que contêm metadados que não são exigidos para decodificação de bloco, mas podem ser empregados para propósitos relacionados tais como indicar temporização de emissão de imagem, configuraçõ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 classificados de acordo com um particionamento usado para particionar a imagem antes da codificação. Por exemplo, a sequência de vídeo é dividida em imagens 521. As imagens 521 podem ser adicionalmente divididas em subimagens 522, as quais são divididas em fatias 524. As fatias 524 podem ser adicionalmente divididas 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 então ser 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 faz referência ao PPS 512 e as fatias 524 fazem referência ao cabeçalho de fatia 514. As subimagens 522 podem ser particionadas consistentemente por uma sequência de vídeo inteira (também conhecida como um segmento), e logo podem fazer referência ao SPS 510. Cada fatia 524 pode conter uma ou mais tiles. Cada fatia 524, e logo a imagem 521 e a subimagem 522, pode também 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 instante correspondente no tempo. No entanto, determinados aplicativos podem desejar exibir somente uma porção de uma imagem 521 em alguns casos. Por exemplo, um sistema de realidade virtual (VR) pode exibir uma região da imagem 521, selecionada pelo usuário o que cria a sensação de estar presente na passagem representada na imagem 521. Uma região que um usuário pode desejar visualizar não é conhecida quando o fluxo de bits 500 é codificado. Consequentemente, a imagem 521 pode conter cada possível região que um usuário pode potencialmente visualizar como subimagens 522, as quais podem ser decodificadas e exibidas separadamente com base em inserção por usuário. Outros aplicativos podem exibir separadamente uma região de interesse. Por exemplo, uma televisão com uma imagem em uma imagem pode desejar exibir uma região em particular, e logo uma subimagem 522, a partir de uma sequência de vídeo em uma imagem 521 de uma sequência de vídeo não relacionada. Em mais um outro exemplo, sistemas de teleconferência podem exibir uma imagem inteira 521 de um usuário que está falando naquele momento e uma subimagem 522 de um usuário que não está falando naquele momento. Consequentemente, uma subimagem 522 pode conter uma região definida da imagem 521. Uma subimagem 522 que está temporariamente com restrição de movimento pode ser separadamente decodificável a partir do resto da imagem 521. Especificamente, uma subimagem com restrição de movimento temporal é codificada sem referência a amostras do lado de fora da subimagem com restrição de movimento temporal, e logo 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 superior esquerdo e uma CTU em um canto inferior direito. Em alguns exemplos, uma fatia 524 inclui uma série de tiles e/ou CTUs em uma ordem de exame de varredura que procede da esquerda para a direita e de cima para baixo. Em outros exemplos, uma fatia 524 é uma fatia retangular. Uma fatia retangular pode não atravessar a largura inteira de uma imagem de acordo com uma ordem de exame de varredura. Em vez disso, uma fatia retangular pode conter uma região retangular e/ou quadrada de uma imagem 521 e/ou subimagem 522 definida em termos de uma CTU e/ou fileira de tiles e uma CTU e/ou coluna de tiles. Uma fatia 524 é a menor unidade que pode ser separadamente exibida por um decodificador. Logo, fatias 524 de uma imagem 521 podem ser atribuídas para diferentes subimagens 522 para representar separadamente regiões desejadas de uma imagem 521.
[0101] Um decodificador pode exibir uma ou mais subimagens 523 da imagem 521. Subimagens 523 são um subgrupo de subimagens 522 selecionadas por usuário ou predefinidas. Por exemplo, uma imagem 521 pode ser dividida em nove subimagens 522, mas o decodificador pode exibir somente uma única subimagem 523 do grupo de subimagens 522. As subimagens 523 contêm fatias 525, as quais são um subgrupo de fatias 524 selecionadas ou predefinidas. Para permitir exibição separada das subimagens 523, um subfluxo de bits 501 pode ser extraído 529 a partir do fluxo de bits 500. A extração 529 pode ocorrer no lado de codificador de modo que o decodificador receba somente o subfluxo de bits 501. Em outros casos, o fluxo de bits 500 inteiro é transmitido para o decodificador e o decodificador extrai 529 o subfluxo de bits 501 para decodificação separada. Deve ser notado que o subfluxo de bits 501 pode também ser referido de modo geral como 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 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 desvio entre uma amostra superior esquerda de uma subimagem correspondente 522 e uma amostra superior esquerda da imagem 521. A localização de subimagem 532 e o tamanho de subimagem 531 definem um gabarito 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 exame de varredura de subimagem 522 ou outro valor definido. Logo, 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 a subimagens 522 podem ser incluídos no PPS 512 porque uma subimagem 522 é particionada de uma imagem 521. No entanto, partições usadas para criar subimagens 522 podem ser usadas por aplicativos, tais como aplicativos com base em ROI, aplicativos VR, etc., que dependem de partições subimagem 522 consistentes por uma sequência/segmento de vídeo. Sendo assim, partições de subimagem 522 de modo geral não mudam em uma base de imagem por imagem. Colocar informações de gabarito em subimagens 522 no SPS 510 assegura que o gabarito é sinalizado somente uma vez para uma sequência/segmento e não sinalizado redundantemente para cada PPS 512 (o qual pode ser sinalizado para cada imagem 521 em alguns casos). Além disso, sinalizar as 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 extrair subimagens 523. Consequentemente, sinalizar o gabarito da 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 é ou não uma subimagem com restrição de movimento temporal. Logo, o decodificador pode ler as flags de subimagens com restrição de movimento 534 e determinar quais das subimagens 522 podem ser extraídas separadamente e exibidas sem decodificar outras subimagens 522. Isso permite a subimagens 522 selecionadas serem codificadas como subimagens temporais com restrição de movimento enquanto permite a outras subimagens 522 serem codificadas sem tais restrições para eficiência de codificação aumentada.
[0104] Os IDs de subimagem 533 são também incluídos nos cabeçalhos de fatia 514. Cada cabeçalho de fatia 514 contém dados relevantes para um conjunto de fatias 524 correspondente. Consequentemente, o cabeçalho de fatia 514 contém somente os IDs de subimagem 533 correspondentes às fatias 524 associadas ao cabeçalho de fatia 514. Sendo assim, 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 pode também usar o ID de subimagem 533 a partir do cabeçalho de fatia 514 para correlacionar a dados relacionados no SPS 510. Sendo assim, o decodificador pode determinar como posicionar as subimagens 522/523 e as fatias 524/525 pela leitura do SPS 510 e dos cabeçalhos de fatia 514 relevantes. Isso permite que as subimagens 523 e as fatias 525 sejam decodificadas mesmo se algumas subimagens 522 são perdidas na transmissão ou propositadamente omitidas para aumentar eficiência de codificação.
[0105] A mensagem de SEI 515 pode também 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. Dessa maneira, cada subimagem 522 pode ser codificada independentemente de outras subimagens 522. Isso assegura que para cada subimagem 522 pode ser alocado o montante correto de recursos de hardware no decodificador. Sem tal nível de subimagem 535, cada subimagem 522 seria alocado com recursos suficientes para decodificar a subimagem mais complexa 522. Logo, o nível de subimagem 535 impede o decodificador de superalocar recursos de hardware se subimagens 522 são associadas a variadas exigências de recurso de hardware.
[0106] A Figura 6 é um diagrama esquemático ilustrando um exemplo de imagem 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. Além disso, a imagem 600 pode ser particionada em subimagens 622, as quais são substancialmente similares a subimagens 522. As subimagens 622 incluem, cada uma, um tamanho de subimagem 631, o qual 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, o qual 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, a qual pode ser incluída em um fluxo de bits 500 como uma localização de subimagem 532. A localização 632 é expressa como um desvio entre a amostra superior esquerda de uma subimagem correspondente 622 e uma amostra superior esquerda 642 da imagem 600.
[0108] Além disso, conforme mostrado, algumas subimagens 622 podem ser subimagens temporais com restrição de movimento 634 e outras subimagens 622 não podem. 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 separadamente decodificada sem considerar dados das outras subimagens 622. Uma indicação de quais subimagens 622 são subimagens temporais com restrição de movimento 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 restritas a cobrir uma imagem 600 sem uma lacuna ou uma sobreposição. Uma lacuna é uma região de uma imagem 600 que não é incluída em qualquer subimagem 622. Uma sobreposição é uma região de uma imagem 600 que é incluída em mais que uma subimagem 622. No exemplo mostrado na Figura 6, as subimagens 622 são particionadas da imagem 600 para evitar tanto lacunas quanto sobreposições. Lacunas fazem as amostras de imagem 600 serem deixadas de fora das subimagens 622. Sobreposições fazem fatias associadas serem incluídas em múltiplas subimagens 622. Portanto, lacunas e sobreposições podem fazer amostras serem impactadas por tratamento diferencial quando subimagens 622 são codificadas diferentemente. Se isso é permitido no codificador, um decodificador tem de suportar um esquema de codificação mesmo quando o esquema de decodificação é raramente usado. Proibindo-se lacunas e sobreposições de subimagem 622, a complexidade do decodificador pode ser diminuída uma vez que não se exige que o decodificador responda por potencial lacunas e sobreposições quando se determina localizações 632 e tamanhos 631 de subimagem. Além disso, proibir lacunas e sobreposições subimagem 622 reduz a complexidade de processos RDO no codificador. Isso é porque o codificador pode ir considerar casos de lacuna e sobreposição quando se está selecionando uma codificação para uma sequência de vídeo. Consequentemente, evitar lacunas 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 ilustrando um exemplo de mecanismo 700 para relacionar fatias 724 a um gabarito de subimagem 722. Por exemplo, o mecanismo 700 pode aplicado à imagem 600. Além disso, 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 das fatias 724 incluem um ID de subimagem 733 para uma subimagem 722. O decodificador pode corresponder 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 a partir do SPS com base no ID de subimagem 733. Usando a localização 732, a subimagem 722 pode ser colocada com relação à amostra superior esquerda no canto superior esquerdo 742 da imagem. O tamanho pode ser usado para estabelecer a altura e a largura da subimagem 722 com relação à localização 732. As fatias 724 podem então ser incluídas na subimagem 722. Consequentemente, 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 uma vez que outras subimagens perdidas não alteram a decodificação da subimagem 722. Isso também suporta aplicações que extraem somente uma subimagem 722 e evita transmitir outras subimagens. Logo, os IDs de subimagem 733 suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, o 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 ilustrando um outro exemplo de imagem 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 mecanismo 700.
[0113] A imagem 800 inclui subimagens 822, as quais 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, os quais 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últiplas de tamanho de CTU 825. No exemplo mostrado, subimagens 822a têm uma altura de seis CTUs 825 e uma largura de cinco CTUs 825. Essa restrição é retirada para subimagens 822b posicionadas na fronteira à direita de imagens 801 e para subimagens 822c posicionadas na fronteira inferior 802 de imagens. No exemplo mostrado, subimagens 822b têm uma largura de entre cinco e seis CTUs 825. No entanto, subimagens 822b que não são posicionadas na fronteira inferior 802 de imagens são ainda restritas para manter uma altura de subimagem que é um múltiplo de um tamanho CTU 825. No exemplo mostrado, subimagens 822c têm uma altura de entre seis e sete CTUs 825. No entanto, subimagens 822c que não são posicionadas na fronteira à direita de imagens 801 são ainda restritas a manter uma largura de subimagem que é um múltiplo de tamanho da CTU 825.
[0114] Como indicado acima, alguns sistemas de vídeo podem limitar as subimagens 822 a incluir alturas e larguras que são múltiplos do tamanho da CTU 825. Isso pode impedir que subimagens 822 operem corretamente com muitos gabaritos de imagem, por exemplo, com uma imagem 800 que contém uma largura ou altura total que não é um múltiplo do tamanho da CTU 825. Permitindo se que subimagens inferiores 822c e subimagens à direita 822b incluam alturas e larguras, respectivamente, que não são múltiplos do tamanho da CTU 825, subimagens 822 podem ser usadas com qualquer imagem 800 sem causar erros de decodificação. Isso resulta em aumentar funcionalidade de codificador e decodificador. Além disso, a funcionalidade aumentada permite a um codificador codificar imagens mais eficientemente, o que reduz o uso de recursos de rede, recursos de memória, e/ou recursos de processamento no codificador e no decodificador.
[0115] Como descrito no presente documento, a presente revelação descreve projetos paro 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 independentemente usando um processo de decodificação similar como é usado para uma imagem. A presente revelação se relaciona à sinalização de subimagens em uma sequência de vídeo codificada e/ou fluxo de bits bem como ao processo para extração de subimagem. As descrições das técnicas são com base em VVC pelo JVET de ITU-T e ISO/IEC. No entanto, as técnicas também se aplicam a outras especificações de codec de vídeo. As seguintes são modalidades de exemplo descritas no presente documento. Tais modalidades podem ser aplicadas individualmente ou em combinação.
[0116] 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 a 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 referidas coletivamente como uma sequência de subimagem. Um loop para especificar adicionalmente informações descrevendo propriedades de cada subimagem pode também estar 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 desvio entre a amostra de luma de canto superior esquerdo da subimagem e a amostra de luma de canto superior esquerdo da imagem), e o tamanho da subimagem. Além disso, o SPS pode sinalizar se cada subimagem é ou não uma subimagem com restrição de movimento (contendo a funcionalidade de um MCTS). Informações de perfil, categoria, e nível para cada subimagem podem também ser sinalizadas ou ser deriváveis no decodificador. Tais informações podem ser empregadas para determinar informações de perfil, categoria, e nível para um fluxo de bits criado extraindo-se subimagens a partir do fluxo de bits original. O perfil e categoria de cada subimagem podem ser derivados para ser os mesmos perfil e categoria do fluxo de bits inteiro. O nível para cada subimagem pode ser sinalizado explicitamente. Tal sinalização pode estar presente no loop contido no SPS. Os parâmetros de decodificador de referência hipotéticos a nível de sequência (HRD) podem ser sinalizados na seção de informações de condição de uso de vídeo (VUI) do SPS para cada subimagem (ou equivalentemente, 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. Nesse 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 uma vez que tais informações podem ser derivadas a partir das propriedades de imagem. No entanto, a identificação de subimagem pode ainda ser sinalizada uma vez que o ID pode ser referido por unidades de VCL NAL/grupos de tiles que estão incluídos na subimagem extraída. Isso pode permitir que os IDs de subimagem permaneçam iguais quando se extrai a subimagem.
[0118] A localização de uma subimagem na imagem (desvio x e desvio y) pode ser sinalizada em unidades de amostras de luma. A localização representa a distância entre a amostra de luma de canto superior esquerdo da subimagem e a amostra de luma de canto superior esquerdo 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ínima (MinCbSizeY). Alternativamente, a unidade de desvios de localização 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.
[0119] O tamanho de uma subimagem (largura de subimagem e altura de subimagem) pode ser sinalizado em unidades de amostras de luma. Alternativamente, o tamanho de uma subimagem pode ser sinalizado em unidades do tamanho de bloco de luma decodificação mínima (MinCbSizeY). Alternativamente, a unidade de valores de 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 uma fronteira à direita de subimagem não coincide com uma fronteira à direita de imagem, a largura de subimagem pode ser exigida ser um múltiplo de número inteiro de tamanho de CTU de luma (CtbSizeY). Do mesmo modo, quando uma fronteira inferior de subimagem não coincide com uma fronteira inferior de imagem, pode ser exigido a altura de subimagem seja um múltiplo de número inteiro de tamanho de CTU de luma (CtbSizeY). Se uma largura de subimagem não é um número inteiro múltiplo de tamanho de CTU de luma, pode ser exigido que a subimagem seja localizada em uma posição mais à direita na imagem. Do mesmo modo, se uma altura de subimagem não é um número inteiro múltiplo de tamanho de CTU de luma, pode ser exigido que a subimagem seja localizada em uma posição mais inferior na imagem. Em alguns casos, a largura de subimagem pode ser sinalizado 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. Nesse caso, a largura real em amostras de luma pode ser derivada com base em localização de desvio da subimagem. A largura de 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. Do mesmo modo, uma altura da 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 um caso como esse, a altura real em amostra de luma pode ser derivada com base em localização de desvio da subimagem. A altura de 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 como sinalizado em um loop de subimagens no SPS. O ID de subimagem pode ser o índice da subimagem em ordem de exame de varredura de subimagem na imagem. Quando o valor do ID de subimagem de cada subimagem é o mesmo do índice de subimagem, o ID de subimagem pode ser sinalizado ou derivado. Quando o ID de subimagem de cada subimagem é diferente do índice de subimagem, o ID de subimagem é explicitamente sinalizado. O número de bits para sinalizar 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 determinados propósitos. Por exemplo, quando cabeçalhos de grupo de tiles contêm 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 assegurar que os primeiros poucos bits de um cabeçalho de grupo de tiles não são todos zeros para evitar inclusão acidental de um código de prevenção de emulação. Em casos opcionais onde subimagens de uma imagem não cobrir toda a área da imagem sem lacuna 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 restante é explicitamente sinalizado. O número de bits para sinalizar ID de subimagem pode ser restrito conforme 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 reservado de subimagem).
[0121] Pode ser restrito que a união de subimagens têm de cobrir toda a imagem sem lacuna e sem sobreposição. Quando essa restrição for aplicada, para cada subimagem, uma flag pode estar presente para especificar se a subimagem é uma subimagem com restrição de movimento, o 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] IDs de subimagem podem estar presentes imediatamente depois que 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 da unidade de NAL. Para unidades 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 seguinte pode ser aplicado. Para SPS, o ID de subimagem não precisa estar presente imediatamente depois do cabeçalho de unidade de NAL. Para PPS, se todos os grupos de tiles da mesma imagem são restritos a se referir ao mesmo PPS, o ID de subimagem não precisa estar presente imediatamente depois que seu cabeçalho de unidade de NAL. Se é 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 depois que o cabeçalho de unidade de NAL). Nesse caso, pode ser permitido que quaisquer grupos de tiles de uma imagem compartilhem o mesmo PPS. Alternativamente, quando se permite que grupos de tiles da mesma imagem se refiram a diferentes PPSs, e se permite 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 se permite que grupos de tiles da mesma imagem se refiram a diferentes PPSs, e se permite também que um grupo diferente 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 de NAL não VCL, se a unidade não VCL se aplica ao nível de imagem ou acima (por exemplo, delimitador de unidade de acesso, extremidade de sequência, extremidade de fluxo de bits, etc.), então o ID de subimagem pode não estar presente imediatamente depois do cabeçalho de unidade de NAL. Caso contrário, o ID de subimagem pode estar presente imediatamente depois do cabeçalho de unidade de NAL.
[0123] Com a sinalização SPS acima, o particionamento em tiles dentro de subimagens individuais pode ser sinalizada no PPS. Pode ser permitido que grupos de tiles dentro da mesma imagem se refiram a diferentes PPSs. Nesse caso, agrupamento de tiles pode ser somente dentro de cada subimagem. O conceito de agrupamento de tiles é particionamento de uma subimagem em tiles.
[0124] Alternativamente, um conjunto de parâmetros para descrever o particionamento em tiles dentro de subimagens individuais é definido. Tal conjunto de parâmetros pode ser chamado Conjunto de Parâmetros de Subimagem (SPPS). O SPPS que faz referência ao SPS. Um elemento de sintaxe fazer referência ao SPS ID está presente no SPPS. O SPPS pode conter um ID de subimagem. Para propósitos de extração de subimagem, o elemento de sintaxe que faz referência 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 fileiras, espaçamento de tile uniforme, etc.). O SPPS pode conter uma flag para indicar se ou não um filtro loop é habilitado através de fronteiras de subimagem associadas. Alternativamente, as propriedades de subimagem para cada subimagem podem ser sinalizadas no SPPS e não no SPS. Particionamento em tiles dentro de subimagens individuais pode ainda ser sinalizada no PPS. É permitido que grupos de tiles dentro da mesma imagem se refiram a diferentes PPSs. Uma vez que um SPPS seja ativado, o SPPS dura por uma sequência de AUs consecutivas em ordem de decodificação. No entanto, 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 a 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 um caso como esse, 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 de modo que todos os grupos de tiles na mesma subimagem possam se referir ao mesmo conjunto de parâmetros resultante da fusão entre SPPS e PPS.
[0125] O número de bits usado para sinalizar ID de subimagem pode ser sinalizado em um cabeçalho de unidade de NAL. Quando presentes 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 começo de uma carga útil de unidade de NAL's (por exemplo, os primeiros poucos bits imediatamente depois do 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 aumentar o comprimento de cabeçalho de unidade de NAL. O número de bits para tal sinalização pode cobrir o valor de subimagem-ID-bit-len. Por exemplo, quatro bits dentre sete bits reservados de um cabeçalho de unidade de NAL de VVCs pode ser usado com esse propósito.
[0126] Quando se está decodificando uma subimagem, a localização de cada bloco de árvore de codificação (por exemplo, xCtb e yCtb) pode ser ajustada a uma localização de amostra de luma real na imagem em vez de uma localização de amostra de luma na subimagem. Dessa maneira, extração de uma subimagem co-localizada a partir de cada imagem de referência pode ser evitada uma vez que o bloco de árvore de codificação é decodificado com referência à imagem em vez da subimagem. Para ajustar a localização de um bloco 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 bloco de árvore de codificação na subimagem.
[0127] Um processo de extração de subimagem pode ser definido conforme 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 é uma localização de subimagem, o ID de subimagem associado pode ser resolvido analisando-se as informações de subimagem no SPS. Para unidades de NAL não VCL, o seguinte se aplica. Elementos de sintaxe no SPS relacionados a tamanho e nível de imagem podem ser atualizados com o tamanho de subimagem e informações de nível. As seguintes unidades de NAL não VCL são mantidas sem mudança: PPS, Delimitador de Unidade de Acesso (AUD), Extremidade de Sequência (EOS), Extremidade de Fluxo de Bits (EOB), e quaisquer outras unidades de NAL não VCL que são aplicáveis a nível de imagem ou acima. As unidades restantes de NAL não VCL com ID de subimagem não igual ao ID de subimagem alvo podem ser retiradas. Unidades de VCL NAL com ID de subimagem não igual ao ID de subimagem alvo podem também ser retiradas.
[0128] Uma mensagem SEI de aninhamento de subimagem a nível de sequência pode ser usada para aninhamento de mensagens SEI a nível AU ou nível de subimagem para um conjunto de subimagens. Isso pode incluir um período de armazenamento, temporização de imagem, e mensagens SEI não HRD. A sintaxe e semântica dessa mensagem SEI de aninhamento de subimagem pode ser conforme 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 cobrindo uma janela de visualização pode ser solicitado e decodificado pelo jogador 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 de 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 exigida 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 somente o conjunto de sequências de subimagem. Essas informações também indicam a taxa de bits do fluxo de bits contendo somente o conjunto de sequências de subimagem. Opcionalmente, um processo de extração de subfluxo de bits pode ser especificado para um conjunto de sequências de subimagem. O benefício de fazer isso é que o fluxo de bits incluir somente um conjunto de sequências de subimagem pode também ser conforme. Uma desvantagem é que se considerando diferentes possibilidades de tamanho janela de visualização pode haver muitos conjuntos como esses além dos já grandes números possíveis de sequências de subimagem individuais.
[0129] Em uma modalidade exemplificativa, um ou mais dentre os exemplos revelados pode(m) ser implementado(s) como 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 divisão binário permitido pode ser definido conforme a seguir. As inserções para esse processo são: a modo de divisã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 superior esquerdo do bloco de codificação considerado relativo à amostra de luma superior esquerdo da imagem, uma profundidade de árvore de múltiplos tipos mttDepth, uma profundidade de árvore máxima de múltiplos tipos com desvio maxMttDepth, um tamanho de árvore binária máximo maxBtSize, e um índice de partição partIdx. A emissão desse processo é a variável allowBtSplit. Especificação de parallelTtSplit e cbSize com base em btSplit
[0130] As variáveis parallelTtSplit e cbSize são derivadas como especificado acima. A variável allowBtSplit é derivada conforme a seguir. Se uma ou mais dentre as seguintes condições são verdadeiras, allowBtSplit é estabelecido igual a FALSE: cbSize é menor ou igual a MinBtSizeY, cbWidth é maior que maxBtSize, cbWidth é maior que maxBtSize, e mttDepth é maior ou igual a maxMttDepth. Caso contrário, se todas as seguintes condições são verdadeiras, allowBtSplit é estabelecido igual a FALSE: btSplit é igual a SPLIT_BT_VER, e y0+cbWidth é maior que SubPicBottomBorderInPic. Caso contrário, se todas as condições seguintes são verdadeiras, allowBtSplit é estabelecido igual a FALSE, btSplit é igual a SPLIT_BT_HOR, x0+cbWidth é maior que SubPicRightBorderInPic, e y0+cbWidth é menor ou igual a SubPicBottomBorderInPic. Caso contrário, se todas as condições seguintes são verdadeiras, allowBtSplit é estabelecido igual a FALSE: mttDepth é maior que zero, partIdx é igual a um, e MttSplitMode[x0][y0][mttDepth-1] é igual a parallelTtSplit. Caso contrário se todas as seguintes condições são verdadeiras, allowBtSplit é estabelecido igual a FALSE: btSplit é igual a SPLIT_BT_VER, cbWidth é menor ou igual a MaxTbSizeY, e cbWidth é maior que MaxTbSizeY. Caso contrário se todas as seguintes condições são verdadeiras, allowBtSplit é estabelecido igual a FALSE: btSplit é igual a SPLIT_BT_HOR, cbWidth é maior que MaxTbSizeY, e cbWidth é menor ou igual a MaxTbSizeY. Caso contrário, allowBtSplit é estabelecido igual a VERDADEIRO.
[0131] Um processo ternário permitido de divisão pode ser definido conforme a seguir. Entradas para esse processo são: um modo dividido ternário 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 superior esquerdo do bloco de codificação considerado relativa à amostra de luma superior esquerdo da imagem, uma profundidade de árvore de múltiplos tipos mttDepth, uma profundidade de árvore máxima de múltiplos tipos com desvio maxMttDepth, e um tamanho de árvore binária máximo maxTtSize. A emissão desse processo é a variável allowTtSplit. Especificação de cbSize com base em ttSplit.
[0132] A variável cbSize é derivada como especificado acima. A variável allowTtSplit é derivada conforme a seguir. Se uma ou mais dentre as seguintes condições são verdadeiras, allowTtSplit é estabelecido igual a FALSE: cbSize é menor ou igual a 2*MinTtSizeY, cbWidth é maior que Min(MaxTbSizeY, maxTtSize), cbWidth é maior que Min(MaxTbSizeY, maxTtSize), mttDepth é maior ou igual a maxMttDepth, x0+cbWidth é maior que SubPicRightBorderInPic, e y0+cbWidth é maior que SubPicBottomBorderInPic. Caso contrário, allowTtSplit é estabelecido igual a TRUE.
[0133] A sintaxe e semântica de conjunto de parâmetros de sequência RBSP são conforme a seguir.
[0134] As pic_width_in_luma_samples especificam a largura de cada imagem decodificada em unidades de amostras de luma. Pic_width_in_luma_samples não será igual a zero e será um número inteiro múltiplo de MinCbSizeY. As pic_height_in_luma_samples especificam a altura de cada imagem decodificada em unidades de amostras de luma. Pic_height_in_luma_samples não será igual a zero e será um número inteiro múltiplo de MinCbSizeY. A num_subscene_minus1 mais 1 especifica o número de subimagens particionadas em imagens codificadas que pertencem à sequência de vídeo codificada. A subpic_id_len_minus1 mais 1 especifica o número de bits usados para representar o elemento de sintaxe subpic_id[i] em SPS, spps_subpic_id em SPPS fazendo referência ao SPS, e tile_group_subpic_id em cabeçalhos de grupo de tiles fazendo referência ao SPS. O valor de subpic_id_len_minus1 estará na faixa de Ceil(Log2(num_subpic_minus1+2) a oito, inclusive. A subpic_id[i] especifica o ID de subimagem da i-ésima subimagem de imagens referentes ao SPS. O comprimento de subpic_id[i] é subpic_id_len_minus1 + 1 bits. O valor de subpic_id[i] será maior que zero. O subpic_level_idc[i] indica um nível ao qual a CVS resultada de extração das i- ésimas subimagens se conforma para exigências de recurso especificadas. Fluxos de bits não irão conter valores de subpic_level_idc[i] que não sejam aqueles especificados. Outros valores de subpic_level_idc[i] são reservados. Quando não está presente, o valor de subpic_level_idc[i] é inferido como sendo igual ao valor de general_level_idc.
[0135] O subpic_x_offset[i] especifica o desvio horizontal do canto superior esquerdo da i-ésima subimagem relativo ao canto superior esquerdo da imagem. Quando não está presente, o valor de subpic_x_offset[i] é inferido ser igual a 0. O valor de desvio de subimagem x é derivado como a seguir: SubpictureXOffset[i] = subpic_x_offset[i]. O subpic_y_offset[i] especifica o desvio vertical do canto superior esquerdo da i-ésima subimagem relativa ao canto superior esquerdo da imagem. Quando não está presente, o valor de subpic_y_offset[i] é inferido ser igual a zero. O valor de desvio de subimagem y é derivado como a seguir: SubpictureYOffset[i] = subpic_y_offset[i]. O 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] é menor que pic_width_in_luma_samples, o valor de subpic_width_in_luma_samples[i] será um número inteiro múltiplo de CtbSizeY. Quando não está presente, o valor de subpic_width_in_luma_samples[i] é inferido ser igual ao valor de pic_width_in_luma_samples. O 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] é menor que pic_height_in_luma_samples, o valor de subpic_height_in_luma_samples[i] será um número inteiro múltiplo de CtbSizeY. Quando não está presente, o valor de subpic_height_in_luma_samples[i] é inferido ser igual ao valor de pic_height_in_luma_samples.
[0136] É uma exigência da conformação de fluxo de bits que a união de subimagens cubra toda a área de uma imagem sem sobreposição e lacuna. O subpic_motion_constrained_flag[i] igual a um (1) especifica que a i-ésima subimagem é uma subimagem com restrição de movimento temporal. O 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 está presente, o valor de subpic_motion_constrained_flag é inferido ser igual a zero.
[0137] As variáveis SubpicWidthInCtbsY, SubpicHeightInCtbsY, SubpicSizeInCtbsY, SubpicWidthInMinCbsY, SubpicHeightInMinCbsY, SubpicSizeInMinCbsY, SubpicSizeInSamplesY, SubpicWidthInSamplesC, e SubpicHeightInSamplesC são derivadas como a seguir: SubpicWidthInLumaSamples[i] = subpic_width_in_luma_samples[i] SubpicHeightInLumaSamples[i] = subpic_height_in_luma_samples[i] SubPicRightBorderInPic[i] = SubpictureXOffset[i]+PicWidthInLumaSamples[i] SubPicBottomBorderInPic[i]=SubpictureYOffset[i]+PicHeightInLumaSa mples[i] SubpicWidthInCtbsY[i] = Ceil(SubpicWidthInLumaSamples[i]-CtbSizeY) SubpicHeightInCtbsY[i] = Ceil(SubpicHeightInLumaSamples[i]-CtbSizeY) SubpicSizeInCtbsY[i] = SubpicWidthInCtbsY[i]*SubpicHeightInCtbsY[i] SubpicWidthInMinCbsY[i] = SubpicWidthInLumaSamples[i]/MinCbSizeY SubpicHeightInMinCbsY[i] = SubpicHeightInLumaSamples[i]/MinCbSizeY SubpicSizeInMinCbsY[i]=SubpicWidthInMinCbsY[i]*SubpicHeightInMi nCbsY[i] SubpicSizeInSamplesY[i]=SubpicWidthInLumaSamples[i]*SubpicHeig htInLumaSamples[i] SubpicWidthInSamplesC[i] = SubpicWidthInLumaSamples[i]/SubWidthC SubpicHeightInSamplesC[i] = SubpicHeightInLumaSamples[i]/SubHeightC
[0138] A sintaxe e semântica do conjunto de parâmetros de subimagem RBSP são conforme a seguir.
[0139] O SPPS_subpic_id identifica a subimagem à 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 será 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 será na faixa de zero a quinze, inclusive. O single_tile_in_subpic_flag igual a um (1) especifica que há somente uma tile em cada subimagem referente ao SPPS. O single_tile_in_subpic_flag igual a zero especifica que há mais que uma tile em cada subimagem referente ao SPPS. O num_tile_columns_minus1 mais 1 especifica o número de colunas de tiles partindo a subimagem. O num_tile_columns_minus1 será na faixa de zero para PicWidthInCtbsY[spps_subpic_id] - 1, inclusive. Quando não está presente, o valor de num_tile_columns_minus1 é inferido ser igual a zero. O num_tile_rows_minus1 mais 1 especifica o número de fileiras de tiles partindo a subimagem. O num_tile_rows_minus1 será na faixa de zero para PicHeightInCtbsY[spps_subpic_id] - 1, inclusive. Quando não está presente, o valor de num_tile_rows_minus1 é inferido ser igual a zero. A variável NumTilesInPic é estabelecido igual a (num_tile_columns_minus1+1)*(num_tile_rows_minus1+1).
[0140] Quando single_tile_in_subpic_flag é igual a zero, NumTilesInPic será maior que zero. O uniform_tile_spacing_flag igual a um (1) especifica que fronteiras de coluna de tiles e do mesmo modo fronteiras de fileira de tiles são distribuídas uniformemente através da subimagem. O uniform_tile_spacing_flag igual a zero especifica que fronteiras de coluna de tiles e do mesmo modo fronteiras de fileira de tiles não são distribuídas uniformemente 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 está presente, o valor de uniform_tile_spacing_flag é inferido ser igual a um (1). O tile_column_width_minus1[i] mais 1 especifica a largura da i-ésima coluna de tiles em unidades de CTBs. O tile_row_height_minus1[i] mais 1 especifica a altura da i-ésima fileira de tiles em unidades de CTBs.
[0141] As seguintes variáveis são derivadas invocando-se o processo de conversão de exame de tile e varredura de CTB: a lista ColWidth [i] para i na faixa de zero a num_tile_columns_minus1, inclusive, especificando a largura da i- ésima coluna de tiles em unidades de CTBs; a lista RowHeight[j] para j na faixa de zero a num_tile_rows_minus1, inclusive, especificando a altura da j-ésima fileira de tiles em unidades de CTBs; a lista ColBd[i] para i na faixa de zero a num_tile_columns_minus1+1, inclusive, especificando a localização da fronteira da i-ésima coluna de tiles em unidades de CTBs; a lista RowBd[j] para j na faixa de zero a num_tile_rows_minus1+1, inclusive, especificando a localização da fronteira da j-ésima fileira de tiles em unidades de CTBs; a lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs na faixa de zero a PicSizeInCtbsY-1, inclusive, especificar a conversão de um endereço de CTB no exame de varredura de CTB de uma imagem em um endereço de CTB no exame de tile; a lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs na faixa de zero a PicSizeInCtbsY-1, inclusive, especificando a conversão de um endereço de CTB no exame de tile em um endereço de CTB no exame de varredura de CTB de uma imagem; a lista TileId[ctbAddrTs] para ctbAddrTs na faixa de zero a PicSizeInCtbsY-1, inclusive, especificar a conversão de um endereço de CTB em exame de tile para um ID de tile; a lista NumCtusInTile[tileIdx] para tileIdx na faixa de zero a PicSizeInCtbsY-1, inclusive, especificando a conversão de um índice de tile no número de CTUs na tile; a lista FirstCtbAddrTs[tileIdx] para tileIdx na faixa de zero a NumTilesInPic-1, inclusive, especificando a conversão de um ID de tile no endereço de CTB em exame de tile do primeiro CTB na tile; a lista ColumnWidthInLumaSamples[i] para i na faixa de zero a num_tile_columns_minus1, inclusive, especificando a largura da i-ésima coluna de tiles em unidades de amostras de luma; e a lista RowHeightInLumaSamples[j] para j na faixa de zero a num_tile_rows_minus1, inclusive, especificando a altura da j-ésima fileira de tiles 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, serão todos maiores que zero.
[0142] O loop_filter_across_tiles_enabled_flag igual a um (1) especifica que operações de filtragem in-loop podem ser realizadas através de fronteiras de tile em subimagens referentes ao SPPS. O 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 fronteiras de tile em subimagens referentes ao SPPS. As operações de filtragem in-loop incluem o filtro de desblocagem, filtro de desvio adaptável à amostra, e operações de filtro loop adaptáveis. Quando não está presente, o valor de loop_filter_across_tiles_enabled_flag é inferido ser igual a um (1). O loop_filter_across_subpic_enabled_flag igual a um (1) especifica que operações de filtragem in-loop podem ser realizadas através de fronteiras de subimagem em subimagens referentes ao SPPS. O 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 fronteiras de subimagem em subimagens referentes ao SPPS. As operações de filtragem in-loop incluem o filtro de desblocagem, filtro de desvio adaptável à amostra, e operações de filtro loop adaptáveis. Quando não está presente, o valor de loop_filter_across_subpic_enabled_flag é inferido ser igual ao valor de loop_filter_across_tiles_enabled_flag.
[0143] A sintaxe e semântica do cabeçalho de grupo de tiles geral são conforme 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 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 será o mesmo em todos os cabeçalhos de grupo de tiles de uma subimagem codificada. O tile_group_subpic_id identifica a subimagem à 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 será 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 a partir do SPS ativo: PicWidthInLumaSamples = SubpicWidthInLumaSamples[tile_group_subpic_id] PicHeightInLumaSamples = PicHeightInLumaSamples[tile_group_subpic_id] SubPicRightBorderInPic = SubPicRightBorderInPic[tile_group_subpic_id] SubPicBottomBorderInPic = SubPicBottomBorderInPic[tile_group_subpic_id] PicWidthInCtbsY = SubpicWidthInCtbsY[tile_group_subpic_id] PicHeightInCtbsY = SubpicHeightInCtbsY[tile_group_subpic_id] PicSizeInCtbsY = SubPicSizeInCtbsY[tile_group_subpic_id] PicWidthInMinCbsY = SubpicWidthInMinCbsY[tile_group_subpic_id] PicHeightInMinCbsY = SubpicHeightInMinCbsY[tile_group_subpic_id] PicSizeInMinCbsY = SubPicSizeInMinCbsY[tile_group_subpic_id] PicSizeInSamplesY = SubPicSizeInSamplesY[tile_group_subpic_id] PicWidthInSamplesC = SubpicWidthInSamplesC[tile_group_subpic_id] PicHeightInSamplesC = SubpicHeightInSamplesC[tile_group_subpic_id]
[0146] A sintaxe de unidade de árvore de codificação é conforme a seguir.
[0147] A sintaxe e semântica de árvore quaternária de codificação são conforme a seguir.
[0148] O qt_split_uc_flag[x0][y0] especifica se uma unidade de codificação é dividida em unidades de codificação com meio tamanho horizontal e vertical. Os índices de arranjo x0, y0 especificam a localização (x0, y0) da amostra de luma superior esquerdo do bloco de codificação considerado relativamente à amostra de luma superior esquerdo da imagem. Quando qt_split_uc_flag[x0][y0] não está presente, o seguinte se aplica: se uma ou mais dentre as seguintes condições são verdadeiras, o valor de qt_split_uc_flag[x0][y0] é inferido ser igual a um (1). x0+(1<<log2CbSize) é maior que SubPicRightBorderInPic e (1<<log2CbSize) é maior que MaxBtSizeC se o treeType é igual a DUAL_TREE_CHROMA ou senão maior que MaxBtSizeY. y0+(1<<log2CbSize) é maior que SubPicBottomBorderInPic e (1<<log2CbSize) é maior que MaxBtSizeC se o treeType é igual a DUAL_TREE_CHROMA ou senão maior que MaxBtSizeY.
[0149] Caso contrário, se todas as seguintes condições são verdadeiras, o valor de qt_split_uc_flag[x0][y0] é inferido ser igual a 1: x0+(1<<log2CbSize) é maior que SubPicRightBorderInPic, y0+(1<<log2CbSize) é maior que SubPicBottomBorderInPic, e (1<<log2CbSize) é maior que MinQtSizeC se o treeType é igual a DUAL_TREE_CHROMA ou senão maior que MinQtSizeY. Caso contrário, o valor de qt_split_uc_flag[x0][y0] é inferido ser igual a zero.
[0150] A sintaxe e semântica de árvore de múltiplos tipos são conforme a seguir.
[0151] O mtt_split_uc_flag igual a zero especifica que uma unidade de codificação não está dividida. O mtt_split_uc_flag igual a um (1) especifica que uma unidade de codificação está dividida em duas unidades de codificação usando uma divisão binária ou em três unidades de codificação usando uma divisão ternária como indicado pelo elemento de sintaxe mtt_split_uc_binary_flag. A divisão binária ou ternária pode ser ou vertical ou horizontal como indicado pelo elemento de sintaxe mtt_split_uc_vertical_flag. Quando mtt_split_uc_flag não está presente, o valor de mtt_split_uc_flag é inferido conforme a seguir. Se uma ou mais dentre as seguintes condições são verdadeiras, o valor de mtt_split_uc_flag é inferido ser igual a 1: x0 + cbWidth é maior que SubPicRightBorderInPic, e y0 + cbWidth é maior que SubPicBottomBorderInPic. Caso contrário, o valor de mtt_split_uc_flag é inferido ser igual a zero.
[0152] O processo de derivação para predição de vetor de movimento de luma temporal é conforme a seguir. Os resultados desse processo são: a predição de vetor de movimento mvLXCol com precisão de amostra fracionária de 1/16, e a flag de disponibilidade availableFlagLXCol. A variável currCb especifica o bloco de codificação de luma atual na localização luma (xCb,yCb). As variáveis mvLXCol e availableFlagLXCol são derivadas conforme a seguir. Se tile_group_temporal_mvp_enabled_flag é igual a zero, ou se a imagem de referência é a imagem atual, ambos os componentes de mvLXCol são estabelecidos como iguais a zero e availableFlagLXCol é estabelecido igual a zero. Caso contrário (tile_group_temporal_mvp_enabled_flag é igual a um (1) e a imagem de referência não é a imagem atual), as etapas ordenadas seguintes se aplicam. O vetor de movimento co-localizado inferior direito é derivado como a seguir: xColBr=xCb+cbWidth (8-355) yColBr=yCb+cbWidth (8-356)
[0153] Se yCb>>CtbLog2SizeY é igual a yColBr>>CtbLog2SizeY, yColBr é menor que SubPicBottomBorderInPic e xColBr é menor que SubPicRightBorderInPic, o seguinte se aplica. A variável colCb especifica o bloco de codificação de luma cobrindo a localização modificada dada por ((xColBr>>3)<<3,(yColBr>>3)<<3) do lado de dentro da imagem co-localizada especificada como ColPic. A localização de luma (xColCb,yColCb) é estabelecida igual à amostra superior esquerda do bloco de codificação de luma co-localizado especificado como colCb relativo à amostra de luma superior esquerdo da imagem co-localizada especificada como ColPic. O processo de derivação para vetores de movimento co-localizados é invocado com currCb, colCb, (xColCb,yColCb), refIdxLX e sbFlag estabelecidos como iguais a zero como entradas, e a emissão é atribuída para mvLXCol e availableFlagLXCol. Caso contrário, ambos os componentes de mvLXCol são estabelecidos como iguais a zero e availableFlagLXCol é estabelecido igual a zero.
[0154] O processo de derivação para candidatos a fusão triangular temporal é conforme a seguir. As variáveis mvLXColC0, mvLXColC1, availableFlagLXColC0 e availableFlagLXColC1 são derivadas conforme a seguir. Se tile_group_temporal_mvp_enabled_flag é igual a zero, tanto componentes mvLXColC0 quanto mvLXColC1 são estabelecidos como iguais a zero e availableFlagLXColC0 e availableFlagLXColC1 são estabelecidos como iguais a zero. Caso (tile_group_temporal_mvp_enabled_flag é igual a 1), as seguintes etapas ordenadas se aplicam. O vetor de movimento co-localizado inferior direito mvLXColC0 é derivado como a seguir: xColBr=xCb+cbWidth (8-392) yColBr=yCb+cbWidth (8-393)
[0155] Se yCb>>CtbLog2SizeY é igual a yColBr>>CtbLog2SizeY, yColBr é menor que SubPicBottomBorderInPic e xColBr é menor que SubPicRightBorderInPic, o seguinte se aplica. A variável colCb especifica o bloco de codificação de luma cobrindo a localização modificada dada por ((xColBr>>3)<<3,(yColBr>>3)<<3) do lado de dentro da imagem co-localizada especificada como ColPic. A localização de luma (xColCb,yColCb) é estabelecida igual à amostra superior esquerda do bloco de codificação de luma co-localizado especificado como colCb relativo à amostra de luma superior esquerdo da imagem co-localizada especificada como ColPic. O processo de derivação para vetores de movimento co-localizados é invocado com currCb, colCb, (xColCb,yColCb), refIdxLXC0 e sbFlag estabelecidos iguais a zero como entradas, e a emissão é atribuída para mvLXColC0 e availableFlagLXColC0. Caso contrário, ambos os componentes mvLXColC0 são estabelecidos iguais a zero e availableFlagLXColC0 é estabelecido igual a zero.
[0156] O processo de derivação para candidatos a fusão de vetor de movimento de ponto de controle afim construído é conforme a seguir. O quarto (co-localizado inferiormente à direita) vetor de movimento de ponto de controle 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 conforme a seguir. Os índices de referência para o candidato a fusão temporal, refIdxLXCorner[3], com X sendo zero ou um (1), são estabelecidos como iguais a zero. As variáveis mvLXCol e availableFlagLXCol, com X sendo zero ou um (1), são derivados conforme a seguir. Se tile_group_temporal_mvp_enabled_flag é igual a zero, ambos os componentes de mvLXCol são estabelecidos como iguais a zero e availableFlagLXCol é estabelecido igual a zero. Caso contrário (tile_group_temporal_mvp_enabled_flag é igual a um (1)), o seguinte se aplica: xColBr=xCb+cbWidth (8-566) yColBr=yCb+cbWidth (8-567)
[0157] Se yCb>>CtbLog2SizeY é igual a yColBr>>CtbLog2SizeY, yColBr é menor que SubPicBottomBorderInPic e xColBr é menor que SubPicRightBorderInPic, o seguinte se aplica. A variável colCb especifica o bloco de codificação de luma cobrindo a localização modificada dada por ((xColBr>>3)<<3,(yColBr>>3)<<3) do lado de dentro da imagem co-localizada especificada como ColPic. A localização de luma (xColCb,yColCb) é estabelecida igual à amostra superior esquerda do bloco de codificação de luma co-localizado especificado como colCb relativamente à amostra de luma superior esquerdo da imagem co-localizada especificada como ColPic. O processo de derivação para vetores de movimento co-localizados é invocado com currCb, colCb, (xColCb,yColCb), refIdxLX e sbFlag estabelecidos iguais a zero como entradas, e a emissão é atribuída para mvLXCol e availableFlagLXCol. Caso contrário, ambos os componentes de mvLXCol são estabelecidos como iguais a 0 e availableFlagLXCol é estabelecido igual a zero. Trocar todas as ocorrências pic_width_in_luma_samples por PicWidthInLumaSamples. Trocar todas as ocorrências pic_height_in_luma_samples por PicHeightInLumaSamples.
[0158] Em uma segunda modalidade exemplificativa, o conjunto de sintaxe e semântica de parâmetros de sequência RBSP são conforme a seguir.
[0159] O subpic_id_len_minus1 mais um (1) especifica o número de bits usado para representar o elemento de sintaxe subpic_id[i] em SPS, spps_subpic_id em SPPS fazendo referência ao SPS, e tile_group_subpic_id em cabeçalhos de grupo de tiles fazendo referência ao SPS. O valor de subpic_id_len_minus1 será na faixa de Ceil(Log2(num_subpic_minus1+3) a oito, inclusive. É uma exigência da conformação de fluxo de bits que não haverá sobreposição entre a 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 do cabeçalho de grupo de tiles geral são conforme a seguir. O tile_group_subpic_id identifica a subimagem à 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 (1) indica que o grupo de tiles não pertence a qualquer subimagem.
[0161] Em uma terceira modalidade exemplificativa, a sintaxe e semântica do cabeçalho de unidade de NAL são conforme a seguir.
[0162] O nuh_subscene_id_len especifica o número de bits usado para representar o elemento de sintaxe especificando o ID de subimagem. Quando o valor de nuh_subscene_id_len é maior que zero, os primeiros nuh_subscene_id_len-ésimos bits em depois que nuh_reserved_zero_4bits especifica o ID da subimagem à qual a carga útil da unidade de NAL pertence. Quando nuh_subscene_id_len é maior que zero, o valor de nuh_subscene_id_len será igual ao valor de subpic_id_len_minus1 no SPS ativo. O valor de nuh_subscene_id_len para unidades de NAL não VCL é restrito conforme a seguir. Se nal_unit_type é igual a SPS_NUT ou PPS_NUT, nuh_subscene_id_len será igual a zero. O nuh_reserved_zero_3bits será igual a '000'. Decodificadores irão ignorar (por exemplo, remover do fluxo de bits e descartar) unidades de NAL com valores de nuh_reserved_zero_3bits não iguais a '000'.
[0163] Em uma quarta modalidade exemplificativa, sintaxe de aninhamento de subimagem é conforme a seguir.
[0164] O all_sub_pictures_flag igual a um (1) especifica que as mensagens aninhadas SEI se aplicam a todas as subimagens. all_sub_pictures_flag igual a um (1) especifica que as subimagens às quais as mensagens aninhadas SEI se aplicam são explicitamente sinalizadas pelos subsequentes elementos de sintaxe. O nesting_num_sub_pictures_minus1 mais 1 especifica o número de subimagens às quais as mensagens aninhadas SEI se aplicam. O nesting_sub_picture_id[i] indica o ID de subimagem da i-ésima subimagem à qual as mensagens aninhadas SEI 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 será igual a zero.
[0165] A Figura 9 é um diagrama esquemático de um exemplo de dispositivo de codificação de vídeo 900. O dispositivo de codificação de vídeo 900 é adequado para implementar os exemplos/modalidades revelados como descrito no presente documento. O dispositivo de codificação de vídeo 900 compreende portas a jusante 920, portas a montante 950, e/ou unidades de transceptor (Tx/Rx) 910, incluindo transmissores e/ou receptores para comunicar dados a montante e/ou a jusante por uma rede. O dispositivo de codificação de vídeo 900 também inclui um processador 930 incluindo um unidade lógica e/ou unidade de processamento central (CPU) para processar os dados e uma memória 932 para armazenar os dados. O dispositivo de codificação de vídeo 900 pode também compreender componentes elétricos, componentes ópticos que podem ser convertidos em elétricos (OE) e componentes elétricos que podem ser convertidos em ó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 por meio de redes de comunicação elétricas, ópticas, ou sem fio. O dispositivo de codificação de vídeo 900 pode também incluir dispositivos de entrada e/ou saída (I/O) 960 para comunicar dados para um usuário e a partir do mesmo. Os dispositivos 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 I/O 960 podem também 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 porta programáveis por 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 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 métodos 100, 1000, 1100, e/ou mecanismo 700, os quais podem empregar um fluxo de bits 500, uma imagem 600, e/ou uma imagem 800. O módulo de codificação 914 pode também implementar qualquer outro método/mecanismo descrito no presente documento. 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 um outro exemplo, o módulo de codificação 914 pode restringir larguras de subimagem e alturas de subimagem para serem múltiplas do tamanho da CTU a menos que tais subimagens estejam posicionadas na fronteira à direita da imagem ou na fronteira inferior da imagem, respectivamente. Em um outro exemplo, o módulo de codificação 914 pode restringir subimagens para cobrir uma imagem sem lacuna ou sobreposição. Em um outro exemplo, o módulo de codificação 914 pode ser empregado para sinalizar e/ou obter dados indicando que algumas subimagens são subimagens temporais com restrição de movimento e outras subimagens não são. Em um 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 um outro exemplo, o módulo de codificação 914 pode sinalizar níveis para cada subimagem. Sendo assim, o módulo de codificação 914 faz com que o dispositivo de codificação de vídeo 900 forneça funcionalidade adicional, evitar determinado processamento para reduzir sobrecarga de processamento, e/ou aumentar eficiência de codificação quando se está partindo e codificando dados de vídeo. Consequentemente, o módulo de codificação 914 aperfeiçoa a funcionalidade do dispositivo de codificação de vídeo 900 bem como trata de problemas que são específicos das técnicas de codificação de vídeo. Além disso, o módulo de codificação 914 efetua uma transformação do dispositivo de codificação de vídeo 900 para um estado diferente. Alternativamente, 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 endereçável por conteúdo ternário (TCAM), memória estática de acesso aleatório (SRAM), etc. A memória 932 pode ser usada como um dispositivo de armazenamento de dados excedentes, para armazenar programas quando tais programas são selecionados para execução, e para armazenar instruções e dados que são lidos durante execução de programa.
[0168] A Figura 10 é um fluxograma de um método exemplificativo 1000 de codificar IDs de subimagem em um fluxo de bits, tal como o fluxo de bits 500, para suportar decodificação de subimagens, tais como subimagens 522, 523, 622, 722, e/ou 822. 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 quando realiza 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 inserção por usuário. A sequência de vídeo é particionada em imagens/imagens/quadros paro particionamento adicional antes da codificação. Na etapa 1001, uma imagem é particionada em uma pluralidade de subimagens. Cada uma da pluralidade de subimagens é adicionalmente particionada em uma ou mais fatias. Em alguns exemplos, o particionamento é restrito de modo que uma união da pluralidade de subimagens cubra uma área total da imagem sem lacuna e sem sobreposição.
[0170] Na etapa 1003, um SPS é codificado em um fluxo de bits. O SPS compreende IDs de subimagem para cada subimagem particionada da imagem. O SPS pode adicionalmente compreender um tamanho de subimagem para cada uma da pluralidade de subimagens. O tamanho de subimagem pode incluir uma altura de subimagem em amostras de luma e uma largura de subimagem em amostras de luma. O SPS pode adicionalmente compreender uma localização de subimagem para cada uma da pluralidade de subimagens. A localização de subimagem pode incluir uma distância de desvio entre uma amostra superior esquerda de uma subimagem correspondente e uma amostra superior esquerda da imagem. O SPS pode adicionalmente compreender uma indicação de que uma ou mais dentre as subimagens são subimagens temporais com restrição de movimento.
[0171] Na etapa 1005, cabeçalhos de fatia são codificados no fluxo de bits. Os cabeçalhos de fatia compreendem IDs de subimagem indicando que as fatias associadas aos cabeçalhos de fatia estão incluídas na subimagem indicada. Na etapa 1007, uma ou mais da pluralidade de subimagens são também codificadas no fluxo de bits. Na etapa 1009, o fluxo de bits é armazenado para comunicação em direção a um decodificador. 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 a partir do fluxo de bits codificados. Em um caso como esse, o fluxo de bits transmitido é um subfluxo de bits. Em outros exemplos, o fluxo de bits codificados pode ser transmitido para extração de subfluxo de bits no decodificador. Em mais outros exemplos, o fluxo de bits codificados pode ser decodificado e exibido sem extração de subfluxo de bits. Em qualquer desses exemplos, uma lista completa de todos os IDs de subimagem pode ser enviada no SPS juntamente com informações de dimensionamento relevantes. Cada cabeçalho de fatia contém um ID de subimagem indicando a subimagem que inclui a fatia correspondente. Dessa maneira, subimagens e fatias correspondentes podem ser extraídas e posicionadas sem referência a outras subimagens. Logo, os IDs de subimagem suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, o que reduz o uso de recursos de rede, 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 decodificar um fluxo de bits, tal como fluxo de bits 500 e/ou o subfluxo de bits 501, de subimagens, tais como subimagens 522, 523, 622, 722, e/ou 822, com base em IDs de subimagem. 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 quando realiza o método 100. Por exemplo, o método 1100 pode ser aplicado para decodificar um fluxo de bits criado como um resultado do método 1000.
[0173] O método 1100 pode começar 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 um SPS, uma ou mais subimagens particionadas de uma imagem, e um ou mais cabeçalhos de fatia associados a fatias contidas na uma ou mais subimagens.
[0174] Na etapa 1103, o SPS é analisado para obter IDs de subimagem para a uma ou mais subimagens. Além disso, os cabeçalhos de fatia são analisados para obter um ID de subimagem atual indicando que as fatias associadas aos cabeçalhos de fatia estão contidas em uma subimagem atual identificada pelo ID de subimagem atual. O SPS pode adicionalmente compreender um tamanho de subimagem para cada subimagem particionada da imagem. O tamanho de subimagem pode incluir uma altura de subimagem em amostras de luma e uma largura de subimagem em amostras de luma. O SPS pode adicionalmente compreender uma localização de subimagem para cada subimagem particionada da imagem. A localização de subimagem pode incluir uma distância de desvio entre uma amostra superior esquerda de uma subimagem correspondente e uma amostra superior esquerda da imagem. O SPS pode adicionalmente compreender uma indicação de que uma ou mais dentre as subimagens são subimagens temporais com restrição de movimento. Logo, o SPS pode também ser analisado para obter o tamanho de subimagem, a localização de subimagem, e/ou quaisquer indicações de subimagens temporais com restrição de movimento.
[0175] Na etapa 1105, as fatias podem ser correspondidas para uma subimagem atual a partir da uma ou mais subimagens com base no ID de subimagem atual no(s) cabeçalho(s) de fatia(s). Além disso, as fatias podem ser posicionadas com base no tamanho de subimagem e na localização de subimagem para a subimagem atual. A subimagem atual pode então ser decodificada com base nos IDs de subimagem para criar uma sequência de vídeo, por exemplo, empregando-se a correlação entre IDs de subimagem entre o SPS e cabeçalho de fatia juntamente com a posição das fatias determinada com base em localização e tamanho de subimagem. A sequência de vídeo pode então ser encaminhada para exibição na etapa 1107. Consequentemente, uma lista completa de todos os IDs de subimagem pode ser enviada no SPS juntamente com informações de dimensionamento relevantes. Cada cabeçalho de fatia contém um ID de subimagem indicando a subimagem que inclui a fatia correspondente. Dessa maneira, subimagens e fatias correspondentes podem ser extraídas e posicionadas sem referência a outras subimagens. Logo, os IDs de subimagem suportam funcionalidade aumentada e/ou eficiência de codificação aumentada, o que reduz o uso de recursos de rede, recursos de memória, e/ou recursos de processamento no codificador e no decodificador.
[0176] A Figura 12 é um diagrama esquemático de um exemplo de sistema 1200 para sinalizar IDs de subimagem, tais como IDs de subimagem para subimagens 522, 523, 622, 722, e/ou 822, por meio de um fluxo de bits, tal como o fluxo de bits 500 e/ou o subfluxo de bits 501. 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 quando se implementa 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; particionar cada uma da pluralidade de subimagens em uma ou mais fatias; e particionar cada uma da pluralidade de subimagens em uma ou mais fatias. O codificador de vídeo 1202 adicionalmente compreende um módulo de codificação 1203 para codificar em um fluxo de bits um SPS compreendendo IDs de subimagem para cada subimagem particionada da imagem; codificar no fluxo de bits cabeçalhos de fatia compreendendo IDs de subimagem indicando que as fatias estão incluídas em subimagens indicadas; e codificar uma ou mais da pluralidade de subimagens no fluxo de bits. O codificador de vídeo 1202 adicionalmente compreende 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 adicionalmente compreende um módulo de transmissão 1207 para transmitir o fluxo de bits incluindo a(s) subimagem(s) e os IDs de subimagem em direção ao decodificador. O codificador de vídeo 1202 pode ser adicionalmente configurado para realizar qualquer das etapas de 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 compreendendo um conjunto de parâmetros de sequência (SPS), uma ou mais subimagens particionadas de uma imagem, e um ou mais cabeçalhos de fatia associados a uma ou mais fatias. O decodificador de vídeo 1210 adicionalmente compreende um módulo de análise 1213 para analisar o SPS para obter identificadores (IDs) de subimagem para cada uma dentre a uma ou mais subimagens; e analisar os cabeçalhos de fatia para obter um ID de subimagem atual indicando que as fatias estão incluídas em uma subimagem atual a partir da uma ou mais subimagens. O decodificador de vídeo 1210 adicionalmente compreende um módulo de decodificação 1215 para decodificar a subimagem atual com base nos IDs de subimagem para criar uma sequência de vídeo. O decodificador de vídeo 1110 adicionalmente compreende 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 das etapas de método 1100.
[0179] Um primeiro componente está diretamente acoplado a um segundo componente quando não há componentes intervindo, exceto por uma linha, um traço, ou uma outra mídia entre o primeiro componente e o segundo componente. O primeiro componente é indiretamente acoplado ao segundo componente quando há componentes intervindo que não uma linha, um traço, ou uma outra mídia entre o primeiro componente e o segundo componente. O termo “acoplado” e suas variantes incluem tanto diretamente acoplado quanto indiretamente acoplado. O uso do termo “cerca de” significa uma faixa incluindo ±10% do número subsequente a menos que seja enunciado o contrário.
[0180] Deve também ser entendido que não é exigido que as etapas dos métodos exemplificativos apresentados no presente documento sejam necessariamente realizadas na ordem descrita, e a ordem das etapas de tais métodos deve ser entendida como sendo meramente exemplificativa. Do mesmo modo, 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 ser entendido que os sistemas e métodos revelados poderiam ser incorporados em muitas outras formas específicas sem um afastamento 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 dados no presente documento. Por exemplo, os vários elementos ou componentes podem ser combinados ou integrados em um outro sistema ou determinadas particularidades podem ser omitidas, ou não implementadas.
[0182] Além disso, técnicas, sistemas, subsistemas, e métodos descritos e ilustrados nas várias modalidades como discretas ou separadas podem ser combinadas ou integradas com outros sistemas, componentes, técnicas, ou métodos sem um afastamento do escopo da presente revelação. Outros exemplos de mudanças, substituições, e alterações são verificáveis por um especialista na técnica e podem ser feitas sem afastamento do espírito e escopo revelados no presente documento.

Claims (22)

1. Método implementado em um decodificador, CARACTERIZADO pelo fato de que o método compreende: receber um fluxo de bits compreendendo um conjunto de parâmetros de sequência (SPS), e dados codificados de uma ou mais subimagens particionadas de uma imagem; 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 uma ou mais subimagens particionadas da imagem, em que o SPS compreende adicionalmente um elemento de sintaxe que indica o número da uma ou mais subimagens particionadas da imagem; decodificar o SPS para obter o elemento de sintaxe, e determinar o número da uma ou mais subimagens particionadas da imagem com base no elemento de sintaxe; decodificar o SPS para obter um ID de subimagem, um tamanho de subimagem e uma localização de subimagem para cada uma dentre a uma ou mais subimagens particionadas da imagem; e decodificar os dados codificados da uma ou mais subimagens com base no ID de subimagem, no tamanho de subimagem e na localização de subimagem para cada uma dentre a uma ou mais subimagens.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que o elemento de sintaxe é num_subpicture_minus1, em que o num_subpicture_minus1 mais 1 especifica o número da uma ou mais subimagens particionadas da imagem.
3. Método, de acordo com a reivindicação 1 ou 2, CARACTERIZADO pelo fato de que o tamanho de subimagem inclui uma largura de subimagem e uma altura de subimagem em unidades de tamanho de bloco de árvore de codificação de luma (CtbSizeY).
4. Método, de acordo com qualquer uma das reivindicações 1 a 3, CARACTERIZADO pelo fato de que o SPS compreende adicionalmente uma indicação de que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
5. Método implementado em um codificador, CARACTERIZADO pelo fato de que o método compreende: particionar uma imagem em uma pluralidade de subimagens; codificar um conjunto de parâmetros de sequência (SPS) em um 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 particionadas da imagem; em que o SPS compreende adicionalmente um elemento de sintaxe indicando o número da uma ou mais subimagens particionadas da imagem; codificar a pluralidade de subimagens no fluxo de bits.
6. Método, de acordo com a reivindicação 5, CARACTERIZADO pelo fato de que o elemento de sintaxe é num_subpicture_minus1, em que o num_subpicture_minus1 mais 1 o especifica o número da uma ou mais subimagens particionadas da imagem.
7. Método, de acordo com a reivindicação 5 ou 6, CARACTERIZADO pelo fato de que o tamanho de subimagem inclui uma largura de subimagem e uma altura de subimagem em unidades de tamanho de bloco de árvore de codificação de luma (CtbSizeY).
8. Método, de acordo com qualquer uma das reivindicações 5 a 7, CARACTERIZADO pelo fato de que o SPS compreende adicionalmente uma indicação de que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
9. 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 8.
10. Mídia legível por computador não transitória, CARACTERIZADA pelo fato de que compreende instruções executáveis por computador para uso por um dispositivo de codificação de vídeo, em que as instruções executáveis por computador são armazenadas na mídia legível por computador não transitória de modo 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 8.
11. Decodificador, CARACTERIZADO pelo fato de que compreende: uma unidade de recebimento, configurada para receber um fluxo de bits compreendendo um conjunto de parâmetros de sequência (SPS), e dados codificados de uma ou mais subimagens particionadas de uma imagem; 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 uma ou mais subimagens particionadas da imagem, em que o SPS compreende adicionalmente um elemento de sintaxe que indica o número da uma ou mais subimagens particionadas da imagem; uma unidade de decodificação, configurada para: decodificar o SPS para obter o elemento de sintaxe, e determinar o número da uma ou mais subimagens particionadas da imagem com base no elemento de sintaxe; decodificar o SPS para obter um ID de subimagem, um tamanho de subimagem e uma localização de subimagem para cada uma dentre a uma ou mais subimagens particionadas da imagem; e decodificar os dados codificados da uma ou mais subimagens com base no ID de subimagem, no tamanho de subimagem e na localização de subimagem para cada uma dentre a uma ou mais subimagens.
12. Decodificador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que o decodificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 2 a 4.
13. Codificador, CARACTERIZADO pelo fato de que compreende: uma unidade de particionamento, configurada para: particionar uma imagem em uma pluralidade de subimagens; e uma unidade de codificação, configurada para: codificar um conjunto de parâmetros de sequência (SPS) em um 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 uma ou mais subimagens particionadas da imagem; em que o SPS compreende adicionalmente um elemento de sintaxe que indica o número da uma ou mais subimagens particionadas da imagem; e codificar a pluralidade de subimagens no fluxo de bits.
14. Codificador, de acordo com a reivindicação 13, CARACTERIZADO pelo fato de que o codificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 6 a 8.
15. Mídia de armazenamento não transitória, CARACTERIZADA pelo fato de que inclui um fluxo de bits codificado, o fluxo de bits compreendendo dados codificados de uma ou mais subimagens particionadas de uma imagem, e um conjunto de parâmetros de sequência (SPS), 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 uma ou mais subimagens particionadas da imagem, em que o SPS compreende adicionalmente um elemento de sintaxe que indica o número da uma ou mais subimagens particionadas da imagem.
16. Mídia de armazenamento não transitória, de acordo com a reivindicação 15, CARACTERIZADA pelo fato de que o elemento de sintaxe é num_subpicture_minus1, em que o num_subpicture_minus1 mais 1 especifica o número da uma ou mais subimagens particionadas da imagem.
17. Mídia de armazenamento não transitória, de acordo com a reivindicação 15 ou 16, CARACTERIZADA pelo fato de que o tamanho de subimagem inclui uma largura de subimagem e uma altura de subimagem em unidades de tamanho de bloco de árvore de codificação de luma (CtbSizeY).
18. Mídia de armazenamento não transitória, de acordo com qualquer uma das reivindicações 15 a 17, CARACTERIZADA pelo fato de que o SPS compreende adicionalmente uma indicação de que uma ou mais dentre as subimagens são subimagens com restrição de movimento.
19. Dispositivo para codificação, CARACTERIZADO pelo fato de que compreende: unidade de recebimento, configurada para receber um fluxo de bits para decodificar; unidade de transmissão acoplada à unidade de recebimento, a unidade de transmissão, configurada para transmitir uma imagem decodificada para 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 4.
20. Decodificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 1 a 4.
21. Codificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 5 a 8.
22. Mídia legível por computador não transitória, CARACTERIZADA pelo fato de que porta um conjunto de instruções o qual, quando executado por um dispositivo de computador, faz com que o dispositivo de computador realize o método conforme definido em qualquer uma das reivindicações 1 a 8.
BR122024003872-2A 2019-01-09 2020-01-09 Codificador de vídeo, decodificador de vídeo e métodos correspondentes BR122024003872A2 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US62/790,207 2019-01-09

Publications (1)

Publication Number Publication Date
BR122024003872A2 true BR122024003872A2 (pt) 2024-04-02

Family

ID=

Similar Documents

Publication Publication Date Title
US11949893B2 (en) Sub-picture level indicator 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
BR122024003872A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes
JP2024071391A (ja) ビデオエンコーダ、ビデオデコーダ、および対応する方法