BR112021012649A2 - 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
BR112021012649A2
BR112021012649A2 BR112021012649-0A BR112021012649A BR112021012649A2 BR 112021012649 A2 BR112021012649 A2 BR 112021012649A2 BR 112021012649 A BR112021012649 A BR 112021012649A BR 112021012649 A2 BR112021012649 A2 BR 112021012649A2
Authority
BR
Brazil
Prior art keywords
tile
level
tiles
image
level tiles
Prior art date
Application number
BR112021012649-0A
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 BR112021012649A2 publication Critical patent/BR112021012649A2/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/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/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/129Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
    • 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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/597Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding specially adapted for multi-view video sequence encoding
    • 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

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. 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 de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles. 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 um vídeo relativamente curto 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 das 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 qualidade de vídeo superior, 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 compreendendo: 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; atribuir, pelo processador, os tiles de primeiro nível e os tiles de segundo nível a um ou mais grupos de tiles, tal que cada grupo de tiles contém vários tiles de primeiro nível, uma ou mais sequências consecutivas de tiles de segundo nível onde cada sequência de tiles de segundo nível é dividida a partir de um único tile de primeiro nível ou combinações dos mesmos; 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.
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.
Os mecanismos de fatiamento e de tiling, tais como varredura raster com base em fatiamento e/ou tiling, podem não suportar cada 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.
Um esquema de tiling flexível, incluindo tiles de primeiro nível e tiles de segundo nível, pode ser utilizado para suportar esta funcionalidade.
Os tiles de segundo nível são criados particionando os 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.
Tal esquema de tiling flexível 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.
A presente revelação descreve um mecanismo para integrar grupos de tiles no esquema de tiling flexível.
Um grupo de tiles pode conter os tiles de primeiro nível e/ou conjuntos completos de tiles de segundo nível particionados a partir de um ou mais tiles de primeiro nível.
Esta abordagem evita que os tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos de tiles.
Consequentemente, o mecanismo revelado permite que os tiles de esquema de tiling flexível sejam incluídos em um grupo de tiles, que, por sua vez, permite que ferramentas de codificação sejam aplicadas a vários tiles com base em grupo de tiles.
Ao evitar que os tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos, a complexidade do esquema de tiling flexível resultante com grupos de tiles é reduzida. Como tal, a presente revelação aumenta adicionalmente a funcionalidade tanto do codificador quanto do decodificador, enquanto reduz o uso do recurso de processador e/ou memória.
[0004] Em uma modalidade, a revelação inclui um método implementado em um codificador, o método compreendendo: particionar, por um processador do codificador, uma imagem em uma pluralidade de 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; atribuir, pelo processador, os tiles de primeiro nível e os tiles de segundo nível a um ou mais grupos de tiles, tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível sejam atribuídos a um mesmo grupo de tiles; 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. 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 de tiling, tais como varredura raster com base em fatiamento e/ou tiling, não podem 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. Um esquema de tiling flexível, incluindo tiles de primeiro nível e tiles de segundo nível, pode ser utilizado para suportar esta funcionalidade. Os tiles de segundo nível são criados particionando os 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 tiles de segundo nível contenha uma pluralidade de fatias em uma segunda resolução. Tal esquema de tiling flexível permite que codec suporte uma imagem contendo múltiplas resoluções e, consequentemente, aumente a funcionalidade tanto do codificador quanto do decodificador. A presente revelação descreve um mecanismo para integrar grupos de tiles no esquema de tiling flexível. Um grupo de tiles pode conter tiles de primeiro nível e/ou conjuntos completos de tiles de segundo nível particionados a partir de um ou mais tiles de primeiro nível. Esta abordagem evita que tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos de tiles. Consequentemente, o mecanismo revelado permite que os tiles de esquema de tiling flexível sejam incluídos em um grupo de tiles, que, por sua vez, permite que as ferramentas de codificação sejam aplicadas a vários tiles com base em grupo de tiles. Ao evitar que os tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos, a complexidade do esquema de tiling flexível resultante com grupos de tiles é reduzida. Como tal, a presente revelação aumenta adicionalmente a funcionalidade tanto do codificador quanto do decodificador, enquanto reduz o uso do recurso de processador e/ou memória.
[0005] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em 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.
[0006] 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.
[0007] 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 codificados, de acordo com uma ordem de varredura, e em que a codificação, de acordo com a ordem de varredura inclui: codificar os tiles de primeiro nível na ordem de varredura raster; quando um dos tiles de segundo nível é encontrado, pausar a codificação de ordem de varredura raster dos tiles de primeiro nível; e codificar todos os tiles de segundo nível consecutivos na ordem de varredura raster antes de continuar a codificação de ordem de varredura raster dos tiles de primeiro nível.
[0008] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que todos os tiles de segundo nível particionados de um tile de primeiro nível atual são codificados antes de codificar quaisquer tiles de segundo nível particionados a partir de um tile de segundo nível subsequente.
[0009] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que cada um de um ou mais grupos de tiles são restritos, tal que todos os tiles em um grupo de tiles atribuído cubram uma porção retangular da imagem.
[0010] Em uma modalidade, a revelação inclui um método implementado em um decodificador, o método compreendendo: 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 é adicionalmente particionado em uma pluralidade de tiles de segundo nível, e 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 cada grupo de tiles contém vários tiles de primeiro nível, uma ou mais sequências consecutivas de tiles de segundo nível onde cada sequência de tiles de segundo nível é dividida a partir de um único tile de primeiro nível ou combinações dos mesmos; decodificar, pelo processador, os tiles de primeiro nível e os tiles de segundo nível com base em um ou mais grupos de tiles; e gerar, pelo processador, 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. 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 de tiling, tais como varredura raster com base em fatiamento e/ou 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. Um esquema de tiling flexível, incluindo tiles de primeiro nível e tiles de segundo nível, pode ser utilizado para suportar esta funcionalidade. Os tiles de segundo nível são criados particionando os 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 tiles de segundo nível contenha uma pluralidade de fatias em uma segunda resolução. Tal esquema de tiling flexível permite que codec suporte uma imagem contendo múltiplas resoluções e, consequentemente, aumente a funcionalidade tanto do codificador quanto do decodificador. A presente revelação descreve um mecanismo para integrar grupos de tiles no esquema de tiling flexível. Um grupo de tiles pode conter tiles de primeiro nível e/ou conjuntos completos de tiles de segundo nível particionados a partir de um ou mais tiles de primeiro nível. Esta abordagem evita que tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos de tiles. Consequentemente, o mecanismo revelado permite que os tiles de esquema de tiling flexível sejam incluídos em um grupo de tiles, que, por sua vez, permite que as ferramentas de codificação sejam aplicadas a vários tiles com base em grupo de tiles. Ao evitar que os tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos, a complexidade do esquema de tiling flexível resultante com grupos de tiles é reduzida. Como tal, a presente revelação aumenta adicionalmente a funcionalidade tanto do codificador quanto do decodificador, enquanto reduz o uso do recurso de processador e/ou memória.
[0011] Em uma modalidade, a revelação inclui um método implementado em um decodificador, o método compreendendo: 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 é adicionalmente particionado em uma pluralidade de tiles de segundo nível, e 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 de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles; decodificar, pelo processador, os tiles de primeiro nível e os tiles de segundo nível com base em um ou mais grupos de tiles; e gerar, pelo processador, 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. 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, tais como varredura raster com base em fatiamento e/ou 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. Um esquema de tiling flexível, incluindo tiles de primeiro nível e tiles de segundo nível, pode ser utilizado para suportar esta funcionalidade. Os tiles de segundo nível são criados particionando os 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. Tal esquema de tiling flexível permite que codec suporte uma imagem contendo múltiplas resoluções e, consequentemente, aumente a funcionalidade tanto do codificador quanto do decodificador. A presente revelação descreve um mecanismo para integrar os grupos de tiles no esquema de tiling flexível. Um grupo de tiles pode conter tiles de primeiro nível e/ou conjuntos completos de tiles de segundo nível particionados a partir de um ou mais tiles de primeiro nível. Esta abordagem evita que os tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos de tiles. Consequentemente, o mecanismo revelado permite que os tiles de esquema de tiling flexível sejam incluídos em um grupo de tiles, que, por sua vez, permite que as ferramentas de codificação sejam aplicadas a vários tiles com base em grupo de tiles. Ao evitar que os tiles de segundo nível de um único tile de primeiro nível sejam divididos em diferentes grupos, a complexidade do esquema de tiling flexível resultante com grupos de tiles é reduzida. Como tal, a presente revelação aumenta adicionalmente a funcionalidade tanto do codificador quanto do decodificador, enquanto reduz o uso do recurso de processador e/ou memória.
[0012] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em 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.
[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, em que os tiles de primeiro nível e os tiles de segundo nível são decodificados, de acordo com uma ordem de varredura, e em que a decodificação, de acordo com a ordem de varredura inclui: decodificar os tiles de primeiro nível na ordem de varredura raster; quando um dos tiles de segundo nível é encontrado, pausar a codificação de ordem de varredura raster dos tiles de primeiro nível; e codificar todos os tiles de segundo nível consecutivos na ordem de varredura raster antes de continuar a decodificação de ordem de varredura raster dos tiles de primeiro nível.
[0015] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que todos os tiles de segundo nível particionados de um tile de primeiro nível atual são decodificados antes de decodificar quaisquer tiles de segundo nível particionados a partir de um tile de segundo nível subsequente.
[0016] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que cada um de um ou mais grupos de tiles são restritos, tal que todos os tiles em um grupo de tiles atribuído cobrem uma porção retangular da imagem.
[0017] 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.
[0018] Em uma modalidade, a revelação inclui uma mídia legível por computador não transitória compreendendo um produto de programa de computador para 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.
[0019] 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; um meio de atribuição para atribuir os tiles de primeiro nível e os tiles de segundo nível a um ou mais grupos de tiles, tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles; um meio de codificação para codificação dos tiles de primeiro nível e dos tiles de segundo nível em um fluxo de bits; e um meio de armazenamento para armazenar o fluxo de bits para comunicação em direção a um decodificador.
[0020] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que o codificador é adicionalmente configurado para realizar o método de qualquer um dos aspectos anteriores.
[0021] 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 é adicionalmente particionado em uma pluralidade de tiles de segundo nível, e 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 de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles; um meio de decodificação para decodificação dos tiles de primeiro nível e dos tiles de segundo nível com base em um ou mais grupos de tiles; 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 e nos tiles de segundo nível decodificados.
[0022] Opcionalmente, em qualquer um dos aspectos anteriores, outra implementação do aspecto fornece, em que o decodificador é adicionalmente configurado para realizar o método de qualquer um de qualquer um dos aspectos anteriores.
[0023] Para o propósito 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.
[0024] Estas e outras características serão entendidas mais claramente a partir da seguinte descrição detalhada tomada em conjunto com os desenhos e reivindicações anexos.
BREVE DESCRIÇÃO DOS DESENHOS
[0025] Para uma compreensão mais completa desta revelação, a referência é agora feita à seguinte breve descrição, tomada em relação aos desenhos anexos e descrição detalhada, em que numerais de referência semelhantes representam partes semelhantes.
[0026] A FIG. 1 é um fluxograma de um método de exemplo de codificação de um sinal de vídeo.
[0027] 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.
[0028] A FIG. 3 é um diagrama esquemático que ilustra um codificador de vídeo de exemplo.
[0029] A FIG. 4 é um diagrama esquemático que ilustra um decodificador de vídeo de exemplo.
[0030] A FIG. 5 é um diagrama esquemático que ilustra um fluxo de bits de exemplo contendo uma sequência de vídeo codificada.
[0031] As FIGs. 6A a 6E ilustram um mecanismo de exemplo para criar uma trilha de extração para a combinação de sub-imagens de múltiplas resoluções de diferentes fluxos de bits em uma única imagem para o uso em aplicações de realidade virtual (VR).
[0032] 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.
[0033] As FIGs. 8A a 8D são diagramas esquemáticos ilustrando um esquema de tiling de vídeo flexível de exemplo capaz de suportar múltiplos tiles com diferentes resoluções na mesma imagem.
[0034] A FIG. 9 é um diagrama esquemático de um dispositivo de codificação de vídeo de exemplo.
[0035] A FIG. 10 é um fluxograma de um método de exemplo de codificação de uma imagem utilizando um esquema de tiling flexível.
[0036] A FIG. 11 é um fluxograma de um método de exemplo de decodificação de uma imagem utilizando um esquema de tiling flexível.
[0037] 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
[0038] 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 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 de equivalentes.
[0039] 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 Conjunta de Especialistas em Vídeo (JVET), conjunto de tiles de movimento restrito (MCTS), unidade de transferência máxima (MTU), camada de abstração de rede (NAL), contagem de ordem de imagem (POC), carga útil de sequência de bytes brutos (RBSP), conjunto de parâmetros de sequência (SPS), codificação de vídeo versátil (VVC) e rascunho de trabalho (WD).
[0040] Muitas técnicas de compressão de vídeo podem ser 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 de predição bidirecional (B) de uma imagem podem ser codificados 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 representando 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 que forma o bloco preditivo e os dados residuais indicando a diferença entre o bloco codificado e o bloco preditivo. Um bloco codificado de modo intra é codificado, de acordo com um modo de codificação intra e 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 ser inicialmente organizados 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.
[0041] Para garantir que um vídeo codificado possa ser decodificado com precisão, o vídeo é codificado e decodificado, de acordo com padrões de codificação de vídeo correspondentes. Os padrões de codificação de vídeo incluem Setor de Padronização de União Internacional de Telecomunicações (ITU) (ITU-T) H.261, Organização Internacional para Padronização/Grupos de Especialistas em Imagem em Movimento da Comissão Eletrotécnica Internacional (ISO/IEC) (MPEG)-1 Parte 2, ITU-T H.262 ou ISO/IEC MPEG-2 Parte 2, , ITU-T H.263, ISO/IEC MPEG-4 Parte 2, Codificação de Vídeo Avançada (AVC), também conhecida como ITU-T H.264 ou ISO/IEC MPEG-4 Parte 10, e Codificação de Vídeo de Alta Eficiência (HEVC), também conhecida como ITU-T H.265 ou MPEG-H Parte 2. AVC inclui extensões, tais como
Codificação de Vídeo Escalonável (SVC), Codificação de Vídeo de Várias Visualizações (MVC) e Codificação de Vídeo de Várias Visualizações mais Profundidade (MVC+D), AVC (3D-AVC) e tridimensional (3D). HEVC inclui extensões, tais como HEVC Escalonável (SHVC), HEVC de Várias Visualizações (MV-HEVC) e HEVC 3D (3D-HEVC). A equipe conjunta de especialistas de vídeo (JVET) de ITU-T e ISO/IEC começou a desenvolver um padrão de codificação de vídeo padrão referido como Codificação de Vídeo Versátil (VVC). VVC é incluída em um Rascunho de Trabalho (WD), que inclui JVET-L1001-v5.
[0042] De modo a codificar uma imagem de vídeo, a imagem é primeiramente particionada e as partições são codificadas em um fluxo de bits. Vários esquemas de partição 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 simplicidade, HEVC restringe os codificadores, de modo que apenas fatias regulares, fatias dependentes, tiles, WPP e combinações dos mesmos possam ser usadas 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 máxima de dados 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.
[0043] 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 de limites 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 a comunicação mínima inter-processador ou inter-núcleo. Entretanto, como cada fatia regular é independente, cada fatia está 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 dos limites 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 da paralelização e o objetivo da correspondência de tamanho de MTU pode colocar demandas contraditórias para um esboço em uma imagem.
[0044] As fatias dependentes são similares às fatias regulares, mas têm cabeçalhos de fatia encurtados e permitem o particionamento dos limites 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, que fornecem atraso de ponta a ponta reduzido permitindo que uma parte de uma fatia regular seja enviada para fora antes que a codificação de toda a fatia regular seja concluída.
[0045] Um tile é uma porção particionada de uma imagem criada pelos limites horizontais e verticais que criam colunas e linhas de tile. Os tiles podem ser codificados na ordem de varredura raster (da direita para a esquerda e cima para baixo). A ordem de varredura de CTBs está localizada 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. Similares às fatias regulares, os tiles quebram as dependências de predição na imagem, bem como dependências de decodificação de entropia. Entretanto, os tiles podem não ser incluídos em unidades NAL individuais e, consequentemente, os tiles podem não ser usados para a correspondência de tamanho de MTU. Cada tile pode ser processado por um processador/núcleo, e a comunicação de inter-processador/inter-núcleo utilizada para predição na imagem entre tiles vizinhos de decodificação de unidades de processamento 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 reconstruídas e metadados. Quando mais do que um tiles é incluído em uma fatia, o deslocamento de byte de 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 preenchida: 1) todos os blocos de árvore codificados em uma fatia pertencem ao mesmo tile; e 2) todos os blocos de árvore codificados em um tile pertencem à mesma fatia.
[0046] Em WPP, a imagem é particionada em linhas únicas de CTBs. A decodificação de entropia e 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 anteriores 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. Esta abordagem aparece como uma frente de onda quando representada 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 as linhas de bloco de árvore vizinhas dentro de uma imagem é permitida, a comunicação de inter-processador/inter-núcleo permite que a predição na imagem possa ser substancial. O particionamento de WPP considera 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.
[0047] 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 vetores de movimento associados sejam restritos a apontar para localizações de amostra completa dentro de MCTS e para localizações de amostra parcial que exigem apenas localizações 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 em MCTS. As mensagens de informações aprimoradas suplementares (SEI) de MCTSs temporais podem ser usadas para indicar a existência de MCTSs no fluxo de bits e sinalizar MCTSs. A mensagem SEI de MCTSs fornece informações suplementares que podem ser usadas na extração de sub-fluxo 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 vários conjuntos de informações de extração, cada um definindo vários MCTSs e contendo bytes de carga útil de bytes brutos (RBSP) dos conjuntos de parâmetros de vídeo de substituição (VPSs), conjuntos de parâmetros de sequência (SPSs) e conjuntos de parâmetros de imagem (PPSs) a serem usados durante o processo de extração de sub-fluxo de bits MCTS. Ao extrair um sub-fluxo de bits, de acordo com o processo de extração de sub-fluxo 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 sub-fluxo de bits extraído.
[0048] Os vários esquemas de tiling podem ser utilizados ao particionar uma imagem para 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 paralelização, permitindo que cada grupo de tiles seja atribuído a um processador diferente. Os grupos de tiles podem ser atribuídos na ordem de varredura raster ou podem ser restritos para formar um formato retangular de área dentro de uma imagem. A sinalização do identificador de tile (ID) explícito pode ser usada para suportar tais grupos de tiles. Em alguns sistemas, um ID de tile é sempre atribuído como o mesmo que o índice de tile. A sinalização de ID de tile explícito permite que um ID de tile seja diferente de um índice de tile. Ter a sinalização de ID de tile explícito suporta a extração de MCTS de um fluxo de bits sem ter que atualizar o cabeçalho de grupo de tiles. Deve ser observado que a sinalização de IDs de tile explícito e o uso correspondente como o endereço de um grupo de tiles podem ser específicos para definições e sinalização de estrutura de tile de estilo HEVC. Se uma definição e/ou sinalização de estrutura de tile for modificada, a sinalização de ID de tile, de acordo com os mecanismos de ID de tile explícito pode estar incorreta e/ou inaplicável em alguns exemplos. O agrupamento de tiles e a sinalização de ID de tile explícito podem ser utilizados, por exemplo, 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).
[0049] No vídeo de VR, uma ou mais câmeras podem gravar o ambiente ao redor da(s) câmera(s). Um usuário pode, em seguida, visualizar o vídeo de VR como se o usuário estivesse presente na mesma localização que a câmera. No vídeo de VR, uma imagem abrange todo um ambiente ao redor do usuário. O usuário, em seguida, visualiza uma sub-porção da imagem. Por exemplo, um usuário pode utilizar um display montado na cabeça que muda a sub-porçã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.
[0050] Consequentemente, uma característica distinta 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 de sistemas de vídeo omnidirecionais, por exemplo, através de liberação seletiva dependendo da porta de visualização do usuário (ou quaisquer outros critérios, tais como metadados cronometrados de porta de visualização recomendados). A liberação dependente da porta de visualização pode ser ativada, por exemplo, utilizando empacotamento por região e/ou codificação de vídeo dependente de porta de visualização. A melhoria de desempenho pode resultar em menor largura de banda de transmissão, menor complexidade de transmissão ou ambos em comparação aos outros sistemas de vídeo omnidirecionais ao utilizar a mesma resolução/qualidade de vídeo.
[0051] Uma operação dependente de porta de visualização de exemplo é um método com base em MCTS para alcançar a resolução (5K) de cinco mil amostras (por exemplo, amostras de luma 5120×2560) de resolução de projeção equirretangular (ERP) eficaz com perfil de vídeo OMAF dependente de porta de visualização com base em HEVC. Esta abordagem é descrita em mais detalhes abaixo. Mas, em geral, esta abordagem particiona vídeo de 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 de VR pode, em seguida, encaminhar o(s) grupo(s) de tiles associado(s) à porta de visualização em alta resolução e encaminhar grupos de tiles não visualizados em resolução inferior. Isto permite que o usuário visualize o vídeo de VR em uma resolução alta sem exigir que a imagem inteira seja enviada em alta resolução. As sub-porções não visualizadas são descartadas e, consequentemente, o usuário pode não estar ciente das resoluções inferiores. Entretanto, os grupos de tiles de resolução inferior podem ser exibidos ao usuário se o usuário alterar as portas de visualização. A resolução da nova porta de visualização pode ser, em seguida, aumentada como o vídeo prossegue. De modo a implementar tal sistema, devem ser criadas imagens que contenham tanto os grupos de tiles de alta resolução quanto os grupos de tiles de baixa resolução.
[0052] 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 alta resolução quanto os grupos de tiles de baixa resolução.
[0053] São revelados neste relatório, mecanismos de tiling flexível para suportar a criação de uma imagem com sub-imagens 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 sub- imagens em cada resolução. As sub-imagens de resolução inferior são menores do que as sub-imagens de resolução superior.
De modo a criar uma imagem com múltiplas resoluções, a imagem pode ser particionada em tiles de primeiro nível.
As sub-imagens 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 do que os tiles de primeiro nível.
Consequentemente, os menores tiles de segundo nível podem aceitar diretamente as sub-imagens 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 tiles de diferentes resoluções 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 primeiro nível e os tiles de segundo nível podem, em seguida, ser incluídos em grupos de tiles.
Os grupos de tiles podem ser restritos a incluir um número inteiro de tiles de primeiro nível e/ou uma ou mais sequências consecutivas de tiles de segundo nível onde cada sequência de tiles de segundo nível é dividida a partir de um único tile de primeiro nível.
Esta abordagem pode garantir que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível sejam atribuídos ao mesmo grupo de tiles.
Em outro exemplo particular, uma ordem de varredura é descrita para a codificação do esquema de tiling flexível.
Neste exemplo, os tiles de primeiro nível são codificados na ordem de varredura raster em relação à imagem e/ou limites de grupo de tiles.
Quando um tile de segundo nível é encontrado, A varredura do tile de primeiro nível é pausada.
Uma sequência consecutiva de tiles de segundo nível é, em seguida, varrida na ordem de varredura raster em relação ao tile de primeiro nível a partir do qual tais tiles de segundo nível foram particionados.
A ordem de varredura, em seguida, prossegue para a próxima sequência consecutiva de tiles de segundo nível, se houver.
De outro modo, a varredura do tile de primeiro nível é continuada.
Este processo continua até que o grupo de tiles e/ou imagem seja codificada ou decodificada, dependendo do exemplo.
[0054] 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 de arquivo de vídeo. Um tamanho de arquivo menor permite que o arquivo de vídeo comprimido seja transmitido em direção a um usuário, enquanto reduz 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 permite que o decodificador reconstrua de forma consistente o sinal de vídeo.
[0055] Na etapa 101, o sinal de vídeo é a entrada 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 imagem que, quando visualizados em uma sequência, fornece a impressão visual do movimento. Os quadros contêm pixels que são expressados em termos de luz, referidos neste relatório como componentes de luma (ou amostras de luma) e cor, que são referidos como componentes de croma (ou amostras de cor). Em alguns exemplos, os quadros também podem conter valores de profundidade para suportar a visualização tridimensional.
[0056] 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 ser dividido primeiro 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 para suportar a 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 coloração relativamente homogêneos. Consequentemente, os mecanismos de particionamento variam, dependendo do conteúdo dos quadros de vídeo.
[0057] 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 podem ser utilizadas. A predição inter é projetada para tomar vantagem do fato de que 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 descrito repetidamente 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 novamente 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 através de múltiplos quadros, por exemplo, devido aos objetos em movimento ou movimento da câmera. Como um exemplo particular, um vídeo pode mostrar um automóvel que se move através da tela em 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 a partir das coordenadas de um objeto em um quadro para as coordenadas do objeto em um quadro de referência. Como tal, a predição inter pode codificar um bloco de imagem em um quadro atual como um conjunto de vetores de movimento indicando um deslocamento de um bloco correspondente em um quadro de referência.
[0058] **A predição intra codifica blocos em um quadro comum. A predição intra toma vantagem do fato de que componentes de luma e de croma tendem a se agrupar em um quadro. Por exemplo, uma mancha de verde em uma porção de uma árvore, tende a ser posicionado adjacente às manchas de verde similares. A predição intra emprega os múltiplos modos de predição direcionais (por exemplo, trinta e três em HEVC), um modo planar e um modo de corrente contínua (DC). Os modos direcionais indicam que um bloco atual é similar/o mesmo que as 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 das linhas. O modo planar, em efeito, 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 para suavizar o limite e indica que um bloco é similar/o mesmo que 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 os blocos de imagem como vários valores de modo de predição relacionais em vez dos valores reais. Além disso, os blocos de predição inter podem representar os blocos de imagem como valores de vetor de movimento em vez dos 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 transformadas podem ser aplicadas aos blocos residuais para comprimir adicionalmente o arquivo.
[0059] Na etapa 107, várias técnicas de filtragem podem ser aplicadas. Em HEVC, os filtros são aplicados, de acordo com um esquema de filtragem in-loop. A predição com base em bloco debatida acima, pode resultar na criação de imagens de bloco no decodificador. Além disso, o esquema de predição com base em bloco 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 o filtro de supressão de ruídos, filtros de desblocagem, filtros loop adaptativo e filtros de deslocamento adaptativo à amostra (SAO) aos blocos/quadros. Estes filtros mitigam tais artefatos de blocagem, de modo que o arquivo codificado possa ser reconstruído com precisão. Além disso, estes filtros mitigam artefatos nos blocos de referência reconstruídos, de modo que os artefatos sejam menos suscetíveis de criar artefatos adicionais em blocos subsequentes que são codificados com base nos blocos de referência reconstruídos.
[0060] 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 de sinal de vídeo apropriada no decodificador. Por exemplo, tais dados podem incluir dados de partição, dados de predição, blocos residuais e várias flags que fornecem instruções de codificação para o decodificador. O fluxo de bits pode ser armazenado na memória para transmissão em direção a um decodificador após solicitação. O fluxo de bits também pode ser transmitido por broadcast e/ou multicast em direção a uma pluralidade de decodificadores. A criação do fluxo de bits é um processo iterativo. Consequentemente, as etapas 101, 103, 105, 107 e 109 podem ocorrer contínua e/ou simultaneamente em muitos quadros e blocos. A ordem mostrada na FIG. 1 é apresentada para clareza e facilidade do debate e não é intencionada a limitar o processo de codificação de vídeo a uma ordem particular.
[0061] 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 na sintaxe e dados de vídeo correspondentes. O decodificador emprega os dados de sintaxe a partir do fluxo de bits, para determinar as partições para os quadros na etapa 111. O particionamento deve corresponder 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, tal como selecionar 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. A sinalização das escolhas 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 bits que pode variar dependendo do contexto). A codificação de entropia permite que o codificador descarte quaisquer opções que não são claramente viá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-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-código, pois as palavras-código são tão grandes quanto desejado para indicar de maneira única uma seleção de um pequeno sub-conjunto de opções permitidas como em oposição a indicar de maneira única 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.
[0062] Na etapa 113, o decodificador realiza a decodificação de bloco. Especificamente, o decodificador emprega transformadas 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.
[0063] Na etapa 115, a filtragem é realizada nos quadros do sinal de vídeo reconstruído, de maneira similar à etapa 107 no codificador. Por exemplo, o filtro de supressão de ruídos, 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 visualização por um usuário final.
[0064] A FIG. 2 é um diagrama esquemático de um sistema de codificação e decodificação (codec) de exemplo 200 para codificação de vídeo. Especificamente, o sistema de codec 200 fornece a funcionalidade para suportar a implementação do método operacional 100. O sistema de codec 200 é generalizado para representar os componentes utilizado 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 ao atuar 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 de decodificador 200 gera um sinal de vídeo de saída a partir 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 quantização e escalonamento de transformada 213, um componente de estimação de imagem intra 215, um componente de predição de imagem intra 217, um componente de compensação de movimento 219, um componente de estimação de movimento 221, um componente de escalonamento e transformada inversa 229, um componente de análise de controle de filtro 227, um componente de filtros in-loop 225, um componente de buffer de imagem decodificada 223 e um componente de codificação de aritmética binária adaptativa ao contexto (CABAC) e formatação de cabeçalho 231. Tais componentes são acoplados, como mostrado. Na FIG. 2, as linhas pretas indicam o movimento de dados a serem codificados/decodificados, enquanto as linhas tracejadas indicam o movimento de dados de controle que controla a operação de outros componentes. Os componentes do sistema de codec 200 podem estar 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 agora descritos.
[0065] O sinal de vídeo particionado 201 é uma sequência de vídeo capturada que foi particionada em blocos de pixels por uma árvore de codificação. Uma árvore de codificação emprega vários modos de divisão para subdividir um bloco de pixels em blocos de pixels menores. Estes blocos podem, em seguida, ser subdivididos adicionalmente em blocos menores. 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 sub-porção de uma CTU que contém um bloco de luma, bloco de croma de diferença vermelha (Cr) e um bloco de croma de diferença azul (Cb) junto com 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 de codificador geral 211, o componente de quantização e escalonamento de transformada 213, o componente de estimação de imagem intra 215, o componente de análise de controle de filtro 227 e o componente de estimação de movimento 221 para compressão.
[0066] O componente de controle de codificador geral 211 é configurado para tomar decisões relacionadas à codificação das imagens da sequência de vídeo no fluxo de bits, de acordo com restrições da aplicação. Por exemplo, o componente de controle de codificador geral 211 gerencia a otimização do tamanho de 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 da 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 de buffer à luz da velocidade de transmissão para mitigar problemas de sobrecarga e subexecução do 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 de compressão para aumentar a resolução e aumentar o uso da largura de banda ou diminuir a complexidade de 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 de 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 o componente CABAC e formatação de cabeçalho 231 para serem codificados no fluxo de bits para sinalizar os parâmetros para decodificação no decodificador.
[0067] 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 a 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.
[0068] O componente de estimação de movimento 221 e 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, realiza pelo componente de estimação de movimento 221, é o processo de gerar 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 divididas CBs para a 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 a reconstrução da qualidade de vídeo (por exemplo, quantidade de perda de dados por compressão) com a eficiência de codificação (por exemplo, tamanho da codificação final).
[0069] Em alguns exemplos, o sistema de codec 200 pode calcular valores para posições de pixel sub-inteiro de imagens de referência armazenadas no componente de buffer de imagem decodificada 223. Por exemplo, o sistema de codec de vídeo 200 pode interpolar os 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 o componente CABAC e formatação de cabeçalho 231 para codificação e movimento para o componente de compensação de movimento 219.
[0070] 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 para determinação pelo componente de estimação de movimento 221. Novamente, o componente de estimação de movimento 221 e o componente de compensação de movimento 219 podem ser funcionalmente integrados, em alguns exemplos. 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 pela subtração de 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 componentes de croma quanto para componentes de luma. O bloco preditivo e o bloco residual são encaminhados para o componente de quantização e escalonamento de transformada 213.
[0071] O sinal de vídeo particionado 201 também enviado para o componente de estimação de imagem intra 215 e para o componente de predição de imagem intra 217. Tal como com 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 à 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 de múltiplos modos de predição intra testados. Os modos de predição intra selecionados são, em seguida, encaminhados para o componente CABAC e formatação de cabeçalho 231 para codificação.
[0072] 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 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 codificado original que foram codificados para produzir o bloco codificado, bem como uma taxa de bits (por exemplo, vários 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 que o 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).
[0073] O componente de predição de imagem intra 217 pode gerar um bloco residual a partir do bloco preditivo com base nos modos de predição intra selecionados determinados pelo componente de estimação de imagem intra 215 quando implementado em um codificador ou ler o bloco residual a partir do fluxo de bits quando implementado em um decodificador. O bloco residual inclui a diferença em valores entre o bloco preditivo e o bloco original, representada como uma matriz. O bloco residual é, em seguida, encaminhado para o componente de quantização e escalonamento de transformada 213. O componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 podem operar tanto em componentes de luma quanto de croma.
[0074] O componente de quantização e escalonamento de transformada 213 é configurado para comprimir adicionalmente o bloco residual. O componente de quantização e escalonamento de transformada 213 aplica uma transformada, tal como uma transformada 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 valores de coeficiente de transformada residual. As transformadas de onduleta, transformadas inteiras, transformadas de sub- banda ou outros tipos de transformadas também podem ser usadas. A transformada pode converter as informações residuais de um domínio de valor de pixel para um domínio de transformada, tal como um domínio de frequência. O componente de quantização e escalonamento de transformada 213 também é configurado para dimensionar as informações residuais transformadas, por exemplo, com base em frequência. Tais escalonamentos envolvem 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 quantização e escalonamento 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 pelo ajuste de um parâmetro de quantização. Em alguns exemplos, o componente de quantização e escalonamento 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 o componente CABAC e formatação de cabeçalho 231 a serem codificados no fluxo de bits.
[0075] O componente de escalonamento e transformada inversa 229 aplica uma operação reversa do componente de quantização e escalonamento 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 pode calcular um bloco de referência adicionando o bloco residual novamente 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 mitigar artefatos criados durante o escalonamento, quantização e transformada. Tais artefatos podem de outro modo, causar predição imprecisa (e criar artefatos adicionais) quando os blocos subsequentes são preditos.
[0076] O componente de análise de controle de filtro 227 e o componente de filtros in-loop 225 aplicam-se aos filtros para os blocos residuais e/ou para blocos de imagem reconstruídos. Por exemplo, o bloco residual transformado a partir do componente de escalonamento e transformada inversa 229 pode ser combinado com um bloco de predição correspondente do componente de predição de imagem intra 217 e/ou componente de compensação de movimento 219 para reconstruir o bloco de imagem original. Os filtros podem ser, em seguida, aplicados aos blocos de imagem reconstruídos. Em alguns exemplos, os filtros podem, em vez disso, ser aplicados aos blocos residuais. Tal como 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 o componente CABAC e formatação de cabeçalho 231 como dados de controle de filtro para codificação. O componente de filtros in- loop 225 aplica tais filtros com base nos dados de controle de filtro. Os filtros podem incluir um filtro de desblocagem, um filtro de supressão de ruído, um filtro SAO e um filtro loop adaptativo. Tais filtros podem ser aplicados no domínio espacial/de pixel (por exemplo, em um bloco de pixel reconstruído) ou no domínio de frequência, dependendo do exemplo.
[0077] 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 os blocos reconstruídos e filtrados em direção a um display como parte de um sinal de vídeo de saída. O componente de buffer de imagem decodificada 223 pode ser qualquer dispositivo de memória capaz de armazenar blocos de predição, blocos residuais e/ou blocos de imagem reconstruídos.
[0078] O componente CABAC e formatação de cabeçalho 231 recebe os dados dos vários componentes de sistema de codec 200 e codifica tais dados em um fluxo de bits codificado para transmissão em direção a um decodificador. Especificamente, o componente CABAC e formatação de cabeçalho 231 gera vários cabeçalhos para codificar dados de controle, tais como dados de controle geral e dados de controle de filtro. Além disso, os dados de predição, incluindo predição intra e dados de movimento, bem como dados residuais na forma de dados de coeficiente de transformada quantizados são todos codificados no fluxo de bits. O fluxo de bits final inclui todas as informações desejadas pelo decodificador para reconstruir o sinal de vídeo particionado original 201. Tais informações também podem incluir as tabelas de índice de modo de predição intra (também referidas como tabelas de mapeamento de palavra-código), definições de contextos de codificação para vários blocos, indicações de modos de predição intra mais prováveis, uma indicação de informações de partição, etc. Tais dados podem ser codificados utilizando a codificação de entropia. Por exemplo, as informações podem ser codificadas utilizando a 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. Na codificação de entropia seguinte, 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.
[0079] 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.
[0080] 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 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 quantização e transformada 313 para transformada e quantização dos blocos residuais. O componente de quantização e transformada 313 pode ser substancialmente similar ao componente de quantização e escalonamento de transformada 213. Os blocos residuais transformados e quantizados e os blocos de predição correspondentes (junto com os dados de controle associados) são encaminhados para um componente de codificação de entropia 331 para a codificação em um fluxo de bits. O componente de codificação de entropia 331 pode ser substancialmente similar ao componente CABAC e formatação de cabeçalho 231.
[0081] Os blocos residuais transformados e quantizados e/ou os blocos de predição correspondentes também são encaminhados a partir do componente de quantização e transformada 313 para um componente de quantização e transformada inversa 329 para reconstrução em blocos de referência para o uso pelo componente de compensação de movimento 321. O componente de quantização e transformada inversa 329 pode ser substancialmente similar ao componente de escalonamento e transformada inversa 229. Os filtros in-loop em um componente de filtros in-loop 325 também são aplicados aos blocos residuais e/ou blocos de referência reconstruídos, dependendo do exemplo. O componente de filtros in-loop 325 pode ser substancialmente similar ao componente de análise de controle de filtro 227 e ao componente de filtros in-loop 225. O componente de filtros in-loop 325 pode incluir múltiplos filtros 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 os 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.
[0082] 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, a partir de um codificador 300, e gera um sinal de vídeo de saída reconstruído com base no fluxo de bits para exibição para um usuário final.
[0083] 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-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 geral, dados de controle de filtro, informações de partição, dados de movimento, dados de predição e coeficientes de transformada quantizados a partir dos blocos residuais. Os coeficientes de transformada quantizados são encaminhados para um componente de quantização e transformada inversa 429 para reconstrução em blocos residuais. O componente de quantização e transformada inversa 429 pode ser similar ao componente de quantização e transformada inversa 329.
[0084] 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 a reconstrução em blocos de imagem com base nas 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 os 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 a partir de um bloco de referência para gerar um bloco de predição e aplica um bloco residual ao resultado para reconstruir um bloco de imagem. Os blocos reconstruídos resultantes também podem ser encaminhados através do componente de filtros in-loop 425 para o componente de buffer de imagem decodificada 423. O componente de buffer de imagem decodificada 423 continua a armazenar os blocos de imagem reconstruídos adicionais, que podem ser reconstruídos em quadros através de 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.
[0085] 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 do método 100 para o uso por um decodificador na etapa 111.
[0086] 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çalho de grupo de tiles 514 e dados de imagem 520. Uma SPS 510 contém dados de sequência comuns a todos as imagens na sequência de vídeo contida no fluxo de bits 500. Tais dados podem incluir o tamanho da imagem, profundidade de bits, parâmetros de ferramenta de codificação, restrições de taxa de bits, etc. A PPS 512 contém parâmetros que são específicos para uma ou mais imagens correspondentes.
Consequentemente, cada imagem em uma sequência de vídeo pode se referir a uma PPS 512. A 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 específicos da imagem (por exemplo, controles de filtro), etc. O cabeçalho de grupo de tiles 514 contém parâmetros que são específicos para 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 informações de grupo de tiles, contagens de ordem de imagem (POCs), lista de imagens de referência, pesos de predição, pontos de entrada de tile, parâmetros de desblocagem, etc. Deve ser observado que alguns sistemas referem-se ao cabeçalho de grupo de tiles 514 como um cabeçalho de fatia e usam tais informações para suportar fatias em vez dos grupos de tiles.
[0087] Os dados de imagem 520 contém dados de vídeo codificados, de acordo com predição inter e/ou predição intra bem como dados residuais transformados e quantizados correspondentes. Tais dados de imagem 520 são classificados, de acordo com 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 nas árvores de codificação. Os blocos de codificação podem ser, em seguida, codificados/decodificados, de acordo com os mecanismos de predição. Uma imagem/fotografia pode conter um ou mais tiles 523.
[0088] Um tile 523 é uma porção particionada de uma imagem criada pelos limites horizontais e verticais. Os tiles 523 podem ser retangulares e/ou quadrados. Especificamente, um tile 523 inclui quatro lados que são conectados nos ângulos direitos. Os quatro lados incluem dois pares de lados paralelos. Além disso, os lados em um par de lados paralelos são de comprimento igual. 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 são de comprimento igual. Uma imagem pode ser particionada em linhas e colunas de tiles 523. Uma linha de tile é um conjunto de tiles 523 posicionado em uma maneira horizontalmente adjacente para criar uma linha contínua do limite esquerdo para o limite direito de uma imagem (ou vice-versa). Uma coluna de tiles é um conjunto de tiles 523 posicionado em uma maneira verticalmente adjacente para criar uma linha contínua do limite superior para o limite inferior da imagem (ou vice-versa). Os tiles 523 podem ou não podem permitir a predição com base em outros tiles 523, dependendo do exemplo. Cada tile 523 pode ter um único índice de tile 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 a direita e de cima para baixo. Deve ser observado que, em alguns exemplos, os tiles 523 também podem ser identificadores (IDs) de tile atribuídos. Um ID de tile é um identificador atribuído que pode ser usado para distinguir um tile 523 de outro. Os cálculos podem utilizar IDs de tile, em vez de índices de tile em alguns exemplos. Além disso, 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 os 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.
[0089] As FIGs. 6A a 6E que ilustram um mecanismo de exemplo 600 para criar uma trilha de extração 610 para combinação de sub-imagens de múltiplas resoluções a partir 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 caso de uso de exemplo 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.
[0090] Em VR, apenas uma porção de vídeo é exibida para um usuário. Por exemplo, o vídeo de 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 de VR. O usuário pode apontar 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 selecionada pelo usuário do vídeo de VR a qualquer momento. Esta abordagem imita as percepções de usuário e, consequentemente, faz com que o usuário experimente um ambiente virtual em uma maneira que imita um ambiente real. Um dos problemas com esta abordagem é que o vídeo de VR inteiro pode ser transmitido para o usuário, mas apenas uma porta de visualização do vídeo atual é realmente usada e o restante é descartado. De modo a aumenta a eficiência da sinalização, para aplicações de transmissão, a porta de visualização do usuário atual 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 a porta de visualização que provavelmente serão visualizadas pelo usuário. Neste caso, o usuário seleciona uma nova porta de visualização, o conteúdo da resolução mais baixa 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.
[0091] 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 na 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 posição de tile 601 e 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 com o passar do tempo em uma resolução correspondente. Cada sequência MCTS codificada é armazenada como uma trilha de sub-imagem ou uma trilha de tile. O mecanismo 600 pode, em seguida, usar as imagens para criar segmentos para suportar a seleção MCTS adaptativa à porta de visualização. Por exemplo, cada faixa de orientações de visualização que fazem com que uma seleção diferente de resoluções MCTS mais alta em mais baixa seja considerada. No exemplo ilustrado, quatro tiles 601 contendo MCTSs na primeira resolução 611 e quatro tiles 603 contendo MCTSs na segunda resolução 612 são obtidos.
[0092] 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 sombreamento 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 a partir da primeira resolução 611 e 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 de 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.
[0093] No exemplo mostrado, cada seleção de tiles 603 encapsulando o conteúdo de fluxo de bits da segunda 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 de projeção equirretangular (ERP). No exemplo apresentado, os fluxos de bits resolvido a partir das trilhas de extração 610 têm resolução 3200×2560. Consequentemente, um decodificador com capacidade de quatro mil amostras (4K) pode decodificar o conteúdo onde a porta de visualização é extraída de um fluxo de bits codificado com resolução de cinco mil amostras 5K (5120×2560).
[0094] 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 de cima de uma imagem para a parte de baixo da imagem. Do mesmo modo, as linhas de tiles estendem-se da parte esquerda da imagem para a parte direita da imagem. Enquanto tal estrutura pode ser simplesmente definida, esta estrutura não pode suportar eficazmente o avanço nos casos de uso, tais como o caso de uso descrito pelo mecanismo 600. No exemplo mostrado, números de linhas diferentes 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 um. Esta abordagem é ineficaz e computacionalmente complexa.
[0095] A presente revelação inclui um esquema de tiling flexível, como descrito abaixo, que não exige tiles 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 tiles menores que podem ser, cada um, diretamente mapeados para tiles 603 em uma segunda resolução 612. Este mapeamento direto é mais eficaz como tal método não exige que os tiles sejam reescritos/corrigidos novamente quando diferentes resoluções são combinadas como descrito acima.
[0096] 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 caso de uso de exemplo do 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 de 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 falando 701 e outros participantes 703. O participante falando 701 é exibido em uma primeira resolução mais alta/maior e os outros participantes 703 são exibidos em uma segunda resolução mais baixa/menor. 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 esquerdo e um direito. O tile direito é, em seguida, reescrito/corrigido novamente para incluir três linhas. Tal correção resulta 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 tiles em fluxos de bits de sub-imagem associados aos outros participantes 703. Desta maneira, o participante falando 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 a partir do primeiro tile sem reescrever/corrigir.
[0097] As FIGs. 8A a 8D 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 mais eficaz 600 e aplicação 700. 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. O resultado do esquema de tiling de vídeo flexível 800 pode ser armazenado em um fluxo de bits 500 para transmissão entre o codificador e o decodificador.
[0098] Como mostrado na FIG. 8A, uma imagem (por exemplo,
quadro, imagem, etc.) pode ser particionada em tiles de primeiro nível 801, também conhecidos 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 ser, em seguida, utilizados para criar uma imagem com sub-imagens codificadas em múltiplas resoluções. Um tile de primeiro nível 801 é um tile gerado pelo particionamento completo de uma imagem em um conjunto de colunas e um conjunto de linhas. Um tile de segundo nível 803 é um tile gerado pelo particionamento de um tile de primeiro nível 801.
[0099] 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 do 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 do que os tiles de primeiro nível 801. Consequentemente, os tiles de segundo nível 803 menores podem 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 diferente sejam dinamicamente corrigidos 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.
[0100] 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 ser, em seguida, restritos para que cada um contenha uma única fatia retangular de dados de imagem (por exemplo, na resolução mais baixa). Uma fatia retangular é uma fatia restrita para manter uma forma retangular e é, consequentemente,
codificada com base em limites 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 uma forma retangular). Uma fatia é uma região espacialmente distinta de uma imagem/quadro que é codificado 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 tiles de segundo nível 803 pode ser sinalizada em um conjunto de parâmetros em um fluxo de bits, tal como uma PPS associada a uma imagem particionada para criar os tiles. Em um exemplo, uma indicação de divisão, tal como uma flag, 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 tiles de segundo nível e um número de linhas de tiles de saegundo nível.
[0101] Em outro exemplo, os tiles de primeiro nível 801 e os tiles de segundo nível 803 podem ser atribuídos a grupos de tiles. Tais grupos de tiles podem ser restritos de modo que todos os tiles em um grupo de tiles correspondentes sejam restritos a cobrir uma região retangular da imagem (por exemplo, ao contrário de 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, o procedimento para adicionar cada tile na linha até que o limite da imagem esquerda da linha atual seja alcançado, o procedimento para o limite direito da próxima linha, e adicionar cada tile na próxima linha, etc. até que um tile final seja alcançado. Esta abordagem pode resultar em formas não retangulares que se estendem através da imagem. Tais formas podem não ser úteis para criar 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, incluem quatro lados conectados nos ângulos direitos). 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.
[0102] Em outro exemplo, os dados indicando explicitamente um número de colunas de tiles de segundo nível e um número de linhas de tiles de segundo nível podem ser omitidos de um fluxo de bits quando uma largura de tile de primeiro nível é menor do que duas vezes um limite de largura mínimo e uma altura de tile de primeiro nível é menor do que duas vezes um limite de altura mínimo. Isto acontece pelo fato de que um tile de primeiro nível 801 que atende tais condições, pode não ser dividido em mais do que 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 que 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 do que um limite de largura mínimo e uma altura de tile de primeiro nível é menor do que um limite de altura mínimo. Isto acontece 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.
[0103] Em outro aspecto, o esquema de tiling de vídeo flexível 800 pode utilizar grupos de tiles 805 como mostrado na FIG. 8C. Os grupos de tiles 805 são representados como delimitado por linhas em negrito. A imagem é particionada em tiles de primeiro nível 801. Um subconjunto dos tiles de primeiro nível 801 é particionado em tiles de segundo nível 803. Os tiles de primeiro nível 801 e os tiles de segundo nível 803 podem ser, em seguida, atribuídos aos grupos de tiles 805. Um grupo de tiles 805 é um conjunto de tiles relacionado 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. Um grupo de tiles 805 pode ser gerado como um grupo de tiles de varredura raster ou um grupo de tiles retangular. Um grupo de tiles de varredura raster contém tiles atribuídos na ordem de varredura raster, que procede da esquerda para a direita e de cima para baixo. Por exemplo, a ordem de varredura raster procede de um primeiro tile em direção a um limite de imagem direito, em seguida, procede de um limite de imagem esquerdo em uma próxima linha em direção ao limite de imagem direito, etc., até que um último tile seja alcançado. Ao contrário, um grupo de tiles retangular contém uma sub-porção da imagem retangular. Os grupos de tiles 805 são grupos de tiles retangulares, mas os de varredura raster também são usados em alguns exemplos.
[0104] Em alguns aspectos, os tiles de primeiro nível 801 e os tiles de segundo nível 803 podem ser atribuídos a grupos de tiles 805, de modo que cada grupo de tiles 805 contenha vários tiles de primeiro nível 801 ou uma ou mais sequências consecutivas de tiles de segundo nível 803. Como usado neste relatório, uma sequência de tiles de segundo nível 803 é um grupo de tiles de segundo nível 803 dividido de um único tile de primeiro nível 801 e, consequentemente, têm índices de tile consecutivos. Esta abordagem garante que todos os tiles de segundo nível 803 criados a partir de um único tile de primeiro nível 801 sejam atribuídos ao mesmo grupo de tiles 805. No exemplo representado na FIG. 8C, um grupo de tiles 805 contém quatro tiles de primeiro nível 801 e quatro outros grupos de tiles 805, cada um, contêm tiles de segundo nível 803 divididos de um único tile de primeiro nível 801. Entretanto, muitas combinações de tiles e grupos de tiles 805 podem ser usadas dependendo do tipo de vídeo a ser codificado e decodificado.
[0105] Em outro aspecto, o esquema de tiling de vídeo flexível 800 pode utilizar uma ordem de varredura 807, como mostrado na FIG. 8D. Uma ordem de varredura 807 é uma ordem onde os tiles são codificados em um codificador e/ou decodificados em um decodificador ou um decodificador de referência hipotético (em um codificador), dependendo do exemplo. Na ordem de varredura 807 mostrada, os tiles de primeiro nível 801 são codificadas na ordem de varredura raster. Quando um dos tiles de segundo nível 803 é encontrado, a codificação de ordem de varredura raster dos tiles de primeiro nível 801 é pausada. Todos os tiles de segundo nível consecutivos 803 são, em seguida, codificados na ordem de varredura raster antes de continuar a codificação de ordem de varredura raster dos tiles de primeiro nível 801. Este processo continua até que todos os tiles sejam codificados. No exemplo mostrado, um tile de segundo nível 803 classificado como tile 1 é encontrado primeiro. Consequentemente, a codificação de ordem de varredura raster dos tiles de primeiro nível 801 é pausada e os tiles de segundo nível consecutivos 803 classificados como tile 1 e 2 são codificados. Quando todos os tiles de segundo nível consecutivos 803 são codificados, a codificação de ordem de varredura raster dos tiles de primeiro nível 801 continua. Consequentemente, os tiles de primeiro nível 801 classificados como tile 3 e 4 são, em seguida, codificados. Um tile de segundo nível 803 classificado como tile 5 é encontrado. Os tiles de segundo nível consecutivos 803 são, em seguida, codificados. Como tal, os tiles classificados como 5 a 8 são codificados. Quando todos os tiles de segundo nível consecutivos 803 são codificados, a codificação de ordem de varredura raster dos tiles de primeiro nível 801 continua novamente. Isto resulta na codificação de tiles de primeiro nível 801 classificados como tile 9 e 10. Um tile de segundo nível 803 classificado como 11 é encontrado. Os tiles de segundo nível consecutivos 803 são, em seguida, codificados. Como tal, os tiles classificados como 11 e 12 são codificados. Em termos mais formais, os tiles de primeiro nível 801 são codificados na ordem de varredura raster em relação aos limites da imagem e/ou grupo de tiles. Além disso, todos os tiles de segundo nível 803 particionados a partir de um tile de primeiro nível atual 801 (por exemplo, uma sequência de tiles de segundo nível consecutivos 803) são codificados antes da codificação de quaisquer tiles de segundo nível 803 particionados a partir de um tile de segundo nível subsequente 803. Além disso, todos os tiles de segundo nível 803 particionados a partir do tile de primeiro nível atual 801 são codificados na ordem de varredura raster em relação aos limites do tile de primeiro nível atual
801.
[0106] Como descrito acima, um esquema de tiling de vídeo flexível 800 suporta sub-imagens 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 sinalização e codificação de tiles na codificação de vídeo que particiona imagens em uma maneira que é mais flexível que o esquema de tiling em HEVC. Mais especificamente, esta revelação descreve alguns esquemas de tiling em que colunas de tile pode não se estender uniformemente de cima para baixo de uma imagem codificada e, do mesmo modo, linhas de tile podem não se estender uniformemente da esquerda para a direita de uma imagem codificada.
[0107] 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, dois até quatro participantes podem ser posicionados abaixo de um participante em alguns casos, que pode ser suportado pela divisão de 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.
[0108] Por exemplo, a estrutura de tile pode ser relaxada como a seguir. Os tiles na mesma imagem não são exigidos para serem um número de linhas de tile particular. Além disso, os tiles na mesma imagem não são exigidos para serem 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. Uma flag pode ser sinalizada 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 de tile flexível pode ser limitada aos tiles de segundo nível apenas 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 em uma maneira similar à criação de tiles de segundo nível a partir dos tiles de primeiro nível.
[0109] Nos exemplos anterior, uma imagem pode conter zero ou mais tiles de primeiro nível que não são divididos adicionalmente e zero ou mais tiles de segundo nível. Um tile de primeiro nível que foi dividido adicionalmente pode existir apenas conceitualmente e pode não ser contado no número de tiles na imagem total. Uma ordem de varredura de exemplo é especificada como a seguir. Para simplicidade, um grupo de tiles pode ser restrito para conter vários tiles de primeiro nível completos ou um subconjunto completo de um tile de primeiro nível. Os tiles de primeiro nível podem ser ordenados, de acordo com uma varredura raster de tile de uma imagem. Quando um tile de primeiro nível que foi dividido adicionalmente é referenciado, o conjunto de tiles de segundo nível resultante de tal divisão pode ser coletivamente referenciado. Os tiles de segundo nível de qualquer tile de primeiro nível atual podem ser referenciados antes da referência de quaisquer tiles de segundo nível de um tile de primeiro nível subsequente que sucede o tile de primeiro nível atual. Os tiles de segundo nível de um tile de primeiro nível atual são referenciados na ordem de varredura raster dentro do tile de primeiro nível atual. CTUs dentro de qualquer tile atual podem ser referenciadas na ordem de varredura raster de CTU dentro do tile atual.
[0110] Para simplicidade, 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. Em tais exemplos, pode não ser necessário sinalizar uma flag que especifica se as colunas de tile de nível dois e linhas de tile de nível dois são ou não uniformes. Além disso, pode não ser necessário para os elementos de sintaxe especificar altura de linha de tile e largura de linha de tile. Em alguns exemplos, os tiles de primeiro nível podem ser restritos para sempre usar um tamanho uniforme para colunas de tile e linhas de tile. Em tais exemplos, pode não ser necessário sinalizar uma flag que especifica se as colunas de tile de nível um e linha de tiles de nível um são ou não uniformes. Além disso, pode não ser necessário para elementos de sintaxe especificar a altura de linha de tile e a largura de linha de tile. Em outro exemplo, os tiles de primeiro nível e os tiles de segundo nível podem ser restritos para sempre usar colunas de tile e linhas de tile de tamanho uniforme. Em tais exemplos, pode não ser necessário sinalizar uma flag que especifica se as colunas e linhas de tile de nível um e nível dois são uniformes ou não. Além disso, pode não ser necessário para elementos de sintaxe que especificam a altura de linha de tile e a largura de linha de tile.
[0111] A derivação das localizações, tamanhos, índices de tile e ordem de varredura de tiles flexíveis definidos por esta abordagem é descrita abaixo. Em alguns exemplos, quando tal estrutura de tile flexível é usada, um grupo de tiles pode conter apenas vários tiles de primeiro nível completos ou apenas uma sequência de tiles de segundo nível completos consecutiva de um único tile de primeiro nível. Além disso, 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 que originam da divisão do mesmo tile de primeiro nível devem ser 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 todos os tiles juntos 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 todos os tiles juntos pertencem a um grupo de tiles que cobre uma região retangular de uma imagem.
[0112] 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 de 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 deste tiles pode ser referido como um tile de primeiro nível. Uma flag pode ser sinalizada para especificar se qualquer um dos tiles de primeiro nível pode ser dividido adicionalmente. Esta flag pode não estar presente quando a largura de cada tile de primeiro nível não é do que duas vezes a largura de tile mínima, e a altura de cada tile de primeiro nível não é maior do que duas vezes a altura de tile mínima. Quando não está presente, o valor da flag é inferido como igual a zero.
[0113] Em um exemplo, o seguinte se aplica para cada tile de primeiro nível. Uma flag pode ser sinalizada para especificar se um tile de primeiro nível é dividido adicionalmente ou não em uma ou mais colunas de tile e uma ou mais linhas de tile. A presença da flag pode ser restrita como a seguir. Se a largura de tile de primeiro nível for maior do que a largura de tile mínima ou se a altura de tile de primeiro nível for maior do que a altura de tile mínima, a flag é presente/sinalizada. De outro modo, a flag não está presente e o valor da flag é inferido como igual a zero indicando que o tile de primeiro nível não é dividido adicionalmente.
[0114] 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 o número de linhas de tile podem ser restritos como a seguir. Quando a largura de tile de primeiro nível é menor do que duas vezes a largura de tile mínima, o número de colunas de tile pode não ser sinalizado e o valor de 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 pode ser zero e o número de colunas de tile é o valor do elemento de sintaxe mais um. Esta abordagem pode comprimir adicionalmente os dados de sinalização. Quando a altura de tile de primeiro nível é menor do 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 aos tiles de segundo nível apenas, de modo que nenhuma divisão adicional de qualquer tile de segundo nível é permitida. Em outros exemplos, a divisão adicional de tiles de segundo nível pode ser aplicada em uma maneira similar à divisão de um tile de primeiro nível em tiles de segundo nível.
[0115] Em um exemplo, a sinalização de uma estrutura de tile flexível pode ser como a seguir. Quando uma imagem contém mais do que um tile, um sinal, tal como uma flag, pode ser utilizado em um conjunto de parâmetros que é direta ou indiretamente referido por um grupo de tiles correspondente. A flag 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). A flag pode ser chamada 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 o número de tiles na imagem (NumTilesInPic) é igual a num_tiles_minus2 + 2. Isto pode resultar na economia de bits durante a sinalização, visto que uma imagem pode ser considerada como um tile para padrão. Para cada tile, excluindo o último, os endereços do primeiro bloco de codificação (por exemplo, CTU) e do último bloco de codificação do tile são sinalizados. 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 último blocos de codificação do último tile pode não ser sinalizado e pode, em vez disso, ser derivado com base no tamanho da imagem em amostras de luma e na agregação de todos os outros tiles na imagem.
[0116] Em um exemplo, para cada tile, excluindo o último, em vez de sinalizar o endereço 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 sinalizados. 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 sinalizados. 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, uma flag pode ser sinalizada para especificar se deve posicionar o tile imediatamente para a direita ou imediatamente abaixo do tile anterior. Esta flag pode não estar presente se o tile puder apenas estar à direita ou puder apenas estar abaixo do tile anterior. O deslocamento superior esquerdo do primeiro tile pode sempre ser definido para ser a origem/parte superior esquerda da imagem (por exemplo, x = zero e y = zero).
[0117] Para a eficiência da sinalização, um conjunto de tamanhos únicos de tiles (por exemplo, largura e altura) pode ser sinalizado. A lista de tamanhos únicos de tiles pode ser referida pelo índice do loop que inclui a sinalização de cada tamanho de tile. Em alguns exemplos, as localizações e tamanhos do tile como derivados a partir da estrutura de tile sinalizada deve restringir a partição para garantir que nenhuma lacuna e nenhuma sobreposição ocorra entre quaisquer tiles.
[0118] As seguintes restrições também podem ser aplicadas. Os formatos do tile podem ser exigidos como retangulares (por exemplo, sem formatos de varredura raster). A unidade de 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 codificação de um bloco de codificação atual (por exemplo, CTU) que não está no canto esquerdo 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 codificação de um bloco de codificação atual (por exemplo, CTU) que não está no canto 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 three e idx four) um dos seguintes é verdadeiro. Os dois tiles compartilham o canto vertical e/ou quando o primeiro tile tem a localização esquerda superior em (Xa, Ya) com tamanho (Wa e Ha representando a largura e altura) e quando o segundo tile tem a localização esquerda superior em (Xb, Yb), então Yb = Ya + Ha.
[0119] A seguintes restrições também podem ser aplicadas. Quando um tile tem mais do que um tile vizinho esquerdo, a altura do tile deve ser igual à soma das alturas de todos os tiles vizinhos esquerdos. Quando um tile tem mais do que um tile vizinho direito, a altura do tile deve ser igual à soma das alturas de todos os tiles vizinhos esquerdos. Quando um tile tem mais do que um tile vizinho superior, a largura do tile deve ser igual à soma das larguras de todos os tiles vizinhos superiores. Quando um tile tem mais do que um tile vizinho inferior, a largura do tile deve ser igual à soma das larguras de todos os tiles vizinhos inferiores. Além disso, a sinalização dos IDs de tile, incluindo os mapeamentos entre índice de tile e ID de tile, pode ser com base no número de tiles em uma imagem. Consequentemente, o mapeamento pode ser com base no número de tiles em uma imagem em vez de ser com base em colunas de tile e linhas de tile. Por exemplo, um loop pode ser utilizado para que cada índice de tile seja atribuído a um ID de tile (por exemplo, a partir do primeiro índice para o último índice onde o primeiro índice é zero e o último índice é o número de tiles em uma imagem menos um).
[0120] Os seguintes são uma modalidade do exemplo específico dos aspectos mencionados acima. O raster de CTB e processo de varredura de tile pode ser como a seguir. A lista ColWidth[i] para i varia de 0 a num_level1_tile_columns_minus1, inclusive, especificando a largura do iésimo tile de primeiro nível coluna 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_column_width_minus1[ i ] + 1 ColWidth[ num_tile_level1_columns_minus1 ] −= ColWidth[ i ] } }
[0121] A lista RowHeight[j] para j varia de 0 a num_level1_tile_rows_minus1, inclusive, especificando a altura do jésima linha de tile em 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_height_minus1[ j ] + 1 RowHeight[ num_level1_tile_rows_minus1 ] −= RowHeight[ j ] } }
[0122] A lista colBd[i] para i varia de 0 a num_level1_tile_columns_minus1 + 1, inclusive, especificando a localização do iésimo limite de 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)
[0123] A lista rowBd[j] para j varia de 0 a num_level1_tile_rows_minus1 + 1, inclusive, especificando a localização do jésimo limite 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)
[0124] A variável NumTilesInPic, especificando o número de tiles em uma imagem referindo-se à 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ésimo limite de coluna de tile em unidades de CTBs, a localização do iésimo limite 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, podem ser 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 { 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
[0125] 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 / PicWidthInCtbsY tileFound = 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 ] }
[0126] 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
[0127] 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, e a lista FirstCtbAddrTs[tileIdx] para tileIdx varia de zero a NumTilesInPic − 1, inclusive, especificando a conversão de um ID de tile para o endereço de CTB em varredura de tile do primeiro CTB no tile podem ser derivadas 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 FirstCtbAddrTs[ tileIdx ] = CtbAddrRsToTs[ TileColBd[ tileIdx ] ] * PicWidthInCtbsY + TileColBd[ tileI dx ] ] }
[0128] 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 ]
[0129] Uma sintaxe de conjunto de parâmetros de imagem de exemplo RBSP é 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( ) }
[0130] As semânticas do conjunto de parâmetros de imagem de exemplo RBSP 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 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 do que um. O uniform_level1_tile_spacing_flag é definido igual a um para especificar que os limites da coluna de tile de nível 1 e, do mesmo modo, os limites da linha de tile de nível 1 são distribuídos uniformemente através da imagem. O uniforme_level1_tile_spacing_flag é igual a zero para especificar que os limites de coluna de tile de nível um e, do mesmo modo, limites de linhas de tile de nível um não são distribuídos uniformemente através da 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.
[0131] O level1_tile_coluna_largura_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 de nível dois. O level2_tile_split_flag[i] 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.
[0132] Quando level2_tile_split_flag[i] é igual a um, o valor de (num_level2_tile_columns_minus1[i] + 1) * (num_level2_tile_rows_minus1[i] + 1) deve ser maior do que um. Uma imagem pode conter zero ou mais tiles de nível um que têm level2_tile_split_flag[i] igual a zero e zero ou mais tiles de nível dois. Um tile de nível um que tem level2_tile_split_flag[i] igual a zero pode não ser contado no número de tiles total em uma imagem. Quando tal tile é referenciado, o conjunto de tiles de nível dois que é resultado de tal divisão pode ser coletivamente referenciado.
[0133] As seguintes variáveis são derivadas invocando o raster de CTB e o processo de conversão de varredura de tile: 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, que especifica o número de tiles em uma imagem referindo-se à 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ésimo limite 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ésimo limite 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 em varredura de tile do primeiro CTB no tile.
[0134] As semânticas de cabeçalho de grupo de tiles de exemplo são como a seguir. Um grupo de tiles pode conter apenas um número de tiles de nível um completos ou apenas um número de tiles de nível dois completos de um único tile de nível um. 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 o endereço de CTB em 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.
[0135] O seguinte é uma segunda modalidade de exemplo específico dos aspectos mencionados acima. Um exemplo raster de CTB e processo de varredura de tile é como a seguir. A variável NumTilesInPic, que especifica o número de tiles em uma imagem referindo-se à 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ésimo limite de coluna de tile em unidades de CTBs, a localização do iésimo limite 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
[0136] Uma sintaxe de conjunto de parâmetros de imagem de exemplo RBSP é 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_column_width_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( ) }
[0137] As semânticas de conjunto de parâmetros de imagem de exemplo RBSP são como a seguir. O uniform_level2_tile_spacing_flag[i] é definido igual a um para especificar que os limites de coluna de tile de nível dois do iésimo tile de nível um e, do mesmo modo, os limites de linha de tile de nível dois do iésimo tile de nível um, são distribuídos uniformemente através da imagem. O uniform_level2_tile_spacing_flag[i] pode ser definido igual a zero para especificar que os limites de coluna de tile de nível dois do iésimo tile de nível um e, do mesmo modo, os limites de linha de tile de nível dois do iésimo tile de nível um, não são distribuídos uniformemente através da 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.
[0138] O seguinte é uma terceira modalidade de exemplo específico dos aspectos mencionados acima. Um raster de CTB e processo de varredura de tile é como a seguir. A lista ColWidth[i] para i varia de zero a num_level1_tile_columns_minus1, inclusive, especificando a largura da iésima primeira coluna de tile de nível em unidades de CTBs, pode ser derivada como a seguir: 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 )
[0139] A lista RowHeight[j] para j varia de zero a num_level1_tile_rows_minus1, inclusive, especificando a altura da jésima linha de tile em unidades de CTBs pode ser derivada como a seguir: 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 )
[0140] Uma sintaxe de conjunto de parâmetros de imagem de exemplo RBSP é 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) 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( ) }
[0141] O seguinte é uma quarta modalidade de exemplo específico dos aspectos mencionados acima. Uma sintaxe de conjunto de parâmetros de imagem de exemplo RBSP é 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( )
}
[0142] Uma semântica de conjunto de parâmetros de imagem de exemplo RBSP é como a seguir. A conformidade de 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 amostras de luma. O valor MinTileHeight especifica a altura de tile mínima e deve ser igual a sessenta e quatro amostras de luma. O valor de largura de tile mínima e altura de tile mínima pode mudar, de acordo com a definição de perfil e nível. A variável Level1TilesMayBeFurtherSplit pode ser derivada como a seguir: Level1TilesMayFurtherBeSplit = 0 for ( i = 0, ! Level1TilesMayFurtherBeSplit && i = 0; i < NumLevel1Tiles; i++ ) if ( ( ColWidth[ i ] * CtbSizeY >= ( 2 * MinTileWidth ) ) | | ( RowHeight[ i ] * CtbSizeY >= ( 2 * MinTileHeight ) )) Level1TilesMayFurtherBeSplit = 1
[0143] 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.
[0144] O seguinte é uma quinta modalidade de exemplo específico dos aspectos mencionados acima. Cada localização e tamanho de tile pode ser sinalizada. A sintaxe para suportar tal sinalização de estrutura de tile pode ser como tabulada abaixo. O tile_top_left_address[i] e tile_bottom_right_address[i] são o índice 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 o 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( ) }
[0145] Cada localização e tamanho de tile podem ser sinalizados. A sintaxe para suportar tal sinalização de estrutura de tile pode ser como tabulada 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 do tile e a altura do tile especificam o tamanho do tile. Alguns bits podem ser economizados ao sinalizar estes 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( ) }
[0146] 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( ) }
[0147] 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, uma flag pode ser sinalizada para especificar se deve colocar o tile imediatamente à direita ou imediatamente abaixo do tile anterior. Esta flag pode não estar presente se o tile puder apenas estar à direta ou puder apenas estar abaixo do tile atual.
[0148] 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 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 = falso Para i > 0, o seguinte se aplica: Deixar o valor isRight ser definido como a seguir: se runningWidth + tile_width[i] <= PictureWidth, então isRight = = 1 senão, isRight = = 0 Deixar o valor isBelow ser definido como a seguir: se runningHeight + tile_height[i] <= PictureHeight, então isBelow = = 1 senão, isBelow = = 0 Se isRight = = 1 && isBelow = = 1, então TilePositionCannotBeInferred = verdadeiro 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 (isto é, 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 maxWidth é definido igual a runningWidth runningHeight é igual a tile_y_offset[i] + tile_height[i] senão (isto é, right_tile_flag[i] = = 0), o seguinte se aplica: runningHeight = runningHeight + tile_height[i] se runningHeight > maxHeight, então maxHeight é definido igual a runningHeight runningWidth é igual a tile_x_offset[i] + tile_width[i]
[0149] 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( ) }
[0150] 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( ) }
[0151] Para a economia de bits de sinalização adicional, o número de tamanho único de tile pode ser sinalizado para suportar a tabulação do tamanho de tile de unidade. O tamanho de tile pode ser, em seguida, referenciado apenas pelo í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( ) }
[0152] O seguinte é uma sexta modalidade de exemplo específico dos aspectos mencionados acima. Um raster de CTB e processo de varredura de tile de exemplo é como a seguir. 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, e a lista FirstCtbAddrTs[tileIdx] para tileIdx varia de zero a NumTilesInPic − 1, inclusive, especificando a conversão de um ID de tile para o endereço de CTB em varredura de tile do primeiro CTB no tile podem ser derivadas 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 ] ] = explicit_tile_id_flag ? tile_id_val[ i ] : tileIdx FirstCtbAddrTs[ tileIdx ] = CtbAddrRsToTs[ TileColBd[ tileIdx ] ] * PicWidthInCtbsY + TileCol Bd[ tileIdx ] ] }
[0153] O conjunto de TileIdToIdx[tileId] para um conjunto de valores NumTilesInPic tileId que especifica a conversão de um ID de tile para um índice de tile pode ser derivado como a seguir.
for( ctbAddrTs = 0, tileIdx = 0, tileStartFlag = 1; ctbAddrTs < PicSizeInCtbsY; ctbAddrTs++ ) { if( tileStartFlag ) { TileIdToIdx[ TileId[ ctbAddrTs ] ] = tileIdx tileStartFlag = 0 } tileEndFlag = ctbAddrTs = = PicSizeInCtbsY − 1 | | TileId[ ctbAddrTs + 1 ] != TileId[ ctbAddrTs ] if( tileEndFlag ) { tileIdx++ tileStartFlag = 1 } }
[0154] Uma sintaxe e semântica de conjunto de parâmetros de imagem de exemplo RBSP são 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) } tile_id_len_minus1 ue(v) explicit_tile_id_flag u(1) if( explicit_tile_id_flag ) for( i = 0; i < NumTilesInPic; i++ ) tile_id_val[ i ] u(v) rbsp_trailing_bits( ) }
[0155] Em alguns exemplos, a semântica pode ser como a seguir. O tile_id_len_minus1 mais especifica o número de bits usado para representar o elemento de sintaxe tile_id_val[i] e o elemento de sintaxe tile_group_address no cabeçalho de grupo de tiles referindo-se à PPS. O valor de tile_id_len_minus1 pode estar na faixa de Ceil(Log2(NumTilesInPic) para quinze, inclusive. Em outros exemplos, a semântica pode ser como a seguir. O tile_id_len_minus1 mais um pode especificar o número de bits usado para representar o elemento de sintaxe tile_id_val[i] e os elementos de sintaxe em cabeçalho de grupo de tiles referindo-se à PPS que se refere aos valores de ID de tile. O valor de tile_id_len_minus1 pode estar na faixa de Ceil(Log2(NumTilesInPic) para quinze, inclusive.
[0156] O explicit_tile_id_flag pode ser definido igual a um para especificar que o ID de tile para cada tile é sinalizado de forma explícita. O explicit_tile_id_flag pode ser definido igual a zero para especificar que os IDs de tile não são sinalizados de forma explícita. O tile_id_val[i] pode especificar o ID de tile do tile do iésimo tile na imagem. O comprimento de tile_id_val[i] pode ser tile_id_len_minus1 + 1 bits. Para qualquer número inteiro m na faixa de zero a NumTilesInPic − 1, inclusive, tile_id_val[i] não pode ser igual a tile_id_val[j] quando i não é igual a j, e tile_id_val[i] pode ser menor do que tile_id_val[j] quando j é maior do que i.
[0157] Uma sintaxe e semântica de cabeçalho de grupo de tiles de exemplo RBSP é como a seguir. tile_group_header( ) { Descritor tile_group_pic_parameter_set_id ue(v) tile_group_address u(v) if( NumTilesInPic > 1 ) { num_tiles_in_tile_group_minus1 ue(v) } }
[0158] O tile_group_address pode especificar o endereço de tile do primeiro tile no grupo de tiles. O comprimento de tile_group_address pode ser tile_id_len_minus1 + 1 bits. O valor de tile_group_address pode estar na faixa de 0 a 2tile_id_len_minus1 + 1 − 1, inclusive, e o valor de tile_group_address não pode ser igual ao valor de tile_group_address de qualquer outra unidade NAL de grupo de tiles codificada da mesma imagem codificada. O tile_group_address pode ser inferido para ser igual a zero quando não estiver presente.
[0159] A FIG. 9 é um diagrama esquemático de um exemplo dispositivo de codificação de vídeo 900. O dispositivo de codificação de vídeo 900 é adequado para implementar os exemplos/modalidades reveladas como descrito neste relatório. O dispositivo de codificação de vídeo 900 compreende portas à jusante 920, portas à montante 950 e/ou unidades de transceptor (Tx/Rx) 910, incluindo transmissores e/ou receptores para a comunicação de dados à montante e/ou à 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 à montante 950 e/ou portas à jusante 920 para comunicação de dados através de redes de comunicação elétrica, óptica ou sem fio. O dispositivo de codificação de vídeo 900 também pode incluir dispositivos de entrada e/ou saída (I/O) 960 para comunicar dados para e a partir de um usuário. Os dispositivos I/O 960 pode incluir dispositivo de saída, tais como uma tela para exibição de dados de vídeo, alto-falantes para emissão 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.
[0160] 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 à jusante 920, Tx/Rx 910, portas à montante 950 e a memória 932. O processador 930 compreende um módulo de codificação 914. O módulo de codificação 914 implementa as modalidades reveladas descritas neste relatório, tais como métodos 100, 1000 e 1100, mecanismo 600 e/ou aplicação 700 que pode 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 em tiles de primeiro nível e particionar tiles de primeiro nível em tiles de segundo nível. O módulo de codificação 914 também pode atribuir os tiles de primeiro nível e os tiles de segundo nível a grupos de tiles, tal que cada grupo de tiles contém vários tiles de primeiro nível ou uma sequência de tiles de segundo nível consecutiva de um único tile de primeiro nível, de modo que todos os tiles de segundo nível criados de um único tile de primeiro nível sejam atribuídos ao mesmo grupo de tiles. O módulo de codificação 914 também pode codificar e/ou decodificar tais tiles em uma ordem de varredura, tal que os tiles de primeiro nível sejam codificados na ordem de varredura raster e os tiles de segundo nível sejam codificados na ordem de varredura raster dentro do tile de primeiro nível a partir do qual os tiles de segundo nível são particionados. O módulo de codificação 914 suporta adicionalmente utilizando tais mecanismos para combinar as sub-imagens 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 corrige os problemas que são específicos para as artes de codificação de vídeo. Além disso, o módulo de codificação 914 efetua uma transformação do dispositivo de codificação de vídeo 900 para um estado diferente. Alternativamente, o módulo de codificação 914 pode ser implementado como instruções armazenadas na memória 932 e executadas pelo processador 930 (por exemplo, como um produto de programa de computador armazenados em uma mídia não transitória).
[0161] A memória 932 compreende um ou mais tipos de memória, tais como discos, unidades de fitos, unidades de estado 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ário (TCAM), memória de acesso aleatório estática (SRAM), etc. A memória 932 pode ser usada como um dispositivo de armazenamento em dados de fluxo, 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.
[0162] 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 o 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 que 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.
[0163] O método 1000 pode começar quando um codificador recebe uma sequência de vídeo incluindo uma pluralidade de imagens e determina para codificar a sequência de vídeo em um fluxo de bits, por exemplo, com base na entrada de 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. Um subconjunto dos tiles de primeiro nível também pode ser particionado em uma pluralidade de tiles de segundo nível. Em alguns exemplos, os tiles de primeiro nível fora do subconjunto podem conter dados de imagem em uma primeira resolução. Além disso, os tiles de segundo nível podem conter 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 pode incluir dois ou mais tiles de segundo nível completos.
[0164] Na etapa 1003, os tiles de primeiro nível e os tiles de segundo nível são atribuídos a um ou mais grupos de tiles. A atribuição pode ser realizada tal que cada grupo de tiles contém vários tiles de primeiro nível, uma ou mais sequências consecutivas de tiles de segundo nível onde cada sequência de tiles de segundo nível é dividida a partir de um único tile de primeiro nível ou combinações dos mesmos. Como um exemplo específico, a atribuição pode ser realizada tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível são atribuídos ao mesmo grupo de tiles. Em alguns exemplos, cada um de um ou mais grupos de tiles pode ser restrito, tal que todos os tiles em um grupo de tiles atribuído cubram uma porção retangular da imagem.
[0165] Na etapa 1005, os tiles de primeiro nível e os tiles de segundo nível são codificados em um fluxo de bits. Por exemplo, os tiles de primeiro nível e os tiles de segundo nível podem ser codificados, de acordo com uma ordem de varredura. Em um exemplo específico, a codificação, de acordo com a ordem de varredura pode incluir a codificação dos tiles de primeiro nível na ordem de varredura raster. Quando um dos tiles de segundo nível são encontrados, a codificação de ordem de varredura raster dos tiles de primeiro nível pode ser pausada. Todos os tiles de segundo nível consecutivos podem ser codificados na ordem de varredura raster antes de continuar a codificação de ordem de varredura raster dos tiles de primeiro nível. Por exemplo, todos os tiles de segundo nível particionados a partir de um tile de primeiro nível atual podem ser codificados antes de codificar quaisquer tiles de segundo nível particionados a partir de um tile de segundo nível subsequente. Na etapa 1007, o fluxo de bits pode ser armazenado para comunicação em direção a um decodificador.
[0166] 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 o 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.
[0167] 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 pode ser adicionalmente particionado em uma pluralidade de tiles de segundo nível. Em alguns exemplos, os tiles de primeiro nível fora do subconjunto podem conter dados de imagem em uma primeira resolução. Além disso, os tiles de segundo nível podem conter dados de imagem em uma segunda resolução diferente da primeira resolução. Em outro exemplo, cada tile de primeiro nível no subconjunto de tiles de primeiro nível pode incluir dois ou mais tiles de segundo nível completos. Os tiles de primeiro nível e os tiles de segundo nível são atribuídos a um ou mais grupos de tiles. A atribuição pode ser realizada tal que cada grupo de tiles contém vários tiles de primeiro nível, uma ou mais sequências consecutivas de tiles de segundo nível onde cada sequência de tiles de segundo nível é dividida a partir de um único tile de primeiro nível ou combinações dos mesmos. Como um exemplo específico, a atribuição pode ser realizada tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível são atribuídos ao mesmo grupo de tiles. Em alguns exemplos, cada um de um ou mais grupos de tiles pode ser restrito, tal que todos os tiles em um grupo de tiles atribuído cubram uma porção retangular da imagem.
[0168] Na etapa 1105, os tiles de primeiro nível e os tiles de segundo nível podem ser decodificados com base em um ou mais grupos de tiles. Em alguns exemplos, os tiles de primeiro nível e os tiles de segundo nível são decodificados, de acordo com uma ordem de varredura. Em um exemplo específico, a decodificação, de acordo com a ordem de varredura pode incluir a decodificação dos tiles de primeiro nível na ordem de varredura raster. Quando um dos tiles de segundo nível é encontrado, a codificação de ordem de varredura raster dos tiles de primeiro nível pode ser pausada. Todos os tiles de segundo nível consecutivos podem ser, em seguida, codificados na ordem de varredura raster antes de continuar a decodificação de ordem de varredura raster dos tiles de primeiro nível. Por exemplo, todos os tiles de segundo nível particionados a partir de um tile de primeiro nível atual podem ser decodificados antes de decodificar quaisquer tiles de segundo nível particionados a partir de um tile de segundo nível subsequente.
[0169] Na etapa 1107, uma sequência de vídeo reconstruída pode ser gerada para exibição com base nos tiles de primeiro nível e nos tiles de segundo nível decodificados.
[0170] A FIG. 12 é um diagrama esquemático de um sistema de exemplo 1200 para codificar 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.
[0171] 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. O codificador de vídeo 1202 compreende ainda um módulo de atribuição 1203 para atribuir 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 de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles. O codificador de vídeo 1202 compreende ainda 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 ainda um módulo de armazenamento 1207 para armazenar o fluxo de bits para comunicação em direção a um decodificador. O codificador de vídeo 1202 compreende ainda 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 adicionalmente configurado para realizar qualquer uma das etapas do método 1000.
[0172] O sistema 1200 também inclui um decodificador de vídeo
1210. O decodificador de vídeo 1210 compreende um módulo de recebimento 1211 para receber um fluxo de bits, incluindo uma imagem particionada em uma pluralidade de tiles de primeiro nível, em que um subconjunto dos tiles de primeiro nível é adicionalmente particionado em uma pluralidade de tiles de segundo nível, e 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 de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles. O decodificador de vídeo 1210 compreende ainda um módulo de decodificação 1213 para a decodificação dos tiles de primeiro nível e dos tiles de segundo nível com base em um ou mais grupos de tiles. O decodificador de vídeo 1210 compreende ainda um módulo de geração 1215 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 adicionalmente configurado para realizar qualquer uma das etapas do método 1100.
[0173] Um primeiro componente é diretamente acoplado a um segundo componente quando não há componentes de intervenção, exceto para 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 “cerca de” significa uma faixa incluindo ±10 % do número subsequente a menos que de outro modo estabelecido.
[0174] 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 exemplares. 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.
[0175] Enquanto várias modalidades foram fornecidas na presente revelação, pode ser entendido que o sistema e métodos revelados podem ser incorporados de muitas outras formas específicas sem se afastar do espírito ou escopo da presente revelação. Os presentes exemplos devem ser considerados como ilustrativos e não restritivos e a intenção não deve ser limitada aos detalhes 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.
[0176] Além disso, técnicas, sistemas, subsistemas e métodos descritos e ilustrados nas várias modalidades como discretos 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 pelo técnico no assunto e podem ser feitas sem se afastar do espírito e escopo revelados neste relatório.

Claims (26)

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; atribuir, pelo processador, os tiles de segundo nível a um ou mais grupos de tiles tal que cada grupo de tiles contém um número de tiles de primeiro nível, uma ou mais sequências consecutivas de tiles de segundo nível em que cada sequência de tiles de segundo nível é dividida a partir de um único tile de primeiro nível, ou combinações dos mesmos; codificar, pelo processador, os tiles de segundo nível em um fluxo de bits.
2. 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; atribuir, pelo processador, os tiles de segundo nível a um ou mais grupos de tiles tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles; codificar, pelo processador, os tiles de segundo nível em um fluxo de bits.
3. Método, de acordo com qualquer uma das reivindicações 1 a 2, 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.
4. Método, de acordo com qualquer uma das reivindicações 1 a 3, CARACTERIZADO pelo fato de que os 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.
5. Método, de acordo com qualquer uma das reivindicações 1 a 4, 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.
6. Método, de acordo com qualquer uma das reivindicações 1 a 5, CARACTERIZADO pelo fato de que todos os tiles de segundo nível particionados a partir de um tile de primeiro nível atual são codificados antes de codificar quaisquer tiles de segundo nível particionados a partir de um tile de segundo nível subsequente.
7. Método, de acordo com qualquer uma das reivindicações 1 a 6, CARACTERIZADO pelo fato de que cada um dentre o um ou mais grupos de tiles é restrito tal que todos os tiles em um grupo de tiles atribuído cubram uma porção retangular da imagem.
8. 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, em que um subconjunto dos tiles de primeiro nível é adicionalmente particionado em uma pluralidade de tiles de segundo nível, e em que os tiles de segundo nível são atribuídos a um ou mais grupos de tiles tal que cada grupo de tiles contém uma ou mais sequências consecutivas de tiles de segundo nível em que cada sequência de tiles de segundo nível é dividida a partir de um único tile de primeiro nível, ou combinações dos mesmos; decodificar, pelo processador, os tiles de segundo nível com base em parâmetros no fluxo de bits; e gerar, pelo processador, uma sequência de vídeo reconstruída para exibição com base nos tiles de segundo nível decodificados.
9. 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, em que um subconjunto dos tiles de primeiro nível é adicionalmente particionado em uma pluralidade de tiles de segundo nível, e em que os tiles de segundo nível são atribuídos a um ou mais grupos de tiles tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles; decodificar, pelo processador, os tiles de segundo nível com base em parâmetros no fluxo de bits; e gerar, pelo processador, uma sequência de vídeo reconstruída para exibição com base nos tiles de segundo nível decodificados.
10. Método, de acordo com qualquer uma das reivindicações 8 a 9, 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.
11. Método, de acordo com qualquer uma das reivindicações 8 a 10, 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.
12. Método, de acordo com qualquer uma das reivindicações 8 a 11, CARACTERIZADO pelo fato de que todos os tiles de segundo nível particionados a partir de um tile de primeiro nível atual são decodificados antes de decodificar quaisquer tiles de segundo nível particionados a partir de um tile de segundo nível subsequente.
13. Método, de acordo com qualquer uma das reivindicações 8 a 12, CARACTERIZADO pelo fato de que cada um dentre o um ou mais grupos de tiles é restrito tal que todos os tiles em um grupo de tiles atribuído cubram uma porção retangular da imagem.
14. 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 13.
15. 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 13.
16. 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; uma unidade de atribuição, configurada para atribuir os tiles de segundo nível a um ou mais grupos de tiles tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles; uma unidade de codificação, configurada para codificar os tiles de segundo nível em um fluxo de bits.
17. 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.
18. Codificador, de acordo com qualquer uma das reivindicações 16 a 17, CARACTERIZADO pelo fato de que o codificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 1 a 8.
19. 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, em que um subconjunto dos tiles de primeiro nível é adicionalmente particionado em uma pluralidade de tiles de segundo nível, e em que os tiles de segundo nível são atribuídos a um ou mais grupos de tiles tal que todos os tiles de segundo nível criados a partir de um único tile de primeiro nível são atribuídos a um mesmo grupo de tiles; uma unidade de decodificação, configurada para decodificar os tiles de segundo nível com base em parâmetros no fluxo de bits; 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.
20. Decodificador, de acordo com a reivindicação 19, CARACTERIZADO pelo fato de que o decodificador é adicionalmente configurado para realizar o método conforme definido em qualquer uma das reivindicações 9 a 13.
21. 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 de um sinal de imagem em tiles de segundo nível.
22. Dispositivo para codificação, CARACTERIZADO pelo fato de que compreende: unidade de recebimento, configurada para receber um fluxo de bits para decodificação; unidade de transmissão acoplada à unidade de recebimento, a unidade de transmissão, configurada para transmitir uma imagem decodificada para uma unidade de exibição; unidade de armazenamento acoplada a pelo menos uma dentre a unidade de recebimento ou a unidade de transmissão, a unidade de armazenamento, configurada para armazenar instruções; e unidade de processamento acoplada à unidade de armazenamento, a unidade de processamento, configurada para executar as instruções armazenadas na unidade de armazenamento para realizar o método conforme definido em qualquer uma das reivindicações 1 a 13.
23. Codificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido nas reivindicações 1 a 8.
24. Decodificador, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 9 a 13.
25. 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 13 quando executado em um computador ou em um processador.
26. 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 13.
Codificador Decodificador
Sinal de Vídeo de Entrada
Determinar Partições Particionamento de Bloco
Decodificação de %loco 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 Análise de Estimação de Imagem Intra Controle de Filtro CABAC e Predição Intra Formatação de Cabeçalho
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 Quantização e Codificação Particionado Transformada de Entropia
Predição de Quantização e Imagem Intra Transformada Inversa
Compensação de Movimento
Filtros in-loop Buffer de Imagem Decodificada
Decodificador Fluxo de bits
Decodificação Quantização e de Entropia Transformada Inversa
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
Nível Nível Nível Nível Nível Nível
Nível Nível Nível Nível Nível Nível
Grupo de Tiles Grupo de Tiles Grupo de Tiles
Ordem de Varredura
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.
Atribuir os tiles de primeiro nível e os tiles de segundo nível a um ou mais grupos de tiles tal que cada grupo de tiles contém um número de tiles de primeiro nível ou uma sequência consecutiva de tiles de segundo nível de um único tile de primeiro nível.
Codificar os tiles de primeiro nível e os tiles de segundo nível em um fluxo de bits de acordo com uma ordem de varredura.
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. 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 cada grupo de tiles contém um número de tiles de primeiro nível ou uma sequência consecutiva de tiles de segundo nível de um único tile de primeiro nível.
Decodificar os tiles de primeiro nível e os tiles de segundo nível com base no um ou mais grupos de tiles e/ou de acordo com uma ordem de varredura.
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
Atribuição
Armazenamento Codificação
7UDQVPLssor
5HFHptor
'HFRGificação
*Hração Decodificador de Vídeo
BR112021012649-0A 2018-12-28 2019-12-27 Codificador de vídeo, decodificador de vídeo e métodos correspondentes BR112021012649A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862786167P 2018-12-28 2018-12-28
US62/786,167 2018-12-28
PCT/US2019/068780 WO2020140057A1 (en) 2018-12-28 2019-12-27 Tile groups for flexible tiling in video coding

Publications (1)

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

Family

ID=71126618

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021012649-0A BR112021012649A2 (pt) 2018-12-28 2019-12-27 Codificador de vídeo, decodificador de vídeo e métodos correspondentes

Country Status (9)

Country Link
EP (1) EP3903277A4 (pt)
JP (2) JP7285934B2 (pt)
KR (1) KR20210107090A (pt)
CN (1) CN113261030A (pt)
AU (1) AU2019414459B2 (pt)
BR (1) BR112021012649A2 (pt)
MX (1) MX2021007926A (pt)
SG (1) SG11202107047UA (pt)
WO (2) WO2020140059A1 (pt)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11470313B2 (en) * 2019-06-22 2022-10-11 Xris Corporation Image signal encoding/decoding method and device therefor
EP4044593A4 (en) * 2019-10-09 2023-07-19 Apple Inc. METHOD AND DEVICE FOR ENCODING/DECODING VIDEO SIGNALS
US11470314B2 (en) * 2019-11-20 2022-10-11 Xris Corporation Method for encoding/decoding image signal, and device for same

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7768520B2 (en) * 2006-05-03 2010-08-03 Ittiam Systems (P) Ltd. Hierarchical tiling of data for efficient data access in high performance video applications
US9584819B2 (en) * 2011-10-24 2017-02-28 Qualcomm Incorporated Grouping of tiles for video coding
RU2589341C2 (ru) * 2011-11-08 2016-07-10 Телефонактиеболагет Л М Эрикссон (Пабл) Размер элемента мозаичного изображения при кодировании видео
EP2814243A4 (en) * 2012-06-25 2016-04-20 Sony Corp Image Decoding Device, Image Decoding Method, Image Coding Device, and Image Coding Method
FI4002842T3 (fi) * 2012-06-26 2023-11-02 Lg Electronics Inc Videodekoodausmenetelmä, videokoodausmenetelmä ja tallennusväline, joka tallentaa koodatun videoinformaation
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
GB2540227B (en) * 2015-12-21 2018-01-17 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
JP7210748B2 (ja) * 2018-12-27 2023-01-23 ホアウェイ・テクノロジーズ・カンパニー・リミテッド ビデオエンコーダ、ビデオデコーダ、および対応する方法

Also Published As

Publication number Publication date
MX2021007926A (es) 2021-10-22
JP7285934B2 (ja) 2023-06-02
AU2019414459A1 (en) 2021-07-29
EP3903277A4 (en) 2022-02-23
CN113261030A (zh) 2021-08-13
WO2020140057A1 (en) 2020-07-02
EP3903277A1 (en) 2021-11-03
KR20210107090A (ko) 2021-08-31
AU2019414459B2 (en) 2023-06-29
WO2020140059A1 (en) 2020-07-02
JP2023090749A (ja) 2023-06-29
SG11202107047UA (en) 2021-07-29
JP2022516114A (ja) 2022-02-24

Similar Documents

Publication Publication Date Title
CN112703736B (zh) 视频译码方法,视频译码设备以及非瞬时性计算机可读介质
US11778205B2 (en) Flexible tiling in video coding
BR112021012649A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes
CN113273196A (zh) 视频译码中的分块组指示
BR112021011398A2 (pt) Método e aparelho de codificação de vídeo
CN113228519A (zh) 任意和环绕分块分组
CN113243110A (zh) 视频译码中的显式地址指示
RU2792176C2 (ru) Кодер видео, декодер видео и соответствующие способы