BR112021012632A2 - 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
BR112021012632A2
BR112021012632A2 BR112021012632-5A BR112021012632A BR112021012632A2 BR 112021012632 A2 BR112021012632 A2 BR 112021012632A2 BR 112021012632 A BR112021012632 A BR 112021012632A BR 112021012632 A2 BR112021012632 A2 BR 112021012632A2
Authority
BR
Brazil
Prior art keywords
tile
level
tiles
image
video
Prior art date
Application number
BR112021012632-5A
Other languages
English (en)
Inventor
Ye-Kui Wang
Fnu HENDRY
Maxim Sychev
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 BR112021012632A2 publication Critical patent/BR112021012632A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/174Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/172Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a picture, frame or field
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/65Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using error resilience
    • H04N19/66Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using error resilience involving data partitioning, i.e. separation of data into packets or partitions according to importance
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

codificador de vídeo, decodificador de vídeo e métodos correspondentes. um mecanismo de codificação de vídeo é revelado. o mecanismo inclui particionar uma imagem em uma pluralidade de tiles de primeiro nível. um subconjunto dos tiles de primeiro nível é particionado em uma pluralidade de tiles de segundo nível. cada tile de segundo nível contém uma única fatia retangular de dados de imagem. os tiles de primeiro nível e os tiles de segundo nível são codificados em um fluxo de bits. o fluxo de bits é armazenado para comunicação em direção a um decodificador.

Description

“CODIFICADOR DE VÍDEO, DECODIFICADOR DE VÍDEO E MÉTODOS CORRESPONDENTES” CAMPO TÉCNICO
[0001] A presente revelação está, em geral, relacionada à codificação de vídeo e está, especificamente, relacionada a um esquema de tiling de vídeo flexível que suporta múltiplos tiles com diferentes resoluções na mesma imagem.
FUNDAMENTOS
[0002] A quantidade de dados de vídeo necessária para representar até mesmo um vídeo relativamente curto que pode ser substancial, o que pode resultar em dificuldades quando os dados devem ser transmitidos ou, de outro modo, comunicados através de uma rede de comunicações com capacidade de largura de banda limitada. Assim, os dados de vídeo são, em geral, comprimidos antes de serem comunicados através de redes de telecomunicações dos dias atuais. O tamanho de um vídeo também pode ser um problema quando o vídeo é armazenado em um dispositivo de armazenamento pelo fato de que os recursos de memória podem ser limitados. Os dispositivos de compressão de vídeo frequentemente usam software e/ou hardware na fonte para codificar os dados de vídeo antes da transmissão ou armazenamento, diminuindo, desse modo, a quantidade de dados necessária para representar as imagens de vídeo digitais. Os dados comprimidos são, em seguida, 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 cada vez maiores de maior qualidade de vídeo, técnicas de compressão e descompressão aprimoradas que melhoram a taxa de compressão com pouco ou nenhum sacrifício na qualidade da imagem são desejáveis.
SUMÁRIO
[0003] Em uma modalidade, a revelação inclui um método implementado em um codificador, o método compreende: particionar, por um processador do codificador, uma imagem em uma pluralidade de tiles de primeiro nível; particionar, pelo processador, um subconjunto dos tiles de primeiro nível em uma pluralidade de tiles de segundo nível, em que cada tile de segundo nível contém uma única fatia retangular de dados de imagem; codificar, pelo processador, os tiles de primeiro nível e os tiles de segundo nível em um fluxo de bits; e armazenar, em uma memória do codificador, o fluxo de bits para comunicação em direção a um decodificador. Os sistemas de codificação de vídeo podem utilizar fatias e tiles para particionar imagens. Certas aplicações de transmissão (por exemplo, realidade virtual (VR) e teleconferência) podem ser melhoradas se uma única imagem puder ser enviada contendo múltiplas regiões codificadas em diferentes resoluções. Alguns mecanismos de fatiamento e tiling podem não suportar tal funcionalidade pelo fato de que os tiles em diferentes resoluções podem ser tratados de forma diferente. Por exemplo, um tile em uma primeira resolução pode conter uma única fatia de dados, enquanto um tile em uma segunda resolução pode portar múltiplas fatias de dados, devido às diferenças na densidade de pixel. Os presentes aspectos utilizam um esquema de tiling flexível incluindo os tiles de primeiro nível e os tiles de segundo nível. Os tiles de segundo nível são criados pelo particionamento de tiles de primeiro nível. Este esquema de tiling permite que um tile de primeiro nível contenha uma fatia de dados em uma primeira resolução e um tile de primeiro nível contendo os tiles de segundo nível contenha uma pluralidade de fatias em uma segunda resolução. Consequentemente, o esquema de tiling flexível revelado permite que um codificador/decodificador (codec) suporte uma imagem contendo múltiplas resoluções e, consequentemente, aumente a funcionalidade tanto do codificador quanto do decodificador.
[0004] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que os tiles de primeiro nível fora do subconjunto contêm dados de imagem em uma primeira resolução, e em que os tiles de segundo nível contêm dados de imagem em uma segunda resolução diferente da primeira resolução.
[0005] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que cada tile de primeiro nível no subconjunto de tiles de primeiro nível inclui dois ou mais tiles de segundo nível completos.
[0006] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, compreendendo adicionalmente a codificação, pelo processador, de dados que indicam uma configuração de tiles de segundo nível em um conjunto de parâmetros de imagem associado à imagem.
[0007] Opcionalmente, em qualquer um dos aspectos anteriores,
outra implementação do aspecto fornece, em que a configuração de tiles de segundo nível é sinalizada como um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível.
[0008] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que os dados que indicam explicitamente um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível são omitidos do fluxo de bits quando uma largura de tile de primeiro nível for menor que duas vezes um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que duas vezes um limiar de altura mínimo.
[0009] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, compreendendo adicionalmente atribuir, pelo processador, os tiles de primeiro nível e os tiles de segundo nível em um ou mais grupos de tiles, tal que todos os tiles em um grupo de tiles correspondente sejam restritos para cobrir uma porção retangular da imagem.
[0010] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, compreendendo adicionalmente a codificação, pelo processador, de indicações de divisão que indicam os tiles de primeiro nível que são particionados nos tiles de segundo nível, em que as indicações de divisão são omitidas do fluxo de bits quando uma largura de tile de primeiro nível for menor que um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que um limiar de altura mínimo.
[0011] Em uma modalidade, a revelação inclui um método implementado em um decodificador, o método compreende: receber, por um processador do decodificador através de um receptor, um fluxo de bits incluindo uma imagem particionada em uma pluralidade de tiles de primeiro nível, em que um subconjunto dos tiles de primeiro nível é particionado adicionalmente em uma pluralidade de tiles de segundo nível e em que cada tile de segundo nível contém uma única fatia retangular de dados de imagem; determinar, pelo processador, uma configuração dos tiles de primeiro nível e uma configuração dos tiles de segundo nível com base em parâmetros incluídos no fluxo de bits; decodificar, pelo processador, os tiles de primeiro nível e os tiles de segundo nível com base na configuração dos tiles de primeiro nível e na configuração dos tiles de segundo nível; e gerar, pelo processador, uma sequência de vídeo reconstruída para exibição com base nos tiles de primeiro nível decodificados e nos tiles de segundo nível. Os sistemas de codificação de vídeo podem utilizar fatias e tiles para particionar imagens. Certas aplicações de transmissão (por exemplo, VR e teleconferência) podem ser melhoradas se uma única imagem puder ser enviada contendo múltiplas regiões codificadas em diferentes resoluções. Alguns mecanismos de fatiamento e tiling podem não suportar tal funcionalidade pelo fato de que os tiles em diferentes resoluções podem ser tratados de forma diferente. Por exemplo, um tile em uma primeira resolução pode conter uma única fatia de dados, enquanto um tile em uma segunda resolução pode portar múltiplas fatias de dados, devido às diferenças na densidade de pixel. Os presentes aspectos utilizam um esquema de tiling flexível incluindo tiles de primeiro nível e tiles de segundo nível. Os tiles de segundo nível são criados pelo particionamento de tiles de primeiro nível. Este esquema de tiling permite que um tile de primeiro nível contenha uma fatia de dados em uma primeira resolução e um tile de primeiro nível contenha tiles de segundo nível para conter uma pluralidade de fatias em uma segunda resolução. Consequentemente, o esquema de tiling flexível revelado permite que um codec suporte uma imagem contendo múltiplas resoluções e, consequentemente, aumente a funcionalidade tanto do codificador quanto do decodificador.
[0012] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que os tiles de primeiro nível fora do subconjunto contêm dados de imagem em uma primeira resolução e os tiles de segundo nível contêm dados de imagem em uma segunda resolução diferente da primeira resolução.
[0013] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que cada tile de primeiro nível no subconjunto de tiles de primeiro nível inclui dois ou mais tiles de segundo nível completos.
[0014] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, compreendendo adicionalmente a obtenção, pelo processador, de dados que indicam a configuração dos tiles de segundo nível a partir de um conjunto de parâmetros de imagem associado à imagem.
[0015] Opcionalmente, em qualquer um dos aspectos anteriores,
outra implementação do aspecto fornece, em que a configuração de tiles de segundo nível é sinalizada como um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível.
[0016] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que os dados que indicam explicitamente um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível são omitidos do fluxo de bits quando uma largura de tile de primeiro nível for menor que duas vezes um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que duas vezes um limiar de altura mínimo.
[0017] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que os tiles de primeiro nível e os tiles de segundo nível são atribuídos a um ou mais grupos de tiles, tal que todos os tiles em um grupo de tiles correspondente são restritos a cobrir uma porção retangular da imagem.
[0018] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, compreendendo adicionalmente a obtenção, pelo processador, de indicações de divisão que indicam os tiles de primeiro nível que são particionados nos tiles de segundo nível, em que as indicações de divisão são omitidas do fluxo de bits quando uma largura de tile de primeiro nível for menor que um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que um limiar de altura mínimo.
[0019] Em uma modalidade, a revelação inclui um dispositivo de codificação de vídeo compreendendo: um processador, um receptor acoplado ao processador e um transmissor acoplado ao processador, o processador, receptor e transmissor configurados para realizar o método de qualquer um dos aspectos anteriores.
[0020] 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 o uso por um dispositivo de codificação de vídeo, o produto de programa de computador compreendendo instruções executáveis por computador armazenadas na mídia legível por computador não transitória, tal que, quando executadas por um processador fazem com que o dispositivo de codificação de vídeo realize o método de qualquer um dos aspectos anteriores.
[0021] Em uma modalidade, a revelação inclui um codificador compreendendo: um meio de particionamento para: particionar uma imagem em uma pluralidade de tiles de primeiro nível; e particionar um subconjunto dos tiles de primeiro nível em uma pluralidade de tiles de segundo nível, em que cada tile de segundo nível contém uma única fatia retangular de dados de imagem; um meio de codificação para codificar os tiles de primeiro nível e os tiles de segundo nível em um fluxo de bits; e um meio de armazenamento para armazenar o fluxo de bits para a comunicação em direção a um decodificador.
[0022] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que o codificador é configurado adicionalmente para realizar o método de qualquer um dos aspectos anteriores.
[0023] Em uma modalidade, a revelação inclui um decodificador compreendendo: um meio de recebimento para receber um fluxo de bits incluindo uma imagem particionada em uma pluralidade de tiles de primeiro nível, em que um subconjunto dos tiles de primeiro nível é particionado adicionalmente em uma pluralidade de tiles de segundo nível e em que cada tile de segundo nível contém um única fatia retangular de dados de imagem; um meio de determinação para determinar uma configuração dos tiles de primeiro nível e uma configuração dos tiles de segundo nível com base em parâmetros incluídos no fluxo de bits; um meio de decodificação para decodificar os tiles de primeiro nível e os tiles de segundo nível com base na configuração dos tiles de primeiro nível e na configuração dos tiles de segundo nível; e um meio de geração para gerar uma sequência de vídeo reconstruída para exibição com base nos tiles de primeiro nível decodificados e os tiles de segundo nível.
[0024] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que o decodificador é configurado adicionalmente para realizar o método de qualquer um dos aspectos anteriores.
[0025] Para fins de clareza, qualquer uma das modalidades anteriores pode ser combinada com qualquer uma ou mais das outras modalidades anteriores para criar uma nova modalidade dentro do escopo da presente revelação.
[0026] Estas e outras características serão mais claramente compreendidas a partir da seguinte descrição detalhada juntamente com os desenhos e reivindicações anexos.
BREVE DESCRIÇÃO DOS DESENHOS
[0027] Para uma compreensão mais completa desta revelação, agora é feita referência à seguinte breve descrição, em relação aos desenhos anexos e descrição detalhada, em que numerais de referência semelhantes representam partes semelhantes.
[0028] A FIG. 1 é um fluxograma de um método de exemplo de codificação de um sinal de vídeo.
[0029] A FIG. 2 é um diagrama esquemático de um sistema de codificação e decodificação (codec) de exemplo para codificação de vídeo.
[0030] A FIG. 3 é um diagrama esquemático que ilustra um codificador de vídeo de exemplo.
[0031] A FIG. 4 é um diagrama esquemático que ilustra um decodificador de vídeo de exemplo.
[0032] A FIG. 5 é um diagrama esquemático que ilustra um fluxo de bits de exemplo contendo uma sequência de vídeo codificada.
[0033] As FIGs. 6A a 6E ilustram um mecanismo de exemplo para criar uma trilha de extração para a combinação de subimagens de múltiplas resoluções de diferentes fluxos de bits em uma única imagem para o uso em aplicações de realidade virtual (VR).
[0034] A FIG. 7 ilustra uma aplicação de videoconferência de exemplo que une imagens de múltiplas resoluções de diferentes fluxos de bits em uma única imagem para exibição.
[0035] As FIGs. 8A a 8B são diagramas esquemáticos que ilustram um esquema de tiling de vídeo flexível de exemplo capaz de suportar múltiplos tiles com diferentes resoluções na mesma imagem.
[0036] A FIG. 9 é um diagrama esquemático de um dispositivo de codificação de vídeo de exemplo.
[0037] A FIG. 10 é um fluxograma de um método de exemplo de codificação de uma imagem utilizando um esquema de tiling flexível.
[0038] A FIG. 11 é um fluxograma de um método de exemplo de decodificação de uma imagem utilizando um esquema de tiling flexível.
[0039] A FIG. 12 é um diagrama esquemático de um sistema de exemplo para codificar uma sequência de vídeo utilizando um esquema de tiling flexível.
DESCRIÇÃO DETALHADA
[0040] Deve ser entendido desde o início que, embora uma implementação ilustrativa de uma ou mais modalidades seja fornecida abaixo, os sistemas e/ou métodos revelados podem ser implementados usando qualquer número de técnicas, sejam atualmente conhecidas ou existentes. A revelação não deve, de forma alguma, ser limitada às implementações ilustrativas, desenhos e técnicas ilustradas abaixo, incluindo os projetos e implementações exemplares ilustrados e descritos neste relatório, mas pode ser modificada dentro do escopo das reivindicações anexas juntamente com seu escopo completo de equivalentes.
[0041] Vários acrônimos são utilizados neste relatório, tais como bloco de árvore de codificação (CTB), unidade de árvore de codificação (CTU), unidade de codificação (CU), sequência de vídeo codificada (CVS), Equipe de Especialistas em Vídeo 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).
[0042] Muitas técnicas de compressão de vídeo podem ser utilizadas para reduzir o tamanho dos arquivos de vídeo com perda mínima de dados. Por exemplo, as técnicas de compressão de vídeo podem incluir a realização de predição espacial (por exemplo, imagem intra) e/ou predição temporal (por exemplo, imagem inter) para reduzir ou remover a redundância de dados na sequência de vídeo. Para a codificação de vídeo com base em bloco, uma fatia de vídeo (por exemplo, uma imagem de vídeo ou uma porção de uma imagem de vídeo) pode ser particionada em blocos de vídeo, que também podem ser 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. Os blocos de vídeo em uma fatia codificada de modo intra (I) de uma imagem são codificados usando predição espacial em relação às amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia de predição unidirecional codificada de modo inter (P) ou predição bidirecional (B) de uma imagem pode ser codificada utilizando predição espacial em relação às amostras de referência em blocos vizinhos na mesma imagem ou predição temporal em relação às amostras de referência em outras imagens de referência. As imagens podem ser referidas como quadros e/ou imagens e as imagens de referência podem ser referidas como quadros de referência e/ou imagens de referência. A predição espacial ou temporal resulta em um bloco preditivo que representa um bloco de imagem. Os dados residuais representam diferenças de pixel entre o bloco de imagem original e o bloco preditivo. 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 que indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco codificado de modo intra é codificado, de acordo com um modo de codificação intra e os dados residuais. Para a compressão adicional, os dados residuais podem ser transformados a partir do domínio de pixel para um domínio de transformada. Isto resulta em coeficientes de transformada residuais, que podem ser quantizados. Os coeficientes de transformada quantizados podem estar inicialmente dispostos em um arranjo bidimensional. Os coeficientes de transformada quantizados podem ser varridos, de modo a produzir um vetor unidimensional de coeficientes de transformada. A codificação de entropia pode ser aplicada para obter ainda mais compressão. Tais técnicas de compressão de vídeo são debatidas em mais detalhes abaixo.
[0043] Para garantir que um vídeo codificado possa ser decodificado com precisão, o vídeo é codificado e decodificado, de acordo com os padrões de codificação de vídeo correspondentes. Os padrões de codificação de vídeo incluem Setor de Padronização (ITU-T) da União Internacional de Telecomunicações (ITU) H.261, Organização Internacional de Padronização/Comissão Eletrotécnica Internacional (ISO/IEC), Grupo de Especialistas em Imagem em Movimento (MPEG)-1 Parte 2, ITU-T H.262 ou ISO/IEC MPEG-2 Parte 2, ITU-T H.263, ISO/IEC MPEG-4 Parte 2, Codificação de Vídeo Avançada (AVC), também conhecida como ITU-T H.264 ou ISO/IEC MPEG-4 Parte 10 e Codificação de Vídeo de Alta Eficiência (HEVC), também conhecida como ITU-T H.265 ou MPEG-H Parte 2. AVC incluem extensões, tais como Codificação de Vídeo Escalonável (SVC), Codificação de Vídeo de Múltiplas Visualizações (MVC) e Codificação de Vídeo Múltiplas Visualizações mais Profundidade (MVC+D) e AVC tridimensional (3D) (3D-AVC). HEVC inclui extensões, tais como HEVC Escalonável (SHVC), HEVC de Múltiplas Visualizações (MV-HEVC) e HEVC 3D (3D-HEVC). A equipe conjunta de especialista em vídeo (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 está incluída em um Rascunho de Trabalho (WD), que inclui JVET- L1001-v5.
[0044] Para codificar uma imagem de vídeo, a imagem é primeiro particionada e as partições são codificadas em um fluxo de bits. Vários esquemas de particionamento de imagem estão disponíveis. Por exemplo, uma imagem pode ser particionada em fatias regulares, fatias dependentes, tiles e/ou, de acordo com o Processamento Paralelo de Frente de Onda (WPP). Para simplificar, HEVC restringe os codificadores, de modo que apenas fatias regulares, fatias dependentes, tiles, WPP e combinações dos mesmos possam ser usados ao particionar uma fatia em grupos de CTBs para codificação de vídeo. Tal particionamento pode ser aplicado para suportar a correspondência de tamanho da Unidade de Transferência Máxima (MTU), processamento paralelo e atraso de ponta a ponta reduzido. MTU denota a quantidade de dados máxima que pode ser transmitida em um único pacote. Se uma carga útil de pacote exceder a MTU, esta carga útil é dividida em dois pacotes através de um processo chamado fragmentação.
[0045] Uma fatia regular, também referida simplesmente como uma fatia, é uma porção particionada de uma imagem que pode ser reconstruída independentemente de outras fatias regulares dentro da mesma imagem, não obstante algumas interdependências, devido às operações de filtragem loop. Cada fatia regular é encapsulada em sua própria unidade de Camada de Abstração de Rede (NAL) para transmissão. Além disso, a predição na imagem (predição de amostra intra, predição de informações de movimento, predição de modo de codificação) e a dependência de codificação de entropia através das fronteiras de fatia podem ser desativadas para suportar a reconstrução independente. Tal reconstrução independente suporta a paralelização. Por exemplo, a paralelização com base em fatia regular emprega comunicação mínima comunicação inter-processador ou inter-núcleo. Entretanto, como cada fatia regular é independente, cada fatia é associada a um cabeçalho de fatia separado. O uso de fatias regulares pode incorrer em uma sobrecarga de codificação substancial, devido ao custo de bits do cabeçalho de fatia para cada fatia e devido à falta de predição através das fronteiras de fatia. Além disso, as fatias regulares podem ser utilizadas para suportar a correspondência para os requisitos de tamanho de MTU. Especificamente, como uma fatia regular é encapsulada em uma unidade NAL separada e pode ser independentemente codificada, cada fatia regular deve ser menor do que a MTU em esquemas de MTU para evitar quebrar a fatia em múltiplos pacotes. Como tal, o objetivo de paralelização e o objetivo de correspondência de tamanho de MTU podem colocar demandas contraditórias para um plano de fatia em uma imagem.
[0046] As fatias dependentes são similares às fatias regulares, mas têm cabeçalhos de fatia encurtados e permitem o particionamento das fronteiras de bloco de árvore de imagem sem quebrar a predição na imagem. Consequentemente, as fatias dependentes permitem que uma fatia regular seja fragmentada em múltiplas unidades NAL, o que fornece atraso ponta a ponta reduzido, permitindo que uma parte de uma fatia regular seja enviada antes que a codificação de toda a fatia regular seja concluída.
[0047] Um tile é uma porção particionada de uma imagem criada por fronteiras horizontais e verticais que criam colunas e linhas de tiles. Os tiles podem ser codificados em ordem de varredura raster (da direita para a esquerda e de cima para baixo). A ordem de varredura de CTBs é local dentro de um tile. Consequentemente, CTBs em um primeiro tile são codificados na ordem de varredura raster, antes de prosseguir para os CTBs no próximo tile. Similar às fatias regulares, os tiles quebram dependência de predição na imagem bem como dependências de codificação de entropia. Entretanto, os tiles não podem ser incluídos em unidades NAL individuais e, consequentemente, os tiles não podem ser usados para a correspondência de tamanho de MTU. Cada tile pode ser processado por um processador/núcleo e a comunicação inter- processador/inter-núcleo utilizada para a predição na imagem entre as unidades de processamento que decodificam tiles vizinhos pode ser limitada a transmitir um cabeçalho de fatia compartilhado (quando tiles adjacentes estão na mesma fatia) e realizar o compartilhamento relacionado à filtragem loop de amostras e metadados reconstruídos. Quando mais de um tile é incluído em uma fatia, o deslocamento de byte do ponto de entrada para cada tile, exceto o primeiro deslocamento 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 a mesma fatia.
[0048] Em WPP, a imagem é particionada em linhas únicas de CTBs. A decodificação de entropia e os mecanismos de predição podem usar dados de CTBs em outras linhas. O processamento paralelo é possível através da decodificação paralela de linhas de CTB. Por exemplo, uma linha atual pode ser decodificada em paralelo com uma linha anterior. Entretanto, a decodificação da linha atual é atrasada no processo de decodificação das linhas anterior por dois CTBs. Este atraso garante que os dados relacionados ao CTB acima e ao CTB acima e à direita do CTB atual na linha atual estejam disponíveis antes do CTB atual ser codificado. Este método aparece como uma frente de onda quando representado graficamente. Este início escalonado permite a paralelização com até tantos processadores/núcleos quanto a imagem contém linhas de CTB. Pelo fato de que a predição na imagem entre linhas de blocos de árvore vizinhas dentro de uma imagem é permitida, a comunicação inter-processador/inter- núcleo para permitir a predição na imagem pode ser substancial. O particionamento de WPP considera os tamanhos de unidade NAL. Consequentemente, WPP não suporta a correspondência de tamanho de MTU. Entretanto, as fatias regulares podem ser usadas em conjunto com WPP, com certa sobrecarga de codificação, para implementar a correspondência de tamanho de MTU, como desejado.
[0049] Os tiles também podem incluir conjuntos de tiles com restrição de movimento. Um conjunto de tiles com restrição de movimento (MCTS) é um conjunto de tiles projetado, tal que os vetores de movimento associados sejam restritos a apontar para localizações de amostra completa dentro de MCTS e para localização de amostra parcial que exigem apenas localização de amostra completa dentro de MCTS para interpolação. Além disso, o uso de candidatos de vetor de movimento para a predição de vetor de movimento temporal derivada de blocos fora de MCTS não é permitido. Desta maneira, cada MCTS pode ser independentemente decodificado sem a existência de tiles não incluídos no MCTS. As mensagens de informações de aprimoramento suplementar (SEI) de MCTSs temporais podem ser usadas para indicar a existência de MCTSs no fluxo de bits e sinalizar os MCTSs. As mensagens SEI MCTSs fornecem informações suplementares que podem ser usadas na extração de subfluxo de bits MCTS (especificado como parte da semântica da mensagem SEI) para gerar um fluxo de bits em conformidade para um MCTS. As informações incluem um número de conjuntos de informações de extração, cada um definindo um número de MCTSs e contendo bytes de carga útil de sequência de bytes brutos (RBSP) dos conjuntos de parâmetros de vídeo de substituição (VPSs), conjuntos de parâmetros de sequência (SPSs) e conjuntos de parâmetro de imagem (PPSs) para ser usado durante o processo de extração de subfluxo de bits MCTS. Ao extrair um subfluxo de bits, de acordo com o processo de extração de subfluxo de bits MCTS, os conjuntos de parâmetros (VPSs, SPSs e PPSs) podem ser reescritos ou substituídos e os cabeçalhos de fatia podem ser atualizados pelo fato de que um ou todos os elementos de sintaxe relacionados ao endereço de fatia (incluindo first_slice_segment_in_pic_flag e slice_segment_address) podem utilizar diferentes valores no subfluxo de bits extraído.
[0050] Os vários esquemas de tiling podem ser utilizados ao particionar uma imagem para a codificação adicional. Como um exemplo particular, os tiles podem ser atribuídos aos grupos de tiles, que podem substituir as fatias em alguns exemplos. Em alguns exemplos, cada grupo de tiles pode ser extraído independentemente de outros grupos de tiles. Consequentemente, o agrupamento de tiles pode suportar a paralelização, permitindo que cada grupo de tiles seja atribuído a um processador diferente. O agrupamento de tiles também pode ser utilizado em casos onde um decodificador pode não desejar decodificar uma imagem inteira. Como um exemplo particular, os esquemas de codificação de vídeo podem ser utilizados para suportar o vídeo de realidade virtual (VR), que pode ser codificado, de acordo com o Formato de Aplicação de Mídia Omnidirecional (OMAF).
[0051] No vídeo VR, uma ou mais câmeras podem gravar o ambiente em torno da(s) câmera(s). Um usuário pode, em seguida, visualizar o vídeo VR como se o usuário estivesse presente no mesmo local que a câmera. No vídeo VR, uma imagem abrange todo um ambiente em torno do usuário. O usuário, em seguida, visualiza uma subporção da imagem. Por exemplo, um usuário pode utilizar uma tela montada na cabeça que muda a subporção da imagem exibida com base nos movimentos da cabeça do usuário. A porção do vídeo que está sendo exibida pode ser referida como uma porta de visualização.
[0052] Consequentemente, uma característica discreta do vídeo omnidirecional é que apenas uma porta de visualização é exibida em um determinado momento. Isto contrasta com outras aplicações de vídeo que podem exibir um vídeo inteiro. Esta característica pode ser utilizada para melhorar o desempenho dos sistemas de vídeo omnidirecionais, por exemplo, através da liberação seletiva, dependendo da porta de visualização do usuário (ou qualquer outro critério, tal como metadados cronometrados de janela de visualização recomendados). A liberação dependente da janela de visualização pode ser ativada, por exemplo, utilizando empacotamento por região e/ou codificação de vídeo dependente da porta de visualização. A melhoria de desempenho pode resultar em menor largura de banda de transmissão, menor complexidade de decodificação ou ambas quando comparadas aos outros sistemas de vídeo omnidirecionais ao utilizar a mesma resolução/qualidade de vídeo.
[0053] Uma operação dependente da porta de visualização de exemplo é um método com base em MCTS para atingir a resolução de cinco mil amostras (5K) (por exemplo, amostras de luma 5120×2560) eficaz de resolução de projeção equirretangular (ERP) com perfil de vídeo OMAF dependente da porta de visualização com base em HEVC. Este método é descrito em mais detalhes abaixo. Mas, em geral, este método particiona o vídeo VR em grupos de tiles e codifica o vídeo em uma pluralidade de resoluções. O decodificador pode indicar a porta de visualização atualmente usada pelo usuário durante a transmissão. O servidor de vídeo que fornece os dados de vídeo VR pode, em seguida, encaminhar o(s) grupo(s) de tiles associado à porta de visualização em alta resolução e encaminhar os grupos de tiles não visualizados em baixa resolução. Isto permite que o usuário visualize o vídeo VR em uma alta resolução sem exigir que a imagem inteira seja enviada em alta resolução. As subporções não visualizadas são descartadas e, consequentemente, o usuário pode não estar ciente das resoluções mais baixas. Entretanto, os grupos de tiles de baixa resolução podem ser exibidos para o usuário se o usuário alterar as portas de visualização. A resolução da nova porta de visualização pode, em seguida, ser aumentada, conforme o vídeo prossegue. De modo a implementar tal sistema, devem ser criadas imagens que contenham tanto os grupos de tiles e de alta resolução quanto grupos de tiles de baixa resolução.
[0054] Em outro exemplo, as aplicações de videoconferência podem ser projetadas para encaminhar imagens incluindo múltiplas resoluções. Por exemplo, uma videoconferência pode conter múltiplos participantes. O participante que está falando no momento pode ser exibido em uma resolução mais alta e outros participantes podem ser exibidos em resoluções mais baixas. De modo a implementar tal sistema, devem ser criadas imagens que contenham tanto os grupos de tiles de resolução mais alta quanto os grupos de tiles de resolução mais baixa.
[0055] São revelados neste relatório vários mecanismos de tiling flexíveis para suportar a criação de uma imagem com subimagens codificadas em múltiplas resoluções. Por exemplo, um vídeo pode ser codificado em uma pluralidade de resoluções. O vídeo também pode ser codificado utilizando fatias em cada resolução. As fatias de resolução mais baixa são menores que as fatias de resolução mais alta. De modo a criar uma imagem com múltiplas resoluções, a imagem pode ser particionada em tiles de primeiro nível. As fatias da resolução mais alta podem ser incluídas diretamente nos tiles de primeiro nível. Além disso, os tiles de primeiro nível podem ser particionados em tiles de segundo nível que são menores que os tiles de primeiro nível. Consequentemente, os menores tiles de segundo nível podem aceitar diretamente as fatias de resolução mais baixa. Desta maneira, as fatias de cada resolução podem ser comprimidas em uma única imagem através de uma relação de índice de tile sem exigir que diferentes tiles de resolução sejam corrigidos dinamicamente para usar um esquema de endereçamento compatível. Os tiles de primeiro nível e os tiles de segundo nível podem ser implementados como MCTSs e, consequentemente, podem aceitar dados de imagem com restrição de movimento em diferentes resoluções. A presente revelação inclui muitos aspectos. Como um exemplo particular, os tiles de primeiro nível são divididos em tiles de segundo nível. Os tiles de segundo nível são, em seguida, restritos para que cada um contenha uma única fatia retangular de dados de imagem (por exemplo, na resolução menor). Como usado neste relatório, um tile é uma porção particionada de uma imagem criada por fronteiras horizontais e verticais (por exemplo, de acordo com colunas e linhas). Uma fatia retangular é uma fatia restrita para manter um formato retangular e é, consequentemente, codificada com base em fronteiras de imagem horizontais e verticais. Consequentemente, uma fatia retangular não é codificada com base em um grupo de varredura raster (que contém CTUs em uma linha da esquerda para a direita e de cima para baixo e pode não manter um formato retangular). Uma fatia é uma região espacialmente discreta de uma imagem/quadro que é codificada separadamente de qualquer outra região no mesmo quadro/imagem.
[0056] A FIG. 1 é um fluxograma de um método operacional de exemplo 100 de codificação de um sinal de vídeo. Especificamente, um sinal de vídeo é codificado em um codificador. O processo de codificação comprime o sinal de vídeo utilizando vários mecanismos para reduzir o tamanho do 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 a sobrecarga de largura de banda associada. O decodificador, em seguida, 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, em geral, reflete o processo de codificação para permitir que o decodificador reconstrua consistentemente o sinal de vídeo.
[0057] Na etapa 101, o sinal de vídeo é introduzido no codificador. Por exemplo, o sinal de vídeo pode ser um arquivo de vídeo não comprimido armazenado na memória. Como 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 a transmissão ao vivo do vídeo. O arquivo de vídeo pode incluir tanto um componente de áudio quanto um componente de vídeo. O componente de vídeo contém uma série de quadros de imagens que, quando visualizado em uma sequência, fornece a impressão visual de movimento. Os quadros contêm pixels que são expressos em termos de luz, referidos neste relatório como componentes de luma (ou amostras de luma) e cor, que é referida como componentes de croma (ou amostras de cores). Em alguns exemplos, os quadros também podem conter valores de profundidade para suportar a visualização tridimensional.
[0058] 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, na 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),
que são blocos de um tamanho pré-definido (por exemplo, sessenta e quatro pixels por sessenta e quatro pixels). As CTUs contêm tanto amostras de luma quanto de croma. As árvores de codificação podem ser utilizadas para dividir as CTUs em blocos e, em seguida, subdividir de forma recursiva os blocos até que as configurações sejam obtidas que suportem codificação adicional. Por exemplo, os componentes de luma de um quadro podem ser subdivididos até que os blocos individuais contenham valores de iluminação relativamente homogêneos. Além disso, os componentes de croma de um quadro podem ser subdivididos até que os blocos individuais contenham valores de cor relativamente homogêneos. Consequentemente, os mecanismos de particionamento variam, dependendo do conteúdo dos quadros de vídeo.
[0059] Na etapa 105, vários mecanismos de compressão são utilizados para comprimir os blocos de imagem particionados na etapa 103. Por exemplo, predição inter e/ou predição intra pode ser utilizada. A predição inter é projetada para tirar vantagem do fato de que os objetos em uma cena comum tendem a aparecer em quadros sucessivos. Consequentemente, um bloco que representa um objeto em um quadro de referência não precisa ser repetidamente descrito em quadros adjacentes. Especificamente, um objeto, tal como uma tabela, pode permanecer em uma posição constante em múltiplos quadros. Consequentemente, a tabela é descrita uma vez e os quadros adjacentes podem se referir ao quadro de referência. Os mecanismos de correspondência padrão podem ser utilizados para combinar objetos em múltiplos quadros. Além disso, os objetos em movimento podem ser representados em múltiplos quadros, por exemplo, devido ao movimento do objeto ou movimento da câmera. Como um exemplo particular, um vídeo pode mostrar um automóvel que se move pela tela ao longo de múltiplos quadros. Os vetores de movimento podem ser utilizados para descrever tal movimento. Um vetor de movimento é um vetor bidimensional que fornece um deslocamento das coordenadas de um objeto em um quadro para as coordenadas do objeto em um quadro de referência. Como tal, a predição inter pode codificar um bloco de imagem em um quadro atual como um conjunto de vetores de movimento que indica um deslocamento de um bloco correspondente em um quadro de referência.
[0060] A predição intra codifica blocos em um quadro comum. A predição intra aproveita o fato de que os componentes de luma e croma tendem a se agrupar em um quadro. Por exemplo, um pedaço de verde em uma porção de uma árvore tende a ser posicionado adjacente ao pedaço de verde similar. A predição intra emprega múltiplos modos de predição direcionais (por exemplo, trinta e três em HEVC), um modo planar e um modo de corrente direta (DC). Os modos direcionais indicam que um bloco atual é similar/igual às amostras de um bloco vizinho em uma direção correspondente. O modo planar indica que uma série de blocos ao longo de uma linha/coluna (por exemplo, um plano) pode ser interpolada com base em blocos vizinhos nas extremidades da linha. O modo planar, na verdade, indica uma transição suave de luz/cor em uma linha/coluna utilizando uma inclinação relativamente constante em valores mutáveis. O modo DC é utilizado suavização de fronteira e indica que um bloco é similar/igual a um valor médio associado às amostras de todos os blocos vizinhos associados às direções angulares dos modos de predição direcionais. Consequentemente, os blocos de predição intra podem representar blocos de imagem como vários valores de modo de predição relacional em vez dos valores reais. Além disso, os blocos de predição inter podem representar blocos de imagem como valores de vetor de movimento em vez de valores reais. Em cada caso, os blocos de predição podem não representar exatamente os blocos de imagem em alguns casos. Quaisquer diferenças são armazenadas em blocos residuais. As transformações podem ser aplicadas aos blocos residuais para comprimir adicionalmente o arquivo.
[0061] 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 blocos debatida acima pode resultar na criação de imagens em bloco no decodificador. Além disso, o esquema de predição com base em blocos pode codificar um bloco e, em seguida, reconstruir o bloco codificado para uso posterior como um bloco de referência. O esquema de filtragem in loop aplica iterativamente filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptativos e filtros de deslocamento adaptativos à amostra (SAO) aos blocos/quadros. Estes filtros atenuam tais artefatos de blocagem, de modo que o arquivo codificado possa ser reconstruído com precisão. Além disso, estes filtros atenuam artefatos nos blocos de referências reconstruídos, de modo que os artefatos sejam menos propensos a criar artefatos adicionais em blocos subsequentes que são codificados com base nos blocos de referência reconstruídos.
[0062] Uma vez que o sinal de vídeo foi 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 debatidos acima, bem como quaisquer dados de sinalização desejados para suportar a reconstrução do sinal de vídeo apropriada no decodificador. Por exemplo, tais dados podem incluir dados de predição, dados de predição, blocos residuais e vários sinalizadores que fornecem 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 também pode ser transmitido por broadcaste/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 contínua e/ou simultaneamente ao longo de muitos quadros e blocos. A ordem mostrada na FIG. 1 é apresentada para maior clareza e facilidade da discussão e não tem como objetivo limitar o processo de codificação de vídeo a uma ordem particular.
[0063] 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 sintaxe e dados de vídeo correspondentes. O decodificador emprega a sintaxe e dados a partir do fluxo de bits para determinar as partições para os quadros na etapa
111. O particionamento deve corresponder aos resultados do particionamento de bloco na etapa 103. A codificação/decodificação de entropia utilizada na etapa 111 é agora descrita. O codificador faz muitas escolhas durante o processo de compressão, tais como a seleção de esquemas de particionamento de bloco a partir de várias opções possíveis com base no posicionamento espacial de valores nas imagens de entrada. Sinalizar as opções exatas pode utilizar um grande número de bins. Como usado neste relatório, um bin é um valor binário que é tratado como uma variável (por exemplo, um valor de bit que pode variar dependendo do contexto). A codificação de entropia permite que o codificador descarte quaisquer opções que sejam claramente inviáveis para um caso particular, deixando um conjunto de opções permitidas. Cada opção permitida é, em seguida, atribuída a uma palavra código. O comprimento das palavras de código é fundamentado no número de opções permitidas (por exemplo, um bin para duas opções, dois bins para três a quatro opções, etc.) O codificador, em seguida, codifica a palavra código para a opção selecionada. Este esquema reduz o tamanho das palavras de código pelo fato de que as palavras de código são tão grandes quanto desejado para indicar exclusivamente uma seleção de um pequeno subconjunto de opções permitidas em oposição a indicar exclusivamente a seleção de um conjunto potencialmente grande de todas as opções possíveis. O decodificador, em seguida, decodifica a seleção determinando o conjunto de opções permitidas de maneira similar ao codificador. Ao determinar o conjunto de opções permitidas, o decodificador pode ler a palavra código e determinar a seleção feita pelo codificador.
[0064] Na etapa 113, o decodificador realiza a decodificação de bloco. Especificamente, o decodificador emprega transformações reversas para gerar blocos residuais. Em seguida, 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 os blocos de predição intra quanto os blocos de predição inter gerados no codificador na etapa 105. Os blocos de imagem reconstruídos são, em seguida, posicionados em quadros de um sinal de vídeo reconstruído, de acordo com os dados de particionamento determinados na etapa 111. A sintaxe para a etapa 113 também pode ser sinalizada no fluxo de bits através da codificação de entropia, como debatido acima.
[0065] Na etapa 115, a filtragem é realizada nos quadros do sinal de vídeo reconstruído de maneira similar à etapa 107 no codificador. Por exemplo, os filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptativos 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 uma tela na etapa 117 para a visualização por um usuário final.
[0066] A FIG. 2 é um diagrama esquemático de um sistema de codificação e decodificação (codec) de exemplo 200 para a codificação de vídeo. Especificamente, o sistema de codec 200 fornece funcionalidade para suportar a implementação do método operacional 100. O sistema de codec 200 é generalizado para representar componentes utilizados tanto em um codificador quanto em um decodificador. O sistema de codec 200 recebe e particiona um sinal de vídeo como debatido em 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 de codec 200, em seguida, comprime o sinal de vídeo particionado 201 em um fluxo de bits codificado quando atua como um codificador, como debatido em relação às etapas 105, 107 e 109 no método 100. Ao atuar como um sistema de codec, o decodificador 200 gera um sinal de vídeo de saída do fluxo de bits, como debatido em relação às etapas 111, 113, 115 e 117 no método operacional
100. O sistema de codec 200 inclui um componente de controle de codificador geral 211, um componente de escalonamento e quantização de transformada 213, um componente de estimação de imagem intra 215, um componente de predição de imagem intra 217, um componente de compensação de movimento 219, um componente de estimação de movimento 221, um componente de escalonamento e transformada inversa 229, um componente de análise de controle de filtro 227, um componente de filtros in loop 225, um componentes de buffer de imagem decodificada 223 e um componente de formatação de cabeçalho e codificação aritmética binária adaptativa ao contexto (CABAC) componente 231. Tais componentes são acoplados, como mostrado. Na FIG. 2, as linhas pretas indicam o movimento dos dados a serem codificados/decodificados, enquanto as linhas tracejadas indicam o movimento dos dados de controle que controlam a operação de outros componentes. Os componentes de sistema de codec 200 podem estar todos presentes no codificador. O decodificador pode incluir um subconjunto dos componentes do sistema de codec 200. Por exemplo, o decodificador pode incluir o componente de predição de imagem intra 217, o componente de compensação de movimento 219, o componente de escalonamento e transformada inversa 229, o componente de filtros in loop 225 e o componente de buffer de imagem decodificada 223. Estes componentes são descritos agora.
[0067] 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 menores blocos de pixels. Estes blocos podem, em seguida, ser subdivididos adicionalmente em menores blocos. Os blocos podem ser referidos como nós na árvore de codificação. Os 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 luma, bloco(s) de croma de diferença vermelha (Cr) e um bloco(s) de croma de diferença azul (Cb), junto com as instruções de sintaxe correspondentes para a CU. Os modos de divisão podem incluir uma árvore binária (BT), árvore tripla (TT) e uma quadtree (QT) utilizadas para particionar um nó em dois, três ou quatro nós filhos, respectivamente, de formas variadas, dependendo dos modos de divisão utilizados. O sinal de vídeo particionado 201 é encaminhado para o componente de controle codificador 211, o componente de escalonamento e quantização de transformada 213, o componente de estimação de imagem intra 215, o componente de análise de controle de filtro 227 e o componente de estimação de movimento 221 para compressão.
[0068] 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 as restrições da aplicação. Por exemplo, o componente de controle de codificador geral 211 gerencia a otimização do tamanho da taxa de bits/fluxo de bits versus a qualidade de reconstrução. Tais decisões podem ser feitas com base no espaço de armazenamento/disponibilidade de largura de banda e solicitações de resolução de imagem. O componente de controle de codificador geral 211 também gerencia a utilização do buffer à luz da velocidade de transmissão para atenuar problemas de sobrecarga e subexecução de buffer. Para gerenciar estes problemas, o componente de controle de codificador geral 211 gerencia o particionamento, predição e filtragem pelos outros componentes. Por exemplo, o componente de controle de codificador geral 211 pode aumentar dinamicamente a complexidade da compressão para aumentar a resolução e aumentar o uso da largura de banda ou diminuir a complexidade da compressão para diminuir a resolução e o uso da largura de banda. Consequentemente, o componente de controle de codificador geral 211 controla os outros componentes do sistema de codec 200 para equilibrar a qualidade de reconstrução do sinal de vídeo com questões de taxa de bits. O componente de controle de codificador geral 211 cria dados de controle, que controlam a operação dos outros componentes. Os dados de controle também são encaminhados para a formatação de cabeçalho e componente CABAC 231 para serem codificados no fluxo de bits para sinalizar os parâmetros para decodificação no decodificador.
[0069] O sinal de vídeo particionado 201 também é enviado para o componente de estimação de movimento 221 e 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 estimação de movimento 221 e o componente de compensação de movimento 219 realizam a codificação preditiva de modo inter do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para fornecer predição temporal. O sistema de codec 200 pode realizar múltiplas passagens de codificação, por exemplo, para selecionar um modo de codificação apropriado para cada bloco de dados de vídeo.
[0070] O componente de estimação de movimento 221 e o componente de compensação de movimento 219 podem ser altamente integrados, mas são ilustrados separadamente para propósitos conceituais. A estimação de movimento, realizada pelo componente de estimação de movimento 221, é o processo de geração de vetores de movimento, que estimam o movimento para os blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de um objeto codificado em relação a um bloco preditivo. Um bloco preditivo é um bloco que é encontrado próximo ao bloco a ser codificado, em termos de diferença de pixel. Um bloco preditivo também pode ser referido como um bloco de referência. Tal diferença de pixel pode ser determinada pela soma da diferença absoluta (SAD), soma da diferença quadrada (SSD) ou outras métricas de diferença. HEVC emprega vários objetos codificados incluindo uma CTU, blocos de árvore de codificação (CTBs) e CUs. Por exemplo, uma CTU pode ser dividida em CTBs, que podem, em seguida, ser divididos em CBs para inclusão em CUs. Uma CU pode ser codificada como uma unidade de predição (PU) contendo dados de predição e/ou uma unidade de transformada (TU) contendo dados residuais transformados para a CU. O componente de estimação de movimento 221 gera vetores de movimento, PUs e TUs por meio do uso de 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 estimação de movimento 221 pode determinar múltiplos blocos de referência, múltiplos vetores de movimento, etc., para um bloco/quadro atual, e pode selecionar os blocos de referência, vetores de movimento, etc., tendo as melhores características de distorção de taxa. As melhores características de distorção de taxa equilibram tanto a qualidade da reconstrução de vídeo (por exemplo, quantidade de perda de dados por compressão) com a eficiência da codificação (por exemplo, tamanho da codificação final).
[0071] Em alguns exemplos, o sistema de codec 200 pode calcular valores para posição de pixel subinteiro de imagens de referência armazenadas no componente de buffer de imagem decodificada 223. Por exemplo, sistema de 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 de pixel parciais da imagem de referência. Portanto, o componente de estimação de movimento 221 pode realizar uma pesquisa de movimento em relação às posições de pixel completas e posições de pixel parciais e emitir um vetor de movimento com precisão de pixel parcial. O componente de estimação de movimento 221 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia codificada de modo inter comparando a posição da PU à posição de um bloco preditivo de uma imagem de referência. O componente de estimação de movimento 221 emite o vetor de movimento calculado como dados de movimento para a formatação de cabeçalho e componente CABAC 231 para codificação e movimento para o componente de compensação de movimento 219.
[0072] A compensação de movimento, realizada pelo componente de compensação de movimento 219, pode envolver buscar ou gerar o bloco preditivo com base no vetor de movimento determinado pelo componente de estimação de movimento 221. Novamente, o componente de estimação de movimento 221 e o componente de compensação de movimento 219 podem ser integrados funcionalmente, em alguns exemplos. Após o recebimento do vetor de movimento para a PU do bloco de vídeo atual, o componente de compensação de movimento 219 pode localizar o bloco preditivo para o qual o vetor de movimento aponta. Um bloco de vídeo residual é, em seguida, formado subtraindo os valores de pixel do bloco preditivo dos valores de pixel do bloco de vídeo atual sendo codificado, formando a diferença de valores de pixel. Em geral, o componente de estimação de movimento 221 realiza a estimação de movimento em relação aos componentes de luma e o componente de compensação de movimento 219 usa os vetores de movimento calculados com base nos componentes de luma tanto para os componentes de croma quanto para os componentes de luma. O bloco preditivo e bloco residual são encaminhados para o componente de escalonamento e quantização de transformada 213.
[0073] O sinal de vídeo particionado 201 também é enviado para o componente de estimação de imagem intra 215 e componente de predição de imagem intra 217. Tal como o componente de estimação de movimento 221 e o componente de compensação de movimento 219, o componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 podem ser altamente integrados, mas são ilustrados separadamente para propósitos conceituais. O componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 predizem de modo intra um bloco atual em relação aos blocos em um quadro atual, como uma alternativa para a predição inter realizada pelo componente de estimação de movimento 221 e pelo componente de compensação de movimento 219 entre os quadros, como descrito acima. Em particular, o componente de estimação de imagem intra 215 determina um modo de predição intra para usar para codificar um bloco atual. Em alguns exemplos, o componente de estimação de imagem intra 215 seleciona um modo de predição intra apropriado para codificar um bloco atual a partir de múltiplos modos de predição intra testados. Os modos de predição intra selecionados são, em seguida, encaminhados para a formatação de cabeçalho e o componente CABAC 231 para codificação.
[0074] Por exemplo, o componente de estimação de imagem intra 215 calcula os 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 geralmente determina uma quantidade de distorção (ou erro) entre um bloco codificado e um bloco não codificado original que foi codificado para produzir o bloco codificado, bem como uma taxa de bits (por exemplo, um número de bits) usada para produzir o bloco codificado. O componente de estimação de imagem intra 215 calcula as razões das distorções e taxas para os vários blocos codificados para determinar qual modo de predição intra exibe o melhor valor de distorção de taxa para o bloco. Além disso, o componente de estimação de imagem intra 215 pode ser configurado para codificar os blocos de profundidade de um mapa de profundidade usando um modo de modelagem de profundidade (DMM) com base na otimização de distorção de taxa (RDO).
[0075] O componente de predição de imagem intra 217 pode gerar um bloco residual a partir do bloco preditivo com base nos modos de predição intra selecionados determinados pelo componente de estimação de imagem intra 215 quando implementado em um codificador ou ler o bloco residual 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, representados como uma matriz. O bloco residual é, em seguida, encaminhado para o componente de escalonamento e quantização de transformada 213. O componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 podem operar tanto nos componentes de luma quanto de croma.
[0076] 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 conceitualmente similar, ao bloco residual, produzindo um bloco de vídeo compreendendo os valores de coeficiente de transformada residual. As transformações de frente de onda, transformações inteiras, transformações de sub-banda ou outros tipos de transformações também podem ser usadas. A transformada pode converter as informações residuais de um domínio de valor de pixel em um domínio de transformada, tal como um domínio de frequência. O componente de escalonamento e quantização de transformada 213 também é configurado para dimensionar as informações residuais transformadas, por exemplo, com base na frequência. Tal escalonamento envolve a aplicação de um fator de escala às informações residuais de modo que diferentes informações de frequência sejam quantizadas em diferentes granularidades, o que pode afetar a qualidade visual final do vídeo reconstruído. O componente de escalonamento e quantização de transformada 213 também é configurado para quantizar os coeficientes de transformada para reduzir adicionalmente a taxa de bits. O processo de quantização pode reduzir a profundidade de bits associada a alguns ou todos os coeficientes. O grau de quantização pode ser modificado ajustando um parâmetro de quantização. Em alguns exemplos, o componente de escalonamento e quantização de transformada 213 pode, em seguida, realizar uma varredura da matriz incluindo os coeficientes de transformada quantizados. Os coeficientes de transformada quantizados são encaminhados para a formatação de cabeçalho e o componente CABAC 231 para serem codificados no fluxo de bits.
[0077] O componente de escalonamento e transformada inversa 229 aplica uma operação reversa do componente de escalonamento e quantização de transformada 213 para suportar a estimação de movimento. O componente de escalonamento e transformada inversa 229 aplica o escalonamento inverso, transformação e/ou quantização para reconstruir o bloco residual no domínio de pixel, por exemplo, para uso posterior como um bloco de referência que pode se tornar um bloco preditivo para outro bloco atual. O componente de estimação de movimento 221 e/ou o componente de compensação de movimento 219 podem calcular um bloco de referência adicionando o bloco residual de volta a um bloco preditivo correspondente para o uso na estimação de movimento de um bloco/quadro posterior. Os filtros são aplicados aos blocos de referência reconstruídos para atenuar artefatos criados durante o escalonamento, quantização e transformada. Tais artefatos podem, de outro modo, causar a predição imprecisa (e criar artefatos adicionais) quando os blocos subsequentes são preditos.
[0078] O componente de análise de controle de filtro 227 e o componente de filtros in loop 225 aplicam-se aos filtros aos blocos residuais e/ou aos blocos de imagem reconstruídos. Por exemplo, o bloco residual transformado do componente de escalonamento e transformada inversa 229 pode ser combinado com um bloco de predição correspondente do componente de predição de imagem intra 217 e/ou componente de compensação de movimento 219 para reconstruir o bloco de imagem original. Os filtros podem, em seguida, ser aplicados ao bloco de imagem reconstruídos. Em alguns exemplos, os filtros podem, em vez disso, ser aplicados aos blocos residuais. Tal como acontece com outros componentes na FIG. 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. Os filtros aplicados aos blocos de referência reconstruídos são aplicados às 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 define os parâmetros correspondentes. Tais dados são encaminhados para a formatação de cabeçalho e o componente 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 adaptativo. Tais filtros podem ser aplicados no domínio espacial/de pixel (por exemplo, em um bloco de pixel reconstruído) ou no domínio de frequência, dependendo do exemplo.
[0079] Ao operar como um codificador, o bloco de imagem reconstruído filtrado, bloco residual e/ou bloco de predição são armazenados no componente de buffer de imagem decodificada 223 para uso posterior na estimação de movimento como debatido acima. Ao operar como um decodificador, o componente de buffer de imagem decodificada 223 armazena e encaminha para os blocos reconstruídos e filtrados em direção a uma tela como parte de um sinal de vídeo de saída. O componente de buffer de imagem decodificada 223 pode ser qualquer dispositivo de memória capaz de armazenar os blocos de predição, blocos residuais e/ou blocos de imagem reconstruídos.
[0080] A formatação de cabeçalho e o componente CABAC 231 recebem os dados a partir de vários componentes de sistema de codec 200 e codificam tai dados em um fluxo de bits codificado para transmissão em direção a um decodificador. Especificamente, a formatação de cabeçalho e o componente CABAC 231 geram vários cabeçalhos para codificar os dados de controle, tais como dados de controle gerais e dados de controle de filtro. Além disso, os dados de predição, incluindo predição intra e dados de movimento, bem como como dados residuais na forma de dados de coeficiente de transformada quantizado são todos codificados no fluxo de bits. O fluxo de bits final inclui todas as informações desejadas pelo decodificador para reconstruir o sinal de vídeo particionado original 201. Tais informações também podem incluir as tabelas de índice de modo de predição intra (também referidas como tabelas de mapeamento de palavras de 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 utilizando a codificação de entropia. Por exemplo, as informações podem ser codificadas utilizando codificação de comprimento variável adaptativa ao contexto (CAVLC), CABAC, codificação aritmética binária adaptativa ao contexto com base em sintaxe (SBAC), codificação de entropia de particionamento de intervalo de probabilidade (PIPE) ou outra técnica de codificação de entropia. Após a codificação de entropia, o fluxo de bits codificado pode ser transmitido para outro dispositivo (por exemplo, um decodificador de vídeo) ou arquivado para transmissão ou recuperação posterior.
[0081] A FIG. 3 é um diagrama de bloco que ilustra um codificador de vídeo de exemplo 300. O codificador de vídeo 300 pode ser utilizado para implementar as funções de codificação de sistema de codec 200 e/ou implementar as etapas 101, 103, 105, 107 e/ou 109 do método operacional 100. O codificador 300 particiona um sinal de vídeo de entrada, resultando em um sinal de vídeo particionado 301, que é substancialmente similar ao sinal de vídeo particionado 201. O sinal de vídeo particionado 301 é, em seguida, comprimido e codificado em um fluxo de bits pelos componentes do codificador 300.
[0082] Especificamente, o sinal de vídeo particionado 301 é encaminhado para um componente de predição de imagem intra 317 para predição intra. O componente de predição de imagem intra 317 pode ser substancialmente similar ao componente de estimação de imagem intra 215 e ao componente de predição de imagem intra 217. O sinal de vídeo particionado 301 também é encaminhado 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 estimação de movimento 221 e ao componente de compensação de movimento 219. Os blocos de predição e os blocos residuais do componente de predição de imagem intra 317 e do componente de compensação de movimento 321 são encaminhados para um componente de transformada e quantização 313 para a 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 (juntos com os 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 à formatação de cabeçalho e ao componente CABAC 231.
[0083] Os blocos residuais transformados e quantizados e/ou os blocos de predição correspondentes são também encaminhados do componente de transformada e quantização 313 para um componente de transformada e quantização inversa 329 para reconstrução em blocos de referência para o uso pelo componente de compensação de movimento 321. O componente de transformada e quantização inversa 329 pode ser substancialmente similar ao componente de escalonamento e transformada inversa 229. Os filtros loop em um componente de filtros in loop 325 também são aplicados aos blocos residuais e/ou blocos de referência reconstruídos, dependendo do exemplo. O componente de filtros in loop 325 pode ser substancialmente similar ao componente de análise de controle de filtro 227 e ao componente de filtros in loop 225. O componente de filtros in loop 325 pode incluir múltiplos filtros como debatido em relação ao componente de filtros in loop 225. Os blocos filtrados são, em seguida, armazenados em um componente de buffer de imagem decodificada 323 para o 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.
[0084] A FIG. 4 é um diagrama de bloco que ilustra um decodificador de vídeo de exemplo 400. O decodificador de vídeo 400 pode ser utilizado para implementar as funções de decodificação do sistema de codec 200 e/ou implementar as etapas 111, 113, 115 e/ou 117 do método operacional 100. O decodificador 400 recebe um fluxo de bits, por exemplo, de um codificador 300, e gera um sinal de vídeo de saída reconstruído com base no fluxo de bits para exibição para um usuário final.
[0085] O fluxo de bits é recebido por um componente de decodificação de entropia 433. O componente de decodificação de entropia 433 é configurado para implementar um esquema de decodificação de entropia, tal como codificação CAVLC, CABAC, SBAC, PIPE ou outras técnicas de codificação de entropia. Por exemplo, o componente de decodificação de entropia 433 pode utilizar informações de cabeçalho para fornecer um contexto para interpretar dados adicionais codificados como palavras de código no fluxo de bits. As informações decodificadas incluem quaisquer informações desejadas para decodificar o sinal de vídeo, tal 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 dos blocos residuais. Os coeficientes de transformada quantizados são encaminhados para um componente de transformada e quantização inversa 429 para reconstrução em blocos residuais. O componente de transformada e quantização inversa 429 pode ser similar ao componente de transformada e quantização inversa 329.
[0086] 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 estimação de imagem intra 215 e a um componente de predição de imagem intra 217. Especificamente, o componente de predição de imagem intra 417 emprega os modos de predição para localizar um bloco de referência no quadro e aplica um bloco residual ao resultado para reconstruir blocos de imagem preditos de modo intra. Os blocos de imagem preditos de modo intra reconstruídos e/ou os blocos residuais e dados de predição inter correspondentes são encaminhados para um componente de buffer de imagem decodificada 423 através de um componente de filtros in loop 425, que pode ser substancialmente similar ao componente de buffer de imagem decodificada 223 e ao componente de filtros in loop 225, respectivamente. O componente de filtros in loop 425 filtra os blocos de imagem reconstruídos, blocos residuais e/ou blocos de predição, 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 estimação de movimento 221 e/ou ao componente de compensação de movimento 219. Especificamente, o componente de compensação de movimento 421 emprega os vetores de movimento de um bloco de referência para gerar um bloco de predição e aplica um bloco residual ao resultado para reconstruir um bloco de imagem. Os blocos reconstruídos resultantes também podem ser encaminhados através do componente de filtros in loop 425 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, que podem ser reconstruídos em quadros através das informações de partição. Tais quadros também podem ser colocados em uma sequência. A sequência é emitida em direção a um display como um sinal de vídeo de saída reconstruído.
[0087] A FIG. 5 é um diagrama esquemático que ilustra um fluxo de bits de exemplo 500 contendo uma sequência de vídeo codificada. Por exemplo, o fluxo de bits 500 pode ser gerado por um sistema de codec 200 e/ou um codificador 300 para decodificação por um sistema de codec 200 e/ou um decodificador 400. Como outro exemplo, o fluxo de bits 500 pode ser gerado por um codificador na etapa 109 odo método 100 para o uso por um decodificador na etapa 111.
[0088] 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, cabeçalhos de grupo de tiles 514 e dados de imagem 520. Um SPS 510 contém dados de sequência comuns a todas as imagens na sequência de vídeo contida no fluxo de bits 500. Tais dados podem incluir o dimensionamento da imagem, profundidade de bits, parâmetros de ferramenta de codificação, restrições de taxa de bits, etc. O PPS 512 contém parâmetros que são específicos a uma ou mais imagens correspondentes. Consequentemente, cada imagem em uma sequência de vídeo pode se referir a um PPS 512. O PPS 512 pode indicar ferramentas de codificação disponíveis para tiles em imagens correspondentes, parâmetros de quantização, deslocamentos, parâmetros de ferramenta de codificação específicos de imagem (por exemplo, controles de filtro), etc. O cabeçalho de grupo de tiles 514 contém parâmetros que são específicos a cada grupo de tiles em uma imagem. Consequentemente, pode ser um cabeçalho de grupo de tiles 514 por grupo de tiles na sequência de vídeo. O cabeçalho de grupo de tiles 514 pode conter as informações de grupo de tiles, contagem de ordem de imagem (POCs), lista de imagens de referência, pesos de predição, pontos de entrada de tiles, parâmetros de desblocagem, etc. Deve ser observado que alguns sistemas se referem ao cabeçalho de grupo de tiles
514 como um cabeçalho de fatia e usam tais informações para suportar fatias em vez de grupos de tiles.
[0089] 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 armazenados, de acordo com o particionamento usado para particionar a imagem antes da codificação. Por exemplo, a imagem nos dados de imagem 520 é dividida em tiles 523. Os tiles 523 são divididos adicionalmente em unidades de árvore de codificação (CTUs). As CTUs são divididas adicionalmente em blocos de codificação com base em árvores de codificação. Os blocos de codificação podem, em seguida, ser codificados/decodificados, de acordo com os mecanismos de predição. Uma imagem/fotografia pode conter um ou mais tiles 523.
[0090] Um tile 523 é uma porção particionada de uma imagem criada por fronteiras horizontais e verticais. Os tiles 523 podem ser retangulares e/ou quadrados. Especificamente, um tile 523 inclui quatro lados que são conectados em ângulos retos. Os quatro lados incluem dois pares de lados paralelos. Além disso, os lados em um par de lados paralelos têm o mesmo comprimento. Como tal, um tile 523 pode ser qualquer forma retangular, onde um quadrado é um caso especial de um retângulo onde todos os quatro lados têm o mesmo comprimento. Uma imagem pode ser particionada em linhas e colunas de tiles
523. Uma linha de tile é um conjunto de tiles 523 posicionado de maneira horizontalmente adjacente para criar uma linha contínua da fronteira esquerdo para a fronteira direito de uma imagem (ou vice-versa). Uma coluna de tiles é um conjunto de tiles 523 posicionado de maneira verticalmente adjacente para criar uma linha contínua da fronteira superior para a fronteira inferior da imagem (ou vice-versa). Os tiles 523 podem ou não permitir a predição com base em outros tiles 523, dependendo do exemplo. Cada tile 523 pode ter um índice de tile exclusivo na imagem. Um índice de tile é um identificador numérico selecionado por procedimento que pode ser usado para distinguir um tile 523 de outro. Por exemplo, os índices de tile podem aumentar numericamente na ordem de varredura raster. A ordem de varredura raster é da esquerda para direita e de cima para baixo. Deve ser observado que, em alguns exemplos, os tiles 523 também podem ser atribuídos aos identificadores de tile (IDs). Um ID de tile é um identificador atribuído que pode ser usado para distinguir um tile 523 de outro. Os cálculos podem utilizar os IDs de tile em vez de índices de tile em alguns exemplos. Além disso, os IDs de tile podem ser atribuídos para ter os mesmos valores que os índices de tile em alguns exemplos. Os índices e/ou IDs de tile podem ser sinalizados para indicar grupos de tiles contendo os tiles 523. Por exemplo, os índices e/ou IDs de tile podem ser utilizados para mapear dados de imagem associados a um tile 523 para uma posição apropriada para exibição. Um grupo de tiles é um conjunto de tiles relacionado 523 que pode ser separadamente extraído e codificado, por exemplo, para suportar a exibição de uma região de interesse e/ou para suportar o processamento paralelo. Os tiles 523 em um grupo de tiles podem ser codificados sem referência aos tiles 523 fora do grupo de tiles. Cada tile 523 pode ser atribuído a um grupo de tiles correspondente e, portanto, uma imagem pode conter uma pluralidade de grupos de tiles.
[0091] As FIGs. 6A-6E ilustram um mecanismo de exemplo 600 para criar uma trilha de extração 610 para combinar subimagens de múltiplas resoluções de diferentes fluxos de bits em uma única imagem para o uso em aplicações de realidade virtual (VR). O mecanismo 600 pode ser utilizado para suportar um exemplo de caso de uso do método 100. Por exemplo, o mecanismo 600 pode ser utilizado para gerar um fluxo de bits 500 para transmissão de um sistema de codec 200 e/ou um codificador 300 em direção a um sistema de codec 200 e/ou um decodificador 400. Como um exemplo específico, o mecanismo 600 pode ser utilizado para o uso em conjunto com VR, OMAF, vídeo de trezentos e sessenta graus, etc.
[0092] Em VR, apenas uma porção do vídeo é exibida para um usuário. Por exemplo, o vídeo VR pode ser filmado para incluir uma esfera em torno de um usuário. O usuário pode utilizar uma tela montada na cabeça (HMD) para visualizar o vídeo VR. O usuário pode apontar o HMD em direção a uma região de interesse. A região de interesse é exibida para o usuário e outros dados de vídeo são descartados. Desta maneira, um usuário visualiza apenas uma porção do usuário selecionada do vídeo VR a qualquer momento. Este método imita as percepções do usuário e, consequentemente, faz com que o usuário experimente um ambiente virtual de maneira que imite um ambiente real. Um dos problemas com este método é que todo o vídeo VR pode ser transmitido para o usuário, mas apenas uma porta de visualização atual do vídeo é realmente usada e o restante é descartado. De modo a aumentar a eficiência da sinalização para aplicações de transmissão, a porta de visualização atual do usuário pode ser transmitida em uma primeira resolução mais alta e outras portas de visualização podem ser transmitidas em uma segunda resolução mais baixa. Desta maneira, as portas de visualização que provavelmente serão descartadas ocupam menos largura de banda do que as portas de visualização que provavelmente serão visualizadas pelo usuário. No caso de o usuário selecionar uma nova porta de visualização, o conteúdo de resolução inferior pode ser mostrado até que o decodificador possa solicitar que uma porta de visualização atual diferente seja transmitida na primeira resolução mais alta. O mecanismo 600 pode ser utilizado para criar uma trilha de extração 610, como mostrado na FIG. 6E, para suportar esta funcionalidade. Uma trilha de extração 610 é uma trilha de dados de imagem que encapsula uma imagem em múltiplas resoluções para o uso como descrito acima.
[0093] O mecanismo 600 codifica o mesmo conteúdo de vídeo em uma primeira resolução 611 e uma segunda resolução 612, como mostrado nas FIGs. 6A e 6B, respectivamente. Como um exemplo específico, a primeira resolução 611 pode ser amostras de luma 5120×2560 e a segunda resolução 612 pode ser amostras de luma 2560×1280. As imagens do vídeo podem ser particionadas em tiles 601 na primeira resolução 611 e tiles 603 na segunda resolução 612, respectivamente. No exemplo mostrado, os tiles 601 e 603 são, cada um, particionados em uma grade 4x2. Além disso, um MCTS pode ser codificado para cada tile 601 e posição 603. As imagens na primeira resolução 611 e na segunda resolução 612, cada uma, resultam em uma sequência MCTS que descreve o vídeo ao longo do tempo em uma resolução correspondente. Cada sequência MCTS codificada é armazenada como uma trilha de subimagem ou uma trilha de tile . O mecanismo 600 pode, em seguida, usar as imagens para criar segmentos para suportar a seleção de MCTS adaptativa à porta de visualização. Por exemplo, cada faixa de orientações de visualização que causa uma seleção diferente de MCTSs de alta e baixa resolução é considerada. No exemplo ilustrado, quatro tiles 601 contendo MCTSs na primeira resolução 611 e quatro tiles 603 contendo MCTSs na segunda resolução 613 são obtidos.
[0094] O mecanismo 600 pode, em seguida, criar uma trilha de extração 610 para cada seleção de MCTS adaptativa à porta de visualização possível. As FIGs. 6C e 6D ilustram uma seleção de MCTS adaptativa à porta de visualização de exemplo. Especificamente, um conjunto de tiles selecionados 605 e 607 é selecionado na primeira resolução 611 e na segunda resolução 612, respectivamente. Os tiles selecionados 605 e 607 são ilustrados em sombreado cinza. No exemplo mostrado, os tiles selecionados 605 são os tiles 601 na primeira resolução 611 que devem ser mostrados para o usuário e os tiles selecionados 607 são os tiles 603 na segunda resolução 612 que provavelmente serão descartados, mas mantidos para suportar a exibição no caso de o usuário selecionar uma nova porta de visualização. Os tiles selecionados 605 e 607 são, em seguida, combinados em uma única imagem contendo dados de imagem tanto na primeira resolução 611 quanto na segunda resolução 612. Tais imagens são combinadas para criar uma trilha de extração 610. A FIG. 6E ilustra uma única imagem de uma trilha de extração correspondente 610 para propósito de ilustração. Como mostrado, a imagem na trilha de extração 610 contém os tiles selecionados 605 e 607 da primeira resolução 611 e da segunda resolução 612. Como observado acima, as FIGs. 6C a 6E ilustram uma única seleção de MCTS adaptativa à porta de visualização. De modo a permitir a seleção do usuário de qualquer porta de visualização, uma trilha de extração 610 deve ser criada para cada combinação possível de tiles selecionados 605 e 607.
[0095] No exemplo mostrado, cada seleção de tiles 603 encapsulando o conteúdo do segundo fluxo de bits de resolução 612 contém duas fatias. Um RegionWisePackingBox pode ser incluído na trilha de extração 610 para criar um mapeamento entre a imagem empacotada e uma imagem projetada do formato ERP. No exemplo apresentado, os fluxos de bits resolvidos das trilhas de extração têm resolução 3200×2560. Consequentemente, um decodificador com capacidade para quatro mil amostras (4K) pode decodificar o conteúdo onde a porta de visualização é extraída de um fluxo de bits codificado com cinco mil amostras de resolução 5K (5120×2560).
[0096] Como mostrado, a trilha de extração 610 contém duas linhas de tiles de alta resolução 601 e quatro linhas de tiles de baixa resolução 603. Consequentemente, a trilha de extração 610 contém duas fatias de conteúdo de alta resolução e quatro fatias de conteúdo de baixa resolução. Tiling uniforme pode não suportar tal caso de uso. Tiling uniforme é definido por um conjunto de colunas de tile e um conjunto de linhas de tile. As colunas de tile estendem-se da parte superior de uma imagem para a parte inferior da imagem. Do mesmo modo, as linhas de tile estendem-se da esquerda da imagem para a direita da imagem. Enquanto tal estrutura pode ser simplesmente definida, esta estrutura não pode suportar eficazmente casos de uso avançados, tais como o caso de uso descrito pelo mecanismo 600. No exemplo mostrado, diferentes números de linhas são utilizados em diferentes seções da trilha de extração 610. Se tiling uniforme for utilizado, os tiles no lado direito da trilha de extração 610 devem ser reescritos para aceitar duas fatias cada. Este método é ineficiente e computacionalmente complexo.
[0097] A presente revelação inclui um esquema de tiling flexível, como descrito abaixo, que não exige que os tiles sejam reescritos para incluir diferentes números de fatias. O esquema de tiling flexível permite que um tile 601 contenha o conteúdo em uma primeira resolução 611. O esquema de tiling flexível também permite que um tile 601 seja particionado em menores tiles que podem ser mapeados diretamente para os tiles 603 em uma segunda resolução
612. Este mapeamento direto é mais eficiente, pelo fato de que o método não exige que os tiles sejam reescritos/corrigidos quando diferentes resoluções são combinadas como descrito acima.
[0098] A FIG. 7 ilustra uma aplicação de videoconferência de exemplo 700 que une imagens de múltiplas resoluções de diferentes fluxos de bits em uma única imagem para exibição. A aplicação 700 pode ser utilizada para suportar um exemplo de caso de uso de método 100. Por exemplo, a aplicação 700 pode ser utilizada em um sistema de codec 200 e/ou um decodificador 400 para exibir o conteúdo de vídeo do fluxo de bits 500 de um sistema de codec 200 e/ou um codificador 300. A aplicação da videoconferência 700 exibe uma sequência de vídeo para um usuário. A sequência de vídeo contém imagens exibindo um participante falante 701 e outros participantes 703. O participante falante 701 é exibido em uma primeira resolução mais alta e os outros participantes 703 são exibidos em uma segunda resolução mais baixa. De modo a codificar tal imagem, a imagem deve conter uma porção com uma única linha e uma porção com três linhas. Para suportar tal cenário com tiling uniforme, a imagem é particionada em um tile à esquerda e à direito. O tile certo é, em seguida, reescrito/corrigido para incluir três linhas. Tal correção resulta em tanto em uma compressão quanto em uma penalidade de desempenho. O esquema de tiling flexível descrito abaixo permite que um único tile seja particionado em tiles menores e mapeado para os tiles em fluxos de bits de subimagem associados aos outros participantes 703. Desta maneira, o participante falante 701 pode ser diretamente mapeado em um tile de primeiro nível e os outros participantes 703 podem ser mapeados para os tiles de segundo nível divididos do primeiro tile sem tal reescrita/correção.
[0099] As FIGs. 8A a 8B são diagramas esquemáticos que ilustram um esquema de tiling de vídeo flexível de exemplo 800 capaz de suportar múltiplos tiles com diferentes resoluções na mesma imagem. O esquema de tiling de vídeo flexível 800 pode ser utilizado para suportar um mecanismo de codificação 600 e aplicação 700 mais eficazes. Consequentemente, o esquema de tiling de vídeo flexível 800 pode ser utilizado como parte do método 100. Além disso, o esquema de tiling de vídeo flexível 800 pode ser utilizado por um sistema de codec 200, um codificador 300 e/ou um decodificador 400. Os resultados do esquema de tiling de vídeo flexível 800 podem ser armazenados em um fluxo de bits 500 para transmissão entre o codificador e o decodificador.
[0100] Como mostrado na FIG. 8A, a imagem (por exemplo, quadro, fotografia, etc.) pode ser particionada em tiles de primeiro nível 801, também conhecido como tiles de nível um. Como mostrado na FIG. 8B, os tiles de primeiro nível 801 podem ser seletivamente particionados para criar tiles de segundo nível 803, também conhecidos como tiles de nível dois. Os tiles de primeiro nível 801 e os tiles de segundo nível 803 podem, em seguida, ser utilizados para criar uma imagem com subimagens codificadas em múltiplas resoluções. Um tile de primeiro nível 801 é um tile gerado particionando completamente uma imagem em um conjunto de colunas e um conjunto de linhas. Um tile de segundo nível 803 é um tile gerado particionando um tile de primeiro nível 801.
[0101] Como descrito acima, em vários cenários, um vídeo pode ser codificado em uma pluralidade de resoluções, por exemplo, em VR e/ou teleconferência. O vídeo também pode ser codificado utilizando fatias em cada resolução. As fatias de resolução mais baixa são menores que as fatias de resolução mais alta. De modo a criar uma imagem com múltiplas resoluções, a imagem pode ser particionada em tiles de primeiro nível 801. As fatias da resolução mais alta podem ser incluídas diretamente nos tiles de primeiro nível
801. Além disso, os tiles de primeiro nível 801 podem ser particionados em tiles de segundo nível 803 que são menores que os tiles de primeiro nível 801. Consequentemente, os menores tiles de segundo nível 803 pode diretamente aceitar as fatias de resolução mais baixa. Desta maneira, as fatias de cada resolução podem ser comprimidas em uma única imagem, por exemplo, através de uma relação de índice de tile, sem exigir que os tiles de resolução diferentes sejam corrigidos dinamicamente para usar um esquema de endereçamento compatível. Os tiles de primeiro nível 801 e os tiles de segundo nível 803 podem ser implementados como MCTSs e, consequentemente, podem aceitar os dados de imagem com restrição de movimento em diferentes resoluções.
[0102] A presente revelação inclui muitos aspectos. Como um exemplo particular, os tiles de primeiro nível 801 são divididos em tiles de segundo nível 803. Os tiles de segundo nível 803 podem, em seguida, ser restritos a cada um conter uma única fatia retangular de dados de imagem (por exemplo, na resolução menor). Uma fatia retangular é uma fatia restrita para manter uma forma retangular e é, consequentemente, codificada com base em fronteiras de imagem horizontais e verticais. Consequentemente, uma fatia retangular não é codificada com base em um grupo de varredura raster (que contém CTUs em uma linha da esquerda para direita e de cima para baixo e pode não manter uma forma retangular). Uma fatia é uma região espacialmente discreta de uma imagem/quadro que é codificada separadamente de qualquer outra região no mesmo quadro/imagem. Em outro exemplo, o tile de primeiro nível 801 pode ser dividido em dois ou mais tiles de segundo nível completos
803. Em tal caso, um tile de primeiro nível 801 pode não conter um tile de segundo nível parcial 803. Em outro exemplo, uma configuração dos tiles de primeiro nível 801 e dos tiles de segundo nível 803 pode ser sinalizada em um conjunto de parâmetros em um fluxo de bits, tal como um PPS associado a uma imagem particionada para criar os tiles. Em um exemplo, uma indicação de divisão, tal como um sinalizador, pode ser codificada em um conjunto de parâmetros para cada tile de primeiro nível 801. A indicação denota que os tiles de primeiro nível 801 são divididos adicionalmente em tiles de segundo nível
803. Em outro exemplo, a configuração de tiles de segundo nível 803 pode ser sinalizada como um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível.
[0103] Em outro exemplo, os tiles de primeiro nível 801 e os tiles de segundo nível 803 podem ser atribuídos em grupos de tiles. Tais grupos de tiles podem ser restritos de modo que todos os tiles em um grupo de tiles correspondente sejam restritos para cobrir uma região retangular da imagem (por exemplo, ao contrário da varredura raster). Por exemplo, alguns sistemas podem adicionar tiles a um grupo de tiles na ordem de varredura raster. Isto inclui adicionar um tile inicial em uma linha atual, prosseguir para adicionar cada tile na linha até que a fronteira de imagem esquerdo da linha atual seja alcançado, prosseguir para a fronteira direito da próxima linha, e adicionar cada tile na próxima linha, etc., até que um tile final seja alcançado. Este método pode resultar em formas não retangulares que estendem-se pela imagem. Tais formas podem não ser úteis para a criação de imagens com múltiplas resoluções, como descrito neste relatório. Em vez disso, o presente exemplo pode restringir grupos de tiles, tal que qualquer tile de primeiro nível 801 e/ou tile de segundo nível 803 pode ser adicionado ao grupo de tiles (por exemplo, em qualquer ordem), mas o grupo de tiles resultante deve ser um retângulo ou quadrado (por exemplo, inclua quatro lados conectados em ângulos retos). Esta restrição pode garantir que os tiles de segundo nível 803 particionados de um único tile de primeiro nível 801 não sejam colocados em diferentes grupos de tiles.
[0104] Em outro exemplo, os dados que indicam explicitamente um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível podem ser omitidos de um fluxo de bits quando uma largura de tile de primeiro nível for menor que duas vezes um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que duas vezes um limiar de altura mínimo. Isto ocorre pelo fato de que um tile de primeiro nível 801 que atende a tais condições não pode ser dividido em mais de uma coluna ou uma linha, respectivamente e, consequentemente, tais informações podem ser inferidas pelo decodificador. Em outro exemplo, as indicações de divisão indicando quais tiles de primeiro nível 801 são particionados em tiles de segundo nível 803 podem ser omitidas do fluxo de bits para certos tiles de primeiro nível 801. Por exemplo, tais dados podem ser omitidos quando o tile de primeiro nível 801 tem uma largura de tile de primeiro nível que é menor que um limiar de largura mínimo e uma altura de tile de primeiro nível é menor que um limiar de altura mínimo. Isto ocorre pelo fato de que um tile de primeiro nível 801 que atende tais condições é muito pequeno para ser dividido em tiles de segundo nível 803 e, consequentemente, tais informações podem ser inferidas pelo decodificador.
[0105] Como descrito acima, um esquema de tiling de vídeo flexível 800 suporta as subimagens de mesclagem de diferentes fluxos de bits em uma imagem contendo múltiplas resoluções. O seguinte descreve várias modalidades que suportam tais funcionalidades. Em geral, esta revelação descreve métodos para a sinalização e codificação de tiles na codificação de vídeo que particiona imagens de uma maneira que é mais flexível do que o esquema de tiling em HEVC. Mais especificamente, esta revelação descreve alguns esquemas de tiling em que colunas de tile não podem se estender uniformemente de cima para baixo de uma imagem codificada e, do mesmo modo, as linhas de tile não podem se estender da esquerda para a direita de uma imagem codificada.
[0106] Por exemplo, com base em um método de tiling HEVC, alguns tiles devem ser divididos adicionalmente em múltiplas linhas de tile para suportar a funcionalidade descrita nas FIGs. 6A a 6E e 7. Além disso, dependendo de como os tiles são posicionados, um tile deve ser dividido adicionalmente em colunas de tile. Por exemplo, na FIG. 7, os participantes de dois a quatro podem ser posicionados abaixo do participante um em alguns casos, o que pode ser suportado dividindo-se um tile em colunas. Para satisfazer estes cenários, um tile de primeiro nível pode ser dividido em linhas de tile e colunas de tile de tiles de segundo nível como descrito abaixo.
[0107] Por exemplo, a estrutura do tile pode ser relaxada como a seguir. Os tiles na mesma imagem não precisam ter um número de linhas de tile particular. Além disso, os tiles na mesma imagem não precisam ter um número de colunas de tile particular. Para a sinalização de tiles flexíveis, as seguintes etapas podem ser usadas. Uma estrutura do tile de primeiro nível pode ser definida por colunas de tile e linhas de tile como definido em HEVC. As colunas de tile e linhas de tile podem ser uniformes ou não uniformes em tamanho. Cada um destes tiles pode ser referido como um tile de primeiro nível. Um sinalizador pode ser sinalizado para especificar se cada tile de primeiro nível é ou não dividido adicionalmente em uma ou mais colunas de tile e em uma ou mais linhas de tile. Se um tile de primeiro nível for dividido adicionalmente, as colunas de tile e linhas de tile podem ser uniformes ou não uniformes em tamanho. Novos tiles resultantes da divisão de tiles de primeiro nível são referidos como tiles de segundo nível. A estrutura do tile flexível pode ser limitada apenas aos tiles de segundo nível e, consequentemente, nenhuma divisão adicional de qualquer tile de segundo nível é permitida em alguns exemplos. Em outros exemplos, a divisão adicional de tiles de segundo nível pode ser aplicada para criar tiles de nível subsequentes de maneira similar à criação de tiles de segundo nível a partir dos tiles de primeiro nível.
[0108] Para simplificar, quando um tile de primeiro nível é dividido em dois ou mais tiles de segundo nível, a divisão pode sempre usar colunas de tile de tamanho uniforme e linhas de tile uniformes. A derivação das localizações, tamanhos, índices e ordem de varredura de tiles flexíveis definida por este método, é descrita abaixo. Para simplificar, quando tal estrutura de tile flexível é usada, um grupo de tiles pode ser restrito para incluir um ou mais tiles de primeiro nível completos. Neste exemplo, quando um grupo de tiles contém um tile de segundo nível, todos os tiles de segundo nível originados da divisão do mesmo tile de primeiro nível devem estar contidos no grupo de tiles. Pode ser restrito adicionalmente que, quando tal estrutura de tile flexível é usada, um grupo de tiles contém um ou mais tiles e, juntos, todos os tiles pertencem a um grupo de tiles que cobre uma região retangular de uma imagem. Em outro aspecto, quando tal estrutura de tile flexível é usada, um grupo de tiles contém um ou mais tiles de primeiro nível e, juntos, todos os tiles pertencem a um grupo de tiles que cobre uma região retangular de uma imagem.
[0109] Em um exemplo, a sinalização de tiles flexíveis pode ser como a seguir. Uma largura de tile mínima e altura de tile mínima são valores definidos. Uma estrutura do tile de primeiro nível pode ser definida por colunas de tile e linhas de tile. As colunas de tile e linhas de tile podem ser uniformes ou não uniformes em tamanho. Cada um destes tiles pode ser referido como um tile de primeiro nível. Um sinalizador pode ser sinalizado para especificar se qualquer um dos tiles de primeiro nível pode ser dividido adicionalmente. Este sinalizador pode não estar presente quando a largura de cada tile de primeiro nível não é maior que duas vezes a largura de tile mínima, e a altura de cada tile de primeiro nível não é maior que duas vezes a altura de tile mínima. Quando não está presente, o valor do sinalizador é inferido como igual a zero.
[0110] Em um exemplo, o seguinte se aplica a cada tile de primeiro nível. Um sinalizador pode ser sinalizado para especificar se um tile de primeiro nível é ou não dividido adicionalmente em uma ou mais colunas de tile e em uma ou mais linhas de tile. A presença do sinalizador pode ser restrita como a seguir. Se a largura de tile de primeiro nível for maior que a largura de tile mínima ou se a altura de tile de primeiro nível for maior que a altura de tile mínima, o sinalizador está presente/sinalizado. De outro modo, o sinalizador não está presente e o valor do sinalizador é inferido como igual a zero, indicando que o tile de primeiro nível não é dividido adicionalmente.
[0111] Se um tile de primeiro nível for dividido adicionalmente, o número de colunas de tile e o número de linhas de tile para esta divisão podem ser sinalizados adicionalmente. As colunas de tile e linhas de tile podem ser uniformes ou não uniformes em tamanho. Os tiles resultantes da divisão de tiles de primeiro nível são referidos como tiles de segundo nível. A presença do número de colunas de tile e do número de linhas de tile pode ser restrita como a seguir. Quando a largura de tile de primeiro nível for menor que duas vezes a largura de tile mínima, o número de colunas de tile pode não ser sinalizado e o valor do número de colunas de tile pode ser inferido como igual a um. A sinalização pode utilizar um elemento de sintaxe _minus1 de modo que o valor de elemento de sintaxe sinalizado possa ser zero e o número de colunas de tile é o valor do elemento de sintaxe mais um. Este método pode comprimir adicionalmente os dados de sinalização. Quando a altura de tile de primeiro nível for menor que duas vezes a altura de tile mínima, o número de linhas de tile pode não ser sinalizado e o valor do número de linhas de tile pode ser inferido como igual a zero. O valor de elemento de sintaxe sinalizado pode ser zero e o número de linhas de tile pode ser o valor do elemento de sintaxe mais um para comprimir adicionalmente os dados de sinalização. Os tiles resultantes da divisão de tiles de primeiro nível podem ser referidos como tiles de segundo nível. A estrutura de tile flexível pode ser limitada apenas aos tiles de segundo nível, de modo que nenhuma divisão adicional de qualquer tile de segundo nível seja permitida. Em outros exemplos, a divisão adicional de tiles de segundo nível pode ser aplicada de maneira similar à divisão de um tile de primeiro nível em tiles de segundo nível.
[0112] Em um exemplo, a sinalização de uma estrutura de tile flexível pode ser como a seguir. Quando uma imagem contém mais de um tile, um sinal,
tal como um sinalizador, pode ser utilizado em um conjunto de parâmetros que é direta ou indiretamente referido por um grupo de tiles correspondente. O sinalizador pode especificar se uma estrutura de tile correspondente é uma estrutura de tile uniforme ou estrutura de tile não uniforme (por exemplo, uma estrutura de tile flexível como descrito neste relatório). O sinalizador pode ser chamado de uniform_tile_structure_flag. Quando uniform_tile_structure_flag é igual a um, a sinalização de uma estrutura de tile uniforme de estilo HEVC é utilizada, por exemplo, sinalizando num_tile_columns_minus1 e num_tile_rows_minus1 para indicar um único nível de tiles uniformes. Quando uniform_tile_structure_flag é igual a zero, as seguintes informações também podem ser sinalizadas. O número de tiles em uma imagem pode ser sinalizado pelo elemento de sintaxe num_tiles_minus2, que indica que o número de tiles na imagem (NumTilesInPic) é igual a num_tiles_minus2 + 2. Isto pode resultar em economia de bits durante a sinalização, visto que uma imagem pode ser considerada para ser um tile por padrão. Para cada tile, excluindo o último, são sinalizados os endereços do primeiro bloco de codificação (por exemplo, CTU) e do último bloco de codificação do tile. O endereço de um bloco de codificação pode ser o índice do bloco em uma imagem (por exemplo, índice de CTU na imagem). Os elementos de sintaxe para tais blocos de codificação podem ser tile_first_block_address[i] e tile_last_block_address[i]. Estes elementos de sintaxe podem ser codificados como ue(v) ou u(v). Quando os elementos de sintaxe são codificados como u(v), o número de bits usado para representar cada um dos elementos de sintaxe é ceil(log2(número máximo do bloco de codificação em uma imagem)). Os endereços do primeiro e do último bloco de codificação do último tile podem não ser sinalizados e, em vez disso, podem ser derivados com base no tamanho da imagem em amostras de luma e na agregação de todos os outros tiles na imagem.
[0113] Em um exemplo, para cada tile, excluindo o último, em vez de sinalizar os endereços do primeiro e do último bloco de codificação do tile, o endereço do primeiro bloco de codificação do tile, e a largura e a altura do tile podem ser sinalizadas. Em outro exemplo, para cada tile, excluindo o último, em vez de sinalizar os endereços do primeiro e do último bloco de codificação do tile, o deslocamento do ponto superior esquerdo do tile em relação ao original da imagem (por exemplo, a parte superior esquerda da imagem) e a largura e a altura do tile podem ser sinalizadas. Ainda em um outro exemplo, para cada tile, excluindo o último, em vez de sinalizar os endereços do primeiro e do último bloco de codificação do tile, as seguintes informações podem ser sinalizadas. A largura e a altura do tile podem ser sinalizadas. Além disso, a localização de cada tile pode não ser sinalizada. Em vez disso, um sinalizador pode ser sinalizado para especificar se deve posicionar o tile imediatamente à direita ou imediatamente abaixo do tile anterior. Este sinalizador pode não estar presente se o tile só puder estar à direita ou só puder estar abaixo do tile anterior. O deslocamento superior esquerdo do primeiro tile pode sempre ser definido como a origem/parte superior esquerda da imagem (por exemplo, x = zero e y = zero).
[0114] Para a eficácia da sinalização, um conjunto de tamanhos de tile exclusivos (por exemplo, largura e altura) pode ser sinalizado. Esta lista de tamanhos de tile exclusivos pode ser referida pelo índice do loop que inclui sinalização de cada tamanho de tile. Em alguns exemplos, as localizações e tamanhos do tile como derivados da estrutura de tile sinalizada devem restringir a partição para garantir que não haja lacuna e nenhuma sobreposição ocorra entre quaisquer tiles.
[0115] As seguintes restrições também podem ser aplicadas. Pode ser necessário que as formas dos tiles sejam retangulares (por exemplo, não formas de varredura raster). A unidade dos tiles em uma imagem deve cobrir a imagem sem qualquer lacuna e qualquer sobreposição entre os tiles. Quando a decodificação é feita apenas com um núcleo, para a decodificação de um bloco de codificação atual (por exemplo, CTU) que não está na borda esquerda de uma imagem, o bloco de codificação vizinho esquerdo deve ser decodificado antes do bloco de codificação atual. Quando a decodificação é feita apenas com um núcleo, para a decodificação de um bloco de codificação atual (por exemplo, CTU) que não está na borda superior de uma imagem, um bloco de codificação vizinho superior deve ser decodificado antes do bloco de codificação atual. Quando dois tiles têm índices de tile que estão próximos um do outro (por exemplo, idx três e idx quatro) uma das opções a seguir é verdadeira. Os dois tiles compartilham a borda vertical e/ou quando o primeiro tile tem a localização superior esquerda em (Xa, Ya) com tamanho (Wa e Ha representando sua largura e altura) e quando o segundo tile tem a localização superior esquerda em (Xb, Yb) então Yb = Ya + Ha.
[0116] As seguintes restrições também podem ser aplicadas. Quando um tile tem mais de um tile vizinho esquerdo, a altura do tile deve ser igual à soma das alturas de todos os seus tiles vizinhos esquerdos. Quando um tile tem mais de tile vizinho direito, a altura do tile deve ser igual à soma das alturas de todos os seus tiles vizinhos esquerdos. Quando um tile tem mais de um tile vizinho superior, a largura do tile deve ser igual à soma das larguras de todos os seus tiles vizinhos superiores. Quando um tile tem mais de um tile vizinhos inferior, a largura do tile deve ser igual à soma das larguras de todos os seus tiles vizinhos inferiores.
[0117] O seguinte é uma modalidade de exemplo específico dos aspectos mencionados acima. O processo de varredura de tile e raster CTB pode ser como a seguir. A lista ColWidth[i] para i varia de 0 a num_level1_tile_columns_minus1, inclusive, especificando a largura da iésima coluna de tile de primeiro nível em unidades de CTBs, pode ser derivada como a seguir. if(uniform_level1_tile_spacing_flag) for(i = 0; i <= num_level1_tile_columns_minus1; i++) ColWidth[i] = ((i + 1) * PicWidthInCtbsY)/(num_level1_tile_columns_minus1 + 1) − (i * PicWidthInCtbsY)/(num_level1_tile_columns_minus1 + 1) else { ColWidth[num_level1_tile_columns_minus1] = PicWidthInCtbsY (6 - 1) for(i = 0; i < num_level1_tile_columns_minus1; i++) { ColWidth[i] = tile_level1_coluna_largura_minus1[i] + 1 ColWidth[num_tile_level1_columns_minus1] −= ColWidth[i] } }
[0118] A lista RowHeight[j] para j varia de 0 a num_level1_tile_rows_minus1, inclusive, especificando a altura da jésima linha de tile nas unidades de CTBs, pode ser derivada como a seguir: if(uniform_level1_tile_spacing_flag) for(j = 0; j <= num_level1_tile_rows_minus1; j++) RowHeight[j] = ((j + 1) * PicHeightInCtbsY)/(num_level1_tile_rows_minus1 + 1) − (j * PicHeightInCtbsY)/(num_level1_tile_rows_minus1 + 1)
else { RowHeight[num_level1_tile_rows_minus1] = PicHeightInCtbsY (6 - 2) for(j = 0; j < num_level1_tile_rows_minus1; j++) { RowHeight[j] = tile_level1_row_altura_minus1[j] + 1 RowHeight[num_level1_tile_rows_minus1] −= RowHeight[j] } }
[0119] A lista colBd[i] para i varia de 0 a num_level1_tile_columns_minus1 + 1, inclusive, especificando a localização do iésima fronteira da coluna de tile em unidades de CTBs, pode ser derivada como a seguir: for(colBd[0] = 0, i = 0; i <= num_level1_tile_columns_minus1; i++) colBd[i + 1] = colBd[i] + ColWidth[i] (6-3)
[0120] A lista rowBd[j] para j varia de 0 a num_level1_tile_rows_minus1 + 1, inclusive, especificando a localização do jésima fronteira de linha de tile em unidades de CTBs, pode ser derivada como a seguir: for(rowBd[0] = 0, j = 0; j <= num_level1_tile_rows_minus1; j++) rowBd[j + 1] = rowBd[j] + RowHeight[j] (6-4)
[0121] A variável NumTilesInPic, especificando o número de tiles em uma imagem se referindo ao PPS, e a lista TileColBd[i], TileRowBd[i], TileWidth[i] e TileHeight[i] para i varia de 0 a NumTilesInPic − 1, inclusive, especificando a localização do iésima fronteira de coluna de telha em unidades de CTBs, a localização do iésima fronteira de linha de tile em unidades de CTBs, a largura da iésima coluna de tile em unidades de CTBs, e a altura da iésima coluna de tile em unidades de CTBs, pode ser derivada como a seguir: for(tileIdx = 0, i = 0; i < NumLevel1Tiles; i++) { tileX = i % (num_level1_tile_columns_minus1 + 1) tileY = i/(num_level1_tile_columns_minus1 + 1) if(!level2_tile_split_flag[i]) { (6-5) TileColBd[tileIdx] = colBd[tileX] TileRowBd[tileIdx] = rowBd[tileY] TileWidth[tileIdx] = ColWidth[tileX] TileHeight[tileIdx] = RowHeight[tileY]
tileIdx++ } else { for(k = 0; k <= num_level2_tile_columns_minus1[i]; k++) colWidth2[k] = ((k + 1) * ColWidth[tileX])/(num_level2_tile_columns_minus1[i] + 1) − (k * ColWidth[tileX])/(num_level2_tile_columns_minus1[i] + 1) for(k = 0; k <= num_level2_tile_rows_minus1[i]; k++) rowHeight2[k] = ((k + 1) * RowHeight[tileY])/(num_level2_tile_rows_minus1[i] + 1) − (k * RowHeight[tileY])/(num_level2_tile_rows_minus1[i] + 1) for(colBd2[0] = 0, k = 0; k <= num_level2_tile_columns_minus1[i]; k++) colBd2[k + 1] = colBd2[k] + colWidth2[k] for(rowBd2[0] = 0, k = 0; k <= num_level2_tile_rows_minus1[i]; k++) rowBd2[k + 1] = rowBd2[k] + rowHeight2[k] numSplitTiles = (num_level2_tile_columns_minus1[i] + 1) * (num_level2_tile_rows_minus1[i] + 1) for(k = 0; k < numSplitTiles; k++) { tileX2 = k % (num_level2_tile_columns_minus1[i] + 1) tileY2 = k/(num_level2_tile_columns_minus1[i] + 1) TileColBd[tileIdx] = colBd[tileX] + colBd2[tileX2] TileRowBd[tileIdx] = rowBd[tileY] + rowBd2[tileY2] TileWidth[tileIdx] = colWidth2[tileX2] TileHeight[tileIdx] = rowHeight2[tileY2] tileIdx++ } } } NumTilesInPic = tileIdx
[0122] A lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs varia de 0 a PicSizeInCtbsY − 1, inclusive, especificando a conversão de um endereço de CTB em varredura raster de CTB de uma imagem para um endereço de CTB em varredura de tile, pode ser derivada como a seguir: for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) { tbX = ctbAddrRs % PicWidthInCtbsY tbY = ctbAddrRs/PicWidthInCtbsYtileFound = FALSE for(tileIdx = NumTilesInPic − 1, i = 0; i < NumTilesInPic − 1 && !tileFound; i++) { (6 - 6) tileFound = tbX < (TileColBd[i] + TileWidth[i]) && tbY < (TileRowBd[i] + TileHeight[i]) if (tileFound) tileIdx = i } CtbAddrRsToTs[ctbAddrRs] = 0 for(i = 0; i < tileIdx; i++) CtbAddrRsToTs[ctbAddrRs] += TileHeight[i] * TileWidth[i] CtbAddrRsToTs[ctbAddrRs] += (tbY − TileRowBd[tileIdx]) * TileWidth[tileIdx] + tbX − TileColBd[tileIdx] }
[0123] A lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs varia de zero a PicSizeInCtbsY − 1, inclusive, especificando a conversão de um endereço de CTB em varredura de tile para um endereço de CTB em varredura raster de CTB de uma imagem, pode ser derivada como a seguir. for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) (6 - 7) CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]] = ctbAddrRs
[0124] A lista TileId[ctbAddrTs] para ctbAddrTs varia de zero a PicSizeInCtbsY − 1, inclusive, especificando a conversão de um endereço de CTB em varredura de tile para um ID de tile, pode ser derivada como a seguir. for(i = 0, tileIdx = 0; i <= NumTilesInPic; i++, tileIdx++) for(y = TileRowBd[i]; y < TileRowBd[i + 1]; y++) (6 - 8) for(x = TileColBd[i]; x < TileColBd[i + 1]; x++) TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx
[0125] A lista NumCtusInTile[tileIdx] para tileIdx varia de zero a NumTilesInPic− 1, inclusive, especificando a conversão de um índice de tile para o número de CTUs no tile, pode ser derivada como a seguir. for(i = 0,tileIdx = 0; i < NumTilesInPic; i++, tileIdx++) (6 - 9) NumCtusInTile[tileIdx] = TileColWidth[tileIdx] * TileRowHeight[tileIdx]
[0126] Um exemplo de sintaxe RBSP de conjunto de parâmetros de imagem é como a seguir. pic_parameter_set_rbsp() { Descritor pps_pic_parameter_set_id ue(v) pps_seq_parameter_set_id ue(v) transform_skip_enabled_flag u(1) single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { num_level1_tile_columns_minus1 ue(v) num_level1_tile_rows_minus1 ue(v) uniform_level1_tile_spacing_flag u(1) if(!uniform_level1_tile_spacing_flag) { for(i = 0; i < num_level1_tile_columns_minus1; i++) level1_tile_column_width_minus1[i] ue(v) for(i = 0; i < num_level1_tile_rows_minus1; i++) level1_tile_row_height_minus1[i] ue(v) } level2_tile_present_flag u(1) for(i = 0; level2_tile_present_flag && i < NumLevel1Tiles; i++) { level2_tile_split_flag[i] u(1) if(level2_tile_split_flag) { num_level2_tile_columns_minus1[i] ue(v) num_level2_tile_rows_minus1[i] ue(v) } } if(NumTilesInPic > 1) loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0127] As semânticas RBSP de conjunto de parâmetros de imagem de exemplo são como a seguir. O num_level1_tile_columns_minus1 mais 1 especifica o número de colunas de tile de nível 1 que particionam a imagem. O num_level1_tile_columns_minus1 deve estar na faixa de zero a PicWidthInCtbsY
− 1, inclusive. Quando não está presente, o valor de num_level1_tile_columns_minus1 é inferido como igual a zero. O num_level1_tile_rows_minus1 mais 1 especifica o número de linhas de tile de nível um que particionam a imagem. num_level1_tile_rows_minus1 deve estar na faixa de zero a PicHeightInCtbsY − 1, inclusive. Quando não está presente, o valor de num_level1_tile_rows_minus1 é inferido como igual a zero. A variável NumLevel1Tiles é definida como igual a (num_level1_tile_columns_minus1 + 1) * (num_level1_tile_rows_minus1 + 1). Quando single_tile_in_pic_flag é igual a zero, NumTilesInPic deve ser maior que um. O uniform_level1_tile_spacing_flag é definido como igual a um para especificar que os fronteiras de coluna de tile de nível 1 e do mesmo modo, que os fronteiras de linha de tile de nível 1 são distribuídos uniformemente na imagem. O uniform_level1_tile_spacing_flag é igual a zero para especificar que os fronteiras de coluna de tile de nível um e, do mesmo modo, os fronteiras de linha de tile de nível um não são distribuídos uniformemente na imagem, mas sinalizados explicitamente usando os elementos de sintaxe level1_tile_column_width_minus1[i] e level1_tile_row_height_minus1[i]. Quando não está presente, o valor de uniform_level1_tile_spacing_flag é inferido como igual a um. O level1_tile_column_width_minus1[i] mais 1 especifica a largura da iésima coluna de tile de nível um em unidades de CTBs. O level1_tile_row_height_minus1[i] mais 1 especifica a altura da iésima linha de tile de nível um em unidades de CTBs. O level2_tile_present_flag especifica que um ou mais tiles de nível um são divididos em mais tiles. O level2_tile_split_flag[i] mais 1 especifica que o iésimo tile de nível um é dividido em dois ou mais tiles. O num_level2_tile_columns_minus1[i] mais 1 especifica o número de colunas de tile que particionam o iésimo tile. O num_level2_tile_columns_minus1[i] deve estar na faixa de zero a ColWidth[i], inclusive. Quando não está presente, o valor de num_level2_tile_columns_minus1[i] é inferido como igual a zero. O num_level2_tile_rows_minus1[i] mais 1 especifica o número de linhas de tile que particionam o iésimo tile. O num_level2_tile_rows_minus1[i] deve estar na faixa de zero a RowHeight[i], inclusive. Quando não está presente, o valor de num_level2_tile_rows_minus1[i] é inferido como igual a zero.
[0128] As seguintes variáveis são derivadas invocando o processo de conversão de varredura de tile e raster de CTB: a lista ColWidth[i] para i varia de
0 a num_level1_tile_columns_minus1, inclusive, especificando a largura da iésima coluna de tile de nível 1 em unidades de CTBs; a lista RowHeight[j] para j varia de 0 a num_level1_tile_rows_minus1, inclusive, especificando a altura da jésima linha de tile de nível 1 em unidades de CTBs; a variável NumTilesInPic, especificando o número de tiles em uma imagem refere-se ao PPS; a lista TileWidth[i] para i varia de 0 a NumTilesInPic, inclusive, especificando a largura do iésimo tile em unidades de CTBs; a lista TileHeight[i] para i varia de 0 a NumTilesInPic, inclusive, especificando a altura do iésimo tile em unidades de CTBs; a lista TileColBd[i] para i varia de 0 a NumTilesInPic, inclusive, especificando a localização do iésima fronteira de coluna de tile em unidades de CTBs; a lista TileRowBd[i] para j varia de 0 a NumTilesInPic, inclusive, especificando a localização do iésima fronteira de linha de tile em unidades de CTBs; a lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs varia de 0 a PicSizeInCtbsY − 1, inclusive, especificando a conversão de um endereço de CTB na varredura raster de CTB de uma imagem para um endereço de CTB na varredura de tile; a lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs varia de 0 a PicSizeInCtbsY − 1, inclusive, especificando a conversão de um endereço de CTB na varredura de tile para um endereço de CTB na varredura raster de CTB de uma imagem; a lista TileId[ctbAddrTs] para ctbAddrTs varia de 0 a PicSizeInCtbsY − 1, inclusive, especificando a conversão de um endereço de CTB em varredura de tile para um ID de tile; a lista NumCtusInTile[tileIdx] para tileIdx varia de 0 a PicSizeInCtbsY − 1, inclusive, especificando a conversão de um índice de tile para o número de CTUs no tile; e a lista FirstCtbAddrTs[tileIdx] para tileIdx varia de 0 a NumTilesInPic − 1, inclusive, especificando a conversão de um ID de tile para o endereço de CTB na varredura de tile do primeiro CTB no tile.
[0129] As semânticas de cabeçalho de grupo de tiles de exemplo são como a seguir. Um tile_group_address especifica o endereço de tile do primeiro tile no grupo de tiles, onde o endereço de tile é igual a TileId[firstCtbAddrTs] como especificado pela Equação 6-8 com firstCtbAddrTs sendo que é o endereço de CTB na varredura de tile dos CTBs da primeira CTU no grupo de tiles. O comprimento de tile_group_address é Ceil(Log2 (NumTilesInPic)) bits. O valor de tile_group_address deve estar na faixa de zero a NumTilesInPic − 1, inclusive, e o valor de tile_group_address não deve ser igual ao valor de tile_group_address de qualquer outra unidade NAL de grupo de tiles codificada da mesma imagem codificada. Quando tile_group_address não está presente é inferido como igual a zero.
[0130] O seguinte é uma segunda modalidade de exemplo específica dos aspectos mencionados acima. Um processo de varredura de tile e raster de CTB de exemplo é como a seguir. A variável NumTilesInPic, especificando o número de tiles em uma imagem referindo-se ao PPS, e a lista TileColBd[i], TileRowBd[i], TileWidth[i] e TileHeight[i] para i varia de zero a NumTilesInPic − 1, inclusive, especificando a localização do iésima fronteira de coluna de tile em unidades de CTBs, a localização do iésima fronteira de linha de tile em unidades de CTBs, a largura da iésima coluna de tile em unidades de CTBs, e a altura da iésima coluna de tile em unidades de CTBs, são derivadas como a seguir. for(tileIdx = 0, i = 0; i < NumLevel1Tiles; i++) { tileX = i % (num_level1_tile_columns_minus1 + 1) tileY = i/(num_level1_tile_columns_minus1 + 1) if(!level2_tile_split_flag[i]) { (6-5) TileColBd[tileIdx] = colBd[tileX] TileRowBd[tileIdx] = rowBd[tileY] TileWidth[tileIdx] = ColWidth[tileX] TileHeight[tileIdx] = RowHeight[tileY] tileIdx++ } else { if(uniform_level2_tile_spacing_flag[i]) { for(k = 0; k <= num_level2_tile_columns_minus1[i]; k++) colWidth2[k] = ((k + 1) * ColWidth[tileX])/ (num_level2_tile_columns_minus1[i] + 1) − (k * ColWidth[tileX])/(num_level2_tile_columns_minus1[i] + 1) for(k = 0; k <= num_level2_tile_rows_minus1[i]; k++) rowHeight2[k] = ((k + 1) * RowHeight[tileY])/ (num_level2_tile_rows_minus1[i] + 1) − (k * RowHeight[tileY])/(num_level2_tile_rows_minus1[i] + 1) } else { colWidth2[num_level2_tile_columns_minus1[i]] = ColWidth[tileX]) for(k = 0; k <= num_level2_tile_columns_minus1[i]; k++) {
colWidth2[k] = tile_level2_column_width_minus1[k] + 1 colWidth2[k] −= colWidth2[k] } rowHeight2[num_level2_tile_rows_minus1[i]] = RowHeight[tileY]) for(k = 0; k <= num_level2_tile_rows_minus1[i]; k++) { rowHeigh2[k] = tile_level2_column_width_minus1[k] + 1 rowHeight2[k] −= rowHeight2[k] } } for(colBd2[0] = 0, k = 0; k <= num_level2_tile_columns_minus1[i]; k++) colBd2[k + 1] = colBd2[k] + colWidth2[k] for(rowBd2[0] = 0, k = 0; k <= num_level2_tile_rows_minus1[i]; k++) rowBd2[k + 1] = rowBd2[k] + rowHeight2[k] numSplitTiles = (num_level2_tile_columns_minus1[i] + 1) * (num_level2_tile_rows_minus1[i] + 1) for(k = 0; k < numSplitTiles; k++) { tileX2 = k % (num_level2_tile_columns_minus1[i] + 1) tileY2 = k/(num_level2_tile_columns_minus1[i] + 1) TileColBd[tileIdx] = colBd[tileX] + colBd2[tileX2] TileRowBd[tileIdx] = rowBd[tileY] + rowBd2[tileY2] TileWidth[tileIdx] = colWidth2[tileX2] TileHeight[tileIdx] = rowHeight2[tileY2] tileIdx++ } } } NumTilesInPic = tileIdx
[0131] Uma sintaxe RBSP de conjunto de parâmetros de imagem de exemplo é como a seguir. pic_parameter_set_rbsp() { Descritor pps_pic_parameter_set_id ue(v) pps_seq_parameter_set_id ue(v) transform_skip_enabled_flag u(1)
single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { num_level1_tile_columns_minus1 ue(v) num_level1_tile_rows_minus1 ue(v) uniform_level1_tile_spacing_flag u(1) if(!uniform_level1_tile_spacing_flag) { for(i = 0; i < num_level1_tile_columns_minus1; i++) level1_tile_column_width_minus1[i] ue(v) for(i = 0; i < num_level1_tile_rows_minus1; i++) level1_tile_row_height_minus1[i] ue(v) } level2_tile_present_flag u(1) for(i = 0; level2_tile_present_flag && i < NumLevel1Tiles; i++) { level2_tile_split_flag[i] u(1) if(level2_tile_split_flag) { num_level2_tile_columns_minus1[i] ue(v) num_level2_tile_rows_minus1[i] ue(v) uniform_level2_tile_spacing_flag[i] u(1) if(!uniform_level2_tile_spacing_flag[i]) { for(j = 0; j < num_level2_tile_columns_minus1[i]; j++) level2_tile_coluna_largura_minus1[j] ue(v) for(j = 0; j < num_level2_tile_rows_minus1[i]; j++) level2_tile_row_height_minus1[j] ue(v) } } } if(NumTilesInPic > 1) loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0132] As semânticas RBSP de conjunto de parâmetros de imagem de exemplo são como a seguir. O uniform_level2_tile_spacing_flag[i] é definido igual a um para especificar que os fronteiras de coluna de tile de nível dois do iésimo tile de nível um e, do mesmo modo, que os fronteiras de tile de nível dois do iésimo tile de nível um, são distribuídos uniformemente na imagem. O uniform_level2_tile_spacing_flag[i] pode ser definido igual a zero para especificar que fronteiras de coluna de tile de nível dois do iésimo tile de nível um e, do mesmo modo, fronteiras de linha de tile de nível dois do iésimo tile de nível um não são distribuídos uniformemente na imagem, mas sinalizados explicitamente usando os elementos de sintaxe level2_tile_column_width_minus1[j] e level2_tile_row_height_minus1[j]. Quando não está presente, o valor de uniform_level2_tile_spacing_flag[i] é inferido como igual a um. O level2_tile_column_width_minus1[j] mais 1 especifica a largura da jésima coluna de tile de nível dois do iésimo tile de nível um em unidades de CTBs. O level2_tile_row_height_minus1[j] mais 1 especifica a altura da jésima linha de tile de nível dois do iésimo tile de nível um em unidades de CTBs.
[0133] O seguinte é uma terceira modalidade de exemplo específico dos aspectos mencionados acima. Uma sintaxe RBSP de conjunto de parâmetros de imagem de exemplo é como a seguir. pic_parameter_set_rbsp() { Descritor pps_pic_parameter_set_id ue(v) pps_seq_parameter_set_id ue(v) transform_skip_enabled_flag u(1) if ((PicWidthInCtbsY * CtbSizeY) >= (2 * MinTileWidth) || (PicHeightInCtbsY * CtbSizeY) >= (2 * MinTileHeight)) single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { if (PicWidthInCtbsY * CtbSizeY >= (2 * MinTileWidth)) num_level1_tile_columns_minus1 ue(v) if (PicHeightInCtbsY * CtbSizeY >= (2 * MinTileHeight)) num_level1_tile_rows_minus1 ue(v) uniform_level1_tile_spacing_flag u(1) if(!uniform_level1_tile_spacing_flag) { for(i = 0; i < num_level1_tile_columns_minus1; i++) level1_tile_column_width_minus1[i] ue(v)
for(i = 0; i < num_level1_tile_rows_minus1; i++) level1_tile_row_height_minus1[i] ue(v) } if(Level1TilesMayFurtherBeSplit) level2_tile_present_flag u(1) for(i = 0; level2_tile_present_flag && i < NumLevel1Tiles; i++) { if (ColWidth[i] * CtbSizeY > MinTileWidth || RowHeight[i] * CtbSizeY > MinTileHeight) level2_tile_split_flag[i] u(1) if(level2_tile_split_flag) { if (ColWidth[i] * CtbSizeY >= (2 * MinTileWidth)) num_level2_tile_columns_minus1[i] ue(v) if (RowHeight[i] * CtbSizeY >= (2 * MinTileHeight)) num_level2_tile_rows_minus1[i] ue(v) } } if (NumTilesInPic > 1) loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0134] Uma semântica RBSP de conjunto de parâmetros de imagem de exemplo é como a seguir. A conformidade do fluxo de bits pode exigir que as seguintes restrições sejam aplicadas. O valor MinTileWidth especifica a largura de tile mínima e deve ser igual a duzentos e cinquenta e seis de amostras de luma. O valor MinTileHeight especifica a altura de tile mínima e deve ser igual a sessenta e quatro de amostras de luma. O valor de largura de tile mínima e altura de tile mínima pode mudar, de acordo com o perfil e definição de nível. A variável Level1TilesMayBeFurtherSplit pode ser derivada como a seguir: Level1TilesMayBeFurtherSplit = 0 for (i = 0, !Level1TilesMayBeFurtherSplit && i = 0; i < NumLevel1Tiles; i++) if ((ColWidth[i] * CtbSizeY >= (2 * MinTileWidth)) || (RowHeight[i] * CtbSizeY >= (2 * MinTileHeight)))
Level1TilesMayBeFurtherSplit = 1
[0135] O level2_tile_present_flag especifica que um ou mais tiles de nível são divididos em mais tiles. Quando não está presente, o valor de level2_tile_present_flag é inferido como igual a zero. O level2_tile_split_flag[i] mais 1 especifica que o iésimo tile de nível um é dividido em dois ou mais tiles. Quando não está presente, o valor de level2_tile_split_flag[i] é inferido como igual a zero.
[0136] O seguinte é uma quarta modalidade de exemplo específico dos aspectos mencionados acima. Cada localização e tamanho de tile podem ser sinalizadas. A sintaxe para suportar tal sinalização de estrutura de tile pode ser como tabulado abaixo. O tile_top_left_address[i] e tile_bottom_right_address[i] são o índice de CTU dentro da imagem que indica a área retangular coberta pelo tile. O número de bits para sinalizar estes elementos de sintaxe deve ser suficiente para representar o número máximo de CTUs na imagem. pic_parameter_set_rbsp() { Descritor ... . single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { tile_size_unit_idc ue(v) uniform_tile_flag u(1) if(uniform_tile_flag) { num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } else { num_tiles_minus2 ue(v) for(i = 0; i < (num_tiles_minus2 + 2); i++) { tile_top_left_address[i] u(v) tile_bottom_right_address[i] u(v) } } loop_filter_across_tiles_enabled_flag u(1)
} rbsp_trailing_bits() }
[0137] Cada localização e tamanho de tile podem ser sinalizadas. A sintaxe para suportar tal sinalização de estrutura de tile pode ser como tabulado abaixo. O tile_top_left_address[i] é o índice de CTU da primeira CTU no tile na ordem de uma varredura raster de CTU de uma imagem. A largura de tile e a altura de tile especificam o tamanho do tile. Alguns bits podem ser salvos ao sinalizar estres dois elementos de sintaxe, sinalizando primeiro a unidade de tamanho de tile comum. pic_parameter_set_rbsp() { Descritor ... . single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { tile_size_unit_idc ue(v) uniform_tile_flag u(1) if(uniform_tile_flag) { num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } else { num_tiles_minus2 ue(v) for(i = 0; i < (num_tiles_minus2 + 2); i++) { tile_top_left_address[i] u(v) tile_width_minus1[i] ue(v) tile_height_minus1[i] ue(v) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0138] Alternativamente, a sinalização pode ser como a seguir.
pic_parameter_set_rbsp() { Descritor ... . single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { tile_size_unit_idc ue(v) uniform_tile_flag u(1) if(uniform_tile_flag) { num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } else { num_tiles_minus2 ue(v) for(i = 0; i < (num_tiles_minus2 + 2); i++) { tile_x_offset[i] ue(v) tile_y_offset[i] ue(v) tile_width_minus1[i] ue(v) tile_height_minus1[i] ue(v) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0139] Em outro exemplo, cada tamanho de tile pode ser sinalizado como a seguir. Para sinalizar uma estrutura de tile flexível, a localização de cada tile pode não ser sinalizada. Em vez disso, um sinalizador pode ser sinalizado para especificar se deve colocar o tile imediatamente à direita ou imediatamente abaixo do tile anterior. Este sinalizador pode não estar presente se o tile só puder estar à direita ou só puder estar abaixo do tile atual.
[0140] Os valores de tile_x_offset[i] e tile_y_offset[i] podem ser derivados pelas seguintes etapas ordenadas. tile_x_offset[0] e tile_y_offset[0] são definidos como iguais a 0. maxWidth é definido igual a tile_width[0] e maxHeight é definido igual a tile_height[0] runningWidth é definido igual a tile_width[0] e runningHeight é definido igual a tile_height[0] lastNewRowHeight é definido igual a 0 TilePositionCannotBeInferred = false Para i > 0, o seguinte se aplica: Permitir que o valor isRight seja definido como a seguir: se runningWidth + tile_width[i] <= PictureWidth, então isRight = = 1 se não, isRight = = 0 Permitir que o valor isBelow seja definido como a seguir: se runningHeight + tile_height[i] <= PictureHeight, então isBelow = = 1 se não, isBelow = = 0 Se isRight = = 1 && isBelow = = 1 então TilePositionCannotBeInferred = true Se isRight = = 1 && isBelow = = 0 então o seguinte se aplica: right_tile_flag[i] = 1 tile_x_offset[i] = runningWidth. tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = (runningWidth == maxWidth) ? 0 : lastNewRowHeight senão, se isRight = = 0 && isBelow = = 1 então o seguinte se aplica: right_tile_flag[i] = 0 tile_y_offset[i] = runningHeight tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1] lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight : lastNewRowHeight senão, se isRight = = 1 && isBelow = = 1 && right_tile_flag[i] = = 1 então o seguinte se aplica: tile_x_offset[i] = runningWidth. tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = (runningWidth == maxWidth) ? 0 : lastNewRowHeight senão, (por exemplo, isRight = = 1 && isBelow = = 1 &&
right_tile_flag[i] = = 0) então o seguinte se aplica: tile_y_offset[i] = runningHeight tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1] lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight : lastNewRowHeight se right_tile_flag[i] = = 1, o seguinte se aplica: runningWidth = runningWidth + tile_width[i] se runningWidth > maxWidth, então definido maxWidth igual a runningWidth runningHeight é igual a tile_y_offset[i] + tile_height[i] senão, (por exemplo, right_tile_flag[i] = = 0), o seguinte se aplica: runningHeight = runningHeight + tile_height[i] se runningHeight > maxHeight, então definido maxHeight igual a runningHeight runningWidth é igual a tile_x_offset[i] + tile_width[i]
[0141] O anterior pode ser descrito em pseudocódigo como a seguir. tile_x_offset[0] = 0 tile_y_offset[0] = 0 maxWidth = tile_width[0] maxHeight = tile_height[0] runningWidth = tile_width[0] runningHeight = tile_height[0] lastNewRowHeight = 0 isRight = false isBelow = false TilePositionCannotBeInferred = false for(i = 1; i < num_tiles_minus2 + 2; i++) { TilePositionCannotBeInferred = false isRight = (runningWidth + tile_width[i] <= PictureWidth) ? true : false isbelow = (runningHeight + tile_height[i] <= PictureHeight) ? true : false if (!isRight && !isBelow) //Error. This case shall not happen! if (isRight && isBelow) TilePositionCannotBeInferred = true if (isRight && !isBelow) { right_tile_flag[i] = true tile_x_offst[i] = runningWidth tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = tile_y_offset[i] } else, if (!isRight && isBelow) { right_tile_flag[i] = false tile_y_offset[i] = runningHeight tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1] lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight : lastNewRowHeight } else, if (right_tile_flag[i]) { tile_x_offst[i] = runningWidth tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = tile_y_offset[i] } else { tile_y_offset[i] = runningHeight tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1] lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight : lastNewRowHeight } } if (right_tile_flag[i]) { runningWidth += tile_width[i] if (runningWidth > maxWidth) maxWidth = runningWidth runningHeight = tile_y_offset[i] + tile_height[i] } else { runningHeight += tile_height[i]
if (runningHeight > maxHeight) maxHeight = runningHeight runningWidth = tile_x_offset[i] + tile_width[i] } pic_parameter_set_rbsp() { Descritor ... . single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { tile_size_unit_idc ue(v) uniform_tile_flag u(1) if(uniform_tile_flag) { num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } else { num_tiles_minus2 ue(v) for(i = 0; i < (num_tiles_minus2 + 2); i++) { tile_width_minus1 [i] ue(v) tile_height_minus1 [i] ue(v) if(TilePositionCannotBeInferred) right_tile_flag[i] u(1) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0142] O seguinte é uma implementação de derivação do tamanho do último tile em pseudocódigo. tile_x_offset[0] = 0 tile_y_offset[0] = 0 maxWidth = tile_width[0] maxHeight = tile_height[0] runningWidth = tile_width[0]
runningHeight = tile_height[0] lastNewRowHeight = 0 isRight = false isBelow = false TilePositionCannotBeInferred = false for(i = 1; i < num_tiles_minus2 + 2; i++) { currentTileWidth = (i == num_tiles_minus2 + 1) ? (PictureWidth - runningWidth) % PictureWidth : tile_width[i] currentTileHeight = (i == num_tiles_minus2 + 1) ? (PictureHeight - runningHeight) % PictureHeight : tile_height[i]
isRight = (runningWidth + currentTileWidth <= PictureWidth) ? true : false isbelow = (runningHeight + currentTileHeight <= PictureHeight) ? true : false if (!isRight && !isBelow) //Error.
This case shall not happen! if (isRight && isBelow) TilePositionCannotBeInferred = true if (isRight && !isBelow) { right_tile_flag[i] = true tile_x_offst[i] = runningWidth tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = tile_y_offset[i] } else if (!isRight && isBelow) { right_tile_flag[i] = false tile_y_offset[i] = runningHeight tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1] lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight : lastNewRowHeight
} else if (right_tile_flag[i]) { tile_x_offst[i] = runningWidth tile_y_offset[i] = (runningWidth == maxWidth) ? 0 : lastNewRowHeight lastNewRowHeight = tile_y_offset[i] } else { tile_y_offset[i] = runningHeight tile_x_offset[i] = (runningHeight == maxHeight) ? 0 : tile_x_offset[i - 1] lastNewRowHeight = (runningHeight == maxHeight && runningWidth == maxWidth) ? runningHeight : lastNewRowHeight } } if (right_tile_flag[i]) { runningWidth += currentTileWidth if (runningWidth > maxWidth) maxWidth = runningWidth runningHeight = tile_y_offset[i] + currentTileHeight } else { runningHeight += currentTileHeight if (runningHeight > maxHeight) maxHeight = runningHeight runningWidth = tile_x_offset[i] + currentTileWidth } pic_parameter_set_rbsp() { Descritor ... . single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { tile_size_unit_idc ue(v) uniform_tile_flag u(1) if(uniform_tile_flag) { num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v)
} else { num_tiles_minus2 ue(v) for(i = 0; i < (num_tiles_minus2 + 1); i++) { tile_width_minus1[i] ue(v) tile_height_minus1[i] ue(v) if(TilePositionCannotBeInferred) right_tile_flag[i] u(1) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0143] Para economia de bits de sinalização adicional, o número de tamanhos de tiles exclusivos pode ser sinalizado para suportar a tabulação do tamanho de tile de unidade. O tamanho de tile pode, em seguida, ser referenciado apenas por índice. pic_parameter_set_rbsp() { Descritor ... . single_tile_in_pic_flag u(1) if(!single_tile_in_pic_flag) { tile_size_unit_idc ue(v) uniform_tile_flag u(1) if(uniform_tile_flag) { num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } else { num_tiles_minus2 ue(v) num_unique_tile_sizes ue(v) for(i = 0; i < num_unique_tile_sizes; i++) { preset_tile_width_minus1[i] ue(v)
preset_tile_height_minus1[i] ue(v) } for(i = 0; i < (num_tiles_minus2 + 2); i++) { if (num_unique_tile_sizes) tile_size_idx[i] u(v) else { tile_width_minus1[i] ue(v) tile_height_minus1[i] ue(v) } if(TilePositionCannotBeInferred) right_tile_flag[i] u(1) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() }
[0144] A FIG. 9 é um diagrama esquemático de um dispositivo de codificação de vídeo de exemplo 900. O dispositivo de codificação de vídeo 900 é adequado para implementar os exemplos/modalidades revelados como descrito neste relatório. O dispositivo de codificação de vídeo 900 compreende as portas a jusante 920, portas a montante 950 e/ou unidades de transceptor (Tx/Rx) 910, incluindo transmissores e/ou receptores para a comunicação de dados a montante e/ou a jusante em uma rede. O dispositivo de codificação de vídeo 900 também inclui um processador 930 incluindo uma 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 também pode compreender componentes elétricos, componentes ópticos para elétricos (OE), componentes elétricos para ópticos (EO) e/ou componentes de comunicação sem fio acoplados às portas a montante 950 e/ou às portas a jusante 920 para a comunicação de dados através de redes de comunicação elétricas, ópticas ou sem fio. O dispositivo de codificação de vídeo 900 também pode incluir dispositivos de entrada e/ou saída (I/O) 960 para a comunicação de dados e de um usuário. Os dispositivos de I/O 960 podem incluir dispositivos de saída, tais como uma tela para exibição de dados de vídeo, alto-falantes para a saída de dados de áudio, etc. Os dispositivos de I/O 960 também podem incluir dispositivos de entrada, tais como um teclado, mouse, bola de comando, etc., e/ou interfaces correspondentes para interagir com tais dispositivos de saída.
[0145] O processador 930 é implementado por hardware e software. O processador 930 pode ser implementado como um ou mais chips de CPU, núcleos (por exemplo, como um processador de múltiplos núcleos), arranjos de portas programáveis em campo (FPGAs), circuitos integrados específicos da aplicação (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 neste relatório, tais como métodos 100, 1000 e 1100, mecanismo 600 e/ou aplicação 700 que podem utilizar um fluxo de bits 500 e/ou uma imagem particionada, de acordo com o esquema de tiling de vídeo flexível 800. O módulo de codificação 914 também pode implementar qualquer outro método/mecanismo descrito neste relatório. Além disso, o módulo de codificação 914 pode implementar um sistema de codec 200, um codificador 300 e/ou um decodificador 400. Por exemplo, o módulo de codificação 914 pode particionar uma imagem no tile de primeiro nível e particionar os tiles de primeiro nível em tiles de segundo nível. O módulo de codificação 914 também pode sinalizar os dados de suporte para indicar a configuração de tiles de primeiro nível e tiles de segundo nível. O módulo de codificação 914 suporta adicionalmente a utilização de tais mecanismos para combinar subimagens em diferentes resoluções em uma única imagem para vários casos de uso como descrito neste relatório. Como tal, o módulo de codificação 914, melhora a funcionalidade do dispositivo de codificação de vídeo 900, bem como aborda problemas que são específicos para as artes da 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).
[0146] A memória 932 compreende um ou mais tipos de memória, tais como discos, unidades de fita, unidades de estado de sólido, memória somente de leitura (ROM), memória de acesso aleatório (RAM), memória flash, memória endereçável de conteúdo ternária (TCAM), memória de acesso aleatório estática (SRAM), etc. A memória 932 pode ser usada como um dispositivo de armazenamento de dados de estouro, para armazenar programas quando tais programas são selecionados para execução, e para armazenar instruções e dados que são lidos durante a execução do programa.
[0147] A FIG. 10 é um fluxograma de um método de exemplo 1000 de codificação de uma imagem utilizando um esquema de tiling flexível, tal como esquema de tiling de vídeo flexível 800. O método 1000 pode ser utilizado por um codificador, tal como um sistema de codec 200, um codificador 300 e/ou um dispositivo de codificação de vídeo 900 quando realiza o método 100, mecanismo 600 e/ou aplicação de suporte 700. Além disso, o método 1000 pode ser utilizado para gerar um fluxo de bits 500 para transmissão para um decodificador, tal como decodificador 400.
[0148] O método 1000 pode começar quando um codificador recebe uma sequência de vídeo incluindo uma pluralidade de imagens e determina a codificação dessa sequência de vídeo em um fluxo de bits, por exemplo, com base na entrada do usuário. Como um exemplo, a sequência de vídeo e, consequentemente, as imagens, podem ser codificadas em uma pluralidade de resoluções. Na etapa 1001, uma imagem é particionada em uma pluralidade de tiles de primeiro nível. Na etapa 1003, um subconjunto dos tiles de primeiro nível é particionado em uma pluralidade de tiles de segundo nível. Cada tile de segundo nível pode conter uma única fatia retangular de dados de imagem. Em alguns exemplos, os tiles de primeiro nível fora do subconjunto contêm dados de imagem em uma primeira resolução e os tiles de segundo nível contêm dados de imagem em uma segunda resolução diferente da primeira resolução. Em alguns exemplos, cada tile de primeiro nível no subconjunto de tiles de primeiro nível inclui dois ou mais tiles de segundo nível completos. Em alguns exemplos, os tiles de primeiro nível e os tiles de segundo nível podem ser atribuídos a um ou mais grupos de tiles, tal que todos os tiles em um grupo de tiles correspondente sejam restritos a cobrir uma porção retangular da imagem.
[0149] Na etapa 1005, os tiles de primeiro nível e os tiles de segundo nível são codificados em um fluxo de bits. Em alguns exemplos, os dados indicando uma configuração de tiles de segundo nível podem ser codificados no fluxo de bits em um conjunto de parâmetros de imagem associado à imagem. A configuração de tiles de segundo nível pode ser sinalizada como um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível (por exemplo, no PPS). Em alguns exemplos, os dados que indicam explicitamente um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível são omitidas do fluxo de bits quando uma largura de tile de primeiro nível for menor que duas vezes um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que duas vezes um limiar de altura mínimo. Em alguns exemplos, indicações de divisão que indicam os tiles de primeiro nível que são particionados em tiles de segundo nível podem ser codificadas no fluxo de bits (por exemplo, no PPS). Em alguns exemplos, as indicações de divisão podem ser omitidas do fluxo de bits para os tiles de primeiro nível correspondentes quando uma largura de tile de primeiro nível for menor que um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que um limiar de altura mínimo.
[0150] Na etapa 1007, o fluxo de bits pode ser armazenado na memória para a comunicação em direção a um decodificador. O fluxo de bits pode ser transmitido para o decodificador após a solicitação.
[0151] A FIG. 11 é um fluxograma de um método de exemplo 1100 de decodificação de uma imagem utilizando um esquema de tiling flexível, tal como esquema de tiling de vídeo flexível 800. O método 1100 pode ser utilizado por um decodificador, tal como um sistema de codec 200, um decodificador 400 e/ou um dispositivo de codificação de vídeo 900 quando realiza o método 100, mecanismo 600 e/ou aplicação de suporte 700. Além disso, o método 1100 pode ser utilizado após o recebimento de um fluxo de bits 500 a partir de um codificador, tal como codificador 300.
[0152] O método 1100 pode começar quando um decodificador começa a receber um fluxo de bits de dados codificados representando uma sequência de vídeo, por exemplo, como um resultado do método 1000. O fluxo de bits pode conter dados de vídeo da sequência de vídeo codificada em uma pluralidade de resoluções. Na etapa 1101, um fluxo de bits é recebido. O fluxo de bits inclui uma imagem particionada em uma pluralidade de tiles de primeiro nível. Um subconjunto dos tiles de primeiro nível é particionado adicionalmente em uma pluralidade de tiles de segundo nível. Cada tile de segundo nível contém uma única fatia retangular de dados de imagem. Em alguns exemplos, os tiles de primeiro nível fora do subconjunto contêm dados de imagem em uma primeira resolução e os tiles de segundo nível contêm dados de imagem em uma segunda resolução diferente da primeira resolução. Em alguns exemplos, cada tile de primeiro nível no subconjunto de tiles de primeiro nível inclui dois ou mais tiles de segundo nível completos. Em alguns exemplos, os tiles de primeiro nível e os tiles de segundo nível são atribuídos em um ou mais grupos de tiles, tal que todos os tiles em um grupo de tiles correspondente sejam restritos a cobrir uma porção retangular da imagem.
[0153] Na etapa 1103, uma configuração dos tiles de primeiro nível e uma configuração dos tiles de segundo nível são determinadas com base em parâmetros incluídos no fluxo de bits. Por exemplo, dados indicando a configuração dos tiles de segundo nível podem ser obtidos a partir de um conjunto de parâmetros de imagem associado à imagem. Em alguns exemplos, a configuração de tiles de segundo nível é sinalizada como um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível. Em alguns exemplos, os dados que indicam explicitamente o número de colunas de tile de segundo nível e o número de linhas de tile de segundo nível são omitidos do fluxo de bits para um tile correspondente quando uma largura de tile de primeiro nível for menor que duas vezes um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que duas vezes um limiar de altura mínimo. Em alguns exemplos, indicações de divisão podem ser obtidas a partir do fluxo de bits como parte da determinação de configurações dos tiles de primeiro nível e dos tiles de segundo nível. As indicações de divisão podem indicar os tiles de primeiro nível que são particionados nos tiles de segundo nível. Em alguns exemplos, as indicações de divisão são omitidas do fluxo de bits quando uma largura de tile de primeiro nível for menor que um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que um limiar de altura mínimo.
[0154] Na etapa 1105, os tiles de primeiro nível e os tiles de segundo nível são decodificados com base na configuração dos tiles de primeiro nível e na configuração dos tiles de segundo nível. Na etapa 1107, uma sequência de vídeo reconstruída é gerada para exibição com base nos tiles de primeiro nível e nos tiles de segundo nível decodificados.
[0155] A FIG. 12 é um diagrama esquemático de um sistema de exemplo 1200 para codificação de uma sequência de vídeo utilizando um esquema de tiling flexível, tal como esquema de tiling de vídeo flexível 800. O sistema 1200 pode ser implementado por um codificador e um decodificador, tal como um sistema de 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 utilizado ao implementar o método 100, 1000, 1100, mecanismo 600 e/ou aplicação 700. O sistema 1200 também pode codificar dados em um fluxo de bits, tal como fluxo de bits 500, e decodificar tal fluxo de bits para exibição para um usuário.
[0156] 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 tiles de primeiro nível e particionar um subconjunto dos tiles de primeiro nível em uma pluralidade de tiles de segundo nível, em que cada tile de segundo nível contém uma única fatia retangular de dados de imagem. O codificador de vídeo 1202 compreende adicionalmente um módulo de codificação 1205 para codificação dos tiles de primeiro nível e dos tiles de segundo nível em um fluxo de bits. O codificador de vídeo 1202 compreende adicionalmente um módulo de armazenamento 1207 para armazenar o fluxo de bits para a comunicação em direção a um decodificador. O codificador de vídeo 1202 compreende adicionalmente um módulo de transmissão 1209 para transmitir o fluxo de bits em direção a um decodificador. O codificador de vídeo 1202 pode ser configurado adicionalmente para realizar qualquer uma das etapas do método 1000.
[0157] 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 o recebimento de um fluxo de bits incluindo uma imagem particionada em uma pluralidade de tiles de primeiro nível, em que um subconjunto dos tiles de primeiro nível é particionado adicionalmente em uma pluralidade de tiles de segundo nível, e em que cada tile de segundo nível contém uma única fatia retangular de dados de imagem. O decodificador de vídeo 1210 compreende adicionalmente um módulo de determinação 1213 para determinar uma configuração dos tiles de primeiro nível e uma configuração dos tiles de segundo nível com base em parâmetros incluídos no fluxo de bits. O decodificador de vídeo 1210 compreende adicionalmente um módulo de decodificação 1215 para decodificação dos tiles de primeiro nível e dos tiles de segundo nível com base na configuração dos tiles de primeiro nível e na configuração dos tiles de segundo nível. O decodificador de vídeo 1210 compreende adicionalmente um módulo de geração 1217 para gerar uma sequência de vídeo reconstruída para exibição com base nos tiles de primeiro nível e nos tiles de segundo nível decodificados. O decodificador de vídeo 1210 pode ser configurado adicionalmente para realizar qualquer uma das etapas do método 1100.
[0158] Um primeiro componente é diretamente acoplado a um segundo componente quando não há componentes de intervenção, exceto por uma linha, um traço ou outra mídia entre o primeiro componente e o segundo componente. O primeiro componente é indiretamente acoplado ao segundo componente quando há componentes de intervenção exceto uma linha, um traço ou 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 “em torno de” significa uma taxa incluindo ±10 % do número subsequente, a menos que de outro modo estabelecido.
[0159] Também deve ser entendido que as etapas dos métodos exemplares apresentados neste relatório não são necessariamente exigidas para serem realizadas na ordem descrita e a ordem das etapas de tais métodos deve ser entendida como meramente exemplar. Do mesmo modo, as etapas adicionais podem ser incluídas em tais métodos e certas etapas podem ser omitidas ou combinadas, em métodos compatíveis com várias modalidades da presente revelação.
[0160] Enquanto várias modalidades foram fornecidas na presente revelação, pode ser entendido que os sistemas e métodos revelados podem ser incorporados em muitas outras formas específicas sem se afastar do espírito ou escopo da presente revelação. Os presentes exemplos devem ser considerados como ilustrativos e não restritivos e a intenção não deve estar limitada aos detalhes determinados neste relatório. Por exemplo, os vários elementos ou componentes podem ser combinados ou integrados em outro sistema ou certas características podem ser omitidas ou não implementadas.
[0161] Além disso, técnicas, sistemas, subsistemas e métodos descritos e ilustrados nas várias modalidades como distintos ou separados podem ser combinados ou integrados com outros sistemas, componentes, técnicas ou métodos sem se afastar do escopo da presente revelação. Outros exemplos de mudanças, substituições e alterações são verificáveis por um técnico e podem ser feitas sem se afastar do espírito e escopo revelados neste relatório.

Claims (30)

REIVINDICAÇÕES
1. Método implementado em um codificador, CARACTERIZADO pelo fato de que o método compreende: particionar, por um processador do codificador, uma imagem em uma pluralidade de tiles de primeiro nível; particionar, pelo processador, um subconjunto dos tiles de primeiro nível em uma pluralidade de tiles de segundo nível que cada um contém uma única fatia retangular de dados de imagem; codificar, pelo processador, os tiles de segundo nível em um fluxo de bits.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que o método compreende adicionalmente: armazenar, em uma memória do codificador, o fluxo de bits para comunicação em direção a um decodificador.
3. Método, de acordo com qualquer uma das reivindicações 1 a 2, CARACTERIZADO pelo fato de que tiles de primeiro nível fora do subconjunto contêm dados de imagem em uma primeira resolução, e em que tiles de segundo nível contêm dados de imagem em uma segunda resolução diferente da primeira resolução.
4. Método, de acordo com qualquer uma das reivindicações 1 a 3, CARACTERIZADO pelo fato de que cada tile de primeiro nível no subconjunto de tiles de primeiro nível inclui dois ou mais tiles de segundo nível completos.
5. Método, de acordo com qualquer uma das reivindicações 1 a 4, CARACTERIZADO pelo fato de que compreende adicionalmente codificar, pelo processador, dados que indicam uma configuração de tiles de segundo nível em um conjunto de parâmetros de imagem associado à imagem.
6. Método, de acordo com qualquer uma das reivindicações 1 a 5, CARACTERIZADO pelo fato de que a configuração de tiles de segundo nível é sinalizada como um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível.
7. Método, de acordo com qualquer uma das reivindicações 1 a 6, CARACTERIZADO pelo fato de que dados que explicitamente indicam um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível são omitidos do fluxo de bits quando uma largura de tile de primeiro nível for menor que duas vezes um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que duas vezes um limiar de altura mínimo.
8. Método, de acordo com qualquer uma das reivindicações 1 a 7, CARACTERIZADO pelo fato de que compreende adicionalmente atribuir, pelo processador, os tiles de segundo nível em um ou mais grupos de tiles tal que todos os tiles em um grupo de tiles correspondente sejam restritos a cobrir uma porção retangular da imagem.
9. Método, de acordo com qualquer uma das reivindicações 1 a 8, CARACTERIZADO pelo fato de que compreende adicionalmente codificar, pelo processador, indicações de divisão que indicam os tiles de primeiro nível que são particionados em tiles de segundo nível, em que as indicações de divisão são omitidas do fluxo de bits quando uma largura de tile de primeiro nível for menor que um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que um limiar de altura mínimo.
10. Método implementado em um decodificador, CARACTERIZADO pelo fato de que o método compreende: receber, por um processador do decodificador através de um receptor, um fluxo de bits incluindo uma imagem particionada em uma pluralidade de tiles de primeiro nível incluindo um subconjunto dos tiles de primeiro nível adicionalmente particionados em uma pluralidade de tiles de segundo nível que cada um contém uma única fatia retangular de dados de imagem; determinar, pelo processador, uma configuração dos tiles de segundo nível com base em parâmetros incluídos no fluxo de bits; decodificar, pelo processador, os tiles de segundo nível com base na configuração dos tiles de segundo nível; e gerar, pelo processador, uma sequência de vídeo reconstruída para exibição com base nos tiles de segundo nível decodificados.
11. Método, de acordo com a reivindicação 10, CARACTERIZADO pelo fato de que tiles de primeiro nível fora do subconjunto contêm dados de imagem em uma primeira resolução e tiles de segundo nível contêm dados de imagem em uma segunda resolução diferente da primeira resolução.
12. Método, de acordo com qualquer uma das reivindicações 10 a 11, CARACTERIZADO pelo fato de que cada tile de primeiro nível no subconjunto de tiles de primeiro nível inclui dois ou mais tiles de segundo nível completos.
13. Método, de acordo com qualquer uma das reivindicações 10 a 12, CARACTERIZADO pelo fato de que compreende adicionalmente obter, pelo processador, dados que indicam a configuração dos tiles de segundo nível a partir de um conjunto de parâmetros de imagem associado à imagem.
14. Método, de acordo com qualquer uma das reivindicações 10 a 13, CARACTERIZADO pelo fato de que a configuração de tiles de segundo nível é sinalizada como um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível.
15. Método, de acordo com qualquer uma das reivindicações 10 a 14, CARACTERIZADO pelo fato de que dados que explicitamente indicam um número de colunas de tile de segundo nível e um número de linhas de tile de segundo nível são omitidos do fluxo de bits quando uma largura de tile de primeiro nível for menor que duas vezes um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que duas vezes um limiar de altura mínimo.
16. Método, de acordo com qualquer uma das reivindicações 10 a 15, CARACTERIZADO pelo fato de que os tiles de segundo nível são atribuídos a um ou mais grupos de tiles tal que todos os tiles em um grupo de tiles correspondente são restritos a cobrir uma porção retangular da imagem.
17. Método, de acordo com qualquer uma das reivindicações 10 a 16, CARACTERIZADO pelo fato de que compreende adicionalmente obter, pelo processador, indicações de divisão que indicam os tiles de primeiro nível que são particionados em tiles de segundo nível, em que as indicações de divisão são omitidas do fluxo de bits quando uma largura de tile de primeiro nível for menor que um limiar de largura mínimo e uma altura de tile de primeiro nível for menor que um limiar de altura mínimo.
18. Dispositivo de codificação de vídeo, CARACTERIZADO pelo fato de que compreende: um processador, um receptor acoplado ao processador, e um transmissor acoplado ao processador, o processador, receptor, e transmissor configurados para realizar o método conforme definido em qualquer uma das reivindicações 1 a 17.
19. Mídia legível por computador não transitória, CARACTERIZADA pelo fato de que compreende um produto de programa de computador para uso por um dispositivo de codificação de vídeo, o produto de programa de computador compreendendo instruções executáveis por computador armazenadas na mídia legível por computador não transitória tal que quando executadas por um processador fazem com que o dispositivo de codificação de vídeo realize o método conforme definido em qualquer uma das reivindicações 1 a 17.
20. Codificador, CARACTERIZADO pelo fato de que compreende: uma unidade de particionamento, configurada para: particionar uma imagem em uma pluralidade de tiles de primeiro nível; e particionar um subconjunto dos tiles de primeiro nível em uma pluralidade de tiles de segundo nível que cada um contém uma única fatia retangular de dados de imagem; uma unidade de codificação, configurada para codificar os tiles de segundo nível em um fluxo de bits.
21. Codificador, de acordo com a reivindicação 16, CARACTERIZADO pelo fato de que o codificador compreende adicionalmente: uma unidade de armazenamento, configurada para armazenar o fluxo de bits para comunicação em direção a um decodificador.
22. Codificador, de acordo com qualquer uma das reivindicações 20 a 21, CARACTERIZADO pelo fato de que o codificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 1 a 9.
23. Decodificador, CARACTERIZADO pelo fato de que compreende: uma unidade de recebimento, configurada para receber um fluxo de bits incluindo uma imagem particionada em uma pluralidade de tiles de primeiro nível incluindo um subconjunto dos tiles de primeiro nível adicionalmente particionados em uma pluralidade de tiles de segundo nível que cada um contém uma única fatia retangular de dados de imagem; uma unidade de determinação, configurada para determinar uma configuração dos tiles de segundo nível com base em parâmetros incluídos no fluxo de bits; uma unidade de decodificação, configurada para decodificar os tiles de segundo nível com base na configuração dos tiles de segundo nível; e uma unidade de geração, configurada para gerar uma sequência de vídeo reconstruída para exibição com base nos tiles de segundo nível decodificados.
24. Decodificador, de acordo com a reivindicação 23, CARACTERIZADO pelo fato de que o decodificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 10 a 17.
25. Mídia de armazenamento não transitória, CARACTERIZADA pelo fato de que inclui um fluxo de bits codificado, o fluxo de bits sendo gerado dividindo-se uma imagem atual de um sinal de vídeo ou um sinal de imagem em tiles de segundo nível.
26. Meio para codificação, CARACTERIZADO pelo fato de que compreende: meio de recebimento configurado para receber um fluxo de bits para decodificação; meio de transmissão acoplado ao meio de recebimento, o meio de transmissão configurado para transmitir uma imagem decodificada para um meio de exibição; meio de armazenamento acoplado a pelo menos um dentre o meio de recebimento ou o meio de transmissão, o meio de armazenamento configurado para armazenar instruções; e meio de processamento acoplado ao meio de armazenamento, o meio de processamento configurado para executar as instruções armazenadas no meio de armazenamento para realizar o método conforme definido em qualquer uma das reivindicações 1 a 17.
27. Codificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 1 a 9.
28. Decodificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 10 a 17.
29. Produto de programa de computador, CARACTERIZADO pelo fato de que compreende código de programa para realizar o método conforme definido em qualquer uma das reivindicações 1 a 17 quando executado em um computador ou em um processador.
30. Mídia legível por computador não transitória, CARACTERIZADA pelo fato de que porta um código de programa que, 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 17.
Codificador Decodificador
Sinal de Vídeo de Entrada
Determinar Partições Particionamento de Bloco
Decodificação de Bloco Compressão de Bloco
Filtragem Filtragem
Sinal de Vídeo de Saída Fluxo de bits
Controle de Controle Geral Codificador Geral Coeficientes de Transformada Quantizados
Escalonamento Quantização e e Transformada Sinal de Vídeo Inversa Escalonamento Particionado de Transformada Estimação Análise de de Imagem Controle de Intra Filtro Formatação de Predição Intra Cabeçalho e
CABAC
Controle de Filtro Predição de Imagem Intra Filtros in-loop Fluxo de Bits Compensação Codificado de Movimento Movimento Estimação de Buffer de Sinal de Movimento Imagem Vídeo de Decodificada Saída
Codificador Fluxo de bits
Sinal de Vídeo Transformada Codificação Particionado e Quantização de Entropia
Predição de Transformada Imagem Intra Inversa e Quantização
Compensação de Movimento
Filtros in-loop Buffer de Imagem Decodificada
Decodificador Fluxo de bits
Decodificação Transformada de Entropia Inversa e Quantização
Compensação de Movimento
Predição de Imagem Intra
Buffer de Imagem Filtros in-loop Decodificada Sinal de Vídeo de Saída
Fluxo de bits
Cabeçalho de Dados de 636 336 Grupo de Tiles Imagem
7LOH 7LOH 7LOH
3DUWLFLSDQWe
3DUWLFLSDQWe 3DUWLFLSDQWe
3DUWLFLSDQWe
Nível Nível Nível Nível
Nível Nível Nível Nível
Nível Nível Nível Nível Nível Nível
Nível Nível Nível Nível Nível Nível
Dispositivo de Codificação de Vídeo
9 Dispositivos de I/O
9 9 9 3URFHVVadRU 9 9 Módulo de Codificação 7[5[ 7[5[ 9
9 0HPória
Portas a Portas a Jusante Montante
9
Particionar uma imagem em uma pluralidade de tiles de primeiro nível.
Particionar um subconjunto dos tiles de primeiro nível em uma pluralidade de tiles de segundo nível, em que cada tile de segundo nível contém uma única fatia retangular de dados de imagem.
Codificar os tiles de primeiro nível e os tiles de segundo nível em um fluxo de bits.
Armazenar o fluxo de bits para comunicação em direção a um decodificador.
Receber um fluxo de bits incluindo uma imagem particionada em uma pluralidade de tiles de primeiro nível. Um subconjunto dos tiles de primeiro nível é adicionalmente particionado em uma pluralidade de tiles de segundo nível. Cada tile de segundo nível contém uma única fatia retangular de dados de imagem.
Determinar uma configuração dos tiles de primeiro nível e uma configuração dos tiles de segundo nível com base em parâmetros incluídos no fluxo de bits.
Decodificar os tiles de primeiro nível e os tiles de segundo nível com base na configuração do tiles de primeiro nível e na configuração dos tiles de segundo nível.
Gerar uma sequência de vídeo reconstruída para exibição com base nos tiles de primeiro nível e nos tiles de segundo nível decodificados.
Codificador de vídeo
Particionamento
Armazenamento Codificação
7UDQVPLssor
5HFHptor
'HWHUPLnação
'HFRGificação
*Hração Decodificador de vídeo
BR112021012632-5A 2018-12-27 2019-12-27 Codificador de vídeo, decodificador de vídeo e métodos correspondentes BR112021012632A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862785511P 2018-12-27 2018-12-27
US62/785,511 2018-12-27
PCT/US2019/068789 WO2020140062A1 (en) 2018-12-27 2019-12-27 Flexible tiling in video coding

Publications (1)

Publication Number Publication Date
BR112021012632A2 true BR112021012632A2 (pt) 2021-09-08

Family

ID=71127261

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021012632-5A BR112021012632A2 (pt) 2018-12-27 2019-12-27 Codificador de vídeo, decodificador de vídeo e métodos correspondentes

Country Status (11)

Country Link
US (4) US11778205B2 (pt)
EP (3) EP3903490A4 (pt)
JP (6) JP7354258B2 (pt)
KR (3) KR20210095959A (pt)
CN (3) CN113261287A (pt)
AU (1) AU2019414460B2 (pt)
BR (1) BR112021012632A2 (pt)
CA (1) CA3125186A1 (pt)
MX (3) MX2021007874A (pt)
SG (1) SG11202107008TA (pt)
WO (3) WO2020140062A1 (pt)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NO345066B1 (en) 2018-02-19 2020-09-14 Connect Lng As A mooring device and a floating unit comprising at least one mooring device
MX2021007874A (es) 2018-12-27 2021-10-26 Huawei Tech Co Ltd Un codificador de video, un decodificador de video y métodos correspondientes.
KR20210107090A (ko) * 2018-12-28 2021-08-31 후아웨이 테크놀러지 컴퍼니 리미티드 비디오 인코더, 비디오 디코더 및 대응하는 방법
JP7206397B2 (ja) * 2018-12-31 2023-01-17 ホアウェイ・テクノロジーズ・カンパニー・リミテッド タイル構成のシグナリングのためのエンコーダ、デコーダ、および対応する方法
US20220179482A1 (en) * 2019-03-29 2022-06-09 Sony Interactive Entertainment Inc. Boundary setting device, boundary setting method, and program
CN110650357B (zh) * 2019-09-27 2023-02-10 腾讯科技(深圳)有限公司 视频解码方法及装置
US11477450B2 (en) * 2019-12-20 2022-10-18 Zte (Uk) Limited Indication of video slice height in video subpictures
US11863786B2 (en) * 2021-05-21 2024-01-02 Varjo Technologies Oy Method of transporting a framebuffer
KR102537317B1 (ko) * 2022-08-19 2023-05-26 세종대학교산학협력단 렌더링 성능을 올리기 위한 멀티레벨 선택적 렌더링 방법 및 장치

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9584819B2 (en) * 2011-10-24 2017-02-28 Qualcomm Incorporated Grouping of tiles for video coding
WO2013068498A2 (en) * 2011-11-08 2013-05-16 Telefonaktiebolaget L M Ericsson (Publ) Tile size in video coding
US10244246B2 (en) * 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
CN107734346B (zh) * 2012-02-04 2020-11-20 Lg 电子株式会社 视频编码方法、视频解码方法和使用其的设备
WO2014002619A1 (ja) * 2012-06-25 2014-01-03 ソニー株式会社 画像復号装置、画像復号方法、画像符号化装置及び画像符号化方法
US9270994B2 (en) * 2012-06-29 2016-02-23 Cisco Technology, Inc. Video encoder/decoder, method and computer program product that process tiles of video data
WO2014172387A1 (en) * 2013-04-15 2014-10-23 Huawei Technologies Co., Ltd. Method and apparatus of depth prediction mode selection
GB2559042B (en) * 2015-12-21 2019-06-05 Imagination Tech Ltd Allocation of tiles to processing engines in a graphics processing system
US11222397B2 (en) * 2016-12-23 2022-01-11 Qualcomm Incorporated Foveated rendering in tiled architectures
US10895946B2 (en) * 2017-05-30 2021-01-19 Palantir Technologies Inc. Systems and methods for using tiled data
CN112640455A (zh) * 2018-06-21 2021-04-09 瑞典爱立信有限公司 视频编码中具有子图块的图块分区
CN112585970A (zh) * 2018-06-21 2021-03-30 瑞典爱立信有限公司 灵活图块分区
TWI743514B (zh) * 2018-07-09 2021-10-21 弗勞恩霍夫爾協會 用於經編碼圖像多樣化空間劃分之編碼器、解碼器、編碼方法及解碼方法
WO2020130139A1 (ja) * 2018-12-21 2020-06-25 シャープ株式会社 動画像符号化装置および動画像復号装置
MX2021007874A (es) 2018-12-27 2021-10-26 Huawei Tech Co Ltd Un codificador de video, un decodificador de video y métodos correspondientes.

Also Published As

Publication number Publication date
JP2024008970A (ja) 2024-01-19
JP7354258B2 (ja) 2023-10-02
KR20210095958A (ko) 2021-08-03
US20210329264A1 (en) 2021-10-21
CN113261288A (zh) 2021-08-13
EP3903491A1 (en) 2021-11-03
MX2021007873A (es) 2021-10-26
MX2021007875A (es) 2021-10-26
JP2022516261A (ja) 2022-02-25
EP3903491A4 (en) 2022-03-02
KR20210096305A (ko) 2021-08-04
US20240064313A1 (en) 2024-02-22
CA3125186A1 (en) 2020-07-02
JP2023052328A (ja) 2023-04-11
WO2020140063A1 (en) 2020-07-02
JP2022516872A (ja) 2022-03-03
CN113261287A (zh) 2021-08-13
AU2019414460A1 (en) 2021-07-29
KR20210095959A (ko) 2021-08-03
JP2022516260A (ja) 2022-02-25
EP3903489A4 (en) 2022-03-02
US20210329265A1 (en) 2021-10-21
US20220109855A1 (en) 2022-04-07
EP3903490A1 (en) 2021-11-03
MX2021007874A (es) 2021-10-26
EP3903489A1 (en) 2021-11-03
AU2019414460B2 (en) 2023-06-08
US20230209069A1 (en) 2023-06-29
US11778205B2 (en) 2023-10-03
EP3903490A4 (en) 2022-03-02
JP7210748B2 (ja) 2023-01-23
EP3903489B1 (en) 2024-03-27
JP7417612B2 (ja) 2024-01-18
WO2020140062A1 (en) 2020-07-02
CN113261289A (zh) 2021-08-13
SG11202107008TA (en) 2021-07-29
WO2020140066A1 (en) 2020-07-02
JP2023168394A (ja) 2023-11-24
US11616961B2 (en) 2023-03-28

Similar Documents

Publication Publication Date Title
ES2952079T3 (es) Dimensionamiento de subimágenes en la codificación de vídeo
US11778205B2 (en) Flexible tiling in video coding
US11889087B2 (en) Tile group assignment for raster scan and rectangular tile groups in video coding
AU2019414459B2 (en) A video encoder, a video decoder and corresponding methods
BR122022009674A2 (pt) Método implementado por um codificador, dispositivo e aparelho de codificação, sistema e meio para codificação
CN113243110A (zh) 视频译码中的显式地址指示
ES2944451T3 (es) Señalización de identificaciones de subimagen en codificación de vídeo basada en subimagen
US11997291B2 (en) Flexible tiling improvements in video coding
RU2792176C2 (ru) Кодер видео, декодер видео и соответствующие способы