BR112021016502A2 - Sistemas e métodos para aplicar filtros de desbloqueio a dados de vídeo reconstruídos - Google Patents

Sistemas e métodos para aplicar filtros de desbloqueio a dados de vídeo reconstruídos Download PDF

Info

Publication number
BR112021016502A2
BR112021016502A2 BR112021016502-9A BR112021016502A BR112021016502A2 BR 112021016502 A2 BR112021016502 A2 BR 112021016502A2 BR 112021016502 A BR112021016502 A BR 112021016502A BR 112021016502 A2 BR112021016502 A2 BR 112021016502A2
Authority
BR
Brazil
Prior art keywords
block
equal
video
luma
variable
Prior art date
Application number
BR112021016502-9A
Other languages
English (en)
Inventor
Kiran Mukesh Misra
Christopher Andrew Segall
Philip Cowan
Frank Bossen
Original Assignee
Sharp Kabushiki Kaisha
FG Innovation Company Limited
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sharp Kabushiki Kaisha, FG Innovation Company Limited filed Critical Sharp Kabushiki Kaisha
Publication of BR112021016502A2 publication Critical patent/BR112021016502A2/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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • 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/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • 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/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • H04N19/82Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/86Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness
    • 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
    • H04N19/14Coding unit complexity, e.g. amount of activity or edge presence estimation

Landscapes

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

Abstract

sistemas e métodos para aplicar filtros de desbloqueio a dados de vídeo reconstruídos. a presente invenção refere-se à codificação de vídeo e, mais particularmente, a técnicas para executar o desbloqueio de dados de vídeo reconstruídos. de acordo com um aspecto de uma invenção, um comprimento máximo do filtro é determinado com base em se um bloco p ou um bloco q tem uma borda que é perpendicular a um contorno de desbloqueio e cujo tamanho é maior ou igual a 32.

Description

Relatório Descritivo da Patente de Invenção para "SISTEMAS
E MÉTODOS PARA APLICAR FILTROS DE DESBLOQUEIO A DADOS DE VÍDEO RECONSTRUÍDOS". CAMPO TÉCNICO
[001] A presente invenção refere-se à codificação de vídeo e, mais particularmente, a técnicas para executar o desbloqueio de dados de vídeo reconstruídos.
ANTECEDENTES DA INVENÇÃO
[002] As capacidades de vídeo digital podem ser incorporadas a uma ampla gama de dispositivos, incluindo televisores digitais, computadores de mesa ou laptop, computadores tipo tablet, dispositivos de gravação digital, reprodutores de mídia digital, dispositivos de videogame, telefones celulares, incluindo os assim chamados smartphones, dispositivos de imageamento médico e similares. O vídeo digital pode ser codificado de acordo com um padrão de codificação de vídeo. Os padrões de codificação de vídeo definem o formato de um fluxo de bits compatível encapsulando dados de vídeo codificados. Um fluxo de bits compatível é uma estrutura de dados que pode ser recebida e decodificada por um dispositivo de decodificação de vídeo para gerar dados de vídeo reconstruídos. Os padrões de codificação de vídeo podem incorporar técnicas de compressão de vídeo. Exemplos de padrões de codificação de vídeo incluem ISO/IEC MPEG-4 Visual e UIT-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC) e codificação de vídeo de alta eficiência ("HEVC" - High- Efficiency Video Coding). A HEVC é descrita em High Efficiency Video Coding (HEVC), Rec. ITU-T H.265, dezembro de 2016, que está aqui incorporada a título de referência, e chamada de ITU-T H.265. Extensões e melhorias para UIT-T H.265 estão atualmente sendo consideradas para o desenvolvimento da próxima geração de padrões de codificação de vídeo. Por exemplo, o grupo de especialistas em codificação de vídeo ITU-T ("VCEG" - Video Coding Experts Group) e ISO/IEC (grupo de especialistas em imagens em movimento ("MPEG" - Moving Picture Experts Group)) (coletivamente chamados de equipe conjunta de exploração de vídeo ("JVET" - Joint Video Exploration Team)) estão trabalhando para padronizar a tecnologia de codificação de vídeo com uma capacidade de compressão que excede significativamente a do padrão HEVC atual.
O modelo de exploração conjunta 7 ("JEM 7" - Joint Exploration Model 7), a descrição do algoritmo do modelo de teste de exploração conjunta 7 (JEM 7), ISO/IEC JTC1/SC29/WG11 documento: JVET-G1001, julho de 2017, Turim, IT, que está incorporado a título de referência na presente invenção, descreve os recursos de codificação que estão sob estudo de modelo de teste coordenado pela JVET como potencialmente aprimorando a tecnologia de codificação de vídeo além das capacidades de ITU-T H.265. Deve-se notar que os recursos de codificação de JEM 7 são implementados no software de referência de JEM.
Como usado na presente invenção, o termo JEM pode se referir coletivamente a algoritmos incluídos em JEM 7 e implementações de software de referência de JEM.
Além disso, em resposta a uma "Chamada conjunta para propostas sobre compressão de vídeo com capacidades além de HEVC" ("Joint Call for Proposals on Video Compression with Capabilities beyond HEVC"), conjuntamente emitida por VCEG e MPEG, múltiplas descrições de codificação de vídeo foram propostas por vários grupos no 10° Encontro de ISO/IEC JTC1/SC29/WG11, 16 a 20 de abril de 2018, San Diego, CA, EUA.
A partir das múltiplas descrições de codificação de vídeo, um texto preliminar de uma especificação de codificação de vídeo é descrito em "Versatile Video Coding (Draft 1)", 10° Encontro de ISO/IEC JTC1/SC29/WG11, 16 a 20 de abril de 2018, San Diego, CA, EUA, documento JVET-J1001-v2, que está incorporado a título de referência na presente invenção e é chamado de JVET-J1001. O desenvolvimento atual de um padrão de codificação de vídeo de próxima geração pelos VCEG e MPEG é chamado de projeto de codificação de vídeo versátil ("VVC" - Versatile Video Coding). "Versatile Video Coding (Draft 4)," 13° Encontro de ISO/IEC JTC1/SC29/WG11, 9 a 18 de janeiro de 2019, Marraquexe, MA, documento JVET-M1001-v1, que está incorporado à presente invenção a título de referência e é chamado de JVET-M1001, representa a iteração atual do texto de uma especificação de codificação de vídeo correspondente ao projeto VVC.
[003] As técnicas de compressão de vídeo possibilitam que os requisitos de dados para armazenar e transmitir dados de vídeo sejam reduzidos. As técnicas de compressão de vídeo podem reduzir os requisitos de dados ao explorarem as redundâncias inerentes em uma sequência de vídeo. As técnicas de compressão de vídeo podem subdividir uma sequência de vídeo em porções sucessivamente menores (isto é, grupos de imagens dentro de uma sequência de vídeo, uma imagem dentro de um grupo de imagens, regiões dentro de uma imagem, sub-regiões dentro de regiões etc.). As técnicas de codificação de intrapredição (por exemplo, técnicas de predição espacial em uma imagem) e técnicas de interpredição (isto é, técnicas interimagens (temporais)) podem ser usadas para gerar valores de diferença entre uma unidade de dados de vídeo a ser codificada e uma unidade de referência de dados de vídeo. Os valores de diferença podem ser chamados de dados residuais. Os dados residuais podem ser codificados como coeficientes de transformada quantizados. Elementos de sintaxe podem relacionar dados residuais e a uma unidade de codificação de referência (por exemplo, índices de modo de intrapredição, e informações de movimento). Dados residuais e elementos de sintaxe podem ser codificados por entropia. Dados residuais e elementos de sintaxe codificados por entropia podem ser incluídos em estruturas de dados que formam um fluxo de bits compatível.
SUMÁRIO DA INVENÇÃO
[004] Em um exemplo, um método para filtrar dados de vídeo reconstruídos compreende: receber uma matriz de amostras de luma reconstruídas incluindo um bloco P e um bloco Q adjacente a um contorno de desbloqueio; determinar se o bloco P ou o bloco Q tem uma borda perpendicular ao contorno de desbloqueio e cujo tamanho é maior ou igual a 32; determinar o comprimento máximo do filtro com base em se o bloco P ou o bloco Q tem a borda; e desbloquear a matriz de amostras de luma reconstruídas com base no comprimento máximo determinado do filtro.
[005] Em um exemplo, um dispositivo para filtrar dados de vídeo reconstruídos compreende um ou mais processadores configurados para: receber uma matriz de amostras de luma reconstruídas incluindo um bloco P e um bloco Q adjacente a um contorno de desbloqueio; determinar se o bloco P ou o bloco Q tem uma borda perpendicular ao contorno de desbloqueio e cujo tamanho é maior ou igual a 32; determinar o comprimento máximo do filtro com base em se o bloco P ou o bloco Q tem a borda; e desbloquear a matriz de amostras de luma reconstruídas com base no comprimento máximo determinado do filtro.
BREVE DESCRIÇÃO DOS DESENHOS
[006] A Figura 1 é um diagrama conceitual que ilustra um exemplo de grupo de imagens codificadas de acordo com um particionamento em múltiplas árvores quádruplas de acordo com uma ou mais técnicas da presente divulgação.
[007] A Figura 2A é um diagrama conceitual que ilustra exemplos de codificação de um bloco de dados de vídeo de acordo com uma ou mais técnicas da presente divulgação.
[008] A Figura 2B é um diagrama conceitual que ilustra exemplos de codificação de um bloco de dados de vídeo de acordo com uma ou mais técnicas da presente divulgação.
[009] A Figura 3 é um diagrama conceitual que ilustra um exemplo de formato de amostragem de componente de vídeo que pode ser usado de acordo com uma ou mais técnicas da presente divulgação.
[0010] A Figura 4A é um diagrama conceitual que ilustra blocos de dados de vídeo incluindo um contorno de desbloqueio de acordo com uma ou mais técnicas da presente divulgação.
[0011] A Figura 4B é um diagrama conceitual que ilustra blocos de dados de vídeo incluindo um contorno de desbloqueio de acordo com uma ou mais técnicas da presente divulgação.
[0012] A Figura 5 é um exemplo de tabela que pode ser usada para determinar parâmetros de desbloqueio de acordo com uma ou mais técnicas da presente divulgação.
[0013] A Figura 6A é um diagrama conceitual que ilustra blocos de dados de vídeo divididos em intrassubpartições de acordo com uma ou mais técnicas da presente divulgação.
[0014] A Figura 6B é um diagrama conceitual que ilustra blocos de dados de vídeo divididos em intrassubpartições de acordo com uma ou mais técnicas da presente divulgação.
[0015] A Figura 7 é um diagrama de blocos que ilustra um exemplo de sistema que pode ser configurado para codificar e decodificar dados de vídeo de acordo com uma ou mais técnicas da presente divulgação.
[0016] A Figura 8 é um diagrama de blocos que ilustra um exemplo de codificador de vídeo que pode ser configurado para codificar dados de vídeo de acordo com uma ou mais técnicas da presente divulgação.
[0017] A Figura 9 é um diagrama de blocos que ilustra um exemplo de decodificador de vídeo que pode ser configurado para decodificar dados de vídeo de acordo com uma ou mais técnicas da presente divulgação.
[0018] A Figura 10A é um diagrama conceitual que ilustra blocos de dados de vídeo divididos em transformadas de sub-bloco de acordo com uma ou mais técnicas da presente divulgação.
[0019] A Figura 10B é um diagrama conceitual que ilustra blocos de dados de vídeo divididos em transformadas de sub-bloco de acordo com uma ou mais técnicas da presente divulgação.
DESCRIÇÃO DAS MODALIDADES
[0020] Em geral, esta divulgação descreve várias técnicas para codificar dados de vídeo. Em particular, a presente divulgação descreve técnicas para executar o desbloqueio de dados de vídeo reconstruídos. Em particular, a presente divulgação descreve técnicas para executar o desbloqueio em casos em que um ou mais blocos de vídeo são codificados de acordo com um modo de codificação intra subpartição. A execução do desbloqueio de acordo com as técnicas aqui descritas pode ser particularmente útil para reduzir artefatos visuais nos casos em que um ou mais blocos de vídeo são codificados de acordo com o modo de codificação intra subpartição, o que melhora o desempenho do codificador de vídeo. Deve-se notar que, embora as técnicas da presente divulgação sejam descritas com relação a ITU-T H.264, ITU-T H.265, JEM e JVET- M1001, as técnicas da presente divulgação são geralmente aplicáveis à codificação de vídeo. Por exemplo, as técnicas de codificação descritas na presente invenção podem ser incorporadas a sistemas de codificação de vídeo, (incluindo sistemas de codificação de vídeo baseados em padrões futuros de codificação de vídeo) incluindo estruturas de bloco de vídeo, técnicas de intrapredição, técnicas de interprevisão, técnicas de transformada, técnicas de filtragem e/ou técnicas de codificação por entropia que não aquelas incluídas em ITU-T H.265, JEM e JVET-M1001. Dessa forma, a referência a ITU-T H.264, ITU-T H.265, JEM e/ou JVET- M1001 serve a propósitos descritivos e não deve ser interpretada como limitadora do escopo das técnicas descritas na presente invenção. Além disso, deve-se notar que a incorporação a título de referência de documentos na presente invenção serve a propósitos descritivos e não deve ser interpretada para limitar ou criar ambiguidade com relação a termos usados na presente invenção. Por exemplo, no caso em que uma referência incorporada fornece uma definição diferente de um termo que outra referência incorporada e/ou como o termo é usado na presente invenção, o termo deve ser interpretado de uma maneira que inclua amplamente cada respectiva definição e/ou de uma maneira que inclua cada uma das definições específicas na alternativa.
[0021] Em um exemplo, um método para filtrar dados de vídeo reconstruídos compreende receber uma matriz de valores de amostra incluindo blocos de vídeo reconstruídos adjacentes para um componente de dados de vídeo, determinar um valor de intensidade de contorno para um contorno entre os blocos de vídeo reconstruídos adjacentes, sendo que o contorno é um contorno de intra subpartição, e modificar valores de amostra nos blocos de vídeo reconstruídos adjacentes com base no valor de intensidade de contorno determinado e de acordo com um filtro de desbloqueio.
[0022] Em um exemplo, um dispositivo para codificação de vídeo compreende um ou mais processadores configurados para receber uma matriz de valores de amostra incluindo blocos de vídeo reconstruídos adjacentes para um componente de dados de vídeo, determinar um valor de intensidade de contorno para um contorno entre os blocos de vídeo reconstruídos adjacentes, sendo que o contorno é um contorno intra subpartição e modifica valores de amostra nos blocos de vídeo reconstruídos adjacentes com base no valor de intensidade de contorno determinado e de acordo com um filtro de desbloqueio.
[0023] Em um exemplo, uma mídia de armazenamento não transitório legível por computador compreende instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores de um dispositivo recebam uma matriz de valores de amostra incluindo blocos de vídeo reconstruídos adjacentes para um componente de dados de vídeo, determinar um valor de intensidade de contorno para um contorno entre os blocos de vídeo reconstruídos adjacentes, sendo que o contorno é um contorno de intra subpartição, e modificar valores de amostra nos blocos de vídeo reconstruídos adjacentes com base no valor de intensidade de contorno determinado e de acordo com um filtro de desbloqueio.
[0024] Em um exemplo, um aparelho compreende meios para receber uma matriz de valores de amostra incluindo blocos de vídeo reconstruídos adjacentes para um componente de dados de vídeo, meios para determinar um valor de intensidade de contorno para um contorno entre os blocos de vídeo reconstruídos adjacentes, sendo que o contorno é um contorno intra subpartição e meios para modificar valores de amostra nos blocos de vídeo reconstruídos adjacentes com base no valor de intensidade de contorno determinado e de acordo com um filtro de desbloqueio.
[0025] Os detalhes de um ou mais exemplos são apresentados nos desenhos em anexo e na descrição abaixo. Outros recursos, objetivos e vantagens ficarão evidentes a partir da descrição e dos desenhos, bem como a partir das reivindicações.
[0026] O conteúdo de vídeo inclui tipicamente sequências de vídeo que compreendem uma série de quadros (ou figuras). Uma série de quadros pode ser chamada também de grupo de imagens ("GOP" - group of pictures). Cada quadro ou imagem de vídeo pode ser dividido em uma ou mais regiões. As regiões podem ser definidas de acordo com uma unidade de base (por exemplo, um bloco de vídeo) e conjuntos de regras que definem uma região (por exemplo, uma região precisa ser um número inteiro de blocos de vídeo dispostos em um retângulo). Como usado na presente invenção, o termo bloco de vídeo pode se referir genericamente a uma área de uma imagem ou pode, mais especificamente, se referir à maior matriz de valores de amostra que pode ser preditivamente codificada, subdivisões da mesma e/ou estruturas correspondentes.
Além disso, o termo bloco de vídeo atual pode se referir a uma área de uma imagem sendo codificada ou decodificada.
Um bloco de vídeo pode ser definido como uma matriz de valores de amostra que podem ser codificados de modo preditivo.
Deve-se notar que, em alguns casos, os valores de pixel podem ser descritos como incluindo valores de amostra para os respectivos componentes de dados de vídeo, que podem ser chamados também de componentes de cor (por exemplo, componentes luma (Y) e saturação (Cb e Cr) ou componentes vermelho, verde e azul). Deve-se notar que, em alguns casos, os termos valor de pixel e valor de amostra são usados de forma intercambiável.
Adicionalmente, em alguns casos, um pixel ou amostra pode ser chamado de pel.
Um formato de amostragem de vídeo, que pode ser chamado também de formato de saturação, pode definir o número de amostras de saturação incluídas em um bloco de vídeo em relação ao número de amostras de luma incluídas em um bloco de vídeo.
Por exemplo, para o formato de amostragem 4:2:0, a taxa de amostragem para o componente luma é duas vezes aquela dos componentes croma para ambas as direções, horizontal e vertical.
Como resultado, para um bloco de vídeo formatado de acordo com o formato 4:2:0, a largura e altura de uma matriz de amostras para o componente luma são duas vezes aquelas de cada matriz de amostras para os componentes de saturação.
A Figura 3 é um diagrama conceitual que ilustra um exemplo de bloco de vídeo 16x16 formatado de acordo com um formato de amostra 4:2:0. A Figura 3 ilustra a posição relativa das amostras de saturação em relação às amostras de componente luma dentro de um bloco de vídeo.
Um bloco de vídeo é tipicamente definido de acordo com o número de amostras de luma horizontais e verticais. Dessa forma, conforme ilustrado na Figura 3, um bloco de vídeo 16x16 formatado de acordo com o formato de amostra 4:2:0 inclui amostras 16x16 de componentes luma e amostras 8x8 para cada componente de saturação. Para um bloco de vídeo formatado de acordo com o formato 4:2:2, a largura de uma matriz de amostras para o componente luma é duas vezes a largura de uma matriz de amostras para cada componente de saturação, mas a altura da matriz de amostras para o componente luma é igual à altura de uma matriz de amostras para cada componente de saturação. Além disso, para um bloco de vídeo formatado de acordo com o formato 4:4:4, uma matriz de amostras para o componente luma tem a mesma largura e altura que uma matriz de amostras para cada componente de saturação.
[0027] Os blocos de vídeo podem ser ordenados dentro de uma imagem de acordo com um padrão de varredura (por exemplo, uma varredura Raster). Um codificador de vídeo pode executar codificação preditiva em blocos de vídeo e subdivisões dos mesmos. Os blocos de vídeo e subdivisões dos mesmos podem ser chamados de nós. ITU-T H.264 especifica um macrobloco que inclui 16x16 amostras de luma. Ou seja, em ITU-T H.264, uma imagem é segmentada em macroblocos. ITU- T H.265 especifica uma estrutura de Unidade de Árvore de Codificação análoga ("CTU" - Coding Tree Unit) (também chamada de maior unidade de codificação ("LCU" - Largest Coding Unit)). Em ITU-T H.265, as imagens são segmentadas em CTUs. Em ITU-T H.265, para uma imagem, um tamanho de CTU pode ser definido como incluindo amostras de luma 16x16, 32x32 ou 64x64. Em UIT-T H.265, uma CTU é composta por respectivos Blocos de Árvore de Codificação ("CTBs" - Coding Tree Blocks) para cada componente de dados de vídeo (por exemplo luma (Y) e saturação (Cb e Cr)). Deve-se notar que o vídeo que tem um componente luma e os dois componentes de saturação correspondentes pode ser descrito como tendo dois canais, isto é, um canal de luma e um canal de saturação. Além disso, em UIT-T H.265, uma CTU pode ser particionada de acordo com uma estrutura de particionamento quadtree (QT), o que resulta nos CTBs da CTU sendo particionados em blocos de codificação (CB). Ou seja, em UIT-T H.265, uma CTU pode ser particionada em nós folhas de quadtree. De acordo com UIT-T H.265, um CB de luma juntamente com dois CBs de croma correspondentes e elementos de sintaxe associados são chamados de unidade de codificação ("CU" - coding unit). Em UIT-T H.265, um tamanho mínimo permitido de um CB pode ser sinalizado. Em UIT-T H.265, o menor tamanho mínimo permitido de um CB de luma é de amostras de luma de 8x8. Em UIT-T H.265, a decisão de codificar uma área de imagem com o uso de intraprevisão ou interprevisão é feita no nível de CU.
[0028] Em UIT-T H.265, uma CU é associada a uma estrutura de unidade de previsão ("PU" - prediction unit) que tem sua raiz na CU. Em UIT-T H.265, estruturas de PU possibilitam que CBs de luma e croma sejam divididos para propósitos de gerar amostras de referência correspondentes. Ou seja, em UIT-T H.265, CBs de luma e saturação podem ser divididos em respectivos blocos de predição ("PBs" - prediction blocks) de luma e saturação, em que um PB inclui um bloco de valores de amostra para que a mesma predição seja aplicada. Em UIT-T H.265, um CB pode ser particionado em 1, 2 ou 4 PBs. UIT-T H.265 suporta tamanhos de PB de amostras de 64 x 64 até amostras de 4 x 4. No ITU-T H.265, PBs quadrados são suportados para intrapredição, onde um CB pode formar o PB ou o CB pode ser dividido em quatro PBs quadrados. Em UIT-T H.265, além dos PBs quadrados, PBs retangulares são suportados para interpredição, em que um CB pode ser reduzido vertical ou horizontalmente pela metade para formar PBs. Além disso, deve-se notar que em ITU-T H.265, para interpredição, são suportadas quatro partições assimétricas de PB, sendo que o CB é particionado em dois PBs com 1 quarto da altura (no topo ou no fundo) ou da largura (na esquerda ou na direita) do CB. Dados de intraprevisão (por exemplo elementos de sintaxe de modo de intraprevisão) ou dados de interprevisão (por exemplo elementos de sintaxe de dados de movimento) correspondentes a um PB são usados para produzir valores de amostra previstos e/ou de referência para o PB.
[0029] Conforme descrito acima, cada quadro ou imagem de vídeo pode ser dividido em uma ou mais regiões. Por exemplo, de acordo com a norma ITU-T H.265, cada quadro ou imagem de vídeo pode ser particionado de modo a incluir uma ou mais fatias, e adicionalmente particionado para incluir um ou mais ladrilhos, sendo que cada fatia inclui uma sequência de CTUs (por exemplo, em ordem de varredura raster) e sendo que um ladrilho é uma sequência de CTUs que corresponde a uma área retangular de uma imagem. Deve-se notar que uma fatia, em ITU-T H.265, é uma sequência de um ou mais segmentos de fatia começando com um segmento de fatia independente e contendo todos os segmentos de fatia dependentes subsequentes (se houver algum) que precedem o próximo segmento de fatia independente (se houver algum) na mesma unidade de acesso. Um segmento de fatia, como uma fatia, é uma sequência de CTUs. Dessa forma, em alguns casos, os termos fatia e segmento de fatia podem ser usados de forma intercambiável para indicar uma sequência de CTUs disposta em uma ordem de varredura Raster. Adicionalmente, deve-se notar que em ITU-T H.265, um ladrilho pode consistir em CTUs contidas em mais de uma fatia e uma fatia pode consistir em unidades de árvore de codificação contidas em mais de um ladrilho. No entanto, ITU-T H.265 prevê que uma ou ambas as condições a seguir devem ser cumpridas: (1) Todas as CTUs em uma fatia pertencem ao mesmo ladrilho; e (2) Todas as CTUs em um ladrilho pertencem à mesma fatia. Com relação a JVET-M1001, as fatias devem consistir em um número inteiro de ladrilhos completos, em vez de consistir apenas em um número inteiro de CTUs completas. Como tal,
uma fatia que inclui um conjunto de CTUs que não formam uma região retangular de uma imagem pode ou não ser suportada em algumas técnicas de codificação de vídeo. Além disso, uma fatia que é necessária para consistir em um número inteiro de ladrilhos completos é chamada de grupo de ladrilhos. As técnicas descritas na presente invenção podem ser aplicáveis a fatias, ladrilhos e/ou grupos de ladrilhos. A Figura 1 é um diagrama conceitual que ilustra um exemplo de um grupo de imagens que inclui grupos de ladrilhos. No exemplo ilustrado na Figura 1, a Pic3 é ilustrada como incluindo dois grupos de ladrilhos (isto é, o Grupo de Ladrilhos1 e o Grupo de Ladrilhos2). Deve-se notar que, em alguns casos, o grupo de ladrilhos1 e o grupo de ladrilhos2 podem ser classificados como fatias e/ou ladrilhos.
[0030] JEM especifica uma CTU que tem um tamanho máximo de amostras de luma de 256 x 256. JEM especifica uma estrutura de bloco de quadtree mais árvore binária ("QTBT" - quadtree plus binary tree). Em JEM, a estrutura QTBT habilita nós de folhas de quadtree a serem adicionalmente particionados por uma estrutura de árvore binária ("BT" - binary tree). Ou seja, em JEM, a estrutura de árvore binária habilita nós de folhas de quadtree a serem recursivamente divididos vertical ou horizontalmente. Em JVET-M1001, as CTUs são particionadas de acordo com uma estrutura de "quadtree" mais árvore de múltiplos tipos ("QTMT" - quadtree plus multi-type tree). A QTMT em JVET- M1001 é similar à QTBT em JEM. Entretanto, em JVET-M1001, além de indicar divisões binárias, a árvore de múltiplos tipos pode indicar as chamadas divisões ternárias (ou de árvore tripla ("TT" - triple tree)). Uma divisão ternária divide um bloco vertical ou horizontalmente em três blocos. No caso de uma divisão TT vertical, um bloco é dividido em um quarto de sua largura a partir da borda esquerda e em um quarto de sua largura a partir da borda direita e no caso de uma divisão TT horizontal, um bloco está em um quarto de sua altura a partir da borda superior e em um quarto de sua altura a partir da borda inferior. Novamente com referência à Figura 1, a Figura 1 ilustra um exemplo de uma CTU sendo dividida em nós de folha da "quadtree" e nós de folha da "quadtree" sendo adicionalmente particionados de acordo com uma divisão BT ou uma divisão TT. Ou seja, na Figura 1, as linhas tracejadas indicam divisões binárias e ternárias adicionais em uma "quadtree".
[0031] Para codificação de intraprevisão, um modo de intraprevisão pode especificar o local de amostras de referência em uma imagem. Em UIT-T H.265, os modos de intrapredição possíveis definidos incluem um modo de predição plano (isto é, encaixe na superfície), um modo de predição DC (isto é, média geral plana) (predMode: 1) e 33 modos de predição angulares (predMode: 2 a 34). Em JEM, os modos de intrapredição possíveis definidos incluem um modo de predição plano, um modo de predição DC e 65 modos de predição angulares. Deve-se notar que modos de previsão plano e DC podem ser chamados de modos de previsão não direcionais e que modos de previsão angulares podem ser chamados de modos de previsão direcionais. Deve-se notar que as técnicas descritas na presente invenção podem ser geralmente aplicáveis independentemente do número de modos de previsão possíveis definidos.
[0032] Para codificação interprevisão, uma ou mais imagens decodificadas anteriormente, isto é, uma imagem de referência é determinada e um vetor de movimento ("MV" - motion vector) identifica amostras na imagem de referência que são usadas para gerar uma previsão para um bloco de vídeo atual. Por exemplo, pode ser previsto um bloco de vídeo atual com o uso de valores de amostra de referência localizados em uma ou mais imagens anteriormente codificadas e um vetor de movimento é usado para indicar a localização do bloco de referência em relação ao bloco de vídeo atual. Um vetor de movimento pode descrever, por exemplo, um componente de deslocamento horizontal do vetor de movimento (isto é, MVx), um componente de deslocamento vertical do vetor de movimento (isto é, MVy) e uma resolução para o vetor de movimento (por exemplo, precisão de um quarto de pixel, precisão de meio pixel, precisão de um pixel, precisão de dois pixels, precisão de quatro pixels). As imagens decodificadas anteriormente, que podem incluir a produção de imagens antes ou depois de uma imagem atual, podem ser organizadas em uma ou mais listas de imagens de referência e identificadas com o uso de um valor de índice de imagem de referência.
Adicionalmente, na codificação interprevisão, a uniprevisão se refere a gerar uma previsão com o uso de valores de amostra a partir de uma única imagem de referência e a biprevisão se refere a gerar uma previsão com o uso de respectivos valores de amostra a partir de duas imagens de referência.
Ou seja, em uniprevisão, uma única imagem de referência e vetor de movimento correspondente são usados para gerar uma previsão para um bloco de vídeo atual, e em biprevisão, uma primeira imagem de referência e um primeiro vetor de movimento correspondente e uma segunda imagem de referência e um segundo vetor de movimento correspondente são usados para gerar uma previsão para um bloco de vídeo atual.
Na biprevisão, os respectivos valores de amostra são combinados (por exemplo, adicionados, arredondados e cortados, ou ponderados de acordo com os pesos) para gerar uma previsão.
As imagens e regiões da mesma podem ser classificadas com base em quais tipos de modos de previsão podem ser utilizados para codificar blocos de vídeo da mesma.
Ou seja, para regiões que têm um tipo B (por exemplo, um grupo de ladrilhos B), é possível usar os modos de bipredição, unipredição e intrapredição, para regiões que têm um tipo P (por exemplo, um grupo de ladrilhos P), é possível usar os modos de unipredição e intrapredição, e para regiões que têm um tipo I (por exemplo, um grupo de ladrilhos I), apenas os modos de intrapredição podem ser usados. Conforme descrito acima, as imagens de referência são identificadas através de índices de referência. Por exemplo, para um ladrilho P, há uma única lista de imagens de referência, RefPicList0 e para um ladrilho B, há uma segunda lista de imagens de referência independente, RefPicList1, em adição à RefPicList0. Deve-se notar que para a unipredição em um grupo de ladrilhos B, pode-se usar uma dentre RefPicList0 e RefPicList1 para gerar uma predição. Adicionalmente, deve-se notar que durante o processo de decodificação, no início da decodificação de uma imagem, a(s) lista(s) de imagens de referência é(são) gerada(s) a partir da imagem decodificada anteriormente armazenada em um buffer de imagens decodificadas ("DPB" - Decoded Picture Buffer).
[0033] Adicionalmente, um padrão de codificação pode suportar vários modos de previsão de vetor de movimento. A predição do vetor de movimento possibilita que o valor de um vetor de movimento para um bloco de vídeo atual seja derivado com base em outro vetor de movimento. Por exemplo, um conjunto de blocos candidatos que tem informações de movimento associadas pode ser derivado de blocos espaciais vizinhos e blocos temporais vizinhos para o bloco de vídeo atual. Adicionalmente, as informações de movimento geradas (ou padrão) podem ser usadas para a predição do vetor de movimento. Exemplos de previsão de vetor de movimento incluem previsão de vetor de movimento avançada ("AMVP" - advanced motion vector prediction), previsão de vetor de movimento temporal ("TMVP" - temporal motion vector prediction), o chamado modo de "integração" e a inferência de movimento de "pular" e "direcionar". Adicionalmente, outros exemplos de previsão de vetor de movimento incluem previsão de vetor de movimento temporal avançado ("PVMTA" - advanced temporal motion vector prediction) e previsão de vetor de movimento temporal espacial ("PVMTA" - Spatial-temporal motion vector prediction). Para a predição do vetor de movimento, tanto um codificador de vídeo como um decodificador de vídeo executam o mesmo processo para derivar um conjunto de candidatos. Dessa forma, para um bloco de vídeo atual, o mesmo conjunto de candidatos é gerado durante a codificação e decodificação. Para o modo de integração, todas as informações de movimento (isto é, valores de deslocamento de vetor de movimento, índices de imagem de referência e listas de imagens de referência) associadas a um candidato selecionado são herdadas como as informações de movimento do bloco de vídeo atual. Ou seja, em um codificador de vídeo, um bloco candidato é selecionado a partir do conjunto derivado de candidatos e um valor de índice incluído no fluxo de bits pode indicar o candidato selecionado e, portanto, as informações de movimento do bloco de vídeo atual. Para um modo de não integração, as informações de vetor de movimento para um candidato selecionado podem ser usadas como um preditor de vetor de movimento (MVP) para o vetor de movimento do bloco de vídeo atual. Ou seja, em um codificador de vídeo, um bloco candidato é selecionado a partir do conjunto derivado de candidatos, e um valor de índice indicando o candidato selecionado e um valor delta (isto é, um delta do vetor de movimento (MVD)) indicando a diferença entre o preditor do vetor de movimento e o vetor de movimento para o PB atual podem estar incluídos no fluxo de bits. Adicionalmente, para um modo de não integração, os elementos de sintaxe que identificam uma imagem de referência são incluídos no fluxo de bits.
[0034] Conforme descrito acima, dados de intraprevisão ou dados de interprevisão são usados para produzir valores de amostra de referência para um bloco de valores de amostra. A diferença entre valores de amostra incluídos em um PB atual, ou outro tipo de estrutura de área de imagem, e amostras de referência associadas (por exemplo, aquelas geradas com o uso de uma previsão) pode ser chamada de dados residuais. Os dados residuais podem incluir as respectivas matrizes de valores de diferença correspondentes a cada componente de dados de vídeo. Os dados residuais podem estar no domínio de pixel. Uma transformada, como uma transformada discreta de cosseno (DCT), uma transformada discreta de seno (DST), uma transformada de número inteiro, uma transformada de ondeleta ou uma transformada conceitualmente similar, pode ser aplicada a uma matriz de valores de diferença de pixel para gerar coeficientes de transformada. Deve-se notar que em ITU-T H.265 e JVET-L 1001, uma CU é associada a uma estrutura de unidade de transformada ("TU" - Transform Unit) que tem sua raiz no nível de CU. Ou seja, uma matriz de valores de diferença pode ser particionada para fins de geração de coeficientes de transformada (por exemplo, quatro transformadas 8x8 podem ser aplicadas a uma matriz 16x16 de valores residuais). Para cada componente de dados de vídeo, tais subdivisões de valores de diferença podem ser chamadas de blocos de transformação ("TBs" - Transform Blocks). Deve-se notar que em alguns casos, uma transformada de núcleo e uma transformada secundária subsequente podem ser aplicadas (no codificador de vídeo) para gerar coeficientes de transformada. Para um decodificador de vídeo, a ordem de transformadas é invertida. Deve-se notar que no documento JVET-M1001, uma unidade de codificação incluída em um grupo de blocos P ou B pode ser codificada de acordo com um modo de omissão de CU, em que quando o modo de omissão de CU é indicado, a unidade de codificação é codificada de acordo com o subconjunto de modos de predição de vetor de movimento e a unidade de codificação é codificada a partir da predição diretamente, isto é, não são usados dados residuais para codificar o bloco de vídeo.
[0035] Um processo de quantificação pode ser executado em coeficientes de transformada ou valores de amostra residual diretamente (por exemplo, no caso de quantificação de codificação de paleta). A quantização aproxima coeficientes de transformada por amplitudes restritas a um conjunto de valores especificados. A quantificação essencialmente escala coeficientes de transformada para variar a quantidade de dados necessários para representar um grupo de coeficientes de transformada. A quantificação pode incluir a divisão de coeficientes de transformada (ou valores resultantes da adição de um valor de deslocamento aos coeficientes de transformada) por um fator de alteração de escala de quantificação e quaisquer funções de arredondamento associadas (por exemplo, arredondamento até o número inteiro mais próximo). Coeficientes de transformada quantizados podem ser chamados de valores de nível de coeficiente. A quantificação inversa (ou "desquantificação") pode incluir a multiplicação de valores de nível de coeficiente pelo fator de alteração de escala de quantificação e quaisquer operações recíprocas de arredondamento ou adição de deslocamento. Deve-se notar que, como usado na presente invenção, o termo processo de quantificação em alguns casos pode se referir à divisão por um fator de escala para gerar valores de nível e a multiplicação por um fator de escala para recuperar coeficientes de transformada em alguns casos. Ou seja, um processo de quantização pode se referir a quantização em alguns casos e quantização inversa em alguns casos. Adicionalmente, deve-se notar que embora em alguns dos exemplos abaixo os processos de quantificação sejam descritos em relação a operações aritméticas associadas à notação decimal, tais descrições servem a propósitos ilustrativos e não devem ser interpretadas como limitadoras. Por exemplo, as técnicas aqui descritas podem ser implementadas em um dispositivo com o uso de operações binárias e similares. Por exemplo, as operações de multiplicação e divisão aqui descritas podem ser implementadas com o uso de operações de deslocamento de bit e similares.
[0036] Os coeficientes de transformada quantificados e os elementos de sintaxe (por exemplo, elementos de sintaxe que indicam uma estrutura de codificação para um bloco de vídeo) podem ser codificados por entropia de acordo com uma técnica de codificação por entropia.
Um processo de codificação por entropia inclui valores de codificação de elementos de sintaxe com o uso de algoritmos de compressão de dados sem perdas.
Exemplos de técnicas de codificação por entropia incluem codificação de comprimento variável adaptável de conteúdo ("CAVLC" - content adaptive variable length coding), codificação aritmética binária adaptativa de contexto ("CABAC" - context adaptive binary arithmetic coding), codificação de entropia de particionamento de intervalo de probabilidade ("PIPE" - probability interval partitioning entropy coding) e similares.
Coeficientes de transformada quantificados codificados por entropia e elementos de sintaxe codificados por entropia correspondentes podem formar um fluxo de bits compatível que pode ser usado para reproduzir dados de vídeo em um decodificador de vídeo.
Um processo de codificação por entropia, por exemplo, CAB AC, pode incluir executar uma binarização em elementos de sintaxe.
Binarização se refere ao processo de converter um valor de um elemento de sintaxe em uma série de um ou mais bits.
Esses bits podem ser chamados de "bins". A binarização pode incluir uma ou uma combinação das seguintes técnicas de codificação: codificação de comprimento fixo, codificação unária, codificação unária truncada, codificação Rice truncada, codificação de Golomb, codificação exponencial de Golomb de ordem k e codificação de Golomb-Rice.
Por exemplo, a binarização pode incluir representar o valor de número inteiro de 5 para um elemento de sintaxe como 00000101 com o uso de uma técnica de binarização de comprimento fixo de 8 bits ou representar o valor de número inteiro de 5 como 11110 com o uso de uma técnica de binarização de codificação unária.
Como usado aqui, cada um dos termos de codificação de comprimento fixo,
codificação unária, codificação unária truncada, codificação de Rice truncada, codificação de Golomb, codificação de Golomb exponencial de k-ésima ordem e codificação de Golomb-Rice pode se referir a implementações gerais dessas técnicas e/ou implementações mais específicas dessas técnicas de codificação. Por exemplo, uma implementação de codificação de Golomb-Rice pode ser especificamente definida de acordo com um padrão de codificação de vídeo. No exemplo de CAB AC, para um bin específico, um contexto fornece um valor de estado mais provável (MPS) para o bin (isto é, um MPS para um bin é um dentre 0 e 1) e um valor de probabilidade da caixa sendo o MPS ou o estado menos provável (LPS). Por exemplo, um contexto pode indicar que o MPS de um bin é 0 e a probabilidade de o bin ser 1 é de 0,3. Deve-se notar que um contexto pode ser determinado com base nos valores de bins anteriormente codificados incluindo receptáculos no elemento de sintaxe atual e elementos de sintaxe anteriormente codificados. Por exemplo, os valores de elementos de sintaxe associados a blocos de vídeo vizinhos podem ser usados para determinar um contexto para um bin atual.
[0037] Com relação às equações usadas na presente invenção, os operadores aritméticos a seguir podem ser usados: + Adição - Subtração * Multiplicação, incluindo multiplicação de matrizes xy Exponenciação. Especifica x à potência de y. Em outros contextos, essa notação é usada para sobrescrito, não destinada à interpretação como exponenciação. / Divisão de número inteiro com truncamento do resultado em direção a zero. Por exemplo, 7/4 e -7 / -4 são truncados para 1 e -7/4 e 7 / -4 são truncados para -1.
÷ usado para denotar a divisão em equações matemáticas em que se pretende que não haja nenhum truncamento ou arredondamento. 𝑥 usado para denotar a divisão em equações matemáticas em que se 𝑦 pretende que não haja nenhum truncamento ou arredondamento. x%y Módulo. Resto de x dividido por y, definido apenas para os números inteiros x e y com x >= 0 e y > 0.
[0038] Além disso, os operadores lógicos a seguir podem ser usados: x && y lógica booleana "e" de x e y x | | y lógica booleana "ou" de x e y ! Lógica booleana "não" x ? y : z Se x for VERDADEIRO ou não igual a 0, avalia para o valor de y; de outro modo, avalia para o valor de z.
[0039] Além disso, os operadores relacionais a seguir podem ser usados: > Maior que >= maior ou igual a < menos que <= Menor que ou igual a == Igual a != Não igual a
[0040] Adicionalmente, os seguintes operadores de bit a bit podem ser usados: & Bit a bit "e". Durante a operação em argumentos inteiros, opera em uma representação complementar de dois dos valores inteiros. Durante a operação em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando-se bits mais significativos iguais a
0.  Bit a bit "ou". Durante a operação em argumentos inteiros, opera em uma representação complementar de dois dos valores inteiros. Durante a operação em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando-se bits mais significativos iguais a
0. ^ Bit a bit "exclusivo ou". Durante a operação em argumentos inteiros, opera em uma representação complementar de dois dos valores inteiros. Durante a operação em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando-se bits mais significativos iguais a 0.
x >> y Deslocamento aritmético para a direita de uma representação de número inteiro complementar de x por y dígitos binários. Essa função é definida apenas para valores de número inteiro não negativos de y. Bits deslocados para os bits mais significativos ("MSBs" - most significant bits) como resultado do deslocamento para a direita, têm um valor igual ao MSB de x antes da operação de deslocamento. x << y Deslocamento aritmético para a esquerda de uma representação de número inteiro complementar de x por y dígitos binários. Essa função é definida apenas para valores de número inteiro não negativos de y. Bits deslocados para os bits menos significativos ("LSBs" - least significant bits) como resultado do deslocamento para a esquerda têm um valor igual a 0.
[0041] Além disso, os seguintes operadores relacionais podem ser usados: = Operador de atribuição ++ Acréscimo, isto é, x+ + é equivalente a x = x + 1; quando usado em um índice de matriz, avalia o valor da variável antes da operação de acréscimo. -- O decréscimo, isto é, x-- é equivalente a x = x - 1; quando usado em um índice de matriz, avalia o valor da variável antes da operação de decréscimo. += Acréscimo na quantidade especificada, isto é, x += 3 é equivalente a x = x + 3, e x += (-3) é equivalente a x = x + (-3). -= Decréscimo por quantidade especificada, isto é, x -= 3 é equivalente a x = x - 3, e x -= (-3) é equivalente a x = x - (-3).
[0042] Além disso, as seguintes funções matemáticas podem ser usadas: Clip1Y(x) = Clip3(0, (1 << BitDepthY) - 1, x) Clip1C(x) = Clip3(0, (1 << BitDepthC) - 1, x) Floor(x) o menor número inteiro maior ou igual a x. Log2(x) logaritmo de x na base 2.
[0043] As Figuras 2A e 2B são diagramas conceituais que ilustram exemplos de codificação de um bloco de dados de vídeo. Conforme ilustrado na Figura 2A, um bloco atual de dados de vídeo (por exemplo, um CB correspondente a um componente de vídeo) é codificado mediante a geração de um residual, subtraindo-se um conjunto de valores de predição do bloco atual de dados de vídeo, realizando-se uma transformação neste residual e quantificando-se os coeficientes de transformada para gerar valores de nível. Os valores de nível são codificados em um fluxo de bits. Conforme ilustrado na Figura 2B, o bloco atual de dados de vídeo é decodificado mediante a execução de quantificação inversa em valores de nível, execução de uma transformada inversa e a adição de um conjunto de valores de predição ao residual resultante. Deve-se notar que, nos exemplos nas Figuras 2A e 2B, os valores de amostra do bloco reconstruído diferem dos valores de amostra do bloco de vídeo atual que é codificado. Dessa maneira, pode-se dizer que a codificação se dá com perdas. Entretanto, a diferença nos valores de amostra pode ser considerada aceitável ou imperceptível para um espectador do vídeo reconstruído.
[0044] Adicionalmente, conforme ilustrado nas Figuras 2A e 2B, os valores do nível de coeficiente são gerados com o uso de uma matriz de fatores de alteração de escala. Em ITU-T H.265, um arranjo de fatores de alteração de escala é gerado selecionando-se uma matriz de alteração de escala e multiplicando-se cada entrada na matriz de alteração de escala por um fator de alteração de escala de quantificação. Em ITU-T H.265, uma matriz de alteração de escala é selecionada com base, em parte, em um modo de predição e um componente de cor, sendo que são definidas matrizes de alteração de escala dos seguintes tamanhos: 4x4, 8x8, 16x16 e 32x32. Deve-se notar que, em alguns exemplos, uma matriz alteração de escala pode fornecer o mesmo valor para cada entrada (isto é, todos os coeficientes são escalonados de acordo com um único valor). O valor de um fator de alteração de escala de quantificação pode ser determinado por um parâmetro de quantificação, QP. Em ITU-T H.265, para uma profundidade de bits de 8 bits, o QP pode tomar 52 valores de 0 a 51 e uma alteração de 1 para QP corresponde geralmente a uma alteração no valor do fator de alteração de escala de quantificação em aproximadamente 12%. Adicionalmente, em ITU-T H.265, um valor QP para um conjunto de coeficientes de transformada pode ser derivado com o uso de um valor de parâmetro de quantificação preditivo (que pode ser chamado de um valor QP preditivo ou um valor preditivo QP) e um valor delta de parâmetro de quantificação opcionalmente sinalizado (que pode ser chamado de um valor delta QP ou um valor QP delta). Em ITU-T H.265, um parâmetro de quantificação pode ser atualizado para cada CU e um respectivo parâmetro de quantificação pode ser derivado para cada um dos canais de luma e saturação.
[0045] Conforme descrito acima, a quantificação pode ser realizada por meio da divisão de coeficientes de transformada por um fator de alteração de escala e adicionalmente pode ser usada para variar a quantidade de dados necessários para representar um grupo de coeficientes de transformada. Ou seja, o aumento do fator de alteração de escala (ou grau de quantificação) reduz a quantidade de dados necessários para representar um coeficiente de grupo. Deve-se notar que à medida que o grau de quantificação aumenta (por exemplo, os coeficientes de transformada são divididos por um valor de fator de alteração de escala maior), a quantidade de distorção pode ser aumentada (por exemplo, os dados de vídeo reconstruídos podem parecer mais "em bloco" para um usuário). Em alguns casos, os artefatos de bloqueio podem fazer com que os contornos de bloco (por exemplo, bloco de codificação, bloco de transformação, bloco de predição, sub-blocos etc.) de dados de vídeo reconstruídos sejam visualmente perceptíveis para um usuário. A fim de reduzir os artefatos de bloqueio, valores de amostra reconstruídos podem ser modificados para minimizar artefatos introduzidos pelo processo de codificação de vídeo. Tais modificações podem, em geral, ser chamadas de filtragem. Deve-se notar que a filtragem pode ocorrer como parte de um processo de filtragem em circuito ou um processo de filtragem pós-circuito. Para um processo de filtragem em circuito, os valores de amostra resultantes de um processo de filtragem podem ser usados para blocos de vídeo preditivos (por exemplo, armazenados em um buffer de quadros de referência para codificação subsequente em um codificador de vídeo e decodificação subsequente em um decodificador de vídeo). Para um processo de filtragem pós-circuito, os valores de amostra resultantes de um processo de filtragem são meramente emitidos como parte do processo de decodificação (por exemplo, não usados para codificação subsequente). Por exemplo, para um processo de filtragem em circuito, os valores de amostra resultantes da filtragem de um bloco reconstruído seriam usados para decodificação subsequente (por exemplo, armazenados em um buffer de referência) e seriam emitidos (por exemplo, em uma tela). Para um processo de filtragem pós-circuito, o bloco reconstruído sem modificação seria usado para decodificação subsequente e os valores de amostra resultantes da filtragem do bloco reconstruído seriam emitidos.
[0046] Os termos desbloqueio (ou desbloqueio), filtragem de desbloqueio, execução de desbloqueio ou aplicação de um filtro de desbloqueio se referem ao processo de suavização de contornos de blocos de vídeo com blocos de vídeo vizinhos reconstruídos (isto é, tornando os contornos menos perceptíveis para um espectador). Suavizar os contornos de blocos de vídeo vizinhos reconstruídos pode incluir modificar os valores de amostra incluídos em fileiras ou colunas adjacentes a um contorno. O documento JVET-M1001 fornece onde um filtro de desbloqueio é aplicado aos valores de amostra reconstruídos como parte de um processo de filtragem em circuito. Deve-se notar que pode ser útil descrever genericamente um filtro de desbloqueio de acordo com um conjunto de parâmetros de filtro. Por exemplo, para um conjunto de valores de amostra {a... b} incluídos em uma linha ou coluna, um valor correspondente de amostra desbloqueada, y[n] pode ser especificado com base na seguinte equação: 𝑏 𝑦[𝑛] = ∑ 𝑐𝑜𝑒𝑓𝑓 [𝑚]𝑥[𝑛 + 𝑚] 𝑚=𝑎 em que, o comprimento do filtro é determinado como abs(a-b+1); o coef.[m] fornece um valor de válvula do filtro (também chamado de coeficiente de filtragem). Por exemplo, para {a...b} ={0...4}, um conjunto de valores de válvula pode ser {1, 2, 3, 2, 1}; x[n+m] fornece valores de entrada de amostra correspondentes a amostras de suporte e deve-se notar que o tamanho de suporte pode ser maior ou igual ao comprimento do filtro.
[0047] Deve-se notar que o conjunto de valores de derivação de filtro coef.[m] pode depender de n, em que n pode corresponder ao conjunto de locais para uma linha de amostras sendo desbloqueadas em um conjunto, digamos {c... d}, em que o número de entradas em {c.. d} corresponde a um número de amostras sendo desbloqueadas/modificadas. A linha de amostras pode ser perpendicular à borda/contorno sendo desbloqueado.
[0048] As Figuras 4A e 4B ilustram valores de amostra incluídos nos blocos de vídeo P e Q que têm um contorno. Como usado aqui, os blocos de vídeo P e Q são usados para se referir a blocos de vídeo adjacentes que têm um contorno de bloco no qual o desbloqueio pode ser aplicado. A maneira pela qual os valores de amostra são modificados pode ser baseada em filtros definidos, em que pi e qi representam os respectivos valores de amostra em uma coluna para um contorno vertical e valores de amostra em uma fileira para um contorno horizontal e pi' e qi' representam valores de amostra modificados. Os filtros definidos podem definir amostras que devem ser modificadas (ou filtradas) e amostras que são usadas para determinar como as amostras devem ser modificadas. Por exemplo, conforme ilustrado na Figura 4A, em um exemplo, os valores de amostras em cada uma das primeiras três colunas adjacentes ao contorno de desbloqueio podem ser modificados (ilustrados como amostras filtradas) com base nos valores de amostra incluídos em cada uma das primeiras quatro colunas adjacentes ao contorno de desbloqueio (ilustrados como amostras de suporte).
[0049] VET-M1001 define um assim chamado filtro forte, que modifica os valores de amostra nas três fileiras ou colunas adjacentes a um contorno, um assim chamado filtro fraco que modifica valores de amostra na fileira ou coluna imediatamente adjacente a um contorno e modifica condicionalmente os valores de amostra na segunda fileira ou coluna a partir do contorno, e um assim chamado filtro de saturação que modifica valores de amostra na fileira ou coluna imediatamente adjacente a um contorno. Equações para modificar valores de amostra de acordo com o filtro forte, o filtro fraco e o filtro de saturação são fornecidas abaixo. Filtro forte p0' = Clip3(p0 - 2 * tC, p0 + 2 * tC, (p2 + 2 * p1 + 2 * p0 + 2 * q0 + q1 + 4) >> 3) p1' = Clip3(p1 - 2 * tC, p1 + 2 * tC, (p2 + p1 + p0 + q0 + 2) >> 2) p2' = Clip3(p2 - 2 * tC, p2 + 2*tC, (2 * p3 + 3 * p2 + p1 + p0 + q0 + 4) >> 3) q0' = Clip3(q0 - 2 * tC, q0 + 2 * tC, (p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 +4) >> 3) q1 ' = Clip3(q1 - 2 * tC, q1 + 2 * tC, (p0 + q0 + q1 + q2 + 2) >> 2) q2 ' - Clip3(q2 - 2 * tC, q2 + 2 * tC, (p0 + q0 + q1 + 3 * q2 + 2 * q3 + 4) >> 3) Filtro fraco Δ = (9 * (q0 - p0) - 3 * (q1 - pi) + 8) >> 4 - Quando Abs(Δ) é menor que tC * 10, as seguintes etapas ordenadas se aplicam:
[0050] Os valores da amostra filtrada p0' e q0' são especificados da seguinte forma: Δ = Clip3(-tC, tC, Δ) p0' = Clip1Y(p0 + Δ) q0' = Clip1Y(q0 - Δ)
[0051] Em que p1 e q1 são condicionalmente modificados, da seguinte forma: Δp = Clip3(-(tc >> 1), tc >> 1, (((p2 + p0 + 1) >> 1) - p1 + Δ) >> 1) Δq = Clip3(-(tc >> 1), tc >> 1, ((q2 + q0 + 1) >> 1) - q1 - Δ) >> 1) p1' = ClipY(p1 + Δp) q1' = ClipY(q1 + Δq) Filtro de saturação Δ = Clip3(-tC, tC, (((q0 - p0) << 2) + p1 - q1 + 4) >> 3)) p0' = Clip1C(p0 + Δ) q0' = Clip1C(q0 - Δ)
[0052] "CE11.1.6, CE11.1.7 e CE11.1.8: Propostas conjuntas para desbloqueio longo do 13° Encontro entre Sony, Qualcomm, Sharp, Ericsson" de ISO/IEC JTC1/SC29/WG11, 9 a 18 de janeiro de 2019, Marraquexe, MA, documento JVET-M0471, que é chamado neste documento de JVET-M0471, modifica o filtro forte da seguinte forma: tCD0.. 2={3, 2, 1} p0' = Clip3(p0 - tCD[0] * tC, p0 + tCD[0] * tC, (p2 + 2 * p1 + 2 * p0 + 2 * q0 + q1 + 4) >> 3) p1' = Clip3(p1 - tCD[1] * tC, p1 + tCD[1] * tC, (p2 + p1 + p0 + q0 + 2) >> 2) p2' = Clip3(p2 - tCD[2] * tC, p2 + tCD[2] *tC, (2 * p3 + 3 * p2 + p1 + p0 + q0 + 4) >> 3) q0' = Clip3(q0 - tCD[0] * tC, q0 + tCD[0]* tC, (p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 + 4) >>3) q1' = Clip3(q1- tCD[1] * tC, q1 + tCD[1] * tC, (p0 + q0 + q1 + q2 + 2) >> 2)
q2' - Clip3(q2 - tCD[2] * tC, q2 + tCD[2] * tC, (p0 + q0 + q1 + 3 * q2 + 2 * q3 + 4) >> 3)
[0053] Adicionalmente, JVET-M0471 define um assim chamado processo de filtro longo de luma da seguinte forma:
[0054] As entradas para este processo são: - as variáveis maxFilterLengthP e maxFilterLengthQ, - os valores de amostra pi e qj com i = 0.. maxFilterLengthP e j = 0.. maxFilterLengthQ, - os locais de pi e qj, (xPi, yPi) e (xQj, yQj) com i = 0.. maxFilterLengthP-1 e j = 0.. maxFilterLengthQ-1, - uma variável tc.
[0055] Os resultados desse processo são: - os valores de amostra filtrada pi'e qj' com i = 0.. maxFilterLengthP - 1, j = 0.. maxFilterLengtQ - 1.
[0056] As variáveis refMiddle, refP e refQ são derivadas da seguinte forma: Se maxFilterLengthP é igual a maxFilterLengthQ Se maxFilterLengthP1 é igual a 5 refMiddle = (p4 + p3 + 2* (p2 + p1+ p0 + q0 + q1 + q2)+q3 + q4+8) >> 4 Caso contrário refMiddle = (p6 -+ p5 -+ p4 + p3 + p2 + p1 + 2* (p0 + q0) + q1+ q2 + q3 + q4 + q5 + q6 + 8) >> 4 Caso contrário, se ((maxFilterLengthQ é igual a 7 e maxFilterLengthP é igual a 5) ou (maxFilterLengthQ é igual a 5 e maxFilterLengthP é igual a 7) refMiddle = (p4 + p3 + 2* (p2 + p1+ p0 + q0 + q1+q2)+q3 + q4+8) >> 4 Caso contrário, se ((maxFilterLengthQ é igual a 5 e maxFilterLengthP é igual a 3) ou (maxFilterLengthQ é igual a 3 e maxFilterLengthP é igual a 5) refMiddle = (p3 + p2 + p1 + p0 + q0 + q1+q2 +q3+4) >> 3
Caso contrário, se ((maxFilterLengthQ é igual a 7 e maxFilterLengthP é igual a 3) refMiddle = (2*(p2 + p1 + p0 + q0) + p0 + p1 + q1+ q2 +q3 +q4+q5+q6+8) >> 4 Caso contrário, refMiddle = (p6 -+ p5 -+ p4 + p3 + p2 +p1 + 2*(q2 + q1 + q0 + p0) + q0 + q1 + 8) >> 4 refP = (pmaxFilterLengtP -+ PmaxFilterLengthP-1 + 1) >> 1 refQ = (qmaxFilterLengtQ -+ qmaxFilterLengthQ-1 -+ 1) >> 1 As variáveis fi e tcPDi são definidas da seguinte forma: Se maxFilterLengthP é igual a 7 f0.. 6 = {59, 50, 41, 32, 23, 14, 5} tcPD0.. 6={6, 5, 4, 3, 2, 1, 1} Caso contrário, se maxFilterLengthP é igual a 5 f0.. 4 = {58, 45, 32,19,6} tcPD0.. 4 = {6, 5, 4, 3, 2} Caso contrário f0.. 2={53, 32, 11} tCPD0.. 2 = {6, 4, 2} As variáveis gi e tcQDj são definidas da seguinte forma: Se maxFilterLengthQ é igual a 7 g0.. 6= {59, 50, 41, 32, 23, 14, 5} tcQD0.. 6 ={6, 5, 4, 3, 2, 1, 1} Caso contrário, se maxFilterLengthQ é igual a g0.. 4= {58, 45, 32,19,6} tcQD0.. 4= {6, 5, 4, 3, 2} Caso contrário g0.. 2= {53, 32, 11} tcQD0.. 2={6, 4, 2} pi' = Clip3(pi - (tC*tCPDi) >> 1, pi + (tc*tcPDi) >> 1, (refMiddle*fi + refP*(64-
fi) + 32) >> 6) qj' = Clip3(qj - (tc*tcQDj) >> 1, qj + (tc*tcQDj) >> 1, (refMiddle*gj + refP*(64-gj) + 32) >6) em que i = 0.. maxFilterLengthP-1 e j = 0.. maxFilterLengthQ-1
[0057] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, pi' é substituído pelo valor correspondente da amostra de entrada pi: com i = 0.. maxFilterLengthP - 1: pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xP0][yP0] é igual a 1. cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra p0 é igual a 1.
[0058] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, qi' é substituído pelo valor correspondente da amostra de entrada qj: com j = 0.. maxFilterLengthQ - 1: pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xQ0][yQ0] é igual a 1. cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra q0 é igual a 1.
[0059] JVET-M0471 define adicionalmente um assim chamado processo de filtragem longa de saturação da seguinte forma:
[0060] As entradas para este processo são: - a variável filterLength - os valores da amostra de saturação pi e qi com i = 0.. filterLength, - os locais de saturação de pi e qi, (xPi, yPi) e (xQi, yQi), - um tC variável
[0061] Os resultados desse processo são: - os valores da amostra filtrada pi'e qj' com i = 0.. filterLength - 1.
[0062] Dependendo do valor de filterLength, aplica-se o seguinte: - Se a variável filterLength for igual a 3, aplica-se a filtragem forte: p0' = Clip3(p0 - tC, p0 + tC, (p3 + p2 + p1 + 2 * p0 + q0 + q1 + q2 + 4) >> 3)
[0063] p1' = Clip3(p1 - tC, p1 + tC, (2 * p3 + p2 + 2 * p1 + p0 + q0 + q1 + 4) >> 3) p2' = Clip3(p2 - tC, p2 + tC, (3 * p3 + 2 * p2 + p1 + p0 + q0 + 4) >> 3) q0' = Clip3(q0 - tC, q0 + tC, (p2 + p1 + p0 + 2 * q0 + q1 + q2 + q3 + 4) >> 3) q1' = Clip3(q1 - tC, q1 + tC, (p1 + p0 + q0 + 2 * q1 + q2 + 2 * q3 + 4) >> 3) q2 = Clip3(q2 - tC, q2 + tC, (p0 + q0 + q1 + 2 * q2 + 3 * q3 + 4) >> 3)
[0064] - Caso contrário, a seguinte filtragem fraca se aplica: Δ = Clip3(-tC, tC, (((q0 - p0) << 2) + p1 - q1 + 4) >> 3)) p0' = Clip1C(p0 + Δ) q0' = Clip1C(q0 - Δ)
[0065] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, p f, é substituído pelo valor de entrada correspondente da amostra de entrada pi: com i = 0.. filterLength - 1: - pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xP0 * SubWidthC][yP0 * SubHeightC] é igual a 1. - cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra p0 é igual a 1.
[0066] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, q1' é substituído pelo valor correspondente da amostra de entrada qi: com i = 0.. filterLength - 1: - pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xQ0 * SubWidthC][yQ0 * SubHeightC] é igual a 1. - cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra q0 é igual a 1. em que,
[0067] As variáveis SubWidthC e SubHeightC são especificadas na Tabela 1, dependendo da estrutura de amostragem em formato de saturação, que é especificada por meio de chroma_format_idc e separate_colour_plane_flag.
separate_colour_ Formato de SubWidth SubHeight chroma_format_idc plane_flag saturação C C 0 0 Monocromático 1 1 1 0 4:2:0 2 2 2 0 4:2:2 2 1 3 0 4:4:4 1 1 3 1 4:4:4 1 1 Tabela 1
[0068] Na amostragem monocromática, há apenas um conjunto de amostras, que é nominalmente considerado a matriz de luma.
[0069] Na amostragem 4:2:0, cada uma das duas matrizes de saturação tem metade da altura e metade da largura da matriz de luma.
[0070] Na amostragem 4:2:2, cada uma das duas matrizes de saturação tem a mesma altura e metade da largura da matriz de luma.
[0071] Em uma amostragem 4:4:4, dependendo do valor de separate_colour_plane_flag, o seguinte se aplica: - Se separate_colour_plane_flag for igual a 0, cada uma das duas matrizes de saturação tem a mesma altura e largura que a matriz de luma. - Caso contrário, (separate_colour_plane_flag é igual a 1), os planos de três cores são processados separadamente como imagens monocromáticas amostradas.
[0072] Nas equações acima, a variável tC é determinada de acordo com um processo de decisão para a borda do bloco da seguinte forma:
[0073] A variável é derivada da seguinte forma: qP = ((QpQ + QpP + 1) >> 1) + qpOffset onde, QpQ e QpP são definidos como iguais aos valores QP das unidades de codificação que incluem os blocos de codificação contendo a amostra q0,0 e p0,0, respectivamente; e qpOffset é um determinado valor de deslocamento.
[0074] O valor da variável β 'é determinado conforme especificado na Tabela ilustrada na Figura 5, com base no parâmetro de quantificação Q derivado da seguinte forma: Q = Clip3(0, 63, qP + (tile_group_beta_offset_div2 << 1)) em que tile_group_beta_offfset_div2 é o valor do elemento de sintaxe tile_group_beta_offset_div2 para o grupo de ladrilhos que contém a amostra q0,0.
[0075] A variável β é derivada da seguinte forma: β = β' * (1 << (bD- 8))
[0076] O valor da variável tc' é determinado conforme especificado na Tabela ilustrada na Figura 5 com base no parâmetro de quantificação Q derivado da seguinte forma: Q = Clip3(0, 65, qP + 2 * (b S - 1) + (tile_group_tc_offset_div2 << 1)) em que tile_group_tc_offset_div2 é o valor do elemento de sintaxe tile_group_tc_offset_div2 para o grupo de ladrilhos que contém a amostra q0,0.
[0077] A variável tC é derivada da seguinte forma: tC = tC' * (1 << (bD - 8)) onde, bD especifica a profundidade de bits do componente atual.
[0078] Adicionalmente, em JVET-M1001, um valor de resistência de contorno (bS) é determinado para os contornos dos blocos Q e P. O valor de bS é usado para determinar se/como o desbloqueio (isto é, qual filtro) é aplicado a um contorno específico. Em JVET-M1001, um valor bS é derivado como um de 0, 1 ou 2 da seguinte forma:
[0079] - Se a amostra p0 ou q0 estiver no bloco de codificação de uma unidade de codificação codificada com o modo de intrapredição, bS é definido como sendo igual a 2.
[0080] - Caso contrário, se a borda de bloco for também uma borda de bloco de transformação e a amostra p0 ou q0 estiver em um bloco de transformação que contém um ou mais níveis de coeficiente de transformada diferentes de zero, bS é definido como sendo igual a 1.
[0081] - Caso contrário, se uma ou mais das seguintes condições forem verdadeiras, bS é definido como sendo igual a 1:
[0082] - Para a predição do sub-bloco de codificação contendo a amostra p0, são usadas imagens de referência diferentes ou um número de vetores de movimento diferente do que é usado para a predição do sub-bloco de codificação contendo a amostra q0.
[0083] - Um vetor de movimento é usado para prever o sub-bloco de codificação contendo a amostra p0 e um vetor de movimento é usado para prever o sub-bloco de codificação contendo a amostra q0, e a diferença absoluta entre o componente horizontal ou vertical dos vetores de movimento usados é maior ou igual a 4 em unidades de amostras de um quarto de luma.
[0084] - Dois vetores de movimento e duas imagens de referência diferentes são usados para prever o sub-bloco de codificação contendo a amostra p0, dois vetores de movimento para as mesmas duas imagens de referência são usados para prever o sub-bloco de codificação contendo a amostra q0 e a diferença absoluta entre o componente horizontal ou vertical dos dois vetores de movimento usados na predição dos dois sub-blocos de codificação para a mesma imagem de referência é maior ou igual a 4 em unidades de amostras de um quarto de luma.
[0085] - Dois vetores de movimento para a mesma imagem de referência são usados para prever o sub-bloco de codificação contendo a amostra p0, dois vetores de movimento para a mesma imagem de referência são usados para prever o sub-bloco de codificação contendo a amostra q0 e ambas as seguintes condições são verdadeiras:
[0086] - A diferença absoluta entre o componente horizontal ou vertical dos vetores de movimento da lista 0 usados na predição dos dois sub-blocos de codificação é maior ou igual a 4 em amostras de um quarto de luma, ou a diferença absoluta entre o componente horizontal ou vertical dos vetores de movimento da lista 1 usados na predição dos dois sub-blocos de codificação é maior ou igual a 4 em unidades de amostras de quarto de luma.
[0087] - A diferença absoluta entre o componente horizontal ou vertical do vetor de movimento da lista 0 usado na predição do sub- bloco de codificação contendo a amostra p0 e o vetor de movimento da lista 1 usado na predição do sub-bloco de codificação contendo a amostra q0 é maior ou igual a 4 em unidades de amostras de luma de quarto, ou a diferença absoluta entre o componente horizontal ou vertical do vetor de movimento da lista 1 usado na predição do sub- bloco de codificação contendo a amostra p0 e o vetor de movimento da lista 0 usado na predição do sub-bloco de codificação contendo a amostra q0 é maior ou igual a 4 em unidades de amostras de luma de quarto.
[0088] - Caso contrário, a variável bS é definida como sendo igual a 0.
[0089] Conforme descrito acima, dados de intrapredição ou dados de interpredição são usados para produzir valores de amostra de referência para um bloco de valores de amostra. No JVET-M1001, um assim chamado modo de codificação de subpartições intra (ISP) pode ser usado para intrapredição. Para o modo de codificação ISP em JVET-M1001, alguns blocos intraprevistos de luma (isto é, CBs de luma) são adicionalmente divididos no sentido vertical ou horizontal em duas ou quatro subpartições dependendo das dimensões de tamanho do bloco. A Figura 6A ilustra o exemplo da divisão de blocos 4x8 e 8x4 em duas subpartições de acordo com o modo de codificação ISP em JVET-M1001. A Figura 6B ilustra o exemplo da divisão de outros casos de blocos em quatro subpartições de acordo com o modo de codificação ISP em JVET-M1001. Deve-se notar que, de acordo com o modo de codificação ISP no modo de codificação JVET-M1001, todas as subpartições são necessárias para satisfazer a condição de ter ao menos 16 amostras. No documento JVET-M1001, cada uma das subpartições no bloco de luma intraprevisto compartilha o mesmo modo de predição intra. Adicionalmente, as Figuras 6A e 6B ilustram a ordem de processamento das subpartições de acordo com JVET- M1001. Ou seja, conforme ilustrado nas Figuras 6A e 6B, as subpartições geradas por uma divisão horizontal são processadas de cima para baixo e as subpartições geradas por uma divisão vertical são processadas da esquerda para a direita. Deve ser observado que tal ordem de processamento pode ser chamada de ordem de processamento normal e uma ordem de processamento inversa pode se referir ao processamento de subpartições geradas por uma divisão horizontal de baixo para cima e ao processamento de subpartições geradas por uma divisão vertical da direita para a esquerda.
[0090] Para cada uma das subpartições no bloco de luma intraprevisto, em um codificador de vídeo, é gerado um residual e, em um decodificador de vídeo, é gerado um bloco de vídeo reconstruído de acordo com a ordem de processamento. Ou seja, cada subpartição anterior é reconstruída antes da subpartição subsequente. Portanto, os valores reconstruídos de cada subpartição anterior estarão disponíveis e serão usados para gerar a predição da subpartição subsequente. Ou seja, de acordo com a ordem normal de processamento, as amostras de referência usadas para gerar predições de subpartição estão localizadas apenas à esquerda e acima de uma subpartição. Adicionalmente, deve- se notar que cada subpartição tem um residual correspondente que é independente do residual das outras subpartições. Ou seja, para cada subpartição, em um decodificador de vídeo, um residual é gerado pela quantificação inversa e execução de uma transformada inversa em um conjunto de valores de nível que corresponde a uma subpartição. Dessa forma, pode-se dizer que cada uma das subpartições tem um bloco de transformação correspondente e que cada um dos contornos de subpartição forma bordas de bloco de transformação.
[0091] Conforme descrito acima, dados de intrapredição ou dados de interpredição são usados para produzir valores de amostra de referência para um bloco de valores de amostra. Conforme descrito acima, em JVET-M1001, uma unidade de codificação incluída em um grupo de blocos P ou B pode ser codificada de acordo com um modo de omissão de CU, em que quando o modo de omissão de CU é indicado, a unidade de codificação é codificada de acordo com o subconjunto de modos de predição de vetor de movimento e a unidade de codificação é codificada a partir da predição diretamente, isto é, não são usados dados residuais para codificar o bloco de vídeo. O documento JVET-M1001 prevê adicionalmente que quando os dados interpredição são usados para produzir valores de amostra de referência, um assim chamado modo de transformada de sub-bloco (SBT) pode ser usado para dados residuais. Um modo SBT permite que todo o bloco residual ou apenas uma subparte do mesmo seja usado para codificar uma CU. No caso em que todo o bloco residual é usado, as informações de seleção de transformada intermúltipla (MTS) são adicionalmente analisadas para determinar o tipo de transformada da CU. No caso em que apenas uma subparte do bloco residual é usada, uma parte do bloco residual é codificada com transformada adaptável inferida e a outra parte do bloco residual é zerada. Deve-se notar que no documento JVET-M1001, o modo SBT não é aplicado ao modo combinado inter-intra, uma vez que quase nenhum ganho de codificação é obtido.
[0092] Quando SBT é usado para uma CU inter, as informações de posição de SBT e do tipo de SBT são adicionalmente decodificadas a partir do fluxo de bits para indicar o formato e a posição dos sub- blocos. No documento JVET-M1001, uma CU inter pode ser dividida em sub-blocos SBT tanto por uma divisão horizontal quanto vertical. Adicionalmente, em JVET-M1001, a divisão pode ocorrer em uma posição que está na metade da altura (ou largura) ou em um quarto da altura (ou largura). Ou seja, com referência à Figura 10A, um CB (por exemplo, o CB de luma correspondente à CU) é ilustrado como sendo dividido em sub-blocos SB0 e SB1 e para a divisão horizontal, h1, pode ser igual a H/2 ou H/4 (ou 3H/4) e para a divisão vertical, w1, pode ser igual a W/2 ou W/4 (ou 3W/4). As informações de posição de SBT indicam que os dados residuais estão presentes para o sub-bloco SB0 ou o sub-bloco SB1. Dessa forma, as informações sobre o tipo de SBT e a posição de SBT no JVET-M1001 permitem oito partições de SBT, conforme ilustrado na Figura 10B, na qual o sub-bloco que tem dados residuais é indicado. Deve-se notar que em JVET-M1001, se um lado da CU tiver 8 amostras de luma, a divisão de H/4 ou W/4 correspondente não será permitida.
[0093] Em um exemplo, para o componente luma, o sub-bloco SB0 ou o sub-bloco SB1 pode estar associado a diferentes transformadas de núcleo (por exemplo, DCT-8 e DST-7). Adicionalmente, em um exemplo, para o componente de saturação, o sub-bloco SB0 ou o sub-bloco SB1 pode estar associado à mesma transformada de núcleo (por exemplo, DCT-2). Adicionalmente, quando um lado da TU residual é maior que 32, a transformada correspondente pode ser definida como DCT-2. A Tabela 2 ilustra exemplos de transformadas de núcleo horizontais (H) e verticais (V) que podem ser executadas em um sub-bloco com base na posição do sub-bloco (isto é, conforme fornecido na Figura 10B), no canal de cor do componente do sub-bloco e no tamanho do sub-bloco. Deve-se notar que a Tabela 2 ilustra o conceito geral de transformadas de núcleo horizontais (H) e verticais (V) que podem ser executadas em um sub-
bloco com base na posição do sub-bloco, no canal de cor do componente do sub-bloco e no tamanho do sub-bloco, e as técnicas descritas neste documento são, de modo geral, aplicáveis independentemente das transformadas específicas executadas em um sub-bloco com base na posição do sub-bloco, no canal de cor do componente do sub-bloco e no tamanho do sub-bloco. Ou seja, as transformadas indicadas na Tabela 2 podem ser substituídas por outras transformadas definidas.
Canal Luma Saturação Tamanho (H ou W, correspondente (H ou W, correspondente à divisão) <=32 à divisão) >32 (a) H: DCT-7, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 V: DCT-8 (b) H: DCT-7, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 V: DCT-7 (c) H: DCT-7, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 V: DCT-8 Sub- (d) H: DCT-7, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 bloco V: DCT-7 (e) H: DCT-8, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 V: DCT-7 (f) H: DCT-7, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 V: DCT-7 (g) H: DCT-8, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 V: DCT-7 (h) H: DCT-7, H: DCT-2, V: DCT-2 H: DCT-2, V: DCT-2 V: DCT-7 Tabela 2
[0094] Como descrito em JVET-M1001, as CTUs são particionadas de acordo com uma estrutura de "quadtree" mais árvore de múltiplos tipos ("QTMT" - quadtree plus multi-type tree). Consequentemente, o tamanho e as posições dos sub-blocos na Figura 10B podem ser obtidos pela divisão adicional de uma CU. Ou seja, por exemplo, uma CU pode ser dividida com o uso de uma divisão de BT e as CUs filhas resultantes podem ter o mesmo tamanho que a posição de sub-blocos resultantes da divisão da CU com o uso de uma divisão de meia SBT. Adicionalmente, para as CUs filhas resultantes, se os blocos resultantes têm ou não algum residual pode ser indicado pelo uso de sinalizador(es) (por exemplo, cu_cbf, tu_cbf_luma, tu_cbf_cb, tu_cbf_cr). Dessa forma, os modos SBT podem ser considerados um atalho de sintaxe para os casos em que o maior residual de um bloco está em um lado do bloco.
[0095] A Tabela 3 ilustra a porção de divulgação da sintaxe da unidade de codificação para habilitar o modo de codificação ISP e o modo de codificação SBT em JVET-M1001.
coding_unit(x0, y0, cbWidth, cbHeight, treeType) { Descr i-tor if(tile_group_type != I) { if(treeType!= DUAL_TREE_CHROMA) cu_skip_flag[x0][y0] ae(v) if(cu_skip_flag[x0][y0] = = 0) pred_mode_flag ae(v) } if(CuPredMode[x0][y0] = = MODE_INTRA) { … } else { if (treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA) { if((y0% CtbSizeY) > 0) intra_luma_ref_idx [x0][y0] ae(v) if (intra_luma_ref_idx[x0][y0] = = 0 &&
(cbWidth <= MaxTbSizeY | | cbHeight <= MaxTbSizeY) && (cbWidth * cbHeight > MinTbSizeY * MinTbSizeY)) intra_subpartitions_mode_flag[x0][y0] ae(v) if(intra_subpartitions_mode_flag[x0][y0] = = 1 && cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY) intra_subpartitions_split_flag[x0][y0] ae(v) if(intra_luma_ref_idx[x0][y0] = = 0 && intra_subpartitions_mode_flag[x0][y0] = = 0) intra_luma_mpm_flag[x0][y0] ae(v) if(intra_lmna_mpm_flag[x0][y0]) intra_luma_mpm_idx[x0][y0] ae(v) else intra_luma_mpm_remainder[x0][y0] ae(v) } if(treeType = = SINGLE TREE | | treeType = = DUAL_TREE_CHROMA) intra_chroma_pred_mode[x0][y0] ae(v) } } caso contrário, if(treeType!= DUAL_TREE_CHROMA) {/* MODE_INTER */ if(cu_skip_flag[x0][y0] = = 0) merge_flag[x0][y0] ae(v) if(merge_flag[x0][y0]) { merge_data(x0, y0, cbWidth, cbHeight) } else { … } if(CuPredMode[x0][y0] != MODE_INTRA && merge_flag[x0][y0] == 0)
cu_cbf ae(v) if(cu_cbf) { if(CuPredMode[x0][y0] == MODE_INTER && sps_sbt_enabled_Flag && !ciip flag[x0][y0]) {
if(cbWidth <= MaxSbtSize && cbHeight <= MaxSbtSize) { allowSbtVerH = cbWidth >= 8 allowSbtVerQ = cbWidth >= 16 allowSbtHorH = cbHeight >= 8 allowSbtHorQ = cbHeight >= 16 if(allowSbtVerH | | allowSbtHorH | | allowSbtVerQ | | allowSbtHorQ) cu_sbt_flag ae(v) } if(cu_sbt_Flag) { if((allowSbtVerH | | allowSbtHorH) && (allowSbtVerQ | | allowSbtHorQ)) cu_sbt_quad_flag ae(v) if((cu_sbt_quad_flag && allowSbtVerQ && allowSbtHorQ)|| (!cu_sbt_Quad_Flag && allowSbtVerH && allowSbtHorH)) cu_sbt_horizontal_flag ae(v) cu_sbt_pos_flag ae(v) } } transform_tree(x0, y0, cbWidth, cbHeight, treeType) … … Tabela 3
[0096] Com relação à Tabela 3, JVET-M1001 fornece a seguinte semântica:
[0097] cu skip flag igual a 1 especifica que para a unidade de codificação atual, ao decodificar um grupo de ladrilhos P ou B, nenhum elemento de sintaxe, exceto um ou mais dos seguintes são analisados após cu_skip_flag[x0][y0]: a integração mais o sinalizador de MVD mmvd_flag[x0][y0], a integração mais o índice de MVD mmvd_merge_flag[x0][y0], a integração mais o índice de distância MVD mmvd distance_idx[x0][y0], a integração mais o índice de direção MVD mmvd_direction_idx[x0][y0], o índice candidato à integração merge_idx[x0][y0], o sinalizador de integração baseado em sub-bloco merge_subblock_flag[x0][y0], o índice candidato de integração baseado em sub-bloco merge_subblock_idx[x0][y0], o sinalizador de triângulo de integração merge_triangle_flag[x0][y0] e o índice de triângulo de integração merge_triangle_index[x0][y0]. Cu_skip_flag[x0][y0] igual a 0 especifica que a unidade de codificação não é ignorada. Os índices de matriz x0, y0 especificam o local (x0, y0) da amostra de luma superior esquerda do bloco de codificação considerado em relação à amostra de luma superior esquerda da imagem.
[0098] Quando cu_skip_flag[x0][y0] não está presente, infere-se como sendo igual a 0.
[0099] pred_mode_flag pred_mode_flag igual a 0 especifica que a unidade de codificação atual é codificada em modo de interpredição. Pred_mode_flag igual a 1 especifica que a unidade de codificação atual é codificada em modo de intrapredição.
[00100] A variável CuPredMode[x][y] é derivada, como segue, para x = x0.. x0 + cbWidth - 1 ed y = y0.. y0 + cbHeight - 1:
[00101] - Se pred_mode_flag for igual a 0, CuPredMode[x][y] é definido como sendo igual a MODE_INTER.
[00102] - Caso contrário, (pred_mode_flag é igual a 1), CuPredMode[x][y] é definido como sendo igual a MODE INTRA.
[00103] Quando pred_mode_flag não está presente, a variável CuPredModef x][y] é inferida como sendo igual a MODE_INTRA para x = x0.. x0 + cbWidth - 1 e y = y0.. y0 + cbHeight - 1.
[00104] intra_Iuma_ref_idx[x0][y0] especifica o índice de linha de referência de intrapredição IntraLumaRefLineIdx[x][y] para x = x0.. x0 + cbWidth - 1 e y= y0.. y0 + cbHeight- 1 conforme especificado na Tabela
4.
[00105] Quando intra_luma_ref_idx[x0][y0] não está presente, infere-
se que ele é igual a 0. intra_luma_ref_idx[x0][y0] IntraLumaRefLineIdx[x][y] x = x0.. x0 + cbWidth - 1 y = y0.. y0 + cbHeight - 1 0 0 1 1 2 3 Tabela 4
[00106] intra_subpartitions_mode_flag[x0][y0] igual a 1 especifica que a unidade de codificação intra atual é particionada em subpartições de bloco de transformação retangular NumIntraSubPartitions[x0][y0], intrasubpartitionsmode _flag[x0][y0] igual a 0 especifica que a unidade de codificação intra atual não é particionada em subpartições de bloco de transformação retangular.
[00107] Quando intra_subpartitions_mode_flag[x0][y0] não está presente, infere-se que ele é igual a 0.
[00108] intra subpartitions_split_flag[x0][y0] especifica se o tipo de divisão de intra subpartições é horizontal ou vertical. Quando intra_subpartitions_mode_flag[x0][y0] não está presente, infere-se que ele é igual a 0.
[00109] A variável IntraSubPartitionsSplitType especifica o tipo de divisão usada para o bloco de codificação de luma atual conforme ilustrado na Tabela 5. IntraSubPartitionsSplitType é derivado da seguinte forma:
[00110] - Se intra_subpartitions_mode_flag[x0][y0] for igual a 0, IntraSubPartitionsSplitType é definido como sendo igual a 0.
[00111] - Caso contrário, o IntraSubPartitionsSplitType é definido como sendo igual a 1 + intra_subpartitions_split_flag[x0][y0].
fritraSubPartitionsSplitType Nome do IntraSubPartitionsSplitType 0 ISP_NO_SPLIT 1 ISP_HOR_SPLIT 2 ISPVERSPLIT Tabela 5
[00112] A variável NumlntraSubPartitions especifica o número de subpartições de bloco de transformação em que um bloco de codificação intra luma é dividido. NumlntraSubPartitions é derivado da seguinte forma:
[00113] - Se IntraSubPartitionsSplitType for igual a ISP_NO_SPLIT, NumlntraSubPartitions é definido como sendo igual a 1.
[00114] - Caso contrário, se uma das seguintes condições for verdadeira, NumlntraSubPartitions é definido como sendo igual a 2:
[00115] - cbWidth é igual a 4 e cbHeight é igual a 8,
[00116] - cbWidth é igual a 8 e cbHeight é igual a 4.
[00117] Caso contrário, NumlntraSubPartitions é definido como sendo igual a 4.
[00118] Os elementos de sintaxe i n t r a l u m a m p m _ f l a g [x 0 ][y0], i n t r a _ l u m a _ m p m _ i d x [x 0 ][y0] e i n t r a _ l u m a _ m p m j r e m a i n d e r [x 0 ][y0] especificam o modo de predição intra para amostras de luma. Os índices de matriz x0, y0 especificam o local (x0, y0) da amostra de luma superior esquerda do bloco de codificação considerado em relação à amostra de luma superior esquerda da imagem. Quando intra_luma_mpm_flag[x0][y0] é igual a 1, o modo de predição é inferido a partir de uma unidade de codificação vizinha intraprevista de acordo com [um processo de derivação especificado].
[00119] Quando triangle_merge_idx[x0][y0] não está presente, infere-se como sendo igual a 1.
[00120] intra_chroma_pred_mode[x0][y0] especifica o modo intrapredição para amostras de saturação. Os índices de matriz x0, y0 especificam o local (x0, y0) da amostra de luma superior esquerda do bloco de codificação considerado em relação à amostra de luma superior esquerda da imagem.
[00121] m e r g e _ f l a g [x0][y0] especifica se os parâmetros de interpredição para a unidade de codificação atual são inferidos a partir de uma partição interprevista vizinha. Os índices de matriz x0, y0 especificam o local (x0, y0) da amostra de luma superior esquerda do bloco de codificação considerado em relação à amostra de luma superior esquerda da imagem.
[00122] Quando merge_flag[x0][y0] não está presente, ele é inferido da seguinte forma:
[00123] - Se cu_skip_flag[x0][y0] é igual a 1, infere-se que merge_flag[x0][y0] é igual a 1.
[00124] - Caso contrário, infere-se que merge_flag[x0] [y0] é igual a
0.
[00125] cu_cbf igual a 1 especifica que a estrutura de sintaxe transform_tree() está presente para a unidade de codificação atual. cu_cbf igual a 0 especifica que a estrutura de sintaxe transform_tree() não está presente para a unidade de codificação atual.
[00126] Quando cu_cbf não está presente, ele é inferido da seguinte forma:
[00127] - Se cu_skip_flag[x0][y0] é igual a 1, infere-se que cu_cbf é igual a 0.
[00128] - Caso contrário, infere-se que cu_cbf seja igual a 1.
[00129] c u _ s b t _ F l a g igual a 1 especifica que, para a unidade de codificação atual, é usada a transformação de sub-bloco.
[00130] cu_sbt_Flag igual a 0 especifica que, para a unidade de codificação atual, a transformação de sub-bloco não é usada.
[00131] Quando sign_data_hiding_enabled_flag não estiver presente, infere-se que seja igual a 0.
[00132] NOTA -: Quando é usada a transformada de sub-bloco, uma unidade de codificação é dividida em duas unidades de transformada; uma unidade de transformada tem dados residuais, a outra não tem dados residuais.
[00133] cu_sbt_quad_flag igual a 1 especifica que para a unidade de codificação atual, a transformada de sub-bloco inclui uma unidade de transformada com tamanho de 1/4 da unidade de codificação atual. cu_sbt_quad_flag igual a 0 especifica que para a unidade de codificação atual a transformada de sub-bloco inclui uma unidade de transformada com tamanho de 1/2 da unidade de codificação atual.
[00134] Quando cu_sbt_quad_flag não está presente, infere-se que ele é igual a 0.
[00135] c u _ s b t _ q u a d _ f l a g igual a 1 especifica que a unidade de codificação atual é dividida horizontalmente em 2 unidades de transformada. cu_sbt_quad_flag[x0][y0] igual a 0 especifica que a unidade de codificação atual é dividida verticalmente em 2 unidades de transformada.
[00136] Quando cu_sbt_quad_flag não está presente, seu valor é derivado da seguinte forma:
[00137] - Se cu_sbt_quad_flag for igual 1, cu_sbt_horizontal_flag é definido como sendo igual allowSbtHorQ.
[00138] - Caso contrário (cu_sbt_quad_flag é igual a 0), cu_sbt_quad_flag é definido para ser igual a allowSbtHorH.
[00139] cu_sbtjpos_Flag igual a 1 especifica que tu_cbf_luma, tu_cbf_cb e tu_cbf_cr da primeira unidade de transformada na unidade de codificação atual não estão presentes no fluxo de bits. Cu_sbt_pos_Flag igual a 0 especifica que tu_cbf_luma, tu_cbf_cb e tu_cbf_cr da segunda unidade de transformada na unidade de codificação atual não estão presentes no fluxo de bits.
[00140] A variável é derivada da seguinte forma:
[00141] sbtMinNumFourths = cu_sbt_Quad_Flag ? 1 : 2
[00142] SbtNumFourthsTb0 = cu_sbt_pos_flag ? (4 a sbtMinNumFourths): sbtMinNumFourths
[00143] A quantificação e/ou o uso de intrapredição podem fazer com que artefatos de bloqueio apareçam no contorno de subpartição. Esses artefatos de bloqueio podem ser tratados com o uso de um filtro de desbloqueio. Entretanto, em JVET-M1001, os contornos de subpartição do modo de codificação ISP não são considerados contornos para desbloqueio, que podem ser menores que o ideal. Deve-se notar que no que diz respeito ao desbloqueio, JVET-M1001 fornece o seguinte processo de derivação de contorno de sub-bloco de codificação:
[00144] As entradas para este processo são:
[00145] - um local (xCb, yCb) especificando a amostra superior esquerda do bloco de codificação atual em relação à amostra superior esquerda da imagem atual,
[00146] - uma variável nCbW que especifica a largura do bloco de codificação atual,
[00147] - uma variável nCbH especificando a altura do bloco de codificação atual,
[00148] - uma matriz bidimensional (nCbW)x(nCbH) edgeFlags,
[00149] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGEHOR) é filtrada.
[00150] A saída desse processo é a matriz bidimensional (nCbW)x(nCbH) modificada edgeFlags.
[00151] O número de sub-blocos de codificação na direção horizontal numSbX e na direção vertical numSbY são derivados da seguinte forma:
[00152] - Se CuPredMode[xCb][yCb] = = MODE_INTRA, numSbX e numSbY serão ambos definidos como sendo igual a 1.
[00153] - Caso contrário, numSbX e numSbY serão definidos como sendo igual a NumSbX[xCb][yCb] e NumSbY[xCb][yCb], respectivamente.
[00154] Dependendo do valor de edgeType, aplica-se o seguinte:
[00155] - Se edgeType for igual a EDGE_VER e numSbX for maior que 1, o seguinte se aplica para i = 1.. min((nCbW / 8) - 1, numSbX - 1), k = 0.. nCbH - 1:
[00156] edgeFlags[i * Max(8, nCbW / numSbX)][k] = 1
[00157] - Caso contrário, se edgeType for igual a EDGE_HOR e numSbY for maior que 1, o seguinte se aplica para j = 1.. min((nCbH / 8) - 1, numSbY - 1), k= 0.. nCbW- 1:
[00158] edgeFlags[k][j * Max(8, nCbH / numSbY)] = 1
[00159] A Figura 7 é um diagrama de blocos que ilustra um exemplo de um sistema que pode ser configurado para codificar (ou seja, codificar e/ou decodificar) dados de vídeo de acordo com uma ou mais técnicas da presente divulgação. O sistema 100 representa um exemplo de um sistema que pode executar codificação de vídeo com o uso de técnicas de predição de vetor de movimento descritas de acordo com um ou mais exemplos da presente divulgação. Conforme ilustrado na Figura 7, o sistema 100 inclui o dispositivo de origem 102, o meio de comunicação 110 e o dispositivo de destino 120. No exemplo ilustrado na Figura 7, o dispositivo de origem 102 pode incluir qualquer dispositivo configurado para codificar dados de vídeo e transmitir dados de vídeo codificados para o meio de comunicação 110. O dispositivo de destino 120 pode incluir qualquer dispositivo configurado para receber dados de vídeo codificados através do meio de comunicação 110 e para decodificar dados de vídeo codificados. O dispositivo de origem 102 e/ou o dispositivo de destino 120 podem incluir dispositivos de computação equipados para comunicação com fio e/ou sem fio e podem incluir, por exemplo, decodificadores do tipo set-top box, gravadores de vídeo digital, televisores, computadores de mesa, laptop ou tablet, consoles de jogos,
dispositivos móveis, incluindo, por exemplo, smartphones, telefones celulares, dispositivos pessoais de jogo e dispositivos médicos de imageamento.
[00160] O meio de comunicação 110 pode incluir qualquer combinação de meios de comunicação com fio e sem fio e/ou dispositivos de armazenamento. O meio de comunicação 110 pode incluir cabos coaxiais, cabos de fibra óptica, cabos de par trançado, transmissores e receptores sem fio, roteadores, chaves, repetidores, estações de base ou qualquer outro equipamento que possa ser útil para facilitar a comunicação entre vários dispositivos e locais. O meio de comunicação 110 pode incluir uma ou mais redes. Por exemplo, o meio de comunicação 110 pode incluir uma rede configurada para habilitar o acesso à World Wide Web, por exemplo a Internet. Uma rede pode operar de acordo com uma combinação de um ou mais protocolos de telecomunicação. Protocolos de telecomunicações podem incluir aspectos proprietários e/ou podem incluir protocolos de telecomunicação padronizados. Exemplos de protocolos de telecomunicações padronizados incluem os padrões da difusão de vídeo digital ("DVB" - Digital Video Broadcasting), padrões do Comitê de Sistemas de Televisão Avançado ("ATSC" - Advanced Television Systems Committee), padrões da difusão digital de serviços integrados ("ISDB" - Integrated Services Digital Broadcasting), padrões da especificação de interface de serviço de dados por cabo ("DOCSIS" - Data Over Cable Service Interface Specification), padrões do sistema global para comunicações móveis ("GSM" - Global System Mobile Communications), padrões do acesso múltiplo por divisão de código ("CDMA" - code division multiple access), padrões do Projeto de Parceria de 3ª Geração ("3GPP" - 3rd Generation Partnership Project), padrões do Instituto Europeu de Normas de Telecomunicações ("ETSI" - European Telecommunications Standards Institute), padrões de protocolo de Internet ("IP" - Internet Protocol), padrões de protocolo de aplicação sem fio ("WAP" - Wireless
Application Protocol) e padrões do Instituto de Engenheiros Eletricistas e Eletrônicos ("IEEE" - Institute of Electrical and Electronics Engineers).
[00161] Os dispositivos de armazenamento podem incluir qualquer tipo de dispositivo ou mídia de armazenamento capaz de armazenar dados. Uma mídia de armazenamento pode incluir uma mídia legível por computador tangível ou não transitória. Uma mídia legível por computador pode incluir discos ópticos, memória flash, memória magnética ou qualquer outra mídia de armazenamento digital adequada. Em alguns exemplos, um dispositivo de memória ou porções do mesmo pode(m) ser descrito(as) como memória não volátil e, em outros exemplos, porções de dispositivos de memória podem ser descritas como memória volátil. Exemplos de memórias voláteis podem incluir memórias de acesso aleatório ("RAM" - random access memories), memórias de acesso aleatório dinâmicas ("DRAM" - dynamic random access memories), memórias de acesso aleatório estáticas ("SRAM" - static random access memories). Exemplos de memórias não voláteis podem incluir discos rígidos magnéticos, discos ópticos, disquetes, memórias flash ou formas de memórias de leitura eletricamente programáveis ("EPROM" - electrically programmable read only memories) ou memórias de leitura eletricamente apagáveis e programáveis ("EEPROM" - electrically erasable and programmable read only memories). O dispositivo (ou dispositivos) de armazenamento pode incluir cartões de memória (por exemplo, um cartão de memória digital seguro ("SD" - Secure Digital)), unidades de disco rígido internas/externas e/ou unidades de estado sólido internas/externas. Os dados podem ser armazenados em um dispositivo de armazenamento de acordo com um formato de arquivo definido.
[00162] Novamente com referência à Figura 7, o dispositivo de origem 102 inclui a fonte de vídeo 104, o codificador de vídeo 106, e a interface
108. A fonte de vídeo 104 pode incluir qualquer dispositivo configurado para capturar e/ou armazenar dados de vídeo. Por exemplo, a fonte de vídeo 104 pode incluir uma câmera de vídeo e um dispositivo de armazenamento operacionalmente acoplado à mesma. O codificador de vídeo 106 pode incluir qualquer dispositivo configurado para receber dados de vídeo e gerar um fluxo de bits compatível que represente os dados de vídeo. Um fluxo de bits compatível pode se referir a um fluxo de bits a partir do qual um decodificador de vídeo pode receber e reproduzir dados de vídeo. Aspectos de um fluxo de bits compatível podem ser definidos de acordo com um padrão de codificação de vídeo. Quando gera um fluxo de bits compatível, o codificador de vídeo 106 pode comprimir os dados de vídeo. A compressão pode ser com perdas (discernível ou indiscernível) ou sem perdas. A Interface 108 pode incluir qualquer dispositivo configurado para receber um fluxo de bits de vídeo compatível e transmitir e/ou armazenar o fluxo de bits de vídeo compatível em uma mídia de comunicação. A interface 108 pode incluir um cartão de interface de rede, como um cartão Ethernet, e pode incluir um transceptor óptico, um transceptor de radiofrequência ou qualquer outro tipo de dispositivo que possa enviar e/ou receber informações. Além disso, a interface 108 pode incluir uma interface de sistema de computador que pode permitir que um fluxo de vídeo compatível seja armazenado em um dispositivo de armazenamento. Por exemplo, a interface 108 pode incluir um conjunto de chips que suporta protocolos de barramento de interconexão de componentes periféricos ("PCI" - Peripheral Component Interconnect) e de interconexão expressa de componentes periféricos ("PCIe" - Peripheral Component Interconnect Express), protocolos de barramento proprietário, protocolos de barramento serial universal ("USB" - Universal Serial Bus), I2C ou qualquer outra estrutura lógica e física que possa ser usada para interconectar dispositivos pares.
[00163] Novamente com referência à Figura 7, o dispositivo de destino 120 inclui a interface 122, o decodificador de vídeo 124 e a tela
126. A interface 122 pode incluir qualquer dispositivo configurado para receber um fluxo de vídeo compatível de um meio de comunicação. A interface 108 pode incluir um cartão de interface de rede, como um cartão Ethernet, e pode incluir um transceptor óptico, um transceptor de radiofrequência ou qualquer outro tipo de dispositivo que possa receber e/ou enviar informações. Além disso, a interface 122 pode incluir uma interface de sistema de computador que possibilita que um fluxo de bits de vídeo compatível seja recuperado a partir de um dispositivo de armazenamento. Por exemplo, a interface 122 pode incluir um conjunto de chips que suporta protocolos de barramento de PCI e de PCIe, protocolos de barramento proprietário, protocolos de USB, I2C ou qualquer outra estrutura lógica e física que possa ser usada para interconectar dispositivos pares. O decodificador de vídeo 124 pode incluir qualquer dispositivo configurado para receber um fluxo de bits compatível e/ou variações aceitáveis do mesmo e reproduzir dados de vídeo a partir do mesmo. A tela 126 pode incluir qualquer dispositivo configurado para mostrar dados de vídeo. A tela 126 pode compreender um dentre uma variedade de dispositivos de exibição como uma tela de cristal líquido (LCD), uma tela de plasma, uma tela de diodo orgânico emissor de luz (OLED) ou outro tipo de tela. A tela 126 pode incluir uma tela de alta definição ou uma tela de ultra-alta definição. Deve-se notar que, embora no exemplo ilustrado na Figura 7, o decodificador de vídeo 124 seja descrito como emitindo dados para a tela 126, o decodificador de vídeo 124 pode ser configurado para fornecer dados de vídeo para vários tipos de dispositivos e/ou subcomponentes dos mesmos. Por exemplo, o decodificador de vídeo 124 pode ser configurado para emitir dados de vídeo para qualquer meio de comunicação, conforme descrito na presente invenção.
[00164] A Figura 8 é um diagrama de blocos que ilustra um exemplo de codificador de vídeo 200 que pode implementar as técnicas para codificar os dados de vídeo descritos na presente invenção. Deve-se notar que, embora o codificador de vídeo exemplificador 200 seja ilustrado como tendo blocos funcionais distintos, tal ilustração é para propósitos descritivos e não limita o codificador de vídeo 200 e/ou subcomponentes do mesmo a uma arquitetura específica de software ou hardware. As funções do codificador de vídeo 200 podem ser executadas com o uso de qualquer combinação de implementações de hardware, firmware e/ou software. Em um exemplo, o codificador de vídeo 200 pode ser configurado para codificar dados de vídeo de acordo com as técnicas aqui descritas.
[00165] O codificador de vídeo 200 pode executar codificação de intrapredição e codificação de interpredição de áreas de imagem, e, dessa forma, pode ser chamado de codificador de vídeo híbrido. No exemplo ilustrado na Figura 8, o codificador de vídeo 200 recebe blocos de vídeo de origem. Em alguns exemplos, os blocos de vídeo de origem podem incluir áreas de imagem que foram divididas de acordo com uma estrutura de codificação. Por exemplo, os dados de vídeo de origem podem incluir macroblocos, CTUs, CBs, subdivisões dos mesmos e/ou outra unidade de codificação equivalente. Em alguns exemplos, o codificador de vídeo 200 pode ser configurado para executar subdivisões adicionais de blocos de vídeo de origem. Deve-se notar que algumas técnicas descritas na presente invenção podem ser geralmente aplicáveis a codificação de vídeo, independentemente de como os dados de vídeo de origem são particionados antes e/ou durante a codificação. No exemplo ilustrado na Figura 8, o codificador de vídeo 200 inclui o somador 202, o gerador de coeficiente de transformada 204, a unidade de quantificação de coeficiente 206, a unidade de processamento de transformação/quantificação inversa 212, o somador 210, a unidade de processamento de intrapredição 212, a unidade de processamento de interpredição 214, a unidade de filtro 216, e a unidade de codificação por entropia 218.
[00166] Conforme ilustrado na Figura 8, o codificador de vídeo 200 recebe blocos de vídeo de origem e emite um fluxo de bits. O codificador de vídeo 200 pode gerar dados residuais mediante a subtração de um bloco de vídeo preditivo de um bloco de vídeo de origem. O somador 202 representa um componente configurado para executar esta operação de subtração. Em um exemplo, a subtração de blocos de vídeo ocorre no domínio de pixel. O gerador de coeficiente de transformada 204 aplica uma transformada, como uma transformada discreta de cosseno ("DCT" - discrete cosine transform), uma transformada discreta de seno ("DST" - discrete sine transform) ou uma transformada conceitualmente similar, ao bloco residual ou subdivisões do mesmo (por exemplo quatro transformadas de 8x8 podem ser aplicadas a uma matriz de 16x16 de valores residuais) para produzir um conjunto de coeficientes de transformada residuais. O gerador de coeficiente de transformada 204 pode ser configurado para executar quaisquer e todas as combinações das transformadas incluídas na família de transformadas trigonométricas discretas. O gerador de coeficiente de transformada 204 pode emitir coeficientes de transformada para a unidade de quantificação de coeficiente 206. A unidade de quantificação de coeficiente 206 pode ser configurada para executar a quantificação dos coeficientes de transformada. Conforme descrito acima, o grau de quantificação pode ser modificado mediante o ajuste de um parâmetro de quantificação. A unidade de quantificação de coeficiente 206 pode ser adicionalmente configurada para determinar parâmetros de quantificação ("QP" - quantization parameters) e emitir dados QP (por exemplo, dados usados para determinar um tamanho de grupo de quantificação e/ou valores delta QP) que podem ser usados por um decodificador de vídeo para reconstruir um parâmetro de quantificação para realizar quantificação inversa durante a decodificação de vídeo. Deve-se notar que em outros exemplos, um ou mais parâmetros adicionais ou alternativos podem ser usados para determinar um nível de quantificação (por exemplo, fatores de escala). As técnicas aqui descritas podem ser geralmente aplicáveis à determinação de um nível de quantificação para coeficientes de transformada que correspondem a um componente de dados de vídeo com base em um nível de quantificação para coeficientes de transformada que correspondem a outro componente de dados de vídeo.
[00167] Conforme ilustrado na Figura 8, os coeficientes de transformada quantificados são produzidos para a unidade de processamento de transformada/quantificação inversa 208. A unidade de processamento de transformada/quantificação inversa 208 pode ser configurada para aplicar uma quantificação inversa e uma transformação inversa para gerar dados residuais reconstruídos. Conforme ilustrado na Figura 8, no somador 210, os dados residuais reconstruídos podem ser adicionados a um bloco de vídeo preditivo. Dessa maneira, um bloco de vídeo codificado pode ser reconstruído e o bloco de vídeo reconstruído resultante pode ser usado para avaliar a qualidade de codificação para uma dada previsão, transformação e/ou quantização. O codificador de vídeo 200 pode ser configurado para executar múltiplas passagens de codificação (por exemplo executar codificação enquanto varia um ou mais dentre uma previsão, parâmetros de transformação e parâmetros de quantificação). A distorção de taxa de um fluxo de bits ou outros parâmetros de sistema pode ser otimizada com base na avaliação de blocos de vídeo reconstruídos. Além disso, blocos de vídeo reconstruídos podem ser armazenados e usados como referência para prever blocos subsequentes.
[00168] Conforme descrito acima, um bloco de vídeo pode ser codificado com o uso de um modo intra previsão. A unidade de processamento intraprevisão 212 pode ser configurada para selecionar um modo intraprevisão para um bloco de vídeo atual. A unidade de processamento intrapredição 212 pode ser configurada para usar um modo de codificação ISP que pode ser usado para intrapredição. Em um exemplo, o modo de codificação de ISP pode ser baseado no modo de codificação de ISP descrito acima em relação a JVET-M1001. Adicionalmente, de acordo com as técnicas da presente invenção, a unidade de processamento intrapredição 212 pode ser configurada de modo que algumas subpartições possam ser proibidas para alguns tamanhos de bloco, se o tamanho mínimo de transformada não suportar as dimensões da subpartição. Adicionalmente, outra consideração para não permitir subpartições para alguns tamanhos de bloco pode ser que a capacidade de processamento pode ser adversamente afetada se as subpartições e seus tamanhos de transformação correspondentes forem pequenos (por exemplo, 2x2, 1x16 transformadas). Por exemplo, se um tamanho de bloco atual for 4x16 (amostras de luma), então, uma divisão em 4 subpartições de 1x16 pode não ser permitida. A unidade de processamento de intraprevisão 212 pode ser configurada para avaliar um quadro e/ou uma área da mesma e determinar um modo de intraprevisão para usar para codificar um bloco atual. Conforme ilustrado na Figura 8, a unidade de processamento de intrapredição 212 emite dados de intrapredição (por exemplo elementos de sintaxe) para a unidade de codificação por entropia 218 e para o gerador de coeficiente de transformada 204.
[00169] Novamente com referência à Figura 8, a unidade de processamento de interpredição 214 pode ser configurada para executar codificação de interpredição para um bloco de vídeo atual. A unidade de processamento de interprevisão 214 pode ser configurada para receber blocos de vídeo de origem e calcular informações de movimento para PUs de um bloco de vídeo. Um vetor de movimento pode indicar o deslocamento de uma PU (ou estrutura de codificação similar) de um bloco de vídeo dentro de um quadro de vídeo atual em relação a um bloco preditivo dentro de um quadro de referência. A codificação de interprevisão pode usar uma ou mais imagens de referência. Por exemplo, a unidade de processamento de interpredição 214 pode localizar um bloco de vídeo preditivo dentro de um buffer de quadro (não mostrado na Figura 8). Deve-se notar que a unidade de processamento de interpredição 214 pode ser adicionalmente configurada para aplicar um ou mais filtros de interpolação a um bloco residual reconstruído para calcular valores de pixel de subnúmero inteiro para uso na estimativa de movimento. Além disso, a previsão de movimento pode ser unipreditiva (usar um vetor de movimento) ou bipreditiva (usar dois vetores de movimento). A unidade de processamento de interpredição 214 pode ser configurada para selecionar um bloco preditivo com o cálculo de uma diferença de pixel determinada, por exemplo, pela soma da diferença absoluta ("SAD" - sum of absolute difference), soma da diferença quadrada ("SSD" - sum of square difference) ou outra métrica de diferença. A unidade de processamento de interpredição 214 pode emitir dados de predição do movimento para um vetor de movimento calculado para a unidade de codificação por entropia 218.
[00170] Novamente com referência à Figura 8, conforme ilustrado na Figura 8, a unidade de processamento interpredição 214 pode receber bloco de vídeo reconstruído através da unidade de filtro 216, que pode ser parte de um processo de filtragem em circuito. A unidade de filtro 216 pode ser configurada para executar desbloqueio e/ou filtragem de deslocamento adaptável de amostra ("SAO" - Sample Adaptive Offset). Conforme descrito acima, no documento JVET-M1001, os contornos de subpartição do modo de codificação ISP não são considerados para desbloqueio, o que faz com que o desbloqueio não seja executado nos contornos de subpartição, o que pode levar a artefatos visuais. Em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que o desbloqueio possa ser realizado nos contornos de subpartição.
[00171] Conforme descrito acima, em JVET-M1001, o valor de bS é usado para determinar se/como desbloqueio é aplicado a um contorno específico. Em um exemplo, a unidade de filtro 216 pode ser configurada para ajustar um valor bS para um valor diferente de zero (por exemplo, 2), para contornos de subpartição de modo de codificação ISP. Deve-se notar que, embora o modo de codificação ISP seja usado apenas para o componente luma, em alguns exemplos, o valor bS de um contorno correspondente para um componente de saturação (ou o canal de saturação) pode ser ajustado para um valor diferente de zero. Adicionalmente, em um exemplo, o contorno correspondente para um componente de saturação pode ser definido como não ocorrendo ou pode ser definido para ter um valor bS definido como 0. Deve-se notar que a definição de um valor bS para um valor diferente de zero (por exemplo, 2) para contornos de subpartição de modo de codificação ISP não significa necessariamente que o desbloqueio será realizado no contorno, uma vez que outras condições podem precisar ser satisfeitas. Por exemplo, em um caso, um contorno de subpartição no modo de codificação ISP pode ser necessário para coincidir com uma grade de desbloqueio de amostra NxN. Ou seja, por exemplo, se uma grade de desbloqueio for 8x8, os contornos de subpartição do modo de codificação ISP que coincidem com a grade 8x8 podem ser desbloqueados.
[00172] Em um exemplo, a unidade de filtro 216 pode ser configurada para definir um valor bS para um valor diferente de zero (por exemplo, 2), para contornos de subpartição de modo de codificação ISP de acordo com o seguinte processo de derivação de contorno de sub-bloco de codificação:
[00173] As entradas para este processo são:
[00174] - um local (xCb, yCb) especificando a amostra superior esquerda do bloco de codificação atual em relação à amostra superior esquerda da imagem atual,
[00175] - uma variável nCbW que especifica a largura do bloco de codificação atual,
[00176] - uma variável nCbH especificando a altura do bloco de codificação atual,
[00177] - uma variável cIdx especificando o índice de componente da imagem,
[00178] - uma matriz bidimensional (nCbW)x(nCbH) edgeFlags de componente com índice cIdx,
[00179] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada.
[00180] A saída desse processo é a matriz bidimensional (nCbW)x(nCbH) modificada edgeFlags do componente com índice cIdx.
[00181] O número de sub-blocos de codificação na direção horizontal numSbX e na direção vertical numSbY são derivados da seguinte forma:
[00182] - Se CuPredMode[xCb][yCb] for igual a MODE_INTRA e (IntraSubPartitionsSplitType for igual a ISP_NO_SPLIT ou índice de componente cIdx indica saturação), numSbX e numSbY serão ambos definidos como iguais a 1.
[00183] - Caso contrário, se CuPredMode[xCb][yCb] for igual a MODE_INTRA e IntraSubPartitionsSplitType for igual a ISP_VER_SPLIT, e o índice de componente cIdx indicar luma, definir o conjunto numSbX igual a NumlntraSubPartitions.
[00184] - Caso contrário, se CuPredMode[xCb][yCb] for igual a MODE_INTRA e IntraSubPartitionsSplitType for igual a
ISP_HOR_SPLIT, e o índice de componente cIdx indica luma, definir o conjunto numSbY é igual a NumlntraSubPartitions.
[00185] - Caso contrário, numSbX e numSbY são definidos como sendo igual a NumSbX[xCb] [yCb] e NumSbY[xCb][yCb], respectivamente.
[00186] Dependendo do valor de edgeType, aplica-se o seguinte:
[00187] - Se edgeType for igual a EDGE_VER e numSbX for maior que 1, o seguinte se aplica para i = 1.. min((nCbW / 8) - 1, numSbX - 1), k = 0.. nCbH - 1:
[00188] edgeFlags[i * Max(8, nCbW / numSbX)][k] = 1
[00189] - Caso contrário, se edgeType for igual a EDGE_HOR e numSbY for maior que 1, o seguinte se aplica para j = 1.. min((nCbH / 8) - 1, numSbY - 1), k = 0.. nCbW - 1: edgeFlags[k] [j * Max(8, nCbH / numSbY)] = 1
[00190] E o seguinte processo de derivação de resistência de contorno:
[00191] As entradas para este processo são:
[00192] - uma matriz de amostra de imagem recPicture,
[00193] - um local (xCb, yCb) especificando a amostra superior esquerda do bloco de codificação atual em relação à amostra superior esquerda da imagem atual,
[00194] - uma variável nCbW que especifica a largura do bloco de codificação atual,
[00195] - uma variável nCbH especificando a altura do bloco de codificação atual,
[00196] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada,
[00197] - uma variável cIdx especificando o índice de componente da imagem,
[00198] - uma matriz bidimensional (nCbW)x(nCbH) edgeFlags de componente com índice cIdx.
[00199] A saída desse processo é uma matriz bidimensional (nCbW)x(nCbH) bS especificando a intensidade de filtragem de contorno do componente com índice cIdx.
[00200] As variáveis xDi, yDj, xN e yN são derivadas da seguinte forma:
[00201] - Se edgeType for igual a EDGE_VER, xDi é definido como sendo igual a (i << 3), yDj é definido como sendo igual a (j << 2), xN é definido como sendo igual a Max(0, (nCbW / 8) - 1) e yN é definido como sendo igual a (nCbH / 4) - 1.
[00202] - Caso contrário (edgeType é igual a EDGE_HOR), xDi é definido igual a (i << 2), yDj é definido igual a (j << 3), xN é definido igual a (nCbW / 4) - 1 e yN é definido igual a Max(0, (nCbH / 8) - 1).
[00203] Para xDi com i = 0.. xN e yDj com j = 0.. yN, aplica-se o seguinte:
[00204] - Se edgeFlags[xDi] [yDj] for igual a 0, a variável bS[xDi] [yDj] é definida como sendo igual a 0.
[00205] - Caso contrário, o seguinte se aplica:
[00206] - Os valores de amostra p0 e q0 são derivados da seguinte forma:
[00207] - Se edgeType for igual a EDGE_VER, p0 é definido como sendo igual a recPicture [xCb + xDi - 1] [yCb + yDj] e q0 é definido como sendo igual a recPicture [xCb + xDi] [yCb + yDj].
[00208] - Caso contrário (edgeType é igual a EDGE_HOR), p0 é definido como sendo igual a recPicture [xCb + xDi] [yCb + yDj - 1] e q0 é definido como sendo igual a recPicture [xCb + xDi][yCb + yDj].
[00209] - A variável bS[xDi][yDj] é derivada por componente da seguinte forma:
[00210] - Se a amostra p0 ou q0 estiver no bloco de codificação de uma unidade de codificação codificada com o modo de intrapredição,
bS[xDi][yDj] é definido como sendo igual a 2.
[00211] Deve-se notar que no que diz respeito ao processo de derivação do contorno de sub-bloco de codificação acima, de acordo com as técnicas da presente invenção, em geral, uma borda de ISP interna a um bloco (por exemplo, uma borda interna a um bloco de codificação e alinhada com uma borda de bloco de transformação para um componente) pode ser uma candidata para desbloqueio e outras condições podem precisar ser satisfeitas antes de serem desbloqueadas. Adicionalmente, deve-se notar que no que diz respeito ao processo de derivação de resistência de contorno acima, de acordo com a técnica da presente invenção, em uma modalidade, pode ser atribuído a uma borda que não é marcada como uma candidata para desbloqueio um valor predeterminado de resistência de contorno (por exemplo, 0) e/ou em uma modalidade, quando qualquer lado de um contorno (por exemplo, contorno de transformada) é codificado com o uso de modo intra, então, a intensidade de contorno pode ser ajustada em um valor predeterminado (por exemplo, 2). Em um exemplo, a fim de simplificar a execução de desbloqueio, a unidade de filtro 216 pode ser configurada de modo que a grade de desbloqueio possa ser ajustada para ter dimensões específicas (por exemplo, grade de amostras de luma 4x4), onde, conforme fornecido acima, os contornos coincidentes com a circunferência de desbloqueio são considerados para desbloqueio. Ou seja, uma grade de desbloqueio fornece a menor granularidade possível para o desbloqueio. Em um exemplo, isso pode ser realizado: considerando-se apenas tamanhos de bloco (perpendiculares) (para um componente/canal) em cada lado do contorno de desbloqueio e a categoria de borda a ser desbloqueada. Por exemplo, a seleção de filtro longo de luma pode ser feita passando- se pela Tabela 6 de cima para baixo e identificando-se a primeira entrada correspondente para tamanhos de bloco e categoria de borda.
Lado P Lado Q Categoria de Borda Filtro longo de luma (amostras de (amostras de selecionado: Número luma) luma) de amostras que podem ser filtradas (lado P+lado Q) tuP >= 32 tuQ >= 32 Transformar contorno 7+7 tuP >=32 tuQ < 32 Contorno de transformação 7+3 tuP < 32 tuP >= 32 Contorno de transformação 3+7 tuP < 32 tuQ < 32 Contorno de transformação 3+3 * * Contorno de predição 3+3 Tabela 6
[00212] Em relação à Tabela 6 e às Tabelas 7'10, abaixo, em um exemplo, (lado P+lado Q) para luma corresponde às variáveis maxFilterLengthP e maxFilterLengthQ no processo de filtragem listado abaixo:
[00213] As entradas para este processo são:
[00214] - as variáveis maxFilterLengthP e maxFilterLengthQ,
[00215] - os valores de amostra pi e qj com i = 0.. maxFilterLengthP e j = 0.. maxFilterLengthQ,
[00216] - os locais de pi e qj, (xPi, yPi) e (xQj, yQj) com i = 0.. maxFilterLengthP-1 e j = 0.. maxFilterLengthQ-1,
[00217] - uma variável tc.
[00218] Os resultados desse processo são:
[00219] - os valores da amostra filtrada pi' e qj' com i = 0.. maxFilterLengthP - 1,
[00220] J = 0.. maxFilterLengtQ - 1.
[00221] As variáveis refMiddle, ref4P e refQ são derivadas da seguinte forma: Se maxFilterLengthP for igual a maxFilterLengthQ Se maxFilterLengthP for igual a 5 refMiddle = (p4 + p5 + 2* (p2 + p1 + p0 + q0 + q1+ q2)+q3 + q4+8) >> 4
Caso contrário refMiddle = (p6 -+ p5 -+ p4 + p3 + p2 + p1 + 2* (p0 + q0) + q1+q2 + q3 + q4 + q5 + q6+ 8) >> 4 Caso contrário, se ((maxFilterLengthQ é igual a 7 e maxFilterLengthP é igual a 5) ou (maxFilterLengthQ é igual a 5 e maxFilterLengthP é igual a 7) refMiddle = (p4 + p3 + 2* (p2 +p1 + p0 + q0+ q1+q2)+q3 + q4+8) >> 4 Caso contrário, se ((maxFilterLengthQ é igual a 5 e maxFilterLengthP é igual a 3) ou (maxFilterLengthQ é igual a 3 e maxFilterLengthP é igual a 5) refMiddle = (p3 + p2 + p1 + p0 + q0 + q1+ q2 + q3 + 4) >> 3 Caso contrário, se ((maxFilterLengthQ é igual a 7 e maxFilterLengthP é igual a 3) refMiddle = (2*(p2 + p1 + p0 + q0) + p0 + p1 + q1+q2 +q3 +q4 +q5 + q6+8) >> 4 de outro modo refMiddle = (p6 -+ p5 -+ p4 + p3 + p2 + p1+ 2*(q2 + q1 + q0 + p0) + q0 + q1 + 8) >> 4 refP = (pmaxFilterLengtP -+ pmaxFilterLengthP-1 -+ 1) >> 1 refQ = (qmaxFilterLengtQ -+ qmaxFilterLengthQ-1 -+ 1) >> 1
[00222] As variáveis fi e tcPDi são definidas da seguinte forma: Se maxFilterLengthP é igual a 7 f0.. 6= {59, 50, 41, 32, 23, 14, 5} tcPD0.. 6={6, 5, 4, 3, 2, 1, 1} Caso contrário, se maxFilterLengthP é igual a 5 f0.. 4={58, 45, 32,19,6} tcPD0.. 4 = {6, 5, 4, 3, 2} Caso contrário f0.. 2={53, 32, 11} tcPD0.. 2= {6, 4, 2}
As variáveis gi e tcQDj são definidas da seguinte forma: Se maxFilterLengthQ é igual a 7 g0.. 6 = {59, 50, 41, 32, 23, 14, 5} tcQD0.. 6={6, 5, 4, 3, 2, 1, 1} Caso contrário, se maxFilterLengthQ é igual a g0.. 4= {58, 45, 32,19,6} tcQD0.. 4={6, 5, 4, 3,2} Caso contrário g0.. 2= {53, 32, 11} tcQD0.. 2= {6, 4, 2} pi' = Clip3(pi - (tc*tcPDi) >> 1, pi+ (tc*tcPDi) >> 1, (refMiddle*fi + refP*(64- fi) + 32) >6) qj' = Clip3(qj - (tc*tcQDj) >> 1, qj + (tc*tcQDj) >> 1, (refMiddle*gj + refP*(64-gj) + 32) >> 6) em que i = 0.. maxFilterLengthP-1 e j = 0.. maxFilterLengthQ-1
[00223] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, pi' é substituído pelo valor correspondente da amostra de entrada pi: com i = 0.. maxFilterLengthP - 1:
[00224] - pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xP0][yP0] é igual a 1.
[00225] - cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra p0 é igual a 1.
[00226] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, q i 'é substituído pelo valor de entrada correspondente qj: com j = 0.. maxFilterLengthQ - 1:
[00227] - pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xQ0] [yQ0] é igual a 1.
[00228] - cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra q0 é igual a 1.
em que,
[00229] pcm_loop_filter_disabled_flag especifica se o processo de filtro do circuito está desativado em amostras reconstruídas em uma unidade de codificação com pcm_flag igual a 1 da seguinte forma:
[00230] - Se pcm_loop_filter_disabled_flag for igual a 1, o filtro de desbloqueio e a amostra dos processos de filtro de deslocamento adaptável nas amostras reconstruídas em uma unidade de codificação com sinalizador de pcm igual a 1 são desabilitados.
[00231] - Caso contrário (valor de pcm_loop_filter_disabled_flag é igual a 0), o filtro de desbloqueio e a amostra dos processos do filtro de deslocamento adaptável nas amostras reconstruídas em uma unidade de codificação com pcm_flag igual a 1 não são desabilitados.
[00232] Quando pcm_loop_filter_disabled_flag não estiver presente, infere-se que ele é igual a 0.
[00233] O valor de cu_transquant_bypass_flag indica se as etapas de processamento de transformação inversa e alteração de escala (desquantificação) são ignoradas.
[00234] Em um exemplo, o lado P ou o lado Q sendo igual a 3 corresponde à filtragem forte descrita no processo de filtragem abaixo:
[00235] As entradas para este processo são:
[00236] - os valores de amostra pi e qi com i = 0.. 3,
[00237] - os locais de pi e qi, (xPi, yPi) e (xQi, yQi) com i = 0 a 2,
[00238] - uma variável dE,
[00239] - as variáveis dEp e dEq contendo decisões para filtrar amostras p1 e q1, respectivamente,
[00240] - uma variável tc.
[00241] Os resultados desse processo são:
[00242] - o número de amostras filtradas nDp e nDq,
[00243] - os valores da amostra filtrada pi' e qj' com i = 0.. nDp - 1, j
= 0.. nDq - 1.
[00244] Dependendo do valor de dE, aplica-se o seguinte:
[00245] - Se a variável dE for igual a 2, nDp e nDq serão ambos definidos como iguais a 3 e a filtragem forte a seguir se aplicará: tcD0.. 2={3, 2, 1} p0' = Clip3(p0 - tCD[0] * tC, p0 + tCD[0] * tC, (p2 + 2 * p1 + 2 * p0 + 2 * q0 + q1 + 4) >> 3) p1' = Clip3(p1 - tCD[l] * tC, p1 + tCD[l] * tC, (p2 + p1 + p0 + q0 + 2) >> 2) p2' = Clip3(p2 - tCD[2] * tC, p2 + tCD[2] *tC, (2 * p3 + 3 * p2 + p1 + p0 + q0 + 4) >> 3) q0' = Clip3(q0 - tCD[0] * tC, q0 + tCD[0]* tC, (p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 + 4) >> 3) q1' = Clip3(q1 - tCD[1] * tC, q1 + tCD[l] * tC, (p0 + q0 + q1 + q2 + 2) >> 2) q2' = Clip3(q2 - tCD[2] * tC, q2 + tCD[2] * tC, (p0 + q0 + q1 + 3 * q2 + 2 * q3 + 4) >> 3)
[00246] - Caso contrário, nDp e nDq serão definidos ambos iguais a 0 e a seguinte filtragem fraca se aplicará:
[00247] - O seguinte se aplica:
[00248] Δ = (9 * (q0- p0) -3* (q1-p1) + 8) >> 4
[00249] - Quando Abs(Δ) é menor que tC * 10, as seguintes etapas ordenadas se aplicam:
[00250] Os valores da amostra filtrada p0' e q0' são especificados da seguinte forma: Δ = Clip3(-tC, tC, Δ) p0' = Clip1Y(p0 + Δ) q0' = Clip1Y(q0 - Δ)
[00251] Quando dEp é igual a 1, o valor da amostra filtrada p1' é especificado da seguinte forma: Δp = Clip3(-(tC >> 1), tC >> 1, (((p2 + p0 + 1) >> 1) - p1 + Δ) >> 1)
[00252] p1' = Clip1Y(q1 + Δ p)
[00253] Quando dEq é igual a 1, o valor da amostra filtrada q1 'é especificado da seguinte forma: Δq = Clip3(-(tC >> 1), tC >> 1, ((q2 + q0 + 1) >> 1) - q1 - Δ) >> 1) q1' = Clip1Y(q1 + Δq)
[00254] nDp é definido como sendo igual a dEp + 1 e nDq é definido como sendo igual a dEq + 1.
[00255] Quando nDp é maior que 0 e uma ou mais das seguintes condições são verdadeiras, nDp é definido como sendo igual a 0:
[00256] pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xP0][yP0] é igual a 1.
[00257] cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra p0 é igual a 1.
[00258] Quando nDq é maior que 0 e uma ou mais das seguintes condições são verdadeiras, nDq é definido como sendo igual a 0:
[00259] - pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xQ0][yQ0] é igual a 1.
[00260] - cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra q0 é igual a 1.
[00261] Deve-se notar que o uso da Tabela 6 minimiza o número de verificações condicionais e evita operações inconsistentes ao longo de diferentes bordas (por exemplo, dentro da CU).
[00262] Em um exemplo, a seleção de filtro longo de luma pode ser feita passando-se pela Tabela 7 de cima para baixo e identificando-se a primeira entrada correspondente para tamanhos de bloco e categoria de borda. Lado P Lado Q Categoria de Borda Filtro longo de luma (amostras de (amostras de selecionado: Número luma) luma) de amostras que podem ser filtradas (lado P+lado Q) tuP >= 32 tuQ >= 32 Contorno de transformação 7+7 tuP >=32 tuQ < 32 Contorno de transformação 7+5 tuP < 32 tuP >= 32 Contorno de transformação 5+7 tuP < 32 tuQ < 32 Contorno de transformação 3+3 * * Contorno de predição 3+3 Tabela 7
[00263] Deve-se notar que o uso da Tabela 7 minimiza o número de verificações condicionais e evita operações inconsistentes ao longo de diferentes bordas (por exemplo, dentro da CU).
[00264] Em um exemplo, a seleção de filtro longo de luma pode ser feita passando-se pela Tabela 8 de cima para baixo e identificando-se a primeira entrada correspondente para tamanhos de bloco e categoria de borda.
Lado P Lado Q Categoria de Borda Filtro longo de luma (amostras (amostras de selecionado: Número de de luma) luma) amostras que podem ser filtradas (lado P+lado Q) tuP >= 32 tuQ >= 32 Contorno de transformação 5+5 tuP >=32 tuQ < 32 Contorno de transformação 5+3 tuP < 32 tuP >= 32 Contorno de transformação 3+5 tuP < 32 tuQ < 32 Contorno de transformação 3+3 * * Contorno de predição 3+3 Tabela 8
[00265] Deve-se notar que o uso da Tabela 8 minimiza o número de verificações condicionais e evita operações inconsistentes ao longo de diferentes bordas (por exemplo, dentro da CTU e ao longo do contorno superior da CTU).
[00266] Em um exemplo, a seleção de filtro longo de luma pode ser feita passando-se pela Tabela 9 ou pela Tabela 10 de cima para baixo e identificando-se a primeira entrada correspondente para tamanhos de bloco e categoria de borda.
Lado P Lado Q Categoria de Borda Filtro longo de luma (amostras (amostras de selecionado: número de de luma) luma) amostras que podem ser filtradas (lado P+lado Q) tuP >= 32 tuQ >= 32 Contorno de transformação 7+7 * * Contorno de predição 3+3 Tabela 9 Lado P Lado Q Categoria de Borda Filtro longo de luma (amostras (amostras de selecionado: número de de luma) luma) amostras que podem ser filtradas (lado P+lado Q) tuP >= 32 tuQ >=32 Contorno de transformação 5+5 * * Contorno de predição 3+3 Tabela 10
[00267] Em um exemplo, a seleção de filtro de saturação longa pode ser feita passando-se pela Tabela 11 ou Tabela 12 de cima para baixo e identificando-se a primeira entrada correspondente para tamanhos de bloco e categoria de borda.
Lado P Lado Q Categoria de Borda Filtro longo de luma (amostras (amostras de selecionado: número de de luma) luma) amostras que podem ser filtradas (lado P+lado Q) tuP >= 8 tuQ >= 8 Contorno de transformação 3+3 * * * 1+1 Tabela 11 Lado P Lado Q Categoria de Borda Filtro longo de luma (amostras (amostras de selecionado: número de de luma) luma) amostras que podem ser filtradas (lado P+lado Q) tuP >= 8 tuQ >= 8 Contorno de transformação 3+3 tuP >= 8 tuQ < 8 Contorno de transformação 3+1 tuP < 8 tuP >= 8 Contorno de transformação 1+3 * * * 1+1 Tabela 12
[00268] Com relação à Tabela 11 e à Tabela 12, em um exemplo, o lado P ou o lado Q sendo 3 para saturação corresponde à operação de filtragem quando filterLength é igual a 3 no processo descrito a seguir. Em um exemplo, o lado P ou Q sendo 1 para saturação corresponde à operação de filtragem quando filterLength não é igual a 3 no processo descrito abaixo. Em outros exemplos, a operação de filtragem para 1+1 pode corresponder à operação de filtragem fraca de saturação descrita acima.
[00269] Esse processo é invocado apenas quando o ChromaArrayType não for igual a 0.
[00270] As entradas para este processo são:
[00271] - a variável filterLength
[00272] - os valores da amostra de saturação pi e qi com i = 0.. filterLength,
[00273] - os locais de saturação de p i and qi , (xPi , yPi ) e (xQi , yQi ) ,
[00274] - um tC variável
[00275] Os resultados desse processo são:
[00276] - os valores da amostra filtrada pi' e qj' com i = 0.. filterLength - 1.
[00277] Dependendo do valor de filterLength, aplica-se o seguinte:
[00278] - Se a variável filterLength for igual a 3, aplica-se a filtragem forte: p0' = Clip3(p0 - tC, p0+ tC, (p3 + p2 + p1 + 2 * p0+ q0+ q1 + q2 + 4) >> 3) p1' = Clip3(p1 - tC, p1 + tC, (2 * p3 + p2 + 2 * p1 + p0 + q0+ q1 + 4) >> 3) p2' = Clip3(p2 - tC, p2 + tC, (3 * p3 + 2 * p2 + p1 + p0 + q0 + 4) >> 3) q0' = Clip3(q0 - tC, q0 + tc, (p2 + p1 + p0 + 2 * q0 + q1 + q2 + q3 + 4) >> 3) q1' = Clip3(q1 - tC, q1 + tC, (p1 + p0 + q0 + 2 * q1 + q2 + 2 * q3 + 4) >> 3) q2' = Clip3(q2 - tC, q2 + tC, (p0 + q0 + q1 + 2 * q2 + 3 * q3 + 4) >> 3)
[00279] - Caso contrário, a seguinte filtragem fraca se aplica: Δ = Clip3(-tC, tC, (((q0 – p0) << 2) + p1 – q1 + 4) >> 3))
p0' = Clip1C(p0 + Δ) q0' = Clip1C(q0 - Δ)
[00280] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, pi' é substituído pelo valor correspondente da amostra de entrada pi: com i = 0.. filterLength – 1:
[00281] - pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xP0 * SubWidthC][yP0 * SubHeightC] é igual a 1.
[00282] - cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra p0 é igual a 1.
[00283] Quando uma ou mais das seguintes condições são verdadeiras, o valor da amostra filtrada, q i 'é substituído pelo valor de entrada correspondente de amostra qi: com i = 0.. filterLength – 1:
[00284] - pcm_loop_filter_disabled_flag é igual a 1 e pcm_flag[xQ0 * SubWidthC][yQ0 * SubHeightC] é igual a 1.
[00285] - cu_transquant_bypass_flag da unidade de codificação que inclui o bloco de codificação contendo a amostra q0 é igual a 1.
[00286] Com relação às Tabelas de 6 a 12, em um exemplo, um ou mais dos seguintes podem ser aplicados: ao ler o valor de amostra para decisões, valores de amostra não desbloqueados podem ser lidos e ao ler valores de amostra para filtragem, valores de amostra não desbloqueados podem ser lidos. Deve-se notar que, em alguns casos, como consequência da simplificação da lógica de seleção, pode não ser possível executar a execução paralela de desbloqueio na direção horizontal (ou vertical) sem o uso de um buffer adicional.
[00287] Em um exemplo, a unidade de filtro 216 pode ser configurada de modo que uma ordem de processamento de desbloqueio seja determinada ou selecionada para bordas durante o desbloqueio. Em um exemplo, uma ordem de processamento pode incluir o desbloqueio de bordas horizontais de cima para baixo (antes do desbloqueio de uma borda, bordas acima da mesma são desbloqueadas) e, então, o desbloqueio de bordas verticais de desbloqueio de esquerda para direita (antes do desbloqueio de uma borda, bordas à esquerda da mesma são desbloqueadas). Em um exemplo, uma ordem de processamento pode incluir desbloquear as bordas de desbloqueio verticais da esquerda para a direita (antes de desbloquear uma borda, as bordas à esquerda da mesma são desbloqueadas) e, então, desbloquear as bordas de desbloqueio horizontal de cima para baixo (antes de desbloquear uma borda, as bordas acima da mesma são desbloqueadas).
[00288] Em um exemplo, a unidade de filtro 216 pode ser configurada de modo que uma ordem de processamento de desbloqueio possa ser definida. Por exemplo, as CTUs são processadas em ordem de codificação e dentro de uma CTU, as CUs são processadas em ordem de codificação onde, para uma CU, apenas as bordas esquerda e superior são processadas. Em um exemplo, durante o processamento, as bordas de transformação verticais de bloco que podem ser desbloqueadas são primeiro processadas da esquerda para a direita, e, então, as bordas de transformação horizontais que podem ser desbloqueadas são processadas de cima para baixo. Em um exemplo, durante o processamento, as bordas de transformação horizontal de bloco que podem ser desbloqueadas são processadas de cima para baixo, e, então, as bordas de transformação verticais que podem ser desbloqueadas são primeiro processadas da esquerda para a direita.
[00289] Em um exemplo, ao ler o valor de amostra para decisões, valores de amostra não desbloqueados, bem como desbloqueados podem ser lidos. Em um exemplo, ao ler os valores de amostra para filtragem, os valores de amostra não desbloqueados, bem como desbloqueados podem ser lidos.
[00290] Em um exemplo, a unidade de filtro 216 pode ser configurada de modo que as bordas de contorno de grupo de ladrilhos possam ser desbloqueadas com o uso de uma segunda passagem. Em um exemplo, a unidade de filtro 216 pode ser configurada de modo que as bordas de contorno do ladrilho possam ser desbloqueadas com o uso de uma segunda passagem. Em um exemplo, a unidade de filtro 216 pode ser configurada de modo que as bordas de contorno das fatias possam ser desbloqueadas com o uso de uma segunda passagem. Em um exemplo, a unidade de filtro 216 pode ser configurada de modo que as bordas de contorno do conjunto de ladrilhos constritos por movimento (TCMS) possam ser desbloqueadas com o uso de uma segunda passagem. Em um exemplo, para o grupo de ladrilhos/ladrilho/fatia/TCMS, as amostras (subconjunto ou todas) à esquerda e (subconjunto ou todas) as amostras à direita podem ser desbloqueadas/ filtradas antes que as amostras no contorno do grupo de ladrilhos sejam desbloqueadas/filtradas. Em um exemplo, para as amostras do grupo de ladrilhos/ladrilho/fatia/TCMS, contorno horizontal (subconjunto ou todas) acima e (subconjunto ou todas) as amostras abaixo podem ser desbloqueadas/filtradas antes que as amostras no contorno do grupo de ladrilhos sejam desbloqueadas/filtradas.
[00291] Em um exemplo, a unidade de filtro 216 pode ser configurada de modo que um desbloqueio de x+x (por exemplo, 5) seja executado em todas as bordas de desbloqueio em uma grade de desbloqueio. Em um exemplo, o tamanho de um bloco em um lado levaria ao desbloqueio de ambas as bordas do bloco (amostras no contorno de ambas as bordas são modificadas) com uma única operação de filtragem.
[00292] Como descrito em JVET-M1001, as CTUs são particionadas de acordo com uma estrutura de "quadtree" mais árvore de múltiplos tipos ("QTMT" - quadtree plus multi-type tree). No documento JVET-M1001, o canal de luma e o canal de saturação podem ser particionados de acordo com árvores separadas, que são chamadas de "uso de árvores duplas". No documento JVET-M1001, quando os blocos que são uma grade de luma 8x8 alinhados e contêm sub-blocos, os contornos de sub-bloco (a uma distância de 8) são marcados como uma borda de desbloqueio candidata. Em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que, quando árvores separadas (duplas) são usadas para particionamento e quando o canal de saturação está sendo processado, a intensidade do contorno é determinada com base nos valores correspondentes ao(s) componente(s) de saturação (por exemplo, vetores de movimento de componente de saturação). Em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que quando árvores separadas (duplas) são usadas para particionamento e quando o canal de luma está sendo processado, a intensidade de contorno seja determinada com base nos valores correspondentes apenas ao (s) componente(s) de luma (por exemplo, vetores de movimento de componente luma). Adicionalmente, deve-se notar que no caso de árvores de luma e saturação separadas (duplas), em alguns casos, as bordas de luma e saturação podem não ser alinhadas. Em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que, durante o processamento de uma única árvore de particionamento, uma intensidade de contorno correspondente a todos os componentes de cor possa ser definida e durante o processamento de uma árvore dupla, uma respectiva intensidade de contorno correspondente ao (s) componente(s) sendo processado(s) possa ser definida.
[00293] No documento JVET-M1001, as bordas internas (por exemplo, sub-bloco) de um bloco de transformação podem ser desbloqueadas mesmo no caso de residual diferente de zero. Em alguns casos, pode ser desejável desbloquear apenas quando o residual for zero ou pequeno. Em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que o desbloqueio de bordas internas (sub-bloco) de um bloco de transformação ocorra apenas quando a soma de valores absolutos do residual for menor que um limite. Em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que o desbloqueio das bordas (sub- bloco) internas de um bloco de transformação ocorra apenas quando o número de coeficientes diferentes de zero for menor que um limite.
[00294] Conforme descrito acima, em JVET-M1001, um valor bS é derivado como um de 0, 1 ou 2, e o valor bS pode ser usado em decisões de filtragem. Em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que as decisões de filtragem sejam adicional ou alternativamente determinadas com base em se um bloco Q ou um bloco P é um bloco grande (por exemplo, um bloco de transformação, um bloco de predição, um bloco de codificação, um sub-bloco). Em um exemplo, uma determinação de se um bloco Q é um bloco grande (isto é, bSideQisLargeBlk) ou um bloco P é um bloco grande (isto é, bSidePisLargeBlk) pode ser da seguinte forma:
[00295] Se edgeType for igual a EDGE_VER, as seguintes etapas ordenadas se aplicam: …
[00296] As variáveis bSidePisLargeBlk e bSideQisLargeBlk são derivadas da seguinte forma:
[00297] Se edgeType for igual a EDGE_HOR e (posição y de luma da amostra p0,0 % CtbSizeY) for igual a 0, definir bSidePisLargeBlk como 0
[00298] Caso contrário, se p0,0 pertencer ao bloco de transformação com largura em amostras de luma maior ou igual a 32, bSidePisLargeBlk é definido como sendo igual a 1, caso contrário, bSidePisLargeBlk é definido como sendo igual a 0.
[00299] Se q0,0 pertencer ao bloco de transformação com largura em amostras de luma maior ou igual a 32, bSideQisLargeBlk é definido como sendo igual a 1, caso contrário, bSideQisLargeBlk é definido como sendo igual a 0. …
[00300] Caso contrário, (edgeType é igual a EDGE_HOR), as seguintes etapas ordenadas se aplicarão: …
[00301] As variáveis bSidePisLargeBlk e bSideQisLargeBlk são derivadas da seguinte forma:
[00302] Se p0,0 pertencer ao bloco de transformação com altura maior ou igual a 32, bSidePisLargeBlk é definido como sendo igual a 1, caso contrário, bSidePisLargeBlk é definido como sendo igual a 0.
[00303] Se q0,0 pertencer ao bloco de transformação com altura maior ou igual a 32, bSideQisLargeBlk é definido como sendo igual a 1, caso contrário, bSideQisLargeBlk é definido como sendo igual a 0. …
[00304] Conforme descrito acima em relação às Figuras 10A e 10B, as informações de posição de SBT e de SBT no JVET-M1001 possibilitam oito partições de SBT, conforme ilustrado na Figura 10B. Com relação a cada um dentre (a) a (h) na Figura 10B, o tamanho (isto é, H ou W) da CU (ou outro bloco de vídeo) sendo dividido em sub-blocos resulta em diferentes tamanhos de sub-blocos SB0 e SB1. A Tabela 13 fornece um resumo dos diferentes tamanhos de sub-blocos SB0 e SB1 de acordo com o tamanho da CU que é dividida. Na Tabela 13, para uma CU que tem uma altura em amostras de luma, H, para divisões horizontais (a)a(d), a altura resultante em amostras de luma, hL. é especificado para os sub- blocos SB0 e SB1. De modo semelhante, na Tabela 13, para uma CU que tem uma largura em amostras de componente luma, W, para divisões verticais (e)-(h), a largura resultante em amostras de componente luma,
wL, é especificada para sub-blocos SB0 e SB1. Deve-se notar que em alguns casos, se uma CU tiver uma altura (ou largura) menor que um limite, a partição de uma CU em SB0 e SB1 pode não ser permitida. Por exemplo, com referência à Tabela 13, casos não são mostrados para uma CU que tem uma altura (ou largura) menor que um limite de 8. Deve-se notar que, em outro exemplo, outros limites podem ser usados, por exemplo, um limite de 16. Em tais exemplos, a Tabela 13 pode ser atualizada de acordo. Em um exemplo, o luma e o croma podem ser particionados de uma maneira diferente. Por exemplo, se um bloco de vídeo estiver em um intracorte com árvores separadas, o componente luma e o croma podem ter restrições diferentes. Adicionalmente, em um exemplo, as informações de SBT podem ser sinalizadas para luma e saturação separadamente (por exemplo, se um bloco de vídeo estiver em um intracorte com árvores separadas). Adicionalmente, conforme descrito acima, em JVET-M1001, se um lado de CU tiver 8 amostras de luma, a separação de H/4 ou W/4 correspondente não é permitida. Tais casos são ilustrados como NA na Tabela 13. Tamanho de H de CU 64 32 16 8 (a) hL: SB0, SB1 32, 32 16, 16 8, 8 4, 4 (b) hL: SB0, SB1 32, 32 16, 16 8, 8 4, 4 (c) hL: SB0, SB1 16, 48 8, 24 4, 12 NA (d) hL: SB0, SB1 48, 16 24, 8 12, 4 NA Partição Tamanho de W de CU de sub- 64 32 16 8 bloco (e) wL: SB0, SB1 32, 32 16, 16 8, 8 4, 4 (f) wL: SB0, SB1 32, 32 16, 16 8, 8 4, 4 (g) wL: SB0, SB1 16, 48 8, 24 4, 12 NA (h) wL: SB0, SB1 48, 16 24, 8 12, 4 NA Tabela 13
[00305] Para os propósitos de determinar se/como aplicar um desbloqueio de cada entrada na Tabela 13 pode ser atribuído um Caso. A Tabela 14 ilustra um exemplo de casos atribuídos a cada entrada na Tabela 13. Deve-se notar que no exemplo ilustrado na Tabela 14, casos comuns são atribuídos às divisões SBT horizontais e verticais correspondentes. Em outros exemplos, casos distintos podem ser atribuídos para divisões horizontais e divisões SBT verticais. Tamanho de H de CU 64 32 16 8 (a) hL: SB0, SB1 Caso A Caso E Caso I Caso M (b) hL: SB0, SB1 Caso D Caso H Caso L Caso N (c) hL: SB0, SB1 Caso B Caso F Caso J NA (d) hL: SB0, SB1 Caso C Caso G Caso K NA Partição Tamanho de W de CU de sub- 64 32 16 8 bloco (e) wL: SB0, SB1 Caso A Caso E Caso I Caso M (0) wL: SB0, SB1 Caso D Caso H Caso L Caso N (g) wL: SB0, SB1 Caso B Caso F Caso J NA (h) wL: SB0, SB1 Caso C Caso G Caso K NA Tabela 14
[00306] Conforme descrito acima, em relação à Tabela 2, as transformadas de núcleo horizontal (H) e vertical (V) executadas em um sub-bloco podem ser baseadas na posição do sub-bloco, no canal de cor do componente do sub-bloco e no tamanho do sub-bloco. Dessa forma, cada caso na Tabela 14 pode também ser associado a transformadas de núcleo horizontal (H) e vertical (V). Dessa forma, um caso na Tabela 14 pode corresponder a se uma transformação é realizada em SB0 ou SB1, um tamanho de SB0 ou SB1 e as transformadas de núcleo horizontal (H) e vertical (V) realizadas em SB0 ou SB1. Dessa forma, determinar se/como aplicar o desbloqueio a cada caso ilustrado na Tabela 14 pode ser aplicável para um sub-bloco que tem uma posição, um tamanho e transformadas centrais correspondentes a um caso ilustrado na Tabela 14, independentemente das técnicas do modo SBT usadas para gerar o sub-bloco. Ou seja, por exemplo, "CE6: Sub-block transform for inter blocks (CE6.4.1)", 13° Encontro de ISO/IEC JTC1/SC29/WG1 1, 9 a 18 de janeiro de 2019, Marraquexe, MA, documento JVET- M0140, que é chamado de JVET- M0140, descreve onde o particionamento de QT pode ser usado para gerar um sub-bloco SBT. No documento JVET-M0140, dados residuais são fornecidos para um dos sub-blocos. Dessa forma, um sub-bloco gerado de acordo com o documento JVET-M0140 pode corresponder a um caso na Tabela 14 em virtude de ter transformadas de mesmo tamanho (por exemplo, h ou w) e núcleo.
[00307] Em um exemplo, de acordo com a técnica da presente invenção, para propósitos de desbloqueio, regras que se aplicam a uma borda regular (por exemplo, bordas de CU) podem também ser aplicadas a bordas de sub-bloqueio de SBT. A Tabela 15 ilustra onde, para cada caso na Tabela 14, três bordas de sub-bloco SBT são especificadas (1) Esquerda ou de Topo (L ou T); (2) Média (M); e (3) Direita ou de Fundo (R ou B) e para cada borda, o número máximo de amostras que podem ser modificadas em cada lado da borda é especificado; os filtros longos permitidos para desbloqueio de acordo com JVET- M0471, descrito acima, são especificados; e a filtragem longa preferencial de acordo com as técnicas da presente invenção é especificada.
[00308] Com relação à tabela 15, quando "não determinado" é fornecido para o número máximo de amostras que podem ser modificadas em cada lado da borda, isso indica que o número de amostras depende do bloco adjacente.
[00309] Com relação à Tabela 15, quando "?" é fornecido para um filtro, isso indica que o tamanho do bloco adjacente pode determinar quais dos três valores 7, 5, 3 são possíveis. Por exemplo, para ?+7, se a borda à esquerda (ou acima) for grande bloco, então ambos 7+7 e 3+7 são permitidos. Entretanto, se a borda à esquerda (ou acima) não for um bloco grande, então apenas 3+7 é permitido.
[00310] Com relação à Tabela 15, quando "*Nenhum" é fornecido para um filtro, isso indica que nenhum filtro longo pode ser usado na borda. Por exemplo, uma condição de bloqueio grande aplica, isto é, o tamanho de bloco ortogonal do lado sendo desbloqueado é maior ou igual a um limite, por exemplo, 32 (em amostras de luma), não é satisfeito.
[00311] Finalmente, em relação à Tabela 15, quando "?" está junto com Nenhum* é fornecido para um filtro (por exemplo ?+Nenhum* ou Nenhum*+?), então, um filtro longo ainda pode ser usado na borda se o bloco adjacente correspondente for um bloco grande, entretanto, o tipo de filtro longo só pode ser ?+3 ou 3+?, respectivamente. Número Número Filtros JVET- Filtragem Caso Borda máximo de máximo de M0471 longos longa amostras que amostras que permitidos para preferencial podem ser podem ser desbloqueio modificadas modificadas no lado no lado esquerdo ou direito ou de de topo (P) da fundo (Q) da borda borda A L ou T indeterminado 16 ?+7, ?+5. ?+3 ?+7 M 16 16 7+7, 5+5,7+3, 7+7 5+3, 3+7, 3+5 R ou B 16 indeterminado 7+?, 5+?, 3+? 7+? B L ou T indeterminado 8 ?+5, ?+3 ?+Nenhum* M 8 24 3+7, 3+5, 5+7, Nenhum*+Nen 5+5 hum* R ou B 24 indeterminado 7+?, 5+?, 3+? Nenhum*+? C L ou T indeterminado 24 ?+7,?+5,?+3 ?+Nenhum* M 24 8 7+3, 5+3, 7+5, Nenhum*+Nen 5+5 hum* R ou B 8 indeterminado 5_?, 3+? Nenhum*+? D L ou T indeterminado 16 ?+7, ?+5. ?+3 ?+7 M 16 16 7+7, 5+5,7+3, 7+7 5+3, 3+7, 3+5 R ou B 16 indeterminado 7+?, 5+?, 3+? 7+?
E L ou T indeterminado 8 ?+7, ?+5. ?+3 ?+Nenhum* 7+7, 5+5,7+3, Nenhum*+Nenh M 8 8 5+3, 3+7, 3+5 um* R ou B 8 indeterminado 7+?, 5+?, 3+? Nenhum*+? F L ou T indeterminado 4 ?+3 ?+Nenhum* Nenhum*+Nenh M 4 12 3+7, 3+5 um* R ou B 12 indeterminado 7+?, 5+?, 3+? Nenhum*+? G L ou T indeterminado 12 ?+7,?+5,?+3 ?+Nenhum* Nenhum*+Nenh M 12 4 7+3, 5+3 um* R ou B 4 indeterminado 3+? Nenhum*+? H L ou T indeterminado 8 ?+7, ?+5. ?+3 ?+Nenhum* 7+7, 5+5,7+3, Nenhum*+Nenh M 8 8 5+3, 3+7, 3+5 um* R ou B 8 indeterminado 7+?, 5+?, 3+? Nenhum*+? I L ou T indeterminado 4 ?+3 ?+Nenhum* Nenhum*+Nenh M 4 4 Nenhum um* R ou B 4 indeterminado 3+? Nenhum*+? J L ou T indeterminado 2 ?+3 ?+Nenhum* Nenhum*+Nenh M 2 6 Nenhum um* R ou B 6 indeterminado 5+?, 3+? Nenhum*+? K L ou T indeterminado 6 ?+5, ?+3 ?+Nenhum* Nenhum*+Nenh M 6 2 Nenhum um* Nenhum*+Nenh um* R ou B 2 indeterminado Nenhum L L ou T indeterminado 4 ?+3 ?+Nenhum* Nenhum*+Nenh M 4 4 Nenhum um* Nenhum*+? R ou B 4 indeterminado 3+?
Nenhum*+Nenh M L ou T indeterminado 2 Nenhum um* Nenhum*+Nenh M 2 2 Nenhum um* Nenhum*+Nenh R ou B 2 indeterminado Nenhum um* Nenhum*+Nenh N L ou T indeterminado 2 Nenhum um* Nenhum*+Nenh M 2 2 Nenhum um* Nenhum*+Nenh R ou B 2 indeterminado Nenhum um* Tabela 15
[00312] Em relação à Tabela 15, deve-se notar que a única condição em que uma borda média do bloco usando SBT é desbloqueada quando a largura (ou altura) do bloco é >= 64, uma vez que a condição de bloco grande não é satisfeita para os casos restantes. Isso corresponde aos casos A e D e, conforme ilustrado, a filtragem preferencial nesse caso é 7+7. Deve-se notar que aqui a condição de bloco grande é avaliada com base no tamanho de transformada e não no tamanho do bloco de codificação (tanto para bordas externas como internas). Dessa forma, em um exemplo, de acordo com as técnicas da presente invenção, um processo de marcação pode ser que uma borda interna (isto é, intermediária) de um SBT seja marcada como um candidato para desbloqueio de filtro de luma forte e fraco. Adicionalmente, uma borda interna de uma SBT pode ser candidata para desbloqueio de filtro longo de luma se a dimensão (lado P e/ou lado Q) do bloco Perpendicular à direção da borda a ser desbloqueada for >= 64. Adicionalmente, em um exemplo, de acordo com as técnicas da presente invenção, para uma borda interna do bloco de SBT, a determinação da intensidade de contorno baseada em vetor de movimento pode ser ignorada para blocos que não usam vetores de movimento de sub-bloco (uma vez que o vetor de movimento e as imagens de referência em cada lado do contorno são iguais).
[00313] Conforme descrito acima, um formato de saturação pode definir o número de amostras de saturação incluídas em um bloco de vídeo em relação ao número de amostras de componente luma incluídas em um bloco de vídeo e para o formato de amostragem 4:2:0, a taxa de amostragem para o componente luma é duas vezes aquela dos componentes croma para ambas as direções horizontal e vertical. A Tabela 15 é a correspondente à Tabela 13 para o caso do formato de amostragem 4:2:0. Na Tabela 15, para uma CU que tem uma altura em amostras de componente luma, H, para divisões horizontais (a)-(d), a altura resultante em amostras de saturação, h C, é especificada para sub-blocos SB0 e SB1. De modo semelhante, na Tabela 15, para uma CU que tem uma largura em amostras de componente luma, W, para divisões verticais (e)-(h), a largura resultante em amostras de saturação, wC, é especificada para os sub-blocos SB o e SB1.
Tamanho de H de CU 64 32 16 8 (a) hC: SB0, SB1 16, 16 8, 8 4, 4 2, 2 (b) hC: SB0, SB1 16, 16 8, 8 4, 4 2, 2 (c) hC: SB0, SB1 8, 24 4, 12 2, 6 NA (d) hC: SB0, SB1 24, 8 12, 4 6, 2 NA Tamanho de W de CU Sub-bloco 64 32 16 8 (e) WC: SB0, SB1 16, 16 8, 8 4, 4 2, 2 (0) WC: SB0, SB1 16, 16 8, 8 4, 4 2, 2 (g) WC: SB0, SB1 8, 24 4, 12 2, 6 NA WC: NA (h) SB0, SB1 24, 8 12, 4 6, 2 Tabela 16
[00314] A Tabela 17 ilustra um exemplo de casos atribuídos a cada entrada na Tabela 16. Deve-se notar que no exemplo ilustrado na Tabela 17, casos comuns são atribuídos às divisões SBT horizontais e verticais correspondentes. Em outros exemplos, casos distintos podem ser atribuídos para divisões horizontais e divisões SBT verticais.
Tamanho de H de CU 64 32 16 8 (a) hC: SB0, SB1 Caso (e) Caso (i) Caso (m) Caso (q) (b) hC: SB0, SB1 Caso (h) Caso (l) Caso (p) Caso (r) (c) hC: SB0, SB1 Caso (f) Caso (j) Caso (n) NA (d) hC: SB0, SB1 Caso (g) Caso (k) Caso (o) NA Partição Tamanho de W de CU de sub- 64 32 16 8 bloco (e) wC: SB0, SB1 Caso (e) Caso (i) Caso (m) Caso (q) (f) wC: SB0, SB1 Caso (h) Caso (l) Caso (p) Caso (r) (g) wC: SB0, SB1 Caso (f) Caso (j) Caso (n) NA (h) wC: SB0, SB1 Caso (g) Caso (k) Caso (o) NA Tabela 17
[00315] A Tabela 18 ilustra onde, para cada caso na Tabela 17, três bordas de sub-bloco SBT são especificadas (1) Esquerda ou de Topo (L ou T); (2) Média (M); e (3) Direita ou de Fundo (R ou B) e para cada borda, o número máximo de amostras que podem ser modificadas em cada lado da borda é especificado; os filtros longos permitidos para desbloqueio de acordo com JVET- M0471, descrito acima, são especificados; e a filtragem longa preferencial de acordo com as técnicas da presente invenção é especificada.
[00316] Com relação à tabela 18, quando "não determinado" é fornecido para o número máximo de amostras que podem ser modificadas em cada lado da borda, isso indica que o número de amostras depende do bloco adjacente.
[00317] Com relação à Tabela 18, quando "*Nenhum" é fornecido para um filtro, isso indica que nenhum filtro longo pode ser usado na borda. Por exemplo, uma condição de bloco grande se aplica, isto é, o tamanho de bloco de saturação ortogonal de ambos os lados da borda sendo desbloqueados é maior ou igual a um limite, por exemplo, 8 (em amostras de saturação), não é satisfeito finalmente, com relação à Tabela 18, quando 3+3* é fornecido para um filtro, então um filtro longo pode ser permitido, mas depende de um bloco adjacente.
Número Número Filtros JVET- Filtragem longa Caso Borda máximo de máximo de M0471 longos preferencial amostras que amostras que permitidos podem ser podem ser para modificadas modificadas no desbloqueio no lado lado direito ou esquerdo ou de fundo (Q) da de topo (P) da borda borda (e) L ou T indeterminado 8 3+3 3:+3) M 8 8 3+3 3+3 R ou B 8 indeterminado 3+3 3+3* (f) L ou T indeterminado 4 3+3 3+3* M 4 12 3+3 3+3 R ou B 12 indeterminado 3+3 3+3* (g) L ou T indeterminado 12 3+3 3+3* M 12 4 3+3 3+3 R ou B 4 indeterminado 3+3 3+3* (h) L ou T indeterminado 8 3+3 3+3* M 8 8 3+3 3+3 R ou B 8 indeterminado 3+3 3+3* (i) L ou T indeterminado 4 3+3* 3+3* M 4 4 3+3 3+3 R ou B 4 indeterminado 3+3* 3+3*
(j) L ou T indeterminado 2 Nenhum Nenhum M 2 6 Nenhum Nenhum R ou B 6 indeterminado 3+3 3+3* (k) L ou T indeterminado 6 3+3 3+3* M 6 2 Nenhum Nenhum R ou B 2 indeterminado Nenhum Nenhum (l) L ou T indeterminado 4 3+3 3+3* M 4 4 3+3 3+3 R ou B 4 indeterminado 3+3 3+3* (m) L ou T indeterminado 2 Nenhum Nenhum*+Nenhum* M 2 2 Nenhum Nenhum*+Nenhum* R ou B 2 indeterminado Nenhum Nenhum*+Nenhum* (n) L ou T indeterminado 1 Nenhum Nenhum*+Nenhum* M 1 3 Nenhum Nenhum*+Nenhum* R ou B 3 indeterminado Nenhum Nenhum*+Nenhum* (o) L ou T indeterminado 3 Nenhum Nenhum*+Nenhum* M 3 1 Nenhum Nenhum*+Nenhum* R ou B 1 indeterminado Nenhum Nenhum*+Nenhum* (p) L ou T indeterminado 2 Nenhum Nenhum*+Nenhum* M 2 2 Nenhum Nenhum*+Nenhum* R ou B 2 indeterminado Nenhum Nenhum*+Nenhum* (q) L ou T indeterminado 1 Nenhum Nenhum*+Nenhum* M 1 1 Nenhum Nenhum*+Nenhum* R ou B 1 indeterminado Nenhum Nenhum*+Nenhum* (r) L ou T indeterminado 1 Nenhum Nenhum*+Nenhum* M 1 1 Nenhum Nenhum*+Nenhum* R ou B 1 indeterminado Nenhum Nenhum*+Nenhum* Tabela 18
[00318] Em relação à Tabela 18, deve-se notar que a única condição em que uma borda média do bloco usando SBT é desbloqueada quando a dimensão do bloco Perpendicular à direção da borda sendo desbloqueada é >= 32 (em amostras de saturação) ou a dimensão dos blocos perpendicular à direção da borda sendo desbloqueada é de 16 (em amostras de saturação) e meia partição é usada. Isto corresponde aos casos (e), (f), (g), (h), (i) e (1) e, conforme ilustrado, a filtragem preferencial nesse caso é 3+3. Deve-se notar que aqui a condição de bloco grande é avaliada com base no tamanho de transformada e não no tamanho do bloco de codificação (tanto para bordas externas como internas). Dessa forma, em um exemplo, de acordo com as técnicas da presente invenção, um processo de marcação pode ser aquele em que uma borda interna (isto é, média) de um SBT seja marcada como um candidato para desbloqueio de filtro fraco de saturação. Adicionalmente, uma borda interna de uma SBT pode ser candidata ao desbloqueio de filtro de saturação longa se a dimensão do bloco perpendicular à direção da borda que está sendo desbloqueada for maior ou igual a um limite, por exemplo, 32 (em amostras de saturação), ou a dimensão do bloco perpendicular à direção da borda que está sendo desbloqueada for 16 e meia partição for usada. Adicionalmente, em um exemplo, de acordo com as técnicas da presente invenção, para uma borda interna do bloco de SBT, a determinação da intensidade de contorno baseada em vetor de movimento pode ser ignorada para blocos que não usam vetores de movimento de sub-bloco (uma vez que o vetor de movimento e as imagens de referência em cada lado do contorno são iguais).
[00319] Dessa forma, em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada para executar o processo de derivação de um contorno de bloco de transformação da seguinte forma:
[00320] As entradas para este processo são:
[00321] - um local (xB0, yB0) especificando a amostra superior esquerda do bloco atual em relação à amostra superior esquerda do bloco de codificação atual,
[00322] - uma variável nTbW especificando a largura do bloco atual,
[00323] - uma variável nTbH especificando a altura do bloco atual,
[00324] - uma variável treeType especificando se uma única árvore (SINGLE_TKEE) ou uma árvore dupla é usada para particionar as CTUs e, quando uma árvore dupla é usada, se os componentes luma
(DUAL_TREE_LUMA) ou de saturação (DUAL_TREE_CHROMA) são processados atualmente,
[00325] - uma variável filterEdgeFlag,
[00326] - matrizes bidimensionais (nCbW)x(nCbH) edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs,
[00327] - uma variável edgeType especificando se uma borda vertical (EDGE_YER) ou horizontal (EDGE_HOR) é filtrada.
[00328] - uma variável isSBTSubblock especificando se o bloco atual é um sub-bloco de SBT
[00329] O resultado desse processo é a matriz bidimensional (nCbW)x(nCbH) modificada edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00330] O tamanho máximo de bloco de transformação maxTbSize é derivado da seguinte forma:
[00331] maxTbSize = (treeType = = DUAL_TREE_CHROMA)? MaxTbSizeY/2: MaxTbSizeY
[00332] Dependendo do maxTbSize, aplica-se o seguinte:
[00333] - Se nTbW for maior que maxTbSize ou nTbH for maior que maxTbSize, a seguinte ordenada etapas são aplicadas.
[00334] 1. As variáveis newTbW e newTbH são derivadas da seguinte forma: newTbW = (nTbW > maxTbSize)? (nTbW/2): nTbW newTbH = (nTbH > maxTbSize)? (nTbH/2): nTbH
[00335] 2. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local (xB0, yB0), as variáveis nTbW definidas iguais a newTbW e nTbH definidas iguais a newTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável isSBTSubblock como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00336] 3. Se nTbW for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do componente luma (xB0, yB0) definido como (xB0 + newTbW, yB0), as variáveis nTbW ajustadas igual a newTbW e nTbH definido como newTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável isSBTSubblock como entradas, e a saída será a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00337] 4. Se nTbH for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do componente luma (xB0, yB0) definido como (xB0, yB0 + newTbH), as variáveis nTbW ajustadas igual a newTbW e nTbH definido como newTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável isSBTSubblock como entradas, e a saída será a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00338] 5. Se nTbW for maior que maxTbSize e nTbH for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do luma (xB0, yB0) definido igual a (xB0 + newTbW, yB0+ newTbH), as variáveis nTbW definidas igual a newTbW e nTbH definido igual a newTbH, a variável filterEdgeFlag, a matriz edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs e a variável edgeType e a variável isSBTSubblock como entradas, e a saída será a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxF ilterLengthCbCrs.
[00339] - Caso contrário, se edgeType for igual a EDGE_VER, cu_sbt_flag[xB0] [yB0] for igual a 1, cu_sbt_horizontal_flag[xB0][yB0] for igual a 0 e isSBTSubblock for igual a 0, as seguintes etapas ordenadas se aplicarão:
[00340] 1. A variável isSBTSubblock é definida como 1
[00341] 2. O processo de derivação do contorno do bloco de transformação conforme especificado nesta cláusula é invocado com o local (xB0, yB0), a variável nTbW definida igual a nTbW * SbtNumFourthsTb0 / 4, a variável nTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável isSBTSubblock como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00342] 3. O processo de derivação do contorno do bloco de transformação conforme especificado nesta cláusula é invocado com o local do componente luma (xB0+ nTBW * SbtNumFourthsTb0 / 4, yB0), a variável nTbW definida igual a (nTbW - nTbW * SbtNumFourthsTb0 / 4), a variável nTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável isSBTSubblock como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00343] Caso contrário, se edgeType for igual a EDGE_HOR, cu_sbt_Flag[xB0][yB0] for igual a 1, cu_sbt_quad_flag[xB0][yB0] for igual a 1 e isSBTSubblock for igual a 0, as seguintes etapas ordenadas aplicam
[00344] 1. A variável isSBTSubblock é definida como 1
[00345] 2. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local (xB0, yB0), a variável nTbW, o conjunto de variáveis nTbH igual a nTbH * SbtNumFourthsTb0 / 4, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável isSBTSubblock como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00346] 3. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local do componente luma (xB0, yB0 + nTBH * SbtNumFourthsTb0 / 4), a variável nTbW, a variável nTbH definida igual a (nTbH - nTbH * SbtNumFourthsTb0 / 4), a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável isSBTSubblock como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00347] - Caso contrário, o seguinte se aplica:
[00348] - Se edgeType for igual a EDGE_VER, o valor de edgeFlags[xB0][yB0 + k] para k = 0.. nTbH - 1 será derivado como segue:
[00349] - Se xB0 for igual a 0, edgeFlags[xB0][yB0 + k] é definido como sendo igual a filterEdgeFlag.
[00350] - Caso contrário, edgeFlags[xB0][yB0 + k] é definido como sendo igual a 1.
[00351] - Se edgeFlags[xB0][yB0 + k] for igual a 1
[00352] Se treeType for igual a uma SINGLE_TREE ou DUAL_TREE_LUMA
[00353] - Se a largura em amostras de luma do bloco de transformação na posição de luma (xB0, yB0+k) for igual ou maior que 32, maxFilterLengthQs[xB0][yB0 + k] = 7
[00354] - Caso contrário, maxFilterLengthQs[xB0][yB0 + k] = 3
[00355] - Se a largura em amostras de luma do bloco de transformação na posição de luma (xB0 - 1, yB0+k) for igual ou maior que 32, maxFilterLengthPs[xB0][yB0 + k] = 7
[00356] - Caso contrário, maxFilterLengthPs[xB0][yB0 + k] = 3
[00357] - Se a largura em amostras de saturação do bloco de transformação na posição de saturação (xB0/SubWidthC, (yB0+k)/SubHeightC) e a posição de saturação (xB0/SubWidthC - 1, (yB0+k)/SubHeightC) forem ambas iguais ou maiores que 8, maxFilterLengthCbCrs[xB0/SubWidthtC][(yB0+k)/ SubHeightC] = 3
[00358] - Caso contrário, maxFilterLengthCbCrs [xB0/SubWidthtC][(yB0+k)/SubHeightC] = 1
[00359] Caso contrário
[00360] - Se a largura em amostras de saturação do bloco de transformação na posição de saturação (xB0, yB0+k) e a posição de saturação (xB0-1, yB0+k) forem ambas iguais ou maiores que 8, maxFilterLengthCbCrs[xB0][yB0 + k] = 3
[00361] - Caso contrário, maxFilterLengthCbCrs[xB0][yB0 + k] = 1
[00362] - Caso contrário (edgeType é igual a EDGE_HOR), o valor de edgeFlags[xB0 + k][yB0] para k = 0.. nTbW - 1 é derivado da seguinte forma:
[00363] - Se yB0 for igual a 0, edgeFlagsf xB0 + k] [yB0] é definido como sendo igual a filterEdgeFlag.
[00364] - Caso contrário, edgeFlags[xB0 + k][yB0] é definido como sendo igual a 1.
[00365] - Se edgeFlags[xB0+k][yB0] for igual a 1,
[00366] Se treeType for igual a uma SINGLE_TREE ou
DUAL_TREE_LUMA
[00367] - Se a altura em amostras de luma do bloco de transformação na posição de luma (xB0+k, yB0) for igual ou maior que 32, maxFilterLengthQs[xB0+k][yB0] = 7
[00368] - Caso contrário, maxFilterLengthQs[xB0+k][yB0] = 3
[00369] - Se a altura em amostras de luma do bloco de transformação na posição de luma (xB0+k, yB0 - 1) for igual ou maior que 32, maxFilterLengthPs[xB0+k][yB0] = 7
[00370] - Caso contrário, maxFilterLengthPs[xB0+k][yB0] = 3
[00371] - Se a altura em amostras de saturação do bloco de transformação na posição de saturação ((xB0+k)/SubWidthC, yB0/ SubHeightC) e a posição de saturação ((xB0+k)/SubWidthtC, yB0/SubHeightC - 1) forem ambas iguais ou maiores que 8,
[00372] onde yC é a posição de topo do bloco atual em amostras de saturação em relação à posição de topo da imagem atual
[00373] - Se (yC% (1<<(log2_ctu_size_minus2 +2))/SubHeightC for igual a 0) (quando o tipo de borda é EDGE_HOR e a borda se sobrepõe ao contorno de saturação CTB)
[00374] - maxFilterLengthCbCrs[(xB0+k)/SubWidthC][yB0/ SubHeightC] = 1
[00375] - Caso contrário, maxFilterLengthCbCrs[(xB0+k)/SubWidthC][yB0/ SubHeightC] = 3
[00376] - Caso contrário, maxFilterLengthCbCrsl (xB0+k)/SubWidthtC][yB0/ SubHeightC] = 1
[00377] Caso contrário
[00378] - Se a altura nas amostras de saturação do bloco de transformação na posição de saturação (xB0+k, yB0) e a posição de saturação (XB0+k, yB0-1) forem ambas iguais ou maiores que 8,
[00379] Onde yC é a posição superior do bloco atual em amostras de saturação em relação à posição superior da imagem atual
[00380] - Se (yC% (1<<(log2_ctu_size_minus2 +2))/SubHeightC for igual a 0) (quando o tipo de borda é EDGE_HOR e a borda se sobrepõe ao contorno de saturação CTB)
[00381] - maxFilterLengthCbCrs[xB0+k][yB0] = 1
[00382] - Caso contrário, maxFilterLengthQCbCrs[xB0+k][yB0] = 3
[00383] - Caso contrário, maxFilterLengthCbCrs[xB0+k][yB0] = 1
[00384] Em um exemplo, a unidade de filtro 216 pode ser configurada para colocar limitações na seleção de filtro longa. Por exemplo, um filtro longo pode ser usado quando o tamanho do bloco ortogonal/perpendicular à borda a ser desbloqueada para o lado P ou para o lado Q for maior ou igual a 32. Em um exemplo, quando o tamanho do bloco do lado P ortogonal/perpendicular à borda não é maior ou igual a 32 e o tamanho do bloco do lado Q ortogonal/perpendicular à borda é maior ou igual a 32, um filtro longo do tipo 3+? pode ser escolhido, onde ? pode ser 5 ou 7. Em um exemplo, quando o tamanho do bloco do lado P ortogonal/perpendicular à borda é maior ou igual a 32 e o tamanho do bloco do lado Q ortogonal/ perpendicular à borda não é maior ou igual a 32, um filtro longo do tipo ?+3 pode ser escolhido, onde ? pode ser 5 ou 7.
[00385] Em um exemplo, uma limitação pode ser expressa da seguinte forma:
[00386] Se edgeType for igual a EDGE_VER, as seguintes etapas ordenadas se aplicam: …
[00387] As variáveis bSidePisLargeBlk e bSideQisLargeBlk são derivadas da seguinte forma: …
[00388] Se ambos bSidePisLargeBlk e bSideQisLargeBlk forem iguais a 0, prosseguir para a etapa 6.
[00389] As variáveis dpq0L, dpq3L, dL, maxFilterLengthP e maxFilterLengthQ são derivadas da seguinte forma:
Se bSidePisLargeBlk for igual a 1 dp0L = (dp0 + Abs(p5,0 - 2 * p4,0 + p3,0) + 1) >> 1 dp3L = (dp3 + Abs(p.5,3 - 2 * p4,3 + P3,3) + 1) >> 1 Caso contrário dp0L = dp0 dp3L = dp3 maxFilterLengthP = 3 Se bSideQisLargeBlk for igual a 1 dq0L = (dq0 + Abs(q5,0 - 2 * q4,0 + q3,0) +1) >> 1 dq3L = (dq3 + Abs(q5,3 - 2 * q4,3 + q3,3) +1) >> 1 Caso contrário dq0L = dq0 dq3L = dq3 maxFilterLengthQ = 3 dpq0L = dp0L + dq0L dpq3L = dp3L + dq3L dL = dpq0L + dpq3L …
[00390] Caso contrário, (edgeType é igual a EDGE_HOR), as seguintes etapas ordenadas se aplicam:
[00391] …
[00392] As variáveis bSidePisLargeBlk e bSideQisLargeBlk são derivadas da seguinte forma:
[00393] …
[00394] Se ambos bSidePisLargeBlk e bSideQisLargeBlk forem iguais a 0, prosseguir para a etapa 6.
[00395] As variáveis dpq0L, dpq3L, dL, maxFilterLengthP e maxFilterLengthQ são derivadas da seguinte forma:
[00396] Se bSidePisLargeBlk for igual a 1 dp0L = (dp0 + Abs(p5,0 - 2 * p4,0 + p3,0) + 1) >> 1 dp3L = (dp3 + Abs(p5,3 - 2 * p4,3 + p3,3) + 1) >> 1 Caso contrário dp0L = dp0 dp3L = dp3 maxFilterLengthP = 3 Se bSideQisLargeBlk for igual a 1 dq0L = (dq0 + Abs(q5,0 - 2 * q4,0 + q3,0) +1) >> 1 dq3L = (dq3 + Abs(q5,3 - 2 * q4,3 + q3,3) +1) >> 1 Caso contrário dq0L = dq0 dq3L = dq3 maxFilterLengthQ = 3 dpq0L = dp0L + dq0L dpq3L = dp3L + dq3L dL = dpq0L + dpq3L …
[00397] Conforme descrito acima, O ISP pode ser usado para intrapredição. Deve-se notar que quando se usa árvores separadas, um ISP com duas partes representa apenas uma divisão binária de um bloco que usa o mesmo modo de predição e seleção automática de transformação. De modo similar, quando se usa árvores separadas, um ISP com quatro partes representa apenas uma divisão binária com as duas partes divididas sendo adicionalmente divididas ao longo da mesma direção que o modo de divisão e intra inicial é compartilhado e o tipo de transformada é selecionado automaticamente. Isso é similar ao caso de SBT e representa um atalho de sintaxe e, dessa forma, pode ser aplicado desbloqueio de modo similar. Ou seja, todas as bordas correspondentes (incluindo bordas de sub-bloco internas) podem ser tratadas como bordas regulares. Em um exemplo, isso pode incluir a modificação do processo de derivação de contorno de transformação para desbloqueio a ser baseado em se ISP é usado. Em um exemplo, isso pode incluir modificar o processo de derivação de contorno de bloco de codificação para que o desbloqueio seja baseado em se ISP é usado. Em um exemplo, isso pode incluir modificar o processo de derivação de contorno de sub-bloco para que o desbloqueio seja baseado em se ISP é usado.
[00398] Dessa forma, em um exemplo, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada para executar o processo de derivação de um contorno de bloco de transformação da seguinte forma:
[00399] As entradas para este processo são:
[00400] - um local (xB0, yB0) especificando a amostra superior esquerda do bloco atual em relação à amostra superior esquerda do bloco de codificação atual,
[00401] - uma variável nTbW especificando a largura do bloco atual,
[00402] - uma variável nTbH especificando a altura do bloco atual,
[00403] - uma variável treeType especificando se uma única árvore (SINGLE_TREE) ou uma árvore dupla é usada para particionar as CTUs e, quando uma árvore dupla é usada, se os componentes luma (DUAL_TREE_LUMA) ou de saturação (DUAL_TREE_CHROMA) estão sendo processados,
[00404] - uma variável filterEdgeFlag,
[00405] - matrizes bidimensionais (nCbW)x(nCbH) edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs,
[00406] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada.
[00407] - uma variável ispSubblockldx especificando se o bloco atual é um sub-bloco ISP
[00408] O resultado desse processo é a matriz bidimensional (nCbW)x(nCbH) modificada edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00409] O tamanho máximo de bloco de transformação maxTbSize é derivado da seguinte forma:
[00410] maxTbSize = (treeType = DUAL TREE CHROMA)? MaxTbSizeY / 2: MaxTbSizeY
[00411] Dependendo do maxTbSize, aplica-se o seguinte:
[00412] - Se nTbW for maior que maxTbSize ou nTbH for maior que maxTbSize, a seguinte ordenada etapas são aplicadas.
[00413] 1. As variáveis newTbW e newTbH são derivadas da seguinte forma: newTbW = (nTbW > maxTbSize) ? (nTbW/2): nTbW newTbH = (nTbH > maxTbSize) ? (nTbH/2): nTbH
[00414] 2. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local (xB0, yB0), as variáveis nTbW definidas iguais a newTbW e nTbH definidas iguais a newTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00415] 3. Se nTbW for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do componente luma (xB0, yB0) definido como (xB0 + newTbW, yB0), as variáveis nTbW ajustadas igual a newTbW e nTbH definido como newTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável ispSubblockldx como entradas, e a saída será a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00416] 4. Se nTbH for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do componente luma (xB0, yB0) definido como (xB0, yB0 + newTbH), as variáveis nTbW ajustadas igual a newTbW e nTbH definido como newTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável ispSubblockldx como entradas, e a saída será a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00417] 5. Se nTbW for maior que maxTbSize e nTbH for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do componente luma (xB0, yB0) definido igual a (xB0 + newTbW, yB0 + newTbH), as variáveis nTbW definidas igual a newTbW e nTbH definido igual a newTbH, a variável filterEdgeFlag, a matriz edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável ispSubblockldx como entradas, e a saída será a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxF ilterLengthCbCrs.
[00418] - Caso contrário, se edgeType for igual a EDGE_VER, intra_subpartitions_mode_flag[xB0][yB0] for igual a 1 e IntraSubPartitionsSplitTypef xB0][yB0] for igual a ISP_VER_SPLIT e ispSubblockldx for igual a 0, as etapas ordenadas a seguir se aplicarão.
[00419] 1. A variável ispSubblockldx é definida como sendo igual a
1.
[00420] 2. Para k = 0... (NumlntraSubPartitions - 1), o seguinte se aplica:
[00421] O processo de derivação do contorno do bloco de transformação conforme especificado nesta cláusula é invocado com o local (xB0 + k * nTbW / NumlntraSubPartitions, yB0), o conjunto de variável nTbW/NumlntraSubPartitions, a variável nTbH, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00422] Caso contrário, se edgeType for igual a EDGE_HOR, intra_subpartitions_mode_flag[xB0][yB0] for igual a 1 e IntraSubPartitionsSplitType[xB0][yB0] for igual a ISP_HOR_SPLIT e ispSubblockldx for igual a 0, as seguintes etapas ordenadas se aplicarão:
[00423] 1. A variável ispSubblockldx é definida como sendo igual a
1.
[00424] 2. Para k = 0... (NumlntraSubPartitions - 1), o seguinte se aplica:
[00425] O processo de derivação do contorno do bloco de transformação conforme especificado nesta cláusula é invocado com o local (xB0, yB0 + k * nTbH / NumlntraSubPartitions), a variável nTbW, a variável nTbH definida como sendo igual a nTbH / NumlntraSubPartitions, a variável filterEdgeFlag, as matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00426] - Caso contrário, o seguinte se aplica:
[00427] - Se edgeType for igual a EDGE_VER, o valor de edgeFlags[xB0][yB0 + k] para k = 0.. nTbH - 1 é derivado da seguinte forma:
[00428] - Se xB0 for igual a 0, edgeFlags[xB0] [yB0 + k] é definido como sendo igual a filterEdgeFlag.
[00429] - Caso contrário, edgeFlags[xB0][yB0 + k] é definido como sendo igual a 1.
[00430] - Se edgeFlags[xB0][yB0 + k] for igual a 1
[00431] Se treeType for igual a uma SINGLE_TREE ou DUAL_TREE_LUMA
[00432] - Se a largura em amostras de luma do bloco de transformação na posição de luma (xB0, yB0+k) for igual ou maior que 32, maxFilterLengthQs[xB0][yB0 + k] = 7
[00433] - Caso contrário, maxFilterLengthQs[xB0][yB0 + k] = 3
[00434] - Se a largura em amostras de luma do bloco de transformação na posição de luma (xB0 - 1, yB0+k) for igual ou maior que 32, maxFilterLengthPs[xB0][yB0 + k] = 7
[00435] - Caso contrário, maxFilterLengthPs[xB0][yB0 + k] = 3
[00436] - Se a largura em amostras de saturação do bloco de transformação na posição de saturação (xB0/SubWidthC, (yB0+k)/SubHeightC) e a posição de saturação (xB0/SubWidthC - 1, (yB0+k)/SubHeightC) forem ambas iguais ou maiores que 8, maxFilterLengthCbCrs[xB0/SubWidthtC][(yB0+k)/ SubHeightC] = 3
[00437] - Caso contrário, maxFilterLengthCbCrst xB0/SubWidthtC][(yB0+k)/SubHeightC] = 1 de outro modo
[00438] - Se a largura em amostras de saturação do bloco de transformação na posição de saturação (xB0, yB0+k) e a posição de saturação (xB0-1, yB0+k) forem ambas iguais ou maiores que 8, maxFilterLengthCbCrs[xB0][yB0 + k] = 3
[00439] - Caso contrário, maxFilterLengthCbCrs[xB0][yB0 + k] = 1
[00440] - Caso contrário (edgeType é igual a EDGE_HOR), o valor de edgeFlags[xB0 + k] [yB0] para k = 0.. nTbW - 1 é derivado da seguinte forma:
[00441] - Se yB0 for igual a 0, edgeFlags[xB0 + k][yB0] é definido como sendo igual a filterEdgeFlag.
[00442] - Caso contrário, edgeFlags[xB0 + k][yB0] é definido como sendo igual a 1.
[00443] - Se edgeFlags[xB0+k][yB0] for igual a 1,
[00444] Se treeType for igual a uma SINGLE_TREE ou DUAL_TREE_LUMA
[00445] - Se a altura em amostras de luma do bloco de transformação na posição de luma (xB0+k, yB0) for igual ou maior que 32, maxFilterLengthQs[xB0+k][yB0] = 7
[00446] - Caso contrário, maxFilterLengthQs[xB0+k][yB0] = 3
[00447] - Se a altura em amostras de luma do bloco de transformação na posição de luma (xB0+k, yB0 - 1) for igual ou maior que 32, maxFilterLengthPs[xB0+k][yB0] = 7
[00448] - Caso contrário, maxFilterLengthPs[xB0+k][yB0] = 3
[00449] - Se a altura em amostras de saturação do bloco de transformação na posição de saturação ((xB0+k)/SubWidthC, yB0/ SubHeightC) e a posição de saturação ((xB0+k)/SubWidthtC, yB0/SubHeightC - 1) forem ambas iguais ou maiores que 8,
[00450] Onde yC é a posição superior do bloco atual em amostras de saturação em relação à posição superior da imagem atual
[00451] - Se (yC% (1<<(log2_ctu_size_minus2 +2))/SubHeightC for igual a 0) (quando o tipo de borda é EDGE_HOR e a borda se sobrepõe ao contorno de saturação CTB)
[00452] - maxFilterLengthCbCrs[(xB0+k)/SubWidthC][yB0/ SubHeightC] = 1
[00453] - Caso contrário, maxFilterLengthCbCrs[(xB0+k)/SubWidthC][yB0/ SubHeightC] = 3
[00454] - Caso contrário,
maxFilterLengthCbCrs[(xB0+k)/SubWidthtC][yB0/ SubHeightC] = 1
[00455] Caso contrário
[00456] - Se a altura nas amostras de saturação do bloco de transformação na posição de saturação (xB0+k, yB0) e a posição de saturação (XB0+k, yB0-1) forem ambas iguais ou maiores que 8,
[00457] Onde yC é a posição superior do bloco atual em amostras de saturação em relação à posição superior da imagem atual
[00458] - Se (yC% (1<<(log2_ctu_size_minus2 +2))/SubHeightC for igual a 0) (quando o tipo de borda é EDGE_HOR e a borda se sobrepõe ao contorno de saturação CTB)
[00459] - maxFilterLengthCbCrs[xB0+k][yB0] = 1
[00460] - Caso contrário, maxFilterLengthQCbCrs[xB0+k][yB0] =3 Outros, maxFilterLengthCbCrs[xB0+k][yB0] = 1
[00461] Em um exemplo, as variáveis que especificam se o bloco atual é o sub-bloco ISP, e se o bloco atual é o sub-bloco SBT é compartilhado.
[00462] Deve-se notar que, conforme descrito acima, no documento JVET-M1001, uma determinação de se um modo intrapredição ou um modo interpredição é usado ocorre no nível de CU e a codificação de sub-bloco de ISP é habilitada apenas para intrapredição e a codificação de sub-bloco de SBT é habilitada apenas para interpredição. Dessa forma, o processo de derivação de contornos de sub-bloco para desbloqueio com base em se sub-blocos de ISP são usados, fornecido acima, pode ser incorporado em um processo geral de derivação de um contorno de bloco de transformação, que inclui um processo de derivação de contornos de sub-bloco para desbloqueio com base em se sub-blocos de SBT. Em particular, um cu_sbt_Flag[xB0][yB0] é igual a 1 verificação e um processo correspondente de derivação de contornos de sub-bloco Para desbloqueio com base em se são usados sub-blocos SBT pode ser adicionado ao processo de derivação de contornos de sub-bloco Para desbloqueio com base em se são usados sub-blocos ISP, fornecidos acima, para formar um processo de derivação geral de um contorno de bloco de transformação.
[00463] Conforme descrito acima, a unidade de filtro 216 pode ser configurada para ajustar um valor bS para um valor diferente de zero (por exemplo, 2), para contornos de subpartição de modo de codificação ISP para cada componente de vídeo. Em um exemplo, a unidade de filtro 216 pode ser configurada para executar o seguinte processo de derivação de resistência de contorno:
[00464] As entradas para este processo são:
[00465] - uma matriz de amostra de imagem recPicture,
[00466] - um local (xCb, yCb) especificando a amostra superior esquerda do bloco de codificação atual em relação à amostra superior esquerda da imagem atual,
[00467] - uma variável nCbW que especifica a largura do bloco de codificação atual,
[00468] - uma variável nCbH especificando a altura do bloco de codificação atual,
[00469] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada,
[00470] - uma variável cIdx especificando o índice de componente da imagem,
[00471] - uma matriz bidimensional (nCbW)x(nCbH) edgeFlags de componente com índice cIdx.
[00472] A saída desse processo é uma matriz bidimensional (nCbW)x(nCbH) bS especificando a intensidade de filtragem de contorno do componente com índice cIdx.
[00473] As variáveis x D i , yD j , xNe y N são derivadas da seguinte forma:
[00474] - Se edgeType for igual a EDGE_VER, xDi é definido como sendo igual a (i << 3), yDj é definido como sendo igual a (j << 2), xN é definido como sendo igual a Max(0,(nCbW/8) -1) e yN é definido como sendo igual a (nCbH/4)-1.
[00475] - Caso contrário (edgeType será igual a EDGE_HOR), xDi é definido como sendo igual a (i << 2), yDj é definido como sendo igual a (j << 3), xN é definido como sendo igual a (nCbW/4) - 1 e yN é definido como sendo igual a Max(0,(nCbH / 8) - 1).
[00476] Para x D i com i = 0 . . xNe y D j com j = 0 . . yN , aplica-se o seguinte:
[00477] - Se edgeFlags [xDi] [yDj] for igual a 0, a variável bS[xDi][yDj] é definida como sendo igual a 0.
[00478] - Caso contrário, o seguinte se aplicará:
[00479] - Os valores de amostra p0 e q0 são derivados da seguinte forma:
[00480] - Se edgeType for igual à EDGE_VER, p0 é definido como sendo igual a recPicture [xCb + xDi - 1] [yCb + yDj] e q0 é definido como sendo igual a recPicture [xCb + xDi][yCb + yDj],
[00481] - Caso contrário (edgeType será igual à EDGE_HOR), p0 é definido como sendo igual a recPicture [xCb + xDi] [yCb + yDj- 1] e q0 é definido como sendo igual a recPicture [xCb + xDi] [yCb + yDj].
[00482] - A variável bS[x D i ][y D j ] é derivada por componente da seguinte forma:
[00483] - Se a amostra p0 ou q0 estiver no bloco de codificação de uma unidade de codificação codificada com modo de intrapredição e IntraSubPartitionsSplitType for igual a ISP_NO_SPLIT, bS[x D i ][y D j ] é definido como sendo igual a 2.
[00484] - Caso contrário, se a amostra p0 ou q0 estiver no bloco de codificação de uma unidade de codificação codificada com modo intrapredição e IntraSubPartitionsSplitType não for igual a ISP_NO_SPLIT:
[00485] - Se a borda do bloco de codificação também for uma borda do bloco de transformação, bS[xDi][yDj] é definido como sendo igual a 2,
[00486] - Caso contrário, se a borda de bloco de transformação não for uma borda de bloco de codificação e a borda de bloco de transformação pertencer a um componente luma, bS[x D i ][y D j ] é definido como sendo igual a 2,
[00487] - Caso contrário, bS [xDi] [y D j ] é definido como sendo igual a 0
[00488] Em um exemplo, de acordo com as técnicas da presente invenção, a marcação de uma borda como candidata para o processo de desbloqueio ou de determinação da intensidade de contorno pode ser baseada no tipo de árvore de partição de um bloco ISP. Por exemplo, quando o tipo de árvore é DUAL_TREE_CHROMA, apenas as bordas externas (por exemplo, bordas de bloco de codificação) de um bloco ISP podem ser marcadas como candidatas para desbloqueio. Em outro exemplo, quando o tipo árvore é DUAL_TREE_CHROMA, apenas as bordas externas (por exemplo, bordas de bloco de codificação) de um bloco de ISP podem ter intensidade de contorno diferente de zero. Por exemplo, no processo de derivação de resistência de contorno acima, a derivação da variável bS[xDi][yDj] por componente pode ser modificada da seguinte forma:
[00489] - A variável bS[x D i ][y D j ] é derivada por componente da seguinte forma:
[00490] - Se a amostra p0 ou q0 estiver no bloco de codificação de uma unidade de codificação codificada com modo intrapredição e IntraSubPartitionsSplitType for igual a ISP_NO_SPLIT, bS[x D i ] [yD j ] é definido como sendo igual a 2.
[00491] - Caso contrário, se a amostra p0 ou q0 estiver no bloco de codificação de uma unidade de codificação codificada com modo intrapredição e IntraSubPartitionsSplitType não for igual a ISP_NO_SPLIT:
[00492] - Se a borda do bloco de codificação também for uma borda do bloco de transformação e treeType não for igual a DUAL_TREE_CHROMA, bS[xDi][yDj] é definido como sendo igual a 2,
[00493] - Caso contrário, se a borda de bloco de transformação não for uma borda de bloco de codificação e a borda de bloco de transformação pertencer a um componente luma, bS[x D i ][y D j ] é definido como sendo igual a 2,
[00494] - Caso contrário, bS[x D i ][yD j ] é definido como sendo igual a 0
[00495] Em um exemplo, a unidade de filtro 216 pode ser configurada para ajustar a intensidade de contorno das bordas de ISP croma não existentes para 0. Em um exemplo, a unidade de filtro 216 pode ser configurada para executar o seguinte processo de derivação de resistência de contorno:
[00496] As entradas para este processo são:
[00497] - uma matriz de amostra de imagem recPicture,
[00498] - um local (xCb, yCb) especificando a amostra superior esquerda do bloco de codificação atual em relação à amostra superior esquerda da imagem atual,
[00499] - uma variável nCbW que especifica a largura do bloco de codificação atual,
[00500] - uma variável nCbH especificando a altura do bloco de codificação atual,
[00501] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada,
[00502] - uma matriz bidimensional (nCbW)x(nCbH) edgeFlags.
[00503] A saída desse processo é uma matriz bidimensional (nCbW)x(nCbH) bSLuma, e matrizes bidimensionais
(nCbW/SubWidthC,nCbH/SubHeightC) bSCb e bSCr especificando a intensidade de filtragem de contorno para cada componente de cor.
[00504] As variáveis x D i , yD j , xNe y N são derivadas da seguinte forma:
[00505] - Se edgeType for igual a EDGE_VER, xDi é definido como sendo igual a (i << 3), yDj é definido como sendo igual a (j << 2), xN é definido como sendo igual a Max(0, (nCbW/8) -1) e yN é definido como sendo igual a (nCbH/4) -1.
[00506] - Caso contrário (edgeType é igual a EDGE_HOR), xDi é definido como sendo igual a (i << 2), yDj é definido como sendo igual a (j << 3), xN é definido como sendo igual a (nCbW/4) - 1 e yN é definido como sendo igual a Max(0, (nCbH/8) - 1).
[00507] Para x D i com i = 0.. xN e y D j com j = 0.. yN, aplica-se o seguinte:
[00508] - Se edgeFlags[xDi][yDj] for igual a 0, a variável bS[xDi][yDj] é definida como sendo igual a 0.
[00509] - Caso contrário, o seguinte se aplica:
[00510] - Os valores de amostra p0 e q0 são derivados da seguinte forma:
[00511] - Se edgeType for igual à EDGE_VER, p0 é definido como sendo igual a recPicture [xCb + xDi - 1] [yCb + yDj] e q0 é definido como sendo igual a recPicture [xCb + xDi][yCb + yDj].
[00512] - Caso contrário (edgeType é igual à EDGE_HOR), p0 é definido como sendo igual a recPicture [xCb + x D i ] [yCb + y D j - 1] e q0 é definido como sendo igual a recPicture [xCb + x D i ][yCb + y D j ].
[00513] - A variável bS[xDi] [yDj] é derivada por componente e o resultado é armazenado em bSLumat xDi] [yDj] para um componente luma, em bSCb[xDi/SubWidthC][yDj/SubHeightC] para um componente Cb e em bSCr[xDi/SubWidthC][yDj/SubHeightC] para um componente Cr da seguinte forma:
[00514] - Se a amostra p0 ou q0 estiver no bloco de codificação de uma unidade de codificação codificada com modo intrapredição, o seguinte se aplica:
[00515] - Quando o componente é saturação, o tipo de árvore é igual a SINGLE_TREE, intra_subpartitions_mode_flag[xCb][yCb] é igual a 1, xDi não é igual a 0 e yDj não é igual a 0, bSE xDi] [yDj] é definido como sendo igual a 0:
[00516] - Caso contrário, quando o tipo de árvore é igual a DUAL_TREE_CHROMA, intra_subpartitions_mode_fLag[xCb * SubWidthC] [yCb * SubHeightC] é igual a 1, x D i não é igual a 0 e yD j não é igual a 0, bS[x D i ] [yD j ] é definido igual a 0:
[00517] - Caso contrário, bS[x D i ][yD j ] é definido como sendo igual a 2.
[00518] - Caso contrário, se a borda do bloco também for uma borda do bloco de transformação e a amostra p0 ou q0 estiver em um bloco de transformação que contém um ou mais níveis de coeficiente de transformada diferentes de zero, bS[x D i ][y D j ] é definido como sendo igual a 1.
[00519] - Caso contrário, se uma ou mais das seguintes condições para o componente luma forem verdadeiras, bS[xDi][yDj] é definido como sendo igual a 1:
[00520] - Para a predição do sub-bloco de codificação contendo a amostra p0, são usadas imagens de referência diferentes ou um número de vetores de movimento diferente do que é usado para a predição do sub-bloco de codificação contendo a amostra q0.
[00521] NOTA 1 - A determinação de se as imagens de referência usadas para os dois sub-bloqueios de codificação são iguais ou diferentes se baseia apenas em quais imagens são referidas, sem considerar se uma predição é formada com o uso de um índice na lista de imagens de referência 0 ou um índice na lista de imagens de referência 1, e também sem considerar se a posição de índice dentro de uma lista de imagens de referência é diferente. NOTA 2 - o número de vetores de movimento que são usados para a predição de um sub- bloco de codificação com cobertura de amostra superior esquerda (xSb, ySb), é igual a PredFlagL0[xSb][ySb] + PredFlagL1[xSb][ySb].
[00522] - Um vetor de movimento é usado para prever o sub-bloco de codificação contendo a amostra p0 e um vetor de movimento é usado para prever o sub-bloco de codificação contendo a amostra q0, e a diferença absoluta entre o componente horizontal ou vertical dos vetores de movimento usados é maior ou igual a 4 em unidades de amostras de um quarto de luma.
[00523] - Dois vetores de movimento e duas imagens de referência diferentes são usados para prever o sub-bloco de codificação contendo a amostra p0, dois vetores de movimento para as mesmas duas imagens de referência são usados para prever o sub-bloco de codificação contendo a amostra q0 e a diferença absoluta entre o componente horizontal ou vertical dos dois vetores de movimento usados na predição dos dois sub-blocos de codificação para a mesma imagem de referência é maior ou igual a 4 em unidades de amostras de um quarto de luma.
[00524] - Dois vetores de movimento para a mesma imagem de referência são usados para prever o sub-bloco de codificação contendo a amostra p0, dois vetores de movimento para a mesma imagem de referência são usados para prever o sub-bloco de codificação contendo a amostra q0 e ambas as seguintes condições são verdadeiras:
[00525] - A diferença absoluta entre o componente horizontal ou vertical dos vetores de movimento da lista 0 usados na predição dos dois sub-blocos de codificação é maior ou igual a 4 em amostras de um quarto de luma, ou a diferença absoluta entre o componente horizontal ou vertical dos vetores de movimento da lista 1 usados na predição dos dois sub-blocos de codificação é maior ou igual a 4 em unidades de amostras de quarto de luma.
[00526] - A diferença absoluta entre o componente horizontal ou vertical do vetor de movimento da lista 0 usado na predição do sub- bloco de codificação contendo a amostra p0 e o vetor de movimento da lista 1 usado na predição do sub-bloco de codificação contendo a amostra q0 é maior ou igual a 4 em unidades de amostras de luma de quarto, ou a diferença absoluta entre o componente horizontal ou vertical do vetor de movimento da lista 1 usado na predição do sub- bloco de codificação contendo a amostra p0 e o vetor de movimento da lista 0 usado na predição do sub-bloco de codificação contendo a amostra q0 é maior ou igual a 4 em unidades de amostras de luma de quarto.
[00527] - Caso contrário, a variável bS[xDi][yDj] é definida como sendo igual a 0.
[00528] Em um exemplo, a unidade de filtro 216 pode ser configurada para não marcar bordas de saturação inexistentes como candidatas para desbloqueio. Isso exige o uso de matriz de borda de componente luma e matriz de borda de saturação separadas. Ou seja, a unidade de filtro 216 pode ser configurada para invocar um processo de derivação de contorno de bloco de transformação e um processo de derivação de contorno de sub-bloco de codificação da seguinte forma:
[00529] Todos os elementos da matriz bidimensional (nCbW)x(nCbH) edgeFlags, maxFilterLengthQs, maxFilterlengthPs e bidimensional (nCbW/SubWidthC)x(nCbH/SubHeightC) maxFilterLengthPCbCrs são inicializados para serem iguais a zero. As variáveis isSBTSubblock e ispSubblockldx são inicializadas em 0.
[00530] O processo de derivação do contorno do bloco de transformação especificado abaixo é invocado com o local (xB0, yB0) definido como (0, 0), o conjunto de largura do bloco nTbW igual a nCbW,
o conjunto de altura do bloco nTbH igual a nCbH, a variável treeType, a variável filterEdgeFlag, as matrizes edgeFlagYs, as matrizes edgeFlagsCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e as matrizes modificadas edgeFlags, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs como saída.
[00531] O processo de derivação do contorno de sub-bloco de codificação especificado abaixo é invocado com o local (xCb, yCb), a largura do bloco de codificação nCbW, a altura do bloco de codificação nCbH, as matrizes edgeFlagYs, as matrizes edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e a variável edgeType como entradas, e as matrizes modificadas edgeFlags, maxFilterLengthQs e maxFilterLengthPs como saída. Processo de derivação de contorno de bloco de transformação
[00532] As entradas para este processo são:
[00533] - um local (xB0, yB0) especificando a amostra superior esquerda do bloco atual em relação à amostra superior esquerda do bloco de codificação atual,
[00534] - uma variável nTbW especificando a largura do bloco atual,
[00535] - uma variável nTbH especificando a altura do bloco atual,
[00536] - uma variável treeType especificando se uma única árvore (SINGLE_TREE) ou uma árvore dupla é usada para particionar as CTUs e, quando uma árvore dupla é usada, se os componentes luma (DUAL_TREE_LUMA) ou de saturação (DUAL_TREE_CHROMA) estão sendo processados,
[00537] - uma variável filterEdgeFlag,
[00538] - matrizes bidimensionais (nCbW)x(nCbH) edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs,
[00539] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada.
[00540] - uma variável isSBTSubblock especificando se o bloco atual é um sub-bloco de SBT
[00541] - uma variável ispSubblockldx especificando índice de um sub-bloco de ISP
[00542] A saída desse processo é a matriz bidimensional (nCbW)x(nCbH) modificada edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00543] O tamanho máximo de bloco de transformação maxTbSize é derivado da seguinte forma:
[00544] maxTbSize = (treeType = = DUAL_TREE_CHROMA)? MaxTbSizeY / 2: MaxTbSizeY
[00545] Dependendo do maxTbSize, aplica-se o seguinte:
[00546] - Se nTbW for maior que maxTbSize ou nTbH for maior que maxTbSize, as seguintes etapas ordenadas são aplicadas.
[00547] 1. As variáveis newTbW e newTbH são derivadas da seguinte forma: newTbW = (nTbW > maxTbSize) ? (nTbW / 2): nTbW newTbH = (nTbH > maxTbSize) ? (nTbH / 2): nTbH
[00548] 2. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local (xB0, yB0), as variáveis nTbW definidas iguais a newTbW e nTbH definidas iguais a newTbH, a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagsCbCrs maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00549] 3. Se nTbW for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do componente luma (xB0, yB0) definido como (xB0 + newTbW, yB0), as variáveis nTbW ajustadas igual a newTbW e nTbH definido como newTbH, a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída será a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00550] 4. Se nTbH for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do componente luma (xB0, yB0) definido como (xB0, yB0 + newTbH), as variáveis nTbW ajustadas igual a newTbW e nTbH definido como newTbH, a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída será a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00551] 5. Se nTbW for maior que maxTbSize e nTbH for maior que maxTbSize, o processo de derivação de contorno de bloco de transformação conforme especificado nesta cláusula será invocado com o local do luma (xB0, yB0) definido igual a (xB0 + newTbW, yB0 + newTbH), as variáveis nTbW definidas igual a newTbW e nTbH definido igual a newTbH, a variável filterEdgeFlag, a matriz edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída será a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxF ilterLengthCbCrs.
[00552] - Caso contrário, se edgeType for igual a EDGE_VER, cu_sbt_Flag[xB0][yB0] for igual a 1, e cu_sbt_quad_flag[xB0] [yB0] for igual a 0, e isSBTSubblock for igual a 0, as seguintes etapas ordenadas se aplicam:
[00553] 1. A variável isSBTSubblock é definida como 1
[00554] 2. O processo de derivação do contorno do bloco de transformação conforme especificado nesta cláusula é invocado com o local (xB0, yB0), a variável nTbW definida igual a nTbW * SbtNumFourthsTb0 / 4, a variável nTbH, a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00555] 3. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local do componente luma (xB0 + nTBW * SbtNumFourthsTb0 / 4, yB0), a variável nTbW ajustada para (nTbW - nTbW * SbtNumFourthsTb0 / 4), a variável nTbH, a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00556] - Caso contrário, se edgeType for igual a EDGE_HOR, cu_sbt_Flag[xB0][yB0] for igual a 1, e eu_sbt_horizontal_flag[xB0] [yB0] for igual a 1, e isSBTSubblock for igual a 0, as seguintes etapas ordenadas se aplicam:
[00557] 1. A variável isSBTSubblock é definida como 1
[00558] 2. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local (xB0, yB0), a variável nTbW, o conjunto de variáveis nTbH igual a nTbH * SbtNumFourthsTb0 / 4, a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlagYs, edgeFlagsCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00559] 3. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local do componente luma (xB0, yB0 + nTBH * SbtNumFourthsTb0 / 4), a variável nTbW, a variável nTbH definida igual a (nTbH - nTbH * SbtNumFourthsTb0 / 4), a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00560] - Caso contrário, se edgeType for igual a EDGE_VER, treeType não for igual a DUAL_TREE_CHROMA, intra_subpartitions_mode_flag[xB0] [yB0] for igual a 1 e IntraSubPartitionsSphtType[xB0][yB0] for igual a ISP_VER_SPLIT e ispSubblockldx for igual a 0, a seguinte etapa se aplicará:
[00561] - Para k = 0... (NumlntraSubPartitions - 1), as seguintes etapas ordenadas se aplicam:
[00562] 1. A variável ispSubblockldx é definida em (k + 1)
[00563] 2. O processo de derivação do contorno do bloco de transformação conforme especificado nesta cláusula é invocado com o local (xB0 + k * nTbW / NumlntraSubPartitions, yB0), o conjunto de variáveis nTbW / NumlntraSubPartitions, a variável nTbH, a variável filterEdgeFlag, as matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlagYs, edgeFlagsCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00564] - Caso contrário, se edgeType for igual a EDGE_HOR, treeType não for igual a DUAL_TREE_CHROMA, intra_subpartitions_mode_flag[xB0][yB0] for igual a 1 e IntraSubPartitionsSplitType[xB0][yB0] for igual a ISP_HOR_SPLIT e ispSubblockldx for igual a 0, a seguinte etapa se aplicará:
[00565] - Para k = 0... (NumlntraSubPartitions - 1), o seguinte se aplica:
[00566] 1. A variável ispSubblockldx é definida em (k + 1)
[00567] 2. O processo de derivação do contorno do bloco de transformação, conforme especificado nesta cláusula, é invocado com o local (xB0, yB0 + k * nTbH / NumlntraSubPartitions), a variável nTbW, a variável nTbH definida igual a nTbH / NumlntraSubPartitions, a variável fiiterEdgeFlag, as matrizes edgeFlagYs, edgeFlagsCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs, a variável edgeType, a variável isSBTSubblock e a variável ispSubblockldx como entradas, e a saída é a versão modificada das matrizes edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs, maxFilterLengthPs e maxFilterLengthCbCrs.
[00568] - Caso contrário, o seguinte se aplicará:
[00569] - Se treeType for igual a DUAL_TREE_CHROMA, ajustar ambas as variáveis cW e cH para 1,
[00570] - Caso contrário, atribuir SubWidthC à variável cW, e
SubHeightC à variável cH
[00571] - Se edgeType for igual a EDGE_VER, o valor de edgeFlagYs[xB0][yB0 + k] e edgeFlagCbCrs[xB0/cW][(yB0 + k)/cH] para k = 0.. nTbH - 1 são derivados da seguinte forma:
[00572] - Se xB0 for igual a 0, edgeFlagYs[xB0][yB0 + k] e edgeFlagCbCrst xB0][yB0 + k] é definido como sendo igual a fiiterEdgeFlag.
[00573] - Caso contrário,
[00574] - Se treeType for igual a SINGLE_TREE ou DUAL_TREE_LUMA edgeFlagYs[xB0][yB0 + k] é definido como sendo igual a 1.
[00575] - Se ispSubblockldx for maior que 1, edgeFlagCbCrs[xB0/cW][(yB0 + k)/cH] é definido como sendo igual a 0
[00576] - Caso contrário, edgeFlagCbCrs[xB0/cW][(yB0 + k)/cH] é definido como sendo igual a 1
[00577] - Se edgeFlagYs[xB0][yB0 + k] for igual a 1
[00578] - Se a largura em amostras de luma do bloco de transformação na posição de luma (xB0, yB0+k) for igual ou maior que 32, maxFilterLengthQs[xB0][yB0 + k] = 7
[00579] - Caso contrário, maxFilterLengthQs [xB0][yB0 + k] = 3
[00580] - Se a largura em amostras de luma do bloco de transformação na posição de luma (xB0 - 1, yB0+k) for igual ou maior que 32, maxFilterLengthPs[xB0][yB0 + k] = 7
[00581] - Caso contrário, maxFilterLengthPs[xB0] [yB0 + k] = 3
[00582] - Se edgeFlagCbCrs[xB0/cW][(yB0 + k)/cH] for igual a 1
[00583] - Se a largura em amostras de saturação do bloco de transformação na posição de saturação (xB0/cW, (yB0+k)/cH) e a posição de saturação (xB0/cW - 1, (yB0+k)/cH) forem ambas iguais ou maiores que 8, maxFilterLengthCbCrs[xB0/cW][(yB0+k)/cH] = 3
[00584] - Caso contrário,
maxFilterLengthCbCrs[xB0/cW][(yB0+k)/cH] = 1
[00585] - Caso contrário (edgeType é igual a EDGE_HOR), o valor de edgeFlagYs[xB0 + k][yB0] e edgeFlagCbCrs[(xB0 + k)/cW][yB0/cH] para k = 0.. nTbW - 1 são derivados da seguinte forma:
[00586] - Se yB0 for igual a 0, edgeFlags[xB0 + k][yB0] e edgeFlagCbCrst (xB0 + k)/cW][yB0/cH] são definidos como iguais a filterEdgeFlag.
[00587] - Caso contrário,
[00588] - Se treeType for igual a SINGLE_TREE ou DUAL_TREE_LUMA edgeFlagYs[xB0 + k][yB0] é definido como sendo igual a 1.
[00589] - Se ispSubblockldx for maior que 1, edgeFlagCbCrs[(xB0 + k)/cW][yB0/cH] é definido como sendo igual a 0
[00590] - Caso contrário, edgeFlagCbCrs[(xB0 + k)/cW][yB0/cH] é definido como sendo igual a 1
[00591] - Se edgeFlagYs[xB0+k] [yB0] é igual a 1,
[00592] - Se a altura em amostras de luma do bloco de transformação na posição de luma (xB0+k, yB0) for igual ou maior que 32, maxFilterLengthQs[xB0+k] [yB0] = 7
[00593] - Caso contrário, maxFilterLengthQs[xB0+k][yB0] = 3
[00594] - Se a altura em amostras de luma do bloco de transformação na posição de luma (xB0+k, yB0 - 1) for igual ou maior que 32, maxFilterLengthPs[xB0+k][yB0] = 7
[00595] - Caso contrário, maxFilterLengthPs[xB0+k][yB0] = 3
[00596] - Se edgeFlagCbCrs[xB0/cW][(yB0 + k)/cH] for igual a 1
[00597] - Se a altura em amostras de saturação do bloco de transformação na posição de saturação ((xB0+k)/cW, yB0/ cH) e a posição de saturação ((xB0+k)/cW, yB0/cH - 1) forem ambas iguais ou maiores que 8,
[00598] - Ajustar yC como a posição superior do bloco atual em amostras de saturação em relação à posição superior da imagem atual
[00599] - Se (yC% (1<<(log2_ctu_size_minus2 +2))/cH for igual a 0) (quando o tipo de borda for EDGE_HOR e a borda se sobrepor ao contorno de saturação CTB), maxFilterLengthCbCrs[(xB0+k)/cW][yB0/ cH] = 1
[00600] - Caso contrário, maxFilterLengthCbCrs[(xB0+k)/cW][yB0/ cH] = 3 Processo de derivação de contorno de sub-bloco de codificação
[00601] As entradas para este processo são:
[00602] - um local (xCb, yCb) especificando a amostra superior esquerda do bloco de codificação atual em relação à amostra superior esquerda da imagem atual,
[00603] - uma variável nCbW que especifica a largura do bloco de codificação atual,
[00604] - uma variável nCbH especificando a altura do bloco de codificação atual,
[00605] - matrizes bidimensionais (nCbW)x(nCbH) edgeFlagYs, edgeFlagCbCrs, maxFilterLengthQs e maxFilterLengthPs,
[00606] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada.
[00607] A saída desse processo é a matriz bidimensional (nCbW)x(nCbH) modificada edgeFlagYs, edgeFlagCbCrs maxFilterLengthQs e maxFilterLengthPs.
[00608] O número de sub-blocos de codificação na direção horizontal numSbX e na direção vertical numSbY são derivados da seguinte forma:
[00609] - Se CuPredMode[xCb][yCb] = = MODE_INTRA, numSbX e numSbY serão ambos definidos como sendo igual a 1.
[00610] - Caso contrário, numSbX e numSbY serão definidos como sendo igual a NumSbX[xCb][yCb] e NumSbY[xCb][yCb], respectivamente.
[00611] Dependendo do valor de edgeTtype, aplica-se o seguinte:
[00612] - Se edgeType for igual a EDGE_VER e numSbX for maior que 1,
[00613] - Um conjunto de edgeTransformFlags é criado fazendo-se uma cópia do conjunto de edgeFlagYs
[00614] - o seguinte se aplica para i = 1.. min((nCbW/8) - 1, numSbX - 1), k = 0.. nCbH – 1: edgeFlagYs [i * Max(8, nCbW / numSbX)][k] = 1
[00615] edgeFlagCbCrs[i * Max(8, nCbW / (numSbX*SubWidthC))] [k/SubHeightC] = 1
[00616] - o seguinte se aplica para i = 0.. min((nCbW/8) - 1, numSbX - 1), k = 0.. nCbH – 1:
[00617] se edgeFlagYs[i * Max(8, nCbW / numSbX)][k] for igual a 1,
[00618] se o componente luma
[00619] - Se i for igual a 0
[00620] - Se numSbX no local (xCb-1,yCb) for maior que 1,
[00621] maxFilterLengtPs[i * Max(8, nCbW / numSbX)][k] =min(5, maxFilterLengtPs[i * Max(8, nCbW / numSbX)] [k])
[00622] maxFilterLengtQs[i * Max(8, nCbW / numSbX)][k] =min(5, maxFilterLengtQs[i * Max(8, nCbW / numSbX)][k])
[00623] - Caso contrário, se edgeTransfromFlags[i * Max(8, nCbW / numSbX)][k] for igual a 1
[00624] maxFilterLengtPs[i * Max(8, nCbW / numSbX)][k] =min(5, maxFilterLengtPs[i * Max(8, nCbW / numSbX)][k])
[00625] maxFilterLengtQs[i * Max(8, nCbW / numSbX)][k ] =min(5, maxFilterLengtQs[i * Max(8, nCbW / numSbX)][k])
[00626] - Caso contrário, se i for igual a 1 ou i for igual a nCbW/8-1 ou (edgeTransfromFlags[(i-1) * Max(8, nCbW / numSbX)][k] for igual a 1) ou (edgeTransfromFlags[(i+1) * Max(8, nCbW / numSbX)][k] for igual a 1)
[00627] maxFilterLengtPs[i * Max(8, nCbW / numSbX)][k] = 2
[00628] maxFilterLengtQs[i * Max(8, nCbW / numSbX)][k] = 2
[00629] - Caso contrário,
[00630] maxFilterLengtPs[i * Max(8, nCbW / numSbX)][k] = 3
[00631] maxFilterLengtQsti * Max(8, nCbW / numSbX)][k] = 3
[00632] - Caso contrário, se edgeType for igual a EDGE_HOR e numSbY for maior que 1,
[00633] - Um conjunto de edgeTransformFlags é criado fazendo-se uma cópia do conjunto de edgeFlagYs
[00634] - A seguir, aplica-se j = 1.. min((nCbH / 8)- 1, numSbY - 1), k = 0.. nCbW - 1:
[00635] edgeFlagYs [k] [j * Max(8, nCbH / numSbY)] = 1
[00636] edgeFlagCbCrs[k/SubWidthC][j * Max(8, nCbH / (numSbY*SubHeightC))] = 1
[00637] - A seguir, aplica-se j = 0.. min((nCbH / 8) - 1, numSbY - 1), k = 0.. nCbW - 1:
[00638] Se edgeFlagYs[k][j * Max(8, nCbH / numSbY)] for igual a 1
[00639] Se o componente luma
[00640] - Se j for igual a 0,
[00641] - Se numSbY no local (xCb,yCb-1) for maior que 1,
[00642] maxFilterLengtPst k][j * Max(8, nCbH / numSbY)] =min(5, maxFilterLengtPs[k] [j * Max(8, nCbH / numSbY)])
[00643] maxFilterLengtQs[k] [j * Max(8, nCbH / numSbY)] = min(5, maxFilterLengtQs[k] [j * Max(8, nCbH / numSbY)])
[00644] - Caso contrário, se edgeTransformFlags[k][j * Max(8, nCbH / numSbY)] for igual a 1
[00645] maxFilterLengtPs[k] [j * Max(8, nCbH / numSbY)] = min(5, maxFilterLengtPs[k] [j * Max(8, nCbH / numSbY)])
[00646] maxFilterLengtQs[k] [j * Max(8, nCbH / numSbY)] = min(5, maxFilterLengtQs[k]| j * Max(8, nCbH / numSbY)])
[00647] - Caso contrário, se j for igual a 1 ou j for igual a nCbH/8-1 ou (edgeTransformFlags[k][(j-1) * Max(8, nCbH / numSbY)] for igual a 1) ou (edgeTransformFlags [k][(j+1) * Max(8, nCbH / numSbY)] for igual a 1)
[00648] maxFilterLengtPs[k] [j * Max(8, nCbH / numSbY)] = 2
[00649] maxFilterLengtQst k] [j * Max(8, nCbH / numSbY)] = 2
[00650] - Caso contrário,
[00651] maxFilterLengtPs[k] [j * Max(8, nCbH / numSbY)] = 3
[00652] maxFilterLengtQs[k] [j * Max(8, nCbH / numSbY)] = 3.
[00653] Conforme descrito acima, de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada de modo que as decisões de filtragem sejam adicional ou alternativamente determinadas com base em se um bloco Q ou um bloco P é um bloco grande (por exemplo, um bloco de transformação, um bloco de predição, um bloco de codificação, um sub-bloco). Em um exemplo, uma determinação de se um bloco Q é um bloco grande (isto é, bSideQisLargeBlk) ou um bloco P é um bloco grande (isto é, bSidePisLargeBlk) pode ser baseada em se o bloco adjacente usa ISP. Ou seja, em um exemplo, uma determinação de se um bloco Q é um bloco grande (isto é, bSideQisLargeBlk) ou um bloco P é um bloco grande (isto é, bSidePisLargeBlk) pode ser da seguinte forma:
[00654] Se o tipo de borda for igual a EDGE_VEB, as seguintes etapas ordenadas se aplicarão: …
[00655] As variáveis bSidePisLargeBlk e bSideQisLargeBlk são derivadas da seguinte forma:
[00656] Se qualquer uma das seguintes condições for verdadeira, bSidePisLargeBlk é definido como sendo igual a 1:
[00657] - intra_subpartitions_mode_flag[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a 0 e p0,0 pertence ao bloco de codificação com largura em amostras de luma maior ou igual a 32
[00658] - intra_subpartitions_mode_flag[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a 1, intraSubPartitionsSplitType[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a ISP_HOR_SPLIT e p0,0 pertence ao bloco de codificação com largura em amostras de luma maior ou igual a 32
[00659] - intra_subpartitions_mode_flag[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a 1, intraSubPartitionsSplitType[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a ISP_VER_SPLIT e p0,0 pertence à transformação com largura em amostras de luma maior ou igual a 32
[00660] Caso contrário, bSidePisLargeBlk é definido como sendo igual a 0.
[00661] Se q0,0 pertencer ao bloco de codificação com largura em amostras de luma maior ou igual a 32, bSideQisLargeBlk é definido como sendo igual a 1, caso contrário, bSideQisLargeBlk é definido como sendo igual a 0. …
[00662] - Caso contrário (edgeType é igual a EDGE_HOR), as seguintes etapas ordenadas se aplicam:
[00663] …
[00664] As variáveis bSidePisLargeBlk e bSideQisLargeBlk são derivadas da seguinte forma:
[00665] Se (posição de luma da amostra p0,0 % de CtbSizeY) for igual a 0, definir bSidePisLargeBlk como 0. Caso contrário,
[00666] Se qualquer uma das seguintes condições for verdadeira, bSidePisLargeBlk é definido como sendo igual a 1:
[00667] - intra_subpartitions_mode_flag[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a 0 e p0,0 pertence ao bloco de codificação com altura em amostras de luma maior ou igual a 32
[00668] - intra_subpartitions_mode_flag[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a 1, intraSubPartitionsSplitType[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a ISPVERSPLIT, e p0,0 pertence ao bloco de codificação com altura em amostras de luma maior ou igual a 32
[00669] - intra_subpartitions_mode_flag[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a 1, intraSubPartitionsSplitType[ ][ ] do bloco de codificação ao qual p0,0 pertence é igual a ISP_HOR_SPLIT e p0,0 pertence à transformação com altura em amostras de luma maior ou igual a 32
[00670] Caso contrário, bSidePisLargeBlk é definido como sendo igual a 0.
[00671] Se q0,0 pertencer ao bloco de codificação com altura maior ou igual a 32, bSideQisLargeBlk é definido como sendo igual a 1, caso contrário, bSideQisLargeBlk é definido como sendo igual a 0.
[00672] Conforme descrito acima, um bloco de amostras (por exemplo, bloco/unidade de codificação) pode conter um ou mais blocos/unidade de transformada. Os contornos de transformação interna podem ser considerados candidatos para desbloqueio. Adicionalmente, em alguns casos, um sinal pode ser recebido pelo decodificador que indica que um bloco de amostras não contém nenhum bloco/unidade de transformada. Por exemplo, um sinalizador, por exemplo, o sinalizador cu_cbf, pode ser definido como 0 quando um residual estiver ausente para uma unidade de codificação. De modo similar, os sinalizadores podem indicar que um residual está ausente para um bloco de codificação de componente de vídeo. Em um exemplo, se um processo de decisão for baseado em propriedades de bloco/unidade de transformada, então, na ausência de bloco/unidade de transformada, outras propriedades substitutas poderão ser usadas. Por exemplo, a seleção de filtro longo pode ser baseada no tamanho do bloco/unidade de transformada ortogonal no contorno que está sendo filtrado/desbloqueado. Entretanto, na ausência de bloco/unidade de transformada, a seleção de filtro longa pode ser baseada no tamanho do bloco/unidade de predição. Em outro exemplo, a seleção do filtro longo pode ser baseada no tamanho do bloco/unidade de codificação. Similar ao bloco/unidade de transformada, a propriedade substituta pode corresponder à dimensão que é ortogonal ao contorno sendo filtrado/ desbloqueado.
[00673] Conforme descrito acima, uma unidade/bloco de codificação pode ser particionado em blocos/unidades de predição e/ou bloco/unidade de predição com o mesmo tamanho que o bloco/unidade de codificação. Adicionalmente, em alguns casos, um bloco/unidade de predição corresponde à partição de sub-bloco de um bloco/unidade de codificação, por exemplo, devido ao uso de ISP. Em alguns casos, um bloco/unidade de predição corresponde ao grupo de amostras para o qual os parâmetros de predição são sinalizados, por exemplo, bloco/unidade de codificação com parâmetros de controle afins, bloco/unidade de codificação com o uso de ATM VP. Em alguns casos, um bloco/unidade de predição corresponde ao grupo de amostras que têm um conjunto comum de parâmetros de predição, por exemplo, sub-blocos (de bloco/unidade de codificação) que correspondem à resolução na qual os vetores de movimento são derivados para um bloco/unidade de codificação afim, e/ou sub-blocos (de bloco/unidade de codificação) que correspondem à resolução na qual os vetores de movimento são derivados para o bloco/unidade de codificação de PVMTA. Similar ao que foi descrito acima, no que diz respeito ao aos contornos de transformação, os contornos internos de predição podem ser considerados candidatos para desbloqueio.
[00674] Em um exemplo de acordo com as técnicas da presente invenção, a unidade de filtro 216 pode ser configurada para invocar um processo de derivação de contorno de bloco de transformação da seguinte forma: Processo de derivação de contorno de bloco de transformação
[00675] As entradas para este processo são:
[00676] - um local (xB0, yB0) especificando a amostra superior esquerda do bloco atual em relação à amostra superior esquerda do bloco de codificação atual,
[00677] - uma variável nTbW especificando a largura do bloco atual,
[00678] - uma variável nTbH especificando a altura do bloco atual,
[00679] - uma variável treeType especificando se uma única árvore (SINGLE_TREE) ou uma árvore dupla é usada para particionar as CTUs e, quando uma árvore dupla é usada, se os componentes luma (DUAL_TREE_LUMA) ou de saturação (DUAL_TREE_CHROMA) estão sendo processados,
[00680] - uma variável filterEdgeFlag,
[00681] - as matrizes bidimensionais (nCbW)x(nCbH) edgeFlags, maxFilterLengthQs, maxFilterLengthPs e uma matriz bidimensional (nCbW/SubWidthC)x(nCbH/SubHeightC) maxFilterLengthCbCrs,
[00682] - uma variável edgeType especificando se uma borda vertical (EDGE_VER) ou horizontal (EDGE_HOR) é filtrada.
[00683] A saída desse processo é a matriz bidimensional (nCbW)x(nCbH) modificada edgeFlags, maxFilterLengthQs, maxFilterLengthPs e a matriz bidimensional (nCbW/SubWidthC)x(nCbH/SubHeightC) maxFilterLengthCbCrs.
[00684] - Se edgeType for igual a EDGE_VER, o valor de edgeFlags[xB0 + 1][yB0 + k] para k = 0.. nTbH - 1 e para 1 = 0.. nTbW- l é derivado da seguinte forma:
[00685] - Se xB0+1 for igual a 0, edgeFlags[xB0+1] [yB0 + k] é definido como sendo igual a filterEdgeFlag.
[00686] - Caso contrário, se o local (xB0+1 yB0+k) estiver em uma borda do bloco transborda, edgeFlags[xB0+1][yB0 + k] é definida como sendo igual a 1.
[00687] - Se edgeFlags[xB0 + 1][yB0 + k] for igual a 1
[00688] Se treeType for igual a uma SINGLE_TREE ou DUAL_TREE_LUMA
[00689] - Se a largura em amostras de luma do bloco de transformação quando cu_cbf é igual a 1 ou ao bloco de predição quando cu_cbf é igual a 0 na posição de luma (xB0+1, yB0+k) for igual ou maior que 32, maxFilterLengthQs[xB0 + 1] [yB0 + k] = 7
[00690] - Caso contrário, maxFilterLengthQs[xB0 + 1][yB0 + k] = 3
[00691] - Se a largura em amostras de luma do bloco de transformação quando cu_cbf é igual a 1 ou ao bloco de predição quando cu_cbf é igual a 0 na posição de luma (xB0 -1 + 1, yB0+k) for igual ou maior que 32, maxFilterLengthPst xB0 + 1][yB0 + k] = 7
[00692] - Caso contrário, maxFilterLengthPst xB0 + 1][yB0 + k] = 3
[00693] - Se a largura em amostras de saturação do bloco de transformação quando cu_cbf é igual a 1 ou ao bloco de predição quando cu_cbf é igual a 0 na posição de saturação ((xB0+1)/SubWidthC, (yB0+k)/SubHeightC) e na posição de saturação (xB0+1)/SubWidthC - 1, (yB0+k)/SubHeightC) forem ambas iguais ou maiores que 8, maxFilterLengthCbCrs[(xB0+1)/SubWidthtC][(yB0+k)/ SubHeightC] = 3
[00694] - Caso contrário, maxFilterLengthCbCrst (xB0+1)/SubWidthtC][(yB0+k)/SubHeightC] = 1
[00695] Caso contrário
[00696] - Se a largura em amostras de saturação do bloco de transformação quando cu_cbf é igual a 1 ou do bloco de codificação quando cu_cbf é igual a 0 na posição de saturação (xB0+1, yB0+k) e na posição de saturação (xB0+1-1, yB0+k) forem ambas iguais ou maiores que 8, maxFilterLengthCbCrs[xB0+1][yB0 + k] = 3
[00697] - Caso contrário, maxFilterLengthCbCrs[xB0+1][yB0 + k] = 1
[00698] - Caso contrário (edgeType é igual a EDGE_HOR), o valor de edgeFlags[xB0 + k][yB0 +1] para k = 0.. nTbW - 1 e para 1 = 0.. nTbH - 1 é derivado da seguinte forma:
[00699] - Se yB0 for igual a 0, edgeFlags[xB0 + k][yB0 + 1] é definido como sendo igual a filterEdgeFlag.
[00700] - Caso contrário, se o local (xB0+k, yB0+1) estiver em uma borda do bloco de transformação, edgeFlags[xB0 + k][yB0 + 1] é definida como 1.
[00701] - Se edgeFlags[xB0+k] [yB0+1] for igual a 1,
[00702] Se treeType for igual a uma SINGLE_TREE ou DUAL_TREE_LUMA
[00703] - Se a altura em amostras de luma do bloco de transformação quando cu_cbf é igual a 1 ou ao bloco de predição quando cu cbf é igual a 0 na posição de luma (xB0+k, yB0+1) for igual ou maior que 32, maxFilterLengthQs[xB0+k][yB0+1] = 7
[00704] - Caso contrário, maxFilterLengthQs[xB0+k][yB0+1] = 3
[00705] - Se a altura em amostras de luma do bloco de transformação quando cu_cbf é igual a 1 ou ao bloco de predição quando cu_cbf é igual a 0 na posição de luma (xB0+k, yB0+1 - 1) for igual ou maior que 32, maxFilterLengthPst xB0+k][yB0+1] = 7
[00706] - Caso contrário, maxFilterLengthPs[xB0+k][yB0+1] = 3
[00707] - Se a altura em amostras de saturação do bloco de transformação quando cu_cbf é igual a 1 ou ao bloco de predição quando cu_cbf é igual a 0 na posição de saturação ((xB0+k)/SubWidthC, (yB0+1)/ SubHeightC) e na posição de saturação ((xB0+k)/SubWidthtC, (yB0+1)/SubHeightC - 1) são ambas iguais ou maiores que 8,
[00708] Onde yC é a posição superior do bloco atual em amostras de saturação em relação à posição superior da imagem atual
[00709] - Se ((yC+yB0+1)% (1<<(log2_ctu_size_minus2 +2))/SubHeightC for igual a 0) (quando o tipo de borda é EDGE_HOR e a borda se sobrepõe ao contorno de saturação CTB)
[00710] - maxFilterLengthCbCrs[(xB0+k)/SubWidthC][(yB0+1)/ SubHeightC] = 1
[00711] - Caso contrário, maxFilterLengthCbCrs[(xB0+k)/SubWidthC][(yB0+1)/ SubFleightC] = 3
[00712] - Caso contrário, maxFilterLengthCbCrsl (xB0+k)/SubWidthtC][(yB0+1)/ SubHeightC] = 1
[00713] de outro modo
[00714] - Se a altura em amostras de saturação do bloco de transformação quando cu_cbf é igual a 1 ou ao bloco de predição quando cu_cbf é igual a 0 na posição de saturação (xB0+k, yB0+1) e na posição de saturação (xB0+k, yB0+1-1) ambas são iguais ou maiores que 8,
[00715] Onde yC é a posição superior do bloco atual em amostras de saturação em relação à posição superior da imagem atual
[00716] - Se ((yC+yB0+1)% (1<<(log2_ctu_size_minus2 +2))/SubHeightC for igual a 0) (quando o tipo de borda é EDGE_HOR e a borda se sobrepõe ao contorno de saturação CTB)
[00717] - maxFilterLengthCbCrs[xB0+k][yB0+1] = 1
[00718] - Caso contrário, maxFilterLengthQCbCrs[xB0+k][yB0+1] = 3
[00719] - Caso contrário, maxFilterLengthCbCrsf xB0+k][yB0+1] = 1
[00720] De modo similar, em um exemplo, as computações usadas no processo de decisão para bordas de bloco podem ser baseadas no tamanho do bloco/unidade de transformação na presença de um residual, mas quando o residual estiver ausente, elas podem ser baseadas no bloco de predição/unidade de tamanho. Ou seja, em um exemplo, uma determinação de se um bloco Q é um bloco grande (isto é, bSideQisLargeBlk ou sideQisLargeBlk) ou um bloco P é um bloco grande (isto é, bSidePisLargeBlk ou sidePisLargeBlk) pode ser baseada no seguinte:
[00721] Se edgeType for igual a EDGE_VER, as seguintes etapas ordenadas se aplicam:
[00722] …
[00723] 2. As variáveis sidePisLargeBlk e sideQisLargeBlk são primeiramente inicializadas em 0 e, então, modificadas da seguinte forma:
[00724] Se maxFilterLengthP for maior que 3,
[00725] Se p0,0 pertencer ao bloco de predição quando cu_cbf é igual a 0 ou ao bloco de transformação quando cu_cbf é igual a 1 com largura em amostras de luma maior ou igual a 32, sidePisLargeBlk é definido como 1, caso contrário, sidePisLargeBlk é definido como 0.
[00726] Se maxFilterLengthQ for maior que 3,
[00727] Se q0,0 pertencer ao bloco de predição quando cucbf é igual a 0 ou bloco transa partir de quando cu_cbf é igual a 1 com largura em amostras de luma maior ou igual a 32, sideQisLargeBlk é definido como 1, caso contrário, sideQisLargeBlk é definido como 0 ...
[00728] Caso contrário, (edgeType é igual a EDGE_HOR), as seguintes etapas ordenadas se aplicam: …
[00729] 2. As variáveis sidePisLargeBlk e sideQisLargeBlk são primeiramente inicializadas em 0 e são então modificadas da seguinte forma:
[00730] Se (posição de luma da amostra p0,0 % de CtbSizeY) for igual a 0, ajustar sidePisLargeBlk para 0
[00731] de outro modo,
[00732] Se maxFilterLengthP for maior que 3,
[00733] Se p0,0 pertencer ao bloco de predição quando cu_cbf é igual a 0 ou ao bloco de transformação quando cu_cbf é igual a 1 com altura maior ou igual a 32, sidePisLargeBlk é definido como 1, caso contrário, sidePisLargeBlk é definido como 0.
[00734] Se maxFilterLengthQ for maior que 3,
[00735] Se q0,0 pertencer ao bloco de predição quando cu_cbf é igual a 0 ou ao bloco de transformação quando cu_cbf é igual a 1 com altura maior ou igual a 32, sideQisLargeBlk é definido como 1, caso contrário, sideQisLargeBlk é definido como 0. …
[00736] A unidade de codificação por entropia 218 recebe coeficientes de transformada quantificados e dados de sintaxe preditivos (isto é, dados intrapredição de movimento, dados QP etc.). A unidade de codificação por entropia 218 pode ser configurada para executar codificação por entropia de acordo com uma ou mais dentre as técnicas descritas na presente invenção. A unidade de codificação de entropia 218 pode ser configurada para emitir um fluxo de bits compatível, isto é, um fluxo de bits que um decodificador de vídeo pode receber e reproduzir dados de vídeo a partir do mesmo. Dessa maneira, o codificador de vídeo 200 representa um exemplo de um dispositivo configurado para receber uma matriz de valores de amostra incluindo blocos de vídeo reconstruídos adjacentes para um componente de dados de vídeo, determinar um valor de intensidade de contorno para um contorno entre os blocos de vídeo reconstruídos adjacentes, sendo que o contorno é um contorno intra subpartição e modifica valores de amostra nos blocos de vídeo reconstruídos adjacentes com base no valor de intensidade de contorno determinado e de acordo com um filtro de desbloqueio.
[00737] A Figura 9 é um diagrama de blocos que ilustra um exemplo de um decodificador de vídeo que pode ser configurado para decodificar dados de vídeo de acordo com uma ou mais técnicas desta divulgação. Em um exemplo, o decodificador de vídeo 300 pode ser configurado para reconstruir dados de vídeo com base em uma ou mais das técnicas descritas acima. Ou seja, o decodificador de vídeo 300 pode operar de maneira recíproca ao codificador de vídeo 200 descrito acima. O decodificador de vídeo 300 pode ser configurado para executar decodificação de intrapredição e decodificação de interpredição e, dessa forma, pode ser chamado de decodificador híbrido. No exemplo ilustrado na Figura 9, o decodificador de vídeo 300 inclui uma unidade de decodificação por entropia 302, uma unidade de quantificação inversa 304, uma unidade de processamento de transformação inversa 306, uma unidade de processamento de intrapredição 308, uma unidade de processamento de interpredição 310, um somador 312, uma unidade de filtragem 314 e um buffer de referência 316. O decodificador de vídeo 300 pode ser configurado para decodificar dados de vídeo de uma maneira consistente com um sistema de codificação de vídeo, que pode implementar um ou mais aspectos de um padrão de codificação de vídeo. Deve-se notar que, embora o decodificador de vídeo exemplificador 300 seja ilustrado como tendo blocos funcionais distintos, tal ilustração serve a propósitos descritivos e não limita o decodificador de vídeo 300 e/ou os subcomponentes do mesmo a uma arquitetura específica de software ou hardware. As funções do decodificador de vídeo 300 podem ser executadas com o uso de qualquer combinação de implementações de hardware, firmware e/ou software.
[00738] Conforme ilustrado na Figura 9, a unidade de decodificação por entropia 302 recebe um fluxo de bits codificado por entropia. A unidade de decodificação por entropia 302 pode ser configurada para decodificar elementos de sintaxe quantificados e coeficientes quantificados a partir do fluxo de bits, de acordo com um processo recíproco para um processo de codificação por entropia. A unidade de decodificação por entropia 302 pode ser configurada para executar decodificação por entropia de acordo com qualquer uma dentre as técnicas de codificação por entropia descritas acima.
A unidade de decodificação por entropia 302 pode analisar um fluxo de bits codificado de uma maneira consistente com um padrão de codificação de vídeo.
O decodificador de vídeo 300 pode ser configurado para analisar um fluxo de bits codificado onde o fluxo de bits codificado é gerado com base nas técnicas descritas acima.
A unidade de quantização inversa 304 recebe coeficientes de transformada quantificados (isto é, valores de nível) e dados de parâmetro de quantização a partir da unidade de decodificação de entropia 302. Os dados de parâmetro de quantificação podem incluir qualquer uma e todas as combinações de valores delta QP e/ou valores de tamanho de grupo de quantificação e similares descritos acima.
O decodificador de vídeo 300 e/ou a unidade de quantificação inversa 304 podem ser configurados para determinar os valores de QP usados para quantificação inversa com base em valores sinalizados por um codificador de vídeo e/ou por meio de propriedades de vídeo e/ou parâmetros de codificação.
Ou seja, a unidade de quantificação inversa 304 pode operar de uma maneira recíproca à unidade de quantificação de coeficiente 206 descrita acima.
A unidade de quantificação inversa 304 pode ser configurada para aplicar uma quantificação inversa.
A unidade de processamento de transformada inversa 306 pode ser configurada para executar uma transformação inversa para gerar dados residuais reconstruídos.
As técnicas respectivamente executadas pela unidade de quantificação inversa 304 e pela unidade de processamento de transformada inversa 306 podem ser similares às técnicas executadas pela unidade de processamento de quantificação/transformada inversa 208 descritas acima.
A unidade de processamento de transformada inversa 306 pode ser configurada para aplicar uma DCT inversa, uma DST inversa, uma transformada de número inteiro inversa, uma transformada secundária não separável ("NSST" - Non-Separable Secondary Transform) ou processos de transformada inversa conceitualmente similares aos coeficientes de transformada a fim de produzir blocos residuais no domínio de pixel. Adicionalmente, conforme descrito acima, o fato de uma transformada específica (ou tipo de transformada específica) ser executada, pode depender de um modo intra previsão. Conforme ilustrado na Figura 9, os dados residuais reconstruídos podem ser fornecidos ao somador 312. O somador 312 pode adicionar dados residuais reconstruídos a um bloco de vídeo preditivo e gerar dados de vídeo reconstruídos.
[00739] Conforme descrito acima, pode ser determinado um bloco de vídeo preditivo de acordo com uma técnica de vídeo preditivo (isto é, intraprevisão e interprevisão de quadro). A unidade de processamento de intraprevisão 308 pode ser configurada para receber elementos de sintaxe de intraprevisão e recuperar um bloco de vídeo preditivo do buffer de referência 316. O buffer de referência 316 pode incluir um dispositivo de memória configurado para armazenar um ou mais quadros de dados de vídeo. Elementos de sintaxe de intraprevisão podem identificar um modo de intraprevisão, como os modos de intraprevisão descritos acima. Em um exemplo, a unidade de processamento intraprevisão 308 pode reconstruir um bloco de vídeo de acordo com uma ou mais das técnicas de codificação intraprevisão aqui descritas. A unidade de processamento de interprevisão 310 pode receber elementos de sintaxe de interprevisão e gerar vetores de movimento para identificar um bloco de previsão em um ou mais quadros de referência armazenados no buffer de referência 316. A unidade de processamento de interpredição 310 pode produzir blocos compensados de movimento, que executam possivelmente interpolação com base em filtros de interpolação. Identificadores para filtros de interpolação para serem usados para estimativa de movimento com precisão de subpixel podem estar incluídos nos elementos de sintaxe. A unidade de processamento de interpredição 310 pode usar filtros de interpolação para calcular valores interpolados para pixels de subnúmero inteiro de um bloco de referência.
[00740] A unidade de filtragem 314 pode ser configurada para executar filtragem em dados de vídeo reconstruídos. Por exemplo, a unidade de filtro 314 pode ser configurada para executar desbloqueio e/ou filtragem SAO, conforme descrito acima em relação à unidade de filtro 216. Além disso, deve-se notar que, em alguns exemplos, a unidade de filtragem 314 pode ser configurada para executar filtragem discricionária proprietária (por exemplo aprimoramentos visuais). Conforme ilustrado na Figura 9, um bloco de vídeo reconstruído pode ser emitido pelo decodificador de vídeo 300. Dessa maneira, o decodificador de vídeo 300 representa um exemplo de um dispositivo configurado para receber uma matriz de valores de amostra incluindo blocos de vídeo reconstruídos adjacentes para um componente de dados de vídeo, determinar um valor de intensidade de contorno para um contorno entre os blocos de vídeo reconstruídos adjacentes, sendo que o contorno é um contorno intra subpartição e modifica valores de amostra nos blocos de vídeo reconstruídos adjacentes com base no valor de intensidade de contorno determinado e de acordo com um filtro de desbloqueio.
[00741] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Se implementadas em software, as funções podem ser armazenadas em, ou transmitidas como, uma ou mais instruções ou código em uma mídia legível por computador e executadas por uma unidade de processamento baseada em hardware. A mídia legível por computador pode incluir mídia de armazenamento legível por computador, que corresponde a uma mídia tangível, como mídia de armazenamento de dados, ou meios de comunicação que incluam qualquer meio que facilite a transferência de um programa de computador de um local para outro, por exemplo, de acordo com um protocolo de comunicação. Dessa maneira, a mídia legível por computador pode corresponder geralmente a
(1) mídia de armazenamento tangível legível por computador que não é transitória ou (2) um meio de comunicação, como um sinal ou uma onda portadora. A mídia de armazenamento de dados pode ser qualquer mídia disponível que possa ser acessada por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e/ou estruturas de dados para implementação das técnicas descritas nesta divulgação. Um produto de programa de computador pode incluir uma mídia legível por computador.
[00742] A título de exemplo, e sem limitação, essa mídia de armazenamento legível por computador pode compreender dispositivos de armazenamento RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco óptico, armazenamento de disco magnético ou outros dispositivos de armazenamento magnético, memória flash ou qualquer outra mídia que pode ser usada para armazenar o código de programa desejado na forma de instruções ou estruturas de dados e que pode ser acessada por um computador. Além disso, qualquer conexão é adequadamente denominada mídia legível por computador. Por exemplo, se instruções forem transmitidas a partir de um site da Web, servidor ou outra fonte remota com o uso de um cabo coaxial, cabo de fibra óptica, par trançado, linha digital de assinantes ("DSL" - digital subscriber line), ou tecnologias sem fio como infravermelho, rádio e micro-ondas, então o cabo coaxial, o cabo de fibra óptica, o par trançado, a DSL ou tecnologias sem fio como infravermelho, rádio e micro-ondas estão incluídos na definição de meio. Deve ser entendido, no entanto, que a mídia de armazenamento legível por computador e a mídia de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outras mídias transitórias, mas, em vez disso, são direcionadas a mídia de armazenamento tangível não transitória. Os termos "disco magnético" e "disco óptico", como usados na presente invenção, incluem disco compacto ("CD" - Compact Disc), disco de laser, disco óptico, disco versátil digital ("DVD" - Digital Versatile Disc), disquete e disco Blu-ray, sendo que discos magnéticos normalmente reproduzem dados magneticamente, enquanto discos ópticos reproduzem dados opticamente com lasers. Combinações do exposto acima devem ser incluídas também no escopo de mídias legíveis por computador.
[00743] As instruções podem ser executadas por um ou mais processadores, como um ou mais processadores digitais de sinal (DSPs), microprocessadores de propósito geral, circuitos integrados de aplicação específica (ASICs), matrizes de portas programáveis em campo (FPGAs) ou outros circuitos lógicos distintos ou integrados equivalentes. Consequentemente, o termo "processador", como usado na presente invenção, pode se referir a qualquer dentre a estrutura anteriormente mencionada ou qualquer outra estrutura adequada para implementação das técnicas descritas na presente invenção. Além disso, em alguns aspectos, a funcionalidade descrita na presente invenção pode ser fornecida em módulos de software e/ou hardware dedicado configurados para codificar e decodificar, ou incorporados em um codec combinado. Além disso, as técnicas poderiam ser totalmente implementadas em um ou mais circuitos ou elementos lógicos.
[00744] As técnicas desta divulgação podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um monofone sem fio, um circuito integrado ("IC" - integrated circuit) ou um conjunto de ICs (por exemplo um conjunto de chips). Vários componentes, módulos ou unidades são descritos nesta divulgação para enfatizar aspectos funcionais de dispositivos configurados para executar as técnicas divulgadas, mas não necessariamente precisam de realização por unidades de hardware diferentes. Em vez disso, conforme descrito acima, várias unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por uma coleção de unidades de hardware interoperacionais, incluindo um ou mais processadores conforme descrito acima, em conjunto com software e/ou firmware adequado.
[00745] Além disso, cada bloco funcional ou vários recursos do dispositivo de estação-base e do dispositivo terminal usados em cada uma das modalidades anteriormente mencionadas podem ser implementados ou executados por um circuito, que é tipicamente um circuito integrado ou uma pluralidade de circuitos integrados. O conjunto de circuitos projetado para executar as funções descritas no presente relatório descritivo pode incluir um processador de propósito geral, um processador digital de sinais (DSP), um circuito integrado de aplicação específica (ASIC) ou de aplicação geral, uma matriz de portas programável em campo (FPGA), ou outros dispositivos lógicos programáveis, portas distintas ou lógica de transistor, ou um componente de hardware distinto, ou uma combinação desses itens. O processador de propósito geral pode ser um microprocessador ou, alternativamente, pode ser um processador convencional, um controlador, um microcontrolador ou uma máquina de estado. O processador de propósito geral ou cada circuito descrito acima pode ser configurado por um circuito digital ou pode ser configurado por um circuito analógico. Além disso, quando surgir uma tecnologia de fabricação de um circuito integrado que substitua os atuais circuitos integrados devido aos avanços em uma tecnologia de semicondutor, também poderá ser usado o circuito integrado resultante dessa tecnologia.
[00746] Vários exemplos foram descritos. Esses e outros exemplos estão dentro do escopo das reivindicações a seguir. <Resumo>
[00747] Em um exemplo, um método para filtrar dados de vídeo reconstruídos compreende:
[00748] receber uma matriz de valores de amostra incluindo blocos de vídeo reconstruídos adjacentes para um componente de dados de vídeo; determinar um valor de intensidade de contorno para um contorno entre os blocos de vídeo reconstruídos adjacentes, sendo que o contorno é um contorno de subpartição; e modificar valores de amostra nos blocos de vídeo reconstruídos adjacentes com base no valor de intensidade de contorno determinado e de acordo com um filtro de desbloqueio.
[00749] Em um exemplo, o método compreende um componente de dados de vídeo que inclui um componente de saturação.
[00750] Em um exemplo, é apresentado um dispositivo para codificar dados de vídeo, sendo que o dispositivo compreende um ou mais processadores configurados para executar qualquer uma e todas as combinações das etapas.
[00751] Em um exemplo, o dispositivo, sendo que o dispositivo inclui um codificador de vídeo.
[00752] Em um exemplo, o dispositivo, sendo que o dispositivo inclui um decodificador de vídeo.
[00753] Em um exemplo, um sistema que compreende: o dispositivo e o dispositivo.
[00754] Em um exemplo, é apresentado um aparelho para codificar dados de vídeo, sendo que o aparelho compreende meios para executar qualquer uma e todas as combinações das etapas.
[00755] Em um exemplo, uma mídia de armazenamento não transitório legível por computador compreende instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores de um dispositivo de codificação de dados de vídeo executem qualquer uma e todas as combinações das etapas.
[00756] Em um exemplo, um método para filtrar dados de vídeo reconstruídos compreende: receber uma matriz de amostras de luma reconstruídas incluindo um bloco P e um bloco Q adjacente a um contorno de desbloqueio; determinar se o bloco P ou o bloco Q tem uma borda perpendicular ao contorno de desbloqueio e cujo tamanho é maior ou igual a 32; determinar o comprimento máximo do filtro com base em se o bloco P ou o bloco Q tem a borda; e desbloquear a matriz de amostras de luma reconstruídas com base no comprimento máximo determinado do filtro.
[00757] Em um exemplo, o método determina que o comprimento máximo do filtro seja 7.
[00758] Em um exemplo, o método determina que o comprimento máximo do filtro seja 3.
[00759] Em um exemplo, o método determina que o bloco P ou o bloco Q é um bloco de transformação.
[00760] Em um exemplo, um dispositivo para filtrar dados de vídeo reconstruídos, compreende um ou mais processadores configurados para: receber uma matriz de amostras de luma reconstruídas incluindo um bloco P e um bloco Q adjacente a um contorno de desbloqueio; determinar se o bloco P ou o bloco Q tem uma borda perpendicular ao contorno de desbloqueio e cujo tamanho é maior ou igual a 32; determinar o comprimento máximo do filtro com base em se o bloco P ou o bloco Q tem a borda; e desbloquear a matriz de amostras de luma reconstruídas com base no comprimento máximo determinado do filtro. Referência cruzada
[00761] Este pedido não provisório reivindica a prioridade disposta no 35 U.S.C.§ 119 dos pedidos provisórios n° 62/807.703, depositado em 19 de fevereiro de 2019, n° 62/810.913, depositado em 26 de fevereiro de 2019, n° 62/813.985, depositado em 5 de março de 2019, n° 62/816.844, depositado em 11 de março de 2019, n° 62/817.348, depositado em 12 de março de 2019, n° 62/819.575, depositado em 16 de março de 2019, cuja totalidade do conteúdo está incorporada na presente invenção a título de referência.

Claims (5)

REIVINDICAÇÕES
1. Método de filtragem de dados de vídeo reconstruídos, caracterizado por compreender: receber uma matriz de amostras de luma reconstruídas incluindo um bloco P e um bloco Q adjacente a um contorno de desbloqueio; determinar se o bloco P ou o bloco Q tem uma borda perpendicular ao contorno de desbloqueio e cujo tamanho é maior ou igual a 32; determinar o comprimento máximo do filtro com base em se o bloco P ou o bloco Q tem borda; e desbloquear a matriz de amostras de luma reconstruídas com base no comprimento de filtro máximo determinado.
2. Método, de acordo com a reivindicação 1, caracterizado por o comprimento máximo do filtro ser determinado como sendo igual a 7.
3. Método, de acordo com a reivindicação 2, caracterizado por o comprimento máximo do filtro ser determinado como sendo igual a 3.
4. Método, de acordo com a reivindicação 3, caracterizado por o bloco P ou o bloco Q ser um bloco de transformação.
5. Dispositivo de filtragem de dados de vídeo reconstruídos, caracterizado por compreender um ou mais processadores configurados para: receber uma matriz de amostras de luma reconstruídas incluindo um bloco P e um bloco Q adjacente a um contorno de desbloqueio; determinar se o bloco P ou o bloco Q tem uma borda perpendicular ao contorno de desbloqueio e cujo tamanho é maior ou igual a 32; determinar o comprimento máximo do filtro com base em se o bloco P ou o bloco Q tem borda; e desbloquear a matriz de amostras de luma reconstruídas com base no comprimento de filtro máximo determinado.
BR112021016502-9A 2019-02-19 2020-02-19 Sistemas e métodos para aplicar filtros de desbloqueio a dados de vídeo reconstruídos BR112021016502A2 (pt)

Applications Claiming Priority (13)

Application Number Priority Date Filing Date Title
US201962807703P 2019-02-19 2019-02-19
US62/807,703 2019-02-19
US201962810913P 2019-02-26 2019-02-26
US62/810,913 2019-02-26
US201962813985P 2019-03-05 2019-03-05
US62/813,985 2019-03-05
US201962816844P 2019-03-11 2019-03-11
US62/816,844 2019-03-11
US201962817348P 2019-03-12 2019-03-12
US62/817,348 2019-03-12
US201962819575P 2019-03-16 2019-03-16
US62/819,575 2019-03-16
PCT/JP2020/006624 WO2020171143A1 (en) 2019-02-19 2020-02-19 Systems and methods for applying deblocking filters to reconstructed video data

Publications (1)

Publication Number Publication Date
BR112021016502A2 true BR112021016502A2 (pt) 2021-10-26

Family

ID=72144247

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021016502-9A BR112021016502A2 (pt) 2019-02-19 2020-02-19 Sistemas e métodos para aplicar filtros de desbloqueio a dados de vídeo reconstruídos

Country Status (6)

Country Link
US (2) US11818342B2 (pt)
EP (1) EP3928514A4 (pt)
CN (1) CN113439438A (pt)
AU (1) AU2020225713A1 (pt)
BR (1) BR112021016502A2 (pt)
WO (1) WO2020171143A1 (pt)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
HUE040422T2 (hu) * 2011-10-31 2019-03-28 Hfi Innovation Inc Eljárás készülék egyszerûsített határerõsség-meghatározással mûködõ deblokkoló szûrõhöz
CN105791865B (zh) * 2014-12-22 2020-01-17 江苏省电力公司南京供电公司 帧内预测及去块滤波方法
WO2017184970A1 (en) * 2016-04-22 2017-10-26 Vid Scale, Inc. Prediction systems and methods for video coding based on filtering nearest neighboring pixels
EP3738306A1 (en) * 2018-01-11 2020-11-18 Telefonaktiebolaget LM Ericsson (publ) Multiple boundary filtering
KR20210113371A (ko) 2019-02-15 2021-09-15 텔레폰악티에볼라겟엘엠에릭슨(펍) 변환 서브-블록 경계의 디블록킹

Also Published As

Publication number Publication date
WO2020171143A1 (en) 2020-08-27
EP3928514A1 (en) 2021-12-29
AU2020225713A1 (en) 2021-10-14
EP3928514A4 (en) 2022-12-14
CN113439438A (zh) 2021-09-24
US20220124325A1 (en) 2022-04-21
US11818342B2 (en) 2023-11-14
US20240048697A1 (en) 2024-02-08

Similar Documents

Publication Publication Date Title
CN110999291B (zh) 用于划分视频数据的帧间预测片段中的视频块的系统和方法
CN110249629B (zh) 确定对视频数据的分割以进行视频码处理的方法
CN112042203B (zh) 用于将解块滤波器应用于重构视频数据的系统和方法
US11259021B2 (en) Systems and methods for partitioning video blocks at a boundary of a picture for video coding
US20210314630A1 (en) Systems and methods for partitioning video blocks in an inter prediction slice of video data
US11470359B2 (en) Systems and methods for partitioning video blocks at a boundary of a picture for video coding
WO2018119431A1 (en) Determining neighboring samples for bilateral filtering in video decoding
WO2018119429A1 (en) Deriving bilateral filter information based on a prediction mode in video decoding
WO2019004364A1 (en) SYSTEMS AND METHODS FOR GEOMETRICALLY ADAPTIVE PARTITIONING OF A VIDEO BLOCK IMAGE FOR VIDEO CODING
RU2770650C1 (ru) Системы и способы применения фильтров деблокирования к восстановленным видеоданным
US11310519B2 (en) Deblocking of subblock boundaries for affine motion compensated coding
US12010301B2 (en) Systems and methods for performing intra prediction coding in video coding
WO2021045171A1 (en) Systems and methods for performing inter prediction coding in video coding
US11979566B2 (en) Systems and methods for reducing a reconstruction error in video coding based on a cross-component correlation
KR20190112776A (ko) 평면 내적 예측 비디오 코딩을 수행하기 위한 시스템들 및 방법들
BR112021016502A2 (pt) Sistemas e métodos para aplicar filtros de desbloqueio a dados de vídeo reconstruídos
WO2020262524A1 (en) Systems and methods for applying deblocking filters to reconstructed video data
WO2020166556A1 (en) Systems and methods for performing inter prediction in video coding