BR112021010326A2 - Método de decodificar dados de vídeo, método de codificar dados de vídeo e dispositivo para decodificar dados de vídeo - Google Patents

Método de decodificar dados de vídeo, método de codificar dados de vídeo e dispositivo para decodificar dados de vídeo Download PDF

Info

Publication number
BR112021010326A2
BR112021010326A2 BR112021010326-0A BR112021010326A BR112021010326A2 BR 112021010326 A2 BR112021010326 A2 BR 112021010326A2 BR 112021010326 A BR112021010326 A BR 112021010326A BR 112021010326 A2 BR112021010326 A2 BR 112021010326A2
Authority
BR
Brazil
Prior art keywords
tile
minus1
num
flag
slice
Prior art date
Application number
BR112021010326-0A
Other languages
English (en)
Inventor
Sachin G. Deshpande
Original Assignee
Sharp Kabushiki Kaisha
FG Innovation Company Limited
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 Sharp Kabushiki Kaisha, FG Innovation Company Limited filed Critical Sharp Kabushiki Kaisha
Publication of BR112021010326A2 publication Critical patent/BR112021010326A2/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/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/174Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

método de decodificar dados de vídeo, método de codificar dados de vídeo e dispositivo para decodificar dados de vídeo. a presente invenção refere-se a um método de decodificação de dados de vídeo por um dispositivo. uma primeira sintaxe de sinalizador em um conjunto de parâmetros de imagem é decodificada. o primeiro sinalizador especifica se ladrilhos dentro de cada fatia estão em ordem de varredura raster ou se ladrilhos dentro de cada fatia cobrem uma região retangular de uma imagem. o método determina, com base na primeira sintaxe de sinalizador, se uma sintaxe de endereço da fatia está presente em um cabeçalho de fatia. a sintaxe do endereço da fatia é decodificada quando o endereço da fatia está presente no cabeçalho da fatia.

Description

Relatório Descritivo da Patente de Invenção para "MÉTODO DE DECODIFICAR DADOS DE VÍDEO, MÉTODO DE CODIFICAR DA-
DOS DE VÍDEO E DISPOSITIVO PARA DECODIFICAR DADOS DE VÍDEO".
REFERÊNCIA CRUZADA A PEDIDOS RELACIONADOS Esta presente invenção é um pedido de fase nacional do pe- dido de patente internacional PCT/JP2019/046062, depositado em 26 de novembro de 2019, agora publicado como WO2020/111023, que rei- vindica o benefício e a prioridade do pedido de patente US nº 62/774,050, depositado em 30 de novembro de 2018, do pedido de pa- tente US nº 62/784.296, depositado em 21 de dezembro de 2018, do pedido de patente US nº 62/791.227, depositado em 11 de janeiro de 2019, e do pedido de patente US nº 62/806.502, depositado em 15 de fevereiro de 2019, cujo conteúdo de todos é incorporado integralmente por referência à presente divulgação.
CAMPO TÉCNICO
[0001] A presente divulgação refere-se a codificação de vídeo e, mais particularmente, a técnicas para a sinalização de estruturas de ladrilhos para imagens de vídeo codificado.
ANTECEDENTES DA INVENÇÃO
[0002] As capacidades de vídeo digital podem ser incorporadas a uma ampla gama de dispositivos, incluindo televisores digitais, computadores de mesa ou laptop, computadores tipo tablet, dispositivos de gravação di- gital, reprodutores de mídia digital, dispositivos de videogame, telefones celulares, incluindo os chamados smartphones, dispositivos de imagea- mento médico e similares. O vídeo digital pode ser codificado de acordo com um padrão de codificação de vídeo. Os padrões de codificação de vídeo podem incorporar técnicas de compressão de vídeo. Exemplos de padrões de codificação de vídeo incluem ISO/IEC MPEG-4 Visual e UIT-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC) e codificação de vídeo de alta eficiência (HEVC, ou High-Efficiency Video Coding). A HEVC é descrita em High Efficiency Video Coding (HEVC), Rec.
ITU-T H.265, dezembro de 2016, que é incorporado a título de referência, e chamado na presente invenção de UIT-T H.265. Extensões e melhorias para UIT-T H.265 estão atualmente sendo consideradas para o desenvolvimento da próxima geração de padrões de codificação de vídeo.
Por exemplo, o grupo de especialistas em codificação de vídeo UIT-T (VCEG, ou Video Coding Experts Group) e ISO/IEC (grupo de especialistas em imagens com movimento (MPEG, ou Moving Picture Experts Group)) (coletiva- mente chamados de equipe conjunta de exploração de vídeo (JVET, ou Joint Video Exploration Team)) estão estudando a potencial necessidade de padronização da tecnologia futura de codificação de vídeo com uma capacidade de compressão que excede significativamente a do padrão HEVC atual.
O modelo de exploração conjunta 7 (JEM 7, ou Joint Explo- ration Model 7), a descrição do algoritmo do modelo de teste de exploração conjunta 7 (JEM 7), ISO/IEC JTC1/SC29/WG11 documento: JVET-G1001, julho de 2017, Turim, IT, que está incorporado a título de referência na presente invenção, descreve os recursos de codificação que estão sob es- tudo de modelo de teste coordenado pela JVET como potencialmente apri- morando a tecnologia de codificação de vídeo além das capacidades de ITU-T H.265. Deve-se notar que os recursos de codificação de JEM 7 são implementados no software de referência de JEM.
Como usado na pre- sente invenção, o termo JEM pode se referir coletivamente a algoritmos incluídos em JEM 7 e implementações de software de referência de JEM.
Além disso, em resposta a uma "Chamada conjunta para propostas sobre compressão de vídeo com capacidades além de HEVC" ("Joint Call for Proposals on Video Compression with Capabilities beyond HEVC"), con- juntamente emitida por VCEG e MPEG, múltiplas descrições de codifica- ção de vídeo foram propostas por vários grupos no 10° Encontro de ISO/IEC JTC1/SC29/WG11, 16 a 20 de abril de 2018, San Diego, CA,
EUA. Como resultado das múltiplas descrições de codificação de vídeo, um texto preliminar de uma especificação de codificação de vídeo é des- crito em "Versatile Video Coding (Draft 1)", 10° Encontro de ISO/IEC JTC1/SC29/WG11, 16 a 20 de abril de 2018, San Diego, CA, EUA, docu- mento JVET-J1001-v2, que está incorporado a título de referência na pre- sente invenção e chamado de JVET-J1001. O "Versatile Video Coding (Draft 2)", 11° Encontro de ISO/IEC JTC1/SC29/WG11, 10 a 18 de julho de 2018, Ljubljana, Eslovênia, documento JVET-K1001-v7, que está incor- porado a título de referência na presente invenção e chamado de JVET- K1001, é uma atualização do JVET-J1001. Além disso, o "Versatile Video Coding (Draft 3)", 12° Encontro de ISO/IEC JTC1/SC29/WG11, 3 a 12 de outubro de 2018, Macau, China, documento JVET-L1001-v2, que está in- corporado a título de referência na presente invenção e chamado de JVET- L1001, é uma atualização do JVET-K1001.
[0003] Técnicas de compressão de vídeo reduzem os requisitos de dados para armazenamento e transmissão de dados de vídeo com a exploração das redundâncias inerentes em uma sequência de vídeo. Técnicas de compressão de vídeo podem subdividir uma sequência de vídeo em porções sucessivamente menores (isto é, grupos de quadros dentro de uma sequência de vídeo, um quadro dentro de um grupo de quadros, fatias dentro de um quadro, unidades de árvore de codificação (por exemplo macroblocos) dentro de uma fatia, blocos de codificação dentro de uma unidade de árvore de codificação, etc.). As técnicas de codificação de intraprevisão (por exemplo intraimagem (espacial)) e téc- nicas de interprevisão (isto é, interimagens (temporal)) podem ser usa- das para gerar valores de diferença entre uma unidade de dados de vídeo a ser codificada e uma unidade de referência de dados de vídeo. Os valores de diferença podem ser chamados de dados residuais. Os dados residuais podem ser codificados como coeficientes de transfor-
mada quantizados. Elementos de sintaxe podem se referir a dados re- siduais e a uma unidade de codificação de referência (por exemplo ín- dices de modo intraprevisão, vetores de movimento e vetores de bloco). Dados residuais e elementos de sintaxe podem ser codificados por en- tropia. Dados residuais e elementos de sintaxe codificados por entropia podem ser incluídos em um fluxo de bits compatível. Fluxos de bits com- patíveis e metadados associados podem ser formatados de acordo com estruturas de dados.
SUMÁRIO DA INVENÇÃO
[0004] Em um exemplo, um método de decodificação de dados de vídeo é fornecido, o método compreendendo: decodificar uma primeira sintaxe de sinalizador em um conjunto de parâmetros de imagem, em que a primeira sintaxe de sinalizador especifica se ladrilhos dentro de cada uma de pelo menos uma fatia estão em ordem de varredura raster ou se os ladrilhos dentro de cada um da pelo menos uma fatia cobrem uma região retangular de uma imagem; determinar, com base em um valor da primeira sintaxe de sinalizador, se uma sintaxe de endereço de fatia está presente no cabeçalho de fatia; e decodificar a sintaxe de endereço de fatia quando a sintaxe de endereço de fatia estiver pre- sente no cabeçalho de fatia.
[0005] Em um exemplo, um método de codificação de dados é forne- cido, o método compreendendo: codificar uma primeira sintaxe de sinali- zador em um conjunto de parâmetros de imagem, em que a primeira sin- taxe de sinalizador especifica se ladrilhos dentro de cada uma de pelo me- nos uma fatia estão em ordem de varredura raster ou se os ladrilhos dentro de cada uma da pelo menos uma fatia cobrem uma região retangular de uma imagem; e determinar, com base em um valor da primeira sintaxe de sinalizador, se deve codificar a sintaxe de endereço de fatia em um cabeçalho de fatia.
BREVE DESCRIÇÃO DOS DESENHOS
[0006] [Figura 1] A Figura 1 é um diagrama de blocos que ilustra um exemplo de um sistema que pode ser configurado para codificar e de- codificar dados de vídeo de acordo com uma ou mais técnicas desta divulgação. [Figura 2A] A Figura 2A é um diagrama conceitual que ilus- tra dados de vídeo codificados e estruturas de dados correspondentes de acordo com uma ou mais técnicas desta divulgação. [Figura 2B] A Figura 2B é um diagrama conceitual que ilus- tra dados de vídeo codificados e estruturas de dados correspondentes de acordo com uma ou mais técnicas desta divulgação. [Figura 2C] A Figura 2C é um diagrama conceitual que ilustra dados de vídeo codificados e estruturas de dados correspondentes de acordo com uma ou mais técnicas desta divulgação. [Figura 3] A Figura 3 é um diagrama conceitual que ilustra uma estrutura de dados que encapsula dados de vídeo codificados e metadados correspondentes de acordo com uma ou mais técnicas desta divulgação. [Figura 4] A Figura 4 é um desenho conceitual que ilustra um exemplo de componentes que podem estar incluídos em uma imple- mentação de um sistema que pode ser configurada para codificar e de- codificar dados de vídeo de acordo com uma ou mais técnicas desta divulgação. [Figura 5] A Figura 5 é um diagrama de blocos que ilustra um exemplo de um codificador de vídeo que pode ser configurado para co- dificar dados de vídeo de acordo com uma ou mais técnicas desta divul- gação. [Figura 6] A Figura 6 é um diagrama conceitual que ilustra um exemplo de ordenação de ladrilhos incluídos em conjuntos de la- drilhos de acordo com uma ou mais técnicas desta divulgação. [Figura 7] A Figura 7 é um diagrama conceitual que ilustra um exemplo de ordenação de blocos de vídeo incluídos em conjuntos de ladrilhos de acordo com uma ou mais técnicas desta divulgação. [Figura 8] A Figura 8 é um diagrama conceitual que ilustra um exemplo de sinalização de informações de faixa de bytes de acordo com uma ou mais técnicas desta divulgação. [Figura 9] A Figura 9 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que pode ser configurado para decodificar dados de vídeo de acordo com uma ou mais técnicas desta divulgação.
DESCRIÇÃO DAS MODALIDADES
[0007] Em geral, esta divulgação descreve várias técnicas para co- dificar dados de vídeo. Em particular, esta divulgação descreve técni- cas para a sinalização de estruturas de ladrilhos para imagens de ví- deo codificado. Como usado na presente invenção, o termo estrutura de ladrilhos pode se referir a um particionamento específico de uma imagem em ladrilhos. Conforme descrito em mais detalhes abaixo, de acordo com as técnicas descritas na presente invenção, uma imagem pode ser particionada em estruturas de ladrilhos e ladrilhos de tama- nhos variáveis. A sinalização de estruturas de ladrilhos de acordo com as técnicas descritas na presente invenção pode ser particularmente útil para melhorar o desempenho do sistema de distribuição de vídeo com a diminuição da largura de banda de transmissão e/ou com a fa- cilitação da paralelização de um codificador e/ou um decodificador de vídeo. Deve-se notar que, embora técnicas desta divulgação sejam descritas com relação a UIT-T H.264 e UIT-T H.265, as técnicas desta divulgação são geralmente aplicáveis a codificação de vídeo. Por exemplo, as técnicas de codificação descritas na presente invenção podem ser incorporadas a sistemas de codificação de vídeo, (incluindo sistemas de codificação de vídeo baseados em futuros padrões de co-
dificação de vídeo) incluindo estruturas em bloco, técnicas de intrapre- visão, técnicas de interprevisão, técnicas de transformada, técnicas de filtragem e/ou técnicas de codificação por entropia que não aquelas incluídas em UIT-T H.265. Dessa forma, a referência a UIT-T H.264 e UIT-T H.265 é para propósitos descritivos e não deve ser interpretada para limitar o escopo das técnicas descritas na presente invenção. Além disso, deve-se notar que a incorporação a título de referência de documentos na presente invenção não deve ser interpretada para limi- tar ou criar ambiguidade com relação a termos usados na presente invenção. Por exemplo, no caso em que uma referência incorporada fornece uma definição diferente de um termo que outra referência in- corporada e/ou como o termo é usado na presente invenção, o termo deve ser interpretado de uma maneira que inclua amplamente cada respectiva definição e/ou de uma maneira que inclua cada uma das definições específicas na alternativa.
[0008] Em um exemplo, um método para sinalizar estruturas de conjunto de ladrilhos compreende sinalizar um sinalizador que indica que conjuntos de ladrilhos estão habilitados em um fluxo de bits, sinali- zar um elemento de sintaxe que indica um número de colunas de con- junto de ladrilhos que particionam uma imagem e sinalizar um elemento de sintaxe que indica um número de fileiras de conjunto de ladrilhos que particionam uma imagem.
[0009] Em um exemplo, um dispositivo compreende um ou mais processadores configurados para sinalizar um sinalizador que indica que conjuntos de ladrilhos estão habilitados em um fluxo de bits, sinali- zar um elemento de sintaxe que indica um número de colunas de con- junto de ladrilhos que particionam uma imagem e sinalizar um elemento de sintaxe que indica um número de fileiras de conjunto de ladrilhos que particionam uma imagem.
[0010] Em um exemplo, uma mídia de armazenamento não transi- tório legível por computador compreende instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais proces- sadores de um dispositivo sinalizem um sinalizador que indica que con- juntos de ladrilhos estão habilitados em um fluxo de bits, sinalizem um elemento de sintaxe que indica um número de colunas de conjunto de ladrilhos que particionam uma imagem e sinalizem um elemento de sintaxe que indica um número de fileiras de conjunto de ladrilhos que particionam uma imagem.
[0011] Em um exemplo, um aparelho compreende meios para si- nalizar um sinalizador que indica que conjuntos de ladrilhos estão ha- bilitados em um fluxo de bits, meios para sinalizar um elemento de sin- taxe que indica um número de colunas de conjunto de ladrilhos que particionam uma imagem e meios para sinalizar um elemento de sin- taxe que indica um número de fileiras de conjunto de ladrilhos que par- ticionam uma imagem.
[0012] Em um exemplo, um método para decodificar dados de vídeo compreende analisar sintaticamente um sinalizador que indica que conjun- tos de ladrilhos estão habilitados em um fluxo de bits, analisar sintatica- mente um elemento de sintaxe que indica um número de colunas de con- junto de ladrilhos que particionam uma imagem, analisar sintaticamente um elemento de sintaxe que indica um número de fileiras de conjunto de ladrilhos que particionam uma imagem e gerar dados de vídeo baseados em valores dos elementos de sintaxe sintaticamente analisados.
[0013] Em um exemplo, um dispositivo compreende um ou mais processadores configurados para analisar sintaticamente um sinaliza- dor que indica que conjuntos de ladrilhos estão habilitados em um fluxo de bits, analisar sintaticamente um elemento de sintaxe que indica um número de colunas de conjunto de ladrilhos que particionam uma ima- gem, analisar sintaticamente um elemento de sintaxe que indica um número de fileiras de conjunto de ladrilhos que particionam uma ima- gem e gerar dados de vídeo baseados em valores dos elementos de sintaxe sintaticamente analisados.
[0014] Em um exemplo, uma mídia de armazenamento não transitó- rio legível por computador compreende instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processa- dores de um dispositivo analisem sintaticamente um sinalizador que in- dica que conjuntos de ladrilhos estão habilitados em um fluxo de bits, analisem sintaticamente um elemento de sintaxe que indica um número de colunas de conjunto de ladrilhos que particionam uma imagem, anali- sem sintaticamente um elemento de sintaxe que indica um número de fileiras de conjunto de ladrilhos que particionam uma imagem e gerem dados de vídeo baseados em valores dos elementos de sintaxe sintati- camente analisados.
[0015] Em um exemplo, um aparelho compreende meios para ana- lisar sintaticamente um sinalizador que indica que conjuntos de ladri- lhos estão habilitados em um fluxo de bits, meios para analisar sintati- camente um elemento de sintaxe que indica um número de colunas de conjunto de ladrilhos que particionam uma imagem, meios para anali- sar sintaticamente um elemento de sintaxe que indica um número de fileiras de conjunto de ladrilhos que particionam uma imagem e meios para gerar dados de vídeo baseados em valores dos elementos de sin- taxe sintaticamente analisados.
[0016] Os detalhes de um ou mais exemplos são apresentados nos desenhos em anexo e na descrição abaixo. Outros recursos, objetivos e vantagens ficarão evidentes a partir da descrição e dos desenhos, bem como a partir das concretizações.
[0017] O conteúdo de vídeo inclui tipicamente sequências de vídeo que compreendem uma série de quadros. Uma série de quadros pode ser chamada também de grupo de imagens (GOP, ou group of pictures).
Cada quadro de vídeo ou imagem pode incluir uma ou mais fatias, em que uma fatia inclui uma pluralidade de blocos de vídeo. Um bloco de vídeo inclui uma matriz de valores de pixel (chamada também de amos- tras) que podem ser preditivamente codificados. Os blocos de vídeo po- dem ser ordenados de acordo com um padrão de varredura (por exem- plo uma varredura raster). Um codificador de vídeo executa codificação preditiva em blocos de vídeo e subdivisões dos mesmos. UIT-T H.264 especifica um macrobloco que inclui amostras de luma de 16 x 16. UIT- T H.265 especifica uma estrutura de unidade de árvore de codificação (CTU, ou Coding Tree Unit) análoga (que pode ser chamada de unidade de codificação maior (LCU, ou Largest Coding Unit)) em que uma ima- gem pode ser dividida em CTUs de tamanho igual e cada CTU pode incluir blocos de árvore de codificação (CTB, ou Coding Tree Blocks) tendo amostras de luma de 16 x 16, 32 x 32 ou 64 x 64. Como usado na presente invenção, o termo bloco de vídeo pode se referir generica- mente a uma área de uma imagem ou pode, mais especificamente, se referir à maior matriz de valores de pixel que pode ser preditivamente codificada, subdivisões da mesma e/ou estruturas correspondentes. Além disso, de acordo com UIT-T H.265, cada quadro de vídeo ou ima- gem pode ser particionado para incluir um ou mais ladrilhos, sendo que um ladrilho é uma sequência de unidades de árvore de codificação que corresponde a uma área retangular de uma imagem.
[0018] Em UIT-T H.265, uma CTU é composta por respectivos CTBs para cada componente de dados de vídeo (por exemplo luma (Y) e croma (Cb e Cr)). Além disso, em UIT-T H.265, uma CTU pode ser particionada de acordo com uma estrutura de particionamento quadtree (QT), o que resulta nos CTBs da CTU sendo particionados em blocos de codificação (CB). Ou seja, em UIT-T H.265, uma CTU pode ser particionada em nós folhas de quadtree. De acordo com UIT-T H.265, um CB de luma junta- mente com dois CBs de croma correspondentes e elementos de sintaxe associados são chamados de unidade de codificação (CU, ou coding unit). Em UIT-T H.265, um tamanho mínimo permitido de um CB pode ser sina- lizado. Em UIT-T H.265, o menor tamanho mínimo permitido de um CB de luma é de amostras de luma de 8x8. Em UIT-T H.265, a decisão de codi- ficar uma área de imagem com o uso de intraprevisão ou interprevisão é feita no nível de CU.
[0019] Em UIT-T H.265, uma CU é associada a uma estrutura de uni- dade de previsão (PU, ou prediction unit) que tem sua raiz na CU. Em UIT- T H.265, estruturas de PU possibilitam que CBs de luma e croma sejam divididos para propósitos de gerar amostras de referência corresponden- tes. Ou seja, em UIT-T H.265, CBs de luma e croma podem ser divididos em respectivos blocos de previsão (PBs, ou prediction blocks) de luma e croma, em que um PB inclui um bloco de valores de amostra para que a mesma previsão seja aplicada. Em UIT-T H.265, um CB pode ser partici- onado em 1, 2 ou 4 PBs. UIT-T H.265 suporta tamanhos de PB de amos- tras de 64 x 64 até amostras de 4 x 4. Em UIT-T H.265, PBs quadrados são suportados para intraprevisão, em que um CB pode formar o PB ou o CB pode ser dividido em quatro PBs quadrado (isto é, tipo de tamanhos de PB de intraprevisão incluem M x M ou M/2 x M/2, em que M é a altura e a largura do CB quadrado). Em UIT-T H.265, além dos PBs quadrados, PBs retangulares são suportadas para interprevisão, em que um CB pode ser reduzido pela metade vertical ou horizontalmente para formar PBs (isto é, os tipos de PB de interprevisão incluem M x M, M/2 x M/2, M/2 x M ou M x M/2). Além disso, deve-se notar que em UIT-T H.265, para interprevi- são, quatro partições assimétricas de PB são suportadas, em que o CB é particionado em dois PBs com 1 quarto da altura (no topo ou no fundo) ou da largura (na esquerda ou na direita) do CB (isto é, partições assimétricas incluem M/4 x M esquerda, M/4 x M direita, M x M/4 topo e M x M/4 fundo). Dados de intraprevisão (por exemplo elementos de sintaxe de modo de intraprevisão) ou dados de interprevisão (por exemplo elementos de sin- taxe de dados de movimento) correspondentes a um PB são usados para produzir valores de amostra previstos e/ou de referência para o PB.
[0020] JEM especifica uma CTU que tem um tamanho máximo de amostras de luma de 256 x 256. JEM especifica uma estrutura de bloco de quadtree mais árvore binária (QTBT, ou quadtree plus binary tree). Em JEM, a estrutura QTBT habilita nós folhas de quadtree a serem adicio- nalmente particionados por uma estrutura de árvore binária (BT, ou binary tree). Ou seja, em JEM, a estrutura de árvore binária habilita nós folhas de quadtree a serem recursivamente divididos vertical ou horizontal- mente. Dessa forma, a estrutura de árvore binária em JEM habilita nós folhas quadrados e retangulares, em que cada nó folha inclui um CB. Conforme ilustrado na Figura 2A, uma imagem incluída em um GOP pode incluir fatias, em que cada fatia inclui uma sequência de CTUs e cada CTU pode ser particionada de acordo com uma estrutura QTBT. Em JEM, CBs são usados para previsão sem qualquer particionamento adicional. Ou seja, em JEM, um CB pode ser um bloco de valores de amostra sobre o qual a mesma previsão é aplicada. Dessa forma, um nó folha de QTBT de JEM pode ser análogo a um PB em UIT-T H.265.
[0021] Dados de intraprevisão (por exemplo elementos de sintaxe de modo de intraprevisão) ou dados de interprevisão (por exemplo ele- mentos de sintaxe de dados de movimento) podem associar PUs a amostras de referência correspondentes. Os dados residuais podem in- cluir as respectivas matrizes de valores de diferença correspondentes a cada componente de dados de vídeo (por exemplo luma (Y) e croma (Cb e Cr)). Os dados residuais podem estar no domínio de pixel. Uma transformada, como uma transformada discreta de cosseno (DCT, ou discrete cosine transform), uma transformada discreta de seno (DST, ou discrete sine transform), uma transformada de número inteiro, uma transformada de ondeleta ou uma transformada conceitualmente simi- lar, pode ser aplicada aos valores de diferença de pixel para gerar coe- ficientes de transformada.
Deve-se notar que em UIT-T H.265, CUs po- dem ser adicionalmente subdivididas em unidades de transformada (TUs, ou Transform Units). Ou seja, uma matriz de valores de diferença de pixel pode ser subdividida para propósitos de gerar coeficientes de transformada (por exemplo quatro transformadas de 8 x 8 podem ser aplicadas a uma matriz de 16 x 16 de valores residuais correspondentes a um CB de luma de 16 x16), essas subdivisões podem ser chamadas de blocos da transformada (TBs, ou Transform Blocks). Coeficientes de transformada podem ser quantizados de acordo com um parâmetro de quantização (QP, ou quantization parameter). Coeficientes de transfor- mada quantizados (que podem ser chamados de valores de nível) po- dem ser codificados por entropia de acordo com uma técnica de codifi- cação por entropia (por exemplo codificação de comprimento variável adaptativa ao conteúdo (CAVLC, ou content adaptive variable length co- ding), codificação aritmética binária adaptativa ao contexto (CABAC, ou context adaptive binary arithmetic coding), codificação por entropia de particionamento de intervalo de probabilidade (PIPE, ou probability in- terval partitioning entropy), etc.). Além disso, elementos de sintaxe, como um elemento sintaxe que indica um modo de previsão, podem ser codificados por entropia também.
Coeficientes de transformada quanti- zados codificados por entropia e elementos de sintaxe codificados por entropia correspondentes podem formar um fluxo de bits compatível que pode ser usado para reproduzir dados de vídeo.
Um processo de bina- rização pode ser executado em elementos de sintaxe como parte de um processo de codificação por entropia.
Binarização refere-se ao processo de converter um valor de sintaxe em uma série de um ou mais bits.
Es- ses bits podem ser chamados de "bins". Conforme descrito acima, dados de intraprevisão ou dados de interprevisão são usados para produzir valores de amostra de referência para um bloco de valores de amostra. A diferença entre valores de amostra incluídos em um PB atual, ou um outro tipo de estrutura de área de ima- gem, e amostras de referência associadas (por exemplo, aquelas geradas com o uso de uma previsão) pode ser chamada de dados residuais. Con- forme descrito acima, dados de intraprevisão ou dados de interprevisão podem associar uma área de uma imagem (por exemplo um PB ou um CB) a amostras de referência correspondentes. Para codificação de intra- previsão, um modo de intraprevisão pode especificar o local de amostras de referência em uma imagem. Em UIT-T H.265, modos de intraprevisão possíveis definidos incluem um modo de previsão plano (isto é, encaixe na superfície) (predMode: 0), um modo de previsão DC (isto é, média geral plana) (predMode: 1) e 33 modos de previsão angulares (predMode: 2 a 34). Em JEM, modos de intraprevisão possíveis definidos incluem um modo de previsão plano (predMode: 0), um modo de previsão DC (pred- Mode: 1) e 65 modos de previsão angulares (predMode: 2 a 66). Deve-se notar que modos de previsão plano e DC podem ser chamados de modos de previsão não direcionais e que modos de previsão angulares podem ser chamados de modos de previsão direcionais. Deve-se notar que as técnicas descritas na presente invenção podem ser geralmente aplicáveis independentemente do número de modos de previsão possíveis definidos.
[0022] Para codificação de interprevisão, um vetor de movimento (MV, ou motion vector) identifica amostras de referência em uma imagem diferente da imagem de um bloco de vídeo a ser codificado e, assim, ex- plora redundância temporal em vídeo. Por exemplo, um bloco de vídeo atual pode ser previsto a partir do bloco (ou blocos) de referência situado no quadro (ou quadros) anteriormente codificado e um vetor de movimento pode ser usado para indicar a localização do bloco de referência. Um vetor de movimento e dados associados podem descrever, por exemplo, um componente horizontal do vetor de movimento, um componente vertical do vetor de movimento, uma resolução para o vetor de movimento (por exem- plo precisão de um quarto de pixel, precisão de metade de pixel, precisão de um pixel, precisão dois pixels, precisão de quatro pixels), uma direção de previsão e/ou um valor de índice de imagem de referência. Além disso, um padrão de codificação, como, por exemplo, UIT-T H.265, pode suportar previsão de vetor de movimento. A previsão de vetor de movimento habilita um vetor de movimento a ser especificado com o uso de vetores de movi- mento de blocos adjacentes. Exemplos de previsão de vetor de movimento incluem previsão de vetor de movimento avançada (AMVP, ou advanced motion vector prediction), previsão de vetor de movimento temporal (TMVP, ou temporal motion vector prediction), o chamado modo de "inte- gração" e a inferência de movimento de "pular" e "direcionar". Além disso, JEM suporta previsão de vetor de movimento temporal avançado (ATMVP, ou advanced temporal motion vector prediction), previsão de vetor de mo- vimento espaço-temporal (STMVP, ou Spatial-temporal motion vector pre- diction), modo de derivação de vetor de movimento de padrão correspon- dido (PMMVD, ou Pattern matched motion vector derivation), que é um modo de integração especial com base em técnicas de conversão ascen- dente de taxa de quadro (FRUC, ou Frame-Rate Up Conversion), e previ- são de compensação de movimento de transformada afim.
[0023] Os dados residuais podem incluir as respectivas matrizes de valores de diferença correspondentes a cada componente de dados de vídeo. Os dados residuais podem estar no domínio de pixel. Uma trans- formada, como uma transformada discreta de cosseno (DCT), uma trans- formada discreta de seno (DST), uma transformada de número inteiro, uma transformada de ondeleta ou uma transformada conceitualmente si- milar, pode ser aplicada a uma matriz de valores de diferença de pixel para gerar coeficientes de transformada. Em UIT-T H.265, uma CU é as- sociada a uma estrutura de unidade de transformada (TU, ou transform unit) que tem sua raiz no nível de CU. Ou seja, em UIT-T H.265, conforme descrito acima, uma matriz de valores de diferença pode ser subdividida para propósitos de gerar coeficientes de transformada (por exemplo qua- tro transformadas de 8 x 8 podem ser aplicadas a uma matriz de 16 x 16 de valores residuais). Deve-se notar que em UIT-T H.265, TBs não estão necessariamente alinhados a PBs.
[0024] Deve-se notar que em JEM, valores residuais correspon- dentes a um CB são usados para gerar coeficientes de transformada sem particionamento. Ou seja, em JEM, um nó folha de QTBT pode ser análogo tanto a um PB quanto a um TB em UIT-T H.265. Deve-se notar que em JEM, uma transformada principal e uma transformada secundária subsequente podem ser aplicadas (no codificador de ví- deo) para gerar coeficientes de transformada. Para um decodificador de vídeo, a ordem de transformadas é invertida. Além disso, em JEM, se uma transformada secundária for aplicada para gerar coeficientes de transformada, pode ser dependente de um modo de previsão.
[0025] Um processo de quantização pode ser executado em coefici- entes de transformada. A quantização aproxima coeficientes de transfor- mada por amplitudes restritas a um conjunto de valores especificados. A quantização pode ser usada para variar a quantidade de dados necessá- rios para representar um grupo de coeficientes de transformada. A quan- tização pode ser realizada através da divisão de coeficientes de transfor- mada por um fator de escala e quaisquer funções de arredondamento associadas (por exemplo arredondamento para o número inteiro mais próximo). Coeficientes de transformada quantizados podem ser chama- dos de valores de nível de coeficiente. A quantização invertida (ou "des- quantização") pode incluir a multiplicação de valores de nível de coefici- ente pelo fator de escala. Deve-se notar que, como usado na presente invenção, o termo processo de quantização em alguns casos pode se referir a divisão por um fator de escala para gerar valores de nível ou a multiplicação por um fator de escala para recuperar coeficientes de trans- formada em alguns casos. Ou seja, um processo de quantização pode se referir a quantização em alguns casos e quantização inversa em al- guns casos.
[0026] Com relação às equações usadas na presente invenção, os operadores aritméticos a seguir podem ser usados: + Adição - Subtração * Multiplicação, incluindo multiplicação de matrizes xy Exponenciação. Especifica x à potência de y. Em outros contextos, essa notação é usada para sobrescrito, não destinada à interpretação como exponenciação. / Divisão de número inteiro com truncamento do resultado em direção a zero. Por exemplo, 7/4 e -7 / -4 são truncados para 1 e - 7/4 e 7 / -4 são truncados para -1. ÷ Usado para denotar a divisão em equações matemáticas em que se pretende que não haja nenhum truncamento ou arredon- damento. 𝑥 Usado para denotar a divisão em equações matemáticas 𝑦 em que se pretende que não haja nenhum truncamento ou arredonda- mento.
[0027] Além disso, as funções matemáticas a seguir podem ser usa- das: Log2(x) logaritmo de base 2 de x; Min(x, y) = Max(x, y) = Ceil(x) o menor número inteiro maior que ou igual a x.
[0028] Com relação à sintaxe exemplificadora usada na presente invenção, as definições a seguir de operadores lógicos podem ser apli- cadas: x && y lógica booleana "e" de x e y x | | y lógica booleana "ou" de x e y ! Lógica booleana "não" x ? y : z Se x for VERDADEIRO ou não igual a 0, avalia para o valor de y; de outro modo, avalia para o valor de z.
[0029] Além disso, os operadores relacionais a seguir podem ser aplicados: > Maior que >= Maior que ou igual a < Menor que <= Menor que ou igual a == Igual a != Não igual a
[0030] Além disso, deve-se notar que nos descritores de sintaxe usa- dos na presente invenção, os descritores a seguir podem ser aplicados: - u(n): número inteiro sem sinal que usa n bits. - ue(v): elemento de sintaxe codificado por Exp-Golomb de 0- ésima ordem de número inteiro sem sinal com o bit esquerdo primeiro.
[0031] Aplicações de realidade virtual (VR, ou Virtual Reality) podem incluir conteúdo de vídeo que pode ser renderizado com uma tela montada na cabeça, sendo que apenas a área do vídeo esférico que corresponde à orientação da cabeça do usuário é renderizada. Aplicações de VR po- dem ser habilitadas por vídeo omnidirecional, que também é chamado de vídeo esférico de 360°. O vídeo omnidirecional é tipicamente capturado por múltiplas câmeras que cobrem até 360° de uma cena. Uma caracte- rística distinta de vídeo omnidirecional em comparação com vídeo normal é que, tipicamente, apenas um subconjunto de toda a região de vídeo cap- turada é mostrado, isto é, a área correspondente ao atual campo de visão
(FOV, ou field of view) do usuário é mostrada. Um FOV é algumas vezes chamado também de janela de visão. Em outros casos, uma janela de vi- são pode ser parte do vídeo esférico que é atualmente mostrado e visto pelo usuário. Deve-se notar que o tamanho da janela de visão pode ser menor que ou igual ao do campo de visão.
[0032] Uma região de máximo interesse em uma imagem de vídeo omnidirecional pode se referir a um subconjunto de toda a região de vídeo que é estatisticamente a com maior probabilidade de ser renderi- zada ao usuário no tempo de apresentação dessa imagem (isto é, com maior probabilidade de estar em um FOV). Deve-se notar que as regiões de máximo interesse de um vídeo omnidirecional podem ser determina- das pela intenção de um diretor ou produtor, ou derivadas de estatísticas de usuário por um provedor de serviços ou de conteúdo, por exemplo, através das estatísticas de quais regiões foram mais solicitadas/vistas pelos usuários quando o conteúdo de vídeo omnidirecional foi fornecido através de um serviço de fluxo contínuo (streaming). As regiões de má- ximo interesse podem ser usadas para pré-busca de dados em fluxo contínuo adaptativo de vídeo omnidirecional por clientes ou servidores de borda, e/ou otimização de transcodificação quando um vídeo omni- direcional é transcodificado, por exemplo, para um mapeamento de pro- jeção ou codec diferente. Dessa forma, as regiões de máximo interesse em uma imagem de vídeo omnidirecional podem melhorar o desempe- nho de sistema com a redução da largura de banda de transmissão e a redução da complexidade de decodificação. Deve-se notar que uma re- gião de base refere-se geralmente a uma região total de dados de vídeo codificados, por exemplo toda a região de vídeo.
[0033] Conforme descrito acima, de acordo com UIT-T H.265, cada quadro de vídeo ou imagem pode ser particionado para incluir uma ou mais fatias e adicionalmente particionado para incluir um ou mais ladrilhos. As Figuras 2A a 2C são diagramas conceituais que ilustram um exemplo de um grupo de imagens que incluem fatias e particionamento adicional de imagens em ladrilhos.
No exemplo ilustrado na Figura 2A, a Img4 é ilus- trada como incluindo duas fatias (isto é, Fatia1 e Fatia2) em que cada fatia inclui uma sequência de CTUs (por exemplo, na ordem de varredura ras- ter). Deve-se notar que uma fatia é uma sequência de um ou mais seg- mentos de fatia que começa com um segmento de fatia independente e que contém todos os segmentos de fatia dependentes subsequentes (se houver algum) que precedem o próximo segmento de fatia independente (se houver algum) na mesma unidade de acesso.
Um segmento de fatia, como uma fatia, é uma sequência de unidades de árvore de codificação.
Nos exemplos descritos na presente invenção, em alguns casos, os ter- mos fatia e segmento de fatia podem ser intercambiavelmente usados para indicar uma sequência de unidades de árvore de codificação.
No exemplo ilustrado na Figura 2B, a Img4 é ilustrada como incluindo seis la- drilhos (isto é, Ladrilho1 a Ladrilho6), em que cada ladrilho é retangular e inclui uma sequência de CTUs.
Deve-se notar que em UIT-T H.265, um ladrilho pode consistir em unidades de árvore de codificação contidas em mais de uma fatia e uma fatia pode consistir em unidades de árvore de codificação contidas em mais de um ladrilho.
No entanto, UIT-T H.265 prevê que uma ou ambas as condições a seguir devem ser cumpridas: (1) Todas as unidades de árvore de codificação em uma fatia pertencem ao mesmo ladrilho; e (2) Todas as unidades de árvore de codificação em um ladrilho pertencem à mesma fatia.
Dessa forma, por exemplo, com relação à Figura 2B, todos os ladrilhos podem pertencer a uma única fatia ou os ladrilhos podem pertencer a múltiplas fatias (por exemplo, Ladrilho1 a La- drilho3 podem pertencer à Fatia1 e Ladrilho4 a Ladrilho6 podem pertencer à Fatia2). Com relação a JVET-L1001, foi proposto que deve ser necessá- rio que fatias consistam em um número inteiro de ladrilhos completos em vez de apenas ser necessário que consistam em um número inteiro de CTUs completas.
Como tal, uma fatia que inclui um conjunto de CTUs que não formam uma região retangular de uma imagem pode ou não ser su- portada em algumas técnicas de codificação de vídeo. Além disso, uma fatia que é necessária para consistir em um número inteiro de ladrilhos completos é chamada de grupo de ladrilhos. As técnicas descritas na pre- sente invenção podem ser aplicáveis a fatias, ladrilhos e/ou grupos de la- drilhos.
[0034] Além disso, conforme ilustrado na Figura 2B, ladrilhos podem formar conjuntos de ladrilhos (isto é, Ladrilho2 e Ladrilho3 formam um con- junto de ladrilhos). Conjuntos de ladrilhos podem ser usados para definir limites para dependências de codificação (por exemplo, dependências de intraprevisão, dependências de codificação por entropia, etc.), e como tal, pode habilitar paralelismo em codificação e codificação da região de inte- resse. Por exemplo, se a sequência de vídeo no exemplo ilustrado na Fi- gura 2B corresponder a um programa de notícias noturno, o conjunto de ladrilhos formado pelo Ladrilho2 e pelo Ladrilho3 pode corresponder a uma região de interesse visual que inclui um âncora de noticiário lendo as notí- cias. UIT-T H.265 define sinalização que habilita conjuntos de ladrilhos de movimento restrito (MCTS, ou motion-constrained tile sets). Um conjunto de ladrilhos de movimento restrito pode incluir um conjunto de ladrilhos para o qual dependências de previsão interimagens sejam limitadas aos conjuntos de ladrilhos cossituados em imagens de referência. Dessa forma, é possível realizar compensação de movimento para um dado MCTS independente da decodificação de outros conjuntos de ladrilhos fora do MCTS. Por exemplo, com referência à Figura 2B, se o conjunto de ladrilhos formado pelo Ladrilho2 e pelo Ladrilho3 for um MCTS e cada uma dentre Img1 a Img3 incluir conjuntos de ladrilhos cossituados, a compensa- ção de movimento pode ser realizada no Ladrilho2 e no Ladrilho3 indepen- dentemente da codificação do Ladrilho1, Ladrilho4, Ladrilho5 e Ladrilho6 na Img4 e ladrilhos cossituados com ladrilhos Ladrilho1, Ladrilho4, Ladrilho5 e
Ladrilho6 em cada uma dentre Img1 a Img3. A codificação de dados de ví- deo de acordo com MCTS pode ser útil para aplicações de vídeo que in- cluem apresentações de vídeo omnidirecional.
[0035] Conforme ilustrado na Figura 2C, Ladrilho1 a Ladrilho6 podem formar uma região de máximo interesse de um vídeo omnidirecional. Além disso, o conjunto de ladrilhos formado por Ladrilho2 e Ladrilho3 pode ser um MCTS incluído na região de máximo interesse. A codificação de vídeo dependente de janela de visão, que pode ser chamada também de codifi- cação de vídeo parcial dependente de janela de visão, pode ser usada para habilitar a decodificação de apenas parte de toda uma região de ví- deo. Ou seja, por exemplo, codificação de vídeo dependente de janela de visão pode ser usada para fornecer informações suficientes para renderi- zação de um FOV atual. Por exemplo, o vídeo omnidirecional pode ser codificado com o uso de MCTS, de modo que cada potencial região que cubra uma janela de visão possa ser independentemente decodificada a partir de outras regiões através do tempo. Neste caso, por exemplo, para uma janela de visão atual específica, um conjunto de ladrilhos mínimo que cobre uma janela de visão pode ser enviado para o cliente, decodificado e/ou renderizadas. Esse processo pode ser chamado de decodificação parcial baseada em ladrilho simples (STPD, ou simple tile based partial decoding).
[0036] Em UIT-T H.265, uma sequência de vídeo codificado (CVS, ou coded video sequence) pode ser encapsulada (ou estruturada) como uma sequência de unidades de acesso, em que cada unidade de acesso inclui dados de vídeo estruturados como unidades de camada de abs- tração de rede (NAL, ou network abstraction layer). Em UIT-T H.265, um fluxo de bits é descrito como incluindo uma sequência de unidades de NAL que formam uma ou mais CVSs. Deve-se notar que UIT-T H.265 suporta extensões de múltiplas camadas, incluindo extensões de faixa
(RExt, ou range extensions) de formato, escalabilidade (SHVC), multivi- sualização (MV-HEVC) e 3-D (3D-HEVC). Extensões de múltiplas ca- madas habilitam uma apresentação em vídeo a incluir uma camada de base e uma ou mais camadas de aprimoramento adicionais.
Por exem- plo, uma camada de base pode habilitar uma apresentação de vídeo que tem um nível básico de qualidade (por exemplo renderização de alta definição) a ser apresentada e uma camada de aprimoramento pode habilitar uma apresentação de vídeo que tem um nível de quali- dade aprimorado (por exemplo, uma renderização de ultra-alta defini- ção) a ser apresentada.
Em UIT-T H.265, uma camada de aprimora- mento pode ser codificada por referência a uma camada de base.
Ou seja, por exemplo, uma imagem em uma camada de aprimoramento pode ser codificada (por exemplo, com o uso de técnicas de interprevi- são) com referência a uma ou mais imagens (incluindo versões em es- cala das mesmas) em uma camada de base.
Em UIT-T H.265, cada unidade de NAL pode incluir um identificador que indica uma camada de dados de vídeo à qual a unidade de NAL é associada.
Com referên- cia ao exemplo ilustrado na Figura 2A, cada fatia de dados de vídeo incluída na Img4 (isto é, Fatia1 e Fatia2) é ilustrada como sendo encap- sulada em uma unidade de NAL.
Além disso, em UIT-T H.265, cada um(a) dentre uma sequência de vídeo, um GOP, uma imagem, uma fatia e uma CTU pode estar associado(a) a metadados que descrevem pro- priedades de codificação de vídeo.
UIT-T H.265 define conjuntos de pa- râmetros que podem ser usados para descrever propriedades de codi- ficação de vídeo e/ou dados de vídeo.
Em UIT-T H.265, conjuntos de parâmetros podem ser encapsulados como um tipo especial de unidade de NAL ou podem ser sinalizados como uma mensagem.
As unidades de NAL que incluem dados de vídeo codificados (por exemplo uma fatia) podem ser chamadas de unidades de NAL de VCL (camada de codifi-
cação de vídeo, ou Video Coding Layer) e as unidades de NAL que in- cluem metadados (por exemplo conjuntos de parâmetros) podem ser chamadas de unidades de NAL não de VCL. Além disso, a UIT-T H.265 habilita mensagens de informações de aprimoramento suplementar (SEI, ou supplemental enhancement information) a serem sinalizadas. Em UIT-T H.265, mensagens de SEI auxiliam em processos relaciona- dos a decodificação, exibição ou outros propósitos, no entanto, mensa- gens de SEI podem não ser necessárias para construir as amostras de luma ou de croma pelo processo de decodificação. Em UIT-T H.265, mensagens de SEI podem ser sinalizadas em um fluxo de bits usando unidades de NAL não de VCL. Além disso, mensagens de SEI podem ser transmitidas por alguns meios que não estarem presentes no fluxo de bits (isto é, sinalizadas fora de banda).
[0037] A Figura 3 ilustra um exemplo de um fluxo de bits que inclui múltiplas CVSs, em que uma CVS é representada por unidades de NAL incluídas em uma respectiva unidade de acesso. No exemplo, ilustrado na Figura 3, unidades de NAL não de VCL incluem as respectivas unidades de conjunto de parâmetros (isto é, unidades de conjuntos de parâmetros de vídeo (VPS, ou Video Parameter Sets), de conjuntos de parâmetros de sequência (SPS, ou Sequence Parameter Sets) e de conjunto de parâme- tros de imagem (PPS, ou Picture Parameter Set)) e uma unidade de NAL de delimitador de unidade de acesso. Deve-se notar que UIT-T H.265 de- fine a semântica de cabeçalho de unidade de NAL que especifica o tipo de estrutura de dados de carga útil de sequência de bytes brutos (RBSP, ou Raw Byte Sequence Payload) incluída na unidade de NAL. Conforme des- crito acima, o vídeo omnidirecional pode ser codificado com o uso de MCTS. A extração de subfluxo de bits pode se referir a um processo em que um dispositivo que recebe um fluxo de bits compatível com UIT-T H.265 forma um novo fluxo de bits compatível com UIT-T H.265 com o descarte e/ou a modificação de dados no fluxo de bits recebido. Por exem- plo, conforme descrito acima, para uma janela de visão atual específica, um conjunto de ladrilhos mínimo que cobre uma janela de visão pode ser enviado para o cliente. A extração de subfluxo de bits pode ser usada para formar um novo fluxo de bits compatível com UIT-T H.265 que inclui o con- junto de ladrilhos mínimo. Por exemplo, com referência à Figura 2C, se uma janela de visão incluir apenas Ladrilho2 e Ladrilho3 e uma unidade de acesso em um fluxo de bits incluir unidades de NAL de VCL para Ladrilho1 a Ladrilho6, em que Ladrilho1, Ladrilho2 e Ladrilho3 são incluídos em uma primeira fatia e Ladrilho4, Ladrilho5 e Ladrilho6 são incluídos em uma se- gunda fatia, um processo de extração de subfluxo de bits pode incluir gerar um novo fluxo de bits que apenas inclua unidades de NAL de VCL para a fatia que inclui Ladrilho2 e Ladrilho3 (isto é, a unidade de NAL de VCL que inclui a fatia que inclui para Ladrilho4, Ladrilho5 e Ladrilho6 é removida do fluxo de bits recebido).
[0038] Conforme descrito acima, o termo estrutura de ladrilhos pode se referir a um particionamento específico de uma imagem em ladrilhos. Com referência à Figura 2B, a estrutura de ladrilhos para Img4 inclui os ladrilhos ilustrados, Ladrilho1 a Ladrilho6. Em alguns casos, pode ser útil usar diferentes estruturas de ladrilhos para diferentes imagens. Em UIT- T H.265, uma estrutura de ladrilhos para uma imagem é sinalizada com o uso de um conjunto de parâmetros de imagem. A Tabela 1 é uma porção da sintaxe do PPS especificado em UIT-T H.265 que inclui os elementos de sintaxe relevantes para sinalizar uma estrutura de ladri- lhos.
[0039] pic_parameter_set_rbsp() { Descritor pps_pic_parameter_set_id ue(v) pps_seq_parameter_set_id ue(v) … tiles_enabled_flag u(1) … if(tiles_enabled_flag) { num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v)
uniform_spacing_flag u(1) if(!uniform_spacing_flag) { for(i = 0; i < num_tiles_columns_minus1; i++) colunm_width_minus1[i] ue(v) for(i = 0; i < num_tiles_rows_minus1; i++) row_height_minus1[i] ue(v) } loop_filter_across_tiles_enabled_flag u(1) } … Tabela 1
[0040] UIT-T H.265 fornece as definições a seguir para os respectivos elementos de sintaxe ilustrados na Tabela 1. pps_pic_parameter_set_id identifica o PPS para referência por outros elementos de sintaxe. O valor de pps_pic_parameter_set_id deve estar na faixa de 0 a 63, inclusivos. pps_seq_parameter_set_id especifica o valor de sps_seq_parameter_set_id para o SPS ativo. O valor de pps_seq_para- meter_set_id deve estar na faixa de 0 a 15, inclusivos. tiles_enabled_flag igual a 1 especifica que há mais de um ladrilho em cada imagem com referência ao PPS. tiles_enabled_flag igual a 0 especifica que há apenas um ladrilho em cada imagem com referência ao PPS. É um requisito de conformação de fluxo de bits que o valor de tiles_enabled_flag deve ser o mesmo para todos os PPSs que são ativados em uma CVS. num_tile_columns_minus1 mais 1 especifica o número de colunas de ladrilhos que particionam a imagem. num_tile_columns_mi- nus1 deve estar na faixa de 0 a PicWidthInCtbsY ‒ 1, inclusivos. Quando não estiver presente, infere-se que o valor de num_tile_columns_mi- nus1 seja igual a 0. num_tile_rows_minus1 mais 1 especifica o número de fi- leiras de ladrilhos que particionam a imagem. num_tile_rows_minus1 deve estar na faixa de 0 a PicHeightInCtbsY ‒ 1, inclusivos. Quando não estiver presente, infere-se que o valor de num_tile_rows_minus1 seja igual a 0. Quando tiles_enabled_flag for igual a 1, num_tile_co- lumns_minus1 e num_tile_rows_minus1 não devem ser ambos iguais a 0.
uniform_spacing_flag igual a 1 especifica que limites de coluna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos são uniformemente distribuídos por toda a imagem. uniform_spa- cing_flag igual a 0 especifica que limites de coluna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos não são uniformemente dis- tribuídos por toda a imagem, mas explicitamente sinalizados com o uso dos elementos de sintaxe column_width_minus1[i] e row_height_mi- nus1 [i]. Quando não estiver presente, infere-se que o valor de uni- form_spacing_flag seja igual a 1. column_width_minus1[i] mais 1 especifica a largura da i- ésima coluna de ladrilhos em unidades de blocos de árvore de codifi- cação. row_height_minus1[i] mais 1 especifica a altura da i-ésima fileira de ladrilhos em unidades de blocos de árvore de codificação.
[0041] Além disso, em UIT-T H.265, as informações relativas a pontos de entrada em um fluxo de bits são sinalizadas com o uso de um cabeçalho de segmento de fatia. A Tabela 2 é uma porção da sin- taxe do cabeçalho de segmento de fatia especificado em UIT-T H.265 que inclui os elementos de sintaxe relevantes para sinalizar pontos de entrada.
[0042] slice_segment_header(){ Descritor … slice_pic_parameter_set_id ue(v) … if(tiles_enabled_flag || entropy_coding_sync_enabled_flag){ num_entry_point_offsets ue(v) if(num_entry_point offsets > 0){ offset_len_minus1 ue(v) for(i = 0; i < num_entry_point_offsets; i++) entry_point_offset_minus1 [i] u(v) } } … } Tabela 2
[0043] UIT-T H.265 fornece as definições a seguir para os respectivos elementos de sintaxe ilustrados na Tabela 2.
slice_pic_parameter_set_id especifica o valor de pps_pic_parameter_set_id para o PPS em uso.
O valor de slice_pic_para- meter_set_id deve estar na faixa de 0 a 63, inclusivos. num_entry_point_offsets especifica o número de elementos de sintaxe entry_point_offset_minus1[i] no cabeçalho de fatia.
Quando não estiver presente, infere-se que o valor de num_entry_point_offsets seja igual a 0. O valor de num_entry_point_offsets é restrito da seguinte forma: ‒ Se tiles_enabled_flag for igual a 0 e entropy_co- ding_sync_enabled_flag for igual a 1, o valor de num_entry_point_offsets deve estar na faixa de 0 PicHeightInCtbsY ‒ 1, inclusivos. ‒ Caso contrário, se tiles_enabled_flag for igual a 1 e en- tropy_coding_sync_enabled_flag for igual a 0, o valor de num_en- try_point_offsets deve estar na faixa de 0 a (num_tile_columns_minus1 + 1) * (num_tile_rows_minus1 + 1) ‒ 1, inclusivos. ‒ Caso contrário, se tiles_enabled_flag for igual a 1 e en- tropy_coding_sync_enabled_flag for igual a 1, o valor de num_en- try_point_offsets deve estar na faixa de 0 a (num_tile_columns_minus1 + 1) * PicHeightInCtbsY ‒ 1, inclusivos. offset_len_minus1 mais 1 especifica o comprimento, em bits, dos elementos de sintaxe entry_point_offset_minus1 [i]. O valor de offset_len_minus1 deve estar na faixa de 0 a 31, inclusivos. entry_point_offset_minus1 [i] mais 1 especifica o i-ésimo deslocamento de ponto de entrada em bytes, e é representado por offset_len_minus1 mais 1 bit.
Os dados de segmento de fatia seguem o cabeçalho de segmento de fatia que consiste em subconjuntos num_en- try_point_offsets+ 1, com valores de índice de subconjunto na faixa de 0 a num_entry_point_offsets, inclusivos.
O primeiro byte do segmento de da- dos de fatia é considerado o byte 0. Quando estiverem presentes, os bytes de prevenção de emulação que aparecem na porção de dados de seg- mento de fatia da unidade de NAL de segmento de fatia codificada são contados como parte dos dados de segmento de fatia para propósitos de identificação de subconjunto.
O subconjunto 0 consiste em bytes de 0 a entry_point_offset_minus1[0], inclusivos, dos dados de segmento de fatia codificados, subconjunto k, com k na faixa de 1 a num_en- try_point_offsets‒ 1, inclusivos, consiste em bytes firstByte[k] a lastByte [k], inclusivos, dos dados de segmento de fatia codificados com firstByte [k] e lastByte[k] definidos como: k firstByte[k] = ∑(entry_point_offset_minus1[n ‒ 1] + 1) n=1 lastByte[k] = firstByte[k] + entry_point_offset_minus1[k] O último subconjunto (com índice de subconjunto igual a num_entry_point_offsets) consiste nos bytes dos dados de segmento de fatia codificados.
Quando tiles_enabled_flag for igual a 0 e entropy_co- ding_sync_enabled_flag for igual a 1, cada subconjunto deve consistir em todos os bits codificados de todas as unidades de árvore de codifi- cação no segmento de fatia que estão no mesmo ladrilho, e o número de subconjuntos (isto é, o valor de num_entry_point_offsets+ 1) deve ser igual ao número de ladrilhos que contêm unidades de árvore de co- dificação que são segmento de fatia codificado.
NOTA 6 ‒ Quando tiles_enabled_flag for igual a 1 e en- tropy_coding_sync_enabled_flag for igual a 0, cada fatia precisa incluir um subconjunto das unidades de árvore de codificação de um ladrilho (caso no qual o elemento de sintaxe entry_point_offset_minus1[i] não está presente) ou precisa incluir todas as unidades de árvore de codi- ficação de um número inteiro de ladrilhos completos.
Quando tiles_enabled_flag for igual a 1 e entropy_co- ding_sync_enabled_flag for igual a 0, cada subconjunto k com k na faixa de 0 a num_entry_point_offsets, inclusivos, deve consistir em to- dos os bits codificados de todas as unidades de árvore de codificação no segmento de fatia que incluem blocos de árvore de codificação de luma que estão na mesma fileira de bloco de árvore de codificação de luma da imagem, e o número de subconjuntos (isto é, o valor de num_entry_point_offsets + 1) deve ser igual ao número de fileiras de bloco de árvore de codificação da imagem que contêm unidades de árvore de codificação que estão no segmento de fatia codificado. NOTA 7 ‒ O último subconjunto (isto é, subconjunto k para k igual a num_entry_point_offsets) pode ou não conter todas as unidades de árvore de codificação que incluem blocos de árvore de codificação de luma que estão em uma fileira de bloco de árvore de codificação de luma da imagem. Quando tiles_enabled_flag for igual a 1 e entropy_co- ding_sync_enabled_flag for igual a 1, cada subconjunto k com k na faixa de 0 a num_entry_point_offsets, inclusivos, deve consistir em todos os bits codificados de todas as unidades de árvore de codificação no segmento de fatia que incluem blocos de árvore de codificação de luma que estão na mesma fileira de bloco de árvore de codificação de luma de um ladrilho, e o número de subconjuntos (isto é, o valor de num_entry_point_offsets + 1) deve ser igual ao número de fileiras de bloco de árvore de codificação de luma de um ladrilho que contêm unidades de árvore de codificação que estão no segmento de fatia codificado.
[0044] Conforme ilustrado na sintaxe e na semântica acima, em UIT-T H.265, estruturas de ladrilhos são especificadas por um número de colunas e um número de fileiras e, dessa forma, são limitadas pelo fato de que cada fileira e coluna inclui o mesmo número de ladrilhos. Dessa maneira, estruturas de ladrilhos limitantes podem estar abaixo do ideal. De acordo com as técnicas descritas na presente invenção, um codificador de vídeo pode sinalizar a estrutura de ladrilhos e os conjun- tos de ladrilhos de uma maneira que forneça flexibilidade aumentada.
[0045] A Figura 1 é um diagrama de blocos que ilustra um exemplo de um sistema que pode ser configurado para codificar (isto é, codificar e/ou decodificar) dados de vídeo de acordo com uma ou mais técnicas desta divulgação. O sistema 100 representa um exemplo de um sistema que pode encapsular dados de vídeo de acordo com uma ou mais técnicas desta divulgação. Conforme ilustrado na Figura 1, o sistema 100 inclui o dispositivo de origem 102, o meio de comunicação 110 e o dispositivo de destino 120. No exemplo ilustrado na Figura 1, o dispositivo de origem 102 pode incluir qualquer dispositivo configurado para codificar dados de vídeo e transmitir dados de vídeo codificados para o meio de comunicação 110. O dispositivo de destino 120 pode incluir qualquer dispositivo configurado para receber dados de vídeo codificados através do meio de comunicação 110 e para decodificar dados de vídeo codificados. O dispositivo de origem 102 e/ou o dispositivo de destino 120 podem incluir dispositivos de com- putação equipados para comunicação com fio e/ou sem fio e podem in- cluir, por exemplo, decodificadores do tipo set-top box, gravadores de ví- deo digital, televisores, computadores de mesa, laptop ou tablet, consoles de jogos, dispositivos médicos de imageamento e dispositivos móveis, in- cluindo, por exemplo, smartphones, telefones celulares, dispositivos pes- soais de jogo.
[0046] O meio de comunicação 110 pode incluir qualquer combina- ção de meios de comunicação com fio e sem fio e/ou dispositivos de armazenamento. O meio de comunicação 110 pode incluir cabos coaxi- ais, cabos de fibra óptica, cabos de par trançado, transmissores e re- ceptores sem fio, roteadores, chaves, repetidores, estações de base ou qualquer outro equipamento que possa ser útil para facilitar a comuni- cação entre vários dispositivos e locais. O meio de comunicação 110 pode incluir uma ou mais redes. Por exemplo, o meio de comunicação
110 pode incluir uma rede configurada para habilitar o acesso à World Wide Web, por exemplo a Internet. Uma rede pode operar de acordo com uma combinação de um ou mais protocolos de telecomunicação. Protocolos de telecomunicações podem incluir aspectos proprietários e/ou podem incluir protocolos de telecomunicação padronizados. Exem- plos de protocolos de telecomunicações padronizados incluem os pa- drões da difusão de vídeo digital (DVB, ou Digital Video Broadcasting), padrões do Comitê de Sistemas de Televisão Avançado (ATSC, ou Ad- vanced Television Systems Committee), padrões da difusão digital de serviços integrados (ISDB, ou Integrated Services Digital Broadcasting), padrões da especificação de interface de serviço de dados por cabo (DOCSIS, ou Data Over Cable Service Interface Specification), padrões do sistema global para comunicações móveis (GSM, ou Global System Mobile Communications), padrões do acesso múltiplo por divisão de có- digo (CDMA, ou code division multiple access), padrões do Projeto de Parceria de 3ª Geração (3GPP, ou 3rd Generation Partnership Project), padrões do Instituto Europeu de Normas de Telecomunicações (ETSI, ou European Telecommunications Standards Institute), padrões de pro- tocolo de Internet (IP, ou Internet Protocol), padrões de protocolo de aplicação sem fio (WAP, ou Wireless Application Protocol) e padrões do Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE, ou Institute of Electrical and Electronics Engineers).
[0047] Os dispositivos de armazenamento podem incluir qualquer tipo de dispositivo ou mídia de armazenamento capaz de armazenar dados. Uma mídia de armazenamento pode incluir uma mídia legível por compu- tador tangível ou não transitória. Uma mídia legível por computador pode incluir discos ópticos, memória flash, memória magnética ou qualquer ou- tra mídia de armazenamento digital adequada. Em alguns exemplos, um dispositivo de memória ou porções do mesmo pode(m) ser descrito(as) como memória não volátil e, em outros exemplos, porções de dispositivos de memória podem ser descritas como memória volátil. Exemplos de me- mórias voláteis podem incluir memórias de acesso aleatório (RAM, ou ran- dom access memories), memórias de acesso aleatório dinâmicas (DRAM, ou dynamic random access memories), memórias de acesso aleatório es- táticas (SRAM, ou static random access memories). Exemplos de memó- rias não voláteis podem incluir discos rígidos magnéticos, discos ópticos, disquetes, memórias flash ou formas de memórias de leitura eletricamente programáveis (EPROM, ou electrically programmable read only memories) ou memórias de leitura eletricamente apagáveis e programáveis (EE- PROM, ou electrically erasable and programmable read only memories). O dispositivo (ou dispositivos) de armazenamento pode incluir cartões de memória (por exemplo, um cartão de memória digital seguro (SD, ou Se- cure Digital)), unidades de disco rígido internas/externas e/ou unidades de estado sólido internas/externas. Os dados podem ser armazenados em um dispositivo de armazenamento de acordo com um formato de arquivo definido.
[0048] A Figura 4 é um desenho conceitual que ilustra um exemplo de componentes que podem ser incluídos em uma implementação do sistema
100. Na implementação exemplificadora ilustrada na Figura 4, o sistema 100 inclui um ou mais dispositivos de computação 402A a 402N, a rede de serviço de televisão 404, o local de provedor de serviço de televisão 406, a rede de longa distância 408, a rede local 410 e um ou mais locais de provedor de conteúdo 412A a 412N. A implementação ilustrada na Figura 4 representa um exemplo de um sistema que pode ser configurado para possibilitar que um conteúdo de mídia digital como, por exemplo, um filme, um evento esportivo ao vivo, etc., e dados e aplicações e apresentações de mídia associadas a isso seja distribuído e acessado por uma plurali- dade de dispositivos de computação, como os dispositivos de computação 402A a 402N. No exemplo ilustrado na Figura 4, os dispositivos de com- putação 402A a 402N podem incluir qualquer dispositivo configurado para receber dados de uma ou mais dentre a rede de serviço de televisão 404, a rede de longa distância 408 e/ou a rede local 410. Por exemplo, os dis- positivos de computação 402A a 402N podem ser equipados para comu- nicação com fio e/ou sem fio e podem ser configurados para receber ser- viços através de um ou mais canais de dados e podem incluir televisores, incluindo os chamados televisores inteligentes, decodificadores do tipo set-top box e gravadores de vídeo digital. Além disso, os dispositivos de computação 402A a 402N podem incluir computadores de mesa, laptop ou tablet, consoles de jogos, dispositivos móveis, incluindo, por exemplo, telefones "inteligentes" (smartphones), telefones celulares e dispositivos pessoais de jogo.
[0049] A rede de serviço de televisão 404 é um exemplo de uma rede configurada para habilitar o conteúdo de mídia digital, que pode incluir serviços de televisão, seja distribuído. Por exemplo, a rede de serviço de televisão 404 pode incluir redes de televisão públicas sem fio (over-the-air), redes de provedores de serviço de televisão por sa- télite públicas ou baseadas em assinatura e redes de provedores de serviço de televisão a cabo públicas ou baseadas em assinatura e/ou provedores de serviço de Internet ou do tipo over-the-top. Deve-se no- tar que, embora em alguns exemplos a rede de serviço de televisão 404 possa ser principalmente usada para habilitar serviços de televisão a serem fornecidos, a rede de serviço de televisão 404 pode habilitar também outros tipos de dados e serviços a serem fornecidos de acordo com qualquer combinação dos protocolos de telecomunicação descri- tos na presente invenção. Além disso, deve-se notar que em alguns exemplos, a rede de serviço de televisão 404 pode habilitar comunica- ção bidirecional entre o local do provedor de serviço de televisão 406 e um ou mais dentre os dispositivos de computação 402A a 402N. A rede de serviço de televisão 404 pode compreender qualquer combi-
nação de meios de comunicação com fio e/ou sem fio. A rede de ser- viço de televisão 404 pode incluir cabos coaxiais, cabos de fibra óptica, cabos de par trançado, transmissores e receptores sem fio, roteadores, chaves, repetidores, estações de base ou qualquer outro equipamento que possa ser útil para facilitar a comunicação entre vários dispositivos e locais. A rede de serviço de televisão 404 pode operar de acordo com uma combinação de um ou mais protocolos de telecomunicação. Pro- tocolos de telecomunicações podem incluir aspectos proprietários e/ou podem incluir protocolos de telecomunicação padronizados. Exemplos de protocolos de telecomunicações padronizados incluem os padrões da DVB, padrões do ATSC, padrões da ISDB, padrões de DTMB, pa- drões de DMB, padrões da especificação de interface de serviço de dados por cabo (DOCSIS), padrões de HbbTV, padrões de W3C e pa- drões de UPnP.
[0050] Novamente com referência à Figura 4, o local de provedor de serviço de televisão 406 pode ser configurado para distribuir serviço de televisão através de uma rede de serviço de televisão 404. Por exem- plo, o local de provedor de serviço de televisão 406 pode incluir uma ou mais estações de transmissão, um provedor de televisão a cabo, ou um provedor de televisão por satélite ou um provedor de televisão baseado na Internet. Por exemplo, o local de provedor de serviço de televisão 406 pode ser configurado para receber uma transmissão que inclui pro- gramação televisiva através de um enlace ascendente/enlace descen- dente por satélite. Além disso, conforme ilustrado na Figura 4, o local de provedor de serviço de televisão 406 pode estar em comunicação com a rede de longa distância 408 e pode ser configurado para receber da- dos dos locais de provedor de conteúdo 412A a 412N. Deve-se notar que em alguns exemplos, o local de provedor de serviço de televisão 406 pode incluir um estúdio de televisão e o conteúdo pode se originar do mesmo.
[0051] A rede de longa distância 408 pode incluir uma rede baseada em pacote e operar de acordo com uma combinação de um ou mais protocolos de telecomunicação. Protocolos de telecomunicações po- dem incluir aspectos proprietários e/ou podem incluir protocolos de te- lecomunicação padronizados. Exemplos de protocolos de telecomuni- cações padronizados incluem os padrões do sistema global para comu- nicações móveis (GSM), padrões do acesso múltiplo por divisão de có- digo (CDMA), padrões do Projeto de Parceria de 3ª Geração (3GPP), padrões do Instituto Europeu de Normas de Telecomunicações (ETSI), padrões europeus (EN), padrões de IP, padrões de protocolo de aplica- ção sem fio (WAP) e padrões do Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE), como, por exemplo, um ou mais dentre os padrões IEEE 802 (por exemplo o Wi-Fi). A rede de longa distância 408 pode compreender qualquer combinação de meios de comunicação com fio e/ou sem fio. A rede de longa distância 408 pode incluir cabos coaxiais, cabos de fibra óptica, cabos de par trançado, cabos Ethernet, transmis- sores e receptores sem fio, roteadores, chaves, repetidores, estações de base ou qualquer outro equipamento que possa ser útil para facilitar a comunicação entre vários dispositivos e locais. Em um exemplo, a rede de longa distância 408 pode incluir a Internet. A rede local 410 pode incluir uma rede baseada em pacote e operar de acordo com uma com- binação de um ou mais protocolos de telecomunicação. A rede local 410 pode ser distinguida da rede de longa distância 408 com base em níveis de infraestrutura física e/ou acesso. Por exemplo, a rede local 410 pode incluir uma rede doméstica segura.
[0052] Novamente com referência à Figura 4, os locais de provedor de conteúdo 412A a 412N representam exemplos de locais que podem fornecer conteúdo multimídia ao local de provedor de serviço de tele- visão 406 e/ou aos dispositivos de computação 402A a 402N. Por exemplo, um local de provedor de conteúdo pode incluir um estúdio que tem um ou mais servidores de conteúdo de estúdio configurados para fornecer arquivos multimídia e/ou fluxos para o local de provedor de serviço de televisão 406. Em um exemplo, os locais de provedor de conteúdo 412A a 412N podem ser configurados para fornecer conte- údo multimídia usando o pacote de IP. Por exemplo, um local de pro- vedor de conteúdo pode ser configurado para fornecer conteúdo mul- timídia a um dispositivo receptor de acordo com o protocolo de fluxo contínuo em tempo real (RTSP, ou Real Time Streaming Protocol), HTTP ou similares. Além disso, os locais de provedor de conteúdo 412A a 412N podem ser configurados para fornecer dados, incluindo conteúdo baseado em hipertexto, e similares, a um ou mais dentre dis- positivos receptores, dispositivos de computação 402A a 402N e/ou local de provedor de serviço de televisão 406 através da rede de longa distância 408. Os locais de provedor de conteúdo 412A a 412N podem incluir um ou mais servidores da Web. Os dados fornecidos pelo local de provedor de dados 412A a 412N podem ser definidos de acordo com os formatos de dados.
[0053] Novamente com referência à Figura 1, o dispositivo de ori- gem 102 inclui a fonte de vídeo 104, o codificador de vídeo 106, o en- capsulador de dados 107 e a interface 108. A fone de vídeo 104 pode incluir qualquer dispositivo configurado para capturar e/ou armazenar dados de vídeo. Por exemplo, a fonte de vídeo 104 pode incluir uma câmera de vídeo e um dispositivo de armazenamento operacionalmente acoplado à mesma. O codificador de vídeo 106 pode incluir qualquer dispositivo configurado para receber dados de vídeo e gerar um fluxo de bits compatível que represente os dados de vídeo. Um fluxo de bits compatível pode se referir a um fluxo de bits a partir do qual um decodi- ficador de vídeo pode receber e reproduzir dados de vídeo. Aspectos de um fluxo de bits compatível podem ser definidos de acordo com um pa- drão de codificação de vídeo. Quando gera um fluxo de bits compatível,
o codificador de vídeo 106 pode comprimir os dados de vídeo. A com- pressão pode ser com perdas (discernível ou indiscernível para um es- pectador) ou sem perdas. A Figura 5 é um diagrama de blocos que ilus- tra um exemplo de codificador de vídeo 500 que pode implementar as técnicas para codificar os dados de vídeo descritos na presente inven- ção. Deve-se notar que, embora o codificador de vídeo exemplificador 500 seja ilustrado como tendo blocos funcionais distintos, tal ilustração é para propósitos descritivos e não limita o codificador de vídeo 500 e/ou subcomponentes do mesmo a uma arquitetura de software ou hardware específica. As funções do codificador de vídeo 500 podem ser executa- das com o uso de qualquer combinação de implementações de hardware, firmware e/ou software.
[0054] O codificador de vídeo 500 pode executar codificação de in- traprevisão e codificação de interprevisão de áreas de imagem, e, como tal, pode ser chamado de codificador de vídeo híbrido. No exemplo ilus- trado na Figura 5, o codificador de vídeo 500 recebe blocos de vídeo de origem. Em alguns exemplos, os blocos de vídeo de origem podem in- cluir áreas de imagem que foram divididas de acordo com uma estrutura de codificação. Por exemplo, os dados de vídeo de origem podem incluir macroblocos, CTUs, CBs, subdivisões dos mesmos e/ou uma outra uni- dade de codificação equivalente. Em alguns exemplos, o codificador de vídeo 500 pode ser configurado para executar subdivisões adicionais de blocos de vídeo de origem. Deve-se notar que as técnicas descritas na presente invenção são geralmente aplicáveis a codificação de vídeo, in- dependentemente de como os dados de vídeo de origem são particio- nados antes e/ou durante a codificação. No exemplo ilustrado na Figura 5, o codificador de vídeo 500 inclui o somador 502, o gerador de coefi- ciente de transformada 504, a unidade de quantização de coeficiente 506, a unidade de processamento de coeficiente de transformada e quantização inversa 508, o somador 510, a unidade de processamento de intraprevisão 512, a unidade de processamento de interprevisão 514 e a unidade de codificação por entropia 516. Conforme ilustrado na Fi- gura 5, o codificador de vídeo 500 recebe blocos de vídeo de origem e emite um fluxo de bits.
[0055] No exemplo ilustrado na Figura 5, o codificador de vídeo 500 pode gerar dados residuais mediante a subtração de um bloco de vídeo preditivo a partir de um bloco de vídeo de origem. A seleção de um bloco de vídeo preditivo é descrita em detalhes abaixo. O somador 502 repre- senta um componente configurado para executar esta operação de sub- tração. Em um exemplo, a subtração de blocos de vídeo ocorre no domínio de pixel. O gerador de coeficiente de transformada 504 aplica uma trans- formada, como uma transformada discreta de cosseno (DCT), uma trans- formada discreta de seno (DST) ou uma transformada conceitualmente si- milar, ao bloco residual ou subdivisões do mesmo (por exemplo quatro transformadas de 8 x 8 podem ser aplicadas a uma matriz de 16 x 16 de valores residuais) para produzir um conjunto de coeficientes de transfor- mada residuais. O gerador de coeficiente de transformada 504 pode ser configurado para executar quaisquer e todas as combinações das trans- formadas incluídas na família de transformadas trigonométricas discretas, incluindo aproximações das mesmas. O gerador de coeficiente de trans- formada 504 pode emitir coeficientes de transformada para a unidade de quantização de coeficiente 506. A unidade de quantização de coeficiente 506 pode ser configurada para executar a quantização dos coeficientes de transformada. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou a todos os coeficientes. O grau de quantização pode alterar a distorção de taxa (isto é, taxa de bits versus qualidade de vídeo) de dados de vídeo codificados. O grau de quantização pode ser modificado com o ajuste de um parâmetro de quantização (QP). Um parâ- metro de quantização pode ser determinado com base em valores de nível de fatia e/ou valores de nível de CU (por exemplo valores de QP delta de
CU). Os dados de QP podem incluir quaisquer dados usados para deter- minar um QP para quantizar um conjunto específico de coeficientes de transformada. Conforme ilustrado na Figura 5, coeficientes de transfor- mada quantizados (que podem ser chamados de valores de nível) são emitidos para a unidade de processamento de coeficiente de transformada e quantização inversa 508. A unidade de processamento de coeficiente de transformada e quantização inversa 508 pode ser configurada para aplicar uma quantização inversa e uma transformação inversa para gerar dados residuais reconstruídos. Conforme ilustrado na Figura 5, no somador 510, os dados residuais reconstruídos podem ser adicionados a um bloco de vídeo preditivo. Dessa maneira, um bloco de vídeo codificado pode ser reconstruído e o bloco de vídeo reconstruído resultante pode ser usado para avaliar a qualidade de codificação para uma dada previsão, transfor- mação e/ou quantização. O codificador de vídeo 500 pode ser configurado para executar múltiplas passagens de codificação (por exemplo executar codificação enquanto varia um ou mais dentre uma previsão, parâmetros de transformação e parâmetros de quantização). A distorção de taxa de um fluxo de bits ou outros parâmetros de sistema pode ser otimizada com base na avaliação de blocos de vídeo reconstruídos. Além disso, blocos de vídeo reconstruídos podem ser armazenados e usados como referên- cia para prever blocos subsequentes.
[0056] Novamente com referência à Figura 5, a unidade de proces- samento de intraprevisão 512 pode ser configurada para selecionar um modo de intraprevisão para um bloco de vídeo a ser codificado. A unidade de processamento de intraprevisão 512 pode ser configurada para avaliar um quadro e determinar um modo de intraprevisão para usar para codifi- car um bloco atual. Conforme descrito acima, modos de intraprevisão possíveis podem incluir modos de previsão planos, modos de previsão DC e modos de previsão angulares. Além disso, deve-se notar que, em alguns exemplos, pode se inferir um modo de previsão para um compo- nente de croma a partir de um modo de previsão para um modo de pre- visão de luma. A unidade de processamento de intraprevisão 512 pode selecionar um modo de intraprevisão após executar uma ou mais passa- gens de codificação. Além disso, em um exemplo, a unidade de proces- samento de intraprevisão 512 pode selecionar um modo de previsão com base em uma análise de distorção de taxa. Conforme ilustrado na Figura 5, a unidade de processamento de intraprevisão 512 emite dados de in- traprevisão (por exemplo elementos de sintaxe) para a unidade de codi- ficação por entropia 516 e para o gerador de coeficiente de transformada
504. Conforme descrito acima, uma transformada executada em dados residuais pode ser dependente do modo (por exemplo, uma matriz de transformada secundária pode ser determinada com base em um modo de previsão).
[0057] Novamente com referência à Figura 5, a unidade de proces- samento de interprevisão 514 pode ser configurada para executar codi- ficação de interprevisão para um bloco de vídeo atual. A unidade de processamento de interprevisão 514 pode ser configurada para receber blocos de vídeo de origem e calcular um vetor de movimento para PUs de um bloco de vídeo. Um vetor de movimento pode indicar o desloca- mento de uma PU de um bloco de vídeo dentro de um quadro de vídeo atual em relação a um bloco preditivo dentro de um quadro de referên- cia. A codificação de interprevisão pode usar uma ou mais imagens de referência. Além disso, a previsão de movimento pode ser unipreditiva (usar um vetor de movimento) ou bipreditiva (usar dois vetores de mo- vimento). A unidade de processamento de interprevisão 514 pode ser configurada para selecionar um bloco preditivo com o cálculo de uma diferença de pixel determinada, por exemplo, pela soma da diferença absoluta (SAD, ou sum of absolute difference), soma da diferença qua- drada (SSD, ou sum of square difference) ou outra métrica de diferença.
Conforme descrito acima, um vetor de movimento pode ser determinado e especificado de acordo com a previsão de vetor de movimento. A uni- dade de processamento de interprevisão 514 pode ser configurada para executar previsão de vetor de movimento, conforme descrito acima. A unidade de processamento de interprevisão 514 pode ser configurada para gerar um bloco preditivo com o uso dos dados de previsão de mo- vimento. Por exemplo, a unidade de processamento de interprevisão 514 pode localizar um bloco de vídeo preditivo em um armazenamento temporário de quadro (não mostrado na Figura 5). Deve-se notar que a unidade de processamento de interprevisão 514 pode ser adicional- mente configurada para aplicar um ou mais filtros de interpolação a um bloco residual reconstruído para calcular valores de pixel de subnúmero inteiro para uso na estimativa de movimento. A unidade de processa- mento de interprevisão 514 pode emitir dados de previsão do movi- mento para um vetor de movimento calculado para a unidade de codifi- cação por entropia 516.
[0058] Novamente com referência à Figura 5, a unidade de codifi- cação por entropia 518 recebe coeficientes de transformada quantiza- dos e dados de sintaxe preditivos (isto é, dados de intraprevisão e dados de previsão de movimento). Deve-se notar que em alguns exemplos, a unidade de quantização de coeficiente 506 pode executar uma varre- dura de uma matriz incluindo coeficientes de transformada quantizados antes de os coeficientes serem emitidos para a unidade de codificação por entropia 518. Em outros exemplos, a unidade de codificação entro- pia 518 pode executar uma varredura. A unidade de codificação por en- tropia 518 pode ser configurada para executar codificação por entropia de acordo com uma ou mais dentre as técnicas descritas na presente invenção. Dessa maneira, o codificador de vídeo 500 representa um exemplo de um dispositivo configurado para gerar dados de vídeo codi- ficados de acordo com uma ou mais técnicas da presente divulgação.
Em um exemplo, o codificador de vídeo 500 pode gerar dados de vídeo codificados que incluem conjuntos de ladrilhos de movimento restrito.
[0059] Novamente com referência à Figura 1, o desencapsulador de dados 107 pode receber dados de vídeo codificados e gerar um fluxo de bits compatível, por exemplo uma sequência de unidades de NAL de acordo com uma estrutura de dados definida. Um dispositivo que recebe um fluxo de bits compatível pode reproduzir dados de vídeo a partir do mesmo. Além disso, conforme descrito acima, a extração de subfluxo de bits pode se referir a um processo em que um dispositivo que recebe um fluxo de bits compatível com UIT-T H.265 forma um novo fluxo de bits compatível com UIT-T H.265 com o descarte e/ou a modificação de dados no fluxo de bits recebido. Deve-se notar que o termo fluxo de bits correspondente pode ser usado no lugar do termo fluxo de bits compa- tível.
[0060] Conforme descrito acima, em UIT-T H.265, estruturas de la- drilhos são limitadas pelo fato de que cada fileira e coluna inclui o mesmo número de ladrilhos. Em alguns casos, pode ser útil ter um número variável de ladrilhos em fileiras e/ou colunas. Por exemplo, para codificação de vídeo esférico de 360°, pode ser útil ter menos ladrilhos nas regiões polares do que no equador de uma esfera e, desse modo, neste caso, pode ser útil variar o número de colunas de ladrilhos de fileira a fileira. Em um exemplo, o encapsulador de dados 107 pode ser configurado para sinalizar as estruturas de ladrilho de acordo com uma ou mais técnicas descritas na presente invenção. Deve-se notar que o encapsulador de dados 107 não precisa necessa- riamente estar situado no mesmo dispositivo físico que o codificador de vídeo 106. Por exemplo, funções descritas como sendo executadas pelo codificador de vídeo 106 e pelo encapsulador de dados 107 po- dem ser distribuídas entre dispositivos ilustrados na Figura 4.
[0061] De acordo com as técnicas descritas na presente invenção, o encapsulador de dados 107 pode ser configurado para sinalizar um ou mais dentre os tipos de informações para uma estrutura de conjunto de ladrilhos a seguir: Um sinalizador para indicar se conjuntos de ladrilho estão habilitados.
Se não habilitados, então infere-se que toda a imagem seja um conjunto de ladrilhos.
Se a sinalização de conjunto de ladrilhos estiver habilitada, en- tão o exposto a seguir pode ser sinalizado: Número de fileiras de conjuntos de ladrilhos pode ser si- nalizado, Número de colunas de conjuntos de ladrilhos pode ser si- nalizado, Em cada conjunto de ladrilhos, as informações a seguir podem ser sinalizadas: Número de fileiras de ladrilhos no conjunto de ladrilhos, Número de colunas de ladrilhos no conjunto de ladrilhos, Um indicador/sinalizador para sinalizar se os ladrilhos es- tão uniformemente espaçados ao longo da direção de fileira em um con- junto de ladrilhos, e/ou Um indicador/sinalizador para sinalizar se os ladrilhos es- tão uniformemente espaçados ao longo da direção de coluna em um con- junto de ladrilhos, e/ou Se o espaçamento for uniforme, então o exposto a seguir pode ser sinalizado para cada conjunto de ladrilhos: A largura de ladrilho em número de CTBs em cada fileira de ladrilhos em um conjunto de ladrilhos, A altura de ladrilho em número de CTBs em cada coluna de ladrilhos em um conjunto de ladrilhos, Se o espaçamento não for uniforme, então o exposto a seguir pode ser sinalizado para cada ladrilho em cada conjunto de ladri- lhos: Número de CTBs em uma fileira em cada ladrilho em um conjunto de ladrilhos, Número de CTBs em uma coluna em cada ladrilho em um conjunto de ladrilhos
[0062] A Tabela 3 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplificadora incluída na Tabela 3 pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 3 pode ser incluída em um VPS ou SPS.
[0063] parameter_set_rbsp(){ Descritor … tiles_enabled_flag u(1) tilesets_enabled_flag u(1) … if(tiles_enabled_flag){ if(tilesets_enabled_flag){ num_tile_set_columns_minus1 ue(v) num_tile_set_rows_minus1 ue(v) } for(k = 0; k < num_tile_set_rows_minus1; k++) for(l = 0; l < num_tile_set_columns_minus1; 1++){ num_tile_columns_minus1[k][I] ue(v) num_tile_rows_minus1[k][l] ue(v) uniform_spacing_flag[k][l] u(1) if(!uniform_spacing_flag[k][l]){ for(i = 0; i <= num_tile_columns_minus1[k][l]; i++) column_width_minus1[k][l][i] for(i = 0; i <= num_tile_rows_minus1[k][l]; i++) row_height_minus1[k][l][i] } else{ tile_width_in_ctbsy_minus1[k][l] ue(v) tile_height_in_ctbsy_minus1[k][l] ue(v) } loop_filter_across_tiles_enabled_flag u(1) } } } … Tabela 3
[0064] Com relação à Tabela 3, deve-se notar que os elementos de sintaxe tiles_enabled_flag, tilesets_enabled_flag, num_tile_co- lumns_minus1[k][l], num_tile_rows_minus1[k][l], uniform_spa- cing_flag[k] [1], column_width_minus1[k][l][i], row_height_mi- nus1[k][l][i], tile_width_m_ctbsy_minus1[k][l], tile_height_in_ctbsy_minus1[k][l] e loop_filter_across_tiles_ena- bled_flag[k][l] podem ser baseados nas definições exemplificadoras a seguir: tiles_enabled_flag igual a 1 especifica que há mais de um ladrilho em cada imagem com referência ao conjunto de parâmetros. tiles_enabled_flag igual a 0 especifica que há apenas um ladrilho em cada imagem com referência ao conjunto de parâmetros. tilesets_enabled_flag igual a 1 especifica que há mais de um conjunto de ladrilhos em cada imagem com referência ao conjunto de parâmetros. tilesets_enabled_flag igual a 0 especifica que há apenas um conjunto de ladrilhos em cada imagem com referência ao conjunto de parâmetros.
É um requisito de conformação de fluxo de bits que o valor de tilesets_enabled_flag deve ser o mesmo para todos os conjuntos de parâmetros que são ativados em uma CVS.
É um requisito de conformação de fluxo de bits que quando tiles_enabled_flag for igual a 0, tilesets_enabled_flag deve ser igual a 0. num_tile_set_columns_minus1 mais 1 especifica o número de colunas de conjunto de ladrilhos que particionam a imagem. num_tile_set_columns_minus1 deve estar na faixa de 0 a PicWidthIn- CtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_set_columns_minus1 seja igual a 0. num_tile_set_rows_minus1 mais 1 especifica o número de fileiras de ladrilhos que particionam a imagem. num_tile_set_rows_minus1 deve estar na faixa de 0 a PicHeightIn- CtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_set_rows_minus1 seja igual a 0. Em um exemplo, tilesets_enabled_flag quando for igual a 1, num_tile_set_columns_minus1 e num_tile_set_rows_minus1 não devem ser ambos iguais a 0. num_tile_columns_minus1[k] [1] mais 1 especifica o nú- mero de colunas de ladrilhos que particionam o conjunto de ladrilhos associado ao índice (k,l). num_tile_columns_minus1[k] [1] deve estar na faixa de 0 a PicWidthInCtbsY ‒ 1, inclusivos.
Quando não estiver pre- sente, infere-se que o valor de num_tile_columns_minus1[k] [1] seja igual a 0. Em um outro exemplo, num_tile_columns_minus1[k] [1] deve estar na faixa de 0 a PicWidthInCtbsY ‒ num_tile_set_columns_minus1‒ 1, inclusivos. num_tile_rows_minus1[k] [1] mais 1 especifica o número de fileiras de ladrilhos que particionam o conjunto de ladrilhos associado ao índice (k,l). num_tile_rows_minus1[k] [1] deve estar na faixa de 0 a PicHei- ghtInCtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_rows_minus1[k] [1] seja igual a 0. Em um outro exemplo, num_tile_rows_minus1[k] [1] deve estar na faixa de 0 a PicHeightInCtbsY‒num_tile_set_rows_minus1 ‒ 1, inclusivos. uniform_spacing_flag[k] [1] igual a 1 especifica que limites de coluna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos são uniformemente distribuídos por todo o conjunto de ladrilhos associ- ado ao índice (k,l). uniform_spacing_flag[k] [1] igual a 0 especifica que limites de coluna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos não são uniformemente distribuídos por todo o conjunto de la- drilhos associado ao índice (k,l), mas explicitamente sinalizados com o uso dos elementos de sintaxe column_width_minus1[k] [1] [i] e row_height_minus1[k] [1] [i]. Quando não estiver presente, infere-se que o valor de uniform_spacing_flag[k] [1] seja igual a 1. column_width_minus1[k] [1] [i] mais 1 especifica a largura da i-ésima coluna de ladrilhos em unidades de blocos de árvore de co- dificação no conjunto de ladrilhos associado ao índice (k,l). row_height_minus1[k] [1] [i] mais 1 especifica a altura da i- ésima fileira de ladrilhos em unidades de blocos de árvore de codifica- ção no conjunto de ladrilhos associado ao índice (k,l). tile_width_in_ctbsy_minus1[k] [1] mais 1 especifica a lar- gura de cada coluna de ladrilhos no conjunto de ladrilhos associado ao índice (k,l) em unidades de blocos de árvore de codificação.
Em um exemplo, é um requisito de conformação de fluxo de bits que para cada k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, o valor da soma de tile_width_in_ctbsy_minus1[k] [1] para l na faixa de 0 a num_tile_set_columns_minus1 é o mesmo valor. tile_height_in_ctbsy_minus1[k] [1] mais 1 especifica a al- tura de cada fileira de ladrilhos no conjunto de ladrilhos associado ao índice (k,l) em unidades de blocos de árvore de codificação.
Em um exemplo, é um requisito de conformação de fluxo de bits que para cada l na faixa de 0 a num_tile__ser_columns_minus1, inclu- sivos, o valor da soma de tile_height_in_ctbsy_minus1[k] [1] para l na faixa de 0 a num_tile_set_rowss_minus1 é o mesmo valor. loop_filter_across_tiles_enabled_flag[k] [l] igual a 1 especi- fica que operações de filtragem em loop podem ser executadas através de limites de ladrilhos em conjunto de ladrilhos associado ao índice (k,l) com referência ao PPS. loop_filter_across_tiles_enabled_flag[k] [l] igual a 0 es- pecifica que operações de filtragem em loop não são executadas através de limites de ladrilhos em conjunto de ladrilhos associado ao índice (k,l) com referência ao PPS.
As operações de filtragem em loop incluem as operações de filtragem de deslocamento adaptativo de amostra e de filtra- gem de desbloqueio.
Quando não estiver presente, infere-se que o valor de loop_filter_across_tiles_enabled_flag[k] [1] seja igual a 1.
[0065] Em um outro exemplo, pode ser possibilitado que o número de colunas de conjunto de ladrilhos por fileira de conjunto de ladrilhos seja diferente para cada fileira de conjunto de ladrilhos. A Tabela 4 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplifi- cadora incluída na Tabela 4 pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 4 pode ser in- cluída em um VPS ou SPS.
[0066] parameter_set_rbsp(){ Descritor … tiles_enabled_flag u(1) tilesets_enabled_flag u(1) … if(tiles_enabled_flag){ if(tilesets_enabled_flag){ num_tile_set_rows_minus1 ue(v) } for(k = 0; k < num_tile_set_rows_minus1; k++){ num_tile_set_columns_minus1[k] ue(v) for(l = 0; l < num_tile_set_columns_minus1[k]; 1++){ num_tile_columns_minus1[k][l] ue(v) num_tile_rows_minus1[k][l] ue(v) uniform_spacing_flag[k][l] u(1) if(!uniform_spacing_flag[k][l]){ for(i = 0; i <= num_tile_columns_minus1[k][l]; i++) column_width_minus1[k][l][i] ue(v) for(i = 0; i <= num_tile_rows_minus1[k][l]; i++) row_height_minus1[k][l][i] ue(v) } else{ tile_width_in_ctbsy_minus1[k][l] ue(v) tile_height_in_ctbsy_minus1[k][l] ue(v) } loop_filter_across_tiles_enabled_flag[k][l] u(1) } } } Tabela 4
[0067] Com relação à Tabela 4, deve-se notar que os elementos de sintaxe tiles_enabled_flag, tilesets_enabled_flag, num_tile_rows_minus1, uniform_spacing_flag[k][l], co- lumn_width_minus1[k][l][i], row_height_minus1[k][l][i],
tile_width_in_ctbsy_minus1[k][l], tile_height_in_ctbsy_mi- nus1[k][l] e loop_filter_across_tiles_enabled_flag[k][l] podem ser baseados nas definições fornecidas acima em relação à Tabela 3. num_tile_set_columns_minus1[k] pode ser baseado na definição exemplificadora a seguir: num_tile_set_columns_minus1[k] mais 1 especifica o nú- mero de colunas de conjunto de ladrilhos na fileira de conjunto de ladrilhos k. num_tile_set_columns_minus1[k] deve estar na faixa de 0 a PicWidthIn- CtbsY ‒ 1, inclusivos. Quando não estiver presente, infere-se que o valor de num_tile_set_columns_minus1[k] seja igual a 0 para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos.
[0068] Em um outro exemplo, pode ser possibilitado que o número de fileiras de conjunto de ladrilhos por coluna de conjunto de ladrilhos seja diferente para cada fileira de conjunto de ladrilhos. A Tabela 5 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplifi- cadora incluída na Tabela 5 pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 5 pode ser in- cluída em um VPS ou SPS.
[0069] parameter_set_rbsp(){ Descritor … tiles_enabled_flag u(1) tilesets_enabled_flag u(1) … if(tiles_enabled_flag){ if(tilesets_enabled_flag){ num_tile_set_columns_minus1 ue(v) } for(l = 0; l < num_tile_set_columns_minus1; 1++){ num_tile_set_rows_minus1[l] ue(v) for(k = 0; k < num_tile_set_rows_minus1[l]; k++){ num_tile_columns_minus1[k][l] ue(v) num_tile_rows_minus1[k][l] ue(v) uniform_spacing_flag[k][l] u(1) if(!uniform_spacing_flag[k][l]){ for(i = 0; i <= num_tile_columns_minus1[k][l]; i++) column_width_minus1[k][l][i] ue(v) for(i = 0; i <= num_tile_rows_minus1[k][l]; i++)
row_height_minus1[k][l][i] ue(v) } else { tile_width_in_ctbsy_minus1[k][l] ue(v) tile_height_in_ctbsy_minus1[k][l] ue(v) } loop_filter_across_tiles_enabled_flag[k][l] u(1) } } } Tabela 5
[0070] Com relação à Tabela 5, deve-se notar que os elementos de sintaxe tiles_enabled_flag, tilesets_enabled_flag, num_tile_co- lumns_minus1, uniform_spacing_flag[k][l], column_width_mi- nus1[k][l][i], row_height_minus1[k][l][i], tile_width_in_cthsy_mi- nus1[k][l], tile_height_in_ctbsy_minus1[k][l] e loop_fil- ter_across_tiles_enabled_flag[k][l] podem ser baseados nas defini- ções fornecidas acima em relação à Tabela 3. num_tile_set_rows_mi- nus1[k] pode ser baseado na definição exemplificadora a seguir: num_tile_set_rows_minus1[l] mais 1 especifica o número de fileiras de conjunto de ladrilhos na coluna de conjunto de ladrilhos l. num_tile_set_rows_minus1[l] deve estar na faixa de 0 a PicHeightInCtbsY ‒ 1, inclusivos. Quando não estiver presente, infere-se que o valor de num_tile_set_rows_minus1[1] seja igual a 0 para 1 na faixa de 0 a num_tile_set_columns_minus1, inclusivos. Com relação a este exemplo, em um outro exemplo, os índices de matriz [k][l] para elementos de sintaxe num_tile_columns_mi- nusl[k][l], num_tile_rows_minus1[k][l], uniform_spacing_flag[k][l], tile_width_in_ctbsy_minus1[k][l], tile_height_in_ctbsy_minus1[k][l] e loop_filter_across_tiles_enabled_flag[k][l] podem, em vez disso, ser si- nalizados como índices na ordem [l][k] e, como tal, podem ser sinalizados como elementos de sintaxe num_tile_columns_minus1[l][k], num_tile_rows_minus1[l][k], uniform_spacing_flag[l][k], tile_width_in_ctbsy_minus1[l][k], tile_height_in_ctbsy_minus1[l][k], loop_filter_across_tiles_enabled_flag[l][k].
[0071] Além disso, com relação a este exemplo, em um outro exem- plo, os índices de matriz [k][l][i] para elementos column_width_mi- nus1[k][l][i], row_height_minus1[k][l][i] podem, em vez disso, ser sinaliza- dos como índices na ordem [l][k][i] e, como tal, podem ser sinalizados como elementos de sintaxe column_width_minus1[l][k] [i], row_height_minus1[l][k] [i].
[0072] Em um exemplo, de acordo com as técnicas da presente invenção, a ordem de varredura raster de ladrilhos pode ser fileira por fileira em um conjunto de ladrilhos e os conjuntos de ladrilhos são or- denados por varredura raster na imagem. Deve-se notar que isso torna os dados codificados em um conjunto de ladrilhos contíguos, o que pode ajudar na junção dos fluxos de bits de conjunto de ladrilhos e na decodificação paralela dessas porções de fluxo de bits. O termo "jun- ção" aqui pode se referir à extração apenas de porção do fluxo de bits geral em que a porção extraída pode corresponder a um ou mais con- juntos de ladrilhos. Em contrapartida, em UIT-T H.265, a ordenação de varredura raster de ladrilhos é fileira por fileira em uma imagem. A Fi- gura 6 ilustra uma varredura raster de ladrilhos em que a ordem de raster de ladrilhos é fileira por fileira em um conjunto de ladrilhos e os conjuntos de ladrilhos são ordenados por varredura raster na imagem. Na Figura 6, o número de subscrito indicado para cada ladrilho fornece a ordem na qual um ladrilho é scanner.
[0073] Em um exemplo, de acordo com as técnicas da presente in- venção, a ordenação de varredura raster de blocos de árvore codificados (CTBs/CTUs) pode ser fileira por fileira em varredura raster de ladrilhos em um conjunto de ladrilhos e os conjuntos de ladrilhos são ordenados por varredura raster na imagem. Deve-se notar que isso torna os dados codi- ficados em um conjunto de ladrilhos contíguos, o que pode ajudar a juntar os fluxos de bits de conjunto de ladrilhos e a decodificar paralelamente. O termo "junção" aqui pode se referir à extração apenas de porção do fluxo de bits geral onde a porção extraída pode corresponder a um ou mais con- juntos de ladrilhos. Em contrapartida, em UIT-T H.265, a ordenação de varredura raster de blocos de árvore codificados (CTBs/CTUs) é fileira por fileira em varredura raster de ladrilhos na imagem. A Figura 7 ilustra que uma ordenação de varredura raster de blocos de árvore codificados (CTBs/CTUs) pode ser fileira por fileira em varredura raster de ladrilhos em um conjunto de ladrilhos e os conjuntos de ladrilhos são ordenados por varredura raster na imagem. Na Figura 7, o número indicado para cada CTU fornece a ordem na qual uma CTU é varrida. Deve-se notar que o exemplo na Figura 7 inclui a mesma estrutura de ladrilhos conforme ilus- trado na Figura 6.
[0074] A ordenação de varredura raster de blocos de árvore codi- ficados (CTBs/CTUs), ladrilhos e conjuntos de ladrilhos pode ser ba- seada na descrição a seguir: Esta subseção especifica a ordem de unidades de NAL de VCL e associação a imagens codificadas. Cada unidade de NAL de VCL é parte de uma imagem codificada. A ordem das unidades de NAL de VCL dentro de uma imagem codificada é restrita da seguinte forma: ‒ A primeira unidade de NAL de VCL da imagem codifi- cada deve ter first_slice_segment_in_pic_flag igual a 1. ‒ Que sliceSegAddrA e sliceSegAddrB sejam os valores de slice_segment_address de quaisquer duas unidades de NAL de segmento de fatia codificadas A e B na mesma imagem codificada. Quando uma das condições a seguir for verdadeira, a unidade de NAL de segmento de fatia codificada A deve preceder a unidade de NAL de segmento de fatia codi- ficada B: ‒ TileId[CtbAddrRsToTs[sliceSegAddrA]] é menor que Ti- leId[CtbAddrRsToTs[sliceSegAddrB]].
‒ TileId[CtbAddrRsToTs[sliceSegAddrA]] é igual a Ti- leId[CtbAddrRsToTs[sliceSegAddrB]] e CtbAddrRsToTs[sliceSegA- ddrA] é menor que CtbAddrRsToTs[sliceSegAddrB]. A lista colWidth[k] [l] [i] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para i na faixa de 0 a num_tile_columns_minus1, inclusivos, que especifica a largura da i- ésima coluna de ladrilhos do conjunto de ladrilhos associado ao índice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ if(uniform_spacing_flag[k][l]) for(i = 0; i <= num_tile_columns_minus1 [k][l]; i++) colWidth[k][l][i] = tile_width_in_ctbsy[k][l] ‒ else{ for(i = 0; i <= num_tile_columns_minus1[k][l]; i++){ colWidth[k][l][i] = column_width_minus1[k][l][i] + 1 } } } }
[0075] A lista rowHeight[k] [l] [j] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e 1 na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para j na faixa de 0 a num_tile_rows_minus1, inclusivos, que especifica a altura da j-ésima fileira de ladrilhos do conjunto de ladrilhos associado ao índice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1;k++){ for(l=0; l<=num_tile_set_columns_minus1; 1++){ if(uniform_spacing_flag[k][l])
for(j = 0;j <= num_tile_rows_minus1[k][l]; j++) rowHeight[k][l][j] = tile_height_in_ctbsy[k][l] else{ for(j = 0; j <= num_tile_rows_minus1 [k][l]; j++){ rowHeight[k][l][j] = row_height_minus1[k][l][j] + l } } } } A variável NumTileSets que indica o número de conjuntos de ladrilhos é derivada da seguinte forma: NumTileSets = (num_tile_set_rows_minus1+1)*(num_tile_set_col- umns_minus1+1) As matrizes de pwctbsy[k][l], phctbsy[k][l], psizectbsy[k][l] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, que especifi- cam respectivamente a largura da imagem em CTBs de luma, a altura da imagem em CTBs de luma e o tamanho da imagem em CTBs de luma conjunto de ladrilhos associado ao índice (k,l), e a matriz ctbAddrRSOffset[k][l] para k na faixa de 0 a num_tile_set_rows_mi- nus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, in- clusivos, que especificam a contagem cumulativa de CTBs até o con- junto de ladrilhos associado ao índice (k,l) é derivada da seguinte forma: ctbAddrRSOffsetCalc=0; picSizeInCtbsY=0; for(k=0;k<=num_tile_set_rows_minus1;k++){ for(l=0;l<=num_tile_set_columns_minus1;1++){ for(pwctbsy[k][l] = 0, i = 0; i <= num_tile_columns_minus1[k][l]; i++){ pwctbsy[k][l] += (colWidth [k][l][i]) }
for(phctbsy[k][l] = 0, i = 0; i <= num_tile_rows_minus1[k][l]; i++){ phctbsy[k][l] += (rowHeight [k][l][i]); } psizectbsy[k][l] =pwctbsy[k][l] *phctbsy[k][l] picSizeInCtbsY+= psizectbsy[k][l] ctbAddrRSOffset[k][l] =ctbAddrRSOffsetCalc ctbAddrRSOffsetCalc+=psizectbsy[k][l] } } Um j-ésimo conjunto de ladrilhos é associado a índices (k,l) da forma a seguir. Um j-ésimo conjunto de ladrilhos pode ser chamado de conjunto de ladrilhos com índice j. Dado o índice de conjunto de ladrilhos j e o número de colunas de conjunto de ladrilhos na imagem, k e l são derivados da seguinte forma: k = j/(num_tile_set_columns_minus1+1) l = j%(num_tile_set_columns_minus1+1) Dados os índices k e l e o número de colunas de conjunto de ladrilhos na imagem, o índice de conjunto de ladrilhos j é derivado da se- guinte forma: j = k*((num_tile_set_columns_minus1+1)+1
[0076] A lista colBd[k] [l] [i] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e 1 na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para i na faixa de 0 a num_tile_columns_minus1 + 1, inclusivos, que especifica a localização do i-ésimo limite de coluna de ladrilhos do conjunto de ladrilhos associado ao índice (k,l) em unidades de blocos de árvore de codificação, é derivada da seguinte forma: for (k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minusi1;l++){ for(colBd[k][l][0] = 0, i = 0; i <= num_tile_columns_minus1[k][l]; i++)
colBd[k][l][i + 1] = colBd[k][l][i] + colWidtht[k][l][i] } } A lista rowBd[j] para k na faixa de 0 a num_tile_set_rows_mi- nus1, inclusivos, e 1 na faixa de 0 a num_tile_set_columns_minus1, inclu- sivos, e para j na faixa de 0 a num_tile_rows_minus1 + 1, inclusivos, que especifica a localização do j-ésimo limite de fileira de ladrilhos do conjunto de ladrilhos associado ao índice (k,l) em unidades de blocos de árvore de codificação, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1;k++){ for(l=0;l<=num_tile_set_columns_minus1;l++){ for(rowBd[k][l][0] = 0, j = 0; j <= num_tile_rows_minus1[k][l]; j++) rowBd[k][l][j + 1] = rowBd[k][l][j] + rowHeight[k][l][j] } }
[0077] A lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura raster de CTB de uma imagem em um endereço de CTB em conjunto de ladrilhos e varredura de ladrilhos, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1;k++){ for(l=0;l<=num_tile_set_columns_minus1;l++){ for(ctbAddrRs = 0; ctbAddrRs < psizectbsy[k][l]; ctbAddrRs++){ tbX = ctbAddrRs % pwctbsy [k][l] tbY = ctbAddrRs/pwctbsy [k][l] for(i = 0; i <= num_tile_columns_minus1[k][l]; i++) if(tbX >= colBdtk][1][i]) tileX = i for(j = 0;j <= num_tile_rows_minus1[k][l]; j++) if(tbY >= rowBd[k][l][j])
tileY = j CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] = 0 for(i = 0; i < tileX; i++) CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += rowHeight[k][l][tileY] * colWidth[i] for(j = 0; j < tileY; j++) CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += pwctbsy [k][l] * rowHeight[k][l][j] CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += (tbY ‒ rowBd[k][l][tileY]) * colWidth[k][l][tileX] + tbX ‒ colBd[k][l][tileX] CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += ctbAddrRSOff- set[k][l] } } } A lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSizeInCtbsY ‒ 1, inclusivos, que especifica a conversão de um en- dereço de CTB na varredura de ladrilhos em um endereço de CTB na var- redura raster de CTB de uma imagem, é derivada da seguinte forma: for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]] = ctbAddrRs A lista TileId[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSi- zelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em uma ID de ladrilhos, é derivada da se- guinte forma: for(k=0;k<=num_tile_set_rows_minus1;k++){ for(l=0;l<=num_tile_set_columns_minus1;l++){ for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1 [k][l]; j++) for(i = 0; i <= num_tile_columns_minus1[k][l]; i++, tileIdx++) for(y = rowBd[k][l][j]; y < rowBd[k][l][j + 1]; y++)
for(x = colBd[k][l][i]; x < colBd[k][l][i + 1]; x++) TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x + ctbAddrRSOffset[k][l]]] = tileIdx } }
[0078] Em um exemplo de acordo com as técnicas da presente in- venção, o encapsulador de dados 107 pode ser configurado para sina- lizar informações de modo que cada conjunto de ladrilhos e os ladrilhos no conjunto de ladrilhos possam ser independentemente processados. Em um exemplo, as informações de faixa de bytes de cada conjunto de ladrilhos são sinalizadas. Em um exemplo, isto pode ser sinalizado como uma lista de deslocamentos de ponto de entrada de conjunto de ladrilhos. A Figura 8 ilustra e exemplifica quando cada um dentre T[j] e T[j+1], respectivamente, indica os tamanhos dos bytes que pertencem ao j-ésimo e ao (j+1)-ésimo conjunto de ladrilhos, respectivamente. Adi- cionalmente, em cada conjunto de ladrilhos, informações de faixa de bytes são sinalizadas para cada ladrilho no conjunto de ladrilhos. Em um exemplo, isto pode ser sinalizado como uma lista de deslocamentos de ponto de entrada de ladrilhos. Na Figura 8, b[j][k] e b[j+1][k], respec- tivamente, indicam os tamanhos dos bytes que pertencem ao k-ésimo subconjunto de ladrilhos do j-ésimo conjunto de ladrilhos e ao k-ésimo subconjunto de ladrilhos do (j+1)-ésimo conjunto de ladrilhos, respecti- vamente. A Tabela 6 ilustra um cabeçalho de segmento de fatia exem- plificador que pode ser usado para sinalizar informações de modo que cada conjunto de ladrilhos e ladrilhos dentro do conjunto de ladrilhos possam ser independentemente processados de acordo com as técni- cas da presente invenção.
[0079] slice_segment_header(){ Descritor if(tiles_enabled_flag | | entropy_coding_sync_enabled_flag){ if(tilesets_enabled_flag){ tileset_offset_len_minus1 ue(v)
for(j = 0; j < NumTileSets-1; j++) tileset_entry_point_offset_minus1[j] u(v) } for(j = 0; j < NumTileSets; j++){ num_entry_point_offsets[j] ue(v) if(num_entry_pomt_offsets[j] > 0){ offset_len_minus1[j] ue(v) for(i = 0; i < num_entry_point_offsets[j]; i++) entry_point offset minus1[j][i] u(v) } } } … } Tabela 6
[0080] Com relação à Tabela 6, deve-se notar que os elementos de sintaxe tileset_ofiset_len_minus1, tileset_entry_point_of- feet_minus1, num_entry_point_offsets, offset_len_minus1, e en- try_point_offset_minus1, podem ser baseados nas definições a se- guir: tileset_offset_len_minus1 mais 1 especifica o comprimento, em bits, dos elementos de sintaxe tileset_entry_point_offset_minus1[i]. O valor de tileset_offset_len_minus1 deve estar na faixa de 0 a 31, inclusivos. tileset_entry_point_offset_minus1[i] mais 1 especifica o i- ésimo deslocamento de ponto de entrada em bytes para o i-ésimo conjunto de ladrilhos, e é representado por tileset_offset_len_minus1 mais 1 bit. Os dados de segmento de fatia seguem o cabeçalho de segmento de fatia que consiste em subconjuntos NumTileSets, com valores de índice de con- junto de ladrilhos na faixa de 0 a NumTileSets-1, inclusivos. O primeiro byte do segmento de dados de fatia é considerado o byte 0. Quando esti- verem presentes, os bytes de prevenção de emulação que aparecem na porção de dados de segmento de fatia da unidade de NAL de segmento de fatia codificada são contados como parte dos dados de segmento de fatia para propósitos de identificação de subconjunto. O conjunto 0 con- siste em bytes de 0 a tileset_entry_point_offset_minus1[0], inclusivos, dos dados de segmento de fatia codificados, conjunto de ladrilhos k, com k na faixa de 1 a NumTileSets ‒ 1, inclusivos, consiste em bytes firstTile- setByte[k] a lastTileSetByte[k], inclusivos, dos dados de segmento de fatia codificados com firstTilesetByte[k] a lastTileSetByte[k] definidos como: k firstTileSetByte[k] = ∑ tileset_entry_point_offset_minus1[n ‒ 1] + 1 n=1 lastTileSetByte[k] = firstTileSetByte[k] + tileset_entry_point_offset_minus1[k] O último subconjunto (com índice de subconjunto igual a NumTileSets) consiste nos bytes restantes dos dados de segmento de fatia codificados, isto é, os bytes de lastTileSetByte[NumTileSets-l]+l até o final dos dados de segmento de fatia. Cada subconjunto deve consistir em todos os bits codifica- dos de todas as unidades de árvore de codificação no segmento de fatia que estão no mesmo conjunto de ladrilhos. num_entry_point_offsets[j] especifica o número de elemen- tos de sintaxe entry_point_offset_minus1[j] [i] para o j-ésimo conjunto de ladrilhos no cabeçalho de fatia. Quando não estiver presente, infere-se que o valor de num_entry_point_offsets[j] seja igual a 0. As variáveis k e l são derivadas da seguinte forma: k = j/(num_tile_set_columns_minus1+1) l =j%(num_tile_set_columns_minus1+1)
[0081] O valor de num_entry_point_offsets[j] é restrito da seguinte forma: ‒ Se tiles_enabled_flag for igual a 0 e entropy_co- ding_sync_enabled_flag for igual a 1, o valor de num_entry_point_offsets[j] deve estar na faixa de 0 a PicHeightInCtbsY ‒ 1, inclusivos. ‒ Caso contrário, se tiles_enabled_flag for igual a 1 e en- tropy_coding_sync_enabled_flag for igual a 0, o valor de num_en- try_point_offsets[j] deve estar na faixa de 0 a (num_tile_columns_mi- nus1[k] [l] + 1) * (num_tile_rows_minus1 [k] [l] + 1) ‒ 1, inclusivos, ‒ Caso contrário, quando tiles_enabled_flag for igual a 1 e entropy_coding_sync_enabled_flag for igual a 1, o valor de num_en- try_point_offsets deve estar na faixa de 0 a (num_tile_colunms_minus1 [k] [l] + 1) * phctbsy[k] [l] ‒ 1, inclusivos. offset_len_minus1[j] mais 1 especifica o comprimento, em bits, dos elementos de sintaxe entry_point_offset_minus1[j] [i]. O valor de offset_len_minus1[j] deve estar na faixa de 0 a 31, inclusivos. entry_point_offset_minus1[j] [i] mais 1 especifica o i- ésimo deslocamento de ponto de entrada em bytes no j-ésimo conjunto de ladrilhos, e é representado por offset_len_minus1[j] mais 1 bit.
Os dados nos dados de segmento de fatia que correspondem ao j-ésimo conjunto de ladrilhos seguem a posição de tileset_en- try_point_offset_minus1[j] e consistem em subconjuntos num_en- try_point_offsets[j] + 1, com valores de índice de subconjunto para o j- ésimo conjunto de ladrilhos na faixa de 0 a num_entry_point_offsets[j], inclusivos.
O primeiro byte do segmento de dados de fatia é conside- rado o byte 0. Quando estiverem presentes, os bytes de prevenção de emulação que aparecem na porção de dados de segmento de fatia da unidade de NAL de segmento de fatia codificada são contados como parte dos dados de segmento de fatia para propósitos de identificação de subconjunto.
O subconjunto 0 para o j-ésimo conjunto de ladrilhos consiste em bytes tileset_entry_point_offset_minus1[j] + 0 a tileset_en- try_point_offset_minus1[j] + entry_point_offset_minus1[0], inclusivos, dos dados de segmento de fatia codificados, subconjunto k, com k na faixa de 1 a num_entry_point_offsets[j] ‒ 1, inclusivos, consiste em bytes firstByte[j][k] a lastByte[j][k], inclusivos, dos dados de segmento de fatia codificados com firstByte [j] [k] e lastByte[j][k] definidos como: firstByte[j][k] = tileset_entry_point_offset[j] 𝑘
+ ∑ entry_point_offset_minus1[j][n‒ 1] + 1 𝑛=1 lastByte[j][k] = firstByte[k] + entry_point_offset_minus1[j][k] O último subconjunto (com índice de subconjunto igual a [j][num_entry_point_offsets[j]]) consiste nos bytes lastByte[j][num_en- try_point_offsets[j]-1]+l a tileset_entry_point_offset_minus1[j+1]-1, in- clusivos, dos dados de segmento de fatia codificados para j na faixa de 0 a NumTileSets-1.
[0082] O último subconjunto (com índice de subconjunto igual a [NumTileSets -1] [num_entry_point_offsets[NumTileSets]]) do último conjunto de ladrilhos consiste nos bytes dos dados de segmento de fatia codificados, isto é os bytes desde lastByte[NumTileSets-1] [num_entry_point_offsets[j]-1]+l até o final dos dados de segmento de fatia. Quando tiles_enabled_flag for igual a 1 e entropy_co- ding_sync_enabled_flag for igual a 0, cada subconjunto deve consistir em todos os bits codificados de todas as unidades de árvore de codifi- cação no segmento de fatia que estão no mesmo ladrilho, e o número de subconjuntos (isto é, o valor de num_entry_point_offsets[j]+ 1) deve ser igual ao número de ladrilhos que contêm unidades de árvore de codificação que estão no j-ésimo conjunto de ladrilhos no segmento de fatia codificado. NOTA: Quando tiles_enabled_flag for igual a 1 e en- tropy_coding_sync_enabled_flag for igual a 0, cada fatia precisa incluir um subconjunto das unidades de árvore de codificação de um ladrilho (caso no qual o elemento de sintaxe entry_point_offset_minus1[j][i] não está presente) ou precisa incluir todas as unidades de árvore de codi- ficação de um número inteiro de ladrilhos completos. Quando tiles_enabled_flag for igual a 0 e entropy_co- ding_sync_enabled_flag for igual a 1, cada subconjunto k com k na faixa de 0 a num_entry_point_offsets[j], inclusivos, deve consistir em todos os bits codificados de todas as unidades de árvore de codifica- ção no segmento de fatia que incluem blocos de árvore de codificação de luma que estão na mesma fileira de bloco de árvore de codificação de luma da imagem, e o número de subconjuntos (isto é, o valor de num_entry_point_offsets[j] + 1) deve ser igual ao número de fileiras de bloco de árvore de codificação da imagem que contêm unidades de árvore de codificação que estão no segmento de fatia codificado. NOTA: O último subconjunto (isto é, subconjunto k para k igual a num_entry_point_offsets[j]) pode ou não conter todas as unidades de árvore de codificação que incluem blocos de árvore de codificação de luma que estão em uma fileira de bloco de árvore de codificação de luma da imagem. Quando tiles_enabled_flag for igual a 1 e entropy_co- ding_sync_enabled_flag for igual a 1, cada subconjunto k para o j- ésimo conjunto de ladrilhos com k na faixa de 0 a num_en- try_point_offsets[j], inclusivos, deve consistir em todos os bits codifica- dos de todas as unidades de árvore de codificação no segmento de fatia que incluem blocos de árvore de codificação de luma que estão na mesma fileira de bloco de árvore de codificação de luma de um ladrilho no j-ésimo conjunto de ladrilhos, e o número de subconjuntos (isto é, o valor de num_entry_point_offsets[j] + 1) deve ser igual ao número de fileiras de bloco de árvore de codificação de luma de um ladrilho que contêm unidades de árvore de codificação que estão no j- ésimo conjunto de ladrilhos no segmento de fatia codificado.
[0083] Em um exemplo, as informações de comprimento de deslo- camento usadas para codificação de comprimento fixo de sinalização de faixa de bytes de ladrilho (sinalização de deslocamento de ladrilho) em cada conjunto de ladrilhos podem ser sinalizadas apenas uma vez e serão aplicadas a todos os conjuntos de ladrilhos. Uma sintaxe exem- plificadora para isso é mostrada na Tabela 7.
[0084] slice_segment_header(){ Descritor … } if(tiles_enabled_flag | | entropy_coding_sync_enabled_flag){ if(tilesets_enabled_flag){ tileset_offset_len_minus1 ue(v) for(j = 0; j < NumTileSets-1; j++) tileset_entry_point_offset_minus1[j] u(v) } all_tile_offset_len_minus1 ue(v) for(j = 0; j < NumTileSets; j++){ num_entry_point_offsets[j] ue(v) if(num_entry_point_offsets[j] > 0){ for(i = 0; i < num_entry_point_offsets[j]; i++) entry_point_offset_minus1[j][i] u(v) } } } … Tabela 7
[0085] Com relação à Tabela 7, deve-se notar que os elementos de sintaxe tileset_offeet_len_minus1, tileset_entry_point_offset_mi- nus1, num_entry_point_offsets e offset_len_minus1, podem ser ba- seados nas definições fornecidas acima em relação à Tabela 6 e all_tile_offset_len_minus1 e entry_point_offset_minus1 podem ser baseados nas definições a seguir: all_tile_offset_len_minus1 mais 1 especifica o compri- mento, em bits, dos elementos de sintaxe entry_point_offset_minus1[j] [i] para cada valor de j na faixa de 0 a NumTileSets-1, inclusivos. O valor de all_tile_offset_len_minus1 deve estar na faixa de 0 a 31, inclu- sivos. entry_point_offset_minus1[j] [i] mais 1 especifica o i-ésimo deslocamento de ponto de entrada em bytes no j-ésimo conjunto de la- drilhos, e é representado por all_tile_offset_len_minus1 mais 1 bit.
[0086] Em um exemplo, as informações de faixa de bytes de ladri- lho podem ser sinalizadas em um único loop para todos os ladrilhos na imagem. Nesse caso, um único elemento de sintaxe pode ser sinali- zado para número de faixas de bytes de ladrilho sinalizado. Então, os outros elementos de sintaxe sinalizados podem ser usados para deter- minar quantos desses elementos de faixa de byte de ladrilho perten- cem a cada conjunto de ladrilhos.
[0087] Em um exemplo, os elementos de sintaxe para número de colunas de conjunto de ladrilhos (unm_tile_set_columns_minus1) e nú- mero de fileiras de conjunto de ladrilhos (num_tile_set_rows_minus1) na imagem podem ser codificados com comprimento fixo com o uso de codificação u(v) em vez de codificação ue(v). Em um exemplo, um ele- mento de sintaxe adicional pode ser sinalizado para indicar o compri- mento de bits usado para codificação de comprimento fixo desses ele- mentos, neste caso. Em um outro exemplo, o comprimento de bits usado para codificação desses elementos de sintaxe pode não ser si- nalizado, mas, em vez disso, infere-se que seja igual a: Ceil(Log2(PicSizeInCtbsY)) bits, em que PicSizeInCtbsY indica o número de CTBs na imagem.
[0088] Em um exemplo, os elementos de sintaxe para a largura de ladrilho no número de CTBs para um conjunto de ladrilhos associado ao índice (k,l) (tile_width_in_ctbsy_minus1[k][l]) e a altura de ladrilho no nú- mero de CTBs para um conjunto de ladrilhos associado ao índice (k,l) (tile_height_in_ctbsy_minus1[k][l]) na imagem podem ser codificados com comprimento fixo com o uso de codificação u(v) em vez de codifica- ção ue(v). Em um exemplo, um elemento de sintaxe adicional pode ser sinalizado para indicar o comprimento de bits usado para codificação de comprimento fixo desses elementos, neste caso. Em um outro exemplo, o comprimento de bits usado para codificação desses elementos de sin- taxe pode não ser sinalizado, mas, em vez disso, infere-se que seja igual a: Ceil(Log2(PicSizeInCtbsY)) bits, em que PicSizeInCtbsY indica o número de CTBs na imagem.
[0089] Em um exemplo, os elementos de sintaxe para largura de coluna em CTBs e/ou altura de fileira em CTBs podem não estar sina- lizados para o último conjunto de ladrilhos para a coluna do último con- junto de ladrilhos (num_tile_columns_minus1[num_tile_set_rows_mi- nus1][num_tile_set_columns_minus1]) e/ou para a fileira do último conjunto de ladrilhos (num_tile_rows_minus1[num_tile_set_rows_mi- nus1][num_tile_set_columns_minus1]) na imagem. Nesse caso, o seu valor pode ser inferido a partir da altura da imagem em CTBs e/ou da largura da imagem em CTBs.
[0090] A Tabela 8 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplificadora incluída na Tabela 8 pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 8 pode ser incluída em um VPS ou SPS.
[0091] parameter_set_rbsp(){ Descritor … tiles_enabled_flag u(1) entropy_coding_sync_enabled_flag u(1) if(tiles_enabled_flag){ num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) uniform_spacing_flag u(1) if(!uniform_spacing_flag){ for(i = 0; i < num_tile_columns_minus1; i++) column_width_minus1[i] ue(v) for(i = 0; i < num_tile_rows_minus1; i++) row_height_minus1[i] ue(v) } loop_filter_across_tiles_enabled_flag u(1) tilesets_enabled_flag u(1) if(tilesets_enabled_flag){ num_tile_set_rows_minus1 ue(v) num_tile_set_columns_minus1 ue(v) for(k = 0; k <= num_tile_set_rows_minus1; k++) num_tile_rows_in_tileset_minus1[k] ue(v) for(l = 0; l <= num_tile_set_columns_minus1; 1++) num_tile_columns_in_tileset_minus1[l] ue(v) } … rbsp_trailing_bits() } Tabela 8
[0092] Com relação à Tabela 8, os respectivos elementos de sin- taxe podem ser baseados nas definições a seguir: num_tile_columns_minus1 mais 1 especifica o número de colunas de ladrilhos que particionam a imagem. num_tile_columns_mi- nus1 deve estar na faixa de 0 a PicWidthInCtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_columns_mi- nus1 seja igual a 0. num_tile_rows_minus1 mais 1 especifica o número de fi- leiras de ladrilhos que particionam a imagem. num_tile_rows_minus1 deve estar na faixa de 0 a PicHeightInCtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_rows_minus1 seja igual a 0. Quando tiles_enabled_flag for igual a 1, num_tile_co- lumns_minus1 e num_tile_rows_minus1 não devem ser ambos iguais a 0. uniform_spacing_flag igual a 1 especifica que limites de co- luna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos são uni- formemente distribuídos por toda a imagem. uniform_spacing_flag igual a 0 especifica que limites de coluna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos não são uniformemente distribuídos por toda a ima- gem, mas explicitamente sinalizados com o uso dos elementos de sintaxe column_width_minus1[i] e row_height_minus1[i]. Quando não estiver pre- sente, infere-se que o valor de uniform_spacing_flag seja igual a 1. column_width_minus1[i] mais 1 especifica a largura da i- ésima coluna de ladrilhos em unidades de blocos de árvore de codifi- cação. row_height_minus1[i] mais 1 especifica a altura da i-ésima fileira de ladrilhos em unidades de blocos de árvore de codificação. loop_filter_across_tiles_enabled_flag igual a 1 especifica que operações de filtragem em loop podem ser executadas através de li- mites de ladrilhos em imagens com referência ao PPS. loop_fil- ter_across_tiles_enabled_flag igual a 0 especifica que operações de filtra- gem em loop não são executadas através de limites de ladrilhos em ima- gens com referência ao PPS. As operações de filtragem em loop incluem as operações de filtragem de deslocamento adaptativo de amostra e de filtragem de desbloqueio. Quando não estiver presente, infere-se que o valor de loop_filter_across_tiles_enabled_flag seja igual a 1. tilesets_enabled_flag igual a 1 especifica que há mais de um conjunto de ladrilhos em cada imagem com referência ao PPS. tile- sets_enabled_flag igual a 0 especifica que há apenas um conjunto de ladrilhos em cada imagem com referência ao PPS.
[0093] Em um outro exemplo, tilesets_enabled_flag igual a 1 indica que os elementos de sintaxe num_tile_set_rows_minus1, num_tile_sets_columns_minus1, num_tile_rows_in_tileset_minus1[k], num_tile_columns_in_tileset_minus1[l] estão presentes. tilesets_ena- bled_flag igual a 0 indica que os elementos de sintaxe num_tile_set_rows_minus1, num_tile_sets_columns_minus1, num_tile_rows_in_tileset_minus1 [k], num_tile_columns_in_tileset_mi- nus1[l] não estão presentes. Em um exemplo, quando tilesets_enabled_flag for igual a 0, infere-se que num_tile_set_rows_minus1 será igual a 0 e infere-se que num_tile_sets_columns_minus1 será igual a 0 (isto é, toda a imagem é um único conjunto de ladrilhos). Em um exemplo, é um requisito de conformação de fluxo de bits que o valor de tilesets_enabled_flag deve ser o mesmo para todos os PPSs que são ativados em uma CVS. Quando tiles_enabled_flag for igual a 0, infere-se que tilesets_enabled_flag seja igual a 0. Em um outro exemplo, é um requisito de conformação de fluxo de bits que quando tiles_enabled_flag for igual a 0, tilesets_ena- bled_flag deve ser igual a 0. num_tile_set_rows_minus1 mais 1 especifica o número de fileiras de conjuntos de ladrilhos que particionam a imagem. num_tile_set_rows_minus1 deve estar na faixa de 0 a num_tile_rows_minus1, inclusivos.
Em um outro exemplo, num_tile_set_rows_minus1 deve estar na faixa de 0 a PicHeightIn- CtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_set_rows_minus1 seja igual a 0. num_tile_set_columns_minus1 mais 1 especifica o número de colunas de conjunto de ladrilhos que particionam a imagem. num_tile_set_columns_minus1 deve estar na faixa de 0 a num_tile_co- lumns_minus1, inclusivos.
Em um outro exemplo, num_tile_set_co- lumns_minus1 deve estar na faixa de 0 a PicWidthInCtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_set_co- lumns_minus1 seja igual a 0. Em um exemplo, quando tilesets_enabled_flag for igual a 1, num_tile_set_columns_minus1 e num_tile_set_rows_minus1 não devem ser ambos iguais a 0. num_tile_rows_in_tileset_minus1[k] mais 1 especifica o número de fileiras de ladrilhos no conjunto de ladrilhos associado ao índice (k,l) para cada k na faixa de 0 a num_tile_set_rows_minus1, in- clusivos. num_tile_rows_in_tileset_minus1[k] deve estar na faixa de 0 a num_tile_rows_minus1, inclusivos.
Em um outro exemplo, num_tile_rows_in_tileset_minus1[k] deve estar na faixa de 0 a PicHei- ghtInCtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_rows_in_tileset_minus1 [k] seja igual a num_tile_rows_minus1. Em um exemplo, quando não estiver presente, infere-se que o valor de num_tile_rows_in_tileset_minus1 [k] seja igual a 0.
Em um exemplo, é um requisito de conformação de fluxo de bits que a soma de todos os (num_tile_rows_in_tileset_minus1 [k]+1), para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, seja igual a (num_tile_rows_minus1+1). Em um outro exemplo, num_tile_rows_minus1[k] deve estar na faixa de 0 a PicHeightInCtbsY‒num_tile_set_rows_minus1 ‒ 1, in- clusivos. num_tile_columns_in_tileset_minus1[l] mais 1 especifica o número de colunas de ladrilhos no conjunto de ladrilhos associado ao índice (k,l) para cada l na faixa de 0 a num_tile_set_columns_minus1, inclusivos. num_tile_columns_in_tileset_minus1[l] deve estar na faixa de 0 a num_tile_columns_minus1, inclusivos. Em um outro exemplo, num_tile_columns_in_tileset_minus1[l] deve estar na faixa de 0 a PicWidthInCtbsY ‒ 1, inclusivos. Quando não estiver presente, infere-se que o valor de num_tile_columns_in_tileset_minus1[l] seja igual a num_tile_columns_minus1. Em um exemplo, quando não estiver pre- sente, infere-se que o valor de num_tile_columns_in_tileset_minus1[l] seja igual a 0. Em um exemplo, é um requisito de conformação de fluxo de bits que a soma de todos os (num_tile_columns_in_tileset_minus1[l]+1), para l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, seja igual a (num_tile_columns_minus1+1).
[0094] Em um outro exemplo, num_tile_columns_minus1[l] deve es- tar na faixa de 0 a PicWidthInCtbsY‒num_tile_set_columns_minus1 ‒ 1, inclusivos.
[0095] Em um exemplo, a sintaxe de estrutura de ladrilhos (isto é, elementos de sintaxe de UIT-T H.265) pode ser sinalizada em um PPS e a sintaxe relacionada aos conjuntos de ladrilhos recentemente proposta pode ser sinalizada em um SPS.
[0096] Em um exemplo, quando a sintaxe é sinalizada em PPS, con- forme acima, o que vem a seguir pode ser definido para o escopo de con- juntos de ladrilhos: Considere que um conjunto de imagens PPSassociated- PicSet seja o conjunto de todas as imagens que são consecutivas em ordem de decodificação e para as quais o PPS associado é ativado no cabeçalho de fatia (pela inclusão de slice_pic_parameter_set_id). En- tão, o escopo de conjunto de ladrilhos sinalizado em PPS é o conjunto de imagens PPSassociatedPicSet.
[0097] Em um outro exemplo: O escopo de conjunto de ladrilhos sinalizado em PPS com valor de pps_pic_parameter_set_id igual a PPSVaIA é o conjunto de imagens que são consecutivas em ordem de decodificação e cujo ca- beçalho de fatia tem o valor para slice_pic_parameter_set_id igual a PPSVaIA e a imagem antes e depois desse conjunto de imagens em ordem de decodificação tem slice_pic_parameter_set_id igual a não igual a PPSVaIA. Pode haver múltiplos desses conjuntos na sequência de vídeo codificado.
[0098] Em um exemplo, um processo de conversão de varredura de ladrilhos e de varredura raster de bloco de árvore de codificação pode ser da seguinte forma: A lista colWidth[k] [l] [i] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para i na faixa de 0 a num_tile_columns_in_tileset_minus1[l], inclusivos, que especifica a largura da i-ésima coluna de ladrilhos do conjunto de ladrilhos associ- ado ao índice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ if(uniform_spacing_flag)
for(i = 0; i <= num_tile_columns_in_tileset_minus1 [l]; i++) colWidthf k][l][i] = ((i + 1)*PicWidthInCtbsY)/(num_tile_columns_minus1 + 1) ‒ (i * PicWidthInCtbsY)/(num_tile_columns_minus1 + 1) else{ colWidth[k][l][num_tile_columns_minus1] = PicWidthInCtbsY for(i = 0; i <= num_tile_columns_in_tileset_minus1[l]; i++){ colWidthf k][l][i] = column_width_minus1 [i] + 1 colWidthf k][l][num_tile_columns_minus1] ‒= col Width [k][l][i] } } } }
[0099] A lista rowHeight[k] [l] [j] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para j na faixa de 0 a num_tile_rows_in_tileset_minus] [k], inclusivos, que especifica a altura da j-ésima fileira de ladrilhos do conjunto de ladrilhos associado ao ín- dice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0; l<=num_tile_set_columns_minus1; 1++){ if(uniform_spacing_flag) for(j = 0;j <= num_tile_rows_in_tileset_minus1[k]; j++) rowHeight[k][l][j]=((j + 1)* PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) ‒ (j * PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) else { rowHeight[k][l][num_tile_rows_minus1] = PicHeightInCtbsY for(j = 0;j <= num_tile_rows_in_tileset_minus1[k]; j++){ rowHeight[k][l][j] = row_height_minus1 [j] + 1 rowHeight[k][l][num_tile_rows_minus1] ‒= rowHeight[k][l][j] }
} } }
[0100] Em um outro exemplo, as derivações acima podem ser reali- zadas da seguinte forma: NumTileSets=(num_tile_set_rows_minus1+1)*(num_tile_set_col- umns_minus1+1); A lista colWidth[k] [l] [i] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para i na faixa de 0 a num_tile_columns_in_tileset_minus1[l], inclusivos, que especifica a largura da i-ésima coluna de ladrilhos do conjunto de ladrilhos associ- ado ao índice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_setcolumns_minus1; l++){ if(uniform_spacing_flag) for(i = 0; i <= num_tile_columns_in_tileset_minus1[l]; i++) colWidth[k][l][i] = ((i + 1)* PicWidthInCtbsY)/(num_tile_colunms_minus1+ 1) ‒ (i * PicWidthInCtbsY)/(num_tile_columns_minus1+ 1) else{ colWidth[k][l][num_tile_colunms_minus1] = PicWidthInCtbsY for(i = 0; i < num_tile_columns_in_tileset_minus1[l]; i++){ colWidth[k][l][i] = column_width_minus1[i] + 1 colWidth[k][l][num_tile_columns_minus1] ‒= colWidth [k][l][i] } if(NumTileSets> 1){ colWidth[k][l][i] = column_width_minus1 [i] + 1 colWidth[k][l][num_tile_colunms_minus1] ‒= colWidth [k][l][i] } }
} }
[0101] Em um outro exemplo, as derivações acima podem ser reali- zadas da seguinte forma: NumTileSets=(num_tile_set_rows_minus1+ 1)*(num_tile_set_col- umns_minus1+1); A lista colWidth[k] [l] [i] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para i na faixa de 0 a num_tile_columns_in_tileset_minus1[l], inclusivos, que especifica a largura da i-ésima coluna de ladrilhos do conjunto de ladrilhos associ- ado ao índice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0; l<=num_tile_set_columns_minus1; 1++){ if(uniform_spacing_flag) for(i = 0; i <= num_tile_columns_in_tileset_minus1[l]; i++) colWidth[k][l][i] = ((i + 1) * PicWidthInCtbsY)/(num_tile_columns_minus1+ 1) ‒ (i * PicWidthInCtbsY)/(num_tile_columns_minus1+ 1) else{ colWidth[k][l][num_tile_columns_minus1] = PicWidthInCtbsY for(i = 0; i < num_tile_columns_in_tileset_minus1[l]; i++){ colWidth[k][l][i] = column_width_minus1[i] + 1 colWidth[k][l][num_tile_columns_minus1] ‒= colWidth [k][l][i] } if(NumTileSets> 1){ colWidth[k][l][i] = column_width_minus1[i] + 1 colWidth[k][l][num_tile_columns_minus1] ‒= colWidth [k][l][i] } } }
}
[0102] A lista rowHeight[k] [l] [j] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para j na faixa de 0 a num_tile_rows_in_tileset_minus1[k], inclusivos, que especifica a altura da j-ésima fileira de ladrilhos do conjunto de ladrilhos associado ao ín- dice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ if(uniform_spacing_flag) for(j = 0;j <= num_tile_rows_in_tileset_minus1[k]; j++) rowHeight[k][l][j] = ((j + 1) * PicHeightInCtbsY)/(num_tile_rows_minus1+ 1) ‒ (j * PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) else{ rowHeight[k][l][num_tile_rows_minus1] = PicHeightInCtbsY for(j = 0; j < num_tile_rows_in_tileset_minus1[k]; j++){ rowHeight[k][l][j] = row_height_minus1 [j] + 1 rowHeight[k][l][num_tile_rows_minus1] ‒= rowHeight[k][l][j] } if(NumTileSets> 1){ rowHeight[k][l][j] = row_height_minus1 [j] + 1 rowHeight[k][l][num_tile_rows_minus1] ‒= rowHeight[k][l][j] } } } }
[0103] Em ainda outro exemplo, as derivações acima podem ser re- alizadas da seguinte forma: A lista colWidth[k] [l] [i] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para i na faixa de 0 a num_tile_columns_in_tileset_minus1[l], inclusivos, que especifica a largura da i-ésima coluna de ladrilhos do conjunto de ladrilhos associ- ado ao índice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ if(uniform_spacing_flag) for(i = 0;i <= num_tile_columns_in_tileset_minus1[l]; i++) colWidth[k][l][i] = ((i + 1) * PicWidthInCtbsY)/(num_tile_columns_minus1+ 1) ‒ (i * PicWidthInCtbsY)/(num_tile_columns_minus1+ 1) else{ colWidth[k][l][num_tile_columns_minus1] = PicWidthInCtbsY for(i = 0; i < num_tile_cokimns_in_tileset_minus1[l]; i++){ colWidth[k][l][i] = column_width_minus1 [i] + 1 colWidth[k][l][num_tile_columns_minus1] ‒= colWidth [k][l][i] } } } }
[0104] A lista rowHeight[k] [l] [j] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para j na faixa de 0 a num_tile_rows_in_tileset_minus1[k], inclusivos, que especifica a altura da j-ésima fileira de ladrilhos do conjunto de ladrilhos associado ao ín- dice (k,l) em unidades de CTBs, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ if(uniform_spacing_flag) for(j = 0; j <= num_tile_rows_in_tileset_minus1 [k]; j++) rowHeight[k][l][j] = ((j + 1) * PicHeightInCtbsY)/(num_tile_rows_minus1+ 1)
‒ (j * PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) else{ rowHeight[k][l][num_tile_rows_minus1] = PicHeightInCtbsY for(j = 0; j < num_tile_rows_in_tileset_minus1[k]; j++){ rowHeight[k][l][j] = row_height_minus1 [j] + 1 rowHeight[k][l][num_tile_rows_minus1] ‒= rowHeight[k][l][j] } } } } A variável NumTileSets que indica o número de conjuntos de ladrilhos é derivada da seguinte forma: NumTileSets = (num_tile_set_rows_minus1+1) *(num_tile_set_col- umns_minus1+1)
[0105] As matrizes de pwctbsy[k][l], phctbsy[k][l], psizectbsy[k][l] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, que especificam res- pectivamente a largura da imagem em CTBs de luma, a altura da ima- gem em CTBs de luma e o tamanho da imagem em CTBs de luma do conjunto de ladrilhos associado ao índice (k,l), e a matriz ctbAddrR- SOffset[k][l] para k na faixa de 0 a num_tile_set_rows_minus1, inclusi- vos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, que especificam a contagem cumulativa de CTBs até o conjunto de ladrilhos associado ao índice (k,l), é derivada da seguinte forma: ctbAddrRSOffsetCalc=0; picSizeInCtbs Y=0; for(k=0;k<=num_tile_set_rows_minus1;k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ for(pwctbsy[k][l] = 0, i = 0; i <= num_tile_columns_in_tileset_minus1[l]; i++){ pwctbsy[k][l] += (colWidth [k][l][i])
} for(phctbsy[k][l] = 0, i = 0; i <= num_tile_rows_in_tileset_minus1[k]; i++){ phctbsy[k][l] += (rowHeight [k][l][i]); } psizectbsy[k][l] =pwctbsy[k][l] *phctbsy[k][l] picSizeInCtbsY+= psizectbsy[k][l] ctbAddrRSOffset[k][l] =ctbAddrRSOffsetCalc ctbAddrRSOffsetCalc+=psizectbsy[k][l] } }
[0106] picSizeInCtbsY não será definido igual a 0 e não será atua- lizado como picSizeInCtbsY+= psizectbsy[k] [l]. Nesse caso, picSizeIn- CtbsY é calculado da seguinte forma como em UIT-T H.265: PicWidthInMinCbsY = pic_width_in_luma_samples / MinCbSizeY PicWidthInCtbsY = Ceil(pic_width_in_luma_samples + CtbSizeY) PicHeightInMinCbsY = pic_height_in_luma_samples / MinCbSizeY PicHeightInCtbsY = Ceil(pic_height_in_luma_samples CtbSizeY) PicSizeInMinCbsY = PicWidthInMinCbsY * PicHeightInMinCbsY PicSizeInCtbsY = PicWidthInCtbsY * PicHeightInCtbsY Um j-ésimo conjunto de ladrilhos é associado a índices (k,l) da forma a seguir. Um j-ésimo conjunto de ladrilhos pode ser chamado de conjunto de ladrilhos com índice j. Dado o índice de conjunto de ladrilhos ou identificador de conjunto de ladrilhos j e o número de colunas de conjunto de ladrilhos na imagem, k e l são derivados da seguinte forma: k = j/(num_tile_set_columns_minus1+1) l = j%(num_tile_set_columns_minus1+1) Dados os índices k e l e o número de colunas de conjunto de ladrilhos na imagem, o índice de conjunto de ladrilhos ou identificador de conjunto de ladrilhos j é derivado da seguinte forma:
j = k*(num_tile_set_columns_minus1+1)+l
[0107] Número de ladrilhos em cada conjunto de ladrilhos para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, são derivados da seguinte forma: for(k=0;k<=num_tilesetrows_minus1;k++){ for(l=0;l<=num_tile_set_columns_minus1;l++){ j = k*(num_tile_set_columns_minus1+1)+l NumTiles[j]= (num_tile_rows_in_tileset_minus1[k]+1)*(num_tile_col- umns_in_tileset_minus1[l]+1) } } A lista colBd[k] [l] [i] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e 1 na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para i na faixa de 0 a num_tile_columns_in_tileset_minus1[k]+ 1, inclusivos, que especifica a localização do i-ésimo limite de coluna de ladrilhos do conjunto de ladri- lhos associado ao índice (k,l) em unidades de blocos de árvore de codi- ficação, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ for(colBd[k][l][0] = 0, I = 0; i <= num_tile_columns_in_tileset_minus1 [l]; i++) colBd[k][l][i + 1] = colBd[k][l][i] + colWidth[k][l][i] } }
[0108] A lista rowBd[j] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e 1 na faixa de 0 a num_tile_set_columns_minus1, inclusivos, e para j na faixa de 0 a num_tile_rows_in_tileset_minus1[k]+ 1, inclusivos, que especifica a lo-
calização do j-ésimo limite de fileira de ladrilhos do conjunto de ladri- lhos associado ao índice (k,l) em unidades de blocos de árvore de co- dificação, é derivada da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ for(rowBd[k][l][0] = 0, j = 0; j <= num_tile_rows_in_tileset_minus1 [k]; j++) rowBd[k][l][j + 1] = rowBd[k][l][j] + rowHeight[k][l][j] } } A lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um en- dereço de CTB na varredura raster de CTB de uma imagem em um ende- reço de CTB em conjunto de ladrilhos e varredura de ladrilhos, é derivada da seguinte forma: for(k=0; k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ for(ctbAddrRs = 0; ctbAddrRs < psizectbsy[k][l]; ctbAddrRs++){ tbX = ctbAddrRs % pwctbsy [k][l] tbY = ctbAddrRs/pwctbsy [k][l] for(i = 0; i <= num_tile_columns_in_tileset_minus1 [l]; i++) if(tbX >= colBd[k][l][i]) tileX = i for(j = 0; j <= num_tile_rows_in_tileset_minus1 [k]; j++) if(tbY >= rowBd[k][l][j]) tileY = j CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] = 0 for(i = 0; i < tileX; i++) CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += rowHeight[k][l][tileY] * colWidth[i] for(j = 0; j < tileY; j++)
CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += pwctbsy [k][l] * rowHeight[k][l][j] CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += (tbY ‒ rowBd[k][l][tileY]) * colWidth[k][l][tileX] + tbX ‒ colBd[k][l][tileX] CtbAddrRsToTs[ctbAddrRs + ctbAddrRSOffset[k][l]] += ctbAddrRSOff- set[k][l] } } }
[0109] A lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSizeInCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em um endereço de CTB na varredura raster de CTB de uma imagem, é derivada da seguinte forma: for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]] = ctbAddrRs A lista TileId[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSi- zelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em uma ID de ladrilhos, é derivada da se- guinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ for(j = 0, tileIdx = 0; j <= num_tile_rows_in_tileset_minus1 [k]; j++) for(i = 0; i <= num_tile_columns_in_tileset_minus1 [l]; i++, tileIdx++) for(y = rowBd[k][l][j]; y < rowBd[k][l][j + 1]; y++) for(x = colBd[k][l][i]; x < colBd[k][l][i + 1]; x++) Tileld[CtbAddrRsToTs[y * PicWidthInCtbsY+ x + ctbAd- drRSOffset[k][l]]] = tileIdx } }
[0110] Em um exemplo, cálculos adicionais podem ser necessários para extração de subfluxo de bits ou outros processos.
Em um exemplo, os cálculos adicionais podem ser da seguinte forma: para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_columns_minus1, inclusivos, o número de colunas de ladrilhos minus1 e o número de fileiras de ladrilhos minus1 são derivados da seguinte forma: for(k=0;k<=num_tile_set_rows_minus1; k++){ for(l=0;l<=num_tile_set_columns_minus1; l++){ num_tile_columns_minus1[k][l]= num_tile_columns_in_tileset_minus1[l] num_tile_rows_minus1[k][l]= num_tile_rows_in_tileset_minus1[k] } A lista tilecolumnPos [l] para l na faixa de 0 a num_tile_co- lumns_minus1 + 1, inclusivos, que especifica a localização do conjunto de ladrilhos associado ao limite de índice (*,l) em unidades de ladrilhos, é de- rivada da seguinte forma: for(1 = 0, tilecolumnPos[0]=0; 1 <= num_tile_set_columns_minus1; 1++) tilecolumnPos [l+1]= tilecolumnPos[l+1]+ num_tile_col- umns_in_tileset_minus1[l] A lista tilerowPos [k] para k na faixa de 0 a num_tile_rows_minus1 + 1, inclusivos, que especifica a localização do conjunto de ladrilhos associado ao limite de índice (k,*) em unidades de ladrilhos, é derivada da seguinte forma: for(k = 0, tilerowPos[0]=0; k <= num_tile_set_rows_minus1; k++) tilerowPos[k+1]= tilerowPos[k+1]+ num_tile_rows_in_tileset_minus1[k] A lista colBd[k] [l] para k na faixa de 0 a num_tile_set_rows_mi- nus1, inclusivos, e 1 na faixa de 0 a num_tile_set_columns_minus1, inclu- sivos, e que especifica a localização do limite de coluna de ladrilhos do conjunto de ladrilhos associado ao índice (k,l) em unidades de blocos de árvore de codificação e
[0111] A lista rowBd[k] [l] para k na faixa de 0 a num_tile_set_rows_minus1, inclusivos, e 1 na faixa de 0 a num_tile_rows_minus1, inclusivos, e l na faixa de 0 a num_tile_set_co- lumns_minus1, inclusivos, que especifica a localização do limite de fi- leira do conjunto de ladrilhos associado ao índice (k,l) em unidades de blocos de árvore de codificação, é derivada da seguinte forma: for(k=0;k<=num_tile_setrowsminus1; k++){ for(l=0 j=0;l<=num_tile_set_columns_minus1; l++){ colBd[k][l]= colWidth[tilecolumnPos[l]] rowBd[k][l]= rowHeight[tilerowPos[k]] } }
[0112] A Tabela 9 ilustra um cabeçalho de segmento de fatia exem- plificador que pode ser usado para sinalizar informações de modo que cada conjunto de ladrilhos e ladrilhos dentro do conjunto de ladrilhos possam ser independentemente processados de acordo com as técni- cas da presente invenção. Nesse caso, uma fatia sempre inclui um único conjunto de ladrilhos completo. Nesse caso, a sinalização a seguir é feita no cabeçalho de fatia (que pode ser, em vez disso, chamado de cabeçalho de conjunto de ladrilhos ou cabeçalho de segmento ou outro nome semelhante): slice_segment_header(){ Descritor … if(tilesets_enabled_flag) tile_set_id u(v) … if(tiles_enabled_flag){ if(!tilesets_enabled_flag) num_entry_point_offsets ue(v) if(OffsetInfoPresent){ offset_len_minus1 ue(v) for(i = 0; i < NumOffsets; i++) entry_point_offset_minus1[i] ue(v) } … Tabela 9
[0113] Com relação à Tabela 9, deve-se notar que os elementos de sintaxe tile_set_id, num_entry_point_offsets, offset_len_minus1 e en- try_point_offset_minus1, podem ser baseados nas definições a seguir: tile_set_id especifica o identificador de conjunto de ladrilhos deste conjunto de ladrilhos. Dados os índices de conjunto de ladrilhos k e l e o número de colunas de conjunto de ladrilhos na imagem, o índice de conjunto de ladrilhos ou identificador de conjunto de ladrilhos j é de- rivado da seguinte forma: j = k*((num_tile_set_columns_minus1+1)+l O identificador de conjunto de ladrilhos pode ser, em vez disso, chamado de índice de conjunto de ladrilhos. O comprimento do elemento de sintaxe tile_set_id é de Ceil(Log2(NumTileSets)) bits num_entry_point_offsets, offset_len_minus1 e en- try_offset_minus1[i] podem ter semânticas similares àquelas fornecidas em UIT-T H.265. Em um exemplo, o que vem a seguir é derivado quando ti- les_enabled_flag for igual a 1: Se tilesets_enabled_flag for igual a 1 OffsetInfoPresent=l NumOffsets =NumTilesInTileset[tile_set_id]‒ 1 Caso contrário (isto é, se tilesets_enabled_flag for igual a 0), OffsetInfoPresent= (num_entry_point_offsets? 1:0) NumOffsets =num_entry_offsets Quando tiles_enabled_flag for igual a 0: OffsetInfoPresent = 0, NumOff- sets=0
[0114] Em um outro exemplo, a Tabela 10 ilustra um cabeçalho de segmento de fatia exemplificador que pode ser usado para sinalizar informações de modo que cada conjunto de ladrilhos e ladrilhos dentro do conjunto de ladrilhos possam ser independentemente processados de acordo com as técnicas da presente invenção. Nesse caso, uma fatia pode incluir um número inteiro de conjuntos de ladrilhos comple- tos. Nesse caso, a sinalização a seguir é feita no cabeçalho de fatia (que pode ser, em vez disso, chamado de cabeçalho de conjunto de ladrilhos ou cabeçalho de segmento ou outro nome semelhante): slice_segment_header(){ Descritor … if(tilesets_enabled_flag){ tile_set_id u(v) num_tile_set_ids_minus1 u(v) } … … if(tiles_enabled_flag){ if(!tilesets_enabled_flag) num_entry_point_offsets ue(v) if(OffsetInfoPresent){ offset_len_minus1 ue(v) for(i = 0; i < NumOffsets; i++) entry_point_offset_minus1[i] ue(v) } … Tabela 10
[0115] Com relação à Tabela 10, deve-se notar que os elementos de sintaxe tile_set_id, num_entry_point_offsets, offset_len_minus1 e en- try_point_offset_minus1, podem ser baseados nas definições a seguir: tile_set_id especifica o identificador de conjunto de ladrilhos desse conjunto de ladrilhos. Dados os índices de conjunto de ladrilhos k e l e o número de colunas de conjunto de ladrilhos na imagem, o índice de conjunto de ladrilhos ou identificador de conjunto de ladrilhos j é de- rivado da seguinte forma: j = k*((num_tile_set_columns_minus1+1)+l O identificador de conjunto de ladrilhos pode ser, em vez disso, chamado de índice de conjunto de ladrilhos. O comprimento do elemento de sintaxe tile_set_id é de Ceil(Log2(NumTileSets)) bits. num_tile_set_ids_minus1 mais 1 especifica o número de conjuntos de ladrilhos (em ordem de varredura raster de conjuntos de la- drilhos) que estão presentes na fatia. O comprimento do elemento de sin- taxe num_tile_set_ids_minus1 é de Ceil(Log2(NumTileSets‒1)) bits. O que vem a seguir é derivado quando tiles_enabled_flag for igual a 1: Se tilesets_enabled_flag for igual a 1 OffsetInfoPresent=1 for (i=tile_set_id,NumOffsets=0; i< (tile_set_id+num_tile_set_ids_minus1+1); i++) {NumOffsets +=NumTilesInTileset[i]} NumOffsets=NumOffsets-1; Caso contrário (isto é, se tilesets_enabled_flag for igual a 0), OffsetInfoPresent= (num_entry_point_offsets? 1:0) NumOffsets =num_entry_offsets Quando tiles_enabled_flag for igual a 0: OffsetInfoPresent = 0, NumOffsets=0
[0116] Deve-se notar que "segmento de fatia" pode, em vez disso, ser chamado de "fatia", ou de "conjunto de ladrilhos", ou de "segmento", ou de "grupo de múltiplas ctus", ou de "grupo de ladrilhos", ou de "lista de ladrilhos", ou de "coleção de ladrilhos", etc. Como tal, essas palavras, em alguns casos, podem ser intercambiavelmente usadas. Além disso, nomes de estrutura de dados com nomes similares são intercambiáveis. Deve-se notar que "cabeçalho de segmento de fatia" pode, em vez disso, ser chamado de "cabeçalho de fatia", ou de "cabeçalho de con- junto de ladrilhos", ou de "cabeçalho de segmento", ou de "cabeçalho de grupo de múltiplos ctus", ou de "cabeçalho de grupo de ladrilhos", ou de "cabeçalho de lista de ladrilhos", ou de "cabeçalho de coleção de ladrilhos", etc. Como tal, essas palavras são intercambiavelmente usa- das. Além disso, nomes de estrutura de dados com nomes similares podem, em alguns casos, ser intercambiavelmente usados.
[0117] A Tabela 11 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplificadora incluída na Tabela 11 pode ser incluída em um
PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 11 pode ser incluída em um VPS ou SPS ou outro conjunto de parâme- tros. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 11 pode ser incluída em um cabeçalho de grupo de ladrilhos ou um ca- beçalho de fatia.
[0118] parameter_set_rbsp(){ Descritor … tilesets_enabled_flag u(1) if(tilesets_enabled_flag){ num_tile_sets_in_pic_minus1 ue(v) for(i = 0; i <= num_tile_sets_in_pic_minus1; i++){ top_left_tile_id[i] u(v) num_tile_rows_in_tileset_minus1[i] u(v) num_tile_columns_in_tileset_minus1[i] u(v) } } … rbsp_trailing_bits() } Tabela 11
[0119] Com relação à Tabela 11, os respectivos elementos de sintaxe podem ser baseados nas definições a seguir: tilesets_enabled_flag igual a 1 especifica que há mais de um conjunto de ladrilhos em cada imagem com referência ao conjunto de parâmetros. tilesets_enabled_flag igual a 0 especifica que há apenas um conjunto de ladrilhos em cada imagem com referência ao conjunto de parâmetros. Em uma variante: tilesets_enabled_flag igual a 0 pode espe- cificar que cada ladrilho é um conjunto de ladrilhos em cada imagem com referência ao PPS. É um requisito de conformação de fluxo de bits que o valor de tilesets_enabled_flag deve ser o mesmo para todos os PPSs que são ati- vados em uma CVS. Quando tiles_enabled_flag for igual a 0, infere-se que tilesets_enabled_flag seja igual a 0. num_tile_sets_in_pic_minus1 mais 1 especifica o número de conjuntos de ladrilhos na imagem. top_left_tile_id especifica a ID de ladrilho do ladrilho situ- ado no canto superior esquerdo do i- ésimo conjunto de ladrilhos. O comprimento de top_left_tile_id[i] é de Ceil(Log2(num_tile- sets_in_pic_minus1+1)) bits. O valor de top_left_tile_id[i] não deve ser igual ao valor de top_left_tile_id[j] para qualquer i não igual a j. num_tile_rows_in_tileset_minus1[i] mais 1 especifica o nú- mero de fileiras de ladrilhos no i-ésimo conjunto de ladrilhos, para cada i na faixa de 0 a (num_tile_sets_in_pic_minus1), inclusivos. num_tile_rows_in_tileset_minus1[i] deve estar na faixa de 0 a num_tile_rows_minus1, inclusivos. O comprimento de num_tile_rows_in_tileset_minus1[i] é de Ceil(Log2(num_tile_rows_mi- nus1+1)) bits. Quando não estiver presente, infere-se que o valor de num_tile_rows_in_tileset_minus1[i] seja igual a 0. Em uma variante, quando não estiver presente, infere-se que o valor de num_tile_rows_in_tileset_minus1[i] seja igual a num_tile_rows_minus1. num_tile_columns_in_tileset_minus1[i] mais 1 especifica o número de colunas de ladrilhos no i-ésimo conjunto de ladrilhos, para cada i na faixa de 0 a (num_tile_sets_in_pic_minus1), inclusivos. num_tile_co- lumns_in_tileset_minus1[l] deve estar na faixa de 0 a num_tile_co- lumns_minus1, inclusivos. O comprimento de num_tile_columnss_in_tile- set_minus1[i] é de Ceil(Log2(num_tile_columns_minus1+1)) bits.
[0120] Quando não estiver presente, infere-se que o valor de num_tile_columns_in_tileset_minus1[l] seja igual a 0. Em uma variante, quando não estiver presente, infere-se que o valor de num_tile_columns_in_tileset_minus1[l] seja igual a num_tile_columns_minus1. Em uma variante, num_tile_rows_m_tileset_minus1[i] e num_tile_columns_in_tileset_minus1[l] são codificados como ue(v). Em uma variante, um ou dois elementos de sintaxe adicionais separados sinalizam o número de bits usados para num_tile_rows_in_tile- set_minus1[i] e/ou num_tile_columns_in_tileset_minus1[l].
[0121] A Tabela 12 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplificadora incluída na Tabela 12 pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 12 pode ser incluída em um VPS ou SPS ou outro conjunto de parâme- tros. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 12 pode ser incluída em um cabeçalho de grupo de ladrilhos ou um ca- beçalho de fatia.
[0122] parameter_set_rbsp(){ Descritor … tilesets_enabled_flag u(1) if(tilesets_enabled_flag){ num_tile_sets_in_pic_minus1 ue(v) remaining_tiles_tileset_flag u(1) for(i = 0; i < (num_tile_sets_in_pic_minus1+!remaining_tiles_tileset_flag); i++){ top_left_tile_id[i] u(v) num_tile_rows_in_tileset_minus1[i] u(v) num_tile_columns_in_tileset_minus1[i] u(v) } } … rbsp_trailing_bits() } Tabela 12
[0123] Com relação à Tabela 12, os respectivos elementos de sintaxe podem ser baseados nas definições fornecidas acima e nas definições a seguir: remaining_tiles_tileset_flag igual a 1 especifica que todos os ladrilhos restantes na imagem, exceto aqueles explicitamente espe- cificados nos conjuntos de ladrilhos (num_tilesets_in_pic_minus1-1) si- nalizados pelos elementos de sintaxe top_left_tile_id[i], num_tile_rows_in_tileset_minus1[i], num_tile_columns_in_tileset_mi- nus1[i], formam o último conjunto de ladrilhos. remaining_tiles_tile- set_flag igual a 0 especifica que todos os conjuntos de ladrilhos num_tilesets_in_pic_minus1 são explicitamente especificados pela si- nalização de elementos de sintaxe top_left_tile_id[i], num_tile_rows_in_tileset_minus1[i], num_tile_columns_in_tileset_mi- nus1[i]. num_tile_rows_in_tileset_minus1[i] mais 1 especifica o nú- mero de fileiras de ladrilhos no i-ésimo conjunto de ladrilhos, para cada i na faixa de 0 a (num_tile_sets_in_pic_minus1+!remaining_tiles_tile- set_flag-l), inclusivos. num_tile_rows_in_tileset_minus1[i] deve estar na faixa de 0 a num_tile_rows_minus1, inclusivos.
O comprimento de num_tile_rows_in_tileset_minus1[i] é de Ceil(Log2(num_tile_rows_mi- nus1+1)) bits.
Quando não estiver presente, infere-se que o valor de num_tile_rows_in_tileset_minus1[i] seja igual a 0. Em uma variante, quando não estiver presente, infere-se que o valor de num_tile_rows_in_tileset_minus1[i] seja igual a num_tile_rows_minus1. num_tile_columns_in_tileset_minus1[l] mais 1 especifica o número de colunas de ladrilhos no i-ésimo conjunto de ladrilhos, para cada I na faixa de 0 a (num_tile_sets_in_pic_minus1+!remainmg_tiles_tile- set_flag-1), inclusivos. num_tile_columns_in_tileset_minus1[l] deve estar na faixa de 0 a num_tile_columns_minus1, inclusivos.
O comprimento de num_tile_columnss_in_tileset_minus1[i] é de Ceil(Log2(num_tile_co- lumns_minus1+1)) bits.
Quando não estiver presente, infere-se que o valor de num_tile_columns_in_tileset_minus1[l] seja igual a 0. Em uma variante, quando não estiver presente, infere-se que o valor de num_tile_columns_in_tileset_minus1[l] seja igual a num_tile_columns_minus1. Em uma variante do exemplo, é requisito de conformação de fluxo de bits que cada ladrilho na imagem deva pertencer a um e apenas a um dos conjuntos de ladrilhos, com conjuntos de ladrilhos na faixa de 0 a num_tile_sets_minus1, inclusivos.
[0124] A Tabela 12A ilustra um exemplo de sintaxe para um con- junto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplificadora incluída na Tabela 12A pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 12A pode ser incluída em um VPS ou SPS ou outro conjunto de parâmetros. Em outros exemplos, a sintaxe exemplifica- dora incluída na Tabela 12A pode ser incluída em um cabeçalho de grupo de ladrilhos ou um cabeçalho de fatia.
[0125] parameter_set_rbsp(){ Descritor … tilesets_enabled_flag u(1) if(tilesets_enabled_flag){ num_tile_sets_in_pic_minus1 ue(v) for(i = 0; i < num_tile_sets_in_pic_minus1; i++){ top_left_tile_id[i] u(v) num_tile_rows_in_tileset_minus1[i] u(v) num_tile_columns_in_tileset_minus1[i] u(v) } } … rbsp_trailing_bits() } Tabela 12A
[0126] Com relação à Tabela 12A, os respectivos elementos de sin- taxe podem ser baseados nas definições fornecidas acima.
[0127] A Tabela 13 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplificadora incluída na Tabela 13 pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 13 pode ser incluída em um VPS ou SPS ou outro conjunto de parâme- tros. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 13 pode ser incluída em um cabeçalho de grupo de ladrilhos ou um ca- beçalho de fatia.
[0128] parameter_set_rbsp(){ Descritor … tile_set_flag u(1) if(tile_set_flag){ num_tile_sets_in_pic_minus1 ue(v) remaining_tiles_tileset_flag u(1) for(i = 0; i < (num_tile_sets_in_pic_minus1+!remaining_tiles_tileset_flag); i++){ top_left_tile_id[i] u(v) bottom_right_tile_id[i] u(v) } } … rbsp_trailing_bits() } Tabela 13
[0129] Com relação à Tabela 13, os respectivos elementos de sintaxe podem ser baseados nas definições fornecidas acima e nas definições a seguir: bottom_right_tile_id[i] especifica a ID de ladrilho do ladrilho situado no canto inferior direito do i-ésimo conjunto de ladrilhos. O com- primento de bottom_right_tile_id[i] é de Ceil(Log2(num_tile- sets_in_pic_minus1+1)) bits. O valor de bottom_right_tile_id[i] não deve ser igual ao valor de bottom_right_tile_id[j] para qualquer i não igual a j.
[0130] A Tabela 14 ilustra um exemplo de sintaxe para um conjunto de parâmetros que pode ser usado para sinalizar estruturas de ladrilhos de acordo com as técnicas da presente invenção. Em um exemplo, a sintaxe exemplificadora incluída na Tabela 14 pode ser incluída em um PPS. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 14 pode ser incluída em um VPS ou SPS ou outro conjunto de parâme- tros. Em outros exemplos, a sintaxe exemplificadora incluída na Tabela 14 pode ser incluída em um cabeçalho de grupo de ladrilhos ou um ca- beçalho de fatia.
[0131] parameter_set_rbsp(){ Descritor … tile_set_flag u(1) if(tile_set_flag){ num_tile_sets_in_pic_minus1 ue(v) for(i = 0;i < num_tile_sets_in_pic_minus1; i++){ top_left_tile_id[i] u(v)
bottom_right_tile_id[i] u(v) } } … rbsp_trailing_bits() } Tabela 14
[0132] Com relação à Tabela 14, os respectivos elementos de sintaxe podem ser baseados nas definições fornecidas acima.
[0133] Com relação às Tabelas 11 a 14, a Tabela 14A ilustra uma sin- taxe exemplificadora de cabeçalho de grupo de ladrilhos.
[0134] tile_group_header(){ Descritor tile_group_pic_parameter_set_id ue(v) tile_set_idx u(v) tile_group_type ue(v) if (tile_group_type != I){ log2_diff_ctu_max_bt_size ue(v) if(sps_sbtmvp_enabled_flag){ sbtmvp_size_override_flag u(1) if(sbtmvp_size_override_flag) log2_sbtmvp_active_size_minus2 u(3) } if(sps_temporal_mvp_enabled_flag) tile_group_temporal_mvp_enabled_flag u(1) if(tile_group_type = = B) mvd_l1_zero_flag u(1) if(tile_group_temporal_mvp_enabled_flag){ if(tile_group_type = = B) collocated_from_10_flag u(1) } six_minus_max_num_merge_cand ue(v) } dep_quant_enabled_flag u(1) if(!dep_quant_enabled_flag) sign_data_hiding_enabled_flag u(1) if(num_tiles_in_tile_group_minus1 > 0){ offset_len_minus1 ue(v) for(i = 0; i < num_tiles_in_tile_group_minus1; i++) entry_point_offset_minus1[i] u(v) } byte_alignment() } Tabela 14A
[0135] Com relação à Tabela 14A, os respectivos elementos de sin- taxe podem ser baseados nas definições fornecidas acima e nas defini- ções a seguir: tile_set_idx especifica o índice de conjunto de ladrilhos deste conjunto de ladrilhos. O comprimento do elemento de sintaxe tile_set_idx é de Ceil(Log2(NumTileSets)) bits.
[0136] Com relação à Tabela 11, a Tabela 15 ilustra uma sintaxe exemplificadora de dados de grupo de ladrilhos.
[0137] tile_group_data(){ Descritor tileIdx = top_left_tile_id[tile_set_idx] for(k = 0; k <= num_tile_rows_in_tileset_minus1[tile_set_idx]; k++, tileIdx += (num_tile_columns_minus1 - num_tile columns_in_tileset minus1[tile_set_idx])){ for(i = 0; i <= num_tile_columns_in_tileset_minus1[tile_set_idx]; i++, tileIdx++){ ctbAddrInTs = FirstCtbAddrTs[tileIdx] for(j = 0; j < NumCtusInTile[tileIdx]; j++, ctbAddrInTs++){ CtbAddrInRs = CtbAddrTsToRs[ctbAddrInTs] coding_tree_unit() }// for j=CTUs em um ladrilho end_of_tile_one_bit /*igual a 1 */ ae(v) if(k < num_tile_rows_in_tileset_minus1[tile_set_idx] || j< num_tile_columnss_in_tileset_minus1[tile_set_idx]) Variante if(!((k = num_tile_rows_in_tileset_minus1[tile_set_idx]) && | (j == num_tile_columnss_in_tileset_minus1[tile_set_idx]))) byte_alignment() }//for i }//for k } Tabela 15
[0138] Com relação à Tabela 15, em um exemplo, a conversão de um endereço CTB na varredura do ladrilho em uma ID de ladrilho pode ser da seguinte forma: for(j = 0, tileIdx = 0;j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++){ for(y = RowBd[j]; y < RowBd[j + 1]; y++) for(x = ColBd[i]; x < ColBd[i + 1]; x++){ TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx FirstCtbAddrTs[tileIdx] = CtbAddrRsToTs[RowBd[j] * PicWidthInCtbsY + ColBd[i]] } TileIndex[j*(num_tile_columns_minus1+1)+i] = tileIdx } for(l = 0; l <= num_tile_sets_in_pic_minus1; 1++){ TopLeftTileId[1]= top_left_tile_id[l]; NumTileRowsInTileSetMinus1[l] = num_tile_rows_in_tileset_minus1[l];
NumTileColumnsInTileSetMinus1[1]=num_tile_columns_in_tileset_mi- nus1[l]; }
[0139] Com relação às Tabelas 12 a 14, a Tabela 16 ilustra uma sin- taxe exemplificadora de dados de grupo de ladrilhos.
[0140] tile_group_data(){ Descritor tileIdx = TopLeftTileId[tile_set_idx] for(k = 0; k <= NumTileRowsInTileSetMinus1[tile_set_idx]; k++, tileIdx += (num_tile_columns_minus1 -num_tile_columns_in_tileset_mi- nus1[tile_set_idx])) { for(i = 0; i <= NumTileColumnsInTileSetMinus1[tile_set_idx]; i++, tileIdx++){ ctbAddrInTs = FirstCtbAddrTs[tileIdx] for(j = 0; j < NumCtusInTile[tileIdx]; j++, ctbAddrInTs++){ CtbAddrInRs = CtbAddrTsToRs[ctbAddrInTs] coding_tree_unit() }// for j=CTUs em um ladrilho end_of_tile_one_bit /*igual a 1 */ ae(v) if(k < num_tile_rows_in_tileset_minus1[tile_set_idx] || j < num_tile_columnss_in_tileset_minus1[tile_set_idx]) Variante if(!((k == num_tile_rows_in_tileset_minus1[tile_set_idx])&& | (j == num_tile_columnss_in_tileset_minus1[tile_set_idx]))) byte_alignment() }//for i }//for k } Tabela 16
[0141] Com relação às Tabelas 12 a 14, a Tabela 16A ilustra uma outra sintaxe exemplificadora de dados de grupo de ladrilhos. A principal diferença entre a Tabela 16 e a Tabela 16A é que alguns dos elementos de sintaxe são substituídos por variáveis derivadas.
[0142] tile_group_data(){ Descritor tileIdx = TopLeftTileId[tile_set_idx] for(k = 0; k <= NumTileRowsInTileSetMinus1[tile_set_idx]; k++, tileIdx += (num_tile_columns_minus1 - NumTileColumnsInTile- SetMinus1[tile_set_idx])){ for(i = 0; i <= NumTileColumnsInTileSetMinus1[tile_set_idx]; i++, tileIdx++){ ctbAddrInTs = FirstCtbAddrTs[tileIdx] for(j = 0; j <NumCtusInTile[tileIdx]; j++, ctbAddrInTs++){ CtbAddrInRs = CtbAddrTsToRs[ctbAddrInTs] coding_tree_unit() }// for j=CTUs em um ladrilho end_of_tile_one_bit /*igual a 1 */ ae(v) if(k < NumTileRowsInTileSetMinus1 [tile_set_idx] | | j < NumTileColumnsInTileSetMinus1[tile_set_idx]) Variante if(!((k == NumTileRowsInTileSetMinus1 [tile_set_idx]) && | (j == NumTileColumnsInTileSetMinus1 [tile_set_idx]))) byte_alignment()
}//for i }//for k } Tabela 16A
[0143] Com relação à Tabela 12 e à Tabela 16 e à Tabela 16A, em um exemplo, a conversão de um endereço CTB na varredura do ladrilho em uma ID de ladrilho pode ser da seguinte forma: for(j = 0, tileIdx = 0;j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++){ for(y = RowBd[j]; y < RowBd[j + 1]; y++) for(x = ColBd[i]; x < ColBd[i + 1]; x++){ TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx FirstCtbAddrTs[tileIdx]=CtbAddrRsToTs[RowBd[j] * Pic- WidthInCtbsY + ColBd[i]]} } TileIndex[j*(num_tile_columns_minus1+1)+i] = tileIdx RemTiles [tileIdx]=1 } for(l=0; l < (num_tile_sets_in_pic_minus1+!remaining_tiles_tileset_flag); 1++){ for(k=0, tileIdx= top_left_tile_id[l]; k<=num_tile_rows_in_tileset_mi- nus1[l]; k++, tileIdx += (num_tile_columns_minus1 -num_tile_columns_in_tileset_mi- nus1[l])) for(i=0; i <= num_tile_columns_in_tileset_minus1[l]; i++, tileIdx++){ RemTiles [tileIdx] =0 } TopLeftTileId[l]= top_left_tile_id[l]; NumTileRowsInTileSetMinus1[l]= num_tile_rows_in_tileset_minus1[l]; NumTileColumnsInTileSetMinus1[l] = num_tile_columns_in_tileset_mi- nus1[l];
NumTilesInSlice[l]=(NumTileRowsInTileSetMinus1[l]+l)*(NumTileCol- umnsInTileSetMinus1 [l]+1) } if(remaining_tiles_tileset_flag){ for(i=0,tlId=(num_tile_columns_minus1+1)* (num_tile_rows_mi- nus1+1),brId=0;i<(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1);i++){ if(RemTiles[i]){ if(i<tlId) tlId=i; if(i>brId) brId=i; } } TopLeftTileId[num_tile_sets_in_pic_minus1]= tlId; NumTileRowsInTileSetMinus1[num_tile_sets_in_pic_minus1]=(brId- tlId)/(num_tile_columns_minus1 + 1); NumTileColumnsInTileSetMinus1[num_tile_sets_in_pic_minus1]=(brId- tlId)%(num_tile_columns_minus1 + l); NumTile- sInSlice[num_tile_sets_in_pic_minus1] = (NumTileRowsInTile- SetMinus1[num_tile_sets_in_pic_minus1]+1)*(NumTileColumnsInTile- SetMinus1[num_tile_sets_in_pic_minus1]+1) }
[0144] Com relação à Tabela 12A e à Tabela 16 e à Tabela 16A, em um exemplo, a conversão de um endereço CTB na varredura do ladrilho em uma ID de ladrilho pode ser da seguinte forma: for(j = 0, tileIdx = 0;j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++){ for(y = RowBd[j]; y < RowBd[j + 1]; y++) for(x = ColBd[i]; x < ColBd[i + 1]; x++){ TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx
FirstCtbAddrTs[tileIdx] = CtbAddrRsToTs[RowBd[j] * Pic- WidthInCtbsY + ColBd[i]] } TileIndex[j*(num_tile_columns_minus1+1)+i] = tileIdx RemTiles [tileIdx]=1 } for(l = 0; l < num_tile_sets_in_pic_minus1; l++){ for(k = 0, tileIdx= top_left_tile_id[l]; k <= num_tile_rows_in_tile- set_minus1[l]; k++, tileIdx += (num_tile_columns_minus1 -num_tile_columns_in_tileset_mi- nus1[l])) for(i = 0; i <= num_tile_columns_in_tileset_minus1[l]; i++, tileIdx++){ RemTiles [tileIdx]=0 } TopLeftTileId[1]= top_left_tile_id[l]; NumTileRowsInTileSetMinus1[l] = num_tile_rows_in_tileset_minus1[l]; NumTilesInSlice[1]=(NumTileRowsInTileSetMinus1[l]+1)*(NumTileCol- umnsInTileSetMinus1[l]+l) } for(i=0,tlId=(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1),brId=0;i<(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1);i++){ if(RemTiles[i]){ if(i<tlId) tlId=i; if(i>brId) brId=i; } } TopLeftTileId[num_tile_sets_in_pic_minus1]= tlId; NumTileRowsInTileSetMinus1[num_tile_sets_in_pic_minus1]=(brId- tlId)/(num_tile_columns_minus1 + 1);
NumTileColumnsInTileSetMinus1[num_tile_sets_in_pic_minus1]=(brId- tlId)%(num_tile_columns_minus1 + 1); NumTilesInSlice[num_tile_sets_in_pic_minus1] = (NumTileRowsInTile- SetMinus1[num_tile_sets_in_pic_minus1]+l)*(NumTileColumnsInTile- SetMinus1[num_tile_sets_in_pic_minus1]+l)
[0145] Com relação à Tabela 13 e à Tabela 16 e à Tabela 16A, em um exemplo, a conversão de um endereço CTB na varredura do ladrilho em uma ID de ladrilho pode ser da seguinte forma: A lista TileId[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSi- zelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em uma ID de ladrilhos, e a lista NumCtu- sInTile[tileIdx] para tileIdx na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um índice de ladrilho no número de CTUs no ladrilho, são derivadas da seguinte forma: for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j ++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++){ for(y = RowBd[j]; y < RowBd[j + 1]; y++) for(x = ColBd[i]; x < ColBd[i + 1]; x++){ TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx FirstCtbAddrTs[tileIdx]=CtbAddrRsToTs[RowBd[j] * Pic- WidthInCtbsY + ColBd[i]] } TileIndex[j*(num_tile_columns_minus1+1)+i] = tileIdx RemTiles[tileIdx]=l } for(l = 0; l < (num_tile_sets_in_pic_minus1+!remaining_tiles_tile- set_flag); 1++){ for(k = 0, tileIdx= top_left_tile_id[l]; k <= num_tile_rows_in_tileset_mi- nus1[l]; k++, tileIdx +=
(num_tile_columns_minus1 -num_tile_columns_in_tileset_mi- nus1[l])) for(i=0; i <= num_tile_columns_in_tileset_minus1[l]; i++, tileIdx++){ RemTiles[tileIdx]=0 } TopLeftTileId[l]= top_left_tile_id[l]; BottomRightTileId[l]= bottom_right_tile_id[l]; dtlId = TileIdToIdx[bottom_right_tile_id[i]]‒ TileIdToIdx[top_left_tile_id[i] NumTileRowsInTileSetMinus1[l] = (dtlId/(num_tile_columns_minus1 + 1)) NumTileColumnsInTileSetMinus1[l] = (dtlId% (num_tile_columns_minus1 + 1))} NumTilesInSlice[1]=(NumTileRowsInTileSetMinus1[l]+1)*(NumTileCol- umnsInTileSetMinus1 [l]+l) } if(remaining_tiles_ tileset_flag){ for(i=0,tlId=(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1),brId=0;i<(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1);i++){ if(RemTiles[i]){ if(i<tlId) tlId=i; if(i>brId) brId=i; } }
TopLeftTileId[num_tile_sets_in_pic_minus1]=tlId; BottomRightTileId[num_tile_sets_in_pic_minus1]= brId; NumTileRowsInTileSetMinus1[num_tile_set_in_pic_minus1]=(brId- tlId)/(num_tile_columns_minus1 + 1); NumTileColumnsInTileSetMinus1[num_tile_sets_in_pic_minus1]=(brId-
tlId)%(num_tile_columns_minus1 + 1); NumTilesInSlice[num_tile_sets_in_pic_minus1]= (NumTileRowsInTile- SetMinus1[num_tile_sets_in_pic_minus1]+1)*(NumTileColumnsInTile- SetMinus1 [num_tile_sets_in_pic_minus1]+1) }
[0146] Com relação à Tabela 14 e à Tabela 16 e à Tabela 16A, em um exemplo, a conversão de um endereço CTB na varredura do ladrilho em uma ID de ladrilho pode ser da seguinte forma: A lista TileId[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSi- zelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em uma ID de ladrilhos, e a lista NumCtusInTile[tileIdx] para tileIdx na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um índice de ladrilho no nú- mero de CTUs no ladrilho, são derivadas da seguinte forma: for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++){ for(y = RowBd[j]; y < RowBd[j + 1]; y++) for(x = ColBd[i]; x < ColBd[i + 1]; x++){ TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx FirstCtbAddrTs[tileIdx]=CtbAddrRsToTs[RowBd[j] * Pic- WidthInCtbsY + ColBd[i]] } TileIndex[j*(num_tile_columns_minus1+1)+i] = tileIdx RemTiles[tileIdx]=1 } for(1 = 0;1 < num_tile_sets_in_pic_minus1; 1++){ for(k = 0, tileIdx= top_left_tile_id[l]J k <= num_tile_rows_m_tileset_mi- nus1[l]; k++, tileIdx += (num_tile_columns_minus1 -num_tile_columns_in_tileset_minus1[l])) for(i=0; i <= num_tile_columns_in_tileset_minus1[l]; i++, tileIdx++){
RemTiles[tileIdx]=0 } TopLeftTileId[l]= top_left_tile_id[l]; BottomRightTileId[1]= bottom_right_tile_id[l]; dtlId = TileIdToIdx[bottom_right_tile_id[i]] ‒ TileIdToIdx[top_left_tile_id[i] NumTileRowsInTileSetMinus1[l] = (dtlId/(num_tile_columns_minus1 + 1)) NumTileColumnsInTileSetMinus1[l] = (dtlId % (num_tile_columns_minus1 + 1))} NumTilesInSlice[1]=(NumTileRowsInTileSetMinus1[l]+1)*(NumTileCo- lumnsInTileSetMinus1 [1]+1) for(i=0,tlId=(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1),brId=0;i<(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1)>i++){ if(RemTiles[i]){ if(i<tlId) tlId=i; if(i>brId) brId=i; } } TopLeftTileId[num_tile_sets_in_pic_minus1]= tlId; BottomRightTileId[num_tile_sets_in_pic_minus1]= brId; NumTileRowsInTileSetMinus1[num_tile_sets_in_pic_minus1]=(brId- tlId)/(num_tile_columns_minus1 + 1); NumTileColumnsInTileSetMinus1[num_tile_sets_in_pic_mi- nus1]=(brId·tlId)%(num_tile_columns_minus1 + 1); NumTilesInSlice[num_tile_sets_in_pic_minus1] = (NumTileRowsInTile- SetMinus1[num_tile_sets_in_pic_minus1]+1)*(NumTileColumnsInTile- SetMinus1[num_tile_sets_in_pic_minus1]+1)
[0147] Em um exemplo, um sinalizador que indica que cada grupo de ladrilhos consiste em apenas um ladrilho pode ser sinalizado. A si- nalização de elemento de sintaxe para o número de ladrilhos no grupo de ladrilhos no cabeçalho de grupo de ladrilhos pode ser condicionada neste sinalizador. Isso proporciona economia de bits. A Tabela 17 ilustra um exemplo de sintaxe para um conjunto de parâmetros de imagem que pode ser usado para sinalizar estruturas de ladrilhos que inclui um sina- lizador que indica que cada grupo de ladrilhos consiste em apenas um ladrilho.
[0148] 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){ one_tile_per_tile_group u(1) num_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) uniform_tile_spacing_flag u(1) if(!uniform_tile_spacing_flag){ for(i = 0; i < num_tile_columns_minus1; i++) tile_column_width_minus1[i] ue(v) for(i = 0; i < num_tile_rows_minus1; i++) tile_row_height_minus1[i] ue(v) } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() } Tabela 17
[0149] Com relação à Tabela 17, os respectivos elementos de sintaxe podem ser baseados nas definições fornecidas acima e nas definições a seguir: transform_skip_enabled_flag igual a 1 especifica que transform_skip_flag pode estar presente na sintaxe de codificação re- sidual. transform_skip_enabled_flag igual a 0 especifica que trans- form_skip_flag não está presente na sintaxe de codificação residual. single_tile_in_pic_flag igual a 1 especifica que há apenas um ladrilho em cada imagem com referência ao PPS. single_tile_in_pic_flag igual a 0 especifica que há mais de um ladrilho em cada imagem com re- ferência ao PPS. É um requisito de conformação de fluxo de bits que o valor de single_tile_in_pic_flag deve ser o mesmo para todos os PPSs que são ativados em uma CVS. one_tile_per_tile_group igual a 1 especifica que cada grupo de ladrilhos inclui um ladrilho. one_tile_per_tile_group igual a 0 especifica que um grupo de ladrilhos pode incluir mais de um ladrilho. Em uma variante: one_tile_per_tile_group igual a 1 especifica que cada grupo de ladrilhos inclui um ladrilho. one_tile_per_tile_group igual a 0 especifica que pelo menos um grupo de ladrilhos inclui mais de um ladrilho. tile_column_width_minus1 mais 1 especifica a largura da i- ésima coluna de ladrilhos em unidades de blocos de árvore de codificação. tile_row_height_minus1[i] mais 1 especifica a altura da i- ésima fileira de ladrilhos em unidades de blocos de árvore de codifica- ção.
[0150] Com relação à Tabela 17, a Tabela 18 ilustra uma sintaxe exemplificadora de um cabeçalho de grupo de ladrilhos.
[0151] tile_group_header(){ Descritor tile_group_pic_parameter_set_id ue(v) if(NumTilesInPic > 1){ tile_group_address u(v) if(!one_tile_per_tile_group) num_tiles_in_tile_group_minus1 ue(v) } … } Tabela 18
[0152] Com relação à Tabela 18, os respectivos elementos de sintaxe podem ser baseados nas definições fornecidas acima e nas definições a seguir: Quando estiver presente, o valor do elemento de sintaxe do cabeçalho de grupo de ladrilhos tile_group_pic_parameter_set_id deve ser o mesmo em todos os cabeçalhos de grupo de ladrilhos de uma ima- gem codificada. tile_group_pic_parameter_set_id especifica o valor de pps_pic_parameter_set_id para o PPS em uso. O valor de tile_group_pic_parameter_set_id deve estar na faixa de 0 a 63, inclusivos. tile_group_address especifica o endereço de ladrilho do primeiro ladrilho no grupo de ladrilhos. O comprimento de tile_group_address é de Ceil(Log2 (NumTilesInPic)) bits. O valor de tile_group_address deve estar na faixa de 0 a NumTilesInPic ‒ 1, in- clusivos, e o valor de tile_group_address não deve ser igual ao valor de tile_group_address de qualquer outra unidade de NAL de grupo de ladrilhos codificados da mesma imagem codificada. Quando tile_group_address não estiver presente, infere-se que seja igual a 0. num_tiles_in_tile_group_minus1 mais 1 especifica o nú- mero de ladrilhos no grupo de ladrilhos. O valor de num_ti- les_in_tile_group_minus1 deve estar na faixa de 0 a NumTilesInPic ‒ 1, inclusivos. Quando não estiver presente, infere-se que o valor de num_ti- les_in_tile_group_minus1 seja igual a 0.
[0153] Em uma variante, o elemento de sintaxe para o número de ladrilhos no grupo de ladrilhos (minus1), num_ti- les_in_tile_group_minus1, é sinalizado com o uso de uma codifica- ção de comprimento fixo (isto é, u(v)), em vez de codificação de com- primento variável (isto é, ue(v)). Isto pode possibilitar análise sintática mais fácil no nível de sistema. Como tal, num_ti- les_in_tile_group_minus1 pode ser baseado na definição a seguir: num_tiles_in_tile_group_minus1 mais 1 especifica o nú- mero de ladrilhos no grupo de ladrilhos. O comprimento de num_ti- les_in_tile_group_minus1 é de Ceil(Log2 (NumTilesInPic)) bits. Quando não estiver presente, infere-se que o valor de num_tiles_in_tile_group_mi- nus1 seja igual a 0.
[0154] Em um exemplo, a sinalização de número de ladrilhos em grupo de ladrilhos pode ser condicionada com base no elemento de sintaxe single_tile_in_pic_flag em vez de na variável derivada NumTi- leInPic. O uso de um elemento de sintaxe para sinalização torna a aná- lise sintática mais fácil por não exigir derivação e uso de variáveis adi- cionais para decidir se um elemento de sintaxe foi incluído ou não. A Tabela 19 ilustra uma sintaxe exemplificadora de um cabeçalho de grupo de ladrilhos para este exemplo.
[0155] tile_group_header(){ Descritor tile_group_pic_parameter_set_id ue(v) if(!single_tile_in_pic_flag){ tile_group_address u(v) if(! one_tile_per_tile_group) num_tiles_in_tile_group_minus1 ue(v) } … } Tabela 19
[0156] Com relação à Tabela 19, os respectivos elementos de sintaxe podem ser baseados nas definições fornecidas acima.
[0157] A Tabela 20 ilustra uma outra sintaxe exemplificadora de um cabeçalho de grupo de ladrilhos.
[0158] tile_group_header(){ Descritor tile_group_pic_parameter_set_id ue(v) if(!single_tile_in_pic_flag){ tile_set_idx ue(v) } … } Tabela 20
[0159] Com relação à Tabela 20, os respectivos elementos de sintaxe podem ser baseados nas definições fornecidas acima e nas definições a seguir. tile_set_idx especifica o índice de conjunto de ladrilhos desse conjunto de ladrilhos. O comprimento do elemento de sintaxe tile_set_id é de Ceil(Log2(NumTileSets)) bits.
[0160] Conforme descrito acima, UIT-T H.265 define sinalização que habilita conjuntos de ladrilhos de movimento restrito, onde um con-
junto de ladrilhos de movimento restrito pode incluir um conjunto de la- drilhos para o qual dependências de previsão interimagens sejam limi- tadas aos conjuntos de ladrilhos cossituados em imagens de referência. Em um exemplo, um sinalizador que indica se um conjunto de ladrilhos é um MCTS pode ser sinalizado. A Tabela 21 ilustra um exemplo de sintaxe para um conjunto de parâmetros de imagem que pode ser usado para sinalizar estruturas de ladrilhos que inclui um sinalizador que indica se um conjunto de ladrilhos é um MCTS pode ser sinalizado.
[0161] 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_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } tile_id_len_minus1 ue(v) explicit_tile_id_flag u(1) if(explicit_tile_id_flag) for(i = 0; i <= num_tile_rows_minus1; i++) for(j = 0; j <= num_tile_columns_minus1; j ++) tile_id_val[i][j] u(v) if(explicit_tile_id_flag){ uniform_tile_spacing_flag u(1) if(!uniform_tile_spacing_flag){ for(i = 0; i < num_tile_columns_minus1; i++) tile_column_width_minus1[i] ue(v) for(i = 0; i < num_tile_rows_minus1; i++) tile_row_height_minus1[i] ue(v) } tile_set_flag u(1) if(tile_set_flag){ num_tile_sets_in_pic_minus1 ue(v) signaled_tile_set_index_flag u(1) remaining_tiles_tileset_flag u(1) for(i = 0; i <= num_tile_sets_in_pic_minus1; i++){ if(!remaining_tiles_tileset_flag || (remaining_tiles_tileset_flag && i < num_tile_sets_in_pic_minus1){ top_left_tile_id[i] u(v) bottom_right_tile_id[i] u(v) } is_mcts_flag u(1) if(signaled_tile_setindex_flag) tile_set_index[i] u(v) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() } Tabela 21
[0162] Com relação à Tabela 21, os respectivos elementos de sintaxe podem ser baseados nas definições a seguir: pps_pic_parameter_set_id identifica o PPS para referência por outros elementos de sintaxe.
O valor de pps_pic_parameter_set_id deve estar na faixa de 0 a 63, inclusivos. pps_seq_parameter_set_id especifica o valor de sps_seq_parameter_set_id para o SPS ativo.
O valor de pps_seq_para- meter_set_id deve estar na faixa de 0 a 15, inclusivos. transform_skip_enabled_flag igual a 1 especifica que transform_skip_flag pode estar presente na sintaxe de codificação re- sidual. transform_skip_enabled_flag igual a 0 especifica que trans- form_skip_flag não está presente na sintaxe de codificação residual. single_tile_in_pic_flag igual a 1 especifica que há apenas um ladrilho em cada imagem com referência ao PPS. single_tile_in_pic_flag igual a 0 especifica que há mais de um ladrilho em cada imagem com re- ferência ao PPS.
É um requisito de conformação de fluxo de bits que o valor de single_tile_in_pic_flag deve ser o mesmo para todos os PPSs que são ativados em uma CVS. num_tile_columns_minus1 mais 1 especifica o número de colunas de ladrilhos que particionam a imagem. num_tile_columns_mi- nus1 deve estar na faixa de 0 a PicWidthInCtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_columns_mi- nus1 seja igual a 0. num_tile_rows_minus1 mais 1 especifica o número de fi- leiras de ladrilhos que particionam a imagem. num_tile_rows_minus1 deve estar na faixa de 0 a PicHeightInCtbsY ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tile_rows_minus1 seja igual a 0.
A variável NumTilesInPic é definida igual a (num_tile_co- lumns_minus1 + 1) * (num_tile_rows_minus1 + 1). Quando single_tile_in_pic_flag for igual a 0, NumTilesInPic deve ser maior que 0. tile_id_len_minus1 mais 1 especifica o número de bits usados para representar o elemento de sintaxe tile_id_val[i][j], top_left_tile_id[i] e bottom_right_tile_id[i], quando presente, no PPS.
O valor de tile_id_len_minus1 deve estar na faixa de Ceil(Log2(NumTilesInPic) a 15, inclusivos. explicit_tile_id_flag igual a 1 especifica que a ID de ladri- lho para cada ladrilho é explicitamente sinalizada. explicit_tile_id_flag igual a 0 especifica que IDs de ladrilho não são explicitamente sinali- zadas. tile_id_val[[i][j] especifica a ID de ladrilho do ladrilho da i- ésima fileira de ladrilhos e da j-ésima coluna de ladrilhos.
O compri- mento de tile_id_val[i][j] é de tile_id_len_minus1 + 1 bits.
Para qualquer número inteiro m na faixa de 0 a num_tile_co- lumns_minus1, inclusivos, e qualquer número inteiro n na faixa de 0 a num_tile_rows_minus1, inclusivos, tile_id_val[i][j] não deve ser igual a tile_id_val[m][n] quando i não for igual a m ou j não for igual a n, e tile_id_val[i][j] deve ser menor que tile_id_val[m][n] quando j * (num_tile_columns_minus1 + 1) + i for menor que n * (num_tile_co- lumns_minus1 + 1) + m. uniform_tile_spacing_flag igual a 1 especifica que limites de coluna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos são uniformemente distribuídos por toda a imagem. uniform_tile_spa- cing_flag igual a 0 especifica que limites de coluna de ladrilhos e, da mesma forma, limites de fileira de ladrilhos não são uniformemente dis- tribuídos por toda a imagem, mas explicitamente sinalizados com o uso dos elementos de sintaxe tile_column_width_minus1[i] e tile_row_height_minus1[i]. Quando não estiver presente, infere-se que o valor de uniform_tile_spacing_flag seja igual a 1. tile_column_width_minus1[i] mais 1 especifica a largura da i-ésima coluna de ladrilhos em unidades de CTBs. tile_row_height_minus1[i] mais 1 especifica a altura da i- ésima fileira de ladrilhos em unidades de CTBs.
As variáveis a seguir são derivadas com a invocação do processo de conversão de varredura de ladrilhos e raster de CTB: ‒ A lista ColWidth[i] para i na faixa de 0 a num_tile_co- lumns_minus1, inclusivos, que especifica a largura da i-ésima coluna de ladrilhos em unidades de CTBs, ‒ a lista RowHeight[j] para j na faixa de 0 a num_tile_rows_minus1, inclusivos, que especifica a altura da j-ésima fileira de ladrilhos em unidades de CTBs, ‒ a lista ColBd[i] para i na faixa de 0 a num_tile_co- lumns_minus1 + 1, inclusivos, que especifica a localização do i-ésimo limite de coluna de ladrilhos em unidades de CTBs, ‒ a lista RowBd[j] para j na faixa de 0 a num_tile_rows_minus1 + 1, inclusivos, que especifica a localização do j-ésimo limite de fileira de ladrilhos em unidades de CTBs, ‒ a lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura raster de CTB de uma imagem em um endereço de CTB na varredura de ladrilhos, ‒ a lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSizeInCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em um endereço de CTB na varredura raster de CTB de uma imagem, ‒ a lista TileId[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSi- zelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de
CTB na varredura de ladrilhos em uma ID de ladrilhos, ‒ a lista NumCtusInTile[tileIdx] para tileIdx na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um ín- dice de ladrilho no número de CTUs no ladrilho, ‒ o conjunto se[TileIdToIdx[tileId] para um conjunto de valo- res NumTilesInPic tileId que especifica a conversão de uma ID de ladri- lho em um índice de ladrilho e a lista FirstCtbAddrTs[tileIdx] para tileIdx na faixa de 0 a NumTilesInPic ‒ 1, inclusivos, que especifica a conver- são de uma ID de ladrilho no endereço de CTB na varredura de ladrilhos do primeiro CTB no ladrilho, ‒ as listas ColumnWidthInLumaSamples[i] para i na faixa de 0 a num_tile_columns_minus1, inclusivos, que especificam a largura da i-ésima coluna de ladrilhos em unidades de amostras de luma, ‒ a lista RowHeightInLumaSamples[j] para j na faixa de 0 a num_tile_rows_minus1, inclusivos, que especifica a altura da j-ésima fileira de ladrilhos em unidades de amostras de luma.
Os valores de ColumnWidthInLumaSamples[i] para i na faixa de 0 a num_tile_columns_minus1, inclusivos, e RowHeightInLumaSam- ples[j] para j na faixa de 0 a num_tile_rows_minus1, inclusivos, devem to- dos ser maiores que 0. tile_set_flag igual a 0 especifica que cada ladrilho é um con- junto de ladrilhos. tile_set_flag igual a 1 especifica que os conjuntos de ladrilhos estão explicitamente especificados pelos elementos de sintaxe num_tile_sets_in_pic_minus1, top_left_tile_id[i] e bottom_right_tile_id[i]. Em outro exemplo, tile_set_flag igual a 0 especifica que cada imagem é um ladrilho. num_tilesets_in_pic_minus1 mais 1 especifica o número de conjuntos de ladrilhos na imagem.
O valor de num_tile- sets_in_pic_minus1 deve estar na faixa de 0 a (NumTilesInPic- 1), in-
clusivos.
Quando não estiver presente, infere-se que num_tile- sets_in_pic_minus1 seja igual a (NumTilesInPic- 1). Em um outro exemplo, quando não estiver presente, infere-se que num_tile- sets_in_pic_minus1 seja igual a 0. signaled_tile_set_index_flag igual a 1 especifica que o índice de conjunto de ladrilhos para cada conjunto de ladrilhos é sinalizado. sig- naled_tile_set_index_flag igual a 0 especifica que o índice de conjunto de ladrilhos não é sinalizado. remaining_tiles_tileset_flag igual a 1 especifica que todos os ladrilhos restantes no conjunto de ladrilhos, exceto aqueles explicitamente especificados nos conjuntos de ladrilhos (num_tilesets_in_pic_minus1-1) sinalizados pelos elementos de sintaxe top_left_tile_id[i], num_tile_rows_in_tileset_minus1[i], num_tile_columns_in_tileset_mi- nus1[i], formam o último conjunto de ladrilhos. remaining_tiles_tileset_flag igual a 0 especifica que todos os conjuntos de ladrilhos num_tile- sets_in_pic_minus1 são explicitamente especificados pela sinalização de elementos de sintaxe top_left_tile_id[i], num_tile_rows_in_tileset_mi- nus1[i], num_tile_columns_in_tileset_minus1[i]. top_left_tile_id[i] especifica a ID de ladrilho do ladrilho situ- ado no canto superior esquerdo do i‒ésimo conjunto de ladrilhos.
O comprimento de top_left_tile_id[i] é de tile_id_len_minus1 + 1 bits.
O va- lor de top_left_tile_id[i] não deve ser igual ao valor de top_left_tile_id[j] para qualquer i não igual a j. bottom_right_tile_id[i] especifica a ID de ladrilho do ladrilho situado no canto inferior direito do i‒ésimo conjunto de ladrilhos.
O com- primento de bottom_right_tile_id[i] é de tile_id_len_minus1 + 1 bits.
As variáveis NumTileRowsInSlice[top_left_tile_id[i]], NumTi- leColumnsInSlice[top_left_tile_id[i]] e NumTilesInSlice[top_left_tile_id[i]] são derivadas da seguinte forma: deltaTileIdx = TileIdToIdx[bottom_right_tile_id[i]] ‒
TileIdToIdx[top_left_tile_id[i]]
NumTileRowsInSlice[top_left_tile_id [i]] = (deltaTileIdx/(num_tile_col- umns_minus1 + 1)) + 1
NumTileColumnsInSlice[top_left_tile_id[i]] = (deltaTileIdx % (num_tile_col- umns_minus1 + 1)) + 1
NumTilesInSlice[top_left_tile_id[i]] = NumTileRows- InSlice[top_left_tile_id[i]] * NumTileColumnsInSlice[top_left_tile_id[i]] is_mcts_flag igual a 1 especifica que o i-ésimo conjunto de ladrilhos é um conjunto de ladrilhos de movimento restrito. is_mcts_flag igual a 0 especifica que o i-ésimo conjunto de ladrilhos não é um con- junto de ladrilhos de movimento restrito.
Em um exemplo, is_mcts_flag igual a 0 especifica que o i- ésimo conjunto de ladrilhos pode ou não ser um conjunto de ladrilhos de movimento restrito.
Quando um i-ésimo conjunto de ladrilhos é um conjunto de ladrilhos de movimento restrito, ele pode ter uma ou mais das restrições como aquelas descritas na seção D.3.30 (isto é, mensagem de SEI de conjuntos de ladrilhos de movimento restrito temporal) de UIT-T H.265. Em um exemplo, um conjunto de ladrilhos de movimento restrito pode ser chamado de um conjunto de ladrilhos de movimento restrito tempo- ral. tile_set_index[i] especifica o índice de conjunto de ladri- lhos do i-ésimo conjunto de ladrilhos.
O comprimento do elemento de sintaxe tile_set_index[i] é de Ceil(Log2(num_tile_sets_in_pic_mi- nus1+1)) bits.
Quando não estiver presente, infere-se que tile_set_in- dex[i] seja igual a i, para cada i na faixa de 0 a num_tile_sets_in_pic_minus1, inclusivos. loop_filter_across_tiles_enabled_flag igual a 1 especifica que operações de filtragem em loop podem ser executadas através de limites de ladrilhos em imagens com referência ao PPS. loop_fil- ter_across_tiles_enabled_flag igual a 0 especifica que operações de fil- tragem em loop não são executadas através de limites de ladrilhos em imagens com referência ao PPS. As operações de filtragem em loop in- cluem as operações de filtragem de loop adaptativo, de filtragem de des- locamento adaptativo de amostra e de filtragem de desbloqueio. Quando não estiver presente, infere-se que o valor de loop_filter_across_ti- les_enabled_flag seja igual a 1.
[0163] Em um exemplo, a porção correspondente da Tabela 21 pode ser modificada conforme mostrado na Tabela 21A abaixo: tile_set_flag u(1) if(tile_set_flag){ num_tile_sets_in_pic_minus1 ue(v) signaled_tile_set_index_flag u(1) remaining_tiles_tileset_flag u(1) for(i = 0; i <= num_tile_sets_in_pic_minus1; i++){ if(!remaining_tiles_tileset_flag || (remaining_tiles_tileset_flag && i < num_tile_sets_in_pic_minus1){ top_left_tile_id[i] u(v) num_tile_rows_in_tileset_minus1[i] u(v) num_tile_columns_in_tileset_minus1[i] u(v) } tile_set_index[i] u(v) } } Tabela 21A
[0164] Em que respectivos elementos de sintaxe podem ter definições conforme fornecido acima. Além disso, com relação à Tabela 21, a sintaxe do cabeçalho de grupo de ladrilhos pode ser conforme mostrado na Tabela 21B abaixo.
[0165] tile_group_header(){ Descritor tile_group_pic_parameter_set_id ue(v) tile_set_idx u(v) tile_group_type ue(v) if (tile_group_type != I){ log2_diff_ctu_max_bt_size ue(v) if(sps_sbtmvp_enabled_flag){ sbtmvp_size_override_flag u(1) if(sbtmvp_size_override_flag) log2_sbtmvp_active_size_minus2 u(3) } if(sps_temporal_mvp_enabled_flag) tile_group_temporal_mvp_enabled_flag u(1) if(tile_group_type = = B)
mvd_l1_zero_flag u(1) if(tile_group_temporal_mvp_enabled_flag){ if(tile_group_type = = B) collocated_from_10_flag u(1) } six_minus_max_num_merge_cand ue(v) } dep_quant_enabled_flag u(1) if(!dep_quant_enabled_flag) sign_data_hiding_enabled_flag u(1) if(NumTilesInSlice[tile_set_idx] > 1){ offset_len_minus1 ue(v) for(i = 0; i < NumTilesInSlice[tile_set_idx]-1; i++) entry_point_offset_minus1[i] u(v) } byte_alignment() } Tabela 21B
[0166] Com relação à Tabela 21B, os respectivos elementos de sin- taxe podem ser baseados na semântica e nas definições a seguir: Quando estiver presente, o valor do elemento de sintaxe do cabeçalho de grupo de ladrilhos tile_group_pic_parameter_set_id deve ser o mesmo em todos os cabeçalhos de grupo de ladrilhos de uma ima- gem codificada. tile_group_pic_parameter_set_id especifica o valor de pps_pic_parameter_set_id para o PPS em uso. O valor de tile_group_pic_parameter_set_id deve estar na faixa de 0 a 63, inclusivos. tile_set_idx especifica o índice de conjunto de ladrilhos deste conjunto de ladrilhos. O comprimento do elemento de sintaxe tile_set_idx é de Ceil(Log2(num_tile_sets_in_pic_minus1+1)) bits. Em outro exemplo, tile_set_idx pode ser chamado de tile_group_idx e ter semântica da seguinte forma: tile_group_idx especifica o índice de conjunto de ladrilhos desse conjunto de ladrilhos. O comprimento do elemento de sintaxe tile_group_idx é de Ceil(Log2(num_tile_sets_in_pic_minus1+1)) bits. tile_group_type especifica o tipo de codificação do grupo de ladrilhos de acordo com a Tabela 21C. tile_group_type Nome do tile_group_type 0 B (grupo de ladrilhos B) 1 P (grupo de ladrilhos P) 2 I (grupo de ladrilhos I)
Tabela 21C Quando nal_unit_type for igual a IRAP_NUT, isto é, a ima- gem for uma imagem IRAP, tile_group_type deve ser igual a 2. log2_diff_ctu_max_bt_size especifica a diferença entre o ta- manho de CTB de luma e o tamanho máximo de luma (largura ou altura) de um bloco de codificação que pode ser dividido com o uso de uma divi- são binária. O valor de log2_diff_ctu_max_bt_size deve estar na faixa de 0 a CtbLog2SizeY ‒ MinCbLog2SizeY, inclusivos. Quando log2_diff_ctu_max_bt_size não estiver presente, in- fere-se que o valor de log2_diff_ctu_max_bt_size seja igual a 2.
[0167] As variáveis MinQtLog2SizeY, MaxBtLog2SizeY, MinBt- Log2SizeY, MaxTtLog2SizeY, MinTtLog2SizeY, MaxBtSizeY, MinBtSi- zeY, MaxTtSizeY, MinTtSizeY e MaxMttDepth são derivadas da seguinte forma: MinQtLog2SizeY = (tile_group_type == I) ? MinQtLog2Size- IntraY : MinQtLog2SizeInterY MaxBtLog2SizeY = CtbLog2SizeY ‒ log2_diff_ctu_max_bt_size MinBtLog2SizeY = MinCbLog2SizeY MaxTtLog2SizeY = (tile_group_type = = I) ? 5 : 6 MinTtLog2SizeY = MinCbLog2SizeY MinQtSizeY = 1 << MinQtLog2SizeY MaxBtSizeY = 1 << MaxBtLog2SizeY MinBtSizeY = 1 << MinBtLog2SizeY MaxTtSizeY = 1 << MaxTtLog2SizeY MinTtSizeY = 1 << MinTtLog2SizeY MaxMttDepth = (tile_group_type = = I) ? max_mtt_hierarchy_depth_intra_tile_groups: max_mtt_hierarchy_depth_inter_tile_groups sbtmvp_size_override_flag igual a 1 especifica que o ele- mento de sintaxe log2_sbtmvp_active_size_minus2 está presente para o grupo de ladrilhos atual. sbtmvp_size_override_flag igual a 0 especifica que o elemento de sintaxe log2_atmvp_active_size_minus2 não está pre- sente e infere-se que log2_sbtmvp_size_active_minus2 seja igual a log2_sbtmvp_default_size_minus2. log2_sbtmvp_active_size_minus2 mais 2 especifica o va- lor do tamanho de sub-bloco que é usado para derivar os parâmetros de movimento para a TMVP baseada em sub-bloco do grupo de ladri- lhos atual.
Quando log2_sbtmvp_size_active_minus2 não estiver pre- sente, infere-se que seja igual a log2_sbtmvp_default_size_minus2. A variável é derivada da seguinte forma: Log2SbtmvpSize = log2_sbtmvp_size_active_minus2 + 2 tile_group_temporal_mvp_enabled_flag especifica se os preditores de vetor de movimento temporal podem ser usados para in- terprevisão.
Se tile_group_temporal_mvp_enabled_flag for igual a 0, os elementos de sintaxe da imagem atual devem ser restritos de modo que nenhum preditor de vetor de movimento temporal seja usado na decodificação da imagem atual.
Caso contrário (tile_group_tempo- ral_mvp_enabled_flag for igual a 1), preditores de vetor de movimento temporal podem ser usados na decodificação da imagem atual.
Quando não estiver presente, infere-se que o valor de tile_group_tem- poral_mvp_enabled_flag seja igual a 0. mvd_l1_zero_flag igual a 1 indica que a estrutura de sintaxe mvd_coding(x0, y0, 1) não é sintaticamente analisada e MvdL1[x0][y0][compIdx] é definido como igual a 0 para compIdx = 0..1. mvd_l1_zero_flag igual a 0 indica que a estrutura de sintaxe mvd_co- ding(x0, y0, 1) é sintaticamente analisada. collocated_from_10_flag igual a 1 especifica que a ima- gem cossituada usada para previsão de vetor de movimento temporal é derivado da lista 0 de imagem de referência. colloca- ted_from_10_flag igual a 0 especifica que a imagem cossituada usada para previsão de vetor de movimento temporal é derivado da lista 1 de imagem de referência.
Quando collocated_from_10_flag não estiver presente, infere-se que seja igual a 1. six_minus_max_num_merge_cand especifica o número máximo de candidatos de previsão de vetor de movimento (MVP) de integração suportados no grupo de ladrilhos subtraídos de 6. O número máximo de candidatos de MVP de integração, MaxNumMergeCand, é derivado da seguinte forma: MaxNumMergeCand = 6 ‒ six_minus_max_num_merge_cand O valor de MaxNumMergeCand deve estar na faixa de 1 a 6, inclusivos. dep_quant_enabled_flag igual a 0 especifica que quantiza- ção dependente está desabilitada. dep_quant_enabled_flag igual a 1 es- pecifica que quantização dependente está habilitada. sign_data_hiding_enabled_flag igual a 0 especifica que ocultação de bit de sinal está desabilitada. sign_data_hiding_enabled_flag igual a 1 especifica que ocultação de bit de sinal está habilitada.
Quando sign_data_hiding_enabled_flag não estiver presente, infere-se que seja igual a 0. offset_len_minus1 mais 1 especifica o comprimento, em bits, dos elementos de sintaxe entry_point_offset_minus1[i]. O valor de offset_len_minus1 deve estar na faixa de 0 a 31, inclusivos. entry_point_offset_minus1[i] mais 1 especifica o i-ésimo deslocamento de ponto de entrada em bytes, e é representado por offset_len_minus1 mais 1 bit.
Os dados de fatia que seguem o cabeçalho de fatia consistem em subconjuntos NumTilesInSlice[tile_set_idx], com va- lores de índice de subconjunto na faixa de 0 a NumTilesInS-
lice[tile_set_idx] ‒ 1, inclusivos. O primeiro byte dos dados de fatia é con- siderado o byte 0. Quando estiverem presentes, os bytes de prevenção de emulação que aparecem na porção de dados de fatia da unidade de NAL de fatia codificada são contados como parte dos dados de fatia para pro- pósitos de identificação de subconjunto. O subconjunto 0 consiste em bytes de 0 a entry_point_offset_minus1[0], inclusivos, dos dados de seg- mento de fatia codificados, subconjunto k, com k na faixa de 1 a NumTile- sInSlice[tile_set_idx] ‒ 2, inclusivos, consiste em bytes firstByte[k] a las- tByte[k], inclusivos, dos dados de fatia codificados com firstByte[k] e las- tByte[k] definidos como: lastByte[k] = firstByte[k] + entry_point_offset_minus1[k] O último subconjunto (com índice de subconjunto igual a NumTilesInSlice[tile_set_idx] ‒ 1) consiste nos bytes restantes dos da- dos de fatia codificados. Cada subconjunto deve consistir em todos os bits codifica- dos de todas as CTUs na fatia que estão no mesmo ladrilho.
[0168] Além disso, com relação à Tabela 21, a sintaxe do tile_group_data() pode ser conforme mostrado na Tabela 21D.
[0169] tile_group_data(){ Descritor tileIdx = TopLeftTileId[tile_set_idx] for(j = 0; j <= NumTileRowsInTileSetMinus1[tile_set_idx]; j++, tileIdx += (num_tile_columns_minus1 – NumTileColumnsInTileSetMinus1[tile_set_idx])){ for(i = 0,; i <= NumTileColumnsInTileSetMinus1[tile_set_idx]; i++, tileIdx++){ ctbAddrInTs = FirstCtbAddrTs[CurrTileIdx] for(k = 0; k < NumCtusInTile[CurrTileIdx]; k++, ctbAddrInTs++){ CtbAddrInRs = CtbAddrTsToRs[ctbAddrInTs] coding_tree_unit() } end_of_tile_one_bit /*igual a 1 */ ae(v) if(i < NumTileRowsInTileSetMinus1[tile_set_idx] || j < NumTileColumnsInTileSetMinus1[tile_set_idx]) byte_alignment() } } } Tabela 21D
[0170] Com relação à Tabela 21D, os respectivos elementos de sin- taxe podem ser baseados nas definições a seguir:
end_of_tile_one_bit deve ser igual a 1.
[0171] Deve-se notar que, embora a descrição da presente inven- ção use o termo fatia e cabeçalho de fatia, esses termos podem ser substituídos pelos termos grupo de ladrilhos e cabeçalho de grupo de ladrilhos, respectivamente. Adicionalmente, o elemento de sintaxe slice_type pode ser substituído pelo elemento de sintaxe tile_group_type. Nesse caso, as condições e outros elementos de sin- taxe que usam slice_type podem ser alterados para tile_group_type. Adicionalmente, a variável NumTilesInSlice pode ser substituída pelo elemento de sintaxe NumTilesInTileGroup. Além disso, deve-se notar que, embora a descrição dos exemplos descritos na presente invenção use o termo conjunto de ladrilhos, uma ou mais ocorrências de conjunto de ladrilhos podem ser substituídas pelo termo grupo de ladrilhos. Além disso, um ou mais dentre os elementos de sintaxe com nomes que in- cluem as palavras tile_set podem ser substituídos por nomes que, em vez disso, incluem as palavras tile_group. Dessa forma, uma ou mais das seguintes alterações de termos podem ser feitas: Alterar "conjunto de ladrilhos" para "grupo de ladrilhos". Alterar "tile_set" para "tile_group" Alterar NumTilesInSlice para NumTilesInTileGroup Alterar NumTileRowsInTileSetMinus1 para NumTileRowsInTi- leGroupMinus1 Alterar NumTileColumnsInTileSetMinus1 para NumTileCo- lumnsInTileGroupMinus1 Alterar tile_set_idx para tile_group_idx Alterar num_tile_sets_in_pic_minus1 para num_tile_groups_in_pic_minus1 Alterar signaled_tile_set_index_flag para sig- naled_tile_group_index_flag ou para explicit_tile_group_index_flag
Alterar remaining_tiles_tileset_flag para remaining_tiles_tile- group_flag Alterar tile_set_index para tile_group_index
[0172] A Tabela 22A e a Tabela 22B ilustram um exemplo de sin- taxe para um conjunto de parâmetros de imagem que pode ser usado para sinalizar estruturas de ladrilhos de acordo com técnicas da pre- sente invenção.
[0173] 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_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } if(!single_tile_in_pic_flag){ uniform_tile_spacing_flag u(1) if(!uniform_tile_spacing_flag){ for(i = 0; i < num_tile_columns_minus1; i++) tile_column_width_minus1[i] ue(v) for(i = 0; i < num_tile_rows_minus1; i++) tile_row_height_minus1[i] ue(v) } one_tile_per_tile_group_flag rect_tile_group_flag u(1) if(rect_tile_group_flag){ num_tile_groups_in_pic_minus1 ue(v) signalled_tile_group_index_length_minus1 ue(v) signalled_tile_group_index_flag u(1) remaining_tiles_tile_group_flag u(1) for(i = 0; i <=num_tile_sets_in_pic_minus1; i++){ if(!remaining_tiles_tile_group_flag || (remaining_tiles_tile_group_flag && i<num_tile_sets_in_pic_minus1){ top_left_tile_id[i] u(v) if(! one_tile_per_tile_group_flag) bottom_right_tile_id[i] u(v) } if(signalled_tile_group_index_flag) tile_group_index[i] u(v) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() } Tabela 22A
[0174] pic_parameter_set_rbsp(){ Descritor pps_pic_parametcr_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_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } if(!single_tile_in_pic_flag){ uniform_tile_spacing_flag u(1) if(!uniform_tile_spacing_flag){ for(i = 0; i < num_tile_columns_minus1; i++) tile_column_width_minus1[i] ue(v) for(i = 0; i < num_tile_rows_minus1; i++) tile_row_height_minus1[i] ue(v) } one_tile_per_tile_group_flag rect_tile_group_flag u(1) if(rect_tile_group_flag){ num_tile_groups_in_pic_minus1 ue(v) signalled_tile_group_index_flag u(1) if(signalled_tile_group_index_flag) signalled_tile_group_index_length_minus1 ue(v) remaining_tiles_tile_group_flag u(1) for(i = 0; i <=num_tile_sets_in_pic_minus1; i++){ if(!remaining_tiles_tile_group_flag || (remaining_tiles_tile_group_flag && i< num_tile_sets_in_pic_minus1){ top_left_tile_id[i] u(v) if(!one_tile_per_tile_group_flag) bottom_right_tile_id[i] u(v) } if(signalled_tile_group_index_flag) tile_group_index[i] u(v) } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() } Tabela 22B
[0175] 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_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) } if(!single_tile_in_pic_flag){ uniform_tile_spacing_flag u(1) if(!uniform_tile_spacing_flag){ for(i = 0; i < num_tile_columns_minus1; i++) tile_column_width_minus1[i] ue(v) for(i = 0; i < num_tile_rows_minus1; i++) tile_row_height_minus1[i] ue(v) } one_tile_per_tile_group_flag rect_tile_group_flag u(1) if(rect_tile_group_flag){ num_tile_groups_in_pic_minus1 ue(v) signalled_tile_group_index_flag u(1) if(signalled_tile_group_index_flag) signalled_tile_group_index_length_minus1 ue(v)
for(i = 0; i <num_tile_sets_in_pic_minus1; i++){ top_left_tile_id[i] u(v) if(!one_tile_per_tile_group_flag) bottom_right_tile_id[i] u(v) } if(signalled_tile_group_index_flag) tile_group_index[i] u(v) } } loop_filter_across_tiles_enabled_flag u(1) } rbsp_trailing_bits() } Tabela 22C
[0176] Com relação à Tabela 22A, 22B e 22C, os respectivos ele- mentos de sintaxe podem ser baseados na semântica e nas definições fornecidas acima e na semântica e nas definições a seguir: one_tile_per_tile_group igual a 1 especifica que cada grupo de ladrilhos que refere-se a este PPS inclui um ladrilho. one_tile_per_tile_group igual a 0 especifica que um grupo de ladrilhos que refere-se a este PPS pode incluir mais de um ladrilho. Em um outro exemplo: one_tile_per_tile_group_flag igual a 1 especifica que cada grupo de ladrilhos que refere-se a este PPS contém exatamente um ladrilho. one_tile_per_tile_group_flag igual a 0 especifica que cada grupo de ladrilhos que refere-se a este PPS contém um ou mais ladri- lhos. rect_tile_group_flag igual a 0 especifica que os ladrilhos den- tro de grupo de ladrilhos estão em ordem de varredura raster e as informa- ções do grupo de ladrilhos não são sinalizadas em PPS. rect_tile_group_flag igual a 1 especifica que as informações do grupo de ladrilhos retangulares estão explicitamente especificadas pelos elementos de sintaxe num_tile_groups_in_pic_minus1, top_left_tile_id[i] e, quando estiver presente, bottom_right_tile_id[i]. tile_group_flag igual a 0 especifica que cada ladrilho é um grupo de ladrilhos. tile_group_flag igual a 1 especifica que os grupos de ladrilhos estão explicitamente especificados pelos elementos de sintaxe num_tile_groups_in_pic_minus1, top_left_tile_id[i] e bot- tom_right_tile_id[i]. Em um outro exemplo: tile_group_flag igual a 0 especifica que cada ladrilho é um grupo de ladrilhos. tile_group_flag igual a 1 especifica que os grupos de ladrilhos estão explicitamente especificados pelos elementos de sintaxe num_tile_groups_in_pic_minus1, top_left_tile_id[i] e bot- tom_right_tile_id[i]. signalled_tile_group_index_length_minus1 mais 1 especi- fica o número de bits usados para representar o elemento de sintaxe tile_group_index[i], quando estiver presente, e tile_group_id.
O valor de signalled_tile_group_index_length_minus1 deve estar na faixa de 0 a 15, inclusivos. signalled_tile_group_index_flag igual a 1 especifica que o grupo de conjunto de ladrilhos para cada grupo de ladrilhos é sinali- zado. signalled_tile_group_index_flag igual a 0 especifica que o grupo de ladrilhos não é sinalizado. num_tile_groups_injic_minus1 mais 1 especifica o número de grupos de ladrilhos na imagem.
O valor de num_tile_groups_in_pic_minus1 deve estar na faixa de 0 a (NumTilesIn- Pic- 1), inclusivos.
Quando não estiver presente, infere-se que num_tile_groups_in_pic_minus1 seja igual a (NumTilesInPic- 1). remaining_tiles_tile_group_flag igual a 1 especifica que to- dos os ladrilhos restantes no conjunto de ladrilhos, exceto aqueles explici- tamente especificados nos conjuntos de ladrilhos (num_tile_groups_in_pic_minus1·1) sinalizados pelos elementos de sin- taxe top_left_tile_id[i], num_tile_rows_in_tile_group_minus1[i], num_tile_columns_in_ttile_group_minus1[i], formam o último conjunto de ladrilhos. remaining_tiles_tile_group_flag igual a 0 especifica que todos os conjuntos num_tile_groups_in_pic_minus1tile são explicitamente especifi- cados pela sinalização de elementos de sintaxe top_left_tile_id[i], num_tile_rows_in_tile_group_minus1[i], num_tile_co- lumns_in_tile_group_minus1[i]. top_left_tile_id[i] especifica o índice de ladrilho do ladrilho situado no canto superior esquerdo do i‒ésimo conjunto de ladrilhos. O valor de top_left_tile_id[i] não deve ser igual ao valor de top_left_tile_id[j] para qualquer i não igual a j. bottom_right_tile_id[i] especifica o índice de ladrilho do la- drilho situado no canto inferior direito do i‒ésimo conjunto de ladrilhos. Quando one_tile_per_tile_group_flag for igual a 1, infere-se que bot- tom_right_tile_id[i] seja igual a top_left_tile_id[i]. A variável NumTilesInTileGroup[i], que especifica o número de ladrilhos no grupo de ladrilhos, e as variáveis relacionadas são derivadas da seguinte forma: deltaTileIdxf i] = bottom_right_tile_id| i] ‒ top_right_tile_id[i] NumTileRowsInTileGroupMinus1[i] = (deltaTileIdx[i]/(num_tile_co- lumns_minus1 + 1)) NumTileColumnsInTileGroupMinus1[i] = (deltaTileIdx[i] % (num_tile_columns minus1 + 1)) NumTilesInTileGroup[i] = numTileRows[i] * numTileColumns[i] tile_group_index[i] especifica o índice de grupo de ladri- lhos do i-ésimo grupo de ladrilhos. O comprimento do elemento de sin- taxe tile_group_index[i] é de signalled_tile_set_index_length_mi- nus1+1 bits. Quando não estiver presente, infere-se que tile_group_in- dex[i] seja igual a i, para cada i na faixa de 0 a num_tile_groups_in_pic_minus1, inclusivos.
[0177] Com relação à Tabela 22A, Tabela 22B, Tabela 22C, Tabela 23A e Tabela 23B ilustram uma sintaxe exemplificadora de um cabe-
çalho de grupo de ladrilhos e a Tabela 24 ilustra uma sintaxe exempli- ficadora de dados de grupo de ladrilhos.
[0178] tile_group_header(){ Descritor tile_group_pic_parameter_set_id ue(v) if(!rect_tile_group_flag){ if(NumTilesInPic > 1){ tile_group_address u(v) if(! one_tile_per_tile_group) num_tiles_in_tile_group_minus1 ue(v) } } else tile_group_id u(v) tile_group_type ue(v) if (tile_group_type != I){ log2_diff_ctu_max_bt_size ue(v) if(sps_sbtmvp_enabled_flag){ sbtmvp_size_override_flag u(1) if(sbtmvp_size_override_flag) log2_sbtmvp_active_size_minus2 u(3) } if(sps_temporal_mvp_enabled_flag) tile_group_temporal_mvp_enabled_flag u(1) if(tile_group_type = = B) mvd_l1_zero_flag u(1) if(tile_group_temporal_mvp_enabled_flag){ if(tile_group_type = = B) collocated_from_10_flag u(1) } six_minus_max_num_merge_cand ue(v) } dep_quant_enabled_flag u(1) if(!dep_quant_enabled_flag) sign_data_hiding_enabled_flag u(1) if(rect_tile_group_flag ? (NumTilesInTileGroup[tile_group_id] > 1): (num_tiles_in_tile_group_minus1 > 0)){ offset_len_minus1 ue(v) for(i=0; i < rect_tile_group_flag?(NumTilesInTileGroup[tile_group_id]-1: num_tiles_in_tile_group_minus1; i++) entry_point_offset_minus1[i] u(v) } byte_alignment()} } Tabela 23A
[0179] tile_group_header(){ Descritor … if(!rect_tile_group_flag){ if(NumTilesInPic > 1){ tile_group_address u(v) if(!one_tile_per_tile_group) num_tiles_in_tile_group_minus1 ue(v) } } else tile_group_id u(v) tile_group_pic_parameter_set_id ue(v) tile_group_type ue(v)
if (tile_group_type != I){ … Tabela 23B
[0180] tile_group_data(){ Descritor tileIdx = TopLeftTileId[tile_group_id] for(j = 0; j <=NumTileRowsInTileGroupMinus1[tile_group_id]; j++, tileIdx +=(num_tile_columns_minus1 -NumTileColumnsInTile- GroupMinus1[tile_group_id])){ for(i = 0; i <= NumTileColumnsInTileGroupMinus1[tile_group_id]; i++, tileIdx++){ ctbAddrInTs = FirstCtbAddrTs[tileIdx] for(k = 0; k < NumCtusInTile[tileIdx]; k++, ctbAddrInTs++){ CtbAddrInRs = CtbAddrTsToRs[ctbAddrInTs] coding_tree_unit() } end_of_tile_one_bit /*igual a 1 */ ae(v) if(i <NumTileRowsInTileGroupMinus1[tile_group_id] || j <NumTileColumnsInTileGroupMinus1[tile_group_id]) byte_alignment() } } } Tabela 24
[0181] Com relação à Tabela 23A, à Tabela 23B e à Tabela 24, os respectivos elementos de sintaxe podem ser baseados na semântica e nas definições fornecidas acima e na semântica e nas definições a seguir: tile_group_id especifica a ID de grupo de ladrilhos desse grupo de ladrilhos. Quando signalled_tile_group_index_flag for igual a 1, o comprimento do elemento de sintaxe tile_group_idx será signal- led_tile_set_index_length_minus1+1 bits, caso contrário, o comprimento de tile_group_idx será igual a Ceil(Log2(num_tile_groups_in_pic_mi- nus1+ 1)) bits. Em um outro exemplo, tile_group_id especifica a ID de grupo de ladrilhos desse grupo de ladrilhos. O comprimento do elemento de sintaxe tile_group_idx é de signalled_tile_set_index_length_minus1+1 bits. offset_len_minus1 mais 1 especifica o comprimento, em bits, dos elementos de sintaxe entry_point_offset_minus1[i]. O valor de offset_len_minus1 deve estar na faixa de 0 a 31, inclusivos. entry_point_offset_minus1[i] mais 1 especifica o i-ésimo deslocamento de ponto de entrada em bytes, e é representado por offset_len_minus1 mais 1 bit. Os dados de fatia que seguem o cabeça- lho de fatia consistem em rect_tile_group_flag ? Subconjuntos (NumTi- lesInTileGroup [tile_group_id]-1) : num_tiles_in_tile_group_minus1 +1, com valores de índice de subconjunto na faixa de 0 a rect_tile_group_flag ? (NumTilesInTileGroup[tile_group_id] ‒ 1) :num_tiles_in_tile_group_minus1, inclusivos. O primeiro byte dos da- dos de fatia é considerado o byte 0. Quando estiverem presentes, os bytes de prevenção de emulação que aparecem na porção de dados de fatia da unidade de NAL de fatia codificada são contados como parte dos dados de fatia para propósitos de identificação de subconjunto. O subconjunto 0 consiste em bytes 0 a entry_point_offset_minus1[0], in- clusivos, dos dados de segmento de fatia codificados, subconjunto k, com k na faixa de 1 a rect_tile_group_flag ? (NumTilesInTileGroup [tile_group_id] ‒ 2): (num_tiles_in_tile_group_minus1 ‒ 1), inclusivos, consiste em bytes firstByte[k] a lastByte[k], inclusivos, dos dados de fatia codificados com firstByte[k] e lastByte[k] definidos como: lastByte[k] = firstByte[k] + entry_point_offset_minus1[k] O último subconjunto (com índice de subconjunto igual a rect_tile_group_flag ? (NumTilesInSliceNumTilesInTileGr- pup[tile_groupset_idx] ‒ 1) : num_tiles_in_tile_group_minus1) consiste nos bytes restantes dos dados de fatia codificados.
[0182] Com relação às Tabelas 22A a 24, em um exemplo, um pro- cesso de varredura de ladrilhos e raster de CTB pode ser da seguinte forma: A lista ColWidth[i] para i na faixa de 0 a num_tile_co- lumns_minus1, inclusivos, que especifica a largura da i-ésima coluna de ladrilhos em unidades de CTBs, é derivada da seguinte forma: if(uniform_tile_spacing_flag) for(i = 0; i <= num_tile_columns_minus1; i++)
ColWidth[i] = ((i + 1) * PicWidthInCtbsY)/(num_tile_columns_minus1 + 1) ‒ (i * PicWidthInCtbsY)/(num_tile_columns_minus1 + 1) else { ColWidth[num_tile_columns_minus1] = PicWidthInCtbsY for(i = 0; i < num_tile_columns_minus1; i++){ ColWidth[i] = tile_column_width_minus1[i] + 1 ColWidth[num_tile_columns_minus1] ‒= ColWidth[i] } } A lista RowHeight[j] para j na faixa de 0 a num_tile_rows_mi- nus1, inclusivos, que especifica a altura da j-ésima fileira de ladrilhos em unidades de CTBs, é derivada da seguinte forma: if(uniform_tile_spacing_flag) for(j = 0; j <= num_tile_rows_minus1; j++) RowHeight[j] = ((j + 1) * PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) ‒ (j * PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) else { RowHeight[num_tile_rows_minus1] = PicHeightInCtbsY for(j = 0; j < num_tile_rows_minus1; j++){ RowHeight[j] = tile_row_height_minus1[j] + 1 RowHeight[num_tile_rows_minus1] ‒= RowHeight[j] } }
[0183] A lista ColBd[i] para i na faixa de 0 a num_tile_columns_mi- nus1 + 1, inclusivos, que especifica a localização do i-ésimo limite de coluna de ladrilhos em unidades de CTBs, é derivada da seguinte forma: for(ColBd[0] = 0, i = 0; i <= num_tile_columns_minus1; i++) ColBd[i + 1] = ColBd[i] + ColWidth[i]
A lista RowBd[j] para j na faixa de 0 a num_tile_rows_mi- nus1 + 1, inclusivos, que especifica a localização do j-ésimo limite de fileira de ladrilhos em unidades de CTBs, é derivada da seguinte forma: for(RowBd[0] = 0,j = 0; j <= num_tile_rows_minus1; j++) RowBd[j + 1] = RowBd[j] + RowHeight[j] A lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um en- dereço de CTB na varredura raster de CTB de uma imagem em um ende- reço de CTB na varredura de ladrilhos, é derivada da seguinte forma: for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++){ tbX = ctbAddrRs % PicWidthInCtbsY tbY = ctbAddrRs I PicWidthInCtbsY for(i = 0; i <= num_tile_columns_minus1; i++) if(tbX >= ColBd[i]) tileX = i for(j = 0; j <= num_tile_rows_minus1; j++) if(tbY >= RowBd[j]) tileY =j CtbAddrRsToTs[ctbAddrRs] = 0 for(i = 0; i < tileX; i++) CtbAddrRsToTs[ctbAddrRs] += RowHeight[tileY] * ColWidth[i] for(j = 0; j < tileY; j++) CtbAddrRsToTs[ctbAddrRs] += PicWidthInCtbsY * RowHeight[j] CtbAddrRsToTs[ctbAddrRs] += (tbY ‒ RowBd[tileY]) * ColWidth[tileX] + tbX ‒ ColBd[tileX] }
[0184] A lista de CtbAddrRsToTs[ctbAddrRs] para ctbAddrTs na faixa de 0 a PicSizeInCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em um endereço de
CTB na varredura raster de CTB de uma imagem, é derivada da se- guinte forma: for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]] = ctbAddrRs A lista TileId[ctbAddrTs] para CtbAddrTs na faixa de 0 a PicSi- zelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em uma ID de ladrilhos, é derivada da se- guinte forma: for(j = 0, tileIdx = 0;j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++) for(y = RowBd[j]; y < RowBdfj + 1]; y++) for(x = ColBd[i]; x < ColBd[i + 1]; x++){ TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx RemTilesftileIdx] = 1 } A lista NumCtusInTile[tileIdx] para tileIdx na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um ín- dice de ladrilho no número de CTUs no ladrilho, é derivada da seguinte forma: for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++) NumCtusInTile[tileIdx] = ColWidth[i] * RowHeight[j]
[0185] O conjunto TileIdToIdx[tileId] para um conjunto de valores NumTilesInPic tileId que especifica a conversão de uma ID de ladrilho em um índice de ladrilho e a lista FirstCtbAddrTs[tileIdx] para tileIdx na faixa de 0 a NumTilesInPic ‒ 1, inclusivos, que especifica a conversão de uma ID de ladrilho no endereço de CTB na varredura de ladrilhos do primeiro CTB no ladrilho, são derivados da seguinte forma: for(ctbAddrTs = 0, tileIdx = 0, tileStartFlag = 1; ctbAddrTs < PicSize- InCtbsY; ctbAddrTs++){
if(tileStartFlag){ TileIdToIdx[TileId[ctbAddrTs]] = tileIdx FirstCtbAddrTs[tileIdx] = ctbAddrTs tileStartFlag = 0 } tileEndFlag = ctbAddrTs == PicSizeInCtbsY ‒ 1 || TileId[ctbAddrTs + 1] != TileId[ctbAddrTs] if(tileEndFlag){ tileIdx++ tileStartFlag = 1 } } for(l = 0; l < num_tile_groupsIn_pic_minus1; 1++){ for(k = 0, tileIdx= top_left_tile_id[l]; k <= NumTileRowsInTileGroupMi- nus1[1]; k++, tileIdx += (num_tile_columns_minus1 - NumTileColumnsIn- TileGroupMinus1[1])) for(i = 0; i <= numTileColumnsMinus1[l]; i++, tileIdx++){ RemTiles [tileIdx]=0 }
[0186] TopLeftTileId[l]= top_left_tile_id[l]; BottomRightTileId[1]= bottom_right_tile_id[l]; dtlId = TileIdToIdx[bottom_right_tile_id[i]] ‒ TileIdToIdx[top_left_tile_id[i] NumTileRowsInTileGroupMinus1[1] = (dtlId/(num_tile_columns_minus1 + 1)) NumTileColumnsInTileGroupMinus1[1] = (dtlId % (num_tile_columns_mi- nus1 + 1)) NumTilesInSlice[1] = (NumTileRowsInTileGroupMinus1[1]+l)* (NumTileColumnsInTileGroupMinus1[l]+l) }
for(i=0, tlId=(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1), brId = ·1; i<(num_tile_columns_minus1+1)*(num_tile_rows_mi- nus1+1);i++){ if(RemTiles [i]){ if(i<tlId) tlId=i; if(i>brId) brId=i; } TopLeftTileId[num_tile_groups_in_pic_minus1]= tlId; BottomRightTileId[num_tile_groups_in_pic_minus1]= brId; NumTileRowsInTileGroupMinus1[num_tile_groups_in_pic_mi- nus1]=(brId-tlId)/(num_tile_columns_minus1 + 1); NumTileColumnsInTileGroupMinus1[num_tile_groups_in_pic_mi- nus1]=(brId-tlId)%(num_tile_columns_minus1 + 1); NumTilesInTileGroup[num_tile_groups_in_pic_minus1] = (InTileGroup- NumTileRowsInTileGroupMinus1[num_tile_groups_in_pic_mi- nus1]+l)*(NumTileColumnsInTileGroupMi- nus1[num_tile_sets_in_pic_minus1]+1) Os valores de ColumnWidthInLumaSamples[i], que especifi- cam a largura da i-ésima coluna em unidades de amostras de luma, são definidos iguais a ColWidth[i] << CtbLog2SizeY para i na faixa de 0 a num_tile_columns_minus1, inclusivos. Os valores de RowHeightInLumaSamples [j], que especificam a altura da j-ésima fileira em unidades de amostras de luma, são definidos iguais a RowHeight[j] << CtbLog2SizeY para j na faixa de 0 a num_tile_rows_minus1, inclusivos.
[0187] A Tabela 25 ilustra um exemplo de sintaxe para um conjunto de parâmetros de imagem que pode ser usado para sinalizar estruturas de ladrilhos de acordo com técnicas da presente invenção.
[0188] 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_tile_columns_minus1 ue(v) num_tile_rows_minus1 ue(v) uniform_tile_spacing_flag u(1) if(!uniform_tile_spacing_flag){ for(i = 0; i < num_tile_columns_minus1; i++) tile_column_width_minus1[i] ue(v) for(i = 0; i < num_tile_rows_minus1; i++) tile_row_height_minus1[i] ue(v) } single_tile_per_tile_group_flag u(1) if(!single_tile_per_tile_group_flag) rect_tile_group_flag u(1) if(rect_tile_group_flag && !single_tile_per_tile_group_flag){ num_tile_groups_in_pic_minus1 ue(v) for(i = 0; i <= num_tile_groups_in_pic_minus1; i++){ if(i>0) top_left_tile_idx[i] u(v) bottom_right_tile_idx[i] u(v) } } loop_filter_across_tiles_enabled_flag u(1) if(rect_tile_group_flag){ signalled_tile_group_id_flag u(1) if(signalled_tile_group_id_flag){ signalled_tile_group_id_length_minus1 ue(v) for(i = 0; i <= num_tile_groups_in_pic_minus1; i++) tile_group_id[i] u(v) } } rbsp_trailing_bits() } Tabela 25
[0189] Com relação à Tabela 25, os respectivos elementos de sin- taxe podem ser baseados na semântica e nas definições fornecidas acima e na semântica e nas definições a seguir: single_tile_per_tile_group igual a 1 especifica que cada grupo de ladrilhos que refere-se a este PPS inclui um ladrilho. sin- gle_tile_per_tile_group igual a 0 especifica que um grupo de ladrilhos que refere-se a este PPS pode incluir mais de um ladrilho. Quando não estiver presente, infere-se que single_tile_per_tile_group seja igual a 1. rect_tile_group_flag igual a 0 especifica que os ladrilhos dentro de cada grupo de ladrilhos estão em ordem de varredura raster e as informações do grupo de ladrilhos não são sinalizadas em PPS. rect_tile_group_flag igual a 1 especifica que os ladrilhos dentro de cada grupo de ladrilhos cobrem uma região retangular da imagem e as informações do grupo de ladrilhos são sinalizadas no PPS.
Quando single_tile_per_tile_group_flag for igual a 1, infere-se que rect_tile_group_flag seja igual a 1. num_tile_groups_in_pic_minus1 mais 1 especifica o nú- mero de grupos de ladrilhos em cada imagem com referência ao PPS.
O valor de num_tile_groups_in_pic_minus1 deve estar na faixa de 0 a (Num- TilesInPic ‒ 1), inclusivos.
Quando não estiver presente e rect_tile_group_flag for igual a 1, infere-se que o valor de num_tile_groups_in_pic_minus1 seja igual a (NumTilesInPic ‒ 1). top_left_tile_idx[i] especifica o índice de ladrilho do ladrilho situado no canto superior esquerdo do i-ésimo grupo de ladrilhos.
O va- lor de top_left_tile_idx[i] não deve ser igual ao valor de top_left_tile_idx[j] para qualquer i não igual a j.
Quando não estiver presente, e quando rect_tile_group_flag for igual a 1, infere-se que top_left_tile_idx[i] seja igual a i.
O comprimento do elemento de sintaxe top_left_tile_idx[i] é de Ceil(Log2(NumTilesInPic) bits. bottom_right_tile_idx[i] especifica o índice de ladrilho do ladrilho situado no canto inferior direito do i-ésimo grupo de ladrilhos.
Quando single_tile_per_tile_group_flag for igual a 1, infere-se que bot- tom_right_tile_idx[i] seja igual a top_left_tile_idx[i]. O comprimento do elemento de sintaxe bottom_right_tile_idx[i] é de Ceil(Log2(NumTile- sInPic)) bits.
É um requisito de conformação de fluxo de bits que qual- quer ladrilho específico deve apenas estar incluído em um grupo de ladrilhos.
A variável NumTilesInTileGroup[i], que especifica o número de ladrilhos no grupo de ladrilhos, e as variáveis relacionadas são derivadas da seguinte forma: deltaTileIdx[i] = bottom_right_tile_idx[i] ‒ top_left_tile_idx[i]
NumTileRowsInTileGroupMinus1[i] = (deltaTileIdx[i]/(num_tile_co- lumns_minus1 + 1)) NumTileColumnsInTileGroupMinus1[i] = (deltaTileIdx[i] % (num_tile_columns_minus1 + 1)) NumTilesInTileGroup[i] = (NumTileRowsInTileGroupMinus1[i] + 1) * (NumTileColumnsInTileGroupMinus1[i] + 1) signalled_tile_group_id_flag igual a 1 especifica que a ID de grupo de ladrilhos para cada grupo de ladrilhos é sinalizada. signal- led_tile_group_index_flag igual a 0 especifica que IDs de grupo de ladri- lhos não são sinalizadas. Quando rect_tile_group_flag for igual a 0, infere- se que o valor de signalled_tile_group_index_flag seja igual a 0. signalled_tile_group_id_length_minus1 mais 1 especifica o número de bits usados para representar o elemento de sintaxe tile_group_id[i], quando estiver presente, e o elemento de sintaxe tile_group_address nos cabeçalhos de grupo de ladrilhos quando rect_tile_group_flag for igual a 1. O valor de signalled_tile_group_index_length_minus1 deve estar na faixa de 0 a 15, inclusivos. Quando não estiver presente, e quando rect_tile_group_flag for igual a 1, infere-se que o valor de signal- led_tile_group_id_length_minus1 seja igual a Ceil(Log2(num_tile_groups_in_pic_minus1 + 1)) ‒ 1. tile_group_id[i] especifica a ID de grupo de ladrilhos do i-ésimo grupo de ladrilhos. O comprimento do elemento de sintaxe tile_group_id[i] é de signalled_tile_group_id_length_minus1 + 1 bits. Quando não estiver presente, e quando rect_tile_group_flag for igual a 1, infere-se que tile_group_id[i] seja igual a i, para cada i na faixa de 0 a num_tile_groups_m_pic_minus1, inclusivos.
[0190] Com relação à Tabela 25, a Tabela 26 ilustra uma sintaxe exemplificadora de cabeçalhos de um grupo de ladrilhos e a Tabela 27 ilustra uma sintaxe exemplificadora de dados de grupo de ladrilhos.
[0191]
tile_group_header(){ Descritor tile_group_pic_parameter_set_id ue(v) if(rect_tile_group_flag | | NumTilesInPic > 1) tile_group_address u(v) if(!rect_tile_group_flag && !single_tile_per_tile_group_flag) num_tiles_in_tile_group_minus1 ue(v) tile_group_type ue(v) if (tile_group_type != I){ log2_diff_ctu_max_bt_size ue(v) if(sps_sbtmvp_enabled_flag){ sbtmvp_size_override_flag u(1) if(sbtmvp_size_override_flag) log2_sbtmvp_active_size_minus2 u(3) } if(sps_temporal_mvp_enabled_flag) tile_group_temporal_mvp_enabled_flag u(1) if(tile_group_type = = B) mvd_l1_zero_flag u(1) if(tile_group_temporal_mvp_enabled_flag){ if(tile_group_type = = B) collocated_from_10_flag u(1) } six_minus_max_num_merge_cand ue(v) } dep_quant_enabled_flag u(1) if(!dep_quant_enabled_flag) sign_data_hiding_enabled_flag u(1) NumTilesInCurrTileGroup = rect_tile_group_flag ? nTileGroup[tile_group_address] : (num_tiles_in_tile_group_minus1 + 1) if(NumTilesInCurrTileGroup > 1){ offset_len_minus1 ue(v) for(i = 0; i < NumTilesInCurrTileGroup ‒ 1; i++) entry_p oint_offset_minus1[i] u(v) } byte_alignment() } Tabela 26 tile_group_data(){ Descritor for(i = 0; i < NumTilesInCurrTileGroup; i++){ ctbAddrInTs = FirstCtbAddrTs[tileIdx] for(j=0; j <NumCtusInTile[TgTileIdx[i]]; j++, ctbAddrInTs++){ CtbAddrInRs = CtbAddrTsToRs[ctbAddrInTs] coding_tree_unit() } end_of_tile_one_bit /*igual a 1 */ ae(v) if(i < NumTilesInCurrTileGroup ‒ 1) byte_alignment() } } Tabela 27
[0192] Com relação à Tabela 26 e à Tabela 27, os respectivos ele- mentos de sintaxe podem ser baseados na semântica e nas definições fornecidas acima e na semântica e nas definições a seguir:
tile_group_address especifica o endereço de ladrilho do pri- meiro ladrilho no grupo de ladrilhos. Se rect_tile_group_flag for igual a 0, é aplicável o seguinte: ‒ O endereço de ladrilho é a ID de ladrilho como especi- ficada pela Equação 6-7. ‒ O comprimento de tile_group_address é de Ceil(Log2 (NumTilesInPic)) bits. ‒ O valor de tile_group_address deve estar na faixa de 0 a NumTilesInPic ‒ 1, inclusivos. Caso contrário (rect_tile_group_flag for igual a 1), é aplicável o seguinte: ‒ O endereço de ladrilho é a ID de grupo de ladrilhos do grupo de ladrilhos. ‒ O comprimento de tile_group_address é de sig- nalled_tile_group_index_length_minus1 + 1 bits. ‒ Se signalled_tile_group_id_flag for igual a 0, o valor de tile_group_address deve estar na faixa de 0 a num_tile_groups_in_pic_minus1, inclusivos. Caso contrário, o valor de tile_group_address deve estar na faixa de 0 a 2(signalled_tile_group_index_len- gth_minus1 + 1) ‒ 1, inclusivos.
[0193] O valor de tile_group_address não deve ser igual ao valor de tile_group_address de qualquer outra unidade de NAL de grupo de ladri- lhos codificados da mesma imagem codificada. Quando não estiver presente, infere-se que o valor de tile_group_address seja igual a 0. A variável NumTilesInTileGroup, que especifica o número de ladrilhos no grupo de ladrilhos, e TgTileIdx[i], que especifica o índice de ladrilho do i-ésimo ladrilho no grupo de ladrilhos, são derivados da seguinte forma: if(rect_tile_group_flag){ tileGroupIdx = 0 while(tile_group_address != tile_group_id[tileGroupIdx]) tileGroupIdx++ NumTilesInCurrTileGroup = NumTilesInTileGroup[tileGroupIdx] tileIdx = top_left_tile_idx[tileGroupIdx] for(j = 0, tIdx = 0; j < (NumTileRowsInTileGroupMinus1[tileGrou- pIdx] + 1); j++, tileIdx += num_tile_columns_minus1 + 1){ for(i = 0, CurrTileIdx = tileIdx; i < (NumTileColumnsInTileGroupMi- nus1[tileGroupIdx] + 1); i++, currTileIdx++, tIdx++){ TgTileIdx[tIdx] = CurrTileIdx }} else{ NumTilesInCurrTileGroup = num_tiles_in_tile_group_minus1 + 1 TgTileIdx[0] = tile_group_address for(i = 1; i < NumTilesInCurrTileGroup; i++) TgTileIdx[i] = TgTileIdx[i ‒ 1] + 1 } num_tiles_in_tile_group_minus1 mais 1 especifica o nú- mero de ladrilhos no grupo de ladrilhos.
O valor de num_ti- les_in_tile_group_minus1 deve estar na faixa de 0 a NumTilesInPic ‒ 1, inclusivos.
Quando não estiver presente, infere-se que o valor de num_tiles_in_tile_group_minus1 seja igual a 0 se sin- gle_tile_per_tile_group_flag for igual a 1. Quando não estiver presente, infere-se que o valor de num_tiles_in_tile_group_minus1 seja igual a NumTilesInTileGroup [tile_group_address] ‒ 1 quando rect_tile_group_flag for igual a 1 e single_tile_per_tile_group_flag for igual a 0. Em outro exemplo, as regras de inferência para num_ti- les_in_tile_group_minus1 podem ser especificadas da seguinte forma: Quando não estiver presente, infere-se que num_ti- les_in_tile_group_minus1 tenha o seguinte valor: • Se single_tile_per_tile_group_flag for igual a 1, infere-se que num_tiles_in tile_group_minus1 seja igual a 0. • Se single_tile_per_tile_group_flag for igual a 0 e rect_tile_group_flag for igual a 1, infere-se que num_tiles_in_tile_group_minus1 seja igual a NumTilesInTile- Group[tile_group_address] ‒ 1. offset_len_minus1 mais 1 especifica o comprimento, em bits, dos elementos de sintaxe entry_point_offset_minus1[i]. O valor de offset_len_minus1 deve estar na faixa de 0 a 31, inclusivos. entry_point_offset_minus1[i] mais 1 especifica o i-ésimo deslocamento de ponto de entrada em bytes, e é representado por offset_len_minus1 mais 1 bit. Os dados de fatia que seguem o cabeçalho de fatia consistem em subconjuntos NumTilesInCurrTileGroup, com valo- res de índice de subconjunto na faixa de 0 a NumTilesInCurrTileGroup ‒ 1, inclusivos. O primeiro byte dos dados de fatia é considerado o byte 0. Quando estiverem presentes, os bytes de prevenção de emulação que aparecem na porção de dados de fatia da unidade de NAL de fatia codifi- cada são contados como parte dos dados de fatia para propósitos de iden- tificação de subconjunto. O subconjunto 0 consiste em bytes de 0 a en- try_point_offset_minus1[0], inclusivos, dos dados de segmento de fatia co- dificados, subconjunto k, com k na faixa de 1 a NumTilesInCurrTileGroup ‒ 2, inclusivos, consiste em bytes firstByte[k] a lastByte[k], inclusivos, dos dados de fatia codificados com firstByte[k] e lastByte[k] definidos como: lastByte[k] = firstByte[k] + entry_point_offset_minus1[k] O último subconjunto (com índice de subconjunto igual a Num- TilesInCurrTileGroup ‒ 1 consiste nos bytes restantes dos dados de fatia codificados.
[0194] Com relação às Tabelas 25 a 27, em um exemplo, um pro- cesso de varredura de ladrilhos e raster de CTB pode ser da seguinte forma:
A lista ColWidth[i] para i na faixa de 0 a num_tile_co- lumns_minus1, inclusivos, que especifica a largura da i-ésima coluna de ladrilhos em unidades de CTBs, é derivada da seguinte forma: if(uniform_tile_spacing_flag) for(i = 0; i <= num_tile_columns_minus1; i++) ColWidth[i] = ((i + 1) * PicWidthInCtbsY)/(num_tile_columns_mi- nus1 + 1) ‒ (i * PicWidthInCtbsY)/(num_tile_columns_minus1 + 1) else{ ColWidth[num_tile_columns_minus1] = PicWidthInCtbsY for(i = 0; i < num_tile_columns_minus1; i++){ ColWidth[i] = tile_column_width_minus1[i] + 1 ColWidth[num_tile_columns_minus1] ‒= ColWidth[i] } } A lista RowHeight[j] para j na faixa de 0 a num_tile_rows_mi- nus1, inclusivos, que especifica a altura da j-ésima fileira de ladrilhos em unidades de CTBs, é derivada da seguinte forma: if(uniform_tile_spacing_flag) for (j = 0; j <= num_tile_ro ws_minus1; j ++) RowHeight[j] = ((j + 1) * PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) ‒ (j * PicHeightInCtbsY)/(num_tile_rows_minus1 + 1) else{ RowHeight[num_tile_rows_minus1] = PicHeightInCtbsY for(j = 0; j < num_tile_rows_minus1; j++){ RowHeight[j] = tile_row_height_minus1[j] + 1 RowHeight[num_tile_rows_minus1] ‒= RowHeight[j] } } A lista ColBd[i] para i na faixa de 0 a num_tile_columns_mi- nus1 + 1, inclusivos, que especifica a localização do i-ésimo limite de coluna de ladrilhos em unidades de CTBs, é derivada da seguinte forma: for(ColBd[0] = 0, i = 0; i <= num_tile_columns_minus1; i++) ColBd[i + 1] = ColBd[i] + ColWidth[i] A lista RowBd[j] para j na faixa de 0 a num_tile_rows_mi- nus1 + 1, inclusivos, que especifica a localização do j-ésimo limite de fileira de ladrilhos em unidades de CTBs, é derivada da seguinte forma: for(RowBd[0]= 0,j = 0;j <= num_tile_rows_minus1; j++) RowBd[j + 1] = RowBd[j] + RowHeight[j]
[0195] A lista CtbAddrRsToTs[ctbAddrRs] para ctbAddrRs na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura raster de CTB de uma imagem em um endereço de CTB na varredura de ladrilhos, é derivada da seguinte forma: for(ctbAddrRs = 0; CtbAddrRs < PicSizeInCtbsY; ctbAddrRs + +){ tbX = ctbAddrRs % PicWidthInCtbsY tbY = ctbAddrRs/PicWidthInCtbsY for(i = 0; i <= num_tile_columns_minus1; i++) if(tbX >= ColBd[i]) tileX = i for(j = 0; j <= num_tile_rows_minus1; j++) if(tbY >= RowBd[j]) tileY = j CtbAddrRsToTs[ctbAddrRs] = 0 for(i = 0; i < tileX; i++) CtbAddrRsToTs[ctbAddrRs] += RowHeight[tileY] * ColWidth[i] for(j = 0; j < tileY; j++) CtbAddrRsToTs[ctbAddrRs] += PicWidthInCtbsY * RowHeight[j] CtbAddrRsToTs[ctbAddrRs] += (tbY ‒ RowBd[tileY]) * ColWidth[tileX] + tbX ‒ ColBd[tileX] }
A lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSizeInCtbsY ‒ 1, inclusivos, que especifica a conversão de um en- dereço de CTB na varredura de ladrilhos em um endereço de CTB na var- redura raster de CTB de uma imagem, é derivada da seguinte forma: for(ctbAddrRs = 0; ctbAddrRs < PicSizeInCtbsY; ctbAddrRs++) CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]] = ctbAddrRs A lista TileId[ctbAddrTs] para ctbAddrTs na faixa de 0 a PicSi- zelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um endereço de CTB na varredura de ladrilhos em uma ID de ladrilhos, é derivada da se- guinte forma: for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++) for(y = RowBd[j]; y < RowBd[j + 1]; y++) for(x = ColBd[i]; x < ColBd[i + 1]; x++){ TileId[CtbAddrRsToTs[y * PicWidthInCtbsY+ x]] = tileIdx }
[0196] A lista NumCtusInTile[tileIdx] para tileIdx na faixa de 0 a PicSizelnCtbsY ‒ 1, inclusivos, que especifica a conversão de um índice de ladrilho no número de CTUs no ladrilho, é derivada da seguinte forma: for(j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++) for(i = 0; i <= num_tile_columns_minus1; i++, tileIdx++) NumCtusInTile[tileIdx] = ColWidth[i] * RowHeight[j] O conjunto TileIdToIdx[tileId] para um conjunto de valores NumTilesInPic tileId que especifica a conversão de uma ID de ladrilho em um índice de ladrilho e a lista FirstCtbAddrTs[tileIdx] para tileIdx na faixa de 0 a NumTilesInPic ‒ 1, inclusivos, que especifica a conversão de uma ID de ladrilho no endereço de CTB na varredura de ladrilhos do primeiro CTB no ladrilho, são derivados da seguinte forma:
for(ctbAddrTs = 0, tileIdx = 0, tileStartFlag = 1; ctbAddrTs < PicSize- InCtbsY; ctbAddrTs++){ if(tileStartFlag){ TileIdToIdx[TileId[ctbAddrTs]] = tileIdx FirstCtbAddrTs[tileIdx] = ctbAddrTs tileStartFlag = 0 tileEndFlag = ctbAddrTs == PicSizeInCtbsY‒1 || TileId[ctbAddrTs + 1] != TileId[ctbAddrTs] if(tileEndFlag){ tileIdx++ tileStartFlag = 1 } } Os valores de ColumnWidthInLumaSamples[i], que especifi- cam a largura da i-ésima coluna em unidades de amostras de luma, são definidos iguais a ColWidth[i] << CtbLog2SizeY para i na faixa de 0 a num_tile_columns_minus1, inclusivos. Os valores de RowHeightInLumaSamples[j], que especificam a altura da j-ésima fileira em unidades de amostras de luma, são definidos como sendo iguais a RowHeight[j] << CtbLog2SizeY para j na faixa de 0 a num_tile_rows_minus1, inclusivos.
[0197] Dessa maneira, o dispositivo de origem 102 representa um exemplo de um dispositivo configurado para sinalizar um sinalizador que indica que conjuntos de ladrilhos estão habilitados em um fluxo de bits, sinalizar um elemento de sintaxe que indica um número de colunas de conjunto de ladrilhos que particionam uma imagem e sinalizar um ele- mento de sintaxe que indica um número de fileiras de conjunto de ladri- lhos que particionam uma imagem.
[0198] Novamente com referência à Figura 1, a interface 108 pode incluir qualquer dispositivo configurado para receber dados gerados pelo encapsulador de dados 107 e transmitir e/ou armazenar os dados para/em um meio de comunicação. A interface 108 pode incluir um cartão de interface de rede, como um cartão Ethernet, e pode incluir um trans- ceptor óptico, um transceptor de radiofrequência ou qualquer outro tipo de dispositivo que possa enviar e/ou receber informações. Além disso, a interface 108 pode incluir uma interface de sistema de computador que pode habilitar um arquivo a ser armazenado em um dispositivo de arma- zenamento. Por exemplo, a interface 108 pode incluir um conjunto de chips que suporta protocolos de barramento de interconexão de compo- nentes periféricos (PCI, ou Peripheral Component Interconnect) e de in- terconexão expressa de componentes periféricos (PCIe, ou Peripheral Component Interconnect Express), protocolos de barramento proprietá- rio, protocolos de barramento serial universal (USB, ou Universal Serial Bus), I2C ou qualquer outra estrutura lógica e física que possa ser usada para interconectar dispositivos pares.
[0199] Novamente com referência à Figura 1, o dispositivo de destino 120 inclui a interface 122, o desencapsulador de dados 123, o decodifi- cador de vídeo 124 e a tela 126. A interface 122 pode incluir qualquer dispositivo configurado para receber dados de um meio de comunicação. A interface 122 pode incluir um cartão de interface de rede, como um cartão Ethernet, e pode incluir um transceptor óptico, um transceptor de radiofrequência ou qualquer outro tipo de dispositivo que possa receber e/ou enviar informações. Além disso, a interface 122 pode incluir uma interface de sistema de computador que possibilita que um fluxo de bits de vídeo compatível seja recuperado a partir de um dispositivo de arma- zenamento. Por exemplo, a interface 122 pode incluir um conjunto de chips que suporta protocolos de barramento de PCI e de PCIe, protocolos de barramento proprietário, protocolos de USB, I2C ou qualquer outra es- trutura lógica e física que possa ser usada para interconectar dispositivos pares. O desencapsulador de dados 123 pode ser configurado para re- ceber e analisar sintaticamente qualquer um dentre os conjuntos de pa- râmetros exemplificadores descritos na presente invenção.
[0200] O decodificador de vídeo 124 pode incluir qualquer dispositivo configurado para receber um fluxo de bits (por exemplo, uma extração de subfluxo de bits de MCTS) e/ou variações aceitáveis do mesmo e repro- duzir dados de vídeo a partir do mesmo. A tela 126 pode incluir qualquer dispositivo configurado para mostrar dados de vídeo. A tela 126 pode compreender um dentre uma variedade de dispositivos de exibição como uma tela de cristal líquido (LCD), uma tela de plasma, uma tela de diodo orgânico emissor de luz (OLED) ou um outro tipo de tela. A tela 126 pode incluir uma tela de alta definição ou uma tela de ultra-alta definição. Deve- se notar que, embora no exemplo ilustrado na Figura 1 o decodificador de vídeo 124 seja descrito como emitindo dados para a tela 126, o deco- dificador de vídeo 124 pode ser configurado para fornecer dados de vídeo para vários tipos de dispositivos e/ou subcomponentes dos mesmos. Por exemplo, o decodificador de vídeo 124 pode ser configurado para emitir dados de vídeo para qualquer meio de comunicação, conforme descrito na presente invenção.
[0201] A Figura 9 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que pode ser configurado para decodificar dados de vídeo de acordo com uma ou mais técnicas desta divulgação. Em um exemplo, o decodificador de vídeo 600 pode ser configurado para decodificar dados de transformada e reconstruir dados residuais a partir de coeficientes de transformada com base em dados de transformada de- codificados. O decodificador de vídeo 600 pode ser configurado para exe- cutar decodificação de intraprevisão e decodificação de interprevisão e, como tal, pode ser chamado de decodificador híbrido. No exemplo ilus- trado na Figura 9, o decodificador de vídeo 600 inclui uma unidade de de-
codificação por entropia 602, uma unidade de processamento de coefici- ente de transformada e uma unidade de quantização inversa 604, uma unidade de processamento de intraprevisão 606, uma unidade de proces- samento de interprevisão 608, um somador 610, uma unidade de pós-fil- tragem 612 e um armazenamento temporário de referência 614. O deco- dificador de vídeo 600 pode ser configurado para decodificar dados de ví- deo de maneira consistente com um sistema de codificação de vídeo. Deve-se notar que, embora o decodificador de vídeo exemplificador 600 seja ilustrado como tendo blocos funcionais distintos, tal ilustração é para propósitos descritivos e não limita o decodificador de vídeo 600 e/ou sub- componentes do mesmo a uma arquitetura de software ou hardware es- pecífica. As funções do decodificador de vídeo 600 podem ser executadas com o uso de qualquer combinação de implementações de hardware, fir- mware e/ou software.
[0202] Conforme ilustrado na Figura 9, a unidade de decodificação por entropia 602 recebe um fluxo de bits codificado por entropia. A uni- dade de decodificação por entropia 602 pode ser configurada para de- codificar elementos de sintaxe e coeficientes quantizados a partir do fluxo de bits de acordo com um processo recíproco para um processo de codificação por entropia. A unidade de decodificação por entropia 602 pode ser configurada para executar decodificação por entropia de acordo com qualquer uma dentre as técnicas descritas acima. A unidade de decodificação por entropia 602 pode determinar valores para ele- mentos de sintaxe em um fluxo de bits codificado de maneira consis- tente com um padrão de codificação de vídeo. Conforme ilustrado na Figura 9, a unidade de decodificação por entropia 602 pode determinar um parâmetro de quantização, valores de coeficientes quantizados, da- dos de transformada e dados de previsão de um fluxo de bits. No exem- plo, ilustrado na Figura 9, a unidade de processamento de coeficiente de transformada e unidade de quantização inversa 604 recebe um pa- râmetro de quantização, valores de coeficientes quantizados, dados de transformada e dados de previsão da unidade de decodificação por en- tropia 602 e emite dados residuais reconstruídos.
[0203] Novamente com referência à Figura 9, dados residuais re- construídos podem ser fornecidos ao somador 610. O somador 610 pode adicionar dados residuais reconstruídos a um bloco de vídeo preditivo e gerar dados de vídeo reconstruídos. Um bloco de vídeo preditivo pode ser determinado de acordo com uma técnica de vídeo preditivo (isto é, intraprevisão e interprevisão de quadro). A unidade de processamento de intraprevisão 606 pode ser configurada para receber elementos de sin- taxe de intraprevisão e recuperar um bloco de vídeo preditivo do armaze- namento temporário de referência 614. O armazenamento temporário de referência 614 pode incluir um dispositivo de memória configurado para armazenar um ou mais quadros de dados de vídeo. Elementos de sintaxe de intraprevisão podem identificar um modo de intraprevisão, como os modos de intraprevisão descritos acima. A unidade de processamento de interprevisão 608 pode receber elementos de sintaxe de interprevisão e gerar vetores de movimento para identificar um bloco de previsão em um ou mais quadros de referência armazenados no armazenamento tempo- rário de referência 814. A unidade de processamento de interprevisão 608 pode produzir blocos compensados de movimento, que executam possivelmente interpolação com base em filtros de interpolação. Identifi- cadores para filtros de interpolação para serem usados para estimativa de movimento com precisão de subpixel podem estar incluídos nos ele- mentos de sintaxe. A unidade de processamento de interprevisão 808 pode usar filtros de interpolação para calcular valores interpolados para pixels de subnúmero inteiro de um bloco de referência. A unidade de pós- filtragem 612 pode ser configurada para executar filtragem em dados de vídeo reconstruídos. Por exemplo, a unidade de pós-filtragem 612 pode ser configurada para executar desbloqueio e/ou filtragem de desloca- mento adaptativo de amostra (SAO, ou Sample Adaptive Offset), por exemplo, com base em parâmetros especificados em um fluxo de bits. Além disso, deve-se notar que, em alguns exemplos, a unidade de pós- filtragem 612 pode ser configurada para executar filtragem discricionária proprietária (por exemplo aprimoramentos visuais, como redução de ru- ído de mosquito). Conforme ilustrado na Figura 9, um bloco de vídeo re- construído pode ser emitido pelo decodificador de vídeo 600. Dessa ma- neira, o decodificador de vídeo 600 pode ser configurado para analisar sintaticamente um sinalizador que indica que conjuntos de ladrilhos estão habilitados em um fluxo de bits, analisar sintaticamente um elemento de sintaxe que indica um número de colunas de conjunto de ladrilhos que particionam uma imagem, analisar sintaticamente um elemento de sin- taxe que indica um número de fileiras de conjunto de ladrilhos que parti- cionam uma imagem e gerar dados de vídeo com base em valores dos elementos de sintaxe sintaticamente analisados.
[0204] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combi- nação dos mesmos. Se implementadas em software, as funções po- dem ser armazenadas em, ou transmitidas como, uma ou mais instru- ções ou código em uma mídia legível por computador e executadas por uma unidade de processamento baseada em hardware. A mídia legível por computador pode incluir mídia de armazenamento legível por computador, que corresponde a uma mídia tangível, como mídia de armazenamento de dados, ou meios de comunicação que incluam qualquer meio que facilite a transferência de um programa de compu- tador de um local para outro, por exemplo, de acordo com um protocolo de comunicação. Dessa maneira, a mídia legível por computador pode corresponder geralmente a (1) mídia de armazenamento tangível legí-
vel por computador que é não transitória ou (2) um meio de comunica- ção como um sinal ou uma onda portadora. A mídia de armazenamento de dados pode ser qualquer mídia disponível que possa ser acessada por um ou mais computadores ou um ou mais processadores para re- cuperar instruções, código e/ou estruturas de dados para implementa- ção das técnicas descritas nesta divulgação. Um produto de programa de computador pode incluir uma mídia legível por computador.
[0205] A título de exemplo, e sem limitação, essa mídia de armazena- mento legível por computador pode compreender dispositivos de armaze- namento RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco óptico, armazenamento de disco magnético ou outros dispositivos de armazenamento magnético, memória flash ou qualquer outra mídia que pode ser usada para armazenar o código de programa desejado na forma de instruções ou estruturas de dados e que pode ser acessada por um computador. Além disso, qualquer conexão é adequadamente denomi- nada mídia legível por computador. Por exemplo, se instruções forem transmitidas a partir de um site da Web, servidor ou outra fonte remota com o uso de um cabo coaxial, cabo de fibra óptica, par trançado, linha digital de assinantes (DSL, ou digital subscriber line), ou tecnologias sem fio como infravermelho, rádio e micro-ondas, então o cabo coaxial, o cabo de fibra óptica, o par trançado, a DSL ou tecnologias sem fio como infra- vermelho, rádio e micro-ondas estão incluídos na definição de meio. Deve ser entendido, no entanto, que a mídia de armazenamento legível por com- putador e a mídia de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outras mídias transitórias, mas, em vez disso, são direcionadas a mídia de armazenamento tangível não transitória. Os termos "disco magnético" e "disco óptico", como usados na presente in- venção, incluem disco compacto ("CD" - Compact Disc), disco de laser, disco óptico, disco versátil digital ("DVD" - Digital Versatile Disc), disquete e disco Blu-ray, sendo que discos magnéticos normalmente reproduzem dados magneticamente, enquanto discos ópticos reproduzem dados opti- camente com lasers. Combinações do exposto acima devem ser incluídas também no escopo de mídias legíveis por computador.
[0206] As instruções podem ser executadas por um ou mais proces- sadores, como um ou mais processadores digitais de sinal (DSPs), mi- croprocessadores de propósito geral, circuitos integrados de aplicação específica (ASICs), matrizes de portas programáveis em campo (FPGAs) ou outros circuitos lógicos distintos ou integrados equivalentes. Consequentemente, o termo "processador", como usado na presente invenção, pode se referir a qualquer dentre a estrutura anteriormente mencionada ou qualquer outra estrutura adequada para implementação das técnicas descritas na presente invenção. Além disso, em alguns as- pectos, a funcionalidade descrita na presente invenção pode ser forne- cida em módulos de software e/ou hardware dedicado configurados para codificar e decodificar, ou incorporados em um codec combinado. Além disso, as técnicas poderiam ser totalmente implementadas em um ou mais circuitos ou elementos lógicos.
[0207] As técnicas desta divulgação podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um mo- nofone sem fio, um circuito integrado (IC, ou integrated circuit) ou um conjunto de ICs (por exemplo um conjunto de chips). Vários compo- nentes, módulos ou unidades são descritos nesta divulgação para en- fatizar aspectos funcionais de dispositivos configurados para executar as técnicas divulgadas, mas não necessariamente precisam de reali- zação por unidades de hardware diferentes. Em vez disso, conforme descrito acima, várias unidades podem ser combinadas em uma uni- dade de hardware de codec ou fornecidas por uma coleção de unida- des de hardware interoperacionais, incluindo um ou mais processado- res conforme descrito acima, em conjunto com software e/ou firmware adequado.
[0208] Além disso, cada bloco funcional ou vários recursos do dis- positivo de estação-base e do dispositivo terminal usados em cada uma das modalidades anteriormente mencionadas podem ser implementa- dos ou executados por um circuito, que é tipicamente um circuito inte- grado ou uma pluralidade de circuitos integrados. O conjunto de circui- tos projetado para executar as funções descritas no presente relatório descritivo pode incluir um processador de propósito geral, um processa- dor digital de sinais (DSP), um circuito integrado de aplicação específica (ASIC) ou de aplicação geral, uma matriz de portas programável em campo (FPGA), ou outros dispositivos lógicos programáveis, portas dis- tintas ou lógica de transistor, ou um componente de hardware distinto, ou uma combinação desses itens. O processador de propósito geral pode ser um microprocessador ou, alternativamente, pode ser um pro- cessador convencional, um controlador, um microcontrolador ou uma máquina de estado. O processador de propósito geral ou cada circuito descrito acima pode ser configurado por um circuito digital ou pode ser configurado por um circuito analógico. Além disso, quando surgir uma tecnologia de fabricação de um circuito integrado que substitua os atu- ais circuitos integrados devido aos avanços em uma tecnologia de se- micondutor, também poderá ser usado o circuito integrado resultante dessa tecnologia.
[0209] Vários exemplos foram descritos. Esses e outros exemplos estão dentro do escopo das concretizações a seguir.

Claims (20)

REIVINDICAÇÕES
1. Método de decodificar dados de vídeo, caracterizado pelo fato de que compreende as etapas de: decodificar uma primeira sintaxe de sinalizador em um con- junto de parâmetro de imagem, em que a primeira sintaxe de sinalizador especifica se ladrilhos dentro de cada uma dentre pelo menos uma fatia estão em ordem de varredura raster ou se os ladrilhos dentro de cada uma dentre a pelo menos uma fatia cobrem uma região retangular de uma imagem; determinar, com base em um valor da primeira sintaxe de sinalizador, se uma sintaxe de endereço de fatia está presente em um cabeçalho de fatia; e decodificar a sintaxe de endereço de fatia quando a sintaxe de endereço de fatia estiver presente no cabeçalho de fatia.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a sintaxe de endereço de fatia indica um índice de ladrilho de varredura raster de um ladrilho na pelo menos uma fatia ou um índice de fatia de uma fatia na pelo menos uma fatia.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que a sintaxe de endereço de fatia é o índice de ladrilho de varredura raster quando a primeira sintaxe de sinalizador é igual a zero.
4. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que a sintaxe de endereço de fatia é o índice de fatia quando a primeira sintaxe de sinalizador é igual a um.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que os ladrilhos dentro de cada uma dentre pelo menos uma fatia estão em ordem de varredura de raster quando a primeira sintaxe de sinalizador é igual a zero.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende derivar um comprimento da sin- taxe de endereço de fatia com base em um número de ladrilhos de uma imagem correspondendo ao cabeçalho de fatia quando a primeira sintaxe de sinalizador é igual a zero.
7. Método, de acordo com a reivindicação 6, caracterizado pelo fato de que ainda compreende derivar um valor da sintaxe de endereço de fatia em uma faixa de zero a um valor máximo ao subtrair um do número dos ladrilhos da imagem quando a primeira sintaxe de sinalizador é igual a zero.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende derivar uma variável especifi- cando um número de regiões na pelo menos uma fatia ao usar a sin- taxe de endereço de fatia.
9. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que ainda compreende decodificar uma unidade de ár- vore de codificação ao usar a variável.
10. Método, de acordo com a reivindicação 1, caracteri- zado pelo fato de que a sintaxe de endereço de fatia está presente no cabeçalho de fatia quando o valor da primeira sintaxe de sinalizador é igual a um.
11. Método, de acordo com a reivindicação 1, caracteri- zado pelo fato de que a sintaxe de endereço de fatia está presente no cabeçalho de fatia quando o valor da primeira sintaxe de sinalizador é igual a zero e um número de ladrilhos de uma imagem correspon- dendo ao cabeçalho de fatia é maior do que um.
12. Método, de acordo com a reivindicação 1, caracteri- zado pelo fato de que ainda compreende: determinar, com base no valor da primeira sintaxe de sinali- zador, se uma sintaxe de número está presente no conjunto de parâme- tro de imagem; e decodificar a sintaxe de número quando a sintaxe de número estiver presente no conjunto de parâmetro de imagem.
13. Método, de acordo com a reivindicação 12, caracteri- zado pelo fato de que ainda compreende: decodificar uma segunda sintaxe de sinalizador no conjunto de parâmetro de imagem, em que a segunda sintaxe de sinalizador es- pecifica que cada uma dentre a pelo menos uma fatia inclui somente uma região retangular ou cada uma dentre a pelo menos uma fatia inclui duas ou mais regiões retangulares; e determinar que a sintaxe de número está presente no con- junto de parâmetro de imagem quando o valor da primeira sintaxe de sinalizador é igual a um e um valor da segunda sintaxe de sinalizador é igual a zero.
14. Método, de acordo com a reivindicação 12, caracteri- zado pelo fato de que um valor de sintaxe de número mais um espe- cifica um número de fatias em cada uma dentre pelo menos uma ima- gem correspondendo ao conjunto de parâmetro de imagem.
15. Método de codificar dados de vídeo, caracterizado pelo fato de que compreende as etapas de: codificar uma primeira sintaxe de sinalizador em um conjunto de parâmetro de imagem, em que a primeira sintaxe de sinalizador es- pecifica se ladrilhos dentro de cada uma dentre pelo menos uma fatia estão em ordem de varredura raster ou se os ladrilhos dentro de cada uma dentre a pelo menos uma fatia cobrem uma região retangular de uma imagem; e determinar, com base em um valor da primeira sintaxe de sinalizador, se deve codificar uma sintaxe de endereço de fatia em um cabeçalho de fatia.
16. Dispositivo para decodificar dados de vídeo, caracteri- zado pelo fato de que compreende:
ao menos um processador; e um dispositivo de armazenamento acoplado ao pelo menos um processador e armazenando um programa que, quando executado pelo ao menos um processador, leva o ao menos um processador a: decodificar uma primeira sintaxe de sinalizador em um con- junto de parâmetro de imagem, em que a primeira sintaxe de sinalizador especifica se ladrilhos dentro de cada uma dentre pelo menos uma fatia estão em ordem de varredura raster ou se os ladrilhos dentro de cada uma dentre a pelo menos uma fatia cobrem uma região retangular de uma imagem; determinar, com base em um valor da primeira sintaxe de sinalizador, se uma sintaxe de endereço de fatia está presente em um cabeçalho de fatia; e decodificar a sintaxe de endereço de fatia quando a sintaxe de endereço de fatia estiver presente no cabeçalho de fatia.
17. Dispositivo, de acordo com a reivindicação 16, caracte- rizado pelo fato de que a sintaxe de endereço de fatia indica um ín- dice de ladrilho de varredura raster de um ladrilho na pelo menos uma fatia ou um índice de fatia de uma fatia na pelo menos uma fatia.
18. Dispositivo, de acordo com a reivindicação 16, caracte- rizado pelo fato de que o programa, quando executado pelo ao me- nos um processador, ainda leva o ao menos um processador a derivar um comprimento da sintaxe de endereço de fatia com base em um número de ladrilhos de uma imagem correspondendo ao cabeçalho de fatia quando a primeira sintaxe de sinalizador é igual a zero.
19. Dispositivo, de acordo com a reivindicação 18, caracte- rizado pelo fato de que o programa, quando executado pelo ao me- nos um processador, ainda leva o ao menos um processador a derivar um valor da sintaxe de endereço de fatia em uma faixa de zero a um valor máximo ao subtrair um do número dos ladrilhos quando a primeira sintaxe de sinalizador é igual a zero.
20. Dispositivo, de acordo com a reivindicação 16, caracte- rizado pelo fato de que a sintaxe de endereço de fatia está presente no cabeçalho de fatia quando o valor da primeira sintaxe de sinalizador é igual a zero e um número de ladrilhos de uma imagem correspon- dendo ao cabeçalho de fatia é maior do que um.
BR112021010326-0A 2018-11-30 2019-11-26 Método de decodificar dados de vídeo, método de codificar dados de vídeo e dispositivo para decodificar dados de vídeo BR112021010326A2 (pt)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201862774050P 2018-11-30 2018-11-30
US62/774,050 2018-11-30
US201862784296P 2018-12-21 2018-12-21
US62/784,296 2018-12-21
US201962791227P 2019-01-11 2019-01-11
US62/791,227 2019-01-11
US201962806502P 2019-02-15 2019-02-15
US62/806,502 2019-02-15
PCT/JP2019/046062 WO2020111023A1 (en) 2018-11-30 2019-11-26 Systems and methods for signaling tile structures for pictures of coded video

Publications (1)

Publication Number Publication Date
BR112021010326A2 true BR112021010326A2 (pt) 2021-08-24

Family

ID=70852305

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021010326-0A BR112021010326A2 (pt) 2018-11-30 2019-11-26 Método de decodificar dados de vídeo, método de codificar dados de vídeo e dispositivo para decodificar dados de vídeo

Country Status (9)

Country Link
US (1) US20230027997A1 (pt)
EP (1) EP3888372A4 (pt)
JP (2) JP7307168B2 (pt)
KR (1) KR102572140B1 (pt)
CN (2) CN118118693A (pt)
BR (1) BR112021010326A2 (pt)
MX (1) MX2021006218A (pt)
PH (1) PH12021551147A1 (pt)
WO (1) WO2020111023A1 (pt)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112740680A (zh) 2018-09-19 2021-04-30 韩国电子通信研究院 图像编码/解码方法和设备以及存储比特流的记录介质
US20220141485A1 (en) * 2019-03-04 2022-05-05 Lg Electronics Inc. Intra block coding-based video or image coding
WO2021164781A1 (en) 2020-02-21 2021-08-26 Beijing Bytedance Network Technology Co., Ltd. Picture partitioning in video coding
CN115606183A (zh) * 2020-04-07 2023-01-13 抖音视界有限公司(Cn) 参考图片环绕的剪裁操作
CN115668917A (zh) 2020-04-09 2023-01-31 抖音视界有限公司 视频编解码中的去块信令通知
WO2021204251A1 (en) 2020-04-10 2021-10-14 Beijing Bytedance Network Technology Co., Ltd. Use of header syntax elements and adaptation parameter set
WO2021209061A1 (en) 2020-04-17 2021-10-21 Beijing Bytedance Network Technology Co., Ltd. Presence of adaptation parameter set units
WO2021222036A1 (en) 2020-04-26 2021-11-04 Bytedance Inc. Conditional signaling of video coding syntax elements

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101835802B1 (ko) * 2012-09-18 2018-03-08 브이아이디 스케일, 인크. 타일 및 타일 그룹을 이용한 관심 영역 비디오 코딩
US11438609B2 (en) * 2013-04-08 2022-09-06 Qualcomm Incorporated Inter-layer picture signaling and related processes
US9749627B2 (en) * 2013-04-08 2017-08-29 Microsoft Technology Licensing, Llc Control data for motion-constrained tile set
US9936207B2 (en) * 2013-10-14 2018-04-03 Qualcomm Incorporated Indication of parallel processing in video coding
US10638140B2 (en) * 2015-05-29 2020-04-28 Qualcomm Incorporated Slice level intra block copy and other video coding improvements
US10419768B2 (en) * 2016-03-30 2019-09-17 Qualcomm Incorporated Tile grouping in HEVC and L-HEVC file formats
JP7437374B2 (ja) * 2018-07-02 2024-02-22 ノキア テクノロジーズ オーユー ビデオコーディングでのタイル関連アドレス指定のための方法および装置
CN112703736B (zh) * 2018-09-14 2022-11-25 华为技术有限公司 视频译码方法,视频译码设备以及非瞬时性计算机可读介质
CN112740680A (zh) * 2018-09-19 2021-04-30 韩国电子通信研究院 图像编码/解码方法和设备以及存储比特流的记录介质
CN112997502B (zh) * 2018-12-07 2024-04-26 松下电器(美国)知识产权公司 编码装置、解码装置、编码方法和解码方法
BR112021011398A2 (pt) * 2018-12-17 2021-08-31 Huawei Technologies Co., Ltd. Método e aparelho de codificação de vídeo
US11477445B2 (en) * 2018-12-28 2022-10-18 Hfi Innovation Inc. Methods and apparatuses of video data coding with tile grouping
MX2021007872A (es) * 2018-12-31 2022-01-18 Huawei Tech Co Ltd Un codificador de video, un decodificador de video y métodos correspondientes.
US20200236377A1 (en) * 2019-01-22 2020-07-23 Tencent America LLC Method for tile group identification
JPWO2020162609A1 (ja) * 2019-02-08 2021-12-23 シャープ株式会社 動画像符号化装置および動画像復号装置

Also Published As

Publication number Publication date
CN118118693A (zh) 2024-05-31
CN113170201B (zh) 2024-04-12
US20230027997A1 (en) 2023-01-26
PH12021551147A1 (en) 2021-11-03
JP7307168B2 (ja) 2023-07-11
MX2021006218A (es) 2021-08-11
EP3888372A4 (en) 2022-08-31
KR102572140B1 (ko) 2023-08-30
EP3888372A1 (en) 2021-10-06
JP2022511756A (ja) 2022-02-01
CN113170201A (zh) 2021-07-23
JP2023123747A (ja) 2023-09-05
WO2020111023A1 (en) 2020-06-04
KR20210087091A (ko) 2021-07-09

Similar Documents

Publication Publication Date Title
US11973970B2 (en) Systems and methods for signaling parameters in video coding
KR102572140B1 (ko) 코딩된 비디오의 픽처들에 대한 타일 구조들을 시그널링하기 위한 시스템들 및 방법들
US20230007291A1 (en) Systems and methods for signaling temporal sublayer information in video coding
US11849135B2 (en) Systems and methods for signaling picture order count values for pictures included in coded video
US20220286668A1 (en) Systems and methods for signaling reference pictures in video coding
KR20210135292A (ko) 비디오 코딩에서 타일 그룹 정보를 시그널링하기 위한 시스템들 및 방법들
US20240056608A1 (en) Systems and methods for signaling reference pictures in video coding
US20230023370A1 (en) Systems and methods for signaling picture types of pictures included in coded video
US20240223814A1 (en) Systems and methods for signaling level information in video coding
WO2019189890A1 (en) Systems and methods for signaling tile structures for pictures of coded video