BR112020026183A2 - Método de codificação de vídeo, codificador, decodificador e produto de programa de computador - Google Patents

Método de codificação de vídeo, codificador, decodificador e produto de programa de computador Download PDF

Info

Publication number
BR112020026183A2
BR112020026183A2 BR112020026183-1A BR112020026183A BR112020026183A2 BR 112020026183 A2 BR112020026183 A2 BR 112020026183A2 BR 112020026183 A BR112020026183 A BR 112020026183A BR 112020026183 A2 BR112020026183 A2 BR 112020026183A2
Authority
BR
Brazil
Prior art keywords
cbf
flag
transform
treetype
unit
Prior art date
Application number
BR112020026183-1A
Other languages
English (en)
Inventor
Roman Igorevich CHERNYAK
Yin Zhao
Sergey Yurievich IKONIN
Jianle Chen
Original Assignee
Huawei Technologies Co., Ltd.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co., Ltd. filed Critical Huawei Technologies Co., Ltd.
Publication of BR112020026183A2 publication Critical patent/BR112020026183A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • 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/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/18Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a set of transform coefficients
    • 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/184Methods 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 bits, e.g. of the compressed video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Electrophonic Musical Instruments (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

método de codificação de vídeo, codificador, decodificador e produto de programa de computador.um método de codificação implementado por um dispositivo de decodificação ou dispositivo de codificação, o método que compreende obter um fluxo de bits (1601), o fluxo de bits compreende uma sintaxe de unidade de transformada, (em um exemplo, o elemento de sintaxe de unidade de transformada pode ser tanto codificado para um bloco inteiro quanto codificado para múltiplas unidades de subtransformada que são obtidas por transformada de sub-bloco (sbt) para bloco inter, ou de modo a satisfazer restrições de tamanho de unidade de transformada máxima); a sintaxe compreende pelo menos dois sinalizadores cbf para blocos croma (em um exemplo, sintaxe de unidade de transformada corresponde tanto a unidade de transformada quanto as unidades de subtransformada as quais incluem dois sinalizadores cbf croma: tu_cbf_cb e tu_cbf_cb - um sinalizador para cada plano de croma), um sinalizador cbf croma especifica se certo bloco tem resíduo em plano de cor correspondente; derivar (1602) um valor de um sinalizador cbf luma tu_cbf_luma com base em um ou qualquer combinação de um valor de um sinalizador cu_cbf, valores de dois sinalizadores cbf croma correspondentes a uma unidade de transformada atual ou unidade de subtransformada, localização da unidade de subtransformada dentro de unidade de transformada, valores de luma e sinalizadores cbf croma correspondentes as unidades de subtransformada anteriores na unidade de transformada atual.

Description

“MÉTODO DE CODIFICAÇÃO DE VÍDEO, CODIFICADOR, DECODIFICADOR E PRODUTO DE PROGRAMA DE COMPUTADOR” REFERÊNCIA CRUZADA AOS PEDIDOS RELACIONADOS
[0001] Este pedido de patente reivindica a prioridade do Pedido de Patente Provisório dos EUA No US 62/812.282, depositado em 01 de março de 2019, bem como o Pedido de Patente Provisório dos EUA No US 62/817.498 depositado em 12 de março de 2019, bem como o Pedido de Patente Provisório dos EUA No US 62/825.005 depositado em 27 de março de 2019, bem como Pedido de Patente Internacional PCT/EP2019/064224, depositado em 31 de maio de 2019. As respectivas revelações dos pedidos de patente anteriormente mencionadas são incorporadas neste relatório à título de referência em sua totalidade.
CAMPO TÉCNICO
[0002] As modalidades do presente pedido (revelação) geralmente referem-se ao campo de processamento de imagem e, mais particularmente, à sinalização de sinalizadores de transformada. Foi divulgado que os sinalizadores CBF que são apresentados nos elementos de sintaxe de Árvore de Transformada ou Unidade de Transformada e podem ser sinalizados dependendo uns dos outros e de outros elementos de sintaxe disponíveis.
FUNDAMENTOS
[0003] A codificação de vídeo (codificação e decodificação de vídeo) é usada em uma ampla faixa de aplicações de vídeo digital, por exemplo, transmissão de TV digital, transmissão de vídeo pela internet e redes móveis, aplicações de conversação em tempo real, tais como chat de vídeo, videoconferência, DVD e discos de Blu-ray, aquisição de conteúdo de vídeo e sistemas de edição e câmeras de vídeo de aplicação de segurança.
[0004] A quantidade de dados de vídeo necessária para representar um mesmo vídeo relativamente curto que pode ser substancial, o que pode resultar em dificuldades quando os dados devem ser transmitidos ou, de outro modo, comunicados através de uma rede de comunicações com capacidade de largura de banda limitada. Assim, os dados de vídeo são geralmente comprimidos antes de serem comunicados pelas redes de telecomunicações dos dias modernos. O tamanho de um vídeo também pode ser um problema quando o vídeo é armazenado em um dispositivo de armazenamento, pelo fato de que os recursos de memória podem ser limitados. Os dispositivos de compressão de vídeo frequentemente utilizam software e/ou hardware na fonte para codificar os dados de vídeo antes da transmissão ou armazenamento, diminuindo, desse modo, a quantidade de dados necessária para representar imagens de vídeo digital. Os dados comprimidos são, então, recebidos no destino por um dispositivo de descompressão de vídeo que decodifica os dados de vídeo. Com recursos de rede limitados e demandas cada vez maiores de maior qualidade de vídeo, técnicas de compressão e descompressão aprimoradas que melhoram a taxa de compressão com pouco ou nenhum sacrifício na qualidade da imagem são desejáveis.
SUMÁRIO
[0005] As modalidades da presente revelação fornecem aparelhos e métodos para codificar e decodificar, de acordo com as reivindicações independentes.
[0006] O anterior e outros objetivos são obtidos pela matéria objeto das reivindicações independentes. As formas de implementação adicionais são evidentes a partir das reivindicações dependentes, da descrição e das figuras.
[0007] O método, de acordo com o primeiro aspecto da invenção, pode ser realizado pelo aparelho, de acordo com o terceiro aspecto da invenção. As características e formas de implementação adicionais do método, de acordo com o terceiro aspecto da invenção correspondem às características e formas de implementação do aparelho, de acordo com o primeiro aspecto da invenção.
[0008] O método, de acordo com o segundo aspecto da invenção, pode ser realizado pelo aparelho, de acordo com o quarto aspecto da invenção. As características e formas de implementação adicionais do método, de acordo com o quarto aspecto da invenção, correspondem às características e formas de implementação do aparelho, de acordo com o segundo aspecto da invenção.
[0009] De acordo com um quinto aspecto, a invenção refere-se a um aparelho para decodificar um fluxo de vídeo que inclui um processador e uma memória. A memória armazena instruções que fazem com que o processador realize o método, de acordo com o primeiro aspecto.
[0010] De acordo com um sexto aspecto, a invenção refere-se a um aparelho para codificar um fluxo de vídeo que inclui um processador e uma memória. A memória armazena instruções que fazem com que o processador realize o método, de acordo com o segundo aspecto.
[0011] De acordo com um sétimo aspecto, uma mídia de armazenamento legível por computador armazenada e tendo instruções que, quando executadas, fazem com que um ou mais processadores configurados para codificar dados de vídeo sejam propostos. As instruções fazem com que um ou mais processadores realizem um método, de acordo com o primeiro ou segundo aspecto ou qualquer modalidade possível do primeiro ou segundo aspecto.
[0012] De acordo com um oitavo aspecto, a invenção refere-se a um programa de computador compreendendo código de programa para realizar o método, de acordo com o primeiro ou segundo aspecto ou qualquer modalidade possível do primeiro ou segundo aspecto quando executada em um s.
[0013] Em mais detalhes, a presente revelação fornece um método de codificação de vídeo implementado por um dispositivo de decodificação ou dispositivo de codificação, o método compreende: obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada; obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada; obter, de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (coded block flags, sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma unidade de transformada atual ou uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma de pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf, e os valores de pelo menos dois sinalizadores cbf croma.
[0014] Assim, a presente revelação permite melhorar a eficácia de codificação e propõe um mecanismo unificado de sinalização de sinalizadores cbf. Assim, um mecanismo unificado de sinalização de sinalizadores cbf é proposto.
[0015] Além disso, as relações entre sinalizadores cbf e as ferramentas de particionamento de unidade de subtransformada permitem remover a redundância no fluxo de bits.
[0016] No método, como descrito acima, o valor do sinalizador cbf luma pode ser derivado adicionalmente com base em uma localização da unidade de subtransformada atual dentro da unidade de transformada atual.
[0017] No método, como descrito acima, a sintaxe de unidade de transformada pode compreender pelo menos os dois sinalizadores cbf croma, e a obtenção, de acordo com a sintaxe de unidade de transformada, de valores de pelo menos dois sinalizadores cbf croma pode compreender: obter valores de pelo menos dois sinalizadores cbf croma a partir da sintaxe de unidade de transformada.
[0018] No método como definido acima, o sinalizador cbf luma pode ser um sinalizador tu_cbf_luma.
[0019] No método como definido acima, para a sintaxe de unidade de transformada, o elemento de sintaxe de unidade de transformada pode ser: sinalizado para um bloco inteiro, ou sinalizado para múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco, SBT, para bloco inter, ou sinalizado de modo a satisfazer as restrições de tamanho de unidade de transformada máxima.
[0020] No método como definido acima, a unidade de transformada atual ou as unidades de subtransformada atuais podem incluir dois sinalizadores cbf croma, com um sinalizador para cada plano de croma, respectivamente.
[0021] No método como definido acima, o valor do sinalizador cbf luma pode ser derivado com base no valor do sinalizador cu_cbf e nos valores dos dois sinalizadores cbf croma correspondentes à unidade de transformada atual.
[0022] No método como definido acima, em que se a unidade de transformada atual não for dividida em unidades de subtransformada, o sinalizador cu_cbf pode ser sinalizado no fluxo de bits e um valor do sinalizador cu_cbf pode ser igual a 1, o valor de sinalizador tu_cbf_cb pode ser 0 e o valor do sinalizador tu_cbf_cr pode ser 0, então, o valor do sinalizador tu_cbf_luma para a unidade de transformada atual pode ser derivado para 1.
[0023] No método como definido acima, em que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ] yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC } else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0024] No método, como descrito acima, uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType = = ISP_NO_SPLIT){ if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0025] No método, como descrito acima, em que se a unidade de transformada atual for dividida por Transformada de Sub-Bloco, SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, que permite sinalizadores cbf não nulos, pode ser derivado, de acordo com a seguinte condição: se o valor do sinalizador cu_cbf for 1, e o valor do sinalizador tu_cbf_cb for 0 e o valor do sinalizador tu_cbf_cr for 0, então, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para ser 1.
[0026] O método, como descrito acima, em que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ]
yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC } else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0027] O método, como descrito acima, em que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) {
if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType == ISP_NO_SPLIT){ if !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0028] O método, como descrito acima, em que uma tabela de sintaxe de árvore de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) }
} else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } } em que uma tabela de sintaxe de unidade de codificação correspondente à tabela de sintaxe de árvore de transformada pode ser sinalizada, de acordo com a seguinte tabela: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor … SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … }
[0029] O método, como descrito acima, em que treeType pode ser igual a SINGLE_TREE.
[0030] O método, como descrito acima, em que o sinalizador cbf luma pode ser um sinalizador tu_cbf_luma, e se o valor de tu_cbf_luma[x0][y0] não estiver presente, o valor de tu_cbf_luma[x0][y0] pode e deriva, de acordo com as seguintes condições: se tu_cbf_luma[x0][y0] não estiver presente, seu valor será inferido, como segue: se cu_sbt_flag for igual a 1 e uma dentre as seguintes condições forem verdadeiras, tu_cbf_luma[x0][y0] é inferido para ser igual a 0: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; de outro modo, se treeType for igual a DUAL_TREE_CHROMA, tu_cbf_luma[x0][y0] é inferido para ser igual a 0; de outro modo, tu_cbf_luma[x0][y0] é inferido para ser igual a 1.
[0031] O método, como descrito acima, em que o sinalizador cbf luma pode ser um sinalizador tu_cbf_luma, e se o valor de tu_cbf_luma[x0][y0] não estiver presente, o valor de tu_cbf_luma[x0][y0] pode ser derivado, de acordo com as seguintes condições: se tu_cbf_luma[x0][y0] não estiver presente na TU atual, seu valor é inferido, como segue: se cu_sbt_flag for igual a 1 e qualquer uma dentre as seguintes condições forem verdadeiras: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; então, tu_cbf_luma[x0][y0] é inferido para ser igual a 0. de outro modo, tu_cbf_luma[x0][y0] é inferido para ser igual a 1.
[0032] O método, como descrito acima, em que tu_cbf_luma[x0][y0] igual a 1 pode especificar que o bloco de transformada luma contém um ou mais níveis de coeficiente de transformada não iguais a 0; em os índices de matriz x0, y0 podem especificar a localização (x0, y0) da amostra luma superior esquerda do bloco de transformada considerado em relação à amostra luma superior esquerda da imagem; em que um nível de coeficiente de transformada pode ser um quantidade inteira que representa o valor associado a um índice de frequência bidimensional particular no processo de decodificação antes do escalonamento para computação de um valor de coeficiente de transformada.
[0033] A presente revelação fornece adicionalmente um codificador compreendendo circuitos de processamento para realizar o método, como descrito acima.
[0034] A presente revelação fornece adicionalmente um decodificador compreendendo circuitos de processamento para realizar o método, como descrito acima.
[0035] A presente revelação fornece adicionalmente um produto de programa de computador compreendendo um código de programa para realizar o método, como descrito acima.
[0036] A presente revelação fornece adicionalmente um decodificador ou um codificador, compreendendo: um ou mais processadores; e uma mídia de armazenamento legível por computador não transitória acoplada aos processadores e armazenamento de programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para realizar o método, como descrito acima.
[0037] A presente revelação fornece adicionalmente um codificador compreendendo: uma unidade de obtenção, configurada para obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada; a unidade de obtenção configurada para obter, de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma unidade de transformada atual ou uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma de pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; uma unidade de derivação, configurada para derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf e os valores de pelo menos dois sinalizadores cbf croma.
[0038] A presente revelação fornece adicionalmente um decodificador compreendendo: uma unidade de obtenção, configurada para obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada; a unidade de obtenção configurada para obter, de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma unidade de transformada atual ou uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma de pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; uma unidade de derivação, configurada para derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf e os valores de pelo menos dois sinalizadores cbf croma.
[0039] No decodificador, como descrito acima, o valor do sinalizador cbf luma pode ser derivado adicionalmente com base em uma localização da unidade de subtransformada atual dentro da unidade de transformada atual.
[0040] No decodificador, como descrito acima, a sintaxe de unidade de transformada pode compreender pelo menos os dois sinalizadores cbf croma, a obtenção, de acordo com a sintaxe de unidade de transformada, de valores de pelo menos dois sinalizadores cbf croma compreende: obter valores de pelo menos dois sinalizadores cbf croma a partir da sintaxe de unidade de transformada.
[0041] No decodificador, como descrito acima, o sinalizador cbf luma pode ser um sinalizador tu_cbf_luma.
[0042] No decodificador, como descrito acima, para a sintaxe de unidade de transformada, o elemento de sintaxe de unidade de transformada pode ser: sinalizado para um bloco inteiro, ou sinalizado para múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco, SBT, para bloco inter, ou sinalizado de modo a satisfazer restrições de tamanho de unidade de transformada máxima.
[0043] No decodificador, como descrito acima, em que a unidade de transformada atual ou a unidade de subtransformada atual pode incluir dois sinalizadores cbf croma, com um sinalizador para cada plano de croma, respectivamente.
[0044] No decodificador, como descrito acima, em que o valor do sinalizador cbf luma pode ser derivado com base no valor do sinalizador cu_cbf e nos valores dos dois sinalizadores cbf croma correspondentes à unidade de transformada atual.
[0045] No decodificador, como descrito acima, em que se a unidade de transformada atual não for dividida em unidades de subtransformada, o sinalizador cu_cbf pode ser sinalizado no fluxo de bits e um valor do sinalizador cu_cbf pode ser igual a 1, o valor de sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de transformada atual pode ser derivado para 1.
[0046] No decodificador, como descrito acima, em que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ] yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC } else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0047] No decodificador, como descrito acima, em que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType = = ISP_NO_SPLIT){ if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0048] No decodificador, como descrito acima, em que se a unidade de transformada atual for dividida pela Transformada de Sub-Bloco, SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, que permite sinalizadores cbf não nulos, pode ser derivado, de acordo com a seguinte condição:
se o valor do sinalizador cu_cbf for 1, e o valor do sinalizador tu_cbf_cb for 0 e o valor do sinalizador tu_cbf_cr for 0, então, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para ser 1.
[0049] No decodificador, como descrito acima, em que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ] yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC } else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0050] No decodificador, como descrito acima, em que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType == ISP_NO_SPLIT){ if !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0051] No decodificador, como descrito acima, em que uma tabela de sintaxe de árvore de transformada correspondente à sintaxe de unidade de transformada pode ser sinalizada, de acordo com a seguinte tabela:
transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY )
transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ )
transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
em que uma tabela de sintaxe de unidade de codificação correspondente à tabela de sintaxe de árvore de transformada pode ser sinalizada, de acordo com a seguinte tabela: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor
… SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … }
[0052] No decodificador, como descrito acima, em que treeType pode ser igual a SINGLE_TREE.
[0053] No decodificador, como descrito acima, em que o sinalizador cbf luma pode ser um sinalizador tu_cbf_luma, e se o valor de tu_cbf_luma[x0][y0] não estiver presente, o valor de tu_cbf_luma[x0][y0] pode ser derivado, de acordo com as seguintes condições: se tu_cbf_luma[x0][y0] não estiver presente, seu valor é inferido, como segue: se cu_sbt_flag for igual a 1 e uma dentre as seguintes condições for verdadeira, tu_cbf_luma[x0][y0] é inferido para ser igual a 0: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; de outro modo, se treeType for igual a DUAL_TREE_CHROMA, tu_cbf_luma[x0][y0] é inferido para ser igual a 0; de outro modo, tu_cbf_luma[x0][y0] é inferido para ser igual a 1.
[0054] No decodificador, como descrito acima, em que o sinalizador cbf luma pode ser um sinalizador tu_cbf_luma, e se o valor de tu_cbf_luma[x0][y0] não estiver presente, o valor de tu_cbf_luma[x0][y0] pode ser derivado, de acordo com as seguintes condições: se tu_cbf_luma[x0][y0] não estiver presente na TU atual, seu valor é inferido, como segue: se cu_sbt_flag for igual a 1 e qualquer uma dentre as seguintes condições for verdadeira: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; então, tu_cbf_luma[x0][y0] é inferido para ser igual a 0. de outro modo, tu_cbf_luma[x0][y0] é inferido para ser igual a 1.
[0055] No decodificador, como descrito acima, em que tu_cbf_luma[x0][y0] igual a 1 pode especificar que o bloco de transformada luma contém um ou mais níveis de coeficiente de transformada não iguais a 0; em que os índices de matriz x0, y0 podem especificar a localização (x0, y0) da amostra luma superior esquerda do bloco de transformada considerado em relação à amostra luma superior esquerda da imagem; em que um nível de coeficiente de transformada pode ser uma quantidade inteira que representa o valor associado a um índice de frequência bidimensional particular no processo de decodificação antes do escalonamento para computação de um valor de coeficiente de transformada.
[0056] Os detalhes de uma ou mais modalidades são apresentados nos desenhos anexos e na descrição abaixo. Outras características, objetos e vantagens serão evidentes a partir da descrição, desenhos e reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0057] As seguintes modalidades da invenção são descritas em mais detalhes com referência às figuras e desenhos anexos, em que:
[0058] A FIG. 1A é um diagrama de bloco que mostra um exemplo de um sistema de codificação de vídeo configurado para implementar as modalidades da invenção;
[0059] A FIG. 1B é um diagrama de bloco que mostra outro exemplo de um sistema de codificação de vídeo configurado para implementar as modalidades da invenção;
[0060] A FIG. 2 é um diagrama de bloco que mostra um exemplo de um codificador de vídeo configurado para implementar as modalidades da invenção;
[0061] A FIG. 3 é um diagrama de bloco que mostra uma estrutura de exemplo de um decodificador de vídeo configurado para implementar as modalidades da invenção;
[0062] A FIG. 4 é um diagrama de bloco que ilustra um exemplo de um aparelho de codificação ou um aparelho de decodificação;
[0063] A FIG. 5 é um diagrama de bloco que ilustra outro exemplo de um aparelho de codificação ou um aparelho de decodificação;
[0064] A FIG. 6 é um diagrama de bloco que ilustra uma modalidade do método de sinalização de sinalizadores cbf;
[0065] A FIG. 7 ilustra um fluxograma de um método de codificação implementado por um dispositivo de decodificação ou dispositivo de codificação, de acordo com a presente revelação;
[0066] A FIG. 8 ilustra esquematicamente um exemplo de um codificador, de acordo com a presente revelação;
[0067] A FIG. 9 ilustra esquematicamente um exemplo de um decodificador, de acordo com a presente revelação;
[0068] A FIG. 10 ilustra um diagrama de bloco similar àquele da FIG.
6.
[0069] Os seguintes sinais de referência idênticos referem-se às características idênticas ou pelo menos funcionalmente equivalentes, se não for explicitamente especificado de outro modo.
DESCRIÇÃO DETALHADA DAS MODALIDADES
[0070] Na descrição a seguir, referência será feita às figuras anexas, que fazem parte da revelação, e que mostram, através de ilustração, aspectos específicos das modalidades da invenção ou aspectos específicos em que as modalidades da presente invenção podem ser usadas. Deve ser entendido que as modalidades da invenção podem ser usadas em outros aspectos e compreendem mudanças estruturais ou lógicas não representadas nas figuras. A seguinte descrição detalhada, portanto, não deve ser tomada em um sentido limitante e o escopo da presente invenção é definido pelas reivindicações anexas.
[0071] Por exemplo, deve ser entendido que uma revelação em relação a um método descrito também pode ser verdadeira para um dispositivo ou sistema correspondente configurado para realizar o método e vice-versa. Por exemplo, se uma ou uma pluralidade de etapas do método específico são descritas, um dispositivo correspondente pode incluir uma ou uma pluralidade de unidades, por exemplo, unidades funcionais, para realizar uma descrita ou pluralidade de etapas do método (por exemplo, uma unidade que realiza uma ou pluralidade de etapas, ou uma pluralidade de unidades, cada uma, que realiza uma ou mais da pluralidade de etapas), mesmo se tais uma ou mais unidades não forem explicitamente descritas ou ilustradas nas figuras. Por outro lado, por exemplo, se um aparelho específico for descrito com base em uma ou uma pluralidade de unidades, por exemplo, unidades funcionais, um método correspondente pode incluir uma etapa para realizar a funcionalidade de uma ou pluralidade de unidades (por exemplo, uma etapa que realiza a funcionalidade de uma ou pluralidade de unidades, ou uma pluralidade de etapas, cada uma,
que realiza a funcionalidade de um ou mais da pluralidade de unidades), mesmo se tal uma ou pluralidade de etapas não forem explicitamente descritas ou ilustradas nas figuras. Além disso, deve ser entendido que as características das várias modalidades exemplares e/ou aspectos descritos neste relatório podem ser combinadas entre si, a menos que especificamente observado de outro modo.
[0072] A codificação de vídeo tipicamente refere-se ao processamento de uma sequência de imagens, que formam o vídeo ou a sequência de vídeo. Em vez do termo “imagem”, o termo “quadro” ou “figura” pode ser usado como sinônimo no campo de codificação de vídeo. A codificação de vídeo (ou codificação em geral) compreende duas partes de codificação de vídeo e decodificação de vídeo. A codificação de vídeo é realizada no lado da fonte, tipicamente compreendendo o processamento (por exemplo, por compressão) das imagens de vídeo originais para reduzir a quantidade de dados necessária para representar as imagens de vídeo (para armazenamento e/ou transmissão mais eficiente). A decodificação de vídeo é realizada no lado de destino e tipicamente compreende o processamento inverso comparado ao codificador para reconstruir as imagens de vídeo. As modalidades referindo-se à “codificação” de imagens de vídeo (ou imagens em geral) devem ser entendidas com referência à “codificação” ou “decodificação” de imagens de vídeo ou sequências de vídeo respectivas. A combinação da parte de codificação e da parte de decodificação também é referida como CODEC (Coding and Decoding).
[0073] No caso da codificação de vídeo sem perda, as imagens de vídeo originais podem ser reconstruídas, isto é, as imagens de vídeo reconstruídas têm a mesma qualidade como as imagens de vídeo originais (assumindo nenhuma perda de transmissão ou outra perda de dados durante o armazenamento ou transmissão). Em caso da codificação de vídeo com perda, a compressão adicional, por exemplo, por quantização, é realizada, para reduzir a quantidade de dados que representam as imagens de vídeo, que não podem ser completamente reconstruídas no decodificador, isto é, a qualidade das imagens de vídeo reconstruídas é menor ou pior comparada à qualidade das imagens de vídeo originais.
[0074] Vários padrões da codificação de vídeo pertencem ao grupo de
“codecs de vídeo híbridos com perda” (isto é, combinam predição espacial e temporal no domínio da amostra e codificação de transformada 2D para aplicar a quantização no domínio de transformada). Cada imagem de uma sequência de vídeo é tipicamente particionada em um conjunto de blocos não sobrepostos e a codificação é tipicamente realizada em um nível de bloco. Em outras palavras, no codificador, o vídeo é tipicamente processado, isto é, codificado, em um nível de bloco (bloco de vídeo), por exemplo, por meio do uso de predição espacial (imagem intra) e/ou predição temporal (imagem inter) para gerar um bloco de predição, subtraindo o bloco de predição do bloco atual (bloco atualmente processado/a ser processado) para obter um bloco residual, transformando o bloco residual e quantizando o bloco residual no domínio de transformada para reduzir a quantidade de dados a serem transmitidos (compressão), à medida que no decodificador, o processamento inverso comparado ao codificador é aplicado ao bloco codificado ou comprimido para reconstruir o bloco atual para representação. Além disso, o codificador duplica o loop de processamento de decodificador, de modo que ambos gerem predições idênticas (por exemplo, predições intra e inter) e/ou reconstruções para processamento, isto é, codificação, de blocos subsequentes.
[0075] Nas seguintes modalidades de um sistema de codificação de vídeo 10, um codificador de vídeo 20 e um decodificador de vídeo 30 são descritos com base nas Figs. 1 a 3.
[0076] A Fig. 1A é um diagrama de bloco esquemático que ilustra um sistema de codificação de exemplo 10, por exemplo, um sistema de codificação de vídeo 10 (ou sistema de codificação curta 10) que pode utilizar técnicas deste presente pedido. O codificador de vídeo 20 (ou codificador curto 20) e o decodificador de vídeo 30 (ou decodificador curto 30) do sistema de codificação de vídeo 10 representam exemplos de dispositivos que podem ser configurados para realizar técnicas, de acordo com vários exemplos descritos no presente pedido.
[0077] Como mostrado na FIG. 1A, o sistema de codificação 10 compreende um dispositivo de origem 12 configurado para fornecer dados de imagem codificados 21, por exemplo, para um dispositivo de destino 14 para decodificar os dados de imagem codificados 13.
[0078] O dispositivo de origem 12 compreende um codificador 20 e pode, adicionalmente, isto é, opcionalmente, compreende uma fonte de imagem 16, um pré-processador (ou unidade de pré-processamento) 18, por exemplo, um pré-processador de imagem 18 e uma interface de comunicação ou unidade de comunicação 22.
[0079] A fonte de imagem 16 pode compreender ou ser qualquer tipo de dispositivo de captura de imagem, por exemplo, uma câmera para capturar uma imagem do mundo real, e/ou qualquer tipo de um dispositivo de geração de imagem, por exemplo, um processador gráfico de computador para gerar uma imagem animada por computador, ou qualquer tipo de outro dispositivo para obter e/ou fornecer uma imagem do mundo real, uma imagem gerada por computador (por exemplo, um conteúdo de tela, uma imagem de realidade virtual (VR)) e/ou qualquer combinação dos mesmos (por exemplo, uma imagem de realidade aumentada (AR)). A fonte de imagem pode ser qualquer tipo de memória ou armazenamento que armazene qualquer uma dentre as imagens mencionadas anteriormente.
[0080] Em distinção ao pré-processador 18 e ao processamento realizado pela unidade de pré-processamento 18, a imagem ou dados de imagem 17 também podem ser referidos como imagem bruta ou dados de imagem bruta 17.
[0081] O pré-processador 18 é configurado para receber os dados de imagem (brutos) 17 e para realizar o pré-processamento nos dados de imagem 17 para obter uma imagem pré-processada 19 ou dados de imagem pré- processados 19. O pré-processamento realizado pelo pré-processador 18 pode, por exemplo, compreende corte, conversão de formato de cor (por exemplo, de RGB em YCbCr), correção de cor ou eliminação de ruído. Pode ser entendido que a unidade de pré-processamento 18 pode ser o componente opcional.
[0082] O codificador de vídeo 20 é configurado para receber os dados de imagem pré-processados 19 e fornecer dados de imagem codificados 21 (detalhes adicionais serão descritos abaixo, por exemplo, com base na Fig. 2).
[0083] A interface de comunicação 22 do dispositivo de origem 12 pode ser configurada para receber os dados de imagem codificados 21 e para transmitir os dados de imagem codificados 21 (ou qualquer versão processada adicional dos mesmos) através de canal de comunicação 13 para outro dispositivo, por exemplo, o dispositivo de destino 14 ou qualquer outro dispositivo, para armazenamento ou reconstrução direta.
[0084] O dispositivo de destino 14 compreende um decodificador 30 (por exemplo, um decodificador de vídeo 30) e pode, adicionalmente, isto é, opcionalmente, compreender uma interface de comunicação ou unidade de comunicação 28, um pós-processador 32 (ou unidade de pós-processamento 32) e um dispositivo de exibição 34.
[0085] A interface de comunicação 28 do dispositivo de destino 14 é configurada para receber os dados de imagem codificados 21 (ou qualquer versão processada adicional dos mesmos), por exemplo, diretamente do dispositivo de origem 12 ou de qualquer outra fonte, por exemplo, um dispositivo de armazenamento, por exemplo, dispositivo de armazenamento de dados de imagem codificados e fornecer os dados de imagem codificados 21 para o decodificador 30.
[0086] A interface de comunicação 22 e a interface de comunicação 28 podem ser configuradas para transmitir ou receber os dados de imagem codificados 21 ou dados codificados 13 através de um enlace de comunicação direto entre o dispositivo de origem 12 e o dispositivo de destino 14, por exemplo, uma conexão direta com fio ou sem fio, ou através de qualquer tipo de rede, por exemplo, uma rede com ou sem fio ou qualquer combinação da mesma, ou qualquer tipo de rede privada e pública, ou qualquer tipo de combinação da mesma.
[0087] A interface de comunicação 22 pode ser, por exemplo, configurada para empacotar os dados de imagem codificados 21 em um formato apropriado, por exemplo, pacotes, e/ou processar os dados de imagem codificados usando qualquer tipo de codificação de transmissão ou processamento para transmissão através de um enlace de comunicação ou rede de comunicação.
[0088] A interface de comunicação 28, formando a contraparte da interface de comunicação 22, pode ser, por exemplo, configurada para receber os dados transmitidos e processar os dados de transmissão usando qualquer tipo de decodificação de transmissão ou processamento correspondente e/ou desempacotamento para obter os dados de imagem codificados 21.
[0089] Tanto a interface de comunicação 22 quanto a interface de comunicação 28 podem ser configuradas como interfaces de comunicação unidirecionais, como indicado pelas setas para o canal de comunicação 13 na Fig. 1A apontando do dispositivo de origem 12 para o dispositivo de destino 14, ou interfaces de comunicação bidirecionais e, podem ser configuradas, por exemplo, para enviar e receber mensagens, por exemplo, para configurar uma conexão, para reconhecer e trocar quaisquer outras informações relacionadas ao enlace de comunicação e/ou transmissão de dados, por exemplo, transmissão de dados de imagem codificados.
[0090] O decodificador 30 é configurado para receber os dados de imagem codificados 21 e fornecer dados de imagem decodificados 31 ou uma imagem decodificada 31 (os detalhes adicionais serão descritos abaixo, por exemplo, com base na Fig. 3 ou na Fig. 5).
[0091] O pós-processador 32 do dispositivo de destino 14 é configurado para pós-processar os dados de imagem decodificados 31 (também chamados de dados de imagem reconstruídos), por exemplo, a imagem decodificada 31, para obter dados de imagem 33 pós-processados, por exemplo, uma imagem 33 pós-processada. O pós-processamento realizado pela unidade de pós-processamento 32 pode compreender, por exemplo, a conversão de formato de cor (por exemplo, de YCbCr para RGB), correção de cor, corte ou reamostragem, ou qualquer outro processamento, por exemplo, para preparar os dados de imagem decodificados 31 para exibição, por exemplo, pelo dispositivo de exibição 34.
[0092] O dispositivo de exibição 34 do dispositivo de destino 14 é configurado para receber os dados de imagem 33 pós-processados para exibição da imagem, por exemplo, para um usuário ou observador. O dispositivo de exibição 34 pode ser ou compreender qualquer tipo de exibição para representar a imagem reconstruída, por exemplo, uma exibição ou tela integrada ou externa. As telas podem, por exemplo, compreender telas de cristal líquido (LCD), telas de emissor de luz orgânica (OLED), tela de plasma, projetores, telas de micro LED, cristal líquido em silício (LCoS), processador de luz digital (DLP) ou qualquer tipo de outra tela.
[0093] Embora a Fig. 1A represente o dispositivo de origem 12 e o dispositivo de destino 14 como dispositivos separados, as modalidades de dispositivos também podem compreender ambas as funcionalidades, tanto o dispositivo de origem 12 ou a funcionalidade correspondente quanto o dispositivo de destino 14 ou a funcionalidade correspondente. Em tais modalidades, o dispositivo de origem 12 ou a funcionalidade correspondente e o dispositivo de destino 14 ou a funcionalidade correspondente podem ser implementados usando o mesmo hardware e/ou software ou por hardware e/ou software separado ou qualquer combinação dos mesmos.
[0094] Como será evidente para o técnico com base na descrição, a existência e a divisão (exata) das funcionalidades das diferentes unidades ou funcionalidades dentro do dispositivo de origem 12 e/ou dispositivo de destino 14, como mostrado na Fig. 1A, podem variar dependendo do dispositivo e aplicação reais.
[0095] O codificador 20 (por exemplo, um codificador de vídeo 20) ou o decodificador 30 (por exemplo, um decodificador de vídeo 30) ou tanto codificador 20 quanto o decodificador 30 podem ser implementados através de circuitos de processamento, como mostrado na Fig. 1B, tais como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados específicos da aplicação (ASICs), arranjo de portas programáveis em campo (FPGAs), lógica discreta, hardware, codificação de vídeo dedicada ou qualquer combinações dos mesmos. O codificador 20 pode ser implementado através de circuitos de processamento 46 para incorporar os vários módulos como discutido em relação ao codificador 20 da FIG. 2 e/ou qualquer outro sistema ou subsistema de codificador descrito neste relatório. O decodificador 30 pode ser implementado através de circuitos de processamento 46 para incorporar os vários módulos como discutido em relação ao decodificador 30 da FIG. 3 e/ou qualquer outro sistema ou subsistema de decodificador descrito neste relatório. Os circuitos de processamento podem ser configurados para realizar as várias operações como discutido adiante., como mostrado na fig. 5, se as técnicas forem implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em uma mídia de armazenamento legível por computador não transitória adequada e pode executar as instruções em hardware usando um ou mais processadores para realizar as técnicas desta revelação. Tanto codificador de vídeo 20 quanto o decodificador de vídeo 30 podem ser integrados como parte de um codificador/decodificador combinado (CODEC) em um dispositivo único, por exemplo, como mostrado na Fig. 1B.
[0096] O dispositivo de origem 12 e o dispositivo de destino 14 podem compreender qualquer um de um ampla faixa de dispositivos, incluindo qualquer tipo de dispositivos portáteis ou fixos, por exemplo, notebook ou computadores laptop, telefones móveis, smartphones, tabletes ou computadores tablet, câmeras, computadores de mesa, receptor de televisão, televisores, dispositivos de exibição, reprodutores de mídia digital, consoles de videogame, dispositivos de transmissão de vídeo (tais como servidores de serviços de conteúdo ou servidores de liberação de conteúdo), dispositivo de receptor de transmissão, dispositivo de transmissor de transmissão ou semelhantes, e podem usar nenhum ou qualquer tipo de sistema operacional. Em alguns casos, o dispositivo de origem 12 e o dispositivo de destino 14 podem ser equipados para comunicação sem fio. Assim, o dispositivo de origem 12 e o dispositivo de destino 14 podem ser dispositivos de comunicação sem fio.
[0097] Em alguns casos, o sistema de codificação de vídeo 10 ilustrado na Fig. 1A é meramente um exemplo e as técnicas do presente pedido pode aplicar-se às configurações de codificação de vídeo (por exemplo, a codificação de vídeo ou a decodificação de vídeo) que não incluem necessariamente qualquer comunicação de dados entre os dispositivos de codificação e decodificação. Em outros exemplos, os dados são recuperados de uma memória local, transmitidos por meio de uma rede ou semelhantes. Um dispositivo de codificação de vídeo pode codificar e armazenar dados na memória, e/ou um dispositivo de decodificação vídeo pode recuperar e decodificar dados da memória. Em alguns exemplos, a codificação e decodificação são realizadas por dispositivos que não se comunicam uns com os outros, mas simplesmente codificam dados na memória e/ou recuperam e decodificam dados da memória.
[0098] Para conveniência da descrição, as modalidades da invenção são descritas neste relatório, por exemplo, por referência à Codificação de Vídeo de Alta Eficácia (HEVC) ou ao software de referência de Codificação de Vídeo Versátil (VVC), o padrão de codificação de vídeo da próxima geração desenvolvido pela Equipe de Colaboração Conjunta na Codificação de Vídeo (JCT-VC) do Grupo de Especialistas em Codificação de Vídeo ITU-T (VCEG) e Grupo de Especialistas em Cinema ISO/IEC (MPEG). Um técnico no assunto entenderá que as modalidades da invenção não são limitadas a HEVC ou VVC.
Codificador e Método de Codificação
[0099] A Fig. 2 mostra um diagrama de bloco esquemático de um codificador de vídeo de exemplo 20 que é configurado para implementar as técnicas do presente pedido. No exemplo da Fig. 2, o codificador de vídeo 20 compreende uma entrada 201 (ou interface de entrada 201), uma unidade de cálculo residual 204, uma unidade de processamento de transformada 206, uma unidade de quantização 208, uma unidade de quantização inversa 210, e unidade de processamento de transformada inversa 212, uma unidade de reconstrução 214, uma unidade de filtro loop 220, um buffer de imagem decodificada (DPB) 230, uma unidade de seleção de modo 260, uma unidade de codificação de entropia 270 e uma saída 272 (ou interface de saída 272). A unidade de seleção de modo 260 pode incluir uma unidade de predição inter 244, uma unidade de predição intra 254 e uma unidade de particionamento 262. A unidade de predição inter 244 pode incluir uma unidade de estimativa de movimento e uma unidade de compensação de movimento (não mostradas). Um codificador de vídeo 20, como mostrado na Fig. 2 também pode ser referido como codificador de vídeo híbrido ou um codificador de vídeo, de acordo com um codec de vídeo híbrido.
[0100] A unidade de cálculo residual 204, a unidade de processamento de transformada 206, a unidade de quantização 208, a unidade de seleção de modo 260 podem ser referidas como formando uma trajetória de sinal de encaminhamento do codificador 20, enquanto a unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o buffer 216, o filtro loop 220, o buffer de imagem decodificada (DPB) 230, a unidade de predição inter 244 e a unidade de predição intra 254 podem ser referidos como formando um trajetória de sinal no sentido contrário do codificador de vídeo 20, em que a trajetória de sinal no sentido contrário do codificador de vídeo 20 corresponde à trajetória de sinal do decodificador (ver o decodificador de vídeo 30 na Fig. 3). A unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o filtro loop 220, o buffer de imagem decodificada (DPB) 230, a unidade de predição inter 244 e a unidade de predição intra 254 também são referidos como formando o “decodificador embutido” do codificador de vídeo 20.
Imagens e Particionamento de Imagens (Imagens e Blocos)
[0101] O codificador 20 pode ser configurado para receber, por exemplo, através da entrada 201, uma imagem 17 (ou dados de imagem 17), por exemplo, imagem de uma sequência de imagens formando um vídeo ou sequência de vídeo. A imagem recebida ou dados de imagem também podem ser uma imagem pré-processada 19 (ou dados de imagem pré-processados 19). Para razões de simplicidade, a seguinte descrição refere-se à imagem 17. A imagem 17 também pode ser referida como imagem atual ou imagem a ser codificada (em particular, na codificação de vídeo para distinguir a imagem atual de outras imagens, por exemplo, imagens previamente codificadas e/ou decodificadas da mesma sequência de vídeo, isto é, a sequência de vídeo que também compreende a imagem atual).
[0102] Uma imagem (digital) é ou pode ser considerada como um arranjo bidimensional ou matriz de amostras com valores de intensidade. Uma amostra no arranjo também pode ser referida como pixel (forma abreviada de elemento de imagem) ou um pel. O número de amostras na direção horizontal e vertical (ou eixo) do arranjo ou imagem define o tamanho e/ou resolução da imagem. Para representação de cor, tipicamente três componentes de cor são utilizados, isto é, a imagem pode ser representada ou incluir três arranjos de amostra. No formato RBG ou espaço de cor, uma imagem compreende um arranjo de amostra vermelho, verde e azul correspondentes. Entretanto, na codificação de vídeo, cada pixel é tipicamente representado em um formato de luminância e crominância ou espaço de cor, por exemplo, YCbCr, que compreende um componente de luminância indicado por Y (às vezes, L também é usado no lugar) e dois componentes de crominância indicados por Cb e Cr. O componente de luminância (ou luma curto) Y representa o brilho ou intensidade do nível de cinza (por exemplo, como em uma imagem em escala de cinza), enquanto os dois componentes de luminância (ou croma curto) Cb e Cr representam a cromaticidade ou componentes de informações de cor. Consequentemente, uma imagem no formato YCbCr compreende um arranjo de amostra de luminância de valores de amostra de luminância (Y), e dois arranjos de amostra de crominância de valores de crominância (Cb e Cr). As imagens no formato RGB podem ser convertidas ou transformadas no formato YCbCr e vice- versa, o processo também é conhecido como transformada ou conversão de cor.
Se uma imagem for monocromática, a imagem pode compreender apenas um arranjo de amostra de luminância. Consequentemente, uma imagem pode ser, por exemplo, um arranjo de amostras luma no formato monocromático ou um arranjo de amostras luma e dois arranjos correspondentes de amostras croma em formato 4:2:0, 4:2:2 e 4:4:4.
[0103] As modalidades do codificador de vídeo 20 pode compreender uma unidade de particionamento de imagem (não representada na Fig. 2) configurada para particionar a imagem 17 em uma pluralidade de (tipicamente não sobrepostos) blocos de imagem 203. Estes blocos também podem ser referidos como blocos raiz, macro blocos (H.264/AVC) ou blocos de árvore de codificação (CTB) ou unidades de árvore de codificação (CTU) (H.265/HEVC e VVC). A unidade de particionamento de imagem pode ser configurada para utilizar o mesmo tamanho de bloco para todas as imagens de uma sequência de vídeo e a grade correspondente definindo o tamanho de bloco, ou para alterar o tamanho de bloco entre as imagens ou subconjuntos ou grupos de imagens e particionar cada imagem nos blocos correspondentes.
[0104] Nas modalidades adicionais, o codificador de vídeo pode ser configurado para receber diretamente um bloco 203 da imagem 17, por exemplo, um, vários ou todos os blocos formando a imagem 17. O bloco de imagem 203 também pode ser referido como bloco de imagem atual ou bloco de imagem a ser codificado.
[0105] Como a imagem 17, o bloco de imagem 203 novamente é ou pode ser considerado como um arranjo bidimensional ou matriz de amostras com valores de intensidade (valores de amostra), embora de menor dimensão do que a imagem 17. Em outras palavras, o bloco 203 pode compreender, por exemplo, um arranjo de amostra (por exemplo, um arranjo de luma em caso de uma imagem monocromática 17, ou um arranjo de luma ou croma em caso de uma imagem de cor) ou três arranjos de amostra (por exemplo, um arranjo de luma e dois de croma em caso de uma imagem de cor 17) ou qualquer outro número e/ou tipo de arranjos dependendo do formato de cor aplicado. O número de amostras na direção horizontal e vertical (ou eixo) do bloco 203 define o tamanho de bloco 203. Consequentemente, um bloco pode, por exemplo, um arranjo de amostras MxN (coluna M por linha N) ou um arranjo MxN de coeficientes de transformada.
[0106] As modalidades do codificador de vídeo 20, como mostrado na Fig. 2, podem ser configuradas para codificar o bloco de imagem 17 para o bloco, por exemplo, a codificação e predição são realizadas pelo bloco 203.
[0107] As modalidades do codificador de vídeo 20, como mostrado na Fig. 2, podem ser configuradas adicionalmente para particionar e/ou codificar a imagem por meio do uso de fatias (também referidas como fatias de vídeo), em que uma imagem pode ser particionada ou codificada usando uma ou mais fatias (tipicamente não sobrepostas), e cada fatia pode compreender um ou mais blocos (por exemplo, CTUs).
[0108] As modalidades do codificador de vídeo 20, como mostrado na Fig. 2, podem ser configuradas adicionalmente para particionar e/ou codificar a imagem por meio do uso de grupos de telha (também referidos como grupos de telha de vídeo) e/ou telhas (também referidas como telhas de vídeo), em que uma imagem pode ser particionada ou codificada usando um ou mais grupos de telha (tipicamente não sobrepostos), e cada grupo de telha pode compreender, por exemplo, um ou mais blocos (por exemplo, CTUs) ou uma ou mais telhas, em que cada telha, por exemplo, pode ser de forma retangular e pode compreender um ou mais blocos (por exemplo, CTUs), por exemplo, blocos completos ou parciais. Cálculo Residual
[0109] A unidade de cálculo residual 204 pode ser configurada para calcular um bloco residual 205 (também referido como residual 205) com base no bloco de imagem 203 e em um bloco de predição 265 (os detalhes adicionais sobre o bloco de predição 265 são fornecidos adiante), por exemplo, subtraindo valores de amostra do bloco de predição 265 dos valores de amostra do bloco de imagem 203, amostra por amostra (pixel por pixel) para obter o bloco residual 205 no domínio da amostra. Transformada
[0110] A unidade de processamento de transformada 206 pode ser configurada para aplicar uma transformada, por exemplo, uma transformada de cosseno discreta (DCT) ou transformada de seno discreta (DST), nos valores de amostra do bloco residual 205 para obter coeficientes de transformada 207 em um domínio de transformada. Os coeficientes de transformada 207 também podem ser referidos como coeficientes residuais de transformada e representam o bloco residual 205 no domínio de transformada.
[0111] A unidade de processamento de transformada 206 pode ser configurada para aplicar aproximações inteiras de DCT/DST, tais como as transformadas especificada para H.265/HEVC. Em comparação a uma transformada DCT ortogonal, tais aproximações inteiras são tipicamente dimensionadas por um determinado fator. De modo a preservar a norma do bloco residual que é processado por encaminhamento e transformadas inversas, fatores de escala adicionais são aplicados como parte do processo de transformada. Os fatores de escala são tipicamente escolhidos com base em determinadas restrições, como fatores de escala sendo uma potência de dois para operações de deslocamento, profundidade de bits dos coeficientes de transformada, compensação entre precisão e custos de implementação, etc. Os fatores de escala específicos são, por exemplo, especificados para a transformada inversa, por exemplo, pela unidade de processamento de transformada inversa 212 (e a transformada inversa correspondente, por exemplo, pela unidade de processamento de transformada inversa 312 no decodificador de vídeo 30) e fatores de escala correspondentes para a transformada direta, por exemplo, pela unidade de processamento de transformada 206, em um codificador 20 podem ser especificados consequentemente.
[0112] As modalidades do codificador de vídeo 20 (respectivamente, unidade de processamento de transformada 206) podem ser configuradas para emitir parâmetros de transformada, por exemplo, um tipo de transformada ou transformadas, por exemplo, diretamente ou codificadas ou comprimidas através da unidade de codificação de entropia 270, de modo que, por exemplo, o decodificador de vídeo 30 pode receber e utilizar os parâmetros de transformada para decodificação. Quantização
[0113] A unidade de quantização 208 pode ser configurada para quantizar os coeficientes de transformada 207 para obter coeficientes quantizados 209, por exemplo, aplicando quantização escalar ou quantização vetorial. Os coeficientes quantizados 209 também podem ser referidos como coeficientes de transformada quantizados 209 ou coeficientes residuais quantizados 209.
[0114] O processo de quantização pode reduzir a profundidade de bits associada a alguns ou todos dos coeficientes de transformada 207. Por exemplo, um coeficiente de transformada de n bits pode ser arredondado para baixo até um coeficiente de transformada de m bits durante a quantização, onde n é maior do que m.
O grau de quantização pode ser modificado pelo ajuste de um parâmetro de quantização (QP). Por exemplo, para a quantização escalar, diferentes escalas podem ser aplicadas para obter uma quantização mais fina ou grosseira.
Os tamanhos de etapa de quantização menores correspondem à quantização fina, enquanto que os tamanhos de etapa de quantização maiores correspondem à quantização grosseira.
O tamanho de etapa de quantização aplicável pode ser indicado por um parâmetro de quantização (QP). O parâmetro de quantização pode ser, por exemplo, um índice para um conjunto pré-definido de tamanhos de etapa de quantização aplicáveis.
Por exemplo, pequenos parâmetros de quantização podem corresponder à quantização fina (pequenos tamanhos de etapa de quantização) e grandes parâmetros de quantização podem corresponder à quantização grosseira (grandes tamanhos de etapa de quantização) ou vice-versa.
A quantização pode incluir divisão por um tamanho de etapa de quantização e uma desquantização correspondente e/ou inversa, por exemplo, pela unidade de quantização inversa 210, podem incluir multiplicação pelo tamanho de etapa de quantização.
As modalidades, de acordo com alguns padrões, por exemplo, HEVC, podem ser configuradas para utilizar um parâmetro de quantização para determinar o tamanho de etapa de quantização.
Geralmente, o tamanho de etapa de quantização pode ser calculado com base em um parâmetro de quantização usando uma aproximação de ponto fixo de uma equação incluindo divisão.
Os fatores de escala adicionais podem ser introduzidos pela quantização e desquantização para restaurar a norma do bloco residual, que pode ser modificado por causa da escala usada na aproximação de ponto fixo da equação para o tamanho de etapa de quantização e parâmetro de quantização.
Em uma implementação do exemplo, a escala da transformada inversa e desquantização podem ser combinadas.
Alternativamente, as tabelas de quantização personalizadas podem ser usadas e sinalizadas de um codificador para um decodificador, por exemplo, em um fluxo de bits.
A quantização é uma operação com perdas, em que a perda aumenta com o aumento dos tamanhos de etapa de quantização.
[0115] As modalidades do codificador de vídeo 20 (respectivamente, unidade de quantização 208) podem ser configuradas para emitir parâmetros de quantização (QP), por exemplo, diretamente ou codificados através da unidade de codificação de entropia 270, de modo que, por exemplo, o decodificador de vídeo 30 possa receber e aplicar os parâmetros de quantização para decodificação. Quantização Inversa
[0116] A unidade de quantização inversa 210 é configurada para aplicar a quantização inversa da unidade de quantização 208 nos coeficientes quantizados para obter coeficientes desquantizados 211, por exemplo, aplicando o inverso do esquema de quantização aplicado pela unidade de quantização 208 com base ou usando o mesmo tamanho de etapa de quantização como a unidade de quantização 208. Os coeficientes desquantizados 211 também podem ser referidos como coeficientes residuais desquantizados 211 e correspondem - embora tipicamente não idênticos aos coeficientes de transformada devido à perda por quantização - aos coeficientes de transformada
207. Transformada Inversa
[0117] A unidade de processamento de transformada inversa 212 é configurada para aplicar a transformada inversa da transformada aplicada pela unidade de processamento de transformada 206, por exemplo, uma transformada de cosseno discreta inversa (DCT) ou transformada de seno discreta inversa (DST) ou outras transformadas inversas, para obter um bloco residual reconstruído 213 (ou coeficientes desquantizados correspondentes 213) no domínio da amostra. O bloco residual reconstruído 213 também pode ser referido como bloco de transformada 213. Reconstrução
[0118] A unidade de reconstrução 214 (por exemplo, adicionador ou somador 214) é configurada para adicionar o bloco de transformada 213 (isto é, bloco residual reconstruído 213) ao bloco de predição 265 para obter um bloco reconstruído 215 no domínio da amostra, por exemplo, pela adição - amostra por amostra - de valores de amostra do bloco residual reconstruído 213 e de valores de amostra do bloco de predição 265. Filtragem
[0119] A unidade de filtro loop 220 (ou “filtro loop” 220 curto), é configurada para filtrar o bloco reconstruído 215 para obter um bloco filtrado 221 ou, em geral, para filtrar amostras reconstruídas para obter amostras filtradas. A unidade de filtro loop é, por exemplo, configurada suavizar as transições de pixel ou, de outro modo, melhorar a qualidade de vídeo. A unidade de filtro loop 220 pode compreender um ou mais filtros loop, tais como um filtro de desbloqueio, um filtro de deslocamento adaptativo de amostra (SAO) ou um ou mais outros filtros, por exemplo, um filtro bilateral, um filtro loop adaptativo (ALF), um filtro de nitidez, um filtro de suavização ou um filtro colaborativo ou qualquer combinação dos mesmos. Embora a unidade de filtro loop 220 seja mostrada na FIG. 2 como sendo um filtro em loop, em outras configurações, a unidade de filtro loop 220 pode ser implementada como um filtro pós-loop. O bloco filtrado 221 também pode ser referido como bloco reconstruído filtrado 221.
[0120] As modalidades do codificador de vídeo 20 (respectivamente, unidade de filtro loop 220) podem ser configuradas para emitir parâmetros de filtro loop (tais como informações de deslocamento de amostra adaptativa), por exemplo, diretamente ou codificados através da unidade de codificação de entropia 270, de modo que, por exemplo, um decodificador 30 possa receber e aplicar os mesmos parâmetros de filtro loop ou filtro loops respectivos para decodificação. Buffer de Imagem Decodificada
[0121] O buffer de imagem decodificada (DPB) 230 pode ser uma memória que armazena imagens de referência ou, em geral, dados de imagem de referência, para codificar dados de vídeo pelo codificador de vídeo 20. O DPB 230 pode ser formado por qualquer um de uma variedade de dispositivos de memória, tais como memória de acesso aleatório dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. O buffer de imagem decodificada (DPB) 230 pode ser configurado para armazenar um ou mais blocos filtrado 221. O buffer de imagem decodificada 230 pode ser configurado adicionalmente para armazenar outros blocos filtrado anteriores, por exemplo, previamente reconstruídos e blocos filtrado 221, da mesma imagem atual ou de diferentes imagens, por exemplo, imagens previamente reconstruídas e, pode fornecer imagens completa previamente reconstruídas, isto é, decodificadas (e blocos de referência e amostras correspondentes) e/ou uma imagem atual parcialmente reconstruída (e blocos de referência e amostras referência correspondentes), por exemplo, para predição inter. O buffer de imagem decodificada (DPB) 230 também pode ser configurado para armazenar um ou mais blocos reconstruídos não filtrados 215 ou, em geral, amostras reconstruídas não filtradas, por exemplo, se o bloco reconstruído 215 não for filtrado pela unidade de filtro loop 220, ou qualquer outra versão processada adicional dos blocos ou amostras reconstruídas. Seleção de Modo (Particionamento e Predição)
[0122] A unidade de seleção de modo 260 compreende a unidade de particionamento 262, unidade de predição inter 244 e unidade de predição intra 254 e, é configurada para receber ou obter dados de imagem originais, por exemplo, um bloco original 203 (bloco atual 203 da imagem atual 17) e, dados de imagem reconstruídos, por exemplo, amostras reconstruídas filtradas e/ou não filtradas ou blocos da mesma imagem (atual) e/ou de uma ou uma pluralidade de imagens previamente decodificadas, por exemplo, do buffer de imagem decodificada 230 ou outros buffers (por exemplo, buffer de linha, não mostrado). Os dados de imagem reconstruídos são usados como dados de imagem de referência para predição, por exemplo, predição inter ou predição intra, para obter um bloco de predição 265 ou preditor 265.
[0123] A unidade de seleção de modo 260 pode ser configurada para determinar ou selecionar um particionamento para um modo de predição de bloco atual (não incluindo particionamento) e um modo de predição (por exemplo, um modo de predição intra ou inter) e gerar um bloco de predição 265 correspondente que é usado para o cálculo do bloco residual 205 e para a reconstrução do bloco reconstruído 215.
[0124] As modalidades da unidade de seleção de modo 260 pode ser configurado para selecionar o particionamento e o modo de predição (por exemplo, daqueles suportados ou disponíveis para a unidade de seleção de modo 260), que fornecem a melhor combinação ou, em outras palavras, o residual mínimo (residual mínimo significa melhor compressão para transmissão ou armazenamento), ou uma sobrecarga de sinalização mínima (sobrecarga de sinalização mínima significa melhor compressão para transmissão ou armazenamento), ou que considerem ou equilibrem ambos. A unidade de seleção de modo 260 pode ser configurada para determinar o particionamento e o modo de predição com base na otimização de distorção de taxa (RDO), isto é, selecionar o modo de predição que fornece uma distorção de taxa mínima. Os termos como “melhor”, “mínimo”, “ideal” etc., neste contexto, não se referem necessariamente a um “melhor”, “mínimo”, “ideal”, etc. geral, mas também podem referir-se ao cumprimento de uma terminação ou critério de seleção como um valor excedendo ou abaixo de um limite ou outras restrições levando potencialmente a uma “seleção sub-ideal”, mas reduzindo a complexidade e o tempo de processamento.
[0125] Em outras palavras, a unidade de particionamento 262 pode ser configurada para particionar o bloco 203 em menores partições de bloco ou sub-bloco (que formam blocos novamente), por exemplo, iterativamente usando particionamento de quadtree (QT), particionamento binário (BT) ou particionamento de árvore tripla (TT) ou qualquer combinação dos mesmos e, para realizar, por exemplo, a predição para cada uma das partições de bloco ou sub-bloco, em que a seleção de modo compreende a seleção da estrutura de árvore do bloco 203 particionado e os modos de predição são aplicados a cada uma das partições de bloco ou sub-bloco.
[0126] A seguir, o particionamento (por exemplo, pela unidade de particionamento 260) e o processamento de predição (pela unidade de predição inter 244 e unidade de predição intra 254) realizados por um codificador de vídeo de exemplo 20 serão explicados em mais detalhes. Particionamento
[0127] A unidade de particionamento 262 pode particionar (ou dividir) um bloco atual 203 em menores partições, por exemplo, menores blocos de tamanho quadrado ou retangular. Estes blocos menores (que também podem ser referidos como sub-blocos), podem ser particionados adicionalmente em partições ainda menores. Isso também é referido como particionamento de árvore ou particionamento de árvore hierárquica, em que um bloco raiz, por exemplo, no nível de árvore raiz 0 (nível hierárquico 0, profundidade 0), pode ser particionado recursivamente, por exemplo, particionado em dois ou mais blocos de um próximo nível de árvore inferior, por exemplo, nós no nível de árvore 1 (nível hierárquico 1, profundidade 1), em que estes blocos podem ser novamente particionados em dois ou mais blocos de um próximo nível inferior, por exemplo,
nível de árvore 2 (nível hierárquico 2, profundidade 2), etc. até que o particionamento seja concluído, por exemplo, pelo fato de que um critério de terminação é atendido, por exemplo, uma profundidade máxima da árvore ou tamanho mínimo do bloco é alcançado. Os blocos que não são particionados adicionalmente, também são referidos como blocos folha ou nós folha da árvore. Uma árvore usando particionamento em duas partições é referida como árvore binária (BT), uma árvore usando particionamento em três partições é referida como árvore ternária (TT) e uma árvore usando particionamento em quatro partições é referida como quadtree (QT).
[0128] Como mencionado antes, o termo “bloco”, como usado neste relatório, pode ser uma porção, em particular, uma porção quadrada ou retangular de uma imagem. Com referência, por exemplo, ao HEVC e VVC, o bloco pode ser ou corresponder a uma unidade de árvore de codificação (CTU), uma unidade de codificação (CU), unidade de predição (PU) e unidade de transformada (TU) e/ou aos blocos correspondentes, por exemplo, um bloco de árvore de codificação (CTB), um bloco de codificação (CB), um bloco de transformada (TB) ou bloco de predição (PB).
[0129] Por exemplo, uma unidade de árvore de codificação (CTU) pode ser ou compreender um CTB de amostras de luma, dois CTBs correspondentes de amostras de croma de uma imagem que tem três arranjos de amostra, ou um CTB de amostras de uma imagem monocromática ou uma imagem que é codificada usando três planos de cor separadas e estruturas de sintaxe usadas para codificar as amostras. Correspondentemente, um bloco de árvore de codificação (CTB) pode ser um bloco de amostras NxN para algum valor de N tal que a divisão de um componente em CTBs é um particionamento. Uma unidade de codificação (CU) pode ser ou compreender um bloco de codificação de amostras de luma, dois blocos de codificação correspondentes de amostras de croma de uma imagem que tem três arranjos de amostra, ou um bloco de codificação de amostras de uma imagem monocromática ou uma imagem que é codificada usando três planos de cor separados e estruturas de sintaxe usadas para codificar as amostras. Correspondentemente, um bloco de codificação (CB) pode ser um bloco de amostras MxN para alguns valores de M e N tal que a divisão de um CTB nos blocos de codificação é um particionamento.
[0130] Nas modalidades, por exemplo, de acordo com HEVC, uma unidade de árvore de codificação (CTU) pode ser dividida em CUs por meio do uso de uma estrutura de quadtree denotada como árvore de codificação. A decisão se deve codificar uma imagem área usando predição de imagem inter (temporal) ou imagem intra (espacial) é feita no nível CU. Cada CU pode ser dividida adicionalmente em uma, duas ou quatro PUs, de acordo com o tipo de divisão PU. Dentro de uma PU, o mesmo processo de predição é aplicado e as informações relevantes são transmitidas ao decodificador em uma base PU. Depois de obter o bloco residual aplicando o processo de predição com base no tipo de divisão PU, uma CU pode ser particionada em unidades de transformada (TUs), de acordo com outra estrutura de quadtree similar à árvore de codificação para a CU.
[0131] Nas modalidades, por exemplo, de acordo com o padrão da codificação de vídeo mais recente atualmente em desenvolvimento, que é referido como Codificação de Vídeo Versátil (VVC), um particionamento combinado de quadtree e árvore binária (QTBT) é, por exemplo, usado para particionar um bloco de codificação. Na estrutura de bloco QTBT, uma CU pode ser tanto um formato quadrado quanto retangular. Por exemplo, uma unidade de árvore de codificação (CTU) é particionada primeiramente por uma estrutura de quadtree. Os nós folha de quadtree são particionados adicionalmente por uma estrutura de árvore binária ou árvore ternária (ou tripla). Os nós folha de árvore de particionamento são chamados de unidades de codificação (CUs), e esta segmentação é usada para predição e processamento de transformada sem qualquer particionamento adicional. Isto significa que a CU, PU e TU têm o mesmo tamanho de bloco na estrutura de bloco de codificação QTBT. Em paralelo, partição múltipla, por exemplo, partição de árvore tripla pode ser usada junto com a estrutura de bloco QTBT.
[0132] Em um exemplo, a unidade de seleção de modo 260 do codificador de vídeo 20 pode ser configurada para realizar qualquer combinação das técnicas de particionamento descritas neste relatório.
[0133] Como descrito acima, o codificador de vídeo 20 é configurado para determinar ou selecionar o melhor ou um modo de predição ideal de um conjunto de modos de predição (por exemplo, pré-determinado). O conjunto de modos de predição pode compreender, por exemplo, modos de predição intra e/ou modos de predição inter.
Predição intra
[0134] O conjunto de modos de predição intra pode compreender 35 diferentes modos de predição intra, por exemplo, modos não direcionais como o modo DC (ou meio) e modo planar, ou modos direcionais, por exemplo, como definido em HEVC, ou pode compreender 67 diferentes modos de predição intra, por exemplo, modos não direcionais DC (ou meio) e modo planar, ou modos direcionais, por exemplo, como definido para VVC.
[0135] A unidade de predição intra 254 é configurada para utilizar amostras reconstruídas de blocos vizinhos da mesma imagem atual para gerar um bloco de predição intra 265, de acordo com um modo de predição intra do conjunto de modos de predição intra.
[0136] A unidade de predição intra 254 (ou, em geral, a unidade de seleção de modo 260) é configurada adicionalmente para emitir parâmetros de predição intra (ou, em geral, informações indicativas do selecionado modo de predição intra para o bloco) para a unidade de codificação de entropia 270 na forma de elementos de sintaxe 266 para a inclusão nos dados de imagem codificados 21, de modo que, por exemplo, o decodificador de vídeo 30 possa receber e utilizar os parâmetros de predição para decodificação. Predição inter
[0137] O conjunto de modos de predição inter (ou possível) depende das imagens de referência disponíveis (isto é, imagens anteriores pelo menos parcialmente decodificadas, por exemplo, armazenadas em DBP 230) e outros parâmetros de predição inter, por exemplo, se a imagem de referência inteira ou apenas uma parte, por exemplo, uma área de janela de pesquisa em torno da área do bloco atual, da imagem de referência é usada para pesquisar um bloco de referência de melhor correspondência, e/ou por exemplo, se a interpolação de pixel é aplicada, por exemplo, metade/semi-pel e/ou interpolação quarter-pel, ou não.
[0138] Além dos modos de predição acima, o modo de salto e/ou modo direto pode ser aplicado.
[0139] A unidade de predição inter 244 pode incluir uma unidade de estimativa de movimento (ME) e uma unidade de compensação de movimento (MC) (ambas não mostradas na Fig,2). A unidade de estimativa de movimento pode ser configurada para receber ou obter o bloco de imagem 203 (bloco de imagem atual 203 da imagem atual 17) e uma imagem decodificada 231, ou pelo menos um ou uma pluralidade de blocos reconstruídos previamente, por exemplo, blocos reconstruídos de uma ou uma pluralidade de outras/diferentes imagens 231 decodificadas previamente, para a estimativa de movimento. Por exemplo, uma sequência de vídeo pode compreender a imagem atual e as imagens 231 previamente decodificadas ou, em outras palavras, a imagem atual e as imagens 231 previamente decodificadas podem ser parte ou formar uma sequência de imagens formando uma sequência de vídeo.
[0140] O codificador 20 pode ser, por exemplo, configurado para selecionar um bloco de referência de uma pluralidade de blocos de referência da mesma ou diferentes imagens da pluralidade de outras imagens e fornecer uma imagem de referência (ou índice de imagem de referência) e/ou um deslocamento (deslocamento espacial) entre a posição (coordenadas x, y) do bloco de referência e da posição do bloco atual como parâmetros de predição inter para a unidade de estimativa de movimento. Este deslocamento também é chamado vetor de movimento (MV).
[0141] A unidade de compensação de movimento é configurada para obter, por exemplo, receber, um parâmetro de predição inter e para realizar a predição inter com base ou usando o parâmetro de predição inter para obter um bloco de predição inter 265. A compensação de movimento, realizada pela unidade de compensação de movimento, pode envolver buscar ou gerar o bloco de predição com base no vetor de movimento/bloco determinado pela estimativa de movimento, que realiza possivelmente interpolações para a precisão de sub- pixel. A filtragem de interpolação pode gerar amostras de pixel adicionais de amostras de pixel conhecidas, aumentando assim, potencialmente, o número de blocos de predição candidatos que podem ser usados para codificar um bloco de imagem. Após o recebimento do vetor de movimento para a PU do bloco de imagem atual, a unidade de compensação de movimento pode localizar o bloco de predição para o qual o vetor de movimento aponta em uma da lista de imagens de referência.
[0142] A unidade de compensação de movimento também pode gerar elementos de sintaxe associadas aos blocos e fatias de vídeo para o uso através do decodificador de vídeo 30 na decodificação de blocos de imagem da fatia de vídeo. Em adição ou como uma alternativa para fatias e respectivos elementos de sintaxe, grupos de telha e/ou telhas e elementos de sintaxe respectivos podem ser gerados ou usados. Codificação de Entropia
[0143] A unidade de codificação de entropia 270 é configurada para aplicar, por exemplo, um algoritmo de codificação de entropia ou esquema (por exemplo, um esquema de codificação de comprimento variável (VLC), um esquema VLC adaptativo de contexto (CAVLC), um esquema de codificação aritmética, uma binarização, uma codificação aritmética binária adaptativa de contexto (CABAC), codificação aritmética binária adaptativa de contexto com base em sintaxe (SBAC), codificação de entropia de particionamento de intervalo de probabilidade (PIPE) ou outra metodologia ou técnica de codificação de entropia) ou desvio (sem compressão) nos coeficientes quantizados 209, parâmetros de predição inter, parâmetros de predição intra, parâmetros de filtro loop e/ou outros elementos de sintaxe para obter dados de imagem codificados 21 que podem ser emitidos através da saída 272, por exemplo, na forma de um fluxo de bits 21 codificado, de modo que, por exemplo, o decodificador de vídeo 30 possa receber e utilizar os parâmetros para decodificação. O fluxo de bits 21 codificados pode ser transmitido para o decodificador de vídeo 30, ou armazenado em uma memória para transmissão posterior ou recuperação pelo decodificador de vídeo 30.
[0144] Outras variações estruturais do codificador de vídeo 20 podem ser usadas para codificar o fluxo de vídeo. Por exemplo, um codificador não baseado em transformada 20 pode quantizar diretamente o sinal residual sem a unidade de processamento de transformada 206 para determinados blocos ou quadros. Em outra implementação, um codificador 20 pode possuir a unidade de quantização 208 e a unidade de quantização inversa 210 combinadas em uma única unidade. Decodificador e Método de Decodificação
[0145] A Fig. 3 mostra um exemplo de um decodificador de vídeo 30 que é configurado para implementar as técnicas deste presente pedido. O decodificador de vídeo 30 é configurado para receber dados de imagem codificados 21 (por exemplo, fluxo de bits codificados 21), por exemplo, codificados pelo codificador 20, para obter uma imagem decodificada 331. Os dados de imagem codificados ou fluxo de bits compreende informações para decodificar os dados de imagem codificados, por exemplo, dados que representam blocos de imagem de uma fatia de vídeo codificada (e/ou grupos de telha ou telhas) e elementos de sintaxe associados.
[0146] No exemplo da Fig. 3, o decodificador 30 compreende uma unidade de decodificação de entropia 304, uma unidade de quantização inversa 310, uma unidade de processamento de transformada inversa 312, uma unidade de reconstrução 314 (por exemplo, um somador 314), um filtro loop 320, um buffer de imagem decodificada (DBP) 330, uma unidade de aplicação de modo 360, uma unidade de predição inter 344 e uma unidade de predição intra 354. A unidade de predição inter 344 pode ser ou incluir uma unidade de compensação de movimento. O decodificador de vídeo 30 pode realizar, em alguns exemplos, uma passagem de decodificação geralmente recíproca para a passagem de codificação descrita em relação ao codificador de vídeo 100 da FIG. 2.
[0147] Como explicado em relação ao codificador 20, a unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o filtro loop 220, o buffer de imagem decodificada (DPB) 230, a unidade de predição inter 344 e a unidade de predição intra 354 também são referidos como formando o “decodificador embutido” do codificador de vídeo 20. Consequentemente, a unidade de quantização inversa 310 pode ser idêntica em função à unidade de quantização inversa 110, a unidade de processamento de transformada inversa 312 pode ser idêntica em função à unidade de processamento de transformada inversa 212, a unidade de reconstrução 314 pode ser idêntica em função à unidade de reconstrução 214, o filtro loop 320 pode ser idêntico em função ao filtro loop 220, e o buffer de imagem decodificada 330 pode ser idêntico em função ao buffer de imagem decodificada 230. Portanto, as explicações fornecidas para as respectivas unidades e funções do codificador de vídeo 20 aplicam-se, correspondentemente, às unidades e funções respectivas do decodificador de vídeo 30. Decodificação de Entropia
[0148] A unidade de decodificação de entropia 304 é configurada para analisar o fluxo de bits 21 (ou, em geral, dados de imagem codificados 21) e realizar, por exemplo, a decodificação de entropia para os dados de imagem codificados 21 para obter, por exemplo, coeficientes quantizados 309 e/ou parâmetros de codificação decodificados (não mostrados na Fig. 3), por exemplo, quaisquer ou todos os parâmetros de predição inter (por exemplo, índice de imagem de referência e vetor de movimento), parâmetro de predição intra (por exemplo, modo de predição intra ou índice), parâmetros de transformada, parâmetros de quantização, parâmetros de filtro loop e/ou outros elementos de sintaxe. A unidade de decodificação de entropia 304 pode ser configurada para aplicar os algoritmos de decodificação ou esquemas correspondentes aos esquemas de codificação como descritos em relação à unidade de codificação de entropia 270 do codificador 20. A unidade de decodificação de entropia 304 pode ser configurada adicionalmente para fornecer parâmetros de predição inter, parâmetro de predição intra e/ou outros elementos de sintaxe para a unidade de aplicação de modo 360 e outros parâmetros para outras unidades do decodificador 30. O decodificador de vídeo 30 pode receber os elementos de sintaxe no nível de fatia de vídeo e/ou o nível de bloco de vídeo. Em adição ou como uma alternativa às fatias e respectivos elementos de sintaxe, grupos de telha e/ou telhas e elementos de sintaxe respectivos podem ser recebidos e/ou utilizados. Quantização Inversa
[0149] A unidade de quantização inversa 310 pode ser configurada para receber parâmetros de quantização (QP) (ou, em geral, informações relacionadas à quantização inversa) e coeficientes quantizados dos dados de imagem codificados 21 (por exemplo, por análise e/ou decodificação, por exemplo, pela unidade de decodificação de entropia 304) e ao aplicar com base nos parâmetros de quantização uma quantização inversa nos coeficientes quantizados 309 codificados para obter coeficientes desquantizados 311, que também podem ser referidos como coeficientes de transformada 311. O processo de quantização inverso pode incluir a utilização de um parâmetro de quantização determinado pelo codificador de vídeo 20 para cada bloco de vídeo na fatia de vídeo (ou telha ou grupo de telha) para determinar um grau de quantização e, do mesmo modo, um grau de quantização inversa que deve ser aplicado. Transformada Inversa
[0150] A unidade de processamento de transformada inversa 312 pode ser configurada para receber coeficientes desquantizados 311, também referidos como coeficientes de transformada 311, e para aplicar uma transformada aos coeficientes desquantizados 311, de modo a obter blocos residuais reconstruídos 213 no domínio da amostra. Os blocos residuais reconstruídos 213 também podem ser referidos como blocos de transformada
313. A transformada pode ser uma transformada inversa, por exemplo, uma DCT inversa, uma DST inversa, uma transformada inteira inversa ou um processo de transformada inversa conceitualmente similar. A unidade de processamento de transformada inversa 312 pode ser configurada adicionalmente para receber parâmetros de transformada ou informações correspondentes dos dados de imagem codificados 21 (por exemplo, pela análise e/ou decodificação, por exemplo, pela unidade de decodificação de entropia 304) para determinar a transformada a ser aplicada aos coeficientes desquantizados 311. Reconstrução
[0151] A unidade de reconstrução 314 (por exemplo, adicionador ou somador 314) pode ser configurada para adicionar o bloco residual reconstruído 313, ao bloco de predição 365 para obter um bloco reconstruído 315 no domínio da amostra, por exemplo, adicionando os valores de amostra do bloco residual reconstruído 313 e os valores de amostra do bloco de predição 365. Filtragem
[0152] A unidade de filtro loop 320 (tanto na codificação loop quanto depois da codificação loop) é configurada para filtrar o bloco reconstruído 315 para obter um bloco filtrado 321, por exemplo, para suavizar as transições de pixel ou, de outro modo, melhorar a qualidade de vídeo. A unidade de filtro loop 320 pode compreender um ou mais filtros loop, tais como um filtro de desbloqueio, um filtro de deslocamento adaptativo de amostra (SAO) ou um ou mais outros filtros, por exemplo, um filtro bilateral, um filtro loop adaptativo (ALF), um filtro de nitidez, filtros de suavização ou filtros colaborativos, ou qualquer combinação dos mesmos. Embora a unidade de filtro loop 320 seja mostrada na FIG. 3 como sendo um filtro loop, em outras configurações, a unidade de filtro loop 320 pode ser implementada como um filtro pós-loop. Buffer de Imagem Decodificada
[0153] Os blocos de vídeo decodificados 321 de uma imagem são, então, armazenados em buffer de imagem decodificada 330, que armazena as imagens decodificadas 331 como imagens de referência para compensação de movimento subsequente para outras imagens e/ou para a exibição de saída, respectivamente.
[0154] O decodificador 30 é configurado para emitir a imagem decodificada 311, por exemplo, através de saída 312, para apresentação ou visualização de um usuário. Predição
[0155] A unidade de predição inter 344 pode ser idêntica à unidade de predição inter 244 (em particular, à unidade de compensação de movimento) e a unidade de predição intra 354 pode ser idêntica à unidade de predição inter 254 em função, e realiza decisões de divisão ou particionamento e com base em predição nos parâmetros de particionamento e/ou predição ou respectivas informações recebidas dos dados de imagem codificados 21 (por exemplo, pela análise e/ou decodificação, por exemplo, pela unidade de decodificação de entropia 304). A unidade de aplicação de modo 360 pode ser configurado para realizar a predição (predição inter ou intra) por bloco com base em imagens reconstruídas, blocos ou respectivas amostras (filtradas ou não filtradas) para obter o bloco de predição 365.
[0156] Quando a fatia de vídeo é codificada como uma fatia intracodificada (I), a unidade de predição intra 354 da unidade de aplicação de modo 360 é configurada para gerar o bloco de predição 365 para um bloco de imagem da fatia de vídeo atual com base em um modo de predição intra sinalizado e dados dos blocos previamente decodificados da imagem atual. Quando a imagem de vídeo é codificada como uma fatia inter-codificada (isto é, B ou P), a unidade de predição inter 344 (por exemplo, a unidade de compensação de movimento) da unidade de aplicação de modo 360 é configurada para produzir blocos de predição candidatos 365 para um bloco de vídeo da fatia de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe recebidos da unidade de decodificação de entropia 304. Para a predição inter, os blocos de predição candidatos podem ser produzidos das imagens de referência dentro de uma da lista de imagens de referência. O decodificador de vídeo 30 pode construir a lista de quadros de referência, Lista 0 e Lista 1, usando técnicas de construção padrão com base em imagens de referência armazenadas em DPB 330. O mesmo ou similar pode ser aplicado para ou pelas modalidades usando grupos de telha (por exemplo, grupos de telha de vídeo) e/ou telhas (por exemplo, telhas de vídeo) em adição ou alternativamente às fatias (por exemplo, fatias de vídeo), por exemplo, um vídeo pode ser codificado usando grupos de telha I, P ou B e/ou telhas.
[0157] A unidade de aplicação de modo 360 é configurada para determinar as informações de predição para um bloco de vídeo da fatia de vídeo atual analisando os vetores de movimento ou informações relacionadas e outros elementos de sintaxe, e utilizam as informações de predição para produzir os blocos de predição candidatos para o bloco de vídeo atual sendo decodificados. Por exemplo, a unidade de aplicação de modo 360 utiliza alguns dos elementos de sintaxe recebidos para determinar um modo de predição (por exemplo, intra ou predição inter) usados para codificar os blocos de vídeo da fatia de vídeo, um tipo de fatia de predição inter (por exemplo, fatia B, fatia P ou fatia GPB), informações de construção para uma ou mais da lista de imagens de referência para a fatia, vetores de movimento para cada bloco de vídeo inter-codificado da fatia, estado de predição inter para cada bloco de vídeo inter-codificado da fatia, e outras informações para decodificar os blocos de vídeo na fatia de vídeo atual. O mesmo ou similar pode ser aplicado para ou pelas modalidades usando grupos de telha (por exemplo, grupos de telha de vídeo) e/ou telhas (por exemplo, telhas de vídeo) em adição ou alternativamente às fatias (por exemplo, fatias de vídeo), por exemplo, um vídeo pode ser codificado usando grupos de telha I, P ou B e/ou telhas.
[0158] As modalidades do decodificador de vídeo 30, como mostrado na Fig. 3 podem ser configuradas para particionar e/ou decodificar a imagem por meio do uso de fatias (também referidas como fatias de vídeo), em que uma imagem pode ser particionada ou decodificada usando uma ou mais fatias (tipicamente não sobrepostas) e cada fatia pode compreender um ou mais blocos (por exemplo, CTUs).
[0159] As modalidades do decodificador de vídeo 30, como mostrado na Fig. 3 podem ser configuradas para particionar e/ou decodificar a imagem por meio do uso de grupos de telha (também referidas como grupos de telha de vídeo) e/ou telhas (também referidas como telhas de vídeo), em que uma imagem pode ser particionada ou decodificada usando um ou mais grupos de telha (tipicamente não sobrepostos), e cada grupo de telha pode compreender, por exemplo, um ou mais blocos (por exemplo, CTUs) ou uma ou mais telhas,
em que cada telha, por exemplo, pode estar no formato retangular e pode compreender um ou mais blocos (por exemplo, CTUs), por exemplo, blocos completos ou parciais.
[0160] Outras variações do decodificador de vídeo 30 podem ser usadas para decodificar os dados de imagem codificados 21. Por exemplo, o decodificador 30 pode produzir o fluxo de vídeo de saída sem a unidade de filtragem de loop 320. Por exemplo, um decodificador não baseado em transformada 30 pode quantizar inversa e diretamente o sinal residual sem a unidade de processamento de transformada inversa 312 para determinados blocos ou quadros. Em outra implementação, o decodificador de vídeo 30 pode possuir a unidade de quantização inversa 310 e a unidade de processamento de transformada inversa 312 combinadas em uma única unidade.
[0161] Deve ser entendido que, no codificador 20 e no decodificador 30, um resultado de processamento de uma etapa atual pode ser processado adicionalmente e, então, emitido para a próxima etapa. Por exemplo, depois da filtragem de interpolação, a derivação de vetor de movimento ou filtragem de loop, uma operação adicional, tal como recorte ou deslocamento, pode ser realizada no resultado de processamento da filtragem de interpolação, derivação de vetor de movimento ou filtragem de loop.
[0162] A FIG. 4 é um diagrama esquemático de um dispositivo de codificação de vídeo 400, de acordo com uma modalidade da revelação. O dispositivo de codificação de vídeo 400 é adequado para implementar as modalidades divulgadas como descrito neste relatório. Em uma modalidade, a dispositivo de codificação de vídeo 400 pode ser um decodificador, tal como o decodificador de vídeo 30 da FIG. 1A ou um codificador, tal como codificador de vídeo 20 da FIG. 1A.
[0163] O dispositivo de codificação de vídeo 400 compreende portas de ingresso 410 (ou portas de entrada 410) e unidades receptoras (Rx) 420 para receber dados; um processador, unidade lógica, ou unidade de processamento (CPU) 430 para processar os dados; unidades transmissoras (Tx) 440 e portas de emissão 450 (ou portas de saída 450) para transmitir os dados; e uma memória 460 para armazenar os dados. O dispositivo de codificação de vídeo 400 também pode compreender componentes ópticos para elétricos (OE) e componentes elétricos para ópticos (EO) acoplados às portas de ingresso 410,
às unidades receptoras 420, às unidades transmissoras 440 e às portas de emissão 450 para emissão ou ingresso de sinais ópticos ou elétricos.
[0164] O processador 430 é implementado por hardware e software. O processador 430 pode ser implementado como um ou mais chips de CPU, principais (por exemplo, como múltiplos processadores principais), FPGAs, ASICs e DSPs. O processador 430 está em comunicação com as portas de ingresso 410, unidades receptoras 420, unidades transmissoras 440, portas de emissão 450 e memória 460. O processador 430 compreende um módulo de codificação 470. O módulo de codificação 470 implementa as modalidades divulgadas descritas acima. Por exemplo, o módulo de codificação 470 implementa, processa, prepara ou fornece as várias operações de codificação. A inclusão do módulo de codificação 470, portanto, fornece uma melhoria substancial para a funcionalidade do dispositivo de codificação de vídeo 400 e efetua uma transformada do dispositivo de codificação de vídeo 400 para um estado diferente. Alternativamente, o módulo de codificação 470 é implementado como instruções armazenadas na memória 460 e executadas pelo processador
430.
[0165] A memória 460 pode compreender um ou mais discos, unidades de fita e unidades de estado sólido e pode ser usada como um dispositivo de armazenamento de dados de fluxo excessivo, para armazenar programas, quando tais programas são selecionados para execução, e para armazenar instruções e dados que são lidos durante a execução do programa. A memória 460 pode ser, por exemplo, volátil e/ou não-volátil e pode ser uma memória somente de leitura (ROM), memória de acesso aleatório (RAM), memória endereçável por conteúdo ternário (TCAM), e/ou memória de acesso aleatório estática (SRAM).
[0166] A Fig. 5 é um diagrama de bloco simplificado de um aparelho 500 que pode ser usado tanto como o dispositivo de origem 12 quanto o dispositivo de destino 14 da Fig. 1, de acordo com uma modalidade exemplar.
[0167] Um processador 502 no aparelho 500 pode ser uma unidade de processamento central. Alternativamente, o processador 502 pode ser qualquer outro tipo de dispositivo, ou múltiplos dispositivos, capazes de manipular ou processar informações agora existentes ou desenvolvidas posteriormente. Embora as implementações divulgadas possam ser praticadas com um único processador como mostrado, por exemplo, o processador 502, vantagens em velocidade e eficácia podem ser obtidas usando mais do que um processador.
[0168] Uma memória 504 no aparelho 500 pode ser um dispositivo de memória somente de leitura (ROM) ou um dispositivo de memória de acesso aleatório (RAM) em uma implementação. Qualquer outro tipo de dispositivo de armazenamento adequado pode ser usado como a memória 504. A memória 504 pode incluir o código e dados 506 que são acessados pelo processador 502 usando um barramento 512. A memória 504 pode incluir adicionalmente um sistema operacional 508 e programas de aplicação 510, os programas de aplicação 510 incluindo pelo menos um programa que permite o processador 502 a realizar os métodos descritos neste relatório. Por exemplo, os programas de aplicação 510 podem incluir aplicações 1 através de N, que incluem adicionalmente uma aplicação de codificação de vídeo que realiza os métodos descritos neste relatório.
[0169] O aparelho 500 também pode incluir um ou mais dispositivos de saída, tais como uma tela 518. A tela 518 pode ser, em um exemplo, uma tela sensível ao toque que combina uma tela com um elemento sensível ao toque que é operável para detectar entradas de toque. A tela 518 pode ser acoplada ao processador 502 através do barramento 512.
[0170] Embora representado neste relatório como um único barramento, o barramento 512 do aparelho 500 pode ser composto de múltiplos barramentos. Além disso, o armazenamento secundário 514 pode ser diretamente acoplado a outros componentes do aparelho 500 ou podem ser acessados através de uma rede e podem compreender uma única unidade integrada, tal como um cartão de memória ou múltiplas unidades, tais como múltiplos cartões de memória. O aparelho 500 pode, assim, ser implementados em uma ampla variedade de configurações.
[0171] Os codecs de vídeo modernos incluem normalmente uma maneira diferente do particionamento de unidade de transformada, entre os quais transformada de sub-bloco para blocos inter, Modo de Intracodificação de Sub-Partições para blocos intra, o particionamento da unidade de transformada satisfaz a restrição máxima de tamanho de transformada. Além disso, a unidade de transformada pode ser diretamente codificada sem divisão adicional. Em estágios posteriores, cada transformada ou unidade de subtransformada inclui um conjunto de sinalizadores cbf, que especifica se existe um resíduo para o bloco atual em cada componente de cor correspondentemente. Deve ser notado que os sinalizadores cbf têm alguma redundância, que podem ser utilizados usando recursos específicos de cada particionamento de unidade de transformada.
[0172] As modalidades da invenção propõem uma maneira geral unificada de remoção de redundância na sinalização de sinalizadores cbf.
[0173] Na presente revelação, em uma primeira modalidade, se a divisão de unidade de transformada não for usada, então, tu_cbf_luma pode ser derivada do sinalizador cu_cbf se for definido como 1 e dois sinalizadores croma da TU atual são definidos como 0. Neste caso, tu_cbf_luma é definido igual a 1 e não sinalizado. De outro modo, a sinalização de tu_cbf_luma é realizada de maneira normal. Na presente revelação, o sinalizador cu_cbf igual a 1 especifica que uma estrutura de sintaxe transform_tree está presente para a unidade de codificação atual, se o sinalizador cu_cbf igual a 0 especificar que a estrutura de sintaxe transform_tree não está presente para a unidade de codificação atual.
[0174] Em uma segunda modalidade, se a unidade de transformada for dividida por SBT em duas unidades de subtransformada e para uma destas pode incluir resíduos, que são controlados por tu_cbf_luma, tu_cbf_cb e sinalizadores tu_cbf_cr, então, tu_cbf_luma pode ser derivado de sinalizador cu_cbf, de acordo com a seguinte regra. Se o sinalizador cu_cbf for definido como 1 e dois sinalizadores croma da TU atual forem definidos como 0, então, tu_cbf_luma é definido igual a 1 e não sinalizado. De outro modo, a sinalização de tu_cbf_luma é realizada de maneira normal.
[0175] Em uma terceira modalidade, se a unidade de transformada for dividida pelas unidades de subtransformada para satisfazer a restrição máxima de tamanho de unidade de transformada, então, o sinalizador cbf luma para a última unidade de subtransformada na unidade de transformada, é derivado, de acordo com a seguinte condição. Se o sinalizador cu_cbf for 1 e todos de tu_cbf_luma, tu_cbf_cb e tu_cbf_cr forem 0 para todas unidades de subtransformada previamente codificadas na unidade de transformada atual, e tu_cbf_cb e tu_cbf_cr da unidade de subtransformada atual forem 0, então, tu_cbf_luma é definido igual a 1 e não sinalizado. De outro modo, a sinalização de tu_cbf_luma é realizada de maneira normal.
[0176] As modalidades da presente revelação permitem a melhoria da eficácia de codificação e o mecanismo unificado de sinalização de sinalizadores cbf proposto. Assim, um mecanismo unificado de sinalização de sinalizadores cbf é proposto.
[0177] As relações entre sinalizadores cbf e ferramentas de particionamento de unidade de subtransformada permitem remover a redundância no fluxo de bits.
[0178] Em outras palavras, as modalidades da presente revelação propõem uma modificação da especificação VVC 4 e VTM 4.0.1 SW com o objetivo de remover a incompatibilidade em parte da sinalização de sinalizadores CBF entre eles. Um primeiro aspecto propõe a remoção da sinalização CBF de croma hierárquica com base na profundidade da unidade de transformada de VTM SW, que não é apresentada na especificação; e incluir na especificação os métodos de derivação de sinalizador cbf luma ausentes para TU normal e SBT TU com base em sinalizadores cbf croma, que são apresentados na SW. Um segundo aspecto é proposto em cima do primeiro e assume um projeto unificado de todos os métodos de derivação de sinalizador cbf luma existentes.
[0179] Existem quatro possibilidades de TU representando em VVC 4:
1. TU normal igual ao tamanho de CU (sem divisão);
2. Particionamento de SBT TUs;
3. Particionamento de ISP TUs;
4. Particionamento de TUs causado pela restrição máxima de tamanho de transformada. As seguintes tabelas demonstram estas possibilidades. Tabela 1 – tabela de sintaxe transform_tree VVC 4 transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY )
transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, 0 ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
Tabela 2 - tabela de sintaxe de unidade de transformada VVC 4 transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) if (IntraSubPartitionsSplitType != ISP_NO_SPLIT ) InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] } if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) {
if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } … }
[0180] Pode ser observado que, de acordo com a Tabela 1 e a Tabela 2, tanto a sinalização CBFs luma quanto a sinalização CBFs croma são realizadas independentemente umas das outras e não há dependências hierárquicas para sinalizadores cbf croma.
[0181] A partir da perspectiva de SW, VTM4.0.1 inclui ambos os aspectos mencionados acima.
[0182] O método de sinalização CBFs croma hierárquica foi testado em VTM4.0.1 e demonstra impacto insignificante na eficácia de codificação. Por outro lado, o suporte a este recurso requer lógica adicional não trivial tanto em SW quanto na especificação.
[0183] Em uma modalidade, é proposto remover do método de sinalização CBFs croma hierárquica SW e incluir à especificação luma CBF derivando.
[0184] A seguinte tabela demonstra a tabela de sintaxe modificada. Tabela 3 - Tabela de sintaxe de unidade de transformada proposta (modalidade 1) transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0185] Em outra modalidade, é proposto aplicar o método de luma cbf similar que deriva para TUs, dividido de modo a satisfazer a restrição TU máxima. Esta unificação pode compartilhar o mecanismo existente do último luma cbf que deriva para ISP. A tabela abaixo demonstra a modificação proposta. Tabela 4 - Tabela de sintaxe de unidade de transformada proposta (modalidade 2) transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) if (CuPredMode[ x0 ][ y0 ] == MODE_INTRA) if (IntraSubPartitionsSplitType != ISP_NO_SPLIT ) InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] else InferTuCbfLuma = 0 else InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] && !tu_cbf_cb[ x0 ][ y0 ] && !tu_cbf_cr[ x0 ][ y0 ] … }
[0186] As modalidades da invenção permitem a melhoria da eficácia de codificação, simplificando a especificação e o mecanismo unificado proposto de sinalização de sinalizadores cbf. Assim, um mecanismo unificado de sinalização de sinalizadores cbf é proposto.
[0187] As relações entre sinalizadores cbf e ferramentas de particionamento de unidade de subtransformada permitem remover a redundância no fluxo de bits.
[0188] Em outras palavras, existem quatro possibilidades de TU representando em VVC 4:
1. TU normal igual ao tamanho de CU (sem divisão);
2. Particionamento SBT TUs;
3. Particionamento ISP TUs;
4. Particionamento TUs causado pela restrição máxima de tamanho de transformada. As seguintes tabelas demonstram estas possibilidades. Tabela 1 - Tabela de sintaxe de árvore de transformada VVC 4 transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, 0 ) } } else if( cu_sbt_flag ) {
if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
Tabela 2 - Tabela de sintaxe de unidade de transformada VVC 4 transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] if (IntraSubPartitionsSplitType != ISP_NO_SPLIT ) InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] } if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } … }
[0189] Pode ser observado que, de acordo com a Tabela 1 e a Tabela 2, tanto as sinalizações CBFs luma quanto croma são realizadas independentemente umas das outras e não há dependências hierárquicas para sinalizadores cbf croma.
[0190] A partir da perspectiva de SW, VTM4.0.1 inclui ambos os aspectos mencionados acima.
[0191] O método de sinalização CBFs croma hierárquica foi testado em VTM4.0.1 e demonstra impacto insignificante na eficácia de codificação. Por outro lado, o suporte a este recurso requer lógica adicional não trivial tanto em SW quanto na especificação.
[0192] Em uma modalidade, é proposto remover do método de sinalização CBFs croma hierárquica SW e incluir a especificação luma CBF derivando.
[0193] A seguinte tabela demonstra a tabela de sintaxe modificada. Tabela 3 - Tabela de sintaxe de unidade de transformada proposta (1a modalidade) transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0194] Nesta modalidade, o método de derivação de sinalizador tu_cbf_luma[x0][y0] realiza 1) para o caso normal quando TU é igual a CU e para 2) caso SBT para sub-TU que contém sinalizador CBF. O processo de derivação realiza com base no tipo de bloco (CuPredMode[x0][y0]) e em valores de sinalizadores CBF Cb e Cr (tu_cbf_cb[x0][y0] e tu_cbf_cr[x0][y0]) que já são transmitidos no fluxo de bits antes de tu_cbf_luma[x0][y0]. Deve ser observado, que a técnica de derivação não é aplicada a TUs que são divididas em sub-TUs de modo a satisfazer a restrição máxima de tamanho de unidade de transformada.
[0195] As modalidades da invenção permitem a melhoria da eficácia de codificação, simplificando a especificação e o mecanismo unificado de sinalização de sinalizadores cbf proposto.
[0196] As relações entre sinalizadores cbf e ferramentas de particionamento de unidade de subtransformada permitem remover a redundância no fluxo de bits.
[0197] Ainda em uma outra modalidade, relacionada à modalidade descrita anteriormente, é proposto remover do método de sinalização CBFs croma hierárquica SW e incluir a especificação luma CBF derivando.
[0198] A seguinte tabela demonstra uma tabela de sintaxe modificada para a sintaxe de unidade de transformada, isto é, a sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: Tabela de sintaxe de unidade de transformada transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0199] Nesta modalidade, um método de derivação de sinalizador tu_cbf_luma[x0][y0] realiza 1) para o caso normal quando TU é igual a CU e para 2) caso SBT para sub-TU que contém sinalizador CBF. O processo de derivação realiza com base no tipo de bloco (CuPredMode[x0][y0]) e em valores de sinalizadores Cb e Cr CBF (tu_cbf_cb[x0][y0] e tu_cbf_cr[x0][y0]) que já são transmitidos no fluxo de bits antes de tu_cbf_luma[x0][y0]. Deve ser observado, que a técnica de derivação não é aplicada a TUs que são divididas em sub-TUs de modo a satisfazer a restrição máxima de tamanho de unidade de transformada.
[0200] Esta modalidade, como as outras modalidades da presente invenção, permite a melhoria da eficácia de codificação, simplificando a especificação e o mecanismo unificado de sinalização de sinalizadores cbf proposto.
[0201] Além disso, para esta modalidade, as relações entre sinalizadores cbf e ferramentas de particionamento de unidade de subtransformada permitem remover a redundância no fluxo de bits.
[0202] A FIG. 6 é um diagrama de bloco que ilustra uma modalidade do método de sinalização de sinalizadores cbf. A FIG. 6 ilustra um caso onde uma TU normal é igual ao tamanho de CU, e a TU é dividida pelo particionamento SBT na direção vertical nas duas sub-TUs: SubTU 0 e SubTU 1, onde, de acordo com o projeto SBT, apenas uma SubTu pode possuir tu_cbf_cb diferente de zero, tu_cbf_cr, sinalizadores tu_cbf_luma. No exemplo dado na Fig. 6, SubTU 0 pode possuir tu_cbf_cb diferente de zero, tu_cbf_cr, sinalizadores tu_cbf_luma. Assumindo que toda a unidade de codificação tem sinalizador cu_cbf igual a 1 e tanto tu_cbf_cb, tu_cbf_cr de SubTU 0 são sinalizados quanto são iguais a 0, o valor de tu_cbf_luma pode ser derivado para 1 sem sinalização explícita.
[0203] Isto também é ilustrado adicionalmente na FIG. 10, que mostra um caso para TU igual a CU e sem divisão e um caso com uma divisão tubular.
[0204] A FIG. 7 ilustra um fluxograma das etapas de um método de codificação de vídeo implementado por um dispositivo de decodificação ou dispositivo de codificação, de acordo com a presente revelação. Na FIG. 7, o método compreende a etapa 1601, que define obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada. Para a etapa 1601, a sintaxe de unidade de transformada compreende pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma), para blocos croma correspondentes a uma unidade de transformada atual ou uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma de pelo menos dois sinalizadores cbf croma especifica se um determinado bloco tem resíduo em um plano de cor correspondente. A FIG. 7 ilustra adicionalmente a etapa 1602 de derivação de um valor de um sinalizador cbf luma. A derivação de um sinalizador cbf luma na etapa 1602 é fundamentada em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf; e um ou qualquer combinação de valores de pelo menos dois sinalizadores cbf croma; e/ou localização da unidade de subtransformada atual dentro da unidade de transformada atual; e/ou valores de luma e sinalizadores cbf croma correspondentes às unidades de subtransformada na unidade de transformada atual anterior à unidade de subtransformada atual. Na presente revelação, um bloco que tem um resíduo significa que o bloco inclui pelo menos um coeficiente de transformada com um valor diferente de 0.
[0205] A FIG. 8 ilustra um codificador 20, de acordo com a presente revelação. Na FIG. 8, o codificador 20 compreende uma unidade de obtenção 2001, configurada para obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada; a unidade de obtenção 2001 configurada para obter, de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma unidade de transformada atual ou uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma de pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; e uma unidade de derivação 2003, configurada para derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf e os valores de pelo menos dois sinalizadores cbf croma. Deve ser entendido que mais do que uma unidade de obtenção pode ser usada.
[0206] A FIG. 9 ilustra um decodificar 30, de acordo com a presente revelação. Na FIG. 9, o decodificador 30 compreende uma unidade de obtenção 3001, configurada para obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada; a unidade de obtenção 3001 configurada para obter, de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma unidade de transformada atual ou uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma de pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; uma unidade de derivação 3003, configurada para derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf e os valores de pelo menos dois sinalizadores cbf croma. Deve ser entendido que mais do que uma unidade de obtenção pode ser usada. Operadores Matemáticos
[0207] Os operadores matemáticos usados neste pedido são similares aos usados na linguagem de programação C. Entretanto, os resultados de operações de divisão inteira e deslocamento aritmético são definidos mais precisamente, e as operações adicionais são definidas, tais como exponenciação e divisão com valor real. As convenções de numeração e contagem geralmente começam em 0, por exemplo, “o primeiro” é equivalente ao 0ésimo, “o segundo” é equivalente ao 1o, etc. Operadores Aritméticos
[0208] Os seguintes operadores aritméticos são definidos a seguir: + Adição − Subtração (como um operador de dois argumentos) ou negação (como um operador de prefixo unário) * Multiplicação, incluindo multiplicação de matriz Exponenciação. Especifica x elevado à potência de y. Em outros contextos, xy tal notação é usada para sobrescrito, não pretendendo ser interpretado como exponenciação. Divisão inteira 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 divisão em equações matemáticas onde nenhum ÷ truncamento ou arredondamento é pretendido. x Usado para denotar divisão em equações matemáticas onde nenhum y truncamento ou arredondamento é pretendido. y ∑ f(i) A soma de f(i) com i levando todos os valores inteiros de x até e incluindo y. i=x Módulo. Restante de x dividido por y, definido apenas x e y inteiros com x >= x%y 0 e y > 0. Operadores Lógicos
[0209] Os seguintes operadores lógicos são definidos a seguir: x && y Booleano lógico “e” de x e y x||y Booleano lógico “ou” de x e y ! Booleano lógico “não” x ? y : z Se x for TRUE ou diferente de 0, avalia o valor de y; de outro modo, avalia o valor de z. Operadores Relacionais
[0210] Os seguintes operadores relacionais são definidos a seguir: > Maior do que >= Maior do que ou igual a < Menor do que <= Menor do que ou igual a == Igual a != Diferente de
[0211] Quando um operador relacional é aplicado a um elemento ou variável de sintaxe ao qual foi atribuído o valor “na” (não aplicável), o valor “na”
é tratado como um valor distinto para o elemento ou variável de sintaxe. O valor “na” é considerado diferente de qualquer outro valor. Operadores bit-a-bit
[0212] Os seguintes operadores bit-a-bit são definidos a seguir: & Bit-a-bit “e”. Ao operar com argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Ao operar em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando mais bits mais significantes iguais a 0. | Bit-a-bit “ou”. Ao operar com argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Ao operar em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando bits mais significante iguais a 0. ^ Bit-a-bit “exclusivo ou”. Ao operar com argumentos inteiros, opera em representações de complemento de dois do valor inteiro. Ao operar em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido pela adicionando bits mais significantes iguais a 0. x >> y Deslocamento aritmético para direita de uma representação de complemento de dois de dígitos binários x por y. Esta função é definida apenas para valores inteiros não negativos de y. Os bits deslocados para os bits mais significantes (MSBs) como um resultado do deslocamento para direita possuem um valor igual aos MSB de x antes da operação de deslocamento. x << y Deslocamento aritmético para a esquerda de uma representação inteira de complemento de dois de dígitos binários x por y. Esta função é definida apenas para valores inteiros não negativos de y. Os bits deslocados para os bits menos significantes (LSBs) como um resultado do deslocamento para esquerda possuem um valor igual a 0. Operadores de Atribuição
[0213] Os seguintes operadores aritméticos são definidos a seguir: = Operador de atribuição ++ Incremento, isto é, x + + é equivalente a x = x + 1; quando usado em um índice de arranjo, avalia o valor da variável antes da operação de incremento. − − Decremento, isto é, x − − é equivalente a x = x − 1; quando usado em um índice de arranjo, avalia o valor da variável antes a operação de decremento. += Incremento pela quantidade especificada, isto é, x += 3 é equivalente a x = x + 3, e x += (−3) é equivalente a x = x + (−3). −= Decremento pela quantidade especificada, isto é, x −= 3 é equivalente a x = x − 3, e x −= (−3) é equivalente a x = x − (−3). Notação de Alcance
[0214] A seguinte notação é usada para especificar uma faixa de valores: x = y..zx assume valores inteiros partindo de y a z, inclusive, com x, y e z sendo números inteiros e z sendo maior do que y. Funções Matemáticas
[0215] As seguintes funções matemáticas são definidas: x ; x >= 0 Abs(x) = { −x ; x<0 Asin(x) a função seno inversa trigonométrica, operando em um argumento x que está na faixa de −1,0 a 1,0, inclusive, com um valor de saída na faixa de −π÷2 a π÷2, inclusive, em unidades de radianos Atan(x) a função tangente inversa trigonométrica, operando em um argumento x, com um valor de saída na faixa de −π÷2 a π÷2, inclusive, em unidades de radianos y Atan ( ) ; x>0 x y Atan ( ) + π ; x < 0 && y >= 0 x Atan2(y, x) = Atan ( y ) − π ; x < 0 && y < 0 x π + ; x = = 0 && y >= 0 2 π ; de outro modo { − 2 Ceil(x) o menor número inteiro maior do que ou igual a x. Clip1Y(x) = Clip3(0, (1 << BitDepthY) − 1, x) Clip1C(x) = Clip3(0, (1 << BitDepthC) − 1, x) x ; z<x Clip3(x, y, z) = { y ; z>y z ; de outro modo Cos(x) a função cosseno trigonométrica operando em um argumento x em unidades de radianos. Floor(x) o maior número inteiro menor do que ou igual a x. c+d ; b − a >= d/2 GetCurrMsb(a, b, c, d) = { c − d ; a − b > d/2 c ; de outro modo Ln(x) o logaritmo natural de x (os logaritmos de base e, onde e é o logaritmo natural constante de base 2,718 281 828...). Log2(x) o logaritmo de base 2 de x.
Log10(x) o logaritmo de base 10 de x. x ; x <= y Min(x, y) = { y ; x>y x ; x >= y Max(x, y) = { y ; x<y Round(x) = Sign(x) * Floor(Abs(x) + 0,5) 1 ; x>0 Sign(x) = { 0 ; x==0 −1 ; x<0 Sin(x) a função seno trigonométrica operando em um argumento x em unidades de radianos Sqrt(x) = √x Swap(x, y) = (y, x) Tan(x) a função tangente trigonométrica operando em um argumento x em unidades de radianos Ordem de precedência de operação
[0216] Quando uma ordem de precedência em uma expressão não é indicada explicitamente pelo uso de parênteses, as seguintes regras se aplicam: - As operações de uma precedência superior são avaliadas antes de qualquer operação de uma precedência inferior. - As operações com a mesma precedência são avaliadas sequencialmente da esquerda para a direita.
[0217] A tabela abaixo especifica a precedência de operações da mais alta para a mais baixa; uma posição superior na tabela indica uma precedência superior.
[0218] Para os operadores que também são usados na linguagem de programação C, a ordem de precedência usada nesta Especificação é a mesma como usada na linguagem de programação C. Tabela: Precedência de operação da mais alta (na parte superior da tabela) para a mais baixa (na parte inferior da tabela) operações (com operandos x, y e z) “x++”, “x− −” “!x”, “−x” (como um operador de prefixo unário) xy x “x * y”, “x/y”, “x ÷ y”, “y”, “x % y”
y  f( i ) “x + y”, “x − y” (como um operador de dois argumentos), “ i=x ” “x << y”, “x >> y” “x < y”, “x <= y”, “x > y”, “x >= y” “x = = y”, “x != y” “x & y” “x | y” “x && y” “x | | y” “x ? y : z” “x..y” “x = y”, “x += y”, “x −= y” Descrição de Texto das Operações Lógicas
[0219] No texto, uma confirmação de operações lógicas, como seria descrita matematicamente da seguinte forma: Se (condição 0) confirmação 0 outro se (condição 1) confirmação 1 ... outro/* observação informativa sobre a condição remanescente */ confirmação n pode ser descrita da seguinte maneira: ..., como segue/... aplica-se ao seguinte: - Se condição 0, confirmação 0 - De outro modo, se condição 1, confirmação 1 - ... - De outro modo (observação informativa sobre a condição remanescente), confirmação n
[0220] Cada confirmação “Se ... De outro modo, se ... De outro modo, ...” no texto é introduzida com “... como segue” ou “... aplica-se ao seguinte” imediatamente seguido por “Se ... “. A última condição de “Se ... De outro modo, se ... De outro modo, ...” é sempre um “De outro modo, ...”. As confirmações intercaladas “Se ... De outro modo, se ... De outro modo, ...” podem ser identificadas combinando “..., como segue” ou “... aplica-se ao seguinte” com a terminação “De outro modo, ...”.
[0221] No texto, uma confirmação de operações lógicas, que seria descrita matematicamente da seguinte forma: se (condição 0a && condição 0b) confirmação 0 outro se (condição 1a | | condição 1b) confirmação 1 ... outro confirmação n pode ser descrita da seguinte maneira: ..., como segue/... aplica-se ao seguinte: - Se todas as seguintes condições forem verdadeiras, confirmação 0: - condição 0a - condição 0b - De outro modo, se uma ou mais das condições forem verdadeiras, confirmação 1: - condição 1a - condição 1b - ... - De outro modo, confirmação n No texto, uma confirmação de operações lógicas que seria descrita matematicamente da seguinte forma: se (condição 0) confirmação 0 se (condição 1) confirmação 1 pode ser descrito da seguinte maneira: Quando condição 0, confirmação 0 Quando condição 1, confirmação 1
[0222] Embora as modalidades da invenção tenham sido descritas principalmente com base na codificação de vídeo, deve ser observado que as modalidades do sistema de codificação 10, codificador 20 e decodificador 30 (e, correspondentemente, o sistema 10) e as outras modalidades descritas neste relatório, também podem ser ainda configuradas para processamento ou codificação de imagem, isto é, o processamento ou codificação de uma imagem individual independente de qualquer imagem precedente ou imagem consecutiva como na codificação de vídeo. Em geral, apenas as unidades de predição inter 244 (codificador) e 344 (decodificador) podem não estar disponíveis no caso de codificação de processamento de imagem ser limitada a uma única imagem 17. Todas as outras funcionalidades (também referidas como ferramentas ou tecnologias) do codificador de vídeo 20 e do decodificador de vídeo 30 podem igualmente ser ainda usadas para processamento de imagem, por exemplo, cálculo residual 204/304, transformada 206, quantização 208, quantização inversa 210/310, transformada (inversa) 212/312, particionamento 262/362, predição intra 254/354, e/ou filtragem de loop 220, 320, e codificação de entropia 270 e decodificação de entropia 304.
[0223] As modalidades, por exemplo, do codificador 20 e do decodificador 30, e as funções descritas neste relatório, por exemplo, com referência ao codificador 20 e ao decodificador 30, podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Se implementadas em software, as funções podem ser armazenadas em uma mídia legível por computador ou transmitida através da mídia de comunicação como uma ou mais instruções ou códigos e executadas por uma unidade de processamento com base em hardware. A mídia legível por computador pode incluir a mídia de armazenamento legível por computador, que corresponde a uma mídia tangível, tal como mídia de armazenamento de dados, ou mídia de comunicação incluindo qualquer mídia que facilita a transferência de um programa de computador de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Desta maneira, a mídia legível por computador geralmente pode corresponder a (1) mídia de armazenamento legível por computador tangível que é não transitória ou (2) uma mídia de comunicação, tal como um sinal ou 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ódigos e/ou estruturas de dados para implementação das técnicas descritas nesta revelação. Um produto de programa de computador pode incluir uma mídia legível por computador.
[0224] Através do exemplo, e não limitando, tal mídia de armazenamento legível por computador pode compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco óptico, armazenamento de disco magnético, ou outros dispositivos de armazenamento magnéticos, memória flash ou qualquer outra mídia que possa ser usada para armazenar o código de programa desejado na forma de instruções ou estruturas de dados e que possa ser acessada por um computador. Além disso, qualquer conexão é apropriadamente denominada uma mídia legível por computador. Por exemplo, se as instruções forem transmitidas de um website, servidor ou outra fonte remota usando um cabo coaxial, cabo de fibra óptica, par trançado, linha de assinante digital (DSL), ou tecnologias sem fio, tais como infravermelho, rádio, e micro-ondas, então, o cabo coaxial, cabo de fibra óptica, par trançado, DSL, ou tecnologias sem fio, tais como infravermelho, rádio e micro-ondas, são incluídos na definição de mídia. Deve ser entendido, entretanto, que mídia legível por computador e mídia de armazenamento de dados não incluem conexões, ondas de portadora, sinais ou outra mídia transitória, mas são direcionadas para mídia de armazenamento tangível não transitória. Disco e disquete,, como usado neste relatório, inclui disco compacto (CD), disco a laser, disco óptico, disco versátil digital (DVD), disquete e disco Blue-ray, onde os discos usualmente reproduzem dados magneticamente, enquanto discos reproduzem dados opticamente com lasers. As combinações dos itens acima também deveriam ser incluídas dentro do escopo da mídia legível por computador.
[0225] As instruções podem ser executadas por um ou mais processadores, tais como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados específicos da aplicação (ASICs), arranjo lógico programável em campo (FPGAs), ou outros circuitos lógicos discretos ou integrados equivalentes. Consequentemente, o termo “processador”, como usado neste relatório pode se referir a qualquer uma da estrutura anterior ou qualquer outra estrutura adequada para implementação das técnicas descritas neste relatório. Além disso, em alguns aspectos, a funcionalidade descrita neste relatório pode ser fornecida dentro dos módulos de hardware e/ou software dedicados configurados para codificação e decodificação ou incorporados em um codec combinado. Além disso, as técnicas podem ser completamente implementadas em um ou mais circuitos ou elementos lógicos.
[0226] As técnicas desta revelação podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um monofone sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos ou unidades são descritos nesta revelação para enfatizar os aspectos funcionais de dispositivos configurados para realizar as técnicas divulgadas, mas não necessariamente requerem a realização por diferentes unidades de hardware. Em vez disso, como 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 interoperativas, incluindo um ou mais processadores como descritos acima, em conjunto com software e/ou firmware adequado.
[0227] A presente revelação divulga os seguintes treze aspectos.
[0228] Um primeiro aspecto de um método de codificação implementado por um dispositivo de decodificação ou dispositivo de codificação, o método compreende: obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada, (em um exemplo, o elemento de sintaxe de unidade de transformada pode ser tanto codificado para um bloco inteiro quanto codificado para múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco (SBT) para bloco inter, ou de modo a satisfazer as restrições de tamanho de unidade de transformada máxima); a sintaxe compreende pelo menos dois sinalizadores cbf para blocos croma (em um exemplo, a sintaxe de unidade de transformada corresponde tanto à unidade de transformada quanto às unidades de subtransformada que incluem dois sinalizadores cbf croma: tu_cbf_cb e tu_cbf_cb - um sinalizador para cada plano de croma), um sinalizador cbf croma especifica se determinado bloco tem resíduo em plano de cor correspondente; derivar um valor de um sinalizador cbf luma tu_cbf_luma com base em um ou qualquer combinação de um valor de um sinalizador cu_cbf, valores de dois sinalizadores cbf croma correspondentes a uma unidade de transformada atual ou unidade de subtransformada, localização da unidade de subtransformada dentro da unidade de transformada, valores de luma e sinalizadores cbf croma correspondentes às unidades de subtransformada anteriores na unidade de transformada atual.
[0229] Um segundo aspecto do método do primeiro aspecto, em que o valor do sinalizador cbf luma (por exemplo, um sinalizador tu_cbf_luma) é derivado com base no valor do sinalizador cu_cbf e valores dos dois sinalizadores cbf croma correspondentes à unidade de transformada atual.
[0230] Um terceiro aspecto do método do segundo aspecto, quando a unidade de transformada atual não é dividida em unidades de subtransformada, o valor do sinalizador cu_cbf é 1, o valor de sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de transformada atual é derivado para 1.
[0231] Um quarto aspecto do método do terceiro aspecto, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0232] Um quinto aspecto do método, de acordo com o primeiro ou segundo aspectos, em que quando a unidade de transformada atual é dividida por SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, que permite sinalizadores cbf não nulos, é derivado, de acordo com a seguinte condição: - quando o valor do sinalizador cu_cbf é 1, e o valor do sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para 1.
[0233] Um sexto aspecto do método, de acordo com qualquer um dentre o primeiro ao quinto aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0234] Um sétimo aspecto do método do primeiro ou segundo aspectos, quando a unidade de transformada atual é dividida em unidades de subtransformada para satisfazer a restrição máxima de tamanho de unidade de transformada, um valor do sinalizador tu_cbf_luma para a última unidade de subtransformada em unidade de transformada, é derivado, de acordo com a seguinte condição: - quando o valor do sinalizador cu_cbf é 1, e valores do sinalizador tu_cbf_luma, o sinalizador tu_cbf_cb e o sinalizador tu_cbf_cr são 0 para todas as unidades de subtransformada previamente codificadas na unidade de transformada atual, o valor do sinalizador tu_cbf_cb da unidade de subtransformada atual é 0, e o valor do sinalizador tu_cbf_cr da unidade de subtransformada atual é 0, então, o valor do sinalizador tu_cbf_luma é derivado para 1.
[0235] Um oitavo aspecto do método de qualquer um dentre o primeiro ao sétimo aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v)
if (CuPredMode[ x0 ][ y0 ] == MODE_INTRA) if (IntraSubPartitionsSplitType != ISP_NO_SPLIT ) InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] else InferTuCbfLuma = 0 else InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] && !tu_cbf_cb[ x0 ][ y0 ] && !tu_cbf_cr[ x0 ][ y0 ] … }
[0236] Um nono aspecto do método de qualquer um dentre o primeiro ao oitavo aspectos, em que uma tabela de sintaxe de unidade de codificação e uma tabela de sintaxe de árvore de transformada são sinalizadas, de acordo com as seguintes tabelas: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor … SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … } transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, tree Type ) } else {
transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType ,1) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType ,1) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
[0237] Um décimo aspecto de um codificador (20) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0238] Um décimo primeiro aspecto de um decodificador (30) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0239] Um décimo segundo aspecto de um produto de programa de computador compreendendo um código de programa para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0240] Um décimo terceiro aspecto de um decodificador ou um codificador, compreendendo:
um ou mais processadores; e uma mídia de armazenamento legível por computador não transitória acoplada aos processadores e armazenando a programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0241] A presente revelação também inclui os seguintes treze aspectos:
[0242] Um primeiro aspecto de um método de codificação implementado por um dispositivo de decodificação ou dispositivo de codificação, o método compreende: obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada (em um exemplo, o elemento de sintaxe de unidade de transformada pode ser tanto codificada para um bloco inteiro quanto codificada para múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco (SBT) para bloco inter, ou de modo a satisfazer as restrições de tamanho de unidade de transformada máxima); a sintaxe compreende pelo menos dois sinalizadores cbf para blocos croma (em um exemplo, a sintaxe de unidade de transformada corresponde tanto à unidade de transformada quanto às unidades de subtransformada que incluem dois sinalizadores cbf croma: tu_cbf_cb e tu_cbf_cb - um sinalizador para cada plano de croma), um sinalizador cbf croma especifica se determinado bloco tem resíduo em plano de cor correspondente; derivar um valor de um sinalizador cbf luma tu_cbf_luma com base em um ou qualquer combinação de um valor de um sinalizador cu_cbf, valores de dois sinalizadores cbf croma correspondentes a uma unidade de transformada atual ou unidade de subtransformada, localização da unidade de subtransformada dentro da unidade de transformada, valores de luma e sinalizadores cbf croma correspondentes às unidades de subtransformada anteriores na unidade de transformada atual.
[0243] Um segundo aspecto do método do primeiro aspecto, em que o valor do sinalizador cbf luma (por exemplo, um sinalizador tu_cbf_luma) é derivado com base no valor do sinalizador cu_cbf e valores dos dois sinalizadores cbf croma correspondentes à unidade de transformada atual.
[0244] Um terceiro aspecto do método do segundo aspecto, quando a unidade de transformada atual não é dividida em unidades de subtransformada, o valor do sinalizador cu_cbf é 1, o valor de sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de transformada atual é derivado para 1.
[0245] Um quarto aspecto do método do terceiro aspecto, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0246] Um quinto aspecto do método, de acordo com o primeiro ou segundo aspectos, em que quando a unidade de transformada atual é dividida por SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, que permite sinalizadores cbf não nulos, é derivado, de acordo com a seguinte condição: - quando o valor do sinalizador cu_cbf é 1, e o valor do sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para 1.
[0247] Um sexto aspecto do método, de acordo com qualquer um dentre o primeiro ao quinto aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela:
transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0248] Um sétimo aspecto do método do primeiro ou segundo aspectos, quando a unidade de transformada atual é dividida em unidades de subtransformada para satisfazer a restrição máxima de tamanho de unidade de transformada, um valor do sinalizador tu_cbf_luma para a última unidade de subtransformada na unidade de transformada, é derivado, de acordo com a seguinte condição: - quando o valor do sinalizador cu_cbf é 1, e valores do sinalizador tu_cbf_luma, o sinalizador tu_cbf_cb e o sinalizador tu_cbf_cr são 0 para todas as unidades de subtransformada codificadas anteriormente na unidade de transformada atual, o valor do sinalizador tu_cbf_cb da unidade de subtransformada atual é 0, e o valor do sinalizador tu_cbf_cr da unidade de subtransformada atual é 0, então, o valor do sinalizador tu_cbf_luma é derivado para 1.
[0249] Um oitavo aspecto do método de qualquer um dentre o primeiro ao sétimo aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && (CuPredMode[ x0 ][ y0 ] != MODE_INTRA | | tu_cbf_cb[ x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) if (CuPredMode[ x0 ][ y0 ] == MODE_INTRA) if (IntraSubPartitionsSplitType != ISP_NO_SPLIT ) InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] else InferTuCbfLuma = 0 else InferTuCbfLuma = InferTuCbfLuma && !tu_cbf_luma[ x0 ][ y0 ] && !tu_cbf_cb[ x0 ][ y0 ] && !tu_cbf_cr[ x0 ][ y0 ] … }
[0250] Um nono aspecto do método de qualquer um dentre o primeiro ao oitavo aspectos, em que uma tabela de sintaxe de unidade de codificação e uma tabela de sintaxe de árvore de transformada são sinalizada, de acordo com as seguintes tabelas: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor … SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … } transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
[0251] Um décimo aspecto de um codificador (20) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0252] Um décimo primeiro aspecto de um decodificador (30) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0253] Um décimo segundo aspecto de um produto de programa de computador compreendendo um código de programa para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0254] Um décimo terceiro aspecto de um decodificador ou um codificador, compreendendo: um ou mais processadores; e uma mídia de armazenamento legível por computador não transitória acoplada aos processadores e armazenando a programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0255] A presente revelação também inclui os seguintes treze aspectos.
[0256] Um primeiro aspecto de um método de implementado por um dispositivo de decodificação ou dispositivo de codificação, o método compreende: obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada, (em um exemplo, o elemento de sintaxe de unidade de transformada pode ser tanto codificado para um bloco inteiro quanto codificado para múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco (SBT) para bloco inter, ou de modo a satisfazer as restrições de tamanho de unidade de transformada máxima); a sintaxe compreende pelo menos dois sinalizadores cbf para blocos croma (em um exemplo, a sintaxe de unidade de transformada corresponde tanto à unidade de transformada quanto às unidades de subtransformada que incluem dois sinalizadores cbf croma: tu_cbf_cb e tu_cbf_cb - um sinalizador para cada plano de croma), um sinalizador cbf croma especifica se determinado bloco tem resíduo em plano de cor correspondente; derivar um valor de um sinalizador cbf luma tu_cbf_luma com base em um ou qualquer combinação de um valor de um sinalizador cu_cbf, valores de dois sinalizadores cbf croma correspondentes a uma unidade de transformada atual ou unidade de subtransformada, localização da unidade de subtransformada dentro da unidade de transformada, valores de luma e sinalizadores cbf croma correspondentes às unidades de subtransformada anteriores na unidade de transformada atual.
[0257] Um segundo aspecto do método do primeiro aspecto, em que o valor do sinalizador cbf luma (por exemplo, um sinalizador tu_cbf_luma) é derivado com base no valor do sinalizador cu_cbf e valores dos dois sinalizadores cbf croma correspondentes à unidade de transformada atual.
[0258] Um terceiro aspecto do método do segundo aspecto, quando a unidade de transformada atual não é dividida em unidades de subtransformada, o sinalizador cu_cbf é sinalizado no fluxo de bits e um valor do sinalizador cu_cbf é igual a 1, o valor de sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de transformada atual é derivado para 1.
[0259] Um quarto aspecto do método do terceiro aspecto, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType == ISP_NO_SPLIT && ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0260] Um quinto aspecto do método, de acordo com o terceiro aspecto, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType = = ISP_NO_SPLIT){ if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0261] Um sexto aspecto do método do primeiro ou segundo aspectos, quando a unidade de transformada atual é dividida por SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, que permite sinalizadores cbf não nulos, é derivado, de acordo com a seguinte condição: - quando o valor do sinalizador cu_cbf é 1, e o valor do sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para 1.
[0262] Um sétimo aspecto do método de qualquer um dentre o primeiro ao sexto aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) }
} if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0263] Um oitavo aspecto do método de qualquer um dentre o primeiro ao sexto aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType == ISP_NO_SPLIT){ if !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0264] Um nono aspecto do método de qualquer um dentre o primeiro ao oitavo aspectos, em que uma tabela de sintaxe de unidade de codificação e uma tabela de sintaxe de árvore de transformada são sinalizadas, de acordo com as seguintes tabelas: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor … SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … } transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ )
transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ )
transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
[0265] Um décimo aspecto de um codificador (20) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0266] Um décimo primeiro aspecto de um decodificador (30) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0267] Um décimo segundo aspecto de um produto de programa de computador compreendendo um código de programa para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0268] Um décimo terceiro aspecto de um decodificador ou um codificador, compreendendo: um ou mais processadores; e uma mídia de armazenamento legível por computador não transitória acoplada aos processadores e armazenando a programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para realizar o método, de acordo com qualquer um dentre o primeiro ao nono aspectos.
[0269] A presente revelação inclui adicionalmente os seguintes quatorze aspectos.
[0270] Um primeiro aspecto de um método de codificação implementado por um dispositivo de decodificação ou dispositivo de codificação, o método compreende: obter um fluxo de bits, o fluxo de bits compreende uma sintaxe de unidade de transformada, (em um exemplo, o elemento de sintaxe de unidade de transformada pode ser tanto codificado por um bloco inteiro quanto codificado por múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco (SBT) para bloco inter, ou de modo a satisfazer as restrições de tamanho de unidade de transformada máxima); a sintaxe compreende pelo menos dois sinalizadores cbf para blocos croma (em um exemplo, a sintaxe de unidade de transformada corresponde tanto à unidade de transformada quanto às unidades de subtransformada que incluem dois sinalizadores cbf croma: tu_cbf_cb e tu_cbf_cb - um sinalizador para cada plano de croma), um sinalizador cbf croma especifica se determinado bloco tem resíduo em plano de cor correspondente; derivar um valor de um sinalizador cbf luma tu_cbf_luma com base em um ou qualquer combinação de um valor de um sinalizador cu_cbf, valores de dois sinalizadores cbf croma correspondentes a uma unidade de transformada atual ou unidade de subtransformada, localização da unidade de subtransformada dentro da unidade de transformada, valores de luma e sinalizadores cbf croma correspondentes às unidades de subtransformada anteriores na unidade de transformada atual.
[0271] Um segundo aspecto do método do primeiro aspecto, em que o valor do sinalizador cbf luma (por exemplo, um sinalizador tu_cbf_luma) é derivado com base no valor do sinalizador cu_cbf e valores dos dois sinalizadores cbf croma correspondentes à unidade de transformada atual.
[0272] Um terceiro aspecto de um método do segundo aspecto, quando a unidade de transformada atual não é dividida em unidades de subtransformada, o sinalizador cu_cbf é sinalizado no fluxo de bits e um valor do sinalizador cu_cbf é igual a 1, o valor de sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de transformada atual é derivado para 1.
[0273] Um quarto aspecto do método do terceiro aspecto, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( IntraSubPartitionsSplitType == ISP_NO_SPLIT && ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0274] Um quinto aspecto do método, de acordo com o terceiro aspecto, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType = = ISP_NO_SPLIT){ if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0275] Um sexto aspecto do método, de acordo com o primeiro ou segundo aspecto, quando a unidade de transformada atual é dividida por SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, que permite sinalizadores cbf não nulos, é derivado, de acordo com a seguinte condição: - quando o valor do sinalizador cu_cbf é 1, e o valor do sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para 1.
[0276] Um sétimo aspecto do método de qualquer um dentre o primeiro ao sexto aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) | |( (IntraSubPartitionsSplitType != ISP_NO_SPLIT) && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0277] Um oitavo aspecto do método do primeiro ao sexto aspectos, em que uma tabela de sintaxe de unidade de transformada é sinalizada, de acordo com a seguinte tabela: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType == ISP_NO_SPLIT){
if !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
[0278] Um nono aspecto do método de qualquer um dentre o primeiro ao oitavo aspectos, em que uma tabela de sintaxe de unidade de codificação e uma tabela de sintaxe de árvore de transformada são sinalizadas, de acordo com as seguintes tabelas: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor … SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … } transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
[0279] Um décimo aspecto do método de qualquer um dentre o primeiro ao nono aspectos, em que se o valor de tu_cbf_luma[x0][y0] não estiver presente, e o valor de tu_cbf_luma[x0][y0] for derivado, de acordo com as seguintes condições: - quando tu_cbf_luma[x0][y0] não está presente na TU atual, seu valor é inferido, como segue: • - Se cu_sbt_flag for igual a 1 e qualquer uma dentre as seguintes condições for verdadeira, tu_cbf_luma[x0][y0] é inferido para ser igual a 0. o subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; o subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; • - De outro modo, tu_cbf_luma[x0][y0] é inferido para ser igual a
1.
[0280] Um décimo primeiro aspecto de um codificador (20) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao décimo aspectos.
[0281] Um décimo segundo aspecto de um decodificador (30) compreendendo circuitos de processamento para realizar o método, de acordo com qualquer um dentre o primeiro ao décimo aspectos.
[0282] Um décimo terceiro aspecto de um produto de programa de computador compreendendo um código de programa para realizar o método, de acordo com qualquer um dentre o primeiro ao décimo aspectos.
[0283] Um décimo quarto aspecto de um decodificador ou um codificador, compreendendo: um ou mais processadores; e uma mídia de armazenamento legível por computador não transitória acoplada aos processadores e armazenando a programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para realizar o método, de acordo com qualquer um dentre o primeiro ao décimo aspectos.

Claims (31)

REIVINDICAÇÕES
1. Método de codificação de vídeo implementado por um dentre um dispositivo de decodificação e um dispositivo de codificação, CARACTERIZADO pelo fato de que compreende: obter um fluxo de bits, o fluxo de bits compreendendo uma sintaxe de unidade de transformada; obter, de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma dentre uma unidade de transformada atual e uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma dos pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf, e nos valores dos pelo menos dois sinalizadores cbf croma.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que o valor do sinalizador cbf luma é adicionalmente derivado com base em uma localização da unidade de subtransformada atual dentro da unidade de transformada atual.
3. Método, de acordo com a reivindicação 1 ou 2, CARACTERIZADO pelo fato de que a sintaxe de unidade de transformada compreende os pelo menos dois sinalizadores cbf croma, a obtenção, de acordo com a sintaxe de unidade de transformada, de valores de pelo menos dois sinalizadores cbf croma compreende: obter valores de pelo menos dois sinalizadores cbf croma a partir da sintaxe de unidade de transformada.
4. Método, de acordo com qualquer uma das reivindicações 1 a 3, CARACTERIZADO pelo fato de que o sinalizador cbf luma é um sinalizador tu_cbf_luma.
5. Método, de acordo com qualquer uma das reivindicações 1 a 4, CARACTERIZADO pelo fato de que para a sintaxe de unidade de transformada, o elemento de sintaxe de unidade de transformada é sinalizado de acordo com um dentre os seguintes:
sinalizado para um bloco inteiro; sinalizado para múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco, SBT, para bloco inter; e sinalizado de modo a satisfazer as restrições de tamanho de unidade de transformada máxima.
6. Método, de acordo com qualquer uma das reivindicações 1 a 5, CARACTERIZADO pelo fato de que uma dentre a unidade de transformada atual e a unidade de subtransformada atual inclue dois sinalizadores cbf croma, com um sinalizador para cada plano de croma, respectivamente.
7. Método, de acordo com qualquer uma das reivindicações 1 a 6, CARACTERIZADO pelo fato de que se a unidade de transformada atual não for dividida em unidades de subtransformada, o sinalizador cu_cbf é sinalizado no fluxo de bits e um valor do sinalizador cu_cbf se iguala a 1, o valor de sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então o valor do sinalizador tu_cbf_luma para a unidade de transformada atual é derivado para 1.
8. Método, de acordo com qualquer uma das reivindicações 1 a 6, CARACTERIZADO pelo fato de que se a unidade de transformada atual for dividida por Transformada de Sub-Bloco, SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, a qual permite sinalizadores cbf não nulos, é derivado de acordo com a seguinte condição: se o valor do sinalizador cu_cbf for 1, e o valor do sinalizador tu_cbf_cb for 0 e o valor do sinalizador tu_cbf_cr for 0, então o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para ser 1.
9. Método, de acordo com qualquer uma das reivindicações 1 a 8, CARACTERIZADO pelo fato de que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada é sinalizada de acordo com uma dentre as seguintes tabelas: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ] yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC
} else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
; transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ] yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC } else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
; transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType = = ISP_NO_SPLIT){
if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … } ;e transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType == ISP_NO_SPLIT){ if !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … } .
10. Método, de acordo com qualquer uma das reivindicações 1 a 8, CARACTERIZADO pelo fato de que uma tabela de sintaxe de árvore de transformada correspondente à sintaxe de unidade de transformada é sinalizada de acordo com a seguinte tabela: transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) {
if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY )
transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 )
transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ )
transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ )
transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx ) } }
em que uma tabela de sintaxe de unidade de codificação correspondente à tabela de sintaxe de árvore de transformada é sinalizada de acordo com a seguinte tabela: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor …
SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … } .
11. Método, de acordo com a reivindicação 9 ou 10, CARACTERIZADO pelo fato de que treeType é igual a SINGLE_TREE.
12. Método, de acordo com qualquer uma das reivindicações 1 a 11, CARACTERIZADO pelo fato de que o sinalizador cbf luma é um sinalizador tu_cbf_luma, e se o valor de tu_cbf_luma[ x0 ][ y0 ] não estiver presente, o valor de tu_cbf_luma[ x0 ][ y0 ] é derivado de acordo com um dentre os seguintes dois conjuntos de condições: um primeiro conjunto de condições: se tu_cbf_luma[ x0 ][ y0 ] não estiver presente, seu valor é inferido como segue: se cu_sbt_flag for igual a 1 e uma das seguintes condições for verdadeira, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 0: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; de outro modo, se treeType for igual a DUAL_TREE_CHROMA, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 0; de outro modo, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 1; e um segundo conjunto de condições: se tu_cbf_luma[ x0 ][ y0 ] não estiver presente na TU atual, seu valor é inferido como segue: se cu_sbt_flag for igual a 1 e qualquer uma das seguintes condições for verdadeira: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; então tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 0; de outro modo, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 1.
13. Método, de acordo com qualquer uma das reivindicações de 1 a 12, CARACTERIZADO pelo fato de que tu_cbf_luma[ x0 ][ y0 ] igual a 1 especifica que o bloco de transformada luma contém pelo menos um nível de coeficiente de transformada diferente de 0; em que índices de matriz x0, y0 especificam a localização (x0, y0) da amostra luma superior esquerda do bloco de transformada considerado em relação à amostra luma superior esquerda da imagem; em que um nível de coeficiente de transformada é uma quantidade inteira que representa o valor associado com um índice de frequência bidimensional particular no processo de decodificação antes do escalonamento para computação de um valor de coeficiente de transformada.
14. Codificador (20) ou decodificador (30), CARACTERIZADO pelo fato de que compreende circuitos de processamento para realizar o método conforme definido em qualquer uma das reivindicações 1 a 13.
15. Produto de programa de computador, CARACTERIZADO pelo fato de que compreende um código de programa para realizar o método confome definido em qualquer uma das reivindicações 1 a 13.
16. Decodificador (30) ou codificador (20), CARACTERIZADO pelo fato de que compreende: pelo menos um processador; e uma mídia de armazenamento legível por computador não transitória acoplada a pelo menos um processador e armazenando programação para execução por pelo menos um processador, em que a programação, quando executada por pelo menos um processador, configura o decodificador para realizar o método conforme definido em qualquer uma das reivindicações 1 a 13.
17. Codificador (20), CARACTERIZADO pelo fato de que compreende: uma unidade de obtenção (2001), configurada para obter um fluxo de bits, o fluxo de bits compreendendo uma sintaxe de unidade de transformada; a unidade de obtenção (2001) configurada para obter de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma dentre uma unidade de transformada atual e uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma dos pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; uma unidade de derivação (2003), configurada para derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf, e nos valores dos pelo menos dois sinalizadores cbf croma.
18. Decodificador (30), CARACTERIZADO pelo fato de que compreende: uma unidade de obtenção (3001), configurada para obter um fluxo de bits, o fluxo de bits compreendendo uma sintaxe de unidade de transformada; a unidade de obtenção (3001) configurada para obter de acordo com a sintaxe de unidade de transformada, valores de pelo menos dois sinalizadores cbf croma (sinalizadores de bloco codificado croma) para blocos croma correspondentes a uma dentre uma unidade de transformada atual e uma unidade de subtransformada atual dentro da unidade de transformada atual, em que um sinalizador cbf croma dos pelo menos dois sinalizadores cbf croma especifica se um bloco correspondente tem um resíduo em um plano de cor correspondente; uma unidade de derivação (3003), configurada para derivar um valor de um sinalizador cbf luma pelo menos com base em: um valor de um sinalizador cbf de unidade de codificação, sinalizador cu_cbf, e nos valores dos pelo menos dois sinalizadores cbf croma.
19. Decodificador (30), de acordo com a reivindicação 18, CARACTERIZADO pelo fato de que o valor do sinalizador cbf luma é adicionalmente derivado com base em uma localização da unidade de subtransformada atual dentro da unidade de transformada atual.
20. Decodificador (30), de acordo com a reivindicação 18 ou 19, CARACTERIZADO pelo fato de que a sintaxe de unidade de transformada compreende os pelo menos dois sinalizadores cbf croma, a obtenção, de acordo com a sintaxe de unidade de transformada, de valores de pelo menos dois sinalizadores cbf croma compreende: obter valores de pelo menos dois sinalizadores cbf croma a partir da sintaxe de unidade de transformada.
21. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 20, CARACTERIZADO pelo fato de que o sinalizador cbf luma é um sinalizador tu_cbf_luma.
22. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 21, CARACTERIZADO pelo fato de que para a sintaxe de unidade de transformada, o elemento de sintaxe de unidade de transformada é sinalizado de acordo com um dentre os seguintes: sinalizado para um bloco inteiro; sinalizado para múltiplas unidades de subtransformada que são obtidas por Transformada de Sub-Bloco, SBT, para bloco inter; e sinalizado de modo a satisfazer restrições de tamanho de unidade de transformada máxima.
23. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 22, CARACTERIZADO pelo fato de que uma dentre a unidade de transformada e as unidades de subtransformada inclui dois sinalizadores cbf croma, com um sinalizador para cada plano de croma, respectivamente.
24. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 23, CARACTERIZADO pelo fato de que o valor do sinalizador cbf luma é derivado com base no valor do sinalizador cu_cbf e nos valores dos dois sinalizadores cbf croma correspondentes à unidade de transformada atual.
25. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 24, CARACTERIZADO pelo fato de que se a unidade de transformada atual não for dividida em unidades de subtransformada, o sinalizador cu_cbf é sinalizado no fluxo de bits e um valor do sinalizador cu_cbf se iguala a 1, o valor de sinalizador tu_cbf_cb é 0 e o valor do sinalizador tu_cbf_cr é 0, então o valor do sinalizador tu_cbf_luma para a unidade de transformada atual é derivado para 1.
26. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 25, CARACTERIZADO pelo fato de que se a unidade de transformada atual for dividida por Transformada de Sub-Bloco, SBT, o valor do sinalizador tu_cbf_luma para a unidade de subtransformada, que permite sinalizadores cbf não nulos, é derivado de acordo com a seguinte condição: se o valor do sinalizador cu_cbf for 1, e o valor do sinalizador tu_cbf_cb for 0 e o valor do sinalizador tu_cbf_cr for 0, então o valor do sinalizador tu_cbf_luma para a unidade de subtransformada atual é derivado para ser 1.
27. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 26, CARACTERIZADO pelo fato de que uma tabela de sintaxe de unidade de transformada correspondente à sintaxe de unidade de transformada é sinalizada de acordo com uma dentre as seguintes tabelas: transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ] yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC } else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
; transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { Descritor if( IntraSubPartitionsSplitType != ISP_NO_SPLIT && treeType = = SINGLE_TREE && subTuIndex = = NumIntraSubPartitions − 1 ) { xC = CbPosX[ chType ][ x0 ][ y0 ] yC = CbPosY[ chType ][ x0 ][ y0 ] wC = CbWidth[ chType ][ x0 ][ y0 ] / SubWidthC hC = CbHeight[ chType ][ x0 ][ y0 ] / SubHeightC } else { xC = x0 yC = y0 wC = tbWidth / SubWidthC hC = tbHeight / SubHeightC } chromaAvailable = treeType != DUAL_TREE_LUMA && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && subTuIndex = = NumIntraSubPartitions − 1 ) ) if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) && ChromaArrayType != 0 && ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ xC ][ yC ] ae(v) tu_cbf_cr[ xC ][ yC ] ae(v) } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) && ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | | ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) ) | | CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) ) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
;
transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType = = ISP_NO_SPLIT){ if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma ) tu_cbf_luma[ x0 ][ y0 ] ae(v) … }
;e transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex ) { Descritor if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) { if( ( IntraSubPartitionsSplitType = = ISP_NO_SPLIT && ) | | ( IntraSubPartitionsSplitType != ISP_NO_SPLIT && ( subTuIndex = = NumIntraSubPartitions − 1 ) ) ) { tu_cbf_cb[ x0 ][ y0 ] ae(v) tu_cbf_cr[ x0 ][ y0 ] ae(v) } } if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) { if(IntraSubPartitionsSplitType == ISP_NO_SPLIT){ if !( cu_sbt_flag && ( ( subTuIndex = = 0 && cu_sbt_pos_flag ) | | ( subTuIndex = = 1 && !cu_sbt_pos_flag ) ) ) if ((CuPredMode[ x0 ][ y0 ] = = MODE_INTRA | | tu_cbf_cb[x0 ][ y0 ] | | tu_cbf_cr[ x0 ][ y0 ] ) | | (CbWidth[ x0 ][ y0 ] > MaxTbSizeY | | CbHeight[ x0 ][ y0 ] > MaxTbSizeY )) ) tu_cbf_luma[ x0 ][ y0 ] ae(v) } else if ( subTuIndex < NumIntraSubPartitions − 1 | | !InferTuCbfLuma )
tu_cbf_luma[ x0 ][ y0 ] ae(v) … } .
28. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 26, CARACTERIZADO pelo fato de que uma tabela de sintaxe de árvore de transformada correspondente à sintaxe de unidade de transformada é sinalizada de acordo com a seguinte tabela: transform_tree( x0, y0, tbWidth, tbHeight , treeType) { Descritor InferTuCbfLuma = 1 if( IntraSubPartSplitType = = NO_ISP_SPLIT ) { if( tbWidth > MaxTbSizeY | | tbHeight > MaxTbSizeY ) { trafoWidth = ( tbWidth > MaxTbSizeY ) ? (tbWidth / 2) : tbWidth trafoHeight = ( tbHeight > MaxTbSizeY ) ? (tbHeight / 2) : tbHeight transform_tree( x0, y0, trafoWidth, trafoHeight ) if( tbWidth > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0, trafoWidth, trafoHeight, treeType ) if( tbHeight > MaxTbSizeY ) transform_tree( x0, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) if( tbWidth > MaxTbSizeY && tbHeight > MaxTbSizeY ) transform_tree( x0 + trafoWidth, y0 + trafoHeight, trafoWidth, trafoHeight, treeType ) } else { transform_unit( x0, y0, tbWidth, tbHeight, treeType, SubTuIdx++ ) } } else if( cu_sbt_flag ) { if( !cu_sbt_horizontal_flag ) { trafoWidth = tbWidth * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, trafoWidth, tbHeight, treeType , 0 ) transform_unit( x0 + trafoWidth, y0, tbWidth − trafoWidth , tbHeight, treeType , 1 ) } else { trafoHeight = tbHeight * SbtNumFourthsTb0 / 4 transform_unit( x0, y0, tbWidth, trafoHeight, treeType , 0 ) transform_unit( x0, y0 + trafoHeight, tbWidth, tbHeight − trafoHeight, treeType , 1 ) } } else if( IntraSubPartitionsSplitType = = ISP_HOR_SPLIT ) { trafoHeight = tbHeight / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0, y0 + trafoHeight * partIdx, tbWidth, trafoHeight, treeType, partIdx ) } else if( IntraSubPartitionsSplitType = = ISP_VER_SPLIT ) { trafoWidth = tbWidth / NumIntraSubPartitions for( partIdx = 0; partIdx < NumIntraSubPartitions; partIdx++ ) transform_unit( x0 + trafoWidth * partIdx, y0, trafoWidth, tbHeight, treeType, partIdx )
} } em que uma tabela de sintaxe de unidade de codificação correspondente à tabela de sintaxe de árvore de transformada é sinalizada de acordo com a seguinte tabela: coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Descritor … SubTuIdx = 0 transform_tree( x0, y0, cbWidth, cbHeight, treeType ) … } .
29. Decodificador (30), de acordo com qualquer uma das reivindicações 27 ou 28, CARACTERIZADO pelo fato de que treeType é igual a SINGLE_TREE.
30. Decodificador (30), de acordo com qualquer uma das reivindicações 23 a 29, CARACTERIZADO pelo fato de que o sinalizador cbf luma é um sinalizador tu_cbf_luma, e se o valor de tu_cbf_luma[ x0 ][ y0 ] não estiver presente, o valor de tu_cbf_luma[ x0 ][ y0 ] é derivado de acordo com um dentre os seguintes dois conjuntos de condições: um primeiro conjunto de condições: se tu_cbf_luma[ x0 ][ y0 ] não estiver presente, seu valor é inferido como segue: se cu_sbt_flag for igual a 1 e uma das seguintes condições for verdadeira, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 0: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1; subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; de outro modo, se treeType for igual a DUAL_TREE_CHROMA, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 0; de outro modo, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 1; e um segundo conjunto de condições: se tu_cbf_luma[ x0 ][ y0 ] não estiver presente na TU atual, seu valor é inferido como segue: se cu_sbt_flag for igual a 1 e qualquer uma das seguintes condições for verdadeira: subTuIndex é igual a 0 e cu_sbt_pos_flag é igual a 1;
subTuIndex é igual a 1 e cu_sbt_pos_flag é igual a 0; então tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 0; de outro modo, tu_cbf_luma[ x0 ][ y0 ] é inferido para ser igual a 1.
31. Decodificador (30), de acordo com qualquer uma das reivindicações 18 a 30, CARACTERIZADO pelo fato de que tu_cbf_luma[ x0 ][ y0 ] igual a 1 especifica que o bloco de transformada luma contém pelo menos um nível de coeficiente de transformada diferente de 0; em que índices de matriz x0, y0 especificam a localização (x0, y0) da amostra luma superior esquerda do bloco de transformada considerado em relação à amostra luma superior esquerda da imagem; em que um nível de coeficiente de transformada é uma quantidade inteira que representa o valor associado com um índice de frequência bidimensional particular no processo de decodificação antes do escalonamento para computação de um valor de coeficiente de transformada.
BR112020026183-1A 2019-03-01 2020-03-02 Método de codificação de vídeo, codificador, decodificador e produto de programa de computador BR112020026183A2 (pt)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201962812282P 2019-03-01 2019-03-01
US62/812,282 2019-03-01
US201962817498P 2019-03-12 2019-03-12
US62/817,498 2019-03-12
US201962825005P 2019-03-27 2019-03-27
US62/825,005 2019-03-27
EP2019064224 2019-05-31
EMPCT/EP2019/064224 2019-05-31
PCT/RU2020/050033 WO2020180214A1 (en) 2019-03-01 2020-03-02 The method of efficient signalling of cbf flags

Publications (1)

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

Family

ID=72337453

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112020026183-1A BR112020026183A2 (pt) 2019-03-01 2020-03-02 Método de codificação de vídeo, codificador, decodificador e produto de programa de computador

Country Status (11)

Country Link
US (3) US11375213B2 (pt)
EP (1) EP3868100A4 (pt)
JP (2) JP7251882B2 (pt)
KR (2) KR20240011253A (pt)
CN (1) CN113039797A (pt)
AU (1) AU2020232820A1 (pt)
BR (1) BR112020026183A2 (pt)
CA (1) CA3121220A1 (pt)
IL (1) IL286033B2 (pt)
MX (1) MX2021008404A (pt)
WO (1) WO2020180214A1 (pt)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117676139A (zh) * 2019-03-11 2024-03-08 北京达佳互联信息技术有限公司 视频编解码中变换系数的编解码
JP7390395B2 (ja) * 2019-03-12 2023-12-01 フラウンホーファー-ゲゼルシャフト・ツール・フェルデルング・デル・アンゲヴァンテン・フォルシュング・アインゲトラーゲネル・フェライン 画像及びビデオコード化のための選択的成分間変換(ict)

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9807426B2 (en) * 2011-07-01 2017-10-31 Qualcomm Incorporated Applying non-square transforms to video data
WO2013018296A1 (ja) * 2011-07-29 2013-02-07 パナソニック株式会社 動画像符号化方法、動画像復号方法、動画像符号化装置、動画像復号装置、及び動画像符号化復号装置
US8804816B2 (en) * 2011-08-30 2014-08-12 Microsoft Corporation Video encoding enhancements
US9807401B2 (en) * 2011-11-01 2017-10-31 Qualcomm Incorporated Transform unit partitioning for chroma components in video coding
LT3197162T (lt) * 2011-12-15 2020-05-11 Tagivan Ii Llc Skaisčio-spalvio koduoto bloko žymų (cbf) signalo perdavimas vaizdo kodavime
WO2013107027A1 (en) * 2012-01-19 2013-07-25 Mediatek Singapore Pte. Ltd. Methods and apparatuses of cbf coding in hevc
US9467701B2 (en) * 2012-04-05 2016-10-11 Qualcomm Incorporated Coded block flag coding
WO2018045332A1 (en) * 2016-09-02 2018-03-08 Vid Scale, Inc. Methods and apparatus for coded block flag coding in quad-tree plus binary-tree block partitioning
US10523966B2 (en) * 2017-03-31 2019-12-31 Mediatek Inc. Coding transform blocks

Also Published As

Publication number Publication date
CA3121220A1 (en) 2020-09-10
IL286033B2 (en) 2023-03-01
US11375213B2 (en) 2022-06-28
US20210352304A1 (en) 2021-11-11
AU2020232820A8 (en) 2021-07-08
JP7251882B2 (ja) 2023-04-04
JP2023085351A (ja) 2023-06-20
CN113039797A (zh) 2021-06-25
WO2020180214A1 (en) 2020-09-10
KR20240011253A (ko) 2024-01-25
MX2021008404A (es) 2021-08-16
IL286033B (en) 2022-11-01
KR102626200B1 (ko) 2024-01-19
AU2020232820A1 (en) 2021-06-10
US20220295082A1 (en) 2022-09-15
KR20210087088A (ko) 2021-07-09
IL286033A (en) 2021-10-31
JP2022522083A (ja) 2022-04-14
US20230353760A1 (en) 2023-11-02
EP3868100A4 (en) 2021-12-29
EP3868100A1 (en) 2021-08-25
US11716479B2 (en) 2023-08-01

Similar Documents

Publication Publication Date Title
BR112021000935A2 (pt) codificador, decodificador e métodos correspondentes usando buffer dedicado de ibc e atualização de valor padrão para componente luma e croma
JP7205038B2 (ja) 任意のctuサイズのためのibc検索範囲最適化を用いるエンコーダ、デコーダおよび対応する方法
BR112021000379A2 (pt) Método e aparelho para sinalização de função de mapeamento de parâmetro de quantização de croma
BR112021016677A2 (pt) Método e aparelho para predição inter baseada em afim de sub-blocos de croma
US11758137B2 (en) Encoder, decoder and corresponding methods using DCT2 enabled high level flag
BR112021009911A2 (pt) codificador, decodificador e métodos correspondentes usando armazenamento de mv compacto
BR112021010286A2 (pt) codificador, decodificador e métodos correspondentes de construção de lista de modos mais prováveis para blocos com predição de múltiplas hipóteses
US20230353760A1 (en) The method of efficient signalling of cbf flags
BR112021011723A2 (pt) Método e aparelho de predição intra e codificador, decodificador, programa de computador, mídia de armazenamento não transitória, e fluxo de bits
BR112021009922A2 (pt) Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, codificador, decodificador, produto de programa de computador e dispositivo de decodificação de dados de vídeo
AU2019368125B2 (en) Separate merge list for subblock merge candidates and intra-inter techniques harmonization for video coding
BR112021016270A2 (pt) Método de codificação de vídeo e codificador, decodificador, meio legível por computador
WO2021037053A1 (en) An encoder, a decoder and corresponding methods of cabac coding for the indices of geometric partition flag
KR102475963B1 (ko) 변환 프로세스를 위해 사용되는 인코더, 디코더 및 대응하는 방법
BR112021009833A2 (pt) codificador, decodificador e métodos correspondentes para predição inter
KR20210122800A (ko) 인트라 서브 파티션 코딩 모드 도구로부터 서브 파티션의 크기를 제한하는 인코더, 디코더 및 대응하는 방법