BR112017020635B1 - METHOD FOR DECODING VIDEO DATA, METHOD AND APPARATUS FOR ENCODING VIDEO DATA, AND COMPUTER READABLE MEMORY - Google Patents
METHOD FOR DECODING VIDEO DATA, METHOD AND APPARATUS FOR ENCODING VIDEO DATA, AND COMPUTER READABLE MEMORY Download PDFInfo
- Publication number
- BR112017020635B1 BR112017020635B1 BR112017020635-8A BR112017020635A BR112017020635B1 BR 112017020635 B1 BR112017020635 B1 BR 112017020635B1 BR 112017020635 A BR112017020635 A BR 112017020635A BR 112017020635 B1 BR112017020635 B1 BR 112017020635B1
- Authority
- BR
- Brazil
- Prior art keywords
- motion
- motion information
- block
- video
- motion vector
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 232
- 238000009795 derivation Methods 0.000 claims abstract description 189
- 239000013598 vector Substances 0.000 claims description 301
- 230000002146 bilateral effect Effects 0.000 claims description 61
- 230000002123 temporal effect Effects 0.000 claims description 44
- 238000002156 mixing Methods 0.000 claims description 17
- 238000007670 refining Methods 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 abstract description 43
- 230000008569 process Effects 0.000 description 56
- 238000005192 partition Methods 0.000 description 25
- 241000023320 Luma <angiosperm> Species 0.000 description 24
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 24
- 239000000203 mixture Substances 0.000 description 21
- 238000010586 diagram Methods 0.000 description 20
- 238000012545 processing Methods 0.000 description 20
- 238000003860 storage Methods 0.000 description 20
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 19
- 230000002457 bidirectional effect Effects 0.000 description 18
- 238000004891 communication Methods 0.000 description 18
- 238000013139 quantization Methods 0.000 description 18
- 238000000638 solvent extraction Methods 0.000 description 14
- 238000012805 post-processing Methods 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 10
- 101100537098 Mus musculus Alyref gene Proteins 0.000 description 8
- 101150095908 apex1 gene Proteins 0.000 description 8
- 238000010845 search algorithm Methods 0.000 description 8
- 238000013500 data storage Methods 0.000 description 7
- 229910003460 diamond Inorganic materials 0.000 description 7
- 239000010432 diamond Substances 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 230000011664 signaling Effects 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 6
- 229920001091 Poly(octyl cyanoacrylate) Polymers 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000006073 displacement reaction Methods 0.000 description 5
- 238000005457 optimization Methods 0.000 description 5
- 238000012935 Averaging Methods 0.000 description 4
- 230000003044 adaptive effect Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 4
- DNORZUSMZSZZKU-UHFFFAOYSA-N ethyl 2-[5-(4-chlorophenyl)pentyl]oxirane-2-carboxylate Chemical compound C=1C=C(Cl)C=CC=1CCCCCC1(C(=O)OCC)CO1 DNORZUSMZSZZKU-UHFFFAOYSA-N 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 239000011159 matrix material Substances 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 101150114515 CTBS gene Proteins 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 238000013138 pruning Methods 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 241000985610 Forpus Species 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 102100037812 Medium-wave-sensitive opsin 1 Human genes 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000013213 extrapolation Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000003116 impacting effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012432 intermediate storage Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Abstract
DETERMINAÇÃO DE MODO DE DERIVAÇÃO DE INFORMAÇÕES DE MOVIMENTO EM CONVERSÃO DE VÍDEO EM CÓDIGO. Em um exemplo, um método para decodificar dados de vídeo inclui selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência. O método também inclui determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado. O método também inclui decodificar o bloco atual com o uso das informações de movimento determinadas e sem decodificar elementos de sintaxe representativos das informações de movimento.DETERMINING MOTION INFORMATION DERIVATION MODE IN VIDEO-TO-CODE CONVERSION. In one example, a method for decoding video data includes selecting a motion information derivation mode from a plurality of motion information derivation modes to determine motion information for a current block, wherein each motion information derivation mode of the plurality comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside the current block, and wherein the motion information indicates motion of the current block relative to the reference video data. The method also includes determining motion information for the current block using the selected motion information derivation mode. The method also includes decoding the current block using the determined motion information and without decoding syntax elements representative of the motion information.
Description
[001] Este pedido reivindica o benefício do Pedido Provisório sob no U.S. 62/139.572 depositado em 27 de março de 2015 e do Pedido Provisório sob no U.S. 62/182.367 depositado em 19 de junho de 2015, cujos conteúdos inteiros são incorporados no presente documento, a título de referência.[001] This application claims the benefit of Provisional Application No. U.S. 62/139,572 filed on March 27, 2015, and Provisional Application No. U.S. 62/182,367 filed on June 19, 2015, the entire contents of which are incorporated herein by reference.
[002] Esta revelação refere-se à conversão em código de vídeo.[002] This disclosure relates to video code conversion.
[003] As capacidades de vídeo digital podem ser incorporadas em uma grande variedade de dispositivos, incluindo televisões digitais, sistemas de difusão direta digital, sistema de difusão sem fio, assistentes digitais pessoais (PDAs), computadores do tipo laptop ou desktop, computadores do tipo tablet, leitores de e-book, câmeras digitais, dispositivos de gravação digital, reprodutores de mídia digital, dispositivos de jogos eletrônicos, consoles de jogos eletrônicos, telefones de rádio via satélite ou celular, os chamados de "telefones inteligentes", dispositivos de teleconferência por vídeo, dispositivos de transmissão contínua de vídeo e similares. Os dispositivos de vídeo digital implantam técnicas de conversão em código de vídeo como aqueles descritos nos padrões definidos por MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Parte 10, Codificação de Vídeo Avançada (AVC), o padrão de Codificação de Vídeo de Alta Eficiência (HEVC) e extensões de tais padrões. Os dispositivos de vídeo podem transmitir, receber, codificar, decodificar e/ou armazenar informações de vídeo digital de maneira mais eficiente implantando-se tais técnicas de conversão em código de vídeo.[003] Digital video capabilities can be incorporated into a wide variety of devices, including digital televisions, digital direct broadcast systems, wireless broadcast systems, personal digital assistants (PDAs), laptop or desktop computers, tablet computers, e-book readers, digital cameras, digital recording devices, digital media players, electronic gaming devices, electronic game consoles, satellite or cellular radio telephones, so-called "smart phones", video teleconferencing devices, video streaming devices, and the like. Digital video devices implement video coding techniques such as those described in the standards defined by MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Part 10, Advanced Video Coding (AVC), the High Efficiency Video Coding (HEVC) standard, and extensions of such standards. Video devices can transmit, receive, encode, decode, and/or store digital video information more efficiently by implementing such video code conversion techniques.
[004] As técnicas de conversão em código de vídeo incluem predição espacial (intraimagem) e/ou predição temporal (interimagem) para reduzir ou remover a redundância inerente em sequências de vídeo. Para a conversão em código de vídeo com base em bloco, uma fatia de vídeo (por exemplo, um quadro de vídeo ou uma porção de um quadro de vídeo) pode ser particionada em blocos de vídeo que, para algumas técnicas, também podem ser denominados como blocos em árvore, unidades de conversão código (CUs) e/ou nós de conversão em código. Os blocos de vídeo em uma fatia intraconvertida em código (I) de uma imagem são codificados com o uso de predição espacial em relação às amostras de referência em blocos próximos na mesma imagem. Os blocos de vídeo em uma fatia interconvertida em código (P ou B) de uma imagem podem usar predição espacial em relação a amostras de referência em blocos próximos na mesma imagem ou predição temporal em relação às amostras de referência em outras imagens de referência. As imagens podem ser denominadas como quadros e as imagens de referência podem ser denominadas como quadros de referência.[004] Video coding techniques include spatial (intra-picture) prediction and/or temporal (inter-picture) prediction to reduce or remove inherent redundancy in video sequences. For block-based video coding, a video slice (e.g., a video frame or a portion of a video frame) may be partitioned into video blocks, which for some techniques may also be referred to as tree blocks, coding units (CUs), and/or coding nodes. Video blocks in an intra-coded (I) slice of a picture are coded using spatial prediction with respect to reference samples in nearby blocks in the same picture. Video blocks in an inter-coded (P or B) slice of a picture may use spatial prediction with respect to reference samples in nearby blocks in the same picture or temporal prediction with respect to reference samples in other reference pictures. Pictures may be referred to as frames and reference pictures may be referred to as reference frames.
[005] A predição espacial ou temporal resulta em um bloco preditivo para um bloco a ser convertido em código. Os dados residuais representam diferenças de pixel entre o bloco original a ser convertido em código e o bloco preditivo. Um bloco interconvertido em código é codificado de acordo com um vetor de movimento que aponta para um bloco de amostras de referência que forma o bloco preditivo, e em que os dados residuais indicam a diferença entre o bloco convertido em código e o bloco preditivo. Um bloco intraconvertido em código é codificado de acordo com um modo de intraconversão em código e os dados residuais. Para compactação adicional, os dados residuais podem ser transformados do domínio de pixel para um domínio de transformada, resultando em coeficientes de transformada residuais que podem, então, ser quantizados. Os coeficientes de transformada quantizados dispostos inicialmente em uma matriz bidimensional podem ser varridos a fim de produzir um vetor monodimensional de coeficiente de transformada e a conversão em código por entropia pode ser aplicada para conseguir ainda mais compactação.[005] Spatial or temporal prediction results in a predictive block for a block to be coded. Residual data represents pixel differences between the original block to be coded and the predictive block. An inter-coded block is coded according to a motion vector pointing to a block of reference samples forming the predictive block, and wherein the residual data indicates the difference between the coded block and the predictive block. An intra-coded block is coded according to an intra-coded mode and the residual data. For further compression, the residual data may be transformed from the pixel domain to a transform domain, resulting in residual transform coefficients that can then be quantized. The quantized transform coefficients initially arranged in a two-dimensional array may be scanned to produce a one-dimensional transform coefficient vector, and entropy coding may be applied to achieve further compression.
[006] As técnicas desta revelação se referem à derivação de informações de movimento na conversão em código de vídeo. Por exemplo, um conversor em código de vídeo (um codificador de vídeo ou decodificador de vídeo) pode gerar informações de movimento que não estão inclusas no fluxo de bits para converter dados de vídeo em código que estão inclusos no fluxo de bits. Derivando-se as informações de movimento no ciclo de codificação ou decodificação, uma economia de bits pode ser alcançada em relação a técnicas que incluem informações de movimento no fluxo de bits como técnicas de interpredição tradicionais.[006] The techniques of this disclosure relate to deriving motion information in video code conversion. For example, a video code converter (a video encoder or video decoder) may generate motion information that is not included in the bit stream to convert video data into code that is included in the bit stream. By deriving the motion information in the encoding or decoding cycle, bit savings may be achieved relative to techniques that include motion information in the bit stream such as traditional interprediction techniques.
[007] Em um exemplo, um método para decodificar dados de vídeo inclui selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e decodificar o bloco atual com o uso das informações de movimento determinadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.[007] In one example, a method for decoding video data includes selecting a motion information derivation mode from a plurality of motion information derivation modes to determine motion information for a current block, wherein each motion information derivation mode of the plurality comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block, and wherein the motion information indicates motion of the current block relative to the reference video data, determining motion information for the current block using the selected motion information derivation mode, and decoding the current block using the determined motion information and without decoding syntax elements representative of the motion information.
[008] Em outro exemplo, um método para codificar dados de vídeo inclui selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e codificar o bloco atual com o uso das informações de movimento determinadas e sem codificar os elementos de sintaxe representativos das informações de movimento.[008] In another example, a method for encoding video data includes selecting a motion information derivation mode from a plurality of motion information derivation modes to determine motion information for a current block, wherein each motion information derivation mode of the plurality comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block, and wherein the motion information indicates motion of the current block relative to the reference video data, and determining motion information for the current block using the selected motion information derivation mode, and encoding the current block using the determined motion information and without encoding syntax elements representative of the motion information.
[009] Em outro exemplo, um dispositivo para converter dados de vídeo em código inclui uma memória configurada para armazenar um bloco atual de dados de vídeo, e um ou mais processadores configurados para selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para o bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e converter em código o bloco atual com o uso das informações de movimento determinadas e sem elementos de sintaxe de conversão em código representativos das informações de movimento.[009] In another example, a device for converting video data to code includes a memory configured to store a current block of video data, and one or more processors configured to select a motion information derivation mode from a plurality of motion information derivation modes to determine motion information for the current block, wherein each motion information derivation mode of the plurality comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block, and wherein the motion information indicates motion of the current block relative to the reference video data, determining the motion information for the current block using the selected motion information derivation mode, and converting to code the current block using the determined motion information and without coding syntax elements representative of the motion information.
[0010] Em outro exemplo, um aparelho para converter dados de vídeo em código inclui meios para selecionar um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, meios para determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado e meios para converter em código o bloco atual com o uso das informações de movimento determinadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.[0010] In another example, an apparatus for converting video data to code includes means for selecting a motion information derivation mode from a plurality of motion information derivation modes to determine motion information for a current block, wherein each motion information derivation mode of the plurality comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block, and wherein the motion information indicates motion of the current block relative to the reference video data, means for determining motion information for the current block using the selected motion information derivation mode, and means for converting to code the current block using the determined motion information and without decoding syntax elements representative of the motion information.
[0011] Em outro exemplo, uma mídia legível por computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores selecionem um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento para determinar informações de movimento para um bloco atual, em que cada modo de derivação de informações de movimento da pluralidade compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, e em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, determinar as informações de movimento para o bloco atual com o uso do modo de derivação de informações de movimento selecionado, e converter em código o bloco atual com o uso das informações de movimento determinadas e sem decodificar elementos de sintaxe representativos das informações de movimento.[0011] In another example, a non-transitory computer-readable medium has instructions stored therein that, when executed, cause one or more processors to select a motion information derivation mode from a plurality of motion information derivation modes to determine motion information for a current block, wherein each motion information derivation mode of the plurality comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block, and wherein the motion information indicates motion of the current block relative to the reference video data, determining motion information for the current block using the selected motion information derivation mode, and encoding the current block using the determined motion information and without decoding syntax elements representative of the motion information.
[0012] Em outro exemplo, um método para processar dados de vídeo inclui determinar um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam o movimento do bloco atual em relação aos dados de vídeo de referência e determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que determinar o vetor de movimento derivado compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.[0012] In another example, a method for processing video data includes determining a candidate motion vector for deriving motion information from a current block of video data, wherein the motion information indicates the motion of the current block relative to reference video data, and determining a derived motion vector for the current block based on the determined candidate motion vector, wherein determining the derived motion vector comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block.
[0013] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar um bloco atual de dados de vídeo, e um ou mais processadores configurados para determinar um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que determinar o vetor de movimento derivado compreende realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.[0013] In another example, a device for processing video data includes a memory configured to store a current block of video data, and one or more processors configured to determine a candidate motion vector for deriving motion information from a current block of video data, wherein the motion information indicates motion of the current block relative to reference video data, and determining a derived motion vector for the current block based on the determined candidate motion vector, wherein determining the derived motion vector comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block.
[0014] Em outro exemplo, um aparelho para processar dados de vídeo inclui meios para determinar um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e meios para determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que os meios para determinar o vetor de movimento derivado compreendem meios para realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.[0014] In another example, an apparatus for processing video data includes means for determining a candidate motion vector for deriving motion information from a current block of video data, wherein the motion information indicates motion of the current block relative to reference video data, and means for determining a derived motion vector for the current block based on the determined candidate motion vector, wherein the means for determining the derived motion vector comprises means for performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block.
[0015] Em outro exemplo, uma mídia legível por computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que um ou mais processadores determinem um vetor de movimento candidato para derivar informações de movimento de um bloco atual de dados de vídeo, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, e determinar um vetor de movimento derivado para o bloco atual com base no vetor de movimento candidato determinado, em que, para determinar o vetor de movimento derivado, as instruções fazem com que o um ou mais processadores realizem uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual.[0015] In another example, a non-transitory computer-readable medium has instructions stored therein that, when executed, cause one or more processors to determine a candidate motion vector for deriving motion information from a current block of video data, wherein the motion information indicates motion of the current block relative to reference video data, and determine a derived motion vector for the current block based on the determined candidate motion vector, wherein, to determine the derived motion vector, the instructions cause the one or more processors to perform a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block.
[0016] Em outro exemplo, um método para processar dados de vídeo inclui dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco e decodificar a pluralidade de sub- blocos com base nas informações de movimento derivadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.[0016] In another example, a method for processing video data includes dividing a current block of video data into a plurality of sub-blocks to derive motion information of the current block, wherein the motion information indicates motion of the current block relative to reference video data, separately for each respective sub-block among the plurality of sub-blocks, wherein the motion information comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data out of each respective sub-block, and decoding the plurality of sub-blocks based on the derived motion information and without decoding syntax elements representative of the motion information.
[0017] Em outro exemplo, um método para processar dados de vídeo inclui dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco e codificar a pluralidade de sub- blocos com base nas informações de movimento derivadas e sem codificar os elementos de sintaxe representativos das informações de movimento.[0017] In another example, a method for processing video data includes dividing a current block of video data into a plurality of sub-blocks to derive motion information of the current block, wherein the motion information indicates motion of the current block relative to reference video data, separately for each respective sub-block among the plurality of sub-blocks, wherein the motion information comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data out of each respective sub-block, and encoding the plurality of sub-blocks based on the derived motion information and without encoding syntax elements representative of the motion information.
[0018] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar um bloco atual de dados de vídeo, e um ou mais processadores configurados para dividir um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub-blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco e converter em código a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem converter em código os elementos de sintaxe representativos das informações de movimento.[0018] In another example, a device for processing video data includes a memory configured to store a current block of video data, and one or more processors configured to divide a current block of video data into a plurality of sub-blocks for deriving motion information of the current block, wherein the motion information indicates motion of the current block relative to reference video data, separately for each respective sub-block among the plurality of sub-blocks, wherein the motion information comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data out of each respective sub-block and coding the plurality of sub-blocks based on the derived motion information and without coding the syntax elements representative of the motion information.
[0019] Em outro exemplo, uma mídia legível por computador não transitória tem instruções armazenadas na mesma que, quando executadas, fazem com que o um ou mais processadores dividam um bloco atual de dados de vídeo em uma pluralidade de sub-blocos para derivar informações de movimento do bloco atual, em que as informações de movimento indicam movimento do bloco atual em relação aos dados de vídeo de referência, derivar, separadamente para cada respectivo sub-bloco dentre a pluralidade de sub- blocos, em que as informações de movimento compreendem realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco e decodificar a pluralidade de sub-blocos com base nas informações de movimento derivadas e sem decodificar os elementos de sintaxe representativos das informações de movimento.[0019] In another example, a non-transitory computer-readable medium has instructions stored therein that, when executed, cause the one or more processors to divide a current block of video data into a plurality of sub-blocks to derive motion information of the current block, wherein the motion information indicates motion of the current block relative to reference video data, separately for each respective sub-block among the plurality of sub-blocks, wherein the motion information comprises performing a motion search for a first set of reference data that corresponds to a second set of reference data out of each respective sub-block, and decoding the plurality of sub-blocks based on the derived motion information and without decoding syntax elements representative of the motion information.
[0020] Em outro exemplo, um dispositivo para processar dados de vídeo inclui uma memória configurada para armazenar uma imagem atual, e um ou mais processadores configurados para obter um fluxo de bits codificado que contém uma pluralidade de imagens convertidas em código, interpolar uma ou mais imagens de referência que não estão inclusas no fluxo de bits codificado e decodificar dados de vídeo de uma imagem atual do fluxo de bits codificado com base na uma ou mais imagens de referência interpoladas.[0020] In another example, a device for processing video data includes a memory configured to store a current picture, and one or more processors configured to obtain a coded bit stream containing a plurality of encoded pictures, interpolate one or more reference pictures that are not included in the coded bit stream, and decode video data of a current picture of the coded bit stream based on the one or more interpolated reference pictures.
[0021] Os detalhes de um ou mais exemplos da revelação são apresentados nos desenhos anexos e na descrição abaixo. Outros recursos, objetivos e vantagens serão evidentes a partir da descrição, desenhos e reivindicações.[0021] Details of one or more examples of the disclosure are set forth in the accompanying drawings and in the description below. Other features, objects and advantages will be apparent from the description, drawings and claims.
[0022] A Figura 1 é um diagrama de blocos que ilustra um sistema de decodificação e codificação de vídeo exemplificativo que pode implantar técnicas desta revelação.[0022] Figure 1 is a block diagram illustrating an exemplary video decoding and encoding system that may implement techniques of this disclosure.
[0023] A Figura 2 é um diagrama de blocos que ilustra um exemplo de codificador de vídeo que pode implantar técnicas desta revelação.[0023] Figure 2 is a block diagram illustrating an example video encoder that may implement techniques of this disclosure.
[0024] A Figura 3 é um diagrama de blocos que ilustra um exemplo de decodificador de vídeo que pode implantar técnicas desta revelação.[0024] Figure 3 is a block diagram illustrating an example video decoder that may implement techniques of this disclosure.
[0025] As Figuras 4A e 4B são diagramas conceituais que ilustram candidatos de vetor de movimento vizinhos espaciais exemplificativos para um modo de mescla e um modo de predição de vetor de movimento avançada (AMVP).[0025] Figures 4A and 4B are conceptual diagrams illustrating exemplary spatial neighboring motion vector candidates for a blending mode and an advanced motion vector prediction (AMVP) mode.
[0026] As Figuras 5A e 5B são diagramas conceituais que ilustram um candidato de previsor de vetor de movimento temporal (TMVP) exemplificativo e escalonamento de vetor de movimento.[0026] Figures 5A and 5B are conceptual diagrams illustrating an exemplary temporal motion vector predictor (TMVP) candidate and motion vector scaling.
[0027] A Figura 6 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento unilateral (ME) em conversão ascendente de taxa de quadros (FRUC).[0027] Figure 6 is a conceptual diagram illustrating an example of one-way motion estimation (ME) in frame rate upconversion (FRUC).
[0028] A Figura 7 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento bilateral (ME) em FRUC.[0028] Figure 7 is a conceptual diagram illustrating an example of bilateral motion estimation (ME) in FRUC.
[0029] A Figura 8 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento de lado de decodificador (DMVD) com base em correspondência de modelo.[0029] Figure 8 is a conceptual diagram illustrating an example of decoder-side motion vector derivation (DMVD) based on template matching.
[0030] A Figura 9 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento bidirecional com base em espelho em DMVD.[0030] Figure 9 is a conceptual diagram illustrating an example of mirror-based bidirectional motion vector derivation in DMVD.
[0031] A Figura 10 é um diagrama conceitual que ilustra derivação de vetor de movimento com base em correspondência bilateral estendida.[0031] Figure 10 is a conceptual diagram illustrating motion vector derivation based on extended bilateral correspondence.
[0032] A Figura 11 é um fluxograma que ilustra um exemplo de decodificação de uma unidade de predição (PU) com o uso de DMVD.[0032] Figure 11 is a flowchart illustrating an example of decoding a prediction unit (PU) using DMVD.
[0033] A Figura 12 é um fluxograma que ilustra um processo exemplificativo para determinar um modo de derivação de informações de movimento para converter em código um bloco de dados de vídeo.[0033] Figure 12 is a flowchart illustrating an exemplary process for determining a mode of deriving motion information for encoding a block of video data.
[0034] A Figura 13 é um fluxograma que ilustra um processo exemplificativo para derivar um vetor de movimento para converter em código um bloco de dados de vídeo.[0034] Figure 13 is a flowchart illustrating an exemplary process for deriving a motion vector for encoding a block of video data.
[0035] A Figura 14 é um fluxograma que ilustra um processo exemplificativo para derivar informações de movimento para sub-blocos de um bloco de dados de vídeo.[0035] Figure 14 is a flowchart illustrating an exemplary process for deriving motion information for sub-blocks of a video data block.
[0036] As técnicas desta revelação se referem à derivação de informações de movimento de lado de decodificador, particionamento de bloco e/ou interpolação de dados de na conversão em código de vídeo com base em bloco. As técnicas podem ser aplicadas a qualquer um dos codecs de vídeo existentes, como Codificação de Vídeo de Alta Eficiência (HEVC) ou ser uma ferramenta de conversão em vídeo eficaz para quaisquer padrões de conversão em código de vídeo futuros.[0036] The techniques of this disclosure relate to deriving decoder-side motion information, block partitioning, and/or data interpolation in block-based video codecs. The techniques can be applied to any of the existing video codecs, such as High Efficiency Video Coding (HEVC), or be an effective video codec tool for any future video codec standards.
[0037] Os dispositivos de conversão em código de vídeo implantam técnicas de compactação de vídeo para codificar e decodificar os dados de vídeo de modo eficaz. As técnicas de compactação de vídeo podem incluir aplicar predição espacial (por exemplo, predição intraquadro), predição temporal (por exemplo, predição interquadros), e/ou outras técnicas de predição para reduzir ou remover a redundância inerente em sequências de vídeo. Um codificador de vídeo particiona, tipicamente, cada imagem de uma sequência de vídeo original em regiões retangulares referidas como blocos de vídeo ou unidades de conversão em código (descritos em maiores detalhes abaixo). Esses blocos de vídeo podem ser codificados com o uso de um modo de predição particular.[0037] Video encoder devices implement video compression techniques to efficiently encode and decode video data. Video compression techniques may include applying spatial prediction (e.g., intraframe prediction), temporal prediction (e.g., interframe prediction), and/or other prediction techniques to reduce or remove inherent redundancy in video sequences. A video encoder typically partitions each picture of an original video sequence into rectangular regions referred to as video blocks or encoder units (described in greater detail below). These video blocks may be encoded using a particular prediction mode.
[0038] Para modos de interpredição, um codificador de vídeo busca, tipicamente, por um bloco semelhante àquele sendo codificado em um quadro em outro local temporal, referido como quadro de referência. O codificador de vídeo pode restringir a busca a um determinado deslocamento espacial do bloco a ser codificado. Uma melhor correspondência pode ser localizada com o uso de um vetor de movimento bidimensional (2D) que inclui um componente de deslocamento horizontal e um componente de deslocamento vertical. Para um modo de intrapredição, um codificador de vídeo pode formar o bloco previsto com o uso de técnicas de predição espaciais com base nos dados de blocos vizinhos anteriormente codificados dentro da mesma imagem.[0038] For inter-prediction modes, a video encoder typically searches for a block similar to one being encoded in a frame at another temporal location, referred to as a reference frame. The video encoder may restrict the search to a given spatial offset of the block to be encoded. A best match may be located using a two-dimensional (2D) motion vector that includes a horizontal offset component and a vertical offset component. For an intra-prediction mode, a video encoder may form the predicted block using spatial prediction techniques based on data from previously encoded neighboring blocks within the same image.
[0039] O codificador de vídeo pode determinar um erro de predição, isto é, a diferença entre os valores de pixel no bloco sendo codificado e no bloco previsto (também referido como residual). O codificador de vídeo também pode aplicar uma transformada ao erro de predição, como uma transformada de cosseno distinta (DCT), para gerar coeficientes de transformada. Após a transformação, o codificador de vídeo pode quantizar os coeficientes de transformada. Os coeficientes de transformada quantizados e os vetores de movimento podem ser representados com o uso de elementos de sintaxe e, juntamente com informações de controle, formam uma representação convertida em código de uma sequência de vídeo. Em alguns casos, o codificador de vídeo pode converter em código por entropia elementos de sintaxe, reduzindo, assim, adicionalmente, o número de bits necessário para sua representação.[0039] The video encoder may determine a prediction error, i.e., the difference between pixel values in the block being encoded and in the predicted block (also referred to as residual). The video encoder may also apply a transform to the prediction error, such as a distinct cosine transform (DCT), to generate transform coefficients. After the transformation, the video encoder may quantize the transform coefficients. The quantized transform coefficients and motion vectors may be represented using syntax elements and, together with control information, form a coded representation of a video sequence. In some cases, the video encoder may entropy-code syntax elements, thereby further reducing the number of bits required for their representation.
[0040] Um decodificador de vídeo pode, com o uso dos elementos de sintaxe e informações de controle discutidos acima, construir dados preditivos (por exemplo, um bloco preditivo) para decodificar um quadro atual. Por exemplo, o decodificador de vídeo pode adicionar o bloco previsto e o erro de predição compactado. O decodificador de vídeo pode determinar o erro de predição compactado ponderando-se as funções de base de transformada com o uso dos coeficientes quantizados. A diferença entre o quadro reconstruído e o quadro original é chamado de erro de reconstrução.[0040] A video decoder may, using the syntax elements and control information discussed above, construct predictive data (e.g., a predictive block) for decoding a current frame. For example, the video decoder may add the predicted block and the compressed prediction error. The video decoder may determine the compressed prediction error by weighting the transform basis functions using the quantized coefficients. The difference between the reconstructed frame and the original frame is called the reconstruction error.
[0041] Em alguns casos, um decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens com base em uma ou mais imagens de referência. Essas imagens interpoladas não estão inclusas em um fluxo de bits codificado. O decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens para converter de modo ascendente uma taxa de quadros original de um fluxo de bits codificado. Esse processo pode ser chamado de conversão ascendente de taxa de quadros (FRUC). Alternativamente, o decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens para inserir uma ou mais imagens que foram puladas por um codificador de vídeo para codificar uma sequência de vídeo em uma taxa de quadros reduzida. Em qualquer caso, o decodificador de vídeo ou dispositivo de pós-processamento interpola quadros que não estão inclusos em um fluxo de bits codificado que foi recebido pelo decodificador de vídeo. O decodificador de vídeo ou dispositivo de pós-processamento pode interpolar as imagens com o uso de qualquer uma dentre várias técnicas de interpolação, por exemplo, com o uso de interpolação de quadro compensada por movimento, repetição de quadro, ou cálculo de média de quadros.[0041] In some cases, a video decoder or post-processing device may interpolate images based on one or more reference images. These interpolated images are not included in an encoded bitstream. The video decoder or post-processing device may interpolate images to upconvert an original frame rate of an encoded bitstream. This process may be referred to as frame rate upconversion (FRUC). Alternatively, the video decoder or post-processing device may interpolate images to insert one or more images that were skipped by a video encoder to encode a video sequence at a reduced frame rate. In either case, the video decoder or post-processing device interpolates frames that are not included in an encoded bitstream that was received by the video decoder. The video decoder or post-processing device may interpolate the images using any of several interpolation techniques, for example, using motion-compensated frame interpolation, frame repetition, or frame averaging.
[0042] Embora determinadas técnicas para interpolar imagens tenham sido usadas para propósitos de conversão ascendente, essas técnicas não foram usadas amplamente durante a conversão em código de vídeo, por exemplo, para converter dados de vídeo em código que estão inclusos em um fluxo de bits codificado. Por exemplo, as técnicas para interpolar imagens podem ser relativamente demoradas e/ou exigir uma quantidade de potência de processamento relativamente grande. Consequentemente, essas técnicas, tipicamente, não foram realizadas em ciclo quando se decodifica dados de vídeo.[0042] Although certain techniques for interpolating images have been used for up-conversion purposes, these techniques have not been widely used during conversion to video code, e.g., to convert video data into code that is included in a coded bit stream. For example, techniques for interpolating images can be relatively time-consuming and/or require a relatively large amount of processing power. Consequently, these techniques have typically not been performed in a loop when decoding video data.
[0043] De acordo com os aspectos desta revelação, um conversor em código de vídeo (por exemplo, um codificador de vídeo ou um decodificador de vídeo) pode derivar informações de movimento quando se converte em código um fluxo de bits. Por exemplo, o conversor em código de vídeo pode gerar informações de movimento que não estão inclusas no fluxo de bits para converter dados de vídeo em código que estão inclusos no fluxo de bits. Derivando-se as informações de movimento no ciclo de codificação ou decodificação, uma economia de bits pode ser alcançada em relação a técnicas que incluem informações de movimento no fluxo de bits (como as técnicas de interpredição supracitadas).[0043] In accordance with aspects of this disclosure, a video codec (e.g., a video encoder or a video decoder) may derive motion information when it encodes a bit stream. For example, the video codec may generate motion information that is not included in the bit stream to encode video data that is included in the bit stream. By deriving motion information in the encoding or decoding cycle, bit savings may be achieved relative to techniques that include motion information in the bit stream (such as the aforementioned interprediction techniques).
[0044] De acordo com alguns aspectos desta revelação, um conversor em código de vídeo pode utilizar uma pluralidade de técnicas de derivação de informações de movimento durante a conversão em código. Nesses exemplos, o conversor em código de vídeo pode determinar um modo de derivação de informações de movimento para determinar quais técnicas de derivação de informações de movimento usar quando se determina informações de movimento para um bloco atual. Em geral, usar um modo de derivação de informações de movimento para derivar informações de movimento pode incluir realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. Por exemplo, usar o modo de derivação de informações de movimento (por exemplo, uma técnica de correspondência bilateral, uma técnica de correspondência de modelo, ou outra técnica, conforme descrito em maiores detalhes abaixo), o conversor em código de vídeo pode selecionar um vetor de movimento candidato em uma lista de candidatos de vetor de movimento. O conversor em código de vídeo pode selecionar o vetor de movimento candidato com base no vetor de movimento candidato que identifica dados de referência em uma imagem de referência que corresponde de modo relativamente aproximado dados da imagem atual (que podem ser referidos como determinar uma “melhor correspondência” de dados de referência).[0044] In accordance with some aspects of this disclosure, a video codec may utilize a plurality of motion information derivation techniques during codec conversion. In these examples, the video codec may determine a motion information derivation mode to determine which motion information derivation techniques to use when determining motion information for a current block. In general, using a motion information derivation mode to derive motion information may include performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block. For example, using the motion information derivation mode (e.g., a bilateral matching technique, a template matching technique, or other technique as described in greater detail below), the video codec may select a candidate motion vector from a list of motion vector candidates. The video encoder may select the candidate motion vector based on the candidate motion vector identifying reference data in a reference picture that relatively closely matches data in the current picture (which may be referred to as determining a “best match” of reference data).
[0045] Em alguns casos, o conversor em código de vídeo pode usar o candidato de vetor de movimento selecionado para identificar uma janela de busca em uma imagem de referência. O conversor em código de vídeo pode refinar o vetor de movimento candidato com base em dados de referência na janela de busca que corresponde de modo relativamente aproximado dados correspondentes na imagem atual. Isto é, o conversor em código de vídeo pode derivar novas informações de movimento para o bloco atual com base no movimento entre os dados de referência na janela de busca que corresponde de modo aproximado dados na imagem atual. O conversor em código de vídeo pode, então, realizar a compensação de movimento para o bloco atual com o uso das informações de movimento derivadas. Desta forma, o conversor em código de vídeo pode derivar informações de movimento para um bloco atual sem informações de movimento sendo sinalizadas em um fluxo de bits codificado.[0045] In some cases, the video codec may use the selected motion vector candidate to identify a search window in a reference picture. The video codec may refine the candidate motion vector based on reference data in the search window that relatively closely matches corresponding data in the current picture. That is, the video codec may derive new motion information for the current block based on motion between reference data in the search window that closely matches data in the current picture. The video codec may then perform motion compensation for the current block using the derived motion information. In this way, the video codec may derive motion information for a current block without motion information being signaled in an encoded bit stream.
[0046] De acordo com os aspectos desta revelação, em alguns exemplos, o conversor em código de vídeo pode dividir um bloco de dados de vídeo em sub-blocos quando se deriva as informações de movimento. Por exemplo, o conversor em código de vídeo pode derivar separadamente informações de movimento para cada sub-bloco de um bloco maior. Em alguns casos, o conversor em código de vídeo pode, inicialmente, determinar informações de movimento para o bloco e usar as informações de movimento derivadas como informações de movimento de candidato para cada um dos sub-blocos. O conversor em código de vídeo pode, então, refinar adicionalmente as informações de movimento derivadas para cada um dos sub-blocos, por exemplo, com o uso de um modo de derivação de informações de movimento (por exemplo, uma técnica de correspondência bilateral, uma técnica de correspondência de modelo, ou outra técnica, conforme descrito em maiores detalhes abaixo).[0046] In accordance with aspects of this disclosure, in some examples, the video codec may divide a block of video data into sub-blocks when deriving motion information. For example, the video codec may separately derive motion information for each sub-block of a larger block. In some cases, the video codec may initially determine motion information for the block and use the derived motion information as candidate motion information for each of the sub-blocks. The video codec may then further refine the derived motion information for each of the sub-blocks, for example, using a motion information derivation mode (e.g., a bilateral matching technique, a template matching technique, or other technique as described in greater detail below).
[0047] As técnicas desta revelação também podem incluir técnicas para interpolar imagens. Em alguns casos, qualquer combinação das técnicas acima pode ser usada para interpolar uma imagem que não está inclusa no fluxo de bits, por exemplo, semelhante à conversão ascendente de taxa de quadros. Entretanto, ao invés de simplesmente adicionar a imagem interpolada à sequência de vídeo, um decodificador de vídeo pode usar o quadro interpolado durante a conversão em código. Por exemplo, o decodificador de vídeo pode decodificar dados de uma imagem atual com base em pelo menos uma porção da imagem interpolada. Em alguns casos, o decodificador de vídeo pode estabelecer a imagem interpolada igual à imagem atual. Por exemplo, o decodificador de vídeo pode decodificar dados de sintaxe para a imagem atual que está inclusa no fluxo de bits (por exemplo, dados de cabeçalho de fatia e similares), interpolar a imagem, e estabelecer a imagem interpolada como a imagem atual. Em outros casos, o decodificador de vídeo pode interpolar a imagem e decodificar dados para a imagem atual em relação à imagem interpolada. Neste caso, o decodificador de vídeo pode adicionar a imagem interpolada a uma memória de imagem de referência para fins de predição.[0047] The techniques of this disclosure may also include techniques for interpolating images. In some cases, any combination of the above techniques may be used to interpolate an image that is not included in the bitstream, e.g., similar to frame rate upconversion. However, rather than simply adding the interpolated image to the video sequence, a video decoder may use the interpolated frame during conversion to code. For example, the video decoder may decode data from a current image based on at least a portion of the interpolated image. In some cases, the video decoder may set the interpolated image equal to the current image. For example, the video decoder may decode syntax data for the current image that is included in the bitstream (e.g., slice header data and the like), interpolate the image, and set the interpolated image as the current image. In other cases, the video decoder may interpolate the image and decode data for the current image relative to the interpolated image. In this case, the video decoder can add the interpolated image to a reference image memory for prediction purposes.
[0048] Por conseguinte, determinadas técnicas descritas no presente documento se referindo a FRUC podem, em alguns exemplos, ser usadas para determinar informações de movimento (por exemplo, em um processo de derivação de informações de movimento de lado de decodificador). Em outros exemplos, as técnicas descritas no presente documento se referindo a FRUC podem ser usadas para interpolar dados de vídeo, por exemplo, para referência para converter dados de vídeo em código, ou para emitir.[0048] Accordingly, certain techniques described herein referring to FRUC may, in some examples, be used to determine motion information (e.g., in a decoder-side motion information derivation process). In other examples, techniques described herein referring to FRUC may be used to interpolate video data, e.g., for reference to convert video data to code, or to output.
[0049] A Figura 1 é um diagrama de blocos que ilustra um sistema de decodificação e codificação de vídeo exemplificativo 10 que pode utilizar técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Conforme mostrado na Figura 1, o sistema 10 inclui um dispositivo-fonte 12 que fornece dados de vídeo codificados a serem decodificados em um momento posterior por um dispositivo de destino 14. Em particular, o dispositivo-fonte 12 fornece os dados de vídeo para o dispositivo de destino 14 por meio de uma mídia legível por computador 16. O dispositivo-fonte 12 e o dispositivo de destino 14 podem compreender qualquer um dentre uma ampla faixa de dispositivos, incluindo computadores do tipo desktop, computadores do tipo notebook (isto é, computadores do tipo laptop), computadores do tipo tablet, decodificadores de sinais, aparelhos de telefone, tais como, os então chamados telefones "inteligentes", os então chamados dispositivos do tipo pad "inteligentes", televisões, câmeras, dispositivos de exibição, reprodutores de mídia digital, consoles de videogame, dispositivo de transmissão contínua de vídeo, ou semelhantes. Em alguns casos, o dispositivo-fonte 12 e o dispositivo de destino 14 podem estar equipados para comunicação sem fio.[0049] Figure 1 is a block diagram illustrating an exemplary video decoding and encoding system 10 that may utilize techniques to derive motion information, perform block partitioning, and/or interpolate video data. As shown in Figure 1, system 10 includes a source device 12 that provides encoded video data to be decoded at a later time by a destination device 14. In particular, source device 12 provides the video data to destination device 14 via a computer-readable medium 16. Source device 12 and destination device 14 may comprise any of a wide range of devices, including desktop computers, notebook computers (i.e., laptop computers), tablet computers, set-top boxes, telephone devices such as so-called "smart" phones, so-called "smart" pad devices, televisions, cameras, display devices, digital media players, video game consoles, video streaming devices, or the like. In some cases, source device 12 and destination device 14 may be equipped for wireless communication.
[0050] O dispositivo de destino 14 pode receber os dados de vídeo codificados a serem decodificados por meio da mídia legível por computador 16. A mídia legível por computador 16 pode compreender qualquer tipo de mídia ou dispositivo com capacidade para mover os dados de vídeo codificados a partir do dispositivo-fonte 12 ao dispositivo de destino 14. Em um exemplo, a mídia legível por computador 16 pode compreender uma mídia de comunicação para possibilitar que um dispositivo-fonte transmita os dados de vídeo codificados diretamente a um dispositivo de destino 14 em tempo real. Os dados de vídeo codificados podem ser modulados de acordo com um padrão de comunicação, como um protocolo de comunicação sem fio, e transmitidos para o dispositivo de destino 14. A mídia de comunicação pode compreender qualquer mídia de comunicação sem fio ou com fio, como um espectro de radiofrequência (RF) ou uma ou mais linhas de transmissão físicas. A mídia de comunicação pode fazer parte de uma rede com base em pacote, como uma rede de área local, uma rede de área ampla ou uma rede global como a Internet. A mídia de comunicação pode incluir roteadores, comutadores, estações-base ou qualquer outro equipamento que possa ser útil para facilitar a comunicação a partir do dispositivo-fonte 12 para o dispositivo de destino 14.[0050] The destination device 14 may receive the encoded video data to be decoded via the computer-readable media 16. The computer-readable media 16 may comprise any type of media or device capable of moving the encoded video data from the source device 12 to the destination device 14. In one example, the computer-readable media 16 may comprise a communication medium to enable a source device to transmit the encoded video data directly to a destination device 14 in real time. The encoded video data may be modulated according to a communication standard, such as a wireless communication protocol, and transmitted to the destination device 14. The communication media may comprise any wireless or wired communication medium, such as a radio frequency (RF) spectrum or one or more physical transmission lines. The communication media may be part of a packet-based network, such as a local area network, a wide area network, or a global network such as the Internet. The communication media may include routers, switches, base stations, or any other equipment that may be useful in facilitating communication from the source device 12 to the destination device 14.
[0051] Em alguns exemplos, os dados codificados podem ser emitidos a partir da interface de saída 22 para um dispositivo de armazenamento. De modo semelhante, os dados codificados podem ser acessados a partir do dispositivo de armazenamento pela interface de entrada. O dispositivo de armazenamento pode incluir qualquer um dentre uma variedade de mídias de armazenamento de dados acessados localmente ou distribuídos como um disco rígido, discos Blu-ray, DVDs, CD-ROMs, memória flash, memória volátil ou não volátil ou quaisquer outras mídias de armazenamento digital adequadas para armazenar dados de vídeo codificados. Em um exemplo adicional, o dispositivo de armazenamento pode corresponder a um servidor de arquivos ou outro dispositivo de armazenamento intermediário que pode armazenar o vídeo codificado gerado pelo dispositivo-fonte 12 O dispositivo de destino 14 pode acessar dados de vídeo armazenados a partir do dispositivo de armazenamento por meio de transmissão contínua ou transferência por download. O servidor de arquivos pode ser qualquer tipo de servidor com capacidade para armazenar dados de vídeo codificados e transmitir aqueles dados de vídeo codificados para o dispositivo de destino 14. Os servidores de arquivo exemplificativos incluem um servidor da web (por exemplo, para um site da web), um servidor FTP, dispositivos de armazenamento anexado à rede (NAS) ou uma unidade de disco local. O dispositivo de destino 14 pode acessar os dados de vídeo codificados através de qualquer conexão de dados padrão, incluindo uma conexão com a Internet. Isso pode incluir um canal sem fio (por exemplo, uma conexão Wi-Fi), uma conexão com fio (por exemplo, DSL, modem de cabo, etc.) ou uma combinação de ambos que seja adequada para acessar dados de vídeo codificados armazenados em um servidor de arquivos. A transmissão de dados de vídeo codificados a partir do dispositivo de armazenamento pode ser uma transmissão de transferência contínua, uma transmissão de transferência por download ou uma combinação das mesmas.[0051] In some examples, the encoded data may be output from the output interface 22 to a storage device. Similarly, the encoded data may be accessed from the storage device via the input interface. The storage device may include any of a variety of locally accessed or distributed data storage media such as a hard drive, Blu-ray discs, DVDs, CD-ROMs, flash memory, volatile or non-volatile memory, or any other digital storage media suitable for storing encoded video data. In a further example, the storage device may correspond to a file server or other intermediate storage device that may store the encoded video generated by the source device 12. The destination device 14 may access stored video data from the storage device via streaming or downloading. The file server may be any type of server capable of storing encoded video data and transmitting that encoded video data to the destination device 14. Exemplary file servers include a web server (e.g., for a website), an FTP server, network attached storage (NAS) devices, or a local disk drive. The destination device 14 may access the encoded video data through any standard data connection, including an Internet connection. This may include a wireless channel (e.g., a Wi-Fi connection), a wired connection (e.g., DSL, cable modem, etc.), or a combination of both that is suitable for accessing encoded video data stored on a file server. The transmission of encoded video data from the storage device may be a streaming transmission, a download transmission, or a combination thereof.
[0052] As técnicas desta revelação não estão necessariamente limitadas a aplicativos ou definições sem fio. As técnicas podem ser aplicadas à conversão em código de vídeo visando o suporte a qualquer uma dentre uma variedade de aplicativos de multimídia, tais como difusões de televisão pelo ar, transmissões de televisão a cabo, transmissões de televisão por satélite, transmissões contínuas de vídeo pela Internet, tais como transmissão contínua adaptativa dinâmica através de HTTP (DASH), vídeo digital que é codificado em uma mídia de armazenamento de dados, decodificação de vídeo digital armazenado em uma mídia de armazenamento de dados ou outros aplicativos. Em alguns exemplos, o sistema 10 pode ser configurado para suportar transmissão de vídeo unidirecional ou bidirecional para suportar aplicações como transmissão contínua de vídeo, reprodução de vídeo, difusão de vídeo e/ou telefonia por vídeo.[0052] The techniques of this disclosure are not necessarily limited to wireless applications or definitions. The techniques may be applied to video code conversion to support any of a variety of multimedia applications, such as over-the-air television broadcasts, cable television broadcasts, satellite television broadcasts, Internet video streaming such as dynamic adaptive streaming over HTTP (DASH), digital video that is encoded onto a data storage medium, decoding digital video stored on a data storage medium, or other applications. In some examples, system 10 may be configured to support unidirectional or bidirectional video transmission to support applications such as video streaming, video playback, video broadcasting, and/or video telephony.
[0053] No exemplo da Figura 1, o dispositivo- fonte 12 inclui uma fonte de vídeo 18, um codificador de vídeo 20 e uma interface de saída 22. O dispositivo de destino 14 inclui uma interface de entrada 28, um decodificador de vídeo 30 e um dispositivo de exibição 32. De acordo com esta revelação, o codificador de vídeo 20 do dispositivo-fonte 12 pode ser configurado para aplicar as técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em outros exemplos, um dispositivo-fonte e um dispositivo de destino podem incluir outros componentes ou disposições. Por exemplo, o dispositivo-fonte 12 pode receber dados de vídeo a partir de uma fonte de vídeo externa 18, como uma câmera externa. Da mesma forma, o dispositivo de destino 14 pode fazer interface com um dispositivo de exibição externo, ao invés de incluir um dispositivo de exibição integrado.[0053] In the example of Figure 1, the source device 12 includes a video source 18, a video encoder 20, and an output interface 22. The destination device 14 includes an input interface 28, a video decoder 30, and a display device 32. In accordance with this disclosure, the video encoder 20 of the source device 12 may be configured to apply techniques for deriving motion information, performing block partitioning, and/or interpolating video data. In other examples, a source device and a destination device may include other components or arrangements. For example, the source device 12 may receive video data from an external video source 18, such as an external camera. Likewise, the destination device 14 may interface with an external display device, rather than including an integrated display device.
[0054] O sistema ilustrado 10 da Figura 1 é meramente um exemplo. As técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo podem ser realizadas por qualquer dispositivo de codificação e/ou decodificação de vídeo digital. Embora, de modo geral, as técnicas desta revelação sejam realizadas por dispositivo codificador de vídeo de vídeo, as técnicas também podem ser realizadas por um codificador/decodificador de vídeo denominado tipicamente como "CODEC". Além disso, as técnicas desta revelação também podem ser realizadas por um pré-processador de vídeo. O dispositivo-fonte 12 e o dispositivo de destino 14 são meramente exemplos de tais dispositivos de conversão em código em que o dispositivo-fonte 12 gera dados de vídeo convertidos em código para transmissão para o dispositivo de destino 14. Em alguns exemplos, os dispositivos 12, 14 podem operar de modo substancialmente simétrico de modo que cada um dos dispositivos 12, 14 incluem componentes de codificação e decodificação de vídeo. Por conseguinte, o sistema 10 pode suportar transmissão de vídeo unidirecional ou bidirecional entre os dispositivos de vídeo 12, 14, por exemplo, para a transmissão contínua de vídeo, reprodução de vídeo, difusão de vídeo ou telefonia por vídeo.[0054] The illustrated system 10 of Figure 1 is merely an example. The techniques for deriving motion information, performing block partitioning, and/or interpolating video data may be performed by any digital video encoding and/or decoding device. While, in general, the techniques of this disclosure are performed by a video encoding device, the techniques may also be performed by a video encoder/decoder typically referred to as a "CODEC." In addition, the techniques of this disclosure may also be performed by a video preprocessor. Source device 12 and destination device 14 are merely examples of such encoder devices wherein source device 12 generates encodered video data for transmission to destination device 14. In some examples, devices 12, 14 may operate in a substantially symmetrical manner such that each of devices 12, 14 includes video encoding and decoding components. Accordingly, the system 10 may support unidirectional or bidirectional video transmission between the video devices 12, 14, for example, for video streaming, video playback, video broadcasting, or video telephony.
[0055] A fonte de vídeo 18 do dispositivo- fonte 12 pode incluir um dispositivo de captura de vídeo, como uma câmera de vídeo, um arquivo de vídeo que contém um vídeo anteriormente capturado e/ou uma interface de alimentação de vídeo para receber vídeo a partir de um provedor de conteúdo de vídeo. Como uma alternativa adicional, a fonte de vídeo 18 pode gerar dados com base em gráficos de computador como o vídeo de fonte ou uma combinação de vídeo ao vivo, vídeo arquivado e vídeo gerado por computador. Em alguns casos, se a fonte de vídeo 18 for uma câmera de vídeo, o dispositivo-fonte 12 e o dispositivo de destino 14 podem formar os chamados telefones de câmera ou videofones. Entretanto, conforme mencionado acima, as técnicas descritas nesta revelação podem ser aplicáveis à conversão em código de vídeo em geral e podem ser aplicadas às aplicações com fio e/ou sem fio. Em cada caso, o vídeo capturado, pré-capturado ou gerado por computador pode ser codificado pelo codificador de vídeo 20. As informações de vídeo codificado podem, então, ser emitidas pela interface de saída 22 na mídia legível por computador 16.[0055] The video source 18 of the source device 12 may include a video capture device, such as a video camera, a video file containing previously captured video, and/or a video feed interface for receiving video from a video content provider. As a further alternative, the video source 18 may generate data based on computer graphics as the source video or a combination of live video, archived video, and computer-generated video. In some cases, if the video source 18 is a video camera, the source device 12 and the target device 14 may form so-called camera phones or videophones. However, as mentioned above, the techniques described in this disclosure may be applicable to video code conversion in general and may be applied to wired and/or wireless applications. In each case, the captured, pre-captured, or computer-generated video may be encoded by the video encoder 20. The encoded video information may then be output by the output interface 22 onto computer-readable media 16.
[0056] A mídia legível por computador pode incluir mídias transientes, como uma transmissão de rede com fio ou difusão sem fio ou mídias de armazenamento (isto é, mídias de armazenamento não transitórias), como um disco rígido, unidade flash, disco compacto, disco de vídeo digital, disco Blu-ray ou outras mídias legíveis por computador. Em alguns exemplos, um servidor de rede (não mostrado) pode receber dados de vídeo codificados a partir do dispositivo-fonte 12 e fornecer os dados de vídeo codificados para o dispositivo de destino 14, por exemplo, por meio da transmissão de rede. De modo semelhante, um dispositivo de computação de uma instalação de produção de mídia, como uma instalação de rotulação de disco, pode receber dados de vídeo codificados a partir do dispositivo- fonte 12 e produzir um disco que contém os dados de vídeo codificados. Portanto, a mídia legível por computador pode ser compreendida de modo a incluir uma ou mais mídias legíveis por computador de várias formas, em vários exemplos.[0056] Computer-readable media may include transient media, such as a wired network transmission or wireless broadcast, or storage media (i.e., non-transitory storage media), such as a hard drive, flash drive, compact disc, digital video disc, Blu-ray Disc, or other computer-readable media. In some examples, a network server (not shown) may receive encoded video data from source device 12 and provide the encoded video data to destination device 14, e.g., via network transmission. Similarly, a computing device of a media production facility, such as a disc labeling facility, may receive encoded video data from source device 12 and produce a disc containing the encoded video data. Thus, computer-readable media may be understood to include one or more computer-readable media of various forms, in various examples.
[0057] A interface de rede 28 do dispositivo de destino 14 recebe informações a partir da mídia legível por computador 16. As informações de mídia legível por computador 16 podem incluir informações de sintaxe definidas pelo codificador de vídeo 20, que também é usado pelo decodificador de vídeo 30, que inclui elementos de sintaxe que descrevem características e/ou processamento de blocos e outras unidades convertidas em código, por exemplo, GOPs. O dispositivo de exibição 32 exibe os dados de vídeo decodificados para um usuário e pode compreender qualquer um dentre uma variedade de dispositivos de exibição como um tubo de raio de cátodo (CRT), um visor de cristal líquido (LCD), um visor de plasma, um visor de diodo emissor de luz orgânico (OLED) ou outro tipo de dispositivo de exibição.[0057] The network interface 28 of the target device 14 receives information from the computer-readable media 16. The information from the computer-readable media 16 may include syntax information defined by the video encoder 20, which is also used by the video decoder 30, which includes syntax elements that describe characteristics and/or processing of blocks and other units converted to code, e.g., GOPs. The display device 32 displays the decoded video data to a user and may comprise any of a variety of display devices such as a cathode ray tube (CRT), a liquid crystal display (LCD), a plasma display, an organic light-emitting diode (OLED) display, or another type of display device.
[0058] Embora não seja mostrado na Figura 1, em alguns aspectos, o codificador de vídeo 20 e o decodificador de vídeo 30 podem, cada um, ser integrados a um codificador e decodificador de áudio e podem incluir unidades MUX-DEMUX apropriadas, ou outro hardware e software, para manipular a codificação tanto de áudio quanto de vídeo em um fluxo de dados comum ou fluxos de dados separados. Caso aplicável, as unidades MUX-DEMUX podem se conformar ao protocolo multiplexador ITU H.223, ou outros protocolos como protocolo de datagrama de usuário (UDP).[0058] Although not shown in Figure 1, in some aspects, the video encoder 20 and video decoder 30 may each be integrated with an audio encoder and decoder, and may include appropriate MUX-DEMUX units, or other hardware and software, to handle the encoding of both audio and video into a common data stream or separate data streams. If applicable, the MUX-DEMUX units may conform to the ITU H.223 multiplexer protocol, or other protocols such as User Datagram Protocol (UDP).
[0059] O codificador de vídeo 20 e o decodificador de vídeo 30 podem ser implantados como qualquer um dentre uma variedade de conjuntos de circuitos de codificador adequados, tal como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados específicos para aplicação (ASICs), matrizes de porta programável em campo (FPGAs), lógica discreta, software, hardware, firmware ou quaisquer combinações dos mesmos. Quando as técnicas foram implantadas parcialmente em software, um dispositivo pode armazenar instruções para o software em uma mídia legível por computador não transitória adequada e executar as instruções em hardware com o uso de um ou mais processadores para realizar as técnicas desta revelação. Cada um dentre o codificador de vídeo 20 e o decodificador de vídeo 30 pode estar incluído em um ou mais codificadores ou decodificadores, um dos quais pode ser integrado como parte de um codificador/decodificador (CODEC) combinado em um respectivo dispositivo.[0059] Video encoder 20 and video decoder 30 may be implemented as any of a variety of suitable encoder circuitry, such as one or more microprocessors, digital signal processors (DSPs), application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), discrete logic, software, hardware, firmware, or any combinations thereof. Where the techniques have been implemented partially in software, a device may store instructions for the software on a suitable non-transitory computer-readable medium and execute the instructions in hardware using one or more processors to perform the techniques of this disclosure. Each of video encoder 20 and video decoder 30 may be included in one or more encoders or decoders, one of which may be integrated as part of a combined encoder/decoder (CODEC) in a respective device.
[0060] Esta revelação pode, de modo geral, se referir ao codificador de vídeo 20 "que sinaliza" determinadas informações para outro dispositivo, como decodificador de vídeo 30. O termo “que sinaliza” pode se referir, de modo geral, à comunicação de elementos de sintaxe e/ou outros dados usados para decodificar os dados de vídeo compactados. Tal comunicação pode ocorrer em tempo real ou quase real. Alternativamente, essa comunicação pode ocorrer por um lapso de tempo, como pode ocorrer quando se armazena elementos de sintaxe em uma mídia de armazenamento legível por computador em um fluxo de bits codificado no momento de codificação, que pode, então, ser recuperado por um dispositivo de decodificação em qualquer momento após ser armazenado nessa mídia.[0060] This disclosure may generally refer to video encoder 20 "signaling" certain information to another device, such as video decoder 30. The term "signaling" may generally refer to the communication of syntax elements and/or other data used to decode the compressed video data. Such communication may occur in real time or near real time. Alternatively, such communication may occur over a period of time, as may occur when storing syntax elements on a computer-readable storage medium in a bit stream encoded at the time of encoding, which may then be retrieved by a decoding device at any time after being stored on such medium.
[0061] O codificador de vídeo 20 e decodificador de vídeo 30 podem operar de acordo com um padrão de conversão em código de vídeo. Os padrões de conversão em código de vídeo exemplificativos desenvolvidos pela Equipe de Colaboração Conjunta em Codificação de Vídeo (JCT-VC) bem como Equipe de Colaboração Conjunta em Desenvolvimento de Extensão de Vídeo 3D (JCT-3V) do Grupo de Especialistas de Codificação de Vídeo de ITU-T (VCEG) e Grupo de Especialistas de Imagem em Movimento de ISO/IEC (MPEG) incluem Codificação de Vídeo de Alta Eficiência (HEVC) ou ITU-T H.265, incluindo sua extensão de faixa, extensão de multivistas (MV-HEVC) e extensão escalonável (SHVC). O documento de padrão de HEVC finalizados é publicado como “ITU-T H.265, SERIES H: AUDIOVISUAL AND MULTIMEDIA SYSTEMS Infrastructure of audiovisual services - Coding of moving video - High efficiency video coding”, Telecommunication Standardization Sector of International Telecommunication Union (ITU), abril de 2013. Alternativamente, o codificador de vídeo 20 e decodificador de vídeo 30 podem operar de acordo com outros padrões de indústria ou proprietários, como ISO/IEC MPEG-4 Visual e ITU-T H.264 (também conhecido como ISO/IEC MPEG-4 AVC), incluindo sua extensão de Codificação de Vídeo Escalonável (SVC) e extensão de Codificação de Vídeo de Multivistas (MVC). Entretanto, as técnicas desta revelação não são limitadas a qualquer padrão de conversão em código particular. Por exemplo, as técnicas desta revelação podem ser usadas com uma variedade de outros técnicas de conversão em código de vídeo não proprietárias e proprietárias ou padrões subsequentes, como ITU-T H.266.[0061] Video encoder 20 and video decoder 30 may operate in accordance with a video coding standard. Exemplary video coding standards developed by the Joint Collaboration Team on Video Coding (JCT-VC) as well as the Joint Collaboration Team on 3D Video Extension Development (JCT-3V) of the ITU-T Video Coding Experts Group (VCEG) and ISO/IEC Moving Picture Experts Group (MPEG) include High Efficiency Video Coding (HEVC) or ITU-T H.265, including its range extension, multi-view extension (MV-HEVC), and scalable extension (SHVC). The finalized HEVC standards document is published as “ITU-T H.265, SERIES H: AUDIOVISUAL AND MULTIMEDIA SYSTEMS Infrastructure of audiovisual services - Coding of moving video - High efficiency video coding”, Telecommunication Standardization Sector of International Telecommunication Union (ITU), April 2013. Alternatively, video encoder 20 and video decoder 30 may operate in accordance with other industry or proprietary standards, such as ISO/IEC MPEG-4 Visual and ITU-T H.264 (also known as ISO/IEC MPEG-4 AVC), including its Scalable Video Coding (SVC) extension and Multiview Video Coding (MVC) extension. However, the techniques of this disclosure are not limited to any particular coding standard. For example, the techniques of this disclosure may be used with a variety of other non-proprietary and proprietary video coding techniques or subsequent standards, such as ITU-T H.266.
[0062] Conforme notado acima, para modos interpredição, o codificador de vídeo 20 pode buscar por um bloco semelhante àquele sendo codificado (um “bloco atual”) em uma imagem de outro local temporal, referida como imagem de referência. As informações usadas para identificar a imagem de referência podem ser referidas como informações de movimento. Por exemplo, para cada bloco, um conjunto de informações de movimento pode estar disponível. Um conjunto de informações de movimento contém informações de movimento para direções de predição para frente e para trás. No presente contexto, as direções de predição para frente e para trás são duas direções de predição de um modo de predição bidirecional e os termos “para frente” e “para trás” não têm necessariamente um significado de geometria, em vez disso os mesmos correspondem à lista de imagem de referência 0 (RefPicList0) e lista de imagem de referência 1 (RefPicList1) de uma imagem atual. Quando apenas uma lista de imagem de referência está disponível para uma imagem ou fatia, apenas a RefPicList0 está disponível e as informações de movimento de cada bloco de uma fatia está sempre para frente.[0062] As noted above, for interprediction modes, the video encoder 20 may search for a block similar to the one being encoded (a “current block”) in a picture from another temporal location, referred to as a reference picture. The information used to identify the reference picture may be referred to as motion information. For example, for each block, a set of motion information may be available. A set of motion information contains motion information for forward and backward prediction directions. In the present context, the forward and backward prediction directions are two prediction directions of a bidirectional prediction mode, and the terms “forward” and “backward” do not necessarily have a geometric meaning, rather they correspond to the reference picture list 0 (RefPicList0) and reference picture list 1 (RefPicList1) of a current picture. When only one reference image list is available for an image or slice, only RefPicList0 is available and the motion information for each block of a slice is always forward.
[0063] Em alguns casos, um vetor de movimento juntamente com seu índice de referência é usado em processos de decodificação, esse vetor de movimento com o índice de referência associado é denotado como um conjunto uni-preditivo de informações de movimento.[0063] In some cases, a motion vector together with its reference index is used in decoding processes, this motion vector with the associated reference index is denoted as a uni-predictive set of motion information.
[0064] Para cada direção de predição, as informações de movimento devem conter um índice de referência e um vetor de movimento. Em alguns casos, para simplicidade, um próprio vetor de movimento pode ser referido de uma forma que se supõe que tem um índice de referência associado. Um índice de referência é usado para identificar uma imagem de referência na lista de imagem de referência atual (RefPicList0 ou RefPicList1). Um vetor de movimento tem um componente horizontal e um vertical.[0064] For each prediction direction, the motion information must contain a reference index and a motion vector. In some cases, for simplicity, a motion vector itself may be referred to in a way that is assumed to have an associated reference index. A reference index is used to identify a reference picture in the current reference picture list (RefPicList0 or RefPicList1). A motion vector has a horizontal and a vertical component.
[0065] A contagem de ordem de imagem (POC) é amplamente usada em padrões de conversão em código de vídeo para identificar uma ordem de exibição de uma imagem. Embora existam casos em que duas imagens dentro de uma sequência de vídeo codificada podem ter o mesmo valor de POC, o mesmo, tipicamente, não ocorrer dentro de uma sequência de vídeo codificada. Quando múltiplas sequências de vídeo convertidas em código estão presentes em um fluxo de bits, as imagens com um mesmo valor de POC podem estar próximas entre si no que diz respeito à ordem de decodificação. Os valores de POC das imagens são tipicamente usados para construção de lista de imagem de referência, derivação do conjunto de imagem de referência como em HEVC e escalonamento de vetor de movimento.[0065] Picture Order Count (POC) is widely used in video encoder standards to identify a display order of a picture. While there are cases where two pictures within an encoded video sequence may have the same POC value, this is typically not the case within an encoded video sequence. When multiple encoded video sequences are present in a bitstream, pictures with the same POC value may be close to each other in decoding order. The POC values of the pictures are typically used for reference picture list construction, reference picture set derivation as in HEVC, and motion vector scaling.
[0066] Em H.264/AVC, cada inter macrobloco (MB) pode ser particionado em quatro formas diferentes que incluem: uma partição de 16 x 16 MB; duas partições de 16 x 8 MB; duas partições de 8 x 16 MB; e quatro partições de 8 x 8 MB. As partições de diferentes em um MB podem ter diferentes valores de índice de referência para cada direção (RefPicList0 ou RefPicList1). Quando um MB não for particionado em quatro partições de 8 x 8 MB, o tem apenas um vetor de movimento para cada partição de MB em cada direção.[0066] In H.264/AVC, each inter macroblock (MB) can be partitioned into four different ways which include: one 16 x 16 MB partition; two 16 x 8 MB partitions; two 8 x 16 MB partitions; and four 8 x 8 MB partitions. Different partitions within a MB can have different reference index values for each direction (RefPicList0 or RefPicList1). When a MB is not partitioned into four 8 x 8 MB partitions, there is only one motion vector for each MB partition in each direction.
[0067] Quando um MB for particionado em quatro partições de 8 x 8 MB, cada partição de 8 x 8 MB pode ser particionada adicionalmente em sub-blocos, cada um dos quais pode ter um vetor de movimento diferente em cada direção. Existem quatro formas diferentes de obter sub- blocos a partir de uma partição de 8 x 8 MB que incluem: um sub-bloco 8 x 8; dois sub-blocos 8 x 4; dois sub-blocos 4 x 8; e quatro sub-blocos 4 x 4. Cada sub-bloco pode ter um vetor de movimento diferente em cada direção. Portanto, o vetor de movimento está presente em um nível igual a maior do que sub-bloco.[0067] When a MB is partitioned into four 8 x 8 MB partitions, each 8 x 8 MB partition may be further partitioned into sub-blocks, each of which may have a different motion vector in each direction. There are four different ways to obtain sub-blocks from an 8 x 8 MB partition which include: one 8 x 8 sub-block; two 8 x 4 sub-blocks; two 4 x 8 sub-blocks; and four 4 x 4 sub-blocks. Each sub-block may have a different motion vector in each direction. Therefore, the motion vector is present at a level equal to or greater than the sub-block.
[0068] Em AVC, o modo direto temporal poderia estar habilitado em MB ou nível de partição de MB para modo de salto ou direto em fatias de B. Para cada partição de MB, os vetores de movimento do bloco colocalizado com a partição de MB atual na RefPicList1 [0] do bloco atual são usados para derivar os vetores de movimento. Cada vetor de movimento no bloco colocalizado é escalonado com base em distâncias de POC. Em AVC, um modo direto também pode prever as informações de movimento a partir dos vizinhos espaciais, que podem ser referidos como modo direto espacial.[0068] In AVC, temporal direct mode could be enabled at MB or MB partition level for skip or direct mode on B slices. For each MB partition, the motion vectors of the block co-located with the current MB partition in the RefPicList1[0] of the current block are used to derive the motion vectors. Each motion vector in the co-located block is scaled based on POC distances. In AVC, a direct mode can also predict the motion information from the spatial neighbors, which can be referred to as spatial direct mode.
[0069] Em HEVC, para gerar uma representação codificada de uma imagem, o codificador de vídeo 20 pode gerar um conjunto de unidades de árvore de conversão em código (CTUs). Cada uma das CTUs pode compreender um bloco de árvore de conversão em código (CTB) de amostras de luma, dois CTBs correspondentes de amostras de croma, e estruturas de sintaxe usadas para converter em código as amostras dos CTBs. Em imagens de monocroma ou imagens que têm três planos de cor separados, uma CTU pode compreender um único bloco CTB e estruturas de sintaxe usadas para converter em código as amostras do bloco de árvore de conversão em código.[0069] In HEVC, to generate a coded representation of an image, the video encoder 20 may generate a set of code tree units (CTUs). Each of the CTUs may comprise a code tree block (CTB) of luma samples, two corresponding CTBs of chroma samples, and syntax structures used to code-convert the samples from the CTBs. In monochrome images or images that have three separate color planes, a CTU may comprise a single CTB block and syntax structures used to code-convert the samples from the code tree block.
[0070] Um bloco de árvore de conversão em código pode ser um bloco NxN de amostras. O tamanho de um CTB pode estar nas faixas de 16 x 16 a 64 x 64 no perfil principal de HEVC (embora, tecnicamente, os tamanhos de CBT de 8 x 8 possam ser suportados). Uma unidade de conversão em código (CU) poderia ser do mesmo tamanho de um CTB e tão pequeno quanto 8 x 8. Cada unidade de conversão em código é convertida em código com um modo. Uma CTU também pode ser denominada como "bloco de árvore" ou uma "maior unidade de conversão em código" (LCU). As CTUs de HEVC podem ser amplamente análogas aos macroblocos de outros padrões, como H.264/AVC. No entanto, a CTU não se limita necessariamente a um tamanho particular e pode incluir uma ou mais unidades de conversão em código (CUs). Uma fatia pode incluir um número inteiro de CTUs ordenadas consecutivamente em uma ordem de varredura raster.[0070] A CTB block may be an NxN block of samples. The size of a CTB may be in the ranges of 16 x 16 to 64 x 64 in the HEVC main profile (although technically 8 x 8 CTB sizes may be supported). A CTB (CU) could be the same size as a CTB and as small as 8 x 8. Each CTU is code-converted with a mode. A CTU may also be referred to as a "tree block" or a "largest code-conversion unit" (LCU). HEVC CTUs may be broadly analogous to macroblocks in other standards such as H.264/AVC. However, a CTU is not necessarily limited to a particular size and may include one or more CTBs (CUs). A slice may include an integer number of CTUs ordered consecutively in a raster scan order.
[0071] A fim de gerar uma CTU convertida em código, o codificador de vídeo 20 pode realizar, recursivamente, o particionamento de árvore quadrática nos blocos de árvore de conversão em código de uma CTU para dividir os blocos de árvore de conversão em código em blocos de conversão em código, por conseguinte, o nome "unidades de árvore de conversão em código". Um bloco de árvore de conversão em código pode ser um bloco NxN de amostras. Uma CU pode compreender um bloco de conversão em código de amostras de luma e dois blocos de conversão em código correspondentes de amostras de croma de uma imagem que tem uma matriz de amostra de luma, uma matriz de amostra de Cb e uma matriz de amostra de Cr e estruturas de sintaxe usadas para converter em código as amostras dos blocos de conversão em código. Em imagens de monocroma ou imagens que têm três planos de cor separados, uma CU pode compreender um único bloco de conversão em código e estruturas de sintaxe usadas para converter em código as amostras do bloco de conversão em código.[0071] In order to generate a code-converted CTU, the video encoder 20 may recursively perform quadratic tree partitioning on the code-converting tree blocks of a CTU to divide the code-converting tree blocks into code-converting blocks, hence the name "code-converting tree units". A code-converting tree block may be an NxN block of samples. A CU may comprise a code-converting block of luma samples and two corresponding code-converting blocks of chroma samples of a picture having a luma sample matrix, a Cb sample matrix, and a Cr sample matrix, and syntax structures used to code-convert the samples of the code-converting blocks. In monochrome pictures or pictures having three separate color planes, a CU may comprise a single code-converting block and syntax structures used to code-convert the samples of the code-converting block.
[0072] O codificador de vídeo 20 pode particionar um bloco de conversão em código de uma CU em um ou mais blocos de predição. Um bloco de predição é um bloco (isto é, quadrado ou não quadrado) retangular de amostras no qual a mesma predição é aplicada. Uma unidade de predição (PU) de uma CU pode compreender um bloco de predição de amostras de luma, dois blocos de predição correspondentes de amostras de croma e estruturas de sintaxe usadas para prever os blocos de predição. Nas imagens de monocroma ou em imagens que têm três planos de cor separados, uma PU pode compreender um único bloco de predição e estruturas de sintaxe usadas para prever o bloco de predição. O codificador de vídeo 20 pode gerar blocos preditivos de luma, de Cb e de Cr para blocos de predição de luma, de Cb e de Cr de cada PU da CU.[0072] The video encoder 20 may partition a code conversion block of a CU into one or more prediction blocks. A prediction block is a rectangular (i.e., square or non-square) block of samples to which the same prediction is applied. A prediction unit (PU) of a CU may comprise a prediction block of luma samples, two corresponding prediction blocks of chroma samples, and syntax structures used to predict the prediction blocks. In monochrome images or in images that have three separate color planes, a PU may comprise a single prediction block and syntax structures used to predict the prediction block. The video encoder 20 may generate luma, Cb, and Cr predictive blocks for luma, Cb, and Cr prediction blocks of each PU of the CU.
[0073] O codificador de vídeo 20 pode usar intrapredição ou interpredição para gerar os blocos preditivos para uma PU. Se o codificador de vídeo 20 usar intrapredição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar blocos preditivos da PU com base nas amostras decodificadas da imagem associada à PU. Se o codificador de vídeo 20 usar interpredição para gerar os blocos preditivos de uma PU, o codificador de vídeo 20 pode gerar os blocos preditivos da PU com base em amostras decodificadas de uma ou mais imagens diferentes da imagem associada à PU. Quando uma CU for interconvertida em código, a CU pode ser particionada adicionalmente em duas ou quatro PUs. Quando duas PUs estão presentes em uma CU, as PUs podem, em alguns casos, ter o tamanho de meio retângulo ou tamanho de dois retângulos com um tamanho de um-quarto ou três-quartos da CU.[0073] Video encoder 20 may use intra-prediction or inter-prediction to generate the predictive blocks for a PU. If video encoder 20 uses intra-prediction to generate the predictive blocks for a PU, video encoder 20 may generate predictive blocks for the PU based on decoded samples of the picture associated with the PU. If video encoder 20 uses inter-prediction to generate the predictive blocks for a PU, video encoder 20 may generate the predictive blocks for the PU based on decoded samples of one or more pictures other than the picture associated with the PU. When a CU is inter-code converted, the CU may be further partitioned into two or four PUs. When two PUs are present in a CU, the PUs may in some cases be the size of half a rectangle or the size of two rectangles with a size of one-quarter or three-quarters of the CU.
[0074] Após o codificador de vídeo 20 gerar blocos de luma, de Cb e de Cr preditivos para uma ou mais PUs de uma CU, o codificador de vídeo 20 pode gerar um bloco residual de luma para a CU. Cada amostra no bloco residual de luma da CU indica uma diferença entre uma amostra de luma em um dos blocos preditivos de luma da CU e uma amostra correspondente no bloco de conversão em código de luma original da CU. Além disso, o codificador de vídeo 20 pode gerar um bloco residual de Cb para a CU. Cada amostra no bloco residual de Cb da CU pode indicar uma diferença entre uma amostra de Cb em um dentre os blocos preditivos de Cb da CU e uma amostra correspondente no bloco de conversão em código de Cb original da CU. O codificador de vídeo 20 também pode gerar um bloco residual de Cr para a CU. Cada amostra no bloco residual de Cr da CU pode indicar uma diferença entre uma amostra de Cr em um dos blocos de Cr preditivos da CU e uma amostra correspondente no bloco de conversão em código de Cr original da CU.[0074] After video encoder 20 generates predictive luma, Cb, and Cr blocks for one or more PUs of a CU, video encoder 20 may generate a luma residual block for the CU. Each sample in the CU's luma residual block indicates a difference between a luma sample in one of the CU's predictive luma blocks and a corresponding sample in the CU's original luma code conversion block. Additionally, video encoder 20 may generate a Cb residual block for the CU. Each sample in the CU's Cb residual block may indicate a difference between a Cb sample in one of the CU's predictive Cb blocks and a corresponding sample in the CU's original Cb code conversion block. Video encoder 20 may also generate a Cr residual block for the CU. Each sample in the CU Cr residual block may indicate a difference between a Cr sample in one of the CU's predictive Cr blocks and a corresponding sample in the CU's original Cr code conversion block.
[0075] Além disso, o codificador de vídeo 20 pode usar o particionamento de árvore quadrática para decompor os blocos residuais de luma, de Cb e de Cr de uma CU em um ou mais blocos de transformada de luma, de Cb e de Cr. Um bloco de transformada é um bloco (por exemplo, quadrado ou não quadrado) retangular de amostras no qual a mesma transformada é aplicada. Uma unidade de transformada (TU) de uma CU pode compreender um bloco de transformada de amostras de luma, dois blocos de transformada correspondentes de amostras de croma e estruturas de sintaxe usadas para transformar as amostras de bloco de transformada. Assim, cada TU de uma CU pode ser associada a um bloco de transformada de luma, um bloco de transformada de Cb e um bloco de transformada de Cr. O bloco de transformada de luma associado à TU pode ser um sub-bloco do bloco residual de luma da CU. O bloco de transformada de Cb pode ser um sub-bloco do bloco residual de Cb da CU. O bloco de transformada de Cr pode ser um sub-bloco do bloco residual de Cr da CU. Nas imagens de monocroma ou nas imagens que têm três planos de cor separados, uma TU pode compreender um único bloco de transformada e estruturas de sintaxe usadas para transformar as amostras do bloco de transformada.[0075] Furthermore, the video encoder 20 may use quadratic tree partitioning to decompose the luma, Cb, and Cr residual blocks of a CU into one or more luma, Cb, and Cr transform blocks. A transform block is a rectangular (e.g., square or non-square) block of samples to which the same transform is applied. A transform unit (TU) of a CU may comprise a transform block of luma samples, two corresponding transform blocks of chroma samples, and syntax structures used to transform the transform block samples. Thus, each TU of a CU may be associated with a luma transform block, a Cb transform block, and a Cr transform block. The luma transform block associated with the TU may be a subblock of the luma residual block of the CU. The Cb transform block may be a subblock of the Cb residual block of the CU. The Cr transform block may be a sub-block of the Cr residual block of the CU. In monochrome images or in images that have three separate color planes, a TU may comprise a single transform block and syntax structures used to transform the samples of the transform block.
[0076] O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de luma de uma TU para gerar um bloco de coeficiente de luma para a TU. Um bloco de coeficiente pode ser uma matriz bidimensional de coeficientes de transformada. Um coeficiente de transformada pode ser uma quantidade escalar. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de Cb de uma TU para gerar um bloco de coeficiente de Cb para a TU. O codificador de vídeo 20 pode aplicar uma ou mais transformadas a um bloco de transformada de Cr de uma TU para gerar um bloco de coeficiente de Cr para a TU.[0076] Video encoder 20 may apply one or more transforms to a luma transform block of a TU to generate a luma coefficient block for the TU. A coefficient block may be a two-dimensional array of transform coefficients. A transform coefficient may be a scalar quantity. Video encoder 20 may apply one or more transforms to a Cb transform block of a TU to generate a Cb coefficient block for the TU. Video encoder 20 may apply one or more transforms to a Cr transform block of a TU to generate a Cr coefficient block for the TU.
[0077] Após gerar um bloco de coeficiente (por exemplo, um bloco de coeficiente de luma, um bloco de coeficiente de Cb ou um bloco de coeficiente de Cr), o codificador de vídeo 20 pode quantizar o bloco de coeficiente. Em geral, a quantização se refere a um processo no qual os coeficientes de transformada são quantizados para possivelmente reduzir a quantidade de dados usados para representar os coeficientes de transformada, o que fornece uma compactação adicional. Após o codificador de vídeo 20 quantizar um bloco de coeficiente, o codificador de vídeo 20 pode codificar por entropia elementos de sintaxe que indicam os coeficientes de transformada quantizados. Por exemplo, o codificador de vídeo 20 pode realizar Codificação Aritmética Binária Adaptativa Ao Contexto (CABAC) nos elementos de sintaxe que indicam os coeficientes de transformada quantizados.[0077] After generating a coefficient block (e.g., a luma coefficient block, a Cb coefficient block, or a Cr coefficient block), the video encoder 20 may quantize the coefficient block. In general, quantization refers to a process in which transform coefficients are quantized to potentially reduce the amount of data used to represent the transform coefficients, which provides additional compression. After the video encoder 20 quantizes a coefficient block, the video encoder 20 may entropy encode syntax elements indicating the quantized transform coefficients. For example, the video encoder 20 may perform Context Adaptive Binary Arithmetic Coding (CABAC) on the syntax elements indicating the quantized transform coefficients.
[0078] O codificador de vídeo 20 pode emitir um fluxo de bits que inclui uma sequência de bits que forma uma representação de imagens convertidas em código e dados associados. O fluxo de bits pode compreender uma sequência de unidades de camada de abstração de rede (NAL). Uma unidade de NAL é uma estrutura de sintaxe que contém uma indicação do tipo de dados na unidade de NAL e bytes e que contêm esses dados na forma de uma carga de sequência de bytes brutos (RBSP) intercalados conforme necessário com bits de prevenção de emulação. Cada uma das unidades de NAL inclui um cabeçalho de unidade NAL e encapsula uma RBSP.[0078] The video encoder 20 may output a bit stream that includes a sequence of bits that form a representation of encoded images and associated data. The bit stream may comprise a sequence of network abstraction layer (NAL) units. A NAL unit is a syntax structure that contains an indication of the type of data in the NAL unit and bytes that contain that data in the form of a raw byte sequence payload (RBSP) interleaved as necessary with emulation prevention bits. Each of the NAL units includes a NAL unit header and encapsulates an RBSP.
[0079] Tipos diferentes de unidades de NAL podem encapsular tipos diferentes de RBSPs. Por exemplo, um primeiro tipo de unidade de NAL pode encapsular uma RBSP para um ajuste de parâmetro de imagem (PPS), um segundo tipo de unidade de NAL pode encapsular uma RBSP para uma fatia codificada, um terceiro tipo de unidade de NAL pode encapsular uma RBSP para as SEI e assim por diante. As unidades de NAL que encapsulam as RBSPs para dados de conversão em código de vídeo (em oposição às RBSPs para os conjuntos de parâmetros e mensagens de SEI) podem ser denominadas como unidades de NAL de camada de conversão em código de vídeo (VCL).[0079] Different types of NAL units may encapsulate different types of RBSPs. For example, a first type of NAL unit may encapsulate an RBSP for a picture parameter adjustment (PPS), a second type of NAL unit may encapsulate an RBSP for a coded slice, a third type of NAL unit may encapsulate an RBSP for SEI, and so on. NAL units that encapsulate RBSPs for video codec data (as opposed to RBSPs for parameter sets and SEI messages) may be referred to as video codec layer (VCL) NAL units.
[0080] O decodificador de vídeo 30 pode receber um fluxo de bits gerado pelo codificador de vídeo 20. Além disso, o decodificador de vídeo 30 pode realizar análise sintática do fluxo de bits para obter elementos de sintaxe provenientes do fluxo de bits. O decodificador de vídeo 30 pode reconstruir as imagens dos dados de vídeo com base, pelo menos em parte, nos elementos de sintaxe obtidos a partir do fluxo de bits. O processo para reconstruir os dados de vídeo pode ser, em geral, recíproco ao processo realizado pelo codificador de vídeo 20. Além disso, o decodificador de vídeo 30 pode quantizar, inversamente, os coeficientes de blocos associados às TUs de uma CU atual. O decodificador de vídeo 30 pode realizar transformadas inversas nos blocos de coeficientes para reconstruir blocos de transformada associados às TUs da CU atual. O decodificador de vídeo 30 pode reconstruir os blocos de conversão em código da CU atual adicionando-se as amostras dos blocos preditivos para as PUs da CU atual às amostras correspondentes dos blocos de transformada das TUs da CU atual. Reconstruindo-se os blocos de conversão em código para cada CU de uma imagem, o decodificador de vídeo 30 pode reconstruir a imagem.[0080] The video decoder 30 may receive a bit stream generated by the video encoder 20. In addition, the video decoder 30 may perform parsing of the bit stream to obtain syntax elements from the bit stream. The video decoder 30 may reconstruct images from the video data based, at least in part, on the syntax elements obtained from the bit stream. The process for reconstructing the video data may generally be reciprocal to the process performed by the video encoder 20. In addition, the video decoder 30 may inversely quantize the coefficients of blocks associated with the TUs of a current CU. The video decoder 30 may perform inverse transforms on the coefficient blocks to reconstruct transform blocks associated with the TUs of the current CU. The video decoder 30 can reconstruct the code conversion blocks of the current CU by adding the samples of the predictive blocks for the PUs of the current CU to the corresponding samples of the transform blocks of the TUs of the current CU. By reconstructing the code conversion blocks for each CU of a picture, the video decoder 30 can reconstruct the picture.
[0081] Quando uma CU for interconvertida em código, um conjunto de informações de movimento está presente para cada PU. Além disso, cada PU é convertida em código com um modo de interpredição exclusivo para derivar um conjunto de informações de movimento. No padrão de HEVC, existem dois modos de interpredição, denominados mescla (pular é considerado um caso especial de mescla) e modos de predição de vetor de movimento predição avançado (AMVP) respectivamente para uma unidade de predição (PU).[0081] When a CU is inter-code converted, a set of motion information is present for each PU. In addition, each PU is code converted with a unique inter-prediction mode to derive a set of motion information. In the HEVC standard, there are two inter-prediction modes, called blending (skipping is considered a special case of blending) and advanced motion vector prediction (AMVP) modes respectively for a prediction unit (PU).
[0082] Em AMVP ou modo de mescla, uma lista de candidato de vetor de movimento (MV) é mantida para múltiplos previsores de vetor de movimento. O vetor (ou vetores) de movimento, bem como índices de referência no modo de mescla, da PU atual é gerado tirando-se um candidato da lista de candidato de MV.[0082] In AMVP or blend mode, a motion vector (MV) candidate list is maintained for multiple motion vector predictors. The motion vector (or vectors), as well as reference indices in blend mode, of the current PU is generated by taking a candidate from the MV candidate list.
[0083] A lista de candidato de MV contém até cinco candidatos para o modo de mescla e dois candidatos para o modo de AMVP. Um candidato de mescla pode ter um conjunto de informações de movimento, por exemplo, vetores de movimento correspondentes a ambas as listas de imagem de referência (lista 0 e lista 1) e os índices de referência. Se um candidato de mescla for identificado por um índice de mescla, as imagens de referência são usadas para a predição dos blocos atuais, bem como os vetores de movimento associados são determinados. Entretanto, sob o modo de AMVP para cada direção de predição potencial a partir da lista 0 ou lista 1, um índice de referência precisa ser explicitamente sinalizado, juntamente com um índice de MVP para a lista de candidato de MV visto que o candidato de AMVP contém apenas um vetor de movimento. No modo de AMVP, os vetores de movimento previstos podem ser adicionalmente refinados.[0083] The MV candidate list contains up to five candidates for the blending mode and two candidates for the AMVP mode. A blend candidate may have a set of motion information, e.g., motion vectors corresponding to both reference image lists (list 0 and list 1) and reference indices. If a blend candidate is identified by a blend index, the reference images are used for prediction of the current blocks, and the associated motion vectors are determined. However, under the AMVP mode for each potential prediction direction from list 0 or list 1, a reference index needs to be explicitly flagged, along with an MVP index for the MV candidate list since the AMVP candidate contains only one motion vector. In the AMVP mode, the predicted motion vectors may be further refined.
[0084] Bem como ser visto acima, um candidato de mescla corresponde a um conjunto de informações de movimento completo enquanto um candidato de AMVP contém apenas um vetor de movimento para uma direção de predição e índice de referência específica. Os candidatos para ambos os modos são derivados de modo semelhante dos mesmos blocos vizinhos espacial e temporal, conforme descrito em relação às Figuras 4 e 5 abaixo.[0084] As can be seen above, a blend candidate corresponds to a complete motion information set while an AMVP candidate contains only a motion vector for a specific prediction direction and reference index. Candidates for both modes are similarly derived from the same spatial and temporal neighboring blocks, as described with respect to Figures 4 and 5 below.
[0085] De acordo com os aspectos desta revelação, conforme descrito em maiores detalhes abaixo, o codificador de vídeo 20 e/ou o decodificador de vídeo 30 podem ser configurados para realizar qualquer combinação das técnicas descritas no presente documento para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em relação à derivação de informações de movimento, codificador de vídeo 20 e/ou decodificador de vídeo 30 pode ser configurado para derivar informações de movimento realizando-se uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. A correspondência pode ser determinada com base em uma quantidade de semelhança entre dados de referência, e pode ser referida no presente documento como determinando uma “correspondência” ou “melhor correspondência”.[0085] In accordance with aspects of this disclosure as described in greater detail below, video encoder 20 and/or video decoder 30 may be configured to perform any combination of the techniques described herein to derive motion information, perform block partitioning, and/or interpolate video data. With respect to deriving motion information, video encoder 20 and/or video decoder 30 may be configured to derive motion information by performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block. The match may be determined based on an amount of similarity between reference data, and may be referred to herein as determining a “match” or “best match.”
[0086] Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode converter em código inicialmente um ou mais elementos de sintaxe que indicam se o processo de derivação de movimento está habilitado. Em alguns casos, o um ou mais elementos de sintaxe podem ser incorporados com outro modo, como o modo de mescla descrito acima. Por exemplo, conforme descrito em maiores detalhes em relação ao exemplo da Figura 10, o codificador de vídeo 20 e/ou decodificador de vídeo 30 convertem em código um ou mais elementos de sintaxe quando se realiza o modo de mescla (por exemplo, um sinalizador, um índice em uma lista de candidato de mescla, ou similares) que indica se deve realizar derivação de movimento.[0086] In some examples, video encoder 20 and/or video decoder 30 may initially encode one or more syntax elements that indicate whether the motion derivation process is enabled. In some cases, the one or more syntax elements may be incorporated with another mode, such as the blending mode described above. For example, as described in greater detail with respect to the example of Figure 10, video encoder 20 and/or video decoder 30 encodes one or more syntax elements when performing the blending mode (e.g., a flag, an index into a blend candidate list, or the like) that indicates whether to perform motion derivation.
[0087] Em casos em que derivação de movimento está habilitada, de acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode realizar derivação de vetor de movimento correspondida em padrão. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode converter em código um ou mais elementos de sintaxe que indica qual modo de derivação de informações de movimento deve aplicar a partir de uma pluralidade de modos de derivação de informações de movimento. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode converter em código um sinalizador para distinguir entre dois modos de informações de derivação de movimento ou um índice para distinguir entre mais de dois modos de derivação de informações de movimento. Conforme descrito no presente documento, modos de derivação de informações de movimento correspondidos em padrão exemplificativos incluem correspondência bilateral ou correspondência de modelo.[0087] In cases where motion derivation is enabled, in accordance with aspects of this disclosure, video encoder 20 and/or video decoder 30 may perform pattern-matched motion vector derivation. For example, video encoder 20 and/or video decoder 30 may encode one or more syntax elements that indicate which motion information derivation mode to apply from a plurality of motion information derivation modes. Video encoder 20 and/or video decoder 30 may encode a flag to distinguish between two motion information derivation modes or an index to distinguish between more than two motion information derivation modes. As described herein, exemplary pattern-matched motion information derivation modes include two-way matching or template matching.
[0088] Durante o processo de derivação de movimento, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar um vetor de movimento inicial para um bloco inteiro (por exemplo, uma PU inteira) com base no processo de derivação de movimento selecionado. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode usar vetores de movimento a partir de uma lista de candidato associado ao modo de mescla e determinar qual vetor de movimento a partir da lista de candidato resulta em uma melhor correspondência. Isto é, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode determinar qual vetor de movimento a partir da lista de candidato, quando usado no processo de derivação de movimento selecionado, resulta em um primeiro conjunto de dados de referência que correspondem a u segundo conjunto de dados de referência fora do bloco atual, por exemplo, dados de referência que correspondem de modo aproximado os dados na imagem atual ou outra imagem de referência. Em geral, “melhor correspondência” pode se referir a dados de vídeo que são mais semelhantes em termos de diferenças de pixel.[0088] During the motion derivation process, the video encoder 20 and/or video decoder 30 may derive an initial motion vector for an entire block (e.g., an entire PU) based on the selected motion derivation process. For example, the video encoder 20 and/or video decoder 30 may use motion vectors from a candidate list associated with the blending mode and determine which motion vector from the candidate list results in a best match. That is, the video encoder 20 and/or video decoder 30 may determine which motion vector from the candidate list, when used in the selected motion derivation process, results in a first set of reference data that matches a second set of reference data outside of the current block, e.g., reference data that closely matches data in the current image or another reference image. In general, “best match” may refer to video data that is most similar in terms of pixel differences.
[0089] Como um exemplo para propósito de ilustração, conforme descrito em maiores detalhes em relação à Figura 8, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode selecionar um modo de derivação de informações de movimento de correspondência de modelo. Neste exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode selecionar o vetor de movimento candidato a partir do modo de mescla com base no candidato de vetor que resulta em um modelo que corresponde de modo mais próximo um modelo em uma imagem de referência. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode configurado para realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual, em que o primeiro conjunto de dados compreende o modelo na imagem atual e o segundo conjunto de dados de referência compreende o modelo na imagem de referência. Em alguns casos, conforme descrito em maiores detalhes abaixo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode adicional ou alternativamente selecionar um vetor de movimento candidato com base em um custo de correspondência mínimo.[0089] As an example for purposes of illustration, as described in greater detail with respect to Figure 8, the video encoder 20 and/or video decoder 30 may select a template-matching motion information derivation mode. In this example, the video encoder 20 and/or video decoder 30 may select the candidate motion vector from the vector candidate blending mode that results in a template that most closely matches a template in a reference image. For example, the video encoder 20 and/or video decoder 30 may be configured to perform a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block, wherein the first set of data comprises the template in the current image and the second set of reference data comprises the template in the reference image. In some cases, as described in greater detail below, video encoder 20 and/or video decoder 30 may additionally or alternatively select a candidate motion vector based on a minimum matching cost.
[0090] De acordo com os aspectos desta revelação, após determinar o vetor de movimento candidato, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode, adicionalmente, refinar o vetor de movimento candidato para derivar informações de movimento para o bloco atual. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode realizar uma busca (por exemplo, uma busca com o uso do modo de derivação de informações de movimento) em uma área predefinida da imagem de referência indicada pelo vetor de movimento candidato. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar as informações de movimento para o bloco atual com base no vetor de movimento que indica dados de referência na área predefinida que têm uma melhor correspondência e/ou um custo de correspondência mínimo a dados de vídeo da imagem atual.[0090] In accordance with aspects of this disclosure, after determining the candidate motion vector, the video encoder 20 and/or video decoder 30 may further refine the candidate motion vector to derive motion information for the current block. For example, the video encoder 20 and/or video decoder 30 may perform a search (e.g., a search using the motion information derivation mode) in a predefined area of the reference picture indicated by the candidate motion vector. The video encoder 20 and/or video decoder 30 may derive the motion information for the current block based on the motion vector indicating reference data in the predefined area that has a best match and/or a minimum matching cost to video data of the current picture.
[0091] Em alguns casos, de acordo com aspectos desta revelação, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode dividir o bloco de dados de vídeo em sub-blocos quando se deriva informações de movimento. Por exemplo, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar separadamente informações de movimento para cada sub-bloco de um bloco maior. Em alguns casos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode usar as informações de movimento derivadas para um bloco (por exemplo, com o uso do processo descrito acima) como informações de movimento de candidato para cada um dos sub-blocos. O codificador de vídeo 20 e/ou decodificador de vídeo 30 pode, então, refinar adicionalmente as informações de movimento derivadas para cada um dos sub-blocos, por exemplo, com o uso de um modo de derivação de informações de movimento particular (por exemplo, uma técnica de correspondência bilateral, uma técnica de correspondência de modelo, ou outra técnica, conforme descrito em maiores detalhes abaixo).[0091] In some cases, in accordance with aspects of this disclosure, video encoder 20 and/or video decoder 30 may divide the block of video data into sub-blocks when deriving motion information. For example, video encoder 20 and/or video decoder 30 may separately derive motion information for each sub-block of a larger block. In some cases, video encoder 20 and/or video decoder 30 may use the derived motion information for a block (e.g., using the process described above) as candidate motion information for each of the sub-blocks. Video encoder 20 and/or video decoder 30 may then further refine the derived motion information for each of the sub-blocks, for example, using a particular motion information derivation mode (e.g., a bilateral matching technique, a template matching technique, or another technique as described in greater detail below).
[0092] A Figura 2 é um diagrama de blocos que ilustra um exemplo de codificador de vídeo 20 que pode implantar técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar os dados de vídeo. O codificador de vídeo 20 pode realizar intraconversão e interconversão em código de blocos de vídeo dentro de fatias de vídeo. A intraconversão em código depende da predição espacial para reduzir ou remover a redundância espacial no vídeo dentro de uma determinada imagem de quadro de vídeo. A interconversão em código depende da predição temporal para reduzir ou remover a redundância temporal no vídeo dentro de quadros ou imagens adjacentes de uma sequência de vídeo. O intramodo (modo I) pode se referir a qualquer um dentre vários modos de codificação com base em espaço. Os intermodos, tal como predição monodirecional (modo P) ou predição bidirecional (modo B), podem se referir a qualquer um dentre diversos modos de codificação à base temporal.[0092] Figure 2 is a block diagram illustrating an example video encoder 20 that may implement techniques for deriving motion information, performing block partitioning, and/or interpolating video data. Video encoder 20 may perform intra- and inter-code conversion of video blocks within video slices. Intra-code conversion relies on spatial prediction to reduce or remove spatial redundancy in the video within a given video frame image. Inter-code conversion relies on temporal prediction to reduce or remove temporal redundancy in the video within adjacent frames or images of a video sequence. Intra-mode (I-mode) may refer to any of several spatially based coding modes. Inter-modes, such as mono-directional prediction (P-mode) or bi-directional prediction (B-mode), may refer to any of several temporally based coding modes.
[0093] Conforme mostrado na Figura 2, o codificador de vídeo 20 recebe um bloco de vídeo atual dentro de um quadro de vídeo a ser codificado. No exemplo da Figura 2, o codificador de vídeo 20 inclui memória de dados de vídeo 38, unidade de seleção de modo 40, memória de imagem de referência 64, somador 50, unidade de processamento de transformada 52, unidade de quantização 54 e unidade de codificação por entropia 56. A unidade de seleção de modo 40, por sua vez, inclui a unidade de compensação de movimento 44, unidade de estimativa de movimento 42, unidade de intrapredição 46 e unidade de partição 48. Para a reconstrução do bloco de vídeo, o codificador de vídeo 20 também inclui a unidade de quantização inversa 58, a unidade de transformada inversa 60 e o somador 62. Um filtro de remoção de blocos (não mostrado na Figura 2) também pode ser incluso aos limites de bloco de filtro para remover artefatos de blocagem do vídeo reconstruído. Caso desejado, o filtro de remoção de blocos filtraria tipicamente a saída do somador 62. Os filtros adicionais (em laço ou pós-laço) também podem ser usados adicionalmente ao filtro de remoção de blocos. Esses filtros não são mostrados para propósitos de brevidade, mas caso desejado, podem filtrar a saída do somador 50 (como um filtro em laço).[0093] As shown in Figure 2, the video encoder 20 receives a current video block within a video frame to be encoded. In the example of Figure 2, video encoder 20 includes video data memory 38, mode selection unit 40, reference picture memory 64, adder 50, transform processing unit 52, quantization unit 54, and entropy coding unit 56. Mode selection unit 40 in turn includes motion compensation unit 44, motion estimation unit 42, intraprediction unit 46, and partition unit 48. For video block reconstruction, video encoder 20 also includes inverse quantization unit 58, inverse transform unit 60, and adder 62. A block removal filter (not shown in Figure 2) may also be included at the filter block boundaries to remove blocking artifacts from the reconstructed video. If desired, the block removal filter would typically filter the output of adder 62. Additional filters (loop or post-loop) may also be used in addition to the block removal filter. These filters are not shown for brevity, but if desired, they may filter the output of adder 50 (like a loop filter).
[0094] Durante o processo de codificação, o codificador de vídeo 20 recebe um quadro ou fatia de vídeo para ser convertida em código. O quadro ou fatia pode ser dividido em múltiplos blocos de vídeo. A memória de dados de vídeo 38 pode armazenar os dados de vídeo a serem codificados pelos componentes do codificador de vídeo 20. Os dados de vídeo armazenados na memória de dados de vídeo 38 podem ser obtidos, por exemplo, a partir da fonte de vídeo 18. A memória de imagem de referência 64 pode ser referida como um DPB que armazena dados de vídeo de referência para uso em dados de vídeo de codificação pelo codificador de vídeo 20, por exemplo, em modos de intra ou interconversão em código. A memória de dados de vídeo 38 e uma memória de imagem de referência 64 podem ser formadas por qualquer um dentre uma variedade de dispositivos de memória, tal como memória dinâmica de acesso aleatório (DRAM), que inclui DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória de dados de vídeo 38 e a memória de imagem de referência 64 podem ser fornecidas pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 38 pode estar no chip com outros componentes de codificador de vídeo 20, ou fora do chip em relação àqueles componentes.[0094] During the encoding process, the video encoder 20 receives a video frame or slice to be converted to code. The frame or slice may be divided into multiple video blocks. The video data memory 38 may store the video data to be encoded by the components of the video encoder 20. The video data stored in the video data memory 38 may be obtained, for example, from the video source 18. The reference picture memory 64 may be referred to as a DPB that stores reference video data for use in encoding video data by the video encoder 20, for example, in intra- or inter-code conversion modes. Video data memory 38 and a reference picture memory 64 may be formed by any of a variety of memory devices, such as dynamic random access memory (DRAM), which includes synchronous DRAM (SDRAM), magnetoresistive RAM (MRAM), resistive RAM (RRAM), or other types of memory devices. Video data memory 38 and reference picture memory 64 may be provided by the same memory device or separate memory devices. In various examples, video data memory 38 may be on-chip with other video encoder components 20, or off-chip with respect to those components.
[0095] A unidade de estimativa de movimento 42 e unidade de compensação de movimento 44 realizam conversão em código interpreditiva do bloco de vídeo recebido em relação a um ou mais blocos em um ou mais quadros de referência para fornecer predição temporal. A unidade de intrapredição 46 pode, alternativamente, realizar conversão em código intrapreditiva do bloco de vídeo recebido em relação a um ou mais blocos vizinhos no mesmo quadro ou fatia que o bloco a ser convertido em código para fornecer predição espacial. O codificador de vídeo 20 pode realizar múltiplos passos de conversão em código, por exemplo, para selecionar um modo de conversão em código apropriado para cada bloco de dados de vídeo.[0095] Motion estimation unit 42 and motion compensation unit 44 perform inter-predictive coding of the received video block with respect to one or more blocks in one or more reference frames to provide temporal prediction. Intra-prediction unit 46 may alternatively perform intra-predictive coding of the received video block with respect to one or more neighboring blocks in the same frame or slice as the block to be coded to provide spatial prediction. Video encoder 20 may perform multiple coding steps, for example, to select an appropriate coding mode for each block of video data.
[0096] Ademais, a unidade de partição 48 pode particionar blocos de dados de vídeo em sub-blocos, com base na avaliação dos esquemas de particionamento anteriores em passos de conversão em código anteriores. Por exemplo, a unidade de partição 48 pode particionar inicialmente um quadro ou fatia em LCUs, e particionar cada uma das LCUs em sub-CUs com base na análise de distorção de taxa (por exemplo, otimização de distorção de taxa). A unidade de seleção de modo 40 pode produzir adicionalmente uma estrutura de dados de árvore quadrática que indica o particionamento de uma LCU em sub-CUs. As CUs de nó folha da árvore quadrática podem incluir uma ou mais PUs e uma ou mais TUs.[0096] Furthermore, the partition unit 48 may partition blocks of video data into sub-blocks, based on the evaluation of previous partitioning schemes in previous encode steps. For example, the partition unit 48 may initially partition a frame or slice into LCUs, and partition each of the LCUs into sub-CUs based on rate distortion analysis (e.g., rate distortion optimization). The mode selection unit 40 may further produce a quadratic tree data structure indicating the partitioning of an LCU into sub-CUs. The leaf node CUs of the quadratic tree may include one or more PUs and one or more TUs.
[0097] A unidade de seleção de modo 40 pode selecionar um dos modos de conversão em código, intra ou inter, por exemplo, com base em resultados de erro, e fornece o bloco intra ou interconvertido em código resultante ao somador 50 para gerar dados de bloco residual e ao somador 62 para reconstruir o bloco codificado para uso como um quadro de referência. A unidade de seleção de modo 40 também fornece elementos de sintaxe, como vetores de movimento, indicadores intramodo, informações de partição, e outras dessas informações de sintaxe, à unidade de codificação por entropia 56.[0097] The mode selection unit 40 may select one of the coding modes, intra or inter, for example, based on error results, and provides the resulting intra or intercoded block to the adder 50 to generate residual block data and to the adder 62 to reconstruct the coded block for use as a reference frame. The mode selection unit 40 also provides syntax elements, such as motion vectors, intra-mode indicators, partition information, and other such syntax information, to the entropy coding unit 56.
[0098] A unidade de estimativa de movimento 42 e a unidade de compensação de movimento 44 podem ser altamente integradas, mas são ilustradas separadamente para propósitos de conceito. A estimativa de movimento, realizada pela unidade de estimativa de movimento 42, é o processo de gerar vetores de movimento, que estimam o movimento para blocos de vídeo. Um vetor de movimento, por exemplo, pode indica o deslocamento de uma PU de um bloco de vídeo dentro de um quadro de vídeo ou imagem atual em relação a um bloco preditivo dentro de um quadro de referência (ou outra unidade convertida em código) em relação ao bloco atual sendo convertido em código dentro do quadro atual (ou outra unidade convertida em código). Um bloco preditivo é um bloco que se encontra em correspondência muito próxima ao bloco a ser convertido em código em termos de diferença de pixels, que pode ser determinado pelo somatório da diferença absoluta (SAD), somatório da diferença quadrada (SSD) ou outras medidas de diferença.[0098] The motion estimation unit 42 and the motion compensation unit 44 may be highly integrated, but are illustrated separately for conceptual purposes. Motion estimation, performed by the motion estimation unit 42, is the process of generating motion vectors, which estimate motion for video blocks. A motion vector, for example, may indicate the displacement of a PU of a video block within a current video frame or image relative to a predictive block within a reference frame (or other encoded unit) relative to the current block being encoded within the current frame (or other encoded unit). A predictive block is a block that closely matches the block to be encoded in terms of pixel difference, which may be determined by summation of absolute difference (SAD), summation of squared difference (SSD), or other difference measures.
[0099] Em alguns exemplos, o codificador de vídeo 20 pode realizar uma busca de movimento rápida para determinar um vetor de movimento de um bloco. Existem muitos métodos de busca de movimento rápida propostos na literatura , como Busca por Método de Máximo Declive com base em Bloco (BBGDS) conforme descrito, por exemplo, em Lurng-Kuo Liu, Ephraim Feig, “A block-based gradient descent search algorithm for block motion estimation in video coding,” IEEE Trans. Circuits Syst. Video Technol. , vol. 6, páginas 419 a 422, agosto de 1996, Unrestricted Center-Biased Diamond Search (UCBDS), conforme descrito, por exemplo em Jo Yew Tham, Surendra Ranganath, Maitreya Ranganath e Ashraf Ali Kassim, “A novel unrestricted center-biased diamond search algorithm for block motion estimation,” IEEE Trans. Circuits Syst. Video Technol. ,vol. 8, páginas 369 a 377, agosto de 1998, e HEXagon-Based Search (HEBS) conforme descrito, por exemplo, em Ce Zhu, Xiao Lin e Lap-Pui Chau, “ Hexagon-Based Search Pattern for Fast Block Motion Estimation,” IEEE Trans. Circuits Syst. Video Technol. , vol. 12, páginas 349 a 355, maior de 2002. Basicamente, essas técnicas incluem buscar apenas um determinado número de posições dentro de uma janela de busca com base em padrões de busca predefinidos. Essas técnicas normalmente funcionam bem quando o movimento for pequeno e moderado.[0099] In some examples, the video encoder 20 may perform a fast motion search to determine a motion vector of a block. There are many fast motion search methods proposed in the literature, such as Block-Based Maximum Slope Search (BBGDS) as described, for example, in Lurng-Kuo Liu, Ephraim Feig, “A block-based gradient descent search algorithm for block motion estimation in video coding,” IEEE Trans. Circuits Syst. Video Technol., vol. 6, pages 419-422, August 1996, Unrestricted Center-Biased Diamond Search (UCBDS) as described, for example, in Jo Yew Tham, Surendra Ranganath, Maitreya Ranganath, and Ashraf Ali Kassim, “A novel unrestricted center-biased diamond search algorithm for block motion estimation,” IEEE Trans. Circuits Syst. Video Technol., vol. 8, pages 369–377, August 1998, and HEXagon-Based Search (HEBS) as described, for example, in Ce Zhu, Xiao Lin, and Lap-Pui Chau, “Hexagon-Based Search Pattern for Fast Block Motion Estimation,” IEEE Trans. Circuits Syst. Video Technol. , vol. 12, pages 349–355, May 2002. Basically, these techniques involve searching only a certain number of positions within a search window based on predefined search patterns. These techniques typically work well when the motion is small to moderate.
[00100] Em alguns exemplos, o codificador de vídeo 20 pode calcular valores para posições de pixel subinteiro de imagens de referência armazenadas na memória de imagem de referência 64. Por exemplo, o codificador de vídeo 20 pode interpolar valores de posições de um quarto de pixel, posições de um oitavo de pixel ou outras posições fracionadas de pixel da imagem de referência. Portanto, a unidade de estimativa de movimento 42 pode realizar uma busca de movimento em relação às posições completas de pixel e posições fracionadas de pixel e emitir um vetor de movimento com precisão fracionada de pixel.[00100] In some examples, the video encoder 20 may calculate values for sub-integer pixel positions of reference pictures stored in the reference picture memory 64. For example, the video encoder 20 may interpolate values of quarter-pixel positions, one-eighth-pixel positions, or other fractional pixel positions of the reference picture. Therefore, the motion estimation unit 42 may perform a motion search with respect to the full pixel positions and fractional pixel positions and output a motion vector with fractional pixel precision.
[00101] A unidade de estimativa de movimento 42 calcula um vetor de movimento para uma PU de um bloco de vídeo em uma fatia intercodificada comparando-se a posição da PU à posição de um bloco preditivo de uma imagem de referência. A imagem de referência pode ser selecionada a partir de uma primeira lista de imagens de referência (Lista 0) ou uma segunda lista de imagens de referência (Lista 1), cada uma das quais identifica uma ou mais imagens de referência armazenadas na memória de imagem de referência 64. A unidade de estimativa de movimento 42 envia o vetor de movimento calculado para a unidade de codificação por entropia 56 e a unidade de compensação de movimento 44.[00101] The motion estimation unit 42 calculates a motion vector for a PU of a video block in an intercoded slice by comparing the position of the PU to the position of a predictive block of a reference picture. The reference picture may be selected from a first list of reference pictures (List 0) or a second list of reference pictures (List 1), each of which identifies one or more reference pictures stored in the reference picture memory 64. The motion estimation unit 42 sends the calculated motion vector to the entropy coding unit 56 and the motion compensation unit 44.
[00102] A compensação de movimento, realizada pela unidade de compensação de movimento 44, pode envolver obter ou gerar o bloco de predição com base no vetor de movimento determinado pela unidade de estimativa de movimento 42. Novamente, a unidade de estimativa de movimento 42 e a unidade de compensação de movimento 44 podem ser funcionalmente integradas, em alguns exemplos. Mediante o recebimento do vetor de movimento para a PU do bloco de vídeo atual, a unidade de compensação de movimento 44 pode localizar o bloco preditivo para o qual o vetor de movimento aponta em uma das listas de imagens de referência. O somador 50 forma um bloco de vídeo residual subtraindo-se valores de pixel do bloco preditivo dos valores de pixel do bloco de vídeo atual em codificação, formando valores de diferença de pixel, conforme discutido abaixo. Em geral, a unidade de estimativa de movimento 42 realiza a estimativa de movimento relativa aos componentes de luma, e a unidade de compensação de movimento 44 usa vetores de movimento calculados com base em componentes de luma para ambos os componentes de croma e componentes de luma. A unidade de seleção de modo 40 também pode gerar elementos de sintaxe associados aos blocos de vídeo e a fatia de vídeo para uso pelo decodificador de vídeo 30 na decodificação dos blocos de vídeo da fatia de vídeo.[00102] Motion compensation, performed by motion compensation unit 44, may involve obtaining or generating the prediction block based on the motion vector determined by motion estimation unit 42. Again, motion estimation unit 42 and motion compensation unit 44 may be functionally integrated, in some examples. Upon receiving the motion vector for the PU of the current video block, motion compensation unit 44 may locate the predictive block to which the motion vector points in one of the reference picture lists. Adder 50 forms a residual video block by subtracting pixel values of the predictive block from pixel values of the current video block being encoded, forming pixel difference values, as discussed below. In general, motion estimation unit 42 performs motion estimation relative to luma components, and motion compensation unit 44 uses motion vectors calculated based on luma components for both chroma components and luma components. The mode selection unit 40 may also generate syntax elements associated with the video blocks and the video slice for use by the video decoder 30 in decoding the video blocks of the video slice.
[00103] A unidade de intrapredição 46 pode intraprever um bloco atual, como uma alternativa à intrapredição realizada pela unidade de estimativa de movimento 42 e a unidade de compensação de movimento 44, conforme descrito acima. Em particular, a unidade de intrapredição 46 pode determinar um modo de intrapredição a ser usado para codificar um bloco atual. Em alguns exemplos, a unidade de intrapredição 46 pode codificar um bloco atual com o uso de vários modos de intrapredição, por exemplo, durante passos de codificação separados, e a unidade de intrapredição 46 (ou unidade de seleção de modo 40, em alguns exemplos) pode selecionar um modo de intrapredição adequado para usar a partir dos modos testados.[00103] The intra-prediction unit 46 may intra-predict a current block, as an alternative to the intra-prediction performed by the motion estimation unit 42 and the motion compensation unit 44, as described above. In particular, the intra-prediction unit 46 may determine an intra-prediction mode to be used to encode a current block. In some examples, the intra-prediction unit 46 may encode a current block using multiple intra-prediction modes, e.g., during separate encoding steps, and the intra-prediction unit 46 (or mode selection unit 40, in some examples) may select a suitable intra-prediction mode to use from the tested modes.
[00104] Por exemplo, a unidade de intrapredição 46 pode calcular valores de distorção de taxa com o uso de uma análise de distorção de taxa para os vários modos de intrapredição testados e selecionar o modo de intrapredição que tem as melhores características de distorção de taxa dentre os modos testados. A análise de distorção de taxa geralmente determina uma quantidade de distorção (ou erro) entre um bloco codificado e um bloco original não codificado que foi codificado para produzir o bloco codificado, bem como uma taxa de bits (isto é, um número de bits) usada para produzir o bloco codificado. A unidade de intrapredição 46 pode calcular razões a partir de distorções e taxas para os vários blocos codificados para determinar qual modo de intrapredição exibe o melhor valor de distorção de taxa para o bloco.[00104] For example, the intra-prediction unit 46 may calculate rate distortion values using a rate distortion analysis for the various intra-prediction modes tested and select the intra-prediction mode that has the best rate distortion characteristics from among the modes tested. The rate distortion analysis generally determines an amount of distortion (or error) between an encoded block and an original unencoded block that was encoded to produce the encoded block, as well as a bit rate (i.e., a number of bits) used to produce the encoded block. The intra-prediction unit 46 may calculate ratios from distortions and rates for the various encoded blocks to determine which intra-prediction mode exhibits the best rate distortion value for the block.
[00105] Após selecionar um modo de intrapredição para um bloco, a unidade de intrapredição 46 pode fornecer informações indicativas do modo de intrapredição selecionado para o bloco para a unidade de codificação por entropia 56. A unidade de codificação por entropia 56 pode codificar as informações que indicam o modo de intrapredição selecionado. O codificador de vídeo 20 pode incluir no fluxo de bits transmitidos dados de conimagem, que podem incluir uma pluralidade de tabelas de índices de modo de intrapredição e uma pluralidade de tabelas de índices de modo de intrapredição modificados (também referidas como tabelas de mapeamento de palavras- código), as definições de contextos de codificação para vários blocos e indicações de um modo de intrapredição mais provável, uma tabela de índices de modo de intrapredição e uma tabela de índices de modo de intrapredição modificados para usar para cada um dos contextos.[00105] After selecting an intraprediction mode for a block, the intraprediction unit 46 may provide information indicative of the selected intraprediction mode for the block to the entropy coding unit 56. The entropy coding unit 56 may encode information indicating the selected intraprediction mode. The video encoder 20 may include in the transmitted bitstream copicture data, which may include a plurality of intraprediction mode index tables and a plurality of modified intraprediction mode index tables (also referred to as codeword mapping tables), definitions of coding contexts for various blocks and indications of a most likely intraprediction mode, a table of intraprediction mode indexes, and a table of modified intraprediction mode indexes to use for each of the contexts.
[00106] De acordo com os aspectos desta revelação, conforme descrito no presente documento, o codificador de vídeo 20 pode ser configurado para realizar qualquer combinação das técnicas descritas no presente documento para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em particular, determinadas técnicas desta revelação podem ser realizadas pela unidade de derivação 49. Por exemplo, unidade de derivação 49 pode ser configurada para determinar informações de movimento para um bloco atual e sem incluir dados que indicam as informações de movimento no fluxo de bits.[00106] In accordance with aspects of this disclosure as described herein, video encoder 20 may be configured to perform any combination of the techniques described herein to derive motion information, perform block partitioning, and/or interpolate video data. In particular, certain techniques of this disclosure may be performed by derivation unit 49. For example, derivation unit 49 may be configured to determine motion information for a current block and without including data indicating the motion information in the bitstream.
[00107] Em alguns casos, a unidade de derivação 49 (e/ou unidade de seleção de modo 40) pode determinar se deve realizar a derivação de movimento para um bloco particular (por exemplo, versus intrapredição ou interpredição tradicional) com base em uma análise de distorção de taxa. Por exemplo, a unidade de derivação 49 pode determinar se deve realizar derivação de movimento de modo semelhante a uma seleção de custo de distorção de taxa como é realizado para candidatos de mescla no modo de mescla. Neste exemplo, a unidade de derivação 49 pode verificar cada modo de derivação de informações de movimento de uma pluralidade de modos de derivação de informações de movimento (por exemplo, um modo de correspondência bilateral, modo de correspondência de modelo, ou similares) com o uso de uma seleção de custo de distorção de taxa. A unidade de derivação 49 pode comparar adicionalmente o modo de derivação de informações de movimento que tem o custo mínimo a outros modos de PU (por exemplo, modos de intrapredição, um modo de interpredição tradicional, um modo de conversão em código de palete ou similares). Em casos em que o modo de derivação de movimento é o modo mais eficaz no que diz respeito a eficiência de conversão em código, o codificador de vídeo 20 pode codificar um ou mais elementos de sintaxe que indicam que as informações de movimento são derivadas (ao invés de sinalizadas) para o bloco atual. O codificador de vídeo 20 também pode codificar um ou mais elementos de sintaxe para indicar o modo de derivação de movimento a partir de uma pluralidade de modos de derivação de informações de movimento.[00107] In some cases, the derivation unit 49 (and/or mode selection unit 40) may determine whether to perform motion derivation for a particular block (e.g., versus traditional intraprediction or interprediction) based on a rate distortion analysis. For example, the derivation unit 49 may determine whether to perform motion derivation in a manner similar to a rate distortion cost selection as is performed for merge candidates in the merge mode. In this example, the derivation unit 49 may check each motion information derivation mode from a plurality of motion information derivation modes (e.g., a bilateral matching mode, a template matching mode, or the like) using a rate distortion cost selection. The derivation unit 49 may further compare the motion information derivation mode that has the minimum cost to other PU modes (e.g., intraprediction modes, a traditional interprediction mode, a pallet code conversion mode, or the like). In cases where the motion derivation mode is the most effective mode with respect to code conversion efficiency, the video encoder 20 may encode one or more syntax elements indicating that motion information is derived (rather than signaled) for the current block. The video encoder 20 may also encode one or more syntax elements to indicate the motion derivation mode from a plurality of motion information derivation modes.
[00108] Em outros exemplos, de acordo com aspectos desta revelação, a unidade de derivação 49 pode interpolar dados de vídeo que não estão inclusos no fluxo de bits codificado para uma sequência de vídeo. Por exemplo, a unidade de derivação 49 pode realizar quaisquer técnicas de combinação de derivação de movimento para interpolar uma imagem que não está inclusa no fluxo de bits, por exemplo, semelhante à conversão ascendente de taxa de quadros. Em alguns casos, o codificador de vídeo 20 pode usar a imagem interpolada durante a codificação. Por exemplo, a unidade de derivação 49 pode interpolar uma imagem e o codificador de vídeo 20 pode codificar dados para uma imagem atual em relação à imagem interpolada. Neste exemplo, o codificador de vídeo 20 pode adicionar a imagem interpolada à memória de imagem de referência 64 e codificar dados de outras imagens com base em pelo menos uma porção da imagem interpolada.[00108] In other examples, in accordance with aspects of this disclosure, the derivation unit 49 may interpolate video data that is not included in the encoded bitstream for a video sequence. For example, the derivation unit 49 may perform any motion derivation matching techniques to interpolate an image that is not included in the bitstream, e.g., similar to frame rate upconversion. In some cases, the video encoder 20 may use the interpolated image during encoding. For example, the derivation unit 49 may interpolate an image and the video encoder 20 may encode data for a current image relative to the interpolated image. In this example, the video encoder 20 may add the interpolated image to the reference image memory 64 and encode data from other images based on at least a portion of the interpolated image.
[00109] Em outros exemplos, a unidade de derivação 49 pode interpolar uma imagem e o codificador de vídeo 20 pode estabelecer a imagem interpolada igual à imagem atual. Por exemplo, a unidade de derivação 49 pode interpolar a imagem atual e o codificador de vídeo 20 pode codificar dados de sintaxe para a imagem atual ser inclusa no fluxo de bits (por exemplo, dados de cabeçalho de fatia e similares), mas pode pular a codificação dos dados de vídeo para a imagem atual.[00109] In other examples, the derivation unit 49 may interpolate a picture and the video encoder 20 may set the interpolated picture equal to the current picture. For example, the derivation unit 49 may interpolate the current picture and the video encoder 20 may encode syntax data for the current picture to be included in the bitstream (e.g., slice header data and the like), but may skip encoding the video data for the current picture.
[00110] Embora a unidade de derivação 49 possa ser configurada para realizar determinadas técnicas de derivação e/ou interpolação, conforme descrito no presente documento, deve ser compreendido que uma ou mais outras unidades do codificador de vídeo 20 podem também ou alternativamente ser configuradas para interpolar dados. Por exemplo, o codificador de vídeo 20 pode incluir uma variedade de outros interpoladores ou filtros, por exemplo, para interpolar um pixel em um local de subpixel (sub-pel) durante a compensação de movimento.[00110] While the derivation unit 49 may be configured to perform certain derivation and/or interpolation techniques as described herein, it should be understood that one or more other units of the video encoder 20 may also or alternatively be configured to interpolate data. For example, the video encoder 20 may include a variety of other interpolators or filters, for example, to interpolate a pixel at a sub-pixel (sub-pel) location during motion compensation.
[00111] O codificador de vídeo 20 forma um bloco de vídeo residual subtraindo-se os dados de predição da unidade de seleção de modo 40 do original bloco de vídeo sendo convertido em código. O somador 50 representa o componente ou os componentes que realizam essa operação de subtração. A unidade de processamento de transformada 52 aplica uma transformada, como uma transformada de cosseno distinta (DCT) ou uma conceitualmente semelhante, ao bloco residual, produzindo um bloco de vídeo que compreende valores de coeficiente de transformada residual. A unidade de processamento de transformada 52 pode realizar outras transformadas que são conceitualmente semelhantes a DCT. As transformadas de ondeleta, transformadas inteiras, transformadas de sub-banda ou outros tipos de transformadas também poderiam ser usadas.[00111] Video encoder 20 forms a residual video block by subtracting the prediction data from mode selection unit 40 from the original video block being encoded. Adder 50 represents the component or components that perform this subtraction operation. Transform processing unit 52 applies a transform, such as a discrete cosine transform (DCT) or one conceptually similar, to the residual block, producing a video block comprising residual transform coefficient values. Transform processing unit 52 may perform other transforms that are conceptually similar to DCT. Wavelet transforms, integer transforms, subband transforms, or other types of transforms could also be used.
[00112] Em todo caso, a unidade de processamento de transformada 52 aplica a transformada ao bloco residual, produzindo um bloco de coeficientes de transformada residuais. A transformada pode converter as informações residuais de um domínio de valor de pixel em um domínio de transformada, como um domínio de frequência. A unidade de processamento de transformada 52 pode enviar os coeficientes de transformada resultantes para a unidade de quantização 54. A unidade de quantização 54 quantiza os coeficientes de transformada para reduzir adicionalmente a taxa de bits. O processo de quantização pode reduzir a profundidade de bit associada a alguns ou todos os coeficientes. O grau de quantização pode ser modificado ajustando-se um parâmetro de quantização. Em alguns exemplos, a unidade de quantização 54, pode, então, realizar uma varredura da matriz que inclui os coeficientes de transformada quantizados. Alternativamente, a unidade de codificação por entropia 56 pode realizar a varredura.[00112] In each case, the transform processing unit 52 applies the transform to the residual block, producing a block of residual transform coefficients. The transform may convert the residual information from a pixel value domain into a transform domain, such as a frequency domain. The transform processing unit 52 may send the resulting transform coefficients to the quantization unit 54. The quantization unit 54 quantizes the transform coefficients to further reduce the bit rate. The quantization process may reduce the bit depth associated with some or all of the coefficients. The degree of quantization may be modified by adjusting a quantization parameter. In some examples, the quantization unit 54 may then perform a scan of the matrix that includes the quantized transform coefficients. Alternatively, the entropy coding unit 56 may perform the scan.
[00113] Após a quantização, a unidade de codificação por entropia 56 converte em código por entropia os coeficientes de transformada quantizados. Por exemplo, a unidade de codificação por entropia 56 pode realizar a codificação de comprimento variável adaptativa a contexto (CAVLC), codificação aritmética binária adaptativa a contexto (CABAC), codificação aritmética binária adaptativa a contexto com base em sintaxe (SBAC), codificação por entropia de particionamento de intervalo de probabilidade (PIPE) ou outra técnica de conversão em código por entropia. No caso de conversão em código por entropia com base em contexto, o contexto pode se basear em blocos vizinhos. Após a conversão em código por entropia pela unidade de codificação por entropia 56, o fluxo de bits codificado pode ser transmitido para outro dispositivo (por exemplo, decodificador de vídeo 30) ou arquivado para transmissão ou recuperação posterior.[00113] After quantization, the entropy coding unit 56 entropy-codes the quantized transform coefficients. For example, the entropy coding unit 56 may perform context-adaptive variable length coding (CAVLC), context-adaptive binary arithmetic coding (CABAC), syntax-based context-adaptive binary arithmetic coding (SBAC), probability interval partitioning entropy coding (PIPE), or another entropy-code technique. In the case of context-based entropy-code, the context may be based on neighboring blocks. After entropy-code conversion by the entropy coding unit 56, the encoded bitstream may be transmitted to another device (e.g., video decoder 30) or archived for later transmission or retrieval.
[00114] A unidade de quantificação inversa 58 e a unidade de transformada inversa 60 aplicam quantificação inversa e transformada inversa, respectivamente, para reconstruir o bloco residual no domínio de pixels, por exemplo, para uso posterior como um bloco de referência. A unidade de compensação de movimento 44 pode calcular um bloco de referência adicionando-se o bloco residual a um bloco preditivo de um dos quadros da memória de imagem de referência 64. A unidade de compensação de movimento 44 também pode aplicar um ou mais filtros de interpolação ao bloco residual reconstruído para calcular valores de pixel de subnúmeros inteiros para uso na estimativa de movimento. O somador 62 adiciona o bloco residual reconstruído ao bloco de predição compensado em movimento produzido pela unidade de compensação de movimento 44 para produzir um bloco de vídeo reconstruído para armazenamento na memória de imagem de referência 64. O bloco de vídeo reconstruído pode ser usado pela unidade de estimativa de movimento 42 e pela unidade de compensação de movimento 44 como um bloco de referência para interconverter em código um bloco em um quadro de vídeo subsequente.[00114] The inverse quantization unit 58 and the inverse transform unit 60 apply inverse quantization and inverse transform, respectively, to reconstruct the residual block in the pixel domain, e.g., for later use as a reference block. The motion compensation unit 44 may calculate a reference block by adding the residual block to a predictive block of one of the frames of the reference image memory 64. The motion compensation unit 44 may also apply one or more interpolation filters to the reconstructed residual block to calculate sub-integer pixel values for use in motion estimation. The adder 62 adds the reconstructed residual block to the motion compensated prediction block produced by the motion compensation unit 44 to produce a reconstructed video block for storage in the reference picture memory 64. The reconstructed video block may be used by the motion estimation unit 42 and the motion compensation unit 44 as a reference block to code interconvert a block into a subsequent video frame.
[00115] A Figura 3 é um diagrama de blocos que ilustra um exemplo de decodificador de vídeo 30 que pode implantar técnicas para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar os dados de vídeo. No exemplo da Figura 3, o decodificador de vídeo 30 inclui memória de dados de vídeo 68, uma unidade de decodificação por entropia 70, unidade de compensação de movimento 72, unidade de intrapredição 74, unidade de quantização inversa 76, unidade de transformação inversa 78, memória de imagem de referência 82 e somador 80. O decodificador de vídeo 30 pode, em alguns exemplos, realizar um passo de decodificação geralmente recíproco ao passo de codificação descrito em relação ao codificador de vídeo 20 (Figura 2). A unidade de compensação de movimento 72 pode gerar dados de predição com base em vetores de movimento recebidos a partir da unidade de decodificação por entropia 70, enquanto a unidade de intrapredição 74 pode gerar dados de predição com base nos indicadores de modo de intrapredição recebidos a partir da unidade de decodificação por entropia 70.[00115] Figure 3 is a block diagram illustrating an example video decoder 30 that may implement techniques for deriving motion information, performing block partitioning, and/or interpolating video data. In the example of Figure 3, video decoder 30 includes video data memory 68, an entropy decoding unit 70, motion compensation unit 72, intraprediction unit 74, inverse quantization unit 76, inverse transform unit 78, reference picture memory 82, and adder 80. Video decoder 30 may, in some examples, perform a decoding step generally reciprocal to the encoding step described with respect to video encoder 20 (Figure 2). The motion compensation unit 72 may generate prediction data based on motion vectors received from the entropy decoding unit 70, while the intra-prediction unit 74 may generate prediction data based on the intra-prediction mode indicators received from the entropy decoding unit 70.
[00116] Durante o processo de decodificação, o decodificador de vídeo 30 recebe um fluxo de bits de vídeo codificado que representa blocos de vídeo de uma fatia de vídeo codificada e elementos de sintaxe associados provenientes do codificador de vídeo 20. Os dados de vídeo armazenados na memória de dados de vídeo 68 podem ser obtidos, por exemplo, a partir da mídia legível por computador, por exemplo, a partir de uma fonte de vídeo local, tal como uma câmera, através de comunicação de rede sem fio ou com fio de dados de vídeo ou acessando-se mídias de armazenamento de dados físicas. A memória de dados de vídeo 68 pode formar um armazenamento temporário de imagem codificada (CPB) que armazena dados de vídeo codificados a partir de um fluxo de bits de vídeo codificado.[00116] During the decoding process, the video decoder 30 receives an encoded video bitstream representing video blocks of an encoded video slice and associated syntax elements from the video encoder 20. The video data stored in the video data memory 68 may be obtained, for example, from computer-readable media, for example, from a local video source such as a camera, via wireless or wired video data network communication, or by accessing physical data storage media. The video data memory 68 may form a coded picture buffer (CPB) that stores encoded video data from an encoded video bitstream.
[00117] A memória de imagem de referência 82 pode ser referida como um DPB que armazena dados de vídeo de referência para uso em dados de vídeo de decodificação pelo decodificador de vídeo 30, por exemplo, em modos de intra ou interconversão em código. A memória de dados de vídeo 68 e uma memória de imagem de referência 82 podem ser formadas por qualquer um dentre uma variedade de dispositivos de memória, tal como memória dinâmica de acesso aleatório (DRAM), que inclui DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM) ou outros tipos de dispositivos de memória. A memória de dados de vídeo 68 e a memória de imagem de referência 82 podem ser fornecidas pelo mesmo dispositivo de memória ou dispositivos de memória separados. Em vários exemplos, a memória de dados de vídeo 68 pode estar no chip com outros componentes de decodificador de vídeo 30 ou fora do chip em relação àqueles componentes.[00117] Reference picture memory 82 may be referred to as a DPB that stores reference video data for use in decoding video data by video decoder 30, for example, in intra- or inter-code conversion modes. Video data memory 68 and reference picture memory 82 may be formed by any of a variety of memory devices, such as dynamic random access memory (DRAM), which includes synchronous DRAM (SDRAM), magnetoresistive RAM (MRAM), resistive RAM (RRAM), or other types of memory devices. Video data memory 68 and reference picture memory 82 may be provided by the same memory device or separate memory devices. In various examples, video data memory 68 may be on-chip with other components of video decoder 30 or off-chip with respect to those components.
[00118] A unidade de decodificação por entropia 70 do decodificador de vídeo 30 decodifica por entropia o fluxo de bits para gerar coeficientes quantizados, vetores de movimento ou indicadores de modo de intrapredição e outros elementos de sintaxe. A unidade de decodificação por entropia 70 encaminha os vetores de movimento e outros elementos de sintaxe para a unidade de compensação de movimento 72. O decodificador de vídeo 30 pode receber os elementos de sintaxe no nível de fatia de vídeo e/ou no nível de bloco de vídeo.[00118] The entropy decoding unit 70 of the video decoder 30 entropy decodes the bit stream to generate quantized coefficients, motion vectors or intraprediction mode indicators, and other syntax elements. The entropy decoding unit 70 forwards the motion vectors and other syntax elements to the motion compensation unit 72. The video decoder 30 may receive the syntax elements at the video slice level and/or at the video block level.
[00119] Quando a fatia de vídeo for convertida em código como uma fatia intraconvertida em código (I), a unidade de intrapredição 74 pode gerar dados de predição para um bloco de vídeo da fatia de vídeo atual com base em um modo de intrapredição sinalizado e dados provenientes de blocos decodificados anteriormente do quadro ou imagem atual. Quando o quadro de vídeo for codificado como uma fatia interconvertida em código (isto é, B, P ou GPB), a unidade de compensação de movimento 72 produz blocos preditivos para um bloco de vídeo da fatia de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe recebidos a partir da unidade de decodificação por entropia 70. Os blocos de predição podem ser produzidos a partir de uma das imagens de referência dentro de uma das listas de imagens de referência. O decodificador de vídeo 30 pode construir as listas de quadro de referência, a Lista 0 e a Lista 1, com o uso de técnicas de construção padrão com base nas imagens de referência armazenadas na memória de imagens de referência 82.[00119] When the video slice is code-converted as an intra-code-converted slice (I), the intra-prediction unit 74 may generate prediction data for a video block of the current video slice based on a signaled intra-prediction mode and data from previously decoded blocks of the current frame or picture. When the video frame is code-converted as an inter-code-converted slice (i.e., B, P, or GPB), the motion compensation unit 72 produces predictive blocks for a video block of the current video slice based on motion vectors and other syntax elements received from the entropy decoding unit 70. The prediction blocks may be produced from one of the reference pictures within one of the reference picture lists. The video decoder 30 may construct the reference frame lists, List 0 and List 1, using standard construction techniques based on the reference pictures stored in the reference picture memory 82.
[00120] A unidade de compensação de movimento 72 determina informações de predição para um bloco de vídeo da fatia de vídeo atual analisando-se os vetores de movimento e outros elementos de sintaxe, e usa as informações de predição para produzir os blocos preditivos para o bloco de vídeo atual em decodificação. Por exemplo, a unidade de compensação de movimento 72 pode usar uma parte dos elementos de sintaxe recebidos para determinar um modo de predição (por exemplo, intra ou interpredição) usado para converter em código os blocos de vídeo da pedaço de vídeo, um tipo de fatia de interpredição (por exemplo, fatia B, fatia P ou fatia GPB), informações de construção para uma ou mais dentre as listas de imagens de referência para a fatia, vetores de movimento para cada bloco de vídeo intercodificado da fatia, status de interpredição para cada bloco de vídeo interconvertido em código da fatia e outras informações para decodificar os blocos de vídeo na fatia de vídeo atual.[00120] The motion compensation unit 72 determines prediction information for a video block of the current video slice by analyzing the motion vectors and other syntax elements, and uses the prediction information to produce the predictive blocks for the current video block under decoding. For example, the motion compensation unit 72 may use a portion of the received syntax elements to determine a prediction mode (e.g., intra- or inter-prediction) used to encode the video blocks of the video slice, a type of inter-prediction slice (e.g., B-slice, P-slice, or GPB-slice), construction information for one or more of the reference picture lists for the slice, motion vectors for each inter-coded video block of the slice, inter-prediction status for each inter-coded video block of the slice, and other information for decoding the video blocks in the current video slice.
[00121] A unidade de compensação de movimento 72 também pode realizar interpolação com base em filtros de interpolação. A unidade de compensação de movimento 72 pode usar filtros de interpolação conforme usado pelo codificador de vídeo 20 durante a codificação dos blocos de vídeo para calcular valores interpolados para pixels subinteiros de blocos de referência. Nesse caso, a unidade de compensação de modo 72 pode determinar os filtros de interpolação usados pelo codificador de vídeo 20 a partir dos elementos de sintaxe recebidos e usar os filtros de interpolação para produzir blocos de predição.[00121] The motion compensation unit 72 may also perform interpolation based on interpolation filters. The motion compensation unit 72 may use interpolation filters as used by the video encoder 20 during encoding of the video blocks to calculate interpolated values for sub-integer pixels of reference blocks. In this case, the mode compensation unit 72 may determine the interpolation filters used by the video encoder 20 from the received syntax elements and use the interpolation filters to produce prediction blocks.
[00122] De acordo com os aspectos desta revelação o decodificador de vídeo 30 pode ser configurado para realizar qualquer combinação das técnicas descritas no presente documento para derivar informações de movimento, realizar particionamento de bloco e/ou interpolar dados de vídeo. Em particular, determinadas técnicas desta revelação podem ser realizadas pela unidade de derivação 75. Por exemplo, de acordo com os aspectos desta revelação, a unidade de derivação 75 pode ser configurada para determinar informações de movimento para um bloco atual e sem decodificar as informações de movimento de um fluxo de bits codificado.[00122] In accordance with aspects of this disclosure, video decoder 30 may be configured to perform any combination of the techniques described herein for deriving motion information, performing block partitioning, and/or interpolating video data. In particular, certain techniques of this disclosure may be performed by derivation unit 75. For example, in accordance with aspects of this disclosure, derivation unit 75 may be configured to determine motion information for a current block and without decoding the motion information from an encoded bit stream.
[00123] Em alguns casos, a unidade de derivação 75 pode determinar se deve realizar a derivação de movimento para um bloco particular (por exemplo, versus intrapredição ou interpredição tradicional). Por exemplo, o decodificador de vídeo 30 pode decodificar um ou mais elementos de sintaxe que indicam que as informações de movimento são derivadas (ao invés de sinalizadas) para um bloco sendo decodificado. O decodificador de vídeo 30 também pode decodificar um ou mais elementos de sintaxe que indicam um modo de derivação de informações de movimento a partir de uma pluralidade de modos de derivação de informações de movimento a serem usados para decodificar um bloco. A unidade de derivação 75 pode determinar se deve realizar a derivação de movimento e o modo de derivação de informações de movimento para um bloco com base na sintaxe decodificada. Em alguns exemplos, conforme descrito no presente documento, a sintaxe pode ser associada a um ou mais outros modos, como modo de mescla, AMVP, ou outras funções de decodificação.[00123] In some cases, the derivation unit 75 may determine whether to perform motion derivation for a particular block (e.g., versus traditional intraprediction or interprediction). For example, the video decoder 30 may decode one or more syntax elements that indicate that motion information is derived (rather than signaled) for a block being decoded. The video decoder 30 may also decode one or more syntax elements that indicate a motion information derivation mode from a plurality of motion information derivation modes to be used to decode a block. The derivation unit 75 may determine whether to perform motion derivation and the motion information derivation mode for a block based on the decoded syntax. In some examples, as described herein, the syntax may be associated with one or more other modes, such as blend mode, AMVP, or other decoding functions.
[00124] De acordo com outros aspectos desta revelação, a unidade de derivação 75 pode interpolar dados de vídeo que não estão inclusos no fluxo de bits codificado para uma sequência de vídeo. Por exemplo, a unidade de derivação 75 pode realizar quaisquer técnicas de combinação de derivação de movimento para interpolar uma imagem que não está inclusa no fluxo de bits analisado sintaticamente, por exemplo, semelhante à conversão ascendente de taxa de quadros. Em alguns casos, o decodificador de vídeo 30 pode usar a imagem interpolada durante a codificação. Por exemplo, a unidade de derivação 75 pode interpolar uma imagem e o decodificador de vídeo 30 pode decodificar dados para uma imagem atual em relação à imagem interpolada. Neste exemplo, o decodificador de vídeo 30 pode adicionar a imagem interpolada à memória de imagem de referência 82 e decodificar dados de outras imagens com base em pelo menos uma porção da imagem interpolada.[00124] In accordance with other aspects of this disclosure, the derivation unit 75 may interpolate video data that is not included in the encoded bitstream for a video sequence. For example, the derivation unit 75 may perform any motion derivation matching techniques to interpolate a picture that is not included in the parsed bitstream, e.g., similar to frame rate upconversion. In some cases, the video decoder 30 may use the interpolated picture during encoding. For example, the derivation unit 75 may interpolate a picture and the video decoder 30 may decode data for a current picture relative to the interpolated picture. In this example, the video decoder 30 may add the interpolated picture to the reference picture memory 82 and decode data from other pictures based on at least a portion of the interpolated picture.
[00125] Em outros exemplos, a unidade de derivação 75 pode interpolar uma imagem e o decodificador de vídeo 30 pode estabelecer a imagem interpolada igual à imagem atual. Por exemplo, a unidade de derivação 75 pode interpolar a imagem atual e o decodificador de vídeo 30 pode decodificar elementos de sintaxe para a imagem atual a partir do fluxo de bits codificado (por exemplo, dados de cabeçalho de fatia e similares), mas pode pular a decodificação dos dados de vídeo para a imagem atual e ao invés disso interpolar a imagem atual.[00125] In other examples, the derivation unit 75 may interpolate a picture and the video decoder 30 may set the interpolated picture equal to the current picture. For example, the derivation unit 75 may interpolate the current picture and the video decoder 30 may decode syntax elements for the current picture from the encoded bitstream (e.g., slice header data and the like), but may skip decoding the video data for the current picture and instead interpolate the current picture.
[00126] Embora a unidade de derivação 75 possa ser configurada para realizar determinadas técnicas interpolação, conforme descrito no presente documento, deve ser compreendido que uma ou mais outras unidades do decodificador de vídeo 30 podem também ou alternativamente ser configuradas para interpolar dados. Por exemplo, o decodificador de vídeo 30 pode incluir uma variedade de outros interpoladores ou filtros, por exemplo, para interpolar um pixel em um local de subpixel (sub-pel) durante a compensação de movimento.[00126] Although the derivation unit 75 may be configured to perform certain interpolation techniques as described herein, it should be understood that one or more other units of the video decoder 30 may also or alternatively be configured to interpolate data. For example, the video decoder 30 may include a variety of other interpolators or filters, for example, to interpolate a pixel at a sub-pixel (sub-pel) location during motion compensation.
[00127] A unidade de quantização inversa 76 quantiza inversamente, por exemplo, desquantiza, o coeficiente de transformada quantificados fornecidos no fluxo de bits e decodificados pela unidade de decodificação por entropia 70. O processo de quantização inversa pode incluir o uso de um parâmetro de quantização calculado pelo decodificador de vídeo 30 para cada bloco de vídeo na fatia de vídeo para determinar um grau de quantização e, de modo semelhante, um grau de quantização inversa que deve ser aplicado.[00127] The inverse quantization unit 76 inversely quantizes, e.g., dequantizes, the quantized transform coefficients provided in the bitstream and decoded by the entropy decoding unit 70. The inverse quantization process may include using a quantization parameter calculated by the video decoder 30 for each video block in the video slice to determine a degree of quantization and, similarly, a degree of inverse quantization that should be applied.
[00128] A unidade de transformada inversa 78 aplica uma transformada inversa 78, por exemplo, uma DCT, uma transformada de número inteiro inversa ou um processo de transformada inversa conceitualmente semelhante, aos coeficientes de transformada a fim de produzir blocos residuais no domínio de pixel.[00128] The inverse transform unit 78 applies an inverse transform 78, e.g., a DCT, an inverse integer transform, or a conceptually similar inverse transform process, to the transform coefficients in order to produce residual blocks in the pixel domain.
[00129] Após a unidade de compensação de modo 72 gerar o bloco de predição para o bloco de vídeo atual com base nos vetores de movimento e outros elementos de sintaxe, o decodificador de vídeo 30 forma um bloco de vídeo decodificado somando-se os blocos residuais provenientes da unidade de transformada inversa 78 com os blocos de predição correspondentes gerados pela unidade de compensação de modo 72. O somador 80 representa o componente ou componentes que realizam essa operação de soma. Caso seja desejado, um filtro de remoção de blocos também pode ser aplicado para filtrar os blocos decodificados a fim de remover os artefatos de característica de bloqueio. Outros filtros em laço (tanto no laço de codificação quanto após o laço de codificação) também podem ser usados para suavizar as transições de pixel, ou, de outro modo, melhorar a qualidade de vídeo. Os blocos de vídeo decodificados em um dado quadro ou imagem de referência são, então, armazenados na memória de imagem 82, que armazena imagens de referência usadas para a compensação de movimento subsequente. A memória de imagem de referência 82 também armazena o vídeo decodificado para apresentação posterior em um dispositivo de exibição, como o dispositivo de exibição 32 da Figura 1.[00129] After the mode compensation unit 72 generates the prediction block for the current video block based on the motion vectors and other syntax elements, the video decoder 30 forms a decoded video block by summing the residual blocks from the inverse transform unit 78 with the corresponding prediction blocks generated by the mode compensation unit 72. The adder 80 represents the component or components that perform this summation operation. If desired, a block removal filter may also be applied to filter the decoded blocks to remove blockiness artifacts. Other loop filters (both in the encoding loop and after the encoding loop) may also be used to smooth pixel transitions, or otherwise improve video quality. The decoded video blocks in a given frame or reference image are then stored in the image memory 82, which stores reference images used for subsequent motion compensation. The reference picture memory 82 also stores the decoded video for later presentation on a display device, such as the display device 32 of Figure 1.
[00130] As Figuras 4A e 4B são diagramas conceituais que ilustram candidatos vizinhos espaciais em HEVC. Em alguns exemplos, o codificador de vídeo 20 e/ou decodificador de vídeo 30 pode derivar candidatos de vetor de movimento (MV) espacial a partir do bloco vizinho 0, bloco vizinho 1, bloco vizinho 2, bloco vizinho 3 ou bloco vizinho 4 para PU0.[00130] Figures 4A and 4B are conceptual diagrams illustrating spatial neighbor candidates in HEVC. In some examples, video encoder 20 and/or video decoder 30 may derive spatial motion vector (MV) candidates from neighbor block 0, neighbor block 1, neighbor block 2, neighbor block 3, or neighbor block 4 for PU0.
[00131] Em alguns casos, as técnicas para gerar os candidatos de MV dos blocos diferem para os modos de mescla e AMVP. A Figura 4A ilustra um exemplo para o modo de mescla. Por exemplo, em HEVC, um conversor em código de vídeo (por exemplo, como codificador de vídeo 20 e/ou decodificador de vídeo 30 das Figuras 1 a 3) pode derivar até quatro candidatos de MV espaciais. Os candidatos podem estar inclusos em uma lista de candidato que tem uma ordem particular. Em um exemplo, a ordem para o exemplo da Figura 4A pode ser o bloco vizinho 0 (A1), bloco vizinho 1 (B1), bloco vizinho 2 (B0), bloco vizinho 3 (A0) e bloco vizinho 4 (B2).[00131] In some cases, the techniques for generating the MV candidates from the blocks differ for blending and AMVP modes. Figure 4A illustrates an example for blending mode. For example, in HEVC, a video encoder (e.g., as video encoder 20 and/or video decoder 30 of FIGS. 1-3) may derive up to four spatial MV candidates. The candidates may be included in a candidate list that has a particular order. In one example, the order for the example of Figure 4A may be neighbor block 0 (A1), neighbor block 1 (B1), neighbor block 2 (B0), neighbor block 3 (A0), and neighbor block 4 (B2).
[00132] A Figura 4B ilustra um exemplo para o modo de AMVP. Por exemplo, em HEVC, o conversor em código de vídeo pode dividir blocos vizinhos em dois grupos: em que o grupo esquerdo inclui o bloco vizinho 0 e bloco vizinho 1 e o grupo acima inclui o bloco vizinho 2, bloco vizinho 3 e bloco vizinho 4. Para cada grupo, o candidato de vetor de movimento potencial associado a um bloco vizinho que se refere à mesma imagem de referência que aquela indicada pelo índice de referência sinalizado (para o bloco atualmente sendo convertido em código) pode ter a maior prioridade para ser escolhida para formar um candidato final do grupo. É possível que nenhum dos blocos vizinhos contenha um vetor de movimento que aponta para a mesma imagem de referência. Portanto, se tal candidato não puder ser encontrado, o conversor em código de vídeo pode escalonar o primeiro candidato disponível para formar o candidato final, assim, as diferenças de distância temporal podem ser compensadas.[00132] Figure 4B illustrates an example for the AMVP mode. For example, in HEVC, the video encoder may divide neighboring blocks into two groups: where the left group includes neighboring block 0 and neighboring block 1, and the above group includes neighboring block 2, neighboring block 3, and neighboring block 4. For each group, the potential motion vector candidate associated with a neighboring block that refers to the same reference picture as that indicated by the flagged reference index (for the block currently being encoded) may have the highest priority to be chosen to form a final candidate of the group. It is possible that none of the neighboring blocks contain a motion vector that points to the same reference picture. Therefore, if such a candidate cannot be found, the video encoder may schedule the first available candidate to form the final candidate, thus temporal distance differences can be compensated.
[00133] De acordo com os aspectos desta revelação, os candidatos de vetor de movimento, como os vetores de movimento associados aos blocos vizinhos mostrados nas Figuras 4A e 4B podem ser usados para derivar um vetor de movimento para um bloco. Por exemplo, o conversor em código de vídeo pode gerar uma lista de candidato que inclui candidatos de vetor de movimento a partir dos blocos vizinhos mostrados nas Figuras 4A e 4B. Neste exemplo, o conversor em código de vídeo pode usar um ou mais dos candidatos da lista de candidato como um vetor de movimento inicial em um processo de derivação de informações de movimento (por exemplo, correspondência bilateral, correspondência de modelo ou similares). O conversor em código de vídeo pode aplicar um ou mais dos candidatos de vetor de movimento em uma busca de movimento de um vetor de processo de derivação de movimento para identificar dados de referência. O conversor em código de vídeo pode selecionar o candidato a partir da lista que identifica dados de referência de correspondência próxima (por exemplo, conforme descrito em relação às Figuras 8 a 9 abaixo). Por exemplo, o conversor em código de vídeo pode realizar a busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. O conversor em código de vídeo pode, em alguns casos, refinar adicionalmente o candidato, por exemplo, realizando-se uma busca de movimento adicionalmente em uma área indicada pelo candidato selecionado, para determinar um vetor de movimento derivado com o uso do processo de derivação de informações de movimento.[00133] In accordance with aspects of this disclosure, motion vector candidates, such as motion vectors associated with neighboring blocks shown in Figures 4A and 4B, can be used to derive a motion vector for a block. For example, the video codec may generate a candidate list that includes motion vector candidates from neighboring blocks shown in Figures 4A and 4B. In this example, the video codec may use one or more of the candidates from the candidate list as an initial motion vector in a motion information derivation process (e.g., bilateral matching, template matching, or the like). The video codec may apply one or more of the motion vector candidates in a motion search of a motion vector derivation process to identify reference data. The video codec may select the candidate from the list that identifies closely matching reference data (e.g., as described with respect to Figures 8-9 below). For example, the video codec may perform motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block. The video codec may, in some cases, further refine the candidate, for example, by performing additional motion search in an area indicated by the selected candidate, to determine a derived motion vector using the motion information derivation process.
[00134] As Figuras 5A e 5B são diagramas conceituais que ilustra vetor de movimento predição temporal em HEVC. Um candidato de previsor de vetor de movimento (TMVP) temporal, se habilitado e disponível, é adicionado em uma lista de candidato de MV após candidatos de vetor de movimento espaciais. Em HEVC, o processo de derivação de vetor de movimento para um candidato de TMVP é o mesmo para ambos os modos de mescla e AMVP, entretanto, o índice de referência alvo para o candidato de TMVP no modo de mescla é tipicamente estabelecido como zero.[00134] Figures 5A and 5B are conceptual diagrams illustrating temporal motion vector prediction in HEVC. A temporal motion vector predictor (TMVP) candidate, if enabled and available, is added to a MV candidate list after spatial motion vector candidates. In HEVC, the motion vector derivation process for a TMVP candidate is the same for both blending and AMVP modes, however, the target reference index for the TMVP candidate in blending mode is typically set to zero.
[00135] A Figura 5A ilustra uma localização de bloco primário (mostrado como bloco “T”) para um candidato de TMVP, que é o bloco direito inferior fora da PU colocalizada. A localização pode compensar pela inclinação aos blocos acima e esquerdo usados para gerar candidatos vizinhos espaciais. Entretanto, se o bloco T estiver localizado fora da fileira de CTB atual ou informações de movimento não estiverem disponíveis, o bloco é substituído por um bloco central da PU, conforme ilustrado pelas setas tracejadas do bloco T na Figura 5A.[00135] Figure 5A illustrates a primary block location (shown as block “T”) for a TMVP candidate, which is the bottom right block outside of the co-located PU. The location can compensate for bias to the above and left blocks used to generate spatial neighbor candidates. However, if the T block is located outside of the current CTB row or motion information is not available, the block is replaced by a central PU block, as illustrated by the dashed arrows for the T block in Figure 5A.
[00136] A Figura 5B ilustra a derivação de um candidato de TMVP 84 for um bloco atual 86 de uma imagem atual 88 a partir de uma PU colocalizada 90 de uma imagem colocalizada 92, conforme indicado no nível de fatia (por exemplo, em um cabeçalho de fatia). Semelhante ao modo direto temporal em AVC, um vetor de movimento do candidato de TMVP pode ser submetido ao escalonamento de vetor de movimento, que é realizado para compensar as diferenças de distância, por exemplo, distâncias temporais entre imagens. Em relação ao escalonamento de vetor de movimento, um conversor em código de vídeo (como o codificador de vídeo 20 e/ou decodificador de vídeo 30) pode ser configurado para determinar inicialmente que o valor dos vetores de movimento é proporcional à distância das imagens no tempo de apresentação. Um vetor de movimento associa duas imagens, a imagem de referência e a imagem que contém o vetor de movimento (a saber, a imagem de contenção). Quando um vetor de movimento for utilizado para prever o outro vetor de movimento, a distância da imagem de contenção e a imagem de referência é calculada com base nos valos de Contagem de Ordem de Imagem (POC).[00136] Figure 5B illustrates the derivation of a TMVP candidate 84 for a current block 86 of a current picture 88 from a co-located PU 90 of a co-located picture 92, as indicated at the slice level (e.g., in a slice header). Similar to the temporal direct mode in AVC, a motion vector of the TMVP candidate may undergo motion vector scaling, which is performed to compensate for distance differences, e.g., temporal distances between pictures. In connection with motion vector scaling, a video encoder (such as video encoder 20 and/or video decoder 30) may be configured to initially determine that the value of the motion vectors is proportional to the distance of the pictures at presentation time. A motion vector associates two pictures, the reference picture and the picture containing the motion vector (namely, the containment picture). When one motion vector is used to predict another motion vector, the distance of the containment image and the reference image is calculated based on the Picture Order Count (POC) values.
[00137] Para um vetor de movimento ser previsto, tanto a imagem de contenção associada para o vetor de movimento quanto uma imagem de referência do vetor de movimento podem ser diferentes. Portanto, o conversor em código de vídeo pode calcular uma nova distância com base em valores de POC, e o conversor em código de vídeo pode escalonar o vetor de movimento com base nessas duas distâncias de POC. Para um candidato vizinho espacial, as imagens de contenção para os dois vetores de movimento são as mesmas, enquanto as imagens de referência são diferentes. Em HEVC, o escalonamento de vetor de movimento aplica tanto a TMVP quanto a AMVP para candidatos vizinhos espaciais e temporais.[00137] For a motion vector to be predicted, both the associated containment picture for the motion vector and a reference picture of the motion vector may be different. Therefore, the video encoder may calculate a new distance based on POC values, and the video encoder may scale the motion vector based on these two POC distances. For a spatial neighbor candidate, the containment pictures for the two motion vectors are the same, while the reference pictures are different. In HEVC, motion vector scaling applies both TMVP and AMVP to spatial and temporal neighbor candidates.
[00138] Em alguns exemplos, um conversor em código de vídeo pode ser configurado para determinar um ou mais candidatos de vetor de movimento artificiais. Por exemplo, se uma lista de candidato de vetor de movimento não estiver completa, o conversor em código de vídeo pode gerar candidatos de vetor de movimento artificial e inserir os candidatos de vetor de movimento artificiais no fim da lista até a lista incluir um número predeterminado de entradas. No modo de mescla, existem dois tipos de candidatos de MV artificiais que incluem um candidato combinado derivado apenas para fatias B e um candidato zero. Em alguns casos, o zero candidato é usado apenas para AMVP se o tipo combinado não fornecer candidatos artificiais suficientes.[00138] In some examples, a video codec may be configured to determine one or more artificial motion vector candidates. For example, if a motion vector candidate list is not complete, the video codec may generate artificial motion vector candidates and insert the artificial motion vector candidates at the end of the list until the list includes a predetermined number of entries. In blend mode, there are two types of artificial MV candidates that include a combined candidate derived only for B slices and a zero candidate. In some cases, the zero candidate is used only for AMVP if the combined type does not provide enough artificial candidates.
[00139] Para cada par de candidatos que já estão na lista de candidato e têm informações de movimento necessárias, os candidatos de vetor de movimento combinados bidirecionais são derivados por uma combinação do vetor de movimento do primeiro candidato que se refere a uma imagem na lista 0 e o vetor de movimento de um segundo candidato que se refere a uma imagem na lista 1.[00139] For each pair of candidates that are already in the candidate list and have required motion information, bidirectional combined motion vector candidates are derived by a combination of the motion vector of the first candidate that refers to an image in list 0 and the motion vector of a second candidate that refers to an image in list 1.
[00140] De acordo com os aspectos desta revelação, os candidatos de vetor de movimento, como o TMVP mostrado nas Figuras 5A e 5B, podem ser usados para derivar um vetor de movimento para um bloco. Por exemplo, o conversor em código de vídeo pode gerar uma lista de candidato que inclui um TMVP determinado de acordo com o processo descrito acima. Neste exemplo, o conversor em código de vídeo pode usar o TMVP como um vetor de movimento inicial em um processo de derivação de informações de movimento (por exemplo, correspondência bilateral, correspondência de modelo ou similares). O conversor em código de vídeo pode aplicar o TMVP em um vetor de processo de derivação de movimento para identificar dados de referência. O conversor em código de vídeo pode selecionar o TMVP em casos em que o TMVP identifica dados de referência de correspondência próxima (por exemplo, conforme descrito em relação às Figuras 8 a 9 abaixo). O conversor em código de vídeo pode, em alguns casos, refinar adicionalmente o TMVP para determinar um vetor de movimento derivado com o uso do processo de derivação de informações de movimento.[00140] In accordance with aspects of this disclosure, motion vector candidates, such as the TMVP shown in Figures 5A and 5B, may be used to derive a motion vector for a block. For example, the video codec may generate a candidate list that includes a TMVP determined in accordance with the process described above. In this example, the video codec may use the TMVP as an initial motion vector in a motion information derivation process (e.g., bilateral matching, template matching, or the like). The video codec may apply the TMVP in a motion vector derivation process to identify reference data. The video codec may select the TMVP in cases where the TMVP identifies closely matching reference data (e.g., as described with respect to Figures 8-9 below). The video codec may, in some cases, further refine the TMVP to determine a derived motion vector using the motion information derivation process.
[00141] Em alguns exemplos, o conversor em código de vídeo pode remover uma lista de candidato que inclui candidatos de vetor de movimento (como aqueles descritos em relação às Figuras 4A a 5B). Por exemplo, em alguns casos, os candidatos de diferentes blocos podem ser iguais, o que diminui a eficiência de uma lista de candidato de mescla/AMVP. O código de vídeo pode aplicar um processo de remoção para solucionar esse problema. O conversor em código de vídeo pode comparar um candidato contra os outros na lista de candidato atual para evitar inserir um candidato idêntico. Para reduzir a complexidade, o conversor em código de vídeo pode apenas aplicar números limitados de processos de remoção ao invés de comparar cada potencial a todos os outros existentes.[00141] In some examples, the video codec may prune a candidate list that includes motion vector candidates (such as those described in connection with Figures 4A through 5B). For example, in some cases, candidates from different blocks may be the same, which decreases the efficiency of a merge/AMVP candidate list. The video codec may apply a pruning process to address this issue. The video codec may compare a candidate against others in the current candidate list to avoid inserting an identical candidate. To reduce complexity, the video codec may only apply a limited number of pruning processes rather than comparing each potential candidate to all existing candidates.
[00142] A Figura 6 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento unilateral (ME) em conversão ascendente de taxa de quadros (FRUC). Em particular, a Figura 6 ilustra um quadro atual 100, um quadro de referência 102 e um quadro interpolado 104. Em alguns casos, um decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens com base em uma ou mais imagens de referência. O decodificador de vídeo ou dispositivo de pós-processamento pode interpolar imagens para converter de modo ascendente uma taxa de quadros original de um fluxo de bits codificado. Alternativamente, o decodificador de vídeo ou dispositivo de pós- processamento pode interpolar imagens para inserir uma ou mais imagens que foram puladas por um codificador de vídeo para codificar uma sequência de vídeo em uma taxa de quadros reduzida. Em todo caso, o decodificador de vídeo ou dispositivo de pós-processamento interpola quadros (como quadro interpolado 104) que não estão inclusos em um fluxo de bits codificado que foi recebido pelo decodificador de vídeo com o uso de imagens que foram decodificadas (como quadro atual 100 e quadro de referência 102). O decodificador de vídeo ou dispositivo de pós-processamento pode interpolar as imagens com o uso de qualquer uma dentre várias técnicas de interpolação, por exemplo, com o uso de interpolação de quadro compensada por movimento, repetição de quadro, ou cálculo de média de quadros.[00142] Figure 6 is a conceptual diagram illustrating an example of one-way motion estimation (ME) in frame rate up-conversion (FRUC). In particular, Figure 6 illustrates a current frame 100, a reference frame 102, and an interpolated frame 104. In some cases, a video decoder or post-processing device may interpolate images based on one or more reference images. The video decoder or post-processing device may interpolate images to up-convert an original frame rate of an encoded bitstream. Alternatively, the video decoder or post-processing device may interpolate images to insert one or more images that have been skipped by a video encoder to encode a video sequence at a reduced frame rate. In any case, the video decoder or post-processing device interpolates frames (such as interpolated frame 104) that are not included in an encoded bitstream that was received by the video decoder using images that have been decoded (such as current frame 100 and reference frame 102). The video decoder or post-processing device may interpolate the images using any of a number of interpolation techniques, for example, using motion-compensated frame interpolation, frame repetition, or frame averaging.
[00143] As técnicas de interpolação de quadro notadas acima são tipicamente implantadas pós ciclo. Por exemplo, um decodificador de vídeo tipicamente recebe e decodifica um fluxo de bits codificado para gerar uma representação reconstruída de uma sequência de vídeo que inclui o quadro atual 100 e o quadro de referência 102. Após o ciclo de decodificação, o decodificador de vídeo ou outro dispositivo de pós processamento pode interpolar as imagens para ser incluso com a representação reconstruída que inclui o quadro interpolado 104. Em alguns casos, o processo de interpolar a imagem pode ser referido como conversão ascendente de taxa de quadros (FRUC), devido ao fato de que a sequência resultante das imagens inclui (interpoladas) imagens adicionais que não estavam inclusas no fluxo de bits codificado.[00143] The frame interpolation techniques noted above are typically implemented post-cycle. For example, a video decoder typically receives and decodes an encoded bitstream to generate a reconstructed representation of a video sequence that includes the current frame 100 and the reference frame 102. After the decoding cycle, the video decoder or other post-processing device may interpolate the images to be included with the reconstructed representation that includes the interpolated frame 104. In some cases, the process of interpolating the image may be referred to as frame rate upconversion (FRUC), due to the fact that the resulting sequence of images includes additional (interpolated) images that were not included in the encoded bitstream.
[00144] Consequentemente, a tecnologia de FRUC pode ser usada para gerar vídeos de taxa de quadros alta com base em vídeos de taxa de quadros baixa. FRUC foi usada na indústria de visores. Os exemplos incluem H. Liu, R. Xiong, D. Zhao, S. Ma, W. Gao, “Multiple Hypotheses Bayesian Frame Rate Up-Conversion by Adaptive Fusion of Motion-Compensated Interpolations”, IEEE transactions on circuits and systems for video technology, vol. 22, No. 8, agosto de 2012; W. H. Lee, K. Choi, J. B. Ra, “Frame rate up conversion based on variational image fusion”, IEEE transactions on image processing, vol. 23, No. 1, janeiro de 2014; e U. S. Kim, M. H. Sunwoo, “New frame rate up- conversion algorithms with low computational complexity”, IEEE transactions on circuits and systems for video technology, vol. 24, no 3, março de 2014.[00144] Consequently, FRUC technology can be used to generate high frame rate videos based on low frame rate videos. FRUC was used in the display industry. Examples include H. Liu, R. Xiong, D. Zhao, S. Ma, W. Gao, “Multiple Hypotheses Bayesian Frame Rate Up-Conversion by Adaptive Fusion of Motion-Compensated Interpolations”, IEEE transactions on circuits and systems for video technology, vol. 22, No. 8, August 2012; W. H. Lee, K. Choi, J. B. Ra, “Frame rate up conversion based on variational image fusion,” IEEE transactions on image processing, vol. 23, No. 1, January 2014; and U. S. Kim, M. H. Sunwoo, “New frame rate up-conversion algorithms with low computational complexity,” IEEE transactions on circuits and systems for video technology, vol. 24, no 3, March 2014.
[00145] Os algoritmos de FRUC podem ser divididos em dois tipos. Um tipo de métodos interpola quadros intermediários por cálculo de média ou repetição de quadro simples. Entretanto, esse método fornece resultados inadequados em uma imagem que contém muito movimento. O outro tipo de método, chamado de FRUC compensada em movimento (MC-FRUC), considera o movimento de objeto quando o mesmo gera quadros intermediários e consiste em duas etapas: estimativa de movimento (ME) e interpolação compensada em movimento (MCI). A ME gera vetores de movimento (MVs), que representam movimento de objeto com o uso de vetores, considerando que a MCI usa MVs para gerar quadros intermediários.[00145] FRUC algorithms can be divided into two types. One type of methods interpolates intermediate frames by averaging or simple frame repetition. However, this method provides inadequate results in an image that contains a lot of motion. The other type of method, called motion-compensated FRUC (MC-FRUC), considers object motion when it generates intermediate frames and consists of two steps: motion estimation (ME) and motion-compensated interpolation (MCI). ME generates motion vectors (MVs), which represent object motion using vectors, whereas MCI uses MVs to generate intermediate frames.
[00146] O algoritmo de correspondência de bloco (BMA) é amplamente usado para ME em MC-FRUC como é simples de implantar. BMA divide uma imagem em blocos e detecta o movimento daqueles blocos, por exemplo, para determinar se os blocos correspondem. Dois tipos de ME são primeiramente usados para BMA: ME unilateral e ME bilateral.[00146] The block matching algorithm (BMA) is widely used for ME in MC-FRUC as it is simple to implement. BMA divides an image into blocks and detects the motion of those blocks, for example, to determine whether the blocks match. Two types of ME are primarily used for BMA: unilateral ME and bilateral ME.
[00147] Conforme mostrado na Figura 6, a ME unilateral obtém MVs buscando-se a melhor correspondência de bloco do quadro de referência 102 do quadro atual 100. Então, o bloco na trajetória de movimento no quadro interpolado pode estar localizado de modo que o MV seja alcançado. Conforme mostrado na Figura 6, três blocos que incluem 106 A, 106B e 106C do quadro atual 100, do quadro de referência 102 e do quadro interpolado 104, respectivamente, estão envolvidos seguindo a trajetória de movimento. Embora o bloco 106 A no quadro atual 100 pertença a um bloco convertido em código, o melhor bloco de correspondência 106B no quadro de referência 102 pode pertencer não completamente a um bloco convertido em código, e nem o bloco 106C no quadro interpolado 104. Consequentemente, as regiões sobrepostas dos blocos e regiões não preenchidas (furos) podem ocorrer no quadro interpolado.[00147] As shown in Figure 6 , the one-sided ME obtains MVs by seeking the best block match of the reference frame 102 of the current frame 100. Then, the block on the motion path in the interpolated frame may be located such that the MV is achieved. As shown in Figure 6 , three blocks including 106A, 106B, and 106C of the current frame 100, the reference frame 102, and the interpolated frame 104, respectively, are involved in following the motion path. Although the block 106A in the current frame 100 belongs to a code-converted block, the best matching block 106B in the reference frame 102 may not completely belong to a code-converted block, and neither may the block 106C in the interpolated frame 104. Consequently, overlapping regions of the blocks and unfilled regions (holes) may occur in the interpolated frame.
[00148] Para manipular sobreposições, algoritmos de FRUC simples meramente envolvem o cálculo de média e sobrescrever os pixels sobrepostos. Ademais, os furos são cobertos pelos valores de pixel de uma referência ou um quadro atual. Entretanto, esses algoritmos resultam nos artefatos de blocagem e embaçamento. Por conseguinte, a segmentação de campo de movimento, extrapolação consecutiva com o uso da transformada Hartley distinta, e retoque de imagem são propostos para manipular furos e sobreposições sem aumentar os artefatos de blocagem e embaçamento.[00148] To handle overlaps, simple FRUC algorithms merely involve averaging and overwriting the overlapping pixels. Furthermore, the holes are covered by the pixel values of a reference or a current frame. However, these algorithms result in blocking and blurring artifacts. Therefore, motion field segmentation, consecutive extrapolation using the distinct Hartley transform, and image retouching are proposed to handle holes and overlaps without increasing the blocking and blurring artifacts.
[00149] De acordo com os aspectos desta revelação, um conversor em código de vídeo (como codificador de vídeo 20 e/ou decodificador de vídeo 30) pode gerar quadro interpolado 104 no ciclo de codificação ou decodificação com o uso da técnica de correspondência unilateral mostrada na Figura 6. Por exemplo, o conversor em código de vídeo pode usar FRUC de nível de imagem para interpolar quadro interpolado 104 como um previsor da imagem atual, com o uso da matriz de pixel reconstruída. Em alguns exemplos, essa imagem interpolada pode ser considerada como uma imagem de referência ou a reconstrução do quadro atual 100. Em outros exemplos, o conversor em código de vídeo pode estabelecer a imagem atual igual à imagem interpolada. Essa imagem pode ser marcada como uma imagem descartável e/ou imagem de não referência por elementos de sintaxe ou processos de decodificação.[00149] In accordance with aspects of this disclosure, a video codec (such as video encoder 20 and/or video decoder 30) may generate interpolated frame 104 in the encoding or decoding cycle using the one-way matching technique shown in Figure 6. For example, the video codec may use picture-level FRUC to interpolate interpolated frame 104 as a predictor of the current picture using the reconstructed pixel array. In some examples, this interpolated picture may be considered a reference picture or reconstruction of the current frame 100. In other examples, the video codec may set the current picture equal to the interpolated picture. This picture may be marked as a discarded picture and/or non-reference picture by syntax elements or decoding processes.
[00150] Em alguns exemplos, o conversor em código de vídeo pode interpolar uma imagem atual de modo que um modo de FRUC seja o único modo permitido, em que o modo de FRUC indica a técnica de correspondência unilateral mostrada na Figura 6 ou qualquer outra derivação de informações de movimento ou técnicas de interpolação descritas no presente documento. Por conseguinte, ao invés de uma sinalização de estrutura de CU com base em árvore quadrática, todos os blocos podem ter o mesmo tamanho predefinido ou sinalizado. Em alguns casos, apenas um subconjunto de modos de conversão em código de Cu válidos, como pular regular, mescla regular, modo de FRUC, e intra modo pode ser permitido. Alternativa ou adicionalmente, um modo de preenchimento de furo para FRUC pode ser permitido nessa imagem ou fatia.[00150] In some examples, the video codec may interpolate a current picture such that a FRUC mode is the only mode allowed, where the FRUC mode indicates the one-way matching technique shown in Figure 6 or any other motion information derivation or interpolation techniques described herein. Accordingly, instead of a quadratic tree-based CU structure signaling, all blocks may have the same predefined or signaled size. In some cases, only a subset of valid CU codec modes, such as regular skip, regular blend, FRUC mode, and intra mode may be allowed. Alternatively or additionally, a hole-filling mode for FRUC may be allowed in that picture or slice.
[00151] De acordo com os aspectos desta revelação, uma mensagem de SEI pode ser introduzida para indicar quais imagens ou subsequência de imagens são convertidas em código pela FRUC de nível de imagem. Essas imagens podem ser descartadas sem impactar a qualidade das outras imagens. Essa mensagem de SEI pode indicar (ou indicar adicionalmente) qual nível (ou níveis) temporal contém imagens convertidas em código de FRUC, ou contém apenas imagens convertidas em código de FRUC. Essas informações em mensagem de SEI também podem estar presentes como outros locais da sintaxe de alto nível, como PPS, SPS e VPS.[00151] In accordance with aspects of this disclosure, an SEI message may be introduced to indicate which pictures or subsequence of pictures are code-converted by the picture level FRUC. Such pictures may be discarded without impacting the quality of the other pictures. Such an SEI message may indicate (or further indicate) which temporal level (or levels) contains pictures converted to FRUC code, or contains only pictures converted to FRUC code. Such information in an SEI message may also be present as other places in the high-level syntax, such as PPS, SPS, and VPS.
[00152] Em alguns exemplos, um conversor em código de vídeo pode converter em código uma porção de uma imagem e interpolar os dados de vídeo restantes. Por exemplo, o conversor em código de vídeo pode converter em código uma chamada “dica” para a conversão ascendente de taxa de quadros de lado de decodificador, o que pode permitir que decodificadores ricos em recurso ou inteligentes gerem opcionalmente os quadros de FRUC. Por exemplo, várias regiões chave (como regiões de retângulo) podem ser sinalizadas como uma dica para esses quadros de FRUC. Quando a dica for recebida e opcionalmente processada, o método de FRUC especificado como parte do decodificador pode ser usado primeiramente pelas regiões que não são regiões chave, enquanto que as regiões chave devem ser processadas adicionalmente pelos meios que podem não ser especificados pelo decodificador, como métodos de preenchimento de furo.[00152] In some examples, a video encoder may encode a portion of a picture and interpolate the remaining video data. For example, the video encoder may encode a so-called “hint” for decoder-side frame rate upconversion, which may allow feature-rich or intelligent decoders to optionally generate FRUC frames. For example, several key regions (such as rectangle regions) may be signaled as a hint for these FRUC frames. When the hint is received and optionally processed, the FRUC method specified as part of the decoder may be used primarily for the regions that are not key regions, while the key regions may be further processed by means that may not be specified by the decoder, such as hole-filling methods.
[00153] Em relação ao preenchimento de furo, de acordo com os aspectos desta revelação, um conversor em código de vídeo pode implantar técnicas de preenchimento de furo com base em bloco. Por exemplo, uma técnica de preenchimento de furo é usar interblocos espacialmente vizinhos para prever o intra bloco atual na mesma CTU. Por exemplo, o conversor em código de vídeo pode codificar/decodificar uma CTU duas vezes. A primeira codificação/decodificação é conforme o normal. Na segunda rodada, apenas intra blocos são codificados/decodificados e sobrescritos. Para um intra bloco, todos os seus interblocos espacialmente vizinhos na mesma CTU, que incluem aquelas à direta inferior do bloco atual, são marcadas como disponíveis para intra predição. O método de preenchimento de furo também pode ser fatia, recorte, imagem ou qualquer outro nível. Outro método de preenchimento de furo pode usar uma técnica de retoque de imagem. Outras técnicas de preenchimento de furo também podem ser aplicáveis.[00153] Regarding hole filling, in accordance with aspects of this disclosure, a video codec converter may implement block-based hole filling techniques. For example, one hole filling technique is to use spatially neighboring interblocks to predict the current intrablock in the same CTU. For example, the video codec converter may encode/decode a CTU twice. The first encoding/decoding is as normal. In the second round, only intrablocks are encoded/decoded and overwritten. For an intrablock, all of its spatially neighboring interblocks in the same CTU, which include those to the lower right of the current block, are marked as available for intra prediction. The hole filling method may also be slice, crop, image, or any other level. Another hole filling method may use an image retouching technique. Other hole filling techniques may also be applicable.
[00154] A Figura 7 é um diagrama conceitual que ilustra um exemplo de estimativa de movimento bilateral (ME) em FRUC. Em particular, a Figura 7 ilustra um bloco interpolado 108 de um quadro interpolado 110 que é interpolado a partir de um bloco atual 112 de um quadro atual 114 e um bloco de referência 116 de um quadro de referência 118. Conforme mostrado na Figura 7, a ME bilateral é outra solução (em MC-FRUC) que pode ser usada para evitar os problemas causados por sobreposições e furos mostrados na Figura 6. A ME bilateral obtém MVs passando através do bloco interpolado 108 com o uso da simetria temporal entre os blocos 112 e 116 de quadro atual 114 e quadro de referência 118, respectivamente. Como um resultado, não gera sobreposições e furos. Visto que se supõe que o bloco atual é um bloco que está sendo processado, em uma determinada ordem, por exemplo, como no caso de conversão em código de vídeo, uma sequência desses blocos cobriria a imagem intermediária total sem sobreposição. Por exemplo, no caso de conversão em código de vídeo, os blocos podem ser processados na ordem de decodificação.[00154] Figure 7 is a conceptual diagram illustrating an example of bilateral motion estimation (ME) in FRUC. In particular, Figure 7 illustrates an interpolated block 108 of an interpolated frame 110 that is interpolated from a current block 112 of a current frame 114 and a reference block 116 of a reference frame 118. As shown in Figure 7, bilateral ME is another solution (in MC-FRUC) that can be used to avoid the problems caused by overlaps and holes shown in Figure 6. Bilateral ME obtains MVs passing through interpolated block 108 by using temporal symmetry between blocks 112 and 116 of current frame 114 and reference frame 118, respectively. As a result, it does not generate overlaps and holes. Since the current block is assumed to be a block that is being processed in a certain order, for example as in the case of video encoding, a sequence of such blocks would cover the entire intermediate picture without overlap. For example, in the case of video encoding, the blocks can be processed in the decoding order.
[00155] De acordo com os aspectos desta revelação, a estimativa de movimento bilateral mostrada no exemplo da Figura 7 pode ser aproveitada para derivar informações de movimento. Por exemplo, conforme descrito em maiores detalhes em relação à Figura 9 abaixo, um conversor em código de vídeo (como codificador de vídeo 20 ou decodificador de vídeo 30) pode aplicar a correspondência bilateral como um modo de derivação de informações de movimento para derivar informações de movimento durante a conversão em código. Na correspondência bilateral, o conversor em código de vídeo pode realizar uma busca de movimento por um primeiro conjunto de dados de referência em uma primeira imagem de referência que corresponde a um segundo conjunto de dados de referência em uma segunda imagem de referência.[00155] In accordance with aspects of this disclosure, the bilateral motion estimation shown in the example of Figure 7 may be leveraged to derive motion information. For example, as described in greater detail with respect to Figure 9 below, a video codec (such as video encoder 20 or video decoder 30) may apply bilateral matching as a motion information derivation mode to derive motion information during codec. In bilateral matching, the video codec may perform a motion search for a first set of reference data in a first reference picture that corresponds to a second set of reference data in a second reference picture.
[00156] De acordo com outros aspectos desta revelação, um conversor em código de vídeo (como codificador de vídeo 20 e/ou decodificador de vídeo 30) pode gerar o quadro interpolado no ciclo de codificação ou decodificação com o uso da técnica de correspondência bilateral mostrada na Figura 7. Por exemplo, o conversor em código de vídeo pode usar FRUC de nível de imagem para interpolar a imagem interpolada como um previsor da imagem atual, com o uso da matriz de pixel reconstruída. Em alguns exemplos, essa imagem interpolada pode ser considerada como uma imagem de referência ou a reconstrução da imagem atual. Em outros exemplos, o conversor em código de vídeo pode estabelecer a imagem atual igual à imagem interpolada. Essa imagem pode ser marcada como uma imagem descartável e/ou imagem de não referência por elementos de sintaxe ou processos de decodificação.[00156] In accordance with other aspects of this disclosure, a video codec (such as video encoder 20 and/or video decoder 30) may generate the interpolated frame in the encoding or decoding cycle using the two-way matching technique shown in Figure 7. For example, the video codec may use picture-level FRUC to interpolate the interpolated picture as a predictor of the current picture using the reconstructed pixel array. In some examples, this interpolated picture may be considered as a reference picture or reconstruction of the current picture. In other examples, the video codec may set the current picture equal to the interpolated picture. This picture may be marked as a discarded picture and/or non-reference picture by syntax elements or decoding processes.
[00157] A Figura 8 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento de lado de decodificador (DMVD) com base em correspondência de modelo. Com os codecs de vídeo avançados, a porcentagem de bit das informações de movimento em fluxo de bits se torna maior e maior. Em alguns casos, a DMVD pode reduzir o custo de bits das informações de movimento. A DMVD com base em correspondência de modelo pode exibir um aprimoramento de eficiência de conversão em código , conforme descrito, por exemplo, em S. Kamp, M. Wien, “Decoder-side motion vector derivation for block-based video coding”, IEEE transactions on circuits and systems for video technology, vol. 22, no 12, dezembro de 2012.[00157] Figure 8 is a conceptual diagram illustrating an example of decoder-side motion vector derivation (DMVD) based on template matching. With advanced video codecs, the bit percentage of motion information in bitstream becomes larger and larger. In some cases, DMVD can reduce the bit cost of motion information. Template matching based DMVD can exhibit an improvement in code conversion efficiency, as described, for example, in S. Kamp, M. Wien, “Decoder-side motion vector derivation for block-based video coding”, IEEE transactions on circuits and systems for video technology, vol. 22, no. 12, December 2012.
[00158] No exemplo da Figura 8, uma imagem atual 120 inclui um alvo de predição 122 (por exemplo, um bloco atualmente sendo convertido em código) e um modelo 124. As imagens de referência 126 incluem um modelo colocalizado 128, uma melhor correspondência 130 e um vetor de deslocamento 132. Um conversor em código de vídeo (como codificador de vídeo 20 e/ou decodificador de vídeo 30) pode usar modelo 124 para buscar por uma melhor correspondência para alvo de predição 122 (por exemplo, ao invés de usar o próprio alvo de predição 122, que está ainda a ser convertido em código). Por exemplo, o conversor em código de vídeo pode realizar uma busca de movimento para identificar um primeiro conjunto de dados de referência (por exemplo, melhor correspondência 130) que corresponde a um segundo conjunto de dados de referência fora do alvo de predição 122 (por exemplo, modelo 124). Conforme notado acima, a correspondência pode ser determinada com base em uma quantidade de semelhança entre dados de referência, e pode ser referida no presente documento como determinando uma “correspondência” ou “melhor correspondência”.[00158] In the example of Figure 8, a current image 120 includes a prediction target 122 (e.g., a block currently being encoded) and a template 124. Reference images 126 include a co-located template 128, a best match 130, and a displacement vector 132. A video encoder (such as video encoder 20 and/or video decoder 30) may use template 124 to search for a best match for prediction target 122 (e.g., rather than using prediction target 122 itself, which is still being encoded). For example, the video encoder may perform a motion search to identify a first set of reference data (e.g., best match 130) that corresponds to a second set of reference data outside of prediction target 122 (e.g., template 124). As noted above, correspondence may be determined based on an amount of similarity between reference data, and may be referred to herein as determining a “match” or “best match.”
[00159] No exemplo mostrado, o conversor em código de vídeo pode identificar o modelo colocalizado 128 nas imagens de referência 126. O conversor em código de vídeo pode, então, buscar pela melhor correspondência 130, que inclui valores de pixel que são semelhantes ao modelo 124. O conversor em código de vídeo pode determinar o vetor de deslocamento 132 com base no deslocamento do modelo colocalizado 128 e a melhor correspondência 130 em imagens de referência 126.[00159] In the example shown, the video codec may identify the co-located template 128 in the reference images 126. The video codec may then search for the best match 130, which includes pixel values that are similar to the template 124. The video codec may determine the displacement vector 132 based on the displacement of the co-located template 128 and the best match 130 in the reference images 126.
[00160] Supondo que o modelo 124 e o alvo de predição 122 são provenientes do mesmo objeto, o vetor de movimento do modelo pode ser usado como o vetor de movimento do alvo de predição. Por conseguinte, no exemplo da Figura 8, o conversor em código de vídeo pode aplicar o vetor de deslocamento 132 para o alvo de predição 122. Visto que a correspondência de modelo é conduzida tanto em um codificador de vídeo quanto um decodificador de vídeo, o vetor de movimento pode ser derivado no lado de decodificador para evitar o custo de sinalização.[00160] Assuming that the template 124 and the prediction target 122 are from the same object, the motion vector of the template can be used as the motion vector of the prediction target. Accordingly, in the example of Figure 8, the video encoder can apply the displacement vector 132 to the prediction target 122. Since the template matching is conducted at both a video encoder and a video decoder, the motion vector can be derived at the decoder side to avoid the signaling cost.
[00161] De acordo com os aspectos desta revelação, o conversor em código de vídeo pode aplicar a correspondência de modelo como um modo de derivação de informações de movimento. Por exemplo, o conversor em código de vídeo pode aplicar a correspondência de modelo para derivar informações de movimento de um bloco atual localizando-se uma melhor correspondência entre o modelo 124 da imagem atual e dados de referência correspondentes em imagens de referência 126. Embora o exemplo da Figura 8 ilustre o modelo 124 como um bloco de dados de vídeo em formato de L, deve ser compreendido que outros modelos podem ser usados. Por exemplo, o conversor em código de vídeo pode usar múltiplos blocos como um modelo, por exemplo, um ou mais blocos posicionados à esquerda do alvo de predição 122 e um ou mais blocos posicionados acima do alvo de predição 122.[00161] In accordance with aspects of this disclosure, the video codec may apply template matching as a mode of deriving motion information. For example, the video codec may apply template matching to derive motion information from a current block by finding a best match between the template 124 of the current picture and corresponding reference data in reference pictures 126. Although the example of Figure 8 illustrates the template 124 as an L-shaped block of video data, it should be understood that other templates may be used. For example, the video codec may use multiple blocks as a template, e.g., one or more blocks positioned to the left of the prediction target 122 and one or more blocks positioned above the prediction target 122.
[00162] De acordo com os aspectos desta revelação, o conversor em código de vídeo pode aplicar as técnicas de correspondência de modelo mostradas na Figura 8 com o uso de um ou mais vetores de movimento a partir de uma lista de candidato de vetores de movimento. Por exemplo, o conversor em código de vídeo pode ser configurado para determinar um ou mais vetores de movimento candidatos com o uso de qualquer combinação das técnicas descritas no presente documento (por exemplo, candidatos de modo de mescla, candidatos de AMVP, um TMVP ou similares). O conversor em código de vídeo pode, então, ser configurado para aplicar um ou mais dos vetores de movimento candidatos ao modelo 124 para localizar o modelo colocalizado 128 (nesse exemplo, a localização do modelo colocalizado 128 é ditada pelo um ou mais vetores de movimento candidatos e não necessariamente estritamente colocalizado). O conversor em código de vídeo pode ser configurado para determinar quais dos vetores de movimento candidatos resultam em uma melhor correspondência entre o modelo 124 e o modelo colocalizado 128.[00162] In accordance with aspects of this disclosure, the video codec may apply the template matching techniques shown in Figure 8 using one or more motion vectors from a candidate list of motion vectors. For example, the video codec may be configured to determine one or more candidate motion vectors using any combination of the techniques described herein (e.g., blend mode candidates, AMVP candidates, a TMVP, or the like). The video codec may then be configured to apply one or more of the candidate motion vectors to the template 124 to locate the co-located template 128 (in this example, the location of the co-located template 128 is dictated by the one or more candidate motion vectors and is not necessarily strictly co-located). The video codec may be configured to determine which of the candidate motion vectors results in a better match between the template 124 and the co-located template 128.
[00163] De acordo com os aspectos desta revelação, o conversor em código de vídeo pode, então, ser configurado para refinar o vetor de movimento candidato para derivar informações de movimento para o alvo de predição 122. Por exemplo, o conversor em código de vídeo pode buscar por uma melhor correspondência para o modelo 124 em uma região das imagens de referência 126 identificada pelo vetor de movimento candidato. Mediante a determinação de uma melhor correspondência, o conversor em código de vídeo pode determinar um deslocamento entre o modelo 124 e a correspondência com base em determinação. O conversor em código de vídeo pode designar o deslocamento como um vetor de movimento derivado para o alvo de predição 122.[00163] In accordance with aspects of this disclosure, the video codec may then be configured to refine the candidate motion vector to derive motion information for the prediction target 122. For example, the video codec may search for a best match for the template 124 in a region of the reference images 126 identified by the candidate motion vector. Upon determining a best match, the video codec may determine an offset between the template 124 and the match based on the determination. The video codec may designate the offset as a derived motion vector for the prediction target 122.
[00164] A Figura 9 é um diagrama conceitual que ilustra um exemplo de derivação de vetor de movimento bidirecional em DMVD. Outra categoria de DMVD é a derivação de MV bidirecional com base em espelho, conforme descrito, por exemplo, em Y.-J. Chiu, L. Xu, W. Zhang, H. Jiang, “Decoder-side Motion Estimation and Wiener filter for F£EVC”, Visual communications and Image Processing (VCIP), 2013. O conceito de derivação de vetor de movimento bidirecional em DMVD pode ser semelhante à ME bilateral em FRUC. Por exemplo, a derivação de MV com base em espelho pode ser aplicada pela estimativa de movimento centrossimétrica ao redor de centros de busca em precisão de amostra fracionária.[00164] Figure 9 is a conceptual diagram illustrating an example of bidirectional motion vector derivation in DMVD. Another category of DMVD is mirror-based bidirectional MV derivation, as described, for example, in Y.-J. Chiu, L. Xu, W. Zhang, H. Jiang, “Decoder-side Motion Estimation and Wiener filter for F£EVC”, Visual communications and Image Processing (VCIP), 2013. The concept of bidirectional motion vector derivation in DMVD can be similar to bilateral ME in FRUC. For example, mirror-based MV derivation can be applied for centrosymmetric motion estimation around search centers in fractional sample precision.
[00165] O exemplo da Figura 9 inclui a imagem atual 140 que tem o bloco atual 142 (em que o bloco é atualmente convertido em código), um primeiro vetor de movimento candidato PMV0 que identifica um primeiro bloco de modelo 144 de uma primeira imagem de referência 146 (ref L0), e um segundo vetor de movimento candidato PMV1 que identifica um segundo bloco de modelo 148 de uma segunda imagem de referência 150. O conversor em código de vídeo pode aplicar dMV como um desvio para localizar um primeiro bloco de referência 152 na janela de busca 154 da primeira imagem de referência 146 e para localizar um segundo bloco de referência 156 na janela de busca 158 da segunda imagem de referência 150.[00165] The example of Figure 9 includes the current picture 140 having the current block 142 (where the block is currently encoded), a first candidate motion vector PMV0 identifying a first template block 144 of a first reference picture 146 (ref L0), and a second candidate motion vector PMV1 identifying a second template block 148 of a second reference picture 150. The video encoder may apply dMV as an offset to locate a first reference block 152 in the search window 154 of the first reference picture 146 and to locate a second reference block 156 in the search window 158 of the second reference picture 150.
[00166] Por exemplo, o conversor em código de vídeo pode adicionar dMV a PMV0 e subtrair a dMV da PMV1 para gerar um par de MV, MV0 e MV1. O conversor em código de vídeo pode verificar todos os valores de dMV dentro da janela de busca 154 e 158 para determinar qual valor de dMV resulta na melhor correspondência entre o primeiro bloco de referência 152 (por exemplo, um primeiro conjunto de dados de referência) de ref L0 e o segundo bloco de referência 156 (por exemplo, um segundo conjunto de dados de referência) de ref L1. Em alguns exemplos, o conversor em código de vídeo pode determinar a melhor correspondência com base na Soma da Diferença Absoluta (SAD). Em outros exemplos, o conversor em código de vídeo pode usar outra métrica para determinar a melhor correspondência. O tamanho e localização das janelas de busca 154 e 158 podem ser predefinidas ou podem ser sinalizadas em um fluxo de bits.[00166] For example, the video codec may add dMV to PMV0 and subtract dMV from PMV1 to generate an MV pair, MV0 and MV1. The video codec may check all dMV values within search windows 154 and 158 to determine which dMV value results in the best match between the first reference block 152 (e.g., a first set of reference data) of ref L0 and the second reference block 156 (e.g., a second set of reference data) of ref L1. In some examples, the video codec may determine the best match based on Sum of Absolute Difference (SAD). In other examples, the video codec may use another metric to determine the best match. The size and location of search windows 154 and 158 may be predefined or may be signaled in a bitstream.
[00167] O conversor em código de vídeo pode selecionar o par de MV com a SAD mínima como a saída da estimativa de movimento centrossimétrica. Visto que essa técnica usa uma referência futura (referência em uma posição temporal posterior em relação ao quadro atual) e uma referência anterior (referência em uma posição temporal anterior em relação ao quadro atual) para a correspondência de SAD, não pode ser aplicada ao quadro P ou quadros B de baixo atraso em que apenas a última referência está disponível.[00167] The video encoder may select the MV pair with the minimum SAD as the output of the centrosymmetric motion estimation. Since this technique uses a forward reference (reference at a later temporal position relative to the current frame) and a backward reference (reference at an earlier temporal position relative to the current frame) for SAD matching, it cannot be applied to low-delay P-frame or B-frames where only the latter reference is available.
[00168] De acordo com os aspectos desta revelação, o conversor em código de vídeo pode aplicar as técnicas de derivação de vetor de movimento bidirecional como um modo de derivação de informações de movimento. Em alguns exemplos, o conversor em código de vídeo pode aplicar as técnicas mostradas na Figura 9 com o uso de um ou mais vetores de movimento a partir de uma lista de candidato de vetores de movimento. Por exemplo, o conversor em código de vídeo pode ser configurado para determinar um ou mais vetores de movimento candidatos com o uso de qualquer combinação das técnicas descritas no presente documento (por exemplo, candidatos de modo de mescla, candidatos de AMVP, um TMVP ou similares). O conversor em código de vídeo pode, então, ser configurado para aplicar um ou mais dos vetores de movimento candidatos como PMV0 e/ou PMVl para localizar o primeiro bloco de modelo 144 e segundo bloco de modelo 148. O conversor em código de vídeo pode ser configurado para determinar qual dos vetores de movimento candidatos resulta em uma melhor correspondência entre o primeiro bloco de modelo 144 e o segundo bloco de modelo 148.[00168] In accordance with aspects of this disclosure, the video codec may apply bidirectional motion vector derivation techniques as a mode of deriving motion information. In some examples, the video codec may apply the techniques shown in Figure 9 using one or more motion vectors from a candidate list of motion vectors. For example, the video codec may be configured to determine one or more candidate motion vectors using any combination of the techniques described herein (e.g., blend mode candidates, AMVP candidates, a TMVP, or the like). The video codec may then be configured to apply one or more of the candidate motion vectors such as PMV0 and/or PMV1 to locate the first template block 144 and second template block 148. The video codec may be configured to determine which of the candidate motion vectors results in a better match between the first template block 144 and the second template block 148.
[00169] De acordo com os aspectos desta revelação, o conversor em código de vídeo pode, então, ser configurado para refinar o vetor de movimento candidato para derivar informações de movimento para o bloco atual 142. Por exemplo, o conversor em código de vídeo pode buscar por uma melhor correspondência aplicando-se uma variedade de valores de dMV, do modo descrito acima. Desta forma, o conversor em código de vídeo pode derivar o par de MV MV0 e MV1.[00169] In accordance with aspects of this disclosure, the video codec may then be configured to refine the candidate motion vector to derive motion information for the current block 142. For example, the video codec may search for a best match by applying a variety of dMV values, in the manner described above. In this manner, the video codec may derive the MV pair MV0 and MV1.
[00170] A Figura 11 é um diagrama conceitual que ilustra derivação de vetor de movimento com base em correspondência bilateral estendida. Uma desvantagem potencial da derivação de MV bidirecional com base em espelho (por exemplo, conforme mostrado na Figura 10) é que não funciona quando duas referências da imagem atual são ambas anteriores ou ambas posteriores em relação à imagem atual. As técnicas de correspondência bilateral estendida descrita no presente documento podem, em alguns casos, superar a desvantagem que em todas as imagens de referência da imagem atual estão no mesmo lado (na ordem de exibição) como a imagem atual.[00170] Figure 11 is a conceptual diagram illustrating motion vector derivation based on extended bilateral correspondence. A potential drawback of mirror-based bidirectional MV derivation (e.g., as shown in Figure 10) is that it does not work when two references of the current picture are both earlier or both later with respect to the current picture. The extended bilateral correspondence techniques described herein can, in some cases, overcome the drawback that all reference pictures of the current picture are on the same side (in display order) as the current picture.
[00171] O exemplo da Figura 11 inclui uma imagem atual 160 que inclui um bloco atual 162, uma primeira imagem de referência (Ref0) 164 que inclui um primeiro bloco de referência 166 e uma segunda imagem de referência (Ref1) 168 que inclui um segundo bloco de referência 170. Conforme mostrado na Figura 11, a primeira imagem de referência (Ref0) 164 e a segunda imagem de referência (Ref1) 168 estão ambas localizadas antes da imagem atual na direção temporal. Supondo que o primeiro bloco de referência 166, o segundo bloco de referência 170 e o bloco atual 162 estão ao longo da mesma trajetória de movimento, a razão entre MV0 e MV1 deverá ser igual à razão entre a distância temporal TDO e TD1. Em outras palavras, dadas as duas referências Ref0 e Ref1 com a distância temporal TDO e TD1 para a imagem atual, para qualquer MV0 em Ref0, MV1 em Ref1 podem ser determinados escalonando MV0.[00171] The example of Figure 11 includes a current picture 160 that includes a current block 162, a first reference picture (Ref0) 164 that includes a first reference block 166, and a second reference picture (Ref1) 168 that includes a second reference block 170. As shown in Figure 11, the first reference picture (Ref0) 164 and the second reference picture (Ref1) 168 are both located before the current picture in the temporal direction. Assuming that the first reference block 166, the second reference block 170, and the current block 162 are along the same motion path, the ratio of MV0 to MV1 should be equal to the ratio of the temporal distance TDO to TD1. In other words, given two references Ref0 and Ref1 with temporal distance TDO and TD1 to the current image, for any MV0 in Ref0, MV1 in Ref1 can be determined by scaling MV0.
[00172] O conversor em código de vídeo pode selecionar o par de MV0 e MV1 final como o par que minimiza o custo de correspondência entre o bloco par apontado por MV0 e MV1 (por exemplo, conforme descrito acima em relação à Figura 10). Teoricamente, o bloco atual 162 pode ser considerado como um bloco extrapolado com base em primeiro bloco de referência 166 e segundo bloco de referência 170. Deve ser notado que a correspondência bilateral estendida também funciona no caso bidirecional normal em que a imagem atual está temporariamente entre as duas referências. Nesse caso, o bloco atual 162 pode ser considerado como um bloco interpolado com base em primeiro bloco de referência 166 e segundo bloco de referência 170. Ademais, as técnicas de correspondência bilateral descritas no presente documento não exigem “relação de espelho” entre MV0 e MV1, até mesmo no caso bidirecional. A suposição de correspondência bilateral é que a razão entre MV0 e MV1 está na proporção à razão entre a distância temporal a partir de Ref0 para a imagem atual e aquela a partir de Ref1 para a imagem atual.[00172] The video codec may select the final MV0 and MV1 pair as the pair that minimizes the matching cost between the paired block pointed to by MV0 and MV1 (e.g., as described above with respect to Figure 10). Theoretically, the current block 162 may be considered as an extrapolated block based on first reference block 166 and second reference block 170. It should be noted that extended bilateral matching also works in the normal bidirectional case where the current picture is temporarily between the two references. In that case, the current block 162 may be considered as an interpolated block based on first reference block 166 and second reference block 170. Furthermore, the bilateral matching techniques described herein do not require a “mirror relationship” between MV0 and MV1, even in the bidirectional case. The bilateral correspondence assumption is that the ratio between MV0 and MV1 is in proportion to the ratio of the temporal distance from Ref0 to the current image to that from Ref1 to the current image.
[00173] Claramente, para blocos de referência além do primeiro bloco de referência 166 e segundo bloco de referência 170, o conversor em código de vídeo pode derivar um par de MV diferente. Em um exemplo, o decodificador de vídeo pode selecionar imagens de referência para realizar a correspondência bilateral de acordo com uma ordem em que as imagens de referência aparecem em uma lista de imagem de referência. Por exemplo, o conversor em código de vídeo pode selecionar a primeira referência na lista de referência 0 como Ref0 e a primeira referência na lista de referência 1 como Ref1. O conversor em código de vídeo pode, então, busca o par de MV (MV0, MV1). Em outro exemplo, o conversor em código de vídeo seleciona Ref0 com base em uma entrada em uma lista inicial (por exemplo, uma lista de candidato de vetor de movimento inicial). O conversor em código de vídeo pode, então, estabelecer Ref1 como uma imagem de referência na outra lista de imagem de referência que está temporariamente mais próxima à imagem atual. Consequentemente, o conversor em código de vídeo pode buscar o par de MV (MV0, MV1) em Ref0 e Ref1.[00173] Clearly, for reference blocks other than first reference block 166 and second reference block 170, the video codec may derive a different MV pair. In one example, the video decoder may select reference pictures to perform two-way matching according to an order in which the reference pictures appear in a reference picture list. For example, the video codec may select the first reference in reference list 0 as Ref0 and the first reference in reference list 1 as Ref1. The video codec may then search for the MV pair (MV0, MV1). In another example, the video codec selects Ref0 based on an entry in an initial list (e.g., an initial motion vector candidate list). The video codec may then establish Ref1 as a reference picture in the other reference picture list that is temporally closest to the current picture. Consequently, the video encoder can search for the MV pair (MV0, MV1) in Ref0 and Ref1.
[00174] Por conseguinte, de acordo com aspectos desta revelação, o conversor em código de vídeo pode aplicar as técnicas de derivação de movimento bidirecional estendida ilustradas na Figura 11 como um modo de derivação de informações de movimento. Por exemplo, o conversor em código de vídeo pode usar a correspondência bilateral para derivar informações de movimento de bloco atual 162 encontrando-se a melhor correspondência entre dois blocos (por exemplo, como primeiro bloco de referência 166 e segundo bloco de referência 170) ao longo da trajetória de movimento do bloco atual em duas imagens de referência diferentes. Sob a suposição de trajetória de movimento contínua, os vetores de movimento MV0 e MV1 que apontam para os dois blocos de referência, o primeiro bloco de referência 166 e o segundo bloco de referência 170 deverão ser proporcionais ás distâncias temporais, isto é, TD0 e TD1, entre a imagem atual e as duas imagens de referência. Como um caso especial, quando a imagem atual 160 estiver temporariamente entre duas imagens de referência (conforme mostrado no exemplo da Figura 10) e a distância temporal da imagem atual para as duas imagens de referência é a mesma, a correspondência bilateral se torna derivação de MV bidirecional com base em espelho.[00174] Accordingly, in accordance with aspects of this disclosure, the video codec may apply the extended bidirectional motion derivation techniques illustrated in Figure 11 as a mode of deriving motion information. For example, the video codec may use bilateral matching to derive current block 162 motion information by finding the best match between two blocks (e.g., as first reference block 166 and second reference block 170) along the motion trajectory of the current block in two different reference pictures. Under the continuous motion trajectory assumption, the motion vectors MV0 and MV1 pointing to the two reference blocks, first reference block 166 and second reference block 170, should be proportional to the temporal distances, i.e., TD0 and TD1, between the current picture and the two reference pictures. As a special case, when the current image 160 is temporarily between two reference images (as shown in the example of Figure 10) and the temporal distance from the current image to the two reference images is the same, bilateral matching becomes mirror-based bidirectional MV derivation.
[00175] A Figura 11 é um fluxograma que ilustra um exemplo de decodificação de uma unidade de predição (PU) com o uso de DMVD. Em Y.-J. Chiu, L. Xu, W. Zhang, H. Jiang, “Decoder-side Motion Estimation and Wiener filter for HEVC”, Visual communications and Image Processing (VCIP), 2013, foi proposto adicionalmente combinar a derivação de MV bidirecional com base em espelho com modo de mescla em HEVC. Na técnica proposta, um sinalizador chamado de pu_dmvd_flag é adicionado a uma PU de fatias B para indicar se um modo de DMVD for aplicado à PU atual. Devido ao fato de que o modo de DMVD não transmite explicitamente quaisquer informações de MV no fluxo de bits, o elemento de sintaxe pu_dmvd_flag é integrado com a sintaxe de modo de mescla em HEVC (que usa um índice para os dados representativos de um vetor de movimento ao invés do próprio vetor de movimento).[00175] Figure 11 is a flowchart illustrating an example of decoding a prediction unit (PU) using DMVD. In Y.-J. Chiu, L. Xu, W. Zhang, H. Jiang, “Decoder-side Motion Estimation and Wiener filter for HEVC,” Visual communications and Image Processing (VCIP), 2013, it was further proposed to combine mirror-based bidirectional MV derivation with blending mode in HEVC. In the proposed technique, a flag called pu_dmvd_flag is added to a PU of B slices to indicate whether a DMVD mode is applied to the current PU. Because the DMVD mode does not explicitly convey any MV information in the bitstream, the pu_dmvd_flag syntax element is integrated with the blending mode syntax in HEVC (which uses an index to the data representing a motion vector rather than the motion vector itself).
[00176] No exemplo da Figura 11, um decodificador de vídeo (como decodificador de vídeo 30) pode começar a decodificação de uma PU (180). O decodificador de vídeo 30 pode determinar se o modo usado para decodificar a PU é o modo de mescla (182), por exemplo, com base na sintaxe inclusa em um fluxo de bits que inclui a PU. Se o modo de mescla não for usado (a ramificação “não” da etapa 182), o decodificador de vídeo 30 pode usar um processo regular para uma PU sem mescla para decodificar a PU (184) e acabar o processo (186).[00176] In the example of Figure 11, a video decoder (such as video decoder 30) may begin decoding a PU (180). Video decoder 30 may determine whether the mode used to decode the PU is blend mode (182), for example, based on syntax included in a bitstream that includes the PU. If blend mode is not used (the “no” branch of step 182), video decoder 30 may use a regular process for a non-blend PU to decode the PU (184) and terminate process (186).
[00177] Se o modo de mescla for usado (a ramificação “sim” da etapa 182), o decodificador de vídeo 30 pode determinar se DMVD for usada para determinar informações de movimento para a PU com base no valor do elemento de sintaxe pu_dmvd_flag (188). Se DMVD não for usada (a ramificação “não” da etapa 188), o decodificador de vídeo 30 pode usar um modo de mescla regular para decodificar a PU (190) e acabar o processo (186). Se DMVD for usada (a ramificação “sim” da etapa 188), o decodificador de vídeo 30 pode aplicar um processo de DMVD para determinar as informações de movimento para a PU (192) e acabar o processo (186).[00177] If the blend mode is used (the “yes” branch of step 182), the video decoder 30 may determine whether DMVD is used to determine motion information for the PU based on the value of the pu_dmvd_flag syntax element (188). If DMVD is not used (the “no” branch of step 188), the video decoder 30 may use a regular blend mode to decode the PU (190) and terminate the process (186). If DMVD is used (the “yes” branch of step 188), the video decoder 30 may apply a DMVD process to determine motion information for the PU (192) and terminate the process (186).
[00178] Em alguns casos, as técnicas de conversão em código de vídeo atuais podem ter determinadas limitações. Por exemplo, determinadas técnicas de DMVD podem ser consideradas como um subconjunto da tecnologia de FRUC. Embora DMVD tenha sido aplicada na conversão em código de vídeo, outras técnicas de FRUC eficazes não foram implantadas na conversão em código de vídeo, por exemplo, no ciclo de conversão em código de vídeo por um codificador de vídeo ou decodificador de vídeo. Além disso, embora técnicas diferentes de DMVD tenham sido propostas, a interação e sobreposição dessas técnicas não são exploradas no decodificador. Isto é, apenas um modo de DMVD foi usado em outros sistemas de conversão em código de vídeo. A forma em que usar uma pluralidade das técnicas DMVD para aprimorar adicionalmente a eficiência de conversão em código não foi estudada.[00178] In some cases, current video encode techniques may have certain limitations. For example, certain DMVD techniques may be considered a subset of FRUC technology. Although DMVD has been applied in video encode, other effective FRUC techniques have not been implemented in video encode, e.g., in the video encode cycle by a video encoder or video decoder. Furthermore, although different DMVD techniques have been proposed, the interaction and overlap of these techniques is not explored in the decoder. That is, only one mode of DMVD has been used in other video encode systems. How to use a plurality of DMVD techniques to further improve encode efficiency has not been studied.
[00179] Como outra potencial limitação, a DMVD pode se aplicas apenas a blocos relativamente grandes de dados de vídeo e, portanto, podem não ser muito eficazes. Aplicar esses métodos para blocos menores pode levar a sobrecarga significativa devido ao custo de sinalização. Em alguns casos, a faixa de busca por técnicas de DMVD tradicionais pode ser relativamente pequena, e apenas diversos pontos são buscados, por exemplo, 16 pontos. Além disso, conforme notado acima, a derivação de MV bidirecional com base em espelho não pode ser aplicada no caso de B de baixo atraso, devido ao fato de que duas imagens de referência com ordem de exibição antes e após uma imagem atual precisam ser identificadas e essa não é possível no caso de baixo atraso.[00179] As another potential limitation, DMVD can only be applied to relatively large blocks of video data and therefore may not be very effective. Applying these methods to smaller blocks may lead to significant overhead due to signaling cost. In some cases, the search range for traditional DMVD techniques may be relatively small, and only several points are searched, e.g., 16 points. Furthermore, as noted above, mirror-based bidirectional MV derivation cannot be applied in the low-delay B case, due to the fact that two reference pictures with display order before and after a current picture need to be identified, and this is not possible in the low-delay case.
[00180] Outra limitação potencial pode ser que, no decodificador, o custo de correspondência das técnicas de DMVD tradicionais podem apenas considerar distorção. Entretanto, a magnitude de vetor de movimento ainda não foi considerada no custo de correspondência, que pode levar à otimização local ou resultado impreciso da correspondência, por exemplo, devido ao ruído no domínio de pixel. Ademais, a complexidade das técnicas de DMVD tradicionais pode ser relativamente alta, no que diz respeito tanto a largura de banda de memória quanto complexidade computacional, especialmente devido ao fato de que a interpolação é necessária para vetores de movimento de pel fracionários durante a busca no decodificador.[00180] Another potential limitation may be that, at the decoder, the matching cost of traditional DMVD techniques may only consider distortion. However, the motion vector magnitude has not yet been considered in the matching cost, which may lead to local optimization or inaccurate matching result, e.g., due to noise in the pixel domain. Furthermore, the complexity of traditional DMVD techniques may be relatively high, with respect to both memory bandwidth and computational complexity, especially since interpolation is required for fractional pel motion vectors during search at the decoder.
[00181] As técnicas desta revelação podem abordar uma ou mais das limitações potenciais descritas acima. Em alguns exemplos, as técnicas para derivar informações de movimento podem ser aplicadas individualmente. Alternativamente, qualquer combinação das técnicas descritas no presente documento pode ser aplicada juntas. Conforme descrito no presente documento, as informações de índice de referência podem, em geral, ser consideradas como parte das informações de movimento. Em alguns casos, as informações de vetor de movimento e informações de índice de referência podem ser referidas como um conjunto de informações de movimento.[00181] The techniques of this disclosure may address one or more of the potential limitations described above. In some examples, the techniques for deriving motion information may be applied individually. Alternatively, any combination of the techniques described herein may be applied together. As described herein, reference index information may generally be considered part of the motion information. In some cases, the motion vector information and reference index information may be referred to as a set of motion information.
[00182] Determinadas técnicas desta revelação incluem selecionar um modo de derivação de movimento a partir de uma pluralidade de modos de derivação de movimento potenciais. Por exemplo, de acordo com os aspectos desta revelação, um conversor em código de vídeo (por exemplo, o codificador de vídeo 20 ou decodificador de vídeo 30) pode usar duas ou mais técnicas de derivação de movimento para fornecer melhor predição das informações de movimento em um decodificador de vídeo para evitar a sinalização das informações de movimento no fluxo de bits. As duas ou mais técnicas de derivação de movimento podem incluir, mas não são limitadas a correspondência bilateral, correspondência de modelo e qualquer outro método de correspondência. Essas técnicas podem, em geral, ser referidas como modos de derivação de informações de movimento ou modos de FRUC. Por conseguinte, deve ser compreendido que em alguns casos uma técnica referida como um modo de FRUC pode ao invés disso ser usada para interpolar informações de movimento para um bloco atual (por exemplo, ao invés de interpolar um novo bloco de dados de vídeo).[00182] Certain techniques of this disclosure include selecting a motion derivation mode from a plurality of potential motion derivation modes. For example, in accordance with aspects of this disclosure, a video codec converter (e.g., video encoder 20 or video decoder 30) may use two or more motion derivation techniques to provide better prediction of motion information at a video decoder to avoid flagging motion information in the bitstream. The two or more motion derivation techniques may include, but are not limited to, bilateral matching, template matching, and any other matching method. These techniques may generally be referred to as motion information derivation modes or FRUC modes. Accordingly, it should be understood that in some cases a technique referred to as a FRUC mode may instead be used to interpolate motion information into a current block (e.g., rather than interpolating a new block of video data).
[00183] Em alguns exemplos, quando múltiplos métodos de derivação de movimento foram usados, ao invés de ter métodos de otimização diferentes para diferentes métodos de derivação, o processo para encontrar o melhor movimento para dois ou mais dos métodos de derivação de movimento podem ser alinhados, no que diz respeito à seleção dos pontos iniciais para buscar e como buscar ao redor dos pontos iniciais. Por exemplo, o conversor em código de vídeo pode construir uma lista de candidato de vetor de movimento, selecionar um candidato inicial a partir da lista, e refinar o candidato com o uso das mesmas técnicas de correspondência e busca. Neste exemplo, a derivação de movimento bidirecional e derivação de movimento com base em correspondência de modelo pode ser usada de modo adaptativo no lado de decodificador.[00183] In some examples, when multiple motion derivation methods have been used, rather than having different optimization methods for different derivation methods, the process for finding the best motion for two or more of the motion derivation methods can be aligned, with respect to selecting the starting points to search and how to search around the starting points. For example, the video encoder can construct a list of motion vector candidates, select an initial candidate from the list, and refine the candidate using the same matching and searching techniques. In this example, bidirectional motion derivation and template matching-based motion derivation can be used adaptively on the decoder side.
[00184] De acordo com os aspectos desta revelação, a sinalização adicional no nível de bloco é introduzida para identificar qual método de derivação de movimento é usado para converter em código o bloco atual. Por exemplo, o conversor em código de vídeo pode converter em código um ou mais elementos de sintaxe para indicar se a derivação de informações de movimento está habilitada. O conversor em código de vídeo também pode codificar um ou mais elementos de sintaxe para indicar um modo de derivação de informações de movimento particular a partir de uma pluralidade de modos potenciais. Em outros exemplos, a técnica de derivação de informações de movimento a ser usada pode não ser sinalizada, mas derivada no decodificador de vídeo, por exemplo, com base em um modo de predição ou outras informações disponíveis antes de o bloco atual ser decodificado. Ema inda outros exemplos, o conversor em código de vídeo pode realizar múltiplos modos de derivação de informações de movimento e determinar uma média ponderada das previsões das duas ou mais técnicas de derivação para converter em código o bloco atual.[00184] In accordance with aspects of this disclosure, additional block-level signaling is introduced to identify which motion derivation method is used to encode the current block. For example, the video codec may encode one or more syntax elements to indicate whether motion information derivation is enabled. The video codec may also encode one or more syntax elements to indicate a particular motion information derivation mode from a plurality of potential modes. In other examples, the motion information derivation technique to be used may not be signaled, but derived at the video decoder, e.g., based on a prediction mode or other information available before the current block is decoded. In still other examples, the video codec may perform multiple motion information derivation modes and determine a weighted average of the predictions from the two or more derivation techniques to encode the current block.
[00185] Em um exemplo para fins de ilustração, um decodificador de vídeo, como decodificador de vídeo 30, pode primeiro identificar se deve aplicar um modo de interpolação de informações de movimento (por exemplo, com base em sintaxe no fluxo de bits). O decodificador de vídeo 30 pode, então, identificar qual modo de derivação de informações de movimento deve ser aplicado (por exemplo, com base em sintaxe no fluxo de bits). Em um exemplo, quando múltiplos métodos de derivação de movimento forem suportados simultaneamente, por exemplo, tanto correspondência bilateral estendida quanto modos de correspondência de modelo, um valor de índice pode ser sinalizado no fluxo de bits para indicar qual método de derivação de movimento está realmente em uso para um bloco atual. O índice pode ter três valores que incluem, correspondência bilateral e correspondência de modelo.[00185] In one example for purposes of illustration, a video decoder, such as video decoder 30, may first identify whether to apply a motion information interpolation mode (e.g., based on syntax in the bitstream). Video decoder 30 may then identify which motion information derivation mode to apply (e.g., based on syntax in the bitstream). In one example, when multiple motion derivation methods are supported simultaneously, e.g., both extended bilateral matching and template matching modes, an index value may be flagged in the bitstream to indicate which motion derivation method is actually in use for a current block. The index may have three values including, bilateral matching and template matching.
[00186] Quando se usa a conversão em código de CABAC, dois receptáculos podem ser usados para representar o índice. Os dois receptáculos podem ambos usar vizinhos espaciais como contextos ou apenas um dos mesmos usam contextos de vizinhos espaciais. Alternativamente, um ou ambos receptáculos podem usar outras informações convertidas em código, como a profundidade de CU, conforme os contextos. A binarização do índice pode ser predefinida, como “0” para desativo, “10” para correspondência bilateral estendida e “11” para correspondência de modelo. Alternativamente, a binarização do índice pode ser sinalizada em um cabeçalho de fatia ou derivado das informações convertidas em código como tipo de fatia, nível temporal ou informações de QP.[00186] When using CABAC coding, two bins may be used to represent the index. The two bins may both use spatial neighbors as contexts, or only one of them may use spatial neighbor contexts. Alternatively, one or both bins may use other coded information, such as CU depth, as contexts. Index binarization may be predefined, such as “0” for off, “10” for extended bilateral matching, and “11” for template matching. Alternatively, index binarization may be signaled in a slice header or derived from coded information such as slice type, temporal level, or QP information.
[00187] De acordo com os aspectos desta revelação, a sintaxe que indica um modo de derivação de informações de movimento pode estar inclusa com outro modo de conversão em código. Em um exemplo, um modo de derivação de informações de movimento pode ser considerado um candidato de mescla particular, assim indicado por um índice de mescla. Nesse caso, o tamanho da lista de candidato de mescla pode ser aumentada para acomodar o índice adicional. O índice de candidato de mescla para o modo de derivação de informações de movimento pode ser predefinido ou sinalizado no fluxo de bits.[00187] In accordance with aspects of this disclosure, syntax indicating a motion information derivation mode may be included with another code conversion mode. In one example, a motion information derivation mode may be considered a particular merge candidate, as indicated by a merge index. In this case, the size of the merge candidate list may be increased to accommodate the additional index. The merge candidate index for the motion information derivation mode may be predefined or signaled in the bit stream.
[00188] Em alguns exemplos, a correspondência bilateral estendida e correspondência de modelo são ambas suportadas com o modo de mescla. Nesses exemplos, quando o sinalizador de mescla for igual a 1, uma nova derivação de informações de movimento sinalizador é sinalizada para indicar se as informações de movimento são derivadas para a PU atual. O sinalizador pode usar o mesmo sinalizador de seu vizinho espacial, como blocos de superior e esquerdo como contextos de conversão em código de CABAC. Quando esse sinalizador estiver ativado, um segundo sinalizador é sinalizado para indicar qual modo de derivação de informações de movimento (por exemplo, correspondência bilateral estendida ou correspondência de modelo) é usado para derivar as informações de movimento do bloco. Quando a derivação de movimento estiver ativada, até mesmo quando o modo atual for o modo de mescla, nenhum índice de mescla é sinalizado. Alternativa ou adicionalmente, uma derivação de informações de movimento particular (por exemplo, como correspondência de modelo) não é permitida se a PU não for a primeira PU de uma CU na ordem de decodificação. Nesse caso, apenas o sinalizador precisa ser sinalizado para indicar se a correspondência bilateral estendida por usada para a PU ou não.[00188] In some examples, extended bilateral matching and template matching are both supported with blend mode. In these examples, when the blend flag is equal to 1, a new motion information derivation flag is signaled to indicate whether motion information is derived for the current PU. The flag may use the same flag as its spatial neighbor, such as top and left blocks as CABAC code conversion contexts. When this flag is set, a second flag is signaled to indicate which motion information derivation mode (e.g., extended bilateral matching or template matching) is used to derive the block's motion information. When motion derivation is set, even when the current mode is blend mode, no blend index is signaled. Alternatively or additionally, a particular motion information derivation (e.g., such as template matching) is not allowed if the PU is not the first PU of a CU in decoding order. In this case, only the flag needs to be flagged to indicate whether the extended bilateral correspondence by used for the PU or not.
[00189] Em outro exemplo, o modo de derivação de informações de movimento pode ser combinado com o modo de AMVP, por exemplo, no nível de PU. Em um exemplo, os elementos de sintaxe adicionais (por exemplo, um sinalizador adicional) pode ser sinalizado para indicar o modo de derivação de informações de movimento. Quando este modo estiver ativado, nenhum índice de AMVP pode ser sinalizado no fluxo de bits. De outro modo, um índice de AMVP regular pode ser sinalizado no fluxo de bits. Em outro exemplo, o modo de derivação de informações de movimento pode ser considerado como um candidato de AMVP particular, como o primeiro candidato de AMVP, em uma lista de candidato de AMVP. Em alguns casos, quando combinado com o modo de AMVP, um vetor de movimento pode não ser derivado em um nível de sub-PU.[00189] In another example, the motion information derivation mode may be combined with the AMVP mode, e.g., at the PU level. In one example, additional syntax elements (e.g., an additional flag) may be signaled to indicate the motion information derivation mode. When this mode is enabled, no AMVP index may be signaled in the bit stream. Otherwise, a regular AMVP index may be signaled in the bit stream. In another example, the motion information derivation mode may be considered as a particular AMVP candidate, such as the first AMVP candidate, in an AMVP candidate list. In some cases, when combined with the AMVP mode, a motion vector may not be derived at a sub-PU level.
[00190] De acordo com outros aspectos, um conversor em código de vídeo pode, de modo inicial, condicionalmente converter em código um sinalizador de nível de CU (por exemplo, para uma CU interconvertida em código) para indicar se todas as PUs dentro da CU atual usam o modo de derivação de informações de movimento. Em um exemplo, o sinalizador de nível de PU não é sinalizado. Em outro exemplo, quando o sinalizador de CU for igual a 0 (isto é, nem todas as PUs são convertidas em código com o modo), o sinalizador de nível de PU da primeira PU é sinalizado adicionalmente quando a segunda PU não inclui o sinalizador de nível de PU.[00190] According to other aspects, a video codec converter may initially conditionally code a CU level flag (e.g., for an inter-codec CU) to indicate whether all PUs within the current CU use the motion information derivation mode. In one example, the PU level flag is not signaled. In another example, when the CU flag is equal to 0 (i.e., not all PUs are codec converted with the mode), the PU level flag of the first PU is additionally signaled when the second PU does not include the PU level flag.
[00191] Em alguns exemplos, o modo de derivação de informações de movimento pode ser desabilitado para tipos de fatia específicos, níveis temporais, tipos de bloco ou tamanhos de bloco. Em um exemplo, a derivação de informações de movimento não é permitida quando a fatia atual inclui apenas imagens de referência cujas posições temporais são todas antes ou após aquela da imagem atual. Em outro exemplo, a derivação de informações de movimento não é permitida para PUs diferentes de 2Nx2N. Quando se desabilita a derivação de informações de movimento, nenhuma sinalização de nível de bloco relacionada à derivação de informações de movimento é necessária.[00191] In some examples, the motion information derivation mode may be disabled for specific slice types, temporal levels, block types, or block sizes. In one example, motion information derivation is not allowed when the current slice includes only reference pictures whose temporal positions are all before or after that of the current picture. In another example, motion information derivation is not allowed for PUs other than 2Nx2N. When motion information derivation is disabled, no block-level signaling related to motion information derivation is required.
[00192] De acordo com os aspectos desta revelação, habilitar ou desabilitar as técnicas de derivação de informações de movimento descritas no presente documento pode ser controlado por sintaxe de nível alto para fornecer uma troca de melhor complexidade versus eficiência de conversão em código e/ou flexibilidade de codificador/decodificador. Em um exemplo, um sinalizador pode ser sinalizado em um SPS, PPS, cabeçalho de fatia ou qualquer outro cabeçalho de sintaxe de nível alto para indicar o uso de um modo de derivação de informações de movimento. Quando esse sinalizador indicar que esse modo de conversão em código não está habilitado, os sinalizadores de nível de CU/PU podem não ser convertidos em código no fluxo de bits.[00192] In accordance with aspects of this disclosure, enabling or disabling the motion information derivation techniques described herein may be controlled by high-level syntax to provide a tradeoff of improved complexity versus code conversion efficiency and/or encoder/decoder flexibility. In one example, a flag may be flagged in an SPS, PPS, slice header, or any other high-level syntax header to indicate the use of a motion information derivation mode. When such a flag indicates that such a code conversion mode is not enabled, the CU/PU level flags may not be code converted in the bitstream.
[00193] Em alguns casos, sintaxe de alto nível pode adicional ou alternativamente ser usada para indicar outros parâmetros de derivação de informações de movimento. Por exemplo, um índice do algoritmo de busca que deve ser usado para buscar pelo vetor de movimento de nível de PU pode ser convertido em código em um fluxo de bits dentro de um SPS, PPS ou cabeçalho de fatia. Em alguns casos, um índice do algoritmo de busca que é usado para buscar o vetor de movimento de nível de sub-bloco pode ser convertido em código no fluxo de bits dentro de um SPS, PPS ou cabeçalho de fatia. Em alguns exemplos, para manter a complexidade computacional baixa no lado de decodificador, os números máximos de correspondência de bloco/partição no nível de PU, os números máximos da correspondência de bloco/partição no subnível de PU e/ou o número de correspondência total de ambos níveis de PU e sub-PU podem ser restringidos. Em alguns casos, esses números máximos podem ser predefinidos ou sinalizados no fluxo de bits.[00193] In some cases, high-level syntax may additionally or alternatively be used to indicate other motion information derivation parameters. For example, an index of the search algorithm that is to be used to search for the PU-level motion vector may be encoded in a bitstream within an SPS, PPS, or slice header. In some cases, an index of the search algorithm that is to be used to search for the sub-block-level motion vector may be encoded in the bitstream within an SPS, PPS, or slice header. In some examples, to keep computational complexity low on the decoder side, the maximum block/partition match numbers at the PU level, the maximum block/partition match numbers at the PU sub-level, and/or the total match number of both the PU and sub-PU levels may be constrained. In some cases, these maximum numbers may be predefined or signaled in the bitstream.
[00194] As técnicas desta revelação incluem uma variedade de técnicas para derivar informações de movimento. Em alguns exemplos, o conversor em código de vídeo pode determinar uma lista inicial (lista de candidato inicial) de entradas que contêm vetores de movimento, e um melhor ponto inicial é identificado como uma entrada a partir da lista inicial. As entradas que contêm vetores de movimento podem ser vetores de movimento de vizinhos espaciais, vizinhos temporais e/ou vetores de movimento derivados por outros meios. Alternativamente, o melhor ponto inicial (ou índice do melhor ponto inicial) pode ser sinalizado ao decodificador.[00194] The techniques of this disclosure include a variety of techniques for deriving motion information. In some examples, the video encoder may determine an initial list (initial candidate list) of inputs that contain motion vectors, and a best starting point is identified as an input from the initial list. The inputs that contain motion vectors may be motion vectors of spatial neighbors, temporal neighbors, and/or motion vectors derived by other means. Alternatively, the best starting point (or index of the best starting point) may be signaled to the decoder.
[00195] Em alguns exemplos, a lista inicial pode conter os vetores de movimento dos vizinhos espaciais e/ou temporais. Cada entrada da lista inicial pode ser um conjunto de informações de movimento uni-preditivo, incluindo um vetor de movimento e seu índice de referência. Em um exemplo, a lista inicial pode ser gerada da mesma forma que a lista de candidato de predição de movimento usada em outro modo de conversão em código, por exemplo, o mesmo que a lista de candidato de mescla. Neste caso, até dois vetores de movimento de cada candidato de mescla podem ser usados para gerar até duas entradas na lista inicial. Em alguns casos, as entradas na lista inicial podem ser geradas a partir de um subconjunto de candidatos de predição de movimento em uma lista usada em outro modo de conversão em código, por exemplo, um subconjunto da lista de candidato de mescla.[00195] In some examples, the seed list may contain the motion vectors of spatial and/or temporal neighbors. Each entry of the seed list may be a set of uni-predictive motion information, including a motion vector and its reference index. In one example, the seed list may be generated in the same manner as the motion prediction candidate list used in another coding mode, e.g., the same as the merge candidate list. In this case, up to two motion vectors from each merge candidate may be used to generate up to two entries in the seed list. In some cases, the entries in the seed list may be generated from a subset of motion prediction candidates in a list used in another coding mode, e.g., a subset of the merge candidate list.
[00196] Em outro exemplo, vetores de movimento adicionais podem ser adicionados na lista inicial, além daqueles na lista de candidatos de predição de movimento usada em outro modo de conversão em código, por exemplo, além daqueles na lista de candidato de mescla. Alternativa ou adicionalmente, os vetores de movimento dos vizinhos espaciais do bloco atual, como um bloco superior, um bloco esquerdo, um bloco direito superior, ou outro bloco pode ser adicionado à lista inicial. Em alguns casos, zero vetores de movimento com diferentes índices de imagem de referência também podem ser adicionados à lista.[00196] In another example, additional motion vectors may be added to the initial list in addition to those in the motion prediction candidate list used in another code conversion mode, e.g., in addition to those in the merge candidate list. Alternatively or additionally, motion vectors of the spatial neighbors of the current block, such as a top block, a left block, a top right block, or another block may be added to the initial list. In some cases, zero motion vectors with different reference image indices may also be added to the list.
[00197] Alternativa ou adicionalmente, os vetores de movimento dos blocos do bloco atual temporalmente colocalizados (por exemplo, um TMVP para o bloco atual) e/ou vetores de movimento dos blocos temporalmente colocalizados à direita superior do bloco atual nas imagens de referência podem ser adicionados à lista inicial. Antes de adicionar um vetor de movimento candidato particular à lista, os vetores de movimento podem ser escalonados ou não com base na distância temporal.[00197] Alternatively or additionally, motion vectors of temporally co-located blocks of the current block (e.g., a TMVP for the current block) and/or motion vectors of temporally co-located blocks to the upper right of the current block in the reference images may be added to the initial list. Prior to adding a particular candidate motion vector to the list, the motion vectors may be scaled or unscaled based on temporal distance.
[00198] De acordo com alguns aspectos, um vetor de movimento pode ser interpolado e/ou extrapolado de uma imagem de referência e pode ser adicionado na lista inicial. Por exemplo, antes da conversão em código de uma interimagem, um campo de movimento interpolado e/ou extrapolado da imagem pode ser gerado com base em suas imagens de referência com uma técnica similar a ME unilateral. O campo de movimento interpolado e/ou extrapolado de um bloco pode ser usado para a predição de MV ou usado como candidatos iniciais adicionais em uma busca de MV de um modo de derivação de informações de movimento. Observe que o campo de movimento interpolado e/ou extrapolado é salvo na unidade de 4 x 4 ou 8 x 8 ou qualquer outro nível de bloco predefinido/sinalizado, e uma PU pode conter múltiplos desses blocos de modo que os múltiplos MVs interpolados e/ou extrapolados possam ser usados.[00198] According to some aspects, a motion vector may be interpolated and/or extrapolated from a reference picture and may be added to the initial list. For example, prior to coding an interpicture, an interpolated and/or extrapolated motion field of the picture may be generated based on its reference pictures with a technique similar to one-sided ME. The interpolated and/or extrapolated motion field of a block may be used for MV prediction or used as additional initial candidates in a MV search of a motion information derivation mode. Note that the interpolated and/or extrapolated motion field is saved at the unit of 4 x 4 or 8 x 8 or any other predefined/signaled block level, and a PU may contain multiple such blocks such that multiple interpolated and/or extrapolated MVs may be used.
[00199] Em um exemplo, o campo de movimento de cada uma das imagens de referência em ambas as listas de referência é cruzado pelo bloco NxN, em que N pode ser predefinido como 4, 8 ou 16, ou sinalizado. Para cada bloco, se o movimento associado ao bloco que passa através de um bloco NxN na imagem atual e o bloco não foi atribuído qualquer movimento interpolado, o movimento do bloco de referência é escalonado para a imagem atual da mesma forma que aquele do escalonamento de MV em TMVP e o movimento escalonado é atribuído ao bloco no quadro atual. Se nenhum MV escalonado for atribuído a um bloco NxN, o movimento do bloco é marcado como indisponível no campo de movimento interpolado. Em outro exemplo, um bloco NxN na imagem atual pode ser atribuído múltiplos vetores de movimento no campo de movimento interpolado.[00199] In one example, the motion field of each of the reference pictures in both reference lists is crossed by the NxN block, where N may be predefined as 4, 8, or 16, or flagged. For each block, if the motion associated with the block passes through an NxN block in the current picture and the block has not been assigned any interpolated motion, the motion of the reference block is scaled to the current picture in the same manner as that of MV scaling in TMVP and the scaled motion is assigned to the block in the current frame. If no scaled MV is assigned to an NxN block, the motion of the block is marked as unavailable in the interpolated motion field. In another example, an NxN block in the current picture may be assigned multiple motion vectors in the interpolated motion field.
[00200] Em alguns casos, um conversor em código de vídeo pode remover um ou mais candidatos de uma lista de candidato. A remoção pode ser aplicada para remover entradas idênticas de uma lista inicial antes do processo de seleção de melhor ponto inicial, por exemplo, antes de calcular o custo de correspondência para cada candidato da lista.[00200] In some cases, a video encoder may remove one or more candidates from a candidate list. Pruning may be applied to remove identical entries from an initial list prior to the best starting point selection process, for example, prior to calculating the matching cost for each candidate in the list.
[00201] Em alguns casos, a primeira imagem em cada lista de referência pode ser usada como a imagem de referência, e candidatos de vetor de movimento são escalonados consequentemente se necessário. Nesse caso, o índice de referência de cada entrada da lista inicial pode ser modificado após o vetor de movimento ser escalonado com base, por exemplo, na distância de POC, semelhante ao TMVP. Em alguns casos, o índice de referência de cada entrada pode ser fixado a uma ou duas imagens e os vetores de movimento associados podem ser escalonados para essas imagens.[00201] In some cases, the first image in each reference list may be used as the reference image, and motion vector candidates are scaled accordingly if necessary. In this case, the reference index of each entry in the initial list may be modified after the motion vector is scaled based on, for example, the POC distance, similar to TMVP. In some cases, the reference index of each entry may be fixed to one or two images, and the associated motion vectors may be scaled to those images.
[00202] Em um exemplo, para a correspondência bilateral, um par de vetor de movimento, que é um conjunto de informações de movimento completo que contém ambos os vetores de movimento e seus índices de referência associados à lista de referência 0 e lista 1, respectivamente, pode ser obtido com base em cada entrada de uma lista de candidato inicial. Um conversor em código de vídeo pode, então, realizar a correspondência bilateral para todos os pares de MV gerados a partir de todas as entradas na lista inicial e selecionar o candidato que leva ao custo de correspondência mínimo.[00202] In one example, for bilateral matching, a motion vector pair, which is a complete motion information set that contains both motion vectors and their reference indices associated with reference list 0 and list 1, respectively, may be obtained based on each entry of an initial candidate list. A video codec converter may then perform bilateral matching for all MV pairs generated from all entries in the initial list and select the candidate that leads to the minimum matching cost.
[00203] Para gerar o par de MV, o conversor em código de vídeo pode selecionar uma entrada da lista inicial como o primeiro vetor de movimento e gerar o segundo vetor de movimento. Por exemplo, suponha que uma entrada contém o primeiro vetor de movimento atual MVA e está associada a um índice de referência (com valor de POC POCA) para uma primeira imagem de referência na lista de imagem de referência A (com A sendo igual a 0 ou 1). Supondo que o valor de POC da imagem atual é POCC, o conversor em código de vídeo pode ser configurado para encontrar uma segunda imagem de referência a partir da lista de imagem de referência B (com B sendo igual a 1-A) de modo que seu valor de POC POCB seja igual a (2 X POCC - POCA). Se nenhuma imagem de referência na lista de imagem de referência B tiver valor de POC igual a (2 X POCC-POC0), o conversor em código de vídeo pode selecionar a segunda imagem de referência verificando-se todas as imagens de referência na lista B de modo que o POCB não seja a um POCA e o valor absoluto de POCC-POCB seja o mínimo. Em suma, o conversor em código de vídeo pode selecionar uma imagem localizada no outro lado da imagem atual (na ordem de exibição) que tem a mesma distância de POC. Se não estiver disponível, o conversor em código de vídeo pode selecionar uma imagem no outro lado que tem a menor distância para a imagem atual. Se todas as imagens de referência estiverem no mesmo lado temporal que a primeira referência com POCA em comparação à imagem atual, o conversor em código de vídeo pode selecionar a referência que está temporalmente mais próxima à imagem atual e tem um POC além de POCA- Sob as suposições supracitadas, o conversor em código de vídeo pode escalonar o primeiro vetor de movimento MVA para gerar o segundo vetor de movimento associado à segunda imagem de referência, por exemplo, com base na diferença de POC como em TMVP. Alternativamente, quaisquer técnicas com base na suposição de MV bilateral podem ser usadas para gerar a segunda imagem de referência e seu vetor de movimento.[00203] To generate the MV pair, the video codec may select an entry from the initial list as the first motion vector and generate the second motion vector. For example, assume an entry contains the current first motion vector MVA and is associated with a reference index (with POC value POCA) for a first reference picture in reference picture list A (with A being equal to 0 or 1). Assuming that the POC value of the current picture is POCC, the video codec may be configured to find a second reference picture from reference picture list B (with B being equal to 1-A) such that its POC value POCB is equal to (2 X POCC - POCA). If no reference picture in the reference picture list B has POC value equal to (2 X POCC-POC0), the video codec can select the second reference picture by checking all the reference pictures in the list B such that the POCB is not a POCA and the absolute value of POCC-POCB is the minimum. In short, the video codec can select a picture located on the other side of the current picture (in the display order) that has the same POC distance. If it is not available, the video codec can select a picture on the other side that has the smallest distance to the current picture. If all reference pictures are on the same temporal side as the first reference with POCA compared to the current picture, the video encoder can select the reference that is temporally closest to the current picture and has a POC beyond POCA. Under the above assumptions, the video encoder can scale the first MVA motion vector to generate the second motion vector associated with the second reference picture, for example, based on the difference in POC as in TMVP. Alternatively, any techniques based on the bilateral MV assumption can be used to generate the second reference picture and its motion vector.
[00204] De acordo com alguns aspectos, dois vetores de movimento iniciais podem ser selecionados a partir da lista inicial. Cada um desses dois vetores de movimento é selecionado (no que diz respeito a um custo de correspondência mínimo) das entradas em dois subconjuntos da lista inicial. Cada subconjunto contém vetores de movimento associados ao índice de referência apenas à lista de imagem de referência 0 ou apenas à lista de imagem de referência 1.[00204] According to some aspects, two initial motion vectors may be selected from the initial list. Each of these two motion vectors is selected (with respect to a minimum matching cost) from entries in two subsets of the initial list. Each subset contains motion vectors associated with reference index only to reference image list 0 or only to reference image list 1.
[00205] De acordo com os aspectos desta revelação, um conversor em código de vídeo pode ser configurado para selecionar um candidato a partir de um candidato com base em um custo de correspondência associado ao vetor de movimento. Além disso, após selecionar um candidato a partir de uma lista de candidato, o conversor em código de vídeo pode refinar o vetor de movimento candidato para derivar informações de movimento para um bloco. Por exemplo, o vetor de movimento candidato pode ser usado para indicar um ponto inicial de uma imagem de referência, que pode, então, ser buscada para encontrar uma melhor correspondência com base em um custo de correspondência.[00205] In accordance with aspects of this disclosure, a video codec converter may be configured to select a candidate from a list of candidates based on a matching cost associated with the motion vector. Further, after selecting a candidate from a list of candidates, the video codec converter may refine the candidate motion vector to derive motion information for a block. For example, the candidate motion vector may be used to indicate a starting point of a reference image, which may then be searched to find a best match based on a matching cost.
[00206] De acordo com os aspectos desta revelação, uma variedade de custos de correspondência pode ser usada, por exemplo, quando se determina uma melhor correspondência para um candidato de vetor de movimento inicial e/ou quando se refina o candidato de vetor de movimento inicial. Em um exemplo, quando se busca o movimento de um bloco, um custo de MV pode estar incluso no custo de correspondência para evitar impacto negativo por ruído. Por exemplo, a porção de refinamento do vetor de movimento (por exemplo, diferença entre o MV atual e o centro de busca), denotada como MVR pode ser usada para calcular o custo. Neste exemplo, o custo pode ser w*(|MVR[0]|+|MVR[1]|), em que w é um fator de ponderação que pode ser sinalizado ou predefinido e MVR[0] e MVR[1] são os dois componentes de MVR. Alternativamente, o vetor de movimento refinado MV pode ser usado para calcular o custo, por exemplo, como w*(|MV[0]|+|MV[1]|).[00206] In accordance with aspects of this disclosure, a variety of matching costs may be used, for example, when determining a best match for an initial motion vector candidate and/or when refining the initial motion vector candidate. In one example, when searching for the motion of a block, an MV cost may be included in the matching cost to avoid negative impact by noise. For example, the refinement portion of the motion vector (e.g., difference between the current MV and the search center), denoted as MVR, may be used to calculate the cost. In this example, the cost may be w*(|MVR[0]|+|MVR[1]|), where w is a weighting factor that may be signed or predefined, and MVR[0] and MVR[1] are the two components of MVR. Alternatively, the refined motion vector MV may be used to calculate the cost, for example, as w*(|MV[0]|+|MV[1]|).
[00207] Em alguns exemplos, quando o bloco for relativamente pequeno, por exemplo, 4 x 4 ou menor, um bloco maior que cobre o bloco (por exemplo o bloco com limites estendidos) pode ser usado no cálculo de custo de correspondência a fim de suprimir o ruído. Por exemplo, quando se busca a melhor correspondência para um bloco 4 x 4, o custo de correspondência pode ser calculado com base no bloco 8 x 8 com um bloco de centro sendo o bloco.[00207] In some examples, when the block is relatively small, e.g., 4 x 4 or smaller, a larger block that covers the block (e.g., the block with extended boundaries) may be used in the matching cost calculation in order to suppress noise. For example, when searching for the best match for a 4 x 4 block, the matching cost may be calculated based on the 8 x 8 block with a center block being the block.
[00208] Em alguns exemplos, o custo de correspondência pode ser qualquer tipo de distância/custo, como a soma de diferenças absolutas (SAD), soma de erros quadráticos de predição (SSE), ou soma de diferenças de transformada absolutas (SATD). Para reduzir a complexidade computacional a SAD, a SSE, ou outro custo pode ser calculado com resolução reduzida nas direções horizontal, vertical ou ambas. Por exemplo, para um bloco 8 x 8, a SAD pode ser calculada com base em apenas fileiras ímpares. Em outro exemplo, o custo de correspondência pode ser calculado com base em um subconjunto selecionado de um bloco, por exemplo, apenas uma região central de a pode ser usada.[00208] In some examples, the matching cost may be any type of distance/cost, such as sum of absolute differences (SAD), sum of squared prediction errors (SSE), or sum of absolute transform differences (SATD). To reduce computational complexity, the SAD, SSE, or other cost may be calculated with reduced resolution in the horizontal, vertical, or both directions. For example, for an 8 x 8 block, the SAD may be calculated based on only odd rows. In another example, the matching cost may be calculated based on a selected subset of a block, e.g., only a central region of a may be used.
[00209] De acordo com os aspectos desta revelação, o processo de refinamento para a melhor correspondência (por exemplo, o candidato selecionado com base no custo de correspondência) pode ser realizado dentro de uma janela de busca predefinida ou sinalizada ao invés de sempre com o uso de uma janela pequena, por exemplo, dentro de uma janela de 2 x 2 (no presente contexto a unidade é pixel e vetores de movimento fracionários podem ser buscados dentro de uma janela) para alcançar uma busca de complexidade baixa porém eficaz. Neste exemplo, a faixa de uma janela de busca (por exemplo, com um tamanho de 16 x 16) pode ser predefinido ou sinalizado no fluxo de bits.[00209] In accordance with aspects of this disclosure, the refinement process to the best match (e.g., the candidate selected based on matching cost) may be performed within a predefined or signaled search window rather than always using a small window, e.g., within a 2 x 2 window (in the present context the unit is pixel and fractional motion vectors may be searched within a window) to achieve a low complexity but efficient search. In this example, the range of a search window (e.g., with a size of 16 x 16) may be predefined or signaled in the bitstream.
[00210] O algoritmo de busca para buscar pode ser predefinido, como uma busca completa, uma busca de três etapas, uma busca diamante, um algoritmo de busca descendente de gradiente com base em bloco (BBGDS) conforme descrito, por exemplo, em Lurng-Kuo Liu, Ephraim Feig, “A block-based gradient descent search algorithm for block motion estimation in video coding,” IEEE Trans. Circuits Syst. Video Technol. , vol. 6, páginas 419 a 422, agosto de 1996, ou um algoritmo busca diamante próximo ao centro não restrito (UCBDS) conforme descrito, por exemplo, em Jo Yew Tham, Surendra Ranganath, Maitreya Ranganath, and Ashraf Ali Kassim, “A novel unrestricted center-biased diamond search algorithm for block motion estimation,” IEEE Trans. Circuits Syst. Video Technol. , vol. 8, páginas 369 a 377, agosto de 1998.[00210] The search algorithm for searching may be predefined, such as a full search, a three-step search, a diamond search, a block-based gradient descent (BBGDS) search algorithm as described, for example, in Lurng-Kuo Liu, Ephraim Feig, “A block-based gradient descent search algorithm for block motion estimation in video coding,” IEEE Trans. Circuits Syst. Video Technol., vol. 6, pages 419-422, August 1996, or an unconstrained near-center diamond search (UCBDS) algorithm as described, for example, in Jo Yew Tham, Surendra Ranganath, Maitreya Ranganath, and Ashraf Ali Kassim, “A novel unrestricted center-biased diamond search algorithm for block motion estimation,” IEEE Trans. Circuits Syst. Video Technol., vol. 8, pages 369-377, August 1998.
[00211] Em alguns casos, diferentes técnicas de busca podem ser usadas em diferentes casos com base na sinalização ou critérios predefinidos. Por exemplo, para buscar uma PU inteira, uma busca diamante pode ser usada. Para buscar uma sub-PU, uma busca de diamante pequeno pode ser usada. Adicional ou alternativamente, a parada antecipada pode ser aplicada durante a busca, por exemplo, quando o custo de correspondência estiver abaixo de limites adaptativos ou predefinidos. Quando se usa a correspondência de modelo, uma restrição pode ser aplicada adicionalmente, a qual os dois vetores de movimento das duas listas de referência após o refinamento não apontarão para o mesmo bloco na mesma imagem de referência.[00211] In some cases, different search techniques may be used in different cases based on predefined flags or criteria. For example, to search an entire PU, a diamond search may be used. To search a sub-PU, a small diamond search may be used. Additionally or alternatively, early stopping may be applied during the search, for example, when the matching cost is below adaptive or predefined thresholds. When using template matching, a constraint may additionally be applied that the two motion vectors of the two reference lists after refinement will not point to the same block in the same reference image.
[00212] Conforme notado acima, esta revelação descreve determinadas técnicas de otimização para processos de DMVD existentes. Por exemplo, conforme descrito acima em relação ao exemplo da Figura 10, as técnicas incluem estender a correspondência bilateral a partir da predição bidirecional para a predição unidirecional. A correspondência bilateral também pode ser aplicada quando as posições temporais de duas imagens de referência forem antes ou após a posição temporal da fatia atual (isto é, os valores de POC são menores ou maiores do que aquele da imagem atual). Essas técnicas podem ser referidas coletivamente no presente documento como correspondência bilateral estendida.[00212] As noted above, this disclosure describes certain optimization techniques for existing DMVD processes. For example, as described above with respect to the example of Figure 10, the techniques include extending bilateral matching from bidirectional prediction to unidirectional prediction. Bilateral matching may also be applied when the temporal positions of two reference images are before or after the temporal position of the current slice (i.e., the POC values are less than or greater than that of the current image). These techniques may be collectively referred to herein as extended bilateral matching.
[00213] Outros aspectos desta revelação se referem às técnicas de interpolação. Por exemplo, de acordo com os aspectos desta revelação, as técnicas de interpolação podem ser simplificadas para reduzir a complexidade. Conforme notado acima em relação à Figura 2, a busca de movimento é tipicamente realizada com o uso da precisão de subpixel. Consequentemente, a interpolação é necessária para posições de pixel não inteiras. Para reduzir a complexidade computacional, de acordo com os aspectos desta revelação, um conversor em código de vídeo pode usar um filtro de interpolação com derivações mais curtas em comparação à interpolação de compensação de movimento normal. Em um exemplo, o conversor em código de vídeo pode usar um filtro de interpolação bilinear durante a busca de movimento, por exemplo, quando se aplica vetores de movimento candidatos iniciais ou se refina esses vetores de movimento. Em outro exemplo, o conversor em código de vídeo pode ser configurado para realizar inicialmente a busca de movimento com o uso das posições de pixel-inteiro, seguido pela realização de busca de movimento em posições de pixel fracionárias com a melhor correspondência de posição de pixel-inteiro como o ponto inicial.[00213] Other aspects of this disclosure relate to interpolation techniques. For example, in accordance with aspects of this disclosure, interpolation techniques may be simplified to reduce complexity. As noted above with respect to Figure 2, motion search is typically performed using subpixel precision. Consequently, interpolation is required for non-integer pixel positions. To reduce computational complexity, in accordance with aspects of this disclosure, a video codec may use an interpolation filter with shorter taps compared to normal motion compensation interpolation. In one example, the video codec may use a bilinear interpolation filter during motion search, e.g., when applying initial candidate motion vectors or refining those motion vectors. In another example, the video codec may be configured to initially perform motion search using integer pixel positions, followed by performing motion search at fractional pixel positions with the best integer pixel position match as the starting point.
[00214] Outras técnicas desta revelação se referem à derivação de informações de movimento para sub- blocos. Por exemplo, de acordo com os aspectos desta revelação, um conversor em código de vídeo pode dividir um bloco/PU em (não sobreposto) sub-PUs/sub-blocos com base em qualquer técnica de derivação de movimento. Quando uma PU for dividida em múltiplas sub-PUs de tamanho menor, o conversor em código de vídeo pode derivar um conjunto de informações de movimento único para cada sub-PU.[00214] Other techniques of this disclosure relate to deriving motion information for sub-blocks. For example, in accordance with aspects of this disclosure, a video codec may divide a block/PU into (non-overlapping) sub-PUs/sub-blocks based on any motion derivation technique. When a PU is divided into multiple sub-PUs of smaller size, the video codec may derive a unique set of motion information for each sub-PU.
[00215] Em um exemplo para fins de ilustração, uma PU 32x32 pode ser dividida em 16 sub-PUs 8 x 8. Neste exemplo, o conversor em código de vídeo pode determinar diferentes índices de referência e/ou vetores de movimento para cada uma das sub-PUs 8 x 8. Em outros exemplos, subPUs podem ter outros tamanhos, por exemplo, 4 x 4, 2 x 2 ou 1 x 1.[00215] In one example for purposes of illustration, a 32x32 PU may be divided into 16 8x8 sub-PUs. In this example, the video codec may determine different reference indices and/or motion vectors for each of the 8x8 sub-PUs. In other examples, subPUs may have other sizes, e.g., 4x4, 2x2, or 1x1.
[00216] Em alguns casos, o tamanho do sub- bloco/sub-PU pode ser predefinido e fixo independentemente do tamanho do bloco/PU. Em outros exemplos, uma profundidade dividida D para PUs pode ser definida, a qual controla o número de vezes que uma PU pode ser dividida de acordo com uma estrutura de árvore quadrática. Em alguns exemplos, um tamanho de sub-PU/sub-bloco mínimo pode ser predefinido ou sinalizado para indicar o tamanho alvo do sub-bloco/sub-PU para o qual o bloco atual/PU deverá ser dividido. O tamanho alvo pode ser o maior entre o tamanho de sub-PU/sub-bloco mínimo e o tamanho obtido dividindo-se o bloco atual D vezes de acordo com uma estrutura de árvore quadrática.[00216] In some cases, the sub-block/sub-PU size may be predefined and fixed independently of the block/PU size. In other examples, a split depth D for PUs may be defined, which controls the number of times a PU may be split according to a quadratic tree structure. In some examples, a minimum sub-PU/sub-block size may be predefined or flagged to indicate the target sub-block/sub-PU size to which the current block/PU should be split. The target size may be the greater of the minimum sub-PU/sub-block size and the size obtained by splitting the current block D times according to a quadratic tree structure.
[00217] De acordo com os aspectos desta revelação, um conversor em código de vídeo pode aproveitar as informações de movimento derivadas para uma PU quando se deriva informações de movimento para sub-PUs da PU. Por exemplo, o conversor em código de vídeo pode, para cada sub-PU, buscar por respectivas informações de movimento únicas estabelecendo-se as informações de movimento do bloco inteiro como o centro de busca (ponto de busca inicial). O conversor em código de vídeo pode, então, refinar o movimento para cada sub-PU. Alternativamente, o centro de busca de cada sub-PU pode ser derivado de uma lista de candidatos de ponto inicial.[00217] In accordance with aspects of this disclosure, a video codec converter may leverage the motion information derived for a PU when deriving motion information for sub-PUs of the PU. For example, the video codec converter may, for each sub-PU, search for its unique motion information by establishing the motion information of the entire block as the search center (starting search point). The video codec converter may then refine the motion for each sub-PU. Alternatively, the search center for each sub-PU may be derived from a list of starting point candidates.
[00218] Em outro exemplo, uma lista de candidato de vetor de movimento pode ser gerada para a sub- PU com o uso de qualquer uma das técnicas descritas no presente documento. O conversor em código de vídeo pode, então, verificar cada candidato na lista após verificar o centro de busca (por exemplo, o ponto de busca inicial derivado da PU). De acordo com os aspectos desta revelação, sub-PUs podem ser refinadas com o uso de qualquer uma das técnicas descritas no presente documento como sendo aplicáveis a blocos regulares. Em outros exemplos, o refinamento pode ser sempre ou condicionalmente pulado para sub-PUs após verificar a lista de candidato de vetor de movimento para uma melhor correspondência da forma descrita acima. Uma condição possível pode ser se a melhor correspondência permanece o candidato indicado pelas informações de movimento da PU (por exemplo, o ponto de busca inicial) após verificar a lista de candidato. Se for verdadeiro, o conversor em código de vídeo pode pular o refinamento. De outro modo, o conversor em código de vídeo pode realizar o refinamento.[00218] In another example, a motion vector candidate list may be generated for the sub-PU using any of the techniques described herein. The video codec may then check each candidate in the list after checking the search center (e.g., the starting search point derived from the PU). In accordance with aspects of this disclosure, sub-PUs may be refined using any of the techniques described herein as being applicable to regular blocks. In other examples, refinement may be always or conditionally skipped for sub-PUs after checking the motion vector candidate list for a best match in the manner described above. One possible condition may be whether the best match remains the candidate indicated by the PU's motion information (e.g., the starting search point) after checking the candidate list. If true, the video codec may skip the refinement. Otherwise, the video codec may perform the refinement.
[00219] Em alguns exemplos, a filtração de vetor de movimento pode ser realizada para sub-PU a fim de corrigir um vetor de movimento errado isolado. Por exemplo, um conversor em código de vídeo pode usar um filtro de mediana com o vetor de movimento da sub-PU atual e vetores de movimento de até quatro sub-PUs vizinhas. De acordo com os aspectos desta revelação, quando se aplica transformadas, o conversor em código de vídeo pode considerar a PU inteira como um bloco inteiro de modo que uma transformada possa cruzar os limites sub-PU. Em outros exemplos, o conversor em código de vídeo pode aplicar transformadas a cada sub-PU de modo que o tamanho de transformada não seja maior do que o tamanho de sub-PU. Em alguns casos, quando a correspondência de modelo for usada, um PU completo também pode ser dividido adicionalmente em sub-PUs menores. Para sub-PUs cujos vizinhos espaciais estão todos na PU atual (seus modelos não estão disponíveis), o conversor em código de vídeo pode estabelecer seus vetores de movimento aos vetores de movimento derivados para a PU inteira.[00219] In some examples, motion vector filtering may be performed for sub-PUs to correct an isolated erroneous motion vector. For example, a video codec converter may use a median filter with the motion vector of the current sub-PU and motion vectors of up to four neighboring sub-PUs. In accordance with aspects of this disclosure, when applying transforms, the video codec converter may consider the entire PU as an entire block such that a transform may cross sub-PU boundaries. In other examples, the video codec converter may apply transforms to each sub-PU such that the transform size is no larger than the sub-PU size. In some cases, when template matching is used, a complete PU may also be further divided into smaller sub-PUs. For sub-PUs whose spatial neighbors are all in the current PU (their templates are not available), the video codec converter may set their motion vectors to the derived motion vectors for the entire PU.
[00220] Em alguns exemplos, um conversor em código de vídeo pode converter em código elementos de sintaxe separados que indicam se um bloco particular é dividido. Em outro exemplo, todos os blocos 2Nx2N com modo de correspondência bilateral estendido são adicionalmente divididos em partições pequenas e nenhum sinalizador adicional é sinalizado. O tamanho do sub-bloco pode ser predefinido ou sinalizado. Alternativamente, o tamanho do sub-bloco pode se basear no tamanho do bloco atual. Por exemplo, o tamanho de sub-bloco pode ser derivado como o maior número dentre dois valores. O primeiro valor é um tamanho de sub-bloco predefinido ou sinalizado mínimo (por exemplo, como 4 x 4 ou 8 x 8). O segundo valor é um tamanho relativo ao bloco atual, como (S»d)x(S»d) em que SxS é o tamanho de bloco atual, enquanto d é um valor predefinido ou sinalizado para indicar a profundidade de árvore quadrática com a qual o bloco atual é dividido em sub- blocos. Nos exemplos acima, deve ser compreendido que o termo PU é usado de modo intercambiável com o termo bloco e o termo sub-PU é usado de modo intercambiável com o termo sub-bloco.[00220] In some examples, a video codec may encode separate syntax elements that indicate whether a particular block is split. In another example, all 2Nx2N blocks with extended bilateral matching mode are further split into small partitions and no additional flags are signaled. The subblock size may be predefined or signed. Alternatively, the subblock size may be based on the current block size. For example, the subblock size may be derived as the larger of two values. The first value is a predefined or signed minimum subblock size (e.g., such as 4 x 4 or 8 x 8). The second value is a size relative to the current block, such as (S»d)x(S»d) where SxS is the current block size, while d is a predefined or signed value to indicate the quadratic tree depth with which the current block is split into subblocks. In the above examples, it should be understood that the term PU is used interchangeably with the term block and the term sub-PU is used interchangeably with the term sub-block.
[00221] Conforme notado acima, as técnicas descritas no presente documento podem ser usadas de modo independente ou em combinação. Como um exemplo, um processo de derivação de informações de movimento associado a um modo de derivação de informações de movimento (por exemplo, um modo de correspondência bilateral estendido, um modo de correspondência de modelo ou qualquer outro modo) pode incluir três etapas, apesar de a terceira etapa poder ser condicionalmente realizada com base em tipo de fatia, nível temporal, tipo de bloco, tamanho de bloco, ou sintaxe definida no fluxo de bits.[00221] As noted above, the techniques described herein may be used independently or in combination. As an example, a motion information derivation process associated with a motion information derivation mode (e.g., an extended bilateral matching mode, a template matching mode, or any other mode) may include three steps, although the third step may be conditionally performed based on slice type, temporal level, block type, block size, or syntax defined in the bitstream.
[00222] Em uma primeira etapa, um conversor em código de vídeo pode formar uma lista de candidato inicial de conjuntos unipreditivos de informações de movimento para um bloco atual. O conversor em código de vídeo pode selecionar o candidato que tem o melhor ponto inicial a partir da lista, por exemplo, com base em um custo de correspondência. Em uma segunda etapa, o conversor em código de vídeo pode refinar o candidato selecionado para derivar as informações de movimento para o bloco atual. O refinamento também pode se basear em um custo de correspondência, conforme descrito no presente documento. O conversor em código de vídeo pode, então, opcionalmente dividir mais o bloco atual em sub-blocos conforme descrito no presente documento, e refinar cada vetor de movimento para cada sub-bloco. Finalmente, o conversor em código de vídeo pode aplicar compensação de movimento para o bloco atual com o uso das informações de movimento derivadas. Se a divisão tiver sido realizada, o conversor em código de vídeo pode aplicar a compensação de movimento em um sub- bloco por base de sub-bloco.[00222] In a first step, a video codec may form an initial candidate list of unipredictive sets of motion information for a current block. The video codec may select the candidate that has the best starting point from the list, for example, based on a matching cost. In a second step, the video codec may refine the selected candidate to derive the motion information for the current block. The refinement may also be based on a matching cost, as described herein. The video codec may then optionally further divide the current block into subblocks as described herein, and refine each motion vector for each subblock. Finally, the video codec may apply motion compensation to the current block using the derived motion information. If division has been performed, the video codec may apply motion compensation on a subblock by subblock basis.
[00223] Em um exemplo, o seguinte pseudocódigo pode ser usado para reconstruir um bloco com o uso de um modo de derivação de informações de movimento, em que as informações de movimento são derivadas por correspondência bilateral ou correspondência de modelo. Quando a correspondência bilateral for usada, o bloco é dividido adicionalmente em sub-blocos (observe que o MV no presente contexto inclui informações de referência): RECONSTRUIR BLOCO B (COM TAMANHO WXH) EM FRUC Construir lista inicial se B for correspondência bilateral { Encontrar a melhor correspondência (por exemplo, correspondência bilateral) na lista inicial como o ponto inicial com a medição de correspondência bilateral Refinar o MV com base no ponto inicial com correspondência bilateral para obter o vetor de movimento MVB para o bloco B para cada sub-bloco no bloco B { utilizar MVB como o ponto inicial, refinar MV para cada sub-bloco fazer compensação de movimento para o sub-bloco com as informações de MV derivadas } } senão // correspondência de modelo { Encontrar a melhor correspondência (por exemplo, correspondência de modelo) na lista inicial como o ponto inicial com a medição de correspondência de modelo Refinar o MV com base no ponto inicial com correspondência de modelo }[00223] In one example, the following pseudocode may be used to reconstruct a block using a motion information derivation mode, wherein the motion information is derived by bilateral matching or template matching. When bilateral matching is used, the block is further divided into sub-blocks (note that MV in the present context includes reference information): RECONSTRUCT BLOCK B (WITH SIZE WXH) INTO FRUC Construct initial list if B is bilateral matching { Find the best match (e.g. bilateral matching) in the initial list as the starting point with bilateral matching measurement Refine MV based on the bilateral matching starting point to obtain the motion vector MVB for block B for each sub-block in block B { Use MVB as the starting point, refine MV for each sub-block Do motion compensation for the sub-block with the derived MV information } } else // template matching { Find the best match (e.g. template matching) in the initial list as the starting point with template matching measurement Refine MV based on the template matching starting point }
[00224] Por conseguinte, de acordo com os aspectos desta revelação, o codificador de vídeo 20 ou decodificador de vídeo 30 pode determinar um modo de interpolação de informações de movimento para determinar informações de movimento para um bloco atual (um bloco atualmente sendo codificado ou decodificado). Com o uso do modo de interpolação de informações de movimento (por exemplo, correspondência bilateral, correspondência de modelo ou outra técnica), o codificador de vídeo 20 ou decodificador de vídeo 30 pode determinar o melhor vetor de movimento candidato em uma lista de candidatos de vetor de movimento, por exemplo, o vetor de movimento que identifica um bloco de referência que corresponde intimamente ao bloco atual. O codificador de vídeo 20 ou decodificador de vídeo 30 pode usar o vetor de movimento candidato para identificar uma janela de busca em uma imagem de referência.[00224] Accordingly, in accordance with aspects of this disclosure, video encoder 20 or video decoder 30 may determine a motion information interpolation mode to determine motion information for a current block (a block currently being encoded or decoded). Using the motion information interpolation mode (e.g., two-way matching, template matching, or other technique), video encoder 20 or video decoder 30 may determine the best candidate motion vector from a list of motion vector candidates, e.g., the motion vector that identifies a reference block that closely matches the current block. Video encoder 20 or video decoder 30 may use the candidate motion vector to identify a search window in a reference picture.
[00225] O codificador de vídeo 20 ou decodificador de vídeo 30 pode refinar o vetor de movimento candidato com base em um bloco de referência na janela de busca que corresponde inteiramente ao bloco atual. Isto é, o codificador de vídeo 20 ou decodificador de vídeo 30 pode determinar um novo vetor de movimento interpolado para o bloco atual com base no movimento entre o bloco de referência na janela de busca que corresponde intimamente ao bloco atual e ao bloco atual. O codificador de vídeo 20 ou decodificador de vídeo 30 pode, então, realizar a compensação de movimento para o bloco atual com o uso do vetor de movimento interpolado.[00225] The video encoder 20 or video decoder 30 may refine the candidate motion vector based on a reference block in the search window that closely matches the current block. That is, the video encoder 20 or video decoder 30 may determine a new interpolated motion vector for the current block based on the motion between the reference block in the search window that closely matches the current block and the current block. The video encoder 20 or video decoder 30 may then perform motion compensation for the current block using the interpolated motion vector.
[00226] Em alguns casos, o codificador de vídeo 20 ou o decodificador de vídeo 30 pode dividir o bloco atual em mais de um sub-bloco para fins de predição. Ademais, em outros exemplos, o codificador de vídeo 20 ou o decodificador de vídeo 30 pode realizar mais, menos ou uma disposição diferente de técnicas para interpolar informações de movimento.[00226] In some cases, video encoder 20 or video decoder 30 may divide the current block into more than one sub-block for prediction purposes. Furthermore, in other examples, video encoder 20 or video decoder 30 may perform more, fewer, or a different arrangement of techniques for interpolating motion information.
[00227] Por conseguinte, determinadas técnicas desta revelação podem ser generalizadas como uma ferramenta de conversão em código de nível de bloco que aproveita determinados conceitos do FRUC, dada a suposição de que um bloco atual de uma imagem atual pode ser considerado como previsto pelas imagens de referência de modo semelhante a uma imagem atual pode ser considerada como interpolada por imagens de referência em FRUC. Em um exemplo, apenas os processos com base em movimento são usados para a ferramenta de conversão em código de nível de bloco. Em outro exemplo, apenas os processos com base em pixel são usados para a ferramenta de conversão em código de nível de bloco. Em outro exemplo, os processos com base em movimento ou os processos com base em pixel são usados para um dado bloco. Em outro exemplo, tanto os processos com base em pixel quantos os processos com base em movimento são usados para a ferramenta de conversão em código de nível de bloco. Em outro exemplo, outra sintaxe pode ser reutilizada ou prevista a partir dos outros quadros temporais e podem ser utilizados para a ferramenta de conversão em código, como informações da árvore de conversão em código, SAO, ALF, RQT.[00227] Accordingly, certain techniques of this disclosure may be generalized as a block-level code conversion tool that leverages certain concepts of FRUC, given the assumption that a current block of a current image may be considered as predicted by reference images in a similar manner as a current image may be considered as interpolated by reference images in FRUC. In one example, only motion-based processes are used for the block-level code conversion tool. In another example, only pixel-based processes are used for the block-level code conversion tool. In another example, either motion-based processes or pixel-based processes are used for a given block. In another example, both pixel-based processes and motion-based processes are used for the block-level code conversion tool. In another example, other syntax may be reused or predicted from the other temporal frames and may be used for the code conversion tool, such as code conversion tree information, SAO, ALF, RQT.
[00228] A Figura 12 é um fluxograma que ilustra um processo exemplificativo para determinar um modo de derivação de informações de movimento para converter em código um bloco de dados de vídeo. O processo exemplificativo da Figura 12 é descrito em relação a um conversor em código de vídeo, que pode ser configurado como codificador de vídeo 20, decodificador de vídeo 30 ou outro processador.[00228] Figure 12 is a flowchart illustrating an exemplary process for determining a mode of deriving motion information for encoding a block of video data. The exemplary process of Figure 12 is described with respect to a video encoder, which may be configured as a video encoder 20, a video decoder 30, or another processor.
[00229] No exemplo da Figura 12, o conversor em código de vídeo pode selecionar um modo de derivação de movimento a partir de uma pluralidade de modos de derivação de movimento (200). Em geral, cada um dos modos de derivação de movimento pode incluir realizar uma busca de movimento por um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual. Por exemplo, em relação à correspondência de modelo, o conversor em código de vídeo pode realizar uma busca de movimento para identificar um modelo em uma imagem atual (por exemplo, um primeiro conjunto de dados de referência) que corresponde ao modelo em uma imagem de referência (por exemplo, um segundo conjunto de dados de referência). Em outro exemplo, em relação à movimentação bilateral, o conversor em código de vídeo pode realizar uma busca de movimento para identificar um bloco de referência em uma primeira imagem de referência (por exemplo, um primeiro conjunto de dados de referência) que corresponde a um segundo bloco de referência em uma segunda imagem de referência (por exemplo, um segundo conjunto de dados de referência). Os modos de derivação de movimento exemplificativos podem incluir, um modo de estimativa de movimento unilateral, um modo de correspondência bilateral, um modo de correspondência de modelo ou um modo com base em espelho.[00229] In the example of Figure 12, the video codec converter may select a motion derivation mode from a plurality of motion derivation modes (200). In general, each of the motion derivation modes may include performing a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block. For example, with respect to template matching, the video codec converter may perform a motion search to identify a template in a current picture (e.g., a first set of reference data) that corresponds to the template in a reference picture (e.g., a second set of reference data). In another example, with respect to bilateral motion, the video codec converter may perform a motion search to identify a reference block in a first reference picture (e.g., a first set of reference data) that corresponds to a second reference block in a second reference picture (e.g., a second set of reference data). Exemplary motion derivation modes may include, a unilateral motion estimation mode, a bilateral matching mode, a template matching mode, or a mirror-based mode.
[00230] De acordo com alguns aspectos, o conversor em código de vídeo pode selecionar o modo de derivação de informações de movimento de acordo com um ou mais elementos de sintaxe inclusos em um fluxo de bits. Por exemplo, um decodificador de vídeo pode analisar sintaticamente e decodificar o um ou mais elementos de sintaxe a partir do fluxo de bits e determinar o modo de derivação de informações de movimento com base na sintaxe. Um codificador de vídeo pode testar a pluralidade de modos de derivação de informações de movimento, selecionar o modo que tem o melhor custo de RD e codificar o um ou mais elementos de sintaxe no fluxo de bits que indica o modo selecionado.[00230] According to some aspects, the video codec converter may select the motion information derivation mode according to one or more syntax elements included in a bit stream. For example, a video decoder may parse and decode the one or more syntax elements from the bit stream and determine the motion information derivation mode based on the syntax. A video encoder may test the plurality of motion information derivation modes, select the mode that has the best RD cost, and encode the one or more syntax elements in the bit stream indicating the selected mode.
[00231] O conversor em código de vídeo pode determinar informações de movimento para o bloco com o uso do modo de derivação de movimento selecionado, que pode incluir determinar informações de movimento inicial com o uso do modo selecionado (202) e usar um processo de otimização para refinar as informações de movimento inicial (204). Por exemplo, o conversor em código de vídeo pode construir uma lista de candidato de vetor de movimento com candidatos para determinar informações de movimento iniciais. As informações de movimento inicial podem fornecer um ponto inicial para refinar as informações de movimento, conforme descrito no presente documento.[00231] The video codec may determine motion information for the block using the selected motion derivation mode, which may include determining initial motion information using the selected mode (202) and using an optimization process to refine the initial motion information (204). For example, the video codec may construct a motion vector candidate list with candidates for determining initial motion information. The initial motion information may provide a starting point for refining the motion information as described herein.
[00232] O conversor em código de vídeo pode, então, converter em código o bloco com o uso das informações de movimento determinadas e sem converter em código a sintaxe representativa das informações de movimento (206). Por exemplo, em casos em que o conversor em código de vídeo compreende um decodificador de vídeo, o decodificador de vídeo pode determinar um bloco de referência em uma imagem de referência com base nas informações de movimento determinadas, decodificar dados residuais para cada sub-bloco a partir de um fluxo de bits codificado e combinar o bloco de referência determinado e residual decodificado para reconstruir o bloco atual. Em casos em que o conversor em código de vídeo compreende um codificador de vídeo, o codificador de vídeo pode codificar dados residuais para o bloco atual em um fluxo de bits codificado sem índices de referência de conversão em código ou vetores de movimento para os dados residuais.[00232] The video codec may then encode the block using the determined motion information and without encoding the syntax representing the motion information (206). For example, in cases where the video codec comprises a video decoder, the video decoder may determine a reference block in a reference picture based on the determined motion information, decode residual data for each sub-block from an encoded bitstream, and combine the determined reference block and decoded residual to reconstruct the current block. In cases where the video codec comprises a video encoder, the video encoder may encode residual data for the current block into an encoded bitstream without encode reference indices or motion vectors for the residual data.
[00233] A Figura 13 é um fluxograma que ilustra um processo exemplificativo para derivar um vetor de movimento para converter em código um bloco de dados de vídeo. O processo exemplificativo da Figura 13 é descrito em relação a um conversor em código de vídeo, que pode ser configurado como codificador de vídeo 20, decodificador de vídeo 30 ou outro processador.[00233] Figure 13 is a flowchart illustrating an exemplary process for deriving a motion vector for encoding a block of video data. The exemplary process of Figure 13 is described with respect to a video encoder, which may be configured as a video encoder 20, a video decoder 30, or another processor.
[00234] O conversor em código de vídeo pode gerar uma lista de candidato de vetor de movimento (210). A lista de vetor de movimento candidato pode incluir um ou mais candidatos de vetor de movimento que podem ser usados para derivar informações de movimento para o bloco atual. Em alguns exemplos, os candidatos de vetor de movimento podem ser determinados a partir dos blocos espacialmente vizinhos, blocos temporais ou a partir de outros locais.[00234] The video codec may generate a motion vector candidate list (210). The motion vector candidate list may include one or more motion vector candidates that may be used to derive motion information for the current block. In some examples, motion vector candidates may be determined from spatially neighboring blocks, temporal blocks, or from other locations.
[00235] O conversor em código de vídeo pode determinar um candidato a partir da lista para derivar informações de movimento (212). Em alguns exemplos, o conversor em código de vídeo pode realizar um ou mais cálculos de custo para determinar o candidato com o uso de um modo de derivação de movimento particular. Por exemplo, o conversor em código de vídeo pode determinar um custo de correspondência para um primeiro conjunto de dados de referência e um segundo conjunto de dados de referência, que pode incluir um custo associado aos respectivos vetores de movimento, conforme descrito no presente documento.[00235] The video codec may determine a candidate from the list for deriving motion information (212). In some examples, the video codec may perform one or more cost calculations to determine the candidate using a particular motion derivation mode. For example, the video codec may determine a matching cost for a first set of reference data and a second set of reference data, which may include a cost associated with respective motion vectors, as described herein.
[00236] O conversor em código de vídeo pode, então, determinar o vetor de movimento derivado com base no candidato determinado (214). Por exemplo, o conversor em código de vídeo pode refinar o candidato determinado para determinar o vetor de movimento derivado com o uso do modo de derivação de movimento. O conversor em código de vídeo pode, então, converter em código o bloco com o uso do vetor de movimento derivado (216). Por exemplo, em casos em que o conversor em código de vídeo compreende um decodificador de vídeo, o decodificador de vídeo pode determinar um bloco de referência em uma imagem de referência com base no vetor de movimento derivado, decodificar dados residuais para cada sub-bloco a partir de um fluxo de bits codificado e combinar o bloco de referência determinado e residual decodificado para reconstruir o bloco atual. Em casos em que o conversor em código de vídeo compreende um codificador de vídeo, o codificador de vídeo pode codificar dados residuais para o bloco atual em um fluxo de bits codificado sem converter em código o vetor de movimento derivado.[00236] The video codec may then determine the derived motion vector based on the determined candidate (214). For example, the video codec may refine the determined candidate to determine the derived motion vector using the motion derivation mode. The video codec may then encode the block using the derived motion vector (216). For example, in cases where the video codec comprises a video decoder, the video decoder may determine a reference block in a reference picture based on the derived motion vector, decode residual data for each subblock from an encoded bitstream, and combine the determined reference block and decoded residual to reconstruct the current block. In cases where the video codec comprises a video encoder, the video encoder may encode residual data for the current block into an encoded bitstream without encoding the derived motion vector.
[00237] A Figura 14 é um fluxograma que ilustra um processo exemplificativo para derivar informações de movimento para sub-blocos de um bloco de dados de vídeo. O processo exemplificativo da Figura 14 é descrito em relação a um conversor em código de vídeo, que pode ser configurado como codificador de vídeo 20, decodificador de vídeo 30 ou outro processador.[00237] Figure 14 is a flowchart illustrating an exemplary process for deriving motion information for sub-blocks of a block of video data. The exemplary process of Figure 14 is described with respect to a video codec, which may be configured as a video encoder 20, a video decoder 30, or another processor.
[00238] O conversor em código de vídeo pode derivar informações de movimento para um bloco atual (220). Em alguns exemplos, o conversor em código de vídeo pode usar qualquer combinação de técnicas de derivação de informações de movimento descritas no presente documento para derivar as informações de movimento. Por exemplo, o conversor em código de vídeo pode qualquer uma das técnicas descritas no presente documento para realizar uma busca de movimento para um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora do bloco atual (por exemplo, correspondência de modelo, correspondência bilateral ou similares).[00238] The video codec may derive motion information for a current block (220). In some examples, the video codec may use any combination of motion information derivation techniques described herein to derive the motion information. For example, the video codec may use any of the techniques described herein to perform a motion search for a first set of reference data that corresponds to a second set of reference data outside of the current block (e.g., template matching, bilateral matching, or the like).
[00239] De acordo com os aspectos desta revelação, o conversor em código de vídeo também pode dividir o bloco em uma pluralidade de sub-blocos (222). O conversor em código de vídeo pode derivar separadamente informações de movimento para respectivos sub-blocos que compreendem uma busca de movimento para um primeiro conjunto de dados de referência que corresponde a um segundo conjunto de dados de referência fora de cada respectivo sub-bloco (224). Novamente, o conversor em código de vídeo pode usar quaisquer técnicas descritas no presente documento para derivar as informações de movimento como, por exemplo, correspondência de modelo, correspondência bilateral, ou similares. Por exemplo, o conversor em código de vídeo pode usar o vetor de movimento derivado como um ponto inicial para derivar informações de movimento para cada um dos sub-blocos, e pode refinar adicionalmente as informações de movimento derivadas com o uso de qualquer combinação das técnicas de derivação de informações de movimento descritas no presente documento.[00239] In accordance with aspects of this disclosure, the video codec may also divide the block into a plurality of sub-blocks (222). The video codec may separately derive motion information for respective sub-blocks comprising a motion search for a first set of reference data that corresponds to a second set of reference data out of each respective sub-block (224). Again, the video codec may use any techniques described herein to derive the motion information, such as template matching, bilateral matching, or the like. For example, the video codec may use the derived motion vector as a starting point to derive motion information for each of the sub-blocks, and may further refine the derived motion information using any combination of the motion information derivation techniques described herein.
[00240] O conversor em código de vídeo pode, então, converter em código cada um dos sub-blocos com base em informações de movimento derivadas sem elementos de sintaxe de conversão em código representativos das informações de movimento (226). Por exemplo, em casos em que o conversor em código de vídeo compreende um decodificador de vídeo, o decodificador de vídeo pode determinar um bloco de referência em uma imagem de referência para cada sub-bloco com base nas informações de movimento determinadas, decodificar dados residuais para cada sub-bloco a partir de um fluxo de bits codificado e combinar o bloco de referência determinado e residual decodificado para reconstruir cada sub-bloco. Em casos em que o conversor em código de vídeo compreende um codificador de vídeo, o codificador de vídeo pode codificar dados residuais para cada sub-bloco em um fluxo de bits codificado sem índices de referência de conversão em código ou vetores de movimento para os dados residuais.[00240] The video codec may then code-convert each of the sub-blocks based on derived motion information without code-conversion syntax elements representative of the motion information (226). For example, in cases where the video codec comprises a video decoder, the video decoder may determine a reference block in a reference picture for each sub-block based on the determined motion information, decode residual data for each sub-block from an encoded bitstream, and combine the determined reference block and decoded residual to reconstruct each sub-block. In cases where the video codec comprises a video encoder, the video encoder may encode residual data for each sub-block into an encoded bitstream without code-conversion reference indices or motion vectors for the residual data.
[00241] Deve ser reconhecido que, dependendo do exemplo, determinadas ações ou eventos de quaisquer uma das técnicas descritas no presente documento pode ser realizada em uma sequência diferente, podem ser adicionados, mesclados ou deixados totalmente de fora (por exemplo, nem todos as ações e eventos descritos são necessários para a prática das técnicas). Ademais, em determinados exemplos, ações ou eventos podem ser realizados de modo concomitante, por exemplo, através de processamento de múltiplos threads, processamento interrupto ou em múltiplos processadores, em vez de sequencialmente.[00241] It should be recognized that, depending on the example, certain actions or events of any of the techniques described herein may be performed in a different sequence, may be added, merged, or left out entirely (e.g., not all of the actions and events described are necessary to practice the techniques). Furthermore, in certain examples, actions or events may be performed concurrently, e.g., through multithreaded processing, interrupt processing, or on multiple processors, rather than sequentially.
[00242] Em um ou mais exemplos, as funções descritas podem ser implantadas em hardware, software, firmware ou qualquer combinação dos mesmos. Caso implantadas em software, as funções podem ser armazenadas ou transmitidas como uma ou mais instruções ou código em uma mídia legível por computador e executadas por uma unidade de processamento com base em hardware. As mídias legíveis por computador podem incluir mídias de armazenamento legíveis por computador, que correspondem a uma mídia tangível como mídias de armazenamento de dados ou mídias de comunicação que incluem qualquer mídia que facilite a transferência de um programa de computador a partir de um lugar para outro, por exemplo, de acordo com um protocolo de comunicação. Desta forma, as mídias legíveis por computador podem, em geral, corresponder a (1) mídias de armazenamento legíveis por computador tangíveis que são não transitórias ou (2) uma mídia de comunicação como um sinal ou onda portadora. As mídias de armazenamento de dados podem ser quaisquer mídias disponíveis que possam ser acessadas por um ou mais computadores ou um ou mais processadores para recuperar instruções, estruturas de dados e/ou código para a implantação das técnicas descritas nesta revelação. Um produto de programa de computador pode incluir uma mídia legível por computador.[00242] In one or more examples, the functions described may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functions may be stored or transmitted as one or more instructions or code on a computer-readable medium and executed by a hardware-based processing unit. Computer-readable media may include computer-readable storage media, which correspond to a tangible medium such as data storage media, or communication media, which includes any media that facilitates the transfer of a computer program from one place to another, for example, in accordance with a communication protocol. Thus, computer-readable media may generally correspond to (1) tangible computer-readable storage media that are non-transitory or (2) a communication medium such as a signal or carrier wave. Data storage media may be any available media that can be accessed by one or more computers or one or more processors to retrieve instructions, data structures, and/or code for implementing the techniques described in this disclosure. A computer program product may include computer-readable media.
[00243] A título de exemplo, e não de limitação, tais mídias de armazenamento legíveis por computador podem compreender RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco óptico, armazenamento de disco magnético ou outros dispositivos de armazenamento magnético, memória flash, ou qualquer outra mídia que 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 é denominada adequadamente como mídia legível por computador. Por exemplo, se as instruções forem transmitidas a partir de um site da web, servidor ou outra fonte remota com o uso de um cabo coaxial, cabo de fibra óptica, par trançado, linha de inscrição digital (DSL) ou tecnologias sem fio como infravermelho, rádio e micro-ondas, então, o cabo coaxial, o cabo de fibra óptica, o par trançado, a DSL ou as tecnologias sem fio como infravermelho, rádio e microondas estão incluídos na definição de mídia. Deve ser compreendido, entretanto, que as mídias de armazenamento legíveis por computador e as mídias de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outras mídias transitórias, mas são, em vez disso, direcionadas para mídias de armazenamento não transitórias e tangíveis. Disco magnético e disco óptico, conforme usado no presente documento, incluem disco compacto (CD), disco laser, disco óptico, disco versátil digital (DVD), disquete e disco Blu-ray, em que os discos magnéticos reproduzem geralmente os dados de modo magnético, enquanto os discos ópticos reproduzem os dados de modo óptico com lasers. As combinações do supracitado também devem ser abrangidas pelo escopo das mídias legíveis por computador.[00243] By way of example, and not limitation, such computer-readable storage media may include RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, flash memory, or any other media that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer. In addition, any connection is properly referred to as computer-readable media. For example, if instructions are transmitted from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of media. It should be understood, however, that computer-readable storage media and data storage media do not include connections, carrier waves, signals, or other transient media, but are instead intended to refer to non-transitory, tangible storage media. Magnetic disk and optical disk, as used herein, include compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk, and Blu-ray Disc, where magnetic disks generally reproduce data magnetically, while optical disks reproduce data optically with lasers. Combinations of the foregoing shall also fall within the scope of computer-readable media.
[00244] As instruções podem ser executadas por um ou mais processadores, como um ou mais processadores de sinal digital (DSPs), microprocessadores para propósitos gerais, circuitos integrados específicos para aplicativo (ASICs), matrizes de porta programável em campo (FPGAs) ou outro conjunto de circuitos lógicos equivalentes integrados ou distintos. Consequentemente, o termo "processador", conforme usado no presente documento pode se referir a qualquer uma das estruturas supracitadas ou qualquer outra estrutura adequada para a implantação das técnicas descritas no presente documento. Adicionalmente, em alguns aspectos, a funcionalidade descrita no presente documento pode ser fornecida dentro de módulos dedicados de hardware e/ou software configurados para codificação e decodificação, ou incorporados em um codec combinado. Além disso, as técnicas podem ser totalmente implantadas em um ou mais circuitos ou elementos lógicos.[00244] The instructions may be executed by one or more processors, such as one or more digital signal processors (DSPs), general purpose microprocessors, application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or other equivalent integrated or discrete logic circuitry. Accordingly, the term "processor" as used herein may refer to any of the foregoing structures or any other structure suitable for implementing the techniques described herein. Additionally, in some aspects, the functionality described herein may be provided within dedicated hardware and/or software modules configured for encoding and decoding, or incorporated into a combined codec. Furthermore, the techniques may be implemented entirely within one or more circuits or logic elements.
[00245] As técnicas desta revelação podem ser implantadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um monofone, 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 dos dispositivos configurados para realizar as técnicas reveladas, mas não exigem necessariamente a realização por diferentes unidades de hardware. Em vez disso, conforme descrito acima, várias unidades podem ser combinadas em uma unidade de hardware de codec ou fornecidas por uma coleção de unidades de hardware interoperativas, incluindo um ou mais processadores, conforme descrito acima, em combinação com software e/ou firmware adequados.[00245] The techniques of this disclosure may be implemented in a wide variety of devices or apparatus, including a handset, an integrated circuit (IC), or a set of ICs (e.g., a chipset). Various components, modules, or units are described in this disclosure to emphasize functional aspects of devices configured to perform the disclosed techniques, but do not necessarily require performance by different hardware units. Rather, as described above, multiple units may be combined into a codec hardware unit or provided by a collection of interoperable hardware units including one or more processors as described above in combination with suitable software and/or firmware.
[00246] Vários exemplos foram descritos. Esses e outros exemplos estão no escopo das reivindicações a seguir.[00246] Various examples have been described. These and other examples are within the scope of the following claims.
Claims (11)
Applications Claiming Priority (7)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201562139572P | 2015-03-27 | 2015-03-27 | |
| US62/139,572 | 2015-03-27 | ||
| US201562182367P | 2015-06-19 | 2015-06-19 | |
| US62/182,367 | 2015-06-19 | ||
| US15/080,479 | 2016-03-24 | ||
| US15/080,479 US10958927B2 (en) | 2015-03-27 | 2016-03-24 | Motion information derivation mode determination in video coding |
| PCT/US2016/024334 WO2016160609A1 (en) | 2015-03-27 | 2016-03-25 | Motion information derivation mode determination in video coding |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| BR112017020635A2 BR112017020635A2 (en) | 2018-06-26 |
| BR112017020635B1 true BR112017020635B1 (en) | 2024-09-03 |
Family
ID=
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| AU2020207821B2 (en) | Motion vector derivation in video coding | |
| BR112021005357A2 (en) | improvements to history-based motion vector predictor | |
| BR112017020635B1 (en) | METHOD FOR DECODING VIDEO DATA, METHOD AND APPARATUS FOR ENCODING VIDEO DATA, AND COMPUTER READABLE MEMORY | |
| BR112017020632B1 (en) | METHODS AND DEVICE FOR PROCESSING VIDEO DATA AND COMPUTER READABLE MEMORY | |
| BR112017020627B1 (en) | MOTION VECTOR DERIVATION IN VIDEO CODING | |
| HK1240440A1 (en) | Motion vector derivation in video coding | |
| HK1240441A1 (en) | Motion information derivation mode determination in video coding |