BR112021011398A2 - Método e aparelho de codificação de vídeo - Google Patents

Método e aparelho de codificação de vídeo Download PDF

Info

Publication number
BR112021011398A2
BR112021011398A2 BR112021011398-3A BR112021011398A BR112021011398A2 BR 112021011398 A2 BR112021011398 A2 BR 112021011398A2 BR 112021011398 A BR112021011398 A BR 112021011398A BR 112021011398 A2 BR112021011398 A2 BR 112021011398A2
Authority
BR
Brazil
Prior art keywords
tile
tile group
tiles
group
image
Prior art date
Application number
BR112021011398-3A
Other languages
English (en)
Inventor
Fnu HENDRY
Ye-Kui Wang
Original Assignee
Huawei Technologies Co., Ltd.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co., Ltd. filed Critical Huawei Technologies Co., Ltd.
Publication of BR112021011398A2 publication Critical patent/BR112021011398A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • 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
    • 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/136Incoming video signal characteristics or properties
    • 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/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame 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/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/172Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a picture, frame or field
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/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/188Methods 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 a video data packet, e.g. a network abstraction layer [NAL] unit
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Auxiliary Devices For And Details Of Packaging Control (AREA)

Abstract

método e aparelho de codificação de vídeo. um mecanismo de codificação de vídeo é revelado. o mecanismo inclui particionamento de uma imagem em uma pluralidade de tiles. um número de tiles estão incluídos em um grupo de tiles. o mecanismo determina se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares. o número de tiles no grupo de tiles é determinado com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares. os tiles são codificados em um fluxo de bits com base no grupo de tiles. o fluxo de bits é armazenado para comunicação em direção a um decodificador.

Description

“MÉTODO E APARELHO DE CODIFICAÇÃO DE VÍDEO” CAMPO DA TÉCNICA
[0001] A presente revelação refere-se, de modo geral, à codificação de vídeo, e se refere, especificamente, a mecanismos para particionar imagens em grupos de tiles para suportar compressão aumentada em codificação de vídeo.
ANTECEDENTES
[0002] A quantidade de dados de vídeo necessária para representar até mesmo um vídeo relativamente curto pode ser substancial, que pode resultar em dificuldades quando os dados precisam ser transmitidos ou comunicados de outro modo por meio de uma rede de comunicações com capacidade de largura de banda limitada. Desse modo, os dados de vídeo são, de modo geral, comprimidos antes de serem comunicados por meio de redes de telecomunicações atuais. O tamanho de um vídeo também pode ser uma questão quando o vídeo é armazenado em um dispositivo de armazenamento, visto que os recursos de memória podem ser limitados. Os dispositivos de compressão de vídeo normalmente usam software e/ou hardware na origem para codificar os dados de vídeo antes de transmissão ou armazenamento, diminuindo, desse modo, a quantidade de dados necessária para representar imagens de vídeo digitais. Os dados comprimidos são, então, recebidos no destino por um dispositivo de descompressão de vídeo que decodifica os dados de vídeo. Com recursos de rede limitados e demandas crescentes por maior qualidade de vídeo, as técnicas de compressão e descompressão aperfeiçoadas que aperfeiçoam a razão de compressão com pouco ou nenhum comprometimento na qualidade de imagem são desejáveis.
SUMÁRIO
[0003] Em uma modalidade, a revelação inclui um método implementado em um codificador, o método compreende: particionar, por um processador do codificador, uma imagem em uma pluralidade de tiles; atribuir, pelo processador, um número de tiles a um grupo de tiles; determinar, pelo processador, se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares; determinar, pelo processador, o número de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares; codificar, pelo processador, os tiles em um fluxo de bits com base no grupo de tiles; e armazenar, em uma memória do codificador, o fluxo de bits para comunicação em direção a um decodificador. Alguns sistemas de codificação de vídeo empregam grupos de tiles contendo tiles atribuídos em ordem de varredura raster. Outros sistemas empregam, em vez disso, grupos de tiles retangulares a fim de suportar a extração de subimagem em realidade virtual (VR), teleconferência e outros esquemas de codificação com base em região de interesse. Ainda outros sistemas permitem que um codificador selecione qual tipo de grupo de tiles usar dependendo do tipo de aplicação de codificação de vídeo. Os presentes aspectos incluem um mecanismo para determinar o número de tiles no grupo de tiles com base em se o grupo de tiles ser varredura raster ou retangular. Uma vez que o tipo de grupo de tiles é determinado, o primeiro tile e o último tile do grupo de tiles são usados para determinar o número de tiles no grupo de tiles. Diferentes mecanismos são empregados dependendo do tipo de grupo de tiles. Portanto, o mecanismo revelado permite que um codificador/decodificador (codec) suporte múltiplos esquemas de grupo de tiles para diferentes casos de uso e, portanto, aumenta a funcionalidade do codificador e do decodificador. Além disso, o mecanismo revelado pode permitir a seleção de mecanismos de codificação um grupo aumentado de funções de codificação, que pode aumentar a eficiência de codificação e, portanto, reduzir o uso de recurso de memória, o uso de recurso de processamento e/ou o uso de recurso de rede no codificador e/ou no decodificador.
[0004] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que, quando o grupo de tiles for o grupo de tiles de varredura raster, o número de tiles no grupo de tiles é determinado ao: determinar um número de tiles entre um primeiro tile do grupo de tiles e um último tile do grupo de tiles como um número de tiles no grupo de tiles; e determinar o número de tiles no grupo de tiles com base no número de tiles no grupo de tiles.
[0005] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que, quando o grupo de tiles for o grupo de tiles retangulares, o número de tiles no grupo de tiles é determinado ao: determinar um valor delta entre o primeiro tile do grupo de tiles e o último tile do grupo de tiles; determinar um número de linhas de grupo de tiles com base no valor delta e em um número de colunas de tile na imagem; determinar um número de colunas de grupo de tiles com base no valor delta e no número de colunas de tile na imagem; e determinar o número de tiles no grupo de tiles com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles.
[0006] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o número de linhas de grupo de tiles é determinado dividindo-se o valor delta pelo número de colunas de tile na imagem mais um.
[0007] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o número de colunas de grupo de tiles é determinado como o valor delta modulo o número de colunas de tile na imagem mais um.
[0008] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, que compreende adicionalmente codificar no fluxo de bits, pelo processador, um identificador do primeiro tile do grupo de tiles e um identificador do último tile do grupo de tiles para indicar os tiles atribuídos ao grupo de tiles.
[0009] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o identificador do primeiro tile do grupo de tiles e o identificador do último tile do grupo de tiles são codificados em um cabeçalho de grupo de tiles no fluxo de bits.
[0010] Em uma modalidade, a revelação inclui um método implementado em um decodificador, o método compreende: receber, por um processador do decodificador por meio de um receptor, um fluxo de bits que inclui uma imagem particionada em uma pluralidade de tiles, em que um número de tiles é atribuído a um grupo de tiles; determinar, pelo processador, se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares; determinar, pelo processador, o número de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares; decodificar, pelo processador, os tiles para gerar tiles decodificados com base no número de tiles no grupo de tiles; e gerar, pelo processador, uma sequência de vídeo reconstruída para exibição com base nos tiles decodificados. Alguns sistemas de codificação de vídeo empregam grupos de tiles contendo tiles atribuídos em ordem de varredura raster. Outros sistemas empregam, em vez disso, grupos de tiles retangulares a fim de suportar a extração de subimagem em realidade virtual (VR), teleconferência e outros esquemas de codificação com base em região de interesse. Ainda outros sistemas permitem que um codificador selecione qual tipo de grupo de tiles usar dependendo do tipo de aplicação de codificação de vídeo. Os presentes aspectos incluem um mecanismo para determinar o número de tiles no grupo de tiles com base em se o grupo de tiles ser varredura raster ou retangular. Uma vez que o tipo de grupo de tiles é determinado, o primeiro tile e o último tile do grupo de tiles são usados para determinar o número de tiles no grupo de tiles. Diferentes mecanismos são empregados dependendo do tipo de grupo de tiles. Portanto, o mecanismo revelado permite que um codificador/decodificador (codec) suporte múltiplos esquemas de grupo de tiles para diferentes casos de uso e, portanto, aumenta a funcionalidade do codificador e do decodificador. Além disso, o mecanismo revelado pode permitir a seleção de mecanismos de codificação um grupo aumentado de funções de codificação, que pode aumentar a eficiência de codificação e, portanto, reduzir o uso de recurso de memória, o uso de recurso de processamento e/ou o uso de recurso de rede no codificador e/ou no decodificador.
[0011] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que, quando o grupo de tiles for o grupo de tiles de varredura raster, o número de tiles no grupo de tiles é determinado ao: determinar um número de tiles entre um primeiro tile do grupo de tiles e um último tile do grupo de tiles como um número de tiles no grupo de tiles; e determinar o número de tiles no grupo de tiles com base no número de tiles no grupo de tiles.
[0012] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que, quando o grupo de tiles for o grupo de tiles retangulares, o número de tiles no grupo de tiles é determinado ao: determinar um valor delta entre o primeiro tile do grupo de tiles e o último tile do grupo de tiles; determinar um número de linhas de grupo de tiles com base no valor delta e em um número de colunas de tile na imagem; determinar um número de colunas de grupo de tiles com base no valor delta e no número de colunas de tile na imagem; e determinar o número de tiles no grupo de tiles com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles.
[0013] De modo opcional, em qualquer um dos aspectos antecedentes,
outra implementação do aspecto fornece, em que o número de linhas de grupo de tiles é determinado dividindo-se o valor delta pelo número de colunas de tile na imagem mais um.
[0014] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o número de colunas de grupo de tiles é determinado como o valor delta modulo o número de colunas de tile na imagem mais um.
[0015] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, que compreende adicionalmente obter, pelo processador, um identificador do primeiro tile do grupo de tiles e um identificador do último tile do grupo de tiles a partir do fluxo de bits.
[0016] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o identificador do primeiro tile do grupo de tiles e o identificador do último tile do grupo de tiles são obtidos a partir de um cabeçalho de grupo de tiles no fluxo de bits.
[0017] Em uma modalidade, a revelação inclui um dispositivo de codificação de vídeo que compreende: um processador, um receptor acoplado ao processador, e um transmissor acoplado ao processador, o processador, o receptor e o transmissor configurados para realizar o método de qualquer um dos aspectos antecedentes.
[0018] Em uma modalidade, a revelação inclui uma mídia legível por computador não transitória que compreende um produto de programa de computador paro uso por um dispositivo de codificação de vídeo, o produto de programa de computador compreende instruções executáveis em computador armazenadas na mídia legível por computador não transitória de modo que, quando executadas por um processador, fazem com que o dispositivo de codificação de vídeo realize o método de qualquer um dos aspectos antecedentes.
[0019] Em uma modalidade, a revelação inclui um codificador que compreende: um meio de particionamento para particionar uma imagem em uma pluralidade de tiles; um meio de atribuição para atribuir um número de tiles a um grupo de tiles; um meio de determinação para: determinar se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares; e determinar o número de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares; um meio de codificação para codificar os tiles em um fluxo de bits com base no número de tiles no grupo de tiles; e um meio de armazenamento para armazenar o fluxo de bits para comunicação em direção a um decodificador.
[0020] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o codificador é configurado adicionalmente para realizar o método de qualquer um dos aspectos antecedentes.
[0021] Em uma modalidade, a revelação inclui um decodificador que compreende: um meio de recebimento para receber um fluxo de bits que inclui uma imagem particionada em uma pluralidade de tiles, em que um número de tiles é atribuído a um grupo de tiles; um meio de determinação para: determinar se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares; e determinar o número de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares; um meio de decodificação para decodificar os tiles para gerar tiles decodificados com base no número de tiles no grupo de tiles; e um meio de geração para gerar uma sequência de vídeo reconstruída para exibição com base nos tiles decodificados.
[0022] De modo opcional, em qualquer um dos aspectos antecedentes, outra implementação do aspecto fornece, em que o decodificador é configurado adicionalmente para realizar o método de qualquer um dos aspectos antecedentes.
[0023] Para fins de clareza, qualquer uma dentre as modalidades antecedentes pode ser combinada com qualquer uma ou mais dentre as outras modalidades antecedentes para criar uma nova modalidade dentro do escopo da presente revelação.
[0024] Esses e outros atributos serão mais claramente entendidos a partir da descrição detalhada a seguir obtida em conjunto com os desenhos anexos e reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0025] Para um entendimento mais completo desta revelação, referência é feita à breve descrição a seguir, obtida em conjunto com os desenhos anexos e descrição detalhada, em que referências numéricas similares representam partes similares.
[0026] A Figura 1 é um fluxograma de um método exemplificativo de codificação de um sinal de vídeo.
[0027] A Figura 2 é um diagrama esquemático de um sistema de codificação e decodificação (codec) exemplificativo para codificação de vídeo.
[0028] A Figura 3 é um diagrama esquemático que ilustra um codificador de vídeo exemplificativo.
[0029] A Figura 4 é um diagrama esquemático que ilustra um decodificador de vídeo exemplificativo.
[0030] A Figura 5 é um diagrama esquemático que ilustra um fluxo de bits exemplificativo que contém uma sequência de vídeo codificada.
[0031] A Figura 6 é um diagrama esquemático que ilustra uma imagem exemplificativa particionada em grupos de tiles de varredura raster.
[0032] A Figura 7 é um diagrama esquemático que ilustra uma imagem exemplificativa particionada em grupos de tiles retangulares.
[0033] A Figura 8 é um diagrama esquemático de um dispositivo de codificação de vídeo exemplificativo.
[0034] A Figura 9 é um fluxograma de um método exemplificativo de codificação de uma imagem em um fluxo de bits.
[0035] A Figura 10 é um fluxograma de um método exemplificativo de decodificação de uma imagem a partir de um fluxo de bits.
[0036] A Figura 11 é um diagrama esquemático de um sistema exemplificativo para codificar uma sequência de imagens de vídeo em um fluxo de bits.
DESCRIÇÃO DETALHADA
[0037] Deve-se entender inicialmente que, embora uma implementação ilustrativa de uma ou mais modalidades seja fornecida abaixo, os sistemas e/ou métodos revelados podem ser implementados com o uso de qualquer número de técnicas, sejam atualmente conhecidas ou em existência. A revelação não deve, de modo algum, ser limitada às implementações ilustrativas, desenhos e técnicas ilustrados abaixo, incluindo os projetos e implementações exemplificativos ilustrados e descritos no presente documento, mas pode ser modificada dentro do escopo das reivindicações anexas em conjunto com seu escopo inteiro de equivalentes.
[0038] Vários acrônimos são empregados na presente invenção, tais como bloco de árvore de codificação (CTB), unidade de árvore de codificação (CTU), unidade de codificação (CU), sequência de vídeo codificada (CVS), Equipe de Especialistas em Vídeo Conjunta (JVET), conjunto de tiles com movimento restrito (MCTS), unidade de transferência máxima (MTU), camada de abstração de rede (NAL), contagem de ordem de imagem (POC), carga útil de sequência de byte bruto (RBSP), conjunto de parâmetros de sequência (SPS), codificação de vídeo versátil (VVC) e projeto de trabalho (WD).
[0039] Muitas técnicas de compressão de vídeo podem ser empregadas para reduzir o tamanho de arquivos de vídeo com perda mínima de dados. Por exemplo, as técnicas de compressão de vídeo podem incluir realizar predição espacial (por exemplo, imagem intra) e/ou predição temporal (por exemplo, imagem inter) para reduzir ou remover redundância de dados em sequências de vídeo. Para codificação de vídeo com base em bloco, uma fatia de vídeo (por exemplo, uma imagem de vídeo ou uma porção de uma imagem de vídeo) pode ser particionada em blocos de vídeo, que também podem ser denominados blocos de árvore, blocos de árvore de codificação (CTBs), unidades de árvore de codificação (CTUs), unidades de codificação (CUs) e/ou nós de codificação. Os blocos de vídeo em uma fatia codificada de modo intra (I) de uma imagem são codificados com o uso de predição espacial em relação a amostras de referência em blocos vizinhos na mesma imagem. Os blocos de vídeo em uma fatia de predição unidirecional (P) ou predição bidirecional (B) codificada de modo inter de uma imagem podem ser codificados empregando-se predição espacial em relação a amostras de referência em blocos vizinhos na mesma imagem ou predição temporal em relação a amostras de referência em outras imagens de referência. As imagens podem ser denominadas quadros e/ou figuras, e imagens de referência podem ser denominadas quadros de referência e/ou imagens de referência. A predição espacial ou temporal resulta em um bloco preditivo que representa um bloco de imagem. Os dados residuais representam diferenças de pixel entre o bloco de imagem original e o bloco preditivo. Assim, um bloco codificado de modo inter é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência que formam o bloco preditivo, e os dados residuais indicam a diferença entre o bloco codificado e o bloco preditivo. Um bloco codificado de modo intra é codificado de acordo com um modo de codificação intra e os dados residuais. Para compressão adicional, os dados residuais podem ser transformados do domínio de pixel para um domínio de transformada. Isso resulta em coeficientes de transformada residuais, que podem ser quantizados. Os coeficientes de transformada quantizados podem ser inicialmente dispostos em um arranjo bidimensional. Os coeficientes de transformada quantizados podem ser submetidos à varredura a fim de produzir um vetor unidimensional de coeficientes de transformada. A codificação de entropia pode ser aplicada para alcançar ainda mais compressão. Tais técnicas de compressão de vídeo são discutidas e mais detalhes abaixo.
[0040] Para garantir que um vídeo codificado possa ser decodificado de maneira acurada, o vídeo é codificado e decodificado de acordo com padrões de codificação de vídeo correspondentes. Os padrões de codificação de vídeo incluem União Internacional de Telecomunicação (ITU) Setor de Padronização (ITU-T) H.261, Organização Internacional para Padronização/Comissão Eletrotécnica Internacional (ISO/IEC) Grupo de Especialistas de Imagem em Movimento (MPEG)-1 Parte 2, ITU-T H.262 ou ISO/IEC MPEG-2 Parte 2, ITU-T H.263, ISO/IEC MPEG-4 Parte 2, Codificação de Vídeo Avançada (AVC), também conhecida como ITU-T H.264 ou ISO/IEC MPEG-4 Parte 10 e Codificação de Vídeo de Alta Eficiência (HEVC), também conhecida como ITU-T H.265 ou MPEG- H Parte 2. AVC inclui extensões, tais como Codificação de Vídeo Escalável (SVC), Codificação de Vídeo Multivista (MVC) e Codificação de Vídeo Multivista mais Profundidade (MVC+D), e AVC tridimensional (3D) (3D-AVC). HEVC inclui extensões, tais como HEVC Escalável (SHVC), HEVC Multivista (MV-HEVC) e 3D HEVC (3D-HEVC). A equipe de especialistas em vídeo conjunta (JVET) de ITU-T e ISO/IEC deu início ao desenvolvimento de um padrão de codificação de vídeo denominado Codificação de Vídeo Versátil (VVC). A VVC é incluída em um Projeto de Trabalho (WD), que inclui JVET-L1001-v5.
[0041] A fim de codificar uma imagem de vídeo, a imagem é primeiro particionada, e os particionamento são codificados em um fluxo de bits. Vários esquemas de particionamento de imagem estão disponíveis. Por exemplo, uma imagem pode ser particionada em fatias regulares, fatias dependentes, tiles e/ou de acordo com Processamento Paralelo de Wavefront (WPP). Por questão de simplicidade, HEVC restringe codificadores de modo que apenas fatias regulares, fatias dependentes, tiles, WPP e combinações dos mesmos possam ser usados ao particionar uma fatia em grupos de CTBs para codificação de vídeo. Tal particionamento pode ser aplicado para suportar correspondência de tamanho de Unidade de Transferência Máxima (MTU), processamento paralelo e retardo fim a fim reduzido. MTU denota a quantidade máxima de dados que pode ser transmitida em um único pacote. Se uma carga útil de pacote estiver em excesso da MTU, essa carga útil é repartida em dois pacotes através de um processo denominado fragmentação.
[0042] Uma fatia regular, também denominada simplesmente uma fatia, é uma porção particionada de uma imagem que pode ser reconstruída independentemente de outras fatias regulares dentro da mesma imagem, a despeito de algumas interdependências devido a operações de filtragem loop. Cada fatia regular é encapsulada em sua própria unidade de Camada de Abstração de Rede (NAL) para transmissão. Além disso, predição em imagem (predição de amostra intra, predição de informações de movimento, predição de modo de codificação) e dependência de codificação de entropia através de delimitações de fatia podem ser desabilitadas para suportar reconstrução independente. Tal reconstrução independente suporta paralelização. Por exemplo, paralelização com base em fatia regular emprega comunicação mínima interprocessador ou internúcleo. Entretanto, visto que cada fatia regular é independente, cada fatia é associada a um cabeçalho de fatia separado. O uso de fatias regulares pode incorrer uma sobrecarga de codificação substancial devido ao custo de bit do cabeçalho de fatia para cada fatia e devido à falta de predição através das delimitações de fatia. Além disso, fatias regulares podem ser empregadas para suportar correspondência para exigências de tamanho de MTU. Especificamente, visto que uma fatia regular é encapsulada em uma unidade de NAL separada e pode ser codificada de maneira independente, cada fatia regular deve ser menor do que a MTU em esquemas de MTU para evitar rompimento da fatia em múltiplos pacotes. Como tal, o objetivo de paralelização e o objetivo de correspondência de tamanho de MTU podem colocar demandas contraditórias a um leiaute de fatia em uma imagem.
[0043] As fatias dependentes são similares a fatias regulares, mas têm cabeçalhos de fatia menores e permitem o particionamento das delimitações de bloco de árvore de imagem sem romper a predição em imagem. Assim, as fatias dependentes permitem que uma fatia regular seja fragmentada em múltiplas unidades de NAL, que fornece retardo fim a fim reduzido permitindo-se que uma parte de uma fatia regular seja enviada antes de a codificação de toda a fatia regular ser concluída.
[0044] Um tile é uma porção particionada de uma imagem criada por delimitações horizontais e verticais que criam colunas e linhas de tiles. Os tiles podem ser codificados em ordem de varredura raster (da direita para a esquerda e do topo para baixo). A ordem de varredura de CTBs é local dentro de um tile. Assim, CTBs em um primeiro tile são codificados em ordem de varredura raster, antes de prosseguir para os CTBs no próximo tile. De modo similar a fatias regulares, tiles rompem dependências de predição em imagem bem como dependências de decodificação de entropia. Entretanto, tiles podem não estar incluídos em unidades de NAL individuais e, portanto, tiles podem não ser usados para correspondência de tamanho de MTU. Cada tile pode ser processado por um processador/núcleo, e a comunicação interprocessador/internúcleo empregada para predição em imagem entre unidades de processamento que decodificam tiles vizinhos pode ser limitada a transportar um cabeçalho de fatia compartilhado (quando tiles adjacentes estão na mesma fatia), e realizar compartilhamento relacionado à filtragem loop de amostras reconstruídas e metadados. Quando mais de um tile é incluído em uma fatia, o deslocamento de byte de ponto de entrada para cada tile diferente do primeiro deslocamento de ponto de entrada na fatia pode ser sinalizado no cabeçalho de fatia. Para cada fatia e tile, pelo menos uma dentre as seguintes condições deve ser satisfeita: 1) todos os blocos de árvore codificados em uma fatia pertencem ao mesmo tile; e 2) todos os blocos de árvore codificados em um tile pertencem à mesma fatia.
[0045] Em WPP, a imagem é particionada em únicas linhas de CTBs. Os mecanismos de decodificação de entropia e predição podem usar dados de CTBs em outras linhas. O processamento paralelo se torna possível através de decodificação paralela de linhas de CTB. Por exemplo, uma linha atual pode ser decodificada em paralelo com uma linha antecedente. Entretanto, a decodificação da linha atual é atrasada em relação ao processo de decodificação das linhas antecedentes por dois CTBs. Esse retardo garante que dados relacionados ao CTB acima e ao CTB acima e à direita do CTB atual na linha atual estejam disponíveis antes de o CTB atual ser codificado. Essa abordagem aparece como um wavefront quando representada graficamente. Esse início progressivo permite paralelização com até uma quantidade de processadores/núcleos igual à quantidade de linhas de CTB da imagem. Visto que predição em imagem entre linhas de bloco de árvore vizinhas dentro de uma imagem é permitida, a comunicação interprocessador/internúcleo para possibilitar predição em imagem pode ser substancial. O particionamento de acordo com WPP considera tamanhos de unidade de NAL. Portanto, WPP não suporta correspondência de tamanho de MTU. Entretanto, fatias regulares podem ser usadas em conjunto com WPP, com certa sobrecarga de codificação, para implementar correspondência de tamanho de MTU conforme desejado.
[0046] Tiles também podem incluir conjuntos de tiles com movimento restrito. Um conjunto de tiles com movimento restrito (MCTS) é um conjunto de tiles projetado de modo que vetores de movimento associados sejam restritos para apontar para localizações de amostra inteira dentro do MCTS e para localizações de amostra fracionada que exigem apenas localizações de amostra inteira dentro do MCTS para interpolação. Além disso, o uso de candidatos de vetor de movimento para predição de vetor de movimento temporal derivada de blocos fora do MCTS é proibido. Desse modo, cada MCTS pode ser decodificado de maneira independente sem a existência de tiles não incluídos no MCTS. As mensagens de informações de aprimoramento suplementares (SEI) de MCTSs temporais podem ser usadas para indicar a existência de MCTSs no fluxo de bits e sinalizar os MCTSs. A mensagem de MCTSs SEI fornece informações suplementares que podem ser usadas na extração de sub-fluxo de bits de MCTS (especificada como parte da semântica da mensagem de SEI) para gerar um fluxo de bits em conformidade para um MCTS. As informações incluem um número de conjuntos de informações de extração, cada um definindo um número de MCTSs e contendo bytes de carga útil de sequência de bytes brutos (RBSP) dos conjuntos de parâmetros de vídeo de substituição (VPSs), conjuntos de parâmetros de sequência (SPSs) e conjuntos de parâmetros de imagem (PPSs) a serem usados durante o processo de extração de sub-fluxo de bits de MCTS. Ao extrair um sub- fluxo de bits de acordo com o processo de extração de sub-fluxo de bits de MCTS, conjuntos de parâmetros (VPSs, SPSs e PPSs) podem ser reescritos ou substituídos, e cabeçalhos de fatia podem ser atualizados, visto que um ou todos os elementos de sintaxe relacionados a endereço de fatia (incluindo first_slice_segment_in_pic_flag e slice_segment_address) podem empregar diferentes valores no sub-fluxo de bits extraído.
[0047] A presente revelação se refere a vários esquemas de tiling. Especificamente, quando uma imagem for particionada em tiles, tais tiles podem ser atribuídos a grupos de tiles. Um grupo de tiles é um conjunto de tiles relacionados que podem ser separadamente extraídos e codificados, por exemplo, para suportar exibição de uma região de interesse e/ou suportar processamento paralelo. Os tiles podem ser atribuídos a grupos de tiles para permitir aplicação ampla de grupo de parâmetros correspondentes, funções, ferramentas de codificação, etc. Por exemplo, um grupo de tiles pode conter um MCTS. Conforme outro exemplo, grupos de tiles podem ser processados e/ou extraídos separadamente. Alguns sistemas empregam um mecanismo de varredura raster para criar grupos de tiles correspondentes. Conforme usado na presente invenção, um grupo de tiles de varredura raster é um grupo de tiles que é criado atribuindo-se tiles em uma ordem de varredura raster. A ordem de varredura raster prossegue continuamente da direita para a esquerda e do topo para baixo entre um primeiro tile e um último tile. Os grupos de tiles de varredura raster podem ser úteis para algumas aplicações, por exemplo, para suportar processamento paralelo.
[0048] Entretanto, grupos de tiles de varredura raster podem não ser eficientes em alguns casos. Por exemplo, em aplicações de realidade virtual (VR), um ambiente é gravado como uma esfera codificada em uma imagem. Um usuário pode, então, experimentar o ambiente visualizando-se uma subimagem selecionada por usuário da imagem. Uma subimagem selecionada por usuário pode ser denominada uma região de interesse. A permissão para que o usuário perceba, de modo seletivo, uma porção do ambiente cria a sensação de que o usuário está presente naquele ambiente. Como tal, porções não selecionadas da imagem podem não ser visualizadas e, portanto, descartadas. Assim, a subimagem selecionada por usuário pode ser tratada de maneira diferente da subimagem não selecionada (por exemplo, a subimagem não selecionada pode ser sinalizada em resolução menor, pode ser processada usando mecanismos mais simples durante renderização, etc.) Os grupos de tiles permitem tal tratamento diferencial entre subimagens. Entretanto, a subimagem selecionada por usuário é geralmente uma área retangular e/ou quadrangular. Assim, grupos de tiles de varredura raster podem não ser úteis para tais casos de uso.
[0049] A fim de superar essas questões, alguns sistemas empregam grupos de tiles retangulares. Um grupo de tiles retangulares é um grupo de tiles contendo um conjunto de tiles que, quando colocados juntos, resultam em um formato retangular. Um formato retangular, conforme usado na presente invenção, é um formato com exatamente quatro lados conectados de modo que cada lado esteja conectado a dois outros lados, cada um em um ângulo de noventa graus. Ambas as abordagens de grupo de tiles (por exemplo, grupo de tiles de varredura raster e grupo de tiles retangulares) podem ter vantagens e desvantagens. Assim, os sistemas de codificação de vídeo podem desejar suportar ambas as abordagens. Entretanto, os sistemas de codificação de vídeo podem ser incapazes de sinalizar, de maneira eficiente, uso de grupo de tiles quando ambas as abordagens estiverem disponíveis. Por exemplo, uma simples fusão da sinalização dessas abordagens pode resultar em estrutura de sintaxe complicada que é ineficiente e/ou com uso intensivo de processador no codificador e/ou no decodificador. A presente revelação apresenta mecanismos para abordar essas e outras questões nas técnicas de codificação de vídeo.
[0050] São revelados na presente invenção vários mecanismos para harmonizar o uso de grupos de tiles de varredura raster e grupos de tiles retangulares empregando-se sinalização simples e compacta. Tal sinalização aumenta a eficiência de codificação e, portanto, reduz o uso de recurso de memória, o uso de recurso de processamento e/ou o uso de recurso de rede no codificador e/ou no decodificador. A fim de harmonizar essas abordagens, o codificador pode sinalizar uma flag que indica qual tipo de grupo de tiles é empregado. Por exemplo, a flag pode ser uma flag de grupo de tiles retangulares, que pode ser sinalizada em um conjunto de parâmetros, tal como um SPS e/ou um PPS. A flag pode indicar se o codificador está usando grupos de tiles de varredura raster ou grupos de tiles retangulares. O codificador pode, então, indicar membro de grupo de tiles simplesmente sinalizando-se o primeiro e o último tile no grupo de tiles. Com base no primeiro tile, no último tile e na indicação do tipo de grupo de tiles, o decodificador pode determinar quais tiles são incluídos em um grupo de tiles. Assim, uma lista completa de todos os tiles em cada grupo de tiles pode ser omitida do fluxo de bits, o que aumenta a eficiência de codificação. Por exemplo, se o grupo de tiles for um grupo de tiles de varredura raster, os tiles atribuídos ao grupo de tiles podem ser determinados determinando-se um número de tiles entre o primeiro tile e o último tile do grupo de tiles, e adicionando-se esses muitos tiles, com identificadores entre o primeiro tile e o último tile, ao grupo de tiles. Se o grupo de tiles for um grupo de tiles retangulares, uma abordagem diferente pode ser usada. Por exemplo, um valor delta pode ser determinado entre o primeiro tile e o último tile do grupo de tiles. Um número de linhas de grupo de tiles e um número de colunas de grupo de tiles podem ser, então, determinados com base no valor delta e no número de colunas de tile na imagem. Os tiles no grupo de tiles podem ser, então, determinados com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles. Esses e outros exemplos são descritos em detalhes abaixo.
[0051] A Figura 1 é um fluxograma de um método operacional exemplificativo 100 de codificação de um sinal de vídeo. Especificamente, um sinal de vídeo é codificado em um codificador. O processo de codificação comprime o sinal de vídeo empregando-se vários mecanismos para reduzir o tamanho de arquivo de vídeo. Um tamanho de arquivo menor permite que o arquivo de vídeo comprimido seja transmitido em direção a um usuário, enquanto reduz sobrecarga de largura de banda associada. O decodificador decodifica, então, o arquivo de vídeo comprimido para reconstruir o sinal de vídeo original para exibição para um usuário final. O processo de decodificação geralmente reflete o processo de codificação para permitir que o decodificador reconstrua, de maneira consistente, o sinal de vídeo.
[0052] Na etapa 101, o sinal de vídeo é inserido no codificador. Por exemplo, o sinal de vídeo pode ser um arquivo de vídeo não comprimido armazenado na memória. Conforme outro exemplo, o arquivo de vídeo pode ser capturado por um dispositivo de captura de vídeo, tal como uma câmera de vídeo, e codificado para suportar transmissão em tempo real do vídeo. O arquivo de vídeo pode incluir tanto um componente de áudio quanto um componente de vídeo. O componente de vídeo contém uma série de quadros de imagem que, quando vista em uma sequência, proporciona a impressão visual de movimento. Os quadros contêm pixels que são expressos em termos de luz, denominados, na presente invenção, componentes de luma (ou amostras de luma), e cor, denominados componentes de croma (ou amostras de cor). Em alguns exemplos, os quadros também podem conter valores de profundidade para suportar visualização tridimensional.
[0053] Na etapa 103, o vídeo é particionado em blocos. O particionamento inclui subdividir os pixels em cada quadro em blocos quadrangulares e/ou retangulares para compressão. Por exemplo, em Codificação de Vídeo de Alta Eficiência (HEVC) (também conhecida como H.265 e MPEG-H Parte 2) o quadro pode ser primeiro dividido em unidades de árvore de codificação (CTUs), que são blocos de um tamanho predefinido (por exemplo, sessenta e quatro pixels por sessenta e quatro pixels). As CTUs contêm amostras de luma e croma. As árvores de codificação podem ser empregadas para dividir as CTUs em blocos e, então, subdividir, de modo recursivo, os blocos até que configurações sejam alcançadas que suportam codificação adicional. Por exemplo, componentes de luma de um quadro podem ser subdivididos até que os blocos individuais contenham valores de iluminação relativamente homogêneos. Além disso, componentes de croma de um quadro podem ser subdivididos até que os blocos individuais contenham valores de cor relativamente homogêneos. Assim, os mecanismos de particionamento variam dependendo do conteúdo dos quadros de vídeo.
[0054] Na etapa 105, vários mecanismos de compressão são empregados para comprimir os blocos de imagem particionados na etapa 103. Por exemplo, predição inter e/ou predição intra pode ser empregada. A predição inter é projetada para obter vantagem do fato de que objetos em uma cena comum tendem a aparecer em quadros sucessivos. Assim, um bloco que retrata um objeto em um quadro de referência não precisa ser descrito de maneira repetida em quadros adjacentes. Especificamente, um objeto, tal como uma tabela, pode permanecer em uma posição constante através de múltiplos quadros. Portanto, a tabela é descrita uma vez e quadros adjacentes podem se referir novamente ao quadro de referência. Os mecanismos de correspondência padrão podem ser empregados para corresponder objetos através de múltiplos quadros. Além disso, objetos em movimento podem ser representados através de múltiplos quadros, por exemplo, devido a movimento de objeto ou movimento de câmera. Conforme um exemplo particular, um vídeo pode mostrar um automóvel que se move através da tela através de múltiplos quadros. Os vetores de movimento podem ser empregados para descrever tal movimento. Um vetor de movimento é um vetor bidimensional que fornece um deslocamento a partir das coordenadas de um objeto em um quadro para as coordenadas do objeto em um quadro de referência. Como tal, a predição inter pode codificar um bloco de imagem em um quadro atual como um conjunto de vetores de movimento indicando um deslocamento a partir de um bloco correspondente em um quadro de referência.
[0055] A predição intra codifica blocos em um quadro comum. A predição intra obtém vantagem do fato de que componentes de luma e croma tendem a se aglomerar em um quadro. Por exemplo, um patch de verde em uma porção de uma árvore tende a ser posicionado de modo adjacente a patches similares de verde. A predição intra emprega múltiplos modos de predição direcionais (por exemplo, trinta e três em HEVC), um modo plano e um modo de corrente contínua (DC). Os modos direcionais indicam que um bloco atual é similar/igual a amostras de um bloco vizinho em uma direção correspondente. O modo plano indica que uma série de blocos ao longo de uma linha/coluna (por exemplo, um plano) pode ser interpolada com base em blocos vizinhos nas bordas da linha. O modo plano, de fato, indica uma transição suave de luz/cor através de uma linha/coluna empregando-se uma inclinação relativamente constante na mudança de valores. O modo DC é empregado para suavização de delimitação e indica que um bloco é similar/igual a um valor médio associado a amostras de todos os blocos vizinhos associados às direções angulares dos modos de predição direcionais. Assim, blocos de predição intra podem representar blocos de imagem como vários valores de modo de predição relacional em vez dos valores reais. Além disso, blocos de predição inter podem representar blocos de imagem como valores de vetor de movimento em vez dos valores reais. Em qualquer caso, os blocos de predição podem não representar exatamente os blocos de imagem em alguns casos. Quaisquer diferenças são armazenadas em blocos residuais. As transformadas podem ser aplicadas aos blocos residuais para comprimir adicionalmente o arquivo.
[0056] Na etapa 107, várias técnicas de filtragem podem ser aplicadas. Em HEVC, os filtros são aplicados de acordo com um esquema de filtragem in- loop. A predição com base em bloco discutida acima pode resultar na criação de imagens em bloco no decodificador. Além disso, o esquema de predição com base em bloco pode codificar um bloco e, então, reconstruir o bloco codificado para uso posterior como um bloco de referência. O esquema de filtragem in-loop aplica, de modo iterativo, filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptativo e filtros de deslocamento adaptativo de amostra (SAO) aos blocos/quadros. Esses filtros mitigam tais artefatos de blocagem de modo que o arquivo codificado possa ser reconstruído de maneira acurada. Além disso, esses filtros mitigam artefatos nos blocos de referência reconstruídos de modo que seja menos provável que artefatos criem artefatos adicionais em blocos subsequentes que são codificados com base nos blocos de referência reconstruídos.
[0057] Uma vez que o sinal de vídeo tiver sido particionado, comprimido e filtrado, os dados resultantes são codificados em um fluxo de bits na etapa 109. O fluxo de bits inclui os dados discutidos acima bem como quaisquer dados de sinalização desejados para suportar a reconstrução de sinal de vídeo apropriada no decodificador. Por exemplo, tais dados podem incluir dados de particionamento, dados de predição, blocos residuais e várias flags que fornecem instruções de codificação ao decodificador. O fluxo de bits pode ser armazenado em memória para transmissão em direção a um decodificador mediante solicitação. O fluxo de bits também pode ser transmitido por broadcast e/ou por multicast em direção a uma pluralidade de decodificadores. A criação do fluxo de bits é um processo iterativo. Assim, as etapas 101, 103, 105, 107 e 109 podem ocorrer de maneira contínua e/ou simultânea através de muitos quadros e blocos. A ordem mostrada na Figura 1 é apresentada por questão de clareza e para facilitar a discussão, e não se destina a limitar o processo de codificação de vídeo a uma ordem particular.
[0058] O decodificador recebe o fluxo de bits e inicia o processo de decodificação na etapa 111. Especificamente, o decodificador emprega um esquema de decodificação de entropia para converter o fluxo de bits em dados de vídeo e sintaxe correspondentes. O decodificador emprega os dados de sintaxe a partir do fluxo de bits para determinar os particionamento para os quadros na etapa 111. O particionamento deve corresponder os resultados de particionamento de bloco na etapa 103. A codificação/decodificação de entropia, conforme empregado na etapa 111, é descrita. O codificador faz muitas escolhas durante o processo de compressão, tais como seleção de esquemas de particionamento de bloco a partir de várias escolhas possíveis com base no posicionamento espacial de valores na imagem(s) de entrada. A sinalização das escolhas exatas pode empregar um grande número de bins. Conforme usado na presente invenção, um bin é um valor binário que é tratado como uma variável (por exemplo, um valor de bit que pode variar dependendo do contexto). A codificação de entropia permite que o codificador descarte quaisquer opções que sejam claramente inviáveis para um caso particular, deixando um conjunto de opções permitidas. Atribui-se, então, a cada opção permitida, uma palavra-código. O comprimento das palavras-código se baseia no número de opções permitidas (por exemplo, um bin para duas opções, dois bins para três a quatro opções, etc.) O codificador codifica, então, a palavra-código para a opção selecionada. Esse esquema reduz o tamanho das palavras-código, visto que as palavras-código são tão grandes quanto desejado para indicar unicamente uma seleção a partir de um subconjunto pequeno de opções permitidas em oposição à indicação única da seleção a partir de um conjunto potencialmente grande de todas as opções possíveis. O decodificador decodifica, então, a seleção determinando-se o conjunto de opções permitidas de um modo similar ao codificador. Ao determinar o conjunto de opções permitidas, o decodificador pode ler a palavra-código e determinar a seleção feita pelo codificador.
[0059] Na etapa 113, o decodificador realiza decodificação de bloco. Especificamente, o decodificador emprega transformadas inversas para gerar blocos residuais. Então, o decodificador emprega os blocos residuais e blocos de predição correspondentes para reconstruir os blocos de imagem de acordo com o particionamento. Os blocos de predição podem incluir blocos de predição intra e blocos de predição inter, conforme gerado no codificador na etapa 105. Os blocos de imagem reconstruídos são, então, posicionados em quadros de um sinal de vídeo reconstruído de acordo com os dados de particionamento determinados na etapa 111. A sintaxe para a etapa 113 também pode ser sinalizada no fluxo de bits através de codificação de entropia, conforme discutido acima.
[0060] Na etapa 115, a filtragem é realizada nos quadros do sinal de vídeo reconstruído de um modo similar à etapa 107 no codificador. Por exemplo, filtros de supressão de ruído, filtros de desblocagem, filtros loop adaptativo e filtros SAO podem ser aplicados aos quadros para remover artefatos de blocagem. Uma vez que os quadros são filtrados, o sinal de vídeo pode ser emitido a um display na etapa 117 para visualização por um usuário final.
[0061] A Figura 2 é um diagrama esquemático de um sistema de codificação e decodificação (codec) exemplificativo 200 para codificação de vídeo. Especificamente, o sistema codec 200 fornece funcionalidade para suportar a implementação do método operacional 100. O sistema codec 200 é generalizado para retratar componentes empregados tanto em um codificador quanto em um decodificador. O sistema codec 200 recebe e particiona um sinal de vídeo conforme discutido em relação às etapas 101 e 103 no método operacional 100, que resulta em um sinal de vídeo particionado 201. O sistema codec 200 comprime, então, o sinal de vídeo particionado 201 em um fluxo de bits codificado ao atuar como um codificador, conforme discutido em relação às etapas 105, 107 e 109 no método 100. Ao atuar como um decodificador, o sistema codec 200 gera um sinal de vídeo de saída a partir do fluxo de bits, conforme discutido em relação às etapas 111, 113, 115 e 117 no método operacional 100. O sistema codec 200 inclui um componente de controle de codificador geral 211, um componente de quantização e escalonamento de transformada 213, um componente de estimação de imagem intra 215, um componente de predição de imagem intra 217, um componente de compensação de movimento 219, um componente de estimação de movimento 221, um componente de transformada inversa e escalonamento 229, um componente de análise de controle de filtro 227, um componente de filtros in-loop 225, um componente de buffer de imagem decodificada 223 e um componente de codificação aritmética binária adaptativa ao contexto (CABAC) e formatação de cabeçalho 231. Tais componentes são acoplados conforme mostrado. Na Figura 2, linhas escuras indicam movimento de dados a serem codificados/decodificados enquanto linhas tracejadas indicam movimento de dados de controle que controlam a operação de outros componentes. Os componentes do sistema codec 200 podem estar todos presentes no codificador. O decodificador pode incluir um subconjunto dos componentes do sistema codec 200. Por exemplo, o decodificador pode incluir o componente de predição de imagem intra 217, o componente de compensação de movimento 219, o componente de transformada inversa e escalonamento 229, o componente de filtros in-loop 225 e o componente de buffer de imagem decodificada 223. Esses componentes serão descritos a seguir.
[0062] O sinal de vídeo particionado 201 é uma sequência de vídeo capturada que foi particionada em blocos de pixels por uma árvore de codificação. Uma árvore de codificação emprega vários modos de repartição para subdividir um bloco de pixels em blocos menores de pixels. Esses blocos podem ser, então, subdivididos adicionalmente em blocos menores. Os blocos podem ser denominados nós na árvore de codificação. Nós-pai maiores são repartidos em nós-filho menores. O número de vezes que um nó é subdividido é denominado a profundidade do nó/árvore de codificação. Os blocos divididos podem ser incluídos em unidades de codificação (CUs) em alguns casos. Por exemplo, uma CU pode ser uma subporção de uma CTU que contém um bloco de luma, bloco(s) de croma (Cr) de diferença de vermelho e um bloco(s) de croma (Cb) de diferença de azul em conjunto com instruções de sintaxe correspondentes para a CU. Os modos de repartição podem incluir uma árvore binária (BT), árvore tripla (TT) e uma árvore quaternária (QT) empregadas para particionar um nó em dois, três ou quatro nós-filho, respectivamente, de formatos variados dependendo dos modos de repartição empregados. O sinal de vídeo particionado 201 é encaminhado para o componente de controle de codificador geral 211, o componente de quantização e escalonamento de transformada 213, o componente de estimação de imagem intra 215, o componente de análise de controle de filtro 227 e o componente de estimação de movimento 221 para compressão.
[0063] O componente de controle de codificador geral 211 é configurado para tomar decisões relacionadas à codificação das imagens da sequência de vídeo no fluxo de bits de acordo com restrições de aplicação. Por exemplo, o componente de controle de codificador geral 211 gerencia a otimização de tamanho de taxa de bit/fluxo de bits versus qualidade de reconstrução. Tais decisões podem ser tomadas com base em disponibilidade de largura de banda/espaço de armazenamento e solicitações de resolução de imagem. O componente de controle de codificador geral 211 também gerencia a utilização de buffer à luz de velocidade de transmissão para mitigar insuficiência de buffer e questões de saturação. Para gerenciar essas questões, o componente de controle de codificador geral 211 gerencia particionamento, predição e filtragem pelos outros componentes. Por exemplo, o componente de controle de codificador geral 211 pode aumentar dinamicamente a complexidade de compressão para aumentar a resolução e aumentar o uso de largura de banda ou diminuir a complexidade de compressão para diminuir a resolução e o uso de largura de banda. Portanto, o componente de controle de codificador geral 211 controla os outros componentes do sistema codec 200 para equilibrar a qualidade de reconstrução de sinal de vídeo com preocupações de taxa de bits. O componente de controle de codificador geral 211 cria dados de controle, que controlam a operação dos outros componentes. Os dados de controle também são encaminhados para o componente de CABAC e formatação de cabeçalho 231 para serem codificados no fluxo de bits para sinalizar parâmetros para decodificação no decodificador.
[0064] O sinal de vídeo particionado 201 também é enviado ao componente de estimação de movimento 221 e ao componente de compensação de movimento 219 para predição inter. Um quadro ou fatia do sinal de vídeo particionado 201 pode ser dividido em múltiplos blocos de vídeo. O componente de estimação de movimento 221 e o componente de compensação de movimento 219 realizam codificação preditiva de modo inter do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para fornecer predição temporal. O sistema codec 200 pode realizar múltiplas passas de codificação, por exemplo, para selecionar um modo de codificação apropriado para cada bloco de dados de vídeo.
[0065] O componente de estimação de movimento 221 e o componente de compensação de movimento 219 podem ser altamente integrados, mas são ilustrados de forma separada para fins conceituais. A estimação de movimento, realizada pelo componente de estimação de movimento 221, é o processo de geração de vetores de movimento, que estimam movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indicar o deslocamento de um objeto codificado em relação a um bloco preditivo. Constata-se que um bloco preditivo é um bloco que corresponde estritamente ao bloco a ser codificado, em termos de diferença de pixel. Um bloco preditivo também pode ser denominado um bloco de referência. Tal diferença de pixel pode ser determinada pela soma da diferença absoluta (SAD), soma da diferença quadrática (SSD) ou outra métrica de diferença. HEVC emprega vários objetos codificados incluindo uma CTU, blocos de árvore de codificação (CTBs) e CUs. Por exemplo, uma CTU pode ser dividida em CTBs, que podem, então, ser divididos em CBs para inclusão em CUs. Uma CU pode ser codificada como uma unidade de predição (PU) contendo dados de predição e/ou uma unidade de transformada (TU) contendo dados residuais transformados para a CU. O componente de estimação de movimento 221 gera vetores de movimento, PUs e TUs usando-se uma análise de taxa-distorção como parte de um processo de otimização de taxa distorção. Por exemplo, o componente de estimação de movimento 221 pode determinar múltiplos blocos de referência, múltiplos vetores de movimento, etc. para um bloco/quadro atual, e pode selecionar os blocos de referência, vetores de movimento, etc. que têm as melhores características de taxa-distorção. As melhores características de taxa- distorção equilibram qualidade de reconstrução de vídeo (por exemplo, quantidade de perda de dados por compressão) com eficiência de codificação (por exemplo, tamanho da codificação final).
[0066] Em alguns exemplos, o sistema codec 200 pode calcular valores para posições de pixel de número subinteiro de imagens de referência armazenadas no componente de buffer de imagem decodificada 223. Por exemplo, o sistema codec de vídeo 200 pode interpolar valores de posições de pixel de um quarto, posições de pixel de um oitavo ou outras posições de pixel fracionadas da imagem de referência. Portanto, o componente de estimação de movimento 221 pode realizar uma busca de movimento em relação às posições de pixel inteiras e posições de pixel fracionadas e emitir um vetor de movimento com precisão de pixel fracionada. O componente de estimação de movimento 221 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia codificada de modo inter comparando-se a posição da PU com a posição de um bloco preditivo de uma imagem de referência. O componente de estimação de movimento 221 emite o vetor de movimento calculado como dados de movimento para o componente de CABAC e formatação de cabeçalho 231 para codificação e movimento para o componente de compensação de movimento 219.
[0067] A compensação de movimento, realizada pelo componente de compensação de movimento 219, pode envolver buscar ou gerar o bloco preditivo com base no vetor de movimento determinado pelo componente de estimação de movimento 221. Novamente, o componente de estimação de movimento 221 e o componente de compensação de movimento 219 podem ser funcionalmente integrados, em alguns exemplos. Mediante o recebimento do vetor de movimento para a PU do bloco de vídeo atual, o componente de compensação de movimento 219 pode localizar o bloco preditivo para onde o vetor de movimento aponta. Um bloco de vídeo residual é, então, formado subtraindo-se valores de pixel do bloco preditivo dos valores de pixel do bloco de vídeo atual sendo codificado, formando valores de diferença de pixel. Em geral, o componente de estimação de movimento 221 realiza estimação de movimento em relação a componentes de luma, e o componente de compensação de movimento 219 usa vetores de movimento calculados com base nos componentes de luma para componentes de croma e componentes de luma. O bloco preditivo e o bloco residual são encaminhados ao componente de quantização e escalonamento de transformada
213.
[0068] O sinal de vídeo particionado 201 também é enviado ao componente de estimação de imagem intra 215 e ao componente de predição de imagem intra 217. Assim como com o componente de estimação de movimento 221 e com o componente de compensação de movimento 219, o componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 podem ser altamente integrados, mas são ilustrados de maneira separada para fins conceituais. O componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 predizem de modo intra um bloco atual em relação a blocos em um quadro atual, como uma alternativa à predição inter realizada pelo componente de estimação de movimento 221 e pelo componente de compensação de movimento 219 entre quadros, conforme descrito acima. Em particular, o componente de estimação de imagem intra 215 determina um modo de predição intra a ser usado para codificar um bloco atual. Em alguns exemplos, o componente de estimação de imagem intra 215 seleciona um modo de predição intra apropriado para codificar um bloco atual a partir de múltiplos modos de predição intra testados. Os modos de predição intra selecionados são, então, encaminhados ao componente de CABAC 231 e formatação de cabeçalho para codificação.
[0069] Por exemplo, o componente de estimação de imagem intra 215 calcula valores de taxa-distorção usando uma análise de taxa-distorção para os vários modos de predição intra testados, e seleciona o modo de predição intra que tem as melhores características de taxa-distorção entre os modos testados. A análise de taxa-distorção geralmente determina uma quantidade de distorção (ou erro) entre um bloco codificado e um bloco não codificado original que foi codificado para produzir o bloco codificado, bem como uma taxa de bits (por exemplo, um número de bits) usada para produzir o bloco codificado. O componente de estimação de imagem intra 215 calcula razões das distorções e taxas para os vários blocos codificados para determinar qual modo de predição intra exibe o melhor valor de taxa-distorção para o bloco. Além disso, o componente de estimação de imagem intra 215 pode ser configurado para codificar blocos de profundidade de um mapa de profundidade usando um modo de modelagem de profundidade (DMM) com base em otimização de taxa-distorção
(RDO).
[0070] O componente de predição de imagem intra 217 pode gerar um bloco residual a partir do bloco preditivo com base nos modos de predição intra selecionados determinados pelo componente de estimação de imagem intra 215 quando implementado em um codificador ou ler o bloco residual a partir do fluxo de bits quando implementado em um decodificador. O bloco residual inclui a diferença em valores entre o bloco preditivo e o bloco original, representada como uma matriz. O bloco residual é, então, encaminhado para o componente de quantização e escalonamento de transformada 213. O componente de estimação de imagem intra 215 e o componente de predição de imagem intra 217 podem operar em componentes de luma e croma.
[0071] O componente de quantização e escalonamento de transformada 213 é configurado para comprimir adicionalmente o bloco residual. O componente de quantização e escalonamento de transformada 213 aplica uma transformada, tal como uma transformada discreta de cosseno (DCT), uma transformada discreta de seno (DST) ou uma transformada conceitualmente similar, ao bloco residual, produzindo um bloco de vídeo que compreende valores de coeficiente de transformada residual. As transformadas de wavelet, transformadas de número inteiro, transformadas de sub-banda ou outros tipos de transformadas também podem ser usados. A transformada pode converter as informações residuais de um domínio de valor de pixel para um domínio de transformada, tal como um domínio de frequência. O componente de quantização e escalonamento de transformada 213 também é configurado para escalonar as informações residuais transformadas, por exemplo, com base em frequência. Tal escalonamento envolve aplicar um fator de escala às informações residuais de modo que diferentes informações de frequência sejam quantizadas em diferentes granularidades, o que pode afetar a qualidade visual final do vídeo reconstruído. O componente de quantização e escalonamento de transformada 213 também é configurado para quantizar os coeficientes de transformada para reduzir adicionalmente taxa de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. O grau de quantização pode ser modificado ajustando-se um parâmetro de quantização. Em alguns exemplos, o componente de quantização e escalonamento de transformada 213 pode realizar, então, uma varredura da matriz incluindo os coeficientes de transformada quantizados. Os coeficientes de transformada quantizados são encaminhados para o componente de CABAC e formatação de cabeçalho 231 para serem codificados no fluxo de bits.
[0072] O componente de transformada inversa e escalonamento 229 aplica uma operação inversa do componente de quantização e escalonamento de transformada 213 para suportar estimação de movimento. O componente de transformada inversa e escalonamento 229 aplica escalonamento inverso, transformação e/ou quantização para reconstruir o bloco residual no domínio de pixel, por exemplo, para uso posterior como um bloco de referência que pode se tornar um bloco preditivo para outro bloco atual. O componente de estimação de movimento 221 e/ou o componente de compensação de movimento 219 pode calcular um bloco de referência adicionando-se o bloco residual novamente a um bloco preditivo correspondente para uso em estimação de movimento de um bloco/quadro posterior. Os filtros são aplicados aos blocos de referência reconstruídos para mitigar artefatos criados durante escalonamento, quantização e transformada. Tais artefatos podem causar, de outro modo, predição não acurada (e criar artefatos adicionais) quando blocos subsequentes são preditos.
[0073] O componente de análise de controle de filtro 227 e o componente de filtros in-loop 225 aplicam os filtros aos blocos residuais e/ou a blocos de imagem reconstruídos. Por exemplo, o bloco residual transformado do componente de transformada inversa e escalonamento 229 pode ser combinado com um bloco de predição correspondente do componente de predição de imagem intra 217 e/ou componente de compensação de movimento 219 para reconstruir o bloco de imagem original. Os filtros podem ser aplicados, então, ao bloco de imagem reconstruído. Em alguns exemplos, em vez disso, os filtros podem ser aplicados aos blocos residuais. Assim como com outros componentes na Figura 2, o componente de análise de controle de filtro 227 e o componente de filtros in-loop 225 são altamente integrados e podem ser implementados em conjunto, mas são retratados de maneira separada para fins conceituais. Os filtros aplicados aos blocos de referência reconstruídos são aplicados a regiões espaciais particulares e incluem múltiplos parâmetros para ajustar o modo como tais filtros são aplicados. O componente de análise de controle de filtro 227 analisa os blocos de referência reconstruídos para determinar onde tais filtros devem ser aplicados e define parâmetros correspondentes. Tais dados são encaminhados para o componente de CABAC e formatação de cabeçalho 231 como dados de controle de filtro para codificação. O componente de filtros in-loop 225 aplica tais filtros com base nos dados de controle de filtro. Os filtros podem incluir um filtro de desblocagem, um filtro de supressão de ruído, um filtro SAO e um filtro loop adaptativo. Tais filtros podem ser aplicados no domínio espacial/pixel (por exemplo, em um bloco de pixel reconstruído) ou no domínio de frequência, dependendo do exemplo.
[0074] Ao operar como um codificador, o bloco de predição, bloco residual e/ou bloco de imagem reconstruído filtrado são armazenados no componente de buffer de imagem decodificada 223 para uso posterior em estimação de movimento, conforme discutido acima. Ao operar como um decodificador, o componente de buffer de imagem decodificada 223 armazena e encaminha os blocos reconstruídos e filtrados em direção a um display como parte de um sinal de vídeo de saída. O componente de buffer de imagem decodificada 223 pode ser qualquer dispositivo de memória capaz de armazenar blocos de predição, blocos residuais e/ou blocos de imagem reconstruídos.
[0075] O componente de CABAC e formatação de cabeçalho 231 recebe os dados dos vários componentes do sistema codec 200 e codifica tais dados em um fluxo de bits codificado para transmissão em direção a um decodificador. Especificamente, o componente de CABAC e formatação de cabeçalho 231 gera vários cabeçalhos para codificar dados de controle, tais como dados de controle gerais e dados de controle de filtro. Além disso, dados de predição, incluindo dados de predição intra e movimento, bem como dados residuais na forma de dados de coeficiente de transformada quantizado são todos codificados no fluxo de bits. O fluxo de bits final inclui todas as informações desejadas pelo decodificador para reconstruir o sinal de vídeo particionado original
201. Tais informações também podem incluir tabelas de índice de modo de predição intra (também denominadas tabelas de mapeamento de palavra-código), definições de contextos de codificação para vários blocos, indicações de modos de predição intra mais prováveis, uma indicação de informações de particionamento, etc. Tais dados podem ser codificados empregando-se codificação de entropia. Por exemplo, as informações podem ser codificadas empregando-se codificação de comprimento variável adaptativa ao contexto (CAVLC), CABAC, codificação aritmética binária com base em sintaxe adaptativa ao contexto (SBAC), codificação de entropia de particionamento de intervalo de probabilidade (PIPE), ou outra técnica de codificação de entropia. Após a codificação de entropia, o fluxo de bits codificado pode ser transmitido para outro dispositivo (por exemplo, um decodificador de vídeo) ou arquivado para transmissão ou recuperação posterior.
[0076] A Figura 3 é um diagrama de blocos que ilustra um codificador de vídeo exemplificativo 300. O codificador de vídeo 300 pode ser empregado para implementar as funções de codificação do sistema codec 200 e/ou implementar as etapas 101, 103, 105, 107 e/ou 109 do método operacional 100. O codificador 300 particiona um sinal de vídeo de entrada, resultando em um sinal de vídeo particionado 301, que é substancialmente similar ao sinal de vídeo particionado 201. O sinal de vídeo particionado 301 é, então, comprimido e codificado em um fluxo de bits por componentes do codificador 300.
[0077] Especificamente, o sinal de vídeo particionado 301 é encaminhado para um componente de predição de imagem intra 317 para predição intra. O componente de predição de imagem intra 317 pode ser substancialmente similar ao componente de estimação de imagem intra 215 e ao componente de predição de imagem intra 217. O sinal de vídeo particionado 301 também é encaminhado a um componente de compensação de movimento 321 para predição inter com base em blocos de referência em um componente de buffer de imagem decodificada 323. O componente de compensação de movimento 321 pode ser substancialmente similar ao componente de estimação de movimento 221 e ao componente de compensação de movimento 219. Os blocos de predição e os blocos residuais do componente de predição de imagem intra 317 e do componente de compensação de movimento 321 são encaminhados a um componente de transformada e quantização 313 para transformada e quantização dos blocos residuais. O componente de transformada e quantização 313 pode ser substancialmente similar ao componente de quantização e escalonamento de transformada 213. Os blocos residuais transformados e quantizados e os blocos de predição correspondentes (em conjunto com dados de controle associados) são encaminhados a um componente de codificação de entropia 331 para codificação em um fluxo de bits. O componente de codificação de entropia 331 pode ser substancialmente similar ao componente de CABAC e formatação de cabeçalho 231.
[0078] Os blocos residuais transformados e quantizados e/ou os blocos de predição correspondentes também são encaminhados a partir do componente de transformada e quantização 313 para um componente de quantização e transformada inversa 329 para reconstrução em blocos de referência paro uso pelo componente de compensação de movimento 321. O componente de quantização e transformada inversa 329 pode ser substancialmente similar ao componente de transformada inversa e escalonamento 229. Os filtros in-loop em um componente de filtros in-loop 325 também são aplicados aos blocos residuais e/ou blocos de referência reconstruídos, dependendo do exemplo. O componente de filtros in-loop 325 pode ser substancialmente similar ao componente de análise de controle de filtro 227 e ao componente de filtros in-loop 225. O componente de filtros in-loop 325 pode incluir múltiplos filtros, conforme discutido em relação ao componente de filtros in-loop 225. Os blocos filtrados são, então, armazenados em um componente de buffer de imagem decodificada 323 paro uso como blocos de referência pelo componente de compensação de movimento 321. O componente de buffer de imagem decodificada 323 pode ser substancialmente similar ao componente de buffer de imagem decodificada 223.
[0079] A Figura 4 é um diagrama de blocos que ilustra um decodificador de vídeo exemplificativo 400. O decodificador de vídeo 400 pode ser empregado para implementar as funções de decodificação do sistema codec 200 e/ou implementar as etapas 111, 113, 115 e/ou 117 do método operacional 100. O decodificador 400 recebe um fluxo de bits, por exemplo, a partir de um codificador 300, e gera um sinal de vídeo de saída reconstruído com base no fluxo de bits para exibição para um usuário final.
[0080] O fluxo de bits é recebido por um componente de decodificação de entropia 433. O componente de decodificação de entropia 433 é configurado para implementar um esquema de decodificação de entropia, tal como codificação de CAVLC, CABAC, SBAC, PIPE ou outras técnicas codificação de entropia. Por exemplo, o componente de decodificação de entropia 433 pode empregar informações de cabeçalho para fornecer um contexto para interpretar dados adicionais codificados como palavras-código no fluxo de bits. As informações decodificadas incluem quaisquer informações desejadas para decodificar o sinal de vídeo, tais como dados de controle gerais, dados de controle de filtro, informações de particionamento, dados de movimento, dados de predição e coeficientes de transformada quantizados a partir de blocos residuais. Os coeficientes de transformada quantizados são encaminhados para um componente de quantização e transformada inversa 429 para reconstrução em blocos residuais. O componente de quantização e transformada inversa 429 pode ser similar ao componente de quantização e transformada inversa 329.
[0081] Os blocos de predição e/ou blocos residuais reconstruídos são encaminhados para o componente de predição de imagem intra 417 para reconstrução em blocos de imagem com base em operações de predição intra. O componente de predição de imagem intra 417 pode ser similar ao componente de estimação de imagem intra 215 e a um componente de predição de imagem intra
217. Especificamente, o componente de predição de imagem intra 417 emprega modos de predição para localizar um bloco de referência no quadro e aplica um bloco residual ao resultado para reconstruir blocos de imagem preditos de modo intra. Os blocos de imagem preditos de modo intra reconstruídos e/ou os blocos residuais e dados de predição inter correspondentes são encaminhados para um componente de buffer de imagem decodificada 423 através de um componente de filtros in-loop 425, que pode ser substancialmente similar ao componente de buffer de imagem decodificada 223 e ao componente de filtros in-loop 225, respectivamente. O componente de filtros in-loop 425 filtra os blocos residuais, blocos de predição e/ou blocos de imagem reconstruídos, e tais informações são armazenadas no componente de buffer de imagem decodificada 423. Os blocos de imagem reconstruídos do componente de buffer de imagem decodificada 423 são encaminhados para um componente de compensação de movimento 421 para predição inter. O componente de compensação de movimento 421 pode ser substancialmente similar ao componente de estimação de movimento 221 e/ou ao componente de compensação de movimento 219. Especificamente, o componente de compensação de movimento 421 emprega vetores de movimento a partir de um bloco de referência para gerar um bloco de predição e aplica um bloco residual ao resultado para reconstruir um bloco de imagem. Os blocos reconstruídos resultantes também podem ser encaminhados através do componente de filtros in-loop 425 ao componente de buffer de imagem decodificada 423. O componente de buffer de imagem decodificada 423 continua a armazenar blocos de imagem reconstruídos adicionais, que podem ser reconstruídos em quadros através das informações de particionamento. Tais quadros também podem ser colocados em uma sequência. A sequência é emitida em direção a um display como um sinal de vídeo de saída reconstruído.
[0082] A Figura 5 é um diagrama esquemático que ilustra um fluxo de bits exemplificativo 500 contendo uma sequência de vídeo codificada. Por exemplo, o fluxo de bits 500 pode ser gerado por um sistema codec 200 e/ou um codificador 300 para decodificação por um sistema codec 200 e/ou um decodificador 400. Conforme outro exemplo, o fluxo de bits 500 pode ser gerado por um codificador na etapa 109 do método 100 paro uso por um decodificador na etapa 111.
[0083] O fluxo de bits 500 inclui um conjunto de parâmetros de sequência (SPS) 510, uma pluralidade de conjuntos de parâmetros de imagem (PPSs) 512, cabeçalhos de grupo de tiles 514 e dados de imagem 520. Um SPS 510 contém dados de sequência comuns a todas as imagens na sequência de vídeo contida no fluxo de bits 500. Tais dados podem incluir tamanho de imagem, profundidade de bit, parâmetros de ferramenta de codificação, restrições de taxa de bit, etc. O PPS 512 contém parâmetros que são específicos a uma ou mais imagens correspondentes. Portanto, cada imagem em uma sequência de vídeo pode se referir a um PPS 512. O PPS 512 pode indicar ferramentas de codificação disponíveis para tiles em imagens correspondentes, parâmetros de quantização, deslocamentos, parâmetros de ferramenta de codificação específicos de imagem (por exemplo, controles de filtro), etc. O cabeçalho de grupo de tiles 514 contém parâmetros que são específicos a cada grupo de tiles em uma imagem. Portanto, pode haver um cabeçalho de grupo de tiles 514 por grupo de tiles na sequência de vídeo. O cabeçalho de grupo de tiles 514 pode conter informações de grupo de tiles, contagens de ordem de imagem (POCs), listas de imagem de referência, pesos de predição, pontos de entrada de tile, parâmetros de desblocagem, etc. Deve-se observar que alguns sistemas se referem ao cabeçalho de grupo de tiles 514 como um cabeçalho de fatia, e usam tais informações para suportar fatias em vez de grupos de tiles.
[0084] Os dados de imagem 520 contêm dados de vídeo codificados de acordo com predição inter e/ou predição intra bem como dados residuais transformados e quantizados correspondentes. Tais dados de imagem 520 são ordenados de acordo com o particionamento usado para particionar a imagem antes de codificação. Por exemplo, a imagem nos dados de imagem 520 é dividida em um ou mais grupos de tiles 521. Cada grupo de tiles 521 contém um ou mais tiles 523. Os tiles 523 são adicionalmente divididos em unidades de árvore de codificação (CTUs). As CTUs são adicionalmente divididas em blocos de codificação com base em árvores de codificação. Os blocos de codificação podem ser, então, codificados/decodificados de acordo com mecanismos de predição. Uma imagem/figura pode conter um ou mais grupos de tiles 521 e um ou mais tiles
523.
[0085] Um grupo de tiles 521 é um conjunto de tiles relacionados 523 que podem ser separadamente extraídos e codificados, por exemplo, para suportar exibição de uma região de interesse e/ou suportar processamento paralelo. Uma imagem pode conter um ou mais grupos de tiles 521. Cada grupo de tiles 521 se refere a ferramentas de codificação em um cabeçalho de grupo de tiles correspondente 514. Assim, um grupo de tiles atuais 521 pode ser codificado usando diferentes ferramentas de codificação de outros grupos de tiles 521 alterando-se dados em um cabeçalho de grupo de tiles correspondente 514. Um grupo de tiles 521 pode ser descrito em termos do mecanismo usado para atribuir os tiles 523 ao grupo de tiles 521. Um grupo de tiles 521 que contém tiles 523 atribuídos em ordem de varredura raster pode ser denominado um grupo de tiles de varredura raster. Um grupo de tiles 521 que contém tiles 523 atribuídos para criar um retângulo (ou quadrado) pode ser denominado um grupo de tiles retangulares. As Figuras 6 a 7 incluem exemplos de grupos de tiles de varredura raster e grupos de tiles retangulares, respectivamente, conforme discutido em mais detalhes abaixo.
[0086] Um tile 523 é uma porção particionada de uma imagem criada por delimitações horizontais e verticais. Os tiles 523 podem ser retangulares e/ou quadrangulares. Uma imagem pode ser particionada em linhas e colunas de tiles
523. Uma linha de tile 523 é um conjunto de tiles 523 posicionados de um modo horizontalmente adjacente para criar uma linha contínua da delimitação esquerda para a delimitação direita de uma imagem (ou vice-versa). Uma coluna de tile 523 é um conjunto de tiles 523 posicionados de um modo verticalmente adjacente para criar uma linha contínua da delimitação de topo para a delimitação inferior da imagem (ou vice-versa). Os tiles 523 podem ou não permitir predição com base em outros tiles 523, dependendo do exemplo. Por exemplo, um grupo de tiles 521 pode conter um conjunto de tiles 523 designado como um MCTS. Os tiles 523 em um MCTS podem ser codificados por predição a partir de outros tiles 523 no MCTS, mas não por tiles 523 fora do MCTS. Os tiles 523 podem ser adicionalmente particionados em CTUs. As árvores de codificação podem ser empregadas para particionar CTUs em blocos de codificação, que podem ser codificados de acordo com predição intra ou predição inter.
[0087] Cada tile 523 pode ter um único índice de tile 524 na imagem. Um índice de tile 524 é um identificador numérico selecionado de modo processualmente que pode ser usado para distinguir um tile 523 de outro. Por exemplo, índices de tile 524 podem aumentar numericamente em ordem de varredura raster. A ordem de varredura raster é da esquerda para direita e do topo para baixo. Deve-se observar que, em alguns exemplos, também se pode atribuir, aos tiles 523, identificadores de tile (IDs). Um ID de tile é um identificador atribuído que pode ser usado para distinguir um tile 523 de outro. As computações podem empregar IDs de tile em vez de índices de tile 524 em alguns exemplos. Além disso, IDs de tile podem ser atribuídos para ter os mesmos valores que os índices de tile 524 em alguns exemplos. Em alguns exemplos, os índices de tile 524 e/ou IDs podem ser sinalizados para indicar delimitações de grupos de tiles 521 contendo os tiles 523. Além disso, os índices de tile 524 e/ou IDs podem ser empregados para mapear dados de imagem 520 associados a um tile 523 para uma posição apropriada para exibição.
[0088] Conforme observado acima, um grupo de tiles 521 pode ser um grupo de tiles de varredura raster ou um grupo de tiles retangulares. A presente revelação inclui mecanismos de sinalização para permitir que um codec suporte ambos os tipos de grupo de tiles 521 de um modo que suporte a eficiência de codificação aumentada e reduza complexidade. Uma flag de grupo de tiles 531 é uma unidade de dados que pode ser empregada para sinalizar se grupos de tiles correspondentes 521 são de varredura raster ou retangulares. A flag de grupo de tiles 531 pode ser sinalizada no SPS 510 ou no PPS 512, dependendo do exemplo. Os tiles 523 atribuídos a um grupo de tiles 521 podem ser sinalizados indicando-se um primeiro tile 532 e um último tile 533 no fluxo de bits 500. Por exemplo, o primeiro tile 532 pode conter um índice de tile 524 ou ID de um tile 523 em uma primeira posição no grupo de tiles 521. Uma primeira posição é uma aresta topo esquerda para um grupo de tiles retangulares e um menor índice/ID em grupo de tiles de varredura raster. Além disso, o último tile 533 pode conter um índice de tile 524 ou ID de um tile 523 em uma última posição no grupo de tiles
521. Uma última posição é uma aresta inferior direita para um grupo de tiles retangulares e um maior índice/ID em grupo de tiles de varredura raster.
[0089] A flag de grupo de tiles 531, o primeiro tile 532 e o último tile 533 fornecem informações suficientes para permitir que um decodificador determine os tiles 523 em um grupo de tiles 521. Por exemplo, um mecanismo de varredura raster pode determinar os tiles 523 em um grupo de tiles de varredura raster com base no primeiro tile 532 e no último tile 533. Além disso, um mecanismo retangular pode determinar os tiles 523 em um grupo de tiles retangulares com base no primeiro tile 532 e no último tile 533. Isso permite que os índices de tile 524 para outros tiles 523 no grupo de tiles correspondente 521 sejam omitidos do fluxo de bits 500, que reduz o tamanho de fluxo de bits 500 e aumenta, portanto, a eficiência de codificação. Como tal, a flag de grupo de tiles 531 fornece informações suficientes para permitir que o decodificador determine qual mecanismo empregar para determinar quais tiles 523 são atribuídos ao grupo de tiles 521.
[0090] Assim, um codificador pode determinar o uso de grupos de tiles retangulares ou de varredura raster para o fluxo de bits 500 ou subporções dos mesmos. O codificador pode definir, então, a flag de grupo de tiles 531. Além disso, o codificador pode atribuir tiles 523 a um grupo de tiles 521 e incluir o primeiro tile 532 e o último tile 533 no fluxo de bits 500. Um decodificador de referência hipotético (HRD) no codificador pode determinar, então, atribuição de tile ao grupo de tiles 521 com base na flag de grupo de tiles 531, no primeiro tile 532 e no último tile 533. Conforme usado na presente invenção, uma atribuição de tile indica o subconjunto dos tiles 523 incluído no grupo de tiles 521 pelo codificador. O HRD é um conjunto de módulos de lado de codificador que predizem resultados de decodificação em um decodificador como parte de seleção de uma abordagem de codificação ideal durante RDO. Além disso, o decodificador pode receber o fluxo de bits 500 e determinar atribuição de grupo de tiles 521 com base na flag de grupo de tiles 531, no primeiro tile 532 e no último tile 533. Especificamente, tanto o HRD no codificador quanto o decodificador podem selecionar um mecanismo de varredura raster ou um mecanismo retangular com base na flag de grupo de tiles 531. O HRD e o decodificador podem empregar, então, o mecanismo selecionado para determinar a atribuição dos tiles 523 ao grupo de tiles 521 com base no primeiro tile 532 e no último tile 533.
[0091] O conteúdo a seguir é um exemplo específico dos mecanismos supramencionados. firstTileIdx = TileIdToIdx[ first_tile_id ] lastTileIdx = TileIdToIdx[ last_tile_id ] if( rectangular_tile_group_flag ) { deltaTileIdx = lastTileIdx − firstTileIdx numTileRows = ( deltaTileIdx / ( num_tile_columns_minus1 + 1 ) ) + 1 numTileColumns = ( deltaTileIdx % ( num_tile_columns_minus1 + 1 ) ) + 1 NumTilesInTileGroup = numTileRows * numTileColumns tileIdx = firstTileIdx for( j = 0, tIdx = 0; j < numTileRows; j++, tileIdx += num_tile_columns_minus1 + 1 ) { for( i = 0, currTileIdx = tileIdx; i < numTileColumn; i++, currTileIdx++, tIdx++ ) { TgTileIdx[ tIdx ] = currTileIdx } else { NumTilesInTileGroup = lastTileIdx − firstTileIdx + 1 TgTileIdx[ 0 ] = firstTileIdx for( i = 1, i < NumTilesInTileGroup, i++) TgTileIdx[ i ] = TgTileIdx[ i − 1 ] + 1 }
[0092] Neste exemplo, a flag de grupo de tiles 531, denotada rectangular_tile_group_flag, pode ser empregada para selecionar um mecanismo retangular (por exemplo, a declaração if) ou um mecanismo de varredura raster (por exemplo, a declaração else). O mecanismo retangular determina um valor delta entre o primeiro tile do grupo de tiles e o último tile do grupo de tiles. O número de linhas de grupo de tiles é determinado dividindo-se o valor delta por um número de colunas de tile na imagem mais um. O número de colunas de grupo de tiles é determinado pelo valor delta modulo o número de colunas de tile na imagem mais um. A atribuição de tile pode ser determinada, então, com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles (por exemplo, o para loop na declaração if). Contudo, o mecanismo de varredura raster determina um número de tiles entre um primeiro tile do grupo de tiles e um último tile do grupo de tiles. Visto que os tiles são indexados em ordem de varredura raster, o mecanismo de varredura raster pode, então, adicionar o número determinado de tiles ao grupo de tiles em ordem de varredura raster (por exemplo, o para loop na declaração else).
[0093] A Figura 6 é um diagrama esquemático que ilustra uma imagem exemplificativa 600 particionada em grupos de tiles de varredura raster 621. Por exemplo, a imagem 600 pode ser codificada em e decodificada a partir de um fluxo de bits 500, por exemplo, por um sistema codec 200, um codificador 300 e/ou um decodificador 400. Além disso, a imagem 600 pode ser particionada para suportar codificação e decodificação de acordo com o método 100.
[0094] A imagem 600 inclui tiles 623 atribuídos a grupos de tiles de varredura raster 621, 624 e 625, que podem ser substancialmente similares a tiles 523 e a grupo de tiles 521, respectivamente. Os tiles 623 são atribuídos aos grupos de tiles de varredura raster 621, 624 e 625 em ordem de varredura raster de um modo tile 623 por tile 623. Para retratar claramente as delimitações entre os grupos de tiles de varredura raster 621, 624 e 625, cada grupo de tiles é circundado por uma linha em negrito. Além disso, o grupo de tiles 621 é retratado por sombreamento para distinguir entre delimitações de grupo de tiles. Deve-se observar também que uma imagem 600 pode ser particionada em qualquer número de grupos de tiles de varredura raster 621, 624 e 625. Por questão de clareza de discussão, a descrição a seguir se refere ao grupo de tiles de varredura raster 621. Entretanto, os tiles 623 são atribuídos aos grupos de tiles de varredura raster 624 e 625 de um modo similar ao grupo de tiles de varredura raster 621.
[0095] Conforme mostrado, um primeiro tile 623a, um último tile 623b e todos os tiles sombreados entre o primeiro tile 623a e o último tile 623b são atribuídos ao grupo de tiles 621 em ordem de varredura raster. Conforme mostrado, um mecanismo (por exemplo, um método sendo operado em um processador) que prossegue de acordo com ordem de varredura raster atribui o primeiro tile 623a ao grupo de tiles 621 e, então, prossegue para atribuir cada tile 623 ao grupo de tiles 621 (da esquerda para a direita) até que a delimitação de imagem direita 600 seja alcançada (a menor que um último tile 623b seja alcançado). A ordem de varredura raster prossegue, então, para a próxima linha de tiles 623 (por exemplo, da linha(s) de topo em direção à linha(s) inferior). No presente caso, o primeiro tile 623a está na primeira linha e, portanto, a próxima linha é a segunda linha. Especificamente, a ordem de varredura raster prossegue para o primeiro tile na segunda linha na delimitação de imagem esquerda 600 e, então, prossegue da esquerda para a direita através da segunda linha até que a delimitação de imagem direita 600 seja alcançada. A varredura raster move, então, a próxima linha, que é a terceira linha nesse caso, e prossegue com atribuição do primeiro tile na terceira linha na delimitação de imagem esquerda 600. A varredura raster se move, então, imediatamente através da terceira linha. Essa ordem continua até que o último tile 623b seja alcançado. Nesse momento, o grupo de tiles 621 está completo. Os tiles adicionais 623 abaixo e/ou à direita do grupo de tiles 621 podem ser atribuídos ao grupo de tiles 625 em ordem de varredura raster de um modo similar. Os tiles 623 acima e/ou à esquerda do grupo de tiles 621 são atribuídos ao grupo de tiles 624 de um modo similar.
[0096] A Figura 7 é um diagrama esquemático que ilustra uma imagem exemplificativa 700 particionada em grupos de tiles retangulares 721. Por exemplo, a imagem 700 pode ser codificada em e decodificada a partir de um fluxo de bits 500, por exemplo, por um sistema codec 200, um codificador 300 e/ou um decodificador 400. Além disso, a imagem 700 pode ser particionada para suportar codificação e decodificação de acordo com o método 100.
[0097] A imagem 700 inclui tiles 723 atribuídos a um grupo de tiles retangulares 721, que podem ser substancialmente similares a tiles 523 e a grupo de tiles 521, respectivamente. Os tiles 723 atribuídos ao grupo de tiles retangulares 721 são retratados na Figura 7 conforme circundado por uma linha em negrito. Além disso, grupos de tiles retangulares selecionados 721 são sombreados para delinear claramente entre grupos de tiles retangulares 721. Conforme mostrado, um grupo de tiles retangulares 721 inclui um conjunto de tiles 723 que formam um formato retangular. Deve-se observar que grupos de tiles retangulares 721 também podem ser quadrangulares visto que um quadrado é um caso particular de um retângulo. Conforme mostrado, um retângulo tem quatro lados em que cada lado é conectado a dois outros lados por um ângulo reto (por exemplo, um ângulo de noventa graus). Um grupo de tiles retangulares 721a contém um primeiro tile 723a e um último tile 723b. O primeiro tile 723a está na aresta topo esquerda do grupo de tiles retangulares 721a e o último tile está na aresta inferior direita do grupo de tiles retangulares 721a. Os tiles 723 incluídos em ou entre as linhas e colunas contendo o primeiro tile 723a e o último tile 723b também são atribuídos ao grupo de tiles retangulares 721a de um modo tile por tile. Conforme mostrado, este esquema é diferente de varredura raster. Por exemplo, o tile 723c está entre o primeiro tile 723a e um último tile 723b em ordem de varredura raster, mas não está incluído no mesmo grupo de tiles retangulares 721a. Os grupos de tiles retangulares 721 podem ser mais complexos computacionalmente do que grupos de tiles de varredura raster 621 devido às geometrias envolvidas. Entretanto, grupos de tiles retangulares 721 são mais flexíveis. Por exemplo, um grupo de tiles retangulares 721a pode conter tiles 723 de diferentes linhas sem conter cada tile entre o primeiro tile 723 e a delimitação direita da imagem 700 (por exemplo, tal como tile 723c). O grupo de tiles retangulares 721a também pode excluir tiles selecionados entre a delimitação de imagem esquerda e o último tile 723b. Por exemplo, tile 723d é excluído do grupo de tiles 721a.
[0098] Assim, grupos de tiles retangulares 721 e grupos de tiles de varredura raster 621 têm, cada um, diferentes benefícios e, portanto, podem ser, cada um, mais ideais para diferentes casos de uso. Por exemplo, grupos de tiles de varredura raster 621 podem ser mais benéficos quando toda a imagem 600 é exibida e grupos de tiles retangulares 721 podem ser mais benéficos quando apenas uma subimagem é exibida. Entretanto, conforme observado acima, diferentes mecanismos podem ser empregados para determinar quais tiles são atribuídos ao grupo de tiles quando apenas o primeiro índice de tile e o último índice de tile são sinalizados no fluxo de bits. Como tal, uma flag que indica qual tipo de grupo de tiles é empregado pode ser usada pelo decodificador ou HRD para selecionar o mecanismo de varredura raster ou retangular apropriado. A atribuição de tile ao grupo de tiles pode ser, então, determinada empregando-se o primeiro tile e o último tile no grupo de tiles.
[0099] Empregando-se o conteúdo antecedente, os sistemas de codificação de vídeo podem ser aperfeiçoados. Como tal, esta revelação descreve vários aperfeiçoamentos a agrupamento de tiles em codificação de vídeo. Mais especificamente, esta revelação descreve processos de sinalização e derivação para suportar dois conceitos de grupo de tiles diferentes, grupos de tiles com base em varredura raster e grupos de tiles retangulares. Em um exemplo, uma flag é empregada em um conjunto de parâmetros que é referido direta ou indiretamente pelo grupo de tiles correspondentes. A flag especifica qual abordagem de grupo de tiles é usada. A flag pode ser sinalizada em um conjunto de parâmetros, tal como o conjunto de parâmetros de sequência, o conjunto de parâmetros de imagem ou outro tipo de conjunto de parâmetros que é referido direta ou indiretamente por grupos de tiles. Conforme um exemplo específico, a flag pode ser uma rectangular_tile_group_flag. Em alguns exemplos, uma indicação com dois ou mais bits pode ser definida e sinalizada em um conjunto de parâmetros que é referido direta ou indiretamente por grupos de tiles correspondentes. A indicação pode especificar qual abordagem de grupo de tiles é usada. Usando tal indicação, duas ou mais abordagens de grupo de tiles podem ser suportadas. O número de bits para sinalizar a indicação depende do número de abordagens de grupo de tiles a ser suportado. Em alguns exemplos, a flag ou a indicação pode ser sinalizada no cabeçalho de grupo de tiles.
[0100] As informações de sinalização que indicam o primeiro tile e o último tile que são incluídos no grupo de tiles podem ser suficientes para indicar quais tiles são incluídos em um grupo de tiles de varredura raster ou grupo de tiles retangulares. A derivação de tiles que são incluídos em um grupo de tiles pode depender da abordagem de grupo de tiles usada (que pode ser indicada pela flag ou indicação), informações do primeiro tile no grupo de tiles e informações do último tile no grupo de tiles. As informações para identificar um tile particular podem ser qualquer uma dentre o seguinte: o índice de tile, o ID de tile (se diferente do índice de tile), uma CTU incluída no tile (por exemplo, a primeira CTU incluída no tile), ou uma amostra de luma incluída no tile (por exemplo, a primeira amostra de luma incluída no tile).
[0101] O conteúdo a seguir é uma modalidade específica dos mecanismos supramencionados. Uma sintaxe de RBSP de conjunto de parâmetros de imagem pode ser da maneira a seguir. pic_parameter_set_rbsp( ) { Descriptor ... tile_id_len_minus1 ue(v) ... rectangular_tile_group_flag u(1) ...
}
[0102] O tile_id_len_minus1 mais 1 especifica o número de bits usado para representar o elemento de sintaxe tile_id_val[ i ][ j ], quando presente, no PPS, e o elemento de sintaxe first_tile_id e last_tile_id nos cabeçalhos de grupo de tiles que se referem ao PPS. O valor de tile_id_len_minus1 pode estar na faixa de Ceil( Log2( NumTilesInPic ) a 15, inclusive. A rectangular_tile_group_flag, quando definida como igual a um, pode especificar que grupos de tiles que se referem ao PPS incluem de um ou mais tiles que formam uma área retangular de uma imagem. A rectangular_tile_group_flag, quando definida como igual a zero, pode especificar que grupos de tiles que se referem ao PPS incluem de um ou mais tiles que são consecutivos em ordem de varredura raster da imagem.
[0103] A sintaxe de cabeçalho de grupo de tiles pode ser da maneira a seguir. tile_group_header( ) { Descriptor ... single_tile_in_tile_group_flag // Same as single_tile_in_slice_flag in u(1) IDF #86002675 first_tile_id // Same as top_left_tile_id in IDF #86002675 u(v) if( !single_tile_in_tile_group_flag ) { last_tile_id // Same as bottom_right_tile_id in IDF #86002675 u(v) ... }
[0104] O single_tile_in_tile_group_flag, quando definido como igual a um, pode especificar que há apenas um tile no grupo de tiles. O single_tile_in_tile_group_flag, quando definido como igual a zero, pode especificar que há mais de um tile no grupo de tiles. O first_tile_id pode especificar o ID de tile do primeiro tile do grupo de tiles. O comprimento de first_tile_id pode ser tile_id_len_minus1 + 1 bits. O valor de first_tile_id pode não ser igual ao valor de first_tile_id de qualquer outro grupo de tiles codificado da mesma imagem codificada. Quando houver mais de um grupo de tiles em uma imagem, a ordem de decodificação dos grupos de tiles na imagem pode ser em valor crescente de first_tile_id. O last_tile_id pode especificar o ID de tile do último tile do grupo de tiles. O comprimento de last_tile_id pode ser tile_id_len_minus1 + 1 bits. Quando não presente, o valor de last_tile_id pode ser inferido como igual a first_tile_id.
[0105] A variável NumTilesInTileGroup, que especifica o número de tiles no grupo de tiles, e TgTileIdx[ i ], que especifica o índice de tile do i-ésimo tile no grupo de tiles, pode ser derivada da seguinte maneira: firstTileIdx = TileIdToIdx[ first_tile_id ] lastTileIdx = TileIdToIdx[ last_tile_id ] if( rectangular_tile_group_flag ) { deltaTileIdx = lastTileIdx − firstTileIdx numTileRows = ( deltaTileIdx / ( num_tile_columns_minus1 + 1 ) ) + 1 numTileColumns = ( deltaTileIdx % ( num_tile_columns_minus1 + 1 ) ) + 1 NumTilesInTileGroup = numTileRows * numTileColumns tileIdx = firstTileIdx for( j = 0, tIdx = 0; j < numTileRows; j++, tileIdx += num_tile_columns_minus1 + 1 ) { for( i = 0, currTileIdx = tileIdx; i < numTileColumn; i++, currTileIdx++, tIdx++ ) { TgTileIdx[ tIdx ] = currTileIdx } else { NumTilesInTileGroup = lastTileIdx − firstTileIdx + 1 TgTileIdx[ 0 ] = firstTileIdx for( i = 1, i < NumTilesInTileGroup, i++) TgTileIdx[ i ] = TgTileIdx[ i − 1 ] + 1 }
[0106] A sintaxe de dados de grupo de tiles geral pode ser da maneira a seguir. tile_group_data( ) { Descriptor for( i = 0; i < NumTilesInTileGroup; i++ ) { ctbAddrInTs = FirstCtbAddrTs[ TgTileIdx[ i ] ] for( j = 0; j < NumCtusInTile[ TgTileIdx[ i ] ]; j++, ctbAddrInTs++ ) { CtbAddrInRs = CtbAddrTsToRs[ ctbAddrInTs ] coding_tree_unit( )
} end_of_tile_one_bit /* equal to 1 */ ae(v) if( i < NumTilesInTileGroup − 1 ) byte_alignment( ) } }
[0107] A Figura 8 é um diagrama esquemático de um dispositivo de codificação de vídeo exemplificativo 800. O dispositivo de codificação de vídeo 800 é adequado para implementar os exemplos/modalidades revelados, conforme descrito na presente invenção. O dispositivo de codificação de vídeo 800 compreende portas a jusante 820, portas a montante 850 e/ou unidades transceptoras (Tx/Rx) 810, incluindo transmissores e/ou receptores para comunicar dados a montante e/ou a jusante através de uma rede. O dispositivo de codificação de vídeo 800 também inclui um processador 830 que inclui uma unidade lógica e/ou unidade central de processamento (CPU) para processar os dados e uma memória 832 para armazenar os dados. O dispositivo de codificação de vídeo 800 também pode compreender componentes elétricos, ópticos para elétricos (OE), componentes elétricos para ópticos (EO) e/ou componentes de comunicação sem fio acoplados às portas a montante 850 e/ou portas a jusante 820 para comunicação de dados através de redes de comunicação elétricas, ópticas ou sem fio. O dispositivo de codificação de vídeo 800 também pode incluir dispositivos de entrada e/ou saída (I/O) 860 para comunicar dados a partir de um usuário e para o mesmo. Os dispositivos de I/O 860 podem incluir dispositivos de saída, tais como um display para exibir dados de vídeo, alto-falantes para emitir dados de áudio, etc. Os dispositivos de I/O 860 também podem incluir dispositivos de entrada, tais como um teclado, mouse, trackball, etc., e/ou interfaces correspondentes para interagir com tais dispositivos de saída.
[0108] O processador 830 é implementado por hardware e software. O processador 830 pode ser implementado como um ou mais chips de CPU, núcleos (por exemplo, como um processador de múltiplos núcleos), arranjos de portas programáveis em campo (FPGAs), circuitos integrados de aplicação específica (ASICs) e processadores de sinal digital (DSPs). O processador 830 está em comunicação com as portas a jusante 820, Tx/Rx 810, portas a montante 850 e a memória 832. O processador 830 compreende um módulo de codificação 814. O módulo de codificação 814 implementa as modalidades reveladas descritas na presente invenção, tais como métodos 100, 900 e 1000, que podem empregar um fluxo de bits 500, uma imagem 600 e/ou uma imagem 700. O módulo de codificação 814 também pode implementar qualquer outro método/mecanismo descrito na presente invenção. Além disso, o módulo de codificação 814 pode implementar um sistema codec 200, um codificador 300 e/ou um decodificador
400. Por exemplo, o módulo de codificação 814 pode particionar uma imagem em grupos de tiles e/ou tiles, tiles em CTUs, CTUs em blocos, e codificar os blocos ao atuar como um codificador. Além disso, o módulo de codificação 814 pode selecionar grupos de tiles retangulares ou de varredura raster e sinalizar tal seleção em um fluxo de bits. O módulo de codificação 814 também pode sinalizar o primeiro tile e o último tile para suportar determinação de atribuição de tile a grupos de tiles. Ao atuar como um decodificador ou HRD, o módulo de codificação 814 pode determinar o tipo de grupo de tiles usado e determinar os tiles atribuídos ao grupo de tiles com base no primeiro tile e no último tile. Portanto, o módulo de codificação 814 faz com que o dispositivo de codificação de vídeo 800 forneça funcionalidade adicional e/ou eficiência de codificação ao particionar e codificar dados de vídeo. Como tal, o módulo de codificação 814 aperfeiçoa a funcionalidade do dispositivo de codificação de vídeo 800 bem como aborda problemas que são específicos às técnicas de codificação de vídeo. Além disso, o módulo de codificação 814 realiza uma transformação do dispositivo de codificação de vídeo 800 para um estado diferente. De modo alternativo, o módulo de codificação 814 pode ser implementado como instruções armazenadas na memória 832 e executadas pelo processador 830 (por exemplo, como um produto de programa de computador armazenado em uma mídia não transitória).
[0109] A memória 832 compreende um ou mais tipos de memória, tais como discos, unidades de fita, unidades de estado sólido, memória somente leitura (ROM), memória de acesso aleatório (RAM), memória flash, memória ternária de conteúdo endereçável (TCAM), memória de acesso aleatório estática (SRAM), etc. A memória 832 pode ser usada como um dispositivo de armazenamento de dados de sobrefluxo, para armazenar programas quando tais programas são selecionados para execução, e para armazenar instruções e dados que são lidos durante a execução de programa.
[0110] A Figura 9 é um fluxograma de um método exemplificativo 900 de codificação de uma imagem, tal como imagem 600 e/ou 700, em um fluxo de bits, tal como fluxo de bits 500. O método 900 pode ser empregado por um codificador, tal como um sistema codec 200, um codificador 300 e/ou um dispositivo de codificação de vídeo 800 ao realizar o método 100.
[0111] O método 900 pode começar quando um codificador recebe uma sequência de vídeo incluindo uma pluralidade de imagens e determina codificar aquela sequência de vídeo em um fluxo de bits, por exemplo, com base em entrada de usuário. A sequência de vídeo é particionada em imagens/fotos/quadros para particionamento adicional antes de codificação. Na etapa 901, uma imagem é particionada em uma pluralidade de tiles. Os tiles são atribuídos a uma pluralidade de grupos de tiles e, portanto, um subconjunto dos tiles é atribuído a um grupo de tiles. O grupo de tiles pode ser um grupo de tiles de varredura raster ou um grupo de tiles retangulares.
[0112] Na etapa 903, o método 900 determina se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares. O subconjunto de tiles no grupo de tiles pode ser, então, determinado para o grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares. Especificamente, quando o grupo de tiles for um grupo de tiles de varredura raster, o subconjunto de tiles no grupo de tiles pode ser determinado de acordo com a etapa 905. Além disso, quando o grupo de tiles for um grupo de tiles retangulares, o subconjunto de tiles no grupo de tiles pode ser determinado de acordo com a etapa 907.
[0113] Na etapa 905, o subconjunto de tiles no grupo de tiles é determinado da maneira a seguir quando o grupo de tiles for o grupo de tiles de varredura raster. Um número de tiles entre um primeiro tile do grupo de tiles e um último tile do grupo de tiles é determinado como um número de tiles no grupo de tiles. Além disso, o subconjunto de tiles no grupo de tiles é determinado com base no número de tiles no grupo de tiles.
[0114] Na etapa 907, o subconjunto de tiles no grupo de tiles é determinado da maneira a seguir quando o grupo de tiles for o grupo de tiles retangulares. Um valor delta entre o primeiro tile do grupo de tiles e o último tile do grupo de tiles pode ser determinado. Um número de linhas de grupo de tiles também pode ser determinado com base no valor delta e em um número de colunas de tile na imagem. Em alguns exemplos, o número de linhas de grupo de tiles é determinado dividindo-se o valor delta pelo número de colunas de tile na imagem mais um. Além disso, um número de colunas de grupo de tiles pode ser determinado com base no valor delta e no número de colunas de tile na imagem. Em alguns exemplos, o número de colunas de grupo de tiles é determinado como o valor delta modulo o número de colunas de tile na imagem mais um. O subconjunto de tiles no grupo de tiles pode ser determinado, então, com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles.
[0115] Conforme um exemplo específico, as etapas 905 e 907 podem ser aplicadas pelo seguinte conjunto de instruções: firstTileIdx = TileIdToIdx[ first_tile_id ] lastTileIdx = TileIdToIdx[ last_tile_id ] if( rectangular_tile_group_flag ) { deltaTileIdx = lastTileIdx − firstTileIdx numTileRows = ( deltaTileIdx / ( num_tile_columns_minus1 + 1 ) ) + 1 numTileColumns = ( deltaTileIdx % ( num_tile_columns_minus1 + 1 ) ) + 1 NumTilesInTileGroup = numTileRows * numTileColumns tileIdx = firstTileIdx for( j = 0, tIdx = 0; j < numTileRows; j++, tileIdx += num_tile_columns_minus1 + 1 ) { for( i = 0, currTileIdx = tileIdx; i < numTileColumn; i++, currTileIdx++, tIdx++ ) { TgTileIdx[ tIdx ] = currTileIdx } else { NumTilesInTileGroup = lastTileIdx − firstTileIdx + 1 TgTileIdx[ 0 ] = firstTileIdx for( i = 1, i < NumTilesInTileGroup, i++) TgTileIdx[ i ] = TgTileIdx[ i − 1 ] + 1 }
[0116] Na etapa 909, os tiles são codificados em um fluxo de bits com base no grupo de tiles. Além disso, o fluxo de bits é armazenado na memória para comunicação em direção a um decodificador. Em alguns exemplos, um identificador do primeiro tile do grupo de tiles e um identificador do último tile do grupo de tiles também podem ser codificados no fluxo de bits para indicar os tiles atribuídos ao grupo de tiles. Por exemplo, o identificador do primeiro tile do grupo de tiles e o identificador do último tile do grupo de tiles podem ser codificados em um cabeçalho de grupo de tiles no fluxo de bits.
[0117] A Figura 10 é um fluxograma de um método exemplificativo 1000 de decodificação de uma imagem, tal como imagem 600 e/ou 700, a partir de um fluxo de bits, tal como fluxo de bits 500. O método 1000 pode ser empregado por um decodificador, tal como um sistema codec 200, um decodificador 400 e/ou um dispositivo de codificação de vídeo 800 ao realizar o método 100. Por exemplo, o método 1000 pode ser empregado em resposta ao método 900.
[0118] O método 1000 pode começar quando um decodificador começa recebendo um fluxo de bits de dados codificados que representam uma sequência de vídeo, por exemplo, como resultado do método 900. Na etapa 1001, um fluxo de bits é recebido. O fluxo de bits inclui uma imagem particionada em uma pluralidade de tiles. Os tiles são atribuídos a uma pluralidade de grupos de tiles e, portanto, um subconjunto dos tiles é atribuído a um grupo de tiles.
[0119] Na etapa 1003, o método 1000 determina se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares. O subconjunto de tiles no grupo de tiles pode ser, então, determinado para o grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares. Especificamente, quando o grupo de tiles for um grupo de tiles de varredura raster, o subconjunto de tiles no grupo de tiles pode ser determinado de acordo com a etapa 1005. Além disso, quando o grupo de tiles for um grupo de tiles retangulares, o subconjunto de tiles no grupo de tiles pode ser determinado de acordo com a etapa 1007. Em alguns exemplos, um identificador de um primeiro tile do grupo de tiles e um identificador de um último tile do grupo de tiles podem ser obtidos a partir do fluxo de bits a fim de suportar a determinação do subconjunto de tiles no grupo de tiles. Por exemplo, o identificador do primeiro tile do grupo de tiles e o identificador do último tile do grupo de tiles podem ser obtidos a partir de um cabeçalho de grupo de tiles no fluxo de bits.
[0120] Na etapa 1005, o subconjunto de tiles no grupo de tiles é determinado da maneira a seguir quando o grupo de tiles for o grupo de tiles de varredura raster. Um número de tiles entre um primeiro tile do grupo de tiles e um último tile do grupo de tiles é determinado como um número de tiles no grupo de tiles. Além disso, o subconjunto de tiles no grupo de tiles é determinado com base no número de tiles no grupo de tiles.
[0121] Na etapa 1007, o subconjunto de tiles no grupo de tiles é determinado da maneira a seguir quando o grupo de tiles for o grupo de tiles retangulares. Um valor delta entre o primeiro tile do grupo de tiles e o último tile do grupo de tiles pode ser determinado. Um número de linhas de grupo de tiles também pode ser determinado com base no valor delta e em um número de colunas de tile na imagem. Em alguns exemplos, o número de linhas de grupo de tiles é determinado dividindo-se o valor delta pelo número de colunas de tile na imagem mais um. Além disso, um número de colunas de grupo de tiles pode ser determinado com base no valor delta e no número de colunas de tile na imagem. Em alguns exemplos, o número de colunas de grupo de tiles é determinado como o valor delta modulo o número de colunas de tile na imagem mais um. O subconjunto de tiles no grupo de tiles pode ser determinado, então, com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles.
[0122] Conforme um exemplo específico, as etapas 1005 e 1007 podem ser aplicadas pelo seguinte conjunto de instruções: firstTileIdx = TileIdToIdx[ first_tile_id ] lastTileIdx = TileIdToIdx[ last_tile_id ] if( rectangular_tile_group_flag ) { deltaTileIdx = lastTileIdx − firstTileIdx numTileRows = ( deltaTileIdx / ( num_tile_columns_minus1 + 1 ) ) + 1 numTileColumns = ( deltaTileIdx % ( num_tile_columns_minus1 + 1 ) ) + 1 NumTilesInTileGroup = numTileRows * numTileColumns tileIdx = firstTileIdx for( j = 0, tIdx = 0; j < numTileRows; j++, tileIdx += num_tile_columns_minus1 + 1 ) { for( i = 0, currTileIdx = tileIdx; i < numTileColumn; i++, currTileIdx++, tIdx++ ) { TgTileIdx[ tIdx ] = currTileIdx } else {
NumTilesInTileGroup = lastTileIdx − firstTileIdx + 1 TgTileIdx[ 0 ] = firstTileIdx for( i = 1, i < NumTilesInTileGroup, i++) TgTileIdx[ i ] = TgTileIdx[ i − 1 ] + 1 }
[0123] Na etapa 1009, os tiles são decodificados para gerar tiles decodificados com base no grupo de tiles. Além disso, uma sequência de vídeo reconstruída é gerada para exibição com base nos tiles decodificados.
[0124] A Figura 11 é um diagrama esquemático de um sistema exemplificativo 1100 para codificar uma sequência de imagens de vídeo, tal como imagem 600 e/ou 700, em um fluxo de bits, tal como fluxo de bits 500. O sistema 1100 pode ser implementado por um codificador e um decodificador, tal como um sistema codec 200, um codificador 300, um decodificador 400 e/ou um dispositivo de codificação de vídeo 800. Além disso, o sistema 1100 pode ser empregado ao implementar o método 100, 900 e/ou 1000.
[0125] O sistema 1100 inclui um codificador de vídeo 1102. O codificador de vídeo 1102 compreende um módulo de particionamento 1101 para particionar uma imagem em uma pluralidade de tiles. O codificador de vídeo 1102 compreende adicionalmente um módulo de inclusão 1103 para incluir um número de tiles em um grupo de tiles. O codificador de vídeo 1102 compreende adicionalmente um módulo de determinação 1105 para determinar se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares, e determinar o número de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares. O codificador de vídeo 1102 compreende adicionalmente um módulo de codificação 1108 para codificar os tiles em um fluxo de bits com base no número de tiles no grupo de tiles. O codificador de vídeo 1102 compreende adicionalmente um módulo de armazenamento 1107 para armazenar o fluxo de bits para comunicação em direção a um decodificador. O codificador de vídeo 1102 compreende adicionalmente um módulo de transmissão 1109 para transmitir o fluxo de bits para suportar a determinação do tipo de grupo(s) de tiles usando e os tiles incluídos no grupo(s) de tiles. O codificador de vídeo 1102 pode ser configurado adicionalmente para realizar qualquer uma das etapas do método 900.
[0126] O sistema 1100 também inclui um decodificador de vídeo 1110.
O decodificador de vídeo 1110 compreende um módulo de recebimento 1111 para receber um fluxo de bits que inclui uma imagem particionada em uma pluralidade de tiles, em que um número de tiles é incluído em um grupo de tiles. O decodificador de vídeo 1110 compreende adicionalmente um módulo de determinação 1113 para determinar se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares, e determinar o número de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares. O decodificador de vídeo 1110 compreende adicionalmente um módulo de decodificação 1115 para decodificar os tiles para gerar tiles decodificados com base no número de tiles no grupo tile. O decodificador de vídeo 1110 compreende adicionalmente um módulo de geração 1117 para gerar uma sequência de vídeo reconstruída para exibição com base nos tiles decodificados. O decodificador de vídeo 1110 pode ser configurado adicionalmente para realizar qualquer uma das etapas do método 1000.
[0127] Um primeiro componente é acoplado diretamente a um segundo componente quando não houver componentes intermediários, exceto uma linha, um traço ou outro meio entre o primeiro componente e o segundo componente. O primeiro componente é acoplado indiretamente ao segundo componente quando houver componentes intermediários diferentes de uma linha, um traço ou outro meio entre o primeiro componente e o segundo componente. O termo “acoplado” e suas variantes incluem tanto acoplado diretamente quanto acoplado indiretamente. O uso do termo “cerca de” significa uma faixa que inclui ±10% do número subsequente, a menos que estabelecido de outra maneira.
[0128] Deve-se entender também que não é exigido que as etapas dos métodos exemplificativos estabelecidos na presente invenção sejam necessariamente realizadas na ordem descrita, e a ordem das etapas de tais métodos deve ser entendida apenas como exemplificativa. Da mesma maneira, as etapas adicionais podem ser incluídas em tais métodos, e determinadas etapas podem ser omitidas ou combinadas, em métodos consistentes com várias modalidades da presente revelação.
[0129] Embora diversas modalidades tenham sido fornecidas na presente revelação, pode-se entender que os sistemas e métodos revelados podem ser incorporados a muitas outras formas específicas sem se afastar do espírito ou escopo da presente revelação. Os presentes exemplos devem ser considerados como ilustrativos e não restritivos, e a intenção não deve ser limitada aos detalhes fornecidos no presente documento. Por exemplo, os vários elementos ou componentes podem ser combinados ou integrados em outro sistema ou determinados atributos podem ser omitidos, ou não implementados.
[0130] Além disso, técnicas, sistemas, subsistemas e métodos descritos e ilustrados nas várias modalidades como distintos ou separados podem ser combinados ou integrados a outros sistemas, componentes, técnicas ou métodos sem se afastar do escopo da presente revelação. Outros exemplos de mudanças, substituições e alterações são verificados por um técnico no assunto e podem ser realizados sem se afastar do espírito e escopo revelados no presente documento.

Claims (17)

REIVINDICAÇÕES
1. Método implementado em um codificador, CARACTERIZADO pelo fato de que o método compreende: particionar, por um processador do codificador, uma imagem em uma pluralidade de tiles; incluir, pelo processador, um número de tiles a um grupo de tiles; determinar, pelo processador, se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares; derivar, pelo processador, derivar, tiles na imagem que pertencem ao grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares; codificar, pelo processador, os tiles que pertencem ao grupo de tiles em um fluxo de bits.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que o método compreende adicionalmente: armazenar, em uma memória do codificador, o fluxo de bits para comunicação em direção a um decodificador.
3. Método, de acordo com qualquer uma das reivindicações 1 a 2, CARACTERIZADO pelo fato de que compreende adicionalmente codificar no fluxo de bits, pelo processador, um identificador do primeiro tile do grupo de tiles e um identificador do último tile do grupo de tiles para indicar o número de tiles incluídos no grupo de tiles.
4. Método, de acordo com qualquer uma das reivindicações 1 a 3, CARACTERIZADO pelo fato de que o identificador do primeiro tile do grupo de tiles e o identificador do último tile do grupo de tiles são codificados em um cabeçalho de grupo de tiles no fluxo de bits.
5. Método implementado em um decodificador, CARACTERIZADO pelo fato de que o método compreende: receber, por um processador do decodificador por meio de um receptor, um fluxo de bits que inclui uma imagem particionada em uma pluralidade de tiles, em que um número de tiles estão incluídos em um grupo de tiles; obter, pelo processador, uma flag a partir de um conjunto de parâmetros do fluxo de bits, em que o grupo de tiles é um grupo de tiles de varredura raster quando a flag for definida para um primeiro valor, e o grupo de tiles é um grupo de tiles retangulares quando a flag for definida para um segundo valor; derivar, pelo processador, tiles na imagem que pertencem ao grupo de tiles, quando o valor da flag especificar que o grupo de tiles é um grupo de tiles de varredura raster, usando-se o índice do primeiro tile no grupo de tiles e o número de tiles no grupo de tiles; decodificar, pelo processador, a pluralidade de tiles que pertencem ao grupo de tiles para gerar tiles decodificados com base no grupo de tiles
6. Método, de acordo com a reivindicação 5, CARACTERIZADO pelo fato de que o método compreende adicionalmente: gerar, pelo processador, uma sequência de vídeo reconstruída para exibição com base nos tiles decodificados.
7. Método, de acordo com a reivindicação 5, CARACTERIZADO pelo fato de que o método compreende adicionalmente: quando o valor da flag especificar que o grupo de tiles é um grupo de tiles retangulares, derivar tiles na imagem que pertencem ao grupo de tiles, usando-se o índice de tile no superior esquerdo do grupo de tiles e o índice de tiles no canto inferior direito do grupo de tiles.
8. Método, de acordo com qualquer uma das reivindicações 5 a 7, CARACTERIZADO pelo fato de que quando o grupo de tiles for o grupo de tiles de varredura raster, o número de tiles no grupo de tiles é determinado ao: determinar um número de tiles entre um primeiro tile do grupo de tiles e um último tile do grupo de tiles como um número de tiles no grupo de tiles; e determinar o número de tiles no grupo de tiles com base no número de tiles no grupo de tiles.
9. Método, de acordo com qualquer uma das reivindicações 5 a 7, CARACTERIZADO pelo fato de que quando o grupo de tiles for o grupo de tiles retangulares, o número de tiles no grupo de tiles é determinado ao: determinar um valor delta entre o primeiro tile do grupo de tiles e o último tile do grupo de tiles; determinar um número de linhas de grupo de tiles com base no valor delta e em um número de colunas de tile na imagem; determinar um número de colunas de grupo de tiles com base no valor delta e no número de colunas de tile na imagem; e determinar o número de tiles no grupo de tiles com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles.
10. Método, de acordo com a reivindicação 9, CARACTERIZADO pelo fato de que o número de linhas de grupo de tiles é determinado dividindo- se o valor delta pelo número de colunas de tile na imagem mais um.
11. Método, de acordo com a reivindicação 9, CARACTERIZADO pelo fato de que o número de colunas de grupo de tiles é determinado como o valor delta módulo o número de colunas de tile na imagem mais um.
12. Método, de acordo com qualquer uma das reivindicações 5 a 11, CARACTERIZADO pelo fato de que compreende adicionalmente obter, pelo processador, um identificador do primeiro tile do grupo de tiles e um identificador do último tile do grupo de tiles a partir do fluxo de bits.
13. Método, de acordo com qualquer uma das reivindicações 5 a 12, CARACTERIZADO pelo fato de que o identificador do primeiro tile do grupo de tiles e o identificador do último tile do grupo de tiles são obtidos a partir de um cabeçalho de grupo de tiles no fluxo de bits.
14. Dispositivo de codificação de vídeo, CARACTERIZADO pelo fato de que compreende: um processador, um receptor acoplado ao processador, e um transmissor acoplado ao processador, o processador, receptor, e transmissor configurados para realizar o método conforme definido em qualquer uma das reivindicações 1 a 13.
15. Dispositivo de codificação de vídeo, CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 1 a 13.
16. Produto de programa de computador, CARACTERIZADO pelo fato de que compreende código de programa para realizar o método conforme definido em qualquer uma das reivindicações 1 a 13 quando executado em um computador ou em um processador.
17. Mídia legível por computador não transitória, CARACTERIZADA pelo fato de que porta um código de programa que, quando executado por um dispositivo de computador, faz com que o dispositivo de computador realize o método conforme definido em qualquer uma das reivindicações 1 a 13.
Codificador Decodificador
Sinal de Vídeo de Entrada
Determinar Partições Particionamento de Bloco
Decodificação de bloco Compressão de Bloco
Filtragem Filtragem
Sinal de Vídeo de Saída Fluxo de bits
Controle de Controle Geral Codificador Geral Coeficientes de Transformada Quantizados
Transformada Inversa e Quantização e Sinal de Vídeo Escalonamento Escalonamento Particionado de Transformada Análise de Estimação de Imagem Intra Controle de Filtro CABAC e Predição Intra Formatação de Cabeçalho
Controle de Filtro Predição de Imagem Intra Filtros in-loop Fluxo de Bits Compensação Codificado de Movimento Movimento Estimação de Buffer de Sinal de Movimento Imagem Vídeo de Decodificada Saída
Codificador Fluxo de bits
Sinal de Vídeo Quantização e Codificação Particionado Transformada de Entropia
Predição de Quantização e Imagem Intra Transformada Inversa
Compensação de Movimento
Filtros in-loop Buffer de Imagem Decodificada
Decodificador Fluxo de bits
Decodificação Quantização e de Entropia Transformada Inversa
Compensação de Movimento
Predição de Imagem Intra
Buffer de Imagem Filtros in-loop Decodificada Sinal de Vídeo de Saída
Fluxo de bits
Cabeçalho de 636 336 Dados de Imagem Grupo de Tiles
Flag de Grupo Primeiro Tile de Tiles Último Tile
Grupo de Tiles
Índice de Tile
7LOH 7LOH 7LOH
Grupo Grupos de Tiles de Varredura Raster de Tiles
Grupo de Tiles
Grupo de Tiles
Grupos de Tiles Retangulares
Grupo de Tiles
Grupo de Tiles
Grupo de Tiles
Dispositivo de Codificação de Vídeo
Dispositivos de I/O
3URFHVVadRU
Módulo de Codificação 7[5[ 7[5[
0HPória Portas a Portas a Jusante Montante
Particionar uma imagem em uma pluralidade de tiles. Atribuir os tiles a pelo menos um grupo de tiles.
Determinar se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares. Determinar o subconjunto de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares.
Quando o grupo de tiles for o grupo de tiles de varredura raster, determinar um número de tiles entre um primeiro tile e um último tile do grupo de tiles, e determinar o subconjunto de tiles com base no número de tiles no grupo de tiles.
Quando o grupo de tiles for o grupo de tiles retangulares, determinar um valor delta entre o primeiro tile e o último tile do grupo de tiles, determinar um número de linhas de grupo de tiles e um número de colunas de grupo de tiles com base no valor delta e em um número de colunas de tile na imagem, e determinar o subconjunto de tiles com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles.
Codificar os tiles em um fluxo de bits com base em grupo de tiles, e armazenar o fluxo de bits para comunicação em direção a um decodificador.
Receber um fluxo de bits que inclui uma imagem particionada em uma pluralidade de tiles, em que os tiles são atribuídos a pelo menos um grupo de tiles.
Determinar se o grupo de tiles é um grupo de tiles de varredura raster ou um grupo de tiles retangulares, e determinar um subconjunto de tiles no grupo de tiles com base em se o grupo de tiles é o grupo de tiles de varredura raster ou o grupo de tiles retangulares.
Quando o grupo de tiles for o grupo de tiles de varredura raster, determinar um número de tiles entre um primeiro tile e um último tile do grupo de tiles, e determinar o subconjunto de tiles com base no número de tiles no grupo de tiles.
Quando o grupo de tiles for o grupo de tiles retangulares, determinar um valor delta entre o primeiro tile e o último tile do grupo de tiles,
determinar um número de linhas de grupo de tiles e um número de colunas de grupo de tiles com base no valor delta e em um número de colunas de tile na imagem, e determinar os tiles com base no número de linhas de grupo de tiles e no número de colunas de grupo de tiles.
Decodificar os tiles para gerar tiles decodificados com base no grupo de tiles. Gerar uma sequência de vídeo reconstruída para exibição com base nos tiles decodificados.
Codificador de vídeo
Particionamento Inclusão
Determinação
Armazenamento Codificação
7UDQVPLssor
5HFHptor
'HWHUPLnação
'HFRGificação
*Hração Decodificador de vídeo
BR112021011398-3A 2018-12-17 2019-12-17 Método e aparelho de codificação de vídeo BR112021011398A2 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862780771P 2018-12-17 2018-12-17
US62/780,771 2018-12-17
US201962848149P 2019-05-15 2019-05-15
US62/848,149 2019-05-15
PCT/US2019/066896 WO2020131900A1 (en) 2018-12-17 2019-12-17 Tile group assignment for raster scan and rectangular tile groups in video coding

Publications (1)

Publication Number Publication Date
BR112021011398A2 true BR112021011398A2 (pt) 2021-08-31

Family

ID=71101946

Family Applications (2)

Application Number Title Priority Date Filing Date
BR112021011398-3A BR112021011398A2 (pt) 2018-12-17 2019-12-17 Método e aparelho de codificação de vídeo
BR112021011413-0A BR112021011413A2 (pt) 2018-12-17 2019-12-17 Método e aparelho de codificação de vídeo

Family Applications After (1)

Application Number Title Priority Date Filing Date
BR112021011413-0A BR112021011413A2 (pt) 2018-12-17 2019-12-17 Método e aparelho de codificação de vídeo

Country Status (11)

Country Link
US (5) US11553191B2 (pt)
EP (2) EP3891986A4 (pt)
JP (3) JP7201820B2 (pt)
KR (2) KR20210095948A (pt)
CN (6) CN115665412A (pt)
AU (1) AU2019405497B2 (pt)
BR (2) BR112021011398A2 (pt)
CA (1) CA3123575A1 (pt)
MX (1) MX2021007198A (pt)
SG (2) SG11202106486XA (pt)
WO (2) WO2020131900A1 (pt)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113170201B (zh) * 2018-11-30 2024-04-12 夏普株式会社 用于对视频数据进行解码的方法和设备
US20200236377A1 (en) * 2019-01-22 2020-07-23 Tencent America LLC Method for tile group identification
CN110650357B (zh) * 2019-09-27 2023-02-10 腾讯科技(深圳)有限公司 视频解码方法及装置

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009033432A1 (en) * 2007-09-14 2009-03-19 Huawei Technologies Co., Ltd. A method and apparatus for video encoding and decoding
GB0823468D0 (en) * 2008-12-23 2009-01-28 Imagination Tech Ltd Display list control stream grouping in tile based 3D computer graphics systems
MX352139B (es) * 2011-03-10 2017-11-10 Velos Media Int Ltd Método de decodificación de video.
US9398307B2 (en) * 2011-07-11 2016-07-19 Sharp Kabushiki Kaisha Video decoder for tiles
US9584819B2 (en) 2011-10-24 2017-02-28 Qualcomm Incorporated Grouping of tiles for video coding
IN2014CN03712A (pt) 2011-10-31 2015-09-04 Mitsubishi Electric Corp
WO2013077236A1 (en) * 2011-11-21 2013-05-30 Canon Kabushiki Kaisha Image coding apparatus, image coding method, image decoding apparatus, image decoding method, and storage medium
US9270994B2 (en) * 2012-06-29 2016-02-23 Cisco Technology, Inc. Video encoder/decoder, method and computer program product that process tiles of video data
JP6214235B2 (ja) * 2012-07-02 2017-10-18 キヤノン株式会社 ファイル生成方法、ファイル生成装置、及びプログラム
CN104885456A (zh) * 2012-09-18 2015-09-02 Vid拓展公司 使用图块和图块组的感兴趣区域视频编码
CN104813662A (zh) * 2012-09-28 2015-07-29 诺基亚技术有限公司 用于视频编码和解码的装置、方法和计算机程序
US9749627B2 (en) * 2013-04-08 2017-08-29 Microsoft Technology Licensing, Llc Control data for motion-constrained tile set
US9648335B2 (en) * 2013-07-12 2017-05-09 Qualcomm Incorporated Bitstream restrictions on picture partitions across layers
US10419768B2 (en) * 2016-03-30 2019-09-17 Qualcomm Incorporated Tile grouping in HEVC and L-HEVC file formats
EP3422724B1 (en) * 2017-06-26 2024-05-01 Nokia Technologies Oy An apparatus, a method and a computer program for omnidirectional video
CN115955562A (zh) * 2017-11-29 2023-04-11 韩国电子通信研究院 采用环内滤波的图像编码/解码方法和装置
US11509937B2 (en) * 2018-04-09 2022-11-22 Sk Telecom Co., Ltd. Method and apparatus for encoding/decoding video

Also Published As

Publication number Publication date
EP3891985A1 (en) 2021-10-13
US20230108222A1 (en) 2023-04-06
US20230247208A1 (en) 2023-08-03
EP3891985A4 (en) 2022-03-30
KR20210095949A (ko) 2021-08-03
US20210321110A1 (en) 2021-10-14
WO2020131900A1 (en) 2020-06-25
WO2020131891A1 (en) 2020-06-25
JP7201821B2 (ja) 2023-01-10
US11553191B2 (en) 2023-01-10
JP2022513980A (ja) 2022-02-09
CN115665410A (zh) 2023-01-31
CN114710668A (zh) 2022-07-05
BR112021011413A2 (pt) 2021-08-31
AU2019405497B2 (en) 2023-06-01
CN113330746A (zh) 2021-08-31
CN115665411A (zh) 2023-01-31
EP3891986A4 (en) 2022-03-30
US20210314577A1 (en) 2021-10-07
AU2019405497A1 (en) 2021-07-22
JP2022513981A (ja) 2022-02-09
SG11202106484UA (en) 2021-07-29
MX2021007198A (es) 2021-07-21
CA3123575A1 (en) 2020-06-25
CN113196767A (zh) 2021-07-30
US11889087B2 (en) 2024-01-30
CN115665412A (zh) 2023-01-31
EP3891986A1 (en) 2021-10-13
CN114710668B (zh) 2023-05-12
KR20210095948A (ko) 2021-08-03
JP7201820B2 (ja) 2023-01-10
CN113330746B (zh) 2022-09-16
US11653005B2 (en) 2023-05-16
SG11202106486XA (en) 2021-07-29
US20240129494A1 (en) 2024-04-18
JP2023029423A (ja) 2023-03-03

Similar Documents

Publication Publication Date Title
BR112021013531A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes
CN112703736A (zh) 视频译码中用于子图像指示的条带和分块
BR112021008659A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes
BR112021012632A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes
US11889087B2 (en) Tile group assignment for raster scan and rectangular tile groups in video coding
US11425377B2 (en) Arbitrary and wrap-around tile grouping
BR122022009680A2 (pt) Método implementado em um codificador, dispositivo de codificação de vídeo, meio legível por computador não transitório e codificador
JP2023184565A (ja) ビデオエンコーダ、ビデオデコーダ、及び対応する方法
BR122022009674A2 (pt) Método implementado por um codificador, dispositivo e aparelho de codificação, sistema e meio para codificação
BR112021012649A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes
CN113243110A (zh) 视频译码中的显式地址指示
CN115567713B (zh) 基于子图像的解码方法、解码设备和存储码流的设备
RU2806278C2 (ru) Устройство и способ кодирования видео
BR122024003872A2 (pt) Codificador de vídeo, decodificador de vídeo e métodos correspondentes